From c9361aff76d7139d98413e06ad8b55f2361d8ccf Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 13 May 2021 13:44:58 +0200 Subject: [PATCH] - Exhumed: moved nPlayerItem into PlayerList --- source/core/savegamehelp.cpp | 2 ++ source/core/savegamehelp.h | 1 + source/core/version.h | 2 +- source/games/exhumed/src/exhumed.cpp | 8 ++++---- source/games/exhumed/src/items.cpp | 4 ++-- source/games/exhumed/src/player.cpp | 17 ++++++++++++----- source/games/exhumed/src/player.h | 2 +- source/games/exhumed/src/status.cpp | 10 +++++----- 8 files changed, 28 insertions(+), 18 deletions(-) diff --git a/source/core/savegamehelp.cpp b/source/core/savegamehelp.cpp index a14f0fa41..a41b06b40 100644 --- a/source/core/savegamehelp.cpp +++ b/source/core/savegamehelp.cpp @@ -70,6 +70,7 @@ void WriteSavePic(FileWriter* file, int width, int height); bool WriteZip(const char* filename, TArray& filenames, TArray& content); extern FString savename; extern FString BackupSaveGame; +int SaveVersion; void SerializeMap(FSerializer &arc); FixedBitArray activeSprites; @@ -346,6 +347,7 @@ int G_ValidateSavegame(FileReader &fr, FString *savetitle, bool formenu) // not our business. Leave it alone. return 0; } + SaveVersion = savesig.currentsavever; MapRecord *curLevel = FindMapByName(label); diff --git a/source/core/savegamehelp.h b/source/core/savegamehelp.h index 65a0fff27..98db88944 100644 --- a/source/core/savegamehelp.h +++ b/source/core/savegamehelp.h @@ -7,6 +7,7 @@ extern FixedBitArray activeSprites; // Savegame utilities class FileReader; +extern int SaveVersion; FString G_BuildSaveName (const char *prefix); int G_ValidateSavegame(FileReader &fr, FString *savetitle, bool formenu); diff --git a/source/core/version.h b/source/core/version.h index 440be91c8..e96877c87 100644 --- a/source/core/version.h +++ b/source/core/version.h @@ -77,7 +77,7 @@ const char *GetVersionString(); #define SAVEVER_DN3D 10 #define SAVEVER_BLD 11 #define SAVEVER_SW 12 -#define SAVEVER_PS 12 +#define SAVEVER_PS 13 #define NETGAMEVERSION 1 diff --git a/source/games/exhumed/src/exhumed.cpp b/source/games/exhumed/src/exhumed.cpp index 0c46756c0..fc66828c5 100644 --- a/source/games/exhumed/src/exhumed.cpp +++ b/source/games/exhumed/src/exhumed.cpp @@ -334,7 +334,7 @@ void GameInterface::Ticker() if (localInput.actions & SB_INVPREV) { - int nItem = nPlayerItem[nLocalPlayer]; + int nItem = PlayerList[nLocalPlayer].nItem; int i; for (i = 6; i > 0; i--) @@ -351,7 +351,7 @@ void GameInterface::Ticker() if (localInput.actions & SB_INVNEXT) { - int nItem = nPlayerItem[nLocalPlayer]; + int nItem = PlayerList[nLocalPlayer].nItem; int i; for (i = 6; i > 0; i--) @@ -368,9 +368,9 @@ void GameInterface::Ticker() if (localInput.actions & SB_INVUSE) { - if (nPlayerItem[nLocalPlayer] != -1) + if (PlayerList[nLocalPlayer].nItem != -1) { - localInput.setItemUsed(nPlayerItem[nLocalPlayer]); + localInput.setItemUsed(PlayerList[nLocalPlayer].nItem); } } diff --git a/source/games/exhumed/src/items.cpp b/source/games/exhumed/src/items.cpp index 47355b984..63f274f5d 100644 --- a/source/games/exhumed/src/items.cpp +++ b/source/games/exhumed/src/items.cpp @@ -175,7 +175,7 @@ void FillItems(short nPlayer) SetMagicFrame(); } - if (nPlayerItem[nPlayer] == -1) { + if (PlayerList[nPlayer].nItem == -1) { SetPlayerItem(nPlayer, 0); } } @@ -336,7 +336,7 @@ int GrabItem(short nPlayer, short nItem) PlayerList[nPlayer].items[nItem]++; - if (nPlayerItem[nPlayer] < 0 || nItem == nPlayerItem[nPlayer]) { + if (PlayerList[nPlayer].nItem < 0 || nItem == PlayerList[nPlayer].nItem) { SetPlayerItem(nPlayer, nItem); } diff --git a/source/games/exhumed/src/player.cpp b/source/games/exhumed/src/player.cpp index e1542c109..8ee5fee17 100644 --- a/source/games/exhumed/src/player.cpp +++ b/source/games/exhumed/src/player.cpp @@ -104,7 +104,6 @@ short nTauntTimer[kMaxPlayers]; short nPlayerTorch[kMaxPlayers]; uint16_t nPlayerWeapons[kMaxPlayers]; // each set bit represents a weapon the player has short nPlayerLives[kMaxPlayers]; -short nPlayerItem[kMaxPlayers]; Player PlayerList[kMaxPlayers]; short nPlayerInvisible[kMaxPlayers]; short nPlayerDouble[kMaxPlayers]; @@ -221,7 +220,7 @@ void InitPlayerInventory(short nPlayer) { memset(&PlayerList[nPlayer], 0, sizeof(Player)); - nPlayerItem[nPlayer] = -1; + PlayerList[nPlayer].nItem = -1; nPlayerSwear[nPlayer] = 4; ResetPlayerWeapons(nPlayer); @@ -2744,6 +2743,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, Player& w, Player* ("invincible", w.invincibility) ("air", w.nAir) ("seq", w.nSeq) + ("item", w.nItem) ("maskamount", w.nMaskAmount) ("keys", w.keys) ("magic", w.nMagic) @@ -2809,7 +2809,6 @@ void SerializePlayer(FSerializer& arc) .Array("torch", nPlayerTorch, PlayerCount) .Array("weapons", nPlayerWeapons, PlayerCount) .Array("lives", nPlayerLives, PlayerCount) - .Array("item", nPlayerItem, PlayerCount) .Array("list", PlayerList, PlayerCount) .Array("invisible", nPlayerInvisible, PlayerCount) .Array("double", nPlayerDouble, PlayerCount) @@ -2820,8 +2819,16 @@ void SerializePlayer(FSerializer& arc) .Array("eyelevel", eyelevel, PlayerCount) .Array("netstartsprite", nNetStartSprite, PlayerCount) .Array("grenade", nPlayerGrenade, PlayerCount) - .Array("d282a", word_D282A, PlayerCount) - .EndObject(); + .Array("d282a", word_D282A, PlayerCount); + + if (SaveVersion < 13) // Item was an external array in older versions. + { + int nPlayerItem[8]{}; + arc.Array("item", nPlayerItem, PlayerCount); + for (int i = 0; i < PlayerCount; i++) PlayerList[i].nItem = nPlayerItem[i]; + } + + arc.EndObject(); } } diff --git a/source/games/exhumed/src/player.h b/source/games/exhumed/src/player.h index 0715cdbd2..436df6ec1 100644 --- a/source/games/exhumed/src/player.h +++ b/source/games/exhumed/src/player.h @@ -60,6 +60,7 @@ struct Player short nMaskAmount; uint16_t keys; short nMagic; + short nItem; char items[8]; short nAmmo[7]; // TODO - kMaxWeapons? short pad[2]; @@ -83,7 +84,6 @@ extern short PlayerCount; extern short nPlayerTorch[]; extern short nPlayerLives[]; -extern short nPlayerItem[]; extern Player PlayerList[]; extern short nPlayerInvisible[]; extern short nPlayerDouble[]; diff --git a/source/games/exhumed/src/status.cpp b/source/games/exhumed/src/status.cpp index 82df0f236..932fe0958 100644 --- a/source/games/exhumed/src/status.cpp +++ b/source/games/exhumed/src/status.cpp @@ -205,7 +205,7 @@ void RefreshStatus() int val = 37; - SetPlayerItem(nLocalPlayer, nPlayerItem[nLocalPlayer]); + SetPlayerItem(nLocalPlayer, PlayerList[nLocalPlayer].nItem); SetHealthFrame(0); SetMagicFrame(); } @@ -320,7 +320,7 @@ void SetCounterDigits() void SetItemSeq() { - short nItem = nPlayerItem[nLocalPlayer]; + short nItem = PlayerList[nLocalPlayer].nItem; if (nItem < 0) { nItemSeq = -1; @@ -334,7 +334,7 @@ void SetItemSeq() void SetItemSeq2(int nSeqOffset) { - short nItem = nPlayerItem[nLocalPlayer]; + short nItem = PlayerList[nLocalPlayer].nItem; if (nItemMagic[nItem] <= PlayerList[nLocalPlayer].nMagic) { nItemAltSeq = 0; @@ -350,7 +350,7 @@ void SetItemSeq2(int nSeqOffset) void SetPlayerItem(short nPlayer, short nItem) { - nPlayerItem[nPlayer] = nItem; + PlayerList[nLocalPlayer].nItem = nItem; if (nPlayer == nLocalPlayer) { @@ -741,7 +741,7 @@ private: format.Format("%d", pp->nMagic / 10); - short nItem = nPlayerItem[nLocalPlayer]; + short nItem = PlayerList[nLocalPlayer].nItem; int timer = ItemTimer(nItem, nLocalPlayer); if (timer > 0) {