]> granicus.if.org Git - nethack/commitdiff
swap places with pet onto boulder location
authornhmall <nhmall@nethack.org>
Sat, 25 May 2019 04:33:47 +0000 (00:33 -0400)
committernhmall <nhmall@nethack.org>
Sat, 25 May 2019 04:33:47 +0000 (00:33 -0400)
when co-located with a boulder you could sometimes swap places
with pets of any size

bg72

doc/fixes36.3
src/hack.c

index d678bf72e5fb54018bff585f64a8ea3293f9efef..28564e3dab0f8f4ac4418245f46de55d9d488a5d 100644 (file)
@@ -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
index d84dd353d9823d2d7c0a0522e638283b82b59e73..a4385673a114143493c901581e26b46fcd224a4c 100644 (file)
@@ -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 */