#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
|
disintegration breath; life-saving retained conferred properties of
|
||||||
formerly worn items (loss of steed's saddle caused much confusion)
|
formerly worn items (loss of steed's saddle caused much confusion)
|
||||||
don't exercize or abuse wisdom when rumors get used for random graffiti
|
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
|
Platform- and/or Interface-Specific Fixes
|
||||||
|
|||||||
@@ -981,8 +981,22 @@ struct mkroom *croom;
|
|||||||
|
|
||||||
/* corpsenm is "empty" if -1, random if -2, otherwise specific */
|
/* corpsenm is "empty" if -1, random if -2, otherwise specific */
|
||||||
if (o->corpsenm != NON_PM) {
|
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();
|
if (o->corpsenm == NON_PM - 1) otmp->corpsenm = rndmonnum();
|
||||||
else otmp->corpsenm = o->corpsenm;
|
else otmp->corpsenm = o->corpsenm;
|
||||||
|
if (otmp->otyp == CORPSE) start_corpse_timeout(otmp);
|
||||||
otmp->owt = weight(otmp);
|
otmp->owt = weight(otmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user