#include <lib.h>
#include <dirs.h>
#include ROOMS_H
#include <damage_types.h>
inherit LIB_SHADOW;
int count = 300;
void heart_beat(){
    object env = room_environment(GetShadowedObject());
    if(!env) return;
    count--;
    this_object()->eventPrint("You hunger for brains.");
    if(!(count % 10) && env){
        tell_room(env,this_object()->GetName()+" shudders and groans.",
                ({ this_object() }) );
        GetShadowedObject()->eventReceiveDamage("decay",OTHER,random(50),1);
    }
    if(count < 0){
        mixed *inv = all_inventory(GetShadowedObject());
        tell_room(env,this_object()->GetName()+" falls apart!",
                ({ this_object() }) );
        if(sizeof(inv)) inv->eventMove(env);
        foreach(mixed element in this_object()->GetLimbs()){
            this_object()->RemoveLimb(element,"decay",1);
        }
        this_object()->eventMove(ROOM_FURNACE);
    }
}
int eventForce(string cmd){
    if(interactive(GetShadowedObject())) return 0;
    return GetShadowedObject()->eventForce(cmd);
}
int ProcessTalk(mixed args...){
    string speech = lower_case(args[2]);
    if(sizeof(speech) > 1) speech = truncate(speech,1);
    //No commanding players plz
    if(interactive(GetShadowedObject())) return 0;
    call_out( (: eventForce :), 1, speech);
    return 1;
}
int eventShadow(object whom){
    if(userp(whom)) return 0;
    whom->SetTalkResponses( ([ "default" : (: ProcessTalk :) ]) );
    whom->SetNoClean(1);
    set_heart_beat((query_heart_beat(whom) || 1));
    return ::eventShadow(whom);
}