Browse Source

Network: Decouple enemyId from max players

pull/7952/head
obligaron 1 year ago committed by Stephen C. Wills
parent
commit
ef5986f4df
  1. 12
      Source/monster.cpp
  2. 4
      Source/monster.h
  3. 18
      Source/sync.cpp

12
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;
}

4
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

18
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<size_t>(enemyId) >= MaxMonsters) {
return false;
}
const Monster &enemy = Monsters[enemyId];
if (&enemy == &monster) {

Loading…
Cancel
Save