#H85: create_object() bugs

From a bug report.c was first creating  a corpse
complete with revive timer if it was a troll, or without
a timer if it was a lizard or lichen corpse. Then it might
change the corpse type, leaving strange corpse
types that revived, or that lasted forever.
This commit is contained in:
nethack.allison
2006-05-09 01:31:55 +00:00
parent 1a01343c63
commit c0731a8809
2 changed files with 16 additions and 0 deletions

View File

@@ -215,6 +215,8 @@ properly handle destruction of equipment carried by monsters hit by
disintegration breath; life-saving retained conferred properties of
formerly worn items (loss of steed's saddle caused much confusion)
don't exercize or abuse wisdom when rumors get used for random graffiti
create_object() created lizard corpses without timers and troll corpses with
their revive timers, then changed the corpsenm field
Platform- and/or Interface-Specific Fixes

View File

@@ -981,8 +981,22 @@ struct mkroom *croom;
/* corpsenm is "empty" if -1, random if -2, otherwise specific */
if (o->corpsenm != NON_PM) {
/* Corpse was already created above, so the timers are
* appropriate for otmp->corpsenm at the time of creation.
* Since the next section is about to alter the type of
* corpse directly, the timers must be removed, then re-added
* afterwards.
*
* Failure to do so leads to inappropriate corpse types
* behaving like a lizard or lichen corpse (no timer), or
* behaving like a troll (revive timer).
*/
if (otmp->otyp == CORPSE && otmp->timed) obj_stop_timers(otmp);
if (o->corpsenm == NON_PM - 1) otmp->corpsenm = rndmonnum();
else otmp->corpsenm = o->corpsenm;
if (otmp->otyp == CORPSE) start_corpse_timeout(otmp);
otmp->owt = weight(otmp);
}