diff --git a/Strategic/strategicmap.cpp b/Strategic/strategicmap.cpp index d01faa026..906554343 100644 --- a/Strategic/strategicmap.cpp +++ b/Strategic/strategicmap.cpp @@ -6133,11 +6133,11 @@ BOOLEAN HandleDefiniteUnloadingOfWorld( UINT8 ubUnloadCode ) else if( ubUnloadCode == ABOUT_TO_TRASH_WORLD ) { //if we arent loading a saved game - /*if( !(gTacticalStatus.uiFlags & LOADING_SAVED_GAME ) ) + if( !(gTacticalStatus.uiFlags & LOADING_SAVED_GAME ) ) { // Flugente: cause all militia whose equipment is from this sector to drop it TeamDropAll( MILITIA_TEAM ); - }*/ + } //Save the current sectors open temp files to the disk if( !SaveCurrentSectorsInformationToTempItemFile() ) diff --git a/Tactical/Soldier Control.cpp b/Tactical/Soldier Control.cpp index a6896ca44..afc97538e 100644 --- a/Tactical/Soldier Control.cpp +++ b/Tactical/Soldier Control.cpp @@ -15721,6 +15721,13 @@ BOOLEAN SOLDIERTYPE::UpdateMultiTurnAction() void SOLDIERTYPE::DropSectorEquipment() { + // not if we already dropped the gear + if ( this->bSoldierFlagMask & SOLDIER_EQUIPMENT_DROPPED ) + return; + + // set marker: we are about to drop our gear + this->bSoldierFlagMask |= SOLDIER_EQUIPMENT_DROPPED; + OBJECTTYPE* pObj = NULL; UINT8 size = this->inv.size(); diff --git a/Tactical/Soldier Control.h b/Tactical/Soldier Control.h index e30f84a53..473b98981 100644 --- a/Tactical/Soldier Control.h +++ b/Tactical/Soldier Control.h @@ -365,8 +365,8 @@ enum #define SOLDIER_ASSASSIN 0x00000800 //2048 // we are an enemy assassin, and thus we will behave very different from normal enemies #define SOLDIER_POW_PRISON 0x00001000 //4096 // this guy is a prisoner of war in a prison sector. SOLDIER_POW refers to people we capture, this refers to people we hold captive -/*#define SOLDIER_EQ_EMPTY 0x00002000 //8192 // this militia has no equipment and is to be equipped from the sector inventory -#define ENEMY_NET_3_LVL_4 0x00004000 //16384 +#define SOLDIER_EQUIPMENT_DROPPED 0x00002000 //8192 // under certain circumstances, militia can be ordered to drop their gear twice. Thus we set a marker to avoid that. +/*#define ENEMY_NET_3_LVL_4 0x00004000 //16384 #define ENEMY_NET_4_LVL_4 0x00008000 //32768 #define PLAYER_NET_1_LVL_1 0x00010000 //65536 diff --git a/Tactical/Soldier Create.cpp b/Tactical/Soldier Create.cpp index 04e5f4bcf..11991406e 100644 --- a/Tactical/Soldier Create.cpp +++ b/Tactical/Soldier Create.cpp @@ -2967,6 +2967,9 @@ SOLDIERTYPE* ReserveTacticalMilitiaSoldierForAutoresolve( UINT8 ubSoldierClass ) if( !pSoldier ) return NULL; + // the militia in autoresolve will drop their gear after combat. For this reason, there is no need for MercPtrs[i] to also drop it + MercPtrs[i]->bSoldierFlagMask |= SOLDIER_EQUIPMENT_DROPPED; + //Assign a bogus ID, then return it pSoldier->ubID = 255; return pSoldier;