From: Pasi Kallinen Date: Fri, 3 Feb 2023 06:23:31 +0000 (+0200) Subject: Fix punishment iron ball yanking hero on top of a monster X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0722a5c2ddc313df97cc09c0cfa0cd3632954085;p=nethack Fix punishment iron ball yanking hero on top of a monster When attached iron ball was in a pit (or a pool) with a monster, and your levitation ended, you were put on top of the monster. Add a sanity check for hero over monster. --- diff --git a/doc/fixes3-7-0.txt b/doc/fixes3-7-0.txt index 38cdabe42..b3e5b3a39 100644 --- a/doc/fixes3-7-0.txt +++ b/doc/fixes3-7-0.txt @@ -1103,6 +1103,7 @@ give gremlin the property it stole, if possible 'F'orcefighting with a war hammer has a small chance of breaking iron bars very rarely random items are generated eroded, erodeproof, or greased Nazgul can see invisible +fix a case where punished iron ball yanked hero on top of a monster Fixes to 3.7.0-x Problems that Were Exposed Via git Repository diff --git a/src/cmd.c b/src/cmd.c index f464b5243..d2aab6345 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -4177,6 +4177,8 @@ wiz_mon_diff(void) static void you_sanity_check(void) { + struct monst *mtmp; + if (u.uswallow && !u.ustuck) { /* this probably ought to be panic() */ impossible("sanity_check: swallowed by nothing?"); @@ -4186,6 +4188,12 @@ you_sanity_check(void) u.uswldtim = 0; docrt(); } + if ((mtmp = m_at(u.ux, u.uy)) != 0) { + /* u.usteed isn't on the map */ + if (u.ustuck != mtmp) + impossible("sanity_check: you over monster"); + } + (void) check_invent_gold("invent"); } diff --git a/src/trap.c b/src/trap.c index df10177ae..0ebc18588 100644 --- a/src/trap.c +++ b/src/trap.c @@ -3560,7 +3560,7 @@ float_down( return 1; } - if (Punished && !carried(uball) + if (Punished && !carried(uball) && !m_at(uball->ox, uball->oy) && (is_pool(uball->ox, uball->oy) || ((trap = t_at(uball->ox, uball->oy)) && (is_pit(trap->ttyp) || is_hole(trap->ttyp))))) {