From: nhmall Date: Sat, 25 May 2019 04:33:47 +0000 (-0400) Subject: swap places with pet onto boulder location X-Git-Tag: NetHack-3.7.0_WIP~403^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9361a9153bad41607f6508ab10da84535b9dbb83;p=nethack swap places with pet onto boulder location when co-located with a boulder you could sometimes swap places with pets of any size bg72 --- diff --git a/doc/fixes36.3 b/doc/fixes36.3 index d678bf72e..28564e3da 100644 --- a/doc/fixes36.3 +++ b/doc/fixes36.3 @@ -19,6 +19,8 @@ glob shop interaction improved to handle more of the expected scenarios non-flying steed on Plane of Water would drown when air bubble moved hero xans fly, but could not reach your feet if you flew adjust vortex database entry to be consistent with fire and energy vortices +when co-located with a boulder you could sometimes swap places with pets of + any size Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository diff --git a/src/hack.c b/src/hack.c index d84dd353d..a4385673a 100644 --- a/src/hack.c +++ b/src/hack.c @@ -1354,7 +1354,8 @@ domove_core() xchar chainx = 0, chainy = 0, ballx = 0, bally = 0; /* ball&chain new positions */ int bc_control = 0; /* control for ball&chain */ - boolean cause_delay = FALSE; /* dragging ball will skip a move */ + boolean cause_delay = FALSE, /* dragging ball will skip a move */ + u_with_boulder = (sobj_at(BOULDER, u.ux, u.uy) != 0); if (context.travel) { if (!findtravelpath(FALSE)) @@ -1781,7 +1782,16 @@ domove_core() if (u.usteed) u.usteed->mx = u.ux, u.usteed->my = u.uy; You("stop. %s can't move diagonally.", upstart(y_monnam(mtmp))); - } else if (u.ux0 != x && u.uy0 != y && bad_rock(mtmp->data, x, u.uy0) + } else if (u_with_boulder + && !(verysmall(mtmp->data) + && (!mtmp->minvent || (curr_mon_load(mtmp) <= 600)))) { + /* can't swap places when pet won't fit there with the boulder */ + u.ux = u.ux0, u.uy = u.uy0; /* didn't move after all */ + if (u.usteed) + u.usteed->mx = u.ux, u.usteed->my = u.uy; + You("stop. %s won't fit into the same spot that you're at.", + upstart(y_monnam(mtmp))); + } else if (u.ux0 != x && u.uy0 != y && bad_rock(mtmp->data, x, u.uy0) && bad_rock(mtmp->data, u.ux0, y) && (bigmonst(mtmp->data) || (curr_mon_load(mtmp) > 600))) { /* can't swap places when pet won't fit thru the opening */