diff --git a/Tactical/Inventory Choosing.cpp b/Tactical/Inventory Choosing.cpp index e6c1220e6..cbac1179a 100644 --- a/Tactical/Inventory Choosing.cpp +++ b/Tactical/Inventory Choosing.cpp @@ -2246,29 +2246,45 @@ void ChooseBombsForSoldierCreateStruct( SOLDIERCREATE_STRUCT *pp, INT8 bBombClas void ChooseLBEsForSoldierCreateStruct( SOLDIERCREATE_STRUCT *pp, INT8 bLBEClass ) { DebugMsg (TOPIC_JA2,DBG_LEVEL_3,"ChooseLBEsForSoldierCreateStruct"); - //UINT16 i; - //INVTYPE *pItem; - //UINT16 usRandom; - UINT16 usItem = 0; // CHRISL: If we're using the old inventory system, just return if((UsingNewInventorySystem() == false)) return; - usItem = PickARandomItem( LBE, pp->ubSoldierClass, bLBEClass, FALSE ); + UINT16 usItem = PickARandomItem( LBE, pp->ubSoldierClass, bLBEClass, FALSE ); if ( usItem > 0 ) { CreateItem( usItem, (INT8)(80 + Random( 21 )), &gTempObject ); gTempObject.fFlags |= OBJECT_UNDROPPABLE; - // put backpacks into the backpack slot for LOBOT - if ((UsingNewInventorySystem()) && (Item[usItem].usItemClass & IC_LBEGEAR) && (LoadBearingEquipment[Item[usItem].ubClassIndex].lbeClass == BACKPACK)) - { - pp->Inv[BPACKPOCKPOS] = gTempObject; - } - else + + auto isLBEgear = Item[usItem].usItemClass & IC_LBEGEAR; + if (isLBEgear) { - PlaceObjectInSoldierCreateStruct( pp, &gTempObject ); + // put backpacks into the backpack slot for LOBOT + auto lbeClass = LoadBearingEquipment[Item[usItem].ubClassIndex].lbeClass; + if (lbeClass == BACKPACK && !pp->Inv[BPACKPOCKPOS].exists()) + { + pp->Inv[BPACKPOCKPOS] = gTempObject; + return; + } + // same for pistol holster + if (lbeClass == THIGH_PACK) + { + if (!pp->Inv[LTHIGHPOCKPOS].exists()) + { + pp->Inv[LTHIGHPOCKPOS] = gTempObject; + return; + } + if (!pp->Inv[RTHIGHPOCKPOS].exists()) + { + pp->Inv[RTHIGHPOCKPOS] = gTempObject; + return; + } + } } + + // Couldn't find a specific pocket, just stuff it somewhere + PlaceObjectInSoldierCreateStruct( pp, &gTempObject ); } }