- large MOLLE pockets didn't display their volume in EDB
- attaching a filled MOLLE pocket didn't show its contents. Now the contents will be removed and put in the soldiers inventory or on the ground if there is no space.

Enhancement:
Detaching filled MOLLE pockets is possible again. The contents will be moved to soldier inventory (if pocket was on the soldier before) or to the ground (in case of sector inventory manipulation).

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@7788 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
silversurfer
2015-03-17 18:15:58 +00:00
parent 38a931ed7a
commit 4b5fc5bc3c
3 changed files with 52 additions and 7 deletions
+3 -3
View File
@@ -2302,7 +2302,7 @@ void InternalInitEDBTooltipRegion( OBJECTTYPE * gpItemDescObject, UINT32 guiCurr
MSYS_EnableRegion( &gUDBFasthelpRegions[ iFirstDataRegion + 1 ] );
}
//////////////////// POCKET VOLUME (for MOLLE pockets)
if ( Item[ gpItemDescObject->usItem ].nasAttachmentClass != 0 && LoadBearingEquipment[ Item[ gpItemDescObject->usItem ].ubClassIndex ].lbePocketIndex[0] > 0 )
if ( Item[ gpItemDescObject->usItem ].nasAttachmentClass != 0 && GetFirstPocketOnItem(gpItemDescObject->usItem) != 0 )
{
swprintf( pStr, L"%s%s", szUDBGenCommonStatsTooltipText[ 2 ], szUDBGenCommonStatsExplanationsTooltipText[ 2 ]);
SetRegionFastHelpText( &(gUDBFasthelpRegions[ iFirstDataRegion + 2 ]), pStr );
@@ -5882,7 +5882,7 @@ void DrawMiscStats( OBJECTTYPE * gpItemDescObject )
BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAdvancedIcon, 63, gItemDescGenRegions[1][0].sLeft + sOffsetX, gItemDescGenRegions[1][0].sTop + sOffsetY, VO_BLT_SRCTRANSPARENCY, NULL );
}
//////////////////// POCKET VOLUME (for MOLLE pockets)
if ( Item[ gpItemDescObject->usItem ].nasAttachmentClass != 0 && LoadBearingEquipment[ Item[ gpItemDescObject->usItem ].ubClassIndex ].lbePocketIndex[0] > 0 )
if ( Item[ gpItemDescObject->usItem ].nasAttachmentClass != 0 && GetFirstPocketOnItem(gpItemDescObject->usItem) != 0 )
{
BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAdvancedIcon, 64, gItemDescGenRegions[2][0].sLeft + sOffsetX, gItemDescGenRegions[2][0].sTop + sOffsetY, VO_BLT_SRCTRANSPARENCY, NULL );
}
@@ -14554,7 +14554,7 @@ void DrawMiscValues( OBJECTTYPE * gpItemDescObject )
}
}
//////////////////// POCKET VOLUME (for MOLLE pockets)
if ( Item[ gpItemDescObject->usItem ].nasAttachmentClass != 0 && LoadBearingEquipment[ Item[ gpItemDescObject->usItem ].ubClassIndex ].lbePocketIndex[0] > 0 )
if ( Item[ gpItemDescObject->usItem ].nasAttachmentClass != 0 && GetFirstPocketOnItem(gpItemDescObject->usItem) != 0 )
{
// Set line to draw into
ubNumLine = 2;
+9 -3
View File
@@ -6344,17 +6344,23 @@ void ItemDescAttachmentsCallback( MOUSE_REGION * pRegion, INT32 iReason )
if( &(*iter) == pAttachment )
{
std::vector<UINT16> usAttachmentSlotIndexVector = GetItemSlots(gpItemDescObject);
// if the attachments pocket is not empty then do not allow to remove this attachment
if( gpItemDescObject->IsActiveLBE(gubItemDescStatusIndex) ) // not worn by the soldier
{
LBENODE* pLBE = gpItemDescObject->GetLBEPointer(gubItemDescStatusIndex);
// we have an item in this pocket
if( pLBE->inv[(AttachmentSlots[usAttachmentSlotIndexVector[slotCount]].ubPocketMapping -1)].exists() )
return;
// place item on the ground
AutoPlaceObjectToWorld(gpItemDescSoldier, &pLBE->inv[(AttachmentSlots[usAttachmentSlotIndexVector[slotCount]].ubPocketMapping -1)], TRUE);
}
else // the soldier is wearing the LBE
{
// we have an item in this pocket
if( gpItemDescSoldier->inv[pocketKey[(AttachmentSlots[usAttachmentSlotIndexVector[slotCount]].ubPocketMapping -1)]].exists() )
return;
// place in soldiers inventory
if( !AutoPlaceObject(gpItemDescSoldier, &gpItemDescSoldier->inv[pocketKey[(AttachmentSlots[usAttachmentSlotIndexVector[slotCount]].ubPocketMapping -1)]], FALSE) )
// that didn't work. Place on ground instead.
AutoPlaceObjectToWorld(gpItemDescSoldier, &gpItemDescSoldier->inv[pocketKey[(AttachmentSlots[usAttachmentSlotIndexVector[slotCount]].ubPocketMapping -1)]], TRUE);
}
break;
}
+40 -1
View File
@@ -4907,7 +4907,46 @@ BOOLEAN OBJECTTYPE::AttachObjectNAS( SOLDIERTYPE * pSoldier, OBJECTTYPE * pAttac
pAttachment->MoveThisObjectTo(attachmentObject,1,pSoldier,NUM_INV_SLOTS,1);
}
} else {
pAttachment->MoveThisObjectTo(attachmentObject,1,pSoldier,NUM_INV_SLOTS,1);
// if this is an active LBE (holding an item) it must be a MOLLE pocket. We need to move the item out of this pocket or it will be invisible.
if ( pAttachment->IsActiveLBE(subObject) )
{
std::vector<INT8> LBESlots;
switch( LoadBearingEquipment[Item[pAttachment->usItem].ubClassIndex].lbeClass )
{
case THIGH_PACK:
GetLBESlots( LTHIGHPOCKPOS, LBESlots );
break;
case VEST_PACK:
GetLBESlots( VESTPOCKPOS, LBESlots );
break;
case COMBAT_PACK:
GetLBESlots( CPACKPOCKPOS, LBESlots );
break;
case BACKPACK:
GetLBESlots( BPACKPOCKPOS, LBESlots );
break;
// this should never happen
default:
return FALSE;
}
LBENODE* pLBE = pAttachment->GetLBEPointer(0);
for(unsigned int i=0; i<LBESlots.size(); i++)
{
// Is there an item in this LBE pocket?
if( pLBE->inv[i].exists() )
{
// place in soldiers inventory
if( !AutoPlaceObject(pSoldier, &pLBE->inv[i], FALSE) )
// that didn't work. Place it on the ground instead.
AutoPlaceObjectToWorld( pSoldier, &pLBE->inv[i], TRUE );
}
}
// finished removing items. Now attach the MOLLE pocket to its carrier.
pAttachment->MoveThisObjectTo(attachmentObject,1,pSoldier,NUM_INV_SLOTS,1);
}
else
pAttachment->MoveThisObjectTo(attachmentObject,1,pSoldier,NUM_INV_SLOTS,1);
}
//WarmSteel - Because we want every attachment to stay in place in NAS, we must first delete the "null" attachment, then insert the new one.