/* Resist */ inherit "inherit/base/base_obj"; inherit "inherit/timer"; string type; /* type of resistance */ #define NAME "@@query_name:$this_player()$@@" /* gives greater flexibilty */ status resist(string spell_type, mixed alt_type) { int time, i; string file, targ; string *casting, *casting_rm; if(!spell_type) { notify_fail("resist cold, fire, light, death, draining,\n"+ " earth, air, water, acid, disease,\n"+ " fear, charm, darkness?\n"); return 0; } sscanf(spell_type,"%s %s",spell_type, targ); if(!targ) targ = (string)this_player()->query_name(1); switch(spell_type) { case "cold": casting = ({ "You draw all the warmth from your surroundings.\n", "You direct the warmth from around you to protect "+ capitalize(targ)+".\n", }), casting_rm = ({ "You feel the air around you become colder...\n", "You feel cold is being drawn toward "+ capitalize(targ) +" by "+ NAME +".\n", }); break; case "fire": casting = ({ "You draw all the cold from your surroundings.\n", "You direct the cold air from around you to protect "+ capitalize(targ) +".\n", }); casting_rm = ({ "You feel the air around you become warmer...\n", NAME +" draws the cold air away to protect "+ capitalize(targ)+" from fire.\n", }); break; case "poison": case "light": case "death": case "draining": case "earth": case "air": case "water": case "acid": case "disease": case "fear": case "charm": case "darkness": case "lightning": casting = ({ "You chant slowly.\n", "You call on your god to protect "+ capitalize(targ) +" from "+ spell_type +".\n", }); casting_rm = ({ NAME +" chants slowly.\n", "@@query_pronoun:$this_player()$@@ calls to @@query_possessive:"+ "$this_player()$@@ god to protect "+ capitalize(targ) +" from "+ spell_type +".\n", }); break; default: notify_fail("resist cold, fire, light, death, draining,\n"+ " earth, air, water, acid, disease,\n"+ " fear, charm, darkness?\n"); return 0; break; } if(!alt_type) alt_type = "protection_sphere"; time = (objectp(alt_type)) ? (int)alt_type->query_cast_level() /* wands */ : (int)call_other(this_player(),"query_"+alt_type); file = file_name(this_object()); sscanf(file,"%s#%d",file,i); this_player()->load_spell(({ "target", targ, "name", "Resist "+ capitalize(spell_type), "sphere", alt_type, "damage", time, "cost", 9, "level", 9, "spell object", file, "cast time", 3, "casting msg", casting, "casting msg room", casting_rm, "component", "shield", "passive", })); return 1; } /***********************************************************************/ /* when cloned */ void time_out() { tell_object(environment(),"You feel the Resist "+ type +" spell wear away...\n"); environment()->remove_spell_immunity(type); ::time_out(); } void dispel_magic() { time_out(); } status drop(status quit) { if(quit) time_out(); return 1; } status cast_spell(object caster,object target,object prev,int time) { object cold; string Type; Type = (string)caster->query_spell_name(); sscanf(Type,"Resist %s",Type); type = lower_case(Type); cold = present("resist "+ type, target); if(cold) { if(caster != target) { write("You extend the time of the Resist "+ Type +" spell on "+ (string)target->query_name()+".\n"); } else { write("You extend the time of your Resist "+ Type +" spell.\n"); } cold->adj_time(time * 30); destruct(this_object()); return 1; } if(caster != target) { write("You protect "+ target->query_name() +" from "+ Type +".\n"); } tell_object(target, "You feel protected from "+ Type +".\n"); target->add_spell_immunity(type); set_name("resist "+ type); set_alt_name("spell"); set_alias_name("resist"); set_alt_extra_long("You are protected from "+ Type +" spells.\n"); set_extra_long("@@query_name:$environment()$@@ is protected from "+ Type +".\n"); adj_time(time * 30); return 1; } /* Native Mode Move */ #include <move.h>