flying hero should be able to pass through a hole using '>'

This commit is contained in:
nhmall
2019-12-16 00:25:20 -05:00
parent e8f313bc2d
commit edd9d5b810
4 changed files with 14 additions and 8 deletions

View File

@@ -12,6 +12,7 @@ fix internal self-recover to work with recent fields added to checkpoint file
improvements to pronoun usage when hallucinating
function calls made from mapglyph based on dungeon level are now called once
per level
flying hero could not use a hole deliberately with '>'
Fixes to Pre-3.7.0 Problems that Were Exposed Via git Repository

View File

@@ -2603,7 +2603,7 @@ E boolean FDECL(burnarmor, (struct monst *));
E int FDECL(erode_obj, (struct obj *, const char *, int, int));
E boolean FDECL(grease_protect, (struct obj *, const char *, struct monst *));
E struct trap *FDECL(maketrap, (int, int, int));
E void FDECL(fall_through, (BOOLEAN_P));
E void FDECL(fall_through, (BOOLEAN_P, unsigned));
E struct monst *FDECL(animate_statue,
(struct obj *, XCHAR_P, XCHAR_P, int, int *));
E struct monst *FDECL(activate_statue_trap,

View File

@@ -1042,7 +1042,7 @@ dokick()
return 1;
} else if (!rn2(4)) {
if (dunlev(&u.uz) < dunlevs_in_dungeon(&u.uz)) {
fall_through(FALSE);
fall_through(FALSE, 0);
return 1;
} else
goto ouch;

View File

@@ -440,13 +440,15 @@ int x, y, typ;
}
void
fall_through(td)
fall_through(td, ftflags)
boolean td; /* td == TRUE : trap door or hole */
unsigned ftflags;
{
d_level dtmp;
char msgbuf[BUFSZ];
const char *dont_fall = 0;
int newlevel, bottom;
struct trap *t = (struct trap *) 0;
/* we'll fall even while levitating in Sokoban; otherwise, if we
won't fall and won't be told that we aren't falling, give up now */
@@ -469,10 +471,9 @@ boolean td; /* td == TRUE : trap door or hole */
} while (!rn2(4) && newlevel < bottom);
if (td) {
struct trap *t = t_at(u.ux, u.uy);
t = t_at(u.ux, u.uy);
feeltrap(t);
if (!Sokoban) {
if (!Sokoban && !(ftflags & TOOKPLUNGE)) {
if (t->ttyp == TRAPDOOR)
pline("A trap door opens up under you!");
else
@@ -484,7 +485,8 @@ boolean td; /* td == TRUE : trap door or hole */
if (Sokoban && Can_fall_thru(&u.uz))
; /* KMH -- You can't escape the Sokoban level traps */
else if (Levitation || u.ustuck
|| (!Can_fall_thru(&u.uz) && !levl[u.ux][u.uy].candig) || Flying
|| (!Can_fall_thru(&u.uz) && !levl[u.ux][u.uy].candig)
|| (Flying && !(ftflags & TOOKPLUNGE))
|| is_clinger(g.youmonst.data)
|| (Inhell && !u.uevent.invoked && newlevel == bottom)) {
dont_fall = "don't fall in.";
@@ -503,6 +505,9 @@ boolean td; /* td == TRUE : trap door or hole */
}
return;
}
if (Flying && (ftflags & TOOKPLUNGE) && td && t)
You("swoop down %s!", (t->ttyp == TRAPDOOR)
? "through the trap door" : "into the gaping hole");
if (*u.ushops)
shopdig(1);
@@ -1283,7 +1288,7 @@ unsigned trflags;
defsyms[trap_to_defsym(ttype)].explanation);
break; /* don't activate it after all */
}
fall_through(TRUE);
fall_through(TRUE, (trflags & TOOKPLUNGE));
break;
case TELEP_TRAP: