flying into pits

In the newsgroup recently, someone mentioned that when polymorphed into
a flying monster, he couldn't retrieve items out of pits, even with the '>'
command.  I thought that we had fixed that, but the fix apparently only
covered walk-through-wall creatures (xorns and earth elementals), not flyers
and ceiling clingers.  Now those can also deliberately enter pits via '>'.

     The fixes entry is in the new features section in order to be next to
the xorn one.  '>' at pit locations is new, but it handles something which
was missing so feels more like a bug fix than a new feature to me....
[Keni, the bug page entry C343-12 about '>' (for xorns?) is general enough
to cover this fix, so we don't need to add a new one for flyers.]
I noticed an unrelated fixes35.0 entry mentioning '>' which was duplicated;
this removes one of the copies.
This commit is contained in:
nethack.rankin
2013-03-14 01:58:21 +00:00
parent 1183aa6805
commit 0a86304023
3 changed files with 22 additions and 14 deletions
+1 -1
View File
@@ -344,7 +344,6 @@ better handling for Fort Ludios and endgame in wizard mode's `^V ?' menu
no free lunch for gelatinous cubes eating scrolls of mail no free lunch for gelatinous cubes eating scrolls of mail
eating gold in front of the vault guard will make the guard angry eating gold in front of the vault guard will make the guard angry
calculate engulf time differently for non-digestion attacks than for digestion calculate engulf time differently for non-digestion attacks than for digestion
shattering a monster's weapon didn't work as intended for stack of N>1
preform autopickup and/or report on objects at the spot when a failed #untrap preform autopickup and/or report on objects at the spot when a failed #untrap
attempt causes the hero to move onto a trap's location attempt causes the hero to move onto a trap's location
shattering a monster's weapon didn't work as intended for stack of N>1 shattering a monster's weapon didn't work as intended for stack of N>1
@@ -921,6 +920,7 @@ build-from-source: dlb utility can handle arbitrary number of files
General New Features General New Features
-------------------- --------------------
when you're teetering on the edge of a pit you can use '>' to enter the pit when you're teetering on the edge of a pit you can use '>' to enter the pit
when you're flying over a pit you can use '>' to enter the pit
when asked for a direction, a response of '?' yields help and then asks again when asked for a direction, a response of '?' yields help and then asks again
when adding an item to inventory, try to stack it with the quiver slot when adding an item to inventory, try to stack it with the quiver slot
before trying against other carried objects before trying against other carried objects
+5 -1
View File
@@ -1324,7 +1324,11 @@ dohide()
{ {
boolean ismimic = youmonst.data->mlet == S_MIMIC; boolean ismimic = youmonst.data->mlet == S_MIMIC;
if ((u.utrap && u.utraptype != TT_PIT) || u.ustuck) { if (u.ustuck ||
(u.utrap &&
/* floor hiders (trapper) can hide while stuck in pits,
ceiling hiders can't (after using '>' to get there) */
(u.utraptype != TT_PIT || is_clinger(youmonst.data)))) {
You_cant("hide while you're %s.", You_cant("hide while you're %s.",
!u.ustuck ? "trapped" : !u.ustuck ? "trapped" :
!sticks(youmonst.data) ? "being held" : !sticks(youmonst.data) ? "being held" :
+16 -12
View File
@@ -714,7 +714,7 @@ unsigned trflags;
defsyms[trap_to_defsym(ttype)].explanation); defsyms[trap_to_defsym(ttype)].explanation);
/* then proceed to normal trap effect */ /* then proceed to normal trap effect */
} else if (already_seen && !forcetrap) { } else if (already_seen && !forcetrap) {
if ((Levitation || Flying) && if ((Levitation || (Flying && !plunged)) &&
(ttype == PIT || ttype == SPIKED_PIT || ttype == HOLE || (ttype == PIT || ttype == SPIKED_PIT || ttype == HOLE ||
ttype == BEAR_TRAP)) { ttype == BEAR_TRAP)) {
You("%s over %s %s.", You("%s over %s %s.",
@@ -991,9 +991,9 @@ glovecheck: (void) rust_dmg(uarmg, "gauntlets", 1, TRUE, &youmonst);
case PIT: case PIT:
case SPIKED_PIT: case SPIKED_PIT:
/* KMH -- You can't escape the Sokoban level traps */ /* KMH -- You can't escape the Sokoban level traps */
if (!Sokoban && (Levitation || Flying)) break; if (!Sokoban && (Levitation || (Flying && !plunged))) break;
feeltrap(trap); feeltrap(trap);
if (!Sokoban && is_clinger(youmonst.data)) { if (!Sokoban && is_clinger(youmonst.data) && !plunged) {
if(trap->tseen) { if(trap->tseen) {
You_see("%s %spit below you.", a_your[trap->madeby_u], You_see("%s %spit below you.", a_your[trap->madeby_u],
ttype == SPIKED_PIT ? "spiked " : ""); ttype == SPIKED_PIT ? "spiked " : "");
@@ -1022,7 +1022,8 @@ glovecheck: (void) rust_dmg(uarmg, "gauntlets", 1, TRUE, &youmonst);
if (adj_pit) { if (adj_pit) {
You("move into an adjacent pit."); You("move into an adjacent pit.");
} else { } else {
Strcpy(verbbuf, plunged ? "plunge" : "fall"); Strcpy(verbbuf, !plunged ? "fall" :
(Flying ? "dive" : "plunge"));
You("%s into %s pit!", verbbuf, a_your[trap->madeby_u]); You("%s into %s pit!", verbbuf, a_your[trap->madeby_u]);
} }
} }
@@ -1067,7 +1068,9 @@ glovecheck: (void) rust_dmg(uarmg, "gauntlets", 1, TRUE, &youmonst);
poison is limited to attrib loss */ poison is limited to attrib loss */
(u.umortality > oldumort) ? 0 : 8, FALSE); (u.umortality > oldumort) ? 0 : 8, FALSE);
} else { } else {
if (!adj_pit) /* plunging flyers take spike damage but not pit damage */
if (!adj_pit &&
!(plunged && (Flying || is_clinger(youmonst.data))))
losehp(Maybe_Half_Phys(rnd(6)), losehp(Maybe_Half_Phys(rnd(6)),
plunged ? "deliberately plunged into a pit" : plunged ? "deliberately plunged into a pit" :
"fell into a pit", "fell into a pit",
@@ -2818,9 +2821,10 @@ climb_pit()
display_nhwindow(WIN_MESSAGE, FALSE); display_nhwindow(WIN_MESSAGE, FALSE);
clear_nhwindow(WIN_MESSAGE); clear_nhwindow(WIN_MESSAGE);
You("free your %s.", body_part(LEG)); You("free your %s.", body_part(LEG));
} else if (Flying && !Sokoban) { } else if ((Flying || is_clinger(youmonst.data)) && !Sokoban) {
/* eg fell in pit, poly'd to a flying monster */ /* eg fell in pit, then poly'd to a flying monster;
You("fly from the pit."); or used '>' to deliberately enter it */
You("%s from the pit.", Flying ? "fly" : "climb");
u.utrap = 0; u.utrap = 0;
fill_pit(u.ux, u.uy); fill_pit(u.ux, u.uy);
vision_full_recalc = 1; /* vision limits change */ vision_full_recalc = 1; /* vision limits change */
@@ -2834,16 +2838,16 @@ climb_pit()
"crawl"); "crawl");
fill_pit(u.ux, u.uy); fill_pit(u.ux, u.uy);
vision_full_recalc = 1; /* vision limits change */ vision_full_recalc = 1; /* vision limits change */
} else if (flags.verbose) { } else if (u.dz || flags.verbose) {
#ifdef STEED #ifdef STEED
if (u.usteed) if (u.usteed)
Norep("%s is still in a pit.", Norep("%s is still in a pit.",
upstart(y_monnam(u.usteed))); upstart(y_monnam(u.usteed)));
else else
#endif #endif
Norep( (Hallucination && !rn2(5)) ? Norep((Hallucination && !rn2(5)) ?
"You've fallen, and you can't get up." : "You've fallen, and you can't get up." :
"You are still in a pit." ); "You are still in a pit.");
} }
} }