]> granicus.if.org Git - nethack/commitdiff
objnam formatting for bag of tricks
authorPatR <rankin@nethack.org>
Fri, 27 Mar 2015 07:21:40 +0000 (00:21 -0700)
committerPatR <rankin@nethack.org>
Fri, 27 Mar 2015 07:21:40 +0000 (00:21 -0700)
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
src/objnam.c

index 6ce548ea02638d51e019d79426d5b9389ff78630..799438c2e451fe47744c8898159f8b09eccaba5a 100644 (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.");
index 898dfb60a395457422882e9021eca03dadad626a..54923ce1e9aad552f24924f448816556fc174286 100644 (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 &&