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.
This commit is contained in:
nethack.rankin
2011-10-23 00:37:55 +00:00
parent 282f8e8e70
commit 98cb2eda54
2 changed files with 19 additions and 5 deletions

View File

@@ -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.

View File

@@ -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 */