misbehavior when tethered aklys gets stuck in web

Reported by elunna after it was noticed on Hack'EM
Closes #1152
This commit is contained in:
nhmall
2023-11-25 20:47:35 -05:00
parent 6c5b5c0688
commit b2a94c8555
2 changed files with 8 additions and 1 deletions
+2
View File
@@ -1750,6 +1750,8 @@ when using 'm #overview' to annotate a level other than current the one,
include level number, and dungeon branch if not current one, in the include level number, and dungeon branch if not current one, in the
prompt instead of generic "this level" prompt instead of generic "this level"
when using 'm #overview' in the endgame, don't include non-endgame levels when using 'm #overview' in the endgame, don't include non-endgame levels
when a tethered aklys gets caught in a web, make sure it doesn't return
and that the display of the tether gets cleaned up
Fixes to 3.7.0-x Platform and/or Interface Problems Exposed Via git Repository Fixes to 3.7.0-x Platform and/or Interface Problems Exposed Via git Repository
+6 -1
View File
@@ -3717,6 +3717,8 @@ bhit(
boolean in_skip = FALSE, allow_skip = FALSE; boolean in_skip = FALSE, allow_skip = FALSE;
boolean tethered_weapon = FALSE; boolean tethered_weapon = FALSE;
int skiprange_start = 0, skiprange_end = 0, skipcount = 0; int skiprange_start = 0, skiprange_end = 0, skipcount = 0;
struct obj *was_returning =
(iflags.returning_missile == obj) ? obj : (struct obj *) 0;
if (weapon == KICKED_WEAPON) { if (weapon == KICKED_WEAPON) {
/* object starts one square in front of player */ /* object starts one square in front of player */
@@ -3806,6 +3808,8 @@ bhit(
ttmp->tseen = TRUE; ttmp->tseen = TRUE;
newsym(x, y); newsym(x, y);
} }
if (was_returning)
iflags.returning_missile = (genericptr_t) 0;
break; break;
} }
@@ -3979,7 +3983,8 @@ bhit(
point_blank = FALSE; /* affects passing through iron bars */ point_blank = FALSE; /* affects passing through iron bars */
} }
if (weapon != ZAPPED_WAND && weapon != INVIS_BEAM && !tethered_weapon) if ((weapon != ZAPPED_WAND && weapon != INVIS_BEAM && !tethered_weapon)
|| (was_returning && was_returning != iflags.returning_missile))
tmp_at(DISP_END, 0); tmp_at(DISP_END, 0);
if (shopdoor) if (shopdoor)