#include <rooms.h>
#include <position.h>
#include <medium.h>
#include <message_class.h>
mixed eventFall(){
object env = environment();
mixed rumbo = 0;
mixed tmprumbo = 0;
string name = this_object()->GetName();
if(!living(this_object())) name = this_object()->GetShort();
if(!env || !(rumbo = env->GetExit("down"))) return 0;
if(env == rumbo) return 0;
if(env->GetMedium() != MEDIUM_AIR){
send_messages("crash", "$agent_name $agent_verb down!",
this_object(), 0, env);
if(living(this_object())) this_object()->SetPosition(POSITION_LYING);
return 1;
}
else {
int err;
if(!rumbo) return 0;
tmprumbo = rumbo;
if(stringp(rumbo)) err = catch(rumbo = load_object(rumbo));
if(err || !rumbo){
log_file("runtime","\n"+timestamp()+" "+identify(this_object())+
" could not load "+identify(rumbo)+" to fall into.\n");
err = catch(rumbo = load_object(ROOM_VOID));
}
if(err || !rumbo){
return 0;
}
tell_object(this_object(),"You plummet downward!");
if(this_object()->eventMove(rumbo)){
tell_room(rumbo,capitalize(name)+" plummets in from above.",
({ this_object() }));
tell_room(env,capitalize(name)+" continues "+
possessive(this_object())+" fall downward.", ({ this_object() }));
if(rumbo->GetMedium() == MEDIUM_AIR && !(this_object()->CanFly())){
call_out( "eventFall", 1);
}
}
return 1;
}
return 0;
}