diff --git a/Generals/Code/GameEngine/Source/GameLogic/AI/TurretAI.cpp b/Generals/Code/GameEngine/Source/GameLogic/AI/TurretAI.cpp index 651e2c4f2f0..ba41dd60151 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/AI/TurretAI.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/AI/TurretAI.cpp @@ -146,14 +146,28 @@ void TurretStateMachine::crc( Xfer *xfer ) } // ------------------------------------------------------------------------------------------------ -/** Xfer Method */ +/** Xfer Method + * Version Info: + * 1: Initial version + * 2: TheSuperHackers @bugfix bobtista 19/07/2026 Serialize the base StateMachine state. + * Without this the turret reverts to its default state on load. + */ // ------------------------------------------------------------------------------------------------ void TurretStateMachine::xfer( Xfer *xfer ) { - XferVersion cv = 1; - XferVersion v = cv; - xfer->xferVersion( &v, cv ); + // version +#if RETAIL_COMPATIBLE_XFER_SAVE + XferVersion currentVersion = 1; +#else + XferVersion currentVersion = 2; +#endif + XferVersion version = currentVersion; + xfer->xferVersion( &version, currentVersion ); + if (version >= 2) + { + StateMachine::xfer(xfer); + } } // ------------------------------------------------------------------------------------------------ @@ -161,6 +175,7 @@ void TurretStateMachine::xfer( Xfer *xfer ) // ------------------------------------------------------------------------------------------------ void TurretStateMachine::loadPostProcess() { + StateMachine::loadPostProcess(); } //---------------------------------------------------------------------------------------------------------- diff --git a/Generals/Code/GameEngine/Source/GameLogic/Object/Update/AIUpdate/DozerAIUpdate.cpp b/Generals/Code/GameEngine/Source/GameLogic/Object/Update/AIUpdate/DozerAIUpdate.cpp index af6982fc7ba..c5a3eb001f2 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/Object/Update/AIUpdate/DozerAIUpdate.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/Object/Update/AIUpdate/DozerAIUpdate.cpp @@ -827,16 +827,30 @@ void DozerActionStateMachine::crc( Xfer *xfer ) } // ------------------------------------------------------------------------------------------------ -/** Xfer Method */ +/** Xfer Method + * Version Info: + * 1: Initial version + * 2: TheSuperHackers @bugfix bobtista 19/07/2026 Serialize the base StateMachine state. + * Without this the dozer reverts to its default state on load. + */ // ------------------------------------------------------------------------------------------------ void DozerActionStateMachine::xfer( Xfer *xfer ) { // version +#if RETAIL_COMPATIBLE_XFER_SAVE XferVersion currentVersion = 1; +#else + XferVersion currentVersion = 2; +#endif XferVersion version = currentVersion; xfer->xferVersion( &version, currentVersion ); xfer->xferUser(&m_task, sizeof(m_task)); + + if (version >= 2) + { + StateMachine::xfer(xfer); + } } // ------------------------------------------------------------------------------------------------ @@ -844,6 +858,7 @@ void DozerActionStateMachine::xfer( Xfer *xfer ) // ------------------------------------------------------------------------------------------------ void DozerActionStateMachine::loadPostProcess() { + StateMachine::loadPostProcess(); } diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/AI/TurretAI.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/AI/TurretAI.cpp index 78395baf998..02d7291071a 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/AI/TurretAI.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/AI/TurretAI.cpp @@ -146,14 +146,28 @@ void TurretStateMachine::crc( Xfer *xfer ) } // ------------------------------------------------------------------------------------------------ -/** Xfer Method */ +/** Xfer Method + * Version Info: + * 1: Initial version + * 2: TheSuperHackers @bugfix bobtista 19/07/2026 Serialize the base StateMachine state. + * Without this the turret reverts to its default state on load. + */ // ------------------------------------------------------------------------------------------------ void TurretStateMachine::xfer( Xfer *xfer ) { - XferVersion cv = 1; - XferVersion v = cv; - xfer->xferVersion( &v, cv ); + // version +#if RETAIL_COMPATIBLE_XFER_SAVE + XferVersion currentVersion = 1; +#else + XferVersion currentVersion = 2; +#endif + XferVersion version = currentVersion; + xfer->xferVersion( &version, currentVersion ); + if (version >= 2) + { + StateMachine::xfer(xfer); + } } // ------------------------------------------------------------------------------------------------ @@ -161,6 +175,7 @@ void TurretStateMachine::xfer( Xfer *xfer ) // ------------------------------------------------------------------------------------------------ void TurretStateMachine::loadPostProcess() { + StateMachine::loadPostProcess(); } //---------------------------------------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/AIUpdate/DozerAIUpdate.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/AIUpdate/DozerAIUpdate.cpp index 2ece830173a..2ccaaa00d38 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/AIUpdate/DozerAIUpdate.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/AIUpdate/DozerAIUpdate.cpp @@ -832,16 +832,30 @@ void DozerActionStateMachine::crc( Xfer *xfer ) } // ------------------------------------------------------------------------------------------------ -/** Xfer Method */ +/** Xfer Method + * Version Info: + * 1: Initial version + * 2: TheSuperHackers @bugfix bobtista 19/07/2026 Serialize the base StateMachine state. + * Without this the dozer reverts to its default state on load. + */ // ------------------------------------------------------------------------------------------------ void DozerActionStateMachine::xfer( Xfer *xfer ) { // version +#if RETAIL_COMPATIBLE_XFER_SAVE XferVersion currentVersion = 1; +#else + XferVersion currentVersion = 2; +#endif XferVersion version = currentVersion; xfer->xferVersion( &version, currentVersion ); xfer->xferUser(&m_task, sizeof(m_task)); + + if (version >= 2) + { + StateMachine::xfer(xfer); + } } // ------------------------------------------------------------------------------------------------ @@ -849,6 +863,7 @@ void DozerActionStateMachine::xfer( Xfer *xfer ) // ------------------------------------------------------------------------------------------------ void DozerActionStateMachine::loadPostProcess() { + StateMachine::loadPostProcess(); }