From: Pasi Kallinen Date: Fri, 4 Mar 2022 14:42:11 +0000 (+0200) Subject: Fix checking monster moving into a trap return value X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2cdd8f8dcbdebf44e4e7e9d552e01d1c5d877629;p=nethack Fix checking monster moving into a trap return value When I added a new trap return value, this was one place that should've checked it. This was really annoying to debug - it manifested as a temp level file loading error, because a monster moved on to a level teleport trap, which zeroes out (mx, my), then later in the monster movement, a web spinner created a web at (0,0), and then hero leaving the level, the traps were saved into the level file ... and when loaded, the code thought a trap with x == 0 meant there were no more traps. --- diff --git a/src/monmove.c b/src/monmove.c index f0ead084e..9b5803123 100644 --- a/src/monmove.c +++ b/src/monmove.c @@ -1441,6 +1441,8 @@ m_move(register struct monst* mtmp, register int after) didseeit = canseeit; if (mmoved == MMOVE_MOVED) { + int trapret; + /* normal monster move will already have , but pet dog_move() with 'goto postmov' won't */ nix = mtmp->mx, niy = mtmp->my; @@ -1475,7 +1477,8 @@ m_move(register struct monst* mtmp, register int after) } newsym(omx, omy); /* update the old position */ - if (mintrap(mtmp, NO_TRAP_FLAGS) == Trap_Killed_Mon) { + trapret = mintrap(mtmp, NO_TRAP_FLAGS); + if (trapret == Trap_Killed_Mon || trapret == Trap_Moved_Mon) { if (mtmp->mx) newsym(mtmp->mx, mtmp->my); return 2; /* it died */