'w-' object lost panic

After the "make 'w' parallel with 'Q'" patch, wielding bare hands
was erroneously treating object id 0 as a split of zeroobj.  That
isn't in inventory so seems 'lost'.  Fixed by testing for nonzero.
There was another bug:  you could wield a partial stack even if your
current weapon was cursed.  Fixed by reordering if/else-if/end-if.
This commit is contained in:
PatR
2019-12-24 03:26:34 -08:00
parent 60ec7256ab
commit 6aabc78c83
2 changed files with 17 additions and 12 deletions
+3 -1
View File
@@ -1,4 +1,4 @@
$NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.33 $ $NHDT-Date: 1577184069 2019/12/24 10:41:09 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.34 $ $NHDT-Date: 1577186790 2019/12/24 11:26:30 $
General Fixes and Modified Features General Fixes and Modified Features
----------------------------------- -----------------------------------
@@ -28,6 +28,8 @@ fix compile when DLB isn't defined
urealtime.realtime was being incorrectly calculated urealtime.realtime was being incorrectly calculated
revised "mysterious force" when climbing out of gehennom could generate revised "mysterious force" when climbing out of gehennom could generate
warnings about "rn2(0) attempted" or "rn2(-n) attempted" warnings about "rn2(0) attempted" or "rn2(-n) attempted"
after 'w' on split stack patch, wielding '-' would cause an object_lost panic
same patch allowed partial stack from getobj to replace cursed wielded weapon
Platform- and/or Interface-Specific Fixes Platform- and/or Interface-Specific Fixes
+14 -11
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 wield.c $NHDT-Date: 1577055058 2019/12/22 22:50:58 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.68 $ */ /* NetHack 3.6 wield.c $NHDT-Date: 1577186790 2019/12/24 11:26:30 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.69 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/*-Copyright (c) Robert Patrick Rankin, 2009. */ /*-Copyright (c) Robert Patrick Rankin, 2009. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -275,16 +275,6 @@ dowield()
if (!(wep = getobj(wield_objs, "wield"))) { if (!(wep = getobj(wield_objs, "wield"))) {
/* Cancelled */ /* Cancelled */
return 0; return 0;
} else if (wep->o_id == g.context.objsplit.child_oid) {
/* if wep is the result of supplying a count to getobj()
we don't want to split something already wielded; for
any other item, we need to give it its own inventory slot */
if (uwep && uwep->o_id == g.context.objsplit.parent_oid) {
unsplitobj(wep);
goto already_wielded;
}
finish_splitting = TRUE;
goto wielding;
} else if (wep == uwep) { } else if (wep == uwep) {
already_wielded: already_wielded:
You("are already wielding that!"); You("are already wielding that!");
@@ -295,7 +285,20 @@ dowield()
weldmsg(uwep); weldmsg(uwep);
/* previously interrupted armor removal mustn't be resumed */ /* previously interrupted armor removal mustn't be resumed */
reset_remarm(); reset_remarm();
/* if player chose a partial stack but can't wield it, undo split */
if (wep->o_id && wep->o_id == g.context.objsplit.child_oid)
unsplitobj(wep);
return 0; return 0;
} else if (wep->o_id && wep->o_id == g.context.objsplit.child_oid) {
/* if wep is the result of supplying a count to getobj()
we don't want to split something already wielded; for
any other item, we need to give it its own inventory slot */
if (uwep && uwep->o_id == g.context.objsplit.parent_oid) {
unsplitobj(wep);
goto already_wielded;
}
finish_splitting = TRUE;
goto wielding;
} }
/* Handle no object, or object in other slot */ /* Handle no object, or object in other slot */