From a0a6396eaa35857dd35e0318668027dda29ca53f Mon Sep 17 00:00:00 2001 From: Sevenfm Date: Wed, 10 Feb 2021 19:17:44 +0000 Subject: [PATCH] Stop cowering when merc starts to move. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8929 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/Soldier Control.cpp | 48 ++++++++++++++++++++++++++++++------ Tactical/Soldier Control.h | 3 +++ 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 9d93c45e..a99250b5 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -1745,7 +1745,6 @@ UINT16 PickSoldierReadyAnimation( SOLDIERTYPE *pSoldier, BOOLEAN fEndReady, BOOL BOOLEAN CheckForFullStruct( INT32 sGridNo, UINT16 *pusIndex ); void SetSoldierLocatorOffsets( SOLDIERTYPE *pSoldier ); void CheckForFullStructures( SOLDIERTYPE *pSoldier ); -BOOLEAN InitNewSoldierState( SOLDIERTYPE *pSoldier, UINT8 ubNewState, UINT16 usStartingAniCode ); UINT16 GetNewSoldierStateFromNewStance( SOLDIERTYPE *pSoldier, UINT8 ubDesiredStance ); void SetSoldierAniSpeed( SOLDIERTYPE *pSoldier ); void AdjustForFastTurnAnimation( SOLDIERTYPE *pSoldier ); @@ -2999,9 +2998,9 @@ void CheckForFreeupFromHit( SOLDIERTYPE *pSoldier, UINT32 uiOldAnimFlags, UINT32 BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStartingAniCode, BOOLEAN fForce ) { DebugMsg( TOPIC_JA2, DBG_LEVEL_3, "EVENT_InitNewSoldierAnim" ); - INT32 usNewGridNo = 0; - INT16 sAPCost = 0; - INT32 sBPCost = 0; + INT32 usNewGridNo = 0; + INT16 sAPCost = 0; + INT32 sBPCost = 0; UINT32 uiOldAnimFlags; UINT32 uiNewAnimFlags; UINT16 usSubState; @@ -3340,7 +3339,7 @@ BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStart } } - // Are we cowering and are tyring to move, getup first... + // Are we cowering and are trying to move, getup first... //if ( gAnimControl[ usNewState ].uiFlags & ANIM_MOVING && this->usAnimState == COWERING && gAnimControl[ usNewState ].ubEndHeight == ANIM_STAND ) if ( this->usAnimState == COWERING ) { @@ -7221,6 +7220,14 @@ BOOLEAN SOLDIERTYPE::EVENT_InternalGetNewSoldierPath( INT32 sDestGridNo, UINT16 } } + // sevenfm: stop cowering for mercs + if (fFromUI && + IS_MERC_BODY_TYPE(this) && + //!(this->flags.uiStatusFlags & SOLDIER_COWERING) && + this->IsCowering()) + { + this->StopCoweringAnimation(); + } this->bGoodContPath = FALSE; @@ -7564,8 +7571,7 @@ void SOLDIERTYPE::ChangeSoldierStance( UINT8 ubDesiredStance ) // Set desired stance this->ubDesiredHeight = ubDesiredStance; - // Now change to appropriate animation - this->EVENT_InitNewSoldierAnim( usNewState, 0, FALSE ); + this->EVENT_InitNewSoldierAnim(usNewState, 0, FALSE); } this->usSoldierFlagMask |= SOLDIER_REDOFLASHLIGHT; @@ -25935,6 +25941,34 @@ BOOLEAN SOLDIERTYPE::IsCowering(void) return FALSE; } +void SOLDIERTYPE::StopCoweringAnimation(void) +{ + if (this->usAnimState == COWERING) + { + if (gAnimControl[this->usAnimState].ubEndHeight == ANIM_STAND) + { + this->ubDesiredHeight = ANIM_STAND; + this->EVENT_InitNewSoldierAnim(END_COWER, 0, FALSE); + } + else if (gAnimControl[this->usAnimState].ubEndHeight == ANIM_CROUCH) + { + this->ubDesiredHeight = ANIM_CROUCH; + this->EVENT_InitNewSoldierAnim(END_COWER_CROUCHED, 0, FALSE); + } + } + else if (this->usAnimState == COWERING_PRONE) + { + if (gAnimControl[this->usAnimState].ubEndHeight == ANIM_PRONE) + { + this->ubDesiredHeight = ANIM_PRONE; + this->EVENT_InitNewSoldierAnim(END_COWER_PRONE, 0, FALSE); + } + } + + // remove AI cowering flag + this->flags.uiStatusFlags &= ~SOLDIER_COWERING; +} + BOOLEAN SOLDIERTYPE::IsGivingAid(void) { if (this->usAnimState == GIVING_AID || this->usAnimState == GIVING_AID_PRN || this->usAnimState == START_AID || this->usAnimState == START_AID_PRN) diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 3f7755ac..31426003 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1869,6 +1869,9 @@ public: BOOLEAN IsCowering(void); BOOLEAN IsGivingAid(void); + // sevenfm: for player mercs + void StopCoweringAnimation(void); + void RetreatCounterStart(UINT16 usValue); void RetreatCounterStop(void); UINT16 RetreatCounterValue(void);