From 1256639fe564b20562f060919ed0237b38907a8e Mon Sep 17 00:00:00 2001 From: Sevenfm Date: Sat, 30 Jan 2021 23:22:59 +0000 Subject: [PATCH] AI_ACTION_STOP_MEDIC: also check START_AID, START_AID_PRN animations to prevent AI endless clock when first aid has just started and AI decides to move somewhere. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8923 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/Soldier Control.cpp | 8 ++++++++ Tactical/Soldier Control.h | 1 + TacticalAI/AIMain.cpp | 2 +- TacticalAI/DecideAction.cpp | 12 ++++++------ 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 9d05420f6..c32f3dbb2 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -25925,6 +25925,14 @@ BOOLEAN SOLDIERTYPE::IsCowering(void) return FALSE; } +BOOLEAN SOLDIERTYPE::IsGivingAid(void) +{ + if (this->usAnimState == GIVING_AID || this->usAnimState == GIVING_AID_PRN || this->usAnimState == START_AID || this->usAnimState == START_AID_PRN) + return TRUE; + + return FALSE; +} + void SOLDIERTYPE::RetreatCounterStart(UINT16 usValue) { usSkillCounter[SOLDIER_COUNTER_RETREAT] = max(usValue, usSkillCounter[SOLDIER_COUNTER_RETREAT]); diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 749554ea9..3f7755ac1 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1867,6 +1867,7 @@ public: UINT8 ShockLevelPercent(void); BOOLEAN TakenLargeHit(void); BOOLEAN IsCowering(void); + BOOLEAN IsGivingAid(void); void RetreatCounterStart(UINT16 usValue); void RetreatCounterStop(void); diff --git a/TacticalAI/AIMain.cpp b/TacticalAI/AIMain.cpp index 49ac80f67..f925cacc5 100644 --- a/TacticalAI/AIMain.cpp +++ b/TacticalAI/AIMain.cpp @@ -2632,7 +2632,7 @@ INT8 ExecuteAction(SOLDIERTYPE *pSoldier) if (pSoldier->stats.bLife >= OKLIFE && pSoldier->bBreath > 0 && !pSoldier->bCollapsed && - (pSoldier->usAnimState == GIVING_AID || pSoldier->usAnimState == GIVING_AID_PRN)) + pSoldier->IsGivingAid()) { if (gAnimControl[pSoldier->usAnimState].ubEndHeight == ANIM_PRONE) pSoldier->ChangeSoldierState(END_AID_PRN, 0, 0); diff --git a/TacticalAI/DecideAction.cpp b/TacticalAI/DecideAction.cpp index 1e10adc62..ab0465079 100644 --- a/TacticalAI/DecideAction.cpp +++ b/TacticalAI/DecideAction.cpp @@ -2522,7 +2522,7 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier) pSoldier->stats.bLife >= OKLIFE && !pSoldier->bCollapsed && !pSoldier->bBreathCollapsed && - (pSoldier->usAnimState == COWERING || pSoldier->usAnimState == COWERING_PRONE)) + pSoldier->IsCowering()) { return AI_ACTION_STOP_COWERING; } @@ -2533,7 +2533,7 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier) pSoldier->stats.bLife >= OKLIFE && !pSoldier->bCollapsed && !pSoldier->bBreathCollapsed && - (pSoldier->usAnimState == GIVING_AID || pSoldier->usAnimState == GIVING_AID_PRN)) + pSoldier->IsGivingAid()) { return AI_ACTION_STOP_MEDIC; } @@ -4934,7 +4934,7 @@ INT16 ubMinAPCost; pSoldier->stats.bLife >= OKLIFE && !pSoldier->bCollapsed && !pSoldier->bBreathCollapsed && - (pSoldier->usAnimState == COWERING || pSoldier->usAnimState == COWERING_PRONE)) + pSoldier->IsCowering()) { return AI_ACTION_STOP_COWERING; } @@ -4945,7 +4945,7 @@ INT16 ubMinAPCost; pSoldier->stats.bLife >= OKLIFE && !pSoldier->bCollapsed && !pSoldier->bBreathCollapsed && - (pSoldier->usAnimState == GIVING_AID || pSoldier->usAnimState == GIVING_AID_PRN)) + pSoldier->IsGivingAid()) { return AI_ACTION_STOP_MEDIC; } @@ -10143,11 +10143,11 @@ void LogDecideInfo(SOLDIERTYPE *pSoldier) DebugAI(AI_MSG_INFO, pSoldier, String("Health %d/%d Breath %d/%d Shock %d Tolerance %d AI Morale %d Morale %d", pSoldier->stats.bLife, pSoldier->stats.bLifeMax, pSoldier->bBreath, pSoldier->bBreathMax, pSoldier->aiData.bShock, CalcSuppressionTolerance(pSoldier), pSoldier->aiData.bAIMorale, pSoldier->aiData.bMorale)); DebugAI(AI_MSG_INFO, pSoldier, String("Spot %d level %d opponents %d", pSoldier->sGridNo, pSoldier->pathing.bLevel, pSoldier->aiData.bOppCnt)); DebugAI(AI_MSG_INFO, pSoldier, String("ubServiceCount %d ubServicePartner %d fDoingSurgery %d", pSoldier->ubServiceCount, pSoldier->ubServicePartner, pSoldier->fDoingSurgery)); - if (pSoldier->usAnimState == COWERING || pSoldier->usAnimState == COWERING_PRONE) + if (pSoldier->IsCowering()) { DebugAI(AI_MSG_INFO, pSoldier, String("Cowering")); } - if (pSoldier->usAnimState == GIVING_AID || pSoldier->usAnimState == GIVING_AID_PRN) + if (pSoldier->IsGivingAid()) { DebugAI(AI_MSG_INFO, pSoldier, String("Giving aid")); }