mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +02:00
-removed lighted spots from valid locations to move to for flanking, finding cover and running away
-moved the running out of lighted areas code to after the main Red AI - this will prevent enemies from running into and back out of lighted areas; however, it might also mean that they end up running straight through the light sometimes -enabled AI to fire at opponents seen by other AIs on Expert & Insane git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@262 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -2423,7 +2423,7 @@ void CheckIfShotPossible(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestShot, BOOLEAN s
|
|||||||
{
|
{
|
||||||
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("CheckIfShotPossible: CalcBestShot"));
|
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("CheckIfShotPossible: CalcBestShot"));
|
||||||
// then look around for a worthy target (which sets bestThrow.ubPossible)
|
// then look around for a worthy target (which sets bestThrow.ubPossible)
|
||||||
CalcBestShot( pSoldier, pBestShot,!suppressionFire);
|
CalcBestShot( pSoldier, pBestShot,TRUE);
|
||||||
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("CheckIfShotPossible: CalcBestShot done"));
|
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,String("CheckIfShotPossible: CalcBestShot done"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+18
-13
@@ -2036,18 +2036,6 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier, UINT8 ubUnconsciousOK)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
|
||||||
// WHEN IN THE LIGHT, GET OUT OF THERE!
|
|
||||||
////////////////////////////////////////////////////////////////////////////
|
|
||||||
if ( ubCanMove && InLightAtNight( pSoldier->sGridNo, pSoldier->bLevel ) && pSoldier->bOrders != STATIONARY )
|
|
||||||
{
|
|
||||||
pSoldier->usActionData = FindNearbyDarkerSpot( pSoldier );
|
|
||||||
if ( pSoldier->usActionData != NOWHERE )
|
|
||||||
{
|
|
||||||
// move as if leaving water or gas
|
|
||||||
return( AI_ACTION_LEAVE_WATER_GAS );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( fCivilian && !( pSoldier->ubBodyType == COW || pSoldier->ubBodyType == CRIPPLECIV ) )
|
if ( fCivilian && !( pSoldier->ubBodyType == COW || pSoldier->ubBodyType == CRIPPLECIV ) )
|
||||||
{
|
{
|
||||||
@@ -2351,6 +2339,19 @@ if ( !fCivilian && pSoldier->bTeam != MILITIA_TEAM && gGameOptions.fAirStrikes &
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
// WHEN IN THE LIGHT, GET OUT OF THERE!
|
||||||
|
////////////////////////////////////////////////////////////////////////////
|
||||||
|
if ( ubCanMove && InLightAtNight( pSoldier->sGridNo, pSoldier->bLevel ) && pSoldier->bOrders != STATIONARY )
|
||||||
|
{
|
||||||
|
pSoldier->usActionData = FindNearbyDarkerSpot( pSoldier );
|
||||||
|
if ( pSoldier->usActionData != NOWHERE )
|
||||||
|
{
|
||||||
|
// move as if leaving water or gas
|
||||||
|
return( AI_ACTION_LEAVE_WATER_GAS );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"decideactionred: crouch and rest if running out of breath");
|
DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"decideactionred: crouch and rest if running out of breath");
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
// CROUCH & REST IF RUNNING OUT OF BREATH
|
// CROUCH & REST IF RUNNING OUT OF BREATH
|
||||||
@@ -3747,7 +3748,11 @@ bCanAttack = FALSE;
|
|||||||
if (pSoldier->bActionPoints >= ubMinAPCost)
|
if (pSoldier->bActionPoints >= ubMinAPCost)
|
||||||
{
|
{
|
||||||
// look around for a worthy target (which sets BestShot.ubPossible)
|
// look around for a worthy target (which sets BestShot.ubPossible)
|
||||||
CalcBestShot(pSoldier,&BestShot,FALSE);
|
BOOLEAN shootUnseen = FALSE;
|
||||||
|
if (gGameOptions.ubDifficultyLevel > DIF_LEVEL_MEDIUM )
|
||||||
|
shootUnseen = TRUE;
|
||||||
|
|
||||||
|
CalcBestShot(pSoldier,&BestShot,shootUnseen);
|
||||||
|
|
||||||
if (pSoldier->bTeam == gbPlayerNum && pSoldier->bRTPCombat == RTP_COMBAT_CONSERVE)
|
if (pSoldier->bTeam == gbPlayerNum && pSoldier->bRTPCombat == RTP_COMBAT_CONSERVE)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -914,14 +914,16 @@ INT16 FindBestNearbyCover(SOLDIERTYPE *pSoldier, INT32 morale, INT32 *piPercentB
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !fHasGasMask )
|
if ( InGas( pSoldier, sGridNo ) )
|
||||||
{
|
{
|
||||||
if ( InGas( pSoldier, sGridNo ) )
|
continue;
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Madd: skip cover in light
|
||||||
|
if ( InLightAtNight( sGridNo, pSoldier->bLevel ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
|
||||||
// ignore blacklisted spot
|
// ignore blacklisted spot
|
||||||
if ( sGridNo == pSoldier->sBlackList )
|
if ( sGridNo == pSoldier->sBlackList )
|
||||||
{
|
{
|
||||||
@@ -1322,14 +1324,6 @@ INT16 FindSpotMaxDistFromOpponents(SOLDIERTYPE *pSoldier)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !fHasGasMask )
|
|
||||||
{
|
|
||||||
if ( InGas( pSoldier, sGridNo ) )
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( pSoldier->bTeam == CIV_TEAM )
|
if ( pSoldier->bTeam == CIV_TEAM )
|
||||||
{
|
{
|
||||||
iRoamRange = RoamingRange( pSoldier, &sOrigin );
|
iRoamRange = RoamingRange( pSoldier, &sOrigin );
|
||||||
@@ -1345,6 +1339,10 @@ INT16 FindSpotMaxDistFromOpponents(SOLDIERTYPE *pSoldier)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Madd: skip lighted spots
|
||||||
|
if ( InLightAtNight( sGridNo, pSoldier->bLevel ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
// OK, this place shows potential. How useful is it as cover?
|
// OK, this place shows potential. How useful is it as cover?
|
||||||
//NumMessage("Promising seems gridno #",gridno);
|
//NumMessage("Promising seems gridno #",gridno);
|
||||||
|
|
||||||
@@ -2535,20 +2533,16 @@ INT16 FindFlankingSpot(SOLDIERTYPE *pSoldier, INT16 sPos, INT8 bAction )
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !fHasGasMask )
|
|
||||||
{
|
|
||||||
if ( InGas( pSoldier, sGridNo ) )
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// exclude locations with tear/mustard gas (at this point, smoke is cool!)
|
// exclude locations with tear/mustard gas (at this point, smoke is cool!)
|
||||||
if ( InGas( pSoldier, sGridNo ) )
|
if ( InGas( pSoldier, sGridNo ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Madd: skip lighted spots
|
||||||
|
if ( InLightAtNight( sGridNo, pSoldier->bLevel ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
// allow an extra direction for flanking
|
// allow an extra direction for flanking
|
||||||
if ( bAction == AI_ACTION_FLANK_LEFT )
|
if ( bAction == AI_ACTION_FLANK_LEFT )
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user