From 652573a8ceeb3d960192775ae984f929439e9ebe Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Thu, 26 Aug 2021 06:01:18 +0200 Subject: [PATCH] Re merge FireballUpdate and MI_Fireball --- Source/missiles.cpp | 115 +++++++++++++++++++++----------------------- 1 file changed, 54 insertions(+), 61 deletions(-) diff --git a/Source/missiles.cpp b/Source/missiles.cpp index 63f28ab81..3b3b573c5 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -674,66 +674,6 @@ bool GuardianTryFireAt(MissileStruct &missile, Point target) return true; } -void FireballUpdate(MissileStruct &missile, Displacement offset, bool alwaysDelete) -{ - missile._mirange--; - - int id = missile._misource; - Point p = (missile._micaster == TARGET_MONSTERS) ? Players[id].position.tile : Monsters[id].position.tile; - - if (missile._miAnimType == MFILE_BIGEXP) { - if (missile._mirange == 0) { - missile._miDelFlag = true; - AddUnLight(missile._mlid); - } - } else { - int dam = missile._midam; - missile.position.traveled += offset; - UpdateMissilePos(missile); - if (missile.position.tile != missile.position.start) - CheckMissileCol(missile, dam, dam, false, missile.position.tile, false); - if (missile._mirange == 0) { - Point m = missile.position.tile; - ChangeLight(missile._mlid, missile.position.tile, missile._miAnimFrame); - - constexpr Displacement Pattern[] = { { 0, 0 }, { 0, 1 }, { 0, -1 }, { 1, 0 }, { 1, -1 }, { 1, 1 }, { -1, 0 }, { -1, 1 }, { -1, -1 } }; - for (auto shift : Pattern) { - if (!CheckBlock(p, m + shift)) - CheckMissileCol(missile, dam, dam, false, m + shift, true); - } - - if (!TransList[dTransVal[m.x][m.y]] - || (missile.position.velocity.deltaX < 0 && ((TransList[dTransVal[m.x][m.y + 1]] && nSolidTable[dPiece[m.x][m.y + 1]]) || (TransList[dTransVal[m.x][m.y - 1]] && nSolidTable[dPiece[m.x][m.y - 1]])))) { - missile.position.tile.x++; - missile.position.tile.y++; - missile.position.offset.deltaY -= 32; - } - if (missile.position.velocity.deltaY > 0 - && ((TransList[dTransVal[m.x + 1][m.y]] && nSolidTable[dPiece[m.x + 1][m.y]]) - || (TransList[dTransVal[m.x - 1][m.y]] && nSolidTable[dPiece[m.x - 1][m.y]]))) { - missile.position.offset.deltaY -= 32; - } - if (missile.position.velocity.deltaX > 0 - && ((TransList[dTransVal[m.x][m.y + 1]] && nSolidTable[dPiece[m.x][m.y + 1]]) - || (TransList[dTransVal[m.x][m.y - 1]] && nSolidTable[dPiece[m.x][m.y - 1]]))) { - missile.position.offset.deltaX -= 32; - } - missile._mimfnum = 0; - SetMissAnim(missile, MFILE_BIGEXP); - missile._mirange = missile._miAnimLen - 1; - missile.position.velocity = {}; - } else if (missile.position.tile.x != missile._miVar1 || missile.position.tile.y != missile._miVar2) { - missile._miVar1 = missile.position.tile.x; - missile._miVar2 = missile.position.tile.y; - ChangeLight(missile._mlid, missile.position.tile, 8); - } - if (alwaysDelete) - missile._miDelFlag = true; - } - - PutMissile(missile); -} - bool GrowWall(int playerId, Point position, Point target, missile_id type, int spellLevel, int damage) { int dp = dPiece[position.x][position.y]; @@ -3212,7 +3152,60 @@ void MI_Firewall(MissileStruct &missile) void MI_Fireball(MissileStruct &missile) { - FireballUpdate(missile, missile.position.velocity, false); + missile._mirange--; + + int id = missile._misource; + Point p = (missile._micaster == TARGET_MONSTERS) ? Players[id].position.tile : Monsters[id].position.tile; + + if (missile._miAnimType == MFILE_BIGEXP) { + if (missile._mirange == 0) { + missile._miDelFlag = true; + AddUnLight(missile._mlid); + } + } else { + int dam = missile._midam; + missile.position.traveled += missile.position.velocity; + UpdateMissilePos(missile); + if (missile.position.tile != missile.position.start) + CheckMissileCol(missile, dam, dam, false, missile.position.tile, false); + if (missile._mirange == 0) { + Point m = missile.position.tile; + ChangeLight(missile._mlid, missile.position.tile, missile._miAnimFrame); + + constexpr Displacement Pattern[] = { { 0, 0 }, { 0, 1 }, { 0, -1 }, { 1, 0 }, { 1, -1 }, { 1, 1 }, { -1, 0 }, { -1, 1 }, { -1, -1 } }; + for (auto shift : Pattern) { + if (!CheckBlock(p, m + shift)) + CheckMissileCol(missile, dam, dam, false, m + shift, true); + } + + if (!TransList[dTransVal[m.x][m.y]] + || (missile.position.velocity.deltaX < 0 && ((TransList[dTransVal[m.x][m.y + 1]] && nSolidTable[dPiece[m.x][m.y + 1]]) || (TransList[dTransVal[m.x][m.y - 1]] && nSolidTable[dPiece[m.x][m.y - 1]])))) { + missile.position.tile.x++; + missile.position.tile.y++; + missile.position.offset.deltaY -= 32; + } + if (missile.position.velocity.deltaY > 0 + && ((TransList[dTransVal[m.x + 1][m.y]] && nSolidTable[dPiece[m.x + 1][m.y]]) + || (TransList[dTransVal[m.x - 1][m.y]] && nSolidTable[dPiece[m.x - 1][m.y]]))) { + missile.position.offset.deltaY -= 32; + } + if (missile.position.velocity.deltaX > 0 + && ((TransList[dTransVal[m.x][m.y + 1]] && nSolidTable[dPiece[m.x][m.y + 1]]) + || (TransList[dTransVal[m.x][m.y - 1]] && nSolidTable[dPiece[m.x][m.y - 1]]))) { + missile.position.offset.deltaX -= 32; + } + missile._mimfnum = 0; + SetMissAnim(missile, MFILE_BIGEXP); + missile._mirange = missile._miAnimLen - 1; + missile.position.velocity = {}; + } else if (missile.position.tile.x != missile._miVar1 || missile.position.tile.y != missile._miVar2) { + missile._miVar1 = missile.position.tile.x; + missile._miVar2 = missile.position.tile.y; + ChangeLight(missile._mlid, missile.position.tile, 8); + } + } + + PutMissile(missile); } void MI_HorkSpawn(MissileStruct &missile)