diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 690ae79f0..7ce6fbd3e 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -658,9 +658,8 @@ bool CheckIfTrig(Point position) return false; } -bool GuardianTryFireAt(int i, Point target) +bool GuardianTryFireAt(MissileStruct &missile, Point target) { - auto &missile = Missiles[i]; Point position = missile.position.tile; if (!LineClearMissile(position, target)) @@ -3916,10 +3915,10 @@ void MI_Guardian(int i) if (previous == offset) { continue; } - found = GuardianTryFireAt(i, { position.x + offset.deltaX, position.y + offset.deltaY }) - || GuardianTryFireAt(i, { position.x - offset.deltaX, position.y - offset.deltaY }) - || GuardianTryFireAt(i, { position.x + offset.deltaX, position.y - offset.deltaY }) - || GuardianTryFireAt(i, { position.x - offset.deltaX, position.y + offset.deltaY }); + found = GuardianTryFireAt(missile, { position.x + offset.deltaX, position.y + offset.deltaY }) + || GuardianTryFireAt(missile, { position.x - offset.deltaX, position.y - offset.deltaY }) + || GuardianTryFireAt(missile, { position.x + offset.deltaX, position.y - offset.deltaY }) + || GuardianTryFireAt(missile, { position.x - offset.deltaX, position.y + offset.deltaY }); if (!found) { previous = offset; } @@ -4686,9 +4685,8 @@ void missiles_process_charge() } } -void ClearMissileSpot(int mi) +void ClearMissileSpot(Point &missileTile) { - auto &missileTile = Missiles[mi].position.tile; dFlags[missileTile.x][missileTile.y] &= ~BFLAG_MISSILE; dMissile[missileTile.x][missileTile.y] = 0; } diff --git a/Source/missiles.h b/Source/missiles.h index 28e1e309e..c5f160946 100644 --- a/Source/missiles.h +++ b/Source/missiles.h @@ -268,6 +268,6 @@ void MI_ResurrectBeam(int i); void MI_Rportal(int i); void ProcessMissiles(); void missiles_process_charge(); -void ClearMissileSpot(int mi); +void ClearMissileSpot(Point &missileTile); } // namespace devilution diff --git a/Source/msg.cpp b/Source/msg.cpp index c35e40e44..a72190d8b 100644 --- a/Source/msg.cpp +++ b/Source/msg.cpp @@ -1760,7 +1760,7 @@ DWORD OnEndShield(TCmd *pCmd, int pnum) int mi = ActiveMissiles[i]; auto &missile = Missiles[mi]; if (missile._mitype == MIS_MANASHIELD && missile._misource == pnum) { - ClearMissileSpot(mi); + ClearMissileSpot(missile.position.tile); DeleteMissile(mi, i); } } @@ -1793,7 +1793,7 @@ DWORD OnEndReflect(TCmd *pCmd, int pnum) int mi = ActiveMissiles[i]; auto &missile = Missiles[mi]; if (missile._mitype == MIS_REFLECT && missile._misource == pnum) { - ClearMissileSpot(mi); + ClearMissileSpot(missile.position.tile); DeleteMissile(mi, i); } } diff --git a/Source/player.cpp b/Source/player.cpp index cc86da156..928cd2361 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -3216,19 +3216,20 @@ void RemovePlrMissiles(int pnum) for (int i = 0; i < ActiveMissileCount; i++) { int am = ActiveMissiles[i]; - if (Missiles[am]._mitype == MIS_STONE && Missiles[am]._misource == pnum) { - Monsters[Missiles[am]._miVar2]._mmode = (MON_MODE)Missiles[am]._miVar1; + auto &missile = Missiles[am]; + if (missile._mitype == MIS_STONE && missile._misource == pnum) { + Monsters[missile._miVar2]._mmode = (MON_MODE)missile._miVar1; } - if (Missiles[am]._mitype == MIS_MANASHIELD && Missiles[am]._misource == pnum) { - ClearMissileSpot(am); + if (missile._mitype == MIS_MANASHIELD && missile._misource == pnum) { + ClearMissileSpot(missile.position.tile); DeleteMissile(am, i); } if (Missiles[am]._mitype == MIS_REFLECT && Missiles[am]._misource == pnum) { - ClearMissileSpot(am); + ClearMissileSpot(missile.position.tile); DeleteMissile(am, i); } if (Missiles[am]._mitype == MIS_ETHEREALIZE && Missiles[am]._misource == pnum) { - ClearMissileSpot(am); + ClearMissileSpot(missile.position.tile); DeleteMissile(am, i); } }