From 07549fdc681e7d9bee076b9b53ba20002ec8695d Mon Sep 17 00:00:00 2001 From: ChrisL Date: Fri, 2 May 2008 16:39:16 +0000 Subject: [PATCH] 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 --- Tactical/Interface Items.cpp | 22 +++++++++++------- Tactical/Interface Items.h | 1 + Tactical/Items.cpp | 1 + Tactical/Turn Based Input.cpp | 42 +++++------------------------------ 4 files changed, 21 insertions(+), 45 deletions(-) diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index ec0f311a..b2643076 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -2813,18 +2813,23 @@ void CycleItemDescriptionItem( INT16 sX, INT16 sY ) // Delete old box... DeleteItemDescriptionBox( ); - // Make new item.... - usOldItem = gpItemDescSoldier->inv[ HANDPOS ].usItem; + // Cycle item.... + 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 ) ) { usOldItem--; - if ( usOldItem < 1 ) { usOldItem = MAXITEMS-1; } - while ( usOldItem > 0 && ( Item[usOldItem].usItemClass == IC_NONE || Item[usOldItem].usItemClass == 0 )) { usOldItem--; @@ -2835,12 +2840,10 @@ void CycleItemDescriptionItem( INT16 sX, INT16 sY ) else { usOldItem++; - if ( usOldItem > MAXITEMS ) { usOldItem = 0; } - while (usOldItem < MAXITEMS && (Item[usOldItem].usItemClass == IC_NONE || Item[usOldItem].usItemClass == 0 )) { 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 ) diff --git a/Tactical/Interface Items.h b/Tactical/Interface Items.h index 99385e54..befcdf2b 100644 --- a/Tactical/Interface Items.h +++ b/Tactical/Interface Items.h @@ -197,6 +197,7 @@ BOOLEAN HandleCompatibleAmmoUIForMapInventory( SOLDIERTYPE *pSoldier, INT32 bInv void ResetCompatibleItemArray( ); void CycleItemDescriptionItem( INT16 sX, INT16 sY ); +INT16 CycleItems( INT16 usOldItem ); BOOLEAN InitializeStealItemPickupMenu( SOLDIERTYPE *pSoldier, SOLDIERTYPE *pOpponent, ITEM_POOL *pItemPool, UINT8 ubCount); diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index 3c1dc207..f5a0e728 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -1433,6 +1433,7 @@ UINT8 ItemSlotLimit( OBJECTTYPE * pObject, INT16 bSlot, SOLDIERTYPE *pSoldier, B } else iSize = Item[pObject->usItem].ItemSize; + iSize = __min(iSize,34); ubSlotLimit = LBEPocketType[pIndex].ItemCapacityPerSize[iSize]; //this could be changed, we know guns are physically able to stack diff --git a/Tactical/Turn Based Input.cpp b/Tactical/Turn Based Input.cpp index 42db93dc..7a9505cc 100644 --- a/Tactical/Turn Based Input.cpp +++ b/Tactical/Turn Based Input.cpp @@ -4257,48 +4257,16 @@ void TestExplosion() void CycleSelectedMercsItem() { DebugMsg(TOPIC_JA2,DBG_LEVEL_3,String("CycleSelectedMercsItem")); - UINT16 usOldItem; + INT16 usOldItem; SOLDIERTYPE *pSoldier; // Cycle selected guy's item... - if ( gfUIFullTargetFound ) + if( gusSelectedSoldier != NOBODY ) { // Get soldier... - pSoldier = MercPtrs[ gusUIFullTargetID ]; + pSoldier = MercPtrs[ gusSelectedSoldier ]; - usOldItem = 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; - } + // Cycle item.... + usOldItem = CycleItems(pSoldier->inv[ HANDPOS ].usItem); CreateItem( (UINT16)usOldItem, 100, &( pSoldier->inv[ HANDPOS ]) );