From 96b19ca8d57216c0be30929dbfd8ea16132eca74 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Mon, 23 Aug 2021 06:59:22 +0200 Subject: [PATCH] Set _micaster type to mienemy_type Rino never made use of the player id, so no reason to abuse _micaster --- Source/loadsave.cpp | 2 +- Source/missiles.cpp | 8 ++++---- Source/missiles.h | 5 ++--- Source/monster.cpp | 8 +++----- Source/objects.cpp | 8 ++++---- 5 files changed, 14 insertions(+), 17 deletions(-) diff --git a/Source/loadsave.cpp b/Source/loadsave.cpp index 1f169c589..2a96e6846 100644 --- a/Source/loadsave.cpp +++ b/Source/loadsave.cpp @@ -670,7 +670,7 @@ void LoadMissile(LoadHelper *file, int i) pMissile->_miUniqTrans = file->NextLE(); pMissile->_mirange = file->NextLE(); pMissile->_misource = file->NextLE(); - pMissile->_micaster = file->NextLE(); + pMissile->_micaster = static_cast(file->NextLE()); pMissile->_midam = file->NextLE(); pMissile->_miHitFlag = file->NextBool32(); pMissile->_midist = file->NextLE(); diff --git a/Source/missiles.cpp b/Source/missiles.cpp index cb5932b7b..81ae5dd2d 100644 --- a/Source/missiles.cpp +++ b/Source/missiles.cpp @@ -1921,7 +1921,7 @@ void AddFirebolt(MissileStruct &missile, Point dst, int midir) dst += static_cast(midir); } int sp = 26; - if (missile._micaster == 0) { + if (missile._micaster == TARGET_MONSTERS) { sp = 16; if (missile._misource != -1) { sp += std::min(missile._mispllvl * 2, 47); @@ -2078,7 +2078,7 @@ void AddLightning(MissileStruct &missile, Point dst, int midir) void AddMisexp(MissileStruct &missile, Point dst, int /*midir*/) { - if (missile._micaster != 0 && missile._misource >= 0) { + if (missile._micaster != TARGET_MONSTERS && missile._misource >= 0) { switch (Monsters[missile._misource].MType->mtype) { case MT_SUCCUBUS: SetMissAnim(missile, MFILE_FLAREEXP); @@ -2735,7 +2735,7 @@ void AddFlamec(MissileStruct &missile, Point dst, int midir) void AddCbolt(MissileStruct &missile, Point dst, int midir) { missile._mirnd = GenerateRnd(15) + 1; - missile._midam = (missile._micaster == 0) ? (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) { dst += static_cast(midir); @@ -2860,7 +2860,7 @@ bool CanAddEffect(int playerId, missile_id type) } // namespace -int AddMissile(Point src, Point dst, int midir, missile_id mitype, int8_t micaster, int id, int midam, int spllvl) +int AddMissile(Point src, Point dst, int midir, missile_id mitype, mienemy_type micaster, int id, int midam, int spllvl) { if (ActiveMissileCount >= MAXMISSILES - 1) return -1; diff --git a/Source/missiles.h b/Source/missiles.h index 12e18aee0..c05161d8c 100644 --- a/Source/missiles.h +++ b/Source/missiles.h @@ -110,8 +110,7 @@ struct MissileStruct { uint32_t _miUniqTrans; int _mirange; // Time to live for the missile in game ticks, oncs 0 the missile will be marked for deletion via _miDelFlag int _misource; - /** mienemy_type or player id*/ - int8_t _micaster; + mienemy_type _micaster; int _midam; bool _miHitFlag; int _midist; // Used for arrows to measure distance travelled (increases by 1 each game tick). Higher value is a penalty for accuracy calculation when hitting enemy @@ -217,7 +216,7 @@ void AddTelekinesis(MissileStruct &missile, Point dst, int midir); void AddBoneSpirit(MissileStruct &missile, Point dst, int midir); void AddRportal(MissileStruct &missile, Point dst, int midir); void AddDiabApoca(MissileStruct &missile, Point dst, int midir); -int AddMissile(Point src, Point dst, int midir, missile_id mitype, int8_t micaster, int id, int midam, int spllvl); +int AddMissile(Point src, Point dst, int midir, missile_id mitype, mienemy_type micaster, int id, int midam, int spllvl); void MI_Golem(int mi); void MI_Manashield(int i); void MI_LArrow(int i); diff --git a/Source/monster.cpp b/Source/monster.cpp index bf6657bd7..f61b17dce 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -2570,7 +2570,7 @@ void RhinoAi(int i) if (dist >= 5 && v < 2 * monster._mint + 43 && LineClear([&monster](Point position) { return IsTileAvailable(monster, position); }, monster.position.tile, { fx, fy })) { - if (AddMissile(monster.position.tile, { fx, fy }, md, MIS_RHINO, monster._menemy, i, 0, 0) != -1) { + if (AddMissile(monster.position.tile, { fx, fy }, md, MIS_RHINO, TARGET_PLAYERS, i, 0, 0) != -1) { if (monster.MData->snd_special) PlayEffect(monster, 3); dMonster[monster.position.tile.x][monster.position.tile.y] = -(i + 1); @@ -2744,7 +2744,6 @@ void BatAi(int i) assert(i >= 0 && i < MAXMONSTERS); auto &monster = Monsters[i]; - int pnum = monster._menemy; if (monster._mmode != MM_STAND || monster._msquelch == 0) { return; } @@ -2774,7 +2773,7 @@ void BatAi(int i) && (abs(xd) >= 5 || abs(yd) >= 5) && v < 4 * monster._mint + 33 && LineClear([&monster](Point position) { return IsTileAvailable(monster, position); }, monster.position.tile, { fx, fy })) { - if (AddMissile(monster.position.tile, { fx, fy }, md, MIS_RHINO, pnum, i, 0, 0) != -1) { + if (AddMissile(monster.position.tile, { fx, fy }, md, MIS_RHINO, TARGET_PLAYERS, i, 0, 0) != -1) { dMonster[monster.position.tile.x][monster.position.tile.y] = -(i + 1); monster._mmode = MM_CHARGE; } @@ -3037,7 +3036,6 @@ void SnakeAi(int i) auto &monster = Monsters[i]; char pattern[6] = { 1, 1, 0, -1, -1, 0 }; - int pnum = monster._menemy; if (monster._mmode != MM_STAND || monster._msquelch == 0) return; int fx = monster.enemyPosition.x; @@ -3048,7 +3046,7 @@ void SnakeAi(int i) monster._mdir = md; if (abs(mx) >= 2 || abs(my) >= 2) { if (abs(mx) < 3 && abs(my) < 3 && LineClear([&monster](Point position) { return IsTileAvailable(monster, position); }, monster.position.tile, { fx, fy }) && monster._mVar1 != MM_CHARGE) { - if (AddMissile(monster.position.tile, { fx, fy }, md, MIS_RHINO, pnum, i, 0, 0) != -1) { + if (AddMissile(monster.position.tile, { fx, fy }, md, MIS_RHINO, TARGET_PLAYERS, i, 0, 0) != -1) { PlayEffect(monster, 0); dMonster[monster.position.tile.x][monster.position.tile.y] = -(i + 1); monster._mmode = MM_CHARGE; diff --git a/Source/objects.cpp b/Source/objects.cpp index 4e65d41fe..681f93b4c 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -2772,7 +2772,7 @@ bool OperateShrineMagical(int pnum) player.position.tile, player._pdir, MIS_MANASHIELD, - -1, + TARGET_PLAYERS, pnum, 0, 2 * leveltype); @@ -2947,7 +2947,7 @@ bool OperateShrineCryptic(int pnum) player.position.tile, player._pdir, MIS_NOVA, - -1, + TARGET_PLAYERS, pnum, 0, 2 * leveltype); @@ -3085,7 +3085,7 @@ bool OperateShrineHoly(int pnum) break; } while (nSolidTable[lv] || dObject[xx][yy] != 0 || dMonster[xx][yy] != 0); - AddMissile(player.position.tile, { xx, yy }, player._pdir, MIS_RNDTELEPORT, -1, pnum, 0, 2 * leveltype); + AddMissile(player.position.tile, { xx, yy }, player._pdir, MIS_RNDTELEPORT, TARGET_PLAYERS, pnum, 0, 2 * leveltype); if (pnum != MyPlayerId) return false; @@ -3953,7 +3953,7 @@ bool OperateFountains(int pnum, int i) player.position.tile, player._pdir, MIS_INFRA, - -1, + TARGET_PLAYERS, pnum, 0, 2 * leveltype);