From cd5cca3f17f341431912ca0df57b41dc94818ba7 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 abf90bfbc24..696af5b2236 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 ); @@ -296,7 +298,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 3f76903d6f1c524fd952b6e622f46bda25219d89 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 b173912fb36..4b5b2b15940 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 ); @@ -288,7 +290,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