diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index b53f4b136..0cd6f6a27 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -7724,7 +7724,12 @@ SOLDIERTYPE *InternalReduceAttackBusyCount( ) if ( pSoldier ) { pSoldier->bNumPelletsHitBy = 0; - pSoldier->fGettingHit = FALSE; + if ( !( pSoldier->uiStatusFlags & SOLDIER_TURNINGFROMHIT ) ) + { + // 0verhaul: This is an ugly hack. I don't like it, but until I figure out a better solution + // for turning from a hit, it's the only way to not stop a soldier in mid-turn. + pSoldier->fGettingHit = FALSE; + } if (pSoldier->ubAttackerID != NOBODY ) { diff --git a/Tactical/Soldier Ani.cpp b/Tactical/Soldier Ani.cpp index 1582e26e3..476ef846c 100644 --- a/Tactical/Soldier Ani.cpp +++ b/Tactical/Soldier Ani.cpp @@ -1396,8 +1396,14 @@ BOOLEAN AdjustToNextAnimationFrame( SOLDIERTYPE *pSoldier ) // OK, pick a larger direction to goto.... pSoldier->uiStatusFlags |= SOLDIER_TURNINGFROMHIT; // This becomes an attack busy situation - gTacticalStatus.ubAttackBusyCount++; - DebugAttackBusy( String( "Soldier turning from a hit. Increasing attack busy. Now %d\n", gTacticalStatus.ubAttackBusyCount ) ); + // 0verhaul: There is an attack busy problem with this. The soldier could be in mid-turn + // when another bullet is fired (auto-fire or dual-wield, for instance), and the soldier is + // knocked down in the middle of the turn. In such a case, the attack busy does not get + // cancelled. So if we indeed need to keep the attack busy (which may not be the case), + // we will need to find a more reliable method. For now, I'm going to cancel out the + // ABC adjustment here and we'll see if there needs to be something in its place. + //gTacticalStatus.ubAttackBusyCount++; + DebugAttackBusy( String( "Soldier turning from a hit. Not Increasing attack busy. Now %d\n", gTacticalStatus.ubAttackBusyCount ) ); // Pick evenly between both if ( Random( 50 ) < 25 ) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index fd1c1db17..51589a0ad 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -6095,8 +6095,9 @@ void TurnSoldier( SOLDIERTYPE *pSoldier) // Release attacker // DebugMsg( TOPIC_JA2, DBG_LEVEL_3, String("@@@@@@@ Releasesoldierattacker, turning from hit animation ended") ); // ReleaseSoldiersAttacker( pSoldier ); - DebugAttackBusy( "Finished turning from hit. Reducing attack busy.\n"); - ReduceAttackBusyCount( ); + // 0verhaul: Since I disabled the turn from hit ABC increase, I need to disable the turn from hit decrease too. + DebugAttackBusy( "Finished turning from hit. Not Reducing attack busy.\n"); + //ReduceAttackBusyCount( ); //FREEUP GETTING HIT FLAG // pSoldier->fGettingHit = FALSE;