From 2def565cc7e3b15cdd9f5bdbe61215348bb24d03 Mon Sep 17 00:00:00 2001 From: Caball009 <82909616+Caball009@users.noreply.github.com> Date: Sun, 21 Dec 2025 19:45:19 +0100 Subject: [PATCH 1/6] tweak(drawable): Set correct model tint color after loading a save game --- GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp index 9f1f5f7eafe..25df3a5d571 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp @@ -5075,6 +5075,10 @@ void Drawable::xfer( Xfer *xfer ) // prev tint status xfer->xferUnsignedInt( &m_prevTintStatus ); + // TheSuperHackers @tweak Caball009 21/12/2025 Trigger transition in tint color after loading a save game. + if (xfer->getXferMode() == XFER_LOAD && m_prevTintStatus == m_tintStatus) + m_prevTintStatus = 0; + // fading mode xfer->xferUser( &m_fadeMode, sizeof( FadingMode ) ); From 1f016f6e8248d977d59d03bfde6561168fcc6486 Mon Sep 17 00:00:00 2001 From: Caball009 <82909616+Caball009@users.noreply.github.com> Date: Thu, 1 Jan 2026 20:15:14 +0100 Subject: [PATCH 2/6] Bumped the xfer version to exclude the serialization of 'm_prevTintStatus'. --- .../GameEngine/Source/GameClient/Drawable.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp index 25df3a5d571..be05369020d 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp @@ -4904,15 +4904,20 @@ void Drawable::xferDrawableModules( Xfer *xfer ) * during the module xfer (CBD) * 4: Added m_ambientSoundEnabled flag * 5: save full mtx, not pos+orient. - * 6: Added m_ambientSoundEnabledFromScript flag - * 7: Save the customize ambient sound info + * 6: Added m_ambientSoundEnabledFromScript flag + * 7: Save the customize ambient sound info + * 8: Removed m_prevTintStatus because loading its value is unnecessary and undesirable */ // ------------------------------------------------------------------------------------------------ void Drawable::xfer( Xfer *xfer ) { // version +#if RETAIL_COMPATIBLE_XFER_SAVE const XferVersion currentVersion = 7; +#else + const XferVersion currentVersion = 8; +#endif XferVersion version = currentVersion; xfer->xferVersion( &version, currentVersion ); @@ -5069,6 +5074,7 @@ void Drawable::xfer( Xfer *xfer ) // status xfer->xferUnsignedInt( &m_status ); +#if RETAIL_COMPATIBLE_XFER_SAVE // tint status xfer->xferUnsignedInt( &m_tintStatus ); @@ -5076,8 +5082,12 @@ void Drawable::xfer( Xfer *xfer ) xfer->xferUnsignedInt( &m_prevTintStatus ); // TheSuperHackers @tweak Caball009 21/12/2025 Trigger transition in tint color after loading a save game. - if (xfer->getXferMode() == XFER_LOAD && m_prevTintStatus == m_tintStatus) + if (xfer->getXferMode() == XFER_LOAD) m_prevTintStatus = 0; +#else + // tint status + xfer->xferUnsignedInt( &m_tintStatus ); +#endif // fading mode xfer->xferUser( &m_fadeMode, sizeof( FadingMode ) ); From b744a37760973b1bdd521fa26420d1ef59bbf070 Mon Sep 17 00:00:00 2001 From: Caball009 <82909616+Caball009@users.noreply.github.com> Date: Thu, 1 Jan 2026 21:11:41 +0100 Subject: [PATCH 3/6] Removed xfer macro. --- .../GameEngine/Source/GameClient/Drawable.cpp | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp index be05369020d..3f4d92139ab 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp @@ -5074,20 +5074,18 @@ void Drawable::xfer( Xfer *xfer ) // status xfer->xferUnsignedInt( &m_status ); -#if RETAIL_COMPATIBLE_XFER_SAVE - // tint status - xfer->xferUnsignedInt( &m_tintStatus ); + if (version <= 7) + { + // prev tint status + xfer->xferUnsignedInt( &m_prevTintStatus ); - // prev tint status - xfer->xferUnsignedInt( &m_prevTintStatus ); + // TheSuperHackers @bugfix Caball009 21/12/2025 Trigger tinting after loading a save game. + if (xfer->getXferMode() == XFER_LOAD) + m_prevTintStatus = 0; + } - // TheSuperHackers @tweak Caball009 21/12/2025 Trigger transition in tint color after loading a save game. - if (xfer->getXferMode() == XFER_LOAD) - m_prevTintStatus = 0; -#else // tint status xfer->xferUnsignedInt( &m_tintStatus ); -#endif // fading mode xfer->xferUser( &m_fadeMode, sizeof( FadingMode ) ); From 6e9af5329bb5ee523e6bdbe4215f760fac0c0aba Mon Sep 17 00:00:00 2001 From: Caball009 <82909616+Caball009@users.noreply.github.com> Date: Thu, 1 Jan 2026 21:13:42 +0100 Subject: [PATCH 4/6] Fixed comment. --- GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp index 3f4d92139ab..0a9391afb6c 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp @@ -4906,7 +4906,7 @@ void Drawable::xferDrawableModules( Xfer *xfer ) * 5: save full mtx, not pos+orient. * 6: Added m_ambientSoundEnabledFromScript flag * 7: Save the customize ambient sound info - * 8: Removed m_prevTintStatus because loading its value is unnecessary and undesirable + * 8: TheSuperHackers @bugfix Removed m_prevTintStatus because loading its value is unnecessary and undesirable */ // ------------------------------------------------------------------------------------------------ void Drawable::xfer( Xfer *xfer ) From 5513c3b49449edd6006ebdef32692923fb44cffc Mon Sep 17 00:00:00 2001 From: Caball009 <82909616+Caball009@users.noreply.github.com> Date: Thu, 1 Jan 2026 21:14:06 +0100 Subject: [PATCH 5/6] Fixed xfer order. --- GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp index 0a9391afb6c..f5dd995db0f 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp @@ -5074,6 +5074,9 @@ void Drawable::xfer( Xfer *xfer ) // status xfer->xferUnsignedInt( &m_status ); + // tint status + xfer->xferUnsignedInt( &m_tintStatus ); + if (version <= 7) { // prev tint status @@ -5084,9 +5087,6 @@ void Drawable::xfer( Xfer *xfer ) m_prevTintStatus = 0; } - // tint status - xfer->xferUnsignedInt( &m_tintStatus ); - // fading mode xfer->xferUser( &m_fadeMode, sizeof( FadingMode ) ); From ab85ab3a83fa0a6b107a3a7bebae35969d085e4b Mon Sep 17 00:00:00 2001 From: Caball009 <82909616+Caball009@users.noreply.github.com> Date: Sat, 3 Jan 2026 00:01:09 +0100 Subject: [PATCH 6/6] Replicated in Generals. --- .../GameEngine/Source/GameClient/Drawable.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Generals/Code/GameEngine/Source/GameClient/Drawable.cpp b/Generals/Code/GameEngine/Source/GameClient/Drawable.cpp index 10e680001be..b7284e0c45e 100644 --- a/Generals/Code/GameEngine/Source/GameClient/Drawable.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/Drawable.cpp @@ -4248,13 +4248,18 @@ void Drawable::xferDrawableModules( Xfer *xfer ) * during the module xfer (CBD) * 4: Added m_ambientSoundEnabled flag * 5: save full mtx, not pos+orient. + * 6: TheSuperHackers @bugfix Removed m_prevTintStatus because loading its value is unnecessary and undesirable */ // ------------------------------------------------------------------------------------------------ void Drawable::xfer( Xfer *xfer ) { // version +#if RETAIL_COMPATIBLE_XFER_SAVE const XferVersion currentVersion = 5; +#else + const XferVersion currentVersion = 6; +#endif XferVersion version = currentVersion; xfer->xferVersion( &version, currentVersion ); @@ -4414,8 +4419,15 @@ void Drawable::xfer( Xfer *xfer ) // tint status xfer->xferUnsignedInt( &m_tintStatus ); - // prev tint status - xfer->xferUnsignedInt( &m_prevTintStatus ); + if (version <= 5) + { + // prev tint status + xfer->xferUnsignedInt( &m_prevTintStatus ); + + // TheSuperHackers @bugfix Caball009 21/12/2025 Trigger tinting after loading a save game. + if (xfer->getXferMode() == XFER_LOAD) + m_prevTintStatus = 0; + } // fading mode xfer->xferUser( &m_fadeMode, sizeof( FadingMode ) );