// chill touch // Kataan ability // partially cloned from _freeze.c by Bohemund // 94-Nov-06 Aleas #include <std.h> inherit DAEMON; int cmd_chilltouch(string str) { object tp, ob; int faith, wisdom, i, level; string what, *strengths, *weaknesses; object *inv; tp = this_player(); tp->set_magic_round(); if(tp->query_casting()) return 1; if(tp->query_ghost()) { notify_fail("Your voice is hollow.\n"); return 0; } if((string)tp->query_class() != "kataan") { message("my_action","No demon will ever support you!" ,tp); message("other_action",tp->query_cap_name()+" mumbles in confusion.", environment(tp),tp); return 1; } if(environment(tp)->query_property("no magic")) { notify_fail("The demons don't hear you.\n"); return 0; } if((int)tp->query_mp() < 35) { notify_fail("Too low on magic power.\n"); return 0; } if(!str) { ob = (object)tp->query_current_attacker(); if(!ob) { notify_fail("Strike what?\n"); return 0; } } else { ob = present(str, environment(tp)); if(!ob) ob = parse_objects(environment(tp), str); if(!ob) { notify_fail("No "+str+" here!\n"); return 0; } } if(!living(ob)) { notify_fail(ob->query_cap_name()+" is not alive!\n"); return 0; } if(ob == tp) { notify_fail("Not a very clever thing to do.\n"); return 0; } if(ob->is_player() && !interactive(ob)) { notify_fail("You cannot attack link-dead players.\n"); return 0; } if((string)ob->query_class() == "kataan") { notify_fail(sprintf("%s laughs at you!\n", ob->query_cap_name())); return 0; } if(!ob->kill_ob(tp, 0)) return 1; faith = (int)tp->query_skill("faith"); wisdom = (int)ob->query_stats("wisdom")/2; faith -= wisdom; weaknesses = (string *)ob->query_property("weakness"); if (!pointerp(weaknesses)) weaknesses = ({}); strengths = (string *)ob->query_property("strengths"); if (!pointerp(strengths)) strengths = ({}); if(member_array("cold", weaknesses) != -1) faith += random( faith ); else if(member_array("cold", strengths) != -1) faith -= random(wisdom+5); if(member_array("magic", weaknesses) != -1) faith += random( (faith/2) + 2 ); else if(member_array("magic", strengths) != -1) faith -= random(wisdom + 10); if(faith < 1) faith = 1; message("my_action","%^RESET%^%^BLACK%^%^BOLD%^You strike "+ ob->query_cap_name()+ " with horror!",tp); message("other_action","%^RESET%^%^BLACK%^%^BOLD%^"+ tp->query_cap_name()+ " mutters some demonical words.", environment(tp), ({ ob, tp })); message("other_action","%^RESET%^%^BLACK%^%^BOLD%^"+ "A chill of horror strikes you as "+ tp->query_cap_name()+ " mutters some demonical words!",ob); tp->set_casting( ((faith + faith)/40 ) * 15 ); tp->add_skill_points( faith * 3 ); tp->add_mp(-(35 + random(35)) ); return 1; } void help() { message("help","Syntax: <chilltouch [(living)]>\n\n" "Uses your faith in the demons of the underworld to cause a " "chill of horror to strike the living object named, or, " "if in battle and no arguments are used, " "your current opponent.",this_player()); }