pit access
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.
This commit is contained in:
@@ -11,6 +11,8 @@ fix message when pushing a boulder into a pool while riding
|
|||||||
plural of "Nazgul" is "Nazgul" not "Nazguls"
|
plural of "Nazgul" is "Nazgul" not "Nazguls"
|
||||||
trap messages referring to named steed were ackwardly worded when hallucination
|
trap messages referring to named steed were ackwardly worded when hallucination
|
||||||
overrode use of the name
|
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
|
Platform- and/or Interface-Specific Fixes
|
||||||
|
|||||||
+11
-5
@@ -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. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -132,12 +132,18 @@ unsigned seed; /* for semi-controlled randomization */
|
|||||||
boolean
|
boolean
|
||||||
can_reach_floor()
|
can_reach_floor()
|
||||||
{
|
{
|
||||||
return (boolean)(!u.uswallow &&
|
struct trap *t;
|
||||||
|
|
||||||
|
if (u.uswallow) return FALSE;
|
||||||
#ifdef STEED
|
#ifdef STEED
|
||||||
/* Restricted/unskilled riders can't reach the floor */
|
/* Restricted/unskilled riders can't reach the floor */
|
||||||
!(u.usteed && P_SKILL(P_RIDING) < P_BASIC) &&
|
if (u.usteed && P_SKILL(P_RIDING) < P_BASIC) return FALSE;
|
||||||
#endif
|
#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)) &&
|
Is_airlevel(&u.uz) || Is_waterlevel(&u.uz)) &&
|
||||||
(!u.uundetected || !is_hider(youmonst.data) ||
|
(!u.uundetected || !is_hider(youmonst.data) ||
|
||||||
u.umonnum == PM_TRAPPER));
|
u.umonnum == PM_TRAPPER));
|
||||||
|
|||||||
+15
-23
@@ -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. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -1913,8 +1913,8 @@ dopickup()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (is_lava(u.ux, u.uy)) {
|
if (is_lava(u.ux, u.uy)) {
|
||||||
if (Wwalking || is_floater(youmonst.data) || is_clinger(youmonst.data)
|
if (Wwalking || is_floater(youmonst.data) ||
|
||||||
|| (Flying && !Breathless)) {
|
is_clinger(youmonst.data) || (Flying && !Breathless)) {
|
||||||
You_cant("reach the bottom to pick things up.");
|
You_cant("reach the bottom to pick things up.");
|
||||||
return(0);
|
return(0);
|
||||||
} else if (!likes_lava(youmonst.data)) {
|
} else if (!likes_lava(youmonst.data)) {
|
||||||
@@ -1922,29 +1922,21 @@ dopickup()
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(!OBJ_AT(u.ux, u.uy)) {
|
if (!OBJ_AT(u.ux, u.uy)) {
|
||||||
There("is nothing here to pick up.");
|
There("is nothing here to pick up.");
|
||||||
return(0);
|
return 0;
|
||||||
}
|
}
|
||||||
if (!can_reach_floor()) {
|
if (!can_reach_floor()) {
|
||||||
#ifdef STEED
|
if (traphere && uteetering_at_seen_pit(traphere))
|
||||||
if (u.usteed && P_SKILL(P_RIDING) < P_BASIC)
|
|
||||||
You("aren't skilled enough to reach from %s.",
|
|
||||||
y_monnam(u.usteed));
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
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.");
|
You("cannot reach the bottom of the pit.");
|
||||||
return(0);
|
#ifdef STEED
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
return (pickup(-count));
|
return (pickup(-count));
|
||||||
|
|||||||
+4
-11
@@ -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. */
|
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||||
/* NetHack may be freely redistributed. See license for details. */
|
/* NetHack may be freely redistributed. See license for details. */
|
||||||
|
|
||||||
@@ -408,19 +408,12 @@ int what; /* should be a long */
|
|||||||
|
|
||||||
/* no pickup if levitating & not on air or water level */
|
/* no pickup if levitating & not on air or water level */
|
||||||
if (!can_reach_floor()) {
|
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);
|
read_engr_at(u.ux, u.uy);
|
||||||
return (0);
|
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
|
/* multi && !context.run means they are in the middle of some other
|
||||||
* action, or possibly paralyzed, sleeping, etc.... and they just
|
* action, or possibly paralyzed, sleeping, etc.... and they just
|
||||||
* teleported onto the object. They shouldn't pick it up.
|
* teleported onto the object. They shouldn't pick it up.
|
||||||
|
|||||||
Reference in New Issue
Block a user