mirror of
https://github.com/1dot13/source.git
synced 2026-09-09 14:46:05 +02:00
If a downed enemy helicopter had soldiers on it, there is a chance that they survived the crash.
git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8016 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
+33
-6
@@ -354,6 +354,10 @@ void ASDDecideHeliOperations()
|
|||||||
if ( (*it).flagmask & ENEMYHELI_ORDERS )
|
if ( (*it).flagmask & ENEMYHELI_ORDERS )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// if we dont have enough soldiers left to staff a helicopter, don't send one out
|
||||||
|
if ( giReinforcementPool < gEnemyHeliMaxTroops )
|
||||||
|
continue;
|
||||||
|
|
||||||
ENEMY_HELI& heli = (*it);
|
ENEMY_HELI& heli = (*it);
|
||||||
|
|
||||||
UINT32 totalrating = 0;
|
UINT32 totalrating = 0;
|
||||||
@@ -569,9 +573,7 @@ UINT8 ENEMY_HELI::SetHeliFlightPath( UINT8 aDest )
|
|||||||
|
|
||||||
void ENEMY_HELI::Destroy( )
|
void ENEMY_HELI::Destroy( )
|
||||||
{
|
{
|
||||||
troopcount = 0;
|
|
||||||
hp = 0;
|
hp = 0;
|
||||||
fuel = 0;
|
|
||||||
|
|
||||||
flagmask |= ENEMYHELI_DESTROYED;
|
flagmask |= ENEMYHELI_DESTROYED;
|
||||||
|
|
||||||
@@ -590,16 +592,41 @@ void ENEMY_HELI::Destroy( )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// if a helicopter was shot down, remember that for the sector - we might spawn a downed pilot for the player to search!
|
// if a helicopter was shot down, there might be survivors or wreckage
|
||||||
if ( flagmask & ENEMYHELI_SHOTDOWN )
|
if ( flagmask & ENEMYHELI_SHOTDOWN )
|
||||||
{
|
{
|
||||||
SECTORINFO *pSectorInfo = &(SectorInfo[sector_current]);
|
// remember that a heli crashed here. When entering the sector the next time, we might spawn a downed pilot or wreckage
|
||||||
|
SectorInfo[sector_current].usSectorInfoFlag |= SECTORINFO_ENEMYHELI_SHOTDOWN;
|
||||||
|
|
||||||
if ( pSectorInfo )
|
// if the heli had soldiers aboard, they might have survived the crash. Add them to the sector in that case
|
||||||
|
// don't do this in sectors that are impassable
|
||||||
|
if ( troopcount && !SectorIsImpassable( sector_current ) )
|
||||||
{
|
{
|
||||||
pSectorInfo->usSectorInfoFlag |= SECTORINFO_ENEMYHELI_SHOTDOWN;
|
// it is possible that we shoot down a helicopter while in a fight. In this case, adding soldiers to a sector would either cause a second battle or a state where a fight should start but doesn't
|
||||||
|
// both is bad, so we simply don't add soldiers in that case. The player will hardly notice, as there is only a chance that soldiers survive anyway
|
||||||
|
if ( !gTacticalStatus.fEnemyInSector && !(gTacticalStatus.uiFlags & INCOMBAT) )
|
||||||
|
{
|
||||||
|
// chance that they survived at all
|
||||||
|
if ( Chance( 75 ) )
|
||||||
|
{
|
||||||
|
// not all might have made it
|
||||||
|
SectorInfo[sector_current].ubNumElites = min( 255, SectorInfo[sector_current].ubNumElites + 1 + Random(troopcount) );
|
||||||
|
|
||||||
|
// if no militia or mercs are here, enemy takes this sector
|
||||||
|
if ( PlayerMercsInSector( SECTORX( sector_current ), SECTORY( sector_current ), 0 ) + NumNonPlayerTeamMembersInSector( SECTORX( sector_current ), SECTORY( sector_current ), MILITIA_TEAM ) <= 0 )
|
||||||
|
{
|
||||||
|
SetThisSectorAsEnemyControlled( SECTORX( sector_current ), SECTORY( sector_current ), 0, TRUE );
|
||||||
|
}
|
||||||
|
|
||||||
|
CheckCombatInSectorDueToUnusualEnemyArrival( ENEMY_TEAM, SECTORX( sector_current ), SECTORY( sector_current ), 0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// reduce these at the end, as we might do sth based on them
|
||||||
|
fuel = 0;
|
||||||
|
troopcount = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnemyHeliInit( )
|
void EnemyHeliInit( )
|
||||||
|
|||||||
@@ -167,8 +167,6 @@ void GenerateMilitiaSquad(INT16 sMapX, INT16 sMapY, INT16 sTMapX, INT16 sTMapY,
|
|||||||
UINT16 usTotalMilitiaAtTarget = NumNonPlayerTeamMembersInSector( sTMapX, sTMapY, MILITIA_TEAM );
|
UINT16 usTotalMilitiaAtTarget = NumNonPlayerTeamMembersInSector( sTMapX, sTMapY, MILITIA_TEAM );
|
||||||
// Desired number of Greens, Regulars and Elites to create.
|
// Desired number of Greens, Regulars and Elites to create.
|
||||||
UINT8 ubTargetGreen, ubTargetRegular, ubTargetElite;
|
UINT8 ubTargetGreen, ubTargetRegular, ubTargetElite;
|
||||||
// Upgrade points for replacing militia with better ones.
|
|
||||||
UINT8 ubUpgradePoints;
|
|
||||||
// Calculate default number of militia to place in Target Sector.
|
// Calculate default number of militia to place in Target Sector.
|
||||||
UINT8 ubMilitiaToTrain = gGameExternalOptions.guiNumMobileMilitiaTrained;
|
UINT8 ubMilitiaToTrain = gGameExternalOptions.guiNumMobileMilitiaTrained;
|
||||||
// Percentage of troops that should be of any one type:
|
// Percentage of troops that should be of any one type:
|
||||||
|
|||||||
@@ -30,7 +30,6 @@ extern void UpdateCustomMapMovementCosts(); // ja25 UB
|
|||||||
extern void MakeBadSectorListFromMapsOnHardDrive( BOOLEAN fDisplayMessages ); // ja25 UB
|
extern void MakeBadSectorListFromMapsOnHardDrive( BOOLEAN fDisplayMessages ); // ja25 UB
|
||||||
extern void AddCustomMap( INT32 iRow, INT32 iCol, BOOLEAN fDisplayMessages, BOOLEAN fMessageIfNotExist ); //ja25 UB
|
extern void AddCustomMap( INT32 iRow, INT32 iCol, BOOLEAN fDisplayMessages, BOOLEAN fMessageIfNotExist ); //ja25 UB
|
||||||
extern UNDERGROUND_SECTORINFO* NewUndergroundNode( UINT8 ubSectorX, UINT8 ubSectorY, UINT8 ubSectorZ );
|
extern UNDERGROUND_SECTORINFO* NewUndergroundNode( UINT8 ubSectorX, UINT8 ubSectorY, UINT8 ubSectorZ );
|
||||||
extern BOOLEAN SectorIsImpassableUB( INT16 sSector );
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
|
|||||||
@@ -304,6 +304,8 @@ void RandomizePatrolGroupLocation( GROUP *pGroup );
|
|||||||
|
|
||||||
BOOLEAN InitStrategicMovementCosts();
|
BOOLEAN InitStrategicMovementCosts();
|
||||||
|
|
||||||
|
BOOLEAN SectorIsImpassable( INT16 sSector );
|
||||||
|
|
||||||
void PlaceGroupInSector( UINT8 ubGroupID, INT16 sPrevX, INT16 sPrevY, INT16 sNextX, INT16 sNextY, INT8 bZ, BOOLEAN fCheckForBattle );
|
void PlaceGroupInSector( UINT8 ubGroupID, INT16 sPrevX, INT16 sPrevY, INT16 sNextX, INT16 sNextY, INT8 bZ, BOOLEAN fCheckForBattle );
|
||||||
|
|
||||||
void SetGroupArrivalTime( GROUP *pGroup, UINT32 uiArrivalTime );
|
void SetGroupArrivalTime( GROUP *pGroup, UINT32 uiArrivalTime );
|
||||||
|
|||||||
@@ -1971,18 +1971,18 @@ UINT16 CountSurfaceSectorsVisited( void )
|
|||||||
|
|
||||||
return( ubSectorsVisited );
|
return( ubSectorsVisited );
|
||||||
}
|
}
|
||||||
|
|
||||||
// HEADROCK: Count number of VISITABLE sectors
|
// HEADROCK: Count number of VISITABLE sectors
|
||||||
UINT16 TotalVisitableSurfaceSectors( void )
|
UINT16 TotalVisitableSurfaceSectors( void )
|
||||||
{
|
{
|
||||||
UINT8 ubMapX, ubMapY;
|
UINT8 ubMapX, ubMapY;
|
||||||
UINT16 ubVisitableSectors = 0;
|
UINT16 ubVisitableSectors = 0;
|
||||||
|
|
||||||
|
|
||||||
for ( ubMapX = 1; ubMapX < MAP_WORLD_X - 1; ubMapX++ )
|
for ( ubMapX = 1; ubMapX < MAP_WORLD_X - 1; ubMapX++ )
|
||||||
{
|
{
|
||||||
for ( ubMapY = 1; ubMapY < MAP_WORLD_Y - 1; ubMapY++ )
|
for ( ubMapY = 1; ubMapY < MAP_WORLD_Y - 1; ubMapY++ )
|
||||||
{
|
{
|
||||||
if( SectorInfo[ SECTOR(ubMapX,ubMapY) ].ubTraversability[ THROUGH_STRATEGIC_MOVE ] != GROUNDBARRIER && SectorInfo[ SECTOR(ubMapX,ubMapY) ].ubTraversability[ THROUGH_STRATEGIC_MOVE ] != EDGEOFWORLD )
|
if ( !SectorIsImpassable( SECTOR( ubMapX, ubMapY ) ) )
|
||||||
++ubVisitableSectors;
|
++ubVisitableSectors;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user