diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/SupplyTruckAIUpdate.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/SupplyTruckAIUpdate.h index db3a69d9f7c..10b178c045d 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/SupplyTruckAIUpdate.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/SupplyTruckAIUpdate.h @@ -161,6 +161,7 @@ class SupplyTruckAIInterface // who look this up by name. public: virtual Int getNumberBoxes() const = 0; + virtual Int getMaxBoxes() const = 0; virtual Bool loseOneBox() = 0; virtual Bool gainOneBox( Int remainingStock ) = 0; @@ -197,6 +198,7 @@ class SupplyTruckAIUpdate : public AIUpdateInterface, public SupplyTruckAIInterf virtual const SupplyTruckAIInterface* getSupplyTruckAIInterface() const override {return this;} virtual Int getNumberBoxes() const override { return m_numberBoxes; } + virtual Int getMaxBoxes() const override { return getSupplyTruckAIUpdateModuleData()->m_maxBoxesData; } virtual Bool loseOneBox() override; virtual Bool gainOneBox( Int remainingStock ) override; diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/WorkerAIUpdate.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/WorkerAIUpdate.h index e66a1636eed..5d0faa343f6 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/WorkerAIUpdate.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/WorkerAIUpdate.h @@ -180,6 +180,7 @@ class WorkerAIUpdate : public AIUpdateInterface, public DozerAIInterface, public // Supply truck stuff virtual Int getNumberBoxes() const override { return m_numberBoxes; } + virtual Int getMaxBoxes() const override { return getWorkerAIUpdateModuleData()->m_maxBoxesData; } virtual Bool loseOneBox() override; virtual Bool gainOneBox( Int remainingStock ) override; diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/DockUpdate/SupplyCenterDockUpdate.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/DockUpdate/SupplyCenterDockUpdate.cpp index 4ac9132aa29..3173a1a1c63 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/DockUpdate/SupplyCenterDockUpdate.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/DockUpdate/SupplyCenterDockUpdate.cpp @@ -79,6 +79,23 @@ SupplyCenterDockUpdate::~SupplyCenterDockUpdate() { } +// TheSuperHackers @bugfix arcticdolphin 12/03/2026 Scale supply bonus proportionally to delivered boxes. +static UnsignedInt getUpgradedSupplyBoostValue( SupplyTruckAIInterface* supplyTruckAI ) +{ +#if RETAIL_COMPATIBLE_CRC + return supplyTruckAI->getUpgradedSupplyBoost(); +#else + const Int maxBoxes = supplyTruckAI->getMaxBoxes(); + if (maxBoxes > 0) + { + const Int upgradedSupplyBoost = supplyTruckAI->getUpgradedSupplyBoost(); + const Int deliveredBoxes = supplyTruckAI->getNumberBoxes(); + return (upgradedSupplyBoost * deliveredBoxes) / maxBoxes; + } + return 0; +#endif +} + // ------------------------------------------------------------------------------------------------ // ------------------------------------------------------------------------------------------------ Bool SupplyCenterDockUpdate::action( Object* docker, Object *drone ) @@ -95,13 +112,13 @@ Bool SupplyCenterDockUpdate::action( Object* docker, Object *drone ) return FALSE; UnsignedInt value = 0; + + value += getUpgradedSupplyBoostValue( supplyTruckAI ); + Player *ownerPlayer = getObject()->getControllingPlayer(); while( supplyTruckAI->loseOneBox() ) value += ownerPlayer->getSupplyBoxValue(); - // Add money boost from upgrades that give extra money - value += supplyTruckAI->getUpgradedSupplyBoost(); - if( value > 0) { Money *ownerPlayerMoney = ownerPlayer->getMoney();