From 09ec492dd8c398a83cd851576735b31a2d6c57b8 Mon Sep 17 00:00:00 2001 From: PatR Date: Tue, 18 May 2021 16:26:38 -0700 Subject: [PATCH] fix github issue #511 - no death message when level-drained below level 1. No "you die" or equivalent, just straight to being life-saved or to "do you want your possessions identifed?". Change it to issue "Goodbye level 1." The fact that it is has been fatal will become obvious. An issue comment on github pointed out where the fix was needed. Fixes #511 --- doc/fixes37.0 | 4 +++- src/end.c | 9 +++++++-- src/exper.c | 10 ++++++++-- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/doc/fixes37.0 b/doc/fixes37.0 index 3c82aaf5d..04d58c1e7 100644 --- a/doc/fixes37.0 +++ b/doc/fixes37.0 @@ -1,4 +1,4 @@ -NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.535 $ $NHDT-Date: 1621208908 2021/05/16 23:48:28 $ +NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.539 $ $NHDT-Date: 1621380392 2021/05/18 23:26:32 $ General Fixes and Modified Features ----------------------------------- @@ -522,6 +522,8 @@ prediscovered weapons adjustmens: only knights and samurai know polearms; if the move counter ever reaches 1000000000, end the game knights get no metal armor penalty for clerical spells change touch of death from instadeath to maxhp reduction and damage +dying from being level-drained below level 1 killed hero without saying so + and jumped straight to "do you want your possessions identified?" Fixes to 3.7.0-x Problems that Were Exposed Via git Repository diff --git a/src/end.c b/src/end.c index 614e161c5..020ad15a2 100644 --- a/src/end.c +++ b/src/end.c @@ -1,4 +1,4 @@ -/* NetHack 3.7 end.c $NHDT-Date: 1615304753 2021/03/09 15:45:53 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.222 $ */ +/* NetHack 3.7 end.c $NHDT-Date: 1621380392 2021/05/18 23:26:32 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.225 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2012. */ /* NetHack may be freely redistributed. See license for details. */ @@ -902,8 +902,13 @@ disclose(int how, boolean taken) static void savelife(int how) { - int uhpmin = max(2 * u.ulevel, 10); + int uhpmin; + /* life-drain/level-loss to experience level 0 kills without actually + reducing ulevel below 1, but include this for bulletproofing */ + if (u.ulevel < 1) + u.ulevel = 1; + uhpmin = max(2 * u.ulevel, 10); if (u.uhpmax < uhpmin) u.uhpmax = uhpmin; u.uhp = u.uhpmax; diff --git a/src/exper.c b/src/exper.c index be3e11da7..4673d8aec 100644 --- a/src/exper.c +++ b/src/exper.c @@ -1,4 +1,4 @@ -/* NetHack 3.7 exper.c $NHDT-Date: 1596498167 2020/08/03 23:42:47 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.43 $ */ +/* NetHack 3.7 exper.c $NHDT-Date: 1621380393 2021/05/18 23:26:33 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.46 $ */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /*-Copyright (c) Robert Patrick Rankin, 2007. */ /* NetHack may be freely redistributed. See license for details. */ @@ -205,8 +205,14 @@ losexp(const char *drainer) /* cause of death, if drain should be fatal */ else if (resists_drli(&g.youmonst)) return; + /* level-loss message; "Goodbye level 1." is fatal; divine anger + (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) { - pline("%s level %d.", Goodbye(), u.ulevel--); + u.ulevel -= 1; /* remove intrinsic abilities */ adjabil(u.ulevel + 1, u.ulevel); } else {