From 24024fc721a06a7ce4af81f22db2dea71f491e1d Mon Sep 17 00:00:00 2001 From: Caball009 <82909616+Caball009@users.noreply.github.com> Date: Fri, 14 Nov 2025 17:12:42 +0100 Subject: [PATCH 1/3] bugfix: Destroying disabled power plants lowers energy production twice --- Generals/Code/GameEngine/Source/Common/RTS/Energy.cpp | 6 ++++++ GeneralsMD/Code/GameEngine/Source/Common/RTS/Energy.cpp | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/Generals/Code/GameEngine/Source/Common/RTS/Energy.cpp b/Generals/Code/GameEngine/Source/Common/RTS/Energy.cpp index ea2708cdc85..4ee33417e11 100644 --- a/Generals/Code/GameEngine/Source/Common/RTS/Energy.cpp +++ b/Generals/Code/GameEngine/Source/Common/RTS/Energy.cpp @@ -188,12 +188,18 @@ void Energy::removePowerBonus( Object *obj ) if( obj == NULL ) return; + // TheSuperHackers @bugfix Caball009 14/11/2025 Don't remove power bonus for disabled power plants. +#if RETAIL_COMPATIBLE_CRC addProduction( -obj->getTemplate()->getEnergyBonus() ); +#else + if ( !obj->isDisabled() ) + addProduction( -obj->getTemplate()->getEnergyBonus() ); // sanity DEBUG_ASSERTCRASH( m_energyProduction >= 0 && m_energyConsumption >= 0, ("Energy - Negative Energy numbers, Produce=%d Consume=%d\n", m_energyProduction, m_energyConsumption) ); +#endif } diff --git a/GeneralsMD/Code/GameEngine/Source/Common/RTS/Energy.cpp b/GeneralsMD/Code/GameEngine/Source/Common/RTS/Energy.cpp index b1b34276e9d..8e88b65a868 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/RTS/Energy.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/RTS/Energy.cpp @@ -207,12 +207,18 @@ void Energy::removePowerBonus( Object *obj ) if( obj == NULL ) return; + // TheSuperHackers @bugfix Caball009 14/11/2025 Don't remove power bonus for disabled power plants. +#if RETAIL_COMPATIBLE_CRC addProduction( -obj->getTemplate()->getEnergyBonus() ); +#else + if ( !obj->isDisabled() ) + addProduction( -obj->getTemplate()->getEnergyBonus() ); // sanity DEBUG_ASSERTCRASH( m_energyProduction >= 0 && m_energyConsumption >= 0, ("Energy - Negative Energy numbers, Produce=%d Consume=%d\n", m_energyProduction, m_energyConsumption) ); +#endif } From 6c3b0d49e42927be65c9521adcca9f388b466dad Mon Sep 17 00:00:00 2001 From: Caball009 <82909616+Caball009@users.noreply.github.com> Date: Sun, 16 Nov 2025 18:34:30 +0100 Subject: [PATCH 2/3] Moved assertion. --- Generals/Code/GameEngine/Source/Common/RTS/Energy.cpp | 2 +- GeneralsMD/Code/GameEngine/Source/Common/RTS/Energy.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Generals/Code/GameEngine/Source/Common/RTS/Energy.cpp b/Generals/Code/GameEngine/Source/Common/RTS/Energy.cpp index 4ee33417e11..2e74d01e1a5 100644 --- a/Generals/Code/GameEngine/Source/Common/RTS/Energy.cpp +++ b/Generals/Code/GameEngine/Source/Common/RTS/Energy.cpp @@ -194,12 +194,12 @@ void Energy::removePowerBonus( Object *obj ) #else if ( !obj->isDisabled() ) addProduction( -obj->getTemplate()->getEnergyBonus() ); +#endif // sanity DEBUG_ASSERTCRASH( m_energyProduction >= 0 && m_energyConsumption >= 0, ("Energy - Negative Energy numbers, Produce=%d Consume=%d\n", m_energyProduction, m_energyConsumption) ); -#endif } diff --git a/GeneralsMD/Code/GameEngine/Source/Common/RTS/Energy.cpp b/GeneralsMD/Code/GameEngine/Source/Common/RTS/Energy.cpp index 8e88b65a868..34ec282d521 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/RTS/Energy.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/RTS/Energy.cpp @@ -213,12 +213,12 @@ void Energy::removePowerBonus( Object *obj ) #else if ( !obj->isDisabled() ) addProduction( -obj->getTemplate()->getEnergyBonus() ); +#endif // sanity DEBUG_ASSERTCRASH( m_energyProduction >= 0 && m_energyConsumption >= 0, ("Energy - Negative Energy numbers, Produce=%d Consume=%d\n", m_energyProduction, m_energyConsumption) ); -#endif } From 89c76981ae2c335e757a504c7b025966df5515a4 Mon Sep 17 00:00:00 2001 From: Caball009 <82909616+Caball009@users.noreply.github.com> Date: Mon, 17 Nov 2025 21:03:07 +0100 Subject: [PATCH 3/3] Simplified non-retail logic. --- Generals/Code/GameEngine/Source/Common/RTS/Energy.cpp | 10 +++++----- .../Code/GameEngine/Source/Common/RTS/Energy.cpp | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Generals/Code/GameEngine/Source/Common/RTS/Energy.cpp b/Generals/Code/GameEngine/Source/Common/RTS/Energy.cpp index 2e74d01e1a5..f321b4b463d 100644 --- a/Generals/Code/GameEngine/Source/Common/RTS/Energy.cpp +++ b/Generals/Code/GameEngine/Source/Common/RTS/Energy.cpp @@ -189,13 +189,13 @@ void Energy::removePowerBonus( Object *obj ) return; // TheSuperHackers @bugfix Caball009 14/11/2025 Don't remove power bonus for disabled power plants. -#if RETAIL_COMPATIBLE_CRC - addProduction( -obj->getTemplate()->getEnergyBonus() ); -#else - if ( !obj->isDisabled() ) - addProduction( -obj->getTemplate()->getEnergyBonus() ); +#if !RETAIL_COMPATIBLE_CRC + if ( obj->isDisabled() ) + return; #endif + addProduction( -obj->getTemplate()->getEnergyBonus() ); + // sanity DEBUG_ASSERTCRASH( m_energyProduction >= 0 && m_energyConsumption >= 0, ("Energy - Negative Energy numbers, Produce=%d Consume=%d\n", diff --git a/GeneralsMD/Code/GameEngine/Source/Common/RTS/Energy.cpp b/GeneralsMD/Code/GameEngine/Source/Common/RTS/Energy.cpp index 34ec282d521..a0928add8f7 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/RTS/Energy.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/RTS/Energy.cpp @@ -208,13 +208,13 @@ void Energy::removePowerBonus( Object *obj ) return; // TheSuperHackers @bugfix Caball009 14/11/2025 Don't remove power bonus for disabled power plants. -#if RETAIL_COMPATIBLE_CRC - addProduction( -obj->getTemplate()->getEnergyBonus() ); -#else - if ( !obj->isDisabled() ) - addProduction( -obj->getTemplate()->getEnergyBonus() ); +#if !RETAIL_COMPATIBLE_CRC + if ( obj->isDisabled() ) + return; #endif + addProduction( -obj->getTemplate()->getEnergyBonus() ); + // sanity DEBUG_ASSERTCRASH( m_energyProduction >= 0 && m_energyConsumption >= 0, ("Energy - Negative Energy numbers, Produce=%d Consume=%d\n",