Skip to content

Commit

Permalink
pit access
Browse files Browse the repository at this point in the history
     Fix the recently reported problem:

" If there is a corpse in a pit, you have to enter the pit in order to pick
" it up, however you are can eat it without being in the pit.

If pit bottoms aren't reachable, then can_reach_floor() needs to know
about it.  I suspect that this change is likely to create some other
bugs though.
  • Loading branch information
nethack.rankin committed Jan 4, 2004
1 parent 62e4687 commit b899112
Show file tree
Hide file tree
Showing 4 changed files with 30 additions and 37 deletions.
2 changes: 2 additions & 0 deletions doc/fixes34.4
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ fix message when pushing a boulder into a pool while riding
plural of "Nazgul" is "Nazgul" not "Nazguls"
trap messages referring to named steed were ackwardly worded when hallucination
overrode use of the name
some actions such as eating corpses off the floor didn't check whether hero
could reach the bottom of a pit


Platform- and/or Interface-Specific Fixes
Expand Down
16 changes: 11 additions & 5 deletions src/engrave.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* SCCS Id: @(#)engrave.c 3.4 2001/11/04 */
/* SCCS Id: @(#)engrave.c 3.4 2004/01/03 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */

Expand Down Expand Up @@ -132,12 +132,18 @@ unsigned seed; /* for semi-controlled randomization */
boolean
can_reach_floor()
{
return (boolean)(!u.uswallow &&
struct trap *t;

if (u.uswallow) return FALSE;
#ifdef STEED
/* Restricted/unskilled riders can't reach the floor */
!(u.usteed && P_SKILL(P_RIDING) < P_BASIC) &&
/* Restricted/unskilled riders can't reach the floor */
if (u.usteed && P_SKILL(P_RIDING) < P_BASIC) return FALSE;
#endif
(!Levitation ||
if ((t = t_at(u.ux, u.uy)) != 0 && uteetering_at_seen_pit(t) &&
!Flying)
return FALSE;

return (boolean)((!Levitation ||
Is_airlevel(&u.uz) || Is_waterlevel(&u.uz)) &&
(!u.uundetected || !is_hider(youmonst.data) ||
u.umonnum == PM_TRAPPER));
Expand Down
34 changes: 13 additions & 21 deletions src/hack.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* SCCS Id: @(#)hack.c 3.4 2003/04/30 */
/* SCCS Id: @(#)hack.c 3.4 2004/01/03 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */

Expand Down Expand Up @@ -1913,38 +1913,30 @@ dopickup()
}
}
if (is_lava(u.ux, u.uy)) {
if (Wwalking || is_floater(youmonst.data) || is_clinger(youmonst.data)
|| (Flying && !Breathless)) {
if (Wwalking || is_floater(youmonst.data) ||
is_clinger(youmonst.data) || (Flying && !Breathless)) {
You_cant("reach the bottom to pick things up.");
return(0);
} else if (!likes_lava(youmonst.data)) {
You("would burn to a crisp trying to pick things up.");
return(0);
}
}
if(!OBJ_AT(u.ux, u.uy)) {
There("is nothing here to pick up.");
return(0);
if (!OBJ_AT(u.ux, u.uy)) {
There("is nothing here to pick up.");
return 0;
}
if (!can_reach_floor()) {
if (traphere && uteetering_at_seen_pit(traphere))
You("cannot reach the bottom of the pit.");
#ifdef STEED
if (u.usteed && P_SKILL(P_RIDING) < P_BASIC)
You("aren't skilled enough to reach from %s.",
y_monnam(u.usteed));
else
else if (u.usteed && P_SKILL(P_RIDING) < P_BASIC)
You("aren't skilled enough to reach from %s.",
y_monnam(u.usteed));
#endif
else
You("cannot reach the %s.", surface(u.ux,u.uy));
return(0);
}

if (traphere && uteetering_at_seen_pit(traphere)) {
/* Allow pickup from holes and trap doors that you escaped from
* because that stuff is teetering on the edge just like you, but
* not pits, because there is an elevation discrepancy with stuff
* in pits.
*/
You("cannot reach the bottom of the pit.");
return(0);
return 0;
}

return (pickup(-count));
Expand Down
15 changes: 4 additions & 11 deletions src/pickup.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* SCCS Id: @(#)pickup.c 3.4 2003/07/27 */
/* SCCS Id: @(#)pickup.c 3.4 2004/01/03 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */

Expand Down Expand Up @@ -408,19 +408,12 @@ int what; /* should be a long */

/* no pickup if levitating & not on air or water level */
if (!can_reach_floor()) {
if ((multi && !context.run) || (autopickup && !flags.pickup))
if ((multi && !context.run) ||
(autopickup && !flags.pickup) ||
(ttmp && uteetering_at_seen_pit(ttmp)))
read_engr_at(u.ux, u.uy);
return (0);
}
if (ttmp && uteetering_at_seen_pit(ttmp)) {
/* Allow pickup from holes and trap doors that you escaped
* from because that stuff is teetering on the edge just
* like you, but not pits, because there is an elevation
* discrepancy with stuff in pits.
*/
read_engr_at(u.ux, u.uy);
return(0);
}
/* multi && !context.run means they are in the middle of some other
* action, or possibly paralyzed, sleeping, etc.... and they just
* teleported onto the object. They shouldn't pick it up.
Expand Down

0 comments on commit b899112

Please sign in to comment.