diff --git a/doc/fixes34.4 b/doc/fixes34.4 index a4ccd1680..a0c46469e 100644 --- a/doc/fixes34.4 +++ b/doc/fixes34.4 @@ -16,6 +16,7 @@ some actions such as eating corpses off the floor didn't check whether hero usmellmon() instead of "It turns into it" during monster polymorph grammar of messages regarding eating artifacts avoid a message about an invisible monster looking much better +player polymorphed as a xorn could not pick up items in pits Platform- and/or Interface-Specific Fixes diff --git a/src/dig.c b/src/dig.c index 54357a277..56c36dfc5 100644 --- a/src/dig.c +++ b/src/dig.c @@ -546,8 +546,7 @@ int ttyp; if(at_u) { if (!wont_fall) { - if (!Passes_walls) - u.utrap = rn1(4,2); + u.utrap = rn1(4,2); u.utraptype = TT_PIT; vision_full_recalc = 1; /* vision limits change */ } else diff --git a/src/dokick.c b/src/dokick.c index 7787138b5..3beb64c4a 100644 --- a/src/dokick.c +++ b/src/dokick.c @@ -663,9 +663,12 @@ dokick() Your("slow motion kick doesn't hit anything."); no_kick = TRUE; } else if (u.utrap) { + no_kick = TRUE; switch (u.utraptype) { case TT_PIT: - pline("There's not enough room to kick down here."); + if (!Passes_walls) + pline("There's not enough room to kick down here."); + else no_kick = FALSE; break; case TT_WEB: case TT_BEARTRAP: @@ -674,7 +677,6 @@ dokick() default: break; } - no_kick = TRUE; } if (no_kick) { @@ -706,6 +708,10 @@ dokick() default: Your("feeble kick has no effect."); break; } return(1); + } else if(u.utrap && u.utraptype == TT_PIT) { + /* must be Passes_walls */ + You("kick at the side of the pit."); + return 1; } if (Levitation) { int xx, yy; diff --git a/src/hack.c b/src/hack.c index 0e809d911..95ece8025 100644 --- a/src/hack.c +++ b/src/hack.c @@ -1169,7 +1169,13 @@ domove() } if(u.utrap) { if(u.utraptype == TT_PIT) { - if (!rn2(2) && sobj_at(BOULDER, u.ux, u.uy)) { + if (Passes_walls) { + /* marked as trapped so they can pick things up */ + You("ascend from the pit."); + u.utrap = 0; + fill_pit(u.ux, u.uy); + vision_full_recalc = 1; /* vision limits change */ + } else if (!rn2(2) && sobj_at(BOULDER, u.ux, u.uy)) { Your("%s gets stuck in a crevice.", body_part(LEG)); display_nhwindow(WIN_MESSAGE, FALSE); clear_nhwindow(WIN_MESSAGE); diff --git a/src/polyself.c b/src/polyself.c index d807d8c84..210eded10 100644 --- a/src/polyself.c +++ b/src/polyself.c @@ -36,7 +36,6 @@ const char *fmt, *arg; { boolean sticky = sticks(youmonst.data) && u.ustuck && !u.uswallow, was_mimicking = (youmonst.m_ap_type == M_AP_OBJECT); - boolean could_pass_walls = Passes_walls; boolean was_blind = !!Blind; if (Upolyd) { @@ -86,10 +85,8 @@ const char *fmt, *arg; if (u.twoweap && !could_twoweap(youmonst.data)) untwoweapon(); - if (u.utraptype == TT_PIT) { - if (could_pass_walls) { /* player forms cannot pass walls */ - u.utrap = rn1(6,2); - } + if (u.utraptype == TT_PIT && u.utrap) { + u.utrap = rn1(6,2); /* time to escape resets */ } if (was_blind && !Blind) { /* reverting from eyeless */ Blinded = 1L; @@ -340,7 +337,6 @@ int mntmp; { boolean sticky = sticks(youmonst.data) && u.ustuck && !u.uswallow, was_blind = !!Blind, dochange = FALSE; - boolean could_pass_walls = Passes_walls; int mlvl; if (mvitals[mntmp].mvflags & G_GENOD) { /* allow G_EXTINCT */ @@ -464,12 +460,8 @@ int mntmp; drop_weapon(1); (void) hideunder(&youmonst); - if (u.utraptype == TT_PIT) { - if (could_pass_walls && !Passes_walls) { - u.utrap = rn1(6,2); - } else if (!could_pass_walls && Passes_walls) { - u.utrap = 0; - } + if (u.utraptype == TT_PIT && u.utrap) { + u.utrap = rn1(6,2); /* time to escape resets */ } if (was_blind && !Blind) { /* previous form was eyeless */ Blinded = 1L; diff --git a/src/sit.c b/src/sit.c index 4280136b9..9846f4e50 100644 --- a/src/sit.c +++ b/src/sit.c @@ -65,9 +65,7 @@ dosit() if (OBJ_AT(u.ux, u.uy) && /* ensure we're not standing on the precipice */ - !((!u.utrap || u.utraptype != TT_PIT) && - (trap && trap->tseen && - (trap->ttyp==PIT || trap->ttyp==SPIKED_PIT)))) { + !uteetering_at_seen_pit(trap)) { register struct obj *obj; obj = level.objects[u.ux][u.uy]; diff --git a/src/trap.c b/src/trap.c index 2a68a2e1a..8d0c0b4ac 100644 --- a/src/trap.c +++ b/src/trap.c @@ -908,8 +908,7 @@ glovecheck: (void) rust_dmg(uarmg, "gauntlets", 1, TRUE, &youmonst); #endif You("land %s!", predicament); } - if (!Passes_walls) - u.utrap = rn1(6,2); + u.utrap = rn1(6,2); u.utraptype = TT_PIT; #ifdef STEED if (!steedintrap(trap, (struct obj *)0)) {