/* These are new additions for unused classes in an attempt to make people want to play them.
These skills/spells are for use in Asgardian Nightmare only, and written by Bree. */
#if defined( macintosh )
#include <types.h>
#include <time.h>
#else
#include <sys/types.h>
#include <errno.h>
#include <unistd.h>
#include <sys/time.h>
#endif
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include "merc.h"
#include "clan.h"
#include "magic.h"
#include "tables.h"
int focus_dam args ((CHAR_DATA *ch));
/*
Make changes for new spells in:
Const.c
Magic.h
Magtype.c
*/
/*
Name: Madness
Type: Spell - Orange Magic
Information: This is a modified berserk/frenzy with
better stats for weaker magic classes.
Class: Conjurer
*/
void spell_madness(int sn, int level, CHAR_DATA *ch, void *vo,int target)
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
AFFECT_DATA af;
if (is_affected(victim,sn) || IS_AFFECTED(victim,AFF_BERSERK))
{
if (victim == ch)
send_to_char("You are already raging around in madness.\n\r",ch);
else
act("$N is already raging around in madness.",ch,NULL,victim,TO_CHAR);
return;
}
if (is_affected(victim,skill_lookup("calm")))
{
if (victim == ch)
send_to_char("Why don't you just relax for a while?\n\r",ch);
else
act("$N doesn't look like $e wants to fight anymore.",
ch,NULL,victim,TO_CHAR);
return;
}
if ((IS_GOOD(ch) && !IS_GOOD(victim)) ||
(IS_NEUTRAL(ch) && !IS_NEUTRAL(victim)) ||
(IS_EVIL(ch) && !IS_EVIL(victim))
)
{
act("Your god doesn't seem to like $N",ch,NULL,victim,TO_CHAR);
return;
}
af.where = TO_AFFECTS;
af.type = sn;
af.level = level;
af.duration = level / 2;
af.modifier = level / 4;
af.bitvector = AFF_BERSERK;
af.location = APPLY_HITROLL;
affect_to_char(victim,&af);
af.location = APPLY_DAMROLL;
affect_to_char(victim,&af);
af.modifier = 10 * (level / 36);
af.location = APPLY_AC;
affect_to_char(victim,&af);
send_to_char("You are filled with insane madness!\n\r",victim);
act("$n gets an insane look in $s eyes!",victim,NULL,NULL,TO_ROOM);
}
/*
Name: Fireward
Type: Spell - Red Magic
Information: Add's resist fire to a player.
Class: Voodan
*/
void spell_fireward( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
AFFECT_DATA af;
if ( is_affected( ch, sn ) )
{
if (victim == ch)
send_to_char("You are already resisting the flames.\n\r",ch);
else
act("$N begins to ward away the flames.",ch,NULL,victim,TO_CHAR);
return;
}
af.where = TO_RESIST;
af.type = sn;
af.level = level;
af.duration = 0;
af.location = APPLY_NONE;
af.modifier = 0;
af.bitvector = RES_FIRE;
affect_to_char( victim, &af );
act( "$n looks stronger against the flame.", victim, NULL, NULL, TO_ROOM );
send_to_char( "You begin warding off the flames.\n\r", victim );
return;
}
/*
Name: Divine Intervention
Type: Spell - White
Information:
Class: Paladin
*/
void spell_interven( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
AFFECT_DATA af;
if ( is_affected( ch, sn ) )
{
if (victim == ch)
send_to_char("You are already channeling your divine intervention.\n\r",ch);
else
act("$N glows white and suddenly looks more divine!.",ch,NULL,victim,TO_CHAR);
return;
}
af.where = TO_AFFECTS;
af.type = sn;
af.level = ch->level;
af.duration = level/3.5;
af.bitvector = 0;
af.location = APPLY_DAMROLL;
af.modifier = 10;
af.duration = level/3.5;
af.bitvector = 0;
affect_to_char(ch,&af);
af.location = APPLY_REGEN;
af.modifier = 25;
af.duration = level/3.5;
affect_to_char(ch,&af);
af.location = APPLY_HIT;
af.modifier = 100;
af.duration = level/3.5;
affect_to_char(ch,&af);
act( "$n prays for divine intervention!", victim, NULL, NULL, TO_ROOM );
send_to_char( "You gain the help of your god!\n\r", victim );
return;
}
/*
Name: acid ward
Type: Spell - Red Magic
Information: Add's resist acid to a player.
Class: Alchemist
*/
void spell_acidward( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
AFFECT_DATA af;
if ( is_affected( ch, sn ) )
{
if (victim == ch)
send_to_char("You are already resisting acid.\n\r",ch);
else
act("$N begins to ward away acid.",ch,NULL,victim,TO_CHAR);
return;
}
af.where = TO_RESIST;
af.type = sn;
af.level = level;
af.duration = 0;
af.location = APPLY_NONE;
af.modifier = 0;
af.bitvector = RES_ACID;
affect_to_char( victim, &af );
act( "$n looks stronger against acid.", victim, NULL, NULL, TO_ROOM );
send_to_char( "You begin warding off acid.\n\r", victim );
return;
}
/*
Name: ice ward
Type: Spell - Blue Magic
Information: Add's resist ice to a player.
Class: Warlock
*/
void spell_iceward( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
AFFECT_DATA af;
if ( is_affected( ch, sn ) )
{
if (victim == ch)
send_to_char("You are already resisting ice.\n\r",ch);
else
act("$N begins to ward away ice.",ch,NULL,victim,TO_CHAR);
return;
}
af.where = TO_RESIST;
af.type = sn;
af.level = level;
af.duration = 0;
af.location = APPLY_NONE;
af.modifier = 0;
af.bitvector = RES_COLD;
affect_to_char( victim, &af );
act( "$n looks stronger against ice.", victim, NULL, NULL, TO_ROOM );
send_to_char( "You begin warding off ice.\n\r", victim );
return;
}
//Voodan sense vitality by fesdor, works with do_sense.
void spell_sense_vitality( int sn, int level, CHAR_DATA *ch, void *vo,int target )
{
AFFECT_DATA af;
CHAR_DATA *victim = (CHAR_DATA *) vo;
int chance = 100;
chance -= (get_curr_stat(victim, STAT_CON)*3);
chance += (get_curr_stat(ch, STAT_CON)*2);
if ( victim == ch )
{
send_to_char("You can't establish a link with yourself!\n\r",ch);
return;
}
if (IS_NPC(victim))
{
send_to_char("You can only use this spell on players.\n\r",ch);
return;
}
if ( ( ch->fighting == NULL ) && ( !IS_NPC( ch ) ) && ( !IS_NPC( victim ) ) )
{
ch->attacker = TRUE;
victim->attacker = FALSE;
}
if (is_affected( victim , gsn_sense ))
{
send_to_char("Someone is already linked to that person.\n\r",ch);
return;
}
else if ( is_affected( ch , gsn_sense) )
{
send_to_char("You are already attuned to someone's vitals!\n\r",ch);
return;
}
else if (number_percent() < chance)
{
af.where = TO_AFFECTS;
af.type = gsn_sense;
af.level = ch->level;
af.duration = ch->level/5;
af.location = APPLY_REGEN;
af.modifier = victim->hit/100;
af.bitvector = 0;
affect_to_char(ch, &af);
af.modifier = 0;
affect_to_char(victim, &af);
send_to_char("{cYou feel a chill as some strange force invades your very soul!{x\n\r",victim);
send_to_char("{RYou feel a second pulse in your fingertips as you become attuned to their vitals!{x\n\r",ch);
return;
}
else
{
send_to_char("{CYou feel slightly disturbed but it fades.{x\n\r",victim);
send_to_char("{rYour heart begins to beat for two, but the feeling subsides.{x\n\r",ch);
return;
}
return;
}