/* -*- LPC -*- */ /* * $Locker: $ * $Id: savage_corpse.c,v 1.2 1999/12/31 19:23:03 ceres Exp $ * $Log: savage_corpse.c,v $ * Revision 1.2 1999/12/31 19:23:03 ceres * Updated with Oaf's changes * * Revision 1.1 1998/01/06 04:39:52 ceres * Initial revision * */ /* * Rip apart a corpse now and then to remove bits off it (then eat them). * This should be used in conjunction with the eat_edible effect to * actually eat the stuff ripped off. */ inherit "/std/effect_shadow"; mixed move(mixed dest, string messin, string messout) { int ret; ret = player->move(dest, messin, messout); if (ret == 0) { call_out("do_savage_corpse", 0); } return ret; } /* move() */ protected void do_savage_corpse() { int i; object *obs; obs = all_inventory(environment(player)); for (i = 0; i < sizeof(obs); i++) { if (obs[i]->query_corpse() && sizeof(obs[i]->query_edible_bits_left()) > 0) { remove_call_out("real_savage"); call_out("real_savage", 1 + random(120), obs[i]); break; } } } /* do_save_corpse() */ protected void real_savage(object ob) { string *bits; object bit; int i; if (!ob) { call_out("do_savage_corpse", 1 + random(2*60)); return ; } bits = ob->query_edible_bits_left(); if (sizeof(bits) > 0 && environment(ob) == environment(player)) { i = random(sizeof(bits)); bit = ob->make_bit(bits[i]); tell_room(environment(player), capitalize(player->the_short()) + " rips apart " + ob->the_short() + " pulling off " + bit->a_short() + ".\n"); bit->move(environment(player)); } if (sizeof(bits) > 1) { /* Every 2 minutes or so */ remove_call_out("real_savage"); call_out("real_savage", 1 + random(2*60), ob); } else { call_out("do_savage_corpse", 1 + random(2*60)); } } /* real_savage() */ void event_enter(object ob, string mess, object from) { player->event_enter(ob, mess, from); if (ob->query_corpse()) { remove_call_out("real_savage"); call_out("real_savage", 10, ob); } } /* event_enter() */