diff --git a/doc/fixes34.2 b/doc/fixes34.2 index 3dd82b5b5..98ec44bb9 100644 --- a/doc/fixes34.2 +++ b/doc/fixes34.2 @@ -130,6 +130,8 @@ there was no check for iron bars in dokick() so it defaulted to "empty space" if you couldn't see the rat created in a sink for some reason other than blindness, you would get "Eek there's it in the sink." digging a pit while stuck in the floor should always free the player +quest guardians can no longer be created via stone-to-flesh on their statue +stone-to-flesh no longer silently ignored by a statue of a unique monster Platform- and/or Interface-Specific Fixes diff --git a/src/trap.c b/src/trap.c index 987f99897..69a7b7d80 100644 --- a/src/trap.c +++ b/src/trap.c @@ -433,11 +433,20 @@ int *fail_reason; * [detected or guessed] location of a statue trap. Normally the * uppermost statue is the one which would be activated. */ - if (mptr->geno & G_UNIQ) { + if ((mptr->geno & G_UNIQ) && cause != ANIMATE_SPELL) { if (fail_reason) *fail_reason = AS_MON_IS_UNIQUE; return (struct monst *)0; } - mon = makemon(mptr, x, y, (cause == ANIMATE_SPELL) ? + if (cause == ANIMATE_SPELL && + ((mptr->geno & G_UNIQ) || mptr->msound == MS_GUARDIAN)) { + /* Statues of quest guardians or unique monsters + * will not stone-to-flesh as the real thing. + */ + mon = makemon(&mons[PM_DOPPELGANGER], x, y, + NO_MINVENT|MM_NOCOUNTBIRTH|MM_ADJACENTOK); + if (mon) (void) newcham(mon, mptr, FALSE, FALSE); + } else + mon = makemon(mptr, x, y, (cause == ANIMATE_SPELL) ? (NO_MINVENT | MM_ADJACENTOK) : NO_MINVENT); }