Resolved a problem where ItemSize=99 items would cause a CTD because of a mission condition.

Adjusted the ALT+W function so it runs a bit better.

git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@2094 3b4a5df2-a311-0410-b5c6-a8a6f20db521
This commit is contained in:
ChrisL
2008-05-02 16:39:16 +00:00
parent 5a57354297
commit 07549fdc68
4 changed files with 21 additions and 45 deletions
+14 -8
View File
@@ -2813,18 +2813,23 @@ void CycleItemDescriptionItem( INT16 sX, INT16 sY )
// Delete old box... // Delete old box...
DeleteItemDescriptionBox( ); DeleteItemDescriptionBox( );
// Make new item.... // Cycle item....
usOldItem = gpItemDescSoldier->inv[ HANDPOS ].usItem; usOldItem = CycleItems(gpItemDescSoldier->inv[ HANDPOS ].usItem);
CreateItem( (UINT16)usOldItem, 100, &( gpItemDescSoldier->inv[ HANDPOS ] ) );
InternalInitItemDescriptionBox( &( gpItemDescSoldier->inv[ HANDPOS ] ), sX, sY, gubItemDescStatusIndex, gpItemDescSoldier );
}
INT16 CycleItems( INT16 usOldItem )
{
if ( _KeyDown( SHIFT ) ) if ( _KeyDown( SHIFT ) )
{ {
usOldItem--; usOldItem--;
if ( usOldItem < 1 ) if ( usOldItem < 1 )
{ {
usOldItem = MAXITEMS-1; usOldItem = MAXITEMS-1;
} }
while ( usOldItem > 0 && ( Item[usOldItem].usItemClass == IC_NONE || Item[usOldItem].usItemClass == 0 )) while ( usOldItem > 0 && ( Item[usOldItem].usItemClass == IC_NONE || Item[usOldItem].usItemClass == 0 ))
{ {
usOldItem--; usOldItem--;
@@ -2835,12 +2840,10 @@ void CycleItemDescriptionItem( INT16 sX, INT16 sY )
else else
{ {
usOldItem++; usOldItem++;
if ( usOldItem > MAXITEMS ) if ( usOldItem > MAXITEMS )
{ {
usOldItem = 0; usOldItem = 0;
} }
while (usOldItem < MAXITEMS && (Item[usOldItem].usItemClass == IC_NONE || Item[usOldItem].usItemClass == 0 )) while (usOldItem < MAXITEMS && (Item[usOldItem].usItemClass == IC_NONE || Item[usOldItem].usItemClass == 0 ))
{ {
usOldItem++; usOldItem++;
@@ -2849,9 +2852,12 @@ void CycleItemDescriptionItem( INT16 sX, INT16 sY )
} }
} }
CreateItem( (UINT16)usOldItem, 100, &( gpItemDescSoldier->inv[ HANDPOS ] ) ); if ( usOldItem > MAXITEMS )
{
usOldItem = 0;
}
InternalInitItemDescriptionBox( &( gpItemDescSoldier->inv[ HANDPOS ] ), sX, sY, gubItemDescStatusIndex, gpItemDescSoldier ); return(usOldItem);
} }
BOOLEAN InitItemDescriptionBox( SOLDIERTYPE *pSoldier, UINT8 ubPosition, INT16 sX, INT16 sY, UINT8 ubStatusIndex ) BOOLEAN InitItemDescriptionBox( SOLDIERTYPE *pSoldier, UINT8 ubPosition, INT16 sX, INT16 sY, UINT8 ubStatusIndex )
+1
View File
@@ -197,6 +197,7 @@ BOOLEAN HandleCompatibleAmmoUIForMapInventory( SOLDIERTYPE *pSoldier, INT32 bInv
void ResetCompatibleItemArray( ); void ResetCompatibleItemArray( );
void CycleItemDescriptionItem( INT16 sX, INT16 sY ); void CycleItemDescriptionItem( INT16 sX, INT16 sY );
INT16 CycleItems( INT16 usOldItem );
BOOLEAN InitializeStealItemPickupMenu( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOpponent, ITEM_POOL *pItemPool, UINT8 ubCount); BOOLEAN InitializeStealItemPickupMenu( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOpponent, ITEM_POOL *pItemPool, UINT8 ubCount);
+1
View File
@@ -1433,6 +1433,7 @@ UINT8 ItemSlotLimit( OBJECTTYPE * pObject, INT16 bSlot, SOLDIERTYPE *pSoldier, B
} }
else else
iSize = Item[pObject->usItem].ItemSize; iSize = Item[pObject->usItem].ItemSize;
iSize = __min(iSize,34);
ubSlotLimit = LBEPocketType[pIndex].ItemCapacityPerSize[iSize]; ubSlotLimit = LBEPocketType[pIndex].ItemCapacityPerSize[iSize];
//this could be changed, we know guns are physically able to stack //this could be changed, we know guns are physically able to stack
+5 -37
View File
@@ -4257,48 +4257,16 @@ void TestExplosion()
void CycleSelectedMercsItem() void CycleSelectedMercsItem()
{ {
DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("CycleSelectedMercsItem")); DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("CycleSelectedMercsItem"));
UINT16 usOldItem; INT16 usOldItem;
SOLDIERTYPE *pSoldier; SOLDIERTYPE *pSoldier;
// Cycle selected guy's item... // Cycle selected guy's item...
if ( gfUIFullTargetFound ) if( gusSelectedSoldier != NOBODY )
{ {
// Get soldier... // Get soldier...
pSoldier = MercPtrs[ gusUIFullTargetID ]; pSoldier = MercPtrs[ gusSelectedSoldier ];
usOldItem = pSoldier->inv[ HANDPOS ].usItem; // Cycle item....
usOldItem = CycleItems(pSoldier->inv[ HANDPOS ].usItem);
//CHRISL: Why not make this work like CycleItemDescriptionItem in that holding the SHIFT key reverses the cycle?
if ( _KeyDown( SHIFT ) )
{
usOldItem--;
while ( usOldItem > 0 && ( Item[usOldItem].usItemClass == IC_NONE || Item[usOldItem].usItemClass == 0 ) && (UsingNewInventorySystem() == false || (UsingNewInventorySystem() == true && Item[usOldItem].ItemSize <= 34)) )
{
usOldItem--;
}
if ( usOldItem < 0 )
{
usOldItem = MAXITEMS-1;
}
}
else
{
usOldItem++;
if ( usOldItem > MAXITEMS )
{
usOldItem = 0;
}
while (usOldItem < MAXITEMS && (Item[usOldItem].usItemClass == IC_NONE || Item[usOldItem].usItemClass == 0 ) && (UsingNewInventorySystem() == false || (UsingNewInventorySystem() == true && Item[usOldItem].ItemSize <= 34)) )
{
usOldItem++;
}
}
if ( usOldItem > MAXITEMS )
{
usOldItem = 0;
}
CreateItem( (UINT16)usOldItem, 100, &( pSoldier->inv[ HANDPOS ]) ); CreateItem( (UINT16)usOldItem, 100, &( pSoldier->inv[ HANDPOS ]) );