From e044a0287a96e6e6c15e22dc2cd09aa0002bbac0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andrzej=20Fa=C5=82kowski?= Date: Tue, 22 Aug 2023 23:36:01 +0200 Subject: [PATCH] Fixed incorrect vehicle group id after reloading the game and vehicle movement plot issues. --- Strategic/Map Screen Interface.cpp | 42 ++++++++++++++++++++++++------ Tactical/Squads.cpp | 15 ++++++++++- 2 files changed, 48 insertions(+), 9 deletions(-) diff --git a/Strategic/Map Screen Interface.cpp b/Strategic/Map Screen Interface.cpp index 37eb3087b..678c4fd7a 100644 --- a/Strategic/Map Screen Interface.cpp +++ b/Strategic/Map Screen Interface.cpp @@ -4582,6 +4582,28 @@ void HandleSettingTheSelectedListOfMercs( void ) INT8 pbErrorNumber = -1; pSoldier = MercPtrs[gCharactersList[GetSelectedDestChar()].usSolID]; INT8 bSquadValue = pSoldier->bAssignment; + if (bSquadValue == VEHICLE) + { + for (INT8 bCounter = 0; bCounter < NUMBER_OF_SQUADS; ++bCounter) + { + if (Squad[bCounter][0] != NULL && IsVehicle(Squad[bCounter][0]) && + Squad[bCounter][0]->bVehicleID == pSoldier->iVehicleId) + { + bSquadValue = bCounter; + break; + } + } + } + if (bSquadValue >= NUMBER_OF_SQUADS) + { + if (pbErrorNumber != -1) + { + ReportMapScreenMovementError(pbErrorNumber); + } + SetSelectedDestChar(-1); + giDestHighLine = -1; + return; + } // find number of characters in particular squad. for (INT8 bCounter = 0; bCounter < NUMBER_OF_SOLDIERS_PER_SQUAD; ++bCounter) @@ -4693,17 +4715,21 @@ INT8 FindSquadThatSoldierCanJoin( SOLDIERTYPE *pSoldier ) // run through the list of squads for( bCounter = 0; bCounter < NUMBER_OF_SQUADS; bCounter++ ) { - // is this squad in this sector - if( IsThisSquadInThisSector( pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ, bCounter ) ) + // anv: don't automatically put people in vehicle squads + if (Squad[bCounter][0] == NULL || !IsVehicle(Squad[bCounter][0])) { - // does it have room? - if( IsThisSquadFull( bCounter ) == FALSE ) + // is this squad in this sector + if (IsThisSquadInThisSector(pSoldier->sSectorX, pSoldier->sSectorY, pSoldier->bSectorZ, bCounter)) { - // is it doing the same thing as the soldier is (staying or going) ? - if( IsSquadSelectedForMovement( bCounter ) == IsSoldierSelectedForMovement( pSoldier ) ) + // does it have room? + if (IsThisSquadFull(bCounter) == FALSE) { - // go ourselves a match, then - return( bCounter ); + // is it doing the same thing as the soldier is (staying or going) ? + if (IsSquadSelectedForMovement(bCounter) == IsSoldierSelectedForMovement(pSoldier)) + { + // go ourselves a match, then + return(bCounter); + } } } } diff --git a/Tactical/Squads.cpp b/Tactical/Squads.cpp index 7fb7c6b30..a7dda1b15 100644 --- a/Tactical/Squads.cpp +++ b/Tactical/Squads.cpp @@ -1700,7 +1700,20 @@ void CheckSquadMovementGroups( void ) for (INT8 iSoldier = 0; iSoldier < NUMBER_OF_SOLDIERS_PER_SQUAD; iSoldier++) { if (Squad[iSquad][iSoldier] != NULL) { - Squad[iSquad][iSoldier]->ubGroupID = pGroup->ubGroupID; + if (IsVehicle(Squad[iSquad][iSoldier])) + { + INT32 iCounter = 0; + for (iCounter = 0; iCounter < ubNumberOfVehicles; iCounter++) + { + if (pVehicleList[iCounter].ubProfileID == Squad[iSquad][iSoldier]->ubProfile) + break; + } + Squad[iSquad][iSoldier]->ubGroupID = pVehicleList[iCounter].ubMovementGroup; + } + else + { + Squad[iSquad][iSoldier]->ubGroupID = pGroup->ubGroupID; + } } } }