From e92445810f7ec8b9d5afc7730e2cf3d26e209b43 Mon Sep 17 00:00:00 2001 From: Pasi Kallinen Date: Tue, 8 Oct 2019 19:44:51 +0300 Subject: [PATCH] Fix ball and chain sanity Scatter did not consider the ball or chain, and moved them around, causing ball and chain sanity error. One way to trigger was being punished, with chain on a land mine and having a monster trigger the mine. Now the chain will shatter, unpunishing the hero. --- doc/fixes36.3 | 1 + src/explode.c | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/doc/fixes36.3 b/doc/fixes36.3 index f9781a9a8..71572a441 100644 --- a/doc/fixes36.3 +++ b/doc/fixes36.3 @@ -177,6 +177,7 @@ avoid 'object lost' panic when polymorph causes loss of levitation boots or over but buffered output didn't show it until hero stopped, so it wasn't possible to tell where they were, unlike all other forms of multiple movement; stop running if/when an engraving is reached +fix exploding land mine moving ball or chain and causing a sanity error Fixes to Post-3.6.2 Problems that Were Exposed Via git Repository diff --git a/src/explode.c b/src/explode.c index 941d22201..2c46178fd 100644 --- a/src/explode.c +++ b/src/explode.c @@ -621,6 +621,13 @@ struct obj *obj; /* only scatter this obj */ obj->ox, obj->oy, sx, sy); while ((otmp = (individual_object ? obj : level.objects[sx][sy])) != 0) { + if (otmp == uball || otmp == uchain) { + boolean waschain = (otmp == uchain); + pline_The("chain shatters!"); + unpunish(); + if (waschain) + continue; + } if (otmp->quan > 1L) { qtmp = otmp->quan - 1L; if (qtmp > LARGEST_INT)