Skip to content

Commit 6421c81

Browse files
committed
CHANGELOG: Fix rearming pads to actually repair units
refs ticket:1581 fixes ticket:2313 fixes ticket:2234 Fix rearming pads so they actually rearm at the speed they're intended to. Also make rearming upgrades affect rearming pad repair speed. Replaces REARM_PAD.currentPtsAdded with REARM_PAD.timeLastUpdated, but savefiles should still be compatible. git-svn-id: https://warzone2100.svn.sourceforge.net/svnroot/warzone2100/trunk@8865 4a71c877-e1ca-e34f-864e-861f7616d084 (cherry picked from commit 75569d1) Conflicts: src/game.c src/structure.c
1 parent 6c68fb3 commit 6421c81

File tree

1 file changed

+11
-8
lines changed

1 file changed

+11
-8
lines changed

src/structure.c

+11-8
Original file line numberDiff line numberDiff line change
@@ -3580,6 +3580,7 @@ static void aiUpdateStructure(STRUCTURE *psStructure)
35803580
else if (structureMode == REF_REARM_PAD)
35813581
{
35823582
REARM_PAD *psReArmPad = &psStructure->pFunctionality->rearmPad;
3583+
UDWORD pointsAlreadyAdded;
35833584

35843585
psDroid = (DROID *)psChosenObj;
35853586
ASSERT_OR_RETURN( , psDroid != NULL, "invalid droid pointer");
@@ -3643,7 +3644,8 @@ static void aiUpdateStructure(STRUCTURE *psStructure)
36433644
// Make sure it's a rearmable weapon (and so we don't divide by zero)
36443645
if (psDroid->sMove.iAttackRuns[i] > 0 && asWeaponStats[psDroid->asWeaps[i].nStat].numRounds > 0)
36453646
{
3646-
// Written this way to prevent rounding errors - do not "simplify"
3647+
// Do not "simplify" this formula.
3648+
// It is written this way to prevent rounding errors.
36473649
int ammoToAddThisTime =
36483650
pointsToAdd*getNumAttackRuns(psDroid,i)/pointsRequired -
36493651
pointsAlreadyAdded*getNumAttackRuns(psDroid,i)/pointsRequired;
@@ -3670,15 +3672,16 @@ static void aiUpdateStructure(STRUCTURE *psStructure)
36703672
/* do repairing */
36713673
if (psDroid->body < psDroid->originalBody)
36723674
{
3673-
// Written this way to prevent rounding errors - do not "simplify"
3674-
pointsToAdd = VTOL_REPAIR_FACTOR * (100+asReArmUpgrade[psStructure->player].modifier) * (gameTime % (1<<16))
3675-
/ (GAME_TICKS_PER_SEC * 100);
3676-
pointsToAdd -= VTOL_REPAIR_FACTOR * (100+asReArmUpgrade[psStructure->player].modifier) * (psReArmPad->timeLastUpdated % (1<<16))
3677-
/ (GAME_TICKS_PER_SEC * 100);
3675+
// Do not "simplify" this formula.
3676+
// It is written this way to prevent rounding errors.
3677+
pointsToAdd = VTOL_REPAIR_FACTOR * (100+asReArmUpgrade[psStructure->player].modifier) * (gameTime -
3678+
psReArmPad->timeStarted) / (GAME_TICKS_PER_SEC * 100);
3679+
pointsAlreadyAdded = VTOL_REPAIR_FACTOR * (100+asReArmUpgrade[psStructure->player].modifier) * (psReArmPad->timeLastUpdated -
3680+
psReArmPad->timeStarted) / (GAME_TICKS_PER_SEC * 100);
36783681

3679-
if (pointsToAdd > 0)
3682+
if ((pointsToAdd - pointsAlreadyAdded) > 0)
36803683
{
3681-
psDroid->body += pointsToAdd;
3684+
psDroid->body += (pointsToAdd - pointsAlreadyAdded);
36823685
}
36833686
if (psDroid->body >= psDroid->originalBody)
36843687
{

0 commit comments

Comments
 (0)