fix "unique monster doppelganger and bones bug"

Reported by paxed 8 years ago:  if a bones file contains a
doppelganger imitating a unique monster, when it gets loaded
that monster ends up being marked as having been created.  The
doppelganger itself will shapechange to other forms, but the
unique monster won't be created when it should be because it has
become extinct.

Report involved creating a statue of a unique monster which
yields a doppelganger in that monster's shape, then using stone
to flesh to animate the statue, dying before it changes to some
other shape, and having bones be saved.
This commit is contained in:
PatR
2022-09-24 18:49:48 -07:00
parent 65b8cf7981
commit f4e87e8744
2 changed files with 8 additions and 1 deletions

View File

@@ -1029,6 +1029,11 @@ improve consistency between applying a key and explicitly opening a door:
isn't any door in the direction supplied, you're told "no door" and
time elapses if you discover the non-door's terrain type but doesn't
if you already knew the type there
if a bones file contains a doppelganger imitating a unique monster, a game
that loads those bones will end up with that monster counted as
having already been created so it won't be created if/when the time
for that arrives (the doppelganger will change its shape normally,
not be stuck in the unique monster's form)
Fixes to 3.7.0-x Problems that Were Exposed Via git Repository

View File

@@ -402,7 +402,9 @@ restmonchn(NHFILE* nhfp)
offset = mtmp->mnum;
mtmp->data = &mons[offset];
if (ghostly) {
int mndx = monsndx(mtmp->data);
int mndx = (mtmp->cham == NON_PM) ? monsndx(mtmp->data)
: mtmp->cham;
if (propagate(mndx, TRUE, ghostly) == 0) {
/* cookie to trigger purge in getbones() */
mtmp->mhpmax = DEFUNCT_MONSTER;