From 4b93249eeee1a5e611367b9f041bd4ce46ed39a3 Mon Sep 17 00:00:00 2001 From: obligaron Date: Sun, 10 Apr 2022 23:15:28 +0200 Subject: [PATCH] Use MoveMissile in SpawnLightning to correctly check walls --- Source/missiles.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 1f71c0d61..db2bb3965 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -661,20 +661,24 @@ void SyncPositionWithParent(Missile &missile, const AddMissileParameter ¶met void SpawnLightning(Missile &missile, int dam) { missile._mirange--; - missile.position.traveled += missile.position.velocity; - UpdateMissilePos(missile); - - Point position = missile.position.tile; - assert(InDungeonBounds(position)); - int pn = dPiece[position.x][position.y]; - assert(pn >= 0 && pn <= MAXTILES); + MoveMissile( + missile, [&](Point tile) { + assert(InDungeonBounds(tile)); + int pn = dPiece[tile.x][tile.y]; + assert(pn >= 0 && pn <= MAXTILES); + + if (!missile.IsTrap() || tile != missile.position.start) { + if (TileHasAny(pn, TileProperties::BlockMissile)) { + missile._mirange = 0; + return false; + } + } - if (!missile.IsTrap() || position != missile.position.start) { - if (TileHasAny(pn, TileProperties::BlockMissile)) { - missile._mirange = 0; - } - } + return true; + }); + auto position = missile.position.tile; + int pn = dPiece[position.x][position.y]; if (!TileHasAny(pn, TileProperties::BlockMissile)) { if (position != Point { missile.var1, missile.var2 } && InDungeonBounds(position)) { missile_id type = MIS_LIGHTNING;