diff --git a/Strategic/Assignments.cpp b/Strategic/Assignments.cpp index 19cbecc58..b40b87c3e 100644 --- a/Strategic/Assignments.cpp +++ b/Strategic/Assignments.cpp @@ -608,6 +608,8 @@ static void CollectRepairableItems(SOLDIERTYPE* pRepairSoldier, SOLDIERTYPE* pSo extern BOOLEAN HandleSoldierDeath( SOLDIERTYPE *pSoldier , BOOLEAN *pfMadeCorpse ); +extern BOOLEAN CheckConditionsForBattle( GROUP *pGroup ); + void InitSectorsWithSoldiersList( void ) { // init list of sectors @@ -9506,21 +9508,31 @@ void SquadMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason ) */ pSoldier->bOldAssignment = pSoldier->bAssignment; - if( pSoldier->bOldAssignment == VEHICLE ) + // silversurfer: This guy was in the heli and gets out in a hostile sector. Everyone else get out of the heli and start combat! + if ( pSoldier->bOldAssignment == VEHICLE && pSoldier->iVehicleId == iHelicopterVehicleId && NumEnemiesInSector( pSoldier->sSectorX, pSoldier->sSectorY ) > 0 ) { - TakeSoldierOutOfVehicle( pSoldier ); + UINT8 ubGroupID = MoveAllInHelicopterToFootMovementGroup( iValue ); + CheckConditionsForBattle( GetGroup( ubGroupID ) ); } - - AddCharacterToSquad( pSoldier, ( INT8 )iValue ); - - if( pSoldier->bOldAssignment == VEHICLE ) + // old normal handling + else { - SetSoldierExitVehicleInsertionData( pSoldier, pSoldier->iVehicleId, pSoldier->ubGroupID ); - } - //Clear any desired squad assignments -- seeing the player has physically changed it! - pSoldier->ubNumTraversalsAllowedToMerge = 0; - pSoldier->ubDesiredSquadAssignment = NO_ASSIGNMENT; + if( pSoldier->bOldAssignment == VEHICLE ) + { + TakeSoldierOutOfVehicle( pSoldier ); + } + + AddCharacterToSquad( pSoldier, ( INT8 )iValue ); + + if( pSoldier->bOldAssignment == VEHICLE ) + { + SetSoldierExitVehicleInsertionData( pSoldier, pSoldier->iVehicleId, pSoldier->ubGroupID ); + } + + //Clear any desired squad assignments -- seeing the player has physically changed it! + pSoldier->ubNumTraversalsAllowedToMerge = 0; + pSoldier->ubDesiredSquadAssignment = NO_ASSIGNMENT; /* ARM: Squad menu is now disabled for anyone between sectors @@ -9536,7 +9548,8 @@ void SquadMenuBtnCallback( MOUSE_REGION * pRegion, INT32 iReason ) } */ - MakeSoldiersTacticalAnimationReflectAssignment( pSoldier ); + MakeSoldiersTacticalAnimationReflectAssignment( pSoldier ); + } } // stop displaying, leave diff --git a/Strategic/Map Screen Helicopter.cpp b/Strategic/Map Screen Helicopter.cpp index 6c45f600b..d13e3fae2 100644 --- a/Strategic/Map Screen Helicopter.cpp +++ b/Strategic/Map Screen Helicopter.cpp @@ -985,22 +985,23 @@ void SetUpHelicopterForPlayer( INT16 sX, INT16 sY , UINT8 SkyDrive, UINT8 Vehicl } -UINT8 MoveAllInHelicopterToFootMovementGroup( void ) +UINT8 MoveAllInHelicopterToFootMovementGroup( INT8 bNewSquad ) { // take everyone out of heli and add to movement group INT32 iCounter = 0; UINT8 ubGroupId = 0; SOLDIERTYPE *pSoldier; - INT8 bNewSquad; + //INT8 bNewSquad; BOOLEAN fAnyoneAboard = FALSE; BOOLEAN fSuccess; UINT8 ubInsertionCode = 0; BOOLEAN fInsertionCodeSet = FALSE; UINT16 usInsertionData = 0; - // put these guys on their own squad (we need to return their group ID, and can only return one, so they need a unique one - bNewSquad = GetFirstEmptySquad(); + // silversurfer: This function now accepts a preferred squad ID as parameter. If this squad is empty we will use it instead of the first empty squad. + if ( !SquadIsEmpty( bNewSquad ) ) + bNewSquad = GetFirstEmptySquad(); if ( bNewSquad == -1 ) { return( 0 ); diff --git a/Strategic/Map Screen Helicopter.h b/Strategic/Map Screen Helicopter.h index c51f9b5f1..452549799 100644 --- a/Strategic/Map Screen Helicopter.h +++ b/Strategic/Map Screen Helicopter.h @@ -261,7 +261,8 @@ INT16 GetNumUnSafeSectorsInPath( void ); BOOLEAN SoldierAboardAirborneHeli( SOLDIERTYPE *pSoldier ); -UINT8 MoveAllInHelicopterToFootMovementGroup( void ); +// silversurfer: now accepts a preferred squad ID +UINT8 MoveAllInHelicopterToFootMovementGroup( INT8 bNewSquad = 0 ); #endif \ No newline at end of file