// /bin/user/_blast.c // from the Nightmare mudlib // A very powerful destruction spell // Created by Forlock on some strange date system that Descartes loves. // 930417 17 april 1993 stardate 46835.9 170493 #include <std.h> inherit DAEMON; int cmd_blast (string str) { int mag, points, final, ran, temps; object ob; this_player()->set_magic_round(); if(!str) { ob = (object)this_player()->query_current_attacker(); if(!ob) { notify_fail("Blast what?\n"); return 0; } } else ob = present(str, environment(this_player())); if(!ob) ob = parse_objects(environment(this_player()), str); if(!ob || !living(ob)) { notify_fail("No "+str+" here.\n"); return 0; } if(environment(this_player())->query_property("no magic")) { notify_fail("A magic force prevents your spell.\n"); return 0; } if((mag = (int)this_player()->query_skill("magic attack")) < 30) { notify_fail("You are not skilled enough for this spell.\n"); return 0; } if((points = (int)this_player()->query_mp()) <50) { notify_fail("Too low on magic power.\n"); return 0; } if(this_player()->query_ghost()) { notify_fail("Your voice is hollow.\n"); return 0; } if(this_player()->query_casting()) return 1; if(!ob->kill_ob(this_player(),0)) return 1; if(ob->query_property("no blast")) { notify_fail(sprintf("%s is immune to your magic!\n", ob->query_cap_name())); return 0; } if(environment(this_player())->query_property("no attack")) { notify_fail("A magic force prevents you from casting your spell.\n"); return 0; } write("%^BLUE%^%^BOLD%^You summon up the forces of your life " "energy and blast them " "at your opponent!\n%^RESET%^You feel drained, and cannot move."); points = (int)this_player()->query_mp(); points += mag - ((int)ob->query_stats("wisdom"))*5; if(points < 0) points = 1; temps = random(200-mag)/10; if(temps <7) temps =7; if(!(this_player()->query_property("no paralyze"))) this_player()->set_paralyzed(temps); this_player()->add_skill_points("magic attack", temps); this_player()->add_mp(-((int)this_player()->query_mp())); if(!(ran = random(4))) write("Your magic powers fail!"); final = points * ran; this_player()->set_casting(final); tell_room(environment(this_player()), "%^BLUE%^%^BOLD%^"+ this_player()->query_cap_name()+" throws the energy of " "the universe at "+(string)ob->query_cap_name()+"!", ({ ob, this_player()})); tell_object(ob, "%^BLUE%^%^BOLD%^"+this_player()->query_cap_name()+ " throws the energy of the universe at you."); return 1; } void help() { write("Syntax: <blast [(living)]>\n\n" "Throws the collective energy of the universe at the living " "object named. Doing this takes a great deal of energy, " "and will leave you temporarily immobile until the affects " "ware off. This spell takes all of your magic points to cast.\n"); }