]> granicus.if.org Git - nethack/commitdiff
status updating
authorPatR <rankin@nethack.org>
Fri, 22 Mar 2019 23:13:21 +0000 (16:13 -0700)
committerPatR <rankin@nethack.org>
Fri, 22 Mar 2019 23:13:21 +0000 (16:13 -0700)
I've noticed (with curses interface) that there are a lot of
update_status(BL_FLUSH) calls when nothing on the status lines
has changed.  It happens while just wondering around, not due to
deliberate botlx update.  This eliminates one of the causes.
Updating hero's experience points or score (via u.urexp) was
requesting a bottom lines refresh even if the relevant options to
see those changed values was off.  The botl code would send a flush
directive even though nothing visible was modified.  (I have a fix
for that too, but am holding back while hoping to find some of the
other causes of unnecessary botl requests.)

doc/fixes36.2
src/exper.c

index 9522e1eae7184bf61ac0a39cb10132a8d81c50d0..fedb1a3aa6d78fec97e91f6c2b412c7d3a53eec6 100644 (file)
@@ -1,4 +1,4 @@
-$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.278 $ $NHDT-Date: 1553217908 2019/03/22 01:25:08 $
+$NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.279 $ $NHDT-Date: 1553296396 2019/03/22 23:13:16 $
 
 This fixes36.2 file is here to capture information about updates in the 3.6.x
 lineage following the release of 3.6.1 in April 2018. Please note, however,
@@ -394,6 +394,8 @@ kicking an object stack moves the topmost 1, but range calculation used the
        yielding "thump" result with no movement despite being a light item
 status lines' dungeon location field in the elemental planes now shows Earth
        or Air or Fire or Water instead of generic End Game
+avoid spurious status refresh when hero gains experience while 'showexp' and
+       'showscore' options are off
 
 
 Fixes to Post-3.6.1 Problems that Were Exposed Via git Repository
index bb13aa9012a772b58932533dc2d8617ca19753ff..0cead3e978e91a755774a8b97d66ac7e729d2b9f 100644 (file)
@@ -1,4 +1,4 @@
-/* NetHack 3.6 exper.c $NHDT-Date: 1544917599 2018/12/15 23:46:39 $  $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.31 $ */
+/* NetHack 3.6 exper.c $NHDT-Date: 1553296396 2019/03/22 23:13:16 $  $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.32 $ */
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /*-Copyright (c) Robert Patrick Rankin, 2007. */
 /* NetHack may be freely redistributed.  See license for details. */
@@ -161,24 +161,31 @@ void
 more_experienced(exper, rexp)
 register int exper, rexp;
 {
-    long newexp = u.uexp + exper;
-    long rexpincr = 4 * exper + rexp;
-    long newrexp = u.urexp + rexpincr;
+    long oldexp = u.uexp,
+         oldrexp = u.urexp,
+         newexp = oldexp + exper,
+         rexpincr = 4 * exper + rexp,
+         newrexp = oldrexp + rexpincr;
 
     /* cap experience and score on wraparound */
     if (newexp < 0 && exper > 0)
         newexp = LONG_MAX;
     if (newrexp < 0 && rexpincr > 0)
         newrexp = LONG_MAX;
-    u.uexp = newexp;
-    u.urexp = newrexp;
 
-    if (exper
+    if (newexp != oldexp) {
+        u.uexp = newexp;
+        if (flags.showexp)
+            context.botl = TRUE;
+    }
+    /* newrexp will always differ from oldrexp unless they're LONG_MAX */
+    if (newrexp != oldrexp) {
+        u.urexp = newrexp;
 #ifdef SCORE_ON_BOTL
-        || flags.showscore
+        if (flags.showscore)
+            context.botl = TRUE;
 #endif
-        )
-        context.botl = 1;
+    }
     if (u.urexp >= (Role_if(PM_WIZARD) ? 1000 : 2000))
         flags.beginner = 0;
 }
@@ -243,7 +250,7 @@ const char *drainer; /* cause of death, if drain should be fatal */
             rehumanize();
     }
 
-    context.botl = 1;
+    context.botl = TRUE;
 }
 
 /*
@@ -303,7 +310,7 @@ boolean incr; /* true iff via incremental experience growth */
         adjabil(u.ulevel - 1, u.ulevel); /* give new intrinsics */
         reset_rndmonst(NON_PM);          /* new monster selection */
     }
-    context.botl = 1;
+    context.botl = TRUE;
 }
 
 /* compute a random amount of experience points suitable for the hero's