// _raise.c
// from the Nightmare mudlib
// raises a corpse from the dead
// Created by Manny@Nightmare 940911
#include <std.h>
#include <objects.h>
inherit DAEMON;
int cmd_raise(string str) {
object corpse, ob, me;
int healing, faith, needs, sp_needed, level;
string Class;
if(!str) return notify_fail("Raise what?");
me = this_player();
if(me->query_ghost())
return notify_fail("The dead cannot raise the dead.\n");
Class=me->query_class();
if(!(Class="cleric" || Class="kataan"))
return notify_fail("You are unfamilar with such arts.\n");
if(me->query_level() < 5)
return notify_fail("You are too ingorant in the ways of the world.\n"
);
if(!corpse=present(str, environment(this_player())))
return notify_fail("You feel a bit lost..\n");
if(!corpse->id("corpse"))
return notify_fail("You oaf, you can only raise a corpse!!\n");
needs=(int)me->query_alignment();
if(Class=="cleric" && needs>1000)
return notify_fail("You cringe at the thought of performing "
"such an act of evil.\n");
if(Class=="kataan" && needs<-800)
return notify_fail("The gods no longer pay heed to your "
"evil pleas.\n");
needs=(needs<0 ? 100 : needs/4);
me->add_alignment(-(needs<0 ? 100 : needs));
if((healing=(int)me->query_skill("healing")) < (random(20)+60))
return notify_fail("You lack the skill to perform such an act.\n");
if((faith=(int)me->query_skill("faith")) < random(10)+40)
return notify_fail("The gods fail to hear your words.\n");
if(me->query_mp() < random(20)+130)
return notify_fail("Your prayers go unanswered.\n");
me->add_mp(-(random(50)+100));
sp_needed=150-healing;
if(sp_needed < 0) sp_needed=0;
level = corpse->query_level();
sp_needed += random(level*10) + 5*level;
if(me->query_sp() < sp_needed)
return notify_fail("Your concentration is just too weak.\n");
me->add_sp(-sp_needed);
this_player()->set_magic_round();
ob = new(OB_UNDEAD);
corpse->make_new_body(ob);
ob->set_level(level-(200/needs));
ob->set_decay_rate(to_int(5*sqrt(to_float(healing)))+random(100));
ob->set_exp(random(100));
ob->set("master", me);
ob->move(environment(me));
corpse->remove();
me->add_follower(ob);
me->add_skill_points("healing", random(healing/4));
me->add_skill_points("faith", random(faith/8));
message("say", "%^GREEN%^You call upon your "
"gods to allow the dead one last chance of service.", me);
message("say", "%^GREEN%^%^BOLD%^"+me->query_cap_name()+"Waves "+
me->query_possessive()+" hands wildily in the air and chants a spell "+
"of archaic words. The dead corpse begins to rise.", environment(me));
return 1;
}
void help() {
message("help", "Syntax: raise <corpse>\n\n"
"Attempt to raise a corpse from the dead.\n"
"See also: order", this_player());
}