diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index ca80c0960..384c0b688 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -4889,54 +4889,20 @@ SOLDIERTYPE *FindNextActiveSquad( SOLDIERTYPE *pSoldier ) SoldierID FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLessOKLife, BOOLEAN fOnlyRegularMercs ) { - SOLDIERTYPE *pTeamSoldier; - - - // loop back SoldierID bLastTeamID = gTacticalStatus.Team[ pSoldier->bTeam ].bFirstID; SoldierID cnt = pSoldier->ubID - 1; - // Guard against ubID underflow. We'll start searching for previous merc from the lastID in that case - if ( cnt >= NOBODY ) - { - cnt = gTacticalStatus.Team[pSoldier->bTeam].bLastID; - } for ( ; cnt >= bLastTeamID; --cnt ) { - pTeamSoldier = cnt; - if ( fOnlyRegularMercs ) - { - if ( AM_AN_EPC( pTeamSoldier ) || AM_A_ROBOT( pTeamSoldier ) ) - { - continue; - } - } - - if ( fGoodForLessOKLife ) - { - // Check for bLife > 0 - if ( pTeamSoldier->stats.bLife > 0 && pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->bTeam == gbPlayerNum && ( pTeamSoldier->bAssignment < ON_DUTY || pTeamSoldier->bAssignment == VEHICLE ) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) - { - return( cnt ); - } - } - else + // Guard against ubID underflow. We'll start searching for previous merc from the lastID in that case + if ( cnt >= NOBODY ) { - if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) - { - return( cnt ); - } + cnt = gTacticalStatus.Team[pSoldier->bTeam].bLastID + 1; + continue; } - } - bLastTeamID = pSoldier->ubID; - cnt = gTacticalStatus.Team[ pSoldier->bTeam ].bLastID; - - // look for all mercs on the same team, - for ( ; cnt > bLastTeamID; --cnt ) - { - pTeamSoldier = cnt; + SOLDIERTYPE* pTeamSoldier = cnt; if ( fOnlyRegularMercs ) { if ( AM_AN_EPC( pTeamSoldier ) || AM_A_ROBOT( pTeamSoldier ) ) @@ -4947,6 +4913,7 @@ SoldierID FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLes if ( fGoodForLessOKLife ) { + // Check for bLife > 0 if ( pTeamSoldier->stats.bLife > 0 && pTeamSoldier->bActive && pTeamSoldier->bInSector && pTeamSoldier->bTeam == gbPlayerNum && ( pTeamSoldier->bAssignment < ON_DUTY || pTeamSoldier->bAssignment == VEHICLE ) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) { return( cnt ); @@ -4954,13 +4921,14 @@ SoldierID FindPrevActiveAndAliveMerc( SOLDIERTYPE *pSoldier, BOOLEAN fGoodForLes } else { - if ( OK_CONTROLLABLE_MERC( pTeamSoldier) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) + if ( OK_CONTROLLABLE_MERC( pTeamSoldier ) && OK_INTERRUPT_MERC( pTeamSoldier ) && pSoldier->bAssignment == pTeamSoldier->bAssignment ) { return( cnt ); } } } + // none found, // IF we are here, keep as we always were! return( pSoldier->ubID );