]> granicus.if.org Git - nethack/commitdiff
stale gold symbol displayed after symset change
authornhmall <nhmall@nethack.org>
Thu, 15 Nov 2018 07:34:45 +0000 (02:34 -0500)
committernhmall <nhmall@nethack.org>
Thu, 15 Nov 2018 07:34:45 +0000 (02:34 -0500)
a stale gold symbol could be displayed on the status line following a switch
to a new symset, as observed and reported for Windows RogueEpyx symset.

An update is required for gold in the status line for a change to
any of the following:
    context.rndencode value
    the encoded glyph value for COIN_CLASS
    the gold amount

doc/fixes36.2
src/botl.c

index 8e6718ec58d050c13e4a60eda0ec2406553b2693..2780451d318ffba9ef54ade8e373f0897d663719 100644 (file)
@@ -198,6 +198,8 @@ clairvoyance would show trap instead of a monster on/in that trap, which was
        intentional, but when clairvoyance finished the monster wasn't shown
 nurse corpse/tin chance to convey poison resistance when eaten was not honored
 make tame vampires be more aggressive when shifted to bat/fog/wolf form
+a stale gold symbol could be displayed on the status line following a switch
+       to a new symset, as observed and reported for Windows RogueEpyx symset
 
 
 Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository
index 5d1fe2bcb392376f8caff5d779bf04b61ff0f84b..aa5d64f48a203d51706eb4ab27cd16517cd19ae2 100644 (file)
@@ -698,6 +698,7 @@ int fld, idx, idx_p;
 boolean *valsetlist;
 {
     static int oldrndencode = 0;
+    static nhsym oldgoldsym = 0;
     int pc, chg, color = NO_COLOR;
     unsigned anytype;
     boolean updated = FALSE, reset;
@@ -719,10 +720,28 @@ boolean *valsetlist;
      * so $:0 has already been encoded and cached by the window
      * port.  Without this hack, gold's \G sequence won't be
      * recognized and ends up being displayed as-is for 'update_all'.
+     *
+     * Also, even if context.rndencode hasn't changed and the
+     * gold amount itself hasn't changed, the glyph portion of the
+     * encoding may have changed if a new symset was put into
+     * effect.
+     *
+     *  \GXXXXNNNN:25
+     *  XXXX = the context.rndencode portion
+     *  NNNN = the glyph portion
+     *  25   = the gold amount
+     *
      */
-    if (context.rndencode != oldrndencode && fld == BL_GOLD) {
-        chg = 2;
-        oldrndencode = context.rndencode;
+
+    if (fld == BL_GOLD) {
+        if (context.rndencode != oldrndencode && fld == BL_GOLD) {
+            chg = 2;
+            oldrndencode = context.rndencode;
+        }
+        if (oldgoldsym != showsyms[COIN_CLASS + SYM_OFF_O]) {
+            chg = 2;
+            oldgoldsym = showsyms[COIN_CLASS + SYM_OFF_O];
+        }
     }
 
     reset = FALSE;