diff --git a/doc/fixes34.4 b/doc/fixes34.4 index 047999184..e8691b75f 100644 --- a/doc/fixes34.4 +++ b/doc/fixes34.4 @@ -284,6 +284,7 @@ zapping closing or breaking magic up or down from beneath an open drawbridge's portcullis failed if bridge orientation was north-to-south (Valk quest) sinking into lava didn't track passage of time properly sinking into lava eventually burns away slime; sitting in it always does +after escaping lava by foot, if hero doesn't move he'll fall back in suppress corpse from bones data if death is due to being dissolved in lava suppress "you rise from the dead" if game ends due to be turned into slime don't give erroneous " disppears" message for hero poly'd into quantum diff --git a/include/extern.h b/include/extern.h index 99357a47d..690769faf 100644 --- a/include/extern.h +++ b/include/extern.h @@ -777,6 +777,7 @@ E boolean FDECL(test_move, (int, int, int, int, int)); E void NDECL(domove); E void NDECL(invocation_message); E void FDECL(spoteffects, (BOOLEAN_P)); +E void NDECL(stayeffects); E char *FDECL(in_rooms, (XCHAR_P,XCHAR_P,int)); E boolean FDECL(in_town, (int,int)); E void FDECL(check_special_room, (BOOLEAN_P)); diff --git a/src/allmain.c b/src/allmain.c index b951518e0..b9d329097 100644 --- a/src/allmain.c +++ b/src/allmain.c @@ -1,4 +1,4 @@ -/* SCCS Id: @(#)allmain.c 3.5 2007/02/16 */ +/* SCCS Id: @(#)allmain.c 3.5 2007/03/12 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -321,6 +321,8 @@ boolean resuming; !In_endgame(&u.uz) && !BClairvoyant && !(moves % 15) && !rn2(2)) do_vicinity_map(); if (u.utrap && u.utraptype == TT_LAVA) sink_into_lava(); + /* when/if hero escapes from lava, he can't just stay there */ + else if (!u.umoved) stayeffects(); } /* actual time passed */ diff --git a/src/hack.c b/src/hack.c index bd339e546..d3d51b7f6 100644 --- a/src/hack.c +++ b/src/hack.c @@ -1,4 +1,4 @@ -/* SCCS Id: @(#)hack.c 3.5 2007/02/10 */ +/* SCCS Id: @(#)hack.c 3.5 2007/03/12 */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* NetHack may be freely redistributed. See license for details. */ @@ -1741,6 +1741,27 @@ stillinwater:; return; } +/* called if hero stays in the same spot while time passes */ +void +stayeffects() +{ + /* leave the trickier cases to spoteffects()... */ + if (u.uinwater) { + if (!is_pool(u.ux, u.uy)) spoteffects(FALSE); + } else if ((is_pool(u.ux, u.uy) || is_lava(u.ux, u.uy)) && + !(u.ustuck || Levitation || Flying)) { +#ifdef STEED + if (u.usteed) + spoteffects(FALSE); + else +#endif + if (is_lava(u.ux, u.uy)) + (void)lava_effects(); + else if (!Wwalking) + (void)drown(); + } +} + /* returns first matching monster */ STATIC_OVL struct monst * monstinroom(mdat,roomno)