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;