From f55059029a23b10b5cbdefe5dfde9c90214abdf8 Mon Sep 17 00:00:00 2001 From: Bobby Battista Date: Fri, 14 Aug 2026 14:52:29 -0400 Subject: [PATCH 1/2] bugfix(saveload): Transfer the weapon set pitch limit flag --- .../Source/GameLogic/Object/WeaponSet.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/WeaponSet.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/WeaponSet.cpp index 546c554ad4b..fc6c059c425 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/WeaponSet.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/WeaponSet.cpp @@ -208,6 +208,8 @@ void WeaponSet::crc( Xfer *xfer ) * 1: Initial version * 2: TheSuperHackers @tweak Upgrade damage type flags from integer to BitFlags for Generals. * Zero Hour already had this at version 1. + * 3: TheSuperHackers @bugfix bobtista 14/08/2026 Serialize m_hasPitchLimit in the slot that + * repeated m_hasDamageWeapon, so a pitch limited weapon set keeps its limit on load */ // ------------------------------------------------------------------------------------------------ void WeaponSet::xfer( Xfer *xfer ) @@ -216,7 +218,7 @@ void WeaponSet::xfer( Xfer *xfer ) #if RETAIL_COMPATIBLE_XFER_SAVE const XferVersion currentVersion = 1; #else - const XferVersion currentVersion = 2; + const XferVersion currentVersion = 3; #endif XferVersion version = currentVersion; xfer->xferVersion( &version, currentVersion ); @@ -293,7 +295,14 @@ void WeaponSet::xfer( Xfer *xfer ) } #endif - xfer->xferBool(&m_hasDamageWeapon); + if (version >= 3) + { + xfer->xferBool(&m_hasPitchLimit); + } + else + { + xfer->xferBool(&m_hasDamageWeapon); + } xfer->xferBool(&m_hasDamageWeapon); #if RTS_GENERALS From 551a841fde9e128aee212aebe03308207296e018 Mon Sep 17 00:00:00 2001 From: Bobby Battista Date: Fri, 14 Aug 2026 14:52:29 -0400 Subject: [PATCH 2/2] bugfix(saveload): Transfer the weapon set pitch limit flag (Generals) --- .../Source/GameLogic/Object/WeaponSet.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/Generals/Code/GameEngine/Source/GameLogic/Object/WeaponSet.cpp b/Generals/Code/GameEngine/Source/GameLogic/Object/WeaponSet.cpp index 8fa04cdb48d..91abec68b7e 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/Object/WeaponSet.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/Object/WeaponSet.cpp @@ -200,6 +200,8 @@ void WeaponSet::crc( Xfer *xfer ) * 1: Initial version * 2: TheSuperHackers @tweak Upgrade damage type flags from integer to BitFlags for Generals. * Zero Hour already had this at version 1. + * 3: TheSuperHackers @bugfix bobtista 14/08/2026 Serialize m_hasPitchLimit in the slot that + * repeated m_hasDamageWeapon, so a pitch limited weapon set keeps its limit on load */ // ------------------------------------------------------------------------------------------------ void WeaponSet::xfer( Xfer *xfer ) @@ -208,7 +210,7 @@ void WeaponSet::xfer( Xfer *xfer ) #if RETAIL_COMPATIBLE_XFER_SAVE const XferVersion currentVersion = 1; #else - const XferVersion currentVersion = 2; + const XferVersion currentVersion = 3; #endif XferVersion version = currentVersion; xfer->xferVersion( &version, currentVersion ); @@ -285,7 +287,14 @@ void WeaponSet::xfer( Xfer *xfer ) } #endif - xfer->xferBool(&m_hasDamageWeapon); + if (version >= 3) + { + xfer->xferBool(&m_hasPitchLimit); + } + else + { + xfer->xferBool(&m_hasDamageWeapon); + } xfer->xferBool(&m_hasDamageWeapon); #if RTS_GENERALS