Fix segfault with uball

Drowning in a pool while punished and carrying the ball,
and the only available space to crawl back on dry land
has a magic trap, which unpunishes you.
This commit is contained in:
Pasi Kallinen
2022-03-05 10:06:01 +02:00
parent 74c4ee89cc
commit fab1048f2f

View File

@@ -365,8 +365,14 @@ teleds(int nux, int nuy, int teleds_flags)
if (drag_ball(nux, nuy, &bc_control, &ballx, &bally, &chainx,
&chainy, &cause_delay, allow_drag))
move_bc(0, bc_control, ballx, bally, chainx, chainy);
else /* dragging fails if hero is encumbered beyond 'burdened' */
unplacebc(); /* to match placebc() below */
else {
/* dragging fails if hero is encumbered beyond 'burdened' */
/* uball might've been cleared via drag_ball -> spoteffects ->
dotrap -> magic trap unpunishment */
ball_active = (Punished && uball->where != OBJ_FREE);
if (ball_active)
unplacebc(); /* to match placebc() below */
}
}
/* must set u.ux, u.uy after drag_ball(), which may need to know