From 95acaf29897c734ba5eba0b497341455b3598d25 Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Tue, 25 Jan 2022 14:17:43 +0200 Subject: [PATCH] Falling through a hole or trap door will cause damage --- doc/fixes37.0 | 1 + src/do.c | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/doc/fixes37.0 b/doc/fixes37.0 index 90724a91a..8f7578052 100644 --- a/doc/fixes37.0 +++ b/doc/fixes37.0 @@ -761,6 +761,7 @@ when already at level 30 and gaining another level--which doesn't increase level further but does add more HP and Pw--throttle the increases don't stop running when next to a peaceful, unless it blocks the way mindless monsters shouldn't cringe stepping on squeaky boards +falling down a hole or trapdoor will cause damage proportional to fall height Fixes to 3.7.0-x Problems that Were Exposed Via git Repository diff --git a/src/do.c b/src/do.c index ba4a7cb7b..593be00dc 100644 --- a/src/do.c +++ b/src/do.c @@ -1302,6 +1302,8 @@ goto_level( struct monst *mtmp; char whynot[BUFSZ]; char *annotation; + int dist = newlevel->dlevel - dunlev(&u.uz); + boolean do_fall_dmg = FALSE; if (dunlev(newlevel) > dunlevs_in_dungeon(newlevel)) newlevel->dlevel = dunlevs_in_dungeon(newlevel); @@ -1617,6 +1619,7 @@ goto_level( if (Punished) ballfall(); selftouch("Falling, you"); + do_fall_dmg = TRUE; } } @@ -1782,6 +1785,15 @@ goto_level( /* assume this will always return TRUE when changing level */ (void) in_out_region(u.ux, u.uy); + + /* fall damage? */ + if (do_fall_dmg) { + int dmg = d(dist, 6); + + dmg = Maybe_Half_Phys(dmg); + losehp(dmg, "falling down a mine shaft", KILLED_BY); + } + (void) pickup(1); }