From eb2740c7b6cc0fc5de31b8daee065531c1f74e72 Mon Sep 17 00:00:00 2001 From: Cesar Canassa Date: Sun, 3 Jul 2022 18:49:28 +0200 Subject: [PATCH] :recycle: change M_WalkDir to receive a Monster reference (#4875) --- Source/monster.cpp | 27 ++++++++++++++++----------- Source/monster.h | 2 +- Source/sync.cpp | 2 +- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/Source/monster.cpp b/Source/monster.cpp index 23b69419d..f969295c1 100644 --- a/Source/monster.cpp +++ b/Source/monster.cpp @@ -1810,6 +1810,8 @@ void GroupUnity(Monster &monster) bool RandomWalk(int monsterId, Direction md) { Direction mdtemp = md; + Monster &monster = Monsters[monsterId]; + bool ok = DirOK(monsterId, md); if (GenerateRnd(2) != 0) ok = ok || (md = Left(mdtemp), DirOK(monsterId, md)) || (md = Right(mdtemp), DirOK(monsterId, md)); @@ -1825,12 +1827,14 @@ bool RandomWalk(int monsterId, Direction md) || (md = Right(Right(mdtemp)), DirOK(monsterId, md)); } if (ok) - M_WalkDir(monsterId, md); + M_WalkDir(monster, md); return ok; } bool RandomWalk2(int monsterId, Direction md) { + auto &monster = Monsters[monsterId]; + Direction mdtemp = md; bool ok = DirOK(monsterId, md); // Can we continue in the same direction if (GenerateRnd(2) != 0) { // Randomly go left or right @@ -1840,7 +1844,7 @@ bool RandomWalk2(int monsterId, Direction md) } if (ok) - M_WalkDir(monsterId, mdtemp); + M_WalkDir(monster, mdtemp); return ok; } @@ -1919,9 +1923,11 @@ bool AiPlanWalk(int monsterId) bool DumbWalk(int monsterId, Direction md) { + Monster &monster = Monsters[monsterId]; + bool ok = DirOK(monsterId, md); if (ok) - M_WalkDir(monsterId, md); + M_WalkDir(monster, md); return ok; } @@ -1933,24 +1939,26 @@ Direction Turn(Direction direction, bool turnLeft) bool RoundWalk(int monsterId, Direction direction, int *dir) { + Monster &monster = Monsters[monsterId]; + Direction turn45deg = Turn(direction, *dir != 0); Direction turn90deg = Turn(turn45deg, *dir != 0); if (DirOK(monsterId, turn90deg)) { // Turn 90 degrees - M_WalkDir(monsterId, turn90deg); + M_WalkDir(monster, turn90deg); return true; } if (DirOK(monsterId, turn45deg)) { // Only do a small turn - M_WalkDir(monsterId, turn45deg); + M_WalkDir(monster, turn45deg); return true; } if (DirOK(monsterId, direction)) { // Continue straight - M_WalkDir(monsterId, direction); + M_WalkDir(monster, direction); return true; } @@ -4072,11 +4080,8 @@ void PrepDoEnding() } } -void M_WalkDir(int monsterId, Direction md) +void M_WalkDir(Monster &monster, Direction md) { - assert(monsterId >= 0 && monsterId < MaxMonsters); - auto &monster = Monsters[monsterId]; - int mwi = monster.type().getAnimData(MonsterGraphic::Walk).frames - 1; switch (md) { case Direction::North: @@ -4165,7 +4170,7 @@ void GolumAi(int monsterId) ok = DirOK(monsterId, md); } if (ok) - M_WalkDir(monsterId, md); + M_WalkDir(golem, md); } void DeleteMonsterList() diff --git a/Source/monster.h b/Source/monster.h index 505cd6eb0..69c36a2e5 100644 --- a/Source/monster.h +++ b/Source/monster.h @@ -315,7 +315,7 @@ void M_SyncStartKill(int monsterId, Point position, int pnum); void M_UpdateLeader(int monsterId); void DoEnding(); void PrepDoEnding(); -void M_WalkDir(int monsterId, Direction md); +void M_WalkDir(Monster &monster, Direction md); void GolumAi(int monsterId); void DeleteMonsterList(); void ProcessMonsters(); diff --git a/Source/sync.cpp b/Source/sync.cpp index 89002b589..7997ca6cc 100644 --- a/Source/sync.cpp +++ b/Source/sync.cpp @@ -182,7 +182,7 @@ void SyncMonster(bool isOwner, const TSyncMonster &monsterSync) if (DirOK(monsterId, md)) { M_ClearSquares(monsterId); dMonster[monster.position.tile.x][monster.position.tile.y] = monsterId + 1; - M_WalkDir(monsterId, md); + M_WalkDir(monster, md); monster._msquelch = UINT8_MAX; } }