#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:
@@ -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
|
||||
|
||||
14
src/sp_lev.c
14
src/sp_lev.c
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user