]> granicus.if.org Git - nethack/commitdiff
ball and chain panic when teleporting
authorPatR <rankin@nethack.org>
Tue, 10 Mar 2020 22:59:01 +0000 (15:59 -0700)
committerPatR <rankin@nethack.org>
Tue, 10 Mar 2020 22:59:01 +0000 (15:59 -0700)
"remove_obj: obj not on floor" when trying to move the iron ball.
For the circumstances involved, the ball wasn't supposed to be
moved anyway, just the chain.

I could reproduce the problem using the steps specified.  I didn't
track down the precise point of failure but after this fix the
panic can't be reproduced anymore.

doc/fixes37.0
src/teleport.c

index 21662d901814973bf3b4c90081b2bb87fa9df111..80bb4165830d4255de1b760ac74e3f489ff7afb4 100644 (file)
@@ -1,4 +1,4 @@
-$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.125 $ $NHDT-Date: 1583708535 2020/03/08 23:02:15 $
+$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.127 $ $NHDT-Date: 1583881126 2020/03/10 22:58:46 $
 
 General Fixes and Modified Features
 -----------------------------------
@@ -70,6 +70,9 @@ generate objects (eg. statues) with genocided or extinct monster classes
        in special levels, if requested
 if the orc-town version of mine town has been loaded, creation of orc zombies
        or orc mummies would name them as part of the town raiding orc clan
+when punished, involuntarily teleporting and landing within chain range of
+       attached ball while encumbered worse than burdened could trigger
+       "remove_object: obj not on floor" panic on hero's next move
 
 
 Fixes to 3.7.0-x Problems that Were Exposed Via git Repository
index 840a6205c3520d9ec3887645dd2ea1995797fc4a..64bba0c77e557ffad5fd6261c7298485d921b53d 100644 (file)
@@ -1,4 +1,4 @@
-/* NetHack 3.6 teleport.c      $NHDT-Date: 1581886867 2020/02/16 21:01:07 $  $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.113 $ */
+/* NetHack 3.6 teleport.c      $NHDT-Date: 1583881126 2020/03/10 22:58:46 $  $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.116 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /*-Copyright (c) Robert Patrick Rankin, 2011. */
 /* NetHack may be freely redistributed.  See license for details. */
@@ -302,8 +302,9 @@ int nux, nuy;
 int teleds_flags;
 {
     boolean ball_active, ball_still_in_range;
-    boolean allow_drag = teleds_flags & TELEDS_ALLOW_DRAG;
-    boolean is_teleport = teleds_flags & TELEDS_TELEPORT;
+    boolean allow_drag = ((teleds_flags & TELEDS_ALLOW_DRAG) != 0
+                          && near_capacity() <= SLT_ENCUMBER);
+    boolean is_teleport = (teleds_flags & TELEDS_TELEPORT) != 0;
     struct monst *vault_guard = vault_occupied(u.urooms) ? findgd() : 0;
 
     if (u.utraptype == TT_BURIEDBALL) {