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.
This commit is contained in:
Pasi Kallinen
2023-02-03 08:23:31 +02:00
parent cae29f1dfd
commit 0722a5c2dd
3 changed files with 10 additions and 1 deletions

View File

@@ -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 'F'orcefighting with a war hammer has a small chance of breaking iron bars
very rarely random items are generated eroded, erodeproof, or greased very rarely random items are generated eroded, erodeproof, or greased
Nazgul can see invisible 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 Fixes to 3.7.0-x Problems that Were Exposed Via git Repository

View File

@@ -4177,6 +4177,8 @@ wiz_mon_diff(void)
static void static void
you_sanity_check(void) you_sanity_check(void)
{ {
struct monst *mtmp;
if (u.uswallow && !u.ustuck) { if (u.uswallow && !u.ustuck) {
/* this probably ought to be panic() */ /* this probably ought to be panic() */
impossible("sanity_check: swallowed by nothing?"); impossible("sanity_check: swallowed by nothing?");
@@ -4186,6 +4188,12 @@ you_sanity_check(void)
u.uswldtim = 0; u.uswldtim = 0;
docrt(); 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"); (void) check_invent_gold("invent");
} }

View File

@@ -3560,7 +3560,7 @@ float_down(
return 1; return 1;
} }
if (Punished && !carried(uball) if (Punished && !carried(uball) && !m_at(uball->ox, uball->oy)
&& (is_pool(uball->ox, uball->oy) && (is_pool(uball->ox, uball->oy)
|| ((trap = t_at(uball->ox, uball->oy)) || ((trap = t_at(uball->ox, uball->oy))
&& (is_pit(trap->ttyp) || is_hole(trap->ttyp))))) { && (is_pit(trap->ttyp) || is_hole(trap->ttyp))))) {