From: PatR Date: Tue, 10 Mar 2020 22:59:01 +0000 (-0700) Subject: ball and chain panic when teleporting X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5d2f719b021504e491711cd920c2cb254277ca0c;p=nethack ball and chain panic when teleporting "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. --- diff --git a/doc/fixes37.0 b/doc/fixes37.0 index 21662d901..80bb41658 100644 --- a/doc/fixes37.0 +++ b/doc/fixes37.0 @@ -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 diff --git a/src/teleport.c b/src/teleport.c index 840a6205c..64bba0c77 100644 --- a/src/teleport.c +++ b/src/teleport.c @@ -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) {