student statues were converted to valkyries, not archeologists
fix typo in bustling town down stairs declaration
you could exceed the limits on nazgul and erinys counts via bones files
+fix inconsistency where you can't kick something out of a pit, but you can
+ escape the pit and still pick it up; items are now assumed to be at
+ the bottom of pit
Platform- and/or Interface-Specific Fixes
newsym(x, y);
}
water_damage(obj, FALSE, FALSE);
+ } else if (u.ux == x && u.uy == y &&
+ (!u.utrap || u.utrap && u.utraptype != TT_PIT) &&
+ (t = t_at(x,y)) != 0 && t->tseen &&
+ (t->ttyp==PIT || t->ttyp==SPIKED_PIT)) {
+ static const char * const the_your[2] = { "the", "your" };
+ /* you escaped a pit and are standing on the precipice */
+ if (Blind && flags.soundok)
+ You_hear("%s %s downwards.",
+ The(xname(obj)), otense(obj, "tumble"));
+ else
+ pline("%s %s into %s pit.",
+ The(xname(obj)), otense(obj, "tumble"),
+ the_your[t->madeby_u]);
}
return FALSE;
}
spoteffects(pick)
boolean pick;
{
- register struct trap *trap;
register struct monst *mtmp;
if(u.uinwater) {
if(IS_SINK(levl[u.ux][u.uy].typ) && Levitation)
dosinkfall();
#endif
- if (pick && !in_steed_dismounting)
- (void) pickup(1);
- /* if dismounting, we'll check again later */
- if ((trap = t_at(u.ux,u.uy)) != 0 && !in_steed_dismounting)
- dotrap(trap, 0); /* fall into pit, arrow trap, etc. */
+ if (!in_steed_dismounting) { /* if dismounting, we'll check again later */
+ struct trap *trap = t_at(u.ux, u.uy);
+ boolean pit;
+ pit = (trap && (trap->ttyp == PIT || trap->ttyp == SPIKED_PIT));
+ if (trap && pit)
+ dotrap(trap, 0); /* fall into pit */
+ if (pick) (void) pickup(1);
+ if (trap && !pit)
+ dotrap(trap, 0); /* fall into arrow trap, etc. */
+ }
if((mtmp = m_at(u.ux, u.uy)) && !u.uswallow) {
mtmp->mundetected = mtmp->msleeping = 0;
switch(mtmp->data->mlet) {
dopickup()
{
int count;
- /* awful kludge to work around parse()'s pre-decrement */
+ struct trap *traphere = t_at(u.ux, u.uy);
+ /* awful kludge to work around parse()'s pre-decrement */
count = (multi || (save_cm && *save_cm == ',')) ? multi + 1 : 0;
multi = 0; /* always reset */
/* uswallow case added by GAN 01/29/87 */
You("cannot reach the %s.", surface(u.ux,u.uy));
return(0);
}
+
+ if (traphere && traphere->tseen) {
+ /* 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.
+ */
+ if ((traphere->ttyp == PIT || traphere->ttyp == SPIKED_PIT) &&
+ (!u.utrap || (u.utrap && u.utraptype != TT_PIT))) {
+ You("cannot reach the bottom of the pit.");
+ return(0);
+ }
+ }
+
return (pickup(-count));
}
count = 0;
if (!u.uswallow) {
+ struct trap *ttmp = t_at(u.ux, u.uy);
/* no auto-pick if no-pick move, nothing there, or in a pool */
if (autopickup && (flags.nopick || !OBJ_AT(u.ux, u.uy) ||
(is_pool(u.ux, u.uy) && !Underwater) || is_lava(u.ux, u.uy))) {
read_engr_at(u.ux, u.uy);
return (0);
}
-
+ if (ttmp && ttmp->tseen) {
+ /* 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.
+ */
+ if ((ttmp->ttyp == PIT || ttmp->ttyp == SPIKED_PIT) &&
+ (!u.utrap || (u.utrap && u.utraptype != TT_PIT))) {
+ read_engr_at(u.ux, u.uy);
+ return(0);
+ }
+ }
/* multi && !flags.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.