]> granicus.if.org Git - nethack/commitdiff
fix github issue #277 - repeat door open failure
authorPatR <rankin@nethack.org>
Fri, 10 Jan 2020 21:13:36 +0000 (13:13 -0800)
committerPatR <rankin@nethack.org>
Fri, 10 Jan 2020 21:13:36 +0000 (13:13 -0800)
The change to make "ouch! you bump into a door" use up a turn didn't
end running, so when it happened while running useless turns took
place and that message was delivered repeatedly until some other
action interrupted the hero.  It didn't matter whether autoopen is
enabled.

Fixes #277

doc/fixes37.0
src/hack.c

index f8bf80a078889b87f05e73a0789938e993190459..4fc73a6cd82111bcdb3b72b2630c7ba8bfb163cd 100644 (file)
@@ -1,4 +1,4 @@
-$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.59 $ $NHDT-Date: 1578659784 2020/01/10 12:36:24 $
+$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.60 $ $NHDT-Date: 1578690701 2020/01/10 21:11:41 $
 
 General Fixes and Modified Features
 -----------------------------------
@@ -32,9 +32,11 @@ drum of earthquake feedback reported various things (fountains, thrones, &c)
        falling into a chasm but they remained intact because trap creation
        had been changed to not clobber such things (so couldn't make pits)
 make earthquake which hits a secret door or a secret corridor reveal it
-wizard mode wishing for "Amulet of Yendor" has 50:50 chance for true Amulet
+wizard mode wishing for "Amulet of Yendor" had 50:50 chance for true Amulet
        or a cheap plastic imitation; recognize "real Amulet of Yendor" and
-       "fake Amulet of Yendor" to precisely specify either of them
+       "fake Amulet of Yendor" to precisely specify either of them but also
+       take away the 50% chance of yielding a fake one when neither real nor
+       fake is specified
 unpaid globs showed weight info unconditionally outside of wizmode
 walking out of tethered-to-buried-object trap condition was supposed to
        reinstate punishment but wasn't finding the buried iron ball because
@@ -60,6 +62,10 @@ autounlock picked Rogue's artifact key over lock-pick or credit card (or
        would be blasted when touching it
 wielded aklys had its "(tethered weapon...)" description scrambled
 randomized trap name could pick trap #0 which isn't a trap and yielded "water"
+if running and Blind or Stunned or Fumbling or Dex < 10, encountering a closed
+       door orthogonally would keep reporting "ouch! you bump into a door"
+       repeatedly until eventually interrupted by approaching monster or
+       hunger or ^C
 
 
 Platform- and/or Interface-Specific Fixes
index b80a9d362a93e3df36486148518197a61d320ca1..2cc61fb83e69bf18ef86e50155df95c045868c5a 100644 (file)
@@ -1,4 +1,4 @@
-/* NetHack 3.6 hack.c  $NHDT-Date: 1578448654 2020/01/08 01:57:34 $  $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.239 $ */
+/* NetHack 3.6 hack.c  $NHDT-Date: 1578690701 2020/01/10 21:11:41 $  $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.240 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /*-Copyright (c) Derek S. Ray, 2015. */
 /* NetHack may be freely redistributed.  See license for details. */
@@ -749,8 +749,8 @@ int mode;
             /* Eat the rock. */
             if (mode == DO_MOVE && still_chewing(x, y))
                 return FALSE;
-        } else if (flags.autodig && !g.context.run && !g.context.nopick && uwep
-                   && is_pick(uwep)) {
+        } else if (flags.autodig && !g.context.run && !g.context.nopick
+                   && uwep && is_pick(uwep)) {
             /* MRKR: Automatic digging when wielding the appropriate tool */
             if (mode == DO_MOVE)
                 (void) use_pick_axe2(uwep);
@@ -815,6 +815,9 @@ int mode;
                                set, 'move' would get reset by caller */
                             g.context.door_opened
                                 = g.context.move = TRUE;
+                            /* since we've just lied about successfully
+                               moving, we need to manually stop running */
+                            nomul(0);
                         } else
                             pline("That door is closed.");
                     }
@@ -2808,8 +2811,8 @@ lookaround()
             pline_The("corridor widens here.");
         goto stop;
     }
-    if ((g.context.run == 1 || g.context.run == 3 || g.context.run == 8) && !noturn
-        && !m0 && i0 && (corrct == 1 || (corrct == 2 && i0 == 1))) {
+    if ((g.context.run == 1 || g.context.run == 3 || g.context.run == 8)
+        && !noturn && !m0 && i0 && (corrct == 1 || (corrct == 2 && i0 == 1))) {
         /* make sure that we do not turn too far */
         if (i0 == 2) {
             if (u.dx == y0 - u.uy && u.dy == u.ux - x0)