diff options
Diffstat (limited to 'crawl-ref/source/beam.cc')
-rw-r--r-- | crawl-ref/source/beam.cc | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc index cd8d484634..2650e495b6 100644 --- a/crawl-ref/source/beam.cc +++ b/crawl-ref/source/beam.cc @@ -1882,7 +1882,8 @@ coord_def bolt::pos() const return ray.pos(); } -void bolt::hit_wall() +// Returns true if the beam ended due to hitting the wall. +bool bolt::hit_wall() { const dungeon_feature_type feat = grd(pos()); ASSERT( feat_is_solid(feat) ); @@ -1917,7 +1918,7 @@ void bolt::hit_wall() { beam_cancelled = true; finish_beam(); - return; + return (false); } // Well, we warned them. @@ -1954,7 +1955,11 @@ void bolt::hit_wall() target = ray.pos(); } finish_beam(); + + return (true); } + + return (false); } void bolt::affect_cell(bool avoid_self) @@ -1988,7 +1993,10 @@ void bolt::affect_cell(bool avoid_self) // Note that this can change the ray position and the solidity // of the wall. - hit_wall(); + if (hit_wall()) + // Beam ended due to hitting wall, so don't hit the player + // or monster with the regressed beam. + return; } const bool still_wall = (was_solid && old_pos == pos()); |