From: nethack.rankin Date: Sun, 23 Oct 2011 00:37:55 +0000 (+0000) Subject: still more levitation blocking (trunk only) X-Git-Tag: MOVE2GIT~156 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=98cb2eda549b8fe7fcb762c79e6a4114e7282a23;p=nethack still more levitation blocking (trunk only) Removing ring or boots of levitation while stuck in solid rock was silent as intended, but timeout of potion or spell said "you float gently to the ground" even though there's no actual movement. Using '>' command while in solid rock said "you can't go down here" without attempting to toggle off controlled levitation. --- diff --git a/src/do.c b/src/do.c index 93b08b5fd..841cc0592 100644 --- a/src/do.c +++ b/src/do.c @@ -756,7 +756,9 @@ dodown() return 0; } #endif - if (Levitation) { + /* Levitation might be blocked, but player can still use '>' to + turn off controlled levitaiton */ + if (HLevitation || ELevitation) { if ((HLevitation & I_SPECIAL) || (ELevitation & W_ARTI)) { /* end controlled levitation */ if (ELevitation & W_ARTI) { @@ -771,10 +773,16 @@ dodown() } } } - if (float_down(I_SPECIAL|TIMEOUT, W_ARTI)) - return (1); /* came down, so moved */ + if (float_down(I_SPECIAL|TIMEOUT, W_ARTI)) { + return 1; /* came down, so moved */ + } else if (!HLevitation && !ELevitation) { + Your("latent levitation ceases."); + return 1; /* did something, effectively moved */ + } } - if (Blind) { + if (BLevitation) { + ; /* weren't actually floating after all */ + } else if (Blind) { /* Avoid alerting player to an unknown stair or ladder. * Changes the message for a covered, known staircase * too; staircase knowledge is not stored anywhere. diff --git a/src/trap.c b/src/trap.c index 0982cb7de..d3d2334ba 100644 --- a/src/trap.c +++ b/src/trap.c @@ -2669,7 +2669,13 @@ long hmask, emask; /* might cancel timeout */ HLevitation &= ~hmask; ELevitation &= ~emask; - if(Levitation) return(0); /* maybe another ring/potion/boots */ + if (Levitation) return 0; /* maybe another ring/potion/boots */ + if (BLevitation) { + /* Levitation is blocked, so hero is not actually floating + hence shouldn't have float_down effects and feedback */ + float_vs_flight(); /* before nomul() rather than after */ + return 0; + } nomul(0); /* stop running or resting */ if (BFlying) { /* controlled flight no longer overridden by levitation */