// _palm.c // Monk ability // Written 081092 by Descartes of Borg #include <std.h> inherit DAEMON; int cmd_palm(string str) { object tp, ob; int faith; int attack, wisdom, skip, which, i; string what; object *inv; tp = this_player(); if(tp->query_ghost()) { notify_fail("Your voice is hollow.\n"); return 0; } if(environment(tp)->query_property("no magic")) { notify_fail("Something seems to be blocking your concentration.\n"); return 0; } if(tp->query_casting()) return 1; if((int)tp->query_mp() < 25) { notify_fail("Too low on magic power.\n"); return 0; } if(!str) { ob = (object)tp->query_current_attacker(); if(!ob) { notify_fail("Palm 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 a living thing!\n"); return 0; } if(ob == tp) { notify_fail("Not a very bright thing to do.\n"); return 0; } if(ob->is_player() && !interactive(ob)) { notify_fail("You cannot attack link-dead players.\n"); return 0; } attack = (int)tp->query_skill("magic attack"); faith = (int)tp->query_skill("faith"); wisdom = (int)ob->query_stats("wisdom"); attack = (attack/2 + faith) - (2*wisdom); if(attack < 1) attack = 0; if(faith < 25) { notify_fail("You are not skilled enough for that.\n"); return 0; } if(!tp->kill_ob(ob, 0)) return 1; write("You let go with a quivering palm!\n"); tell_room(environment(tp), tp->query_cap_name()+" says a prayer and lets go with quivering palms!\n", ({ tp, ob }) ); tell_object(ob, tp->query_cap_name()+" uses "+tp->query_possessive()+" quvering palm against you!\n"); tp->set_casting( attack/3 ); tp->add_skill_points( "magic_attack", attack/3); tp->add_skill_points("faith",attack/4); tp->add_mp(-(random(26))); return 1; } void help() { write("Syntax: <palm [(living)]>\n"+ "Uses holy powers in battle with a quivering palm that\n"+ "strikes out at the object named as an arg, or, if in\n"+ "battle and no arguments are used, at your current opponent.\n"); }