diff --git a/GameSettings.cpp b/GameSettings.cpp index 964a2afb..eef7b4f4 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -936,6 +936,7 @@ void LoadGameExternalOptions() //################# Tactical Interface Settings ################# gGameExternalOptions.gfRevealItems = iniReader.ReadBoolean("Tactical Interface Settings","REVEAL_DROPPED_ENEMY_ITEMS_AFTER_COMBAT",TRUE); + gGameExternalOptions.gfShowBackpackOwner = iniReader.ReadBoolean("Tactical Interface Settings", "SHOW_BACKPACK_OWNER", TRUE); // Unload weapons & remove attachments gGameExternalOptions.gfShiftFUnloadWeapons = iniReader.ReadBoolean("Tactical Interface Settings","SHIFT_F_UNLOAD_WEAPONS",1); diff --git a/GameSettings.h b/GameSettings.h index 558db39d..712ecbb9 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -769,6 +769,7 @@ typedef struct BOOLEAN fEnableAllWeaponCaches; BOOLEAN fEnableAllTerrorists; BOOLEAN gfRevealItems; + BOOLEAN gfShowBackpackOwner; BOOLEAN fEnableArmorCoverage; // ShadoWarrior for Captain J's armor coverage // ShadoWarrior: Tooltip changes (start) diff --git a/Tactical/Handle Items.cpp b/Tactical/Handle Items.cpp index 884645e6..a60297d1 100644 --- a/Tactical/Handle Items.cpp +++ b/Tactical/Handle Items.cpp @@ -4208,11 +4208,25 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I // Set string if ( gWorldItems[ pTempItemPool->iItemIndex ].object.ubNumberOfObjects > 1 ) { - swprintf( pStr, L"%s (%d)", ShortItemNames[ gWorldItems[ pTempItemPool->iItemIndex ].object.usItem ], gWorldItems[ pTempItemPool->iItemIndex ].object.ubNumberOfObjects ); + if (gGameExternalOptions.gfShowBackpackOwner && + Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && + LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && + gWorldItems[pItemPool->iItemIndex].soldierID != -1 && + MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]) + swprintf(pStr, L"%s (%d) (%s)", ShortItemNames[gWorldItems[pTempItemPool->iItemIndex].object.usItem], gWorldItems[pTempItemPool->iItemIndex].object.ubNumberOfObjects, MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]->GetName()); + else + swprintf( pStr, L"%s (%d)", ShortItemNames[ gWorldItems[ pTempItemPool->iItemIndex ].object.usItem ], gWorldItems[ pTempItemPool->iItemIndex ].object.ubNumberOfObjects ); } else { - swprintf( pStr, L"%s", ShortItemNames[ gWorldItems[ pTempItemPool->iItemIndex ].object.usItem ] ); + if (gGameExternalOptions.gfShowBackpackOwner && + Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && + LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && + gWorldItems[pItemPool->iItemIndex].soldierID != -1 && + MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]) + swprintf(pStr, L"%s (%s)", ShortItemNames[gWorldItems[pTempItemPool->iItemIndex].object.usItem], MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]->GetName()); + else + swprintf( pStr, L"%s", ShortItemNames[ gWorldItems[ pTempItemPool->iItemIndex ].object.usItem ] ); } // Get Width @@ -4315,11 +4329,25 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I if ( gWorldItems[ pItemPool->iItemIndex ].object.ubNumberOfObjects > 1 ) { - swprintf( pStr, L"%s (%d)", ShortItemNames[ gWorldItems[ pItemPool->iItemIndex ].object.usItem ], gWorldItems[ pItemPool->iItemIndex ].object.ubNumberOfObjects ); + if (gGameExternalOptions.gfShowBackpackOwner && + Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && + LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && + gWorldItems[pItemPool->iItemIndex].soldierID != -1 && + MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]) + swprintf(pStr, L"%s (%d) (%s)", ShortItemNames[gWorldItems[pItemPool->iItemIndex].object.usItem], gWorldItems[pItemPool->iItemIndex].object.ubNumberOfObjects, MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]->GetName()); + else + swprintf( pStr, L"%s (%d)", ShortItemNames[ gWorldItems[ pItemPool->iItemIndex ].object.usItem ], gWorldItems[ pItemPool->iItemIndex ].object.ubNumberOfObjects ); } else { - swprintf( pStr, L"%s", ShortItemNames[ gWorldItems[ pItemPool->iItemIndex ].object.usItem ] ); + if (gGameExternalOptions.gfShowBackpackOwner && + Item[gWorldItems[pItemPool->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && + LoadBearingEquipment[Item[gWorldItems[pItemPool->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && + gWorldItems[pItemPool->iItemIndex].soldierID != -1 && + MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]) + swprintf(pStr, L"%s (%s)", ShortItemNames[gWorldItems[pItemPool->iItemIndex].object.usItem], MercPtrs[gWorldItems[pItemPool->iItemIndex].soldierID]->GetName()); + else + swprintf( pStr, L"%s", ShortItemNames[ gWorldItems[ pItemPool->iItemIndex ].object.usItem ] ); } gprintfdirty( sFontX, sY, pStr ); @@ -4330,7 +4358,6 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I } pItemPool = pItemPool->pNext; - if ( fDoBack ) { if ( cnt == ( bNumItemsListed - 1) ) @@ -4338,7 +4365,6 @@ BOOLEAN DrawItemPoolList( ITEM_POOL *pItemPool, INT32 sGridNo, UINT8 bCommand, I break; } } - } if ( fDoBack ) { diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index 4f8a81e1..d6cbff68 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -5776,7 +5776,6 @@ void UpdateAttachmentTooltips(OBJECTTYPE *pObject, UINT8 ubStatusIndex) UINT16 usLoopSlotID = usAttachmentSlotIndexVector[slotCount]; attachList.clear(); - //Print all attachments that fit on this item. for(UINT16 usLoop = 0; usLoop < MAXATTACHMENTS; ++usLoop) { //We no longer find valid attachments from AttachmentSlots.xml so we need to work a bit harder to get our list @@ -11473,7 +11472,16 @@ void RenderItemPickupMenu( ) } else { - swprintf( pStr, L"%s", ShortItemNames[ pObject->usItem ] ); + if (gGameExternalOptions.gfShowBackpackOwner && + !gfStealing && + Item[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].object.usItem].usItemClass == IC_LBEGEAR && + LoadBearingEquipment[Item[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].object.usItem].ubClassIndex].lbeClass == BACKPACK && + gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID != -1 && + MercPtrs[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID]) + //swprintf(pStr, L"%s (%s)", ShortItemNames[pObject->usItem], MercPtrs[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID]->GetName()); + swprintf(pStr, L"(%s)", MercPtrs[gWorldItems[gItemPickupMenu.ItemPoolSlots[cnt]->iItemIndex].soldierID]->GetName()); + else + swprintf( pStr, L"%s", ShortItemNames[ pObject->usItem ] ); } VarFindFontCenterCoordinates( sCenX, sCenY, ITEMPICK_TEXT_WIDTH, 1 , ITEMDESC_FONT, &sFontX, &sFontY, pStr ); mprintf_buffer( pDestBuf, uiDestPitchBYTES, ITEMDESC_FONT, sFontX, sFontY, pStr ); @@ -11483,14 +11491,9 @@ void RenderItemPickupMenu( ) } SetFontShadow( DEFAULT_SHADOW ); - - UnLockVideoSurface( FRAME_BUFFER ); - InvalidateRegion( gItemPickupMenu.sX, gItemPickupMenu.sY, gItemPickupMenu.sX + gItemPickupMenu.sWidth, gItemPickupMenu.sY + gItemPickupMenu.sHeight ); - gItemPickupMenu.fDirtyLevel = 0; - } } diff --git a/TacticalAI/AIUtils.cpp b/TacticalAI/AIUtils.cpp index 713f6cf3..95e80daa 100644 --- a/TacticalAI/AIUtils.cpp +++ b/TacticalAI/AIUtils.cpp @@ -496,7 +496,7 @@ UINT16 DetermineMovementMode( SOLDIERTYPE * pSoldier, INT8 bAction ) return SWATTING; } - // use swatting/crawling for snipers on roof or when under fire + // use swatting for snipers on roof or when under fire if (pSoldier->pathing.bLevel > 0 && pSoldier->aiData.bAlertStatus >= STATUS_YELLOW && (pSoldier->aiData.bOrders == SNIPER ||