diff --git a/include/hack.h b/include/hack.h index 555a08818..5785b8590 100644 --- a/include/hack.h +++ b/include/hack.h @@ -333,6 +333,7 @@ typedef struct sortloot_item Loot; #define RECURSIVETRAP 0x08 /* trap changed into another type this same turn */ #define TOOKPLUNGE 0x10 /* used '>' to enter pit below you */ #define VIASITTING 0x20 /* #sit while at trap location (affects message) */ +#define FAILEDUNTRAP 0x40 /* trap activated by failed untrap attempt */ /* Flags to control test_move in hack.c */ #define DO_MOVE 0 /* really doing the move */ diff --git a/src/hack.c b/src/hack.c index 44351f4d7..29261a968 100644 --- a/src/hack.c +++ b/src/hack.c @@ -2058,7 +2058,7 @@ boolean pick; struct monst *mtmp; struct trap *trap = t_at(u.ux, u.uy); - int trapflag = iflags.failing_untrap ? FORCETRAP : 0; + int trapflag = iflags.failing_untrap ? FAILEDUNTRAP : 0; /* prevent recursion from affecting the hero all over again [hero poly'd to iron golem enters water here, drown() inflicts diff --git a/src/trap.c b/src/trap.c index 85d8c1a2e..957e0f63c 100644 --- a/src/trap.c +++ b/src/trap.c @@ -894,7 +894,8 @@ unsigned trflags; register int ttype = trap->ttyp; struct obj *otmp; boolean already_seen = trap->tseen, - forcetrap = (trflags & FORCETRAP) != 0, + forcetrap = ((trflags & FORCETRAP) != 0 + || (trflags & FAILEDUNTRAP) != 0), webmsgok = (trflags & NOWEBMSG) == 0, forcebungle = (trflags & FORCEBUNGLE) != 0, plunged = (trflags & TOOKPLUNGE) != 0, @@ -3989,7 +3990,7 @@ struct trap *ttmp; there are objects covering this trap */ ttmp->tseen = 0; /* hack for check_here() */ /* trigger the trap */ - iflags.failing_untrap++; /* spoteffects() -> dotrap(,FORCETRAP) */ + iflags.failing_untrap++; /* spoteffects() -> dotrap(,FAILEDUNTRAP) */ spoteffects(TRUE); /* pickup() + dotrap() */ iflags.failing_untrap--; /* this should no longer be necessary; before the failing_untrap @@ -4074,7 +4075,8 @@ boolean force_failure; pline("%s remains entangled.", Monnam(mtmp)); } } else if (under_u) { - dotrap(ttmp, 0); + /* [don't need the iflags.failing_untrap hack here] */ + dotrap(ttmp, FAILEDUNTRAP); } else { move_into_trap(ttmp); }