From ef5986f4df36c8e28da4d56e2aab2a023dde3034 Mon Sep 17 00:00:00 2001 From: obligaron Date: Sat, 18 Jan 2025 10:40:13 +0100 Subject: [PATCH] Network: Decouple enemyId from max players --- Source/monster.cpp | 12 ++++++------ Source/monster.h | 4 ++-- Source/sync.cpp | 18 ++++++------------ 3 files changed, 14 insertions(+), 20 deletions(-) diff --git a/Source/monster.cpp b/Source/monster.cpp index 792583763..28ab407c6 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -4672,23 +4672,23 @@ bool CanTalkToMonst(const Monster &monster) return IsAnyOf(monster.goal, MonsterGoal::Inquiring, MonsterGoal::Talking); } -int encode_enemy(Monster &monster) +uint8_t encode_enemy(Monster &monster) { if ((monster.flags & MFLAG_TARGETS_MONSTER) != 0) - return monster.enemy + MAX_PLRS; + return monster.enemy; - return monster.enemy; + return monster.enemy + MaxMonsters; } -void decode_enemy(Monster &monster, int enemyId) +void decode_enemy(Monster &monster, uint8_t enemyId) { - if (enemyId < MAX_PLRS) { + if (enemyId >= MaxMonsters) { + enemyId -= MaxMonsters; monster.flags &= ~MFLAG_TARGETS_MONSTER; monster.enemy = enemyId; monster.enemyPosition = Players[enemyId].position.future; } else { monster.flags |= MFLAG_TARGETS_MONSTER; - enemyId -= MAX_PLRS; monster.enemy = enemyId; monster.enemyPosition = Monsters[enemyId].position.future; } diff --git a/Source/monster.h b/Source/monster.h index 93221b1a6..7eb567e13 100644 --- a/Source/monster.h +++ b/Source/monster.h @@ -570,7 +570,7 @@ Monster *PreSpawnSkeleton(); void TalktoMonster(Player &player, Monster &monster); void SpawnGolem(Player &player, Monster &golem, Point position, Missile &missile); bool CanTalkToMonst(const Monster &monster); -int encode_enemy(Monster &monster); -void decode_enemy(Monster &monster, int enemyId); +uint8_t encode_enemy(Monster &monster); +void decode_enemy(Monster &monster, uint8_t enemyId); } // namespace devilution diff --git a/Source/sync.cpp b/Source/sync.cpp index abd510ffc..199ed651e 100644 --- a/Source/sync.cpp +++ b/Source/sync.cpp @@ -160,7 +160,7 @@ void SyncMonster(bool isOwner, const TSyncMonster &monsterSync) } const Point position { monsterSync._mx, monsterSync._my }; - const int enemyId = monsterSync._menemy; + const uint8_t enemyId = monsterSync._menemy; if (monster.activeForTicks != 0) { uint32_t delta = MyPlayer->position.tile.ManhattanDistance(monster.position.tile); @@ -205,21 +205,15 @@ void SyncMonster(bool isOwner, const TSyncMonster &monsterSync) monster.whoHit |= monsterSync.mWhoHit; } -bool IsEnemyIdValid(const Monster &monster, int enemyId) +bool IsEnemyIdValid(const Monster &monster, uint8_t enemyId) { - if (enemyId < 0) { - return false; - } - - if (enemyId < MAX_PLRS) { + if (enemyId > MaxMonsters) { + enemyId -= MaxMonsters; + if (enemyId >= Players.size()) + return false; return Players[enemyId].plractive; } - enemyId -= MAX_PLRS; - if (static_cast(enemyId) >= MaxMonsters) { - return false; - } - const Monster &enemy = Monsters[enemyId]; if (&enemy == &monster) {