Fix: do not call ambush code if we enter a sector via airdrop

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7841 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Flugente
2015-05-02 17:18:31 +00:00
parent 73c22c45ee
commit bf077971bc
+87 -77
View File
@@ -277,7 +277,8 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI )
INT8 bBestExpLevel = 0; INT8 bBestExpLevel = 0;
BOOLEAN fRetreatAnOption = TRUE; BOOLEAN fRetreatAnOption = TRUE;
SECTORINFO *pSector; SECTORINFO *pSector;
BOOLEAN fScoutPresent = FALSE; // Added by SANDRO BOOLEAN fScoutPresent = FALSE; // Added by SANDRO
BOOLEAN fAirDrop = FALSE; // Added by Flugente
// ARM: Feb01/98 - Cancel out of mapscreen movement plotting if PBI subscreen is coming up // ARM: Feb01/98 - Cancel out of mapscreen movement plotting if PBI subscreen is coming up
if ( (bSelectedDestChar != -1) || fPlotForHelicopter || fPlotForMilitia ) if ( (bSelectedDestChar != -1) || fPlotForHelicopter || fPlotForMilitia )
@@ -559,6 +560,11 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI )
{ {
fScoutPresent = TRUE; fScoutPresent = TRUE;
} }
if ( MercPtrs[i]->usSoldierFlagMask & SOLDIER_AIRDROP )
{
fAirDrop = TRUE;
}
} }
else else
{ {
@@ -592,10 +598,28 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI )
{ {
gubEnemyEncounterCode = ENEMY_ENCOUNTER_CODE; gubEnemyEncounterCode = ENEMY_ENCOUNTER_CODE;
//Don't consider ambushes until the player has reached 25% (normal) progress // Flugente: no ambushes on an airdrop
if( gfHighPotentialForAmbush ) if ( !fAirDrop )
{ {
if( Chance( 90 ) ) //Don't consider ambushes until the player has reached 25% (normal) progress
if( gfHighPotentialForAmbush )
{
if( Chance( 90 ) )
{
// SANDRO - Scout prevents ambushes no matter what
if ( !fScoutPresent )
{
gubEnemyEncounterCode = ENEMY_AMBUSH_CODE;
}
else
{
fAmbushPrevented = TRUE;
if ( gSkillTraitValues.fSCThrowMessageIfAmbushPrevented )
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, New113Message[MSG113_ENEMY_AMBUSH_PREVENTED] );
}
}
}
else if( gfAutoAmbush && ubNumMobileEnemies > ubNumMercs )
{ {
// SANDRO - Scout prevents ambushes no matter what // SANDRO - Scout prevents ambushes no matter what
if ( !fScoutPresent ) if ( !fScoutPresent )
@@ -609,89 +633,75 @@ void InitPreBattleInterface( GROUP *pBattleGroup, BOOLEAN fPersistantPBI )
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, New113Message[MSG113_ENEMY_AMBUSH_PREVENTED] ); ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, New113Message[MSG113_ENEMY_AMBUSH_PREVENTED] );
} }
} }
} // Madd:
else if( gfAutoAmbush && ubNumMobileEnemies > ubNumMercs ) // WANNE: Added an ja2_options.ini Property "ENABLE_CHANCE_OF_ENEMY_AMBUSHES_ON_INSANE_DIFFICULT"
{ //////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SANDRO - Scout prevents ambushes no matter what // SANDRO - changed this a lot, now on any difficulty, the enemy can ambush your squad
if ( !fScoutPresent ) // based on difficulty level, number of mercs/enemies and other aspects
{ else if( gGameExternalOptions.fEnableChanceOfEnemyAmbushes )
gubEnemyEncounterCode = ENEMY_AMBUSH_CODE; {
} INT32 iChance;
else // Basic chance - progress level/2 minus highest merc exp level*2, and 10% on top
{ iChance = (UINT8)( ((CurrentPlayerProgressPercentage() / 2 ) - bBestExpLevel*2 ) + 15 );
fAmbushPrevented = TRUE;
if ( gSkillTraitValues.fSCThrowMessageIfAmbushPrevented )
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, New113Message[MSG113_ENEMY_AMBUSH_PREVENTED] );
}
}
// Madd:
// WANNE: Added an ja2_options.ini Property "ENABLE_CHANCE_OF_ENEMY_AMBUSHES_ON_INSANE_DIFFICULT"
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
// SANDRO - changed this a lot, now on any difficulty, the enemy can ambush your squad
// based on difficulty level, number of mercs/enemies and other aspects
else if( gGameExternalOptions.fEnableChanceOfEnemyAmbushes )
{
INT32 iChance;
// Basic chance - progress level/2 minus highest merc exp level*2, and 10% on top
iChance = (UINT8)( ((CurrentPlayerProgressPercentage() / 2 ) - bBestExpLevel*2 ) + 15 );
if( pSector->uiFlags & SF_ENEMY_AMBUSH_LOCATION ) if( pSector->uiFlags & SF_ENEMY_AMBUSH_LOCATION )
iChance += 20; iChance += 20;
if( gfCantRetreatInPBI ) if( gfCantRetreatInPBI )
iChance += 20; iChance += 20;
// adjust the chance for size of our squad // adjust the chance for size of our squad
if( ubNumMercs == 1 ) // one person is almost invisible to an army group, so reduce the chance a lot if( ubNumMercs == 1 ) // one person is almost invisible to an army group, so reduce the chance a lot
iChance -= 40; iChance -= 40;
else if ( ubNumMercs == 2 ) // 2 persons are still hardly detectable else if ( ubNumMercs == 2 ) // 2 persons are still hardly detectable
iChance -= 25; iChance -= 25;
else if ( ubNumMercs <= 10 ) // 3 to 10 mercs else if ( ubNumMercs <= 10 ) // 3 to 10 mercs
iChance -= (5 * (5 - ubNumMercs)); // -5% adjustment per merc (-10% to +25%) iChance -= (5 * (5 - ubNumMercs)); // -5% adjustment per merc (-10% to +25%)
else // more than 10 mercs else // more than 10 mercs
iChance += 30; // maximum of +30% per squad size iChance += 30; // maximum of +30% per squad size
// the more enemies are there the lesser the chance to be ambushed // the more enemies are there the lesser the chance to be ambushed
// (large groups of enemies can be seen from afar, so the chance is lesser) // (large groups of enemies can be seen from afar, so the chance is lesser)
if ((ubNumMobileEnemies + ubNumStationaryEnemies) <= 2 ) if ((ubNumMobileEnemies + ubNumStationaryEnemies) <= 2 )
iChance += 20; // can make hunting retreated enemies easier iChance += 20; // can make hunting retreated enemies easier
else if ((ubNumMobileEnemies + ubNumStationaryEnemies) <= 6 ) // smaller groups actually increase the chance else if ((ubNumMobileEnemies + ubNumStationaryEnemies) <= 6 ) // smaller groups actually increase the chance
iChance += (3 * (6 - (ubNumMobileEnemies + ubNumStationaryEnemies))); // +3% adjustment per enemy iChance += (3 * (6 - (ubNumMobileEnemies + ubNumStationaryEnemies))); // +3% adjustment per enemy
else else
iChance -= (2 * ((ubNumMobileEnemies + ubNumStationaryEnemies) - 6)); // -2% adjustment per enemy beyond 6 iChance -= (2 * ((ubNumMobileEnemies + ubNumStationaryEnemies) - 6)); // -2% adjustment per enemy beyond 6
// adjust the chance for difficulty setting // adjust the chance for difficulty setting
iChance = iChance + (zDeffSetting[gGameOptions.ubDifficultyLevel].iChanceOfEnemyAmbushes); iChance = iChance + (zDeffSetting[gGameOptions.ubDifficultyLevel].iChanceOfEnemyAmbushes);
// adjust the chance for what we know about the sector // adjust the chance for what we know about the sector
if( WhatPlayerKnowsAboutEnemiesInSector( gubPBSectorX, gubPBSectorY ) == KNOWS_NOTHING ) if( WhatPlayerKnowsAboutEnemiesInSector( gubPBSectorX, gubPBSectorY ) == KNOWS_NOTHING )
iChance += 20; iChance += 20;
// HEADROCK HAM 5: Added new possible value... // HEADROCK HAM 5: Added new possible value...
else if( WhatPlayerKnowsAboutEnemiesInSector( gubPBSectorX, gubPBSectorY ) == KNOWS_THEYRE_THERE || else if( WhatPlayerKnowsAboutEnemiesInSector( gubPBSectorX, gubPBSectorY ) == KNOWS_THEYRE_THERE ||
WhatPlayerKnowsAboutEnemiesInSector( gubPBSectorX, gubPBSectorY ) == KNOWS_THEYRE_THERE_AND_WHERE_GOING ) WhatPlayerKnowsAboutEnemiesInSector( gubPBSectorX, gubPBSectorY ) == KNOWS_THEYRE_THERE_AND_WHERE_GOING )
iChance += 5; iChance += 5;
//if( GetSectorFlagStatus( gubPBSectorX, gubPBSectorY, 0, SF_ALREADY_VISITED ) == TRUE ) //if( GetSectorFlagStatus( gubPBSectorX, gubPBSectorY, 0, SF_ALREADY_VISITED ) == TRUE )
// iChance -= 10; // if we already visited this sector // iChance -= 10; // if we already visited this sector
// there is always a little chance // there is always a little chance
if( iChance <= 0 ) if( iChance <= 0 )
iChance = 1; iChance = 1;
// externalized modifier // externalized modifier
if( gGameExternalOptions.bChanceModifierEnemyAmbushes != 0 ) if( gGameExternalOptions.bChanceModifierEnemyAmbushes != 0 )
iChance = ((iChance * (100 + gGameExternalOptions.bChanceModifierEnemyAmbushes)) / 100); iChance = ((iChance * (100 + gGameExternalOptions.bChanceModifierEnemyAmbushes)) / 100);
if( (INT32)PreRandom( 100 ) < iChance ) if( (INT32)PreRandom( 100 ) < iChance )
{
if ( !fScoutPresent )
{ {
gubEnemyEncounterCode = ENEMY_AMBUSH_CODE; if ( !fScoutPresent )
} {
else gubEnemyEncounterCode = ENEMY_AMBUSH_CODE;
{ }
fAmbushPrevented = TRUE; else
if ( gSkillTraitValues.fSCThrowMessageIfAmbushPrevented ) {
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, New113Message[MSG113_ENEMY_AMBUSH_PREVENTED] ); fAmbushPrevented = TRUE;
if ( gSkillTraitValues.fSCThrowMessageIfAmbushPrevented )
ScreenMsg( FONT_MCOLOR_LTYELLOW, MSG_INTERFACE, New113Message[MSG113_ENEMY_AMBUSH_PREVENTED] );
}
} }
} }
} }