From 2d47c12515794fd2cf207fbc5f32f6f839942956 Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Fri, 10 Sep 2021 02:36:24 +0200 Subject: [PATCH] Fix charpanel always showing player 0 stats --- Source/multi.cpp | 4 +++- Source/panels/charpanel.cpp | 3 +-- Source/player.cpp | 1 + Source/player.h | 1 + test/writehero_test.cpp | 2 ++ 5 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Source/multi.cpp b/Source/multi.cpp index 4e7694502..1f5e4670b 100644 --- a/Source/multi.cpp +++ b/Source/multi.cpp @@ -427,6 +427,7 @@ bool InitSingle(GameData *gameData) } MyPlayerId = 0; + MyPlayer = &Players[MyPlayerId]; gbIsMultiplayer = false; return true; @@ -452,9 +453,10 @@ bool InitMulti(GameData *gameData) return false; } MyPlayerId = playerId; + MyPlayer = &Players[MyPlayerId]; gbIsMultiplayer = true; - pfile_read_player_from_save(gSaveNumber, Players[MyPlayerId]); + pfile_read_player_from_save(gSaveNumber, *MyPlayer); return true; } diff --git a/Source/panels/charpanel.cpp b/Source/panels/charpanel.cpp index 765546dcf..14a645245 100644 --- a/Source/panels/charpanel.cpp +++ b/Source/panels/charpanel.cpp @@ -7,6 +7,7 @@ #include "DiabloUI/art_draw.h" #include "control.h" +#include "player.h" #include "utils/display.h" #include "engine/render/cel_render.hpp" #include "engine/render/text_render.hpp" @@ -41,8 +42,6 @@ struct PanelEntry { std::function statDisplayFunc = nullptr; // function responsible for displaying stat }; -Player *MyPlayer = &Players[MyPlayerId]; - UiFlags GetBaseStatColor(CharacterAttribute attr) { UiFlags style = UiFlags::ColorSilver; diff --git a/Source/player.cpp b/Source/player.cpp index ea8c6826b..40b26b8ea 100644 --- a/Source/player.cpp +++ b/Source/player.cpp @@ -34,6 +34,7 @@ namespace devilution { int MyPlayerId; +Player *MyPlayer; Player Players[MAX_PLRS]; bool MyPlayerIsDead; int deathdelay; diff --git a/Source/player.h b/Source/player.h index 663fff50f..bc6c0fc06 100644 --- a/Source/player.h +++ b/Source/player.h @@ -576,6 +576,7 @@ struct Player { }; extern int MyPlayerId; +extern Player *MyPlayer; extern Player Players[MAX_PLRS]; extern bool MyPlayerIsDead; extern int BlockBonuses[enum_size::value]; diff --git a/test/writehero_test.cpp b/test/writehero_test.cpp index 7adf21ee9..3eccf92e9 100644 --- a/test/writehero_test.cpp +++ b/test/writehero_test.cpp @@ -333,6 +333,8 @@ TEST(Writehero, pfile_write_hero) leveltype = DTYPE_TOWN; MyPlayerId = 0; + MyPlayer = &Players[MyPlayerId]; + _uiheroinfo info {}; strcpy(info.name, "TestPlayer"); info.heroclass = HeroClass::Rogue;