From 02cba3e1e554b9cb7be670858039a83efe54dc6e Mon Sep 17 00:00:00 2001 From: Sevenfm Date: Wed, 10 Feb 2021 20:20:09 +0000 Subject: [PATCH] When changing stance from UI, first stop cowering. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8930 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/Handle UI.cpp | 54 +++++++++++++++++++++++++++++++---- Tactical/Turn Based Input.cpp | 29 +++++++++++++++++-- 2 files changed, 75 insertions(+), 8 deletions(-) diff --git a/Tactical/Handle UI.cpp b/Tactical/Handle UI.cpp index f8ac8bbd..6e3a7e34 100644 --- a/Tactical/Handle UI.cpp +++ b/Tactical/Handle UI.cpp @@ -1819,6 +1819,13 @@ UINT32 UIHandleMovementMenu( UI_EVENT *pUIEvent ) } else { + if (pSoldier->IsCowering()) + { + pSoldier->StopCoweringAnimation(); + UINT16 usNewState = pSoldier->GetNewSoldierStateFromNewStance(ANIM_STAND); + pSoldier->usPendingAnimation = usNewState; + } + pSoldier->flags.fUIMovementFast = 1; pSoldier->usUIMovementMode = RUNNING; gfPlotNewMovement = TRUE; @@ -1834,6 +1841,13 @@ UINT32 UIHandleMovementMenu( UI_EVENT *pUIEvent ) } else { + if (pSoldier->IsCowering()) + { + pSoldier->StopCoweringAnimation(); + UINT16 usNewState = pSoldier->GetNewSoldierStateFromNewStance(ANIM_STAND); + pSoldier->usPendingAnimation = usNewState; + } + pSoldier->flags.fUIMovementFast = 0; pSoldier->usUIMovementMode = WALKING; gfPlotNewMovement = TRUE; @@ -1841,13 +1855,31 @@ UINT32 UIHandleMovementMenu( UI_EVENT *pUIEvent ) break; case MOVEMENT_MENU_SWAT: - - UIHandleSoldierStanceChange( pSoldier->ubID, ANIM_CROUCH ); + if (pSoldier->IsCowering()) + { + pSoldier->StopCoweringAnimation(); + UINT16 usNewState = pSoldier->GetNewSoldierStateFromNewStance(ANIM_CROUCH); + if (gAnimControl[pSoldier->usAnimState].ubEndHeight != ANIM_CROUCH) + pSoldier->usPendingAnimation = usNewState; + } + else + { + UIHandleSoldierStanceChange(pSoldier->ubID, ANIM_CROUCH); + } break; case MOVEMENT_MENU_PRONE: - - UIHandleSoldierStanceChange( pSoldier->ubID, ANIM_PRONE ); + if (pSoldier->IsCowering()) + { + pSoldier->StopCoweringAnimation(); + UINT16 usNewState = pSoldier->GetNewSoldierStateFromNewStance(ANIM_PRONE); + if (gAnimControl[pSoldier->usAnimState].ubEndHeight != ANIM_PRONE) + pSoldier->usPendingAnimation = usNewState; + } + else + { + UIHandleSoldierStanceChange(pSoldier->ubID, ANIM_PRONE); + } break; } @@ -3128,8 +3160,18 @@ UINT32 UIHandlePADJAdjustStance( UI_EVENT *pUIEvent ) } else { - // Set state to result - UIHandleSoldierStanceChange( pSoldier->ubID, ubNewStance ); + if (pSoldier->IsCowering()) + { + pSoldier->StopCoweringAnimation(); + UINT16 usNewState = pSoldier->GetNewSoldierStateFromNewStance(ubNewStance); + if (gAnimControl[pSoldier->usAnimState].ubEndHeight != ubNewStance) + pSoldier->usPendingAnimation = usNewState; + } + else + { + // Set state to result + UIHandleSoldierStanceChange(pSoldier->ubID, ubNewStance); + } } // Once we have APs, we can safely reset nomove flag! diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index 7799a2ab..d12171e5 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -6132,7 +6132,6 @@ void HandleStanceChangeFromUIKeys( UINT8 ubAnimHeight ) if( gusSelectedSoldier != NOBODY ) { pSoldier = MercPtrs[ (UINT8)gusSelectedSoldier ]; - // silversurfer: If we decide to stand up or press "s" again while we are standing we should reset movement to walk mode. // If we want to run we have to press "r" which is handled elsewhere. if ( ubAnimHeight == ANIM_STAND ) @@ -6144,13 +6143,32 @@ void HandleStanceChangeFromUIKeys( UINT8 ubAnimHeight ) } else { + if (pSoldier->IsCowering()) + { + pSoldier->StopCoweringAnimation(); + UINT16 usNewState = pSoldier->GetNewSoldierStateFromNewStance(ubAnimHeight); + pSoldier->usPendingAnimation = usNewState; + } + pSoldier->flags.fUIMovementFast = 0; pSoldier->usUIMovementMode = WALKING; gfPlotNewMovement = TRUE; } } else - UIHandleSoldierStanceChange( pSoldier->ubID, ubAnimHeight ); + { + if (pSoldier->IsCowering()) + { + pSoldier->StopCoweringAnimation(); + UINT16 usNewState = pSoldier->GetNewSoldierStateFromNewStance(ubAnimHeight); + if (gAnimControl[pSoldier->usAnimState].ubEndHeight != ubAnimHeight) + pSoldier->usPendingAnimation = usNewState; + } + else + { + UIHandleSoldierStanceChange(pSoldier->ubID, ubAnimHeight); + } + } } } } @@ -8124,6 +8142,13 @@ void HandleTBSoldierRun( void ) } else { + if (pSoldier->IsCowering()) + { + pSoldier->StopCoweringAnimation(); + UINT16 usNewState = pSoldier->GetNewSoldierStateFromNewStance(ANIM_STAND); + pSoldier->usPendingAnimation = usNewState; + } + pSoldier->flags.fUIMovementFast = 1; pSoldier->usUIMovementMode = RUNNING; gfPlotNewMovement = TRUE;