From: PatR Date: Sat, 4 Feb 2023 23:28:13 +0000 (-0800) Subject: up/down level feedback X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9ce98594a42abf1f45b591dc5cba4d5fb37323d6;p=nethack up/down level feedback With sounds on, using #levelchange to drop more than one level only gave the level-loss sound effect once. Level-gain sound was better because the more verbose messaging triggered --More-- before moving on. Have both gain and loss use urgent_pline() in case messages are being suppressed due to ESC, and have both request --More-- to make the player acknowledge the message. That has a side-effect of letting the sound play to conclusion. --- diff --git a/src/exper.c b/src/exper.c index 120aa91b3..71f99e25a 100644 --- a/src/exper.c +++ b/src/exper.c @@ -220,14 +220,18 @@ losexp( (drainer==NULL) resets a level 1 character to 0 experience points without reducing level and that isn't fatal so suppress the message in that situation */ - if (u.ulevel > 1 || drainer) - pline("%s level %d.", Goodbye(), u.ulevel); + if (u.ulevel > 1 || drainer) { + urgent_pline("%s level %d.", Goodbye(), u.ulevel); + SoundAchievement(0, sa2_xpleveldown, 0); + /* issue --More-- so that player acknowleges the loss in level + and also to give the sound effect enough time to play */ + display_nhwindow(WIN_MESSAGE, TRUE); + } if (u.ulevel > 1) { u.ulevel -= 1; /* remove intrinsic abilities */ adjabil(u.ulevel + 1, u.ulevel); livelog_printf(LL_MINORAC, "lost experience level %d", u.ulevel + 1); - SoundAchievement(0, sa2_xpleveldown, 0); } else { if (drainer) { gk.killer.format = KILLED_BY; @@ -235,7 +239,7 @@ losexp( Strcpy(gk.killer.name, drainer); done(DIED); } - /* no drainer or lifesaved */ + /* no drainer or else lifesaved */ u.uexp = 0; livelog_printf(LL_MINORAC, "lost all experience"); } @@ -339,13 +343,16 @@ pluslvl( u.uexp = newuexp(u.ulevel); } ++u.ulevel; - pline("Welcome %sto experience level %d.", - (u.ulevelmax < u.ulevel) ? "" : "back ", - u.ulevel); + urgent_pline("Welcome %sto experience level %d.", + (u.ulevelmax < u.ulevel) ? "" : "back ", u.ulevel); + SoundAchievement(0, sa2_xplevelup, 0); + /* issue --More-- so that player acknowleges the gain in level + and also to give the sound effect enough time to play */ + display_nhwindow(WIN_MESSAGE, TRUE); if (u.ulevelmax < u.ulevel) u.ulevelmax = u.ulevel; adjabil(u.ulevel - 1, u.ulevel); /* give new intrinsics */ - SoundAchievement(0, sa2_xplevelup, 0); + old_ach_cnt = count_achievements(); newrank = xlev_to_rank(u.ulevel); if (newrank > oldrank)