Fix: militia can retreat to impassable sectors in autoresolve

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@8836 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
Flugente
2020-07-04 14:46:19 +00:00
parent af04fe4b53
commit 0544227958
4 changed files with 9 additions and 8 deletions
-2
View File
@@ -632,8 +632,6 @@ BOOLEAN ValidTrainingPartnerInSameSectorOnAssignmentFound( SOLDIERTYPE *pSoldier
extern void AddSectorForSoldierToListOfSectorsThatCompletedMilitiaTraining( SOLDIERTYPE *pSoldier );
extern BOOLEAN SectorIsImpassable( INT16 sSector );
extern BOOLEAN CanChangeSleepStatusForCharSlot( INT8 bCharNumber );
// only 2 trainers are allowed per sector, so this function counts the # in a guy's sector
+4 -1
View File
@@ -2285,7 +2285,7 @@ void RetreatAllInvolvedMilitiaGroups()
// if we haven't found a good direction yet, we have to pick the best adjacent sector we can find
if ( !found )
{
INT32 besttime = 1000000;
INT32 besttime = 0xffffffff;
UINT8 usDirection = NORTH_STRATEGIC_MOVE;
for ( UINT8 i = 0; i < 4; ++i )
{
@@ -2316,6 +2316,9 @@ void RetreatAllInvolvedMilitiaGroups()
if ( loopX < 1 || loopX >= MAP_WORLD_X - 1 || loopY < 1 || loopY >= MAP_WORLD_Y - 1 )
continue;
if ( SectorIsImpassable( SECTOR( pGroup->ubSectorX, pGroup->ubSectorY ), usDirection ) )
continue;
// don't retreat into an occupied sector!
if ( NumNonPlayerTeamMembersInSector( loopX, loopY, ENEMY_TEAM ) > 0 )
continue;
+4 -4
View File
@@ -694,11 +694,11 @@ UINT8 GetTraversability( INT16 sStartSector, INT16 sEndSector )
return( SectorInfo[ sStartSector ].ubTraversability[ ubDirection ] );
}
BOOLEAN SectorIsImpassable( INT16 sSector )
BOOLEAN SectorIsImpassable( INT16 sSector, UINT8 aDirection )
{
// returns true if the sector is impassable in all directions
return( SectorInfo[ sSector ].ubTraversability[ THROUGH_STRATEGIC_MOVE ] == GROUNDBARRIER ||
SectorInfo[ sSector ].ubTraversability[ THROUGH_STRATEGIC_MOVE ] == EDGEOFWORLD );
// returns true if the sector is impassable in direction
return( SectorInfo[ sSector ].ubTraversability[aDirection] == GROUNDBARRIER ||
SectorInfo[ sSector ].ubTraversability[aDirection] == EDGEOFWORLD );
}
UINT8 gubEncryptionArray3[ BASE_NUMBER_OF_ROTATION_ARRAYS * 3 ][ NEW_ROTATION_ARRAY_SIZE ] =
+1 -1
View File
@@ -319,7 +319,7 @@ void RandomizePatrolGroupLocation( GROUP *pGroup );
BOOLEAN InitStrategicMovementCosts();
BOOLEAN SectorIsImpassable( INT16 sSector );
BOOLEAN SectorIsImpassable( INT16 sSector, UINT8 aDirection = THROUGH_STRATEGIC_MOVE );
void PlaceGroupInSector( UINT8 ubGroupID, INT16 sPrevX, INT16 sPrevY, INT16 sNextX, INT16 sNextY, INT8 bZ, BOOLEAN fCheckForBattle );