adjusted AI SAM site repairs:

- SAM sites are no longer repaired instantly when AI takes control of a sector
- repairs begin 24 hours after the AI takes control, and repeat every 24 hours until the SAM is back at 100%
- repairs can be interrupted by the player regaining control of the SAM site
- time to repair a fully-destroyed SAM site depends on difficulty: novice takes 5 repair cycles, experienced takes 4, expert 3, and insane 2
- moved RepairSamSite() from ASD.h (where it was unused) into strategicmap.h
- this sets up the existing but previously unused strategic event hook EVENT_SAMSITE_REPAIRED

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@9349 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
rftr
2022-03-26 21:44:43 +00:00
parent bd5b14358d
commit 4689369f83
6 changed files with 51 additions and 19 deletions
+33
View File
@@ -5480,6 +5480,39 @@ BOOLEAN IsThisSectorASAMSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ )
return (FALSE);
}
void RepairSamSite( UINT16 strategicIndex )
{
INT8 repairAmount = 0;
switch (gGameOptions.ubDifficultyLevel)
{
case DIF_LEVEL_EASY: repairAmount = AI_SAMSITE_REPAIR_EASY; break;
case DIF_LEVEL_MEDIUM: repairAmount = AI_SAMSITE_REPAIR_MEDIUM; break;
case DIF_LEVEL_HARD: repairAmount = AI_SAMSITE_REPAIR_HARD; break;
case DIF_LEVEL_INSANE: repairAmount = AI_SAMSITE_REPAIR_INSANE; break;
}
if ( StrategicMap[strategicIndex].fEnemyControlled && (StrategicMap[strategicIndex].usFlags & SAMSITE_REPAIR_ORDERED) && IsThisSectorASAMSector( GET_X_FROM_STRATEGIC_INDEX( strategicIndex ), GET_Y_FROM_STRATEGIC_INDEX( strategicIndex ), 0 ) )
{
if (StrategicMap[strategicIndex].bSAMCondition > 100 - repairAmount)
StrategicMap[strategicIndex].bSAMCondition = 100;
else
StrategicMap[strategicIndex].bSAMCondition += repairAmount;
if (StrategicMap[strategicIndex].sSamHackStatus > 100 - repairAmount)
StrategicMap[strategicIndex].sSamHackStatus = 100;
else
StrategicMap[strategicIndex].sSamHackStatus += repairAmount;
if (StrategicMap[strategicIndex].bSAMCondition < 100 || StrategicMap[strategicIndex].sSamHackStatus < 100)
AddStrategicEvent(EVENT_SAMSITE_REPAIRED, GetWorldTotalMin() + 24 * 60, strategicIndex);
else
StrategicMap[strategicIndex].usFlags &= ~SAMSITE_REPAIR_ORDERED;
if (StrategicMap[strategicIndex].bSAMCondition >= MIN_CONDITION_FOR_SAM_SITE_TO_WORK)
UpdateSAMDoneRepair( GET_X_FROM_STRATEGIC_INDEX( strategicIndex ), GET_Y_FROM_STRATEGIC_INDEX( strategicIndex ), 0 );
}
}
// is this sector part of the town?
BOOLEAN SectorIsPartOfTown( INT8 bTownId, INT16 sSectorX, INT16 sSectorY )