- before deciding anything, stop cowering animation
- before deciding anything, stop giving aid animation
- before deciding to raise weapon, check if weapon can be raised
- simplified scope check
- removed duplicate code in Red AI

Added missing actions to gzActionStr[].
Fixed OKLIFE checks.

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8740 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Sevenfm
2020-01-25 19:02:53 +00:00
parent 17fee15f2b
commit 1455409057
10 changed files with 189 additions and 126 deletions
+57 -13
View File
@@ -2147,19 +2147,46 @@ INT8 ExecuteAction(SOLDIERTYPE *pSoldier)
}
break;
case AI_ACTION_STOP_COWERING:
// make sure action data is set right
if ( pSoldier->flags.uiStatusFlags & SOLDIER_COWERING )
{
pSoldier->aiData.usActionData = ANIM_STAND;
pSoldier->SetSoldierCowerState( FALSE );
}
else
{
// nothing to do!
ActionDone( pSoldier );
return( FALSE );
}
case AI_ACTION_STOP_COWERING:
if (SoldierAI(pSoldier))
{
// sevenfm: stop cowering for soldiers
if (pSoldier->usAnimState == COWERING)
{
if (gAnimControl[pSoldier->usAnimState].ubEndHeight == ANIM_STAND)
{
pSoldier->ubDesiredHeight = ANIM_STAND;
pSoldier->EVENT_InitNewSoldierAnim(END_COWER, 0, FALSE);
}
else if (gAnimControl[pSoldier->usAnimState].ubEndHeight == ANIM_CROUCH)
{
pSoldier->ubDesiredHeight = ANIM_CROUCH;
pSoldier->EVENT_InitNewSoldierAnim(END_COWER_CROUCHED, 0, FALSE);
}
}
else if (pSoldier->usAnimState == COWERING_PRONE)
{
if (gAnimControl[pSoldier->usAnimState].ubEndHeight == ANIM_PRONE)
{
pSoldier->ubDesiredHeight = ANIM_PRONE;
pSoldier->EVENT_InitNewSoldierAnim(END_COWER_PRONE, 0, FALSE);
}
}
// clear cowering flag
pSoldier->flags.uiStatusFlags &= (~SOLDIER_COWERING);
}
else if (pSoldier->flags.uiStatusFlags & SOLDIER_COWERING)
{
// stop cowering for civilians
pSoldier->aiData.usActionData = ANIM_STAND;
pSoldier->SetSoldierCowerState(FALSE);
}
else
{
// nothing to do!
ActionDone(pSoldier);
return(FALSE);
}
break;
case AI_ACTION_GIVE_AID: // help injured/dying friend
@@ -2348,6 +2375,23 @@ INT8 ExecuteAction(SOLDIERTYPE *pSoldier)
}
break;
case AI_ACTION_STOP_MEDIC:
if (pSoldier->stats.bLife >= OKLIFE &&
pSoldier->bBreath > 0 &&
!pSoldier->bCollapsed &&
(pSoldier->usAnimState == GIVING_AID || pSoldier->usAnimState == GIVING_AID_PRN))
{
if (gAnimControl[pSoldier->usAnimState].ubEndHeight == ANIM_PRONE)
pSoldier->ChangeSoldierState(END_AID_PRN, 0, 0);
else
pSoldier->ChangeSoldierState(END_AID, 0, 0);
}
pSoldier->ubServiceCount = 0;
pSoldier->ubServicePartner = NOBODY;
pSoldier->fDoingSurgery = FALSE;
ActionDone(pSoldier);
break;
case AI_ACTION_SELFDETONATE:
{
pSoldier->SelfDetonate( );