Browse Source

Add AddMissileParameter

pull/3972/head
obligaron 4 years ago committed by Anders Jenbo
parent
commit
1aabcf295b
  1. 3
      Source/misdat.h
  2. 298
      Source/missiles.cpp
  3. 152
      Source/missiles.h

3
Source/misdat.h

@ -110,9 +110,10 @@ enum class MissileMovementDistrubution {
}; };
struct Missile; struct Missile;
struct AddMissileParameter;
struct MissileData { struct MissileData {
void (*mAddProc)(Missile &, Point, Direction); void (*mAddProc)(Missile &, const AddMissileParameter &);
void (*mProc)(Missile &); void (*mProc)(Missile &);
uint8_t mName; uint8_t mName;
bool mDraw; bool mDraw;

298
Source/missiles.cpp

@ -1267,46 +1267,46 @@ void InitMissiles()
} }
} }
void AddHiveExplosion(Missile &missile, Point /*dst*/, Direction midir) void AddHiveExplosion(Missile &missile, const AddMissileParameter &parameter)
{ {
for (int x : { 80, 81 }) { for (int x : { 80, 81 }) {
for (int y : { 62, 63 }) { for (int y : { 62, 63 }) {
AddMissile({ x, y }, { 80, 62 }, midir, MIS_HIVEEXP, missile._micaster, missile._misource, missile._midam, 0); AddMissile({ x, y }, { 80, 62 }, parameter.midir, MIS_HIVEEXP, missile._micaster, missile._misource, missile._midam, 0);
} }
} }
missile._miDelFlag = true; missile._miDelFlag = true;
} }
void AddFireRune(Missile &missile, Point dst, Direction /*midir*/) void AddFireRune(Missile &missile, const AddMissileParameter &parameter)
{ {
AddRune(missile, dst, MIS_HIVEEXP); AddRune(missile, parameter.dst, MIS_HIVEEXP);
} }
void AddLightningRune(Missile &missile, Point dst, Direction /*midir*/) void AddLightningRune(Missile &missile, const AddMissileParameter &parameter)
{ {
int id = missile._misource; int id = missile._misource;
int lvl = (id > -1) ? Players[id]._pLevel : 0; int lvl = (id > -1) ? Players[id]._pLevel : 0;
int dmg = 16 * (GenerateRndSum(10, 2) + lvl + 2); int dmg = 16 * (GenerateRndSum(10, 2) + lvl + 2);
missile._midam = dmg; missile._midam = dmg;
AddRune(missile, dst, MIS_LIGHTWALL); AddRune(missile, parameter.dst, MIS_LIGHTWALL);
} }
void AddGreatLightningRune(Missile &missile, Point dst, Direction /*midir*/) void AddGreatLightningRune(Missile &missile, const AddMissileParameter &parameter)
{ {
AddRune(missile, dst, MIS_NOVA); AddRune(missile, parameter.dst, MIS_NOVA);
} }
void AddImmolationRune(Missile &missile, Point dst, Direction /*midir*/) void AddImmolationRune(Missile &missile, const AddMissileParameter &parameter)
{ {
AddRune(missile, dst, MIS_IMMOLATION); AddRune(missile, parameter.dst, MIS_IMMOLATION);
} }
void AddStoneRune(Missile &missile, Point dst, Direction /*midir*/) void AddStoneRune(Missile &missile, const AddMissileParameter &parameter)
{ {
AddRune(missile, dst, MIS_STONE); AddRune(missile, parameter.dst, MIS_STONE);
} }
void AddReflection(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddReflection(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
missile._miDelFlag = true; missile._miDelFlag = true;
@ -1325,7 +1325,7 @@ void AddReflection(Missile &missile, Point /*dst*/, Direction /*midir*/)
UseMana(missile._misource, SPL_REFLECT); UseMana(missile._misource, SPL_REFLECT);
} }
void AddBerserk(Missile &missile, Point dst, Direction /*midir*/) void AddBerserk(Missile &missile, const AddMissileParameter &parameter)
{ {
missile._miDelFlag = true; missile._miDelFlag = true;
@ -1358,7 +1358,7 @@ void AddBerserk(Missile &missile, Point dst, Direction /*midir*/)
return true; return true;
}, },
dst, 0, 5); parameter.dst, 0, 5);
if (targetMonsterPosition) { if (targetMonsterPosition) {
auto &monster = Monsters[abs(dMonster[targetMonsterPosition->x][targetMonsterPosition->y]) - 1]; auto &monster = Monsters[abs(dMonster[targetMonsterPosition->x][targetMonsterPosition->y]) - 1];
@ -1374,15 +1374,15 @@ void AddBerserk(Missile &missile, Point dst, Direction /*midir*/)
} }
} }
void AddHorkSpawn(Missile &missile, Point dst, Direction midir) void AddHorkSpawn(Missile &missile, const AddMissileParameter &parameter)
{ {
UpdateMissileVelocity(missile, dst, 8); UpdateMissileVelocity(missile, parameter.dst, 8);
missile._mirange = 9; missile._mirange = 9;
missile.var1 = static_cast<int32_t>(midir); missile.var1 = static_cast<int32_t>(parameter.midir);
PutMissile(missile); PutMissile(missile);
} }
void AddJester(Missile &missile, Point dst, Direction midir) void AddJester(Missile &missile, const AddMissileParameter &parameter)
{ {
missile_id spell = MIS_FIREBOLT; missile_id spell = MIS_FIREBOLT;
switch (GenerateRnd(10)) { switch (GenerateRnd(10)) {
@ -1416,11 +1416,11 @@ void AddJester(Missile &missile, Point dst, Direction midir)
spell = MIS_STONE; spell = MIS_STONE;
break; break;
} }
AddMissile(missile.position.start, dst, midir, spell, missile._micaster, missile._misource, 0, missile._mispllvl); AddMissile(missile.position.start, parameter.dst, parameter.midir, spell, missile._micaster, missile._misource, 0, missile._mispllvl);
missile._miDelFlag = true; missile._miDelFlag = true;
} }
void AddStealPotions(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddStealPotions(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
for (int i = 0; i < 3; i++) { for (int i = 0; i < 3; i++) {
int k = CrawlNum[i]; int k = CrawlNum[i];
@ -1492,7 +1492,7 @@ void AddStealPotions(Missile &missile, Point /*dst*/, Direction /*midir*/)
missile._miDelFlag = true; missile._miDelFlag = true;
} }
void AddManaTrap(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddManaTrap(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
std::optional<Point> trappedPlayerPosition = FindClosestValidPosition( std::optional<Point> trappedPlayerPosition = FindClosestValidPosition(
[](Point target) { [](Point target) {
@ -1513,7 +1513,7 @@ void AddManaTrap(Missile &missile, Point /*dst*/, Direction /*midir*/)
missile._miDelFlag = true; missile._miDelFlag = true;
} }
void AddSpecArrow(Missile &missile, Point dst, Direction /*midir*/) void AddSpecArrow(Missile &missile, const AddMissileParameter &parameter)
{ {
int av = 0; int av = 0;
@ -1536,12 +1536,12 @@ void AddSpecArrow(Missile &missile, Point dst, Direction /*midir*/)
} }
missile._mirange = 1; missile._mirange = 1;
missile.var1 = dst.x; missile.var1 = parameter.dst.x;
missile.var2 = dst.y; missile.var2 = parameter.dst.y;
missile.var3 = av; missile.var3 = av;
} }
void AddWarp(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddWarp(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
int minDistanceSq = std::numeric_limits<int>::max(); int minDistanceSq = std::numeric_limits<int>::max();
Point src = missile.position.start; Point src = missile.position.start;
@ -1573,9 +1573,9 @@ void AddWarp(Missile &missile, Point /*dst*/, Direction /*midir*/)
UseMana(missile._misource, SPL_WARP); UseMana(missile._misource, SPL_WARP);
} }
void AddLightningWall(Missile &missile, Point dst, Direction /*midir*/) void AddLightningWall(Missile &missile, const AddMissileParameter &parameter)
{ {
UpdateMissileVelocity(missile, dst, 16); UpdateMissileVelocity(missile, parameter.dst, 16);
missile._miAnimFrame = GenerateRnd(8) + 1; missile._miAnimFrame = GenerateRnd(8) + 1;
missile._mirange = 255 * (missile._mispllvl + 1); missile._mirange = 255 * (missile._mispllvl + 1);
if (missile._misource < 0) { if (missile._misource < 0) {
@ -1587,7 +1587,7 @@ void AddLightningWall(Missile &missile, Point dst, Direction /*midir*/)
} }
} }
void AddRuneExplosion(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddRuneExplosion(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
if (IsAnyOf(missile._micaster, TARGET_MONSTERS, TARGET_BOTH)) { if (IsAnyOf(missile._micaster, TARGET_MONSTERS, TARGET_BOTH)) {
int dmg = 2 * (Players[missile._misource]._pLevel + GenerateRndSum(10, 2)) + 4; int dmg = 2 * (Players[missile._misource]._pLevel + GenerateRndSum(10, 2)) + 4;
@ -1604,10 +1604,11 @@ void AddRuneExplosion(Missile &missile, Point /*dst*/, Direction /*midir*/)
missile._mirange = missile._miAnimLen - 1; missile._mirange = missile._miAnimLen - 1;
} }
void AddFireNova(Missile &missile, Point dst, Direction midir) void AddFireNova(Missile &missile, const AddMissileParameter &parameter)
{ {
if (missile.position.start == dst) { Point dst = parameter.dst;
dst += midir; if (missile.position.start == parameter.dst) {
dst += parameter.midir;
} }
int sp = 16; int sp = 16;
if (missile._micaster == TARGET_MONSTERS) { if (missile._micaster == TARGET_MONSTERS) {
@ -1619,10 +1620,11 @@ void AddFireNova(Missile &missile, Point dst, Direction midir)
missile._mlid = AddLight(missile.position.start, 8); missile._mlid = AddLight(missile.position.start, 8);
} }
void AddLightningArrow(Missile &missile, Point dst, Direction midir) void AddLightningArrow(Missile &missile, const AddMissileParameter &parameter)
{ {
if (missile.position.start == dst) { Point dst = parameter.dst;
dst += midir; if (missile.position.start == parameter.dst) {
dst += parameter.midir;
} }
UpdateMissileVelocity(missile, dst, 32); UpdateMissileVelocity(missile, dst, 32);
missile._miAnimFrame = GenerateRnd(8) + 1; missile._miAnimFrame = GenerateRnd(8) + 1;
@ -1637,7 +1639,7 @@ void AddLightningArrow(Missile &missile, Point dst, Direction midir)
missile._midam <<= 6; missile._midam <<= 6;
} }
void AddMana(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddMana(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
auto &player = Players[missile._misource]; auto &player = Players[missile._misource];
@ -1663,7 +1665,7 @@ void AddMana(Missile &missile, Point /*dst*/, Direction /*midir*/)
drawmanaflag = true; drawmanaflag = true;
} }
void AddMagi(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddMagi(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
auto &player = Players[missile._misource]; auto &player = Players[missile._misource];
@ -1674,7 +1676,7 @@ void AddMagi(Missile &missile, Point /*dst*/, Direction /*midir*/)
drawmanaflag = true; drawmanaflag = true;
} }
void AddRing(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddRing(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
if (missile._micaster == TARGET_MONSTERS) if (missile._micaster == TARGET_MONSTERS)
UseMana(missile._misource, SPL_FIRERING); UseMana(missile._misource, SPL_FIRERING);
@ -1683,7 +1685,7 @@ void AddRing(Missile &missile, Point /*dst*/, Direction /*midir*/)
missile._mirange = 7; missile._mirange = 7;
} }
void AddSearch(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddSearch(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
if (missile._misource == MyPlayerId) if (missile._misource == MyPlayerId)
AutoMapShowItems = true; AutoMapShowItems = true;
@ -1710,28 +1712,30 @@ void AddSearch(Missile &missile, Point /*dst*/, Direction /*midir*/)
} }
} }
void AddCboltArrow(Missile &missile, Point dst, Direction midir) void AddCboltArrow(Missile &missile, const AddMissileParameter &parameter)
{ {
Point dst = parameter.dst;
missile._mirnd = GenerateRnd(15) + 1; missile._mirnd = GenerateRnd(15) + 1;
if (missile._micaster != TARGET_MONSTERS) { if (missile._micaster != TARGET_MONSTERS) {
missile._midam = 15; missile._midam = 15;
} }
if (missile.position.start == dst) { if (missile.position.start == dst) {
dst += midir; dst += parameter.midir;
} }
missile._miAnimFrame = GenerateRnd(8) + 1; missile._miAnimFrame = GenerateRnd(8) + 1;
missile._mlid = AddLight(missile.position.start, 5); missile._mlid = AddLight(missile.position.start, 5);
UpdateMissileVelocity(missile, dst, 8); UpdateMissileVelocity(missile, dst, 8);
missile.var1 = 5; missile.var1 = 5;
missile.var2 = static_cast<int32_t>(midir); missile.var2 = static_cast<int32_t>(parameter.midir);
missile._mirange = 256; missile._mirange = 256;
} }
void AddLArrow(Missile &missile, Point dst, Direction midir) void AddLArrow(Missile &missile, const AddMissileParameter &parameter)
{ {
Point dst = parameter.dst;
if (missile.position.start == dst) { if (missile.position.start == dst) {
dst += midir; dst += parameter.midir;
} }
int av = 32; int av = 32;
if (missile._micaster == TARGET_MONSTERS) { if (missile._micaster == TARGET_MONSTERS) {
@ -1764,10 +1768,11 @@ void AddLArrow(Missile &missile, Point dst, Direction midir)
missile._mlid = AddLight(missile.position.start, 5); missile._mlid = AddLight(missile.position.start, 5);
} }
void AddArrow(Missile &missile, Point dst, Direction midir) void AddArrow(Missile &missile, const AddMissileParameter &parameter)
{ {
Point dst = parameter.dst;
if (missile.position.start == dst) { if (missile.position.start == dst) {
dst += midir; dst += parameter.midir;
} }
int av = 32; int av = 32;
if (missile._micaster == TARGET_MONSTERS) { if (missile._micaster == TARGET_MONSTERS) {
@ -1813,16 +1818,16 @@ void UpdateVileMissPos(Missile &missile, Point dst)
} }
} }
void AddRndTeleport(Missile &missile, Point dst, Direction /*midir*/) void AddRndTeleport(Missile &missile, const AddMissileParameter &parameter)
{ {
missile._mirange = 2; missile._mirange = 2;
auto &player = Players[missile._misource]; auto &player = Players[missile._misource];
if (missile._micaster == TARGET_BOTH) { if (missile._micaster == TARGET_BOTH) {
missile.position.tile = dst; missile.position.tile = parameter.dst;
if (!PosOkPlayer(player, dst)) if (!PosOkPlayer(player, parameter.dst))
UpdateVileMissPos(missile, dst); UpdateVileMissPos(missile, parameter.dst);
return; return;
} }
@ -1854,10 +1859,11 @@ void AddRndTeleport(Missile &missile, Point dst, Direction /*midir*/)
UseMana(missile._misource, SPL_RNDTELEPORT); UseMana(missile._misource, SPL_RNDTELEPORT);
} }
void AddFirebolt(Missile &missile, Point dst, Direction midir) void AddFirebolt(Missile &missile, const AddMissileParameter &parameter)
{ {
Point dst = parameter.dst;
if (missile.position.start == dst) { if (missile.position.start == dst) {
dst += midir; dst += parameter.midir;
} }
int sp = 26; int sp = 26;
if (missile._micaster == TARGET_MONSTERS) { if (missile._micaster == TARGET_MONSTERS) {
@ -1878,9 +1884,9 @@ void AddFirebolt(Missile &missile, Point dst, Direction midir)
missile._mlid = AddLight(missile.position.start, 8); missile._mlid = AddLight(missile.position.start, 8);
} }
void AddMagmaball(Missile &missile, Point dst, Direction /*midir*/) void AddMagmaball(Missile &missile, const AddMissileParameter &parameter)
{ {
UpdateMissileVelocity(missile, dst, 16); UpdateMissileVelocity(missile, parameter.dst, 16);
missile.position.traveled.deltaX += 3 * missile.position.velocity.deltaX; missile.position.traveled.deltaX += 3 * missile.position.velocity.deltaX;
missile.position.traveled.deltaY += 3 * missile.position.velocity.deltaY; missile.position.traveled.deltaY += 3 * missile.position.velocity.deltaY;
UpdateMissilePos(missile); UpdateMissilePos(missile);
@ -1893,13 +1899,13 @@ void AddMagmaball(Missile &missile, Point dst, Direction /*midir*/)
missile._mlid = AddLight(missile.position.start, 8); missile._mlid = AddLight(missile.position.start, 8);
} }
void AddTeleport(Missile &missile, Point dst, Direction /*midir*/) void AddTeleport(Missile &missile, const AddMissileParameter &parameter)
{ {
std::optional<Point> teleportDestination = FindClosestValidPosition( std::optional<Point> teleportDestination = FindClosestValidPosition(
[&player = Players[missile._misource]](Point target) { [&player = Players[missile._misource]](Point target) {
return PosOkPlayer(player, target); return PosOkPlayer(player, target);
}, },
dst, 0, 5); parameter.dst, 0, 5);
if (teleportDestination) { if (teleportDestination) {
missile.position.tile = *teleportDestination; missile.position.tile = *teleportDestination;
@ -1911,9 +1917,9 @@ void AddTeleport(Missile &missile, Point dst, Direction /*midir*/)
} }
} }
void AddLightball(Missile &missile, Point dst, Direction /*midir*/) void AddLightball(Missile &missile, const AddMissileParameter &parameter)
{ {
UpdateMissileVelocity(missile, dst, 16); UpdateMissileVelocity(missile, parameter.dst, 16);
missile._miAnimFrame = GenerateRnd(8) + 1; missile._miAnimFrame = GenerateRnd(8) + 1;
missile._mirange = 255; missile._mirange = 255;
const Point position { missile._misource < 0 ? missile.position.start : Players[missile._misource].position.tile }; const Point position { missile._misource < 0 ? missile.position.start : Players[missile._misource].position.tile };
@ -1921,12 +1927,12 @@ void AddLightball(Missile &missile, Point dst, Direction /*midir*/)
missile.var2 = position.y; missile.var2 = position.y;
} }
void AddFirewall(Missile &missile, Point dst, Direction /*midir*/) void AddFirewall(Missile &missile, const AddMissileParameter &parameter)
{ {
missile._midam = GenerateRndSum(10, 2) + 2; missile._midam = GenerateRndSum(10, 2) + 2;
missile._midam += missile._misource >= 0 ? Players[missile._misource]._pLevel : currlevel; // BUGFIX: missing parenthesis around ternary (fixed) missile._midam += missile._misource >= 0 ? Players[missile._misource]._pLevel : currlevel; // BUGFIX: missing parenthesis around ternary (fixed)
missile._midam <<= 3; missile._midam <<= 3;
UpdateMissileVelocity(missile, dst, 16); UpdateMissileVelocity(missile, parameter.dst, 16);
int i = missile._mispllvl; int i = missile._mispllvl;
missile._mirange = 10; missile._mirange = 10;
if (i > 0) if (i > 0)
@ -1939,10 +1945,11 @@ void AddFirewall(Missile &missile, Point dst, Direction /*midir*/)
missile.var1 = missile._mirange - missile._miAnimLen; missile.var1 = missile._mirange - missile._miAnimLen;
} }
void AddFireball(Missile &missile, Point dst, Direction midir) void AddFireball(Missile &missile, const AddMissileParameter &parameter)
{ {
Point dst = parameter.dst;
if (missile.position.start == dst) { if (missile.position.start == dst) {
dst += midir; dst += parameter.midir;
} }
int sp = 16; int sp = 16;
if (missile._micaster == TARGET_MONSTERS) { if (missile._micaster == TARGET_MONSTERS) {
@ -1961,20 +1968,20 @@ void AddFireball(Missile &missile, Point dst, Direction midir)
missile._mlid = AddLight(missile.position.start, 8); missile._mlid = AddLight(missile.position.start, 8);
} }
void AddLightctrl(Missile &missile, Point dst, Direction /*midir*/) void AddLightctrl(Missile &missile, const AddMissileParameter &parameter)
{ {
if (missile._midam == 0 && missile._micaster == TARGET_MONSTERS) if (missile._midam == 0 && missile._micaster == TARGET_MONSTERS)
UseMana(missile._misource, SPL_LIGHTNING); UseMana(missile._misource, SPL_LIGHTNING);
missile.var1 = missile.position.start.x; missile.var1 = missile.position.start.x;
missile.var2 = missile.position.start.y; missile.var2 = missile.position.start.y;
UpdateMissileVelocity(missile, dst, 32); UpdateMissileVelocity(missile, parameter.dst, 32);
missile._miAnimFrame = GenerateRnd(8) + 1; missile._miAnimFrame = GenerateRnd(8) + 1;
missile._mirange = 256; missile._mirange = 256;
} }
void AddLightning(Missile &missile, Point dst, Direction /*midir*/) void AddLightning(Missile &missile, const AddMissileParameter &parameter)
{ {
missile.position.start = dst; missile.position.start = parameter.dst;
missile._miAnimFrame = GenerateRnd(8) + 1; missile._miAnimFrame = GenerateRnd(8) + 1;
@ -1989,7 +1996,7 @@ void AddLightning(Missile &missile, Point dst, Direction /*midir*/)
missile._mlid = AddLight(missile.position.tile, 4); missile._mlid = AddLight(missile.position.tile, 4);
} }
void AddMisexp(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddMisexp(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
if (missile._micaster != TARGET_MONSTERS && missile._misource >= 0) { if (missile._micaster != TARGET_MONSTERS && missile._misource >= 0) {
switch (Monsters[missile._misource].MType->mtype) { switch (Monsters[missile._misource].MType->mtype) {
@ -2020,21 +2027,21 @@ void AddMisexp(Missile &missile, Point /*dst*/, Direction /*midir*/)
missile._mirange = missile._miAnimLen; missile._mirange = missile._miAnimLen;
} }
void AddWeapexp(Missile &missile, Point dst, Direction /*midir*/) void AddWeapexp(Missile &missile, const AddMissileParameter &parameter)
{ {
missile.var2 = dst.x; missile.var2 = parameter.dst.x;
if (dst.x == 1) if (parameter.dst.x == 1)
SetMissAnim(missile, MFILE_MAGBLOS); SetMissAnim(missile, MFILE_MAGBLOS);
else else
SetMissAnim(missile, MFILE_MINILTNG); SetMissAnim(missile, MFILE_MINILTNG);
missile._mirange = missile._miAnimLen - 1; missile._mirange = missile._miAnimLen - 1;
} }
void AddTown(Missile &missile, Point dst, Direction /*midir*/) void AddTown(Missile &missile, const AddMissileParameter &parameter)
{ {
if (currlevel == 0) { if (currlevel == 0) {
missile.position.tile = dst; missile.position.tile = parameter.dst;
missile.position.start = dst; missile.position.start = parameter.dst;
} else { } else {
std::optional<Point> targetPosition = FindClosestValidPosition( std::optional<Point> targetPosition = FindClosestValidPosition(
[](Point target) { [](Point target) {
@ -2057,7 +2064,7 @@ void AddTown(Missile &missile, Point dst, Direction /*midir*/)
} }
return !CheckIfTrig(target); return !CheckIfTrig(target);
}, },
dst, 0, 5); parameter.dst, 0, 5);
if (targetPosition) { if (targetPosition) {
missile.position.tile = *targetPosition; missile.position.tile = *targetPosition;
@ -2086,7 +2093,7 @@ void AddTown(Missile &missile, Point dst, Direction /*midir*/)
} }
} }
void AddFlash(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddFlash(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
if (missile._misource != -1) { if (missile._misource != -1) {
if (missile._micaster == TARGET_MONSTERS) { if (missile._micaster == TARGET_MONSTERS) {
@ -2103,7 +2110,7 @@ void AddFlash(Missile &missile, Point /*dst*/, Direction /*midir*/)
missile._mirange = 19; missile._mirange = 19;
} }
void AddFlash2(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddFlash2(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
if (missile._micaster == TARGET_MONSTERS) { if (missile._micaster == TARGET_MONSTERS) {
if (missile._misource != -1) { if (missile._misource != -1) {
@ -2119,7 +2126,7 @@ void AddFlash2(Missile &missile, Point /*dst*/, Direction /*midir*/)
missile._mirange = 19; missile._mirange = 19;
} }
void AddManashield(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddManashield(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
missile._miDelFlag = true; missile._miDelFlag = true;
@ -2139,16 +2146,16 @@ void AddManashield(Missile &missile, Point /*dst*/, Direction /*midir*/)
UseMana(missile._misource, SPL_MANASHIELD); UseMana(missile._misource, SPL_MANASHIELD);
} }
void AddFiremove(Missile &missile, Point dst, Direction /*midir*/) void AddFiremove(Missile &missile, const AddMissileParameter &parameter)
{ {
missile._midam = GenerateRnd(10) + Players[missile._misource]._pLevel + 1; missile._midam = GenerateRnd(10) + Players[missile._misource]._pLevel + 1;
UpdateMissileVelocity(missile, dst, 16); UpdateMissileVelocity(missile, parameter.dst, 16);
missile._mirange = 255; missile._mirange = 255;
missile.position.tile += Displacement { 1, 1 }; missile.position.tile += Displacement { 1, 1 };
missile.position.offset.deltaY -= 32; missile.position.offset.deltaY -= 32;
} }
void AddGuardian(Missile &missile, Point dst, Direction /*midir*/) void AddGuardian(Missile &missile, const AddMissileParameter &parameter)
{ {
auto &player = Players[missile._misource]; auto &player = Players[missile._misource];
@ -2177,7 +2184,7 @@ void AddGuardian(Missile &missile, Point dst, Direction /*midir*/)
return LineClearMissile(start, target); return LineClearMissile(start, target);
}, },
dst, 0, 5); parameter.dst, 0, 5);
if (!spawnPosition) { if (!spawnPosition) {
missile._miDelFlag = true; missile._miDelFlag = true;
@ -2203,10 +2210,10 @@ void AddGuardian(Missile &missile, Point dst, Direction /*midir*/)
missile.var3 = 1; missile.var3 = 1;
} }
void AddChain(Missile &missile, Point dst, Direction /*midir*/) void AddChain(Missile &missile, const AddMissileParameter &parameter)
{ {
missile.var1 = dst.x; missile.var1 = parameter.dst.x;
missile.var2 = dst.y; missile.var2 = parameter.dst.y;
missile._mirange = 1; missile._mirange = 1;
UseMana(missile._misource, SPL_CHAIN); UseMana(missile._misource, SPL_CHAIN);
} }
@ -2231,7 +2238,7 @@ void InitMissileAnimationFromMonster(Missile &mis, Direction midir, const Monste
} }
} // namespace } // namespace
void AddRhino(Missile &missile, Point dst, Direction midir) void AddRhino(Missile &missile, const AddMissileParameter &parameter)
{ {
auto &monster = Monsters[missile._misource]; auto &monster = Monsters[missile._misource];
@ -2243,8 +2250,8 @@ void AddRhino(Missile &missile, Point dst, Direction midir)
graphic = MonsterGraphic::Attack; graphic = MonsterGraphic::Attack;
} }
} }
UpdateMissileVelocity(missile, dst, 18); UpdateMissileVelocity(missile, parameter.dst, 18);
InitMissileAnimationFromMonster(missile, midir, monster, graphic); InitMissileAnimationFromMonster(missile, parameter.midir, monster, graphic);
if (monster.MType->mtype >= MT_NSNAKE && monster.MType->mtype <= MT_GSNAKE) if (monster.MType->mtype >= MT_NSNAKE && monster.MType->mtype <= MT_GSNAKE)
missile._miAnimFrame = 7; missile._miAnimFrame = 7;
if (monster._uniqtype != 0) { if (monster._uniqtype != 0) {
@ -2254,10 +2261,11 @@ void AddRhino(Missile &missile, Point dst, Direction midir)
PutMissile(missile); PutMissile(missile);
} }
void AddFlare(Missile &missile, Point dst, Direction midir) void AddFlare(Missile &missile, const AddMissileParameter &parameter)
{ {
Point dst = parameter.dst;
if (missile.position.start == dst) { if (missile.position.start == dst) {
dst += midir; dst += parameter.midir;
} }
UpdateMissileVelocity(missile, dst, 16); UpdateMissileVelocity(missile, dst, 16);
missile._mirange = 256; missile._mirange = 256;
@ -2284,10 +2292,10 @@ void AddFlare(Missile &missile, Point dst, Direction midir)
} }
} }
void AddAcid(Missile &missile, Point dst, Direction /*midir*/) void AddAcid(Missile &missile, const AddMissileParameter &parameter)
{ {
UpdateMissileVelocity(missile, dst, 16); UpdateMissileVelocity(missile, parameter.dst, 16);
SetMissDir(missile, GetDirection16(missile.position.start, dst)); SetMissDir(missile, GetDirection16(missile.position.start, parameter.dst));
if (!gbIsHellfire || (missile.position.velocity.deltaX & 0xFFFF0000) != 0 || (missile.position.velocity.deltaY & 0xFFFF0000) != 0) if (!gbIsHellfire || (missile.position.velocity.deltaX & 0xFFFF0000) != 0 || (missile.position.velocity.deltaY & 0xFFFF0000) != 0)
missile._mirange = 5 * (Monsters[missile._misource]._mint + 4); missile._mirange = 5 * (Monsters[missile._misource]._mint + 4);
else else
@ -2298,7 +2306,7 @@ void AddAcid(Missile &missile, Point dst, Direction /*midir*/)
PutMissile(missile); PutMissile(missile);
} }
void AddAcidpud(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddAcidpud(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
missile._miLightFlag = true; missile._miLightFlag = true;
int monst = missile._misource; int monst = missile._misource;
@ -2306,7 +2314,7 @@ void AddAcidpud(Missile &missile, Point /*dst*/, Direction /*midir*/)
missile._miPreFlag = true; missile._miPreFlag = true;
} }
void AddStone(Missile &missile, Point dst, Direction /*midir*/) void AddStone(Missile &missile, const AddMissileParameter &parameter)
{ {
std::optional<Point> targetMonsterPosition = FindClosestValidPosition( std::optional<Point> targetMonsterPosition = FindClosestValidPosition(
[](Point target) { [](Point target) {
@ -2330,7 +2338,7 @@ void AddStone(Missile &missile, Point dst, Direction /*midir*/)
return true; return true;
}, },
dst, 0, 5); parameter.dst, 0, 5);
if (!targetMonsterPosition) { if (!targetMonsterPosition) {
missile._miDelFlag = true; missile._miDelFlag = true;
@ -2356,7 +2364,7 @@ void AddStone(Missile &missile, Point dst, Direction /*midir*/)
UseMana(missile._misource, SPL_STONE); UseMana(missile._misource, SPL_STONE);
} }
void AddGolem(Missile &missile, Point dst, Direction /*midir*/) void AddGolem(Missile &missile, const AddMissileParameter &parameter)
{ {
missile._miDelFlag = true; missile._miDelFlag = true;
@ -2379,7 +2387,7 @@ void AddGolem(Missile &missile, Point dst, Direction /*midir*/)
[start = missile.position.start](Point target) { [start = missile.position.start](Point target) {
return !IsTileOccupied(target) && LineClearMissile(start, target); return !IsTileOccupied(target) && LineClearMissile(start, target);
}, },
dst, 0, 5); parameter.dst, 0, 5);
if (spawnPosition) { if (spawnPosition) {
SpawnGolem(playerId, *spawnPosition, missile); SpawnGolem(playerId, *spawnPosition, missile);
@ -2387,14 +2395,14 @@ void AddGolem(Missile &missile, Point dst, Direction /*midir*/)
} }
} }
void AddBoom(Missile &missile, Point dst, Direction /*midir*/) void AddBoom(Missile &missile, const AddMissileParameter &parameter)
{ {
missile.position.tile = dst; missile.position.tile = parameter.dst;
missile.position.start = dst; missile.position.start = parameter.dst;
missile._mirange = missile._miAnimLen; missile._mirange = missile._miAnimLen;
} }
void AddHeal(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddHeal(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
auto &player = Players[missile._misource]; auto &player = Players[missile._misource];
@ -2420,7 +2428,7 @@ void AddHeal(Missile &missile, Point /*dst*/, Direction /*midir*/)
drawhpflag = true; drawhpflag = true;
} }
void AddHealOther(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddHealOther(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
missile._miDelFlag = true; missile._miDelFlag = true;
UseMana(missile._misource, SPL_HEALOTHER); UseMana(missile._misource, SPL_HEALOTHER);
@ -2431,10 +2439,11 @@ void AddHealOther(Missile &missile, Point /*dst*/, Direction /*midir*/)
} }
} }
void AddElement(Missile &missile, Point dst, Direction midir) void AddElement(Missile &missile, const AddMissileParameter &parameter)
{ {
Point dst = parameter.dst;
if (missile.position.start == dst) { if (missile.position.start == dst) {
dst += midir; dst += parameter.midir;
} }
int dmg = 2 * (Players[missile._misource]._pLevel + GenerateRndSum(10, 2)) + 4; int dmg = 2 * (Players[missile._misource]._pLevel + GenerateRndSum(10, 2)) + 4;
@ -2453,7 +2462,7 @@ void AddElement(Missile &missile, Point dst, Direction midir)
extern void FocusOnInventory(); extern void FocusOnInventory();
void AddIdentify(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddIdentify(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
missile._miDelFlag = true; missile._miDelFlag = true;
UseMana(missile._misource, SPL_IDENTIFY); UseMana(missile._misource, SPL_IDENTIFY);
@ -2469,13 +2478,13 @@ void AddIdentify(Missile &missile, Point /*dst*/, Direction /*midir*/)
} }
} }
void AddFirewallC(Missile &missile, Point dst, Direction midir) void AddFirewallC(Missile &missile, const AddMissileParameter &parameter)
{ {
std::optional<Point> spreadPosition = FindClosestValidPosition( std::optional<Point> spreadPosition = FindClosestValidPosition(
[start = missile.position.start](Point target) { [start = missile.position.start](Point target) {
return start != target && IsTileNotSolid(target) && !IsObjectAtPosition(target) && LineClearMissile(start, target); return start != target && IsTileNotSolid(target) && !IsObjectAtPosition(target) && LineClearMissile(start, target);
}, },
dst, 0, 5); parameter.dst, 0, 5);
if (!spreadPosition) { if (!spreadPosition) {
missile._miDelFlag = true; missile._miDelFlag = true;
@ -2487,13 +2496,13 @@ void AddFirewallC(Missile &missile, Point dst, Direction midir)
missile.var2 = spreadPosition->y; missile.var2 = spreadPosition->y;
missile.var5 = spreadPosition->x; missile.var5 = spreadPosition->x;
missile.var6 = spreadPosition->y; missile.var6 = spreadPosition->y;
missile.var3 = static_cast<int>(Left(Left(midir))); missile.var3 = static_cast<int>(Left(Left(parameter.midir)));
missile.var4 = static_cast<int>(Right(Right(midir))); missile.var4 = static_cast<int>(Right(Right(parameter.midir)));
missile._mirange = 7; missile._mirange = 7;
UseMana(missile._misource, SPL_FIREWALL); UseMana(missile._misource, SPL_FIREWALL);
} }
void AddInfra(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddInfra(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
missile._mirange = ScaleSpellEffect(1584, missile._mispllvl); missile._mirange = ScaleSpellEffect(1584, missile._mispllvl);
missile._mirange += missile._mirange * Players[missile._misource]._pISplDur / 128; missile._mirange += missile._mirange * Players[missile._misource]._pISplDur / 128;
@ -2502,19 +2511,19 @@ void AddInfra(Missile &missile, Point /*dst*/, Direction /*midir*/)
UseMana(missile._misource, SPL_INFRA); UseMana(missile._misource, SPL_INFRA);
} }
void AddWave(Missile &missile, Point dst, Direction /*midir*/) void AddWave(Missile &missile, const AddMissileParameter &parameter)
{ {
missile.var1 = dst.x; missile.var1 = parameter.dst.x;
missile.var2 = dst.y; missile.var2 = parameter.dst.y;
missile._mirange = 1; missile._mirange = 1;
missile._miAnimFrame = 4; missile._miAnimFrame = 4;
UseMana(missile._misource, SPL_WAVE); UseMana(missile._misource, SPL_WAVE);
} }
void AddNova(Missile &missile, Point dst, Direction /*midir*/) void AddNova(Missile &missile, const AddMissileParameter &parameter)
{ {
missile.var1 = dst.x; missile.var1 = parameter.dst.x;
missile.var2 = dst.y; missile.var2 = parameter.dst.y;
if (missile._misource != -1) { if (missile._misource != -1) {
int dmg = GenerateRndSum(6, 5) + Players[missile._misource]._pLevel + 5; int dmg = GenerateRndSum(6, 5) + Players[missile._misource]._pLevel + 5;
@ -2529,7 +2538,7 @@ void AddNova(Missile &missile, Point dst, Direction /*midir*/)
missile._mirange = 1; missile._mirange = 1;
} }
void AddBlodboil(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddBlodboil(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
auto &player = Players[missile._misource]; auto &player = Players[missile._misource];
@ -2550,7 +2559,7 @@ void AddBlodboil(Missile &missile, Point /*dst*/, Direction /*midir*/)
player.Say(HeroSpeech::Aaaaargh); player.Say(HeroSpeech::Aaaaargh);
} }
void AddRepair(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddRepair(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
missile._miDelFlag = true; missile._miDelFlag = true;
UseMana(missile._misource, SPL_REPAIR); UseMana(missile._misource, SPL_REPAIR);
@ -2566,7 +2575,7 @@ void AddRepair(Missile &missile, Point /*dst*/, Direction /*midir*/)
} }
} }
void AddRecharge(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddRecharge(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
missile._miDelFlag = true; missile._miDelFlag = true;
UseMana(missile._misource, SPL_RECHARGE); UseMana(missile._misource, SPL_RECHARGE);
@ -2582,7 +2591,7 @@ void AddRecharge(Missile &missile, Point /*dst*/, Direction /*midir*/)
} }
} }
void AddDisarm(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddDisarm(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
missile._miDelFlag = true; missile._miDelFlag = true;
UseMana(missile._misource, SPL_DISARM); UseMana(missile._misource, SPL_DISARM);
@ -2597,7 +2606,7 @@ void AddDisarm(Missile &missile, Point /*dst*/, Direction /*midir*/)
} }
} }
void AddApoca(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddApoca(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
missile.var1 = 8; missile.var1 = 8;
missile.var2 = std::max(missile.position.start.y - 8, 1); missile.var2 = std::max(missile.position.start.y - 8, 1);
@ -2611,10 +2620,10 @@ void AddApoca(Missile &missile, Point /*dst*/, Direction /*midir*/)
UseMana(missile._misource, SPL_APOCA); UseMana(missile._misource, SPL_APOCA);
} }
void AddFlame(Missile &missile, Point dst, Direction /*midir*/) void AddFlame(Missile &missile, const AddMissileParameter &parameter)
{ {
missile.var2 = 5 * missile._midam; missile.var2 = 5 * missile._midam;
missile.position.start = dst; missile.position.start = parameter.dst;
missile._mirange = missile.var2 + 20; missile._mirange = missile.var2 + 20;
missile._mlid = AddLight(missile.position.start, 1); missile._mlid = AddLight(missile.position.start, 1);
@ -2627,10 +2636,11 @@ void AddFlame(Missile &missile, Point dst, Direction /*midir*/)
} }
} }
void AddFlamec(Missile &missile, Point dst, Direction midir) void AddFlamec(Missile &missile, const AddMissileParameter &parameter)
{ {
if (missile.position.start == dst) { Point dst = parameter.dst;
dst += midir; if (missile.position.start == parameter.dst) {
dst += parameter.midir;
} }
UpdateMissileVelocity(missile, dst, 32); UpdateMissileVelocity(missile, dst, 32);
if (missile._micaster == TARGET_MONSTERS) { if (missile._micaster == TARGET_MONSTERS) {
@ -2641,27 +2651,29 @@ void AddFlamec(Missile &missile, Point dst, Direction midir)
missile._mirange = 256; missile._mirange = 256;
} }
void AddCbolt(Missile &missile, Point dst, Direction midir) void AddCbolt(Missile &missile, const AddMissileParameter &parameter)
{ {
Point dst = parameter.dst;
missile._mirnd = GenerateRnd(15) + 1; missile._mirnd = GenerateRnd(15) + 1;
missile._midam = (missile._micaster == TARGET_MONSTERS) ? (GenerateRnd(Players[missile._misource]._pMagic / 4) + 1) : 15; missile._midam = (missile._micaster == TARGET_MONSTERS) ? (GenerateRnd(Players[missile._misource]._pMagic / 4) + 1) : 15;
if (missile.position.start == dst) { if (missile.position.start == dst) {
dst += midir; dst += parameter.midir;
} }
missile._miAnimFrame = GenerateRnd(8) + 1; missile._miAnimFrame = GenerateRnd(8) + 1;
missile._mlid = AddLight(missile.position.start, 5); missile._mlid = AddLight(missile.position.start, 5);
UpdateMissileVelocity(missile, dst, 8); UpdateMissileVelocity(missile, dst, 8);
missile.var1 = 5; missile.var1 = 5;
missile.var2 = static_cast<int>(midir); missile.var2 = static_cast<int>(parameter.midir);
missile._mirange = 256; missile._mirange = 256;
} }
void AddHbolt(Missile &missile, Point dst, Direction midir) void AddHbolt(Missile &missile, const AddMissileParameter &parameter)
{ {
Point dst = parameter.dst;
if (missile.position.start == dst) { if (missile.position.start == dst) {
dst += midir; dst += parameter.midir;
} }
int sp = 16; int sp = 16;
if (missile._misource != -1) { if (missile._misource != -1) {
@ -2678,7 +2690,7 @@ void AddHbolt(Missile &missile, Point dst, Direction midir)
UseMana(missile._misource, SPL_HBOLT); UseMana(missile._misource, SPL_HBOLT);
} }
void AddResurrect(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddResurrect(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
UseMana(missile._misource, SPL_RESURRECT); UseMana(missile._misource, SPL_RESURRECT);
if (missile._misource == MyPlayerId) { if (missile._misource == MyPlayerId) {
@ -2689,14 +2701,14 @@ void AddResurrect(Missile &missile, Point /*dst*/, Direction /*midir*/)
missile._miDelFlag = true; missile._miDelFlag = true;
} }
void AddResurrectBeam(Missile &missile, Point dst, Direction /*midir*/) void AddResurrectBeam(Missile &missile, const AddMissileParameter &parameter)
{ {
missile.position.tile = dst; missile.position.tile = parameter.dst;
missile.position.start = dst; missile.position.start = parameter.dst;
missile._mirange = MissileSpriteData[MFILE_RESSUR1].animLen[0]; missile._mirange = MissileSpriteData[MFILE_RESSUR1].animLen[0];
} }
void AddTelekinesis(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddTelekinesis(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
missile._miDelFlag = true; missile._miDelFlag = true;
UseMana(missile._misource, SPL_TELEKINESIS); UseMana(missile._misource, SPL_TELEKINESIS);
@ -2704,10 +2716,11 @@ void AddTelekinesis(Missile &missile, Point /*dst*/, Direction /*midir*/)
NewCursor(CURSOR_TELEKINESIS); NewCursor(CURSOR_TELEKINESIS);
} }
void AddBoneSpirit(Missile &missile, Point dst, Direction midir) void AddBoneSpirit(Missile &missile, const AddMissileParameter &parameter)
{ {
if (missile.position.start == dst) { Point dst = parameter.dst;
dst += midir; if (missile.position.start == parameter.dst) {
dst += parameter.midir;
} }
UpdateMissileVelocity(missile, dst, 16); UpdateMissileVelocity(missile, dst, 16);
SetMissDir(missile, GetDirection(missile.position.start, dst)); SetMissDir(missile, GetDirection(missile.position.start, dst));
@ -2723,14 +2736,14 @@ void AddBoneSpirit(Missile &missile, Point dst, Direction midir)
} }
} }
void AddRportal(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddRportal(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
missile._mirange = 100; missile._mirange = 100;
missile.var1 = 100 - missile._miAnimLen; missile.var1 = 100 - missile._miAnimLen;
PutMissile(missile); PutMissile(missile);
} }
void AddDiabApoca(Missile &missile, Point /*dst*/, Direction /*midir*/) void AddDiabApoca(Missile &missile, const AddMissileParameter & /*parameter*/)
{ {
int players = gbIsMultiplayer ? MAX_PLRS : 1; int players = gbIsMultiplayer ? MAX_PLRS : 1;
for (int pnum = 0; pnum < players; pnum++) { for (int pnum = 0; pnum < players; pnum++) {
@ -2783,7 +2796,8 @@ int AddMissile(Point src, Point dst, Direction midir, missile_id mitype, mienemy
PlaySfxLoc(missileData.mlSFX, missile.position.start); PlaySfxLoc(missileData.mlSFX, missile.position.start);
} }
missileData.mAddProc(missile, dst, midir); AddMissileParameter parameter = { dst, midir };
missileData.mAddProc(missile, parameter);
return mi; return mi;
} }

152
Source/missiles.h

@ -201,41 +201,47 @@ inline void SetMissDir(Missile &missile, Direction16 dir)
} }
void InitMissiles(); void InitMissiles();
void AddHiveExplosion(Missile &missile, Point dst, Direction midir);
void AddFireRune(Missile &missile, Point dst, Direction midir); struct AddMissileParameter {
void AddLightningRune(Missile &missile, Point dst, Direction midir); Point dst;
void AddGreatLightningRune(Missile &missile, Point dst, Direction midir); Direction midir;
void AddImmolationRune(Missile &missile, Point dst, Direction midir); };
void AddStoneRune(Missile &missile, Point dst, Direction midir);
void AddReflection(Missile &missile, Point dst, Direction midir); void AddHiveExplosion(Missile &missile, const AddMissileParameter &parameter);
void AddBerserk(Missile &missile, Point dst, Direction midir); void AddFireRune(Missile &missile, const AddMissileParameter &parameter);
void AddLightningRune(Missile &missile, const AddMissileParameter &parameter);
void AddGreatLightningRune(Missile &missile, const AddMissileParameter &parameter);
void AddImmolationRune(Missile &missile, const AddMissileParameter &parameter);
void AddStoneRune(Missile &missile, const AddMissileParameter &parameter);
void AddReflection(Missile &missile, const AddMissileParameter &parameter);
void AddBerserk(Missile &missile, const AddMissileParameter &parameter);
/** /**
* var1: Direction to place the spawn * var1: Direction to place the spawn
*/ */
void AddHorkSpawn(Missile &missile, Point dst, Direction midir); void AddHorkSpawn(Missile &missile, const AddMissileParameter &parameter);
void AddJester(Missile &missile, Point dst, Direction midir); void AddJester(Missile &missile, const AddMissileParameter &parameter);
void AddStealPotions(Missile &missile, Point dst, Direction midir); void AddStealPotions(Missile &missile, const AddMissileParameter &parameter);
void AddManaTrap(Missile &missile, Point dst, Direction midir); void AddManaTrap(Missile &missile, const AddMissileParameter &parameter);
void AddSpecArrow(Missile &missile, Point dst, Direction midir); void AddSpecArrow(Missile &missile, const AddMissileParameter &parameter);
void AddWarp(Missile &missile, Point dst, Direction midir); void AddWarp(Missile &missile, const AddMissileParameter &parameter);
void AddLightningWall(Missile &missile, Point dst, Direction midir); void AddLightningWall(Missile &missile, const AddMissileParameter &parameter);
void AddRuneExplosion(Missile &missile, Point dst, Direction midir); void AddRuneExplosion(Missile &missile, const AddMissileParameter &parameter);
void AddFireNova(Missile &missile, Point dst, Direction midir); void AddFireNova(Missile &missile, const AddMissileParameter &parameter);
void AddLightningArrow(Missile &missile, Point dst, Direction midir); void AddLightningArrow(Missile &missile, const AddMissileParameter &parameter);
void AddMana(Missile &missile, Point dst, Direction midir); void AddMana(Missile &missile, const AddMissileParameter &parameter);
void AddMagi(Missile &missile, Point dst, Direction midir); void AddMagi(Missile &missile, const AddMissileParameter &parameter);
void AddRing(Missile &missile, Point dst, Direction midir); void AddRing(Missile &missile, const AddMissileParameter &parameter);
void AddSearch(Missile &missile, Point dst, Direction midir); void AddSearch(Missile &missile, const AddMissileParameter &parameter);
void AddCboltArrow(Missile &missile, Point dst, Direction midir); void AddCboltArrow(Missile &missile, const AddMissileParameter &parameter);
void AddLArrow(Missile &missile, Point dst, Direction midir); void AddLArrow(Missile &missile, const AddMissileParameter &parameter);
void AddArrow(Missile &missile, Point dst, Direction midir); void AddArrow(Missile &missile, const AddMissileParameter &parameter);
void AddRndTeleport(Missile &missile, Point dst, Direction midir); void AddRndTeleport(Missile &missile, const AddMissileParameter &parameter);
void AddFirebolt(Missile &missile, Point dst, Direction midir); void AddFirebolt(Missile &missile, const AddMissileParameter &parameter);
void AddMagmaball(Missile &missile, Point dst, Direction midir); void AddMagmaball(Missile &missile, const AddMissileParameter &parameter);
void AddTeleport(Missile &missile, Point dst, Direction midir); void AddTeleport(Missile &missile, const AddMissileParameter &parameter);
void AddLightball(Missile &missile, Point dst, Direction midir); void AddLightball(Missile &missile, const AddMissileParameter &parameter);
void AddFirewall(Missile &missile, Point dst, Direction midir); void AddFirewall(Missile &missile, const AddMissileParameter &parameter);
/** /**
* var1: X coordinate of the missile-light * var1: X coordinate of the missile-light
@ -243,61 +249,61 @@ void AddFirewall(Missile &missile, Point dst, Direction midir);
* var4: X coordinate of the missile-light * var4: X coordinate of the missile-light
* var5: Y coordinate of the missile-light * var5: Y coordinate of the missile-light
*/ */
void AddFireball(Missile &missile, Point dst, Direction midir); void AddFireball(Missile &missile, const AddMissileParameter &parameter);
/** /**
* var1: X coordinate of the missile * var1: X coordinate of the missile
* var2: Y coordinate of the missile * var2: Y coordinate of the missile
*/ */
void AddLightctrl(Missile &missile, Point dst, Direction midir); void AddLightctrl(Missile &missile, const AddMissileParameter &parameter);
void AddLightning(Missile &missile, Point dst, Direction midir); void AddLightning(Missile &missile, const AddMissileParameter &parameter);
void AddMisexp(Missile &missile, Point dst, Direction midir); void AddMisexp(Missile &missile, const AddMissileParameter &parameter);
void AddWeapexp(Missile &missile, Point dst, Direction midir); void AddWeapexp(Missile &missile, const AddMissileParameter &parameter);
/** /**
* var1: Animation * var1: Animation
*/ */
void AddTown(Missile &missile, Point dst, Direction midir); void AddTown(Missile &missile, const AddMissileParameter &parameter);
void AddFlash(Missile &missile, Point dst, Direction midir); void AddFlash(Missile &missile, const AddMissileParameter &parameter);
void AddFlash2(Missile &missile, Point dst, Direction midir); void AddFlash2(Missile &missile, const AddMissileParameter &parameter);
void AddManashield(Missile &missile, Point dst, Direction midir); void AddManashield(Missile &missile, const AddMissileParameter &parameter);
void AddFiremove(Missile &missile, Point dst, Direction midir); void AddFiremove(Missile &missile, const AddMissileParameter &parameter);
/** /**
* var1: Animation * var1: Animation
* var3: Light strength * var3: Light strength
*/ */
void AddGuardian(Missile &missile, Point dst, Direction midir); void AddGuardian(Missile &missile, const AddMissileParameter &parameter);
/** /**
* var1: X coordinate of the destination * var1: X coordinate of the destination
* var2: Y coordinate of the destination * var2: Y coordinate of the destination
*/ */
void AddChain(Missile &missile, Point dst, Direction midir); void AddChain(Missile &missile, const AddMissileParameter &parameter);
void AddRhino(Missile &missile, Point dst, Direction midir); void AddRhino(Missile &missile, const AddMissileParameter &parameter);
/** /**
* var1: X coordinate of the missile-light * var1: X coordinate of the missile-light
* var2: Y coordinate of the missile-light * var2: Y coordinate of the missile-light
*/ */
void AddFlare(Missile &missile, Point dst, Direction midir); void AddFlare(Missile &missile, const AddMissileParameter &parameter);
/** /**
* var1: X coordinate of the missile-light * var1: X coordinate of the missile-light
* var2: Y coordinate of the missile-light * var2: Y coordinate of the missile-light
*/ */
void AddAcid(Missile &missile, Point dst, Direction midir); void AddAcid(Missile &missile, const AddMissileParameter &parameter);
void AddAcidpud(Missile &missile, Point dst, Direction midir); void AddAcidpud(Missile &missile, const AddMissileParameter &parameter);
/** /**
* var1: mmode of the monster * var1: mmode of the monster
* var2: mnum of the monster * var2: mnum of the monster
*/ */
void AddStone(Missile &missile, Point dst, Direction midir); void AddStone(Missile &missile, const AddMissileParameter &parameter);
void AddGolem(Missile &missile, Point dst, Direction midir); void AddGolem(Missile &missile, const AddMissileParameter &parameter);
void AddBoom(Missile &missile, Point dst, Direction midir); void AddBoom(Missile &missile, const AddMissileParameter &parameter);
void AddHeal(Missile &missile, Point dst, Direction midir); void AddHeal(Missile &missile, const AddMissileParameter &parameter);
void AddHealOther(Missile &missile, Point dst, Direction midir); void AddHealOther(Missile &missile, const AddMissileParameter &parameter);
/** /**
* var1: X coordinate of the missile-light * var1: X coordinate of the missile-light
@ -305,8 +311,8 @@ void AddHealOther(Missile &missile, Point dst, Direction midir);
* var4: X coordinate of the destination * var4: X coordinate of the destination
* var5: Y coordinate of the destination * var5: Y coordinate of the destination
*/ */
void AddElement(Missile &missile, Point dst, Direction midir); void AddElement(Missile &missile, const AddMissileParameter &parameter);
void AddIdentify(Missile &missile, Point dst, Direction midir); void AddIdentify(Missile &missile, const AddMissileParameter &parameter);
/** /**
* var1: X coordinate of the first wave * var1: X coordinate of the first wave
@ -316,35 +322,35 @@ void AddIdentify(Missile &missile, Point dst, Direction midir);
* var5: X coordinate of the second wave * var5: X coordinate of the second wave
* var6: Y coordinate of the second wave * var6: Y coordinate of the second wave
*/ */
void AddFirewallC(Missile &missile, Point dst, Direction midir); void AddFirewallC(Missile &missile, const AddMissileParameter &parameter);
void AddInfra(Missile &missile, Point dst, Direction midir); void AddInfra(Missile &missile, const AddMissileParameter &parameter);
/** /**
* var1: X coordinate of the destination * var1: X coordinate of the destination
* var2: Y coordinate of the destination * var2: Y coordinate of the destination
*/ */
void AddWave(Missile &missile, Point dst, Direction midir); void AddWave(Missile &missile, const AddMissileParameter &parameter);
void AddNova(Missile &missile, Point dst, Direction midir); void AddNova(Missile &missile, const AddMissileParameter &parameter);
void AddBlodboil(Missile &missile, Point dst, Direction midir); void AddBlodboil(Missile &missile, const AddMissileParameter &parameter);
void AddRepair(Missile &missile, Point dst, Direction midir); void AddRepair(Missile &missile, const AddMissileParameter &parameter);
void AddRecharge(Missile &missile, Point dst, Direction midir); void AddRecharge(Missile &missile, const AddMissileParameter &parameter);
void AddDisarm(Missile &missile, Point dst, Direction midir); void AddDisarm(Missile &missile, const AddMissileParameter &parameter);
void AddApoca(Missile &missile, Point dst, Direction midir); void AddApoca(Missile &missile, const AddMissileParameter &parameter);
void AddFlame(Missile &missile, Point dst, Direction midir); void AddFlame(Missile &missile, const AddMissileParameter &parameter);
void AddFlamec(Missile &missile, Point dst, Direction midir); void AddFlamec(Missile &missile, const AddMissileParameter &parameter);
/** /**
* var1: Light strength * var1: Light strength
* var2: Base direction * var2: Base direction
*/ */
void AddCbolt(Missile &missile, Point dst, Direction midir); void AddCbolt(Missile &missile, const AddMissileParameter &parameter);
void AddHbolt(Missile &missile, Point dst, Direction midir); void AddHbolt(Missile &missile, const AddMissileParameter &parameter);
void AddResurrect(Missile &missile, Point dst, Direction midir); void AddResurrect(Missile &missile, const AddMissileParameter &parameter);
void AddResurrectBeam(Missile &missile, Point dst, Direction midir); void AddResurrectBeam(Missile &missile, const AddMissileParameter &parameter);
void AddTelekinesis(Missile &missile, Point dst, Direction midir); void AddTelekinesis(Missile &missile, const AddMissileParameter &parameter);
void AddBoneSpirit(Missile &missile, Point dst, Direction midir); void AddBoneSpirit(Missile &missile, const AddMissileParameter &parameter);
void AddRportal(Missile &missile, Point dst, Direction midir); void AddRportal(Missile &missile, const AddMissileParameter &parameter);
void AddDiabApoca(Missile &missile, Point dst, Direction midir); void AddDiabApoca(Missile &missile, const AddMissileParameter &parameter);
int AddMissile(Point src, Point dst, Direction midir, missile_id mitype, mienemy_type micaster, int id, int midam, int spllvl); int AddMissile(Point src, Point dst, Direction midir, missile_id mitype, mienemy_type micaster, int id, int midam, int spllvl);
void MI_Golem(Missile &missile); void MI_Golem(Missile &missile);
void MI_Manashield(Missile &missile); void MI_Manashield(Missile &missile);

Loading…
Cancel
Save