/*** Vampiric Touch, Drakken Jan 1994 ***/
#define NAME "@@query_name:$this_player()$@@" /* gives greater flexibilty */
#define TARG "@@query_name:$this_object()$@@"
status vampiric(string target, mixed alt_type) {
int dam, i;
string file;
if(!target || !(target == "touch" || sscanf(target,"touch %s",target))) {
notify_fail("vampiric touch?\n");
return 0;
}
if(target == "touch") target = 0;
if(!alt_type) alt_type = "necromancy";
dam = (objectp(alt_type))
? (int)alt_type->query_cast_level()
: (int)call_other(this_player(),"query_"+alt_type);
dam *= (random(5) + 1);
if(dam > 40) dam = 40;
file = file_name(this_object());
sscanf(file,"%s#%d",file,i);
this_player()->load_spell(({
"target", target,
"name", "Vampiric Touch",
"sphere", alt_type,
"cost", 12,
"damage", dam,
"level", 12,
"cast time", 2,
"spell object", file,
"casting msg", ({
"Your hand is encompassed with a blue glowing aura.\n",
}),
"casting msg room", ({
NAME +"'s hand is encompassed with a blue "+
"glowing aura.\n",
}),
"msg target", "You feel a sudden chill throughout your body.\n",
"msg room", TARG +" shrieks in pain.\n",
"component", "corpse#skeleton#bone",
}));
return 1;
}
/******************************************************************/
/* when cloned to target */
cast_spell(object caster,object target,object prev,int dmg){
if(dmg == (int)caster->query_spell_dmg()) { /* did not save */
if(dmg < 25)
caster->adj_hp(dmg);
else
caster->adj_hp(25);
caster->adj_alignment(-dmg);
}
destruct(this_object());
return 0; /* do damage */
}
/* Native Mode Move */
#include <move.h>