Skip to content

Commit b4b1cd7

Browse files
authored
bugfix(supply): Implement proportional supply bonus scaling to fix too generous money deposits for partial supply drops (#2431)
1 parent 6da321a commit b4b1cd7

3 files changed

Lines changed: 23 additions & 3 deletions

File tree

GeneralsMD/Code/GameEngine/Include/GameLogic/Module/SupplyTruckAIUpdate.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ class SupplyTruckAIInterface
161161
// who look this up by name.
162162
public:
163163
virtual Int getNumberBoxes() const = 0;
164+
virtual Int getMaxBoxes() const = 0;
164165
virtual Bool loseOneBox() = 0;
165166
virtual Bool gainOneBox( Int remainingStock ) = 0;
166167

@@ -197,6 +198,7 @@ class SupplyTruckAIUpdate : public AIUpdateInterface, public SupplyTruckAIInterf
197198
virtual const SupplyTruckAIInterface* getSupplyTruckAIInterface() const override {return this;}
198199

199200
virtual Int getNumberBoxes() const override { return m_numberBoxes; }
201+
virtual Int getMaxBoxes() const override { return getSupplyTruckAIUpdateModuleData()->m_maxBoxesData; }
200202
virtual Bool loseOneBox() override;
201203
virtual Bool gainOneBox( Int remainingStock ) override;
202204

GeneralsMD/Code/GameEngine/Include/GameLogic/Module/WorkerAIUpdate.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,7 @@ class WorkerAIUpdate : public AIUpdateInterface, public DozerAIInterface, public
180180

181181
// Supply truck stuff
182182
virtual Int getNumberBoxes() const override { return m_numberBoxes; }
183+
virtual Int getMaxBoxes() const override { return getWorkerAIUpdateModuleData()->m_maxBoxesData; }
183184
virtual Bool loseOneBox() override;
184185
virtual Bool gainOneBox( Int remainingStock ) override;
185186

GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/DockUpdate/SupplyCenterDockUpdate.cpp

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,23 @@ SupplyCenterDockUpdate::~SupplyCenterDockUpdate()
7979
{
8080
}
8181

82+
// TheSuperHackers @bugfix arcticdolphin 12/03/2026 Scale supply bonus proportionally to delivered boxes.
83+
static UnsignedInt getUpgradedSupplyBoostValue( SupplyTruckAIInterface* supplyTruckAI )
84+
{
85+
#if RETAIL_COMPATIBLE_CRC
86+
return supplyTruckAI->getUpgradedSupplyBoost();
87+
#else
88+
const Int maxBoxes = supplyTruckAI->getMaxBoxes();
89+
if (maxBoxes > 0)
90+
{
91+
const Int upgradedSupplyBoost = supplyTruckAI->getUpgradedSupplyBoost();
92+
const Int deliveredBoxes = supplyTruckAI->getNumberBoxes();
93+
return (upgradedSupplyBoost * deliveredBoxes) / maxBoxes;
94+
}
95+
return 0;
96+
#endif
97+
}
98+
8299
// ------------------------------------------------------------------------------------------------
83100
// ------------------------------------------------------------------------------------------------
84101
Bool SupplyCenterDockUpdate::action( Object* docker, Object *drone )
@@ -95,13 +112,13 @@ Bool SupplyCenterDockUpdate::action( Object* docker, Object *drone )
95112
return FALSE;
96113

97114
UnsignedInt value = 0;
115+
116+
value += getUpgradedSupplyBoostValue( supplyTruckAI );
117+
98118
Player *ownerPlayer = getObject()->getControllingPlayer();
99119
while( supplyTruckAI->loseOneBox() )
100120
value += ownerPlayer->getSupplyBoxValue();
101121

102-
// Add money boost from upgrades that give extra money
103-
value += supplyTruckAI->getUpgradedSupplyBoost();
104-
105122
if( value > 0)
106123
{
107124
Money *ownerPlayerMoney = ownerPlayer->getMoney();

0 commit comments

Comments
 (0)