diff --git a/Strategic/Auto Resolve.cpp b/Strategic/Auto Resolve.cpp index 623ba2c8..dcf58998 100644 --- a/Strategic/Auto Resolve.cpp +++ b/Strategic/Auto Resolve.cpp @@ -2481,6 +2481,12 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Autoresolve2"); DeleteVideoObjectFromIndex( gpAR->iIndent ); DeleteVideoSurfaceFromIndex( gpAR->iInterfaceBuffer ); + // Load necessary mapinfo to place corpses + CHAR8 bFilename[50]; + INT32 worldRows, worldCols; + GetMapFileName(gpAR->ubSectorX, gpAR->ubSectorY, 0, bFilename, TRUE, TRUE); + LoadWorldInfoForAutoResolve(bFilename, worldRows, worldCols); + if( fDeleteForGood ) { //Delete the soldier instances -- done when we are completely finished. @@ -2519,7 +2525,7 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Autoresolve2"); RemoveCharacterFromSquads( gpMercs[ i ].pSoldier ); ChangeSoldiersAssignment( gpMercs[ i ].pSoldier, ASSIGNMENT_DEAD ); - AddDeadSoldierToUnLoadedSector( gpAR->ubSectorX, gpAR->ubSectorY, 0, gpMercs[ i ].pSoldier, RandomGridNo(), ADD_DEAD_SOLDIER_TO_SWEETSPOT ); + AddDeadSoldierToUnLoadedSector( gpAR->ubSectorX, gpAR->ubSectorY, 0, gpMercs[ i ].pSoldier, RandomGridNoUnloadedSector(worldRows, worldCols), ADD_DEAD_SOLDIER_TO_SWEETSPOT ); } else if( gpAR->ubBattleStatus == BATTLE_SURRENDERED || gpAR->ubBattleStatus == BATTLE_CAPTURED ) { @@ -2624,7 +2630,8 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Autoresolve2"); } // Flugente: drop sector equipment - gpCivs[ i ].pSoldier->DropSectorEquipment(); + const auto gridno = RandomGridNoUnloadedSector(worldRows, worldCols); + gpCivs[ i ].pSoldier->DropSectorEquipment(gridno); if( fDeleteForGood && gpCivs[ i ].pSoldier->stats.bLife < OKLIFE/2 ) { @@ -2649,7 +2656,7 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Autoresolve2"); UpdateMilitia( militia ); } - AddDeadSoldierToUnLoadedSector( gpAR->ubSectorX, gpAR->ubSectorY, 0, gpCivs[ i ].pSoldier, RandomGridNo(), ADD_DEAD_SOLDIER_TO_SWEETSPOT ); + AddDeadSoldierToUnLoadedSector( gpAR->ubSectorX, gpAR->ubSectorY, 0, gpCivs[ i ].pSoldier, gridno, ADD_DEAD_SOLDIER_TO_SWEETSPOT ); StrategicRemoveMilitiaFromSector( gpCivs[ i ].pSoldier->sSectorX, gpCivs[ i ].pSoldier->sSectorY, ubCurrentRank, 1 ); if( ProcessLoyalty() ) @@ -2681,7 +2688,8 @@ DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"Autoresolve2"); TrackEnemiesKilled( ENEMY_KILLED_IN_AUTO_RESOLVE, gpEnemies[ i ].pSoldier->ubSoldierClass ); //add casualty to some statistic if( ProcessLoyalty() )HandleGlobalLoyaltyEvent( GLOBAL_LOYALTY_ENEMY_KILLED, gpAR->ubSectorX, gpAR->ubSectorY, 0 ); ProcessQueenCmdImplicationsOfDeath( gpEnemies[ i ].pSoldier ); - AddDeadSoldierToUnLoadedSector( gpAR->ubSectorX, gpAR->ubSectorY, 0, gpEnemies[ i ].pSoldier, RandomGridNo(), ADD_DEAD_SOLDIER_TO_SWEETSPOT ); + const auto gridno = RandomGridNoUnloadedSector(worldRows, worldCols); + AddDeadSoldierToUnLoadedSector( gpAR->ubSectorX, gpAR->ubSectorY, 0, gpEnemies[ i ].pSoldier, gridno, ADD_DEAD_SOLDIER_TO_SWEETSPOT); } } } @@ -6007,7 +6015,7 @@ void AutoResolveMilitiaDropAndPromote() } // Flugente: drop sector equipment - gpCivs[i].pSoldier->DropSectorEquipment( ); + gpCivs[i].pSoldier->DropSectorEquipment( NOWHERE ); if ( gpCivs[i].pSoldier->stats.bLife < OKLIFE / 2 ) { diff --git a/Tactical/Overhead.cpp b/Tactical/Overhead.cpp index 24f97740..e86a33bd 100644 --- a/Tactical/Overhead.cpp +++ b/Tactical/Overhead.cpp @@ -11403,7 +11403,7 @@ void TeamDropAll(UINT8 bTeam, BOOLEAN fForce) // if soldier is in the current sector, drop all equipment (that has the TAKEN_BY_MILITIA-flag set) if( pSoldier->bActive && ( pSoldier->sSectorX == gWorldSectorX ) && ( pSoldier->sSectorY == gWorldSectorY ) && ( pSoldier->bSectorZ == gbWorldSectorZ) ) { - pSoldier->DropSectorEquipment(); + pSoldier->DropSectorEquipment( NOWHERE ); } } } diff --git a/Tactical/Rotting Corpses.cpp b/Tactical/Rotting Corpses.cpp index 4c9fca59..40077a18 100644 --- a/Tactical/Rotting Corpses.cpp +++ b/Tactical/Rotting Corpses.cpp @@ -1066,7 +1066,7 @@ BOOLEAN TurnSoldierIntoCorpse( SOLDIERTYPE *pSoldier, BOOLEAN fRemoveMerc, BOOLE DropKeysInKeyRing( pSoldier, pSoldier->sGridNo, pSoldier->pathing.bLevel, bVisible, FALSE, 0, FALSE ); // Flugente: even if we forbid militia from dropping their equipment, they will still drop what they took via sector inventory (this functions only drops what they took) - pSoldier->DropSectorEquipment(); + pSoldier->DropSectorEquipment( NOWHERE ); } // Make team look for items diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index 697b6ed1..2320ffcd 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -16818,7 +16818,7 @@ BOOLEAN SOLDIERTYPE::UpdateMultiTurnAction( ) return TRUE; } -void SOLDIERTYPE::DropSectorEquipment( ) +void SOLDIERTYPE::DropSectorEquipment( INT32 UnloadedSectorGridNo) { // not if we already dropped the gear if ( this->usSoldierFlagMask & SOLDIER_EQUIPMENT_DROPPED ) @@ -16887,7 +16887,7 @@ void SOLDIERTYPE::DropSectorEquipment( ) } } - AddItemsToUnLoadedSector( this->sSectorX, this->sSectorY, this->bSectorZ, RandomGridNo( ), counter, pObject, 0, WORLD_ITEM_REACHABLE, 0, 1, FALSE ); + AddItemsToUnLoadedSector( this->sSectorX, this->sSectorY, this->bSectorZ, UnloadedSectorGridNo, counter, pObject, 0, WORLD_ITEM_REACHABLE, 0, 1, FALSE ); } } diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index 659f1aae..b26cccd4 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -1916,7 +1916,7 @@ public: void CancelMultiTurnAction(BOOLEAN fFinished); BOOLEAN UpdateMultiTurnAction(); - void DropSectorEquipment(); + void DropSectorEquipment( INT32 UnloadedSectorGridNo); // sevenfm: Take new bomb with id = usItem from iventory to HANDPOS void TakeNewBombFromInventory(UINT16 usItem);