From ed85d3f1586910c1ef2a049047db0212eaf72a6d Mon Sep 17 00:00:00 2001 From: PatR Date: Fri, 27 Mar 2015 00:21:40 -0700 Subject: [PATCH] objnam formatting for bag of tricks Bag of tricks that had been used at least once was being described as "empty" regardless of charge count, because it always fails the Has_contents() test. After half this patch fixed that, it started being flagged as "empty" as soon as the last charge was used rather than after attempting to use it again after that, since 'cknown' was being set whenever it was used. Only set that flag when applying the bag has been observed to fail. --- src/makemon.c | 6 +----- src/objnam.c | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/makemon.c b/src/makemon.c index 6ce548ea0..799438c2e 100644 --- a/src/makemon.c +++ b/src/makemon.c @@ -1,4 +1,4 @@ -/* NetHack 3.5 makemon.c $NHDT-Date: 1426465436 2015/03/16 00:23:56 $ $NHDT-Branch: debug $:$NHDT-Revision: 1.74 $ */ +/* NetHack 3.5 makemon.c $NHDT-Date: 1427440865 2015/03/27 07:21:05 $ $NHDT-Branch: master $:$NHDT-Revision: 1.75 $ */ /* NetHack 3.5 makemon.c $Date: 2012/01/29 00:34:33 $ $Revision: 1.69 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1884,10 +1884,6 @@ int *seencount; /* secondary output */ } while (--creatcnt > 0); if (seecount) { if (seencount) *seencount += seecount; - /* don't set contents-known flag if we just used last charge - (such suppression doesn't actually gain us much since - player can now deduce that the bag has become empty) */ - if (bag->spe > 0) bag->cknown = 1; if (bag->dknown) makeknown(BAG_OF_TRICKS); } else if (!tipping) { pline1(!moncount ? nothing_happens : "Nothing seems to happen."); diff --git a/src/objnam.c b/src/objnam.c index 898dfb60a..54923ce1e 100644 --- a/src/objnam.c +++ b/src/objnam.c @@ -1,4 +1,4 @@ -/* NetHack 3.5 objnam.c $NHDT-Date: 1426977394 2015/03/21 22:36:34 $ $NHDT-Branch: master $:$NHDT-Revision: 1.108 $ */ +/* NetHack 3.5 objnam.c $NHDT-Date: 1427440866 2015/03/27 07:21:06 $ $NHDT-Branch: master $:$NHDT-Revision: 1.109 $ */ /* NetHack 3.5 objnam.c $Date: 2011/10/27 02:24:54 $ $Revision: 1.101 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -651,8 +651,9 @@ register struct obj *obj; */ register char *bp = xname(obj); - if (iflags.override_ID) known = cknown = bknown = lknown = TRUE; - else { + if (iflags.override_ID) { + known = cknown = bknown = lknown = TRUE; + } else { known = obj->known; cknown = obj->cknown; bknown = obj->bknown; @@ -685,7 +686,15 @@ register struct obj *obj; /* "empty" goes at the beginning, but item count goes at the end */ if (cknown && - (Is_container(obj) || obj->otyp == STATUE) && !Has_contents(obj)) + /* bag of tricks: include "empty" prefix if it's known to + be empty but its precise number of charges isn't known + (when that is known, suffix of "(n:0)" will be appended, + making the prefix be redundant; note that 'known' flag + isn't set when emptiness gets discovered because then + charging magic would yield known number of new charges) */ + (obj->otyp == BAG_OF_TRICKS ? (obj->spe == 0 && !obj->known) : + /* not bag of tricks: empty if container which has no contents */ + (Is_container(obj) || obj->otyp == STATUE) && !Has_contents(obj))) Strcat(prefix, "empty "); if (bknown &&