diff --git a/Source/monster.cpp b/Source/monster.cpp index 7cfb69eb37cc..f7e0ef3e9c37 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -2278,8 +2278,7 @@ void LeoricAi(Monster &monster) && ((distanceToEnemy >= 3 && v < 4 * monster.intelligence + 35) || v < 6) && LineClearMissile(monster.position.tile, monster.enemyPosition)) { Point newPosition = monster.position.tile + md; - const int maxMonsters = gbIsMultiplayer ? MaxMonsters : MaxMonstersSp; - if (IsTileAvailable(monster, newPosition) && ActiveMonsterCount < maxMonsters) { + if (IsTileAvailable(monster, newPosition) && ActiveMonsterCount < MaxMonsters) { auto typeIndex = GetRandomSkeletonTypeIndex(); if (typeIndex) { SpawnMonster(newPosition, md, *typeIndex, true); @@ -2910,8 +2909,7 @@ void HorkDemonAi(Monster &monster) if (monster.goal == MonsterGoal::Normal) { if ((distanceToEnemy >= 3) && v < 2 * monster.intelligence + 43) { Point position = monster.position.tile + monster.direction; - const int maxMonsters = gbIsMultiplayer ? MaxMonsters : MaxMonstersSp; - if (IsTileAvailable(monster, position) && ActiveMonsterCount < maxMonsters) { + if (IsTileAvailable(monster, position) && ActiveMonsterCount < MaxMonsters) { StartRangedSpecialAttack(monster, MissileID::HorkSpawn, 0); } } else if (distanceToEnemy < 2) { @@ -3118,9 +3116,8 @@ MonsterSpritesData LoadMonsterSpritesData(const MonsterData &monsterData) void EnsureMonsterIndexIsActive(size_t monsterId) { - const int maxMonsters = gbIsMultiplayer ? MaxMonsters : MaxMonstersSp; - assert(monsterId < maxMonsters); - for (size_t index = 0; index < maxMonsters; index++) { + assert(monsterId < MaxMonsters); + for (size_t index = 0; index < MaxMonsters; index++) { if (ActiveMonsters[index] != monsterId) continue; if (index < ActiveMonsterCount) @@ -3266,9 +3263,7 @@ void InitLevelMonsters() ClrAllMonsters(); ActiveMonsterCount = 0; - const int maxMonsters = gbIsMultiplayer ? MaxMonsters : MaxMonstersSp; - - totalmonsters = maxMonsters; + totalmonsters = MaxMonsters; std::iota(std::begin(ActiveMonsters), std::end(ActiveMonsters), 0u); uniquetrans = 0; @@ -3326,8 +3321,7 @@ tl::expected GetLevelMTypes() RETURN_IF_ERROR(AddMonsterType(skeltypes[GenerateRnd(skeletonTypeCount)], PLACE_SCATTER)); } - const int maxMonsters = gbIsMultiplayer ? MaxMonsters : MaxMonstersSp; - std::vector<_monster_id> typelist(maxMonsters); + std::vector<_monster_id> typelist(MaxMonsters); int nt = 0; for (int i = MT_NZOMBIE; i < NUM_MTYPES; i++) { @@ -3561,10 +3555,8 @@ tl::expected InitMonsters() if (gbIsMultiplayer) numplacemonsters += numplacemonsters / 2; - const int maxMonsters = gbIsMultiplayer ? MaxMonsters : MaxMonstersSp; - - if (ActiveMonsterCount + numplacemonsters > maxMonsters - 10) - numplacemonsters = maxMonsters - 10 - ActiveMonsterCount; + if (ActiveMonsterCount + numplacemonsters > MaxMonsters - 10) + numplacemonsters = MaxMonsters - 10 - ActiveMonsterCount; totalmonsters = ActiveMonsterCount + numplacemonsters; int numscattypes = 0; size_t scattertypes[NUM_MTYPES]; @@ -3628,9 +3620,7 @@ tl::expected SetMapMonsters(const uint16_t *dunData, Point st Monster *AddMonster(Point position, Direction dir, size_t typeIndex, bool inMap) { - const int maxMonsters = gbIsMultiplayer ? MaxMonsters : MaxMonstersSp; - - if (ActiveMonsterCount < maxMonsters) { + if (ActiveMonsterCount < MaxMonsters) { Monster &monster = Monsters[ActiveMonsters[ActiveMonsterCount++]]; if (inMap) monster.occupyTile(position, false); @@ -3643,9 +3633,7 @@ Monster *AddMonster(Point position, Direction dir, size_t typeIndex, bool inMap) void SpawnMonster(Point position, Direction dir, size_t typeIndex, bool startSpecialStand /*= false*/) { - const int maxMonsters = gbIsMultiplayer ? MaxMonsters : MaxMonstersSp; - - if (ActiveMonsterCount >= maxMonsters) + if (ActiveMonsterCount >= MaxMonsters) return; // The command is only executed for the level owner, to prevent desyncs in multiplayer. @@ -4058,9 +4046,7 @@ void ProcessMonsters() { DeleteMonsterList(); - const int maxMonsters = gbIsMultiplayer ? MaxMonsters : MaxMonstersSp; - - assert(ActiveMonsterCount <= maxMonsters); + assert(ActiveMonsterCount <= MaxMonsters); for (size_t i = 0; i < ActiveMonsterCount; i++) { Monster &monster = Monsters[ActiveMonsters[i]]; FollowTheLeader(monster); @@ -4097,9 +4083,7 @@ void ProcessMonsters() } if ((monster.flags & MFLAG_TARGETS_MONSTER) != 0) { - const int maxMonsters = gbIsMultiplayer ? MaxMonsters : MaxMonstersSp; - - assert(monster.enemy >= 0 && monster.enemy < maxMonsters); + assert(monster.enemy >= 0 && monster.enemy < MaxMonsters); // BUGFIX: enemy target may be dead at time of access, thus reading garbage data from `Monsters[monster.enemy].position.future`. monster.position.last = Monsters[monster.enemy].position.future; monster.enemyPosition = monster.position.last; @@ -4457,9 +4441,7 @@ void PlayEffect(Monster &monster, MonsterSound mode) void MissToMonst(Missile &missile, Point position) { - const int maxMonsters = gbIsMultiplayer ? MaxMonsters : MaxMonstersSp; - - assert(static_cast(missile._misource) < maxMonsters); + assert(static_cast(missile._misource) < MaxMonsters); Monster &monster = Monsters[missile._misource]; Point oldPosition = missile.position.tile; diff --git a/Source/monster.h b/Source/monster.h index 82e0cbe7fd33..93221b1a68c8 100644 --- a/Source/monster.h +++ b/Source/monster.h @@ -34,8 +34,7 @@ namespace devilution { struct Missile; struct Player; -constexpr size_t MaxMonstersSp = 200; -constexpr size_t MaxMonsters = 204; +constexpr size_t MaxMonsters = 200; constexpr size_t MaxLvlMTypes = 24; enum monster_flag : uint16_t {