diff --git a/Tactical/PATHAI.cpp b/Tactical/PATHAI.cpp index b798f49e..8eeb3925 100644 --- a/Tactical/PATHAI.cpp +++ b/Tactical/PATHAI.cpp @@ -4558,6 +4558,8 @@ INT32 PlotPath( SOLDIERTYPE *pSold, INT32 sDestGridNo, INT8 bCopyRoute, INT8 bPl iLastGrid = giPathDataSize; } + INT16 usMovementModeBefore = pSold->usAnimState; + for ( iCnt=0; iCnt < iLastGrid; iCnt++ ) { sExtraCostStand = 0; @@ -4586,6 +4588,13 @@ INT32 PlotPath( SOLDIERTYPE *pSold, INT32 sDestGridNo, INT8 bCopyRoute, INT8 bPl usMovementModeToUseForAPs = WALKING; } + //shadooow: moved inside loop because it can happen we (re)start running after we walked in water + if (sSwitchValue != TRAVELCOST_FENCE && usMovementModeToUseForAPs == RUNNING && usMovementModeBefore != RUNNING) + { + sPoints += GetAPsStartRun(pSold); + } + usMovementModeBefore = usMovementModeToUseForAPs; + // get the tile cost for that tile based on WALKING sTileCost = TerrainActionPoints( pSold, sTempGrid, (INT8)guiPathingData[iCnt], pSold->pathing.bLevel ); diff --git a/Tactical/Points.cpp b/Tactical/Points.cpp index a1efce68..04621525 100644 --- a/Tactical/Points.cpp +++ b/Tactical/Points.cpp @@ -542,6 +542,19 @@ INT16 ActionPointCost( SOLDIERTYPE *pSoldier, INT32 sGridNo, INT8 bDir, UINT16 u sPoints = max(1.0f, ( sPoints * (100 - (FLOAT)gSkillTraitValues.ubATAPsMovementReduction) / 100.0f ) ); } + if (usMovementMode == RUNNING && pSoldier->usAnimState != RUNNING) + { + // CHRISL + if ((UsingNewInventorySystem() == true) && FindBackpackOnSoldier(pSoldier) != ITEM_NOT_FOUND) + { + sPoints += GetAPsStartRun(pSoldier) + 2; // changed by SANDRO + } + else + { + sPoints += GetAPsStartRun(pSoldier); // changed by SANDRO + } + } + // Flugente: riot shields lower movement speed if ( pSoldier->IsRiotShieldEquipped( ) ) sPoints *= gItemSettings.fShieldMovementAPCostModifier; @@ -2802,11 +2815,12 @@ INT8 MinAPsToStartMovement( SOLDIERTYPE * pSoldier, UINT16 usMovementMode ) default: break; } - + /* if (usMovementMode == RUNNING && pSoldier->usAnimState != RUNNING ) { bAPs += GetAPsStartRun( pSoldier ); // changed by SANDRO } + */ return( bAPs ); } diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 97e54c4b..ad44b300 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -3919,6 +3919,7 @@ BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStart case RUNNING: // Only if our previous is not running + /* //shadooow: moved to ActionPointCost if ( this->usAnimState != RUNNING ) { // CHRISL @@ -3931,6 +3932,7 @@ BOOLEAN SOLDIERTYPE::EVENT_InitNewSoldierAnim( UINT16 usNewState, UINT16 usStart sAPCost = GetAPsStartRun( this ); // changed by SANDRO DeductPoints( this, sAPCost, sBPCost, MOVEMENT_INTERRUPT ); } + */ // Set pending action count to 0 this->aiData.ubPendingActionAnimCount = 0; this->usPendingAnimation = NO_PENDING_ANIMATION; @@ -4873,7 +4875,7 @@ void SOLDIERTYPE::SetSoldierGridNo( INT32 sNewGridNo, BOOLEAN fForceRemove ) // OK, check that our animation is up to date! // Check our water value - + INT16 usUIMovementModeToSet = this->usUIMovementMode; if ( !(this->flags.uiStatusFlags & (SOLDIER_DRIVER | SOLDIER_PASSENGER)) ) { fInWaterValue = this->MercInWater( ); @@ -4881,7 +4883,7 @@ void SOLDIERTYPE::SetSoldierGridNo( INT32 sNewGridNo, BOOLEAN fForceRemove ) // ATE: If ever in water MAKE SURE WE WALK AFTERWOODS! if ( fInWaterValue ) { - this->usUIMovementMode = WALKING; + usUIMovementModeToSet = WALKING; } if ( fInWaterValue != this->flags.fPrevInWater ) @@ -4901,7 +4903,7 @@ void SOLDIERTYPE::SetSoldierGridNo( INT32 sNewGridNo, BOOLEAN fForceRemove ) { // ATE: Check if we are going from water to land - if so, resume // with regular movement mode... - this->EVENT_InitNewSoldierAnim( this->usUIMovementMode, 0, FALSE ); + this->EVENT_InitNewSoldierAnim( usUIMovementModeToSet, 0, FALSE ); } } @@ -4946,7 +4948,7 @@ void SOLDIERTYPE::SetSoldierGridNo( INT32 sNewGridNo, BOOLEAN fForceRemove ) // Make transition from low to deep this->EVENT_InitNewSoldierAnim( DEEP_TO_LOW_WATER, 0, FALSE ); this->usDontUpdateNewGridNoOnMoveAnimChange = 1; - this->usPendingAnimation = this->usUIMovementMode; + this->usPendingAnimation = usUIMovementModeToSet; } }