mirror of
https://github.com/1dot13/source.git
synced 2026-08-12 14:10:23 +02:00
AI:
- new option AI_SAFE_SUPPRESSION adds additional checks for AI to avoid hitting friends when using suppression fire. - chance to use suppression fire depends on actual chance to hit and SUPPRESSION_EFFECTIVENESS option - reduced short burst to 2 bullets. - improved code to use short burst git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8901 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
@@ -6138,3 +6138,41 @@ UINT8 CountPublicKnownEnemies(SOLDIERTYPE *pSoldier)
|
||||
|
||||
return ubNum;
|
||||
}
|
||||
|
||||
// sevenfm: check if suppression is possible (count friends in the fire direction)
|
||||
BOOLEAN CheckSuppressionDirection(SOLDIERTYPE *pSoldier, INT32 sTargetGridNo, INT8 bTargetLevel)
|
||||
{
|
||||
SOLDIERTYPE * pFriend;
|
||||
UINT8 ubShootingDir;
|
||||
UINT32 uiLoop;
|
||||
|
||||
CHECKF(pSoldier);
|
||||
CHECKF(!TileIsOutOfBounds(sTargetGridNo));
|
||||
|
||||
ubShootingDir = AIDirection(pSoldier->sGridNo, sTargetGridNo);
|
||||
|
||||
for (uiLoop = 0; uiLoop < guiNumMercSlots; ++uiLoop)
|
||||
{
|
||||
pFriend = MercSlots[uiLoop];
|
||||
|
||||
if (pFriend &&
|
||||
pFriend != pSoldier &&
|
||||
pFriend->bActive &&
|
||||
pFriend->bVisible == TRUE &&
|
||||
pFriend->stats.bLife >= OKLIFE &&
|
||||
(pFriend->bSide == pSoldier->bSide || CONSIDERED_NEUTRAL(pSoldier, pFriend)) &&
|
||||
(pFriend->pathing.bLevel == pSoldier->pathing.bLevel || pFriend->pathing.bLevel == bTargetLevel) &&
|
||||
ubShootingDir == AIDirection(pSoldier->sGridNo, pFriend->sGridNo) &&
|
||||
PythSpacesAway(pSoldier->sGridNo, pFriend->sGridNo) > 1 &&
|
||||
PythSpacesAway(pSoldier->sGridNo, pFriend->sGridNo) < 2 * TACTICAL_RANGE &&
|
||||
(gAnimControl[pFriend->usAnimState].ubHeight == ANIM_STAND || gGameExternalOptions.fAllowTargetHeadAndLegIfProne) &&
|
||||
//!pFriend->IsCowering() &&
|
||||
AISoldierToSoldierChanceToGetThrough(pSoldier, pFriend) > 25)
|
||||
//LocationToLocationLineOfSightTest(pSoldier->sGridNo, pSoldier->pathing.bLevel, pFriend->sGridNo, pFriend->pathing.bLevel, TRUE, NO_DISTANCE_LIMIT))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user