From fcbeed21cc10cb61adb7f3f1b9d1af6d34c1789a Mon Sep 17 00:00:00 2001 From: PatR Date: Sat, 16 Jul 2022 06:36:45 -0700 Subject: [PATCH] montraits vs monst->mstate The new test in m_detach(mon) to check whether mon was already detached is being tripped for trolls who died, revived, and died again. Clear out the MON_DETACH bit when saving montraits. --- src/cmd.c | 2 ++ src/mkobj.c | 1 + 2 files changed, 3 insertions(+) diff --git a/src/cmd.c b/src/cmd.c index 3c8cbe44b..27ee39213 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -1018,6 +1018,8 @@ makemap_unmakemon(struct monst *mtmp, boolean migratory) so that dmonsfree() bookkeeping for number of dead or removed monsters won't get out of sync; it is not on the map but mongone() -> m_detach() -> mon_leaving_level() copes with that */ + mtmp->mstate |= MON_OFFMAP; + mtmp->mstate &= ~(MON_MIGRATING | MON_LIMBO); mtmp->nmon = fmon; fmon = mtmp; } diff --git a/src/mkobj.c b/src/mkobj.c index 3837fe7a1..8c1edbfc3 100644 --- a/src/mkobj.c +++ b/src/mkobj.c @@ -1982,6 +1982,7 @@ save_mtraits(struct obj *obj, struct monst *mtmp) mtmp2->mhp = mtmp2->mhpmax; if (mtmp2->mhp < 1) mtmp2->mhp = 0; + mtmp2->mstate &= ~MON_DETACH; } return obj; }