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.
This commit is contained in:
PatR
2015-03-27 00:21:40 -07:00
parent f9e8e80589
commit ed85d3f158
2 changed files with 14 additions and 9 deletions

View File

@@ -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.");

View File

@@ -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 &&