]> granicus.if.org Git - nethack/commitdiff
fix github issue #279 - boulder feedback
authorPatR <rankin@nethack.org>
Sun, 12 Jan 2020 13:05:24 +0000 (05:05 -0800)
committerPatR <rankin@nethack.org>
Sun, 12 Jan 2020 13:05:24 +0000 (05:05 -0800)
Polymophed into a giant and moving onto a boulder's location could
yield "you easily pick it up" (without actually doing so) followed
by "you see a boulder here".  It would happen if autopickup was Off,
or if the 'm' move-without-autopickup prefix was used, while either
boulder was included in pickup_types (including when that is set
for 'all') or hero had thrown that particular boulder and
pickup_thrown was On.  The check for whether auto-pick should try
on an object relied on its caller verifying that autopickup was On.
pickup() does that for
 pickup() -> autopick() -> autopick_testobj()
but moverock() wasn't doing that for
 moverock() -> autopick_testobj()
so the logic controlling moverock's message was subverted.

I first thought that logic itself was incorrect and changed the
message.  This keeps the new message even though it turned out not
to be cause of the problem.

Fixes #279

doc/fixes37.0
src/hack.c

index 83b7c194ed809da9a94d6be6314fc30e9b90f6ff..b409e26bd12a1d7c5ea73ea8fdb6d740e6ea276c 100644 (file)
@@ -1,4 +1,4 @@
-$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.62 $ $NHDT-Date: 1578764038 2020/01/11 17:33:58 $
+$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.63 $ $NHDT-Date: 1578834315 2020/01/12 13:05:15 $
 
 General Fixes and Modified Features
 -----------------------------------
@@ -42,6 +42,8 @@ walking out of tethered-to-buried-object trap condition was supposed to
        reinstate punishment but wasn't finding the buried iron ball because
        the trap condition was cleared first to indicate escape; result was
        attached chain that got dragged around but had no ball attached
+when poly'd into a giant and moving onto a boulder's spot, message given was
+       confused about whether autopickup would occur so could be misleading
 
 
 Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
index 2cc61fb83e69bf18ef86e50155df95c045868c5a..0cd387963eb09267ec059e330d46ede28f84df19 100644 (file)
@@ -1,4 +1,4 @@
-/* NetHack 3.6 hack.c  $NHDT-Date: 1578690701 2020/01/10 21:11:41 $  $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.240 $ */
+/* NetHack 3.6 hack.c  $NHDT-Date: 1578834315 2020/01/12 13:05:15 $  $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.241 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /*-Copyright (c) Derek S. Ray, 2015. */
 /* NetHack may be freely redistributed.  See license for details. */
@@ -340,7 +340,8 @@ moverock()
                                     slot or into the overflow ('#') slot
                                     unless already carrying at least one */
                               && (inv_cnt(FALSE) < 52 || !carrying(BOULDER))),
-                    willpickup = (canpickup && autopick_testobj(otmp, TRUE));
+                    willpickup = (canpickup && flags.pickup
+                                  && autopick_testobj(otmp, TRUE));
 
                 if (u.usteed && P_SKILL(P_RIDING) < P_BASIC) {
                     You("aren't skilled enough to %s %s from %s.",
@@ -348,14 +349,21 @@ moverock()
                         the(xname(otmp)), y_monnam(u.usteed));
                 } else {
                     /*
-                     * willpickup:  you easily pick it up
-                     * canpickup:   you could easily pick it up
-                     * otherwise:   you easily push it aside
+                     * will pick up:  you easily pick it up
+                     * can but won't: you manuver over it and could pick it up
+                     * can't pick up: you manuver over it (possibly followed
+                     *     by feedback from failed auto-pickup attempt)
                      */
-                    pline("However, you %seasily %s.",
-                          (willpickup || !canpickup) ? "" : "could ",
-                          (willpickup || canpickup) ? "pick it up"
-                                                    : "push it aside");
+                    pline("However, you %s%s.",
+                          willpickup ? "easily pick it up"
+                                     : "manuver over it",
+                          (canpickup && !willpickup)
+                                     ? " and could pick it up"
+                                     : "");
+                    /* similar to dropping everything and squeezing onto
+                       a Sokoban boulder's spot, moving to same breaks the
+                       Sokoban rules because on next step you could go
+                       past it without pushing it to plug a pit or hole */
                     sokoban_guilt();
                     break;
                 }