From 9ebd4a5137fb597ee37837c59a54ee4986bf1e7d Mon Sep 17 00:00:00 2001 From: Sevenfm Date: Mon, 4 Oct 2021 06:59:37 +0000 Subject: [PATCH] Bugfix: dissolve all militia groups involved in a battle when it is completed. this fixes bad/immobile militia groups created by safehouses (ARC feature) (by rftr). git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@9170 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Strategic/Auto Resolve.cpp | 16 +--------------- Strategic/MilitiaSquads.cpp | 18 ++++++++++++++++++ Strategic/MilitiaSquads.h | 2 ++ Tactical/Overhead.cpp | 3 +++ 4 files changed, 24 insertions(+), 15 deletions(-) diff --git a/Strategic/Auto Resolve.cpp b/Strategic/Auto Resolve.cpp index 175aceb1..536530e7 100644 --- a/Strategic/Auto Resolve.cpp +++ b/Strategic/Auto Resolve.cpp @@ -2678,21 +2678,7 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Autoresolve2"); // Flugente: after we fought, move any militia in groups into the sector garrison - the player will likely want to rethink orders for the survivors // Flugente: in case militia died we have to lower the group sizes // loop over all militia groups that are in this sector and alter their size. If a group has size 0 delete it. If any militia are left place them into this sector - { - GROUP* pGroup = gpGroupList; - while ( pGroup ) - { - if ( pGroup->usGroupTeam == MILITIA_TEAM && pGroup->ubSectorX == gpAR->ubSectorX && pGroup->ubSectorY == gpAR->ubSectorY ) - { - GROUP* pDeleteGroup = pGroup; - pGroup = pGroup->next; - - DissolveMilitiaGroup( pDeleteGroup->ubGroupID ); - } - else - pGroup = pGroup->next; - } - } + DissolveAllMilitiaGroupsInSector(gpAR->ubSectorX, gpAR->ubSectorY); //Record and process all enemy deaths for( i = 0; i < MAX_AR_TEAM_SIZE; ++i ) diff --git a/Strategic/MilitiaSquads.cpp b/Strategic/MilitiaSquads.cpp index a721c53f..963f5b5a 100644 --- a/Strategic/MilitiaSquads.cpp +++ b/Strategic/MilitiaSquads.cpp @@ -1776,3 +1776,21 @@ void DissolveMilitiaGroup( UINT8 uGroupId ) RemovePGroup( pGroup ); } } + +void DissolveAllMilitiaGroupsInSector( INT16 sMapX, INT16 sMapY ) +{ + GROUP* pGroup = gpGroupList; + while ( pGroup ) + { + if ( pGroup->usGroupTeam == MILITIA_TEAM && pGroup->ubSectorX == sMapX && pGroup->ubSectorY == sMapY ) + { + GROUP* pDeleteGroup = pGroup; + pGroup = pGroup->next; + + DissolveMilitiaGroup( pDeleteGroup->ubGroupID ); + } + else + pGroup = pGroup->next; + } +} + diff --git a/Strategic/MilitiaSquads.h b/Strategic/MilitiaSquads.h index 08d8e0dd..f86a8a62 100644 --- a/Strategic/MilitiaSquads.h +++ b/Strategic/MilitiaSquads.h @@ -46,6 +46,8 @@ BOOLEAN LoadMilitiaMovementInformationFromSavedGameFile( HWFILE hFile, UINT32 ui // delete a militia group and transfer its militia to the sector they are in void DissolveMilitiaGroup( UINT8 uGroupId ); +void DissolveAllMilitiaGroupsInSector( INT16 sMapX, INT16 sMapY ); + BOOLEAN MilitiaGroupEntersCurrentSector( UINT8 usGroupId, INT16 sMapX, INT16 sMapY ); #endif \ No newline at end of file diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 57788cf3..21af1277 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -117,6 +117,7 @@ #include "finances.h" // added by Flugente #include "MilitiaIndividual.h" // added by Flugente #include "Rebel Command.h" +#include "MilitiaSquads.h" #endif #include "connect.h" @@ -7927,6 +7928,8 @@ BOOLEAN CheckForEndOfBattle( BOOLEAN fAnEnemyRetreated ) } HandleMilitiaStatusInCurrentMapBeforeLoadingNewMap(); + // rftr: dissolve any militia groups in the sector + DissolveAllMilitiaGroupsInSector( gWorldSectorX, gWorldSectorY ); //gfStrategicMilitiaChangesMade = TRUE;