- improved civilian cower/run away code
- CancelAIAction: reset bNextAction and next action data
- clear next action data before making decisions
- militia always try to spare grenades unless under attack or using flares

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8905 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Sevenfm
2020-10-20 21:20:26 +00:00
parent b45af3f575
commit 2c2d8c9276
4 changed files with 26 additions and 0 deletions
+12
View File
@@ -1462,6 +1462,12 @@ void CancelAIAction(SOLDIERTYPE *pSoldier, UINT8 ubForce)
pSoldier->aiData.bBypassToGreen = FALSE;
ActionDone(pSoldier);
// sevenfm: reset next action
pSoldier->aiData.bNextAction = AI_ACTION_NONE;
pSoldier->aiData.usNextActionData = 0;
pSoldier->aiData.bNextTargetLevel = 0;
pSoldier->iNextActionSpecialData = 0;
}
@@ -1653,6 +1659,12 @@ void TurnBasedHandleNPCAI(SOLDIERTYPE *pSoldier)
}
else
{
// sevenfm: clear next action data before making decisions
pSoldier->aiData.bNextAction = AI_ACTION_NONE;
pSoldier->aiData.usNextActionData = 0;
pSoldier->aiData.bNextTargetLevel = 0;
pSoldier->iNextActionSpecialData = 0;
if (!(gTacticalStatus.uiFlags & ENGAGED_IN_CONV))
{
if(!pSoldier->ai_masterplan_) // if the Soldier has no plan, create one
+6
View File
@@ -1336,6 +1336,12 @@ void CalcBestThrow(SOLDIERTYPE *pSoldier, ATTACKTYPE *pBestThrow)
fSpare = FALSE;
}
// militia always try to spare grenades unless under attack or using flares
if (pSoldier->bTeam == MILITIA_TEAM && !pSoldier->aiData.bUnderFire && !Item[usGrenade].flare)
{
fSpare = TRUE;
}
// need 3 opponents for 0 difficulty, 1 opponent for max difficulty
if (fSpare && ubOpponentCnt < 3 - ubDiff / 2)
{
+2
View File
@@ -2517,6 +2517,7 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier)
// sevenfm: before deciding anything, stop cowering
if (SoldierAI(pSoldier) &&
!fCivilian &&
ubCanMove &&
pSoldier->stats.bLife >= OKLIFE &&
!pSoldier->bCollapsed &&
@@ -4909,6 +4910,7 @@ INT16 ubMinAPCost;
// sevenfm: before deciding anything, stop cowering
if (SoldierAI(pSoldier) &&
!fCivilian &&
ubCanMove &&
pSoldier->stats.bLife >= OKLIFE &&
!pSoldier->bCollapsed &&
+6
View File
@@ -185,6 +185,12 @@ void RTHandleAI( SOLDIERTYPE * pSoldier )
}
else
{
// sevenfm: clear next action data before making decision
pSoldier->aiData.bNextAction = AI_ACTION_NONE;
pSoldier->aiData.usNextActionData = 0;
pSoldier->aiData.bNextTargetLevel = 0;
pSoldier->iNextActionSpecialData = 0;
if (!(gTacticalStatus.uiFlags & ENGAGED_IN_CONV))
{
if(!pSoldier->ai_masterplan_) // if the Soldier has no plan, create one