From 32480dde162fa5badbaa56f289163256371043dc Mon Sep 17 00:00:00 2001 From: Mitchell Richters Date: Sun, 24 Sep 2023 17:22:38 +1000 Subject: [PATCH] - Ensure all games preserve `SB_CENTERVIEW` and `SB_CROUCH` bits upon loading. --- source/games/blood/src/player.cpp | 6 ++++++ source/games/exhumed/src/player.cpp | 7 ++++++- source/games/sw/src/save.cpp | 3 +-- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/source/games/blood/src/player.cpp b/source/games/blood/src/player.cpp index c9cd3af2c..3aad36a9c 100644 --- a/source/games/blood/src/player.cpp +++ b/source/games/blood/src/player.cpp @@ -2491,8 +2491,14 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, PLAYER& w, PLAYER* ("quakeeffect", w.quakeEffect) ("player_par", w.player_par) ("waterpal", w.nWaterPal) + ("actions", w.input.actions) .Array("posturedata", &w.pPosture[0][0], &gPostureDefaults[0][0], kModeMax * kPostureMax) // only save actual changes in this. .EndObject(); + + if (arc.isReading()) + { + w.input.actions &= SB_CENTERVIEW|SB_CROUCH; // these are the only bits we need to preserve. + } } return arc; } diff --git a/source/games/exhumed/src/player.cpp b/source/games/exhumed/src/player.cpp index 59d4459b8..0639d92cb 100644 --- a/source/games/exhumed/src/player.cpp +++ b/source/games/exhumed/src/player.cpp @@ -2152,8 +2152,13 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, Player& w, Player* ("totalvel", w.totalvel) ("grenade", w.pPlayerGrenade) ("bUnderwater", w.bUnderwater) - + ("actions", w.input.actions) .EndObject(); + + if (arc.isReading()) + { + w.input.actions &= SB_CENTERVIEW|SB_CROUCH; // these are the only bits we need to preserve. + } } return arc; } diff --git a/source/games/sw/src/save.cpp b/source/games/sw/src/save.cpp index 04f8c4607..d400889e8 100644 --- a/source/games/sw/src/save.cpp +++ b/source/games/sw/src/save.cpp @@ -568,8 +568,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, PLAYER& w, PLAYER* { w.ovect = w.vect; w.obob_z = w.bob_z; - w.input = {}; - w.lastinput = {}; + w.input.actions &= SB_CENTERVIEW|SB_CROUCH; // these are the only bits we need to preserve. memset(w.cookieQuote, 0, sizeof(w.cookieQuote)); // no need to remember this. w.StartColor = 0;