From 84ca1773e53e60865bbf501c703d76c3115e98f4 Mon Sep 17 00:00:00 2001 From: "nethack.rankin" Date: Sun, 1 Feb 2009 00:56:50 +0000 Subject: [PATCH] fix #H1803 - levitating at floor level... From a bug report, being stuck in the floor or in lava and trying to move downwards while levitating gave "you are floating high above the floor/lava" which contradicts being stuck. Now you'll get "you are trapped in the floor/lava" in that situation. I thought about letting it fall through to the chance to autodig with wielded pick, but decided to go with just the alternate message. (Being tethered to a buried iron ball still lets you "float high above the floor", so this doesn't check for being trapped that way.) --- doc/fixes34.4 | 2 ++ src/do.c | 7 +++---- src/fountain.c | 14 ++++++++++++-- 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/doc/fixes34.4 b/doc/fixes34.4 index 7e6c7f494..8587de8d0 100644 --- a/doc/fixes34.4 +++ b/doc/fixes34.4 @@ -376,6 +376,8 @@ ensure current_fruit gets set to the correct index when setting fruit monsters already wearing suits can't put on shirts if life-saved steed became untame, repeated "placing steed onto map?" warnings would be given as long as the hero remained mounted +trying to move down while levitating said "you are floating high above floor" + even when being stuck in floor or lava blocked full levitation Platform- and/or Interface-Specific Fixes diff --git a/src/do.c b/src/do.c index 5daf92024..56b990be6 100644 --- a/src/do.c +++ b/src/do.c @@ -764,11 +764,10 @@ dodown() for(obj = invent; obj; obj = obj->nobj) { if (obj->oartifact && - artifact_has_invprop(obj,LEVITATION)) { + artifact_has_invprop(obj, LEVITATION)) { if (obj->age < monstermoves) - obj->age = monstermoves + rnz(100); - else - obj->age += rnz(100); + obj->age = monstermoves; + obj->age += rnz(100); } } } diff --git a/src/fountain.c b/src/fountain.c index 51857f253..d6969d4ce 100644 --- a/src/fountain.c +++ b/src/fountain.c @@ -1,4 +1,4 @@ -/* SCCS Id: @(#)fountain.c 3.5 2008/01/19 */ +/* SCCS Id: @(#)fountain.c 3.5 2009/01/31 */ /* Copyright Scott R. Turner, srt@ucla, 10/27/86 */ /* NetHack may be freely redistributed. See license for details. */ @@ -12,11 +12,21 @@ STATIC_DCL void NDECL(dowaternymph); STATIC_PTR void FDECL(gush, (int,int,genericptr_t)); STATIC_DCL void NDECL(dofindgem); +/* used when trying to dip in or drink from fountain or sink or pool while + levitating above it, or when trying to move downwards in that state */ void floating_above(what) const char *what; { - You("are floating high above the %s.", what); + const char *umsg = "are floating high above the %s."; + + if (u.utrap && (u.utraptype == TT_INFLOOR || u.utraptype == TT_LAVA)) { + /* when stuck in floor (not possible at fountain or sink location, + so must be attempting to move down), override the usual message */ + umsg = "are trapped in the %s."; + what = surface(u.ux, u.uy); /* probably redundant */ + } + You(umsg, what); } STATIC_OVL void -- 2.40.0