diff --git a/doc/fixes36.1 b/doc/fixes36.1 index 9e430def8..9b8633956 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -507,6 +507,8 @@ shopkeepers in their own shop and priests in their own temple are no longer frightened by hero standing on scroll of scare monster the Wizard, Angels and lawful minions, the Riders, shopkeep/priest in own room are never frightened by tooled horns +'Iu' would reveal unknown container contents if carrying one unpaid item inside + a hero-owned container whose contents weren't known Fixes to Post-3.6.0 Problems that Were Exposed Via git Repository diff --git a/include/extern.h b/include/extern.h index afbf4e498..24a0c06cd 100644 --- a/include/extern.h +++ b/include/extern.h @@ -1,4 +1,4 @@ -/* NetHack 3.6 extern.h $NHDT-Date: 1517128658 2018/01/28 08:37:38 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.624 $ */ +/* NetHack 3.6 extern.h $NHDT-Date: 1518053385 2018/02/08 01:29:45 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.625 $ */ /* Copyright (c) Steve Creps, 1988. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1284,6 +1284,7 @@ E struct obj *FDECL(splitobj, (struct obj *, long)); E struct obj *FDECL(unsplitobj, (struct obj *)); E void NDECL(clear_splitobjs); E void FDECL(replace_object, (struct obj *, struct obj *)); +E struct obj *FDECL(unknwn_contnr_contents, (struct obj *)); E void FDECL(bill_dummy_object, (struct obj *)); E void FDECL(costly_alteration, (struct obj *, int)); E struct obj *FDECL(mksobj, (int, BOOLEAN_P, BOOLEAN_P)); diff --git a/src/invent.c b/src/invent.c index 89d823eec..828a947df 100644 --- a/src/invent.c +++ b/src/invent.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 invent.c $NHDT-Date: 1512473628 2017/12/05 11:33:48 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.223 $ */ +/* NetHack 3.6 invent.c $NHDT-Date: 1518053384 2018/02/08 01:29:44 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.224 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -2541,22 +2541,26 @@ STATIC_OVL void dounpaid() { winid win; - struct obj *otmp, *marker; + struct obj *otmp, *marker, *contnr; register char ilet; char *invlet = flags.inv_order; int classcount, count, num_so_far; long cost, totcost; count = count_unpaid(invent); + otmp = marker = contnr = (struct obj *) 0; if (count == 1) { - marker = (struct obj *) 0; otmp = find_unpaid(invent, &marker); + contnr = unknwn_contnr_contents(otmp); + } + if (otmp && !contnr) { + /* 1 item; use pline instead of popup menu */ cost = unpaid_cost(otmp, FALSE); iflags.suppress_price++; /* suppress "(unpaid)" suffix */ pline1(xprname(otmp, distant_name(otmp, doname), - carried(otmp) ? otmp->invlet : CONTAINED_SYM, TRUE, - cost, 0L)); + carried(otmp) ? otmp->invlet : CONTAINED_SYM, + TRUE, cost, 0L)); iflags.suppress_price--; return; } diff --git a/src/mkobj.c b/src/mkobj.c index 567b84528..ee6928111 100644 --- a/src/mkobj.c +++ b/src/mkobj.c @@ -1,4 +1,4 @@ -/* NetHack 3.6 mkobj.c $NHDT-Date: 1513298759 2017/12/15 00:45:59 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.129 $ */ +/* NetHack 3.6 mkobj.c $NHDT-Date: 1518053380 2018/02/08 01:29:40 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.130 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -579,6 +579,23 @@ struct obj *otmp; } } +/* is 'obj' inside a container whose contents aren't known? + if so, return the outermost container meeting that criterium */ +struct obj * +unknwn_contnr_contents(obj) +struct obj *obj; +{ + struct obj *result = 0, *parent; + + while (obj->where == OBJ_CONTAINED) { + parent = obj->ocontainer; + if (!parent->cknown) + result = parent; + obj = parent; + } + return result; +} + /* * Create a dummy duplicate to put on shop bill. The duplicate exists * only in the billobjs chain. This function is used when a shop object