fix B18010 fatal exploding chest at ball & chain
This commit is contained in:
@@ -372,6 +372,8 @@ monks lose their to-hit bonus for bare-handed attacking if wearing a shield
|
|||||||
fix case on leading character in "Crunched in the head..." in ball.c
|
fix case on leading character in "Crunched in the head..." in ball.c
|
||||||
using travel mode to move next to a known trap and then trying to step onto
|
using travel mode to move next to a known trap and then trying to step onto
|
||||||
that trap required an extra step; the first one ended up as a no-op
|
that trap required an extra step; the first one ended up as a no-op
|
||||||
|
punished with ball and chain on the same floor square as a trapped chest
|
||||||
|
when it exploded resulted in panic "remove_object: obj not on floor"
|
||||||
|
|
||||||
|
|
||||||
Platform- and/or Interface-Specific Fixes
|
Platform- and/or Interface-Specific Fixes
|
||||||
|
|||||||
12
src/trap.c
12
src/trap.c
@@ -3479,6 +3479,18 @@ boolean disarm;
|
|||||||
loss += stolen_value(obj, ox, oy,
|
loss += stolen_value(obj, ox, oy,
|
||||||
(boolean)shkp->mpeaceful, TRUE);
|
(boolean)shkp->mpeaceful, TRUE);
|
||||||
delete_contents(obj);
|
delete_contents(obj);
|
||||||
|
/* we're about to delete all things at this location,
|
||||||
|
* which could include the ball & chain.
|
||||||
|
* If we attempt to call unpunish() in the
|
||||||
|
* for-loop below we can end up with otmp2
|
||||||
|
* being invalid once the chain is gone.
|
||||||
|
* Deal with ball & chain right now instead.
|
||||||
|
*/
|
||||||
|
if (Punished && !carried(uball) &&
|
||||||
|
((uchain->ox == u.ux && uchain->oy == u.uy) ||
|
||||||
|
(uball->ox == u.ux && uball->oy == u.uy)))
|
||||||
|
unpunish();
|
||||||
|
|
||||||
for(otmp = level.objects[u.ux][u.uy];
|
for(otmp = level.objects[u.ux][u.uy];
|
||||||
otmp; otmp = otmp2) {
|
otmp; otmp = otmp2) {
|
||||||
otmp2 = otmp->nexthere;
|
otmp2 = otmp->nexthere;
|
||||||
|
|||||||
Reference in New Issue
Block a user