From f884281ace0c3499185db2636fa9135338d4ff34 Mon Sep 17 00:00:00 2001 From: Stubbjax Date: Sun, 25 Jan 2026 15:27:54 +1100 Subject: [PATCH 1/3] fix: Subdual damage can no longer go negative --- .../GameEngine/Source/GameLogic/Object/Body/ActiveBody.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Body/ActiveBody.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Body/ActiveBody.cpp index 9125ed86e88..25c3c19f472 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Body/ActiveBody.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Body/ActiveBody.cpp @@ -1264,6 +1264,13 @@ void ActiveBody::internalAddSubdualDamage( Real delta ) m_currentSubdualDamage += delta; m_currentSubdualDamage = min(m_currentSubdualDamage, data->m_subdualDamageCap); + + // TheSuperHackers @bugfix Stubbjax 25/01/2026 Subdual damage can no longer go negative. This + // stops weak subdual damage + rapid healing from building up a subdual damage buffer over time. +#if !RETAIL_COMPATIBLE_CRC + if (m_currentSubdualDamage < 0) + m_currentSubdualDamage = 0; +#endif } //------------------------------------------------------------------------------------------------- From bed4a44a91dffaeb9a20302bb24c0a173387635d Mon Sep 17 00:00:00 2001 From: Stubbjax Date: Tue, 27 Jan 2026 10:38:13 +1100 Subject: [PATCH 2/3] refactor: Streamlined logic --- .../Source/GameLogic/Object/Body/ActiveBody.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Body/ActiveBody.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Body/ActiveBody.cpp index 25c3c19f472..cb752aaa14a 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Body/ActiveBody.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Body/ActiveBody.cpp @@ -1263,13 +1263,12 @@ void ActiveBody::internalAddSubdualDamage( Real delta ) const ActiveBodyModuleData *data = getActiveBodyModuleData(); m_currentSubdualDamage += delta; +#if RETAIL_COMPATIBLE_CRC m_currentSubdualDamage = min(m_currentSubdualDamage, data->m_subdualDamageCap); - +#else // TheSuperHackers @bugfix Stubbjax 25/01/2026 Subdual damage can no longer go negative. This - // stops weak subdual damage + rapid healing from building up a subdual damage buffer over time. -#if !RETAIL_COMPATIBLE_CRC - if (m_currentSubdualDamage < 0) - m_currentSubdualDamage = 0; + // stops weak subdual damage + rapid healing from negatively stacking subdual damage over time. + m_currentSubdualDamage = clamp(0.0f, m_currentSubdualDamage, data->m_subdualDamageCap); #endif } From 8d758e437caa615c2ecb058f776c76435a9e682a Mon Sep 17 00:00:00 2001 From: Stubbjax Date: Wed, 28 Jan 2026 12:36:53 +1100 Subject: [PATCH 3/3] docs: Update comment --- .../Code/GameEngine/Source/GameLogic/Object/Body/ActiveBody.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Body/ActiveBody.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Body/ActiveBody.cpp index cb752aaa14a..7f7ed35db53 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Body/ActiveBody.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Body/ActiveBody.cpp @@ -1266,7 +1266,7 @@ void ActiveBody::internalAddSubdualDamage( Real delta ) #if RETAIL_COMPATIBLE_CRC m_currentSubdualDamage = min(m_currentSubdualDamage, data->m_subdualDamageCap); #else - // TheSuperHackers @bugfix Stubbjax 25/01/2026 Subdual damage can no longer go negative. This + // TheSuperHackers @bugfix Stubbjax 25/01/2026 Subdual damage can no longer go negative, which // stops weak subdual damage + rapid healing from negatively stacking subdual damage over time. m_currentSubdualDamage = clamp(0.0f, m_currentSubdualDamage, data->m_subdualDamageCap); #endif