From 398681fd1840328e40aaa7357b899c3498c2a296 Mon Sep 17 00:00:00 2001 From: PatR Date: Fri, 20 Feb 2026 19:29:55 -0800 Subject: [PATCH] fix? #S15277 - Engulfer gets placed over itself Bug report was that engulfer killed hero who was life-saved and expelled onto a rolling boulder trap which resulted in the death of a bystanding monster. That triggered an impossible about placing the engulfer onto the map at an already occupied spot (containing the engulfer itself) while dealing with the dead bystander. This removes the code in mon_leaving_level() that was putting the engulfer on the map. I'm no longer able to reproduce the problem it was intended to solve, and if that problem (message delivery about the swallow attack delivered with the engulfer missing from the map) exists, it would be less severe than the impossible feedback. I didn't attempt to reproduce the actual reported problem since the code removal should make it moot. Once again, the bug report via the web contact form got misclassified as spam. --- src/mon.c | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) diff --git a/src/mon.c b/src/mon.c index 4488bd8fc..0900ebe22 100644 --- a/src/mon.c +++ b/src/mon.c @@ -2696,20 +2696,6 @@ mon_leaving_level(struct monst *mon) #endif } if (onmap) { - /* gulpmm() tries to deal with this, but without this extra - place_monster() the messages for exploding engulfed gas spore - are delivered without the engulfer being shown on the map */ - if (gm.mswallower && gm.mswallower != mon) { - if (gm.mswallower != &gy.youmonst) { - place_monster(gm.mswallower, - gm.mswallower->mx, gm.mswallower->my); - } else { - u_on_newpos(u.ux, u.uy); - if (canspotself()) - display_self(); - } - } - mon->mundetected = 0; /* for migration; doesn't matter for death */ /* unhide mimic in case its shape has been blocking line of sight or it is accompanying the hero to another level */ @@ -3441,6 +3427,7 @@ unstuck(struct monst *mtmp) set_ustuck((struct monst *) 0); if (swallowed) { + gm.mswallower = (struct monst *) 0; u.ux = mtmp->mx; u.uy = mtmp->my; if (Punished && uchain->where != OBJ_FLOOR)