From 045d171bb617a36522853db666b03008d76729e9 Mon Sep 17 00:00:00 2001 From: Flugente Date: Sat, 21 Feb 2015 14:55:28 +0000 Subject: [PATCH] - Fix: counterattack groups did not spawn from sectors that had no enemy troops, even if there were other forces present, thereby unnecessarily prolonging their movement time - Fix: higher difficulty level indizes made tank apearances in counterattacks more likely git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7744 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Strategic/Strategic AI.cpp | 39 ++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/Strategic/Strategic AI.cpp b/Strategic/Strategic AI.cpp index 4b99229d..1f81ae53 100644 --- a/Strategic/Strategic AI.cpp +++ b/Strategic/Strategic AI.cpp @@ -4491,10 +4491,8 @@ void ExecuteStrategicAIAction( UINT16 usActionCode, INT16 sSectorX, INT16 sSecto ubSourceSectorID = SEC_H13; ubTargetSectorID = SEC_D13; - if ( !(SectorInfo[ ubSourceSectorID ].ubNumTroops > 0) ) - { + if ( !NumNonPlayerTeamMembersInSector( SECTORX( ubSourceSectorID ), SECTORY( ubSourceSectorID ), ENEMY_TEAM ) ) ubSourceSectorID = SECTOR( gModSettings.ubSAISpawnSectorX, gModSettings.ubSAISpawnSectorY ); - } UINT8 val; if( gGameOptions.ubDifficultyLevel == DIF_LEVEL_EASY ) @@ -4514,7 +4512,7 @@ void ExecuteStrategicAIAction( UINT16 usActionCode, INT16 sSectorX, INT16 sSecto ubNumSoldiers = (UINT8)( gubMinEnemyGroupSize + val * 3); //ubNumSoldiers = (UINT8)( gubMinEnemyGroupSize + gGameOptions.ubDifficultyLevel * 3); // anv: replace one of soldiers with tank - for( UINT8 ubCounter = 0; ubCounter < 4; ubCounter++ ) + for( UINT8 ubCounter = 0; ubCounter < 4; ++ubCounter ) { grouptroops[ubCounter] = ubNumSoldiers; grouptanks[ubCounter] = 0; @@ -4599,14 +4597,13 @@ void ExecuteStrategicAIAction( UINT16 usActionCode, INT16 sSectorX, INT16 sSecto ubNumSoldiers = (UINT8)( gubMinEnemyGroupSize + value * 3); //ubNumSoldiers = (UINT8)( gubMinEnemyGroupSize + gGameOptions.ubDifficultyLevel * 3); // anv: replace one of soldiers with tank - for( UINT8 ubCounter = 0; ubCounter < 4; ubCounter++ ) + for( UINT8 ubCounter = 0; ubCounter < 4; ++ubCounter ) { grouptroops[ubCounter] = ubNumSoldiers; grouptanks[ubCounter] = 0; if( ubNumSoldiers && gGameExternalOptions.fArmyUsesTanksInAttacks && HighestPlayerProgressPercentage() >= gGameExternalOptions.usTankMinimumProgress ) { - if( Random(10) < gGameOptions.ubDifficultyLevel ) - // if( Random(10) < value ) + if( Random(10) < value ) { grouptroops[ubCounter]--; grouptanks[ubCounter]++; @@ -4627,8 +4624,8 @@ void ExecuteStrategicAIAction( UINT16 usActionCode, INT16 sSectorX, INT16 sSecto case NPC_ACTION_SEND_SOLDIERS_TO_CHITZENA: ubSourceSectorID = SEC_H3; ubTargetSectorID = SEC_B2; - - if ( !(SectorInfo[ ubSourceSectorID ].ubNumTroops > 0) ) + + if ( !NumNonPlayerTeamMembersInSector( SECTORX( ubSourceSectorID ), SECTORY( ubSourceSectorID ), ENEMY_TEAM ) ) ubSourceSectorID = SECTOR( gModSettings.ubSAISpawnSectorX, gModSettings.ubSAISpawnSectorY ); stagesector0 = ubSourceSectorID; @@ -4646,7 +4643,7 @@ void ExecuteStrategicAIAction( UINT16 usActionCode, INT16 sSectorX, INT16 sSecto ubSourceSectorID = SEC_M3; ubTargetSectorID = SEC_H3; - if ( !(SectorInfo[ ubSourceSectorID ].ubNumTroops > 0) ) + if ( !NumNonPlayerTeamMembersInSector( SECTORX( ubSourceSectorID ), SECTORY( ubSourceSectorID ), ENEMY_TEAM ) ) ubSourceSectorID = SECTOR( gModSettings.ubSAISpawnSectorX, gModSettings.ubSAISpawnSectorY ); stagesector0 = SEC_M2; @@ -4654,6 +4651,12 @@ void ExecuteStrategicAIAction( UINT16 usActionCode, INT16 sSectorX, INT16 sSecto stagesector2 = ubSourceSectorID; stagesector3 = SEC_M6; + if ( !NumNonPlayerTeamMembersInSector( SECTORX( stagesector0 ), SECTORY( stagesector0 ), ENEMY_TEAM ) ) + stagesector0 = SECTOR( gModSettings.ubSAISpawnSectorX, gModSettings.ubSAISpawnSectorY ); + + if ( !NumNonPlayerTeamMembersInSector( SECTORX( stagesector3 ), SECTORY( stagesector3 ), ENEMY_TEAM ) ) + stagesector3 = SECTOR( gModSettings.ubSAISpawnSectorX, gModSettings.ubSAISpawnSectorY ); + assaultsector0 = SEC_H4; assaultsector1 = SEC_I3; assaultsector2 = SEC_I3; @@ -4664,7 +4667,7 @@ void ExecuteStrategicAIAction( UINT16 usActionCode, INT16 sSectorX, INT16 sSecto ubSourceSectorID = SEC_M6; ubTargetSectorID = SEC_H8; - if ( !(SectorInfo[ ubSourceSectorID ].ubNumTroops > 0) ) + if ( !NumNonPlayerTeamMembersInSector( SECTORX( ubSourceSectorID ), SECTORY( ubSourceSectorID ), ENEMY_TEAM ) ) ubSourceSectorID = SECTOR( gModSettings.ubSAISpawnSectorX, gModSettings.ubSAISpawnSectorY ); stagesector0 = ubSourceSectorID; @@ -4672,12 +4675,12 @@ void ExecuteStrategicAIAction( UINT16 usActionCode, INT16 sSectorX, INT16 sSecto stagesector2 = ubSourceSectorID; stagesector3 = SEC_L11; - if ( !(SectorInfo[ stagesector3 ].ubNumTroops > 0) ) + if ( !NumNonPlayerTeamMembersInSector( SECTORX( stagesector3 ), SECTORY( stagesector3 ), ENEMY_TEAM ) ) { - ubSourceSectorID = SEC_N9; + stagesector3 = SEC_N9; - if ( !(SectorInfo[ stagesector3 ].ubNumTroops > 0) ) - ubSourceSectorID = ubSourceSectorID; + if ( !NumNonPlayerTeamMembersInSector( SECTORX( stagesector3 ), SECTORY( stagesector3 ), ENEMY_TEAM ) ) + stagesector3 = ubSourceSectorID; } assaultsector0 = SEC_I8; @@ -4690,12 +4693,12 @@ void ExecuteStrategicAIAction( UINT16 usActionCode, INT16 sSectorX, INT16 sSecto ubSourceSectorID = SEC_G9; ubTargetSectorID = SEC_H13; - if ( !(SectorInfo[ ubSourceSectorID ].ubNumTroops > 0) ) + if ( !NumNonPlayerTeamMembersInSector( SECTORX( ubSourceSectorID ), SECTORY( ubSourceSectorID ), ENEMY_TEAM ) ) { ubSourceSectorID = SEC_J9; ubTargetSectorID = SEC_I13; - if ( !(SectorInfo[ ubSourceSectorID ].ubNumTroops > 0) ) + if ( !NumNonPlayerTeamMembersInSector( SECTORX( ubSourceSectorID ), SECTORY( ubSourceSectorID ), ENEMY_TEAM ) ) ubSourceSectorID = SECTOR( gModSettings.ubSAISpawnSectorX, gModSettings.ubSAISpawnSectorY ); } @@ -4724,7 +4727,7 @@ void ExecuteStrategicAIAction( UINT16 usActionCode, INT16 sSectorX, INT16 sSecto ubSourceSectorID = SEC_N5; ubTargetSectorID = SEC_L11; - if ( !(SectorInfo[ ubSourceSectorID ].ubNumTroops > 0) ) + if ( !NumNonPlayerTeamMembersInSector( SECTORX( ubSourceSectorID ), SECTORY( ubSourceSectorID ), ENEMY_TEAM ) ) ubSourceSectorID = SECTOR( gModSettings.ubSAISpawnSectorX, gModSettings.ubSAISpawnSectorY ); stagesector0 = ubSourceSectorID;