#if defined(macintosh)
#include <types.h>
#else
#include <sys/types.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include "merc.h"
#include "interp.h"
#include "magic.h"
#include "recycle.h"
/* energy spells */
void spell_etheral_fist( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
int dam;
dam = dice( level, 12 );
if ( saves_spell( level, victim, DAM_ENERGY ) )
dam /= 2;
act("A fist of black, otherworldly ether rams into $N, leaving $M looking stunned!"
,ch,NULL,victim,TO_NOTVICT);
damage( ch, victim, dam, sn,DAM_ENERGY,TRUE);
return;
}
void spell_spectral_furor( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
int dam;
dam = dice( level, 8 );
if ( saves_spell( level, victim, DAM_ENERGY ) )
dam /= 2;
act("The fabric of the cosmos strains in fury about $N!",
ch,NULL,victim,TO_NOTVICT);
damage( ch, victim, dam, sn,DAM_ENERGY,TRUE);
return;
}
void spell_disruption( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
int dam;
dam = dice( level, 9 );
if ( saves_spell( level, victim, DAM_ENERGY ) )
dam /= 2;
act("A weird energy encompasses $N, causing you to question $S continued existence.",
ch,NULL,victim,TO_NOTVICT);
damage( ch, victim, dam, sn,DAM_ENERGY,TRUE);
return;
}
void spell_sonic_resonance( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
int dam;
dam = dice( level, 7 );
if ( saves_spell( level, victim, DAM_ENERGY ) )
dam /= 2;
act("A cylinder of kinetic energy enshrouds $N causing $S to resonate.",
ch,NULL,victim,TO_NOTVICT);
damage( ch, victim, dam, sn,DAM_ENERGY,TRUE);
WAIT_STATE( victim, skill_table[sn].beats );
return;
}
/* mental */
void spell_mind_wrack( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
int dam;
dam = dice( level, 7 );
if ( saves_spell( level, victim, DAM_MENTAL ) )
dam /= 2;
act("$n stares intently at $N, causing $N to seem very lethargic.",
ch,NULL,victim,TO_NOTVICT);
damage( ch, victim, dam, sn,DAM_MENTAL,TRUE);
return;
}
void spell_mind_wrench( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
int dam;
dam = dice( level, 9 );
if ( saves_spell( level, victim, DAM_MENTAL ) )
dam /= 2;
act("$n stares intently at $N, causing $N to seem very hyperactive.",
ch,NULL,victim,TO_NOTVICT);
damage( ch, victim, dam, sn,DAM_MENTAL,TRUE);
return;
}
/* acid */
void spell_sulfurus_spray( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
int dam;
dam = dice( level, 7 );
if ( saves_spell( level, victim, DAM_ACID ) )
dam /= 2;
act("A stinking spray of sulfurous liquid rains down on $N." ,
ch,NULL,victim,TO_NOTVICT);
damage( ch, victim, dam, sn,DAM_ACID,TRUE);
return;
}
void spell_caustic_font( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
int dam;
dam = dice( level, 9 );
if ( saves_spell( level, victim, DAM_ACID ) )
dam /= 2;
act("A fountain of caustic liquid forms below $N. The smell of $S degenerating tissues is revolting! ",
ch,NULL,victim,TO_NOTVICT);
damage( ch, victim, dam, sn,DAM_ACID,TRUE);
return;
}
/* Electrical */
void spell_galvanic_whip( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
int dam;
dam = dice( level, 7 );
if ( saves_spell( level, victim, DAM_LIGHTNING ) )
dam /= 2;
act("$n conjures a whip of ionized particles, which lashes ferociously at $N.",
ch,NULL,victim,TO_NOTVICT);
damage( ch, victim, dam, sn,DAM_LIGHTNING,TRUE);
return;
}
void spell_magnetic_trust( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
int dam;
dam = dice( level, 8 );
if ( saves_spell( level, victim, DAM_LIGHTNING ) )
dam /= 2;
act("An unseen energy moves nearby, causing your hair to stand on end!",
ch,NULL,victim,TO_NOTVICT);
damage( ch, victim, dam, sn,DAM_LIGHTNING,TRUE);
return;
}
void spell_quantum_spike( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
int dam;
dam = dice( level, 9 );
if ( saves_spell( level, victim, DAM_LIGHTNING ) )
dam /= 2;
act("$N seems to dissolve into tiny unconnected particles, then is painfully reassembled.",
ch,NULL,victim,TO_NOTVICT);
damage( ch, victim, dam, sn,DAM_LIGHTNING,TRUE);
return;
}
/* negative */
void spell_hand_of_undead( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
int dam;
if ( saves_spell( level, victim,DAM_NEGATIVE) )
{
send_to_char("You feel a momentary chill.\n\r",victim);
return;
}
if ( (IS_NPC(victim) && IS_SET(victim->act,ACT_UNDEAD)))
{
send_to_char("Your victim is unaffected by hand of undead.\n\r",ch);
return;
}
if ( victim->level <= 2 )
{
dam = ch->hit + 1;
}
else
{
dam = dice( level, 10 );
victim->mana /= 2;
victim->move /= 2;
ch->hit += dam / 2;
}
send_to_char("You feel your life slipping away!\n\r",victim);
act("$N is grasped by an incomprehensible hand of undead!",
ch,NULL,victim,TO_NOTVICT);
damage( ch, victim, dam, sn,DAM_NEGATIVE,TRUE);
return;
}
void spell_precision( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
AFFECT_DATA af;
if ( IS_AFFECTED ( victim, AFF_PRECISION ) )
{
if ( victim == ch )
send_to_char("You are already affected.\n\r", ch);
else
act("$N is already affected.",ch,NULL,victim,TO_CHAR);
return;
}
af.where = TO_AFFECTS;
af.type = sn;
af.level = level;
af.duration = level*4;
af.location = APPLY_HITROLL;
af.modifier = victim->hitroll;
af.bitvector = AFF_PRECISION;
affect_to_char( victim, &af );
send_to_char("You feel more lethal!\n\r", victim);
if ( ch != victim )
act("$N looks more lethal.",ch,NULL,victim,TO_CHAR);
return;
}
/* holy */
void spell_wrath_of_god( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
CHAR_DATA *victim = (CHAR_DATA *) vo;
int dam;
dam = number_range(4500,6500);
send_to_char("You feel your life slipping away!\n\r",victim);
act("$N is grasped by an incomprehensible hand of undead!",
ch,NULL,victim,TO_NOTVICT);
damage( ch, victim, dam, sn,DAM_HOLY,TRUE);
return;
}
// Templar
void spell_knightshield( int sn, int level, CHAR_DATA *ch, void *vo, int target )
{
OBJ_DATA *item;
char buf [MAX_STRING_LENGTH];
int hitroll = 0;
int damroll = 0;
int armor = 0;
item = create_object( get_obj_index( OBJ_VNUM_KNIGHTSHIELD ), 1 );
free_string(item->name);
sprintf(buf,"Templar Shield of %s",god_table[ch->god].name);
item->name = str_dup(buf);
free_string(item->short_descr);
sprintf(buf,"Templar Shield of %s",god_table[ch->god].name);
item->short_descr = str_dup(buf);
free_string(item->description);
sprintf(buf,"Templar Shield of %s",god_table[ch->god].name);
item->description = str_dup(buf);
// SET_BIT( item->item_type, ITEM_ARMOR );
item->item_type = ITEM_ARMOR;
SET_BIT( item->wear_flags, ITEM_TAKE );
SET_BIT( item->wear_flags, ITEM_WEAR_SHIELD );
SET_BIT( item->extra_flags, ITEM_MAGIC);
SET_BIT( item->extra_flags, ITEM_GLOW);
item->value[0] = 200; // pierce
item->value[1] = 200; // bash
item->value[2] = 200; // slash
item->value[3] = 200; // magic
item->level = ch->level;
item->condition = 100;
item->weight = 10;
if (ch->level <= 50) hitroll = 50;
else hitroll = ch->level;
if (ch->level <= 50) damroll = 50;
else damroll = ch->level;
armor = number_range(-200,-300);
add_affect( item, APPLY_HITROLL, hitroll );
add_affect( item, APPLY_DAMROLL, damroll );
obj_to_char(item,ch);
act("$p fades into existance in your hand.", ch, item, NULL, TO_CHAR);
act("$p fades into existance in $n's hand.", ch, item, NULL, TO_ROOM);
return;
}