Browse Source

Use FindParent() in MI_Firebolt

pull/2699/head
Anders Jenbo 5 years ago
parent
commit
ff23277cfa
  1. 32
      Source/missiles.cpp

32
Source/missiles.cpp

@ -748,7 +748,6 @@ bool GrowWall(int playerId, Point position, Point target, missile_id type, int s
return true;
}
/**
* @brief Find parent missile (uses _miVar4)
*
@ -2078,7 +2077,7 @@ void AddLightning(MissileStruct &missile, Point dst, Direction /*midir*/)
missile._mlid = AddLight(missile.position.tile, 4);
}
void AddMisexp(MissileStruct &missile, Point dst, Direction /*midir*/)
void AddMisexp(MissileStruct &missile, Point /*dst*/, Direction /*midir*/)
{
if (missile._micaster != TARGET_MONSTERS && missile._misource >= 0) {
switch (Monsters[missile._misource].MType->mtype) {
@ -2099,10 +2098,12 @@ void AddMisexp(MissileStruct &missile, Point dst, Direction /*midir*/)
}
}
missile.position.tile = Missiles[dst.x].position.tile;
missile.position.start = Missiles[dst.x].position.start;
missile.position.offset = Missiles[dst.x].position.offset;
missile.position.traveled = Missiles[dst.x].position.traveled;
int mx = FindParent(missile);
assert(mx != -1); // AddMisexp will always be called with a parent associated to the missile.
missile.position.tile = Missiles[mx].position.tile;
missile.position.start = Missiles[mx].position.start;
missile.position.offset = Missiles[mx].position.offset;
missile.position.traveled = Missiles[mx].position.traveled;
missile._mirange = missile._miAnimLen;
}
@ -3041,17 +3042,19 @@ void MI_Firebolt(int i)
missile.position.traveled = { omx, omy };
UpdateMissilePos(missile);
missile.position.StopMissile();
missile._miVar4 = -(AvailableMissiles[0] + 1);
Point dst = { 0, 0 };
auto dir = static_cast<Direction>(missile._mimfnum);
switch (missile._mitype) {
case MIS_FIREBOLT:
case MIS_MAGMABALL:
AddMissile(missile.position.tile, { i, 0 }, dir, MIS_MISEXP, missile._micaster, missile._misource, 0, 0);
AddMissile(missile.position.tile, dst, dir, MIS_MISEXP, missile._micaster, missile._misource, 0, 0);
break;
case MIS_FLARE:
AddMissile(missile.position.tile, { i, 0 }, dir, MIS_MISEXP2, missile._micaster, missile._misource, 0, 0);
AddMissile(missile.position.tile, dst, dir, MIS_MISEXP2, missile._micaster, missile._misource, 0, 0);
break;
case MIS_ACID:
AddMissile(missile.position.tile, { i, 0 }, dir, MIS_MISEXP3, missile._micaster, missile._misource, 0, 0);
AddMissile(missile.position.tile, dst, dir, MIS_MISEXP3, missile._micaster, missile._misource, 0, 0);
break;
case MIS_BONESPIRIT:
SetMissDir(missile, 8);
@ -3060,23 +3063,24 @@ void MI_Firebolt(int i)
PutMissile(missile);
return;
case MIS_LICH:
AddMissile(missile.position.tile, { i, 0 }, dir, MIS_EXORA1, missile._micaster, missile._misource, 0, 0);
AddMissile(missile.position.tile, dst, dir, MIS_EXORA1, missile._micaster, missile._misource, 0, 0);
break;
case MIS_PSYCHORB:
AddMissile(missile.position.tile, { i, 0 }, dir, MIS_EXBL2, missile._micaster, missile._misource, 0, 0);
AddMissile(missile.position.tile, dst, dir, MIS_EXBL2, missile._micaster, missile._misource, 0, 0);
break;
case MIS_NECROMORB:
AddMissile(missile.position.tile, { i, 0 }, dir, MIS_EXRED3, missile._micaster, missile._misource, 0, 0);
AddMissile(missile.position.tile, dst, dir, MIS_EXRED3, missile._micaster, missile._misource, 0, 0);
break;
case MIS_ARCHLICH:
AddMissile(missile.position.tile, { i, 0 }, dir, MIS_EXYEL2, missile._micaster, missile._misource, 0, 0);
AddMissile(missile.position.tile, dst, dir, MIS_EXYEL2, missile._micaster, missile._misource, 0, 0);
break;
case MIS_BONEDEMON:
AddMissile(missile.position.tile, { i, 0 }, dir, MIS_EXBL3, missile._micaster, missile._misource, 0, 0);
AddMissile(missile.position.tile, dst, dir, MIS_EXBL3, missile._micaster, missile._misource, 0, 0);
break;
default:
break;
}
missile._miVar4 = 0;
if (missile._mlid != NO_LIGHT)
AddUnLight(missile._mlid);
PutMissile(missile);

Loading…
Cancel
Save