diff --git a/Source/missiles.cpp b/Source/missiles.cpp index e637204d5..a417e8dfd 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -664,7 +664,7 @@ void AddRune(Missile &missile, Point dst, missile_id missileID) if (!InDungeonBounds(target)) { return false; } - if (dObject[target.x][target.y] != 0) { + if (IsObjectAtPosition(target)) { return false; } if (TileContainsMissile(target)) { @@ -2059,7 +2059,7 @@ void AddTown(Missile &missile, Point dst, Direction /*midir*/) if (!InDungeonBounds(target)) { return false; } - if (dObject[target.x][target.y] != 0) { + if (IsObjectAtPosition(target)) { return false; } if (dPlayer[target.x][target.y] != 0) { @@ -2181,7 +2181,7 @@ void AddGuardian(Missile &missile, Point dst, Direction /*midir*/) if (dMonster[target.x][target.y] != 0) { return false; } - if (dObject[target.x][target.y] != 0) { + if (IsObjectAtPosition(target)) { return false; } if (TileContainsMissile(target)) { @@ -2491,7 +2491,7 @@ void AddFirewallC(Missile &missile, Point dst, Direction midir) { std::optional spreadPosition = FindClosestValidPosition( [start = missile.position.start](Point target) { - return start != target && IsTileNotSolid(target) && InDungeonBounds(target) && dObject[target.x][target.y] == 0 && LineClearMissile(start, target); + return start != target && IsTileNotSolid(target) && !IsObjectAtPosition(target) && LineClearMissile(start, target); }, dst, 0, 5); @@ -3010,16 +3010,16 @@ void MI_Firebolt(Missile &missile) void MI_Lightball(Missile &missile) { - int tx = missile.var1; - int ty = missile.var2; + Point targetPosition = { missile.var1, missile.var2 }; missile._mirange--; int j = missile._mirange; MoveMissileAndCheckMissileCol(missile, missile._midam, missile._midam, false, false); if (missile._miHitFlag) missile._mirange = j; - if (missile.position.tile == Point { tx, ty }) { - int8_t oi = abs(dObject[tx][ty]) - 1; - if (oi >= 0 && Objects[oi].IsShrine()) { + + if (missile.position.tile == targetPosition) { + Object *object = ObjectAtPosition(targetPosition); + if (object != nullptr && object->IsShrine()) { missile._mirange = j; } } @@ -3216,7 +3216,7 @@ void MI_FireRing(Missile &missile) int dp = dPiece[target.x][target.y]; if (nSolidTable[dp]) continue; - if (dObject[target.x][target.y] != 0) + if (IsObjectAtPosition(target)) continue; if (!LineClearMissile(missile.position.tile, target)) continue;