From 3e029d2900b16fdc3c917199aad0f1efab265e08 Mon Sep 17 00:00:00 2001 From: PatR Date: Sun, 30 Jun 2019 10:51:00 -0700 Subject: [PATCH] attributes disclosure: experience points Wizard mode shows the number of points needed to reach the next level (unless already maxxed out at 30) for ^X and end of game disclosure. Do it in normal play for the latter too. (I think it would ok to do that for ^X too but haven't gone that far.) Even when it was wizard mode only, the phrasing for past tense had a minor grammar bug, and it could make the line a little too long for tty and curses (not sure about others) when level was high, resulting in wrapped text. That looked bad for tty, which first tries removing indentation (just 1 space in this case), making that line outdented as well as wrapped. So change the phrasing slightly when experience level is 'too high'. I had a version which formatted, measured, and re-formatted if necessary but that was overkill; simple hardcoded rephrasing suffices particularly when measuring was against assumed display width (80) rather than actual width. --- doc/fixes36.3 | 7 ++++++- src/cmd.c | 29 +++++++++++++++++++---------- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/doc/fixes36.3 b/doc/fixes36.3 index 648ef6902..d03090095 100644 --- a/doc/fixes36.3 +++ b/doc/fixes36.3 @@ -1,4 +1,4 @@ -$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.78 $ $NHDT-Date: 1561766416 2019/06/29 00:00:16 $ +$NHDT-Branch: NetHack-3.6 $:$NHDT-Revision: 1.79 $ $NHDT-Date: 1561917056 2019/06/30 17:50:56 $ This fixes36.3 file is here to capture information about updates in the 3.6.x lineage following the release of 3.6.2 in May 2019. Please note, however, @@ -92,6 +92,8 @@ wizard mode ^I with 'perm_invent' On would unintentionally filter the content change #adjust to treat carrying only gold as not having anything to adjust saving bones with 'perm_invent' On could result in "Bad fruit #N" warnings update persistent inventory window immediately if 'sortpack' option is toggled +grammar bit for wizard mode final disclosure; attribute section could show + "You had N experience points, 1 more were needed to attain level X+1." Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository @@ -196,6 +198,9 @@ classify sources as released, beta, or work-in-progress via NH_DEVEL_STATUS rather than just released vs beta via BETA if you reach the edge of a level (relatively uncommon) and try to move off, report that you can't go farther if the 'mention_walls' option is set +'attributes' disclosure at end of game includes number of experience points + that were needed to reach the next experience level (new for normal + play and explore mode; previously only shown for wizard mode) wizard-mode: display effect to show where an unseen wished-for monster landed curses: enable latent mouse support curses: give menus and text windows a minimum size of 5x25 since tiny ones can diff --git a/src/cmd.c b/src/cmd.c index f81b53d81..0b7471715 100644 --- a/src/cmd.c +++ b/src/cmd.c @@ -1977,19 +1977,28 @@ int final; enlght_line(You_, "entered ", buf, ""); } if (!Upolyd) { - /* flags.showexp does not matter */ + int ulvl = (int) u.ulevel; + /* [flags.showexp currently does not matter; should it?] */ + /* experience level is already shown above */ Sprintf(buf, "%-1ld experience point%s", u.uexp, plur(u.uexp)); - if (wizard) { - if (u.ulevel < 30) { - int ulvl = (int) u.ulevel; - long nxtlvl = newuexp(ulvl); - /* long oldlvl = (ulvl > 1) ? newuexp(ulvl - 1) : 0; */ + /* TODO? + * Remove wizard-mode restriction since patient players can + * determine the numbers needed without resorting to spoilers + * (even before this started being disclosed for 'final'; + * just enable 'showexp' and look at normal status lines + * after drinking gain level potions or eating wraith corpses + * or being level-drained by vampires). + */ + if (ulvl < 30 && (final || wizard)) { + long nxtlvl = newuexp(ulvl), delta = nxtlvl - u.uexp; - Sprintf(eos(buf), ", %ld %s%sneeded to attain level %d", - (nxtlvl - u.uexp), (u.uexp > 0) ? "more " : "", - !final ? "" : "were ", (ulvl + 1)); - } + Sprintf(eos(buf), ", %ld %s%sneeded %s level %d", + delta, (u.uexp > 0) ? "more " : "", + /* present tense=="needed", past tense=="were needed" */ + !final ? "" : (delta == 1L) ? "was " : "were ", + /* "for": grammatically iffy but less likely to wrap */ + (ulvl < 18) ? "to attain" : "for", (ulvl + 1)); } you_have(buf, ""); }