/** Permanent Illusion **/ #define NAME "@@query_name:$this_player()$@@" /* gives greater flexibilty */ string illusion_name; string illusion_short; status permanent(string str, mixed alt_type) { int level, i; string file; if(!str || sscanf(str,"illusion %s", str) != 1) { write("permanent illusion <item>?\n"); return 1; } if(!alt_type) alt_type = "illusion"; level = (objectp(alt_type)) ? (int)alt_type->query_cast_level() : (int)call_other(this_player(),"query_"+alt_type); file = file_name(this_object()); sscanf(file, "%s#%d", file, i); this_player()->load_spell(({ "target", str, "name", "Permanent Illusion", "sphere", alt_type, "cost", 25, "damage", level, "immune", "illusion", "level", 25, "cast time", 2, "spell object", file, "casting msg", "Colours begin to swirl around you.\n", "casting msg room", "You see colours swirl about "+ NAME +".\n", /* other spell options... "msg target", 0, "msg room", 0, "msg caster", 0, "passive", "component", 0, */ })); return 1; } /* call when this object is cloned to target */ void illusion3(string str) { object ob, env; env = environment(); write("You weave the illusion about "); write((living(env) ? "" : "the ")+ (string)env->query_name() +".\n"); ob = clone_object("obj/shadows/illusion"); ob->illusion(env, illusion_name, illusion_short, str); destruct(this_object()); } void illusion2(string str) { illusion_short = str; write("Illusion description is what you see when you 'look at'.\n"); write("Illusion Description> "); input_to("illusion3"); } void illusion1(string str) { illusion_name = str; write("Illusion short is what you see when you do an 'inventory'.\n"); write("Illusion Short> "); input_to("illusion2"); } status cast_spell(object caster, object target, object previous, int dmg) { object ob; if((ob = (object)target->query_illusion_object())) { write("Your illusion disrupts an existing illusion.\n"); destruct(ob); destruct(this_object()); return 1; } if(!living(target) /* an item */ || ((int)caster->query_spell_dmg() == dmg /* npc failed save */ && target->query_npc())) { write("Illusion name is the name you give to 'get', or to"+ " 'look at', etc.\n"); write("Illusion Name> "); input_to("illusion1"); } else { write("Nothing Happens...\n"); destruct(this_object()); } return 1; } status id(string str) { return str == "spell" || str == "illusion"; } /* Native Mode Move */ #include <move.h>