Bugfix for JaggZilla bug #515

When we fly to a sector with enemies and assign at least one of our passengers in the heli to a squad the game will remove everyone from the heli and start combat. This prevents the exploits that existed before where we could assign our men to anything in hostile sectors.

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6486 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
silversurfer
2013-10-13 18:10:51 +00:00
parent 9602a67946
commit 90dabd20ad
3 changed files with 32 additions and 17 deletions
+25 -12
View File
@@ -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
+5 -4
View File
@@ -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 );
+2 -1
View File
@@ -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