From 6c284a18620daf73db219bdf90a32bbe1251b50c Mon Sep 17 00:00:00 2001 From: MaddMugsy Date: Tue, 8 Aug 2006 17:10:10 +0000 Subject: [PATCH] -ammo weight calculation changes from pulmu git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@408 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- Tactical/Interface Items.cpp | 59 +++++++++++++++++++++++++++++++----- 1 file changed, 52 insertions(+), 7 deletions(-) diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index ab3bed876..00530d947 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -3228,7 +3228,28 @@ void RenderItemDescriptionBox( ) uiRightLength=35; - fWeight = (float)(CalculateObjectWeight( gpItemDescObject )) / 10; + //Pulmu: Changed weight calculation of single item in stack + if( Item[gpItemDescObject->usItem].usItemClass == IC_AMMO && gpItemDescObject->ubNumberOfObjects > 1 && gubItemDescStatusIndex < gpItemDescObject->ubNumberOfObjects) + { + //Get weight of one item in stack. + UINT8 ubShotsLeftFirst = gpItemDescObject->ubShotsLeft[0]; + UINT8 ubNumberOfObjects = gpItemDescObject->ubNumberOfObjects; + gpItemDescObject->ubNumberOfObjects = 1; + gpItemDescObject->ubShotsLeft[0] = gpItemDescObject->ubShotsLeft[gubItemDescStatusIndex]; + fWeight = (float)(CalculateObjectWeight( gpItemDescObject )) / 10; + gpItemDescObject->ubShotsLeft[0] = ubShotsLeftFirst; + gpItemDescObject->ubNumberOfObjects = ubNumberOfObjects; + } + //Item does not exist + else if( gubItemDescStatusIndex >= gpItemDescObject->ubNumberOfObjects ) + { + fWeight = (float)0.0; + } + else + { + fWeight = (float)(CalculateObjectWeight( gpItemDescObject )) / 10; + } + if ( !gGameSettings.fOptions[ TOPTION_USE_METRIC_SYSTEM ] ) // metric units not enabled { fWeight = fWeight * 2.2f; @@ -3236,10 +3257,11 @@ void RenderItemDescriptionBox( ) // Add weight of attachments here ! - if ( fWeight < 0.1 ) + if ( fWeight < 0.1 && gubItemDescStatusIndex < gpItemDescObject->ubNumberOfObjects ) { - fWeight = 0.1f; + fWeight = (float)0.1; } + //Pulmu end // Render, stat name if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_WEAPON ) @@ -3483,7 +3505,7 @@ void RenderItemDescriptionBox( ) if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_AMMO ) { // Ammo - swprintf( (wchar_t *)pStr, L"%d/%d", gpItemDescObject->ubShotsLeft[0], Magazine[ Item[ gpItemDescObject->usItem ].ubClassIndex ].ubMagSize ); + swprintf( (wchar_t *)pStr, L"%d/%d", gpItemDescObject->ubShotsLeft[gubItemDescStatusIndex], Magazine[ Item[ gpItemDescObject->usItem ].ubClassIndex ].ubMagSize ); //Pulmu: Correct # of rounds for stacked ammo. uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); // sStrX = gMapWeaponStats[ 0 ].sX + gsInvDescX + gMapWeaponStats[ 0 ].sValDx + ( uiRightLength - uiStringLength ); FindFontRightCoordinates( (INT16)(gMapWeaponStats[ 2 ].sX + gsInvDescX + gMapWeaponStats[ 2 ].sValDx+6), (INT16)(gMapWeaponStats[ 2 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); @@ -3700,16 +3722,39 @@ void RenderItemDescriptionBox( ) uiRightLength=35; // Calculate total weight of item and attachments - fWeight = (float)(CalculateObjectWeight( gpItemDescObject )) / 10; + //Pulmu: Changed weight calculation of single item in stack. + if( Item[gpItemDescObject->usItem].usItemClass == IC_AMMO && gpItemDescObject->ubNumberOfObjects > 1 && gubItemDescStatusIndex < gpItemDescObject->ubNumberOfObjects) + { + //Get weight of one ammo clip in stack. + UINT8 ubShotsLeftFirst = gpItemDescObject->ubShotsLeft[0]; + UINT8 ubNumberOfObjects = gpItemDescObject->ubNumberOfObjects; + gpItemDescObject->ubNumberOfObjects = 1; + gpItemDescObject->ubShotsLeft[0] = gpItemDescObject->ubShotsLeft[gubItemDescStatusIndex]; + fWeight = (float)(CalculateObjectWeight( gpItemDescObject )) / 10; + gpItemDescObject->ubShotsLeft[0] = ubShotsLeftFirst; + gpItemDescObject->ubNumberOfObjects = ubNumberOfObjects; + } + //Item does not exist + else if( gubItemDescStatusIndex >= gpItemDescObject->ubNumberOfObjects ) + { + fWeight = (float)0.0; + } + else + { + fWeight = (float)(CalculateObjectWeight( gpItemDescObject )) / 10; + } + + if ( !gGameSettings.fOptions[ TOPTION_USE_METRIC_SYSTEM ] ) { fWeight = fWeight * 2.2f; } - if ( fWeight < 0.1 ) + if ( fWeight < 0.1 && gubItemDescStatusIndex < gpItemDescObject->ubNumberOfObjects ) { fWeight = (float)0.1; } + //Pulmu end // Render, stat name if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_WEAPON ) @@ -3960,7 +4005,7 @@ void RenderItemDescriptionBox( ) { // Ammo - print amount //Status - swprintf( (wchar_t *)pStr, L"%d/%d", gpItemDescObject->ubShotsLeft[0], Magazine[ Item[ gpItemDescObject->usItem ].ubClassIndex ].ubMagSize ); + swprintf( (wchar_t *)pStr, L"%d/%d", gpItemDescObject->ubShotsLeft[gubItemDescStatusIndex], Magazine[ Item[ gpItemDescObject->usItem ].ubClassIndex ].ubMagSize ); //Pulmu: Correct # of rounds for stacked ammo FindFontRightCoordinates( (INT16)(gWeaponStats[ 2 ].sX + gsInvDescX + gWeaponStats[ 2 ].sValDx), (INT16)(gWeaponStats[ 2 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); mprintf( usX, usY, pStr ); }