Browse Source

Merge pull request #2648 from bcko/2435_refactor_Missiles_3

pull/2651/head
BC Ko 5 years ago committed by GitHub
parent
commit
1a6562e16d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 14
      Source/missiles.cpp
  2. 2
      Source/missiles.h
  3. 4
      Source/msg.cpp
  4. 13
      Source/player.cpp

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

2
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

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

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

Loading…
Cancel
Save