diff --git a/doc/fixes36.2 b/doc/fixes36.2 index 9522e1eae..fedb1a3aa 100644 --- a/doc/fixes36.2 +++ b/doc/fixes36.2 @@ -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 diff --git a/src/exper.c b/src/exper.c index d3d2ca35e..d5f2d78be 100644 --- a/src/exper.c +++ b/src/exper.c @@ -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 - ) - g.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(); } - g.context.botl = 1; + g.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 */ } - g.context.botl = 1; + g.context.botl = TRUE; } /* compute a random amount of experience points suitable for the hero's