Merge pull request #2648 from bcko/2435_refactor_Missiles_3

This commit is contained in:
BC Ko 2021-08-20 00:53:17 -07:00 committed by GitHub
commit 1a6562e16d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 16 additions and 17 deletions

View file

@ -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;
}

View file

@ -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

View file

@ -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);
}
}

View file

@ -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);
}
}