/*
* This file contains all the code for handling corpses.
* @author Rhinehold
*/
/**
* This method will allow all sorts of modifications to a corpse once it has
* been created, based on the weapon or attack used for the killing stroke.
* @param corpse the corpse object
* @param weapon the weapon used to inflict the fatal damage
* @param attack the attack used to inflict the fatal damage
* @return none
* @see death_helper()
* @see make_corpse()
* @see do_death()
*/
int alter_corpse( object corpse, object weapon, string attack ) {
object head, *heads;
string behead_message = "";
if (!attack) attack = "attack";
switch (attack) {
case "behead" :
heads =
this_object()->query_race_ob( this_object() )->query_possible_bits( "head" );
if( sizeof( heads ) > 1 ) {
head = corpse->make_bit(heads[random(sizeof(heads))] );
} else {
head = corpse->make_bit( heads[0] );
head->move( environment( corpse ) );
switch(random(6)) {
case 0 : behead_message = head->a_short() +
" drops onto the ground and rolls head over, well, head "
"for a bit before coming to a rest.\n";
break;
case 1 : behead_message = head->a_short() +
" sails through the air in a graceful arc before landing "
"with a very soggy *squish*.\n";
break;
case 2 : behead_message = head->a_short() +
" quivers a bit as it remains in place, perched atop its owner's "
"corpse for a moment, then falls to pieces.\n";
break;
case 3 : behead_message = head->a_short() +
" tips off to the left to hang by a small bit of flesh, before "
"gravity has something to say about the matter and pulls it "
"completely off of the corpse, landing with a small bounce.\n";
break;
case 4 : behead_message = head->a_short() +
" slides off of its owner's corpse, upends, and lands upside "
"down, helping to keep some of the blood from spilling.\n";
break;
case 5 : behead_message = head->a_short() +
" drops onto the ground like a ball, *bouncy* *bouncy*.\n";
break;
case 6 :
case 7 :
case 8 :
case 9 :
default : behead_message = "oops, the mushrooms have turned.\n";
}
tell_room( environment( corpse ), behead_message );
}
break;
default :
}
return 1;
} /* alter_corpse */