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;