diff --git a/GameSettings.cpp b/GameSettings.cpp index 50a2e3e3..838969d6 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -310,6 +310,7 @@ void InitGameSettings() gGameSettings.fOptions[ TOPTION_USE_AUTO_SAVE ] = FALSE; gGameSettings.fOptions[ TOPTION_SILENT_SKYRIDER ] = FALSE; gGameSettings.fOptions[ TOPTION_LOW_CPU_USAGE ] = FALSE; + gGameSettings.fOptions[ TOPTION_ENHANCED_DESC_BOX ] = FALSE; gGameSettings.ubSizeOfDisplayCover = 4; gGameSettings.ubSizeOfLOS = 4; @@ -779,6 +780,9 @@ void LoadGameExternalOptions() gGameExternalOptions.gbBulletTracer = iniReader.ReadBoolean("JA2 Gameplay Settings","USE_BULLET_TRACERS",FALSE); gGameExternalOptions.fRestrictFemaleEnemiesExceptElite = iniReader.ReadBoolean("JA2 Gameplay Settings","RESTRICT_FEMALE_ENEMIES_EXCEPT_ELITE",FALSE); + + // HEADROCK: Use Enhanced Item Description Box? + gGameExternalOptions.fEnhancedDescriptionBox = iniReader.ReadInteger("JA2 Gameplay Settings","USE_ENHANCED_DESCRIPTION_BOX",0); } INT16 DynamicAdjustAPConstants(INT16 iniReadValue, INT16 iniDefaultValue, BOOLEAN reverse) diff --git a/GameSettings.h b/GameSettings.h index c7d026b1..5ae8548e 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -55,6 +55,7 @@ enum TOPTION_USE_AUTO_SAVE, TOPTION_SILENT_SKYRIDER, TOPTION_LOW_CPU_USAGE, + TOPTION_ENHANCED_DESC_BOX, NUM_GAME_OPTIONS, //Toggle up this will be able to be Toggled by the player @@ -450,6 +451,9 @@ BOOLEAN gbBulletTracer; // WANNE: Restrict female enemies from beeing in the queens army (except Female Elite enemies)? BOOLEAN fRestrictFemaleEnemiesExceptElite; + // HEADROCK: Enhanced Item Description Box ON/OFF + BOOLEAN fEnhancedDescriptionBox; + } GAME_EXTERNAL_OPTIONS; //This structure will contain general Ja2 settings NOT individual game settings. diff --git a/Laptop/BobbyRGuns.cpp b/Laptop/BobbyRGuns.cpp index 868a464f..eaa77446 100644 --- a/Laptop/BobbyRGuns.cpp +++ b/Laptop/BobbyRGuns.cpp @@ -2435,7 +2435,7 @@ void CreateMouseRegionForBigImage( UINT16 usPosY, UINT8 ubCount, INT16 *pItemNum gunDamage, //Gun damage gWeaponStatsDesc[ 10 ], //Range String gGameSettings.fOptions[ TOPTION_SHOW_WEAPON_RANGE_IN_TILES ] ? Weapon[ pItemNumbers[ i ] ].usRange/10 : Weapon[ pItemNumbers[ i ] ].usRange, //Gun Range - gWeaponStatsDesc[ 5 ], //AP String + gWeaponStatsDesc[ 6 ], //AP String readyAPs, apStr, //AP's //L"- / - / -", @@ -2497,7 +2497,7 @@ void CreateMouseRegionForBigImage( UINT16 usPosY, UINT8 ubCount, INT16 *pItemNum gunDamage, //Gun damage gWeaponStatsDesc[ 10 ], //Range String gGameSettings.fOptions[ TOPTION_SHOW_WEAPON_RANGE_IN_TILES ] ? Weapon[ pItemNumbers[ i ] ].usRange/10 : Weapon[ pItemNumbers[ i ] ].usRange, //Gun Range - gWeaponStatsDesc[ 5 ], //AP String + gWeaponStatsDesc[ 6 ], //AP String //apStr, //AP's L"- / - / -", gWeaponStatsDesc[ 12 ], //Weight String @@ -2517,7 +2517,7 @@ void CreateMouseRegionForBigImage( UINT16 usPosY, UINT8 ubCount, INT16 *pItemNum ItemNames[ pItemNumbers[ i ] ], gWeaponStatsDesc[ 11 ], //Damage String meleeDamage, //Melee damage - gWeaponStatsDesc[ 5 ], //AP String + gWeaponStatsDesc[ 6 ], //AP String //apStr, //AP's L"-", gWeaponStatsDesc[ 12 ], //Weight String diff --git a/Standard Gaming Platform/mousesystem.cpp b/Standard Gaming Platform/mousesystem.cpp index cc3a2c8d..28b650da 100644 --- a/Standard Gaming Platform/mousesystem.cpp +++ b/Standard Gaming Platform/mousesystem.cpp @@ -986,6 +986,10 @@ void MSYS_RemoveRegion(MOUSE_REGION *region) return; AssertMsg( 0, "Attempting to remove a NULL region."); } + //CHRISL: Obviously, we should never run this function if a region hasn't been setup, but a failsafe would be nice + if(region->IDNumber == 0) + return; + #ifdef MOUSESYSTEM_DEBUGGING if( !(region->uiFlags & MSYS_REGION_EXISTS) ) AssertMsg( 0, "Attempting to remove an already removed region." ); diff --git a/Tactical/Interface Enhanced.cpp b/Tactical/Interface Enhanced.cpp new file mode 100644 index 00000000..c723a3a8 --- /dev/null +++ b/Tactical/Interface Enhanced.cpp @@ -0,0 +1,6857 @@ +#ifdef PRECOMPILEDHEADERS + #include "Tactical All.h" + #include "language defines.h" +#else + #include "builddefines.h" + #include + #include + #include + #include "sgp.h" + #include "gameloop.h" + #include "himage.h" + #include "vobject.h" + #include "sysutil.h" + #include "overhead.h" + #include "mousesystem.h" + #include "Button System.h" + #include "interface.h" + #include "vsurface.h" + #include "wcheck.h" + #include "input.h" + #include "Handle UI.h" + #include "renderworld.h" + #include "sys globals.h" + #include "cursors.h" + #include "radar screen.h" + #include "worldman.h" + #include "Font Control.h" + #include "render dirty.h" + #include "utilities.h" + #include "Sound Control.h" + #include "Interface Panels.h" + #include "Animation Control.h" + #include "Soldier Control.h" + #include "pathai.h" + #include "weapons.h" + #include "lighting.h" + #include "faces.h" + #include "mapscreen.h" + #include "message.h" + #include "text.h" + #include "Interface Items.h" + #include "Font Control.h" + #include "Cursor Control.h" + #include "interface cursors.h" + #include "interface utils.h" + #include "interface items.h" + #include "wordwrap.h" + #include "interface control.h" + #include "vobject_blitters.h" + #include "world items.h" + #include "points.h" + #include "physics.h" + #include "finances.h" + #include "ui cursors.h" + #include "handle ui.h" + #include "ShopKeeper Interface.h" + #include "dialogue control.h" + #include "english.h" + #include "keys.h" + #include "Strategicmap.h" + #include "Arms Dealer Init.h" + #include "soldier macros.h" + #include "game clock.h" + #include "squads.h" + #include "LaptopSave.h" + #include "MessageBoxScreen.h" + #include "Language Defines.h" + #include "GameSettings.h" + #include "Map Screen Interface Map Inventory.h" + #include "Quests.h" + #include "Map Screen Interface.h" + #include "Campaign Types.h" + #include "opplist.h" + #include "los.h" + #include "Map Screen Interface Map.h" +#endif + +//forward declarations of common classes to eliminate includes +class OBJECTTYPE; +class SOLDIERTYPE; + +// HEADROCK: Defined two new color pointers for the Enhanced Description Box +#define ITEMDESC_FONTPOSITIVE FONT_MCOLOR_LTGREEN +#define ITEMDESC_FONTNEGATIVE FONT_MCOLOR_LTRED +#define BULLET_WIDTH 3 +#define BULLET_GAP 5 + +// HEADROCK: Added these STIs for the icons used in the Enhanced Description Box +UINT32 guiItemInfoWeaponIcon; +UINT32 guiItemInfoAmmoIcon; +UINT32 guiItemInfoExplosiveIcon; +UINT32 guiItemInfoArmorIcon; +UINT32 guiItemInfoMiscIcon; + +// HEADROCK: Start additional values. +INT16 BULLET_DRAW_X; +INT16 BULLET_DRAW_Y; +INT16 BULLET_AUTO_X; +INT16 BULLET_AUTO_Y; +INT16 BULLET_RELOAD_X; +INT16 BULLET_RELOAD_Y; +INT16 BULLET_MRELOAD_X; +INT16 BULLET_MRELOAD_Y; +INT16 BULLET_RANGE_X; +INT16 BULLET_RANGE_Y; +INT16 BULLET_DAMAGE_X; +INT16 BULLET_DAMAGE_Y; +INT16 BULLET_AUTOPEN_X; +INT16 BULLET_AUTOPEN_Y; +INT16 BULLET_AUTO5AP_X; +INT16 BULLET_AUTO5AP_Y; +INT16 BULLET_ACC_X; +INT16 BULLET_ACC_Y; +INT16 BULLET_RELIABILITY_X; +INT16 BULLET_RELIABILITY_Y; +INT16 BULLET_REPAIR_X; +INT16 BULLET_REPAIR_Y; +INT16 BULLET_LOUDNESS_X; +INT16 BULLET_LOUDNESS_Y; +INT16 BULLET_FLASH_X; +INT16 BULLET_FLASH_Y; +INT16 BULLET_TOHIT_X; +INT16 BULLET_TOHIT_Y; +INT16 BULLET_BESTLASERRANGE_X; +INT16 BULLET_BESTLASERRANGE_Y; +INT16 BULLET_AIMBONUS_X; +INT16 BULLET_AIMBONUS_Y; +INT16 BULLET_MINRANGEAIMBONUS_X; +INT16 BULLET_MINRANGEAIMBONUS_Y; +INT16 BULLET_BIPOD_X; +INT16 BULLET_BIPOD_Y; + +// HEADROCK: Icon Locations for AMMO stats +INT16 BULLET_ARMORPEN_X; +INT16 BULLET_ARMORPEN_Y; +INT16 BULLET_TUMBLE_X; +INT16 BULLET_TUMBLE_Y; +INT16 BULLET_PREARMOR_X; +INT16 BULLET_PREARMOR_Y; +INT16 BULLET_TRACER_X; +INT16 BULLET_TRACER_Y; +INT16 BULLET_ANTITANK_X; +INT16 BULLET_ANTITANK_Y; +INT16 BULLET_LOCKBUSTER_X; +INT16 BULLET_LOCKBUSTER_Y; +INT16 BULLET_IGNOREARMOR_X; +INT16 BULLET_IGNOREARMOR_Y; +INT16 BULLET_ACIDIC_X; +INT16 BULLET_ACIDIC_Y; +INT16 BULLET_AMMORANGEBON_X; +INT16 BULLET_AMMORANGEBON_Y; +INT16 BULLET_AMMODAMAGEBON_X; +INT16 BULLET_AMMODAMAGEBON_Y; +INT16 BULLET_AMMOTOHITBON_X; +INT16 BULLET_AMMOTOHITBON_Y; +INT16 BULLET_AMMOBURSTBON_X; +INT16 BULLET_AMMOBURSTBON_Y; +INT16 BULLET_AMMORELIABILITYBON_X; +INT16 BULLET_AMMORELIABILITYBON_Y; +INT16 BULLET_AMMONOISESUPP_X; +INT16 BULLET_AMMONOISESUPP_Y; + +// HEADROCK: Icon Locations for EXPLOSIVES stats +INT16 BULLET_EXPLOSIVEDAMAGE_X; +INT16 BULLET_EXPLOSIVEDAMAGE_Y; +INT16 BULLET_EXPLOSIVESTUNDAMAGE_X; +INT16 BULLET_EXPLOSIVESTUNDAMAGE_Y; +INT16 BULLET_EXPLOSIVELOUDNESS_X; +INT16 BULLET_EXPLOSIVELOUDNESS_Y; +INT16 BULLET_EXPLOSIVEVOLATILITY_X; +INT16 BULLET_EXPLOSIVEVOLATILITY_Y; +INT16 BULLET_EXPLOSIVERADIUS_X; +INT16 BULLET_EXPLOSIVERADIUS_Y; +INT16 BULLET_EXPLOSIVESTARTRADIUS_X; +INT16 BULLET_EXPLOSIVESTARTRADIUS_Y; +INT16 BULLET_EXPLOSIVEARROW_X; +INT16 BULLET_EXPLOSIVEARROW_Y; +INT16 BULLET_EXPLOSIVEENDRADIUS_X; +INT16 BULLET_EXPLOSIVEENDRADIUS_Y; +INT16 BULLET_EXPLOSIVEDURATION_X; +INT16 BULLET_EXPLOSIVEDURATION_Y; + +// HEADROCK: Icon Locations for ARMOR stats +INT16 BULLET_ARMOR_X; +INT16 BULLET_ARMOR_Y; +INT16 BULLET_ARMORCOVERAGE_X; +INT16 BULLET_ARMORCOVERAGE_Y; +INT16 BULLET_ARMORDEGRADE_X; +INT16 BULLET_ARMORDEGRADE_Y; +INT16 BULLET_ARMORAPBONUS_X; +INT16 BULLET_ARMORAPBONUS_Y; +INT16 BULLET_ARMORAIMBONUS_X; +INT16 BULLET_ARMORAIMBONUS_Y; +INT16 BULLET_ARMORWOODCAMO_X; +INT16 BULLET_ARMORWOODCAMO_Y; +INT16 BULLET_ARMORURBANCAMO_X; +INT16 BULLET_ARMORURBANCAMO_Y; +INT16 BULLET_ARMORDESERTCAMO_X; +INT16 BULLET_ARMORDESERTCAMO_Y; +INT16 BULLET_ARMORSNOWCAMO_X; +INT16 BULLET_ARMORSNOWCAMO_Y; +INT16 BULLET_ARMORSTEALTH_X; +INT16 BULLET_ARMORSTEALTH_Y; +INT16 BULLET_ARMORVISIONRANGEBONUS_X; +INT16 BULLET_ARMORVISIONRANGEBONUS_Y; +INT16 BULLET_ARMORDAYVISIONRANGEBONUS_X; +INT16 BULLET_ARMORDAYVISIONRANGEBONUS_Y; +INT16 BULLET_ARMORNIGHTVISIONRANGEBONUS_X; +INT16 BULLET_ARMORNIGHTVISIONRANGEBONUS_Y; +INT16 BULLET_ARMORBRIGHTLIGHTVISIONRANGEBONUS_X; +INT16 BULLET_ARMORBRIGHTLIGHTVISIONRANGEBONUS_Y; +INT16 BULLET_ARMORCAVEVISIONRANGEBONUS_X; +INT16 BULLET_ARMORCAVEVISIONRANGEBONUS_Y; +INT16 BULLET_ARMORPERCENTTUNNELVISION_X; +INT16 BULLET_ARMORPERCENTTUNNELVISION_Y; +INT16 BULLET_ARMORHEARINGRANGEBONUS_X; +INT16 BULLET_ARMORHEARINGRANGEBONUS_Y; + +// HEADROCK: Generic Icon Locations for MISC Item Stats +INT16 BULLET_COL1ROW1_X; +INT16 BULLET_COL1ROW1_Y; +INT16 BULLET_COL1ROW2_X; +INT16 BULLET_COL1ROW2_Y; +INT16 BULLET_COL1ROW3_X; +INT16 BULLET_COL1ROW3_Y; +INT16 BULLET_COL1ROW4_X; +INT16 BULLET_COL1ROW4_Y; +INT16 BULLET_COL1ROW5_X; +INT16 BULLET_COL1ROW5_Y; +INT16 BULLET_COL1ROW6_X; +INT16 BULLET_COL1ROW6_Y; +INT16 BULLET_COL1ROW7_X; +INT16 BULLET_COL1ROW7_Y; +INT16 BULLET_COL1ROW8_X; +INT16 BULLET_COL1ROW8_Y; +INT16 BULLET_COL1ROW9_X; +INT16 BULLET_COL1ROW9_Y; +INT16 BULLET_COL1ROW10_X; +INT16 BULLET_COL1ROW10_Y; +INT16 BULLET_COL1ROW11_X; +INT16 BULLET_COL1ROW11_Y; +INT16 BULLET_COL1ROW12_X; +INT16 BULLET_COL1ROW12_Y; +INT16 BULLET_COL2ROW1_X; +INT16 BULLET_COL2ROW1_Y; +INT16 BULLET_COL2ROW2_X; +INT16 BULLET_COL2ROW2_Y; +INT16 BULLET_COL2ROW3_X; +INT16 BULLET_COL2ROW3_Y; +INT16 BULLET_COL2ROW4_X; +INT16 BULLET_COL2ROW4_Y; +INT16 BULLET_COL2ROW5_X; +INT16 BULLET_COL2ROW5_Y; +INT16 BULLET_COL2ROW6_X; +INT16 BULLET_COL2ROW6_Y; +INT16 BULLET_COL2ROW7_X; +INT16 BULLET_COL2ROW7_Y; +// HEADROCK: End additional values. + +// HEADROCK: New regions for stats tooltips +MOUSE_REGION gStatsFasthelpRegions[20]; + +extern INV_DESC_STATS gWeaponStats[]; +extern INV_DESC_STATS gMoneyStats[]; +extern SGPRect gItemDescProsConsRects[]; +extern INV_DESC_STATS gLBEStats[]; + +// HEADROCK: New array to contain locations for MiscItem stats. +INV_DESC_STATS gMiscItemStatsEDB[28]; + +// WEAPON stat tooltips +SGPRect gWeaponDescStatsRects[20]; + +// Ammo Stat Tooltips +SGPRect gAmmoDescStatsRects[20]; + +// ARMOR Stat Tooltips +SGPRect gArmorDescStatsRects[20]; + +// EXPLOSIVES Stat Tooltips +SGPRect gExplosiveDescStatsRects[20]; + +// MISC ITEM Stat Tooltips +SGPRect gMiscItemDescStatsRects[20]; + +extern void HelpTextDoneCallback( void ); + +UINT8 UsingEDBSystem() +{ + if(iResolution == 0) //640x480, never allow EDB + return 0; + if(gGameSettings.fOptions[ TOPTION_ENHANCED_DESC_BOX ] == TRUE) + { + if(guiCurrentScreen ==MAP_SCREEN) //Strategic + { + if(gGameExternalOptions.fEnhancedDescriptionBox == 0) + return 1; + if(gGameExternalOptions.fEnhancedDescriptionBox == 1) + return 1; + } + else //Tactical + { + if(gGameExternalOptions.fEnhancedDescriptionBox == 0) + return (UsingNewInventorySystem()==true?1:2); + if(gGameExternalOptions.fEnhancedDescriptionBox == 2) + return (UsingNewInventorySystem()==true?1:2); + } + } + + return 0; +} + +void InitEDBCoords() +{ + if(UsingEDBSystem() == 0) + return; + if(guiCurrentScreen == MAP_SCREEN) + { + // Icon Locations + gMiscItemStatsEDB[0].sX = 47; gMiscItemStatsEDB[0].sY = 124; gMiscItemStatsEDB[0].sValDx = 0; // COL 1; ROW 1 + gMiscItemStatsEDB[1].sX = 47; gMiscItemStatsEDB[1].sY = 136; gMiscItemStatsEDB[1].sValDx = 0; // COL 1; ROW 2 + gMiscItemStatsEDB[2].sX = 47; gMiscItemStatsEDB[2].sY = 148; gMiscItemStatsEDB[2].sValDx = 0; // COL 1; ROW 3 + gMiscItemStatsEDB[3].sX = 47; gMiscItemStatsEDB[3].sY = 160; gMiscItemStatsEDB[3].sValDx = 0; // COL 1; ROW 4 + gMiscItemStatsEDB[4].sX = 47; gMiscItemStatsEDB[4].sY = 172; gMiscItemStatsEDB[4].sValDx = 0; // COL 1; ROW 5 + gMiscItemStatsEDB[5].sX = 47; gMiscItemStatsEDB[5].sY = 184; gMiscItemStatsEDB[5].sValDx = 0; // COL 1; ROW 6 + gMiscItemStatsEDB[6].sX = 47; gMiscItemStatsEDB[6].sY = 196; gMiscItemStatsEDB[6].sValDx = 0; // COL 1; ROW 7 + gMiscItemStatsEDB[7].sX = 144; gMiscItemStatsEDB[7].sY = 124; gMiscItemStatsEDB[7].sValDx = 0; // COL 2; ROW 1 + gMiscItemStatsEDB[8].sX = 144; gMiscItemStatsEDB[8].sY = 136; gMiscItemStatsEDB[8].sValDx = 0; // COL 2; ROW 2 + gMiscItemStatsEDB[9].sX = 144; gMiscItemStatsEDB[9].sY = 148; gMiscItemStatsEDB[9].sValDx = 0; // COL 2; ROW 3 + gMiscItemStatsEDB[10].sX = 144; gMiscItemStatsEDB[10].sY = 160; gMiscItemStatsEDB[10].sValDx = 0; // COL 2; ROW 4 + gMiscItemStatsEDB[11].sX = 144; gMiscItemStatsEDB[11].sY = 172; gMiscItemStatsEDB[11].sValDx = 0; // COL 2; ROW 5 + gMiscItemStatsEDB[12].sX = 144; gMiscItemStatsEDB[12].sY = 184; gMiscItemStatsEDB[12].sValDx = 0; // COL 2; ROW 6 + gMiscItemStatsEDB[13].sX = 144; gMiscItemStatsEDB[13].sY = 196; gMiscItemStatsEDB[13].sValDx = 0; // COL 2; ROW 7 + // EQUALS signs Locations + gMiscItemStatsEDB[14].sX = 97; gMiscItemStatsEDB[14].sY = 124; gMiscItemStatsEDB[14].sValDx = 12; // COL 1; ROW 1 + gMiscItemStatsEDB[15].sX = 97; gMiscItemStatsEDB[15].sY = 136; gMiscItemStatsEDB[15].sValDx = 12; // COL 1; ROW 2 + gMiscItemStatsEDB[16].sX = 97; gMiscItemStatsEDB[16].sY = 148; gMiscItemStatsEDB[16].sValDx = 12; // COL 1; ROW 3 + gMiscItemStatsEDB[17].sX = 97; gMiscItemStatsEDB[17].sY = 160; gMiscItemStatsEDB[17].sValDx = 12; // COL 1; ROW 4 + gMiscItemStatsEDB[18].sX = 97; gMiscItemStatsEDB[18].sY = 172; gMiscItemStatsEDB[18].sValDx = 12; // COL 1; ROW 5 + gMiscItemStatsEDB[19].sX = 97; gMiscItemStatsEDB[19].sY = 184; gMiscItemStatsEDB[19].sValDx = 12; // COL 1; ROW 6 + gMiscItemStatsEDB[20].sX = 97; gMiscItemStatsEDB[20].sY = 196; gMiscItemStatsEDB[20].sValDx = 12; // COL 1; ROW 7 + gMiscItemStatsEDB[21].sX = 194; gMiscItemStatsEDB[21].sY = 124; gMiscItemStatsEDB[21].sValDx = 12; // COL 2; ROW 1 + gMiscItemStatsEDB[22].sX = 194; gMiscItemStatsEDB[22].sY = 136; gMiscItemStatsEDB[22].sValDx = 12; // COL 2; ROW 2 + gMiscItemStatsEDB[23].sX = 194; gMiscItemStatsEDB[23].sY = 148; gMiscItemStatsEDB[23].sValDx = 12; // COL 2; ROW 3 + gMiscItemStatsEDB[24].sX = 194; gMiscItemStatsEDB[24].sY = 160; gMiscItemStatsEDB[24].sValDx = 12; // COL 2; ROW 4 + gMiscItemStatsEDB[25].sX = 194; gMiscItemStatsEDB[25].sY = 172; gMiscItemStatsEDB[25].sValDx = 12; // COL 2; ROW 5 + gMiscItemStatsEDB[26].sX = 194; gMiscItemStatsEDB[26].sY = 184; gMiscItemStatsEDB[26].sValDx = 12; // COL 2; ROW 6 + gMiscItemStatsEDB[27].sX = 194; gMiscItemStatsEDB[27].sY = 196; gMiscItemStatsEDB[27].sValDx = 12; // COL 2; ROW 7 + + gWeaponDescStatsRects[0].iLeft = 46; gWeaponDescStatsRects[0].iTop = 229; gWeaponDescStatsRects[0].iRight = 103; gWeaponDescStatsRects[0].iBottom = 240; // First Column + gWeaponDescStatsRects[1].iLeft = 46; gWeaponDescStatsRects[1].iTop = 241; gWeaponDescStatsRects[1].iRight = 103; gWeaponDescStatsRects[1].iBottom = 252; + gWeaponDescStatsRects[2].iLeft = 46; gWeaponDescStatsRects[2].iTop = 253; gWeaponDescStatsRects[2].iRight = 103; gWeaponDescStatsRects[2].iBottom = 264; + gWeaponDescStatsRects[3].iLeft = 46; gWeaponDescStatsRects[3].iTop = 265; gWeaponDescStatsRects[3].iRight = 103; gWeaponDescStatsRects[3].iBottom = 276; + gWeaponDescStatsRects[4].iLeft = 46; gWeaponDescStatsRects[4].iTop = 277; gWeaponDescStatsRects[4].iRight = 103; gWeaponDescStatsRects[4].iBottom = 288; + gWeaponDescStatsRects[5].iLeft = 46; gWeaponDescStatsRects[5].iTop = 289; gWeaponDescStatsRects[5].iRight = 103; gWeaponDescStatsRects[5].iBottom = 300; + gWeaponDescStatsRects[6].iLeft = 46; gWeaponDescStatsRects[6].iTop = 301; gWeaponDescStatsRects[6].iRight = 103; gWeaponDescStatsRects[6].iBottom = 312; + gWeaponDescStatsRects[7].iLeft = 111; gWeaponDescStatsRects[7].iTop = 241; gWeaponDescStatsRects[7].iRight = 168; gWeaponDescStatsRects[7].iBottom = 252; // Second Column + gWeaponDescStatsRects[8].iLeft = 111; gWeaponDescStatsRects[8].iTop = 253; gWeaponDescStatsRects[8].iRight = 168; gWeaponDescStatsRects[8].iBottom = 264; + gWeaponDescStatsRects[9].iLeft = 111; gWeaponDescStatsRects[9].iTop = 265; gWeaponDescStatsRects[9].iRight = 168; gWeaponDescStatsRects[9].iBottom = 276; + gWeaponDescStatsRects[10].iLeft = 111; gWeaponDescStatsRects[10].iTop = 277; gWeaponDescStatsRects[10].iRight = 168; gWeaponDescStatsRects[10].iBottom = 288; + gWeaponDescStatsRects[11].iLeft = 111; gWeaponDescStatsRects[11].iTop = 289; gWeaponDescStatsRects[11].iRight = 168; gWeaponDescStatsRects[11].iBottom = 300; + gWeaponDescStatsRects[12].iLeft = 111; gWeaponDescStatsRects[12].iTop = 301; gWeaponDescStatsRects[12].iRight = 168; gWeaponDescStatsRects[12].iBottom = 312; + gWeaponDescStatsRects[13].iLeft = 173; gWeaponDescStatsRects[13].iTop = 229; gWeaponDescStatsRects[13].iRight = 230; gWeaponDescStatsRects[13].iBottom = 240; // Third Column + gWeaponDescStatsRects[14].iLeft = 173; gWeaponDescStatsRects[14].iTop = 241; gWeaponDescStatsRects[14].iRight = 230; gWeaponDescStatsRects[14].iBottom = 252; + gWeaponDescStatsRects[15].iLeft = 173; gWeaponDescStatsRects[15].iTop = 253; gWeaponDescStatsRects[15].iRight = 230; gWeaponDescStatsRects[15].iBottom = 264; + gWeaponDescStatsRects[16].iLeft = 173; gWeaponDescStatsRects[16].iTop = 265; gWeaponDescStatsRects[16].iRight = 230; gWeaponDescStatsRects[16].iBottom = 276; + gWeaponDescStatsRects[17].iLeft = 173; gWeaponDescStatsRects[17].iTop = 277; gWeaponDescStatsRects[17].iRight = 230; gWeaponDescStatsRects[17].iBottom = 288; + gWeaponDescStatsRects[18].iLeft = 173; gWeaponDescStatsRects[18].iTop = 289; gWeaponDescStatsRects[18].iRight = 230; gWeaponDescStatsRects[18].iBottom = 300; + gWeaponDescStatsRects[19].iLeft = 173; gWeaponDescStatsRects[19].iTop = 301; gWeaponDescStatsRects[19].iRight = 230; gWeaponDescStatsRects[19].iBottom = 312; + + gAmmoDescStatsRects[0].iLeft = 46; gAmmoDescStatsRects[0].iTop = 229; gAmmoDescStatsRects[0].iRight = 103; gAmmoDescStatsRects[0].iBottom = 240; // First Column + gAmmoDescStatsRects[1].iLeft = 46; gAmmoDescStatsRects[1].iTop = 241; gAmmoDescStatsRects[1].iRight = 103; gAmmoDescStatsRects[1].iBottom = 252; + gAmmoDescStatsRects[2].iLeft = 46; gAmmoDescStatsRects[2].iTop = 253; gAmmoDescStatsRects[2].iRight = 103; gAmmoDescStatsRects[2].iBottom = 264; + gAmmoDescStatsRects[3].iLeft = 113; gAmmoDescStatsRects[3].iTop = 229; gAmmoDescStatsRects[3].iRight = 135; gAmmoDescStatsRects[3].iBottom = 252; // Second Column + gAmmoDescStatsRects[4].iLeft = 140; gAmmoDescStatsRects[4].iTop = 229; gAmmoDescStatsRects[4].iRight = 165; gAmmoDescStatsRects[4].iBottom = 252; + gAmmoDescStatsRects[5].iLeft = 113; gAmmoDescStatsRects[5].iTop = 253; gAmmoDescStatsRects[5].iRight = 135; gAmmoDescStatsRects[5].iBottom = 276; + gAmmoDescStatsRects[6].iLeft = 140; gAmmoDescStatsRects[6].iTop = 253; gAmmoDescStatsRects[6].iRight = 165; gAmmoDescStatsRects[6].iBottom = 276; + gAmmoDescStatsRects[7].iLeft = 113; gAmmoDescStatsRects[7].iTop = 277; gAmmoDescStatsRects[7].iRight = 135; gAmmoDescStatsRects[7].iBottom = 300; + gAmmoDescStatsRects[8].iLeft = 173; gAmmoDescStatsRects[8].iTop = 229; gAmmoDescStatsRects[8].iRight = 230; gAmmoDescStatsRects[8].iBottom = 240; // Third Column + gAmmoDescStatsRects[9].iLeft = 173; gAmmoDescStatsRects[9].iTop = 241; gAmmoDescStatsRects[9].iRight = 230; gAmmoDescStatsRects[9].iBottom = 252; + gAmmoDescStatsRects[10].iLeft = 173; gAmmoDescStatsRects[10].iTop = 253; gAmmoDescStatsRects[10].iRight = 230; gAmmoDescStatsRects[10].iBottom = 264; + gAmmoDescStatsRects[11].iLeft = 173; gAmmoDescStatsRects[11].iTop = 265; gAmmoDescStatsRects[11].iRight = 230; gAmmoDescStatsRects[11].iBottom = 276; + gAmmoDescStatsRects[12].iLeft = 173; gAmmoDescStatsRects[12].iTop = 277; gAmmoDescStatsRects[12].iRight = 230; gAmmoDescStatsRects[12].iBottom = 288; // Fourth Column + gAmmoDescStatsRects[13].iLeft = 173; gAmmoDescStatsRects[13].iTop = 289; gAmmoDescStatsRects[13].iRight = 230; gAmmoDescStatsRects[13].iBottom = 300; + gAmmoDescStatsRects[14].iLeft = 0; gAmmoDescStatsRects[14].iTop = 0; gAmmoDescStatsRects[14].iRight = 1; gAmmoDescStatsRects[14].iBottom = 1; // Placeholders + gAmmoDescStatsRects[15].iLeft = 0; gAmmoDescStatsRects[15].iTop = 0; gAmmoDescStatsRects[15].iRight = 1; gAmmoDescStatsRects[15].iBottom = 1; + gAmmoDescStatsRects[16].iLeft = 0; gAmmoDescStatsRects[16].iTop = 0; gAmmoDescStatsRects[16].iRight = 1; gAmmoDescStatsRects[16].iBottom = 1; + gAmmoDescStatsRects[17].iLeft = 0; gAmmoDescStatsRects[17].iTop = 0; gAmmoDescStatsRects[17].iRight = 1; gAmmoDescStatsRects[17].iBottom = 1; + gAmmoDescStatsRects[18].iLeft = 0; gAmmoDescStatsRects[18].iTop = 0; gAmmoDescStatsRects[18].iRight = 1; gAmmoDescStatsRects[18].iBottom = 1; + gAmmoDescStatsRects[19].iLeft = 0; gAmmoDescStatsRects[19].iTop = 0; gAmmoDescStatsRects[19].iRight = 1; gAmmoDescStatsRects[19].iBottom = 1; + + gArmorDescStatsRects[0].iLeft = 46; gArmorDescStatsRects[0].iTop = 229; gArmorDescStatsRects[0].iRight = 103; gArmorDescStatsRects[0].iBottom = 240; // First Column + gArmorDescStatsRects[1].iLeft = 46; gArmorDescStatsRects[1].iTop = 241; gArmorDescStatsRects[1].iRight = 103; gArmorDescStatsRects[1].iBottom = 252; + gArmorDescStatsRects[2].iLeft = 46; gArmorDescStatsRects[2].iTop = 253; gArmorDescStatsRects[2].iRight = 103; gArmorDescStatsRects[2].iBottom = 264; + gArmorDescStatsRects[3].iLeft = 111; gArmorDescStatsRects[3].iTop = 229; gArmorDescStatsRects[3].iRight = 168; gArmorDescStatsRects[3].iBottom = 240; // Second Column + gArmorDescStatsRects[4].iLeft = 111; gArmorDescStatsRects[4].iTop = 241; gArmorDescStatsRects[4].iRight = 168; gArmorDescStatsRects[4].iBottom = 252; + gArmorDescStatsRects[5].iLeft = 111; gArmorDescStatsRects[5].iTop = 253; gArmorDescStatsRects[5].iRight = 168; gArmorDescStatsRects[5].iBottom = 264; + gArmorDescStatsRects[6].iLeft = 111; gArmorDescStatsRects[6].iTop = 265; gArmorDescStatsRects[6].iRight = 168; gArmorDescStatsRects[6].iBottom = 276; + gArmorDescStatsRects[7].iLeft = 111; gArmorDescStatsRects[7].iTop = 277; gArmorDescStatsRects[7].iRight = 168; gArmorDescStatsRects[7].iBottom = 288; + gArmorDescStatsRects[8].iLeft = 111; gArmorDescStatsRects[8].iTop = 289; gArmorDescStatsRects[8].iRight = 168; gArmorDescStatsRects[8].iBottom = 300; + gArmorDescStatsRects[9].iLeft = 111; gArmorDescStatsRects[9].iTop = 301; gArmorDescStatsRects[9].iRight = 168; gArmorDescStatsRects[9].iBottom = 312; + gArmorDescStatsRects[10].iLeft = 173; gArmorDescStatsRects[10].iTop = 229; gArmorDescStatsRects[10].iRight = 230; gArmorDescStatsRects[10].iBottom = 240; // Third Column + gArmorDescStatsRects[11].iLeft = 173; gArmorDescStatsRects[11].iTop = 241; gArmorDescStatsRects[11].iRight = 230; gArmorDescStatsRects[11].iBottom = 252; + gArmorDescStatsRects[12].iLeft = 173; gArmorDescStatsRects[12].iTop = 253; gArmorDescStatsRects[12].iRight = 230; gArmorDescStatsRects[12].iBottom = 264; + gArmorDescStatsRects[13].iLeft = 173; gArmorDescStatsRects[13].iTop = 265; gArmorDescStatsRects[13].iRight = 230; gArmorDescStatsRects[13].iBottom = 276; + gArmorDescStatsRects[14].iLeft = 173; gArmorDescStatsRects[14].iTop = 277; gArmorDescStatsRects[14].iRight = 230; gArmorDescStatsRects[14].iBottom = 288; + gArmorDescStatsRects[15].iLeft = 173; gArmorDescStatsRects[15].iTop = 289; gArmorDescStatsRects[15].iRight = 230; gArmorDescStatsRects[15].iBottom = 300; + gArmorDescStatsRects[16].iLeft = 173; gArmorDescStatsRects[16].iTop = 301; gArmorDescStatsRects[16].iRight = 230; gArmorDescStatsRects[16].iBottom = 312; + gArmorDescStatsRects[17].iLeft = 0; gArmorDescStatsRects[17].iTop = 0; gArmorDescStatsRects[17].iRight = 1; gArmorDescStatsRects[17].iBottom = 1; // Placeholders + gArmorDescStatsRects[18].iLeft = 0; gArmorDescStatsRects[18].iTop = 0; gArmorDescStatsRects[18].iRight = 1; gArmorDescStatsRects[18].iBottom = 1; + gArmorDescStatsRects[19].iLeft = 0; gArmorDescStatsRects[19].iTop = 0; gArmorDescStatsRects[19].iRight = 1; gArmorDescStatsRects[19].iBottom = 1; + + gExplosiveDescStatsRects[0].iLeft = 46; gExplosiveDescStatsRects[0].iTop = 229; gExplosiveDescStatsRects[0].iRight = 103; gExplosiveDescStatsRects[0].iBottom = 240; // First Column + gExplosiveDescStatsRects[1].iLeft = 46; gExplosiveDescStatsRects[1].iTop = 241; gExplosiveDescStatsRects[1].iRight = 103; gExplosiveDescStatsRects[1].iBottom = 252; + gExplosiveDescStatsRects[2].iLeft = 46; gExplosiveDescStatsRects[2].iTop = 253; gExplosiveDescStatsRects[2].iRight = 103; gExplosiveDescStatsRects[2].iBottom = 264; + gExplosiveDescStatsRects[3].iLeft = 46; gExplosiveDescStatsRects[3].iTop = 265; gExplosiveDescStatsRects[3].iRight = 103; gExplosiveDescStatsRects[3].iBottom = 276; + gExplosiveDescStatsRects[4].iLeft = 131; gExplosiveDescStatsRects[4].iTop = 229; gExplosiveDescStatsRects[4].iRight = 147; gExplosiveDescStatsRects[4].iBottom = 264; // Second Column + gExplosiveDescStatsRects[5].iLeft = 113; gExplosiveDescStatsRects[5].iTop = 229; gExplosiveDescStatsRects[5].iRight = 129; gExplosiveDescStatsRects[5].iBottom = 264; + gExplosiveDescStatsRects[6].iLeft = 145; gExplosiveDescStatsRects[6].iTop = 229; gExplosiveDescStatsRects[6].iRight = 165; gExplosiveDescStatsRects[6].iBottom = 264; + gExplosiveDescStatsRects[7].iLeft = 111; gExplosiveDescStatsRects[7].iTop = 277; gExplosiveDescStatsRects[7].iRight = 168; gExplosiveDescStatsRects[7].iBottom = 288; + gExplosiveDescStatsRects[8].iLeft = 0; gExplosiveDescStatsRects[8].iTop = 0; gExplosiveDescStatsRects[8].iRight = 1; gExplosiveDescStatsRects[8].iBottom = 1; // Placeholders + gExplosiveDescStatsRects[9].iLeft = 0; gExplosiveDescStatsRects[9].iTop = 0; gExplosiveDescStatsRects[9].iRight = 1; gExplosiveDescStatsRects[9].iBottom = 1; + gExplosiveDescStatsRects[10].iLeft = 0; gExplosiveDescStatsRects[10].iTop = 0; gExplosiveDescStatsRects[10].iRight = 1; gExplosiveDescStatsRects[10].iBottom = 1; + gExplosiveDescStatsRects[11].iLeft = 0; gExplosiveDescStatsRects[11].iTop = 0; gExplosiveDescStatsRects[11].iRight = 1; gExplosiveDescStatsRects[11].iBottom = 1; + gExplosiveDescStatsRects[12].iLeft = 0; gExplosiveDescStatsRects[12].iTop = 0; gExplosiveDescStatsRects[12].iRight = 1; gExplosiveDescStatsRects[12].iBottom = 1; + gExplosiveDescStatsRects[13].iLeft = 0; gExplosiveDescStatsRects[13].iTop = 0; gExplosiveDescStatsRects[13].iRight = 1; gExplosiveDescStatsRects[13].iBottom = 1; + gExplosiveDescStatsRects[14].iLeft = 0; gExplosiveDescStatsRects[14].iTop = 0; gExplosiveDescStatsRects[14].iRight = 1; gExplosiveDescStatsRects[14].iBottom = 1; + gExplosiveDescStatsRects[15].iLeft = 0; gExplosiveDescStatsRects[15].iTop = 0; gExplosiveDescStatsRects[15].iRight = 1; gExplosiveDescStatsRects[15].iBottom = 1; + gExplosiveDescStatsRects[16].iLeft = 0; gExplosiveDescStatsRects[16].iTop = 0; gExplosiveDescStatsRects[16].iRight = 1; gExplosiveDescStatsRects[16].iBottom = 1; + gExplosiveDescStatsRects[17].iLeft = 0; gExplosiveDescStatsRects[17].iTop = 0; gExplosiveDescStatsRects[17].iRight = 1; gExplosiveDescStatsRects[17].iBottom = 1; + gExplosiveDescStatsRects[18].iLeft = 0; gExplosiveDescStatsRects[18].iTop = 0; gExplosiveDescStatsRects[18].iRight = 1; gExplosiveDescStatsRects[18].iBottom = 1; + gExplosiveDescStatsRects[19].iLeft = 0; gExplosiveDescStatsRects[19].iTop = 0; gExplosiveDescStatsRects[19].iRight = 1; gExplosiveDescStatsRects[19].iBottom = 1; + + gMiscItemDescStatsRects[0].iLeft = 46; gMiscItemDescStatsRects[0].iTop = 229; gMiscItemDescStatsRects[0].iRight = 103; gMiscItemDescStatsRects[0].iBottom = 240; // First Column + gMiscItemDescStatsRects[1].iLeft = 46; gMiscItemDescStatsRects[1].iTop = 241; gMiscItemDescStatsRects[1].iRight = 103; gMiscItemDescStatsRects[1].iBottom = 252; + gMiscItemDescStatsRects[2].iLeft = 46; gMiscItemDescStatsRects[2].iTop = 253; gMiscItemDescStatsRects[2].iRight = 103; gMiscItemDescStatsRects[2].iBottom = 264; + gMiscItemDescStatsRects[3].iLeft = 46; gMiscItemDescStatsRects[3].iTop = 265; gMiscItemDescStatsRects[3].iRight = 103; gMiscItemDescStatsRects[3].iBottom = 276; + gMiscItemDescStatsRects[4].iLeft = 46; gMiscItemDescStatsRects[4].iTop = 277; gMiscItemDescStatsRects[4].iRight = 103; gMiscItemDescStatsRects[4].iBottom = 288; + gMiscItemDescStatsRects[5].iLeft = 46; gMiscItemDescStatsRects[5].iTop = 289; gMiscItemDescStatsRects[5].iRight = 103; gMiscItemDescStatsRects[5].iBottom = 300; + gMiscItemDescStatsRects[6].iLeft = 46; gMiscItemDescStatsRects[6].iTop = 301; gMiscItemDescStatsRects[6].iRight = 103; gMiscItemDescStatsRects[6].iBottom = 312; + gMiscItemDescStatsRects[7].iLeft = 144; gMiscItemDescStatsRects[7].iTop = 229; gMiscItemDescStatsRects[7].iRight = 230; gMiscItemDescStatsRects[7].iBottom = 240; // First Column + gMiscItemDescStatsRects[8].iLeft = 144; gMiscItemDescStatsRects[8].iTop = 241; gMiscItemDescStatsRects[8].iRight = 230; gMiscItemDescStatsRects[8].iBottom = 252; + gMiscItemDescStatsRects[9].iLeft = 144; gMiscItemDescStatsRects[9].iTop = 253; gMiscItemDescStatsRects[9].iRight = 230; gMiscItemDescStatsRects[9].iBottom = 264; + gMiscItemDescStatsRects[10].iLeft = 144; gMiscItemDescStatsRects[10].iTop = 265; gMiscItemDescStatsRects[10].iRight = 230; gMiscItemDescStatsRects[10].iBottom = 276; + gMiscItemDescStatsRects[11].iLeft = 144; gMiscItemDescStatsRects[11].iTop = 277; gMiscItemDescStatsRects[11].iRight = 230; gMiscItemDescStatsRects[11].iBottom = 288; + gMiscItemDescStatsRects[12].iLeft = 144; gMiscItemDescStatsRects[12].iTop = 289; gMiscItemDescStatsRects[12].iRight = 230; gMiscItemDescStatsRects[12].iBottom = 300; + gMiscItemDescStatsRects[13].iLeft = 144; gMiscItemDescStatsRects[13].iTop = 301; gMiscItemDescStatsRects[13].iRight = 230; gMiscItemDescStatsRects[13].iBottom = 312; + gMiscItemDescStatsRects[14].iLeft = 0; gMiscItemDescStatsRects[14].iTop = 0; gMiscItemDescStatsRects[14].iRight = 1; gMiscItemDescStatsRects[14].iBottom = 1; // Placeholders + gMiscItemDescStatsRects[15].iLeft = 0; gMiscItemDescStatsRects[15].iTop = 0; gMiscItemDescStatsRects[15].iRight = 1; gMiscItemDescStatsRects[15].iBottom = 1; + gMiscItemDescStatsRects[16].iLeft = 0; gMiscItemDescStatsRects[16].iTop = 0; gMiscItemDescStatsRects[16].iRight = 1; gMiscItemDescStatsRects[16].iBottom = 1; + gMiscItemDescStatsRects[17].iLeft = 0; gMiscItemDescStatsRects[17].iTop = 0; gMiscItemDescStatsRects[17].iRight = 1; gMiscItemDescStatsRects[17].iBottom = 1; + gMiscItemDescStatsRects[18].iLeft = 0; gMiscItemDescStatsRects[18].iTop = 0; gMiscItemDescStatsRects[18].iRight = 1; gMiscItemDescStatsRects[18].iBottom = 1; + gMiscItemDescStatsRects[19].iLeft = 0; gMiscItemDescStatsRects[19].iTop = 0; gMiscItemDescStatsRects[19].iRight = 1; gMiscItemDescStatsRects[19].iBottom = 1; + } + else + { + if (UsingEDBSystem() == 1) + { + // Icon Locations + gMiscItemStatsEDB[0].sX = 203; gMiscItemStatsEDB[0].sY = 44; gMiscItemStatsEDB[0].sValDx = 0; // 0) COL 1; ROW 1 + gMiscItemStatsEDB[1].sX = 203; gMiscItemStatsEDB[1].sY = 56; gMiscItemStatsEDB[1].sValDx = 0; // 1) COL 1; ROW 2 + gMiscItemStatsEDB[2].sX = 203; gMiscItemStatsEDB[2].sY = 68; gMiscItemStatsEDB[2].sValDx = 0; // 2) COL 1; ROW 3 + gMiscItemStatsEDB[3].sX = 203; gMiscItemStatsEDB[3].sY = 80; gMiscItemStatsEDB[3].sValDx = 0; // 3) COL 1; ROW 4 + gMiscItemStatsEDB[4].sX = 203; gMiscItemStatsEDB[4].sY = 92; gMiscItemStatsEDB[4].sValDx = 0; // 4) COL 1; ROW 5 + gMiscItemStatsEDB[5].sX = 203; gMiscItemStatsEDB[5].sY = 104; gMiscItemStatsEDB[5].sValDx = 0; // 5) COL 1; ROW 6 + gMiscItemStatsEDB[6].sX = 203; gMiscItemStatsEDB[6].sY = 116; gMiscItemStatsEDB[6].sValDx = 0; // 6) COL 1; ROW 7 + gMiscItemStatsEDB[7].sX = 203; gMiscItemStatsEDB[7].sY = 128; gMiscItemStatsEDB[7].sValDx = 0; // 7) COL 1; ROW 8 + gMiscItemStatsEDB[8].sX = 203; gMiscItemStatsEDB[8].sY = 140; gMiscItemStatsEDB[8].sValDx = 0; // 8) COL 1; ROW 9 + gMiscItemStatsEDB[9].sX = 203; gMiscItemStatsEDB[9].sY = 152; gMiscItemStatsEDB[9].sValDx = 0; // 9) COL 1; ROW 10 + gMiscItemStatsEDB[10].sX = 203; gMiscItemStatsEDB[10].sY = 164; gMiscItemStatsEDB[10].sValDx = 0; // 10) COL 1; ROW 11 + gMiscItemStatsEDB[11].sX = 203; gMiscItemStatsEDB[11].sY = 176; gMiscItemStatsEDB[11].sValDx = 0; // 11) COL 1; ROW 12 + // EQUALS signs Locations + gMiscItemStatsEDB[12].sX = 283; gMiscItemStatsEDB[12].sY = 44; gMiscItemStatsEDB[12].sValDx = 12; // 12) COL 1; ROW 1 + gMiscItemStatsEDB[13].sX = 283; gMiscItemStatsEDB[13].sY = 56; gMiscItemStatsEDB[13].sValDx = 12; // 13) COL 1; ROW 2 + gMiscItemStatsEDB[14].sX = 283; gMiscItemStatsEDB[14].sY = 68; gMiscItemStatsEDB[14].sValDx = 12; // 14) COL 1; ROW 3 + gMiscItemStatsEDB[15].sX = 283; gMiscItemStatsEDB[15].sY = 80; gMiscItemStatsEDB[15].sValDx = 12; // 15) COL 1; ROW 4 + gMiscItemStatsEDB[16].sX = 283; gMiscItemStatsEDB[16].sY = 92; gMiscItemStatsEDB[16].sValDx = 12; // 16) COL 1; ROW 5 + gMiscItemStatsEDB[17].sX = 283; gMiscItemStatsEDB[17].sY = 104; gMiscItemStatsEDB[17].sValDx = 12; // 17) COL 1; ROW 6 + gMiscItemStatsEDB[18].sX = 283; gMiscItemStatsEDB[18].sY = 116; gMiscItemStatsEDB[18].sValDx = 12; // 18) COL 1; ROW 7 + gMiscItemStatsEDB[19].sX = 283; gMiscItemStatsEDB[19].sY = 128; gMiscItemStatsEDB[19].sValDx = 12; // 19) COL 1; ROW 8 + gMiscItemStatsEDB[20].sX = 283; gMiscItemStatsEDB[20].sY = 140; gMiscItemStatsEDB[20].sValDx = 12; // 20) COL 1; ROW 9 + gMiscItemStatsEDB[21].sX = 283; gMiscItemStatsEDB[21].sY = 152; gMiscItemStatsEDB[21].sValDx = 12; // 21) COL 1; ROW 10 + gMiscItemStatsEDB[22].sX = 283; gMiscItemStatsEDB[22].sY = 164; gMiscItemStatsEDB[22].sValDx = 12; // 22) COL 1; ROW 11 + gMiscItemStatsEDB[23].sX = 283; gMiscItemStatsEDB[23].sY = 176; gMiscItemStatsEDB[23].sValDx = 12; // 23) COL 1; ROW 12 + // MISC + gMiscItemStatsEDB[24].sX = 0; gMiscItemStatsEDB[24].sY = 0; gMiscItemStatsEDB[24].sValDx = 0; + gMiscItemStatsEDB[25].sX = 0; gMiscItemStatsEDB[25].sY = 0; gMiscItemStatsEDB[25].sValDx = 0; + gMiscItemStatsEDB[26].sX = 0; gMiscItemStatsEDB[26].sY = 0; gMiscItemStatsEDB[26].sValDx = 0; + gMiscItemStatsEDB[27].sX = 0; gMiscItemStatsEDB[27].sY = 0; gMiscItemStatsEDB[27].sValDx = 0; + + gWeaponDescStatsRects[0].iLeft = 202; gWeaponDescStatsRects[0].iTop = 42; gWeaponDescStatsRects[0].iRight = 260; gWeaponDescStatsRects[0].iBottom = 53; // First Column + gWeaponDescStatsRects[1].iLeft = 202; gWeaponDescStatsRects[1].iTop = 54; gWeaponDescStatsRects[1].iRight = 260; gWeaponDescStatsRects[1].iBottom = 65; + gWeaponDescStatsRects[2].iLeft = 202; gWeaponDescStatsRects[2].iTop = 66; gWeaponDescStatsRects[2].iRight = 260; gWeaponDescStatsRects[2].iBottom = 77; + gWeaponDescStatsRects[3].iLeft = 202; gWeaponDescStatsRects[3].iTop = 78; gWeaponDescStatsRects[3].iRight = 260; gWeaponDescStatsRects[3].iBottom = 89; + gWeaponDescStatsRects[4].iLeft = 202; gWeaponDescStatsRects[4].iTop = 90; gWeaponDescStatsRects[4].iRight = 260; gWeaponDescStatsRects[4].iBottom = 101; + gWeaponDescStatsRects[5].iLeft = 202; gWeaponDescStatsRects[5].iTop = 102; gWeaponDescStatsRects[5].iRight = 260; gWeaponDescStatsRects[5].iBottom = 113; + gWeaponDescStatsRects[6].iLeft = 202; gWeaponDescStatsRects[6].iTop = 114; gWeaponDescStatsRects[6].iRight = 260; gWeaponDescStatsRects[6].iBottom = 125; + gWeaponDescStatsRects[7].iLeft = 267; gWeaponDescStatsRects[7].iTop = 54; gWeaponDescStatsRects[7].iRight = 325; gWeaponDescStatsRects[7].iBottom = 65; // Second Column + gWeaponDescStatsRects[8].iLeft = 267; gWeaponDescStatsRects[8].iTop = 66; gWeaponDescStatsRects[8].iRight = 325; gWeaponDescStatsRects[8].iBottom = 77; + gWeaponDescStatsRects[9].iLeft = 267; gWeaponDescStatsRects[9].iTop = 78; gWeaponDescStatsRects[9].iRight = 325; gWeaponDescStatsRects[9].iBottom = 89; + gWeaponDescStatsRects[10].iLeft = 267; gWeaponDescStatsRects[10].iTop = 90; gWeaponDescStatsRects[10].iRight = 325; gWeaponDescStatsRects[10].iBottom = 101; + gWeaponDescStatsRects[11].iLeft = 267; gWeaponDescStatsRects[11].iTop = 102; gWeaponDescStatsRects[11].iRight = 325; gWeaponDescStatsRects[11].iBottom = 113; + gWeaponDescStatsRects[12].iLeft = 267; gWeaponDescStatsRects[12].iTop = 114; gWeaponDescStatsRects[12].iRight = 325; gWeaponDescStatsRects[12].iBottom = 125; + gWeaponDescStatsRects[13].iLeft = 267; gWeaponDescStatsRects[13].iTop = 134; gWeaponDescStatsRects[13].iRight = 325; gWeaponDescStatsRects[13].iBottom = 145; + gWeaponDescStatsRects[14].iLeft = 267; gWeaponDescStatsRects[14].iTop = 146; gWeaponDescStatsRects[14].iRight = 325; gWeaponDescStatsRects[14].iBottom = 157; + gWeaponDescStatsRects[15].iLeft = 267; gWeaponDescStatsRects[15].iTop = 158; gWeaponDescStatsRects[15].iRight = 325; gWeaponDescStatsRects[15].iBottom = 169; + gWeaponDescStatsRects[16].iLeft = 267; gWeaponDescStatsRects[16].iTop = 170; gWeaponDescStatsRects[16].iRight = 325; gWeaponDescStatsRects[16].iBottom = 181; + gWeaponDescStatsRects[17].iLeft = 225; gWeaponDescStatsRects[17].iTop = 134; gWeaponDescStatsRects[17].iRight = 241; gWeaponDescStatsRects[17].iBottom = 157; + gWeaponDescStatsRects[18].iLeft = 202; gWeaponDescStatsRects[18].iTop = 158; gWeaponDescStatsRects[18].iRight = 260; gWeaponDescStatsRects[18].iBottom = 169; + gWeaponDescStatsRects[19].iLeft = 202; gWeaponDescStatsRects[19].iTop = 170; gWeaponDescStatsRects[19].iRight = 260; gWeaponDescStatsRects[19].iBottom = 181; + + gAmmoDescStatsRects[0].iLeft = 202; gAmmoDescStatsRects[0].iTop = 42; gAmmoDescStatsRects[0].iRight = 260; gAmmoDescStatsRects[0].iBottom = 53; // First Column + gAmmoDescStatsRects[1].iLeft = 202; gAmmoDescStatsRects[1].iTop = 54; gAmmoDescStatsRects[1].iRight = 260; gAmmoDescStatsRects[1].iBottom = 65; + gAmmoDescStatsRects[2].iLeft = 202; gAmmoDescStatsRects[2].iTop = 66; gAmmoDescStatsRects[2].iRight = 260; gAmmoDescStatsRects[2].iBottom = 77; + gAmmoDescStatsRects[3].iLeft = 269; gAmmoDescStatsRects[3].iTop = 42; gAmmoDescStatsRects[3].iRight = 291; gAmmoDescStatsRects[3].iBottom = 65; // Second Column + gAmmoDescStatsRects[4].iLeft = 296; gAmmoDescStatsRects[4].iTop = 42; gAmmoDescStatsRects[4].iRight = 321; gAmmoDescStatsRects[4].iBottom = 65; + gAmmoDescStatsRects[5].iLeft = 269; gAmmoDescStatsRects[5].iTop = 66; gAmmoDescStatsRects[5].iRight = 291; gAmmoDescStatsRects[5].iBottom = 89; + gAmmoDescStatsRects[6].iLeft = 296; gAmmoDescStatsRects[6].iTop = 66; gAmmoDescStatsRects[6].iRight = 321; gAmmoDescStatsRects[6].iBottom = 89; + gAmmoDescStatsRects[7].iLeft = 269; gAmmoDescStatsRects[7].iTop = 90; gAmmoDescStatsRects[7].iRight = 291; gAmmoDescStatsRects[7].iBottom = 113; + gAmmoDescStatsRects[8].iLeft = 202; gAmmoDescStatsRects[8].iTop = 134; gAmmoDescStatsRects[8].iRight = 260; gAmmoDescStatsRects[8].iBottom = 145; // Third Column + gAmmoDescStatsRects[9].iLeft = 202; gAmmoDescStatsRects[9].iTop = 146; gAmmoDescStatsRects[9].iRight = 260; gAmmoDescStatsRects[9].iBottom = 157; + gAmmoDescStatsRects[10].iLeft = 202; gAmmoDescStatsRects[10].iTop = 158; gAmmoDescStatsRects[10].iRight = 260; gAmmoDescStatsRects[10].iBottom = 169; + gAmmoDescStatsRects[11].iLeft = 202; gAmmoDescStatsRects[11].iTop = 170; gAmmoDescStatsRects[11].iRight = 260; gAmmoDescStatsRects[11].iBottom = 181; + gAmmoDescStatsRects[12].iLeft = 267; gAmmoDescStatsRects[12].iTop = 134; gAmmoDescStatsRects[12].iRight = 325; gAmmoDescStatsRects[12].iBottom = 145; // Fourth Column + gAmmoDescStatsRects[13].iLeft = 267; gAmmoDescStatsRects[13].iTop = 146; gAmmoDescStatsRects[13].iRight = 325; gAmmoDescStatsRects[13].iBottom = 1; + gAmmoDescStatsRects[14].iLeft = 0; gAmmoDescStatsRects[14].iTop = 0; gAmmoDescStatsRects[14].iRight = 1; gAmmoDescStatsRects[14].iBottom = 1; // Placeholders + gAmmoDescStatsRects[15].iLeft = 0; gAmmoDescStatsRects[15].iTop = 0; gAmmoDescStatsRects[15].iRight = 1; gAmmoDescStatsRects[15].iBottom = 1; + gAmmoDescStatsRects[16].iLeft = 0; gAmmoDescStatsRects[16].iTop = 0; gAmmoDescStatsRects[16].iRight = 1; gAmmoDescStatsRects[16].iBottom = 1; + gAmmoDescStatsRects[17].iLeft = 0; gAmmoDescStatsRects[17].iTop = 0; gAmmoDescStatsRects[17].iRight = 1; gAmmoDescStatsRects[17].iBottom = 1; + gAmmoDescStatsRects[18].iLeft = 0; gAmmoDescStatsRects[18].iTop = 0; gAmmoDescStatsRects[18].iRight = 1; gAmmoDescStatsRects[18].iBottom = 1; + gAmmoDescStatsRects[19].iLeft = 0; gAmmoDescStatsRects[19].iTop = 0; gAmmoDescStatsRects[19].iRight = 1; gAmmoDescStatsRects[19].iBottom = 1; + + gArmorDescStatsRects[0].iLeft = 202; gArmorDescStatsRects[0].iTop = 42; gArmorDescStatsRects[0].iRight = 260; gArmorDescStatsRects[0].iBottom = 53; // First Column + gArmorDescStatsRects[1].iLeft = 202; gArmorDescStatsRects[1].iTop = 54; gArmorDescStatsRects[1].iRight = 260; gArmorDescStatsRects[1].iBottom = 65; + gArmorDescStatsRects[2].iLeft = 202; gArmorDescStatsRects[2].iTop = 66; gArmorDescStatsRects[2].iRight = 260; gArmorDescStatsRects[2].iBottom = 77; + gArmorDescStatsRects[3].iLeft = 267; gArmorDescStatsRects[3].iTop = 42; gArmorDescStatsRects[3].iRight = 325; gArmorDescStatsRects[3].iBottom = 53; // Second Column + gArmorDescStatsRects[4].iLeft = 267; gArmorDescStatsRects[4].iTop = 54; gArmorDescStatsRects[4].iRight = 325; gArmorDescStatsRects[4].iBottom = 65; + gArmorDescStatsRects[5].iLeft = 267; gArmorDescStatsRects[5].iTop = 66; gArmorDescStatsRects[5].iRight = 325; gArmorDescStatsRects[5].iBottom = 77; + gArmorDescStatsRects[6].iLeft = 267; gArmorDescStatsRects[6].iTop = 78; gArmorDescStatsRects[6].iRight = 325; gArmorDescStatsRects[6].iBottom = 89; + gArmorDescStatsRects[7].iLeft = 267; gArmorDescStatsRects[7].iTop = 90; gArmorDescStatsRects[7].iRight = 325; gArmorDescStatsRects[7].iBottom = 101; + gArmorDescStatsRects[8].iLeft = 267; gArmorDescStatsRects[8].iTop = 102; gArmorDescStatsRects[8].iRight = 325; gArmorDescStatsRects[8].iBottom = 113; + gArmorDescStatsRects[9].iLeft = 267; gArmorDescStatsRects[9].iTop = 114; gArmorDescStatsRects[9].iRight = 325; gArmorDescStatsRects[9].iBottom = 125; + gArmorDescStatsRects[10].iLeft = 202; gArmorDescStatsRects[10].iTop = 134; gArmorDescStatsRects[10].iRight = 260; gArmorDescStatsRects[10].iBottom = 145; // Third Column + gArmorDescStatsRects[11].iLeft = 202; gArmorDescStatsRects[11].iTop = 146; gArmorDescStatsRects[11].iRight = 260; gArmorDescStatsRects[11].iBottom = 157; + gArmorDescStatsRects[12].iLeft = 202; gArmorDescStatsRects[12].iTop = 158; gArmorDescStatsRects[12].iRight = 260; gArmorDescStatsRects[12].iBottom = 169; + gArmorDescStatsRects[13].iLeft = 202; gArmorDescStatsRects[13].iTop = 170; gArmorDescStatsRects[13].iRight = 260; gArmorDescStatsRects[13].iBottom = 181; + gArmorDescStatsRects[14].iLeft = 267; gArmorDescStatsRects[14].iTop = 134; gArmorDescStatsRects[14].iRight = 325; gArmorDescStatsRects[14].iBottom = 145; // Fourth Column + gArmorDescStatsRects[15].iLeft = 267; gArmorDescStatsRects[15].iTop = 146; gArmorDescStatsRects[15].iRight = 325; gArmorDescStatsRects[15].iBottom = 157; + gArmorDescStatsRects[16].iLeft = 267; gArmorDescStatsRects[16].iTop = 158; gArmorDescStatsRects[16].iRight = 325; gArmorDescStatsRects[16].iBottom = 169; + gArmorDescStatsRects[17].iLeft = 0; gArmorDescStatsRects[17].iTop = 0; gArmorDescStatsRects[17].iRight = 1; gArmorDescStatsRects[17].iBottom = 1; // Placeholders + gArmorDescStatsRects[18].iLeft = 0; gArmorDescStatsRects[18].iTop = 0; gArmorDescStatsRects[18].iRight = 1; gArmorDescStatsRects[18].iBottom = 1; + gArmorDescStatsRects[19].iLeft = 0; gArmorDescStatsRects[19].iTop = 0; gArmorDescStatsRects[19].iRight = 1; gArmorDescStatsRects[19].iBottom = 1; + + gExplosiveDescStatsRects[0].iLeft = 202; gExplosiveDescStatsRects[0].iTop = 42; gExplosiveDescStatsRects[0].iRight = 260; gExplosiveDescStatsRects[0].iBottom = 53; // First Column + gExplosiveDescStatsRects[1].iLeft = 202; gExplosiveDescStatsRects[1].iTop = 54; gExplosiveDescStatsRects[1].iRight = 260; gExplosiveDescStatsRects[1].iBottom = 65; + gExplosiveDescStatsRects[2].iLeft = 202; gExplosiveDescStatsRects[2].iTop = 66; gExplosiveDescStatsRects[2].iRight = 260; gExplosiveDescStatsRects[2].iBottom = 77; + gExplosiveDescStatsRects[3].iLeft = 202; gExplosiveDescStatsRects[3].iTop = 78; gExplosiveDescStatsRects[3].iRight = 260; gExplosiveDescStatsRects[3].iBottom = 89; + gExplosiveDescStatsRects[4].iLeft = 290; gExplosiveDescStatsRects[4].iTop = 42; gExplosiveDescStatsRects[4].iRight = 306; gExplosiveDescStatsRects[4].iBottom = 77; // Second Column + gExplosiveDescStatsRects[5].iLeft = 269; gExplosiveDescStatsRects[5].iTop = 42; gExplosiveDescStatsRects[5].iRight = 285; gExplosiveDescStatsRects[5].iBottom = 77; + gExplosiveDescStatsRects[6].iLeft = 301; gExplosiveDescStatsRects[6].iTop = 42; gExplosiveDescStatsRects[6].iRight = 321; gExplosiveDescStatsRects[6].iBottom = 77; + gExplosiveDescStatsRects[7].iLeft = 267; gExplosiveDescStatsRects[7].iTop = 90; gExplosiveDescStatsRects[7].iRight = 325; gExplosiveDescStatsRects[7].iBottom = 101; + gExplosiveDescStatsRects[8].iLeft = 0; gExplosiveDescStatsRects[8].iTop = 0; gExplosiveDescStatsRects[8].iRight = 1; gExplosiveDescStatsRects[8].iBottom = 1; // Placeholders + gExplosiveDescStatsRects[9].iLeft = 0; gExplosiveDescStatsRects[9].iTop = 0; gExplosiveDescStatsRects[9].iRight = 1; gExplosiveDescStatsRects[9].iBottom = 1; + gExplosiveDescStatsRects[10].iLeft = 0; gExplosiveDescStatsRects[10].iTop = 0; gExplosiveDescStatsRects[10].iRight = 1; gExplosiveDescStatsRects[10].iBottom = 1; + gExplosiveDescStatsRects[11].iLeft = 0; gExplosiveDescStatsRects[11].iTop = 0; gExplosiveDescStatsRects[11].iRight = 1; gExplosiveDescStatsRects[11].iBottom = 1; + gExplosiveDescStatsRects[12].iLeft = 0; gExplosiveDescStatsRects[12].iTop = 0; gExplosiveDescStatsRects[12].iRight = 1; gExplosiveDescStatsRects[12].iBottom = 1; + gExplosiveDescStatsRects[13].iLeft = 0; gExplosiveDescStatsRects[13].iTop = 0; gExplosiveDescStatsRects[13].iRight = 1; gExplosiveDescStatsRects[13].iBottom = 1; + gExplosiveDescStatsRects[14].iLeft = 0; gExplosiveDescStatsRects[14].iTop = 0; gExplosiveDescStatsRects[14].iRight = 1; gExplosiveDescStatsRects[14].iBottom = 1; + gExplosiveDescStatsRects[15].iLeft = 0; gExplosiveDescStatsRects[15].iTop = 0; gExplosiveDescStatsRects[15].iRight = 1; gExplosiveDescStatsRects[15].iBottom = 1; + gExplosiveDescStatsRects[16].iLeft = 0; gExplosiveDescStatsRects[16].iTop = 0; gExplosiveDescStatsRects[16].iRight = 1; gExplosiveDescStatsRects[16].iBottom = 1; + gExplosiveDescStatsRects[17].iLeft = 0; gExplosiveDescStatsRects[17].iTop = 0; gExplosiveDescStatsRects[17].iRight = 1; gExplosiveDescStatsRects[17].iBottom = 1; + gExplosiveDescStatsRects[18].iLeft = 0; gExplosiveDescStatsRects[18].iTop = 0; gExplosiveDescStatsRects[18].iRight = 1; gExplosiveDescStatsRects[18].iBottom = 1; + gExplosiveDescStatsRects[19].iLeft = 0; gExplosiveDescStatsRects[19].iTop = 0; gExplosiveDescStatsRects[19].iRight = 1; gExplosiveDescStatsRects[19].iBottom = 1; + + gMiscItemDescStatsRects[0].iLeft = 202; gMiscItemDescStatsRects[0].iTop = 42; gMiscItemDescStatsRects[0].iRight = 325; gMiscItemDescStatsRects[0].iBottom = 53; // Only one column for misc items in tactical - 12 fields. + gMiscItemDescStatsRects[1].iLeft = 202; gMiscItemDescStatsRects[1].iTop = 54; gMiscItemDescStatsRects[1].iRight = 325; gMiscItemDescStatsRects[1].iBottom = 65; + gMiscItemDescStatsRects[2].iLeft = 202; gMiscItemDescStatsRects[2].iTop = 66; gMiscItemDescStatsRects[2].iRight = 325; gMiscItemDescStatsRects[2].iBottom = 77; + gMiscItemDescStatsRects[3].iLeft = 202; gMiscItemDescStatsRects[3].iTop = 78; gMiscItemDescStatsRects[3].iRight = 325; gMiscItemDescStatsRects[3].iBottom = 89; + gMiscItemDescStatsRects[4].iLeft = 202; gMiscItemDescStatsRects[4].iTop = 90; gMiscItemDescStatsRects[4].iRight = 325; gMiscItemDescStatsRects[4].iBottom = 101; + gMiscItemDescStatsRects[5].iLeft = 202; gMiscItemDescStatsRects[5].iTop = 102; gMiscItemDescStatsRects[5].iRight = 325; gMiscItemDescStatsRects[5].iBottom = 113; + gMiscItemDescStatsRects[6].iLeft = 202; gMiscItemDescStatsRects[6].iTop = 114; gMiscItemDescStatsRects[6].iRight = 325; gMiscItemDescStatsRects[6].iBottom = 125; + gMiscItemDescStatsRects[7].iLeft = 202; gMiscItemDescStatsRects[7].iTop = 126; gMiscItemDescStatsRects[7].iRight = 325; gMiscItemDescStatsRects[7].iBottom = 137; + gMiscItemDescStatsRects[8].iLeft = 202; gMiscItemDescStatsRects[8].iTop = 138; gMiscItemDescStatsRects[8].iRight = 325; gMiscItemDescStatsRects[8].iBottom = 149; + gMiscItemDescStatsRects[9].iLeft = 202; gMiscItemDescStatsRects[9].iTop = 150; gMiscItemDescStatsRects[9].iRight = 325; gMiscItemDescStatsRects[9].iBottom = 161; + gMiscItemDescStatsRects[10].iLeft = 202; gMiscItemDescStatsRects[10].iTop = 162; gMiscItemDescStatsRects[10].iRight = 325; gMiscItemDescStatsRects[10].iBottom = 173; + gMiscItemDescStatsRects[11].iLeft = 202; gMiscItemDescStatsRects[11].iTop = 174; gMiscItemDescStatsRects[11].iRight = 325; gMiscItemDescStatsRects[11].iBottom = 185; + gMiscItemDescStatsRects[12].iLeft = 0; gMiscItemDescStatsRects[12].iTop = 0; gMiscItemDescStatsRects[12].iRight = 1; gMiscItemDescStatsRects[12].iBottom = 1; // Placeholders + gMiscItemDescStatsRects[13].iLeft = 0; gMiscItemDescStatsRects[13].iTop = 0; gMiscItemDescStatsRects[13].iRight = 1; gMiscItemDescStatsRects[13].iBottom = 1; + gMiscItemDescStatsRects[14].iLeft = 0; gMiscItemDescStatsRects[14].iTop = 0; gMiscItemDescStatsRects[14].iRight = 1; gMiscItemDescStatsRects[14].iBottom = 1; + gMiscItemDescStatsRects[15].iLeft = 0; gMiscItemDescStatsRects[15].iTop = 0; gMiscItemDescStatsRects[15].iRight = 1; gMiscItemDescStatsRects[15].iBottom = 1; + gMiscItemDescStatsRects[16].iLeft = 0; gMiscItemDescStatsRects[16].iTop = 0; gMiscItemDescStatsRects[16].iRight = 1; gMiscItemDescStatsRects[16].iBottom = 1; + gMiscItemDescStatsRects[17].iLeft = 0; gMiscItemDescStatsRects[17].iTop = 0; gMiscItemDescStatsRects[17].iRight = 1; gMiscItemDescStatsRects[17].iBottom = 1; + gMiscItemDescStatsRects[18].iLeft = 0; gMiscItemDescStatsRects[18].iTop = 0; gMiscItemDescStatsRects[18].iRight = 1; gMiscItemDescStatsRects[18].iBottom = 1; + gMiscItemDescStatsRects[19].iLeft = 0; gMiscItemDescStatsRects[19].iTop = 0; gMiscItemDescStatsRects[19].iRight = 1; gMiscItemDescStatsRects[19].iBottom = 1; + } + else if (UsingEDBSystem() == 2) // Tactical OIV-EDB + { + // Icon Locations + gMiscItemStatsEDB[0].sX = 274; gMiscItemStatsEDB[0].sY = 14; gMiscItemStatsEDB[0].sValDx = 0; // 0) COL 1; ROW 1 + gMiscItemStatsEDB[1].sX = 274; gMiscItemStatsEDB[1].sY = 26; gMiscItemStatsEDB[1].sValDx = 0; // 1) COL 1; ROW 2 + gMiscItemStatsEDB[2].sX = 274; gMiscItemStatsEDB[2].sY = 38; gMiscItemStatsEDB[2].sValDx = 0; // 2) COL 1; ROW 3 + gMiscItemStatsEDB[3].sX = 274; gMiscItemStatsEDB[3].sY = 50; gMiscItemStatsEDB[3].sValDx = 0; // 3) COL 1; ROW 4 + gMiscItemStatsEDB[4].sX = 274; gMiscItemStatsEDB[4].sY = 62; gMiscItemStatsEDB[4].sValDx = 0; // 4) COL 1; ROW 5 + gMiscItemStatsEDB[5].sX = 274; gMiscItemStatsEDB[5].sY = 74; gMiscItemStatsEDB[5].sValDx = 0; // 5) COL 1; ROW 6 + gMiscItemStatsEDB[6].sX = 274; gMiscItemStatsEDB[6].sY = 86; gMiscItemStatsEDB[6].sValDx = 0; // 6) COL 1; ROW 7 + gMiscItemStatsEDB[7].sX = 375; gMiscItemStatsEDB[7].sY = 14; gMiscItemStatsEDB[7].sValDx = 0; // 7) COL 1; ROW 8 + gMiscItemStatsEDB[8].sX = 375; gMiscItemStatsEDB[8].sY = 26; gMiscItemStatsEDB[8].sValDx = 0; // 8) COL 1; ROW 9 + gMiscItemStatsEDB[9].sX = 375; gMiscItemStatsEDB[9].sY = 38; gMiscItemStatsEDB[9].sValDx = 0; // 9) COL 1; ROW 10 + gMiscItemStatsEDB[10].sX = 375; gMiscItemStatsEDB[10].sY = 50; gMiscItemStatsEDB[10].sValDx = 0; // 10) COL 1; ROW 11 + gMiscItemStatsEDB[11].sX = 375; gMiscItemStatsEDB[11].sY = 62; gMiscItemStatsEDB[11].sValDx = 0; // 11) COL 1; ROW 12 + // EQUALS signs Locations + gMiscItemStatsEDB[12].sX = 324; gMiscItemStatsEDB[12].sY = 14; gMiscItemStatsEDB[12].sValDx = 12; // 12) COL 1; ROW 1 + gMiscItemStatsEDB[13].sX = 324; gMiscItemStatsEDB[13].sY = 26; gMiscItemStatsEDB[13].sValDx = 12; // 13) COL 1; ROW 2 + gMiscItemStatsEDB[14].sX = 324; gMiscItemStatsEDB[14].sY = 38; gMiscItemStatsEDB[14].sValDx = 12; // 14) COL 1; ROW 3 + gMiscItemStatsEDB[15].sX = 324; gMiscItemStatsEDB[15].sY = 50; gMiscItemStatsEDB[15].sValDx = 12; // 15) COL 1; ROW 4 + gMiscItemStatsEDB[16].sX = 324; gMiscItemStatsEDB[16].sY = 62; gMiscItemStatsEDB[16].sValDx = 12; // 16) COL 1; ROW 5 + gMiscItemStatsEDB[17].sX = 324; gMiscItemStatsEDB[17].sY = 74; gMiscItemStatsEDB[17].sValDx = 12; // 17) COL 1; ROW 6 + gMiscItemStatsEDB[18].sX = 324; gMiscItemStatsEDB[18].sY = 86; gMiscItemStatsEDB[18].sValDx = 12; // 18) COL 1; ROW 7 + gMiscItemStatsEDB[19].sX = 425; gMiscItemStatsEDB[19].sY = 14; gMiscItemStatsEDB[19].sValDx = 12; // 19) COL 1; ROW 8 + gMiscItemStatsEDB[20].sX = 425; gMiscItemStatsEDB[20].sY = 26; gMiscItemStatsEDB[20].sValDx = 12; // 20) COL 1; ROW 9 + gMiscItemStatsEDB[21].sX = 425; gMiscItemStatsEDB[21].sY = 38; gMiscItemStatsEDB[21].sValDx = 12; // 21) COL 1; ROW 10 + gMiscItemStatsEDB[22].sX = 425; gMiscItemStatsEDB[22].sY = 50; gMiscItemStatsEDB[22].sValDx = 12; // 22) COL 1; ROW 11 + gMiscItemStatsEDB[23].sX = 425; gMiscItemStatsEDB[23].sY = 62; gMiscItemStatsEDB[23].sValDx = 12; // 23) COL 1; ROW 12 + // MISC + gMiscItemStatsEDB[24].sX = 0; gMiscItemStatsEDB[24].sY = 0; gMiscItemStatsEDB[24].sValDx = 0; + gMiscItemStatsEDB[25].sX = 0; gMiscItemStatsEDB[25].sY = 0; gMiscItemStatsEDB[25].sValDx = 0; + gMiscItemStatsEDB[26].sX = 0; gMiscItemStatsEDB[26].sY = 0; gMiscItemStatsEDB[26].sValDx = 0; + gMiscItemStatsEDB[27].sX = 0; gMiscItemStatsEDB[27].sY = 0; gMiscItemStatsEDB[27].sValDx = 0; + + gWeaponDescStatsRects[0].iLeft = 273; gWeaponDescStatsRects[0].iTop = 12; gWeaponDescStatsRects[0].iRight = 331; gWeaponDescStatsRects[0].iBottom = 23; // First Column + gWeaponDescStatsRects[1].iLeft = 273; gWeaponDescStatsRects[1].iTop = 24; gWeaponDescStatsRects[1].iRight = 331; gWeaponDescStatsRects[1].iBottom = 35; + gWeaponDescStatsRects[2].iLeft = 273; gWeaponDescStatsRects[2].iTop = 36; gWeaponDescStatsRects[2].iRight = 331; gWeaponDescStatsRects[2].iBottom = 47; + gWeaponDescStatsRects[3].iLeft = 273; gWeaponDescStatsRects[3].iTop = 48; gWeaponDescStatsRects[3].iRight = 331; gWeaponDescStatsRects[3].iBottom = 59; + gWeaponDescStatsRects[4].iLeft = 273; gWeaponDescStatsRects[4].iTop = 60; gWeaponDescStatsRects[4].iRight = 331; gWeaponDescStatsRects[4].iBottom = 71; + gWeaponDescStatsRects[5].iLeft = 273; gWeaponDescStatsRects[5].iTop = 72; gWeaponDescStatsRects[5].iRight = 331; gWeaponDescStatsRects[5].iBottom = 83; + gWeaponDescStatsRects[6].iLeft = 273; gWeaponDescStatsRects[6].iTop = 84; gWeaponDescStatsRects[6].iRight = 331; gWeaponDescStatsRects[6].iBottom = 95; + gWeaponDescStatsRects[7].iLeft = 340; gWeaponDescStatsRects[7].iTop = 24; gWeaponDescStatsRects[7].iRight = 398; gWeaponDescStatsRects[7].iBottom = 35; // Second Column + gWeaponDescStatsRects[8].iLeft = 340; gWeaponDescStatsRects[8].iTop = 36; gWeaponDescStatsRects[8].iRight = 398; gWeaponDescStatsRects[8].iBottom = 47; + gWeaponDescStatsRects[9].iLeft = 340; gWeaponDescStatsRects[9].iTop = 48; gWeaponDescStatsRects[9].iRight = 398; gWeaponDescStatsRects[9].iBottom = 59; + gWeaponDescStatsRects[10].iLeft = 340; gWeaponDescStatsRects[10].iTop = 60; gWeaponDescStatsRects[10].iRight = 398; gWeaponDescStatsRects[10].iBottom = 71; + gWeaponDescStatsRects[11].iLeft = 340; gWeaponDescStatsRects[11].iTop = 72; gWeaponDescStatsRects[11].iRight = 398; gWeaponDescStatsRects[11].iBottom = 83; + gWeaponDescStatsRects[12].iLeft = 340; gWeaponDescStatsRects[12].iTop = 84; gWeaponDescStatsRects[12].iRight = 398; gWeaponDescStatsRects[12].iBottom = 95; + gWeaponDescStatsRects[13].iLeft = 407; gWeaponDescStatsRects[13].iTop = 36; gWeaponDescStatsRects[13].iRight = 465; gWeaponDescStatsRects[13].iBottom = 47; // These are non-sequential! + gWeaponDescStatsRects[14].iLeft = 407; gWeaponDescStatsRects[14].iTop = 48; gWeaponDescStatsRects[14].iRight = 465; gWeaponDescStatsRects[14].iBottom = 59; + gWeaponDescStatsRects[15].iLeft = 407; gWeaponDescStatsRects[15].iTop = 60; gWeaponDescStatsRects[15].iRight = 465; gWeaponDescStatsRects[15].iBottom = 71; + gWeaponDescStatsRects[16].iLeft = 407; gWeaponDescStatsRects[16].iTop = 72; gWeaponDescStatsRects[16].iRight = 465; gWeaponDescStatsRects[16].iBottom = 83; + gWeaponDescStatsRects[17].iLeft = 407; gWeaponDescStatsRects[17].iTop = 12; gWeaponDescStatsRects[17].iRight = 465; gWeaponDescStatsRects[17].iBottom = 23; + gWeaponDescStatsRects[18].iLeft = 407; gWeaponDescStatsRects[18].iTop = 24; gWeaponDescStatsRects[18].iRight = 465; gWeaponDescStatsRects[18].iBottom = 35; + gWeaponDescStatsRects[19].iLeft = 407; gWeaponDescStatsRects[19].iTop = 84; gWeaponDescStatsRects[19].iRight = 465; gWeaponDescStatsRects[19].iBottom = 95; + + gAmmoDescStatsRects[0].iLeft = 273; gAmmoDescStatsRects[0].iTop = 12; gAmmoDescStatsRects[0].iRight = 331; gAmmoDescStatsRects[0].iBottom = 23; // First Column + gAmmoDescStatsRects[1].iLeft = 273; gAmmoDescStatsRects[1].iTop = 24; gAmmoDescStatsRects[1].iRight = 331; gAmmoDescStatsRects[1].iBottom = 35; + gAmmoDescStatsRects[2].iLeft = 273; gAmmoDescStatsRects[2].iTop = 36; gAmmoDescStatsRects[2].iRight = 331; gAmmoDescStatsRects[2].iBottom = 47; + gAmmoDescStatsRects[3].iLeft = 342; gAmmoDescStatsRects[3].iTop = 12; gAmmoDescStatsRects[3].iRight = 364; gAmmoDescStatsRects[3].iBottom = 35; // Second Column + gAmmoDescStatsRects[4].iLeft = 369; gAmmoDescStatsRects[4].iTop = 12; gAmmoDescStatsRects[4].iRight = 391; gAmmoDescStatsRects[4].iBottom = 35; + gAmmoDescStatsRects[5].iLeft = 342; gAmmoDescStatsRects[5].iTop = 36; gAmmoDescStatsRects[5].iRight = 364; gAmmoDescStatsRects[5].iBottom = 59; + gAmmoDescStatsRects[6].iLeft = 369; gAmmoDescStatsRects[6].iTop = 36; gAmmoDescStatsRects[6].iRight = 391; gAmmoDescStatsRects[6].iBottom = 59; + gAmmoDescStatsRects[7].iLeft = 342; gAmmoDescStatsRects[7].iTop = 60; gAmmoDescStatsRects[7].iRight = 364; gAmmoDescStatsRects[7].iBottom = 83; + gAmmoDescStatsRects[8].iLeft = 407; gAmmoDescStatsRects[8].iTop = 12; gAmmoDescStatsRects[8].iRight = 465; gAmmoDescStatsRects[8].iBottom = 23; // Third Column + gAmmoDescStatsRects[9].iLeft = 407; gAmmoDescStatsRects[9].iTop = 24; gAmmoDescStatsRects[9].iRight = 465; gAmmoDescStatsRects[9].iBottom = 35; + gAmmoDescStatsRects[10].iLeft = 407; gAmmoDescStatsRects[10].iTop = 36; gAmmoDescStatsRects[10].iRight = 465; gAmmoDescStatsRects[10].iBottom = 47; + gAmmoDescStatsRects[11].iLeft = 407; gAmmoDescStatsRects[11].iTop = 48; gAmmoDescStatsRects[11].iRight = 465; gAmmoDescStatsRects[11].iBottom = 59; + gAmmoDescStatsRects[12].iLeft = 407; gAmmoDescStatsRects[12].iTop = 60; gAmmoDescStatsRects[12].iRight = 465; gAmmoDescStatsRects[12].iBottom = 71; + gAmmoDescStatsRects[13].iLeft = 407; gAmmoDescStatsRects[13].iTop = 72; gAmmoDescStatsRects[13].iRight = 465; gAmmoDescStatsRects[13].iBottom = 1; + gAmmoDescStatsRects[14].iLeft = 0; gAmmoDescStatsRects[14].iTop = 0; gAmmoDescStatsRects[14].iRight = 1; gAmmoDescStatsRects[14].iBottom = 1; // Placeholders + gAmmoDescStatsRects[15].iLeft = 0; gAmmoDescStatsRects[15].iTop = 0; gAmmoDescStatsRects[15].iRight = 1; gAmmoDescStatsRects[15].iBottom = 1; + gAmmoDescStatsRects[16].iLeft = 0; gAmmoDescStatsRects[16].iTop = 0; gAmmoDescStatsRects[16].iRight = 1; gAmmoDescStatsRects[16].iBottom = 1; + gAmmoDescStatsRects[17].iLeft = 0; gAmmoDescStatsRects[17].iTop = 0; gAmmoDescStatsRects[17].iRight = 1; gAmmoDescStatsRects[17].iBottom = 1; + gAmmoDescStatsRects[18].iLeft = 0; gAmmoDescStatsRects[18].iTop = 0; gAmmoDescStatsRects[18].iRight = 1; gAmmoDescStatsRects[18].iBottom = 1; + gAmmoDescStatsRects[19].iLeft = 0; gAmmoDescStatsRects[19].iTop = 0; gAmmoDescStatsRects[19].iRight = 1; gAmmoDescStatsRects[19].iBottom = 1; + + gArmorDescStatsRects[0].iLeft = 273; gArmorDescStatsRects[0].iTop = 12; gArmorDescStatsRects[0].iRight = 331; gArmorDescStatsRects[0].iBottom = 23; // First Column + gArmorDescStatsRects[1].iLeft = 273; gArmorDescStatsRects[1].iTop = 24; gArmorDescStatsRects[1].iRight = 331; gArmorDescStatsRects[1].iBottom = 35; + gArmorDescStatsRects[2].iLeft = 273; gArmorDescStatsRects[2].iTop = 36; gArmorDescStatsRects[2].iRight = 331; gArmorDescStatsRects[2].iBottom = 47; + gArmorDescStatsRects[3].iLeft = 340; gArmorDescStatsRects[3].iTop = 12; gArmorDescStatsRects[3].iRight = 398; gArmorDescStatsRects[3].iBottom = 23; // Second Column + gArmorDescStatsRects[4].iLeft = 340; gArmorDescStatsRects[4].iTop = 24; gArmorDescStatsRects[4].iRight = 398; gArmorDescStatsRects[4].iBottom = 35; + gArmorDescStatsRects[5].iLeft = 340; gArmorDescStatsRects[5].iTop = 36; gArmorDescStatsRects[5].iRight = 398; gArmorDescStatsRects[5].iBottom = 47; + gArmorDescStatsRects[6].iLeft = 340; gArmorDescStatsRects[6].iTop = 48; gArmorDescStatsRects[6].iRight = 398; gArmorDescStatsRects[6].iBottom = 59; + gArmorDescStatsRects[7].iLeft = 340; gArmorDescStatsRects[7].iTop = 50; gArmorDescStatsRects[7].iRight = 398; gArmorDescStatsRects[7].iBottom = 71; + gArmorDescStatsRects[8].iLeft = 340; gArmorDescStatsRects[8].iTop = 62; gArmorDescStatsRects[8].iRight = 398; gArmorDescStatsRects[8].iBottom = 83; + gArmorDescStatsRects[9].iLeft = 340; gArmorDescStatsRects[9].iTop = 74; gArmorDescStatsRects[9].iRight = 398; gArmorDescStatsRects[9].iBottom = 95; + gArmorDescStatsRects[10].iLeft = 407; gArmorDescStatsRects[10].iTop = 12; gArmorDescStatsRects[10].iRight = 465; gArmorDescStatsRects[10].iBottom = 23; // Third Column + gArmorDescStatsRects[11].iLeft = 407; gArmorDescStatsRects[11].iTop = 24; gArmorDescStatsRects[11].iRight = 465; gArmorDescStatsRects[11].iBottom = 35; + gArmorDescStatsRects[12].iLeft = 407; gArmorDescStatsRects[12].iTop = 36; gArmorDescStatsRects[12].iRight = 465; gArmorDescStatsRects[12].iBottom = 47; + gArmorDescStatsRects[13].iLeft = 407; gArmorDescStatsRects[13].iTop = 48; gArmorDescStatsRects[13].iRight = 465; gArmorDescStatsRects[13].iBottom = 59; + gArmorDescStatsRects[14].iLeft = 407; gArmorDescStatsRects[14].iTop = 60; gArmorDescStatsRects[14].iRight = 465; gArmorDescStatsRects[14].iBottom = 71; + gArmorDescStatsRects[15].iLeft = 407; gArmorDescStatsRects[15].iTop = 72; gArmorDescStatsRects[15].iRight = 465; gArmorDescStatsRects[15].iBottom = 83; + gArmorDescStatsRects[16].iLeft = 407; gArmorDescStatsRects[16].iTop = 84; gArmorDescStatsRects[16].iRight = 465; gArmorDescStatsRects[16].iBottom = 95; + gArmorDescStatsRects[17].iLeft = 0; gArmorDescStatsRects[17].iTop = 0; gArmorDescStatsRects[17].iRight = 1; gArmorDescStatsRects[17].iBottom = 1; // Placeholders + gArmorDescStatsRects[18].iLeft = 0; gArmorDescStatsRects[18].iTop = 0; gArmorDescStatsRects[18].iRight = 1; gArmorDescStatsRects[18].iBottom = 1; + gArmorDescStatsRects[19].iLeft = 0; gArmorDescStatsRects[19].iTop = 0; gArmorDescStatsRects[19].iRight = 1; gArmorDescStatsRects[19].iBottom = 1; + + gExplosiveDescStatsRects[0].iLeft = 273; gExplosiveDescStatsRects[0].iTop = 12; gExplosiveDescStatsRects[0].iRight = 331; gExplosiveDescStatsRects[0].iBottom = 23; // First Column + gExplosiveDescStatsRects[1].iLeft = 273; gExplosiveDescStatsRects[1].iTop = 24; gExplosiveDescStatsRects[1].iRight = 331; gExplosiveDescStatsRects[1].iBottom = 35; + gExplosiveDescStatsRects[2].iLeft = 273; gExplosiveDescStatsRects[2].iTop = 36; gExplosiveDescStatsRects[2].iRight = 331; gExplosiveDescStatsRects[2].iBottom = 47; + gExplosiveDescStatsRects[3].iLeft = 273; gExplosiveDescStatsRects[3].iTop = 48; gExplosiveDescStatsRects[3].iRight = 331; gExplosiveDescStatsRects[3].iBottom = 59; + gExplosiveDescStatsRects[4].iLeft = 358; gExplosiveDescStatsRects[4].iTop = 12; gExplosiveDescStatsRects[4].iRight = 374; gExplosiveDescStatsRects[4].iBottom = 47; // Second Column + gExplosiveDescStatsRects[5].iLeft = 342; gExplosiveDescStatsRects[5].iTop = 12; gExplosiveDescStatsRects[5].iRight = 358; gExplosiveDescStatsRects[5].iBottom = 47; + gExplosiveDescStatsRects[6].iLeft = 376; gExplosiveDescStatsRects[6].iTop = 12; gExplosiveDescStatsRects[6].iRight = 395; gExplosiveDescStatsRects[6].iBottom = 47; + gExplosiveDescStatsRects[7].iLeft = 341; gExplosiveDescStatsRects[7].iTop = 60; gExplosiveDescStatsRects[7].iRight = 465; gExplosiveDescStatsRects[7].iBottom = 71; + gExplosiveDescStatsRects[8].iLeft = 0; gExplosiveDescStatsRects[8].iTop = 0; gExplosiveDescStatsRects[8].iRight = 1; gExplosiveDescStatsRects[8].iBottom = 1; // Placeholders + gExplosiveDescStatsRects[9].iLeft = 0; gExplosiveDescStatsRects[9].iTop = 0; gExplosiveDescStatsRects[9].iRight = 1; gExplosiveDescStatsRects[9].iBottom = 1; + gExplosiveDescStatsRects[10].iLeft = 0; gExplosiveDescStatsRects[10].iTop = 0; gExplosiveDescStatsRects[10].iRight = 1; gExplosiveDescStatsRects[10].iBottom = 1; + gExplosiveDescStatsRects[11].iLeft = 0; gExplosiveDescStatsRects[11].iTop = 0; gExplosiveDescStatsRects[11].iRight = 1; gExplosiveDescStatsRects[11].iBottom = 1; + gExplosiveDescStatsRects[12].iLeft = 0; gExplosiveDescStatsRects[12].iTop = 0; gExplosiveDescStatsRects[12].iRight = 1; gExplosiveDescStatsRects[12].iBottom = 1; + gExplosiveDescStatsRects[13].iLeft = 0; gExplosiveDescStatsRects[13].iTop = 0; gExplosiveDescStatsRects[13].iRight = 1; gExplosiveDescStatsRects[13].iBottom = 1; + gExplosiveDescStatsRects[14].iLeft = 0; gExplosiveDescStatsRects[14].iTop = 0; gExplosiveDescStatsRects[14].iRight = 1; gExplosiveDescStatsRects[14].iBottom = 1; + gExplosiveDescStatsRects[15].iLeft = 0; gExplosiveDescStatsRects[15].iTop = 0; gExplosiveDescStatsRects[15].iRight = 1; gExplosiveDescStatsRects[15].iBottom = 1; + gExplosiveDescStatsRects[16].iLeft = 0; gExplosiveDescStatsRects[16].iTop = 0; gExplosiveDescStatsRects[16].iRight = 1; gExplosiveDescStatsRects[16].iBottom = 1; + gExplosiveDescStatsRects[17].iLeft = 0; gExplosiveDescStatsRects[17].iTop = 0; gExplosiveDescStatsRects[17].iRight = 1; gExplosiveDescStatsRects[17].iBottom = 1; + gExplosiveDescStatsRects[18].iLeft = 0; gExplosiveDescStatsRects[18].iTop = 0; gExplosiveDescStatsRects[18].iRight = 1; gExplosiveDescStatsRects[18].iBottom = 1; + gExplosiveDescStatsRects[19].iLeft = 0; gExplosiveDescStatsRects[19].iTop = 0; gExplosiveDescStatsRects[19].iRight = 1; gExplosiveDescStatsRects[19].iBottom = 1; + + gMiscItemDescStatsRects[0].iLeft = 273; gMiscItemDescStatsRects[0].iTop = 12; gMiscItemDescStatsRects[0].iRight = 370; gMiscItemDescStatsRects[0].iBottom = 23; // Column 1 + gMiscItemDescStatsRects[1].iLeft = 273; gMiscItemDescStatsRects[1].iTop = 24; gMiscItemDescStatsRects[1].iRight = 370; gMiscItemDescStatsRects[1].iBottom = 35; + gMiscItemDescStatsRects[2].iLeft = 273; gMiscItemDescStatsRects[2].iTop = 36; gMiscItemDescStatsRects[2].iRight = 370; gMiscItemDescStatsRects[2].iBottom = 47; + gMiscItemDescStatsRects[3].iLeft = 273; gMiscItemDescStatsRects[3].iTop = 48; gMiscItemDescStatsRects[3].iRight = 370; gMiscItemDescStatsRects[3].iBottom = 59; + gMiscItemDescStatsRects[4].iLeft = 273; gMiscItemDescStatsRects[4].iTop = 60; gMiscItemDescStatsRects[4].iRight = 370; gMiscItemDescStatsRects[4].iBottom = 71; + gMiscItemDescStatsRects[5].iLeft = 273; gMiscItemDescStatsRects[5].iTop = 72; gMiscItemDescStatsRects[5].iRight = 370; gMiscItemDescStatsRects[5].iBottom = 83; + gMiscItemDescStatsRects[6].iLeft = 273; gMiscItemDescStatsRects[6].iTop = 84; gMiscItemDescStatsRects[6].iRight = 370; gMiscItemDescStatsRects[6].iBottom = 95; + gMiscItemDescStatsRects[7].iLeft = 374; gMiscItemDescStatsRects[7].iTop = 12; gMiscItemDescStatsRects[7].iRight = 471; gMiscItemDescStatsRects[7].iBottom = 23; // Column Two + gMiscItemDescStatsRects[8].iLeft = 374; gMiscItemDescStatsRects[8].iTop = 24; gMiscItemDescStatsRects[8].iRight = 471; gMiscItemDescStatsRects[8].iBottom = 35; + gMiscItemDescStatsRects[9].iLeft = 374; gMiscItemDescStatsRects[9].iTop = 36; gMiscItemDescStatsRects[9].iRight = 471; gMiscItemDescStatsRects[9].iBottom = 47; + gMiscItemDescStatsRects[10].iLeft = 374; gMiscItemDescStatsRects[10].iTop = 48; gMiscItemDescStatsRects[10].iRight = 471; gMiscItemDescStatsRects[10].iBottom = 59; + gMiscItemDescStatsRects[11].iLeft = 374; gMiscItemDescStatsRects[11].iTop = 60; gMiscItemDescStatsRects[11].iRight = 471; gMiscItemDescStatsRects[11].iBottom = 71; + gMiscItemDescStatsRects[12].iLeft = 0; gMiscItemDescStatsRects[12].iTop = 0; gMiscItemDescStatsRects[12].iRight = 1; gMiscItemDescStatsRects[12].iBottom = 1; // Placeholders + gMiscItemDescStatsRects[13].iLeft = 0; gMiscItemDescStatsRects[13].iTop = 0; gMiscItemDescStatsRects[13].iRight = 1; gMiscItemDescStatsRects[13].iBottom = 1; + gMiscItemDescStatsRects[14].iLeft = 0; gMiscItemDescStatsRects[14].iTop = 0; gMiscItemDescStatsRects[14].iRight = 1; gMiscItemDescStatsRects[14].iBottom = 1; + gMiscItemDescStatsRects[15].iLeft = 0; gMiscItemDescStatsRects[15].iTop = 0; gMiscItemDescStatsRects[15].iRight = 1; gMiscItemDescStatsRects[15].iBottom = 1; + gMiscItemDescStatsRects[16].iLeft = 0; gMiscItemDescStatsRects[16].iTop = 0; gMiscItemDescStatsRects[16].iRight = 1; gMiscItemDescStatsRects[16].iBottom = 1; + gMiscItemDescStatsRects[17].iLeft = 0; gMiscItemDescStatsRects[17].iTop = 0; gMiscItemDescStatsRects[17].iRight = 1; gMiscItemDescStatsRects[17].iBottom = 1; + gMiscItemDescStatsRects[18].iLeft = 0; gMiscItemDescStatsRects[18].iTop = 0; gMiscItemDescStatsRects[18].iRight = 1; gMiscItemDescStatsRects[18].iBottom = 1; + gMiscItemDescStatsRects[19].iLeft = 0; gMiscItemDescStatsRects[19].iTop = 0; gMiscItemDescStatsRects[19].iRight = 1; gMiscItemDescStatsRects[19].iBottom = 1; + } + } +} + +void InitDescStatCoords() +{ + if(UsingEDBSystem() > 0) + { + if( guiCurrentScreen == MAP_SCREEN ) + { + gWeaponStats[0].sX = 52; gWeaponStats[0].sY = 98; gWeaponStats[0].sValDx = 70; // 0) STATUS + gWeaponStats[1].sX = 52; gWeaponStats[1].sY = 108; gWeaponStats[1].sValDx = 70; // 1) WEIGHT + gWeaponStats[2].sX = 47; gWeaponStats[2].sY = 124; gWeaponStats[2].sValDx = 30; // 2) COL 1; ROW 1 + gWeaponStats[3].sX = 47; gWeaponStats[3].sY = 136; gWeaponStats[3].sValDx = 30; // 3) COL 1; ROW 2 + gWeaponStats[4].sX = 47; gWeaponStats[4].sY = 148; gWeaponStats[4].sValDx = 30; // 4) COL 1; ROW 3 + gWeaponStats[5].sX = 47; gWeaponStats[5].sY = 160; gWeaponStats[5].sValDx = 30; // 5) COL 1; ROW 4 + gWeaponStats[6].sX = 47; gWeaponStats[6].sY = 172; gWeaponStats[6].sValDx = 30; // 6) COL 1; ROW 5 + gWeaponStats[7].sX = 47; gWeaponStats[7].sY = 184; gWeaponStats[7].sValDx = 30; // 7) COL 1; ROW 6 + gWeaponStats[8].sX = 47; gWeaponStats[8].sY = 196; gWeaponStats[8].sValDx = 30; // 8) COL 1; ROW 7 + gWeaponStats[9].sX = 112; gWeaponStats[9].sY = 124; gWeaponStats[9].sValDx = 29; // 9) COL 2; ROW 1 + gWeaponStats[10].sX = 112; gWeaponStats[10].sY = 136; gWeaponStats[10].sValDx = 29; // 10) COL 2; ROW 2 + gWeaponStats[11].sX = 112; gWeaponStats[11].sY = 148; gWeaponStats[11].sValDx = 29; // 11) COL 2; ROW 3 + gWeaponStats[12].sX = 112; gWeaponStats[12].sY = 160; gWeaponStats[12].sValDx = 29; // 12) COL 2; ROW 4 + gWeaponStats[13].sX = 112; gWeaponStats[13].sY = 172; gWeaponStats[13].sValDx = 29; // 13) COL 2; ROW 5 + gWeaponStats[14].sX = 112; gWeaponStats[14].sY = 184; gWeaponStats[14].sValDx = 29; // 14) COL 2; ROW 6 + gWeaponStats[15].sX = 112; gWeaponStats[15].sY = 196; gWeaponStats[15].sValDx = 29; // 15) COL 2; ROW 7 + gWeaponStats[16].sX = 174; gWeaponStats[16].sY = 124; gWeaponStats[16].sValDx = 30; // 16) COL 3; ROW 1 + gWeaponStats[17].sX = 174; gWeaponStats[17].sY = 136; gWeaponStats[17].sValDx = 30; // 17) COL 3; ROW 2 + gWeaponStats[18].sX = 174; gWeaponStats[18].sY = 148; gWeaponStats[18].sValDx = 30; // 18) COL 3; ROW 3 + gWeaponStats[19].sX = 174; gWeaponStats[19].sY = 160; gWeaponStats[19].sValDx = 30; // 19) COL 3; ROW 4 + gWeaponStats[20].sX = 174; gWeaponStats[20].sY = 172; gWeaponStats[20].sValDx = 30; // 20) COL 3; ROW 5 + gWeaponStats[21].sX = 174; gWeaponStats[21].sY = 184; gWeaponStats[21].sValDx = 30; // 21) COL 3; ROW 6 + gWeaponStats[22].sX = 174; gWeaponStats[22].sY = 196; gWeaponStats[22].sValDx = 30; // 22) COL 3; ROW 7 + // EQUALS signs + gWeaponStats[23].sX = 79; gWeaponStats[23].sY = 124; gWeaponStats[23].sValDx = 0; // 23) COL 1; ROW 1 + gWeaponStats[24].sX = 79; gWeaponStats[24].sY = 136; gWeaponStats[24].sValDx = 0; // 24) COL 1; ROW 2 + gWeaponStats[25].sX = 79; gWeaponStats[25].sY = 148; gWeaponStats[25].sValDx = 0; // 25) COL 1; ROW 3 + gWeaponStats[26].sX = 79; gWeaponStats[26].sY = 160; gWeaponStats[26].sValDx = 0; // 26) COL 1; ROW 4 + gWeaponStats[27].sX = 79; gWeaponStats[27].sY = 172; gWeaponStats[27].sValDx = 0; // 27) COL 1; ROW 5 + gWeaponStats[28].sX = 79; gWeaponStats[28].sY = 184; gWeaponStats[28].sValDx = 0; // 28) COL 1; ROW 6 + gWeaponStats[29].sX = 79; gWeaponStats[29].sY = 196; gWeaponStats[29].sValDx = 0; // 29) COL 1; ROW 7 + gWeaponStats[30].sX = 145; gWeaponStats[30].sY = 124; gWeaponStats[30].sValDx = 0; // 30) COL 2; ROW 1 + gWeaponStats[31].sX = 145; gWeaponStats[31].sY = 136; gWeaponStats[31].sValDx = 0; // 31) COL 2; ROW 2 + gWeaponStats[32].sX = 145; gWeaponStats[32].sY = 148; gWeaponStats[32].sValDx = 0; // 32) COL 2; ROW 3 + gWeaponStats[33].sX = 145; gWeaponStats[33].sY = 160; gWeaponStats[33].sValDx = 0; // 33) COL 2; ROW 4 + gWeaponStats[34].sX = 145; gWeaponStats[34].sY = 172; gWeaponStats[34].sValDx = 0; // 34) COL 2; ROW 5 + gWeaponStats[35].sX = 145; gWeaponStats[35].sY = 184; gWeaponStats[35].sValDx = 0; // 35) COL 2; ROW 6 + gWeaponStats[36].sX = 145; gWeaponStats[36].sY = 196; gWeaponStats[36].sValDx = 0; // 36) COL 2; ROW 7 + gWeaponStats[37].sX = 206; gWeaponStats[37].sY = 124; gWeaponStats[37].sValDx = 0; // 37) COL 3; ROW 1 + gWeaponStats[38].sX = 206; gWeaponStats[38].sY = 136; gWeaponStats[38].sValDx = 0; // 38) COL 3; ROW 2 + gWeaponStats[39].sX = 206; gWeaponStats[39].sY = 148; gWeaponStats[39].sValDx = 0; // 39) COL 3; ROW 3 + gWeaponStats[40].sX = 206; gWeaponStats[40].sY = 160; gWeaponStats[40].sValDx = 0; // 40) COL 3; ROW 4 + gWeaponStats[41].sX = 206; gWeaponStats[41].sY = 172; gWeaponStats[41].sValDx = 0; // 41) COL 3; ROW 5 + gWeaponStats[42].sX = 206; gWeaponStats[42].sY = 184; gWeaponStats[42].sValDx = 0; // 42) COL 3; ROW 6 + gWeaponStats[43].sX = 206; gWeaponStats[43].sY = 196; gWeaponStats[43].sValDx = 0; // 43) COL 3; ROW 7 + // Nonregular locations for explosive data (COL 2; ROW 3) + gWeaponStats[44].sX = 116; gWeaponStats[44].sY = 148; gWeaponStats[44].sValDx = 0; // 44) COL 2; ROW 3; LOC 1 + gWeaponStats[45].sX = 134; gWeaponStats[45].sY = 148; gWeaponStats[45].sValDx = 0; // 45) COL 2; ROW 3; LOC 2 + gWeaponStats[46].sX = 150; gWeaponStats[46].sY = 148; gWeaponStats[46].sValDx = 0; // 46) COL 2; ROW 3; LOC 3 + + gMoneyStats[0].sX = 51; gMoneyStats[0].sY = 124; gMoneyStats[0].sValDx = 45; // Money + gMoneyStats[1].sX = 61; gMoneyStats[1].sY = 136; gMoneyStats[1].sValDx = 65; // Remaining + gMoneyStats[2].sX = 51; gMoneyStats[2].sY = 172; gMoneyStats[2].sValDx = 45; // Money + gMoneyStats[3].sX = 61; gMoneyStats[3].sY = 184; gMoneyStats[3].sValDx = 65; // Removing + gMoneyStats[4].sX = 47; gMoneyStats[4].sY = 148; gMoneyStats[4].sValDx = 62; // AMT remaining + gMoneyStats[5].sX = 47; gMoneyStats[5].sY = 196; gMoneyStats[5].sValDx = 62; // AMT removing + + gItemDescProsConsRects[0].iLeft = 14; gItemDescProsConsRects[0].iTop = 291; gItemDescProsConsRects[0].iRight = 250; gItemDescProsConsRects[0].iBottom = 298; + gItemDescProsConsRects[1].iLeft = 14; gItemDescProsConsRects[1].iTop = 299; gItemDescProsConsRects[1].iRight = 250; gItemDescProsConsRects[1].iBottom = 306; + } + else + { + if (UsingEDBSystem() == 1) // NIV EDB + { + gWeaponStats[0].sX = 205; gWeaponStats[0].sY = 14; gWeaponStats[0].sValDx = 91; // 0) STATUS + gWeaponStats[1].sX = 205; gWeaponStats[1].sY = 24; gWeaponStats[1].sValDx = 91; // 1) WEIGHT + // Labels and Values + gWeaponStats[2].sX = 203; gWeaponStats[2].sY = 44; gWeaponStats[2].sValDx = 30; // 2) COL 1; ROW 1 + gWeaponStats[3].sX = 203; gWeaponStats[3].sY = 56; gWeaponStats[3].sValDx = 30; // 3) COL 1; ROW 2 + gWeaponStats[4].sX = 203; gWeaponStats[4].sY = 68; gWeaponStats[4].sValDx = 30; // 4) COL 1; ROW 3 + gWeaponStats[5].sX = 203; gWeaponStats[5].sY = 80; gWeaponStats[5].sValDx = 30; // 5) COL 1; ROW 4 + gWeaponStats[6].sX = 203; gWeaponStats[6].sY = 92; gWeaponStats[6].sValDx = 30; // 6) COL 1; ROW 5 + gWeaponStats[7].sX = 203; gWeaponStats[7].sY = 104; gWeaponStats[7].sValDx = 30; // 7) COL 1; ROW 6 + gWeaponStats[8].sX = 203; gWeaponStats[8].sY = 116; gWeaponStats[8].sValDx = 30; // 8) COL 1; ROW 7 + gWeaponStats[9].sX = 268; gWeaponStats[9].sY = 44; gWeaponStats[9].sValDx = 30; // 9) COL 2; ROW 1 + gWeaponStats[10].sX = 268; gWeaponStats[10].sY = 56; gWeaponStats[10].sValDx = 30; // 10) COL 2; ROW 2 + gWeaponStats[11].sX = 268; gWeaponStats[11].sY = 68; gWeaponStats[11].sValDx = 30; // 11) COL 2; ROW 3 + gWeaponStats[12].sX = 268; gWeaponStats[12].sY = 80; gWeaponStats[12].sValDx = 30; // 12) COL 2; ROW 4 + gWeaponStats[13].sX = 268; gWeaponStats[13].sY = 92; gWeaponStats[13].sValDx = 30; // 13) COL 2; ROW 5 + gWeaponStats[14].sX = 268; gWeaponStats[14].sY = 104; gWeaponStats[14].sValDx = 30; // 14) COL 2; ROW 6 + gWeaponStats[15].sX = 268; gWeaponStats[15].sY = 116; gWeaponStats[15].sValDx = 30; // 15) COL 2; ROW 7 + gWeaponStats[16].sX = 203; gWeaponStats[16].sY = 136; gWeaponStats[16].sValDx = 30; // 16) COL 3; ROW 1 + gWeaponStats[17].sX = 203; gWeaponStats[17].sY = 160; gWeaponStats[17].sValDx = 30; // 17) COL 3; ROW 3 + gWeaponStats[18].sX = 268; gWeaponStats[18].sY = 136; gWeaponStats[18].sValDx = 30; // 18) COL 4; ROW 1 + gWeaponStats[19].sX = 268; gWeaponStats[19].sY = 148; gWeaponStats[19].sValDx = 30; // 19) COL 4; ROW 2 + gWeaponStats[20].sX = 268; gWeaponStats[20].sY = 160; gWeaponStats[20].sValDx = 30; // 20) COL 4; ROW 3 + gWeaponStats[21].sX = 268; gWeaponStats[21].sY = 172; gWeaponStats[21].sValDx = 30; // 21) COL 4; ROW 4 + gWeaponStats[22].sX = 203; gWeaponStats[22].sY = 172; gWeaponStats[22].sValDx = 30; // 22) COL 3; ROW 4 + // EQUALS signs + gWeaponStats[23].sX = 235; gWeaponStats[23].sY = 44; gWeaponStats[23].sValDx = 0; // 23) COL 1; ROW 1 + gWeaponStats[24].sX = 235; gWeaponStats[24].sY = 56; gWeaponStats[24].sValDx = 0; // 24) COL 1; ROW 2 + gWeaponStats[25].sX = 235; gWeaponStats[25].sY = 68; gWeaponStats[25].sValDx = 0; // 25) COL 1; ROW 3 + gWeaponStats[26].sX = 235; gWeaponStats[26].sY = 80; gWeaponStats[26].sValDx = 0; // 26) COL 1; ROW 4 + gWeaponStats[27].sX = 235; gWeaponStats[27].sY = 92; gWeaponStats[27].sValDx = 0; // 27) COL 1; ROW 5 + gWeaponStats[28].sX = 235; gWeaponStats[28].sY = 104; gWeaponStats[28].sValDx = 0; // 28) COL 1; ROW 6 + gWeaponStats[29].sX = 235; gWeaponStats[29].sY = 116; gWeaponStats[29].sValDx = 0; // 29) COL 1; ROW 7 + gWeaponStats[30].sX = 300; gWeaponStats[30].sY = 44; gWeaponStats[30].sValDx = 0; // 30) COL 2; ROW 1 + gWeaponStats[31].sX = 300; gWeaponStats[31].sY = 56; gWeaponStats[31].sValDx = 0; // 31) COL 2; ROW 2 + gWeaponStats[32].sX = 300; gWeaponStats[32].sY = 68; gWeaponStats[32].sValDx = 0; // 32) COL 2; ROW 3 + gWeaponStats[33].sX = 300; gWeaponStats[33].sY = 80; gWeaponStats[33].sValDx = 0; // 33) COL 2; ROW 4 + gWeaponStats[34].sX = 300; gWeaponStats[34].sY = 92; gWeaponStats[34].sValDx = 0; // 34) COL 2; ROW 5 + gWeaponStats[35].sX = 300; gWeaponStats[35].sY = 104; gWeaponStats[35].sValDx = 0; // 35) COL 2; ROW 6 + gWeaponStats[36].sX = 300; gWeaponStats[36].sY = 116; gWeaponStats[36].sValDx = 0; // 36) COL 2; ROW 7 + gWeaponStats[37].sX = 235; gWeaponStats[37].sY = 136; gWeaponStats[37].sValDx = 0; // 37) COL 3; ROW 1 + gWeaponStats[38].sX = 235; gWeaponStats[38].sY = 160; gWeaponStats[38].sValDx = 0; // 38) COL 3; ROW 3 + gWeaponStats[39].sX = 300; gWeaponStats[39].sY = 136; gWeaponStats[39].sValDx = 0; // 39) COL 4; ROW 1 + gWeaponStats[40].sX = 300; gWeaponStats[40].sY = 148; gWeaponStats[40].sValDx = 0; // 40) COL 4; ROW 2 + gWeaponStats[41].sX = 300; gWeaponStats[41].sY = 160; gWeaponStats[41].sValDx = 0; // 41) COL 4; ROW 3 + gWeaponStats[42].sX = 300; gWeaponStats[42].sY = 172; gWeaponStats[42].sValDx = 0; // 42) COL 4; ROW 4 + gWeaponStats[43].sX = 235; gWeaponStats[43].sY = 172; gWeaponStats[43].sValDx = 0; // 43) COL 3; ROW 4 + // Nonregular locations for explosive radius values (COL 2; ROW 3) + gWeaponStats[44].sX = 273; gWeaponStats[44].sY = 68; gWeaponStats[44].sValDx = 0; // 44) COL 2; ROW 3; LOC 1 - Starting Radius + gWeaponStats[45].sX = 291; gWeaponStats[45].sY = 68; gWeaponStats[45].sValDx = 0; // 45) COL 2; ROW 3; LOC 2 - Single Radius + gWeaponStats[46].sX = 307; gWeaponStats[46].sY = 68; gWeaponStats[46].sValDx = 0; // 46) COL 2; ROW 3; LOC 3 - Final Radius + + gMoneyStats[0].sX = 203; gMoneyStats[0].sY = 44; gMoneyStats[0].sValDx = 45; // Money + gMoneyStats[1].sX = 213; gMoneyStats[1].sY = 56; gMoneyStats[1].sValDx = 65; // Remaining + gMoneyStats[2].sX = 203; gMoneyStats[2].sY = 92; gMoneyStats[2].sValDx = 45; // Money + gMoneyStats[3].sX = 213; gMoneyStats[3].sY = 104; gMoneyStats[3].sValDx = 65; // Removing + gMoneyStats[4].sX = 203; gMoneyStats[4].sY = 56; gMoneyStats[4].sValDx = 100; // AMT remaining + gMoneyStats[5].sX = 203; gMoneyStats[5].sY = 104; gMoneyStats[5].sValDx = 100; // AMT removing + + gItemDescProsConsRects[0].iLeft = 14; gItemDescProsConsRects[0].iTop = 169; gItemDescProsConsRects[0].iRight = 188; gItemDescProsConsRects[0].iBottom = 176; + gItemDescProsConsRects[1].iLeft = 14; gItemDescProsConsRects[1].iTop = 177; gItemDescProsConsRects[1].iRight = 188; gItemDescProsConsRects[1].iBottom = 184; + } + if (UsingEDBSystem() == 2) // OIV EDB + { + gWeaponStats[0].sX = 202; gWeaponStats[0].sY = 16; gWeaponStats[0].sValDx = 36; // 0) STATUS + gWeaponStats[1].sX = 202; gWeaponStats[1].sY = 64; gWeaponStats[1].sValDx = 36; // 1) WEIGHT + // Labels and Values + gWeaponStats[2].sX = 274; gWeaponStats[2].sY = 14; gWeaponStats[2].sValDx = 30; // 2) COL 1; ROW 1 + gWeaponStats[3].sX = 274; gWeaponStats[3].sY = 26; gWeaponStats[3].sValDx = 30; // 3) COL 1; ROW 2 + gWeaponStats[4].sX = 274; gWeaponStats[4].sY = 38; gWeaponStats[4].sValDx = 30; // 4) COL 1; ROW 3 + gWeaponStats[5].sX = 274; gWeaponStats[5].sY = 50; gWeaponStats[5].sValDx = 30; // 5) COL 1; ROW 4 + gWeaponStats[6].sX = 274; gWeaponStats[6].sY = 62; gWeaponStats[6].sValDx = 30; // 6) COL 1; ROW 5 + gWeaponStats[7].sX = 274; gWeaponStats[7].sY = 74; gWeaponStats[7].sValDx = 30; // 7) COL 1; ROW 6 + gWeaponStats[8].sX = 274; gWeaponStats[8].sY = 86; gWeaponStats[8].sValDx = 30; // 8) COL 1; ROW 7 + gWeaponStats[9].sX = 341; gWeaponStats[9].sY = 14; gWeaponStats[9].sValDx = 30; // 9) COL 2; ROW 1 + gWeaponStats[10].sX = 341; gWeaponStats[10].sY = 26; gWeaponStats[10].sValDx = 30; // 10) COL 2; ROW 2 + gWeaponStats[11].sX = 341; gWeaponStats[11].sY = 38; gWeaponStats[11].sValDx = 30; // 11) COL 2; ROW 3 + gWeaponStats[12].sX = 341; gWeaponStats[12].sY = 50; gWeaponStats[12].sValDx = 30; // 12) COL 2; ROW 4 + gWeaponStats[13].sX = 341; gWeaponStats[13].sY = 62; gWeaponStats[13].sValDx = 30; // 13) COL 2; ROW 5 + gWeaponStats[14].sX = 341; gWeaponStats[14].sY = 74; gWeaponStats[14].sValDx = 30; // 14) COL 2; ROW 6 + gWeaponStats[15].sX = 341; gWeaponStats[15].sY = 86; gWeaponStats[15].sValDx = 30; // 15) COL 2; ROW 7 + gWeaponStats[16].sX = 408; gWeaponStats[16].sY = 14; gWeaponStats[16].sValDx = 30; // 16) COL 3; ROW 1 + gWeaponStats[17].sX = 408; gWeaponStats[17].sY = 26; gWeaponStats[17].sValDx = 30; // 17) COL 3; ROW 2 + gWeaponStats[18].sX = 408; gWeaponStats[18].sY = 38; gWeaponStats[18].sValDx = 30; // 18) COL 3; ROW 3 + gWeaponStats[19].sX = 408; gWeaponStats[19].sY = 50; gWeaponStats[19].sValDx = 30; // 19) COL 3; ROW 4 + gWeaponStats[20].sX = 408; gWeaponStats[20].sY = 62; gWeaponStats[20].sValDx = 30; // 20) COL 3; ROW 5 + gWeaponStats[21].sX = 408; gWeaponStats[21].sY = 74; gWeaponStats[21].sValDx = 30; // 21) COL 3; ROW 6 + gWeaponStats[22].sX = 408; gWeaponStats[22].sY = 86; gWeaponStats[22].sValDx = 30; // 22) COL 3; ROW 7 + // EQUALS signs + gWeaponStats[23].sX = 306; gWeaponStats[23].sY = 14; gWeaponStats[23].sValDx = 0; // 23) COL 1; ROW 1 + gWeaponStats[24].sX = 306; gWeaponStats[24].sY = 26; gWeaponStats[24].sValDx = 0; // 24) COL 1; ROW 2 + gWeaponStats[25].sX = 306; gWeaponStats[25].sY = 38; gWeaponStats[25].sValDx = 0; // 25) COL 1; ROW 3 + gWeaponStats[26].sX = 306; gWeaponStats[26].sY = 50; gWeaponStats[26].sValDx = 0; // 26) COL 1; ROW 4 + gWeaponStats[27].sX = 306; gWeaponStats[27].sY = 62; gWeaponStats[27].sValDx = 0; // 27) COL 1; ROW 5 + gWeaponStats[28].sX = 306; gWeaponStats[28].sY = 74; gWeaponStats[28].sValDx = 0; // 28) COL 1; ROW 6 + gWeaponStats[29].sX = 306; gWeaponStats[29].sY = 86; gWeaponStats[29].sValDx = 0; // 39) COL 1; ROW 7 + gWeaponStats[30].sX = 373; gWeaponStats[30].sY = 14; gWeaponStats[30].sValDx = 0; // 30) COL 2; ROW 1 + gWeaponStats[31].sX = 373; gWeaponStats[31].sY = 26; gWeaponStats[31].sValDx = 0; // 31) COL 2; ROW 2 + gWeaponStats[32].sX = 373; gWeaponStats[32].sY = 38; gWeaponStats[32].sValDx = 0; // 32) COL 2; ROW 3 + gWeaponStats[33].sX = 373; gWeaponStats[33].sY = 50; gWeaponStats[33].sValDx = 0; // 33) COL 2; ROW 4 + gWeaponStats[34].sX = 373; gWeaponStats[34].sY = 62; gWeaponStats[34].sValDx = 0; // 34) COL 2; ROW 5 + gWeaponStats[35].sX = 373; gWeaponStats[35].sY = 74; gWeaponStats[35].sValDx = 0; // 35) COL 2; ROW 6 + gWeaponStats[36].sX = 373; gWeaponStats[36].sY = 86; gWeaponStats[36].sValDx = 0; // 36) COL 2; ROW 7 + gWeaponStats[37].sX = 440; gWeaponStats[37].sY = 14; gWeaponStats[37].sValDx = 0; // 37) COL 3; ROW 1 + gWeaponStats[38].sX = 440; gWeaponStats[38].sY = 26; gWeaponStats[38].sValDx = 0; // 48) COL 3; ROW 2 + gWeaponStats[39].sX = 440; gWeaponStats[39].sY = 38; gWeaponStats[39].sValDx = 0; // 49) COL 3; ROW 3 + gWeaponStats[40].sX = 440; gWeaponStats[40].sY = 50; gWeaponStats[40].sValDx = 0; // 40) COL 3; ROW 4 + gWeaponStats[41].sX = 440; gWeaponStats[41].sY = 62; gWeaponStats[41].sValDx = 0; // 41) COL 3; ROW 5 + gWeaponStats[42].sX = 440; gWeaponStats[42].sY = 74; gWeaponStats[42].sValDx = 0; // 42) COL 3; ROW 6 + gWeaponStats[43].sX = 440; gWeaponStats[43].sY = 86; gWeaponStats[43].sValDx = 0; // 43) COL 3; ROW 7 + // Nonregular locations for explosive radius values (COL 2; ROW 3) + gWeaponStats[44].sX = 345; gWeaponStats[44].sY = 38; gWeaponStats[44].sValDx = 0; // 44) COL 2; ROW 3; LOC 1 - Starting Radius + gWeaponStats[45].sX = 362; gWeaponStats[45].sY = 38; gWeaponStats[45].sValDx = 0; // 45) COL 2; ROW 3; LOC 2 - Single Radius + gWeaponStats[46].sX = 381; gWeaponStats[46].sY = 38; gWeaponStats[46].sValDx = 0; // 46) COL 2; ROW 3; LOC 3 - Final Radius + + gMoneyStats[0].sX = 202; gMoneyStats[0].sY = 14; gMoneyStats[0].sValDx = 45; // Money + gMoneyStats[1].sX = 202; gMoneyStats[1].sY = 26; gMoneyStats[1].sValDx = 65; // Remaining + gMoneyStats[2].sX = 202; gMoneyStats[2].sY = 62; gMoneyStats[2].sValDx = 45; // Money + gMoneyStats[3].sX = 202; gMoneyStats[3].sY = 74; gMoneyStats[3].sValDx = 65; // Removing + gMoneyStats[4].sX = 202; gMoneyStats[4].sY = 38; gMoneyStats[4].sValDx = 100; // AMT remaining + gMoneyStats[5].sX = 202; gMoneyStats[5].sY = 86; gMoneyStats[5].sValDx = 100; // AMT removing + + gItemDescProsConsRects[0].iLeft = 433; gItemDescProsConsRects[0].iTop = 104; gItemDescProsConsRects[0].iRight = 467; gItemDescProsConsRects[0].iBottom = 115; + gItemDescProsConsRects[1].iLeft = 433; gItemDescProsConsRects[1].iTop = 116; gItemDescProsConsRects[1].iRight = 467; gItemDescProsConsRects[1].iBottom = 127; + } + } + } + else + { + if(guiCurrentScreen ==MAP_SCREEN) + { + gWeaponStats[0].sX = 52; gWeaponStats[0].sY = 98; gWeaponStats[0].sValDx = 80; // 0) STATUS + gWeaponStats[1].sX = 52; gWeaponStats[1].sY = 108; gWeaponStats[1].sValDx = 80; // 1) WEIGHT + gWeaponStats[2].sX = 117; gWeaponStats[2].sY = 124; gWeaponStats[2].sValDx = 21; // 2) RANGE + gWeaponStats[3].sX = 52; gWeaponStats[3].sY = 124; gWeaponStats[3].sValDx = 30; // 3) DAMAGE + gWeaponStats[4].sX = 52; gWeaponStats[4].sY = 98; gWeaponStats[4].sValDx = 80; + gWeaponStats[5].sX = 52; gWeaponStats[5].sY = 135; gWeaponStats[5].sValDx = 30; // 5) AP + gWeaponStats[6].sX = 117; gWeaponStats[6].sY = 135; gWeaponStats[6].sValDx = 25; + gWeaponStats[7].sX = 86; gWeaponStats[7].sY = 135; gWeaponStats[7].sValDx = 0; // 7) = + gWeaponStats[8].sX = 145; gWeaponStats[8].sY = 135; gWeaponStats[8].sValDx = 0; // 8) = + gWeaponStats[9].sX = 0; gWeaponStats[9].sY = 0; gWeaponStats[9].sValDx = 0; + gWeaponStats[10].sX = 0; gWeaponStats[10].sY = 0; gWeaponStats[10].sValDx = 0; + gWeaponStats[11].sX = 0; gWeaponStats[11].sY = 0; gWeaponStats[11].sValDx = 0; + gWeaponStats[12].sX = 0; gWeaponStats[12].sY = 0; gWeaponStats[12].sValDx = 0; + gWeaponStats[13].sX = 0; gWeaponStats[13].sY = 0; gWeaponStats[13].sValDx = 0; + gWeaponStats[14].sX = 0; gWeaponStats[14].sY = 0; gWeaponStats[14].sValDx = 0; + gWeaponStats[15].sX = 0; gWeaponStats[15].sY = 0; gWeaponStats[15].sValDx = 0; + gWeaponStats[16].sX = 0; gWeaponStats[16].sY = 0; gWeaponStats[16].sValDx = 0; + gWeaponStats[17].sX = 0; gWeaponStats[17].sY = 0; gWeaponStats[17].sValDx = 0; + gWeaponStats[18].sX = 0; gWeaponStats[18].sY = 0; gWeaponStats[18].sValDx = 0; + gWeaponStats[19].sX = 0; gWeaponStats[19].sY = 0; gWeaponStats[19].sValDx = 0; + gWeaponStats[20].sX = 0; gWeaponStats[20].sY = 0; gWeaponStats[20].sValDx = 0; + gWeaponStats[21].sX = 0; gWeaponStats[21].sY = 0; gWeaponStats[21].sValDx = 0; + gWeaponStats[22].sX = 0; gWeaponStats[22].sY = 0; gWeaponStats[22].sValDx = 0; + gWeaponStats[23].sX = 0; gWeaponStats[23].sY = 0; gWeaponStats[23].sValDx = 0; + gWeaponStats[24].sX = 0; gWeaponStats[24].sY = 0; gWeaponStats[24].sValDx = 0; + gWeaponStats[25].sX = 0; gWeaponStats[25].sY = 0; gWeaponStats[25].sValDx = 0; + gWeaponStats[26].sX = 0; gWeaponStats[26].sY = 0; gWeaponStats[26].sValDx = 0; + gWeaponStats[27].sX = 0; gWeaponStats[27].sY = 0; gWeaponStats[27].sValDx = 0; + gWeaponStats[28].sX = 0; gWeaponStats[28].sY = 0; gWeaponStats[28].sValDx = 0; + gWeaponStats[29].sX = 0; gWeaponStats[29].sY = 0; gWeaponStats[29].sValDx = 0; + gWeaponStats[30].sX = 0; gWeaponStats[30].sY = 0; gWeaponStats[30].sValDx = 0; + gWeaponStats[31].sX = 0; gWeaponStats[31].sY = 0; gWeaponStats[31].sValDx = 0; + gWeaponStats[32].sX = 0; gWeaponStats[32].sY = 0; gWeaponStats[32].sValDx = 0; + gWeaponStats[33].sX = 0; gWeaponStats[33].sY = 0; gWeaponStats[33].sValDx = 0; + gWeaponStats[34].sX = 0; gWeaponStats[34].sY = 0; gWeaponStats[34].sValDx = 0; + gWeaponStats[35].sX = 0; gWeaponStats[35].sY = 0; gWeaponStats[35].sValDx = 0; + gWeaponStats[36].sX = 0; gWeaponStats[36].sY = 0; gWeaponStats[36].sValDx = 0; + gWeaponStats[37].sX = 0; gWeaponStats[37].sY = 0; gWeaponStats[37].sValDx = 0; + gWeaponStats[38].sX = 0; gWeaponStats[38].sY = 0; gWeaponStats[38].sValDx = 0; + gWeaponStats[39].sX = 0; gWeaponStats[39].sY = 0; gWeaponStats[39].sValDx = 0; + gWeaponStats[40].sX = 0; gWeaponStats[40].sY = 0; gWeaponStats[40].sValDx = 0; + gWeaponStats[41].sX = 0; gWeaponStats[41].sY = 0; gWeaponStats[41].sValDx = 0; + gWeaponStats[42].sX = 0; gWeaponStats[42].sY = 0; gWeaponStats[42].sValDx = 0; + gWeaponStats[43].sX = 0; gWeaponStats[43].sY = 0; gWeaponStats[43].sValDx = 0; + gWeaponStats[44].sX = 0; gWeaponStats[44].sY = 0; gWeaponStats[44].sValDx = 0; + gWeaponStats[45].sX = 0; gWeaponStats[45].sY = 0; gWeaponStats[45].sValDx = 0; + gWeaponStats[46].sX = 0; gWeaponStats[46].sY = 0; gWeaponStats[46].sValDx = 0; + + gMoneyStats[0].sX = 51; gMoneyStats[0].sY = 97; gMoneyStats[0].sValDx = 45; + gMoneyStats[1].sX = 61; gMoneyStats[1].sY = 107; gMoneyStats[1].sValDx = 75; + gMoneyStats[2].sX = 51; gMoneyStats[2].sY = 125; gMoneyStats[2].sValDx = 45; + gMoneyStats[3].sX = 61; gMoneyStats[3].sY = 135; gMoneyStats[3].sValDx = 70; + gMoneyStats[4].sX = 0; gMoneyStats[4].sY = 0; gMoneyStats[4].sValDx = 0; + gMoneyStats[5].sX = 0; gMoneyStats[5].sY = 0; gMoneyStats[5].sValDx = 0; + + gItemDescProsConsRects[0].iLeft = 14; gItemDescProsConsRects[0].iTop = 231; gItemDescProsConsRects[0].iRight = 240; gItemDescProsConsRects[0].iBottom = 238; + gItemDescProsConsRects[1].iLeft = 14; gItemDescProsConsRects[1].iTop = 239; gItemDescProsConsRects[1].iRight = 240; gItemDescProsConsRects[1].iBottom = 246; + } + else + { + gWeaponStats[0].sX = 202; gWeaponStats[0].sY = 15; gWeaponStats[0].sValDx = 83; // 0) STATUS + gWeaponStats[1].sX = 202; gWeaponStats[1].sY = 25; gWeaponStats[1].sValDx = 83; // 1) WEIGHT + gWeaponStats[2].sX = 265; gWeaponStats[2].sY = 40; gWeaponStats[2].sValDx = 20; // 2) RANGE + gWeaponStats[3].sX = 202; gWeaponStats[3].sY = 40; gWeaponStats[3].sValDx = 32; // 3) DAMAGE + gWeaponStats[4].sX = 202; gWeaponStats[4].sY = 15; gWeaponStats[4].sValDx = 83; // 4) KEY + gWeaponStats[5].sX = 202; gWeaponStats[5].sY = 50; gWeaponStats[5].sValDx = 32; // 5) AP + gWeaponStats[6].sX = 265; gWeaponStats[6].sY = 50; gWeaponStats[6].sValDx = 20; + gWeaponStats[7].sX = 234; gWeaponStats[7].sY = 50; gWeaponStats[7].sValDx = 0; // 7) = + gWeaponStats[8].sX = 290; gWeaponStats[8].sY = 50; gWeaponStats[8].sValDx = 0; // 8) = + gWeaponStats[9].sX = 0; gWeaponStats[9].sY = 0; gWeaponStats[9].sValDx = 0; + gWeaponStats[10].sX = 0; gWeaponStats[10].sY = 0; gWeaponStats[10].sValDx = 0; + gWeaponStats[11].sX = 0; gWeaponStats[11].sY = 0; gWeaponStats[11].sValDx = 0; + gWeaponStats[12].sX = 0; gWeaponStats[12].sY = 0; gWeaponStats[12].sValDx = 0; + gWeaponStats[13].sX = 0; gWeaponStats[13].sY = 0; gWeaponStats[13].sValDx = 0; + gWeaponStats[14].sX = 0; gWeaponStats[14].sY = 0; gWeaponStats[14].sValDx = 0; + gWeaponStats[15].sX = 0; gWeaponStats[15].sY = 0; gWeaponStats[15].sValDx = 0; + gWeaponStats[16].sX = 0; gWeaponStats[16].sY = 0; gWeaponStats[16].sValDx = 0; + gWeaponStats[17].sX = 0; gWeaponStats[17].sY = 0; gWeaponStats[17].sValDx = 0; + gWeaponStats[18].sX = 0; gWeaponStats[18].sY = 0; gWeaponStats[18].sValDx = 0; + gWeaponStats[19].sX = 0; gWeaponStats[19].sY = 0; gWeaponStats[19].sValDx = 0; + gWeaponStats[20].sX = 0; gWeaponStats[20].sY = 0; gWeaponStats[20].sValDx = 0; + gWeaponStats[21].sX = 0; gWeaponStats[21].sY = 0; gWeaponStats[21].sValDx = 0; + gWeaponStats[22].sX = 0; gWeaponStats[22].sY = 0; gWeaponStats[22].sValDx = 0; + gWeaponStats[23].sX = 0; gWeaponStats[23].sY = 0; gWeaponStats[23].sValDx = 0; + gWeaponStats[24].sX = 0; gWeaponStats[24].sY = 0; gWeaponStats[24].sValDx = 0; + gWeaponStats[25].sX = 0; gWeaponStats[25].sY = 0; gWeaponStats[25].sValDx = 0; + gWeaponStats[26].sX = 0; gWeaponStats[26].sY = 0; gWeaponStats[26].sValDx = 0; + gWeaponStats[27].sX = 0; gWeaponStats[27].sY = 0; gWeaponStats[27].sValDx = 0; + gWeaponStats[28].sX = 0; gWeaponStats[28].sY = 0; gWeaponStats[28].sValDx = 0; + gWeaponStats[29].sX = 0; gWeaponStats[29].sY = 0; gWeaponStats[29].sValDx = 0; + gWeaponStats[30].sX = 0; gWeaponStats[30].sY = 0; gWeaponStats[30].sValDx = 0; + gWeaponStats[31].sX = 0; gWeaponStats[31].sY = 0; gWeaponStats[31].sValDx = 0; + gWeaponStats[32].sX = 0; gWeaponStats[32].sY = 0; gWeaponStats[32].sValDx = 0; + gWeaponStats[33].sX = 0; gWeaponStats[33].sY = 0; gWeaponStats[33].sValDx = 0; + gWeaponStats[34].sX = 0; gWeaponStats[34].sY = 0; gWeaponStats[34].sValDx = 0; + gWeaponStats[35].sX = 0; gWeaponStats[35].sY = 0; gWeaponStats[35].sValDx = 0; + gWeaponStats[36].sX = 0; gWeaponStats[36].sY = 0; gWeaponStats[36].sValDx = 0; + gWeaponStats[37].sX = 0; gWeaponStats[37].sY = 0; gWeaponStats[37].sValDx = 0; + gWeaponStats[38].sX = 0; gWeaponStats[38].sY = 0; gWeaponStats[38].sValDx = 0; + gWeaponStats[39].sX = 0; gWeaponStats[39].sY = 0; gWeaponStats[39].sValDx = 0; + gWeaponStats[40].sX = 0; gWeaponStats[40].sY = 0; gWeaponStats[40].sValDx = 0; + gWeaponStats[41].sX = 0; gWeaponStats[41].sY = 0; gWeaponStats[41].sValDx = 0; + gWeaponStats[42].sX = 0; gWeaponStats[42].sY = 0; gWeaponStats[42].sValDx = 0; + gWeaponStats[43].sX = 0; gWeaponStats[43].sY = 0; gWeaponStats[43].sValDx = 0; + gWeaponStats[44].sX = 0; gWeaponStats[44].sY = 0; gWeaponStats[44].sValDx = 0; + gWeaponStats[45].sX = 0; gWeaponStats[45].sY = 0; gWeaponStats[45].sValDx = 0; + gWeaponStats[46].sX = 0; gWeaponStats[46].sY = 0; gWeaponStats[46].sValDx = 0; + + gMoneyStats[0].sX = 202; gMoneyStats[0].sY = 14; gMoneyStats[0].sValDx = 78; + gMoneyStats[1].sX = 212; gMoneyStats[1].sY = 25; gMoneyStats[1].sValDx = 78; + gMoneyStats[2].sX = 203; gMoneyStats[2].sY = 40; gMoneyStats[2].sValDx = 78; + gMoneyStats[3].sX = 212; gMoneyStats[3].sY = 51; gMoneyStats[3].sValDx = 78; + gMoneyStats[4].sX = 0; gMoneyStats[4].sY = 0; gMoneyStats[4].sValDx = 0; + gMoneyStats[5].sX = 0; gMoneyStats[5].sY = 0; gMoneyStats[5].sValDx = 0; + + gItemDescProsConsRects[0].iLeft = 7; gItemDescProsConsRects[0].iTop = 111; gItemDescProsConsRects[0].iRight = 313; gItemDescProsConsRects[0].iBottom = 118; + gItemDescProsConsRects[1].iLeft = 7; gItemDescProsConsRects[1].iTop = 119; gItemDescProsConsRects[1].iRight = 313; gItemDescProsConsRects[1].iBottom = 126; + } + } +} + +void InitLBECoords() +{ + if(guiCurrentScreen ==MAP_SCREEN) //Strategic + { + if(UsingEDBSystem() > 0) + { + gLBEStats[0].sX = 65; gLBEStats[0].sY = 367; gLBEStats[0].sValDx = 0; //Thigh 1 + gLBEStats[1].sX = 101; gLBEStats[1].sY = 367; gLBEStats[1].sValDx = 0; //Thigh 2 + gLBEStats[2].sX = 65; gLBEStats[2].sY = 391; gLBEStats[2].sValDx = 0; //Thigh 3 + gLBEStats[3].sX = 101; gLBEStats[3].sY = 391; gLBEStats[3].sValDx = 0; //Thigh 4 + gLBEStats[4].sX = 77; gLBEStats[4].sY = 415; gLBEStats[4].sValDx = 0; //Thigh 5 + gLBEStats[5].sX = 0; gLBEStats[5].sY = 0; gLBEStats[5].sValDx = 0; //Thigh 6 + gLBEStats[6].sX = 0; gLBEStats[6].sY = 0; gLBEStats[6].sValDx = 0; //Thigh 7 + gLBEStats[7].sX = 0; gLBEStats[7].sY = 0; gLBEStats[7].sValDx = 0; //Thigh 8 + gLBEStats[8].sX = 0; gLBEStats[8].sY = 0; gLBEStats[8].sValDx = 0; //Thigh 9 + gLBEStats[9].sX = 0; gLBEStats[9].sY = 0; gLBEStats[9].sValDx = 0; //Thigh 10 + gLBEStats[10].sX = 0; gLBEStats[10].sY = 0; gLBEStats[10].sValDx = 0; //Thigh 11 + gLBEStats[11].sX = 0; gLBEStats[11].sY = 0; gLBEStats[11].sValDx = 0; //Thigh 12 + gLBEStats[12].sX = 22; gLBEStats[12].sY = 417; gLBEStats[12].sValDx = 0; //Vest 1 + gLBEStats[13].sX = 58; gLBEStats[13].sY = 417; gLBEStats[13].sValDx = 0; //Vest 2 + gLBEStats[14].sX = 94; gLBEStats[14].sY = 417; gLBEStats[14].sValDx = 0; //Vest 3 + gLBEStats[15].sX = 130; gLBEStats[15].sY = 417; gLBEStats[15].sValDx = 0; //Vest 4 + gLBEStats[16].sX = 166; gLBEStats[16].sY = 417; gLBEStats[16].sValDx = 0; //Vest 5 + gLBEStats[17].sX = 22; gLBEStats[17].sY = 441; gLBEStats[17].sValDx = 0; //Vest 6 + gLBEStats[18].sX = 58; gLBEStats[18].sY = 441; gLBEStats[18].sValDx = 0; //Vest 7 + gLBEStats[19].sX = 94; gLBEStats[19].sY = 441; gLBEStats[19].sValDx = 0; //Vest 8 + gLBEStats[20].sX = 130; gLBEStats[20].sY = 441; gLBEStats[20].sValDx = 0; //Vest 9 + gLBEStats[21].sX = 166; gLBEStats[21].sY = 441; gLBEStats[21].sValDx = 0; //Vest 10 + gLBEStats[22].sX = 202; gLBEStats[22].sY = 417; gLBEStats[22].sValDx = 0; //Vest 11 + gLBEStats[23].sX = 202; gLBEStats[23].sY = 441; gLBEStats[23].sValDx = 0; //Vest 12 + gLBEStats[24].sX = 66; gLBEStats[24].sY = 341; gLBEStats[24].sValDx = 0; //CPack 1 + gLBEStats[25].sX = 102; gLBEStats[25].sY = 341; gLBEStats[25].sValDx = 0; //CPack 2 + gLBEStats[26].sX = 66; gLBEStats[26].sY = 365; gLBEStats[26].sValDx = 0; //CPack 3 + gLBEStats[27].sX = 102; gLBEStats[27].sY = 365; gLBEStats[27].sValDx = 0; //CPack 4 + gLBEStats[28].sX = 69; gLBEStats[28].sY = 389; gLBEStats[28].sValDx = 0; //CPack 5 + gLBEStats[29].sX = 69; gLBEStats[29].sY = 413; gLBEStats[29].sValDx = 0; //CPack 6 + gLBEStats[30].sX = 69; gLBEStats[30].sY = 437; gLBEStats[30].sValDx = 0; //CPack 7 + gLBEStats[31].sX = 0; gLBEStats[31].sY = 0; gLBEStats[31].sValDx = 0; //CPack 8 + gLBEStats[32].sX = 0; gLBEStats[32].sY = 0; gLBEStats[32].sValDx = 0; //CPack 9 + gLBEStats[33].sX = 0; gLBEStats[33].sY = 0; gLBEStats[33].sValDx = 0; //CPack 10 + gLBEStats[34].sX = 0; gLBEStats[34].sY = 0; gLBEStats[34].sValDx = 0; //CPack 11 + gLBEStats[35].sX = 0; gLBEStats[35].sY = 0; gLBEStats[35].sValDx = 0; //CPack 12 + gLBEStats[36].sX = 32; gLBEStats[36].sY = 347; gLBEStats[36].sValDx = 0; //BPack 1 + gLBEStats[37].sX = 32; gLBEStats[37].sY = 371; gLBEStats[37].sValDx = 0; //BPack 2 + gLBEStats[38].sX = 32; gLBEStats[38].sY = 395; gLBEStats[38].sValDx = 0; //BPack 3 + gLBEStats[39].sX = 32; gLBEStats[39].sY = 419; gLBEStats[39].sValDx = 0; //BPack 4 + gLBEStats[40].sX = 68; gLBEStats[40].sY = 347; gLBEStats[40].sValDx = 0; //BPack 5 + gLBEStats[41].sX = 68; gLBEStats[41].sY = 371; gLBEStats[41].sValDx = 0; //BPack 6 + gLBEStats[42].sX = 68; gLBEStats[42].sY = 395; gLBEStats[42].sValDx = 0; //BPack 7 + gLBEStats[43].sX = 68; gLBEStats[43].sY = 419; gLBEStats[43].sValDx = 0; //BPack 8 + gLBEStats[44].sX = 104; gLBEStats[44].sY = 347; gLBEStats[44].sValDx = 0; //BPack 9 + gLBEStats[45].sX = 104; gLBEStats[45].sY = 371; gLBEStats[45].sValDx = 0; //BPack 10 + gLBEStats[46].sX = 104; gLBEStats[46].sY = 395; gLBEStats[46].sValDx = 0; //BPack 11 + gLBEStats[47].sX = 104; gLBEStats[47].sY = 419; gLBEStats[47].sValDx = 0; //BPack 12 + } + else + { + gLBEStats[0].sX = 101; gLBEStats[0].sY = 287; gLBEStats[0].sValDx = 0; //Thigh 1 + gLBEStats[1].sX = 137; gLBEStats[1].sY = 287; gLBEStats[1].sValDx = 0; //Thigh 2 + gLBEStats[2].sX = 101; gLBEStats[2].sY = 311; gLBEStats[2].sValDx = 0; //Thigh 3 + gLBEStats[3].sX = 137; gLBEStats[3].sY = 311; gLBEStats[3].sValDx = 0; //Thigh 4 + gLBEStats[4].sX = 112; gLBEStats[4].sY = 335; gLBEStats[4].sValDx = 0; //Thigh 5 + gLBEStats[5].sX = 0; gLBEStats[5].sY = 0; gLBEStats[5].sValDx = 0; //Thigh 6 + gLBEStats[6].sX = 0; gLBEStats[6].sY = 0; gLBEStats[6].sValDx = 0; //Thigh 7 + gLBEStats[7].sX = 0; gLBEStats[7].sY = 0; gLBEStats[7].sValDx = 0; //Thigh 8 + gLBEStats[8].sX = 0; gLBEStats[8].sY = 0; gLBEStats[8].sValDx = 0; //Thigh 9 + gLBEStats[9].sX = 0; gLBEStats[9].sY = 0; gLBEStats[9].sValDx = 0; //Thigh 10 + gLBEStats[10].sX = 0; gLBEStats[10].sY = 0; gLBEStats[10].sValDx = 0; //Thigh 11 + gLBEStats[11].sX = 0; gLBEStats[11].sY = 0; gLBEStats[11].sValDx = 0; //Thigh 12 + gLBEStats[12].sX = 22; gLBEStats[12].sY = 299; gLBEStats[12].sValDx = 0; //Vest 1 + gLBEStats[13].sX = 58; gLBEStats[13].sY = 299; gLBEStats[13].sValDx = 0; //Vest 2 + gLBEStats[14].sX = 94; gLBEStats[14].sY = 299; gLBEStats[14].sValDx = 0; //Vest 3 + gLBEStats[15].sX = 130; gLBEStats[15].sY = 299; gLBEStats[15].sValDx = 0; //Vest 4 + gLBEStats[16].sX = 166; gLBEStats[16].sY = 299; gLBEStats[16].sValDx = 0; //Vest 5 + gLBEStats[17].sX = 22; gLBEStats[17].sY = 323; gLBEStats[17].sValDx = 0; //Vest 6 + gLBEStats[18].sX = 58; gLBEStats[18].sY = 323; gLBEStats[18].sValDx = 0; //Vest 7 + gLBEStats[19].sX = 94; gLBEStats[19].sY = 323; gLBEStats[19].sValDx = 0; //Vest 8 + gLBEStats[20].sX = 130; gLBEStats[20].sY = 323; gLBEStats[20].sValDx = 0; //Vest 9 + gLBEStats[21].sX = 166; gLBEStats[21].sY = 323; gLBEStats[21].sValDx = 0; //Vest 10 + gLBEStats[22].sX = 202; gLBEStats[22].sY = 299; gLBEStats[22].sValDx = 0; //Vest 11 + gLBEStats[23].sX = 202; gLBEStats[23].sY = 323; gLBEStats[23].sValDx = 0; //Vest 12 + gLBEStats[24].sX = 101; gLBEStats[24].sY = 287; gLBEStats[24].sValDx = 0; //CPack 1 + gLBEStats[25].sX = 137; gLBEStats[25].sY = 287; gLBEStats[25].sValDx = 0; //CPack 2 + gLBEStats[26].sX = 101; gLBEStats[26].sY = 311; gLBEStats[26].sValDx = 0; //CPack 3 + gLBEStats[27].sX = 137; gLBEStats[27].sY = 311; gLBEStats[27].sValDx = 0; //CPack 4 + gLBEStats[28].sX = 104; gLBEStats[28].sY = 335; gLBEStats[28].sValDx = 0; //CPack 5 + gLBEStats[29].sX = 104; gLBEStats[29].sY = 359; gLBEStats[29].sValDx = 0; //CPack 6 + gLBEStats[30].sX = 104; gLBEStats[30].sY = 383; gLBEStats[30].sValDx = 0; //CPack 7 + gLBEStats[31].sX = 0; gLBEStats[31].sY = 0; gLBEStats[31].sValDx = 0; //CPack 8 + gLBEStats[32].sX = 0; gLBEStats[32].sY = 0; gLBEStats[32].sValDx = 0; //CPack 9 + gLBEStats[33].sX = 0; gLBEStats[33].sY = 0; gLBEStats[33].sValDx = 0; //CPack 10 + gLBEStats[34].sX = 0; gLBEStats[34].sY = 0; gLBEStats[34].sValDx = 0; //CPack 11 + gLBEStats[35].sX = 0; gLBEStats[35].sY = 0; gLBEStats[35].sValDx = 0; //CPack 12 + gLBEStats[36].sX = 68; gLBEStats[36].sY = 275; gLBEStats[36].sValDx = 0; //BPack 1 + gLBEStats[37].sX = 68; gLBEStats[37].sY = 299; gLBEStats[37].sValDx = 0; //BPack 2 + gLBEStats[38].sX = 68; gLBEStats[38].sY = 323; gLBEStats[38].sValDx = 0; //BPack 3 + gLBEStats[39].sX = 68; gLBEStats[39].sY = 347; gLBEStats[39].sValDx = 0; //BPack 4 + gLBEStats[40].sX = 104; gLBEStats[40].sY = 275; gLBEStats[40].sValDx = 0; //BPack 5 + gLBEStats[41].sX = 104; gLBEStats[41].sY = 299; gLBEStats[41].sValDx = 0; //BPack 6 + gLBEStats[42].sX = 104; gLBEStats[42].sY = 323; gLBEStats[42].sValDx = 0; //BPack 7 + gLBEStats[43].sX = 104; gLBEStats[43].sY = 347; gLBEStats[43].sValDx = 0; //BPack 8 + gLBEStats[44].sX = 140; gLBEStats[44].sY = 275; gLBEStats[44].sValDx = 0; //BPack 9 + gLBEStats[45].sX = 140; gLBEStats[45].sY = 299; gLBEStats[45].sValDx = 0; //BPack 10 + gLBEStats[46].sX = 140; gLBEStats[46].sY = 323; gLBEStats[46].sValDx = 0; //BPack 11 + gLBEStats[47].sX = 140; gLBEStats[47].sY = 347; gLBEStats[47].sValDx = 0; //BPack 12 + } + } + else + { + if(UsingEDBSystem() > 0) + { + gLBEStats[0].sX = 456; gLBEStats[0].sY = 10; gLBEStats[0].sValDx = 0; //Thigh 1 + gLBEStats[1].sX = 492; gLBEStats[1].sY = 10; gLBEStats[1].sValDx = 0; //Thigh 2 + gLBEStats[2].sX = 456; gLBEStats[2].sY = 34; gLBEStats[2].sValDx = 0; //Thigh 3 + gLBEStats[3].sX = 492; gLBEStats[3].sY = 34; gLBEStats[3].sValDx = 0; //Thigh 4 + gLBEStats[4].sX = 467; gLBEStats[4].sY = 58; gLBEStats[4].sValDx = 0; //Thigh 5 + gLBEStats[5].sX = 0; gLBEStats[5].sY = 0; gLBEStats[5].sValDx = 0; //Thigh 6 + gLBEStats[6].sX = 0; gLBEStats[6].sY = 0; gLBEStats[6].sValDx = 0; //Thigh 7 + gLBEStats[7].sX = 0; gLBEStats[7].sY = 0; gLBEStats[7].sValDx = 0; //Thigh 8 + gLBEStats[8].sX = 0; gLBEStats[8].sY = 0; gLBEStats[8].sValDx = 0; //Thigh 9 + gLBEStats[9].sX = 0; gLBEStats[9].sY = 0; gLBEStats[9].sValDx = 0; //Thigh 10 + gLBEStats[10].sX = 0; gLBEStats[10].sY = 0; gLBEStats[10].sValDx = 0; //Thigh 11 + gLBEStats[11].sX = 0; gLBEStats[11].sY = 0; gLBEStats[11].sValDx = 0; //Thigh 12 + gLBEStats[12].sX = 456; gLBEStats[12].sY = 10; gLBEStats[12].sValDx = 0; //Vest 1 + gLBEStats[13].sX = 492; gLBEStats[13].sY = 10; gLBEStats[13].sValDx = 0; //Vest 2 + gLBEStats[14].sX = 528; gLBEStats[14].sY = 10; gLBEStats[14].sValDx = 0; //Vest 3 + gLBEStats[15].sX = 564; gLBEStats[15].sY = 10; gLBEStats[15].sValDx = 0; //Vest 4 + gLBEStats[16].sX = 600; gLBEStats[16].sY = 10; gLBEStats[16].sValDx = 0; //Vest 5 + gLBEStats[17].sX = 456; gLBEStats[17].sY = 34; gLBEStats[17].sValDx = 0; //Vest 6 + gLBEStats[18].sX = 492; gLBEStats[18].sY = 34; gLBEStats[18].sValDx = 0; //Vest 7 + gLBEStats[19].sX = 528; gLBEStats[19].sY = 34; gLBEStats[19].sValDx = 0; //Vest 8 + gLBEStats[20].sX = 564; gLBEStats[20].sY = 34; gLBEStats[20].sValDx = 0; //Vest 9 + gLBEStats[21].sX = 600; gLBEStats[21].sY = 34; gLBEStats[21].sValDx = 0; //Vest 10 + gLBEStats[22].sX = 636; gLBEStats[22].sY = 10; gLBEStats[22].sValDx = 0; //Vest 11 + gLBEStats[23].sX = 636; gLBEStats[23].sY = 34; gLBEStats[23].sValDx = 0; //Vest 12 + gLBEStats[24].sX = 456; gLBEStats[24].sY = 10; gLBEStats[24].sValDx = 0; //CPack 1 + gLBEStats[25].sX = 492; gLBEStats[25].sY = 10; gLBEStats[25].sValDx = 0; //CPack 2 + gLBEStats[26].sX = 456; gLBEStats[26].sY = 34; gLBEStats[26].sValDx = 0; //CPack 3 + gLBEStats[27].sX = 492; gLBEStats[27].sY = 34; gLBEStats[27].sValDx = 0; //CPack 4 + gLBEStats[28].sX = 528; gLBEStats[28].sY = 10; gLBEStats[28].sValDx = 0; //CPack 5 + gLBEStats[29].sX = 528; gLBEStats[29].sY = 34; gLBEStats[29].sValDx = 0; //CPack 6 + gLBEStats[30].sX = 528; gLBEStats[30].sY = 58; gLBEStats[30].sValDx = 0; //CPack 7 + gLBEStats[31].sX = 0; gLBEStats[31].sY = 0; gLBEStats[31].sValDx = 0; //CPack 8 + gLBEStats[32].sX = 0; gLBEStats[32].sY = 0; gLBEStats[32].sValDx = 0; //CPack 9 + gLBEStats[33].sX = 0; gLBEStats[33].sY = 0; gLBEStats[33].sValDx = 0; //CPack 10 + gLBEStats[34].sX = 0; gLBEStats[34].sY = 0; gLBEStats[34].sValDx = 0; //CPack 11 + gLBEStats[35].sX = 0; gLBEStats[35].sY = 0; gLBEStats[35].sValDx = 0; //CPack 12 + gLBEStats[36].sX = 456; gLBEStats[36].sY = 10; gLBEStats[36].sValDx = 0; //BPack 1 + gLBEStats[37].sX = 456; gLBEStats[37].sY = 34; gLBEStats[37].sValDx = 0; //BPack 2 + gLBEStats[38].sX = 456; gLBEStats[38].sY = 58; gLBEStats[38].sValDx = 0; //BPack 3 + gLBEStats[39].sX = 456; gLBEStats[39].sY = 82; gLBEStats[39].sValDx = 0; //BPack 4 + gLBEStats[40].sX = 492; gLBEStats[40].sY = 10; gLBEStats[40].sValDx = 0; //BPack 5 + gLBEStats[41].sX = 492; gLBEStats[41].sY = 34; gLBEStats[41].sValDx = 0; //BPack 6 + gLBEStats[42].sX = 492; gLBEStats[42].sY = 58; gLBEStats[42].sValDx = 0; //BPack 7 + gLBEStats[43].sX = 492; gLBEStats[43].sY = 82; gLBEStats[43].sValDx = 0; //BPack 8 + gLBEStats[44].sX = 528; gLBEStats[44].sY = 10; gLBEStats[44].sValDx = 0; //BPack 9 + gLBEStats[45].sX = 528; gLBEStats[45].sY = 34; gLBEStats[45].sValDx = 0; //BPack 10 + gLBEStats[46].sX = 528; gLBEStats[46].sY = 58; gLBEStats[46].sValDx = 0; //BPack 11 + gLBEStats[47].sX = 528; gLBEStats[47].sY = 82; gLBEStats[47].sValDx = 0; //BPack 12 + } + else + { + gLBEStats[0].sX = 586; gLBEStats[0].sY = 10; gLBEStats[0].sValDx = 0; //Thigh 1 + gLBEStats[1].sX = 622; gLBEStats[1].sY = 10; gLBEStats[1].sValDx = 0; //Thigh 2 + gLBEStats[2].sX = 586; gLBEStats[2].sY = 34; gLBEStats[2].sValDx = 0; //Thigh 3 + gLBEStats[3].sX = 622; gLBEStats[3].sY = 34; gLBEStats[3].sValDx = 0; //Thigh 4 + gLBEStats[4].sX = 597; gLBEStats[4].sY = 58; gLBEStats[4].sValDx = 0; //Thigh 5 + gLBEStats[5].sX = 0; gLBEStats[5].sY = 0; gLBEStats[5].sValDx = 0; //Thigh 6 + gLBEStats[6].sX = 0; gLBEStats[6].sY = 0; gLBEStats[6].sValDx = 0; //Thigh 7 + gLBEStats[7].sX = 0; gLBEStats[7].sY = 0; gLBEStats[7].sValDx = 0; //Thigh 8 + gLBEStats[8].sX = 0; gLBEStats[8].sY = 0; gLBEStats[8].sValDx = 0; //Thigh 9 + gLBEStats[9].sX = 0; gLBEStats[9].sY = 0; gLBEStats[9].sValDx = 0; //Thigh 10 + gLBEStats[10].sX = 0; gLBEStats[10].sY = 0; gLBEStats[10].sValDx = 0; //Thigh 11 + gLBEStats[11].sX = 0; gLBEStats[11].sY = 0; gLBEStats[11].sValDx = 0; //Thigh 12 + gLBEStats[12].sX = 269; gLBEStats[12].sY = 139; gLBEStats[12].sValDx = 0; //Vest 1 + gLBEStats[13].sX = 305; gLBEStats[13].sY = 139; gLBEStats[13].sValDx = 0; //Vest 2 + gLBEStats[14].sX = 341; gLBEStats[14].sY = 139; gLBEStats[14].sValDx = 0; //Vest 3 + gLBEStats[15].sX = 377; gLBEStats[15].sY = 139; gLBEStats[15].sValDx = 0; //Vest 4 + gLBEStats[16].sX = 413; gLBEStats[16].sY = 139; gLBEStats[16].sValDx = 0; //Vest 5 + gLBEStats[17].sX = 269; gLBEStats[17].sY = 163; gLBEStats[17].sValDx = 0; //Vest 6 + gLBEStats[18].sX = 305; gLBEStats[18].sY = 163; gLBEStats[18].sValDx = 0; //Vest 7 + gLBEStats[19].sX = 341; gLBEStats[19].sY = 163; gLBEStats[19].sValDx = 0; //Vest 8 + gLBEStats[20].sX = 377; gLBEStats[20].sY = 163; gLBEStats[20].sValDx = 0; //Vest 9 + gLBEStats[21].sX = 413; gLBEStats[21].sY = 163; gLBEStats[21].sValDx = 0; //Vest 10 + gLBEStats[22].sX = 449; gLBEStats[22].sY = 139; gLBEStats[22].sValDx = 0; //Vest 11 + gLBEStats[23].sX = 449; gLBEStats[23].sY = 163; gLBEStats[23].sValDx = 0; //Vest 12 + gLBEStats[24].sX = 585; gLBEStats[24].sY = 10; gLBEStats[24].sValDx = 0; //CPack 1 + gLBEStats[25].sX = 621; gLBEStats[25].sY = 10; gLBEStats[25].sValDx = 0; //CPack 2 + gLBEStats[26].sX = 585; gLBEStats[26].sY = 34; gLBEStats[26].sValDx = 0; //CPack 3 + gLBEStats[27].sX = 621; gLBEStats[27].sY = 34; gLBEStats[27].sValDx = 0; //CPack 4 + gLBEStats[28].sX = 657; gLBEStats[28].sY = 10; gLBEStats[28].sValDx = 0; //CPack 5 + gLBEStats[29].sX = 657; gLBEStats[29].sY = 34; gLBEStats[29].sValDx = 0; //CPack 6 + gLBEStats[30].sX = 657; gLBEStats[30].sY = 58; gLBEStats[30].sValDx = 0; //CPack 7 + gLBEStats[31].sX = 0; gLBEStats[31].sY = 0; gLBEStats[31].sValDx = 0; //CPack 8 + gLBEStats[32].sX = 0; gLBEStats[32].sY = 0; gLBEStats[32].sValDx = 0; //CPack 9 + gLBEStats[33].sX = 0; gLBEStats[33].sY = 0; gLBEStats[33].sValDx = 0; //CPack 10 + gLBEStats[34].sX = 0; gLBEStats[34].sY = 0; gLBEStats[34].sValDx = 0; //CPack 11 + gLBEStats[35].sX = 0; gLBEStats[35].sY = 0; gLBEStats[35].sValDx = 0; //CPack 12 + gLBEStats[36].sX = 585; gLBEStats[36].sY = 10; gLBEStats[36].sValDx = 0; //BPack 1 + gLBEStats[37].sX = 585; gLBEStats[37].sY = 34; gLBEStats[37].sValDx = 0; //BPack 2 + gLBEStats[38].sX = 585; gLBEStats[38].sY = 58; gLBEStats[38].sValDx = 0; //BPack 3 + gLBEStats[39].sX = 585; gLBEStats[39].sY = 82; gLBEStats[39].sValDx = 0; //BPack 4 + gLBEStats[40].sX = 621; gLBEStats[40].sY = 10; gLBEStats[40].sValDx = 0; //BPack 5 + gLBEStats[41].sX = 621; gLBEStats[41].sY = 34; gLBEStats[41].sValDx = 0; //BPack 6 + gLBEStats[42].sX = 621; gLBEStats[42].sY = 58; gLBEStats[42].sValDx = 0; //BPack 7 + gLBEStats[43].sX = 621; gLBEStats[43].sY = 82; gLBEStats[43].sValDx = 0; //BPack 8 + gLBEStats[44].sX = 657; gLBEStats[44].sY = 10; gLBEStats[44].sValDx = 0; //BPack 9 + gLBEStats[45].sX = 657; gLBEStats[45].sY = 34; gLBEStats[45].sValDx = 0; //BPack 10 + gLBEStats[46].sX = 657; gLBEStats[46].sY = 58; gLBEStats[46].sValDx = 0; //BPack 11 + gLBEStats[47].sX = 657; gLBEStats[47].sY = 82; gLBEStats[47].sValDx = 0; //BPack 12 + } + } +} + +void InitItemDescriptionBoxOffsets() +{ + // Initiate variables for Enhanced Item Description Box system + if(guiCurrentScreen ==MAP_SCREEN) //Strategic + { + if(UsingEDBSystem() > 0) + { + // STRATEGIC Description Box Icons + BULLET_DRAW_X = (112 + gsInvDescX); + BULLET_DRAW_Y = (136 + gsInvDescY); + BULLET_SING_X = (112 + gsInvDescX); + BULLET_SING_Y = (148 + gsInvDescY); + BULLET_BURST_X = (112 + gsInvDescX); + BULLET_BURST_Y = (160 + gsInvDescY); + BULLET_AUTO_X = (112 + gsInvDescX); + BULLET_AUTO_Y = (172 + gsInvDescY); + BULLET_RELOAD_X = (112 + gsInvDescX); + BULLET_RELOAD_Y = (184 + gsInvDescY); + BULLET_MRELOAD_X = (112 + gsInvDescX); + BULLET_MRELOAD_Y = (196 + gsInvDescY); + BULLET_RANGE_X = (47 + gsInvDescX); + BULLET_RANGE_Y = (124 + gsInvDescY); + BULLET_DAMAGE_X = (47 + gsInvDescX); + BULLET_DAMAGE_Y = (136 + gsInvDescY); + BULLET_AUTOPEN_X = (47 + gsInvDescX); + BULLET_AUTOPEN_Y = (148 + gsInvDescY); + BULLET_AUTO5AP_X = (47 + gsInvDescX); + BULLET_AUTO5AP_Y = (160 + gsInvDescY); + BULLET_ACC_X = (47 + gsInvDescX); + BULLET_ACC_Y = (172 + gsInvDescY); + BULLET_RELIABILITY_X = (47 + gsInvDescX); + BULLET_RELIABILITY_Y = (184 + gsInvDescY); + BULLET_REPAIR_X = (47 + gsInvDescX); + BULLET_REPAIR_Y = (196 + gsInvDescY); + BULLET_LOUDNESS_X = (174 + gsInvDescX); + BULLET_LOUDNESS_Y = (136 + gsInvDescY); + BULLET_FLASH_X = (198 + gsInvDescX); + BULLET_FLASH_Y = (124 + gsInvDescY); + BULLET_TOHIT_X = (174 + gsInvDescX); + BULLET_TOHIT_Y = (148 + gsInvDescY); + BULLET_BESTLASERRANGE_X = (174 + gsInvDescX); + BULLET_BESTLASERRANGE_Y = (160 + gsInvDescY); + BULLET_AIMBONUS_X = (174 + gsInvDescX); + BULLET_AIMBONUS_Y = (172 + gsInvDescY); + BULLET_MINRANGEAIMBONUS_X = (174 + gsInvDescX); + BULLET_MINRANGEAIMBONUS_Y = (184 + gsInvDescY); + BULLET_BIPOD_X = (174 + gsInvDescX); + BULLET_BIPOD_Y = (196 + gsInvDescY); + + // Icon Locations for AMMO stats + BULLET_ARMORPEN_X = (47 + gsInvDescX); + BULLET_ARMORPEN_Y = (124 + gsInvDescY); + BULLET_TUMBLE_X = (47 + gsInvDescX); + BULLET_TUMBLE_Y = (136 + gsInvDescY); + BULLET_PREARMOR_X = (47 + gsInvDescX); + BULLET_PREARMOR_Y = (148 + gsInvDescY); + BULLET_TRACER_X = (115 + gsInvDescX); + BULLET_TRACER_Y = (124 + gsInvDescY); + BULLET_ANTITANK_X = (140 + gsInvDescX); + BULLET_ANTITANK_Y = (124 + gsInvDescY); + BULLET_LOCKBUSTER_X = (115 + gsInvDescX); + BULLET_LOCKBUSTER_Y = (148 + gsInvDescY); + BULLET_IGNOREARMOR_X = (140 + gsInvDescX); + BULLET_IGNOREARMOR_Y = (148 + gsInvDescY); + BULLET_ACIDIC_X = (115 + gsInvDescX); + BULLET_ACIDIC_Y = (172 + gsInvDescY); + BULLET_AMMORANGEBON_X = (174 + gsInvDescX); + BULLET_AMMORANGEBON_Y = (124 + gsInvDescY); + BULLET_AMMODAMAGEBON_X = (174 + gsInvDescX); + BULLET_AMMODAMAGEBON_Y = (136 + gsInvDescY); + BULLET_AMMOTOHITBON_X = (174 + gsInvDescX); + BULLET_AMMOTOHITBON_Y = (148 + gsInvDescY); + BULLET_AMMOBURSTBON_X = (174 + gsInvDescX); + BULLET_AMMOBURSTBON_Y = (160 + gsInvDescY); + BULLET_AMMORELIABILITYBON_X = (174 + gsInvDescX); + BULLET_AMMORELIABILITYBON_Y = (172 + gsInvDescY); + BULLET_AMMONOISESUPP_X = (174 + gsInvDescX); + BULLET_AMMONOISESUPP_Y = (184 + gsInvDescY); + + // Icon Locations for EXPLOSIVES stats + BULLET_EXPLOSIVEDAMAGE_X = (47 + gsInvDescX); + BULLET_EXPLOSIVEDAMAGE_Y = (124 + gsInvDescY); + BULLET_EXPLOSIVESTUNDAMAGE_X = (47 + gsInvDescX); + BULLET_EXPLOSIVESTUNDAMAGE_Y = (136 + gsInvDescY); + BULLET_EXPLOSIVELOUDNESS_X = (47 + gsInvDescX); + BULLET_EXPLOSIVELOUDNESS_Y = (148 + gsInvDescY); + BULLET_EXPLOSIVEVOLATILITY_X = (47 + gsInvDescX); + BULLET_EXPLOSIVEVOLATILITY_Y = (160 + gsInvDescY); + BULLET_EXPLOSIVERADIUS_X = (131 + gsInvDescX); + BULLET_EXPLOSIVERADIUS_Y = (124 + gsInvDescY); + BULLET_EXPLOSIVESTARTRADIUS_X = (113 + gsInvDescX); + BULLET_EXPLOSIVESTARTRADIUS_Y = (124 + gsInvDescY); + BULLET_EXPLOSIVEARROW_X = (131 + gsInvDescX); + BULLET_EXPLOSIVEARROW_Y = (130 + gsInvDescY); + BULLET_EXPLOSIVEENDRADIUS_X = (146 + gsInvDescX); + BULLET_EXPLOSIVEENDRADIUS_Y = (124 + gsInvDescY); + BULLET_EXPLOSIVEDURATION_X = (112 + gsInvDescX); + BULLET_EXPLOSIVEDURATION_Y = (172 + gsInvDescY); + + // Icon Locations for ARMOR stats + BULLET_ARMOR_X = (47 + gsInvDescX); + BULLET_ARMOR_Y = (124 + gsInvDescY); + BULLET_ARMORCOVERAGE_X = (47 + gsInvDescX); + BULLET_ARMORCOVERAGE_Y = (136 + gsInvDescY); + BULLET_ARMORDEGRADE_X = (47 + gsInvDescX); + BULLET_ARMORDEGRADE_Y = (148 + gsInvDescY); + BULLET_ARMORAPBONUS_X = (112 + gsInvDescX); + BULLET_ARMORAPBONUS_Y = (124 + gsInvDescY); + BULLET_ARMORAIMBONUS_X = (112 + gsInvDescX); + BULLET_ARMORAIMBONUS_Y = (136 + gsInvDescY); + BULLET_ARMORWOODCAMO_X = (112 + gsInvDescX); + BULLET_ARMORWOODCAMO_Y = (148 + gsInvDescY); + BULLET_ARMORURBANCAMO_X = (112 + gsInvDescX); + BULLET_ARMORURBANCAMO_Y = (160 + gsInvDescY); + BULLET_ARMORDESERTCAMO_X = (112 + gsInvDescX); + BULLET_ARMORDESERTCAMO_Y = (172 + gsInvDescY); + BULLET_ARMORSNOWCAMO_X = (112 + gsInvDescX); + BULLET_ARMORSNOWCAMO_Y = (184 + gsInvDescY); + BULLET_ARMORSTEALTH_X = (112 + gsInvDescX); + BULLET_ARMORSTEALTH_Y = (196 + gsInvDescY); + BULLET_ARMORVISIONRANGEBONUS_X = (174 + gsInvDescX); + BULLET_ARMORVISIONRANGEBONUS_Y = (124 + gsInvDescY); + BULLET_ARMORDAYVISIONRANGEBONUS_X = (175 + gsInvDescX); + BULLET_ARMORDAYVISIONRANGEBONUS_Y = (136 + gsInvDescY); + BULLET_ARMORNIGHTVISIONRANGEBONUS_X = (175 + gsInvDescX); + BULLET_ARMORNIGHTVISIONRANGEBONUS_Y = (148 + gsInvDescY); + BULLET_ARMORBRIGHTLIGHTVISIONRANGEBONUS_X = (175 + gsInvDescX); + BULLET_ARMORBRIGHTLIGHTVISIONRANGEBONUS_Y = (160 + gsInvDescY); + BULLET_ARMORCAVEVISIONRANGEBONUS_X = (175 + gsInvDescX); + BULLET_ARMORCAVEVISIONRANGEBONUS_Y = (172 + gsInvDescY); + BULLET_ARMORPERCENTTUNNELVISION_X = (175 + gsInvDescX); + BULLET_ARMORPERCENTTUNNELVISION_Y = (184 + gsInvDescY); + BULLET_ARMORHEARINGRANGEBONUS_X = (174 + gsInvDescX); + BULLET_ARMORHEARINGRANGEBONUS_Y = (196 + gsInvDescY); + + // Generic Icon Locations for MISC Item Stats + BULLET_COL1ROW1_X = (47 + gsInvDescX); + BULLET_COL1ROW1_Y = (124 + gsInvDescY); + BULLET_COL1ROW2_X = (47 + gsInvDescX); + BULLET_COL1ROW2_Y = (136 + gsInvDescY); + BULLET_COL1ROW3_X = (47 + gsInvDescX); + BULLET_COL1ROW3_Y = (148 + gsInvDescY); + BULLET_COL1ROW4_X = (47 + gsInvDescX); + BULLET_COL1ROW4_Y = (160 + gsInvDescY); + BULLET_COL1ROW5_X = (47 + gsInvDescX); + BULLET_COL1ROW5_Y = (172 + gsInvDescY); + BULLET_COL1ROW6_X = (47 + gsInvDescX); + BULLET_COL1ROW6_Y = (184 + gsInvDescY); + BULLET_COL1ROW7_X = (47 + gsInvDescX); + BULLET_COL1ROW7_Y = (196 + gsInvDescY); + BULLET_COL2ROW1_X = (144 + gsInvDescX); + BULLET_COL2ROW1_Y = (124 + gsInvDescY); + BULLET_COL2ROW2_X = (144 + gsInvDescX); + BULLET_COL2ROW2_Y = (136 + gsInvDescY); + BULLET_COL2ROW3_X = (144 + gsInvDescX); + BULLET_COL2ROW3_Y = (148 + gsInvDescY); + BULLET_COL2ROW4_X = (144 + gsInvDescX); + BULLET_COL2ROW4_Y = (160 + gsInvDescY); + BULLET_COL2ROW5_X = (144 + gsInvDescX); + BULLET_COL2ROW5_Y = (172 + gsInvDescY); + BULLET_COL2ROW6_X = (144 + gsInvDescX); + BULLET_COL2ROW6_Y = (184 + gsInvDescY); + BULLET_COL2ROW7_X = (144 + gsInvDescX); + BULLET_COL2ROW7_Y = (196 + gsInvDescY); + // END ICONS SEGMENT + ITEMDESC_DESC_START_X = ( 23 + gsInvDescX ); + ITEMDESC_DESC_START_Y = (230 + gsInvDescY); + ITEMDESC_PROS_START_X = ( 23 + gsInvDescX ); + ITEMDESC_PROS_START_Y = (290 + gsInvDescY); + ITEMDESC_CONS_START_X = ( 23 + gsInvDescX ); + ITEMDESC_CONS_START_Y = (300 + gsInvDescY); + } + else + { + // STRATEGIC Description Box Icon locations + BULLET_SING_X = (77 + gsInvDescX); + BULLET_SING_Y = (135 + gsInvDescY); + BULLET_BURST_X = (117 + gsInvDescX); + BULLET_BURST_Y = (135 + gsInvDescY); + // END ICONS SEGMENT + ITEMDESC_DESC_START_X = ( 23 + gsInvDescX ); // Description Text Box, Strategic + ITEMDESC_DESC_START_Y = (170 + gsInvDescY); + ITEMDESC_PROS_START_X = ( 23 + gsInvDescX ); // Pros, Strategic + ITEMDESC_PROS_START_Y = (230 + gsInvDescY); + ITEMDESC_CONS_START_X = ( 23 + gsInvDescX ); // Cons, Strategic + ITEMDESC_CONS_START_Y = (240 + gsInvDescY); + } + } + else //Tactical + { + if(UsingEDBSystem() == 1) // NIV EDB + { + // Icon locations, Tactical + BULLET_DRAW_X = (268 + gsInvDescX); + BULLET_DRAW_Y = (56 + gsInvDescY); + BULLET_SING_X = (268 + gsInvDescX); + BULLET_SING_Y = (68 + gsInvDescY); + BULLET_BURST_X = (268 + gsInvDescX); + BULLET_BURST_Y = (80 + gsInvDescY); + BULLET_AUTO_X = (268 + gsInvDescX); + BULLET_AUTO_Y = (92 + gsInvDescY); + BULLET_RELOAD_X = (268 + gsInvDescX); + BULLET_RELOAD_Y = (104 + gsInvDescY); + BULLET_MRELOAD_X = (268 + gsInvDescX); + BULLET_MRELOAD_Y = (116 + gsInvDescY); + BULLET_RANGE_X = (203 + gsInvDescX); + BULLET_RANGE_Y = (44 + gsInvDescY); + BULLET_DAMAGE_X = (203 + gsInvDescX); + BULLET_DAMAGE_Y = (56 + gsInvDescY); + BULLET_AUTOPEN_X = (203 + gsInvDescX); + BULLET_AUTOPEN_Y = (68 + gsInvDescY); + BULLET_AUTO5AP_X = (203 + gsInvDescX); + BULLET_AUTO5AP_Y = (80 + gsInvDescY); + BULLET_ACC_X = (203 + gsInvDescX); + BULLET_ACC_Y = (92 + gsInvDescY); + BULLET_RELIABILITY_X = (203 + gsInvDescX); + BULLET_RELIABILITY_Y = (104 + gsInvDescY); + BULLET_REPAIR_X = (203 + gsInvDescX); + BULLET_REPAIR_Y = (116 + gsInvDescY); + BULLET_FLASH_X = (226 + gsInvDescX); //291 + BULLET_FLASH_Y = (136 + gsInvDescY); //136 + BULLET_LOUDNESS_X = (203 + gsInvDescX); //268 + BULLET_LOUDNESS_Y = (160 + gsInvDescY); //159 + BULLET_TOHIT_X = (268 + gsInvDescX); //203 + BULLET_TOHIT_Y = (136 + gsInvDescY); //136 + BULLET_BESTLASERRANGE_X = (268 + gsInvDescX); //203 + BULLET_BESTLASERRANGE_Y = (148 + gsInvDescY); //148 + BULLET_AIMBONUS_X = (268 + gsInvDescX); //203 + BULLET_AIMBONUS_Y = (160 + gsInvDescY); //160 + BULLET_MINRANGEAIMBONUS_X = (268 + gsInvDescX); //203 + BULLET_MINRANGEAIMBONUS_Y = (172 + gsInvDescY); //172 + BULLET_BIPOD_X = (203 + gsInvDescX); //268 + BULLET_BIPOD_Y = (172 + gsInvDescY); //171 + + // Icon Locations for AMMO stats + BULLET_ARMORPEN_X = (203 + gsInvDescX); + BULLET_ARMORPEN_Y = (44 + gsInvDescY); + BULLET_TUMBLE_X = (203 + gsInvDescX); + BULLET_TUMBLE_Y = (56 + gsInvDescY); + BULLET_PREARMOR_X = (203 + gsInvDescX); + BULLET_PREARMOR_Y = (68 + gsInvDescY); + BULLET_TRACER_X = (271 + gsInvDescX); + BULLET_TRACER_Y = (44 + gsInvDescY); + BULLET_ANTITANK_X = (296 + gsInvDescX); + BULLET_ANTITANK_Y = (44 + gsInvDescY); + BULLET_LOCKBUSTER_X = (271 + gsInvDescX); + BULLET_LOCKBUSTER_Y = (68 + gsInvDescY); + BULLET_IGNOREARMOR_X = (296 + gsInvDescX); + BULLET_IGNOREARMOR_Y = (68 + gsInvDescY); + BULLET_ACIDIC_X = (271 + gsInvDescX); + BULLET_ACIDIC_Y = (92 + gsInvDescY); + BULLET_AMMORANGEBON_X = (203 + gsInvDescX); + BULLET_AMMORANGEBON_Y = (136 + gsInvDescY); + BULLET_AMMODAMAGEBON_X = (203 + gsInvDescX); + BULLET_AMMODAMAGEBON_Y = (148 + gsInvDescY); + BULLET_AMMOTOHITBON_X = (203 + gsInvDescX); + BULLET_AMMOTOHITBON_Y = (160 + gsInvDescY); + BULLET_AMMOBURSTBON_X = (203 + gsInvDescX); + BULLET_AMMOBURSTBON_Y = (172 + gsInvDescY); + BULLET_AMMORELIABILITYBON_X = (268 + gsInvDescX); + BULLET_AMMORELIABILITYBON_Y = (136 + gsInvDescY); + BULLET_AMMONOISESUPP_X = (268 + gsInvDescX); + BULLET_AMMONOISESUPP_Y = (148 + gsInvDescY); + + // Icon Locations for EXPLOSIVES stats + BULLET_EXPLOSIVEDAMAGE_X = (203 + gsInvDescX); + BULLET_EXPLOSIVEDAMAGE_Y = (44 + gsInvDescY); + BULLET_EXPLOSIVESTUNDAMAGE_X = (203 + gsInvDescX); + BULLET_EXPLOSIVESTUNDAMAGE_Y = (56 + gsInvDescY); + BULLET_EXPLOSIVELOUDNESS_X = (203 + gsInvDescX); + BULLET_EXPLOSIVELOUDNESS_Y = (68 + gsInvDescY); + BULLET_EXPLOSIVEVOLATILITY_X = (203 + gsInvDescX); + BULLET_EXPLOSIVEVOLATILITY_Y = (80 + gsInvDescY); + BULLET_EXPLOSIVERADIUS_X = (288 + gsInvDescX); + BULLET_EXPLOSIVERADIUS_Y = (44 + gsInvDescY); + BULLET_EXPLOSIVESTARTRADIUS_X = (270 + gsInvDescX); + BULLET_EXPLOSIVESTARTRADIUS_Y = (44 + gsInvDescY); + BULLET_EXPLOSIVEARROW_X = (287 + gsInvDescX); + BULLET_EXPLOSIVEARROW_Y = (50 + gsInvDescY); + BULLET_EXPLOSIVEENDRADIUS_X = (303 + gsInvDescX); + BULLET_EXPLOSIVEENDRADIUS_Y = (44 + gsInvDescY); + BULLET_EXPLOSIVEDURATION_X = (268 + gsInvDescX); + BULLET_EXPLOSIVEDURATION_Y = (92 + gsInvDescY); + + // Icon Locations for ARMOR stats + BULLET_ARMOR_X = (203 + gsInvDescX); + BULLET_ARMOR_Y = (44 + gsInvDescY); + BULLET_ARMORCOVERAGE_X = (203 + gsInvDescX); + BULLET_ARMORCOVERAGE_Y = (56 + gsInvDescY); + BULLET_ARMORDEGRADE_X = (203 + gsInvDescX); + BULLET_ARMORDEGRADE_Y = (68 + gsInvDescY); + BULLET_ARMORAPBONUS_X = (268 + gsInvDescX); + BULLET_ARMORAPBONUS_Y = (44 + gsInvDescY); + BULLET_ARMORAIMBONUS_X = (268 + gsInvDescX); + BULLET_ARMORAIMBONUS_Y = (56 + gsInvDescY); + BULLET_ARMORWOODCAMO_X = (268 + gsInvDescX); + BULLET_ARMORWOODCAMO_Y = (68 + gsInvDescY); + BULLET_ARMORURBANCAMO_X = (268 + gsInvDescX); + BULLET_ARMORURBANCAMO_Y = (80 + gsInvDescY); + BULLET_ARMORDESERTCAMO_X = (268 + gsInvDescX); + BULLET_ARMORDESERTCAMO_Y = (92 + gsInvDescY); + BULLET_ARMORSNOWCAMO_X = (268 + gsInvDescX); + BULLET_ARMORSNOWCAMO_Y = (104 + gsInvDescY); + BULLET_ARMORSTEALTH_X = (268 + gsInvDescX); + BULLET_ARMORSTEALTH_Y = (116 + gsInvDescY); + BULLET_ARMORVISIONRANGEBONUS_X = (203 + gsInvDescX); + BULLET_ARMORVISIONRANGEBONUS_Y = (136 + gsInvDescY); + BULLET_ARMORDAYVISIONRANGEBONUS_X = (203 + gsInvDescX); + BULLET_ARMORDAYVISIONRANGEBONUS_Y = (148 + gsInvDescY); + BULLET_ARMORNIGHTVISIONRANGEBONUS_X = (203 + gsInvDescX); + BULLET_ARMORNIGHTVISIONRANGEBONUS_Y = (160 + gsInvDescY); + BULLET_ARMORBRIGHTLIGHTVISIONRANGEBONUS_X = (203 + gsInvDescX); + BULLET_ARMORBRIGHTLIGHTVISIONRANGEBONUS_Y = (172 + gsInvDescY); + BULLET_ARMORCAVEVISIONRANGEBONUS_X = (268 + gsInvDescX); + BULLET_ARMORCAVEVISIONRANGEBONUS_Y = (136 + gsInvDescY); + BULLET_ARMORPERCENTTUNNELVISION_X = (268 + gsInvDescX); + BULLET_ARMORPERCENTTUNNELVISION_Y = (148 + gsInvDescY); + BULLET_ARMORHEARINGRANGEBONUS_X = (268 + gsInvDescX); + BULLET_ARMORHEARINGRANGEBONUS_Y = (160 + gsInvDescY); + + // Generic Icon Locations for MISC Item Stats + BULLET_COL1ROW1_X = (203 + gsInvDescX); + BULLET_COL1ROW1_Y = (44 + gsInvDescY); + BULLET_COL1ROW2_X = (203 + gsInvDescX); + BULLET_COL1ROW2_Y = (56 + gsInvDescY); + BULLET_COL1ROW3_X = (203 + gsInvDescX); + BULLET_COL1ROW3_Y = (68 + gsInvDescY); + BULLET_COL1ROW4_X = (203 + gsInvDescX); + BULLET_COL1ROW4_Y = (80 + gsInvDescY); + BULLET_COL1ROW5_X = (203 + gsInvDescX); + BULLET_COL1ROW5_Y = (92 + gsInvDescY); + BULLET_COL1ROW6_X = (203 + gsInvDescX); + BULLET_COL1ROW6_Y = (104 + gsInvDescY); + BULLET_COL1ROW7_X = (203 + gsInvDescX); + BULLET_COL1ROW7_Y = (116 + gsInvDescY); + BULLET_COL1ROW8_X = (203 + gsInvDescX); + BULLET_COL1ROW8_Y = (128 + gsInvDescY); + BULLET_COL1ROW9_X = (203 + gsInvDescX); + BULLET_COL1ROW9_Y = (140 + gsInvDescY); + BULLET_COL1ROW10_X = (203 + gsInvDescX); + BULLET_COL1ROW10_Y = (152 + gsInvDescY); + BULLET_COL1ROW11_X = (203 + gsInvDescX); + BULLET_COL1ROW11_Y = (164 + gsInvDescY); + BULLET_COL1ROW12_X = (203 + gsInvDescX); + BULLET_COL1ROW12_Y = (176 + gsInvDescY); + ITEMDESC_CALIBER_X = (50 + gsInvDescX); + ITEMDESC_CALIBER_Y = (78 + gsInvDescY); + ITEMDESC_DESC_START_X = (11 + gsInvDescX); + ITEMDESC_DESC_START_Y = (94 + gsInvDescY); + ITEMDESC_PROS_START_X = ( 11 + gsInvDescX ); + ITEMDESC_PROS_START_Y = (168 + gsInvDescY); + ITEMDESC_CONS_START_X = ( 11 + gsInvDescX ); + ITEMDESC_CONS_START_Y = (178 + gsInvDescY); + + ITEMDESC_DESC_WIDTH = 180; + } + else if(UsingEDBSystem() == 2) // OIV EDB + { + // Icon locations, Tactical + BULLET_DRAW_X = (341 + gsInvDescX); + BULLET_DRAW_Y = (26 + gsInvDescY); + BULLET_SING_X = (341 + gsInvDescX); + BULLET_SING_Y = (38 + gsInvDescY); + BULLET_BURST_X = (341 + gsInvDescX); + BULLET_BURST_Y = (50 + gsInvDescY); + BULLET_AUTO_X = (341 + gsInvDescX); + BULLET_AUTO_Y = (62 + gsInvDescY); + BULLET_RELOAD_X = (341 + gsInvDescX); + BULLET_RELOAD_Y = (74 + gsInvDescY); + BULLET_MRELOAD_X = (341 + gsInvDescX); + BULLET_MRELOAD_Y = (86 + gsInvDescY); + BULLET_RANGE_X = (274 + gsInvDescX); + BULLET_RANGE_Y = (14 + gsInvDescY); + BULLET_DAMAGE_X = (274 + gsInvDescX); + BULLET_DAMAGE_Y = (26 + gsInvDescY); + BULLET_AUTOPEN_X = (274 + gsInvDescX); + BULLET_AUTOPEN_Y = (38 + gsInvDescY); + BULLET_AUTO5AP_X = (274 + gsInvDescX); + BULLET_AUTO5AP_Y = (50 + gsInvDescY); + BULLET_ACC_X = (274 + gsInvDescX); + BULLET_ACC_Y = (62 + gsInvDescY); + BULLET_RELIABILITY_X = (274 + gsInvDescX); + BULLET_RELIABILITY_Y = (74 + gsInvDescY); + BULLET_REPAIR_X = (274 + gsInvDescX); + BULLET_REPAIR_Y = (86 + gsInvDescY); + BULLET_FLASH_X = (431 + gsInvDescX); //291 + BULLET_FLASH_Y = (14 + gsInvDescY); //136 + BULLET_LOUDNESS_X = (408 + gsInvDescX); //268 + BULLET_LOUDNESS_Y = (26 + gsInvDescY); //159 + BULLET_TOHIT_X = (408 + gsInvDescX); //203 + BULLET_TOHIT_Y = (38 + gsInvDescY); //136 + BULLET_BESTLASERRANGE_X = (408 + gsInvDescX); //203 + BULLET_BESTLASERRANGE_Y = (50 + gsInvDescY); //148 + BULLET_AIMBONUS_X = (408 + gsInvDescX); //203 + BULLET_AIMBONUS_Y = (62 + gsInvDescY); //160 + BULLET_MINRANGEAIMBONUS_X = (408 + gsInvDescX); //203 + BULLET_MINRANGEAIMBONUS_Y = (74 + gsInvDescY); //172 + BULLET_BIPOD_X = (408 + gsInvDescX); //268 + BULLET_BIPOD_Y = (86 + gsInvDescY); //171 + + // Icon Locations for AMMO stats + BULLET_ARMORPEN_X = (274 + gsInvDescX); + BULLET_ARMORPEN_Y = (14 + gsInvDescY); + BULLET_TUMBLE_X = (274 + gsInvDescX); + BULLET_TUMBLE_Y = (26 + gsInvDescY); + BULLET_PREARMOR_X = (274 + gsInvDescX); + BULLET_PREARMOR_Y = (38 + gsInvDescY); + BULLET_TRACER_X = (344 + gsInvDescX); + BULLET_TRACER_Y = (14 + gsInvDescY); + BULLET_ANTITANK_X = (369 + gsInvDescX); + BULLET_ANTITANK_Y = (14 + gsInvDescY); + BULLET_LOCKBUSTER_X = (344 + gsInvDescX); + BULLET_LOCKBUSTER_Y = (38 + gsInvDescY); + BULLET_IGNOREARMOR_X = (369 + gsInvDescX); + BULLET_IGNOREARMOR_Y = (38 + gsInvDescY); + BULLET_ACIDIC_X = (344 + gsInvDescX); + BULLET_ACIDIC_Y = (62 + gsInvDescY); + BULLET_AMMORANGEBON_X = (408 + gsInvDescX); + BULLET_AMMORANGEBON_Y = (14 + gsInvDescY); + BULLET_AMMODAMAGEBON_X = (408 + gsInvDescX); + BULLET_AMMODAMAGEBON_Y = (26 + gsInvDescY); + BULLET_AMMOTOHITBON_X = (408 + gsInvDescX); + BULLET_AMMOTOHITBON_Y = (38 + gsInvDescY); + BULLET_AMMOBURSTBON_X = (408 + gsInvDescX); + BULLET_AMMOBURSTBON_Y = (50 + gsInvDescY); + BULLET_AMMORELIABILITYBON_X = (408 + gsInvDescX); + BULLET_AMMORELIABILITYBON_Y = (62 + gsInvDescY); + BULLET_AMMONOISESUPP_X = (408 + gsInvDescX); + BULLET_AMMONOISESUPP_Y = (74 + gsInvDescY); + + // Icon Locations for EXPLOSIVES stats + BULLET_EXPLOSIVEDAMAGE_X = (274 + gsInvDescX); + BULLET_EXPLOSIVEDAMAGE_Y = (14 + gsInvDescY); + BULLET_EXPLOSIVESTUNDAMAGE_X = (274 + gsInvDescX); + BULLET_EXPLOSIVESTUNDAMAGE_Y = (26 + gsInvDescY); + BULLET_EXPLOSIVELOUDNESS_X = (274 + gsInvDescX); + BULLET_EXPLOSIVELOUDNESS_Y = (38 + gsInvDescY); + BULLET_EXPLOSIVEVOLATILITY_X = (274 + gsInvDescX); + BULLET_EXPLOSIVEVOLATILITY_Y = (50 + gsInvDescY); + BULLET_EXPLOSIVERADIUS_X = (359 + gsInvDescX); + BULLET_EXPLOSIVERADIUS_Y = (14 + gsInvDescY); + BULLET_EXPLOSIVESTARTRADIUS_X = (343 + gsInvDescX); + BULLET_EXPLOSIVESTARTRADIUS_Y = (14 + gsInvDescY); + BULLET_EXPLOSIVEARROW_X = (362 + gsInvDescX); + BULLET_EXPLOSIVEARROW_Y = (20 + gsInvDescY); + BULLET_EXPLOSIVEENDRADIUS_X = (378 + gsInvDescX); + BULLET_EXPLOSIVEENDRADIUS_Y = (14 + gsInvDescY); + BULLET_EXPLOSIVEDURATION_X = (341 + gsInvDescX); + BULLET_EXPLOSIVEDURATION_Y = (62 + gsInvDescY); + + // Icon Locations for ARMOR stats + BULLET_ARMOR_X = (274 + gsInvDescX); + BULLET_ARMOR_Y = (14 + gsInvDescY); + BULLET_ARMORCOVERAGE_X = (274 + gsInvDescX); + BULLET_ARMORCOVERAGE_Y = (26 + gsInvDescY); + BULLET_ARMORDEGRADE_X = (274 + gsInvDescX); + BULLET_ARMORDEGRADE_Y = (38 + gsInvDescY); + BULLET_ARMORAPBONUS_X = (341 + gsInvDescX); + BULLET_ARMORAPBONUS_Y = (14 + gsInvDescY); + BULLET_ARMORAIMBONUS_X = (341 + gsInvDescX); + BULLET_ARMORAIMBONUS_Y = (26 + gsInvDescY); + BULLET_ARMORWOODCAMO_X = (341 + gsInvDescX); + BULLET_ARMORWOODCAMO_Y = (38 + gsInvDescY); + BULLET_ARMORURBANCAMO_X = (341 + gsInvDescX); + BULLET_ARMORURBANCAMO_Y = (50 + gsInvDescY); + BULLET_ARMORDESERTCAMO_X = (341 + gsInvDescX); + BULLET_ARMORDESERTCAMO_Y = (62 + gsInvDescY); + BULLET_ARMORSNOWCAMO_X = (341 + gsInvDescX); + BULLET_ARMORSNOWCAMO_Y = (74 + gsInvDescY); + BULLET_ARMORSTEALTH_X = (341 + gsInvDescX); + BULLET_ARMORSTEALTH_Y = (86 + gsInvDescY); + BULLET_ARMORVISIONRANGEBONUS_X = (408 + gsInvDescX); + BULLET_ARMORVISIONRANGEBONUS_Y = (14 + gsInvDescY); + BULLET_ARMORDAYVISIONRANGEBONUS_X = (408 + gsInvDescX); + BULLET_ARMORDAYVISIONRANGEBONUS_Y = (26 + gsInvDescY); + BULLET_ARMORNIGHTVISIONRANGEBONUS_X = (408 + gsInvDescX); + BULLET_ARMORNIGHTVISIONRANGEBONUS_Y = (38 + gsInvDescY); + BULLET_ARMORBRIGHTLIGHTVISIONRANGEBONUS_X = (408 + gsInvDescX); + BULLET_ARMORBRIGHTLIGHTVISIONRANGEBONUS_Y = (50 + gsInvDescY); + BULLET_ARMORCAVEVISIONRANGEBONUS_X = (408 + gsInvDescX); + BULLET_ARMORCAVEVISIONRANGEBONUS_Y = (68 + gsInvDescY); + BULLET_ARMORPERCENTTUNNELVISION_X = (408 + gsInvDescX); + BULLET_ARMORPERCENTTUNNELVISION_Y = (72 + gsInvDescY); + BULLET_ARMORHEARINGRANGEBONUS_X = (408 + gsInvDescX); + BULLET_ARMORHEARINGRANGEBONUS_Y = (86 + gsInvDescY); + + // Generic Icon Locations for MISC Item Stats + BULLET_COL1ROW1_X = (274 + gsInvDescX); + BULLET_COL1ROW1_Y = (14 + gsInvDescY); + BULLET_COL1ROW2_X = (274 + gsInvDescX); + BULLET_COL1ROW2_Y = (26 + gsInvDescY); + BULLET_COL1ROW3_X = (274 + gsInvDescX); + BULLET_COL1ROW3_Y = (38 + gsInvDescY); + BULLET_COL1ROW4_X = (274 + gsInvDescX); + BULLET_COL1ROW4_Y = (50 + gsInvDescY); + BULLET_COL1ROW5_X = (274 + gsInvDescX); + BULLET_COL1ROW5_Y = (62 + gsInvDescY); + BULLET_COL1ROW6_X = (274 + gsInvDescX); + BULLET_COL1ROW6_Y = (74 + gsInvDescY); + BULLET_COL1ROW7_X = (274 + gsInvDescX); + BULLET_COL1ROW7_Y = (86 + gsInvDescY); + BULLET_COL1ROW8_X = (375 + gsInvDescX); + BULLET_COL1ROW8_Y = (14 + gsInvDescY); + BULLET_COL1ROW9_X = (375 + gsInvDescX); + BULLET_COL1ROW9_Y = (26 + gsInvDescY); + BULLET_COL1ROW10_X = (375 + gsInvDescX); + BULLET_COL1ROW10_Y = (38 + gsInvDescY); + BULLET_COL1ROW11_X = (375 + gsInvDescX); + BULLET_COL1ROW11_Y = (50 + gsInvDescY); + BULLET_COL1ROW12_X = (375 + gsInvDescX); + BULLET_COL1ROW12_Y = (62 + gsInvDescY); + ITEMDESC_CALIBER_X = (53 + gsInvDescX); // Caliber text moved two lines below item name, and pulled closer + ITEMDESC_CALIBER_Y = (78 + gsInvDescY); + ITEMDESC_DESC_START_X = (11 + gsInvDescX); // Description text Y moved downwards one line. + ITEMDESC_DESC_START_Y = (102 + gsInvDescY); + ITEMDESC_PROS_START_X = (438 + gsInvDescX ); // Pros and cons moved to the extreme right of the text box. They + ITEMDESC_PROS_START_Y = (106 + gsInvDescY); // now show just the words "PROS" and "CONS", and have a tooltip + ITEMDESC_CONS_START_X = (438 + gsInvDescX ); // region over them for expanded text. :D + ITEMDESC_CONS_START_Y = (118 + gsInvDescY); + + ITEMDESC_DESC_WIDTH = 415; // Much wider in OIV tactical than other shapes + } + else + { + // Icon locations, TACTICAL + BULLET_SING_X = (222 + gsInvDescX); + BULLET_SING_Y = (49 + gsInvDescY); + BULLET_BURST_X = (263 + gsInvDescX); + BULLET_BURST_Y = (49 + gsInvDescY); + ITEMDESC_CALIBER_X = (162 + gsInvDescX); // Gun Caliber string location, Tactical + ITEMDESC_CALIBER_Y = (67 + gsInvDescY); + ITEMDESC_DESC_START_X = (11 + gsInvDescX); // Item Desc Box offset, tactical + ITEMDESC_DESC_START_Y = (80 + gsInvDescY); + ITEMDESC_PROS_START_X = ( 11 + gsInvDescX ); // Pros, tactical + ITEMDESC_PROS_START_Y = (110 + gsInvDescY); + ITEMDESC_CONS_START_X = ( 11 + gsInvDescX ); // Cons, Tactical + ITEMDESC_CONS_START_Y = (120 + gsInvDescY); + ITEMDESC_DESC_WIDTH = 301; // Text box width, Tactical + } + } +} + +BOOLEAN InternalInitEnhancedDescBox() +{ + VOBJECT_DESC VObjectDesc; + + if(UsingEDBSystem() > 0) + { + VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE; + strcpy( VObjectDesc.ImageFile, "INTERFACE\\ItemInfoWeaponIcons.STI" ); + CHECKF( AddVideoObject( &VObjectDesc, &guiItemInfoWeaponIcon) ); + + VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE; + strcpy( VObjectDesc.ImageFile, "INTERFACE\\ItemInfoAmmoIcons.STI" ); + CHECKF( AddVideoObject( &VObjectDesc, &guiItemInfoAmmoIcon ) ); + + VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE; + strcpy( VObjectDesc.ImageFile, "INTERFACE\\ItemInfoExplosiveIcons.STI" ); + CHECKF( AddVideoObject( &VObjectDesc, &guiItemInfoExplosiveIcon ) ); + + VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE; + strcpy( VObjectDesc.ImageFile, "INTERFACE\\ItemInfoArmorIcons.STI" ); + CHECKF( AddVideoObject( &VObjectDesc, &guiItemInfoArmorIcon ) ); + + VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE; + strcpy( VObjectDesc.ImageFile, "INTERFACE\\ItemInfoMiscIcons.STI" ); + CHECKF( AddVideoObject( &VObjectDesc, &guiItemInfoMiscIcon ) ); + } + + return (TRUE); +} + +void InternalInitEDBTooltipRegion( OBJECTTYPE * gpItemDescObject, UINT32 guiCurrentItemDescriptionScreen ) +{ + INT32 cnt; + INT32 threshold; + + InitEDBCoords(); + + //start by deleting the currently defined regions if they exist + for ( cnt = 0; cnt < 20; cnt++ ) + { + if( gStatsFasthelpRegions[ cnt ].IDNumber != 0 ) + MSYS_RemoveRegion( &gStatsFasthelpRegions[ cnt ]); + } + + if( guiCurrentScreen == MAP_SCREEN ) + threshold = 13; + else + threshold = 11; + + // Strategic EDB + if ( guiCurrentItemDescriptionScreen == MAP_SCREEN ) + { + /////////////////////////////////////////// + // Begin Weapon Item Tooltip Regions + + if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_WEAPON || Item[ gpItemDescObject->usItem ].usItemClass & IC_PUNCH ) + { + // Create all regions + for (cnt = 0; cnt < 20; cnt++) + { + MSYS_DefineRegion( &gStatsFasthelpRegions[ cnt ], + (INT16)(gWeaponDescStatsRects[ cnt ].iLeft), + (INT16)(gWeaponDescStatsRects[ cnt ].iTop), + (INT16)(gWeaponDescStatsRects[ cnt ].iRight), + (INT16)(gWeaponDescStatsRects[ cnt ].iBottom), + MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MSYS_NO_CALLBACK, ItemDescCallback ); + + MSYS_AddRegion( &gStatsFasthelpRegions[ cnt ]); + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzWeaponStatsFasthelp[ cnt ] ); + SetRegionHelpEndCallback( &(gStatsFasthelpRegions[ cnt ]), HelpTextDoneCallback ); + MSYS_DisableRegion( &gStatsFasthelpRegions[ cnt ] ); + } + + // Enable regions one-by-one as necessary + + // Relevant to all weapons + + // RELIABILITY + MSYS_EnableRegion( &gStatsFasthelpRegions[ 5 ] ); + + // REPAIR EASE + MSYS_EnableRegion( &gStatsFasthelpRegions[ 6 ] ); + + ////////////////////////////////// + // BEGIN SINGLE ATTACK SEGMENT + + // Non-Launcher Guns and Grenade-Launchers only + if ( Item[gpItemDescObject->usItem].usItemClass & (IC_GUN|IC_LAUNCHER|IC_PUNCH) && !Item[gpItemDescObject->usItem].rocketlauncher ) + { + + // SINGLE-SHOT AP + MSYS_EnableRegion( &gStatsFasthelpRegions[ 8 ] ); + + if ( Weapon[gpItemDescObject->usItem].NoSemiAuto ) + { + // "NO SINGLE-SHOT" + SetRegionFastHelpText( &(gStatsFasthelpRegions[ 8 ]), gzWeaponStatsFasthelp[ 23 ] ); + } + } + + // Rocket-Launchers Only + if ( Item[gpItemDescObject->usItem].usItemClass & (IC_GUN|IC_LAUNCHER) && Item[gpItemDescObject->usItem].rocketlauncher ) + { + // SINGLE ROCKET-LAUNCH AP + MSYS_EnableRegion( &gStatsFasthelpRegions[ 8 ] ); + SetRegionFastHelpText( &(gStatsFasthelpRegions[ 8 ]), gzWeaponStatsFasthelp[ 21 ] ); + } + + // Throwing-Knives Only + if ( Item[gpItemDescObject->usItem].usItemClass == IC_THROWING_KNIFE ) + { + // THROW KNIFE AP + MSYS_EnableRegion( &gStatsFasthelpRegions[ 8 ] ); + SetRegionFastHelpText( &(gStatsFasthelpRegions[ 8 ]), gzWeaponStatsFasthelp[ 20 ] ); + } + + // Blades Only + if ( Item[gpItemDescObject->usItem].usItemClass == IC_BLADE ) + { + // SLASH AP + MSYS_EnableRegion( &gStatsFasthelpRegions[ 8 ] ); + SetRegionFastHelpText( &(gStatsFasthelpRegions[ 8 ]), gzWeaponStatsFasthelp[ 22 ] ); + } + + // Blunts Only + if ( Item[gpItemDescObject->usItem].usItemClass == IC_PUNCH ) + { + // SLASH AP + MSYS_EnableRegion( &gStatsFasthelpRegions[ 8 ] ); + SetRegionFastHelpText( &(gStatsFasthelpRegions[ 8 ]), gzWeaponStatsFasthelp[ 26 ] ); + } + + // END SINGLE ATTACK SEGMENT + //////////////////////////////////// + + //////////////////////////////////// + // BEGIN BURST ATTACK SEGMENT + + // Non-Launcher Guns and Grenade-Launchers only + if ( Item[gpItemDescObject->usItem].usItemClass & (IC_GUN|IC_LAUNCHER) && !Item[gpItemDescObject->usItem].rocketlauncher ) + { + // BURST + MSYS_EnableRegion( &gStatsFasthelpRegions[ 9 ] ); + + if (GetShotsPerBurst(gpItemDescObject) <= 0 ) + { + // "NO BURST" + SetRegionFastHelpText( &(gStatsFasthelpRegions[ 9 ]), gzWeaponStatsFasthelp[ 24 ] ); + } + } + + // END BURST ATTACK SEGMENT + //////////////////////////////////// + + //////////////////////////////////// + // BEGIN AUTO ATTACK SEGMENT + + // Non-Launcher Guns Only + if ( Item[gpItemDescObject->usItem].usItemClass == IC_GUN && !Item[gpItemDescObject->usItem].rocketlauncher ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 10 ] ); + + if (GetAutofireShotsPerFiveAPs(gpItemDescObject) <= 0 ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ 10 ]), gzWeaponStatsFasthelp[ 25 ] ); + } + } + + // END AUTO ATTACK SEGMENT + /////////////////////////////////// + + // Guns, Throwing knives and Launchers only + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER|IC_THROWING_KNIFE) ) + { + // RANGE + MSYS_EnableRegion( &gStatsFasthelpRegions[ 0 ] ); + } + + // Guns and Launchers Only + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER) ) + { + // ACCURACY + MSYS_EnableRegion( &gStatsFasthelpRegions[ 4 ] ); + } + + // Guns and Multi-use Launchers Only + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER) && !Item[ gpItemDescObject->usItem ].singleshotrocketlauncher ) + { + // RELOAD AP + MSYS_EnableRegion( &gStatsFasthelpRegions[ 11 ] ); + + if ( Weapon[gpItemDescObject->usItem].APsToReloadManually > 0 ) + { + // RELOAD MANUALLY AP + MSYS_EnableRegion( &gStatsFasthelpRegions[ 12 ] ); + } + } + + // Guns and Grenade Launchers only + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER|IC_PUNCH) && !Item[ gpItemDescObject->usItem].rocketlauncher ) + { + // DRAW AP + MSYS_EnableRegion( &gStatsFasthelpRegions[ 7 ] ); + } + + // Non-Launcher Guns, Blades, and Throwing Knives only + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_BLADE|IC_PUNCH|IC_THROWING_KNIFE) && !Item[ gpItemDescObject->usItem ].singleshotrocketlauncher ) + { + // DAMAGE + MSYS_EnableRegion( &gStatsFasthelpRegions[ 1 ] ); + } + + // Non-Launcher Guns Only + if ( Item[ gpItemDescObject->usItem ].usItemClass == IC_GUN && !Item[ gpItemDescObject->usItem].rocketlauncher ) + { + if (GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0 || GetShotsPerBurst(gpItemDescObject)> 0 ) + { + // BURST PENALTY + MSYS_EnableRegion( &gStatsFasthelpRegions[ 2 ] ); + + if ( Weapon[ gpItemDescObject->usItem ].bAutofireShotsPerFiveAP > 0 ) + { + // AUTOFIRE SHOTS PER 5 AP + MSYS_EnableRegion( &gStatsFasthelpRegions[ 3 ] ); + } + } + } + + ////////////////////////////////////////////////////////////////////// + // Begin non-type-specific icons. These are not type specific because they represent bonuses + // which may one day be added to various types of weapons by modders... + + if (Weapon[ Item[ gpItemDescObject->usItem ].ubClassIndex ].ubAttackVolume > 0 ) + { + // NOISE REDUCTION + MSYS_EnableRegion( &gStatsFasthelpRegions[ 14 ] ); + } + + if (IsFlashSuppressorAlt( gpItemDescObject ) == TRUE) + { + // HIDE FLASH + MSYS_EnableRegion( &gStatsFasthelpRegions[ 13 ] ); + } + + if (GetFlatToHitBonus( gpItemDescObject ) != 0) + { + // HIT BONUS + MSYS_EnableRegion( &gStatsFasthelpRegions[ 15 ] ); + + if (GetFlatToHitBonus( gpItemDescObject ) > 0 && GetAverageBestLaserRange( gpItemDescObject ) / 10 > 0 ) + { + // LASER RANGE + MSYS_EnableRegion( &gStatsFasthelpRegions[ 16 ] ); + } + } + + if (GetBipodBonus( gpItemDescObject ) != 0) + { + // BIPOD BONUS + MSYS_EnableRegion( &gStatsFasthelpRegions[ 19 ] ); + } + + if (IsScoped( gpItemDescObject )) + { + // SCOPE AIM BONUS + MSYS_EnableRegion( &gStatsFasthelpRegions[ 17 ] ); + if (GetMinRangeForAimBonus( gpItemDescObject ) > 0) + { + // LASER RANGE + MSYS_EnableRegion( &gStatsFasthelpRegions[ 18 ] ); + } + } + + } + + /////////////////////////////////////////////////// + // Begin Ammo Item Tooltip Section + + else if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_AMMO ) + { + // Create all regions + for (cnt = 0; cnt < 20; cnt++) + { + MSYS_DefineRegion( &gStatsFasthelpRegions[ cnt ], + (INT16)(gAmmoDescStatsRects[ cnt ]. iLeft), + (INT16)(gAmmoDescStatsRects[ cnt ].iTop), + (INT16)(gAmmoDescStatsRects[ cnt ].iRight), + (INT16)(gAmmoDescStatsRects[ cnt ].iBottom), + MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MSYS_NO_CALLBACK, ItemDescCallback ); + + MSYS_AddRegion( &gStatsFasthelpRegions[ cnt ]); + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzAmmoStatsFasthelp[ cnt ] ); + SetRegionHelpEndCallback( &(gStatsFasthelpRegions[ cnt ]), HelpTextDoneCallback ); + MSYS_DisableRegion( &gStatsFasthelpRegions[ cnt ] ); + } + + // AMMO PENETRATION + MSYS_EnableRegion( &gStatsFasthelpRegions[ 0 ] ); + + // AMMO TUMBLE + MSYS_EnableRegion( &gStatsFasthelpRegions[ 1 ] ); + + // AMMO PRE-IMPACT EXPLOSION + MSYS_EnableRegion( &gStatsFasthelpRegions[ 2 ] ); + + // TRACER + if ( AmmoTypes[Magazine[Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].tracerEffect ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 3 ] ); + } + + // ANTI-TANK + if ( AmmoTypes[Magazine[Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].antiTank ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 4 ] ); + } + + // LOCKBUSTER + if ( AmmoTypes[Magazine[Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].lockBustingPower ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 5 ] ); + } + + // IGNORE ARMOR + if ( AmmoTypes[Magazine[Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].ignoreArmour ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 6 ] ); + } + + // ACIDIC ICON + if ( AmmoTypes[Magazine[Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].acidic ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 7 ] ); + } + + // RANGE BONUS + if ( Item[ gpItemDescObject->usItem ].rangebonus != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 8 ] ); + } + + // DAMAGE BONUS + if ( Item[ gpItemDescObject->usItem ].damagebonus != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 9 ] ); + } + + // TO HIT BONUS + if ( Item[ gpItemDescObject->usItem ].tohitbonus != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 10 ] ); + } + + // BURST BONUS + if ( Item[ gpItemDescObject->usItem ].bursttohitbonus != 0 || Item[ gpItemDescObject->usItem ].autofiretohitbonus != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 11 ] ); + } + + // RELIABILITY BONUS + if ( Item[ gpItemDescObject->usItem ].bReliability != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 12 ] ); + } + + // NOISE SUPPRESSION + if ( Item[ gpItemDescObject->usItem ].percentnoisereduction > 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 13 ] ); + } + } + + /////////////////////////////////////////////////// + // Begin Armor Item Tooltip Section + + else if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_ARMOUR ) + { + // Create all regions + for (cnt = 0; cnt < 20; cnt++) + { + MSYS_DefineRegion( &gStatsFasthelpRegions[ cnt ], + (INT16)(gArmorDescStatsRects[ cnt ]. iLeft), + (INT16)(gArmorDescStatsRects[ cnt ].iTop), + (INT16)(gArmorDescStatsRects[ cnt ].iRight), + (INT16)(gArmorDescStatsRects[ cnt ].iBottom), + MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MSYS_NO_CALLBACK, ItemDescCallback ); + + MSYS_AddRegion( &gStatsFasthelpRegions[ cnt ]); + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzArmorStatsFasthelp[ cnt ] ); + SetRegionHelpEndCallback( &(gStatsFasthelpRegions[ cnt ]), HelpTextDoneCallback ); + MSYS_DisableRegion( &gStatsFasthelpRegions[ cnt ] ); + } + + // PROTECTION + MSYS_EnableRegion( &gStatsFasthelpRegions[ 0 ] ); + + // COVERAGE + MSYS_EnableRegion( &gStatsFasthelpRegions[ 1 ] ); + + // ARMOR DEGRADE + MSYS_EnableRegion( &gStatsFasthelpRegions[ 2 ] ); + + // AP BONUS + if ( GetAPBonus ( gpItemDescObject ) != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 3 ] ); + } + + // AIM BONUS + if ( GetFlatAimBonus( gpItemDescObject ) != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 4 ] ); + } + + // WOODLAND CAMO + if ( GetCamoBonus( gpItemDescObject ) > 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 5 ] ); + } + + // URBAN CAMO + if ( GetUrbanCamoBonus( gpItemDescObject ) > 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 6 ] ); + } + + // DESERT CAMO + if ( GetDesertCamoBonus( gpItemDescObject ) > 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 7 ] ); + } + + // SNOW CAMO + if ( GetSnowCamoBonus( gpItemDescObject ) > 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 8 ] ); + } + + // STEALTH + if ( GetStealthBonus( gpItemDescObject ) != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 9 ] ); + } + + // VISION RANGE BONUS + if ( GetItemVisionRangeBonus( gpItemDescObject, 0 ) != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 10 ] ); + } + + // DAY VISION RANGE BONUS + if ( GetItemVisionRangeBonus( gpItemDescObject, 1 ) != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 11 ] ); + } + + // NIGHT VISION RANGE BONUS + if ( GetItemVisionRangeBonus( gpItemDescObject, 0 ) != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 12 ] ); + } + + // BRIGHT LIGHT VISION RANGE BONUS + if ( GetItemVisionRangeBonus( gpItemDescObject, 0 ) != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 13 ] ); + } + + // CAVE VISION RANGE BONUS + if ( GetItemVisionRangeBonus( gpItemDescObject, 0 ) != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 14 ] ); + } + + // PERCENT TUNNEL VISION + if ( GetItemPercentTunnelVision( gpItemDescObject ) > 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 15 ] ); + } + + // HEARING RANGE BONUS + if ( GetItemHearingRangeBonus( gpItemDescObject ) != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 16 ] ); + } + } + + ////////////////////////////////////// + // Begin Explosive Item Tooltips Section + else if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_EXPLOSV ) + { + // Create all regions + for (cnt = 0; cnt < 20; cnt++) + { + MSYS_DefineRegion( &gStatsFasthelpRegions[ cnt ], + (INT16)(gExplosiveDescStatsRects[ cnt ]. iLeft), + (INT16)(gExplosiveDescStatsRects[ cnt ].iTop), + (INT16)(gExplosiveDescStatsRects[ cnt ].iRight), + (INT16)(gExplosiveDescStatsRects[ cnt ].iBottom), + MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MSYS_NO_CALLBACK, ItemDescCallback ); + + MSYS_AddRegion( &gStatsFasthelpRegions[ cnt ]); + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzExplosiveStatsFasthelp[ cnt ] ); + SetRegionHelpEndCallback( &(gStatsFasthelpRegions[ cnt ]), HelpTextDoneCallback ); + MSYS_DisableRegion( &gStatsFasthelpRegions[ cnt ] ); + } + + // DAMAGE + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDamage > 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 0 ] ); + } + + // STUN DAMAGE + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubStunDamage > 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 1 ] ); + } + + // LOUDNESS + MSYS_EnableRegion( &gStatsFasthelpRegions[ 2 ] ); + + // VOLATILITY + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubVolatility > 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 3 ] ); + } + + // SINGLE-EVENT EXPLOSION data + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDuration == 0 ) + { + // RADIUS + MSYS_EnableRegion( &gStatsFasthelpRegions[ 4 ] ); + + } + // PROLONGED EXPLOSION data + else if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDuration > 0 ) + { + + // DURATION + MSYS_EnableRegion( &gStatsFasthelpRegions[ 7 ] ); + + // STARTING RADIUS + MSYS_EnableRegion( &gStatsFasthelpRegions[ 5 ] ); + + // FINAL RADIUS + MSYS_EnableRegion( &gStatsFasthelpRegions[ 6 ] ); + } + } + + ////////////////////////////////////////////////////////// + // The following is more complex - it sets up tooltip regions based not on predetermined order but on how much data there is on the chart. + // It begins with defining all regions, then goes on to set the helptext of each one based on each value encountered in the item's stats. + // At the very end, it enables as many tooltips as values encountered. + + else + { + // Create all regions + for (cnt = 0; cnt < 20; cnt++) + { + MSYS_DefineRegion( &gStatsFasthelpRegions[ cnt ], + (INT16)(gMiscItemDescStatsRects[ cnt ]. iLeft), + (INT16)(gMiscItemDescStatsRects[ cnt ].iTop), + (INT16)(gMiscItemDescStatsRects[ cnt ].iRight), + (INT16)(gMiscItemDescStatsRects[ cnt ].iBottom), + MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MSYS_NO_CALLBACK, ItemDescCallback ); + + MSYS_AddRegion( &gStatsFasthelpRegions[ cnt ]); + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ cnt ] ); + SetRegionHelpEndCallback( &(gStatsFasthelpRegions[ cnt ]), HelpTextDoneCallback ); + MSYS_DisableRegion( &gStatsFasthelpRegions[ cnt ] ); + } + + cnt=0; + + // ITEM SIZE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].itemsizebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 0 ] ); + cnt++; + } + + // RELIABILITY MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].bReliability != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 1 ] ); + cnt++; + } + + // NOISE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentnoisereduction != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 2 ] ); + cnt++; + } + + // HIDE MUZZLE FLASH ICON + if ( Item[ gpItemDescObject->usItem ].hidemuzzleflash > 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 3 ] ); + cnt++; + } + + // BIPOD ICON + if ( Item[ gpItemDescObject->usItem ].bipod != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 4 ] ); + cnt++; + } + + // RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].rangebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 5 ] ); + cnt++; + } + + // TO-HIT MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].tohitbonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 6 ] ); + cnt++; + } + + // LASER RANGE + if ( Item[ gpItemDescObject->usItem ].bestlaserrange > 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 7 ] ); + cnt++; + } + + // AIMING MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].aimbonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 8 ] ); + cnt++; + } + + // MINIMUM RANGE FOR AIMING BONUS ICON + if ( Item[ gpItemDescObject->usItem ].minrangeforaimbonus > 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 33 ] ); + cnt++; + } + + // MAGAZINE SIZE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].magsizebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 17 ] ); + cnt++; + } + + // BURST SIZE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].burstsizebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 9 ] ); + cnt++; + } + + // BURST TO-HIT MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].bursttohitbonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 10 ] ); + cnt++; + } + + // AUTO TO-HIT MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].autofiretohitbonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 11 ] ); + cnt++; + } + + // AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].APBonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 12 ] ); + cnt++; + } + + // BURST AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentburstfireapreduction != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 13 ] ); + cnt++; + } + + // AUTOFIRE AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentautofireapreduction != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 14 ] ); + cnt++; + } + + // READY AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentreadytimeapreduction != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 15 ] ); + cnt++; + } + + // RELOAD AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentreloadtimeapreduction != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 16 ] ); + cnt++; + } + + // SINGLE AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentapreduction != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 18 ] ); + cnt++; + } + + // DAMAGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].damagebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 19 ] ); + cnt++; + } + + // MELEE DAMAGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].meleedamagebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 20 ] ); + cnt++; + } + + // WOOD CAMO ICON + if ( Item[ gpItemDescObject->usItem ].camobonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 21 ] ); + cnt++; + } + + // URBAN CAMO ICON + if ( Item[ gpItemDescObject->usItem ].urbanCamobonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 22 ] ); + cnt++; + } + + // DESERT CAMO ICON + if ( Item[ gpItemDescObject->usItem ].desertCamobonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 23 ] ); + cnt++; + } + + // SNOW CAMO ICON + if ( Item[ gpItemDescObject->usItem ].snowCamobonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 24 ] ); + cnt++; + } + + // STEALTH MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].stealthbonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 25 ] ); + cnt++; + } + + // HEARING RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].hearingrangebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 26 ] ); + cnt++; + } + + // VISION RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].visionrangebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 27 ] ); + cnt++; + } + + // DAY VISION RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].dayvisionrangebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 28 ] ); + cnt++; + } + + // NIGHT VISION RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].nightvisionrangebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 29 ] ); + cnt++; + } + + // BRIGHT LIGHT VISION RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].brightlightvisionrangebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 30 ] ); + cnt++; + } + + // CAVE VISION RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].cavevisionrangebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 31 ] ); + cnt++; + } + + // PERCENT TUNNEL VISION MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percenttunnelvision != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 32 ] ); + cnt++; + } + + UINT8 cntval = cnt; + + // Enable as many regions as required + for ( cnt = 0; cntusItem ].usItemClass & IC_WEAPON || Item[ gpItemDescObject->usItem ].usItemClass & IC_PUNCH ) + { + // Create all regions + for (cnt = 0; cnt < 20; cnt++) + { + MSYS_DefineRegion( &gStatsFasthelpRegions[ cnt ], + (INT16)(gWeaponDescStatsRects[ cnt ].iLeft + gsInvDescX), + (INT16)(gWeaponDescStatsRects[ cnt ].iTop + gsInvDescY), + (INT16)(gWeaponDescStatsRects[ cnt ].iRight + gsInvDescX), + (INT16)(gWeaponDescStatsRects[ cnt ].iBottom + gsInvDescY), + MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MSYS_NO_CALLBACK, ItemDescCallback ); + + MSYS_AddRegion( &gStatsFasthelpRegions[ cnt ]); + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzWeaponStatsFasthelpTactical[ cnt ] ); + SetRegionHelpEndCallback( &(gStatsFasthelpRegions[ cnt ]), HelpTextDoneCallback ); + MSYS_DisableRegion( &gStatsFasthelpRegions[ cnt ] ); + } + + // Enable regions one-by-one as necessary + + // Relevant to all weapons + + // RELIABILITY + MSYS_EnableRegion( &gStatsFasthelpRegions[ 5 ] ); + + // REPAIR EASE + MSYS_EnableRegion( &gStatsFasthelpRegions[ 6 ] ); + + ////////////////////////////////// + // BEGIN SINGLE ATTACK SEGMENT + + // Non-Launcher Guns and Grenade-Launchers only + if ( Item[gpItemDescObject->usItem].usItemClass & (IC_GUN|IC_LAUNCHER|IC_PUNCH) && !Item[gpItemDescObject->usItem].rocketlauncher ) + { + + // SINGLE-SHOT AP + MSYS_EnableRegion( &gStatsFasthelpRegions[ 8 ] ); + + if ( Weapon[gpItemDescObject->usItem].NoSemiAuto ) + { + // "NO SINGLE-SHOT" + SetRegionFastHelpText( &(gStatsFasthelpRegions[ 8 ]), gzWeaponStatsFasthelpTactical[ 23 ] ); + } + } + + // Rocket-Launchers Only + if ( Item[gpItemDescObject->usItem].usItemClass & (IC_GUN|IC_LAUNCHER) && Item[gpItemDescObject->usItem].rocketlauncher ) + { + // SINGLE ROCKET-LAUNCH AP + MSYS_EnableRegion( &gStatsFasthelpRegions[ 8 ] ); + SetRegionFastHelpText( &(gStatsFasthelpRegions[ 8 ]), gzWeaponStatsFasthelpTactical[ 21 ] ); + } + + // Throwing-Knives Only + if ( Item[gpItemDescObject->usItem].usItemClass == IC_THROWING_KNIFE ) + { + // THROW KNIFE AP + MSYS_EnableRegion( &gStatsFasthelpRegions[ 8 ] ); + SetRegionFastHelpText( &(gStatsFasthelpRegions[ 8 ]), gzWeaponStatsFasthelpTactical[ 20 ] ); + } + + // Blades Only + if ( Item[gpItemDescObject->usItem].usItemClass == IC_BLADE ) + { + // SLASH AP + MSYS_EnableRegion( &gStatsFasthelpRegions[ 8 ] ); + SetRegionFastHelpText( &(gStatsFasthelpRegions[ 8 ]), gzWeaponStatsFasthelpTactical[ 22 ] ); + } + + // Blunts Only + if ( Item[gpItemDescObject->usItem].usItemClass == IC_PUNCH ) + { + // SLASH AP + MSYS_EnableRegion( &gStatsFasthelpRegions[ 8 ] ); + SetRegionFastHelpText( &(gStatsFasthelpRegions[ 8 ]), gzWeaponStatsFasthelpTactical[ 26 ] ); + } + + // END SINGLE ATTACK SEGMENT + //////////////////////////////////// + + //////////////////////////////////// + // BEGIN BURST ATTACK SEGMENT + + // Non-Launcher Guns and Grenade-Launchers only + if ( Item[gpItemDescObject->usItem].usItemClass & (IC_GUN|IC_LAUNCHER) && !Item[gpItemDescObject->usItem].rocketlauncher ) + { + // BURST + MSYS_EnableRegion( &gStatsFasthelpRegions[ 9 ] ); + + if (GetShotsPerBurst(gpItemDescObject) <= 0 ) + { + // "NO BURST" + SetRegionFastHelpText( &(gStatsFasthelpRegions[ 9 ]), gzWeaponStatsFasthelpTactical[ 24 ] ); + } + } + + // END BURST ATTACK SEGMENT + //////////////////////////////////// + + //////////////////////////////////// + // BEGIN AUTO ATTACK SEGMENT + + // Non-Launcher Guns Only + if ( Item[gpItemDescObject->usItem].usItemClass == IC_GUN && !Item[gpItemDescObject->usItem].rocketlauncher ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 10 ] ); + + if (GetAutofireShotsPerFiveAPs(gpItemDescObject) <= 0 ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ 10 ]), gzWeaponStatsFasthelpTactical[ 25 ] ); + } + } + + // END AUTO ATTACK SEGMENT + /////////////////////////////////// + + // Guns, Throwing knives and Launchers only + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER|IC_THROWING_KNIFE) ) + { + // RANGE + MSYS_EnableRegion( &gStatsFasthelpRegions[ 0 ] ); + } + + // Guns and Launchers Only + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER) ) + { + // ACCURACY + MSYS_EnableRegion( &gStatsFasthelpRegions[ 4 ] ); + } + + // Guns and Multi-use Launchers Only + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER) && !Item[ gpItemDescObject->usItem ].singleshotrocketlauncher ) + { + // RELOAD AP + MSYS_EnableRegion( &gStatsFasthelpRegions[ 11 ] ); + + if ( Weapon[gpItemDescObject->usItem].APsToReloadManually > 0 ) + { + // RELOAD MANUALLY AP + MSYS_EnableRegion( &gStatsFasthelpRegions[ 12 ] ); + } + } + + // Guns and Grenade Launchers only + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER|IC_PUNCH) && !Item[ gpItemDescObject->usItem].rocketlauncher ) + { + // DRAW AP + MSYS_EnableRegion( &gStatsFasthelpRegions[ 7 ] ); + } + + // Non-Launcher Guns, Blades, and Throwing Knives only + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_BLADE|IC_PUNCH|IC_THROWING_KNIFE) && !Item[ gpItemDescObject->usItem ].singleshotrocketlauncher ) + { + // DAMAGE + MSYS_EnableRegion( &gStatsFasthelpRegions[ 1 ] ); + } + + // Non-Launcher Guns Only + if ( Item[ gpItemDescObject->usItem ].usItemClass == IC_GUN && !Item[ gpItemDescObject->usItem].rocketlauncher ) + { + if (GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0 || GetShotsPerBurst(gpItemDescObject)> 0 ) + { + // BURST PENALTY + MSYS_EnableRegion( &gStatsFasthelpRegions[ 2 ] ); + + if ( Weapon[ gpItemDescObject->usItem ].bAutofireShotsPerFiveAP > 0 ) + { + // AUTOFIRE SHOTS PER 5 AP + MSYS_EnableRegion( &gStatsFasthelpRegions[ 3 ] ); + } + } + } + + ////////////////////////////////////////////////////////////////////// + // Begin non-type-specific icons. These are not type specific because they represent bonuses + // which may one day be added to various types of weapons by modders... + + if (Weapon[ Item[ gpItemDescObject->usItem ].ubClassIndex ].ubAttackVolume > 0 ) + { + // NOISE REDUCTION + MSYS_EnableRegion( &gStatsFasthelpRegions[ 18 ] ); //14 + } + + if (IsFlashSuppressorAlt( gpItemDescObject ) == TRUE) + { + // HIDE FLASH + MSYS_EnableRegion( &gStatsFasthelpRegions[ 17 ] ); //13 + } + + if (GetFlatToHitBonus( gpItemDescObject ) != 0) + { + // HIT BONUS + MSYS_EnableRegion( &gStatsFasthelpRegions[ 13 ] ); //15 + + if (GetFlatToHitBonus( gpItemDescObject ) > 0 && GetAverageBestLaserRange( gpItemDescObject ) / 10 > 0 ) + { + // LASER RANGE + MSYS_EnableRegion( &gStatsFasthelpRegions[ 14 ] ); //16 + } + } + + if (GetBipodBonus( gpItemDescObject ) != 0) + { + // BIPOD BONUS + MSYS_EnableRegion( &gStatsFasthelpRegions[ 19 ] ); + } + + if (IsScoped( gpItemDescObject )) + { + // SCOPE AIM BONUS + MSYS_EnableRegion( &gStatsFasthelpRegions[ 15 ] ); //17 + if (GetMinRangeForAimBonus( gpItemDescObject ) / 10 > 0 ) + { + // LASER RANGE + MSYS_EnableRegion( &gStatsFasthelpRegions[ 16 ] ); //18 + } + } + + } + + /////////////////////////////////////////////////// + // Begin Ammo Item Tooltip Section + + else if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_AMMO ) + { + // Create all regions + for (cnt = 0; cnt < 20; cnt++) + { + MSYS_DefineRegion( &gStatsFasthelpRegions[ cnt ], + (INT16)(gAmmoDescStatsRects[ cnt ]. iLeft + gsInvDescX), + (INT16)(gAmmoDescStatsRects[ cnt ].iTop + gsInvDescY), + (INT16)(gAmmoDescStatsRects[ cnt ].iRight + gsInvDescX), + (INT16)(gAmmoDescStatsRects[ cnt ].iBottom + gsInvDescY), + MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MSYS_NO_CALLBACK, ItemDescCallback ); + + MSYS_AddRegion( &gStatsFasthelpRegions[ cnt ]); + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzAmmoStatsFasthelp[ cnt ] ); + SetRegionHelpEndCallback( &(gStatsFasthelpRegions[ cnt ]), HelpTextDoneCallback ); + MSYS_DisableRegion( &gStatsFasthelpRegions[ cnt ] ); + } + + // AMMO PENETRATION + MSYS_EnableRegion( &gStatsFasthelpRegions[ 0 ] ); + + // AMMO TUMBLE + MSYS_EnableRegion( &gStatsFasthelpRegions[ 1 ] ); + + // AMMO PRE-IMPACT EXPLOSION + MSYS_EnableRegion( &gStatsFasthelpRegions[ 2 ] ); + + // TRACER + if ( AmmoTypes[Magazine[Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].tracerEffect ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 3 ] ); + } + + // ANTI-TANK + if ( AmmoTypes[Magazine[Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].antiTank ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 4 ] ); + } + + // LOCKBUSTER + if ( AmmoTypes[Magazine[Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].lockBustingPower ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 5 ] ); + } + + // IGNORE ARMOR + if ( AmmoTypes[Magazine[Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].ignoreArmour ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 6 ] ); + } + + // ACIDIC ICON + if ( AmmoTypes[Magazine[Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].acidic ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 7 ] ); + } + + // RANGE BONUS + if ( Item[ gpItemDescObject->usItem ].rangebonus != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 8 ] ); + } + + // DAMAGE BONUS + if ( Item[ gpItemDescObject->usItem ].damagebonus != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 9 ] ); + } + + // TO HIT BONUS + if ( Item[ gpItemDescObject->usItem ].tohitbonus != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 10 ] ); + } + + // BURST BONUS + if ( Item[ gpItemDescObject->usItem ].bursttohitbonus != 0 || Item[ gpItemDescObject->usItem ].autofiretohitbonus != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 11 ] ); + } + + // RELIABILITY BONUS + if ( Item[ gpItemDescObject->usItem ].bReliability != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 12 ] ); + } + + // NOISE SUPPRESSION + if ( Item[ gpItemDescObject->usItem ].percentnoisereduction > 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 13 ] ); + } + } + + /////////////////////////////////////////////////// + // Begin Armor Item Tooltip Section + + else if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_ARMOUR ) + { + // Create all regions + for (cnt = 0; cnt < 20; cnt++) + { + MSYS_DefineRegion( &gStatsFasthelpRegions[ cnt ], + (INT16)(gArmorDescStatsRects[ cnt ]. iLeft + gsInvDescX), + (INT16)(gArmorDescStatsRects[ cnt ].iTop + gsInvDescY), + (INT16)(gArmorDescStatsRects[ cnt ].iRight + gsInvDescX), + (INT16)(gArmorDescStatsRects[ cnt ].iBottom + gsInvDescY), + MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MSYS_NO_CALLBACK, ItemDescCallback ); + + MSYS_AddRegion( &gStatsFasthelpRegions[ cnt ]); + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzArmorStatsFasthelp[ cnt ] ); + SetRegionHelpEndCallback( &(gStatsFasthelpRegions[ cnt ]), HelpTextDoneCallback ); + MSYS_DisableRegion( &gStatsFasthelpRegions[ cnt ] ); + } + + // PROTECTION + MSYS_EnableRegion( &gStatsFasthelpRegions[ 0 ] ); + + // COVERAGE + MSYS_EnableRegion( &gStatsFasthelpRegions[ 1 ] ); + + // ARMOR DEGRADE + MSYS_EnableRegion( &gStatsFasthelpRegions[ 2 ] ); + + // AP BONUS + if ( GetAPBonus ( gpItemDescObject ) != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 3 ] ); + } + + // AIM BONUS + if ( GetFlatAimBonus( gpItemDescObject ) != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 4 ] ); + } + + // WOODLAND CAMO + if ( GetCamoBonus( gpItemDescObject ) > 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 5 ] ); + } + + // URBAN CAMO + if ( GetUrbanCamoBonus( gpItemDescObject ) > 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 6 ] ); + } + + // DESERT CAMO + if ( GetDesertCamoBonus( gpItemDescObject ) > 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 7 ] ); + } + + // SNOW CAMO + if ( GetSnowCamoBonus( gpItemDescObject ) > 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 8 ] ); + } + + // STEALTH + if ( GetStealthBonus( gpItemDescObject ) != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 9 ] ); + } + + // VISION RANGE BONUS + if ( GetItemVisionRangeBonus( gpItemDescObject, 0 ) != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 10 ] ); + } + + // DAY VISION RANGE BONUS + if ( GetItemVisionRangeBonus( gpItemDescObject, 1 ) != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 11 ] ); + } + + // NIGHT VISION RANGE BONUS + if ( GetItemVisionRangeBonus( gpItemDescObject, 0 ) != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 12 ] ); + } + + // BRIGHT LIGHT VISION RANGE BONUS + if ( GetItemVisionRangeBonus( gpItemDescObject, 0 ) != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 13 ] ); + } + + // CAVE VISION RANGE BONUS + if ( GetItemVisionRangeBonus( gpItemDescObject, 0 ) != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 14 ] ); + } + + // PERCENT TUNNEL VISION + if ( GetItemPercentTunnelVision( gpItemDescObject ) > 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 15 ] ); + } + + // HEARING RANGE BONUS + if ( GetItemHearingRangeBonus( gpItemDescObject ) != 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 16 ] ); + } + } + + ////////////////////////////////////// + // Begin Explosive Item Tooltips Section + else if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_EXPLOSV ) + { + // Create all regions + for (cnt = 0; cnt < 20; cnt++) + { + MSYS_DefineRegion( &gStatsFasthelpRegions[ cnt ], + (INT16)(gExplosiveDescStatsRects[ cnt ]. iLeft + gsInvDescX), + (INT16)(gExplosiveDescStatsRects[ cnt ].iTop + gsInvDescY), + (INT16)(gExplosiveDescStatsRects[ cnt ].iRight + gsInvDescX), + (INT16)(gExplosiveDescStatsRects[ cnt ].iBottom + gsInvDescY), + MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MSYS_NO_CALLBACK, ItemDescCallback ); + + MSYS_AddRegion( &gStatsFasthelpRegions[ cnt ]); + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzExplosiveStatsFasthelp[ cnt ] ); + SetRegionHelpEndCallback( &(gStatsFasthelpRegions[ cnt ]), HelpTextDoneCallback ); + MSYS_DisableRegion( &gStatsFasthelpRegions[ cnt ] ); + } + + // DAMAGE + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDamage > 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 0 ] ); + } + + // STUN DAMAGE + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubStunDamage > 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 1 ] ); + } + + // LOUDNESS + MSYS_EnableRegion( &gStatsFasthelpRegions[ 2 ] ); + + // VOLATILITY + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubVolatility > 0 ) + { + MSYS_EnableRegion( &gStatsFasthelpRegions[ 3 ] ); + } + + // SINGLE-EVENT EXPLOSION data + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDuration == 0 ) + { + // RADIUS + MSYS_EnableRegion( &gStatsFasthelpRegions[ 4 ] ); + + } + // PROLONGED EXPLOSION data + else if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDuration > 0 ) + { + + // DURATION + MSYS_EnableRegion( &gStatsFasthelpRegions[ 7 ] ); + + // STARTING RADIUS + MSYS_EnableRegion( &gStatsFasthelpRegions[ 5 ] ); + + // FINAL RADIUS + MSYS_EnableRegion( &gStatsFasthelpRegions[ 6 ] ); + } + } + + ////////////////////////////////////////////////////////// + // The following is more complex - it sets up tooltip regions based not on predetermined order but on how much data there is on the chart. + // It begins with defining all regions, then goes on to set the helptext of each one based on each value encountered in the item's stats. + // At the very end, it enables as many tooltips as values encountered. + + else + { + // Create all regions + for (cnt = 0; cnt < 20; cnt++) + { + MSYS_DefineRegion( &gStatsFasthelpRegions[ cnt ], + (INT16)(gMiscItemDescStatsRects[ cnt ].iLeft + gsInvDescX), + (INT16)(gMiscItemDescStatsRects[ cnt ].iTop + gsInvDescY), + (INT16)(gMiscItemDescStatsRects[ cnt ].iRight + gsInvDescX), + (INT16)(gMiscItemDescStatsRects[ cnt ].iBottom + gsInvDescY), + MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MSYS_NO_CALLBACK, ItemDescCallback ); + + MSYS_AddRegion( &gStatsFasthelpRegions[ cnt ]); + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ cnt ] ); + SetRegionHelpEndCallback( &(gStatsFasthelpRegions[ cnt ]), HelpTextDoneCallback ); + MSYS_DisableRegion( &gStatsFasthelpRegions[ cnt ] ); + } + + cnt=0; + + // ITEM SIZE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].itemsizebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 0 ] ); + cnt++; + } + + // RELIABILITY MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].bReliability != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 1 ] ); + cnt++; + } + + // NOISE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentnoisereduction != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 2 ] ); + cnt++; + } + + // HIDE MUZZLE FLASH ICON + if ( Item[ gpItemDescObject->usItem ].hidemuzzleflash > 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 3 ] ); + cnt++; + } + + // BIPOD ICON + if ( Item[ gpItemDescObject->usItem ].bipod != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 4 ] ); + cnt++; + } + + // RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].rangebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 5 ] ); + cnt++; + } + + // TO-HIT MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].tohitbonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 6 ] ); + cnt++; + } + + // LASER RANGE + if ( Item[ gpItemDescObject->usItem ].bestlaserrange > 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 7 ] ); + cnt++; + } + + // AIMING MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].aimbonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 8 ] ); + cnt++; + } + + // MINIMUM RANGE FOR AIMING BONUS ICON + if ( Item[ gpItemDescObject->usItem ].minrangeforaimbonus > 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 33 ] ); + cnt++; + } + + // MAGAZINE SIZE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].magsizebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 17 ] ); + cnt++; + } + + // BURST SIZE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].burstsizebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 9 ] ); + cnt++; + } + + // BURST TO-HIT MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].bursttohitbonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 10 ] ); + cnt++; + } + + // AUTO TO-HIT MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].autofiretohitbonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 11 ] ); + cnt++; + } + + // AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].APBonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 12 ] ); + cnt++; + } + + // BURST AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentburstfireapreduction != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 13 ] ); + cnt++; + } + + // AUTOFIRE AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentautofireapreduction != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 14 ] ); + cnt++; + } + + // READY AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentreadytimeapreduction != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 15 ] ); + cnt++; + } + + // RELOAD AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentreloadtimeapreduction != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 16 ] ); + cnt++; + } + + // SINGLE AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentapreduction != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 18 ] ); + cnt++; + } + + // DAMAGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].damagebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 19 ] ); + cnt++; + } + + // MELEE DAMAGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].meleedamagebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 20 ] ); + cnt++; + } + + // WOOD CAMO ICON + if ( Item[ gpItemDescObject->usItem ].camobonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 21 ] ); + cnt++; + } + + // URBAN CAMO ICON + if ( Item[ gpItemDescObject->usItem ].urbanCamobonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 22 ] ); + cnt++; + } + + // DESERT CAMO ICON + if ( Item[ gpItemDescObject->usItem ].desertCamobonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 23 ] ); + cnt++; + } + + // SNOW CAMO ICON + if ( Item[ gpItemDescObject->usItem ].snowCamobonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 24 ] ); + cnt++; + } + + // STEALTH MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].stealthbonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 25 ] ); + cnt++; + } + + // HEARING RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].hearingrangebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 26 ] ); + cnt++; + } + + // VISION RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].visionrangebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 27 ] ); + cnt++; + } + + // DAY VISION RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].dayvisionrangebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 28 ] ); + cnt++; + } + + // NIGHT VISION RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].nightvisionrangebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 29 ] ); + cnt++; + } + + // BRIGHT LIGHT VISION RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].brightlightvisionrangebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 30 ] ); + cnt++; + } + + // CAVE VISION RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].cavevisionrangebonus != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 31 ] ); + cnt++; + } + + // PERCENT TUNNEL VISION MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percenttunnelvision != 0 && cnt<=threshold ) + { + SetRegionFastHelpText( &(gStatsFasthelpRegions[ cnt ]), gzMiscItemStatsFasthelp[ 32 ] ); + cnt++; + } + + UINT8 cntval = cnt; + + // Enable as many regions as required + for ( cnt = 0; cnt 0 ) + { + UINT16 RegionsToRemove = 20; + + for (cnt = 0; cnt < RegionsToRemove; cnt++) + { + MSYS_RemoveRegion( &gStatsFasthelpRegions[cnt] ); + } + } + + if ( guiCurrentItemDescriptionScreen !=MAP_SCREEN && UsingEDBSystem() > 0 ) + { + UINT16 RegionsToRemove = 20; + + for (cnt = 0; cnt < RegionsToRemove; cnt++) + { + MSYS_RemoveRegion( &gStatsFasthelpRegions[cnt] ); + } + } +} + +void DrawWeaponStats( OBJECTTYPE * gpItemDescObject ) +{ + INT32 cnt; + + if( UsingEDBSystem() == 0 ) + return; + + // Start with icons relevant to all weapons + + // RELIABILITY ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 9, BULLET_RELIABILITY_X, BULLET_RELIABILITY_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + // REPAIR EASE ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 10, BULLET_REPAIR_X, BULLET_REPAIR_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + + ////////////////////////////////// + // BEGIN SINGLE ATTACK SEGMENT + + // Non-Launcher Guns only + if ( Item[gpItemDescObject->usItem].usItemClass == IC_GUN && !Item[gpItemDescObject->usItem].rocketlauncher ) + { + // "NO SINGLE-SHOT" ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 19, BULLET_SING_X, BULLET_SING_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + + if ( !Weapon[gpItemDescObject->usItem].NoSemiAuto ) + { + // SINGLE SHOT AP ICON overwrites shadow + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 0, BULLET_SING_X+1, BULLET_SING_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + } + + // Rocket-Launchers Only + if ( Item[gpItemDescObject->usItem].usItemClass & (IC_GUN|IC_LAUNCHER) && Item[gpItemDescObject->usItem].rocketlauncher ) + { + // SINGLE ROCKET-LAUNCH AP ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 21, BULLET_SING_X, BULLET_SING_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // Grenade-Launchers Only + if ( Item[gpItemDescObject->usItem].usItemClass == IC_LAUNCHER && !Item[gpItemDescObject->usItem].rocketlauncher ) + { + if ( !Weapon[gpItemDescObject->usItem].NoSemiAuto ) + { + // SINGLE GRENADE-LAUNCH AP ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 24, BULLET_SING_X, BULLET_SING_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + } + + // Throwing-Knives Only + if ( Item[gpItemDescObject->usItem].usItemClass == IC_THROWING_KNIFE ) + { + // THROW KNIFE AP ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 22, BULLET_SING_X, BULLET_SING_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // Blades Only + if ( Item[gpItemDescObject->usItem].usItemClass == IC_BLADE ) + { + // SLASH AP ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 20, BULLET_SING_X, BULLET_SING_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // Blunts Only + if ( Item[gpItemDescObject->usItem].usItemClass == IC_PUNCH ) + { + // BASH AP ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 26, BULLET_SING_X, BULLET_SING_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // END SINGLE ATTACK SEGMENT + //////////////////////////////////// + + //////////////////////////////////// + // BEGIN BURST ATTACK SEGMENT + + // Non-Launcher Guns Only + if ( Item[gpItemDescObject->usItem].usItemClass == IC_GUN && !Item[gpItemDescObject->usItem].rocketlauncher ) + { + // "NO BURST" ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 11, BULLET_BURST_X, BULLET_BURST_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + + if (GetShotsPerBurst(gpItemDescObject)> 0) + { + for ( cnt = 0; cnt < GetShotsPerBurst(gpItemDescObject); cnt++ ) + { + // BURST FIRE ICON overwrites shadow + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 0, BULLET_BURST_X + cnt * (BULLET_WIDTH/2 + 1) +1, BULLET_BURST_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + } + } + + // Grenade-Launchers Only + if ( Item[gpItemDescObject->usItem].usItemClass == IC_LAUNCHER && !Item[gpItemDescObject->usItem].rocketlauncher ) + { + if (GetShotsPerBurst(gpItemDescObject)> 0) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 25, BULLET_BURST_X, BULLET_BURST_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + } + + // END BURST ATTACK SEGMENT + //////////////////////////////////// + + //////////////////////////////////// + // BEGIN AUTO ATTACK SEGMENT + + // Non-Launcher Guns Only + if ( Item[gpItemDescObject->usItem].usItemClass == IC_GUN && !Item[gpItemDescObject->usItem].rocketlauncher ) + { + // "NO-AUTO" ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 12, BULLET_AUTO_X, BULLET_AUTO_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + + if (GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0 ) + { + for ( cnt = 0; cnt < 10; cnt++ ) + { + // AUTO FIRE ICON overwrites shadow + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 0, BULLET_AUTO_X + cnt * (BULLET_WIDTH/2 + 1) +1, BULLET_AUTO_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + } + } + + // END AUTO ATTACK SEGMENT + /////////////////////////////////// + + // Guns, Throwing knives and Launchers only + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER|IC_THROWING_KNIFE) ) + { + // RANGE ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 4, BULLET_RANGE_X, BULLET_RANGE_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // Guns and Launchers Only + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER) ) + { + // ACCURACY ICON (Always displayed for these items, even if accuracy is 0) + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 8, BULLET_ACC_X, BULLET_ACC_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + + // NOISE REDUCTION ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 17, BULLET_LOUDNESS_X, BULLET_LOUDNESS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // Guns and Multi-use Launchers Only + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER) && !Item[ gpItemDescObject->usItem ].singleshotrocketlauncher ) + { + // RELOAD AP ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 2, BULLET_RELOAD_X, BULLET_RELOAD_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + + if ( Weapon[gpItemDescObject->usItem].APsToReloadManually > 0 ) + { + // AP to Reload Manually ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 3, BULLET_MRELOAD_X, BULLET_MRELOAD_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + } + + // Guns and Grenade Launchers only + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER) && !Item[ gpItemDescObject->usItem].rocketlauncher ) + { + // DRAW AP ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 1, BULLET_DRAW_X, BULLET_DRAW_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // Non-Launcher Guns, Blades, and Throwing Knives only + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_PUNCH|IC_BLADE|IC_THROWING_KNIFE) && !Item[ gpItemDescObject->usItem ].singleshotrocketlauncher ) + { + // DAMAGE ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 5, BULLET_DAMAGE_X, BULLET_DAMAGE_Y-1, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // Non-Launcher Guns Only + if ( Item[ gpItemDescObject->usItem ].usItemClass == IC_GUN && !Item[ gpItemDescObject->usItem].rocketlauncher ) + { + if (GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0 || GetShotsPerBurst(gpItemDescObject)> 0 ) + { + // AUTO PENALTY ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 6, BULLET_AUTOPEN_X, BULLET_AUTOPEN_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + + if ( Weapon[ gpItemDescObject->usItem ].bAutofireShotsPerFiveAP > 0 ) + { + // AUTOFIRE SHOTS PER 5 AP ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 7, BULLET_AUTO5AP_X, BULLET_AUTO5AP_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + } + } + + ////////////////////////////////////////////////////////////////////// + // Begin non-type-specific icons. These are not type specific because they represent bonuses + // which may one day be added to various types of weapons by modders... + + if (IsFlashSuppressorAlt( gpItemDescObject ) == TRUE) + { + UINT8 icon = 28; + if(guiCurrentScreen != MAP_SCREEN && UsingNewInventorySystem() == true) + icon = 18; + // HIDE FLASH ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, icon, BULLET_FLASH_X, BULLET_FLASH_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + if (GetFlatToHitBonus( gpItemDescObject ) != 0) + { + // HIT BONUS ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 13, BULLET_TOHIT_X, BULLET_TOHIT_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + if (GetFlatToHitBonus( gpItemDescObject ) > 0 && GetAverageBestLaserRange( gpItemDescObject ) / 10 > 0) + { + // LASER RANGE ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 14, BULLET_BESTLASERRANGE_X, BULLET_BESTLASERRANGE_Y-1, VO_BLT_SRCTRANSPARENCY, NULL ); + } + } + + if (GetBipodBonus( gpItemDescObject ) != 0) + { + // BIPOD BONUS ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 16, BULLET_BIPOD_X, BULLET_BIPOD_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + if (IsScoped( gpItemDescObject )) + { + // SCOPE AIM BONUS ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 15, BULLET_AIMBONUS_X, BULLET_AIMBONUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + + if (GetMinRangeForAimBonus( gpItemDescObject )) + { + // SCOPE MIN RANGE FOR AIM BONUS ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoWeaponIcon, 27, BULLET_MINRANGEAIMBONUS_X, BULLET_MINRANGEAIMBONUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + } +} + +void DrawAmmoStats( OBJECTTYPE * gpItemDescObject ) +{ + // ARMOR PIERCING ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAmmoIcon, 0, BULLET_ARMORPEN_X, BULLET_ARMORPEN_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + + // TUMBLE ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAmmoIcon, 1, BULLET_TUMBLE_X, BULLET_TUMBLE_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + + // PRE-ARMOR EXPLOSION ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAmmoIcon, 2, BULLET_PREARMOR_X, BULLET_PREARMOR_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + + // ANTI-TANK ICON + if ( AmmoTypes[Magazine[Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].antiTank ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAmmoIcon, 3, BULLET_ANTITANK_X, BULLET_ANTITANK_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // IGNORE ARMOR ICON + if ( AmmoTypes[Magazine[Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].ignoreArmour ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAmmoIcon, 4, BULLET_IGNOREARMOR_X, BULLET_IGNOREARMOR_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // ACIDIC ICON + if ( AmmoTypes[Magazine[Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].acidic ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAmmoIcon, 5, BULLET_ACIDIC_X, BULLET_ACIDIC_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // LOCKBUSTER ICON + if ( AmmoTypes[Magazine[Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].lockBustingPower ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAmmoIcon, 6, BULLET_LOCKBUSTER_X, BULLET_LOCKBUSTER_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // TRACER + if ( AmmoTypes[Magazine[Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].tracerEffect ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAmmoIcon, 7, BULLET_TRACER_X, BULLET_TRACER_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // RANGE BONUS + if ( Item[ gpItemDescObject->usItem ].rangebonus != 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAmmoIcon, 8, BULLET_AMMORANGEBON_X, BULLET_AMMORANGEBON_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // DAMAGE BONUS + if ( Item[ gpItemDescObject->usItem ].damagebonus != 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAmmoIcon, 9, BULLET_AMMODAMAGEBON_X, BULLET_AMMODAMAGEBON_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // TO HIT BONUS + if ( Item[ gpItemDescObject->usItem ].tohitbonus != 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAmmoIcon, 11, BULLET_AMMOTOHITBON_X, BULLET_AMMOTOHITBON_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // BURST BONUS + if ( Item[ gpItemDescObject->usItem ].bursttohitbonus != 0 || Item[ gpItemDescObject->usItem ].autofiretohitbonus != 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAmmoIcon, 10, BULLET_AMMOBURSTBON_X, BULLET_AMMOBURSTBON_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // RELIABILITY BONUS + if ( Item[ gpItemDescObject->usItem ].bReliability != 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAmmoIcon, 12, BULLET_AMMORELIABILITYBON_X, BULLET_AMMORELIABILITYBON_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // NOISE SUPPRESSION + if ( Item[ gpItemDescObject->usItem ].percentnoisereduction > 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAmmoIcon, 13, BULLET_AMMONOISESUPP_X, BULLET_AMMONOISESUPP_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } +} + +void DrawExplosiveStats( OBJECTTYPE * gpItemDescObject ) +{ + if( UsingEDBSystem() == 0 ) + return; + + // DAMAGE ICON + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDamage > 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 0, BULLET_EXPLOSIVEDAMAGE_X, BULLET_EXPLOSIVEDAMAGE_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // STUN DAMAGE ICON + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubStunDamage > 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 1, BULLET_EXPLOSIVESTUNDAMAGE_X, BULLET_EXPLOSIVESTUNDAMAGE_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // LOUDNESS ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 2, BULLET_EXPLOSIVELOUDNESS_X, BULLET_EXPLOSIVELOUDNESS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + + // VOLATILITY ICON + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubVolatility > 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 3, BULLET_EXPLOSIVEVOLATILITY_X, BULLET_EXPLOSIVEVOLATILITY_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // SINGLE-EVENT EXPLOSION data + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDuration == 0 ) + { + // SOUND RADIUS ICON + if ( Explosive[Item[ gpItemDescObject->usItem].ubClassIndex ].ubType == 5 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 6, BULLET_EXPLOSIVERADIUS_X, BULLET_EXPLOSIVERADIUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + else if ( Explosive[Item[ gpItemDescObject->usItem].ubClassIndex ].ubType == 1 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 5, BULLET_EXPLOSIVERADIUS_X, BULLET_EXPLOSIVERADIUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + else + { + // RADIUS ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 4, BULLET_EXPLOSIVERADIUS_X, BULLET_EXPLOSIVERADIUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + } + // PROLONGED EXPLOSION data + else if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDuration > 0 ) + { + // ARROW + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 8, BULLET_EXPLOSIVEARROW_X, BULLET_EXPLOSIVEARROW_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + // DURATION ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 7, BULLET_EXPLOSIVEDURATION_X, BULLET_EXPLOSIVEDURATION_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubType == 2) + { + // STARTING RADIUS ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 9, BULLET_EXPLOSIVESTARTRADIUS_X, BULLET_EXPLOSIVESTARTRADIUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + // FINAL RADIUS ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 10, BULLET_EXPLOSIVEENDRADIUS_X, BULLET_EXPLOSIVEENDRADIUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // MUSTARD GAS + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubType == 3) + { + // STARTING RADIUS ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 13, BULLET_EXPLOSIVESTARTRADIUS_X, BULLET_EXPLOSIVESTARTRADIUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + // FINAL RADIUS ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 14, BULLET_EXPLOSIVEENDRADIUS_X, BULLET_EXPLOSIVEENDRADIUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // LIGHT + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubType == 4) + { + // HEADROCK: Please note that these two are reversed for lights, as for some reason lights start + // at larger radius and decay to a smaller one. + + // STARTING RADIUS ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 18, BULLET_EXPLOSIVESTARTRADIUS_X, BULLET_EXPLOSIVESTARTRADIUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + // FINAL RADIUS ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 17, BULLET_EXPLOSIVEENDRADIUS_X, BULLET_EXPLOSIVEENDRADIUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // SMOKE + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubType == 6) + { + // STARTING RADIUS ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 11, BULLET_EXPLOSIVESTARTRADIUS_X, BULLET_EXPLOSIVESTARTRADIUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + // FINAL RADIUS ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 12, BULLET_EXPLOSIVEENDRADIUS_X, BULLET_EXPLOSIVEENDRADIUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // NAPALM + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubType == 8) + { + // STARTING RADIUS ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 15, BULLET_EXPLOSIVESTARTRADIUS_X, BULLET_EXPLOSIVESTARTRADIUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + // FINAL RADIUS ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoExplosiveIcon, 16, BULLET_EXPLOSIVEENDRADIUS_X, BULLET_EXPLOSIVEENDRADIUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + } +} + +void DrawArmorStats( OBJECTTYPE * gpItemDescObject ) +{ + if( UsingEDBSystem() == 0 ) + return; + + // HELMET + if ( Armour[ Item[ gpItemDescObject->usItem ].ubClassIndex ].ubArmourClass == 0 ) + { + // ARMOR VALUE ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 1, BULLET_ARMOR_X, BULLET_ARMOR_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + // ARMOR COVERAGE ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 4, BULLET_ARMORCOVERAGE_X, BULLET_ARMORCOVERAGE_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + // LEGGINGS + else if ( Armour[ Item[ gpItemDescObject->usItem ].ubClassIndex ].ubArmourClass == 2 ) + { + // ARMOR VALUE ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 2, BULLET_ARMOR_X, BULLET_ARMOR_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + // ARMOR COVERAGE ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 5, BULLET_ARMORCOVERAGE_X, BULLET_ARMORCOVERAGE_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + // VEST and anything else + else + { + // ARMOR VALUE ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 0, BULLET_ARMOR_X, BULLET_ARMOR_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + // ARMOR COVERAGE ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 3, BULLET_ARMORCOVERAGE_X, BULLET_ARMORCOVERAGE_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // ARMOR DEGRADE ICON + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 6, BULLET_ARMORDEGRADE_X, BULLET_ARMORDEGRADE_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + + // AP BONUS ICON + if ( GetAPBonus ( gpItemDescObject ) != 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 11, BULLET_ARMORAPBONUS_X, BULLET_ARMORAPBONUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // AIM BONUS ICON + if ( GetFlatAimBonus( gpItemDescObject ) != 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 12, BULLET_ARMORAIMBONUS_X, BULLET_ARMORAIMBONUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // WOODLAND CAMO ICON + if ( GetCamoBonus( gpItemDescObject ) > 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 7, BULLET_ARMORWOODCAMO_X, BULLET_ARMORWOODCAMO_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // URBAN CAMO ICON + if ( GetUrbanCamoBonus( gpItemDescObject ) > 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 8, BULLET_ARMORURBANCAMO_X, BULLET_ARMORURBANCAMO_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // DESERT CAMO ICON + if ( GetDesertCamoBonus( gpItemDescObject ) > 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 9, BULLET_ARMORDESERTCAMO_X, BULLET_ARMORDESERTCAMO_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // SNOW CAMO ICON + if ( GetSnowCamoBonus( gpItemDescObject ) > 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 10, BULLET_ARMORSNOWCAMO_X, BULLET_ARMORSNOWCAMO_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // STEALTH ICON + if ( GetStealthBonus( gpItemDescObject ) != 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 18, BULLET_ARMORSTEALTH_X, BULLET_ARMORSTEALTH_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // VISION RANGE BONUS ICON + if ( Item[ gpItemDescObject->usItem ].visionrangebonus != 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 17, BULLET_ARMORVISIONRANGEBONUS_X, BULLET_ARMORVISIONRANGEBONUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // DAY VISION RANGE BONUS ICON + if ( Item[ gpItemDescObject->usItem ].dayvisionrangebonus != 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 14, BULLET_ARMORDAYVISIONRANGEBONUS_X, BULLET_ARMORDAYVISIONRANGEBONUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // NIGHT VISION RANGE BONUS ICON + if ( Item[ gpItemDescObject->usItem ].nightvisionrangebonus != 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 13, BULLET_ARMORNIGHTVISIONRANGEBONUS_X, BULLET_ARMORNIGHTVISIONRANGEBONUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // BRIGHT LIGHT VISION RANGE BONUS ICON + if ( Item[ gpItemDescObject->usItem ].brightlightvisionrangebonus != 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 15, BULLET_ARMORBRIGHTLIGHTVISIONRANGEBONUS_X, BULLET_ARMORBRIGHTLIGHTVISIONRANGEBONUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // CAVE VISION RANGE BONUS ICON + if ( Item[ gpItemDescObject->usItem ].cavevisionrangebonus != 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 16, BULLET_ARMORCAVEVISIONRANGEBONUS_X, BULLET_ARMORCAVEVISIONRANGEBONUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // PERCENT TUNNEL VISION ICON + if ( Item[ gpItemDescObject->usItem ].percenttunnelvision > 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 19, BULLET_ARMORPERCENTTUNNELVISION_X, BULLET_ARMORPERCENTTUNNELVISION_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + + // HEARING RANGE BONUS ICON + if ( GetItemHearingRangeBonus( gpItemDescObject ) != 0 ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoArmorIcon, 20, BULLET_ARMORHEARINGRANGEBONUS_X, BULLET_ARMORHEARINGRANGEBONUS_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } +} + +void DrawMiscStats( OBJECTTYPE * gpItemDescObject ) +{ + INT32 cnt = 0; + INT32 threshold; + + if( guiCurrentScreen == MAP_SCREEN ) + threshold = 13; + else + threshold = 11; + + if( UsingEDBSystem() == 0 ) + return; + + // ITEM SIZE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].itemsizebonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 0, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // RELIABILITY MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].bReliability != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 1, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // NOISE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentnoisereduction != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 2, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // HIDE MUZZLE FLASH ICON + if ( Item[ gpItemDescObject->usItem ].hidemuzzleflash > 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 3, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // BIPOD ICON + if ( Item[ gpItemDescObject->usItem ].bipod != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 4, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].rangebonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 5, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // TO-HIT MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].tohitbonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 6, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // LASER RANGE ICON + if ( Item[ gpItemDescObject->usItem ].bestlaserrange > 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 7, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY + 2, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // AIMING MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].aimbonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 8, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // MINIMUM RANGE FOR AIMING ICON + if ( Item[ gpItemDescObject->usItem ].minrangeforaimbonus > 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 33, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // MAGAZINE SIZE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].magsizebonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 17, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // BURST SIZE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].burstsizebonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 9, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // BURST TO-HIT MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].bursttohitbonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 10, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // AUTO TO-HIT MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].autofiretohitbonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 11, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].APBonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 12, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // BURST AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentburstfireapreduction != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 13, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // AUTOFIRE AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentautofireapreduction != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 14, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // READY AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentreadytimeapreduction != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 15, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // RELOAD AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentreloadtimeapreduction != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 16, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // SINGLE AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentapreduction != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 18, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // DAMAGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].damagebonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 19, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // MELEE DAMAGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].meleedamagebonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 20, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // WOOD CAMO ICON + if ( Item[ gpItemDescObject->usItem ].camobonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 21, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // URBAN CAMO ICON + if ( Item[ gpItemDescObject->usItem ].urbanCamobonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 22, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // DESERT CAMO ICON + if ( Item[ gpItemDescObject->usItem ].desertCamobonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 23, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // SNOW CAMO ICON + if ( Item[ gpItemDescObject->usItem ].snowCamobonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 24, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // STEALTH MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].stealthbonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 25, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // HEARING RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].hearingrangebonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 26, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // VISION RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].visionrangebonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 27, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // DAY VISION RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].dayvisionrangebonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 29, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // NIGHT VISION RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].nightvisionrangebonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 28, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // BRIGHT LIGHT VISION RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].brightlightvisionrangebonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 30, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // CAVE VISION RANGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].cavevisionrangebonus != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 31, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } + + // PERCENT TUNNEL VISION MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percenttunnelvision != 0 && cnt<=threshold ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoMiscIcon, 32, gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); + cnt++; + } +} + +void DrawWeaponValues( OBJECTTYPE * gpItemDescObject ) +{ + static CHAR16 pStr[ 100 ]; + INT16 usX, usY; + INT16 ubAttackAPs; + + if( UsingEDBSystem() == 0 ) + return; + + // Start with data relevant to all weapons + + // "AP COSTS" header + SetFontForeground( FONT_MCOLOR_WHITE ); + mprintf( gWeaponStats[ 9 ].sX + gsInvDescX + 2, gWeaponStats[ 9 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 2 ] ); + SetFontForeground( 6 ); + + // RELIABILITY + // equals + mprintf( gWeaponStats[ 28 ].sX + gsInvDescX, gWeaponStats[ 28 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // Calculate ammo reliability + INT8 iAmmoReliability = 0; + if ( Item[ gpItemDescObject->usItem ].usItemClass == IC_GUN && (*gpItemDescObject)[0]->data.gun.ubGunShotsLeft > 0 ) + { + iAmmoReliability = Item[( *gpItemDescObject )[0]->data.gun.usGunAmmoItem].bReliability; + } + else + { + iAmmoReliability = 0; + } + + INT8 iReliabilityValue = iAmmoReliability + Item[ gpItemDescObject->usItem ].bReliability; + + // Determine color for value print + SetFontForeground ( 5 ); + if (iReliabilityValue < 0) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iReliabilityValue > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iReliabilityValue > 0 ) + { + swprintf( pStr, L"%+2d", iReliabilityValue ); + } + else + { + swprintf( pStr, L"%2d", iReliabilityValue ); + } + FindFontRightCoordinates( (INT16)(gWeaponStats[ 7 ].sX + gsInvDescX + gWeaponStats[ 7 ].sValDx), (INT16)(gWeaponStats[ 7 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + SetFontForeground( 6 ); + + + // REPAIR EASE + // equals + mprintf( gWeaponStats[ 29 ].sX + gsInvDescX, gWeaponStats[ 29 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // Determine repair ease + INT8 iRepairEaseValue = Item[ gpItemDescObject->usItem ].bRepairEase; + + // Determine color for value printing + SetFontForeground ( 5 ); + if (iRepairEaseValue < 0) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iRepairEaseValue > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iRepairEaseValue > 0 ) + { + swprintf( pStr, L"%+2d", iRepairEaseValue ); + } + else + { + swprintf( pStr, L"%2d", iRepairEaseValue ); + } + FindFontRightCoordinates( (INT16)(gWeaponStats[ 8 ].sX + gsInvDescX + gWeaponStats[ 8 ].sValDx), (INT16)(gWeaponStats[ 8 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + + SetFontForeground( 6 ); + + // ShotsPer4Turns -> ubAttackAPs, used later for all shot AP values + ubAttackAPs = BaseAPsToShootOrStab( DEFAULT_APS, DEFAULT_AIMSKILL, gpItemDescObject ); + + // SINGLE SHOT AP + if ( !Weapon[gpItemDescObject->usItem].NoSemiAuto ) + { + // equals + mprintf( gWeaponStats[ 32 ].sX + gsInvDescX, gWeaponStats[ 32 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // Determine color for printing value + if (ubAttackAPs <= EXCEPTIONAL_AP_COST) + { + SetFontForeground( ITEMDESC_FONTHIGHLIGHT ); + } + else + { + SetFontForeground( 5 ); + } + + // print value + swprintf( pStr, L"%2d", ubAttackAPs ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 11 ].sX + gsInvDescX + gWeaponStats[ 11 ].sValDx), (INT16)(gWeaponStats[ 11 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + SetFontForeground( 6 ); + } + + // BURST AP + if (GetShotsPerBurst(gpItemDescObject)> 0) + { + // equals + mprintf( gWeaponStats[ 33 ].sX + gsInvDescX, gWeaponStats[ 33 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", ubAttackAPs + CalcAPsToBurst( DEFAULT_APS, gpItemDescObject ) ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 12 ].sX + gsInvDescX + gWeaponStats[ 12 ].sValDx), (INT16)(gWeaponStats[ 12 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + SetFontForeground( 6 ); + } + + // AUTO AP + if (GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0 ) + { + // equals + mprintf( gWeaponStats[ 34 ].sX + gsInvDescX, gWeaponStats[ 34 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", ubAttackAPs + CalcAPsToAutofire( DEFAULT_APS, gpItemDescObject, 3 ) ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 13 ].sX + gsInvDescX + gWeaponStats[ 13 ].sValDx), (INT16)(gWeaponStats[ 13 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + SetFontForeground( 6 ); + } + + // PRINT VALUES FOR SPECIFIC WEAPON TYPES + + // Guns and Launchers Only + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER) ) + { + // ACCURACY + // equals + mprintf( gWeaponStats[ 27 ].sX + gsInvDescX, gWeaponStats[ 27 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // Get accuracy value + INT8 iAccuracyValue = Weapon[ gpItemDescObject->usItem ].bAccuracy; + + // Determine color for value printing + SetFontForeground( 5 ); + if (iAccuracyValue < 0) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iAccuracyValue > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iAccuracyValue > 0 ) + { + swprintf( pStr, L"%+2d", iAccuracyValue ); + } + else + { + swprintf( pStr, L"%2d", iAccuracyValue ); + } + FindFontRightCoordinates( (INT16)(gWeaponStats[ 6 ].sX + gsInvDescX + gWeaponStats[ 6 ].sValDx), (INT16)(gWeaponStats[ 6 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + SetFontForeground( 6 ); + + // LOUDNESS + // equals + mprintf( gWeaponStats[ 38 ].sX + gsInvDescX, gWeaponStats[ 38 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // Get loudness value + INT16 iLoudnessValue = GetFinalLoudness( gpItemDescObject ); + + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", iLoudnessValue ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 17 ].sX + gsInvDescX + gWeaponStats[ 17 ].sValDx), (INT16)(gWeaponStats[ 17 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + SetFontForeground( 6 ); + } + + // Guns and Multi-use Launchers Only + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER) && !Item[ gpItemDescObject->usItem ].singleshotrocketlauncher ) + { + // RELOAD AP + // equals + mprintf( gWeaponStats[ 35 ].sX + gsInvDescX, gWeaponStats[ 35 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", Weapon[ gpItemDescObject->usItem ].APsToReload ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 14 ].sX + gsInvDescX + gWeaponStats[ 14 ].sValDx), (INT16)(gWeaponStats[ 14 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + SetFontForeground( 6 ); + + if ( Weapon[gpItemDescObject->usItem].APsToReloadManually > 0 ) + { + // RELOAD MANUALLY AP + // equals + mprintf( gWeaponStats[ 36 ].sX + gsInvDescX, gWeaponStats[ 36 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", Weapon[gpItemDescObject->usItem].APsToReloadManually ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 15 ].sX + gsInvDescX + gWeaponStats[ 15 ].sValDx), (INT16)(gWeaponStats[ 15 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + SetFontForeground( 6 ); + } + } + + // Guns and Grenade Launchers only + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER) && !Item[ gpItemDescObject->usItem].rocketlauncher ) + { + // DRAW AP + // equals + mprintf( gWeaponStats[ 31 ].sX + gsInvDescX, gWeaponStats[ 31 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // calculate Draw AP + INT16 iDrawAP = 0; + iDrawAP = (Weapon[ gpItemDescObject->usItem ].ubReadyTime * (100 - GetPercentReadyTimeAPReduction(gpItemDescObject)) / 100); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", iDrawAP ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 10 ].sX + gsInvDescX + gWeaponStats[ 10 ].sValDx), (INT16)(gWeaponStats[ 10 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + SetFontForeground( 6 ); + } + + // Non-Launcher Guns Only + if ( Item[ gpItemDescObject->usItem ].usItemClass == IC_GUN && !Item[ gpItemDescObject->usItem].rocketlauncher ) + { + + if ( GetShotsPerBurst(gpItemDescObject)> 0 ) + { + // BURST PENALTY + // equals + mprintf( gWeaponStats[ 25 ].sX + gsInvDescX, gWeaponStats[ 25 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", GetBurstPenalty( gpItemDescObject, FALSE ) ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 4 ].sX + gsInvDescX + gWeaponStats[ 4 ].sValDx), (INT16)(gWeaponStats[ 4 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + SetFontForeground( 6 ); + } + // Note "else if" here to avoid displaying both types of penalties... + + else if (GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0 ) + { + // AUTO PENALTY + // equals + mprintf( gWeaponStats[ 25 ].sX + gsInvDescX, gWeaponStats[ 25 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", GetAutoPenalty( gpItemDescObject, FALSE ) ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 4 ].sX + gsInvDescX + gWeaponStats[ 4 ].sValDx), (INT16)(gWeaponStats[ 4 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + SetFontForeground( 6 ); + } + + // Note "if" here to display this regardless of BURST PENALTY + if (GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0 ) + { + // AUTOFIRE SHOTS PER 5 AP + // equals + mprintf( gWeaponStats[ 26 ].sX + gsInvDescX, gWeaponStats[ 26 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", GetAutofireShotsPerFiveAPs( gpItemDescObject ) ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 5 ].sX + gsInvDescX + gWeaponStats[ 5 ].sValDx), (INT16)(gWeaponStats[ 5 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + SetFontForeground( 6 ); + + } + } + + ////////////////////////////////////////////////////////////////////// + // Begin non-weapontype-specific data. These are not type specific because they represent bonuses + // which may one day be added to various types of weapons by modders... + + if (GetFlatToHitBonus( gpItemDescObject ) != 0) + { + // HIT BONUS + // equals + mprintf( gWeaponStats[ 39 ].sX + gsInvDescX, gWeaponStats[ 39 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // Determine Color for Value Printing + SetFontForeground( 5 ); + if (GetFlatToHitBonus ( gpItemDescObject ) < 0) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if (GetFlatToHitBonus ( gpItemDescObject ) > 0) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // Print Value + if ( GetFlatToHitBonus ( gpItemDescObject ) > 0 ) + { + swprintf( pStr, L"%+2d", GetFlatToHitBonus ( gpItemDescObject ) ); + } + else + { + swprintf( pStr, L"%2d", GetFlatToHitBonus ( gpItemDescObject ) ); + } + FindFontRightCoordinates( (INT16)(gWeaponStats[ 18 ].sX + gsInvDescX + gWeaponStats[ 18 ].sValDx), (INT16)(gWeaponStats[ 18 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + SetFontForeground( 6 ); + + if (GetFlatToHitBonus( gpItemDescObject ) > 0 && GetAverageBestLaserRange( gpItemDescObject ) / 10 > 0 ) + { + // LASER RANGE + // equals + mprintf( gWeaponStats[ 40 ].sX + gsInvDescX, gWeaponStats[ 40 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", GetAverageBestLaserRange( gpItemDescObject ) / 10 ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 19 ].sX + gsInvDescX + gWeaponStats[ 19 ].sValDx), (INT16)(gWeaponStats[ 19 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + SetFontForeground( 6 ); + } + } + + if (GetBipodBonus( gpItemDescObject ) != 0) + { + // BIPOD BONUS + // equals + mprintf( gWeaponStats[ 43 ].sX + gsInvDescX, gWeaponStats[ 43 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + if (GetBipodBonus( gpItemDescObject ) < 0) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if (GetBipodBonus( gpItemDescObject ) > 0) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + if ( GetBipodBonus( gpItemDescObject ) > 0 ) + { + swprintf( pStr, L"%+2d", GetBipodBonus( gpItemDescObject ) ); + } + else + { + swprintf( pStr, L"%2d", GetBipodBonus( gpItemDescObject ) ); + } + FindFontRightCoordinates( (INT16)(gWeaponStats[ 22 ].sX + gsInvDescX + gWeaponStats[ 22 ].sValDx), (INT16)(gWeaponStats[ 22 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + SetFontForeground( 6 ); + } + + if (IsScoped( gpItemDescObject )) + { + // SCOPE AIM BONUS + // equals + mprintf( gWeaponStats[ 41 ].sX + gsInvDescX, gWeaponStats[ 41 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + if (GetFlatAimBonus( gpItemDescObject ) < 0) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if (GetFlatAimBonus( gpItemDescObject ) > 0) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + if ( GetFlatAimBonus( gpItemDescObject ) > 0 ) + { + swprintf( pStr, L"%+2d", GetFlatAimBonus( gpItemDescObject ) ); + } + else + { + swprintf( pStr, L"%2d", GetFlatAimBonus( gpItemDescObject ) ); + } + FindFontRightCoordinates( (INT16)(gWeaponStats[ 20 ].sX + gsInvDescX + gWeaponStats[ 20 ].sValDx), (INT16)(gWeaponStats[ 20 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + SetFontForeground( 6 ); + + + if (GetMinRangeForAimBonus(gpItemDescObject) > 0) + { + // SCOPE MINIMUM RANGE FOR AIM BONUS + // equals + mprintf( gWeaponStats[ 42 ].sX + gsInvDescX, gWeaponStats[ 42 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", GetMinRangeForAimBonus( gpItemDescObject )/10 ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 21 ].sX + gsInvDescX + gWeaponStats[ 21 ].sValDx), (INT16)(gWeaponStats[ 21 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + SetFontForeground( 6 ); + } + } +} + +void DrawAmmoValues( OBJECTTYPE * gpItemDescObject, int shotsLeft ) +{ + static CHAR16 pStr[ 100 ]; + INT16 usY; + INT16 sStrX; + UINT16 uiStringLength; + + if( UsingEDBSystem() == 0 ) + return; + + // AMMO AMOUNT + // label + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 0 ].sX + gsInvDescX, gWeaponStats[ 0 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 16 ] ); + + // data + SetFontForeground( 5 ); + swprintf( pStr, L"%d/%d", shotsLeft, Magazine[ Item[ gpItemDescObject->usItem ].ubClassIndex ].ubMagSize ); //Pulmu: Correct # of rounds for stacked ammo. + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 0 ].sX + gsInvDescX + gWeaponStats[ 0 ].sValDx+6), (INT16)(gWeaponStats[ 0 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + if (UsingEDBSystem() == 2) + mprintf( sStrX - 6, gWeaponStats[ 0 ].sY + gsInvDescY + 12, pStr ); + else + mprintf( sStrX, gWeaponStats[ 0 ].sY + gsInvDescY, pStr ); + + // AMMO PENETRATION + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 23 ].sX + gsInvDescX -5, gWeaponStats[ 23 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + FLOAT fArmourImpactReduction = 0.0; + fArmourImpactReduction = (FLOAT) AmmoTypes[Magazine[ Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].armourImpactReductionMultiplier / (FLOAT) AmmoTypes[Magazine[ Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].armourImpactReductionDivisor; + + // determine value print color + SetFontForeground( 5 ); + if ( fArmourImpactReduction > 1.0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( fArmourImpactReduction < 1.0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + swprintf( pStr, L"%1.2f", fArmourImpactReduction ); + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 2 ].sX + gsInvDescX + gWeaponStats[ 2 ].sValDx), (INT16)(gWeaponStats[ 2 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 2 ].sY + gsInvDescY, pStr ); + + // AMMO TUMBLE + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 24 ].sX + gsInvDescX -5, gWeaponStats[ 24 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + FLOAT fAfterArmourImpactReduction = 0.0; + fAfterArmourImpactReduction = (FLOAT) AmmoTypes[Magazine[ Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].afterArmourDamageMultiplier / (FLOAT) AmmoTypes[Magazine[ Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].afterArmourDamageDivisor; + + // determine value print color + SetFontForeground( 5 ); + if ( fAfterArmourImpactReduction < 1.0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( fAfterArmourImpactReduction > 1.0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + swprintf( pStr, L"%1.2f", fAfterArmourImpactReduction ); + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 3 ].sX + gsInvDescX + gWeaponStats[ 3 ].sValDx), (INT16)(gWeaponStats[ 3 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 3 ].sY + gsInvDescY, pStr ); + + // AMMO PRE-ARMOR EXPLOSION + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 25 ].sX + gsInvDescX -5, gWeaponStats[ 25 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + FLOAT fBeforeArmourImpactReduction = 0.0; + fBeforeArmourImpactReduction = (FLOAT) AmmoTypes[Magazine[ Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].beforeArmourDamageMultiplier / (FLOAT) AmmoTypes[Magazine[ Item[ gpItemDescObject->usItem ].ubClassIndex].ubAmmoType].beforeArmourDamageDivisor; + + // determine value print color + SetFontForeground( 5 ); + if ( fBeforeArmourImpactReduction < 1.0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( fBeforeArmourImpactReduction > 1.0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + swprintf( pStr, L"%1.2f", fBeforeArmourImpactReduction ); + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 4 ].sX + gsInvDescX + gWeaponStats[ 4 ].sValDx), (INT16)(gWeaponStats[ 4 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 4 ].sY + gsInvDescY, pStr ); + + if ( Item[ gpItemDescObject->usItem ].rangebonus != 0 ) + { + // AMMO RANGE BONUS + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 37 ].sX + gsInvDescX, gWeaponStats[ 37 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iRangeBonus = 0; + iRangeBonus = Item[ gpItemDescObject->usItem ].rangebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iRangeBonus < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iRangeBonus > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iRangeBonus > 0 ) + { + swprintf( pStr, L"%+2d", iRangeBonus / 10 ); + } + else + { + swprintf( pStr, L"%2d", iRangeBonus / 10 ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 16 ].sX + gsInvDescX + gWeaponStats[ 16 ].sValDx), (INT16)(gWeaponStats[ 16 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 16 ].sY + gsInvDescY, pStr ); + } + + if ( Item[ gpItemDescObject->usItem ].damagebonus != 0 ) + { + // AMMO DAMAGE BONUS + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 38 ].sX + gsInvDescX, gWeaponStats[ 38 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iDamageBonus = 0; + iDamageBonus = Item[ gpItemDescObject->usItem ].damagebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iDamageBonus < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iDamageBonus > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iDamageBonus > 0 ) + { + swprintf( pStr, L"%+2d", iDamageBonus / 10 ); + } + else + { + swprintf( pStr, L"%2d", iDamageBonus / 10 ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 17 ].sX + gsInvDescX + gWeaponStats[ 17 ].sValDx), (INT16)(gWeaponStats[ 17 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 17 ].sY + gsInvDescY, pStr ); + } + + if ( Item[ gpItemDescObject->usItem ].tohitbonus != 0 ) + { + // AMMO TO-HIT BONUS + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 39 ].sX + gsInvDescX, gWeaponStats[ 39 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iToHitBonus = 0; + iToHitBonus = Item[ gpItemDescObject->usItem ].tohitbonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iToHitBonus < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iToHitBonus > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iToHitBonus > 0 ) + { + swprintf( pStr, L"%+2d", iToHitBonus ); + } + else + { + swprintf( pStr, L"%2d", iToHitBonus ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 18 ].sX + gsInvDescX + gWeaponStats[ 18 ].sValDx), (INT16)(gWeaponStats[ 18 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 18 ].sY + gsInvDescY, pStr ); + } + + if ( Item[ gpItemDescObject->usItem ].bursttohitbonus != 0 || Item[ gpItemDescObject->usItem ].autofiretohitbonus != 0 ) + { + // AMMO BURST/AUTO BONUS + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 40 ].sX + gsInvDescX, gWeaponStats[ 40 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iBurstBonus = 0; + if ( Item[ gpItemDescObject->usItem ].bursttohitbonus > 0 || Item[ gpItemDescObject->usItem ].autofiretohitbonus > 0) + { + iBurstBonus = __max( Item[ gpItemDescObject->usItem ].bursttohitbonus, Item[ gpItemDescObject->usItem ].autofiretohitbonus ) ; + } + else + { + iBurstBonus = __min( Item[ gpItemDescObject->usItem ].bursttohitbonus, Item[ gpItemDescObject->usItem ].autofiretohitbonus ) ; + } + + // determine value print color + SetFontForeground( 5 ); + if ( iBurstBonus < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iBurstBonus > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iBurstBonus > 0 ) + { + swprintf( pStr, L"%+2d", iBurstBonus ); + } + else + { + swprintf( pStr, L"%2d", iBurstBonus ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 19 ].sX + gsInvDescX + gWeaponStats[ 19 ].sValDx), (INT16)(gWeaponStats[ 19 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 19 ].sY + gsInvDescY, pStr ); + } + + if ( Item[ gpItemDescObject->usItem ].bReliability != 0 ) + { + // AMMO RELIABILITY BONUS + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 41 ].sX + gsInvDescX, gWeaponStats[ 41 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iReliabilityBonus = 0; + iReliabilityBonus = Item[ gpItemDescObject->usItem ].bReliability; + + // determine value print color + SetFontForeground( 5 ); + if ( iReliabilityBonus < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iReliabilityBonus > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iReliabilityBonus > 0 ) + { + swprintf( pStr, L"%+2d", iReliabilityBonus ); + } + else + { + swprintf( pStr, L"%2d", iReliabilityBonus ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 20 ].sX + gsInvDescX + gWeaponStats[ 20 ].sValDx), (INT16)(gWeaponStats[ 20 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 20 ].sY + gsInvDescY, pStr ); + } + + if ( Item[ gpItemDescObject->usItem ].percentnoisereduction > 0 ) + { + // AMMO NOISE SUPPRESSION + // equals + SetFontForeground( 6 ); + //mprintf( gWeaponStats[ 41 ].sX + gsInvDescX, gWeaponStats[ 41 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iNoiseSuppression = 0; + iNoiseSuppression = Item[ gpItemDescObject->usItem ].percentnoisereduction * -1; + + SetFontForeground( 5 ); + if ( iNoiseSuppression > 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iNoiseSuppression < 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iNoiseSuppression > 0 ) + { + swprintf( pStr, L"%+2d%%", iNoiseSuppression ); + } + else + { + swprintf( pStr, L"%2d%%", iNoiseSuppression ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 21 ].sX + gsInvDescX + gWeaponStats[ 21 ].sValDx), (INT16)(gWeaponStats[ 21 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gWeaponStats[ 21 ].sY + gsInvDescY, pStr ); + } +} + +void DrawExplosiveValues( OBJECTTYPE * gpItemDescObject ) +{ + static CHAR16 pStr[ 100 ]; + INT16 usY; + INT16 sStrX; + UINT16 uiStringLength; + + if( UsingEDBSystem() == 0 ) + return; + + // DAMAGE + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDamage > 0 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 23 ].sX + gsInvDescX, gWeaponStats[ 23 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDamage + ( (Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDamage * gGameExternalOptions.ubExplosivesDamageMultiplier ) / 100 )); + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 2 ].sX + gsInvDescX + gWeaponStats[ 2 ].sValDx), (INT16)(gWeaponStats[ 2 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 2 ].sY + gsInvDescY, pStr ); + } + + // STUN DAMAGE + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubStunDamage > 0 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 24 ].sX + gsInvDescX, gWeaponStats[ 24 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubStunDamage + ( (Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubStunDamage * gGameExternalOptions.ubExplosivesDamageMultiplier ) / 100 )); + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 3 ].sX + gsInvDescX + gWeaponStats[ 3 ].sValDx), (INT16)(gWeaponStats[ 3 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 3 ].sY + gsInvDescY, pStr ); + } + + // LOUDNESS + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 25 ].sX + gsInvDescX, gWeaponStats[ 25 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubVolume ); + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 4 ].sX + gsInvDescX + gWeaponStats[ 4 ].sValDx), (INT16)(gWeaponStats[ 4 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 4 ].sY + gsInvDescY, pStr ); + + // VOLATILITY + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubVolatility > 0 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 26 ].sX + gsInvDescX, gWeaponStats[ 26 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubVolatility ); + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 5 ].sX + gsInvDescX + gWeaponStats[ 5 ].sValDx), (INT16)(gWeaponStats[ 5 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 5 ].sY + gsInvDescY, pStr ); + } + + // SINGLE-EVENT EXPLOSION data + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDuration == 0 ) + { + // BLAST RADIUS + // equals + SetFontForeground( 6 ); + //mprintf( gWeaponStats[ 24 ].sX + gsInvDescX, gWeaponStats[ 24 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%d", 1 + ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubRadius * 2 ) ); + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontCenterCoordinates( (INT16)(gWeaponStats[ 45 ].sX + gsInvDescX), (INT16)(gWeaponStats[ 45 ].sY + gsInvDescY ), 12 ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 45 ].sY + gsInvDescY, pStr ); + + } + // PROLONGED EXPLOSION data + else if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDuration > 0 ) + { + // DURATION + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 34 ].sX + gsInvDescX, gWeaponStats[ 34 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDuration ); + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 13 ].sX + gsInvDescX + gWeaponStats[ 13 ].sValDx), (INT16)(gWeaponStats[ 13 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 13 ].sY + gsInvDescY, pStr ); + + // Headrock: this integer contains the number of the array item that contains the location + // in which to display each radius value. If the explosive is a light, the values are displayed + // in reverse locations. + + INT16 isLightLocation = 0; + + if ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubType == 4 ) + { + isLightLocation = 2; + } + + // STARTING RADIUS + // equals + SetFontForeground( 6 ); + //mprintf( gWeaponStats[ 33 ].sX + gsInvDescX, gWeaponStats[ 33 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%d", 1 + ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubStartRadius * 2) ); + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontCenterCoordinates( (INT16)(gWeaponStats[ 44+isLightLocation ].sX + gsInvDescX), (INT16)(gWeaponStats[ 44+isLightLocation ].sY + gsInvDescY ), 12 ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 44+isLightLocation ].sY + gsInvDescY, pStr ); + + // FINAL RADIUS + // equals + SetFontForeground( 6 ); + //mprintf( gWeaponStats[ 33 ].sX + gsInvDescX, gWeaponStats[ 33 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%d", 1 + ( Explosive[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubRadius * 2) ); + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontCenterCoordinates( (INT16)(gWeaponStats[ 46-isLightLocation ].sX + gsInvDescX), (INT16)(gWeaponStats[ 46-isLightLocation ].sY + gsInvDescY ), 12 ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 46-isLightLocation ].sY + gsInvDescY, pStr ); + + } +} + +void DrawArmorValues( OBJECTTYPE * gpItemDescObject ) +{ + static CHAR16 pStr[ 100 ]; + INT16 usY; + INT16 sStrX; + UINT16 uiStringLength; + + if( UsingEDBSystem() == 0 ) + return; + + // ARMOR VALUE + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 23 ].sX + gsInvDescX, gWeaponStats[ 23 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + + // Calculate Value including attachments + UINT16 iProtection = 0; + iProtection = Armour[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubProtection; + + for (attachmentList::iterator iter = (*gpItemDescObject)[0]->attachments.begin(); iter != (*gpItemDescObject)[0]->attachments.end(); ++iter) + { + if (Item[ iter->usItem ].usItemClass == IC_ARMOUR) + { + iProtection += Armour[Item[iter->usItem].ubClassIndex].ubProtection; + } + } + + swprintf( pStr, L"%2d", iProtection ); + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 2 ].sX + gsInvDescX + gWeaponStats[ 2 ].sValDx), (INT16)(gWeaponStats[ 2 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + //wcscat( pStr, L"%%" ); + mprintf( sStrX, gWeaponStats[ 2 ].sY + gsInvDescY, pStr ); + + // ARMOR COVERAGE + // equals + SetFontForeground( 6 ); + //mprintf( gWeaponStats[ 23 ].sX + gsInvDescX, gWeaponStats[ 23 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%2d%%", Armour[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubCoverage ); + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 3 ].sX + gsInvDescX + gWeaponStats[ 3 ].sValDx), (INT16)(gWeaponStats[ 3 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gWeaponStats[ 3 ].sY + gsInvDescY, pStr ); + + // ARMOR DEGRADE + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 25 ].sX + gsInvDescX, gWeaponStats[ 25 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", Armour[Item[ gpItemDescObject->usItem ].ubClassIndex ].ubDegradePercent ); + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 4 ].sX + gsInvDescX + gWeaponStats[ 4 ].sValDx), (INT16)(gWeaponStats[ 4 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 4 ].sY + gsInvDescY, pStr ); + + // AP BONUS + if ( GetAPBonus ( gpItemDescObject ) != 0 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 30 ].sX + gsInvDescX, gWeaponStats[ 30 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iAPBonus = 0; + iAPBonus = GetAPBonus( gpItemDescObject ); + + // determine value print color + SetFontForeground( 5 ); + if ( iAPBonus < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iAPBonus > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iAPBonus > 0 ) + { + swprintf( pStr, L"%+2d", iAPBonus ); + } + else + { + swprintf( pStr, L"%2d", iAPBonus ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 9 ].sX + gsInvDescX + gWeaponStats[ 9 ].sValDx), (INT16)(gWeaponStats[ 9 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 9 ].sY + gsInvDescY, pStr ); + } + + // AIM BONUS + if ( GetFlatAimBonus( gpItemDescObject ) != 0 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 31 ].sX + gsInvDescX, gWeaponStats[ 31 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iAimBonus = 0; + iAimBonus = GetFlatAimBonus( gpItemDescObject ); + + // determine value print color + SetFontForeground( 5 ); + if ( iAimBonus < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iAimBonus > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iAimBonus > 0 ) + { + swprintf( pStr, L"%+2d", iAimBonus ); + } + else + { + swprintf( pStr, L"%2d", iAimBonus ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 10 ].sX + gsInvDescX + gWeaponStats[ 10 ].sValDx), (INT16)(gWeaponStats[ 10 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 10 ].sY + gsInvDescY, pStr ); + } + + // WOODLAND CAMO + if ( GetCamoBonus( gpItemDescObject ) > 0 ) + { + // equals + SetFontForeground( 6 ); + //mprintf( gWeaponStats[ 31 ].sX + gsInvDescX, gWeaponStats[ 31 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + if ( GetCamoBonus( gpItemDescObject ) < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( GetCamoBonus( gpItemDescObject ) > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( GetCamoBonus( gpItemDescObject ) > 0 ) + { + swprintf( pStr, L"%+2d%%", GetCamoBonus( gpItemDescObject ) ); + } + else + { + swprintf( pStr, L"%2d%%", GetCamoBonus( gpItemDescObject ) ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 11 ].sX + gsInvDescX + gWeaponStats[ 11 ].sValDx), (INT16)(gWeaponStats[ 11 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gWeaponStats[ 11 ].sY + gsInvDescY, pStr ); + } + + // URBAN CAMO + if ( GetUrbanCamoBonus( gpItemDescObject ) > 0 ) + { + // equals + SetFontForeground( 6 ); + //mprintf( gWeaponStats[ 32 ].sX + gsInvDescX, gWeaponStats[ 32 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + if ( GetUrbanCamoBonus( gpItemDescObject ) < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( GetUrbanCamoBonus( gpItemDescObject ) > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( GetUrbanCamoBonus( gpItemDescObject ) > 0 ) + { + swprintf( pStr, L"%+2d%%", GetUrbanCamoBonus( gpItemDescObject ) ); + } + else + { + swprintf( pStr, L"%2d%%", GetUrbanCamoBonus( gpItemDescObject ) ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 12 ].sX + gsInvDescX + gWeaponStats[ 12 ].sValDx), (INT16)(gWeaponStats[ 12 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gWeaponStats[ 12 ].sY + gsInvDescY, pStr ); + } + + // DESERT CAMO + if ( GetDesertCamoBonus( gpItemDescObject ) > 0 ) + { + // equals + SetFontForeground( 6 ); + //mprintf( gWeaponStats[ 34 ].sX + gsInvDescX, gWeaponStats[ 34 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + if ( GetDesertCamoBonus( gpItemDescObject ) < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( GetDesertCamoBonus( gpItemDescObject ) > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( GetDesertCamoBonus( gpItemDescObject ) > 0 ) + { + swprintf( pStr, L"%+2d%%", GetDesertCamoBonus( gpItemDescObject ) ); + } + else + { + swprintf( pStr, L"%2d%%", GetDesertCamoBonus( gpItemDescObject ) ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 13 ].sX + gsInvDescX + gWeaponStats[ 13 ].sValDx), (INT16)(gWeaponStats[ 13 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gWeaponStats[ 13 ].sY + gsInvDescY, pStr ); + } + + // SNOW CAMO + if ( GetSnowCamoBonus( gpItemDescObject ) > 0 ) + { + // equals + SetFontForeground( 6 ); + //mprintf( gWeaponStats[ 35 ].sX + gsInvDescX, gWeaponStats[ 35 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + if ( GetSnowCamoBonus( gpItemDescObject ) < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( GetSnowCamoBonus( gpItemDescObject ) > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( GetSnowCamoBonus( gpItemDescObject ) > 0 ) + { + swprintf( pStr, L"%+2d%%", GetSnowCamoBonus( gpItemDescObject ) ); + } + else + { + swprintf( pStr, L"%2d%%", GetSnowCamoBonus( gpItemDescObject ) ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 14 ].sX + gsInvDescX + gWeaponStats[ 14 ].sValDx), (INT16)(gWeaponStats[ 14 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gWeaponStats[ 14 ].sY + gsInvDescY, pStr ); + } + + // STEALTH + if ( GetBasicStealthBonus( gpItemDescObject ) != 0 ) + { + // equals + SetFontForeground( 6 ); + //mprintf( gWeaponStats[ 35 ].sX + gsInvDescX, gWeaponStats[ 35 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + if ( GetBasicStealthBonus( gpItemDescObject ) < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( GetBasicStealthBonus( gpItemDescObject ) > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( GetBasicStealthBonus( gpItemDescObject ) > 0 ) + { + swprintf( pStr, L"%+2d%%", GetBasicStealthBonus( gpItemDescObject ) ); + } + else + { + swprintf( pStr, L"%2d%%", GetBasicStealthBonus( gpItemDescObject ) ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 15 ].sX + gsInvDescX + gWeaponStats[ 15 ].sValDx), (INT16)(gWeaponStats[ 15 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gWeaponStats[ 15 ].sY + gsInvDescY, pStr ); + } + + // VISION RANGE BONUS ICON + if ( Item[ gpItemDescObject->usItem ].visionrangebonus != 0 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 37 ].sX + gsInvDescX, gWeaponStats[ 37 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iVisionRangeBonus = 0; + iVisionRangeBonus = Item[ gpItemDescObject->usItem ].visionrangebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iVisionRangeBonus < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iVisionRangeBonus > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iVisionRangeBonus > 0 ) + { + swprintf( pStr, L"%+2d", iVisionRangeBonus / 10 ); + } + else + { + swprintf( pStr, L"%2d", iVisionRangeBonus / 10 ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 16 ].sX + gsInvDescX + gWeaponStats[ 16 ].sValDx), (INT16)(gWeaponStats[ 16 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 16 ].sY + gsInvDescY, pStr ); + } + + // DAY VISION RANGE BONUS ICON + if ( Item[ gpItemDescObject->usItem ].dayvisionrangebonus != 0 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 38 ].sX + gsInvDescX, gWeaponStats[ 38 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iVisionRangeBonus = 0; + iVisionRangeBonus = Item[ gpItemDescObject->usItem ].dayvisionrangebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iVisionRangeBonus < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iVisionRangeBonus > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iVisionRangeBonus > 0 ) + { + swprintf( pStr, L"%+2d", iVisionRangeBonus / 10 ); + } + else + { + swprintf( pStr, L"%2d", iVisionRangeBonus / 10 ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 17 ].sX + gsInvDescX + gWeaponStats[ 17 ].sValDx), (INT16)(gWeaponStats[ 17 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 17 ].sY + gsInvDescY, pStr ); + } + + // NIGHT VISION RANGE BONUS ICON + if ( Item[ gpItemDescObject->usItem ].nightvisionrangebonus != 0 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 39 ].sX + gsInvDescX, gWeaponStats[ 39 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iVisionRangeBonus = 0; + iVisionRangeBonus = Item[ gpItemDescObject->usItem ].nightvisionrangebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iVisionRangeBonus < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iVisionRangeBonus > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iVisionRangeBonus > 0 ) + { + swprintf( pStr, L"%+2d", iVisionRangeBonus / 10 ); + } + else + { + swprintf( pStr, L"%2d", iVisionRangeBonus / 10 ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 18 ].sX + gsInvDescX + gWeaponStats[ 18 ].sValDx), (INT16)(gWeaponStats[ 18 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 18 ].sY + gsInvDescY, pStr ); + } + + // BRIGHT LIGHT VISION RANGE BONUS ICON + if ( Item[ gpItemDescObject->usItem ].brightlightvisionrangebonus != 0 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 40 ].sX + gsInvDescX, gWeaponStats[ 40 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iVisionRangeBonus = 0; + iVisionRangeBonus = Item[ gpItemDescObject->usItem ].brightlightvisionrangebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iVisionRangeBonus < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iVisionRangeBonus > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iVisionRangeBonus > 0 ) + { + swprintf( pStr, L"%+2d", iVisionRangeBonus / 10 ); + } + else + { + swprintf( pStr, L"%2d", iVisionRangeBonus / 10 ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 19 ].sX + gsInvDescX + gWeaponStats[ 19 ].sValDx), (INT16)(gWeaponStats[ 19 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 19 ].sY + gsInvDescY, pStr ); + } + + // CAVE VISION RANGE BONUS ICON + if ( Item[ gpItemDescObject->usItem ].cavevisionrangebonus != 0 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 41 ].sX + gsInvDescX, gWeaponStats[ 41 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iVisionRangeBonus = 0; + iVisionRangeBonus = Item[ gpItemDescObject->usItem ].cavevisionrangebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iVisionRangeBonus < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iVisionRangeBonus > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iVisionRangeBonus > 0 ) + { + swprintf( pStr, L"%+2d", iVisionRangeBonus / 10 ); + } + else + { + swprintf( pStr, L"%2d", iVisionRangeBonus / 10 ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 20 ].sX + gsInvDescX + gWeaponStats[ 20 ].sValDx), (INT16)(gWeaponStats[ 20 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 20 ].sY + gsInvDescY, pStr ); + } + + // PERCENT TUNNEL VISION ICON + if ( Item[ gpItemDescObject->usItem ].percenttunnelvision > 0 ) + { + // equals + SetFontForeground( 6 ); + //mprintf( gWeaponStats[ 34 ].sX + gsInvDescX, gWeaponStats[ 34 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // print value + SetFontForeground( 5 ); + swprintf( pStr, L"%2d%%", Item[ gpItemDescObject->usItem ].percenttunnelvision ); + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 21 ].sX + gsInvDescX + gWeaponStats[ 21 ].sValDx), (INT16)(gWeaponStats[ 21 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gWeaponStats[ 21 ].sY + gsInvDescY, pStr ); + } + + // HEARING RANGE BONUS ICON + if ( GetItemHearingRangeBonus( gpItemDescObject ) != 0 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 42 ].sX + gsInvDescX, gWeaponStats[ 42 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iHearingRangeBonus = 0; + iHearingRangeBonus = GetItemHearingRangeBonus( gpItemDescObject ); + + // determine value print color + SetFontForeground( 5 ); + if ( iHearingRangeBonus < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iHearingRangeBonus > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iHearingRangeBonus > 0 ) + { + swprintf( pStr, L"%+2d", iHearingRangeBonus / 10 ); + } + else + { + swprintf( pStr, L"%2d", iHearingRangeBonus / 10 ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 22 ].sX + gsInvDescX + gWeaponStats[ 22 ].sValDx), (INT16)(gWeaponStats[ 22 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 22 ].sY + gsInvDescY, pStr ); + } +} + +void DrawMiscValues( OBJECTTYPE * gpItemDescObject ) +{ + static CHAR16 pStr[ 100 ]; + INT16 usY; + INT16 sStrX; + UINT16 uiStringLength; + UINT8 cnt; + + if( UsingEDBSystem() == 0 ) + return; + + if(guiCurrentScreen ==MAP_SCREEN) + cnt = 14; + else + cnt = 12; + + // ITEM SIZE MODIFIER + if ( Item[ gpItemDescObject->usItem ].itemsizebonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iItemSizeModifier = 0; + iItemSizeModifier = Item[ gpItemDescObject->usItem ].itemsizebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iItemSizeModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iItemSizeModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iItemSizeModifier > 0 ) + { + swprintf( pStr, L"%+2d", iItemSizeModifier ); + } + else + { + swprintf( pStr, L"%2d", iItemSizeModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // RELIABILITY MODIFIER + if ( Item[ gpItemDescObject->usItem ].bReliability != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iReliabilityModifier = 0; + iReliabilityModifier = Item[ gpItemDescObject->usItem ].bReliability; + + // determine value print color + SetFontForeground( 5 ); + if ( iReliabilityModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iReliabilityModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iReliabilityModifier > 0 ) + { + swprintf( pStr, L"%+2d", iReliabilityModifier ); + } + else + { + swprintf( pStr, L"%2d", iReliabilityModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // NOISE MODIFIER + if ( Item[ gpItemDescObject->usItem ].percentnoisereduction != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iLoudnessModifier = 0; + iLoudnessModifier = Item[ gpItemDescObject->usItem ].percentnoisereduction * -1 ; + + // determine value print color + SetFontForeground( 5 ); + if ( iLoudnessModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iLoudnessModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iLoudnessModifier > 0 ) + { + swprintf( pStr, L"%+2d%%", iLoudnessModifier ); + } + else + { + swprintf( pStr, L"%2d%%", iLoudnessModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // HIDE MUZZLE FLASH + // NO DATA SHOWN, icon either appears or does not appear. + + // BIPOD + if ( Item[ gpItemDescObject->usItem ].bipod != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iBipodModifier = 0; + iBipodModifier = Item[ gpItemDescObject->usItem ].bipod; + + // determine value print color + SetFontForeground( 5 ); + if ( iBipodModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iBipodModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iBipodModifier > 0 ) + { + swprintf( pStr, L"%+2d", iBipodModifier ); + } + else + { + swprintf( pStr, L"%2d", iBipodModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // RANGE + if ( Item[ gpItemDescObject->usItem ].rangebonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iRangeModifier = 0; + iRangeModifier = Item[ gpItemDescObject->usItem ].rangebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iRangeModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iRangeModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iRangeModifier > 0 ) + { + swprintf( pStr, L"%+2d", iRangeModifier / 10 ); + } + else + { + swprintf( pStr, L"%2d", iRangeModifier / 10 ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // TO-HIT MODIFIER + if ( Item[ gpItemDescObject->usItem ].tohitbonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iToHitModifier = 0; + iToHitModifier = Item[ gpItemDescObject->usItem ].tohitbonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iToHitModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iToHitModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iToHitModifier > 0 ) + { + swprintf( pStr, L"%+2d", iToHitModifier ); + } + else + { + swprintf( pStr, L"%2d", iToHitModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // LASER RANGE + if ( Item[ gpItemDescObject->usItem ].bestlaserrange > 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iLaserRange = 0; + iLaserRange = Item[ gpItemDescObject->usItem ].bestlaserrange; + + // determine value print color + SetFontForeground( 5 ); + + // print value + swprintf( pStr, L"%2d", iLaserRange / 10 ); + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // AIMING MODIFIER + if ( Item[ gpItemDescObject->usItem ].aimbonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iAimModifier = 0; + iAimModifier = Item[ gpItemDescObject->usItem ].aimbonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iAimModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iAimModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iAimModifier > 0 ) + { + swprintf( pStr, L"%+2d", iAimModifier ); + } + else + { + swprintf( pStr, L"%2d", iAimModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // MINIMUM RANGE FOR AIMING BONUS + if ( Item[ gpItemDescObject->usItem ].minrangeforaimbonus > 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iMinRangeAimingBonus = 0; + iMinRangeAimingBonus = Item[ gpItemDescObject->usItem ].minrangeforaimbonus; + + // determine value print color + SetFontForeground( 5 ); + + // print value + swprintf( pStr, L"%2d", iMinRangeAimingBonus / 10 ); + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // MAGAZINE SIZE MODIFIER + if ( Item[ gpItemDescObject->usItem ].magsizebonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iMagSizeModifier = 0; + iMagSizeModifier = Item[ gpItemDescObject->usItem ].magsizebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iMagSizeModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iMagSizeModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iMagSizeModifier > 0 ) + { + swprintf( pStr, L"%+2d", iMagSizeModifier ); + } + else + { + swprintf( pStr, L"%2d", iMagSizeModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // BURST SIZE MODIFIER + if ( Item[ gpItemDescObject->usItem ].burstsizebonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iBurstSizeModifier = 0; + iBurstSizeModifier = Item[ gpItemDescObject->usItem ].burstsizebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iBurstSizeModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iBurstSizeModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iBurstSizeModifier > 0 ) + { + swprintf( pStr, L"%+2d", iBurstSizeModifier ); + } + else + { + swprintf( pStr, L"%2d", iBurstSizeModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // BURST TO-HIT MODIFIER + if ( Item[ gpItemDescObject->usItem ].bursttohitbonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iBurstToHitModifier = 0; + iBurstToHitModifier = Item[ gpItemDescObject->usItem ].bursttohitbonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iBurstToHitModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iBurstToHitModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iBurstToHitModifier > 0 ) + { + swprintf( pStr, L"%+2d", iBurstToHitModifier ); + } + else + { + swprintf( pStr, L"%2d", iBurstToHitModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // AUTO TO-HIT MODIFIER + if ( Item[ gpItemDescObject->usItem ].autofiretohitbonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iAutoToHitModifier = 0; + iAutoToHitModifier = Item[ gpItemDescObject->usItem ].autofiretohitbonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iAutoToHitModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iAutoToHitModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iAutoToHitModifier > 0 ) + { + swprintf( pStr, L"%+2d", iAutoToHitModifier ); + } + else + { + swprintf( pStr, L"%2d", iAutoToHitModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // AP MODIFIER + if ( Item[ gpItemDescObject->usItem ].APBonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iAPModifier = 0; + iAPModifier = Item[ gpItemDescObject->usItem ].APBonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iAPModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iAPModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iAPModifier > 0 ) + { + swprintf( pStr, L"%+2d", iAPModifier ); + } + else + { + swprintf( pStr, L"%2d", iAPModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // BURST AP MODIFIER + if ( Item[ gpItemDescObject->usItem ].percentburstfireapreduction != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iBurstAPModifier = 0; + iBurstAPModifier = Item[ gpItemDescObject->usItem ].percentburstfireapreduction * -1 ; + + // determine value print color + SetFontForeground( 5 ); + if ( iBurstAPModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iBurstAPModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iBurstAPModifier > 0 ) + { + swprintf( pStr, L"%+2d%%", iBurstAPModifier ); + } + else + { + swprintf( pStr, L"%2d%%", iBurstAPModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // AUTOFIRE AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentautofireapreduction != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iAutoAPModifier = 0; + iAutoAPModifier = Item[ gpItemDescObject->usItem ].percentautofireapreduction * -1 ; + + // determine value print color + SetFontForeground( 5 ); + if ( iAutoAPModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iAutoAPModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iAutoAPModifier > 0 ) + { + swprintf( pStr, L"%+2d%%", iAutoAPModifier ); + } + else + { + swprintf( pStr, L"%2d%%", iAutoAPModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // READY AP MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].percentreadytimeapreduction != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iReadyAPModifier = 0; + iReadyAPModifier = Item[ gpItemDescObject->usItem ].percentreadytimeapreduction * -1 ; + + // determine value print color + SetFontForeground( 5 ); + if ( iReadyAPModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iReadyAPModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iReadyAPModifier > 0 ) + { + swprintf( pStr, L"%+2d%%", iReadyAPModifier ); + } + else + { + swprintf( pStr, L"%2d%%", iReadyAPModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // RELOAD AP MODIFIER + if ( Item[ gpItemDescObject->usItem ].percentreloadtimeapreduction != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iReloadAPModifier = 0; + iReloadAPModifier = Item[ gpItemDescObject->usItem ].percentreloadtimeapreduction * -1 ; + + // determine value print color + SetFontForeground( 5 ); + if ( iReloadAPModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iReloadAPModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iReloadAPModifier > 0 ) + { + swprintf( pStr, L"%+2d%%", iReloadAPModifier ); + } + else + { + swprintf( pStr, L"%2d%%", iReloadAPModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // SINGLE AP MODIFIER + if ( Item[ gpItemDescObject->usItem ].percentapreduction != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iSingleAPModifier = 0; + iSingleAPModifier = Item[ gpItemDescObject->usItem ].percentapreduction * -1 ; + + // determine value print color + SetFontForeground( 5 ); + if ( iSingleAPModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iSingleAPModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iSingleAPModifier > 0 ) + { + swprintf( pStr, L"%+2d%%", iSingleAPModifier ); + } + else + { + swprintf( pStr, L"%2d%%", iSingleAPModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // DAMAGE MODIFIER + if ( Item[ gpItemDescObject->usItem ].damagebonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iDamageModifier = 0; + iDamageModifier = Item[ gpItemDescObject->usItem ].damagebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iDamageModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iDamageModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iDamageModifier > 0 ) + { + swprintf( pStr, L"%+2d", iDamageModifier ); + } + else + { + swprintf( pStr, L"%2d", iDamageModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // MELEE DAMAGE MODIFIER ICON + if ( Item[ gpItemDescObject->usItem ].meleedamagebonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iMeleeDamageModifier = 0; + iMeleeDamageModifier = Item[ gpItemDescObject->usItem ].meleedamagebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iMeleeDamageModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iMeleeDamageModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iMeleeDamageModifier > 0 ) + { + swprintf( pStr, L"%+2d", iMeleeDamageModifier ); + } + else + { + swprintf( pStr, L"%2d", iMeleeDamageModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // WOOD CAMO + if ( Item[ gpItemDescObject->usItem ].camobonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iWoodCamoModifier = 0; + iWoodCamoModifier = Item[ gpItemDescObject->usItem ].camobonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iWoodCamoModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iWoodCamoModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iWoodCamoModifier > 0 ) + { + swprintf( pStr, L"%+2d%%", iWoodCamoModifier ); + } + else + { + swprintf( pStr, L"%2d%%", iWoodCamoModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // URBAN CAMO + if ( Item[ gpItemDescObject->usItem ].urbanCamobonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iUrbanCamoModifier = 0; + iUrbanCamoModifier = Item[ gpItemDescObject->usItem ].urbanCamobonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iUrbanCamoModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iUrbanCamoModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iUrbanCamoModifier > 0 ) + { + swprintf( pStr, L"%+2d%%", iUrbanCamoModifier ); + } + else + { + swprintf( pStr, L"%2d%%", iUrbanCamoModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // DESERT CAMO + if ( Item[ gpItemDescObject->usItem ].desertCamobonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iDesertCamoModifier = 0; + iDesertCamoModifier = Item[ gpItemDescObject->usItem ].desertCamobonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iDesertCamoModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iDesertCamoModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iDesertCamoModifier > 0 ) + { + swprintf( pStr, L"%+2d%%", iDesertCamoModifier ); + } + else + { + swprintf( pStr, L"%2d%%", iDesertCamoModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // SNOW CAMO + if ( Item[ gpItemDescObject->usItem ].snowCamobonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iSnowCamoModifier = 0; + iSnowCamoModifier = Item[ gpItemDescObject->usItem ].snowCamobonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iSnowCamoModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iSnowCamoModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iSnowCamoModifier > 0 ) + { + swprintf( pStr, L"%+2d%%", iSnowCamoModifier ); + } + else + { + swprintf( pStr, L"%2d%%", iSnowCamoModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // STEALTH MODIFIER + if ( Item[ gpItemDescObject->usItem ].stealthbonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iStealthModifier = 0; + iStealthModifier = Item[ gpItemDescObject->usItem ].stealthbonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iStealthModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iStealthModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iStealthModifier > 0 ) + { + swprintf( pStr, L"%+2d%%", iStealthModifier ); + } + else + { + swprintf( pStr, L"%2d%%", iStealthModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // HEARING RANGE MODIFIER + if ( Item[ gpItemDescObject->usItem ].hearingrangebonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iHearingRangeModifier = 0; + iHearingRangeModifier = Item[ gpItemDescObject->usItem ].hearingrangebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iHearingRangeModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iHearingRangeModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iHearingRangeModifier > 0 ) + { + swprintf( pStr, L"%+2d", iHearingRangeModifier ); + } + else + { + swprintf( pStr, L"%2d", iHearingRangeModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // VISION RANGE MODIFIER + if ( Item[ gpItemDescObject->usItem ].visionrangebonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iVisionRangeModifier = 0; + iVisionRangeModifier = Item[ gpItemDescObject->usItem ].visionrangebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iVisionRangeModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iVisionRangeModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iVisionRangeModifier > 0 ) + { + swprintf( pStr, L"%+2d", iVisionRangeModifier / 10 ); + } + else + { + swprintf( pStr, L"%2d", iVisionRangeModifier / 10 ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // DAY VISION RANGE MODIFIER + if ( Item[ gpItemDescObject->usItem ].dayvisionrangebonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iDayVisionRangeModifier = 0; + iDayVisionRangeModifier = Item[ gpItemDescObject->usItem ].dayvisionrangebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iDayVisionRangeModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iDayVisionRangeModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iDayVisionRangeModifier > 0 ) + { + swprintf( pStr, L"%+2d", iDayVisionRangeModifier / 10 ); + } + else + { + swprintf( pStr, L"%2d", iDayVisionRangeModifier / 10 ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // NIGHT VISION RANGE MODIFIER + if ( Item[ gpItemDescObject->usItem ].nightvisionrangebonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iNightVisionRangeModifier = 0; + iNightVisionRangeModifier = Item[ gpItemDescObject->usItem ].nightvisionrangebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iNightVisionRangeModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iNightVisionRangeModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iNightVisionRangeModifier > 0 ) + { + swprintf( pStr, L"%+2d", iNightVisionRangeModifier / 10 ); + } + else + { + swprintf( pStr, L"%2d", iNightVisionRangeModifier / 10 ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // BRIGHT LIGHT VISION RANGE MODIFIER + if ( Item[ gpItemDescObject->usItem ].brightlightvisionrangebonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iBrightLightVisionRangeModifier = 0; + iBrightLightVisionRangeModifier = Item[ gpItemDescObject->usItem ].brightlightvisionrangebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iBrightLightVisionRangeModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iBrightLightVisionRangeModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iBrightLightVisionRangeModifier > 0 ) + { + swprintf( pStr, L"%+2d", iBrightLightVisionRangeModifier / 10 ); + } + else + { + swprintf( pStr, L"%2d", iBrightLightVisionRangeModifier / 10 ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // CAVE VISION RANGE MODIFIER + if ( Item[ gpItemDescObject->usItem ].cavevisionrangebonus != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iCaveVisionRangeModifier = 0; + iCaveVisionRangeModifier = Item[ gpItemDescObject->usItem ].cavevisionrangebonus; + + // determine value print color + SetFontForeground( 5 ); + if ( iCaveVisionRangeModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iCaveVisionRangeModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iCaveVisionRangeModifier > 0 ) + { + swprintf( pStr, L"%+2d", iCaveVisionRangeModifier / 10 ); + } + else + { + swprintf( pStr, L"%2d", iCaveVisionRangeModifier / 10 ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } + + // PERCENT TUNNEL VISION MODIFIER + if ( Item[ gpItemDescObject->usItem ].percenttunnelvision != 0 && cnt<=27 ) + { + // equals + SetFontForeground( 6 ); + mprintf( gMiscItemStatsEDB[ cnt ].sX + gsInvDescX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + + // determine value + INT16 iPercentTunnelVisionModifier = 0; + iPercentTunnelVisionModifier = Item[ gpItemDescObject->usItem ].percenttunnelvision; + + // determine value print color + SetFontForeground( 5 ); + if ( iPercentTunnelVisionModifier > 0 ) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + } + else if ( iPercentTunnelVisionModifier < 0 ) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + } + + // print value + if ( iPercentTunnelVisionModifier > 0 ) + { + swprintf( pStr, L"%+2d%%", iPercentTunnelVisionModifier ); + } + else + { + swprintf( pStr, L"%2d%%", iPercentTunnelVisionModifier ); + } + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ cnt ].sX + gsInvDescX + gMiscItemStatsEDB[ cnt ].sValDx), (INT16)(gMiscItemStatsEDB[ cnt ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + wcscat( pStr, L"%%" ); + mprintf( sStrX, gMiscItemStatsEDB[ cnt ].sY + gsInvDescY, pStr ); + cnt++; + } +} + diff --git a/Tactical/Interface Enhanced.h b/Tactical/Interface Enhanced.h new file mode 100644 index 00000000..ebd8aed5 --- /dev/null +++ b/Tactical/Interface Enhanced.h @@ -0,0 +1,27 @@ +#ifndef __INTERFACE_ENHANCED_H +#define __INTERFACE_ENHANCED_H + +extern INV_DESC_STATS gMiscItemStatsEDB[]; + +UINT8 UsingEDBSystem(); +void InitItemDescriptionBoxOffsets(); +BOOLEAN InternalInitEnhancedDescBox(); +void InternalInitEDBTooltipRegion( OBJECTTYPE * gpItemDescObject, UINT32 guiCurrentItemDescriptionScreen ); +void DeleteEnhancedDescBox( UINT32 guiCurrentItemDescriptionScreen ); +void InitDescStatCoords(); +void InitLBECoords(); +void InitEDBCoords(); + +void DrawWeaponStats( OBJECTTYPE * gpItemDescObject ); +void DrawAmmoStats( OBJECTTYPE * gpItemDescObject ); +void DrawExplosiveStats( OBJECTTYPE * gpItemDescObject ); +void DrawArmorStats( OBJECTTYPE * gpItemDescObject ); +void DrawMiscStats( OBJECTTYPE * gpItemDescObject ); + +void DrawWeaponValues( OBJECTTYPE * gpItemDescObject ); +void DrawAmmoValues( OBJECTTYPE * gpItemDescObject, int shotsLeft ); +void DrawExplosiveValues( OBJECTTYPE * gpItemDescObject ); +void DrawArmorValues( OBJECTTYPE * gpItemDescObject ); +void DrawMiscValues( OBJECTTYPE * gpItemDescObject ); + +#endif diff --git a/Tactical/Interface Items.cpp b/Tactical/Interface Items.cpp index 1f64fb36..63784cd3 100644 --- a/Tactical/Interface Items.cpp +++ b/Tactical/Interface Items.cpp @@ -73,14 +73,15 @@ #include "opplist.h" #include "los.h" #include "Map Screen Interface Map.h" + #include "Interface Enhanced.h" #endif //forward declarations of common classes to eliminate includes class OBJECTTYPE; class SOLDIERTYPE; - -#define ITEMDESC_FONT BLOCKFONT2 +//CHRISL: Moved to Interface Items.h for EDB +//#define ITEMDESC_FONT BLOCKFONT2 #define ITEMDESC_FONTSHADOW1 MILITARY_SHADOW #define ITEMDESC_FONTSHADOW2 32 #define ITEMDESC_FONTSHADOW3 34 @@ -95,7 +96,8 @@ class SOLDIERTYPE; #define ITEMDESC_AMMO_FORE 209 -#define ITEMDESC_FONTHIGHLIGHT FONT_MCOLOR_WHITE +//CHRISL: Moved to Interface Items.h for EDB +//#define ITEMDESC_FONTHIGHLIGHT FONT_MCOLOR_WHITE #define STATUS_BAR_SHADOW FROMRGB( 140, 136, 119 ) #define STATUS_BAR FROMRGB( 201, 172, 133 ) @@ -104,15 +106,15 @@ class SOLDIERTYPE; #define MIN_LOB_RANGE 4 -#define INV_BAR_DX 5 -#define INV_BAR_DY 21 +//CHRISL: Moved to Interface Items.h for EDB +//#define INV_BAR_DX 5 +//#define INV_BAR_DY 21 +//#define ITEM_STATS_WIDTH 26 +//#define ITEM_STATS_HEIGHT 8 #define RENDER_ITEM_NOSTATUS 20 #define RENDER_ITEM_ATTACHMENT1 200 -#define ITEM_STATS_WIDTH 26 -#define ITEM_STATS_HEIGHT 8 - //LBE node stuff // Changed some coord defines to INT16s so we can adjust their value based on game options INT16 ITEMDESC_START_X; @@ -132,8 +134,11 @@ extern int SM_ITEMDESC_START_Y; //#define MAP_ITEMDESC_WIDTH 272 #define ITEMDESC_NAME_X (16 + gsInvDescX) #define ITEMDESC_NAME_Y (67 + gsInvDescY) -#define ITEMDESC_CALIBER_X (162 + gsInvDescX) -#define ITEMDESC_CALIBER_Y (67 + gsInvDescY) + +// HEADROCK: Changed fron #define to INT16 for later definition (EDB project) +INT16 ITEMDESC_CALIBER_X; +INT16 ITEMDESC_CALIBER_Y; + #define ITEMDESC_CALIBER_WIDTH 142 #define MAP_ITEMDESC_CALIBER_X (105 + gsInvDescX) #define MAP_ITEMDESC_CALIBER_Y (66 + gsInvDescY) @@ -144,29 +149,37 @@ extern int SM_ITEMDESC_START_Y; #define CAMO_REGION_HEIGHT 75 #define CAMO_REGION_WIDTH 75 -#define BULLET_SING_X (222 + gsInvDescX) -#define BULLET_SING_Y (49 + gsInvDescY) -#define BULLET_BURST_X (263 + gsInvDescX) -#define BULLET_BURST_Y (49 + gsInvDescY) +// HEADROCK: Changed to INT16s for dynamic ODB-EDB switch. These are icon locations for the Description Box. +// With EDB, many more icons will appear, for new object data fields. +INT16 BULLET_SING_X; +INT16 BULLET_SING_Y; +INT16 BULLET_BURST_X; +INT16 BULLET_BURST_Y; + #define BULLET_WIDTH 3 #define BULLET_GAP 5 -#define MAP_BULLET_SING_X (77 + gsInvDescX) -#define MAP_BULLET_SING_Y (135 + gsInvDescY) -#define MAP_BULLET_BURST_X (117 + gsInvDescX) -#define MAP_BULLET_BURST_Y (135 + gsInvDescY) +// HEADROCK: Changed to INT16s for dynamic ODB-EDB switch. These are icon locations for the Description Box. +// With EDB, many more icons will appear, for new object data fields. +INT16 MAP_BULLET_SING_X; +INT16 MAP_BULLET_SING_Y; +INT16 MAP_BULLET_BURST_X; +INT16 MAP_BULLET_BURST_Y; -#define MAP_ITEMDESC_NAME_X (7 + gsInvDescX) -#define MAP_ITEMDESC_NAME_Y (65 + gsInvDescY) +//CHRISL: Moved to Interface Items.h for EDB +//#define MAP_ITEMDESC_NAME_X (7 + gsInvDescX) +//#define MAP_ITEMDESC_NAME_Y (65 + gsInvDescY) #define MAP_ITEMDESC_ITEM_X (25 + gsInvDescX) #define MAP_ITEMDESC_ITEM_Y (6 + gsInvDescY) -#define ITEMDESC_DESC_START_X (11 + gsInvDescX) -#define ITEMDESC_DESC_START_Y (80 + gsInvDescY) -#define ITEMDESC_PROS_START_X ( 11 + gsInvDescX ) -#define ITEMDESC_PROS_START_Y (110 + gsInvDescY) -#define ITEMDESC_CONS_START_X ( 11 + gsInvDescX ) -#define ITEMDESC_CONS_START_Y (120 + gsInvDescY) +// HEADROCK: Changed to INT16s for dynamic ODB-EDB switch +INT16 ITEMDESC_DESC_START_X; +INT16 ITEMDESC_DESC_START_Y; +INT16 ITEMDESC_PROS_START_X; +INT16 ITEMDESC_PROS_START_Y; +INT16 ITEMDESC_CONS_START_X; +INT16 ITEMDESC_CONS_START_Y; + #define ITEMDESC_ITEM_STATUS_X ( 6 + gsInvDescX ) #define ITEMDESC_ITEM_STATUS_Y ( 60 + gsInvDescY ) #define DOTDOTDOT L"..." @@ -174,19 +187,24 @@ extern int SM_ITEMDESC_START_Y; #define ITEM_PROS_AND_CONS( usItem ) ( ( Item[ usItem ].usItemClass & IC_GUN && !Item[ usItem ].rocketlauncher ) ) -#define MAP_ITEMDESC_DESC_START_X ( 23 + gsInvDescX ) -#define MAP_ITEMDESC_DESC_START_Y (170 + gsInvDescY) -#define MAP_ITEMDESC_PROS_START_X ( 23 + gsInvDescX ) -#define MAP_ITEMDESC_PROS_START_Y (230 + gsInvDescY) -#define MAP_ITEMDESC_CONS_START_X ( 23 + gsInvDescX ) -#define MAP_ITEMDESC_CONS_START_Y (240 + gsInvDescY) +// HEADROCK: Changed to INT16s for dynamic ODB-EDB switch +INT16 MAP_ITEMDESC_DESC_START_X; +INT16 MAP_ITEMDESC_DESC_START_Y; +INT16 MAP_ITEMDESC_PROS_START_X; +INT16 MAP_ITEMDESC_PROS_START_Y; +INT16 MAP_ITEMDESC_CONS_START_X; +INT16 MAP_ITEMDESC_CONS_START_Y; + #define MAP_ITEMDESC_ITEM_STATUS_X ( 18 + gsInvDescX ) #define MAP_ITEMDESC_ITEM_STATUS_Y ( 53 + gsInvDescY ) #define ITEMDESC_ITEM_STATUS_WIDTH 2 #define ITEMDESC_ITEM_STATUS_HEIGHT 50 #define ITEMDESC_ITEM_STATUS_HEIGHT_MAP 40 -#define ITEMDESC_DESC_WIDTH 301 + +// HEADROCK: Changed to INT16s for dynamic ODB-EDB switch +INT16 ITEMDESC_DESC_WIDTH; + #define MAP_ITEMDESC_DESC_WIDTH 220 #define ITEMDESC_ITEM_WIDTH 117 #define ITEMDESC_ITEM_HEIGHT 54 @@ -203,19 +221,20 @@ extern int SM_ITEMDESC_START_Y; #define WORD_WRAP_INV_WIDTH 58 #define ITEM_BAR_WIDTH 2 -#define ITEM_BAR_HEIGHT 20 +#define ITEM_BAR_HEIGHT 21 #define ITEM_FONT TINYFONT1 -#define EXCEPTIONAL_DAMAGE 40 -#define EXCEPTIONAL_WEIGHT 20 -#define EXCEPTIONAL_RANGE 400 -#define EXCEPTIONAL_MAGAZINE 50 -#define EXCEPTIONAL_AP_COST 5 -#define EXCEPTIONAL_BURST_SIZE 5 -#define EXCEPTIONAL_RELIABILITY 2 -#define EXCEPTIONAL_REPAIR_EASE 2 -#define EXCEPTIONAL_ACCURACY 4 +//CHRISL: Moved to Interface Items.h for EDB +//#define EXCEPTIONAL_DAMAGE 40 +//#define EXCEPTIONAL_WEIGHT 20 +//#define EXCEPTIONAL_RANGE 400 +//#define EXCEPTIONAL_MAGAZINE 50 +//#define EXCEPTIONAL_AP_COST 5 +//#define EXCEPTIONAL_BURST_SIZE 5 +//#define EXCEPTIONAL_RELIABILITY 2 +//#define EXCEPTIONAL_REPAIR_EASE 2 +//#define EXCEPTIONAL_ACCURACY 4 #define BAD_DAMAGE 23 #define BAD_WEIGHT 45 @@ -293,7 +312,8 @@ CHAR16 gzItemCons[ SIZE_ITEM_CONS ]; CHAR16 gzFullItemPros[ SIZE_ITEM_PROS ]; CHAR16 gzFullItemCons[ SIZE_ITEM_PROS ]; CHAR16 gzFullItemTemp[ SIZE_ITEM_PROS ]; // necessary, unfortunately -void ItemDescCallback( MOUSE_REGION * pRegion, INT32 iReason ); +//CHRISL: moved to Interface Items.h for EDB +//void ItemDescCallback( MOUSE_REGION * pRegion, INT32 iReason ); INT16 gsInvDescX; INT16 gsInvDescY; UINT8 gubItemDescStatusIndex; @@ -314,12 +334,12 @@ attachmentList gOriginalAttachments; SOLDIERTYPE * gpAttachSoldier; extern BOOLEAN gfSMDisableForItems; - -typedef struct +//CHRISL: moved to Interface Items.h for EDB +/*typedef struct { UINT16 x; UINT16 y; -} MoneyLoc; +} MoneyLoc;*/ /* * Yes i know thats a little bit compicated but remeber that we have now only tactical screen @@ -430,14 +450,14 @@ UINT8 ubRGBItemCyclePlacedItemColors[] = }; - -typedef struct +//CHRISL: Moved to interface items.h +/*typedef struct { INT16 sX; INT16 sY; INT16 sValDx; -} INV_DESC_STATS; +} INV_DESC_STATS;*/ typedef struct { @@ -461,54 +481,15 @@ typedef struct STR16 sString2[NUM_INV_HELPTEXT_ENTRIES]; } INV_HELPTEXT; +//CHRISL: Moved declaration to InitDescStatCoords for EDB +INV_DESC_STATS gWeaponStats[47]; -INV_DESC_STATS gWeaponStats[] = -{ - 202, 25, 83, - 202, 15, 83, - 202, 15, 83, - 265, 40, 20, - 202, 40, 32, - 202, 50, 32, - 265, 50, 20, - 234, 50, 0, - 290, 50, 0, -}; - - +//CHRISL: Moved declaration to InitDescStatCoords for EDB // displayed AFTER the mass/weight/"Kg" line -INV_DESC_STATS gMoneyStats[] = -{ - 202, 14, 78, - 212, 25, 78, - 202, 40, 78, - 212, 51, 78, -}; - -// displayed AFTER the mass/weight/"Kg" line -INV_DESC_STATS gMapMoneyStats[] = -{ - 51, 97, 45, - 61, 107, 75, - 51, 125, 45, - 61, 135, 70, -}; - - -INV_DESC_STATS gMapWeaponStats[] = -{ - 72 - 20, 20+80+8, 80, - 72 - 20, 20+80-2, 80, - 72 - 20, 20+80-2, 80, - 72+65 - 20, 40+80+4, 21, - 72 - 20, 40+80+4, 30, - 72 - 20, 53+80+2, 30, - 72+65 - 20, 53+80+2, 25, - 86, 53+80+2, 0, - 145, 53+80+2, 0, - -}; +INV_DESC_STATS gMoneyStats[6]; +//CHRISL: Created for LBENODE Rendering with EDB +INV_DESC_STATS gLBEStats[48]; INV_ATTACHXY gItemDescAttachmentsXY[] = { @@ -520,24 +501,15 @@ INV_ATTACHXY gItemDescAttachmentsXY[] = INV_ATTACHXY gMapItemDescAttachmentsXY[] = { - 171, 10, SM_INV_SLOT_HEIGHT, 26, INV_BAR_DX + 2, INV_BAR_DY, - 209, 10, SM_INV_SLOT_HEIGHT, 26, INV_BAR_DX + 2, INV_BAR_DY, - 171, 36, SM_INV_SLOT_HEIGHT, 26, INV_BAR_DX + 2, INV_BAR_DY, - 209, 36, SM_INV_SLOT_HEIGHT, 26, INV_BAR_DX + 2, INV_BAR_DY -}; - -SGPRect gItemDescProsConsRects[] = -{// NB the left value is calculated based on the width of the 'pros' and 'cons' labels - 0, 111, 313, 118, - 0, 119, 313, 126 -}; - -SGPRect gMapItemDescProsConsRects[] = -{ - 0, 231, 313, 238, - 0, 239, 313, 246, + // HEADROCK: Adjusted it slightly so it looks better. Not part of EDB ;) + 175, 9, SM_INV_SLOT_HEIGHT, MAP_ATTACH_SLOT_WIDTH, INV_BAR_DX-9, INV_BAR_DY, // someone drew the STI wrong! ;) + 213, 9, SM_INV_SLOT_HEIGHT, MAP_ATTACH_SLOT_WIDTH, INV_BAR_DX-9, INV_BAR_DY, + 175, 37, SM_INV_SLOT_HEIGHT, MAP_ATTACH_SLOT_WIDTH, INV_BAR_DX-9, INV_BAR_DY, + 213, 37, SM_INV_SLOT_HEIGHT, MAP_ATTACH_SLOT_WIDTH, INV_BAR_DX-9, INV_BAR_DY, }; +//CHRISL: Moved declaration to InitDescStatCoords for EDB +SGPRect gItemDescProsConsRects[2]; INV_HELPTEXT gItemDescHelpText = { @@ -555,14 +527,14 @@ BOOLEAN gfItemDescHelpTextOffset = FALSE; system to work properly. */ INV_REGIONS gSMInvData[NUM_INV_SLOTS]; - -typedef struct +//CHRISL: Moved to interface items.h +/*typedef struct { UINT32 uiTotalAmount; UINT32 uiMoneyRemaining; UINT32 uiMoneyRemoving; -} REMOVE_MONEY; +} REMOVE_MONEY;*/ REMOVE_MONEY gRemoveMoney; MOUSE_REGION gSMInvRegion[ NUM_INV_SLOTS ]; @@ -1076,8 +1048,18 @@ BOOLEAN InitInvSlotInterface( INV_REGION_DESC *pRegionDesc , INV_REGION_DESC *pC */ // CHRISL: Adjusted location of the Money button on the tactical inventory screen - gMoneyButtonLoc.x = ((UsingNewInventorySystem() == false)) ? (343 + INTERFACE_START_X) : (388 + INTERFACE_START_X); - gMoneyButtonLoc.y = ( 11 + INV_INTERFACE_START_Y ); + // HEADROCK: Readjusted this, for the TACTICAL Enhanced Description Box + if ( UsingEDBSystem() > 0 ) + { + gMoneyButtonLoc.x = ((UsingNewInventorySystem() == false)) ? (343 + INTERFACE_START_X) : (244 + INTERFACE_START_X); + gMoneyButtonLoc.y = ( 11 + INV_INTERFACE_START_Y ); + } + else + { + gMoneyButtonLoc.x = ((UsingNewInventorySystem() == false)) ? (343 + INTERFACE_START_X) : (388 + INTERFACE_START_X); + gMoneyButtonLoc.y = ( 11 + INV_INTERFACE_START_Y ); + } + // Load all four body type images VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE; FilenameForBPP("INTERFACE\\inventory_figure_large_male.sti", VObjectDesc.ImageFile); @@ -2879,6 +2861,61 @@ BOOLEAN InitItemDescriptionBox( SOLDIERTYPE *pSoldier, UINT8 ubPosition, INT16 s return( InternalInitItemDescriptionBox( pObject, sX, sY, ubStatusIndex, pSoldier, ubPosition ) ); } +// HEADROCK: The following two functions set various coordinates for use by the description box, depending on +// an options.ini setting that determines whether the Enhanced box or the Original box is used. +void InitItemDescriptionBoxStartCoords( BOOLEAN fIsEnhanced ) +{ + UINT8 mode = UsingEDBSystem(); + + if( mode == 1 ) // EDB + { + ITEMDESC_START_X = 115; + ITEMDESC_START_Y = (1 + INV_INTERFACE_START_Y); + ITEMDESC_HEIGHT = 195; + ITEMDESC_WIDTH = 335; // OIV only + } + else if( mode == 2 ) // EDB/OIV Tactical + { + ITEMDESC_START_X = 214; + ITEMDESC_START_Y = (1 + INV_INTERFACE_START_Y); + ITEMDESC_HEIGHT = 133; + ITEMDESC_WIDTH = 477; // OIV only + } + else if( UsingNewInventorySystem() == true ) // ODB/NIV + { + ITEMDESC_START_X = 259; + ITEMDESC_START_Y = (1 + INV_INTERFACE_START_Y); + ITEMDESC_HEIGHT = 195; + ITEMDESC_WIDTH = 320; // OIV only + } + else // ODB/OIV + { + ITEMDESC_START_X = 214; + ITEMDESC_START_Y = (1 + INV_INTERFACE_START_Y); + ITEMDESC_HEIGHT = 133; + ITEMDESC_WIDTH = 320; // OIV only + } + + if(UsingNewInventorySystem() == true && guiCurrentScreen == GAME_SCREEN) + { + if(iResolution == 0) + ITEMDESC_WIDTH = 526; + else if(iResolution == 1) + ITEMDESC_WIDTH = 686; + else if(iResolution == 2) + ITEMDESC_WIDTH = 910; + } + + //CHRISL: This allows EDB to work in Strategic OIV mode + if(iResolution == 0) // 640x480 res + MAP_ITEMDESC_HEIGHT = 268; + else if(iResolution == 2 || UsingNewInventorySystem() == true) // 1024x768 or NIV + MAP_ITEMDESC_HEIGHT = 490; + else if(iResolution == 1) // 800x600 + MAP_ITEMDESC_HEIGHT = 373; + MAP_ITEMDESC_WIDTH = ((UsingNewInventorySystem() == true && iResolution != 0)) ? 272 : 272; +} + BOOLEAN InitKeyItemDescriptionBox( SOLDIERTYPE *pSoldier, UINT8 ubPosition, INT16 sX, INT16 sY, UINT8 ubStatusIndex ) { OBJECTTYPE *pObject; @@ -2897,25 +2934,19 @@ BOOLEAN InternalInitItemDescriptionBox( OBJECTTYPE *pObject, INT16 sX, INT16 sY, CHAR16 pStr[10]; INT16 usX, usY; INT16 sForeColour; - INT16 sProsConsIndent; +/* Moved to InitItemDescriptionBoxStartCoords // CHRISL: Set some initial coords ITEMDESC_START_X = ((UsingNewInventorySystem() == true && iResolution != 0)) ? 259 : 214; //115:214 ITEMDESC_START_Y = ((UsingNewInventorySystem() == true && iResolution != 0)) ? (1 + INV_INTERFACE_START_Y) : (1 + INV_INTERFACE_START_Y); ITEMDESC_HEIGHT = ((UsingNewInventorySystem() == true && iResolution != 0)) ? 195 : 133; //195:133 ITEMDESC_WIDTH = 320; - if(UsingNewInventorySystem() == true) - { - if(iResolution == 0) - ITEMDESC_WIDTH = 526; - else if(iResolution == 1) - ITEMDESC_WIDTH = 686; - else if(iResolution == 2) - ITEMDESC_WIDTH = 910; - } - //ITEMDESC_WIDTH = ((UsingNewInventorySystem() == true && iResolution != 0)) ? 320 : 320; //678:320 - MAP_ITEMDESC_HEIGHT = ((UsingNewInventorySystem() == true && iResolution != 0)) ? 490 : 268; - MAP_ITEMDESC_WIDTH = ((UsingNewInventorySystem() == true && iResolution != 0)) ? 272 : 272; +*/ + // This initializes the start coordinates of the description box, based on the box we want to use. + //CHRISL: Initialize coords based on EDB/NIV settings + InitDescStatCoords(); + InitEDBCoords(); + InitItemDescriptionBoxStartCoords( gGameExternalOptions.fEnhancedDescriptionBox ); //CHRISL: We only want this condition to be true when looking at MONEY. Not IC_MONEY since we can't actually split // things like gold nuggets or wallets. @@ -2933,7 +2964,7 @@ BOOLEAN InternalInitItemDescriptionBox( OBJECTTYPE *pObject, INT16 sX, INT16 sY, guiCurrentItemDescriptionScreen = guiCurrentScreen; // Set X, Y - if(sX == 0 && sY == 0) + if(guiCurrentScreen == GAME_SCREEN) { gsInvDescX = ITEMDESC_START_X; //sX; gsInvDescY = ITEMDESC_START_Y; //sY; @@ -2944,6 +2975,10 @@ BOOLEAN InternalInitItemDescriptionBox( OBJECTTYPE *pObject, INT16 sX, INT16 sY, gsInvDescY = sY; } + // Headrock: initialize coordinates of icons, values and text, based on gsInvDescXY and the type of description + // box we want to use. + InitItemDescriptionBoxOffsets(); + gpItemDescObject = pObject; gubItemDescStatusIndex = ubStatusIndex; gpItemDescSoldier = pSoldier; @@ -2961,8 +2996,14 @@ BOOLEAN InternalInitItemDescriptionBox( OBJECTTYPE *pObject, INT16 sX, INT16 sY, giMapInvDescButtonImage= LoadButtonImage( "INTERFACE\\itemdescdonebutton.sti" ,-1,0,-1,1,-1 ); - // create button - giMapInvDescButton= QuickCreateButton( giMapInvDescButtonImage, (UINT16)( gsInvDescX + 204 ), (UINT16)( gsInvDescY + 107 ), + // HEADROCK: Create "Done" button. Coordinates changed - button moved to new location for + // enhanced Description Box project. + if(UsingEDBSystem() > 0) + giMapInvDescButton= QuickCreateButton( giMapInvDescButtonImage, (UINT16)( gsInvDescX + 199 ), (UINT16)( gsInvDescY + 334 ), + BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST, + ( GUI_CALLBACK )BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)ItemDescDoneButtonCallback ); + else + giMapInvDescButton= QuickCreateButton( giMapInvDescButtonImage, (UINT16)( gsInvDescX + 204 ), (UINT16)( gsInvDescY + 107 ), BUTTON_TOGGLE, MSYS_PRIORITY_HIGHEST, ( GUI_CALLBACK )BtnGenericMouseMoveButtonCallback, (GUI_CALLBACK)ItemDescDoneButtonCallback ); @@ -3063,19 +3104,24 @@ BOOLEAN InternalInitItemDescriptionBox( OBJECTTYPE *pObject, INT16 sX, INT16 sY, } + // HEADROCK: Tooltip Regions for stats. Only happens with Enhanced Description Box turned on. + // EDB 1.3: Moves this here to init coordinates earlier. + if(UsingEDBSystem() > 0) + InternalInitEDBTooltipRegion( gpItemDescObject, guiCurrentItemDescriptionScreen ); + if ( ITEM_PROS_AND_CONS( gpItemDescObject->usItem ) ) { if( guiCurrentItemDescriptionScreen == MAP_SCREEN ) { - sProsConsIndent = __max( StringPixLength( gzProsLabel, ITEMDESC_FONT ), StringPixLength( gzConsLabel, ITEMDESC_FONT ) ) + 10; for ( cnt = 0; cnt < 2; cnt++ ) { + // HEADROCK: Rectangle coordinates for tooltip determined by description box used. // Add region for pros/cons help text MSYS_DefineRegion( &gProsAndConsRegions[ cnt ], - (INT16)(ITEMDESC_PROS_START_X + sProsConsIndent), - (INT16)(gsInvDescY + gMapItemDescProsConsRects[ cnt ].iTop), - (INT16)(gsInvDescX + gMapItemDescProsConsRects[ cnt ].iRight), - (INT16)(gsInvDescY + gMapItemDescProsConsRects[ cnt ].iBottom), + (INT16)(gsInvDescX + gItemDescProsConsRects[ cnt ].iLeft), + (INT16)(gsInvDescY + gItemDescProsConsRects[ cnt ].iTop), + (INT16)(gsInvDescX + gItemDescProsConsRects[ cnt ].iRight), + (INT16)(gsInvDescY + gItemDescProsConsRects[ cnt ].iBottom), MSYS_PRIORITY_HIGHEST, MSYS_NO_CURSOR, MSYS_NO_CALLBACK, ItemDescCallback ); MSYS_AddRegion( &gProsAndConsRegions[cnt]); @@ -3104,12 +3150,12 @@ BOOLEAN InternalInitItemDescriptionBox( OBJECTTYPE *pObject, INT16 sX, INT16 sY, } else { - sProsConsIndent = __max( StringPixLength( gzProsLabel, ITEMDESC_FONT ), StringPixLength( gzConsLabel, ITEMDESC_FONT ) ) + 10; for ( cnt = 0; cnt < 2; cnt++ ) { + // Headrock: Rectangle coordinates for tooltip determined by description box used. // Add region for pros/cons help text MSYS_DefineRegion( &gProsAndConsRegions[ cnt ], - (INT16)(ITEMDESC_PROS_START_X + sProsConsIndent), + (INT16)(gsInvDescX + gItemDescProsConsRects[ cnt ].iLeft), (INT16)(gsInvDescY + gItemDescProsConsRects[ cnt ].iTop), (INT16)(gsInvDescX + gItemDescProsConsRects[ cnt ].iRight), (INT16)(gsInvDescY + gItemDescProsConsRects[ cnt ].iBottom), @@ -3141,8 +3187,12 @@ BOOLEAN InternalInitItemDescriptionBox( OBJECTTYPE *pObject, INT16 sX, INT16 sY, } // Load graphic + // HEADROCK: Select STI based on Description Box used: VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE; - strcpy( VObjectDesc.ImageFile, "INTERFACE\\infobox_interface.sti" ); + if(UsingEDBSystem() > 0) + strcpy( VObjectDesc.ImageFile, "INTERFACE\\infobox_interface_edb.sti" ); + else + strcpy( VObjectDesc.ImageFile, "INTERFACE\\infobox_interface.sti" ); CHECKF( AddVideoObject( &VObjectDesc, &guiItemDescBox) ); if(ubPosition != 255 && UsingNewInventorySystem() == true) @@ -3154,45 +3204,24 @@ BOOLEAN InternalInitItemDescriptionBox( OBJECTTYPE *pObject, INT16 sX, INT16 sY, else guiItemDescBoxBackground = 0; + // HEADROCK: Select STI based on Description Box used: VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE; - strcpy( VObjectDesc.ImageFile, "INTERFACE\\iteminfoc.STI" ); + if(UsingEDBSystem() > 0) + strcpy( VObjectDesc.ImageFile, "INTERFACE\\iteminfoc_edb.STI" ); + else + strcpy( VObjectDesc.ImageFile, "INTERFACE\\iteminfoc.STI" ); CHECKF( AddVideoObject( &VObjectDesc, &guiMapItemDescBox) ); VObjectDesc.fCreateFlags = VOBJECT_CREATE_FROMFILE; strcpy( VObjectDesc.ImageFile, "INTERFACE\\bullet.STI" ); CHECKF( AddVideoObject( &VObjectDesc, &guiBullet) ); + // HEADROCK: Added new STIs + CHECKF( InternalInitEnhancedDescBox() ); + if ( gpItemDescObject->usItem != MONEY ) { - for ( cnt = 0; cnt < MAX_ATTACHMENTS; cnt++ ) - { - // Build a mouse region here that is over any others..... -// if (guiTacticalInterfaceFlags & INTERFACE_MAPSCREEN ) - if( guiCurrentItemDescriptionScreen == MAP_SCREEN ) - MSYS_DefineRegion( &gItemDescAttachmentRegions[cnt], (INT16)(gsInvDescX + gMapItemDescAttachmentsXY[cnt].sX), (INT16)(gsInvDescY + gMapItemDescAttachmentsXY[cnt].sY), (INT16)(gsInvDescX + gMapItemDescAttachmentsXY[cnt].sX + gMapItemDescAttachmentsXY[cnt].sWidth), (INT16)(gsInvDescY + gMapItemDescAttachmentsXY[cnt].sY + gMapItemDescAttachmentsXY[cnt].sHeight), MSYS_PRIORITY_HIGHEST, - MSYS_NO_CURSOR, MSYS_NO_CALLBACK, ItemDescAttachmentsCallback ); - else - MSYS_DefineRegion( &gItemDescAttachmentRegions[cnt], (INT16)(gsInvDescX + gItemDescAttachmentsXY[cnt].sX), (INT16)(gsInvDescY + gItemDescAttachmentsXY[cnt].sY), (INT16)(gsInvDescX + gItemDescAttachmentsXY[cnt].sX + gItemDescAttachmentsXY[cnt].sBarDx + gItemDescAttachmentsXY[cnt].sWidth), (INT16)(gsInvDescY + gItemDescAttachmentsXY[cnt].sY + gItemDescAttachmentsXY[cnt].sHeight), MSYS_PRIORITY_HIGHEST, - MSYS_NO_CURSOR, MSYS_NO_CALLBACK, ItemDescAttachmentsCallback ); - // Add region - MSYS_AddRegion( &gItemDescAttachmentRegions[cnt]); - MSYS_SetRegionUserData( &gItemDescAttachmentRegions[cnt], 0, cnt ); - - //CHRISL: Include the ubStatusIndex in the region information so we know which object in a stack we're looking at - MSYS_SetRegionUserData( &gItemDescAttachmentRegions[cnt], 1, ubStatusIndex ); - - // CHRISL: Instead of looking at object 0, let's look at the object we actually right clicked on using ubStatusIndex - OBJECTTYPE* pAttachment = (*pObject)[ubStatusIndex]->GetAttachmentAtIndex(cnt); - if (pAttachment) { - SetRegionFastHelpText( &(gItemDescAttachmentRegions[ cnt ]), ItemNames[ pAttachment->usItem ] ); - SetRegionHelpEndCallback( &(gItemDescAttachmentRegions[ cnt ]), HelpTextDoneCallback ); - } - else - { - SetRegionFastHelpText( &(gItemDescAttachmentRegions[ cnt ]), Message[ STR_ATTACHMENTS ] ); - SetRegionHelpEndCallback( &(gItemDescAttachmentRegions[ cnt ]), HelpTextDoneCallback ); - } - } + UpdateAttachmentTooltips(pObject, ubStatusIndex); } else { @@ -3330,6 +3359,49 @@ BOOLEAN InternalInitItemDescriptionBox( OBJECTTYPE *pObject, INT16 sX, INT16 sY, return( TRUE ); } +//CHRISL: This function is designed to recreate the attachment tooltips +void UpdateAttachmentTooltips(OBJECTTYPE *pObject, UINT8 ubStatusIndex) +{ + INT32 cnt; + + //start by deleting the currently defined regions if they exist + for ( cnt = 0; cnt < MAX_ATTACHMENTS; cnt++ ) + { + if( gItemDescAttachmentRegions[cnt].IDNumber != 0 ) + MSYS_RemoveRegion( &gItemDescAttachmentRegions[cnt]); + } + + //now, create new regions + for ( cnt = 0; cnt < MAX_ATTACHMENTS; cnt++ ) + { + // Build a mouse region here that is over any others..... + //if (guiTacticalInterfaceFlags & INTERFACE_MAPSCREEN ) + if( guiCurrentItemDescriptionScreen == MAP_SCREEN ) + MSYS_DefineRegion( &gItemDescAttachmentRegions[cnt], (INT16)(gsInvDescX + gMapItemDescAttachmentsXY[cnt].sX), (INT16)(gsInvDescY + gMapItemDescAttachmentsXY[cnt].sY), (INT16)(gsInvDescX + gMapItemDescAttachmentsXY[cnt].sX + gMapItemDescAttachmentsXY[cnt].sWidth), (INT16)(gsInvDescY + gMapItemDescAttachmentsXY[cnt].sY + gMapItemDescAttachmentsXY[cnt].sHeight), MSYS_PRIORITY_HIGHEST, + MSYS_NO_CURSOR, MSYS_NO_CALLBACK, ItemDescAttachmentsCallback ); + else + MSYS_DefineRegion( &gItemDescAttachmentRegions[cnt], (INT16)(gsInvDescX + gItemDescAttachmentsXY[cnt].sX), (INT16)(gsInvDescY + gItemDescAttachmentsXY[cnt].sY), (INT16)(gsInvDescX + gItemDescAttachmentsXY[cnt].sX + gItemDescAttachmentsXY[cnt].sBarDx + gItemDescAttachmentsXY[cnt].sWidth), (INT16)(gsInvDescY + gItemDescAttachmentsXY[cnt].sY + gItemDescAttachmentsXY[cnt].sHeight), MSYS_PRIORITY_HIGHEST, + MSYS_NO_CURSOR, MSYS_NO_CALLBACK, ItemDescAttachmentsCallback ); + // Add region + MSYS_AddRegion( &gItemDescAttachmentRegions[cnt]); + MSYS_SetRegionUserData( &gItemDescAttachmentRegions[cnt], 0, cnt ); + + //CHRISL: Include the ubStatusIndex in the region information so we know which object in a stack we're looking at + MSYS_SetRegionUserData( &gItemDescAttachmentRegions[cnt], 1, ubStatusIndex ); + + // CHRISL: Instead of looking at object 0, let's look at the object we actually right clicked on using ubStatusIndex + OBJECTTYPE* pAttachment = (*pObject)[ubStatusIndex]->GetAttachmentAtIndex(cnt); + if (pAttachment) { + SetRegionFastHelpText( &(gItemDescAttachmentRegions[ cnt ]), ItemNames[ pAttachment->usItem ] ); + SetRegionHelpEndCallback( &(gItemDescAttachmentRegions[ cnt ]), HelpTextDoneCallback ); + } + else + { + SetRegionFastHelpText( &(gItemDescAttachmentRegions[ cnt ]), Message[ STR_ATTACHMENTS ] ); + SetRegionHelpEndCallback( &(gItemDescAttachmentRegions[ cnt ]), HelpTextDoneCallback ); + } + } +} BOOLEAN ReloadItemDesc( ) { @@ -3657,6 +3729,9 @@ void ItemDescAttachmentsCallback( MOUSE_REGION * pRegion, INT32 iReason ) } DoAttachment((UINT8)ubStatusIndex); + + UpdateAttachmentTooltips(gpItemDescObject, ubStatusIndex); + InternalInitEDBTooltipRegion(gpItemDescObject, guiCurrentItemDescriptionScreen); } } else @@ -3697,6 +3772,9 @@ void ItemDescAttachmentsCallback( MOUSE_REGION * pRegion, INT32 iReason ) gfReEvaluateEveryonesNothingToDo = TRUE; UpdateItemHatches(); + + UpdateAttachmentTooltips(gpItemDescObject, ubStatusIndex); + InternalInitEDBTooltipRegion(gpItemDescObject, guiCurrentItemDescriptionScreen); } } } @@ -3775,15 +3853,28 @@ void RenderItemDescriptionBox( ) sCenY = MAP_ITEMDESC_ITEM_Y + (INT16)( abs( ITEMDESC_ITEM_HEIGHT - (double)usHeight ) / 2 )- pTrav->sOffsetY; // CHRISL: Determine if we're looking at an LBENODE and display alternate box graphic - if((UsingNewInventorySystem() == true) && iResolution != 0) + // HEADROCK: CHRISL: These conditions have been altered so that EDB will work + if(iResolution == 0) //640x480 always uses the very first graphic + showBox = 0; + else if(UsingNewInventorySystem() == false) //OIV + { + if (Item[gpItemDescObject->usItem].usItemClass & (IC_WEAPON|IC_EXPLOSV|IC_AMMO|IC_ARMOUR|IC_PUNCH) && UsingEDBSystem() > 0 ) + showBox = 6; + else + showBox = 1; + } + else if(UsingNewInventorySystem() == true) //NIV { if(gpItemDescObject->IsActiveLBE(gubItemDescStatusIndex)) showBox = gpItemDescObject->GetLBEPointer(gubItemDescStatusIndex)->lbeClass + 1; else if(Item[gpItemDescObject->usItem].usItemClass == IC_LBEGEAR) showBox = LoadBearingEquipment[Item[gpItemDescObject->usItem].ubClassIndex].lbeClass + 1; + else if (Item[gpItemDescObject->usItem].usItemClass & (IC_WEAPON|IC_EXPLOSV|IC_AMMO|IC_ARMOUR|IC_PUNCH) && UsingEDBSystem() > 0 ) + showBox = 6; else showBox = 1; } + BltVideoObjectFromIndex( guiSAVEBUFFER, guiMapItemDescBox, showBox, gsInvDescX, gsInvDescY, VO_BLT_SRCTRANSPARENCY, NULL ); //Display the money 'seperating' border @@ -3793,13 +3884,11 @@ void RenderItemDescriptionBox( ) BltVideoObjectFromIndex( guiSAVEBUFFER, guiMoneyGraphicsForDescBox, 0, (UINT16)(gMapMoneyButtonLoc.x + gMoneyButtonOffsets[0].x), (UINT16)(gMapMoneyButtonLoc.y + gMoneyButtonOffsets[0].y), VO_BLT_SRCTRANSPARENCY, NULL ); } - // Display item if(gGameSettings.fOptions[ TOPTION_SHOW_ITEM_SHADOW ]) BltVideoObjectOutlineShadowFromIndex( guiSAVEBUFFER, guiItemGraphic, 0, sCenX - 2, sCenY + 2 ); BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemGraphic, 0, sCenX, sCenY, VO_BLT_SRCTRANSPARENCY, NULL ); - // Display ststus DrawItemUIBarEx( gpItemDescObject, gubItemDescStatusIndex, (INT16)MAP_ITEMDESC_ITEM_STATUS_X, (INT16)MAP_ITEMDESC_ITEM_STATUS_Y, ITEMDESC_ITEM_STATUS_WIDTH, ITEMDESC_ITEM_STATUS_HEIGHT_MAP, Get16BPPColor( DESC_STATUS_BAR ), Get16BPPColor( DESC_STATUS_BAR_SHADOW ), TRUE, guiSAVEBUFFER ); @@ -3828,11 +3917,11 @@ void RenderItemDescriptionBox( ) for (attachmentList::iterator iter = (*gpItemDescObject)[gubItemDescStatusIndex]->attachments.begin(); iter != (*gpItemDescObject)[gubItemDescStatusIndex]->attachments.end(); ++iter, ++cnt) { - sCenX = (INT16)( gsInvDescX + gMapItemDescAttachmentsXY[cnt].sX + 5 ); - sCenY = (INT16)( gsInvDescY + gMapItemDescAttachmentsXY[cnt].sY - 1 ); + sCenX = (INT16)( gsInvDescX + gMapItemDescAttachmentsXY[cnt].sX); + sCenY = (INT16)( gsInvDescY + gMapItemDescAttachmentsXY[cnt].sY); INVRenderItem( guiSAVEBUFFER, NULL, gpItemDescObject, sCenX, sCenY, gMapItemDescAttachmentsXY[cnt].sWidth, gMapItemDescAttachmentsXY[cnt].sHeight, DIRTYLEVEL2, NULL, (UINT8)(RENDER_ITEM_ATTACHMENT1 + cnt), FALSE, 0, gubItemDescStatusIndex ); - sCenX = sCenX - gItemDescAttachmentsXY[cnt].sBarDx; - sCenY = sCenY + gItemDescAttachmentsXY[cnt].sBarDy; + sCenX = gsInvDescX + gMapItemDescAttachmentsXY[cnt].sX + gMapItemDescAttachmentsXY[cnt].sBarDx; + sCenY = gsInvDescY + gMapItemDescAttachmentsXY[cnt].sY + gMapItemDescAttachmentsXY[cnt].sBarDy; DrawItemUIBarEx( gpItemDescObject, (UINT8)(DRAW_ITEM_STATUS_ATTACHMENT1 + cnt), sCenX, sCenY, ITEM_BAR_WIDTH, ITEM_BAR_HEIGHT, Get16BPPColor( STATUS_BAR ), Get16BPPColor( STATUS_BAR_SHADOW ), TRUE , guiSAVEBUFFER, gubItemDescStatusIndex ); //this code was the same inside both branches of the if below! } @@ -3844,27 +3933,54 @@ void RenderItemDescriptionBox( ) } } - if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_GUN || Item[ gpItemDescObject->usItem ].usItemClass & IC_LAUNCHER ) + //HEADROCK/CHRISL: This condition needs to run differently depending on whether EDB is active of not + if(UsingEDBSystem() > 0) { - // display bullets for ROF - if ( !Weapon[gpItemDescObject->usItem].NoSemiAuto ) - BltVideoObjectFromIndex( guiSAVEBUFFER, guiBullet, 0, MAP_BULLET_SING_X, MAP_BULLET_SING_Y, VO_BLT_SRCTRANSPARENCY, NULL ); - - if (GetShotsPerBurst(gpItemDescObject)> 0) + if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_WEAPON || Item[ gpItemDescObject->usItem ].usItemClass & IC_PUNCH ) { - for ( cnt = 0; cnt < __min(GetShotsPerBurst(gpItemDescObject),12); cnt++ ) - { - BltVideoObjectFromIndex( guiSAVEBUFFER, guiBullet, 0, MAP_BULLET_BURST_X + cnt * (BULLET_WIDTH/2 + 1), MAP_BULLET_BURST_Y, VO_BLT_SRCTRANSPARENCY, NULL ); - } + DrawWeaponStats(gpItemDescObject); } - else if (GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0 ) + else if ( Item[ gpItemDescObject->usItem ].usItemClass == IC_AMMO ) { - for ( cnt = 0; cnt < 10; cnt++ ) - { - BltVideoObjectFromIndex( guiSAVEBUFFER, guiBullet, 0, MAP_BULLET_BURST_X + cnt * (BULLET_WIDTH/2 + 1), MAP_BULLET_BURST_Y, VO_BLT_SRCTRANSPARENCY, NULL ); - } + DrawAmmoStats(gpItemDescObject); } + else if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_EXPLOSV ) + { + DrawExplosiveStats(gpItemDescObject); + } + else if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_ARMOUR ) + { + DrawArmorStats(gpItemDescObject); + } + else + { + DrawMiscStats(gpItemDescObject); + } + } + else + { + if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_GUN || Item[ gpItemDescObject->usItem ].usItemClass & IC_LAUNCHER ) + { + // display bullets for ROF + if ( !Weapon[gpItemDescObject->usItem].NoSemiAuto ) + BltVideoObjectFromIndex( guiSAVEBUFFER, guiBullet, 0, BULLET_SING_X, BULLET_SING_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + if (GetShotsPerBurst(gpItemDescObject)> 0) + { + for ( cnt = 0; cnt < __min(GetShotsPerBurst(gpItemDescObject),12); cnt++ ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiBullet, 0, BULLET_BURST_X + cnt * (BULLET_WIDTH/2 + 1), BULLET_BURST_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + } + else if (GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0 ) + { + for ( cnt = 0; cnt < 10; cnt++ ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiBullet, 0, BULLET_BURST_X + cnt * (BULLET_WIDTH/2 + 1), BULLET_BURST_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + } + + } } RestoreExternBackgroundRect( gsInvDescX, gsInvDescY, MAP_ITEMDESC_WIDTH, MAP_ITEMDESC_HEIGHT ); @@ -3892,17 +4008,20 @@ void RenderItemDescriptionBox( ) SetFontForeground( FONT_BLACK ); SetFontShadow( ITEMDESC_FONTSHADOW2 ); - DisplayWrappedString( (INT16)MAP_ITEMDESC_DESC_START_X, (INT16)MAP_ITEMDESC_DESC_START_Y, MAP_ITEMDESC_DESC_WIDTH, 2, ITEMDESC_FONT, FONT_BLACK, gzItemDesc, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED); + // Item Full Description + DisplayWrappedString( (INT16)ITEMDESC_DESC_START_X, (INT16)ITEMDESC_DESC_START_Y, MAP_ITEMDESC_DESC_WIDTH, 2, ITEMDESC_FONT, FONT_BLACK, gzItemDesc, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED); if ( ITEM_PROS_AND_CONS( gpItemDescObject->usItem ) ) { + // Caliber if ( (Item[gpItemDescObject->usItem].fingerprintid ) && (*gpItemDescObject)[gubItemDescStatusIndex]->data.ubImprintID < NO_PROFILE ) { - // add name noting imprint + // Fingerprint ID swprintf( pStr, L"%s %s (%s)", AmmoCaliber[ Weapon[ gpItemDescObject->usItem ].ubCalibre ], WeaponType[ Weapon[ gpItemDescObject->usItem ].ubWeaponType ], gMercProfiles[ (*gpItemDescObject)[gubItemDescStatusIndex]->data.ubImprintID ].zNickname ); } else { + // No Fingerprint ID swprintf( pStr, L"%s %s", AmmoCaliber[ Weapon[ gpItemDescObject->usItem ].ubCalibre ], WeaponType[ Weapon[ gpItemDescObject->usItem ].ubWeaponType ] ); } @@ -3911,7 +4030,8 @@ void RenderItemDescriptionBox( ) SetFontForeground( FONT_MCOLOR_DKWHITE2 ); SetFontShadow( ITEMDESC_FONTSHADOW3 ); - mprintf( (INT16)MAP_ITEMDESC_PROS_START_X, (INT16)MAP_ITEMDESC_PROS_START_Y, gzProsLabel ); + // PROs + mprintf( (INT16)ITEMDESC_PROS_START_X, (INT16)ITEMDESC_PROS_START_Y, gzProsLabel ); sProsConsIndent = __max( StringPixLength( gzProsLabel, ITEMDESC_FONT ), StringPixLength( gzConsLabel, ITEMDESC_FONT ) ) + 10; @@ -3920,19 +4040,20 @@ void RenderItemDescriptionBox( ) { SetFontForeground( FONT_BLACK ); SetFontShadow( ITEMDESC_FONTSHADOW2 ); - DisplayWrappedString( (INT16)(MAP_ITEMDESC_PROS_START_X + sProsConsIndent), (INT16)MAP_ITEMDESC_PROS_START_Y, (INT16)(ITEMDESC_DESC_WIDTH - sProsConsIndent), 2, ITEMDESC_FONT, FONT_BLACK, gzItemPros, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED ); + DisplayWrappedString( (INT16)(ITEMDESC_PROS_START_X + sProsConsIndent), (INT16)ITEMDESC_PROS_START_Y, (INT16)(ITEMDESC_DESC_WIDTH - sProsConsIndent), 2, ITEMDESC_FONT, FONT_BLACK, gzItemPros, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED ); } SetFontForeground( FONT_MCOLOR_DKWHITE2 ); SetFontShadow( ITEMDESC_FONTSHADOW3 ); - mprintf( (INT16)MAP_ITEMDESC_CONS_START_X, (INT16)MAP_ITEMDESC_CONS_START_Y, gzConsLabel ); + // CONs + mprintf( (INT16)ITEMDESC_CONS_START_X, (INT16)ITEMDESC_CONS_START_Y, gzConsLabel ); GenerateConsString( gzItemCons, gpItemDescObject, MAP_ITEMDESC_DESC_WIDTH - sProsConsIndent - StringPixLength( DOTDOTDOT, ITEMDESC_FONT ) ); if (gzItemCons[0] != 0) { SetFontForeground( FONT_BLACK ); SetFontShadow( ITEMDESC_FONTSHADOW2 ); - DisplayWrappedString( (INT16)(MAP_ITEMDESC_CONS_START_X + sProsConsIndent), (INT16)MAP_ITEMDESC_CONS_START_Y, (INT16)(ITEMDESC_DESC_WIDTH - sProsConsIndent), 2, ITEMDESC_FONT, FONT_BLACK, gzItemCons, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED); + DisplayWrappedString( (INT16)(ITEMDESC_CONS_START_X + sProsConsIndent), (INT16)ITEMDESC_CONS_START_Y, (INT16)(MAP_ITEMDESC_DESC_WIDTH - sProsConsIndent), 2, ITEMDESC_FONT, FONT_BLACK, gzItemCons, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED); } } @@ -3949,68 +4070,55 @@ void RenderItemDescriptionBox( ) DisplayWrappedString( (INT16)MAP_ITEMDESC_CONS_START_X, (INT16)MAP_ITEMDESC_CONS_START_Y, MAP_ITEMDESC_DESC_WIDTH, 2, ITEMDESC_FONT, FONT_BLACK, gzItemCons, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED); } */ - // Get length of string uiRightLength=35; + ////////////////////////////////////////////////////////////////////////////// + // DATA VALUES + // This segment combines the printing of "equals" signs and actual characteristic + // data for each characterstic displayed. Labels are no longer used for most data, + // they are replaced by icons, which have already been blitted above. + ////////////////////////////////////////////////////////////////////////////// - // Calculate total weight of item and attachments - fWeight = gpItemDescObject->GetWeightOfObjectInStack(gubItemDescStatusIndex) / 10.0f; + // We begin by printing out data for ALL items, namely status and weight. + SetFont( BLOCKFONT2 ); + SetFontForeground( 6 ); + SetFontShadow( DEFAULT_SHADOW ); - if ( !gGameSettings.fOptions[ TOPTION_USE_METRIC_SYSTEM ] ) // metric units not enabled + // For ammo, capacity replaces status. Money and Keys do not get a status display at all. + if ( Item[ gpItemDescObject->usItem ].usItemClass != IC_AMMO && Item[ gpItemDescObject->usItem ].usItemClass != IC_MONEY ) { - fWeight = fWeight * 2.2f; - } - - if ( fWeight < 0.1 && gubItemDescStatusIndex < gpItemDescObject->ubNumberOfObjects ) - { - fWeight = 0.1f; - } - - // Render, stat name - if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_WEAPON ) - { - SetFont( BLOCKFONT2 ); - SetFontForeground( 6 ); - SetFontShadow( DEFAULT_SHADOW ); - - //LABELS - swprintf( sTempString, gWeaponStatsDesc[ 0 ], GetWeightUnitString() ); - mprintf( gMapWeaponStats[ 0 ].sX + gsInvDescX, gMapWeaponStats[ 0 ].sY + gsInvDescY, L"%s", sTempString ); - //mprintf( gMapWeaponStats[ 2 ].sX + gsInvDescX, gMapWeaponStats[ 2 ].sY + gsInvDescY, L"%s", gMapWeaponStats[ 2 ].zDesc ); - if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN | IC_LAUNCHER ) ) - { - mprintf( gMapWeaponStats[ 3 ].sX + gsInvDescX, gMapWeaponStats[ 3 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 3 ] ); - } - if ( !(Item[ gpItemDescObject->usItem ].usItemClass & IC_LAUNCHER) && !Item[gpItemDescObject->usItem].rocketlauncher ) - { - mprintf( gMapWeaponStats[ 4 ].sX + gsInvDescX, gMapWeaponStats[ 4 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 4 ] ); - } - mprintf( gMapWeaponStats[ 5 ].sX + gsInvDescX, gMapWeaponStats[ 5 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 5 ] ); - if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_GUN || Item[ gpItemDescObject->usItem ].usItemClass & IC_LAUNCHER) - { - // equals sign - if ( !Weapon[gpItemDescObject->usItem].NoSemiAuto ) - mprintf( gMapWeaponStats[ 7 ].sX + gsInvDescX, gMapWeaponStats[ 7 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 7 ] ); - } - mprintf( gMapWeaponStats[ 1 ].sX + gsInvDescX, gMapWeaponStats[ 1 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 1 ] ); - - - if (GetShotsPerBurst(gpItemDescObject) > 0 || GetAutofireShotsPerFiveAPs(gpItemDescObject)>0) - { - mprintf( gMapWeaponStats[ 8 ].sX + gsInvDescX, gMapWeaponStats[ 8 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); - } - + // STATUS + // label + mprintf( gWeaponStats[ 0 ].sX + gsInvDescX, gWeaponStats[ 0 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 0 ] ); SetFontForeground( 5 ); - //Status + // print value // This is gross, but to get the % to work out right... swprintf( pStr, L"%2d%%", status); - FindFontRightCoordinates( (INT16)(gMapWeaponStats[ 1 ].sX + gsInvDescX + gMapWeaponStats[ 1 ].sValDx + 6), (INT16)(gMapWeaponStats[ 1 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 0 ].sX + gsInvDescX + gWeaponStats[ 0 ].sValDx + 6), (INT16)(gWeaponStats[ 0 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); wcscat( pStr, L"%%" ); mprintf( usX, usY, pStr ); + } + if(Item[ gpItemDescObject->usItem ].usItemClass != IC_MONEY) + { + // WEIGHT + SetFontForeground( 6 ); + swprintf( sTempString, gWeaponStatsDesc[ 1 ], GetWeightUnitString() ); + mprintf( gWeaponStats[ 1 ].sX + gsInvDescX, gWeaponStats[ 1 ].sY + gsInvDescY, L"%s", sTempString ); + + // Calculate total weight of item and attachments + fWeight = gpItemDescObject->GetWeightOfObjectInStack(gubItemDescStatusIndex) / 10.0f; + if ( !gGameSettings.fOptions[ TOPTION_USE_METRIC_SYSTEM ] ) // metric units not enabled + { + fWeight = fWeight * 2.2f; + } + if ( fWeight < 0.1 && gubItemDescStatusIndex < gpItemDescObject->ubNumberOfObjects ) + { + fWeight = 0.1f; + } // Values - if (fWeight <= (EXCEPTIONAL_WEIGHT / 10)) + if (fWeight <= (EXCEPTIONAL_WEIGHT / 10) && Item[ gpItemDescObject->usItem ].usItemClass & IC_WEAPON ) { SetFontForeground( ITEMDESC_FONTHIGHLIGHT ); } @@ -4020,11 +4128,23 @@ void RenderItemDescriptionBox( ) } //Weight swprintf( pStr, L"%1.1f", fWeight ); - FindFontRightCoordinates( (INT16)(gMapWeaponStats[ 0 ].sX + gsInvDescX + gMapWeaponStats[ 0 ].sValDx+6), (INT16)(gMapWeaponStats[ 0 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 1 ].sX + gsInvDescX + gWeaponStats[ 1 ].sValDx+6), (INT16)(gWeaponStats[ 1 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); mprintf( usX, usY, pStr ); + } - if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN | IC_LAUNCHER) ) + ///////////////////////////////////////// + // BEGIN WEAPONS-SPECIFIC CHARACTERISTICS + ///////////////////////////////////////// + if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_WEAPON || Item[ gpItemDescObject->usItem ].usItemClass & IC_PUNCH ) + { + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER|IC_THROWING_KNIFE) ) { + // RANGE + SetFontForeground( 6 ); + if(UsingEDBSystem() > 0) + mprintf( gWeaponStats[ 23 ].sX + gsInvDescX, gWeaponStats[ 23 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + else + mprintf( gWeaponStats[ 2 ].sX + gsInvDescX, gWeaponStats[ 2 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 3 ] ); if ( GunRange( gpItemDescObject ) >= EXCEPTIONAL_RANGE) { @@ -4034,15 +4154,19 @@ void RenderItemDescriptionBox( ) { SetFontForeground( 5 ); } - - //Range - swprintf( pStr, L"%2d", ( GunRange( gpItemDescObject ) ) / 10 ); - FindFontRightCoordinates( (INT16)(gMapWeaponStats[ 3 ].sX + gsInvDescX + gMapWeaponStats[ 3 ].sValDx), (INT16)(gMapWeaponStats[ 3 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); - mprintf( usX, usY, pStr ); + swprintf( pStr, L"%2d", ( GunRange( gpItemDescObject ) ) / 10 ); + 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 ); } - - if ( !(Item[ gpItemDescObject->usItem ].usItemClass & IC_LAUNCHER) && !Item[gpItemDescObject->usItem].rocketlauncher ) + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_PUNCH|IC_BLADE|IC_THROWING_KNIFE) && !Item[ gpItemDescObject->usItem ].singleshotrocketlauncher ) { + // DAMAGE + SetFontForeground( 6 ); + if(UsingEDBSystem() > 0) + mprintf( gWeaponStats[ 24 ].sX + gsInvDescX, gWeaponStats[ 24 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + else + mprintf( gWeaponStats[ 3 ].sX + gsInvDescX, gWeaponStats[ 3 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 4 ] ); + UINT8 ubImpact = GetDamage(gpItemDescObject); if ( ubImpact >= EXCEPTIONAL_DAMAGE) @@ -4055,34 +4179,33 @@ void RenderItemDescriptionBox( ) } //Damage - swprintf( pStr, L"%2d", ubImpact ); - FindFontRightCoordinates( (INT16)(gMapWeaponStats[ 4 ].sX + gsInvDescX + gMapWeaponStats[ 4 ].sValDx), (INT16)(gMapWeaponStats[ 4 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); - mprintf( usX, usY, pStr ); - } - - ubAttackAPs = BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], gpItemDescObject ); - - if (ubAttackAPs <= EXCEPTIONAL_AP_COST) - { - SetFontForeground( ITEMDESC_FONTHIGHLIGHT ); - } - else - { - SetFontForeground( 5 ); - } - - //Ap's - if ( !Weapon[gpItemDescObject->usItem].NoSemiAuto ) - { - swprintf( pStr, L"%2d", ubAttackAPs ); - FindFontRightCoordinates( (INT16)(gMapWeaponStats[ 5 ].sX + gsInvDescX + gMapWeaponStats[ 5 ].sValDx), (INT16)(gMapWeaponStats[ 5 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + swprintf( pStr, L"%2d", ubImpact ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 3 ].sX + gsInvDescX + gWeaponStats[ 3 ].sValDx), (INT16)(gWeaponStats[ 3 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); mprintf( usX, usY, pStr ); } - if (GetShotsPerBurst(gpItemDescObject) > 0) - { + if(UsingEDBSystem() > 0) + DrawWeaponValues(gpItemDescObject); + else + { + //LABELS + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 5 ].sX + gsInvDescX, gWeaponStats[ 5 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 6 ] ); + if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_GUN || Item[ gpItemDescObject->usItem ].usItemClass & IC_LAUNCHER) + { + // equals sign + if ( !Weapon[gpItemDescObject->usItem].NoSemiAuto ) + mprintf( gWeaponStats[ 7 ].sX + gsInvDescX, gWeaponStats[ 7 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 7 ] ); + } - if (GetShotsPerBurst(gpItemDescObject) >= EXCEPTIONAL_BURST_SIZE )//|| gpItemDescObject->usItem == G11) + if (GetShotsPerBurst(gpItemDescObject) > 0 || GetAutofireShotsPerFiveAPs(gpItemDescObject)>0) + { + mprintf( gWeaponStats[ 8 ].sX + gsInvDescX, gWeaponStats[ 8 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + } + + ubAttackAPs = BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], gpItemDescObject ); + + if (ubAttackAPs <= EXCEPTIONAL_AP_COST) { SetFontForeground( ITEMDESC_FONTHIGHLIGHT ); } @@ -4091,23 +4214,39 @@ void RenderItemDescriptionBox( ) SetFontForeground( 5 ); } - swprintf( pStr, L"%2d", ubAttackAPs + CalcAPsToBurst( APBPConstants[DEFAULT_APS], gpItemDescObject ) ); - FindFontRightCoordinates( (INT16)(gMapWeaponStats[ 6 ].sX + gsInvDescX + gMapWeaponStats[ 6 ].sValDx), (INT16)(gMapWeaponStats[ 6 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); - mprintf( usX, usY, pStr ); - } - else if (GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0) - { - - SetFontForeground( 5 ); - - swprintf( pStr, L"%2d", ubAttackAPs + CalcAPsToAutofire( APBPConstants[DEFAULT_APS], gpItemDescObject, 3 ) ); - FindFontRightCoordinates( (INT16)(gMapWeaponStats[ 6 ].sX + gsInvDescX + gMapWeaponStats[ 6 ].sValDx), (INT16)(gMapWeaponStats[ 6 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + //Ap's + if ( !Weapon[gpItemDescObject->usItem].NoSemiAuto ) + { + swprintf( pStr, L"%2d", ubAttackAPs ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 5 ].sX + gsInvDescX + gWeaponStats[ 5 ].sValDx), (INT16)(gWeaponStats[ 5 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); mprintf( usX, usY, pStr ); - } + } + + if (GetShotsPerBurst(gpItemDescObject) > 0) + { + if (GetShotsPerBurst(gpItemDescObject) >= EXCEPTIONAL_BURST_SIZE )//|| gpItemDescObject->usItem == G11) + { + SetFontForeground( ITEMDESC_FONTHIGHLIGHT ); + } + else + { + SetFontForeground( 5 ); + } + swprintf( pStr, L"%2d", ubAttackAPs + CalcAPsToBurst( APBPConstants[DEFAULT_APS], gpItemDescObject ) ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 6 ].sX + gsInvDescX + gWeaponStats[ 6 ].sValDx), (INT16)(gWeaponStats[ 6 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + } + else if (GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0) + { + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", ubAttackAPs + CalcAPsToAutofire( APBPConstants[DEFAULT_APS], gpItemDescObject, 3 ) ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 6 ].sX + gsInvDescX + gWeaponStats[ 6 ].sValDx), (INT16)(gWeaponStats[ 6 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + } + } } else if ( gpItemDescObject->usItem == MONEY ) { - SetFontForeground( FONT_FCOLOR_WHITE ); SetFontShadow( DEFAULT_SHADOW ); @@ -4133,14 +4272,14 @@ void RenderItemDescriptionBox( ) SetFontShadow( DEFAULT_SHADOW ); //Display the 'Removing' - mprintf( gMapMoneyStats[ 0 ].sX + gsInvDescX, gMapMoneyStats[ 0 ].sY + gsInvDescY, L"%s", gMoneyStatsDesc[ MONEY_DESC_AMOUNT ] ); + mprintf( gMoneyStats[ 0 ].sX + gsInvDescX, gMoneyStats[ 0 ].sY + gsInvDescY, L"%s", gMoneyStatsDesc[ MONEY_DESC_AMOUNT ] ); //Display the 'REmaining' - mprintf( gMapMoneyStats[ 2 ].sX + gsInvDescX, gMapMoneyStats[ 2 ].sY + gsInvDescY, L"%s", gMoneyStatsDesc[ MONEY_DESC_AMOUNT_2_SPLIT ] ); + mprintf( gMoneyStats[ 2 ].sX + gsInvDescX, gMoneyStats[ 2 ].sY + gsInvDescY, L"%s", gMoneyStatsDesc[ MONEY_DESC_AMOUNT_2_SPLIT ] ); //Display the 'Amt removing' - mprintf( gMapMoneyStats[ 1 ].sX + gsInvDescX, gMapMoneyStats[ 1 ].sY + gsInvDescY, L"%s", gMoneyStatsDesc[ MONEY_DESC_REMAINING ] ); + mprintf( gMoneyStats[ 1 ].sX + gsInvDescX, gMoneyStats[ 1 ].sY + gsInvDescY, L"%s", gMoneyStatsDesc[ MONEY_DESC_REMAINING ] ); //Display the 'REmaining amount' - mprintf( gMapMoneyStats[ 3 ].sX + gsInvDescX, gMapMoneyStats[ 3 ].sY + gsInvDescY, L"%s", gMoneyStatsDesc[ MONEY_DESC_TO_SPLIT ] ); + mprintf( gMoneyStats[ 3 ].sX + gsInvDescX, gMoneyStats[ 3 ].sY + gsInvDescY, L"%s", gMoneyStatsDesc[ MONEY_DESC_TO_SPLIT ] ); SetFontForeground( 5 ); @@ -4151,9 +4290,12 @@ void RenderItemDescriptionBox( ) swprintf( pStr, L"%ld", gRemoveMoney.uiMoneyRemaining ); InsertCommasForDollarFigure( pStr ); InsertDollarSignInToString( pStr ); - uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); - sStrX = gMapMoneyStats[ 1 ].sX + gsInvDescX + gMapMoneyStats[ 1 ].sValDx + ( uiRightLength - uiStringLength ); - mprintf( sStrX, gMapMoneyStats[ 1 ].sY + gsInvDescY, pStr ); + if(UsingEDBSystem() > 0) + FindFontRightCoordinates( (INT16)(gMoneyStats[ 4 ].sX + gsInvDescX + gMoneyStats[ 4 ].sValDx), (INT16)(gMoneyStats[ 4 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + else + FindFontRightCoordinates( (INT16)(gMoneyStats[ 1 ].sX + gsInvDescX + gMoneyStats[ 1 ].sValDx), (INT16)(gMoneyStats[ 1 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + mprintf( usX, usY, pStr ); // The money removing @@ -4161,16 +4303,19 @@ void RenderItemDescriptionBox( ) swprintf( pStr, L"%ld", gRemoveMoney.uiMoneyRemoving ); InsertCommasForDollarFigure( pStr ); InsertDollarSignInToString( pStr ); - uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); - sStrX = gMapMoneyStats[ 3 ].sX + gsInvDescX + gMapMoneyStats[ 3 ].sValDx + ( uiRightLength - uiStringLength ); - mprintf( sStrX, gMapMoneyStats[ 3 ].sY + gsInvDescY, pStr ); + if(UsingEDBSystem() > 0) + FindFontRightCoordinates( (INT16)(gMoneyStats[ 5 ].sX + gsInvDescX + gMoneyStats[ 5 ].sValDx), (INT16)(gMoneyStats[ 5 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + else + FindFontRightCoordinates( (INT16)(gMoneyStats[ 3 ].sX + gsInvDescX + gMoneyStats[ 3 ].sValDx), (INT16)(gMoneyStats[ 3 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); // print label for amount // SetFontForeground( ITEMDESC_FONTFORE1 ); -// mprintf( gMapMoneyStats[ 1 ].sX + gsInvDescX, gMapMoneyStats[ 1 ].sY + gsInvDescY, L"%s", gMapMoneyStats[ 1 ].zDesc ); - - +// if(UsingEDBSystem() > 0) +// mprintf( gMoneyStats[ 1 ].sX + gsInvDescX, gMoneyStats[ 1 ].sY + gsInvDescY, L"%s", gMoneyStats[ 1 ].zDesc ); +// else +// mprintf( gMoneyStats[ 1 ].sX + gsInvDescX, gMoneyStats[ 1 ].sY + gsInvDescY, L"%s", gMoneyStats[ 1 ].zDesc ); } else if ( Item[ gpItemDescObject->usItem ].usItemClass == IC_MONEY ) { @@ -4183,6 +4328,53 @@ void RenderItemDescriptionBox( ) sStrX = MAP_ITEMDESC_NAME_X + ( 245 - uiStringLength ); mprintf( sStrX, MAP_ITEMDESC_NAME_Y, pStr ); } + else if ( ( InKeyRingPopup() == TRUE ) || ( Item[ gpItemDescObject->usItem ].usItemClass & IC_KEY ) ) + { + SetFontForeground( 6 ); + + if(UsingEDBSystem() > 0) + { + // build description for keys .. the sector found + swprintf( pStr, L"%s", sKeyDescriptionStrings[ 0 ] ); + mprintf( gWeaponStats[ 2 ].sX + gsInvDescX, gWeaponStats[ 2 ].sY + gsInvDescY, pStr ); + swprintf( pStr, L"%s", sKeyDescriptionStrings[ 1 ] ); + mprintf( gWeaponStats[ 5 ].sX + gsInvDescX, gWeaponStats[ 5 ].sY + gsInvDescY, pStr ); + } + else + { + // build description for keys .. the sector found + swprintf( pStr, L"%s", sKeyDescriptionStrings[ 0 ] ); + mprintf( gWeaponStats[ 3 ].sX + gsInvDescX, gWeaponStats[ 3 ].sY + gsInvDescY, pStr ); + swprintf( pStr, L"%s", sKeyDescriptionStrings[ 1 ] ); + mprintf( gWeaponStats[ 5 ].sX + gsInvDescX, gWeaponStats[ 5 ].sY + gsInvDescY , pStr ); + } + + SetFontForeground( 5 ); + GetShortSectorString( ( INT16 ) SECTORX( KeyTable[ (*gpItemDescObject)[gubItemDescStatusIndex]->data.key.ubKeyID ].usSectorFound ), ( INT16 ) SECTORY( KeyTable[ (*gpItemDescObject)[gubItemDescStatusIndex]->data.key.ubKeyID ].usSectorFound ), sTempString ); + swprintf( pStr, L"%s", sTempString ); + if(UsingEDBSystem() > 0) + { + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ 15 ].sX + gsInvDescX + gMiscItemStatsEDB[ 15 ].sValDx), (INT16)(gMiscItemStatsEDB[ 15 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ 15 ].sY + gsInvDescY, pStr ); + } + else + { + FindFontRightCoordinates( (INT16)(gWeaponStats[ 3 ].sX + gsInvDescX ), (INT16)(gWeaponStats[ 3 ].sY + gsInvDescY ), 110 ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + } + + swprintf( pStr, L"%d", KeyTable[ (*gpItemDescObject)[gubItemDescStatusIndex]->data.key.ubKeyID ].usDateFound ); + if(UsingEDBSystem() > 0) + { + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ 18 ].sX + gsInvDescX + gMiscItemStatsEDB[ 18 ].sValDx), (INT16)(gMiscItemStatsEDB[ 18 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ 18 ].sY + gsInvDescY, pStr ); + } + else + { + FindFontRightCoordinates( (INT16)(gWeaponStats[ 5 ].sX + gsInvDescX ), (INT16)(gWeaponStats[ 5 ].sY + gsInvDescY ), 110 ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + } + } else { //Labels @@ -4193,75 +4385,42 @@ void RenderItemDescriptionBox( ) if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_AMMO ) { - mprintf( gMapWeaponStats[ 2 ].sX + gsInvDescX, gMapWeaponStats[ 2 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 2 ] ); - } - else - { - mprintf( gMapWeaponStats[ 1 ].sX + gsInvDescX, gMapWeaponStats[ 1 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 1 ] ); - } - swprintf( sTempString, gWeaponStatsDesc[ 0 ], GetWeightUnitString() ); - mprintf( gMapWeaponStats[ 0 ].sX + gsInvDescX, gMapWeaponStats[ 0 ].sY + gsInvDescY, sTempString ); + if(UsingEDBSystem() > 0) + DrawAmmoValues(gpItemDescObject,shotsLeft); + else + { + mprintf( gWeaponStats[ 0 ].sX + gsInvDescX, gWeaponStats[ 0 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 5 ] ); - // Values - SetFontForeground( 5 ); + // Values + SetFontForeground( 5 ); - - if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_AMMO ) - { - // Ammo + // Ammo swprintf( pStr, L"%d/%d", shotsLeft, 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); - mprintf( sStrX, gMapWeaponStats[ 2 ].sY + gsInvDescY, pStr ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 0 ].sX + gsInvDescX + gWeaponStats[ 0 ].sValDx+6), (INT16)(gWeaponStats[ 0 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 0 ].sY + gsInvDescY, pStr ); + } + } + else if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_EXPLOSV ) + { + if(UsingEDBSystem() > 0) + DrawExplosiveValues(gpItemDescObject); + } + else if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_ARMOUR ) + { + if(UsingEDBSystem() > 0) + DrawArmorValues(gpItemDescObject); } else { - //Status - swprintf( pStr, L"%2d%%", status); - uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); - // sStrX = gMapWeaponStats[ 1 ].sX + gsInvDescX + gMapWeaponStats[ 1 ].sValDx + ( uiRightLength - uiStringLength ); - FindFontRightCoordinates( (INT16)(gMapWeaponStats[ 1 ].sX + gsInvDescX + gMapWeaponStats[ 1 ].sValDx + 6), (INT16)(gMapWeaponStats[ 1 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); - wcscat( pStr, L"%%" ); - mprintf( sStrX, gMapWeaponStats[ 1 ].sY + gsInvDescY, pStr ); + if(UsingEDBSystem() > 0) + DrawMiscValues(gpItemDescObject); } - - //Weight - swprintf( pStr, L"%1.1f", fWeight ); - uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); -// sStrX = gMapWeaponStats[ 0 ].sX + gsInvDescX + gMapWeaponStats[ 0 ].sValDx + ( uiRightLength - uiStringLength ); - FindFontRightCoordinates( (INT16)(gMapWeaponStats[ 0 ].sX + gsInvDescX + gMapWeaponStats[ 0 ].sValDx+6), (INT16)(gMapWeaponStats[ 0 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); - mprintf( sStrX, gMapWeaponStats[ 0 ].sY + gsInvDescY, pStr ); - - if ( ( InKeyRingPopup() == TRUE ) || ( Item[ gpItemDescObject->usItem ].usItemClass & IC_KEY ) ) - { - SetFontForeground( 6 ); - - // build description for keys .. the sector found - swprintf( pStr, L"%s", sKeyDescriptionStrings[ 0 ] ); - mprintf( gMapWeaponStats[ 4 ].sX + gsInvDescX, gMapWeaponStats[ 4 ].sY + gsInvDescY, pStr ); - swprintf( pStr, L"%s", sKeyDescriptionStrings[ 1 ] ); - mprintf( gMapWeaponStats[ 4 ].sX + gsInvDescX, gMapWeaponStats[ 4 ].sY + gsInvDescY + GetFontHeight( BLOCKFONT ) + 2 , pStr ); - - - SetFontForeground( 5 ); - GetShortSectorString( ( INT16 ) SECTORX( KeyTable[ (*gpItemDescObject)[gubItemDescStatusIndex]->data.key.ubKeyID ].usSectorFound ), ( INT16 ) SECTORY( KeyTable[ (*gpItemDescObject)[gubItemDescStatusIndex]->data.key.ubKeyID ].usSectorFound ), sTempString ); - swprintf( pStr, L"%s", sTempString ); - FindFontRightCoordinates( (INT16)(gMapWeaponStats[ 4 ].sX + gsInvDescX ), (INT16)(gMapWeaponStats[ 4 ].sY + gsInvDescY ), 110 ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); - mprintf( usX, usY, pStr ); - - swprintf( pStr, L"%d", KeyTable[ (*gpItemDescObject)[gubItemDescStatusIndex]->data.key.ubKeyID ].usDateFound ); - FindFontRightCoordinates( (INT16)(gMapWeaponStats[ 4 ].sX + gsInvDescX ), (INT16)(gMapWeaponStats[ 4 ].sY + gsInvDescY + GetFontHeight( BLOCKFONT ) + 2 ), 110 ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); - mprintf( usX, usY, pStr ); - } - } - SetFontShadow( DEFAULT_SHADOW ); } else if ( gfInItemDescBox ) { - // TAKE A LOOK AT THE VIDEO OBJECT SIZE ( ONE OF TWO SIZES ) AND CENTER! GetVideoObject( &hVObject, guiItemGraphic ); pTrav = &(hVObject->pETRLEObject[ 0 ] ); @@ -4274,12 +4433,31 @@ void RenderItemDescriptionBox( ) // CHRISL: Determine if we're looking at an LBENODE and display alternate box graphic RenderBackpackButtons(1); /* CHRISL: Needed for new inventory backpack buttons */ + // HEADROCK EDB 1.3: added new STI for OIV/EDB Tactical + if(UsingNewInventorySystem() == false && iResolution != 0) //OIV + { + if (UsingEDBSystem() == 2) + { + if (Item[gpItemDescObject->usItem].usItemClass & (IC_WEAPON|IC_EXPLOSV|IC_AMMO|IC_ARMOUR|IC_PUNCH) && UsingEDBSystem() > 0 ) + showBox = 6; + else + showBox = 7; + + if(guiItemDescBoxBackground != 0) + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemDescBoxBackground, iResolution, SM_ITEMDESC_START_X, SM_ITEMDESC_START_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + } if((UsingNewInventorySystem() == true) && iResolution != 0) { if(gpItemDescObject->IsActiveLBE(gubItemDescStatusIndex)) showBox = gpItemDescObject->GetLBEPointer(gubItemDescStatusIndex)->lbeClass; else if(Item[gpItemDescObject->usItem].usItemClass == IC_LBEGEAR) showBox = LoadBearingEquipment[Item[gpItemDescObject->usItem].ubClassIndex].lbeClass; + else if (Item[gpItemDescObject->usItem].usItemClass & (IC_WEAPON|IC_EXPLOSV|IC_AMMO|IC_ARMOUR|IC_PUNCH) && UsingEDBSystem() > 0 ) + showBox = 5; + else + showBox = 0; + if(guiItemDescBoxBackground != 0) BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemDescBoxBackground, iResolution, SM_ITEMDESC_START_X, SM_ITEMDESC_START_Y, VO_BLT_SRCTRANSPARENCY, NULL ); } @@ -4329,11 +4507,10 @@ void RenderItemDescriptionBox( ) cnt = 0; for (attachmentList::iterator iter = (*gpItemDescObject)[gubItemDescStatusIndex]->attachments.begin(); iter != (*gpItemDescObject)[gubItemDescStatusIndex]->attachments.end(); ++iter, ++cnt) { + sCenX = (INT16)( gsInvDescX + gItemDescAttachmentsXY[cnt].sX + 5 ); sCenY = (INT16)( gsInvDescY + gItemDescAttachmentsXY[cnt].sY - 1 ); - INVRenderItem( guiSAVEBUFFER, NULL, gpItemDescObject, sCenX, sCenY, gItemDescAttachmentsXY[cnt].sWidth, gItemDescAttachmentsXY[cnt].sHeight, DIRTYLEVEL2, NULL, (UINT8)(RENDER_ITEM_ATTACHMENT1 + cnt), FALSE, 0, gubItemDescStatusIndex ); - sCenX = sCenX - gItemDescAttachmentsXY[cnt].sBarDx; sCenY = sCenY + gItemDescAttachmentsXY[cnt].sBarDy; DrawItemUIBarEx( gpItemDescObject, (UINT8)(DRAW_ITEM_STATUS_ATTACHMENT1 + cnt), sCenX, sCenY, ITEM_BAR_WIDTH, ITEM_BAR_HEIGHT, Get16BPPColor( STATUS_BAR ), Get16BPPColor( STATUS_BAR_SHADOW ), TRUE , guiSAVEBUFFER, gubItemDescStatusIndex ); @@ -4357,31 +4534,61 @@ void RenderItemDescriptionBox( ) } } - if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_GUN || Item[ gpItemDescObject->usItem ].usItemClass & IC_LAUNCHER ) + //HEADROCK/CHRISL: This condition needs to run differently depending on whether EDB is active of not + if(UsingEDBSystem() > 0) { - // display bullets for ROF - if ( !Weapon[gpItemDescObject->usItem].NoSemiAuto ) - BltVideoObjectFromIndex( guiSAVEBUFFER, guiBullet, 0, BULLET_SING_X, BULLET_SING_Y, VO_BLT_SRCTRANSPARENCY, NULL ); - - if (GetShotsPerBurst(gpItemDescObject) > 0) + if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_WEAPON || Item[ gpItemDescObject->usItem ].usItemClass & IC_PUNCH ) { - for ( cnt = 0; cnt < __min(GetShotsPerBurst(gpItemDescObject),12); cnt++ ) - { - BltVideoObjectFromIndex( guiSAVEBUFFER, guiBullet, 0, BULLET_BURST_X + cnt * (BULLET_WIDTH/2 + 1), BULLET_BURST_Y, VO_BLT_SRCTRANSPARENCY, NULL ); - } + DrawWeaponStats(gpItemDescObject); } - else if ( GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0 ) + else if ( Item[ gpItemDescObject->usItem ].usItemClass == IC_AMMO ) { - for ( cnt = 0; cnt < 10; cnt++ ) - { - BltVideoObjectFromIndex( guiSAVEBUFFER, guiBullet, 0, BULLET_BURST_X + cnt * (BULLET_WIDTH/2 + 1), BULLET_BURST_Y, VO_BLT_SRCTRANSPARENCY, NULL ); - } + DrawAmmoStats(gpItemDescObject); } + else if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_EXPLOSV ) + { + DrawExplosiveStats(gpItemDescObject); + } + else if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_ARMOUR ) + { + DrawArmorStats(gpItemDescObject); + } + else + { + DrawMiscStats(gpItemDescObject); + } + } + else + { + if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_GUN || Item[ gpItemDescObject->usItem ].usItemClass & IC_LAUNCHER ) + { + // display bullets for ROF + if ( !Weapon[gpItemDescObject->usItem].NoSemiAuto ) + BltVideoObjectFromIndex( guiSAVEBUFFER, guiBullet, 0, BULLET_SING_X, BULLET_SING_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + if (GetShotsPerBurst(gpItemDescObject) > 0) + { + for ( cnt = 0; cnt < __min(GetShotsPerBurst(gpItemDescObject),12); cnt++ ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiBullet, 0, BULLET_BURST_X + cnt * (BULLET_WIDTH/2 + 1), BULLET_BURST_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + } + else if ( GetAutofireShotsPerFiveAPs(gpItemDescObject) > 0 ) + { + for ( cnt = 0; cnt < 10; cnt++ ) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiBullet, 0, BULLET_BURST_X + cnt * (BULLET_WIDTH/2 + 1), BULLET_BURST_Y, VO_BLT_SRCTRANSPARENCY, NULL ); + } + } + + } } if(guiCurrentItemDescriptionScreen == SHOPKEEPER_SCREEN) - RestoreExternBackgroundRect( gsInvDescX, gsInvDescY, 320, 135 ); + { + RestoreExternBackgroundRect( gsInvDescX, gsInvDescY, ITEMDESC_WIDTH, ITEMDESC_HEIGHT ); + //RestoreExternBackgroundRect( gsInvDescX, gsInvDescY, 320, 135 ); + } else RestoreExternBackgroundRect( SM_ITEMDESC_START_X, SM_ITEMDESC_START_Y, ITEMDESC_WIDTH, ITEMDESC_HEIGHT ); @@ -4406,8 +4613,7 @@ void RenderItemDescriptionBox( ) mprintf( ITEMDESC_NAME_X, ITEMDESC_NAME_Y, L"%s", gzItemName ); #endif - // Render caliber and description - + // Render "normal" item data SetFontForeground( FONT_BLACK ); SetFontShadow( ITEMDESC_FONTSHADOW2 ); @@ -4432,85 +4638,94 @@ void RenderItemDescriptionBox( ) SetFontShadow( ITEMDESC_FONTSHADOW3 ); mprintf( (INT16)ITEMDESC_PROS_START_X, (INT16)ITEMDESC_PROS_START_Y, gzProsLabel ); - sProsConsIndent = __max( StringPixLength( gzProsLabel, ITEMDESC_FONT ), StringPixLength( gzConsLabel, ITEMDESC_FONT ) ) + 10; - - gzItemPros[0] = 0; - GenerateProsString( gzItemPros, gpItemDescObject, ITEMDESC_DESC_WIDTH - sProsConsIndent - StringPixLength( DOTDOTDOT, ITEMDESC_FONT ) ); - if (gzItemPros[0] != 0) + // HEADROCK: Disabled PROs/CONs text for OIV EDB Tactical + if (UsingEDBSystem() != 2) { - SetFontForeground( FONT_BLACK ); - SetFontShadow( ITEMDESC_FONTSHADOW2 ); - DisplayWrappedString( (INT16)(ITEMDESC_PROS_START_X + sProsConsIndent), (INT16)ITEMDESC_PROS_START_Y, (INT16)(ITEMDESC_DESC_WIDTH - sProsConsIndent), 2, ITEMDESC_FONT, FONT_BLACK, gzItemPros, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED ); + sProsConsIndent = __max( StringPixLength( gzProsLabel, ITEMDESC_FONT ), StringPixLength( gzConsLabel, ITEMDESC_FONT ) ) + 10; + + gzItemPros[0] = 0; + GenerateProsString( gzItemPros, gpItemDescObject, ITEMDESC_DESC_WIDTH - sProsConsIndent - StringPixLength( DOTDOTDOT, ITEMDESC_FONT ) ); + if (gzItemPros[0] != 0) + { + SetFontForeground( FONT_BLACK ); + SetFontShadow( ITEMDESC_FONTSHADOW2 ); + DisplayWrappedString( (INT16)(ITEMDESC_PROS_START_X + sProsConsIndent), (INT16)ITEMDESC_PROS_START_Y, (INT16)(ITEMDESC_DESC_WIDTH - sProsConsIndent), 2, ITEMDESC_FONT, FONT_BLACK, gzItemPros, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED ); + } } SetFontForeground( FONT_MCOLOR_DKWHITE2 ); SetFontShadow( ITEMDESC_FONTSHADOW3 ); mprintf( (INT16)ITEMDESC_CONS_START_X, (INT16)ITEMDESC_CONS_START_Y, gzConsLabel ); - - GenerateConsString( gzItemCons, gpItemDescObject, ITEMDESC_DESC_WIDTH - sProsConsIndent - StringPixLength( DOTDOTDOT, ITEMDESC_FONT ) ); - if (gzItemCons[0] != 0) + if (UsingEDBSystem() != 2) { - SetFontForeground( FONT_BLACK ); - SetFontShadow( ITEMDESC_FONTSHADOW2 ); - DisplayWrappedString( (INT16)(ITEMDESC_CONS_START_X + sProsConsIndent), (INT16)ITEMDESC_CONS_START_Y, (INT16)(ITEMDESC_DESC_WIDTH - sProsConsIndent), 2, ITEMDESC_FONT, FONT_BLACK, gzItemCons, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED); + GenerateConsString( gzItemCons, gpItemDescObject, ITEMDESC_DESC_WIDTH - sProsConsIndent - StringPixLength( DOTDOTDOT, ITEMDESC_FONT ) ); + if (gzItemCons[0] != 0) + { + SetFontForeground( FONT_BLACK ); + SetFontShadow( ITEMDESC_FONTSHADOW2 ); + DisplayWrappedString( (INT16)(ITEMDESC_CONS_START_X + sProsConsIndent), (INT16)ITEMDESC_CONS_START_Y, (INT16)(ITEMDESC_DESC_WIDTH - sProsConsIndent), 2, ITEMDESC_FONT, FONT_BLACK, gzItemCons, FONT_MCOLOR_BLACK, FALSE, LEFT_JUSTIFIED); + } } - - } // Get length of string uiRightLength=35; - // Calculate total weight of item and attachments - fWeight = gpItemDescObject->GetWeightOfObjectInStack(gubItemDescStatusIndex) / 10.0f; + ////////////////////////////////////////////////////////////////////////////// + // DATA VALUES + // This segment combines the printing of "equals" signs and actual characteristic + // data for each characterstic displayed. Labels are no longer used for most data, + // they are replaced by icons, which have already been blitted above. + ////////////////////////////////////////////////////////////////////////////// - if ( !gGameSettings.fOptions[ TOPTION_USE_METRIC_SYSTEM ] ) // metric units not enabled + // We begin by printing out data for ALL items, namely status and weight. + + SetFont( BLOCKFONT2 ); + SetFontForeground( 6 ); + SetFontShadow( DEFAULT_SHADOW ); + + // For ammo, capacity replaces status. Money and Keys do not get a status display at all. + if ( Item[ gpItemDescObject->usItem ].usItemClass != IC_AMMO && Item[ gpItemDescObject->usItem ].usItemClass != IC_MONEY ) { - fWeight = fWeight * 2.2f; + // STATUS + // label + mprintf( gWeaponStats[ 0 ].sX + gsInvDescX, gWeaponStats[ 0 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 0 ] ); + SetFontForeground( 5 ); + // print value + // This is gross, but to get the % to work out right... + swprintf( pStr, L"%2d%%", status); + if (UsingEDBSystem() == 2) + { + FindFontRightCoordinates( (INT16)(gWeaponStats[ 0 ].sX + gsInvDescX + gWeaponStats[ 0 ].sValDx), (INT16)(gWeaponStats[ 0 ].sY + gsInvDescY + 12), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + } + else + { + FindFontRightCoordinates( (INT16)(gWeaponStats[ 0 ].sX + gsInvDescX + gWeaponStats[ 0 ].sValDx), (INT16)(gWeaponStats[ 0 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + } + wcscat( pStr, L"%%" ); + mprintf( usX, usY, pStr ); } - if ( fWeight < 0.1 && gubItemDescStatusIndex < gpItemDescObject->ubNumberOfObjects ) + if(Item[ gpItemDescObject->usItem ].usItemClass != IC_MONEY) { - fWeight = 0.1f; - } - - // Render, stat name - if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_WEAPON ) - { - - SetFont( BLOCKFONT2 ); + // WEIGHT SetFontForeground( 6 ); - SetFontShadow( DEFAULT_SHADOW ); + swprintf( sTempString, gWeaponStatsDesc[ 1 ], GetWeightUnitString() ); + mprintf( gWeaponStats[ 1 ].sX + gsInvDescX, gWeaponStats[ 1 ].sY + gsInvDescY, sTempString ); - //LABELS - swprintf( sTempString, gWeaponStatsDesc[ 0 ], GetWeightUnitString() ); - mprintf( gWeaponStats[ 0 ].sX + gsInvDescX, gWeaponStats[ 0 ].sY + gsInvDescY, sTempString ); -// mprintf( gWeaponStats[ 1 ].sX + gsInvDescX, gWeaponStats[ 1 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 1 ].zDesc ); -// mprintf( gWeaponStats[ 2 ].sX + gsInvDescX, gWeaponStats[ 2 ].sY + gsInvDescY, L"%s", gWeaponStats[ 2 ].zDesc ); - if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN | IC_LAUNCHER ) ) + // Calculate total weight of item and attachments + fWeight = gpItemDescObject->GetWeightOfObjectInStack(gubItemDescStatusIndex) / 10.0f; + if ( !gGameSettings.fOptions[ TOPTION_USE_METRIC_SYSTEM ] ) // metric units not enabled { - mprintf( gWeaponStats[ 3 ].sX + gsInvDescX, gWeaponStats[ 3 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 3 ] ); + fWeight = fWeight * 2.2f; } - if ( !(Item[ gpItemDescObject->usItem ].usItemClass & IC_LAUNCHER) && !Item[gpItemDescObject->usItem].rocketlauncher ) + if ( fWeight < 0.1 && gubItemDescStatusIndex < gpItemDescObject->ubNumberOfObjects ) { - mprintf( gWeaponStats[ 4 ].sX + gsInvDescX, gWeaponStats[ 4 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 4 ] ); + fWeight = 0.1f; } - mprintf( gWeaponStats[ 5 ].sX + gsInvDescX, gWeaponStats[ 5 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 5 ] ); - if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_GUN || Item[ gpItemDescObject->usItem ].usItemClass & IC_LAUNCHER ) - { - if ( !Weapon[gpItemDescObject->usItem].NoSemiAuto ) - mprintf( gWeaponStats[ 7 ].sX + gsInvDescX, gWeaponStats[ 7 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 7 ] ); - } - mprintf( gWeaponStats[ 1 ].sX + gsInvDescX, gWeaponStats[ 1 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 1 ] ); - - if (GetShotsPerBurst(gpItemDescObject) > 0 || GetAutofireShotsPerFiveAPs(gpItemDescObject)) - { - mprintf( gWeaponStats[ 8 ].sX + gsInvDescX, gWeaponStats[ 8 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); - } - // Values - if (fWeight <= (EXCEPTIONAL_WEIGHT / 10)) + if (fWeight <= (EXCEPTIONAL_WEIGHT / 10) && Item[ gpItemDescObject->usItem ].usItemClass & IC_WEAPON ) { SetFontForeground( ITEMDESC_FONTHIGHLIGHT ); } @@ -4518,20 +4733,33 @@ void RenderItemDescriptionBox( ) { SetFontForeground( 5 ); } - - //Status - swprintf( pStr, L"%2d%%", (*gpItemDescObject)[gubItemDescStatusIndex]->data.gun.bGunStatus ); - FindFontRightCoordinates( (INT16)(gWeaponStats[ 1 ].sX + gsInvDescX + gWeaponStats[ 1 ].sValDx), (INT16)(gWeaponStats[ 1 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); - wcscat( pStr, L"%%" ); - mprintf( usX, usY, pStr ); - //Wieght swprintf( pStr, L"%1.1f", fWeight ); - FindFontRightCoordinates( (INT16)(gWeaponStats[ 0 ].sX + gsInvDescX + gWeaponStats[ 0 ].sValDx), (INT16)(gWeaponStats[ 0 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); - mprintf( usX, usY, pStr ); - - if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN | IC_LAUNCHER) ) + if (UsingEDBSystem() == 2) { + FindFontRightCoordinates( (INT16)(gWeaponStats[ 1 ].sX + gsInvDescX + gWeaponStats[ 1 ].sValDx), (INT16)(gWeaponStats[ 1 ].sY + gsInvDescY + 12 ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + } + else + { + FindFontRightCoordinates( (INT16)(gWeaponStats[ 1 ].sX + gsInvDescX + gWeaponStats[ 1 ].sValDx), (INT16)(gWeaponStats[ 1 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + } + mprintf( usX, usY, pStr ); + } + + ///////////////////////////////////////// + // BEGIN WEAPONS-SPECIFIC CHARACTERISTICS + ///////////////////////////////////////// + if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_WEAPON || Item[ gpItemDescObject->usItem ].usItemClass & IC_PUNCH ) + { + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_LAUNCHER|IC_THROWING_KNIFE) ) + { + // RANGE + SetFontForeground( 6 ); + if(UsingEDBSystem() > 0) + mprintf( gWeaponStats[ 23 ].sX + gsInvDescX, gWeaponStats[ 23 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + else + mprintf( gWeaponStats[ 2 ].sX + gsInvDescX, gWeaponStats[ 2 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 3 ] ); + if ( GunRange( gpItemDescObject ) >= EXCEPTIONAL_RANGE) { SetFontForeground( ITEMDESC_FONTHIGHLIGHT ); @@ -4540,15 +4768,21 @@ void RenderItemDescriptionBox( ) { SetFontForeground( 5 ); } - - swprintf( pStr, L"%2d", ( GunRange( gpItemDescObject ) ) / 10 ); - FindFontRightCoordinates( (INT16)(gWeaponStats[ 3 ].sX + gsInvDescX + gWeaponStats[ 3 ].sValDx), (INT16)(gWeaponStats[ 3 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + swprintf( pStr, L"%2d", ( GunRange( gpItemDescObject ) ) / 10 ); + 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 ); } - - if ( !(Item[ gpItemDescObject->usItem ].usItemClass & IC_LAUNCHER) && !Item[gpItemDescObject->usItem].rocketlauncher ) + if ( Item[ gpItemDescObject->usItem ].usItemClass & (IC_GUN|IC_PUNCH|IC_BLADE|IC_THROWING_KNIFE) && !Item[ gpItemDescObject->usItem ].singleshotrocketlauncher ) { + // DAMAGE + SetFontForeground( 6 ); + if(UsingEDBSystem() > 0) + mprintf( gWeaponStats[ 24 ].sX + gsInvDescX, gWeaponStats[ 24 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + else + mprintf( gWeaponStats[ 3 ].sX + gsInvDescX, gWeaponStats[ 3 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 4 ] ); + UINT8 ubImpact = GetDamage(gpItemDescObject); + if ( ubImpact >= EXCEPTIONAL_DAMAGE) { SetFontForeground( ITEMDESC_FONTHIGHLIGHT ); @@ -4558,32 +4792,33 @@ void RenderItemDescriptionBox( ) SetFontForeground( 5 ); } + //Damage swprintf( pStr, L"%2d", ubImpact ); - FindFontRightCoordinates( (INT16)(gWeaponStats[ 4 ].sX + gsInvDescX + gWeaponStats[ 4 ].sValDx), (INT16)(gWeaponStats[ 4 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 3 ].sX + gsInvDescX + gWeaponStats[ 3 ].sValDx), (INT16)(gWeaponStats[ 3 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); mprintf( usX, usY, pStr ); } - ubAttackAPs = BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], gpItemDescObject ); - - if (ubAttackAPs <= EXCEPTIONAL_AP_COST) - { - SetFontForeground( ITEMDESC_FONTHIGHLIGHT ); - } + if(UsingEDBSystem() > 0) + DrawWeaponValues(gpItemDescObject); else { - SetFontForeground( 5 ); - } + //LABELS + SetFontForeground( 6 ); + mprintf( gWeaponStats[ 5 ].sX + gsInvDescX, gWeaponStats[ 5 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 6 ] ); + if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_GUN || Item[ gpItemDescObject->usItem ].usItemClass & IC_LAUNCHER ) + { + if ( !Weapon[gpItemDescObject->usItem].NoSemiAuto ) + mprintf( gWeaponStats[ 7 ].sX + gsInvDescX, gWeaponStats[ 7 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 7 ] ); + } - if ( !Weapon[gpItemDescObject->usItem].NoSemiAuto ) - { - swprintf( pStr, L"%2d", ubAttackAPs ); - FindFontRightCoordinates( (INT16)(gWeaponStats[ 5 ].sX + gsInvDescX + gWeaponStats[ 5 ].sValDx), (INT16)(gWeaponStats[ 5 ].sY + gsInvDescY ), ITEM_STATS_WIDTH, ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); - mprintf( usX, usY, pStr ); - } + if (GetShotsPerBurst(gpItemDescObject) > 0 || GetAutofireShotsPerFiveAPs(gpItemDescObject)) + { + mprintf( gWeaponStats[ 8 ].sX + gsInvDescX, gWeaponStats[ 8 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 8 ] ); + } - if (GetShotsPerBurst(gpItemDescObject)> 0) - { - if (GetShotsPerBurst(gpItemDescObject) >= EXCEPTIONAL_BURST_SIZE )//|| gpItemDescObject->usItem == G11) + ubAttackAPs = BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], gpItemDescObject ); + + if (ubAttackAPs <= EXCEPTIONAL_AP_COST) { SetFontForeground( ITEMDESC_FONTHIGHLIGHT ); } @@ -4592,25 +4827,42 @@ void RenderItemDescriptionBox( ) SetFontForeground( 5 ); } - swprintf( pStr, L"%2d", ubAttackAPs + CalcAPsToBurst( APBPConstants[DEFAULT_APS], gpItemDescObject ) ); - FindFontRightCoordinates( (INT16)(gWeaponStats[ 6 ].sX + gsInvDescX + gWeaponStats[ 6 ].sValDx), (INT16)(gWeaponStats[ 6 ].sY + gsInvDescY ), ITEM_STATS_WIDTH, ITEM_STATS_HEIGHT, pStr, BLOCKFONT2, &usX, &usY ); - mprintf( usX, usY, pStr ); - } - else if (GetAutofireShotsPerFiveAPs(gpItemDescObject)> 0) - { - SetFontForeground( 5 ); - swprintf( pStr, L"%2d", ubAttackAPs + CalcAPsToBurst( APBPConstants[DEFAULT_APS], gpItemDescObject ) ); - FindFontRightCoordinates( (INT16)(gWeaponStats[ 6 ].sX + gsInvDescX + gWeaponStats[ 6 ].sValDx), (INT16)(gWeaponStats[ 6 ].sY + gsInvDescY ), ITEM_STATS_WIDTH, ITEM_STATS_HEIGHT, pStr, BLOCKFONT2, &usX, &usY ); - mprintf( usX, usY, pStr ); - } + if ( !Weapon[gpItemDescObject->usItem].NoSemiAuto ) + { + swprintf( pStr, L"%2d", ubAttackAPs ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 5 ].sX + gsInvDescX + gWeaponStats[ 5 ].sValDx), (INT16)(gWeaponStats[ 5 ].sY + gsInvDescY ), ITEM_STATS_WIDTH, ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + } + if (GetShotsPerBurst(gpItemDescObject)> 0) + { + if (GetShotsPerBurst(gpItemDescObject) >= EXCEPTIONAL_BURST_SIZE )//|| gpItemDescObject->usItem == G11) + { + SetFontForeground( ITEMDESC_FONTHIGHLIGHT ); + } + else + { + SetFontForeground( 5 ); + } + + swprintf( pStr, L"%2d", ubAttackAPs + CalcAPsToBurst( APBPConstants[DEFAULT_APS], gpItemDescObject ) ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 6 ].sX + gsInvDescX + gWeaponStats[ 6 ].sValDx), (INT16)(gWeaponStats[ 6 ].sY + gsInvDescY ), ITEM_STATS_WIDTH, ITEM_STATS_HEIGHT, pStr, BLOCKFONT2, &usX, &usY ); + mprintf( usX, usY, pStr ); + } + else if (GetAutofireShotsPerFiveAPs(gpItemDescObject)> 0) + { + SetFontForeground( 5 ); + swprintf( pStr, L"%2d", ubAttackAPs + CalcAPsToBurst( APBPConstants[DEFAULT_APS], gpItemDescObject ) ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 6 ].sX + gsInvDescX + gWeaponStats[ 6 ].sValDx), (INT16)(gWeaponStats[ 6 ].sY + gsInvDescY ), ITEM_STATS_WIDTH, ITEM_STATS_HEIGHT, pStr, BLOCKFONT2, &usX, &usY ); + mprintf( usX, usY, pStr ); + } + } } else if ( gpItemDescObject->usItem == MONEY ) { //Labels SetFont( BLOCKFONT2 ); SetFontShadow( DEFAULT_SHADOW ); - SetFontForeground( 6 ); //Display the 'Seperate text' @@ -4621,7 +4873,6 @@ void RenderItemDescriptionBox( ) else mprintf( (UINT16)(gMoneyButtonLoc.x + gMoneyButtonOffsets[4].x), (UINT16)(gMoneyButtonLoc.y + gMoneyButtonOffsets[4].y), gzMoneyAmounts[4] ); - // if the player is taking money from their account if( gfAddingMoneyToMercFromPlayersAccount ) { @@ -4638,14 +4889,6 @@ void RenderItemDescriptionBox( ) mprintf( gMoneyStats[ 2 ].sX + gsInvDescX, gMoneyStats[ 2 ].sY + gsInvDescY, L"%s", gMoneyStatsDesc[ 2 ] ); } - // Total Amount - SetFontForeground( FONT_WHITE ); - swprintf( pStr, L"%d", gRemoveMoney.uiTotalAmount ); - InsertCommasForDollarFigure( pStr ); - InsertDollarSignInToString( pStr ); - FindFontRightCoordinates( (INT16)(ITEMDESC_NAME_X), (INT16)(ITEMDESC_NAME_Y ), 295,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); - mprintf( usX, usY, pStr ); - SetFontForeground( 6 ); // if the player is taking money from their account @@ -4664,8 +4907,6 @@ void RenderItemDescriptionBox( ) mprintf( gMoneyStats[ 3 ].sX + gsInvDescX, gMoneyStats[ 3 ].sY + gsInvDescY, L"%s", gMoneyStatsDesc[ 3 ] ); } - - // Values SetFontForeground( 5 ); @@ -4682,7 +4923,6 @@ void RenderItemDescriptionBox( ) InsertDollarSignInToString( pStr ); FindFontRightCoordinates( (INT16)(gMoneyStats[ 3 ].sX + gsInvDescX + gMoneyStats[ 3 ].sValDx), (INT16)(gMoneyStats[ 3 ].sY + gsInvDescY), (UINT16)(ITEM_STATS_WIDTH-3) ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); mprintf( usX, usY, pStr ); - } else if ( Item[ gpItemDescObject->usItem ].usItemClass == IC_MONEY ) { @@ -4692,9 +4932,82 @@ void RenderItemDescriptionBox( ) InsertCommasForDollarFigure( pStr ); InsertDollarSignInToString( pStr ); - FindFontRightCoordinates( (INT16)(ITEMDESC_NAME_X), (INT16)(ITEMDESC_NAME_Y ), 295,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + if ( UsingEDBSystem() == 2 ) + { + FindFontRightCoordinates( (INT16) ITEMDESC_CALIBER_X, (INT16) ITEMDESC_CALIBER_Y, ITEMDESC_CALIBER_WIDTH, ITEM_STATS_HEIGHT, pStr, ITEMDESC_FONT, &usX, &usY); + } + else + { + FindFontRightCoordinates( (INT16)(ITEMDESC_NAME_X), (INT16)(ITEMDESC_NAME_Y ), 295,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + } mprintf( usX, usY, pStr ); } + else if( ( InKeyRingPopup() == TRUE ) || ( Item[ gpItemDescObject->usItem ].usItemClass & IC_KEY ) ) + { + SetFontForeground( 6 ); + + if(UsingEDBSystem() > 0) + { + // build description for keys .. the sector found + swprintf( pStr, L"%s", sKeyDescriptionStrings[ 0 ] ); + mprintf( gWeaponStats[ 2 ].sX + gsInvDescX, gWeaponStats[ 2 ].sY + gsInvDescY, pStr ); + swprintf( pStr, L"%s", sKeyDescriptionStrings[ 1 ] ); + if (UsingEDBSystem() == 1) + mprintf( gWeaponStats[ 5 ].sX + gsInvDescX, gWeaponStats[ 5 ].sY + gsInvDescY, pStr ); + else if (UsingEDBSystem() == 2) + mprintf( gWeaponStats[ 6 ].sX + gsInvDescX, gWeaponStats[ 6 ].sY + gsInvDescY, pStr ); + } + else + { + // build description for keys .. the sector found + swprintf( pStr, L"%s", sKeyDescriptionStrings[ 0 ] ); + mprintf( gWeaponStats[ 3 ].sX + gsInvDescX, gWeaponStats[ 3 ].sY + gsInvDescY, pStr ); + swprintf( pStr, L"%s", sKeyDescriptionStrings[ 1 ] ); + mprintf( gWeaponStats[ 5 ].sX + gsInvDescX, gWeaponStats[ 5 ].sY + gsInvDescY , pStr ); + } + + SetFontForeground( 5 ); + GetShortSectorString( ( INT16 ) SECTORX( KeyTable[ (*gpItemDescObject)[gubItemDescStatusIndex]->data.key.ubKeyID ].usSectorFound ), ( INT16 ) SECTORY( KeyTable[ (*gpItemDescObject)[gubItemDescStatusIndex]->data.key.ubKeyID ].usSectorFound ), sTempString ); + swprintf( pStr, L"%s", sTempString ); + if(UsingEDBSystem() > 0) + { + if (UsingEDBSystem() == 1) + { + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ 12 ].sX + gsInvDescX + gMiscItemStatsEDB[ 12 ].sValDx), (INT16)(gMiscItemStatsEDB[ 12 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ 12 ].sY + gsInvDescY, pStr ); + } + else if (UsingEDBSystem() == 2) + { + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ 13 ].sX + gsInvDescX + gMiscItemStatsEDB[ 13 ].sValDx), (INT16)(gMiscItemStatsEDB[ 13 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ 13 ].sY + gsInvDescY, pStr ); + } + } + else + { + FindFontRightCoordinates( (INT16)(gWeaponStats[ 3 ].sX + gsInvDescX ), (INT16)(gWeaponStats[ 3 ].sY + gsInvDescY ), 110 ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + } + + swprintf( pStr, L"%d", KeyTable[ (*gpItemDescObject)[gubItemDescStatusIndex]->data.key.ubKeyID ].usDateFound ); + if(UsingEDBSystem() > 0) + { + if (UsingEDBSystem() == 1) + { + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ 15 ].sX + gsInvDescX + gMiscItemStatsEDB[ 15 ].sValDx), (INT16)(gMiscItemStatsEDB[ 13 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ 15 ].sY + gsInvDescY, pStr ); + } + else if (UsingEDBSystem() == 2) + { + FindFontRightCoordinates( (INT16)(gMiscItemStatsEDB[ 17 ].sX + gsInvDescX + gMiscItemStatsEDB[ 17 ].sValDx), (INT16)(gMiscItemStatsEDB[ 17 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gMiscItemStatsEDB[ 17 ].sY + gsInvDescY, pStr ); + } + } + else + { + FindFontRightCoordinates( (INT16)(gWeaponStats[ 5 ].sX + gsInvDescX ), (INT16)(gWeaponStats[ 5 ].sY + gsInvDescY ), 110 ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); + mprintf( usX, usY, pStr ); + } + } else { //Labels @@ -4702,70 +5015,39 @@ void RenderItemDescriptionBox( ) SetFontForeground( 6 ); SetFontShadow( DEFAULT_SHADOW ); - if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_AMMO ) { - //Status - mprintf( gWeaponStats[ 2 ].sX + gsInvDescX, gWeaponStats[ 2 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 2 ] ); + if(UsingEDBSystem() > 0) + DrawAmmoValues(gpItemDescObject,shotsLeft); + else + { + mprintf( gWeaponStats[ 0 ].sX + gsInvDescX, gWeaponStats[ 0 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 5 ] ); + + // Values + SetFontForeground( 5 ); + + // Ammo + swprintf( pStr, L"%d/%d", shotsLeft, Magazine[ Item[ gpItemDescObject->usItem ].ubClassIndex ].ubMagSize ); //Pulmu: Correct # of rounds for stacked ammo. + uiStringLength=StringPixLength(pStr, ITEMDESC_FONT ); + FindFontRightCoordinates( (INT16)(gWeaponStats[ 0 ].sX + gsInvDescX + gWeaponStats[ 0 ].sValDx+6), (INT16)(gWeaponStats[ 0 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &sStrX, &usY); + mprintf( sStrX, gWeaponStats[ 0 ].sY + gsInvDescY, pStr ); + } + } + else if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_EXPLOSV ) + { + if(UsingEDBSystem() > 0) + DrawExplosiveValues(gpItemDescObject); + } + else if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_ARMOUR ) + { + if(UsingEDBSystem() > 0) + DrawArmorValues(gpItemDescObject); } else { - mprintf( gWeaponStats[ 1 ].sX + gsInvDescX, gWeaponStats[ 1 ].sY + gsInvDescY, L"%s", gWeaponStatsDesc[ 1 ] ); + if(UsingEDBSystem() > 0) + DrawMiscValues(gpItemDescObject); } - - //Weight - swprintf( sTempString, gWeaponStatsDesc[ 0 ], GetWeightUnitString() ); - mprintf( gWeaponStats[ 0 ].sX + gsInvDescX, gWeaponStats[ 0 ].sY + gsInvDescY, sTempString ); - - // Values - SetFontForeground( 5 ); - - if ( Item[ gpItemDescObject->usItem ].usItemClass & IC_AMMO ) - { - // Ammo - print amount - //Status - swprintf( pStr, L"%d/%d", shotsLeft, 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 ); - } - else - { - //Status - swprintf( pStr, L"%2d%%", status ); - FindFontRightCoordinates( (INT16)(gWeaponStats[ 1 ].sX + gsInvDescX + gWeaponStats[ 1 ].sValDx), (INT16)(gWeaponStats[ 1 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); - wcscat( pStr, L"%%" ); - mprintf( usX, usY, pStr ); - } - - if( ( InKeyRingPopup() == TRUE ) || ( Item[ gpItemDescObject->usItem ].usItemClass & IC_KEY ) ) - { - SetFontForeground( 6 ); - - // build description for keys .. the sector found - swprintf( pStr, L"%s", sKeyDescriptionStrings[ 0 ] ); - mprintf( gWeaponStats[ 4 ].sX + gsInvDescX, gWeaponStats[ 4 ].sY + gsInvDescY, pStr ); - swprintf( pStr, L"%s", sKeyDescriptionStrings[ 1 ] ); - mprintf( gWeaponStats[ 4 ].sX + gsInvDescX, gWeaponStats[ 4 ].sY + gsInvDescY + GetFontHeight( BLOCKFONT ) + 2 , pStr ); - - - SetFontForeground( 5 ); - GetShortSectorString( ( INT16 ) SECTORX( KeyTable[ (*gpItemDescObject)[gubItemDescStatusIndex]->data.key.ubKeyID ].usSectorFound ), ( INT16 ) SECTORY( KeyTable[ (*gpItemDescObject)[gubItemDescStatusIndex]->data.key.ubKeyID ].usSectorFound ), sTempString ); - swprintf( pStr, L"%s", sTempString ); - FindFontRightCoordinates( (INT16)(gWeaponStats[ 4 ].sX + gsInvDescX ), (INT16)(gWeaponStats[ 4 ].sY + gsInvDescY ), 110 ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); - mprintf( usX, usY, pStr ); - - swprintf( pStr, L"%d", KeyTable[ (*gpItemDescObject)[gubItemDescStatusIndex]->data.key.ubKeyID ].usDateFound ); - FindFontRightCoordinates( (INT16)(gWeaponStats[ 4 ].sX + gsInvDescX ), (INT16)(gWeaponStats[ 4 ].sY + gsInvDescY + GetFontHeight( BLOCKFONT ) + 2 ), 110 ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); - mprintf( usX, usY, pStr ); - } - - - - - //Weight - swprintf( pStr, L"%1.1f", fWeight ); - FindFontRightCoordinates( (INT16)(gWeaponStats[ 0 ].sX + gsInvDescX + gWeaponStats[ 0 ].sValDx), (INT16)(gWeaponStats[ 0 ].sY + gsInvDescY ), ITEM_STATS_WIDTH ,ITEM_STATS_HEIGHT ,pStr, BLOCKFONT2, &usX, &usY); - mprintf( usX, usY, pStr ); } SetFontShadow( DEFAULT_SHADOW ); @@ -4788,6 +5070,7 @@ void RenderLBENODEItems( OBJECTTYPE *pObj, int subObject ) UINT32 lClass; bool activeNode = pObj->IsActiveLBE(subObject); bool wornItem = false; + int usX, usY; // Start by verifying that this item is an LBENODE if(Item[pObj->usItem].usItemClass != IC_LBEGEAR || iResolution == 0) @@ -4820,6 +5103,17 @@ void RenderLBENODEItems( OBJECTTYPE *pObj, int subObject ) } std::vector pocketKey; + InitLBECoords(); + if(guiCurrentItemDescriptionScreen == MAP_SCREEN) + { + usX = PLAYER_INFO_X; + usY = PLAYER_INFO_Y; + } + else + { + usX = INTERFACE_START_X; + usY = INV_INTERFACE_START_Y; + } // Setup pocket coords switch (lClass) { @@ -4828,115 +5122,63 @@ void RenderLBENODEItems( OBJECTTYPE *pObj, int subObject ) GetLBESlots(RTHIGHPOCKPOS, pocketKey); else GetLBESlots(LTHIGHPOCKPOS, pocketKey); - if(guiCurrentItemDescriptionScreen == MAP_SCREEN){ - InitInvData(LBEInvPocketXY[0], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 101, PLAYER_INFO_Y + 287); - InitInvData(LBEInvPocketXY[1], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 137, PLAYER_INFO_Y + 287); - InitInvData(LBEInvPocketXY[2], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 101, PLAYER_INFO_Y + 311); - InitInvData(LBEInvPocketXY[3], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 137, PLAYER_INFO_Y + 311); - InitInvData(LBEInvPocketXY[4], FALSE, INV_BAR_DX, INV_BAR_DY, VEST_INV_SLOT_WIDTH, VEST_INV_SLOT_HEIGHT, PLAYER_INFO_X + 112, PLAYER_INFO_Y + 335); - } - else{ - InitInvData(LBEInvPocketXY[0], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 586, INV_INTERFACE_START_Y + 10); - InitInvData(LBEInvPocketXY[1], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 622, INV_INTERFACE_START_Y + 10); - InitInvData(LBEInvPocketXY[2], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 586, INV_INTERFACE_START_Y + 34); - InitInvData(LBEInvPocketXY[3], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 622, INV_INTERFACE_START_Y + 34); - InitInvData(LBEInvPocketXY[4], FALSE, INV_BAR_DX, INV_BAR_DY, VEST_INV_SLOT_WIDTH, VEST_INV_SLOT_HEIGHT, INTERFACE_START_X + 597, INV_INTERFACE_START_Y + 58); - } - InitInvData(LBEInvPocketXY[5], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, 0, 0); - InitInvData(LBEInvPocketXY[6], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, 0, 0); - InitInvData(LBEInvPocketXY[7], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, 0, 0); - InitInvData(LBEInvPocketXY[8], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, 0, 0); - InitInvData(LBEInvPocketXY[9], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, 0, 0); - InitInvData(LBEInvPocketXY[10], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, 0, 0); - InitInvData(LBEInvPocketXY[11], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, 0, 0); + InitInvData(LBEInvPocketXY[0], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[0].sX, usY + gLBEStats[0].sY); + InitInvData(LBEInvPocketXY[1], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[1].sX, usY + gLBEStats[1].sY); + InitInvData(LBEInvPocketXY[2], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[2].sX, usY + gLBEStats[2].sY); + InitInvData(LBEInvPocketXY[3], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[3].sX, usY + gLBEStats[3].sY); + InitInvData(LBEInvPocketXY[4], FALSE, INV_BAR_DX, INV_BAR_DY, VEST_INV_SLOT_WIDTH, VEST_INV_SLOT_HEIGHT, usX + gLBEStats[4].sX, usY + gLBEStats[4].sY); + InitInvData(LBEInvPocketXY[5], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[5].sX, usY + gLBEStats[5].sY); + InitInvData(LBEInvPocketXY[6], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[6].sX, usY + gLBEStats[6].sY); + InitInvData(LBEInvPocketXY[7], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[7].sX, usY + gLBEStats[7].sY); + InitInvData(LBEInvPocketXY[8], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[8].sX, usY + gLBEStats[8].sY); + InitInvData(LBEInvPocketXY[9], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[9].sX, usY + gLBEStats[9].sY); + InitInvData(LBEInvPocketXY[10], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[10].sX, usY + gLBEStats[10].sY); + InitInvData(LBEInvPocketXY[11], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[11].sX, usY + gLBEStats[11].sY); break; case VEST_PACK: GetLBESlots(VESTPOCKPOS, pocketKey); - if(guiCurrentItemDescriptionScreen == MAP_SCREEN){ - InitInvData(LBEInvPocketXY[0], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 22, PLAYER_INFO_Y + 299); - InitInvData(LBEInvPocketXY[1], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 58, PLAYER_INFO_Y + 299); - InitInvData(LBEInvPocketXY[2], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 94, PLAYER_INFO_Y + 299); - InitInvData(LBEInvPocketXY[3], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 130, PLAYER_INFO_Y + 299); - InitInvData(LBEInvPocketXY[4], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 166, PLAYER_INFO_Y + 299); - InitInvData(LBEInvPocketXY[5], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 22, PLAYER_INFO_Y + 323); - InitInvData(LBEInvPocketXY[6], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 58, PLAYER_INFO_Y + 323); - InitInvData(LBEInvPocketXY[7], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 94, PLAYER_INFO_Y + 323); - InitInvData(LBEInvPocketXY[8], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 130, PLAYER_INFO_Y + 323); - InitInvData(LBEInvPocketXY[9], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 166, PLAYER_INFO_Y + 323); - InitInvData(LBEInvPocketXY[10], FALSE, INV_BAR_DX, INV_BAR_DY, VEST_INV_SLOT_WIDTH, VEST_INV_SLOT_HEIGHT, PLAYER_INFO_X + 202, PLAYER_INFO_Y + 299); - InitInvData(LBEInvPocketXY[11], FALSE, INV_BAR_DX, INV_BAR_DY, VEST_INV_SLOT_WIDTH, VEST_INV_SLOT_HEIGHT, PLAYER_INFO_X + 202, PLAYER_INFO_Y + 323); - } - else{ - InitInvData(LBEInvPocketXY[0], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 269, INV_INTERFACE_START_Y + 139); - InitInvData(LBEInvPocketXY[1], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 305, INV_INTERFACE_START_Y + 139); - InitInvData(LBEInvPocketXY[2], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 341, INV_INTERFACE_START_Y + 139); - InitInvData(LBEInvPocketXY[3], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 377, INV_INTERFACE_START_Y + 139); - InitInvData(LBEInvPocketXY[4], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 413, INV_INTERFACE_START_Y + 139); - InitInvData(LBEInvPocketXY[5], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 269, INV_INTERFACE_START_Y + 163); - InitInvData(LBEInvPocketXY[6], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 305, INV_INTERFACE_START_Y + 163); - InitInvData(LBEInvPocketXY[7], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 341, INV_INTERFACE_START_Y + 163); - InitInvData(LBEInvPocketXY[8], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 377, INV_INTERFACE_START_Y + 163); - InitInvData(LBEInvPocketXY[9], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 413, INV_INTERFACE_START_Y + 163); - InitInvData(LBEInvPocketXY[10], FALSE, INV_BAR_DX, INV_BAR_DY, VEST_INV_SLOT_WIDTH, VEST_INV_SLOT_HEIGHT, INTERFACE_START_X + 449, INV_INTERFACE_START_Y + 139); - InitInvData(LBEInvPocketXY[11], FALSE, INV_BAR_DX, INV_BAR_DY, VEST_INV_SLOT_WIDTH, VEST_INV_SLOT_HEIGHT, INTERFACE_START_X + 449, INV_INTERFACE_START_Y + 163); - } + InitInvData(LBEInvPocketXY[0], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[12].sX, usY + gLBEStats[12].sY); + InitInvData(LBEInvPocketXY[1], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[13].sX, usY + gLBEStats[13].sY); + InitInvData(LBEInvPocketXY[2], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[14].sX, usY + gLBEStats[14].sY); + InitInvData(LBEInvPocketXY[3], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[15].sX, usY + gLBEStats[15].sY); + InitInvData(LBEInvPocketXY[4], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[16].sX, usY + gLBEStats[16].sY); + InitInvData(LBEInvPocketXY[5], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[17].sX, usY + gLBEStats[17].sY); + InitInvData(LBEInvPocketXY[6], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[18].sX, usY + gLBEStats[18].sY); + InitInvData(LBEInvPocketXY[7], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[19].sX, usY + gLBEStats[19].sY); + InitInvData(LBEInvPocketXY[8], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[20].sX, usY + gLBEStats[20].sY); + InitInvData(LBEInvPocketXY[9], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[21].sX, usY + gLBEStats[21].sY); + InitInvData(LBEInvPocketXY[10], FALSE, INV_BAR_DX, INV_BAR_DY, VEST_INV_SLOT_WIDTH, VEST_INV_SLOT_HEIGHT, usX + gLBEStats[22].sX, usY + gLBEStats[22].sY); + InitInvData(LBEInvPocketXY[11], FALSE, INV_BAR_DX, INV_BAR_DY, VEST_INV_SLOT_WIDTH, VEST_INV_SLOT_HEIGHT, usX + gLBEStats[23].sX, usY + gLBEStats[23].sY); break; case COMBAT_PACK: GetLBESlots(CPACKPOCKPOS, pocketKey); - if(guiCurrentItemDescriptionScreen == MAP_SCREEN){ - InitInvData(LBEInvPocketXY[0], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 101, PLAYER_INFO_Y + 287); - InitInvData(LBEInvPocketXY[1], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 137, PLAYER_INFO_Y + 287); - InitInvData(LBEInvPocketXY[2], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 101, PLAYER_INFO_Y + 311); - InitInvData(LBEInvPocketXY[3], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 137, PLAYER_INFO_Y + 311); - InitInvData(LBEInvPocketXY[4], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, PLAYER_INFO_X + 104, PLAYER_INFO_Y + 335); - InitInvData(LBEInvPocketXY[5], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, PLAYER_INFO_X + 104, PLAYER_INFO_Y + 359); - InitInvData(LBEInvPocketXY[6], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, PLAYER_INFO_X + 104, PLAYER_INFO_Y + 383); - } - else{ - InitInvData(LBEInvPocketXY[0], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 585, INV_INTERFACE_START_Y + 10); - InitInvData(LBEInvPocketXY[1], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 621, INV_INTERFACE_START_Y + 10); - InitInvData(LBEInvPocketXY[2], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 585, INV_INTERFACE_START_Y + 34); - InitInvData(LBEInvPocketXY[3], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 621, INV_INTERFACE_START_Y + 34); - InitInvData(LBEInvPocketXY[4], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, INTERFACE_START_X + 657, INV_INTERFACE_START_Y + 10); - InitInvData(LBEInvPocketXY[5], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, INTERFACE_START_X + 657, INV_INTERFACE_START_Y + 34); - InitInvData(LBEInvPocketXY[6], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, INTERFACE_START_X + 657, INV_INTERFACE_START_Y + 58); - } - InitInvData(LBEInvPocketXY[7], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, 0, 0); - InitInvData(LBEInvPocketXY[8], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, 0, 0); - InitInvData(LBEInvPocketXY[9], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, 0, 0); - InitInvData(LBEInvPocketXY[10], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, 0, 0); - InitInvData(LBEInvPocketXY[11], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, 0, 0); + InitInvData(LBEInvPocketXY[0], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[24].sX, usY + gLBEStats[24].sY); + InitInvData(LBEInvPocketXY[1], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[25].sX, usY + gLBEStats[25].sY); + InitInvData(LBEInvPocketXY[2], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[26].sX, usY + gLBEStats[26].sY); + InitInvData(LBEInvPocketXY[3], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[27].sX, usY + gLBEStats[27].sY); + InitInvData(LBEInvPocketXY[4], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, usX + gLBEStats[28].sX, usY + gLBEStats[28].sY); + InitInvData(LBEInvPocketXY[5], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, usX + gLBEStats[29].sX, usY + gLBEStats[29].sY); + InitInvData(LBEInvPocketXY[6], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, usX + gLBEStats[30].sX, usY + gLBEStats[30].sY); + InitInvData(LBEInvPocketXY[7], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[31].sX, usY + gLBEStats[31].sY); + InitInvData(LBEInvPocketXY[8], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[32].sX, usY + gLBEStats[32].sY); + InitInvData(LBEInvPocketXY[9], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[33].sX, usY + gLBEStats[33].sY); + InitInvData(LBEInvPocketXY[10], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[34].sX, usY + gLBEStats[34].sY); + InitInvData(LBEInvPocketXY[11], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[35].sX, usY + gLBEStats[35].sY); break; case BACKPACK: GetLBESlots(BPACKPOCKPOS, pocketKey); - if(guiCurrentItemDescriptionScreen == MAP_SCREEN){ - InitInvData(LBEInvPocketXY[0], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 68, PLAYER_INFO_Y + 275); - InitInvData(LBEInvPocketXY[1], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 68, PLAYER_INFO_Y + 299); - InitInvData(LBEInvPocketXY[2], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 68, PLAYER_INFO_Y + 323); - InitInvData(LBEInvPocketXY[3], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 68, PLAYER_INFO_Y + 347); - InitInvData(LBEInvPocketXY[4], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 104, PLAYER_INFO_Y + 275); - InitInvData(LBEInvPocketXY[5], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 104, PLAYER_INFO_Y + 299); - InitInvData(LBEInvPocketXY[6], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 104, PLAYER_INFO_Y + 323); - InitInvData(LBEInvPocketXY[7], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, PLAYER_INFO_X + 104, PLAYER_INFO_Y + 347); - InitInvData(LBEInvPocketXY[8], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, PLAYER_INFO_X + 140, PLAYER_INFO_Y + 275); - InitInvData(LBEInvPocketXY[9], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, PLAYER_INFO_X + 140, PLAYER_INFO_Y + 299); - InitInvData(LBEInvPocketXY[10], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, PLAYER_INFO_X + 140, PLAYER_INFO_Y + 323); - InitInvData(LBEInvPocketXY[11], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, PLAYER_INFO_X + 140, PLAYER_INFO_Y + 347); - } - else{ - InitInvData(LBEInvPocketXY[0], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 585, INV_INTERFACE_START_Y + 10); - InitInvData(LBEInvPocketXY[1], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 585, INV_INTERFACE_START_Y + 34); - InitInvData(LBEInvPocketXY[2], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 585, INV_INTERFACE_START_Y + 58); - InitInvData(LBEInvPocketXY[3], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 585, INV_INTERFACE_START_Y + 82); - InitInvData(LBEInvPocketXY[4], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 621, INV_INTERFACE_START_Y + 10); - InitInvData(LBEInvPocketXY[5], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 621, INV_INTERFACE_START_Y + 34); - InitInvData(LBEInvPocketXY[6], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 621, INV_INTERFACE_START_Y + 58); - InitInvData(LBEInvPocketXY[7], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, INTERFACE_START_X + 621, INV_INTERFACE_START_Y + 82); - InitInvData(LBEInvPocketXY[8], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, INTERFACE_START_X + 657, INV_INTERFACE_START_Y + 10); - InitInvData(LBEInvPocketXY[9], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, INTERFACE_START_X + 657, INV_INTERFACE_START_Y + 34); - InitInvData(LBEInvPocketXY[10], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, INTERFACE_START_X + 657, INV_INTERFACE_START_Y + 58); - InitInvData(LBEInvPocketXY[11], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, INTERFACE_START_X + 657, INV_INTERFACE_START_Y + 82); - } + InitInvData(LBEInvPocketXY[0], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[36].sX, usY + gLBEStats[36].sY); + InitInvData(LBEInvPocketXY[1], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[37].sX, usY + gLBEStats[37].sY); + InitInvData(LBEInvPocketXY[2], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[38].sX, usY + gLBEStats[38].sY); + InitInvData(LBEInvPocketXY[3], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[39].sX, usY + gLBEStats[39].sY); + InitInvData(LBEInvPocketXY[4], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[40].sX, usY + gLBEStats[40].sY); + InitInvData(LBEInvPocketXY[5], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[41].sX, usY + gLBEStats[41].sY); + InitInvData(LBEInvPocketXY[6], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[42].sX, usY + gLBEStats[42].sY); + InitInvData(LBEInvPocketXY[7], FALSE, INV_BAR_DX, INV_BAR_DY, SM_INV_SLOT_WIDTH, SM_INV_SLOT_HEIGHT, usX + gLBEStats[43].sX, usY + gLBEStats[43].sY); + InitInvData(LBEInvPocketXY[8], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, usX + gLBEStats[44].sX, usY + gLBEStats[44].sY); + InitInvData(LBEInvPocketXY[9], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, usX + gLBEStats[45].sX, usY + gLBEStats[45].sY); + InitInvData(LBEInvPocketXY[10], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, usX + gLBEStats[46].sX, usY + gLBEStats[46].sY); + InitInvData(LBEInvPocketXY[11], TRUE, INV_BAR_DX, INV_BAR_DY, BIG_INV_SLOT_WIDTH, BIG_INV_SLOT_HEIGHT, usX + gLBEStats[47].sX, usY + gLBEStats[47].sY); break; default: break; @@ -5063,6 +5305,7 @@ void DeleteItemDescriptionBox( ) DeleteVideoObjectFromIndex( guiMapItemDescBox ); RenderBackpackButtons(0); /* CHRISL: Needed for new inventory backpack buttons */ DeleteVideoObjectFromIndex( guiBullet ); + DeleteEnhancedDescBox( guiCurrentItemDescriptionScreen ); // Delete item graphic DeleteVideoObjectFromIndex( guiItemGraphic ); @@ -8710,7 +8953,7 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier gWeaponStatsDesc[ 10 ], //Range String gGameSettings.fOptions[ TOPTION_SHOW_WEAPON_RANGE_IN_TILES ] ? GunRange( pObject )/10 : GunRange( pObject ), //Modified Range gGameSettings.fOptions[ TOPTION_SHOW_WEAPON_RANGE_IN_TILES ] ? Weapon[ usItem ].usRange/10 : Weapon[ usItem ].usRange, //Gun Range - gWeaponStatsDesc[ 5 ], //AP String + gWeaponStatsDesc[ 6 ], //AP String (Weapon[ usItem ].ubReadyTime * (100 - GetPercentReadyTimeAPReduction( pObject )) / 100), // Ready AP's apStr, //AP's gWeaponStatsDesc[ 12 ], //Weight String @@ -8760,7 +9003,7 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier gWeaponStatsDesc[ 10 ], //Range String gGameSettings.fOptions[ TOPTION_SHOW_WEAPON_RANGE_IN_TILES ] ? GunRange( pObject )/10 : GunRange( pObject ), //Modified Range gGameSettings.fOptions[ TOPTION_SHOW_WEAPON_RANGE_IN_TILES ] ? Weapon[ usItem ].usRange/10 : Weapon[ usItem ].usRange, //Gun Range - gWeaponStatsDesc[ 5 ], //AP String + gWeaponStatsDesc[ 6 ], //AP String apStr, //AP's gWeaponStatsDesc[ 12 ], //Weight String fWeight, //Weight @@ -8778,7 +9021,7 @@ void GetHelpTextForItem( STR16 pzStr, OBJECTTYPE *pObject, SOLDIERTYPE *pSoldier sValue, gWeaponStatsDesc[ 11 ], //Damage String GetDamage(pObject), //Melee damage - gWeaponStatsDesc[ 5 ], //AP String + gWeaponStatsDesc[ 6 ], //AP String BaseAPsToShootOrStab( APBPConstants[DEFAULT_APS], APBPConstants[DEFAULT_AIMSKILL], pObject ), //AP's gWeaponStatsDesc[ 12 ], //Weight String fWeight, //Weight diff --git a/Tactical/Interface Items.h b/Tactical/Interface Items.h index befcdf2b..65a43f97 100644 --- a/Tactical/Interface Items.h +++ b/Tactical/Interface Items.h @@ -9,6 +9,7 @@ #define BIG_INV_SLOT_HEIGHT 22 #define SM_INV_SLOT_WIDTH 30 #define SM_INV_SLOT_HEIGHT 23 +#define MAP_ATTACH_SLOT_WIDTH 32 #define VEST_INV_SLOT_WIDTH 43 #define VEST_INV_SLOT_HEIGHT 24 #define LEGS_INV_SLOT_WIDTH 43 @@ -17,6 +18,72 @@ #define HEAD_INV_SLOT_HEIGHT 24 +//CHRISL: moved from Interface Items.cpp +typedef struct +{ + INT16 sX; + INT16 sY; + INT16 sValDx; + +} INV_DESC_STATS; +typedef struct +{ + UINT32 uiTotalAmount; + UINT32 uiMoneyRemaining; + UINT32 uiMoneyRemoving; + +} REMOVE_MONEY; +typedef struct +{ + UINT16 x; + UINT16 y; +} MoneyLoc; +void ItemDescCallback( MOUSE_REGION * pRegion, INT32 iReason ); +#define ITEMDESC_FONT BLOCKFONT2 +#define INV_BAR_DX 5 +#define INV_BAR_DY 21 +#define ITEM_STATS_WIDTH 26 +#define ITEM_STATS_HEIGHT 8 +#define EXCEPTIONAL_DAMAGE 40 +#define EXCEPTIONAL_WEIGHT 20 +#define EXCEPTIONAL_RANGE 400 +#define EXCEPTIONAL_MAGAZINE 50 +#define EXCEPTIONAL_AP_COST 5 +#define EXCEPTIONAL_BURST_SIZE 5 +#define EXCEPTIONAL_RELIABILITY 2 +#define EXCEPTIONAL_REPAIR_EASE 2 +#define EXCEPTIONAL_ACCURACY 4 +#define ITEMDESC_FONTHIGHLIGHT FONT_MCOLOR_WHITE +#define MAP_ITEMDESC_NAME_X (7 + gsInvDescX) +#define MAP_ITEMDESC_NAME_Y (65 + gsInvDescY) + +//CHRISL: extern'd for EDB project +extern INT16 gsInvDescX; +extern INT16 gsInvDescY; +extern INT16 ITEMDESC_CALIBER_X; +extern INT16 ITEMDESC_CALIBER_Y; +extern INT16 BULLET_SING_X; +extern INT16 BULLET_SING_Y; +extern INT16 BULLET_BURST_X; +extern INT16 BULLET_BURST_Y; +extern INT16 MAP_BULLET_SING_X; +extern INT16 MAP_BULLET_SING_Y; +extern INT16 MAP_BULLET_BURST_X; +extern INT16 MAP_BULLET_BURST_Y; +extern INT16 ITEMDESC_DESC_START_X; +extern INT16 ITEMDESC_DESC_START_Y; +extern INT16 ITEMDESC_PROS_START_X; +extern INT16 ITEMDESC_PROS_START_Y; +extern INT16 ITEMDESC_CONS_START_X; +extern INT16 ITEMDESC_CONS_START_Y; +extern INT16 MAP_ITEMDESC_DESC_START_X; +extern INT16 MAP_ITEMDESC_DESC_START_Y; +extern INT16 MAP_ITEMDESC_PROS_START_X; +extern INT16 MAP_ITEMDESC_PROS_START_Y; +extern INT16 MAP_ITEMDESC_CONS_START_X; +extern INT16 MAP_ITEMDESC_CONS_START_Y; +extern INT16 ITEMDESC_DESC_WIDTH; +extern UINT8 gubItemDescStatusIndex; // A STRUCT USED INTERNALLY FOR INV SLOT REGIONS typedef struct @@ -132,6 +199,7 @@ extern BOOLEAN gfInItemDescBox; BOOLEAN InItemDescriptionBox( ); BOOLEAN InitItemDescriptionBox( SOLDIERTYPE *pSoldier, UINT8 ubPosition, INT16 sX, INT16 sY, UINT8 ubStatusIndex ); BOOLEAN InternalInitItemDescriptionBox( OBJECTTYPE *pObject, INT16 sX, INT16 sY, UINT8 ubStatusIndex, SOLDIERTYPE *pSoldier, UINT8 ubPosition = NUM_INV_SLOTS ); +void UpdateAttachmentTooltips( OBJECTTYPE *pObject, UINT8 ubStatusIndex ); BOOLEAN InitKeyItemDescriptionBox( SOLDIERTYPE *pSoldier, UINT8 ubPosition, INT16 sX, INT16 sY, UINT8 ubStatusIndex ); void RenderItemDescriptionBox( ); void HandleItemDescriptionBox( BOOLEAN *pfDirty ); diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index 3e469aac..a0d3d377 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -8526,3 +8526,255 @@ INT16 GetWornStealth( SOLDIERTYPE * pSoldier ) return __min( ttl, 100 ); } + + +///////////////////////////// +// HEADROCK: Several functions created for the Enhanced Description Box project, but may generally be useful some +// day. They calculate item bonuses, ammo bonuses and attachment bonuses, without requiring a SOLDIERTYPE or any +// other variable. +//////////////////////////// + +// HEADROCK: Function to get the total aim-bonus from the gun and its attachments +INT16 GetFlatAimBonus( OBJECTTYPE * pObj ) +{ + INT16 bonus = 0; + + bonus += Item[pObj->usItem].aimbonus; + + for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter) + { + bonus += Item[iter->usItem].aimbonus; + } + + return( bonus ); +} + +// HEADROCK: Function to get the final Loudness value of a gun, after ammo and attachment reductions +INT16 GetFinalLoudness( OBJECTTYPE * pObj ) +{ + INT16 loudness = 0; + INT16 loudnessModifier = 0; + + loudness = Weapon[Item[pObj->usItem].ubClassIndex].ubAttackVolume; + + loudnessModifier += Item[pObj->usItem].percentnoisereduction; + + if ( (*pObj)[0]->data.gun.ubGunShotsLeft > 0 ) + loudnessModifier += Item[(*pObj)[0]->data.gun.usGunAmmoItem].percentnoisereduction ; + + for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter) + { + loudnessModifier += BonusReduce( Item[iter->usItem].percentnoisereduction, (*iter)[0]->data.objectStatus ) ; + } + + loudness = loudness * ( 100 - loudnessModifier ) / 100; + loudness = __max(loudness, 1); + + return ( loudness ); +} + +// HEADROCK: Function to get AP bonus from an item rather than a soldier + +INT16 GetAPBonus( OBJECTTYPE * pObj ) +{ + INT16 bonus=0; + + bonus += Item[ pObj->usItem ].APBonus; + + for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter) + { + bonus += Item[iter->usItem].APBonus; + } + + return( bonus ); +} + +// HEADROCK: Alternative function to determine flat to-hit bonus of weapon +INT16 GetFlatToHitBonus( OBJECTTYPE * pObj ) +{ + INT16 bonus=0; + + bonus = Item[pObj->usItem].tohitbonus; + bonus += Item[(*pObj)[0]->data.gun.usGunAmmoItem].tohitbonus; + + for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter) + { + bonus += Item[iter->usItem].tohitbonus; + } + + return( bonus ); +} + +// HEADROCK: Function to get average of all "best laser range" attributes from weapon and attachments +INT16 GetAverageBestLaserRange( OBJECTTYPE * pObj ) +{ + INT16 bonus=0; + INT16 numModifiers=0; + + if (Item[pObj->usItem].bestlaserrange > 0) + { + numModifiers++; + bonus += Item[pObj->usItem].bestlaserrange; + } + for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter) + { + if (Item[iter->usItem].bestlaserrange > 0) + { + numModifiers++; + bonus += Item[iter->usItem].bestlaserrange; + } + } + + if (numModifiers>0) + { + bonus = bonus / numModifiers; + } + + return( bonus ); +} + +// HEADROCK: This function determines the bipod bonii of the gun or its attachments +INT16 GetBipodBonus( OBJECTTYPE * pObj ) +{ + INT16 bonus=0; + + bonus = Item[pObj->usItem].bipod; + + for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter) + { + bonus += Item[iter->usItem].bipod; + } + + return( bonus ); +} + +// HEADROCK: Added a function to calculate the vision range bonus of an object and its attachments. Takes an argument which determines what type +// of vision range bonus we want to get: +// 0 - Regular +// 1 - Day +// 2 - Night +// 3 - Bright Light +// 4 - Cave +INT16 GetItemVisionRangeBonus( OBJECTTYPE * pObj, INT16 VisionType ) +{ + INT16 bonus = 0; + + if (VisionType == 0) + { + bonus += Item[ pObj->usItem ].visionrangebonus; + + for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter) + { + bonus += Item[iter->usItem].visionrangebonus; + } + } + else if (VisionType == 1) + { + bonus += Item[ pObj->usItem ].dayvisionrangebonus; + + for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter) + { + bonus += Item[iter->usItem].dayvisionrangebonus; + } + } + else if (VisionType == 2) + { + bonus += Item[ pObj->usItem ].nightvisionrangebonus; + + for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter) + { + bonus += Item[iter->usItem].nightvisionrangebonus; + } + } + else if (VisionType == 3) + { + bonus += Item[ pObj->usItem ].brightlightvisionrangebonus; + + for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter) + { + bonus += Item[iter->usItem].brightlightvisionrangebonus; + } + } + else if (VisionType == 4) + { + bonus += Item[ pObj->usItem ].cavevisionrangebonus; + + for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter) + { + bonus += Item[iter->usItem].cavevisionrangebonus; + } + } + + return( bonus ); + +} + +// HEADROCK: function to get Tunnel Vision percent from an item and its attachments + +UINT8 GetItemPercentTunnelVision( OBJECTTYPE * pObj ) +{ + UINT8 bonus = 0; + + bonus += Item[ pObj->usItem ].percenttunnelvision; + + for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter) + { + bonus += Item[iter->usItem].percenttunnelvision; + } + + bonus = __min(bonus, 100); + + return( bonus ); +} + +// HEADROCK: Function to calculate hearing range bonus without SOLDIERTYPE, from an item and its attachments +INT16 GetItemHearingRangeBonus( OBJECTTYPE * pObj ) +{ + INT16 bonus = 0; + + bonus += Item[ pObj->usItem ].hearingrangebonus; + + for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter) + { + bonus += Item[ iter->usItem ].hearingrangebonus; + } + + return( bonus ); + +} + +// HEADROCK: Flash Suppression Detector function that does not use SOLDIERTYPE. +BOOLEAN IsFlashSuppressorAlt( OBJECTTYPE * pObj ) +{ + if ( AmmoTypes[(*pObj)[0]->data.gun.ubGunAmmoType].tracerEffect ) + return FALSE; + + if ( Item[pObj->usItem].hidemuzzleflash ) + return TRUE; + + if ( Item[(*pObj)[0]->data.gun.usGunAmmoItem].hidemuzzleflash ) + return TRUE; + + for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter) { + if (Item[iter->usItem].hidemuzzleflash ) + { + return( TRUE ); + } + } + return( FALSE ); +} + +// HEADROCK: Calculate stealth not based on item status +INT16 GetBasicStealthBonus( OBJECTTYPE * pObj ) +{ + INT16 bonus = 0; + if ( pObj->exists() == true ) { + bonus = Item[pObj->usItem].stealthbonus; + + for (attachmentList::iterator iter = (*pObj)[0]->attachments.begin(); iter != (*pObj)[0]->attachments.end(); ++iter) { + bonus += (INT16) Item[iter->usItem].stealthbonus; + } + } + return( bonus ); +} + diff --git a/Tactical/Items.h b/Tactical/Items.h index c59a3f9e..e15f8d2c 100644 --- a/Tactical/Items.h +++ b/Tactical/Items.h @@ -214,8 +214,18 @@ UINT16 MagazineClassIndexToItemType(UINT16 usMagIndex); BOOLEAN IsScoped( OBJECTTYPE * pObj ); INT16 GetAimBonus( OBJECTTYPE * pObj, INT32 iRange, INT16 ubAimTime ); +// HEADROCK: Function to get the natural aimbonus of the weapon and its attachments +INT16 GetFlatAimBonus( OBJECTTYPE * pObj ); +// HEADROCK: Function to get the final loudness value of a weapon, after reduction from its own characteristics, ammo and attachments +INT16 GetFinalLoudness( OBJECTTYPE * pObj ); INT16 GetMinAimBonusRange( OBJECTTYPE * pObj ); INT16 GetToHitBonus( OBJECTTYPE * pObj, INT32 iRange, UINT8 bLightLevel, BOOLEAN fProneStance = FALSE ); +// HEADROCK: Added alternate function that only returns the natural to-hit-bonii of a weapon, ammo and attachments +INT16 GetFlatToHitBonus( OBJECTTYPE * pObj ); +// HEADROCK: Function to get average of best laser ranges from weapon and attachments +INT16 GetAverageBestLaserRange( OBJECTTYPE * pObj ); +// HEADROCK: Function to get bipod bonus from weapon and its attachments +INT16 GetBipodBonus( OBJECTTYPE * pObj ); UINT32 FindRangeBonusAttachment( OBJECTTYPE * pObj ); INT16 GetRangeBonus( OBJECTTYPE * pObj ); INT16 GetBurstToHitBonus( OBJECTTYPE * pObj, BOOLEAN fProneStance = FALSE ); @@ -244,6 +254,11 @@ INT16 GetMagSizeBonus( OBJECTTYPE * pObj ); // GetBrightLightVisionRangeBonus: bLightLevel < NORMAL_LIGHTLEVEL_DAY // (remember: darker is higher!) INT16 GetTotalVisionRangeBonus( SOLDIERTYPE * pSoldier, UINT8 bLightLevel ); +// HEADROCK: Following function used to get the vision range bonus of an item and its attachments. Second argument controls specific +// vision type. +INT16 GetItemVisionRangeBonus( OBJECTTYPE * pObj, INT16 VisionType ); +// HEADROCK: This function calculates percent tunnel vision from an object and its attachments. +UINT8 GetItemPercentTunnelVision( OBJECTTYPE * pObj ); // Snap: Scale night vision bonus with light level INT16 NightBonusScale( INT16 bonus, UINT8 bLightLevel ); @@ -253,6 +268,8 @@ BOOLEAN HasThermalOptics( SOLDIERTYPE * pSoldier ); INT8 FindHearingAid( SOLDIERTYPE * pSoldier ); INT16 GetHearingRangeBonus( SOLDIERTYPE * pSoldier ); +// HEADROCK: This is the same function as above, but calculates hearing range bonus without SOLDIERTYPE, from an item and its attachments +INT16 GetItemHearingRangeBonus( OBJECTTYPE * pObj ); INT8 IsGrenadeLauncher( OBJECTTYPE * pObj ); INT16 GetGrenadeLauncherStatus( OBJECTTYPE * pObj ); @@ -266,6 +283,8 @@ OBJECTTYPE* FindNonSmokeLaunchableAttachment( OBJECTTYPE * pObj, UINT16 usWeapon UINT16 PickARandomLaunchable(UINT16 itemIndex); BOOLEAN IsFlashSuppressor( OBJECTTYPE * pObj, SOLDIERTYPE * pSoldier ); +// HEADROCK: Declaration of new function to detect flash suppression without SOLDIERTYPE argument +BOOLEAN IsFlashSuppressorAlt( OBJECTTYPE * pObj ); INT16 GetFlashSuppressorStatus( OBJECTTYPE * pObj ); BOOLEAN IsRemoteDetonator( OBJECTTYPE * pObj ); BOOLEAN IsDetonator( OBJECTTYPE * pObj ); @@ -297,12 +316,16 @@ INT16 GetWornCamo( SOLDIERTYPE * pSoldier ); INT16 GetCamoBonus( OBJECTTYPE * pObj ); INT16 GetWornStealth( SOLDIERTYPE * pSoldier ); INT16 GetStealthBonus( OBJECTTYPE * pObj ); +// HEADROCK: Non-status-dependent version of the above +INT16 GetBasicStealthBonus( OBJECTTYPE * pObj ); void ApplyEquipmentBonuses(SOLDIERTYPE * pSoldier); INT16 GetGearAimBonus( SOLDIERTYPE * pSoldier, INT32 iRange, INT16 ubAimTime); INT16 GetGearToHitBonus( SOLDIERTYPE * pSoldier ); INT16 GetGearAPBonus( SOLDIERTYPE * pSoldier ); +// HEADROCK: This function gets total AP bonus for an item and its attachments +INT16 GetAPBonus( OBJECTTYPE * pObj ); UINT16 GetFirstExplosiveOfType(UINT16 expType); diff --git a/Tactical/Tactical_2005Express.vcproj b/Tactical/Tactical_2005Express.vcproj index 0ec6a6f7..acf299cb 100644 --- a/Tactical/Tactical_2005Express.vcproj +++ b/Tactical/Tactical_2005Express.vcproj @@ -392,6 +392,10 @@ RelativePath=".\interface Dialogue.h" > + + @@ -710,6 +714,10 @@ RelativePath=".\Interface Dialogue.cpp" > + + diff --git a/Utils/Text.h b/Utils/Text.h index ca491f45..9bfbc73c 100644 --- a/Utils/Text.h +++ b/Utils/Text.h @@ -397,7 +397,17 @@ extern STR16 gzMoneyAmounts[6]; extern CHAR16 gzProsLabel[10]; extern CHAR16 gzConsLabel[10]; extern CHAR16 gMoneyStatsDesc[][ 13 ]; -extern CHAR16 gWeaponStatsDesc[][ 14 ]; +// HEADROCK: Altered value to 16 +extern CHAR16 gWeaponStatsDesc[][ 16 ]; +// HEADROCK: Added externs for Item Description Box icon and stat tooltips +// Note that I've inflated some of these to 20 to avoid issues. +extern STR16 gzWeaponStatsFasthelp[ 27 ]; +extern STR16 gzWeaponStatsFasthelpTactical[ 27 ]; +extern STR16 gzAmmoStatsFasthelp[ 20 ]; +extern STR16 gzArmorStatsFasthelp[ 20 ]; +extern STR16 gzExplosiveStatsFasthelp[ 20 ]; +extern STR16 gzMiscItemStatsFasthelp[ 34 ]; +// Headrock: End Externs extern STR16 sKeyDescriptionStrings[2]; extern CHAR16 zHealthStr[][13]; extern STR16 zVehicleName[ 6 ]; diff --git a/Utils/_DutchText.cpp b/Utils/_DutchText.cpp index 7743ad6e..26b7263c 100644 --- a/Utils/_DutchText.cpp +++ b/Utils/_DutchText.cpp @@ -1072,15 +1072,16 @@ STR16 sKeyDescriptionStrings[2] = //The headers used to describe various weapon statistics. -CHAR16 gWeaponStatsDesc[][ 14 ] = +CHAR16 gWeaponStatsDesc[][ 16 ] = { - L"Gewicht (%s):", + // HEADROCK: Changed this for Extended Description project L"Status:", - L"Munitie:", // Number of bullets left in a magazine + L"Gewicht (%s):", + L"AP Costs", L"Afst:", // Range L"Sch:", // Damage + L"Munitie:", // Number of bullets left in a magazine L"AP:", // abbreviation for Action Points - L"", L"=", L"=", //Lal: additional strings for tooltips @@ -1089,8 +1090,190 @@ CHAR16 gWeaponStatsDesc[][ 14 ] = L"Damage:", //11 L"Weight:", //12 L"Stun Damage:",//13 + // HEADROCK: Added new strings for extended description ** REDUNDANT ** + L"AUTOPEN:", //14 + L"AUTO/5:", //15 + L"Amount:", //16 + }; +// HEADROCK: Several arrays of tooltip text for new Extended Description Box +// Please note, several of these are artificially inflated to 19 entries to help fix a complication with +// changing item type while watching its description box +STR16 gzWeaponStatsFasthelp[ 27 ] = +{ + L"Range", + L"Damage", + L"Burst/Auto Penalty", + L"Autofire shots per 5 AP", + L"Accuracy", + L"Reliability", + L"Repair Ease", + L"APs to ready", + L"APs to fire Single", + L"APs to fire Burst", + L"APs to fire Auto", + L"APs to Reload", + L"APs to Reload Manually", + L"Flash Suppression", + L"Loudness (Lower is better)", + L"To-Hit Modifier", + L"Average Best Laser Range", + L"Aiming Modifier", + L"Min. Range for Aiming Bonus", + L"Bipod Modifier", + L"APs to Throw", + L"APs to Launch", + L"APs to Stab", + L"No Single Shot!", + L"No Burst Mode!", + L"No Auto Mode!", + L"APs to Bash", +}; + +STR16 gzWeaponStatsFasthelpTactical[ 27 ] = +{ + L"Range", + L"Damage", + L"Burst/Auto Penalty", + L"Autofire shots per 5 AP", + L"Accuracy", + L"Reliability", + L"Repair Ease", + L"APs to ready", + L"APs to fire Single", + L"APs to fire Burst", + L"APs to fire Auto", + L"APs to Reload", + L"APs to Reload Manually", + L"To-Hit Modifier", + L"Average Best Laser Range", + L"Aiming Modifier", + L"Min. Range for Aiming Bonus", + L"Flash Suppression", + L"Loudness (Lower is better)", + L"Bipod Modifier", + L"APs to Throw", + L"APs to Launch", + L"APs to Stab", + L"No Single Shot!", + L"No Burst Mode!", + L"No Auto Mode!", + L"APs to Bash", +}; + +STR16 gzAmmoStatsFasthelp[ 20 ] = +{ + L"Armor Penetration (Lower is better)", + L"Bullet Tumble (Higher is better)", + L"Pre-impact Explosion (Higher is better)", + L"Tracer Effect", + L"Anti-Tank", + L"Lockbuster", + L"Ignores Armor", + L"Acidic", + L"Range Modifier", + L"Damage Modifier", + L"To-Hit Modifier", + L"Burst/Auto Penalty Modifier (Higher is better)", + L"Reliability Modifier", + L"Loudness Modifier (Lower is better)", + L"", + L"", + L"", + L"", + L"", + L"", +}; + +STR16 gzArmorStatsFasthelp[ 20 ] = +{ + L"Protection", + L"Coverage (Higher is better)", + L"Degrade Rate (Lower is better)", + L"AP Modifier", + L"To-Hit Modifier", + L"Woodland Camo", + L"Urban Camo", + L"Desert Camo", + L"Snow Camo", + L"Stealth Modifier", + L"Vision Range Modifier", + L"Day Vision Range Modifier", + L"Night Vision Range Modifier", + L"Bright Light Vision Range Modifier", + L"Cave Vision Range Modifier", + L"Tunnel Vision Percentage", + L"Hearing Range Modifier", + L"", + L"", + L"", +}; + +STR16 gzExplosiveStatsFasthelp[ 20 ] = +{ + L"Damage", + L"Stun Damage", + L"Blast Loudness (Lower is better)", + L"Volatility!!! (Lower is better)", + L"Blast Radius", + L"Effect Start Radius", + L"Effect Final Radius ", + L"Effect Duration", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", +}; + +STR16 gzMiscItemStatsFasthelp[ 34 ] = +{ + L"Item Size Modifier (Lower is better)", // 0 + L"Reliability Modifier", + L"Loudness Modifier (Lower is better)", + L"Hides Muzzle Flash", + L"Bipod Modifier", + L"Range Modifier", // 5 + L"To-Hit Modifier", + L"Best Laser Range", + L"Aiming Bonus Modifier", + L"Burst Size Modifier", + L"Burst Penalty Modifier (Higher is better)", // 10 + L"Auto-Fire Penalty Modifier (Higher is better)", + L"AP Modifier", + L"AP to Burst Modifier (Lower is better)", + L"AP to Auto-Fire Modifier (Lower is better)", + L"AP to Ready Modifier (Lower is better)", // 15 + L"AP to Reload Modifier (Lower is better)", + L"Magazine Size Modifier", + L"AP to Attack Modifier (Lower is better)", + L"Damage Modifier", + L"Melee Damage Modifier", // 20 + L"Woodland Camo", + L"Urban Camo", + L"Desert Camo", + L"Snow Camo", + L"Stealth Modifier", // 25 + L"Hearing Range Modifier", + L"Vision Range Modifier", + L"Day Vision Range Modifier", + L"Night Vision Range Modifier", + L"Bright Light Vision Range Modifier", //30 + L"Cave Vision Range Modifier", + L"Tunnel Vision Percentage (Lower is better)", + L"Minimum Range for Aiming Bonus", +}; + +// HEADROCK: End new tooltip text + //The headers used for the merc's money. CHAR16 gMoneyStatsDesc[][ 13 ] = @@ -3492,6 +3675,7 @@ STR16 zOptionsToggleText[] = L"Auto save", L"Silent Skyrider", L"Low CPU Usage", + L"Enhanced Description Box", }; //This is the help text associated with the above toggles. diff --git a/Utils/_EnglishText.cpp b/Utils/_EnglishText.cpp index 5450c4c9..80d9964b 100644 --- a/Utils/_EnglishText.cpp +++ b/Utils/_EnglishText.cpp @@ -1084,15 +1084,16 @@ STR16 sKeyDescriptionStrings[2] = //The headers used to describe various weapon statistics. -CHAR16 gWeaponStatsDesc[][ 14 ] = +CHAR16 gWeaponStatsDesc[][ 16 ] = { - L"Weight (%s):", + // HEADROCK: Changed this for Extended Description project L"Status:", - L"Amount:", // Number of bullets left in a magazine + L"Weight (%s):", + L"AP Costs", L"Rng:", // Range L"Dam:", // Damage + L"Amount:", // Number of bullets left in a magazine L"AP:", // abbreviation for Action Points - L"", L"=", L"=", //Lal: additional strings for tooltips @@ -1101,10 +1102,190 @@ CHAR16 gWeaponStatsDesc[][ 14 ] = L"Damage:", //11 L"Weight:", //12 L"Stun Damage:",//13 - + // HEADROCK: Added new strings for extended description ** REDUNDANT ** + L"AUTOPEN:", //14 + L"AUTO/5:", //15 + L"Amount:", //16 }; +// HEADROCK: Several arrays of tooltip text for new Extended Description Box +// Please note, several of these are artificially inflated to 19 entries to help fix a complication with +// changing item type while watching its description box +STR16 gzWeaponStatsFasthelp[ 27 ] = +{ + L"Range", + L"Damage", + L"Burst/Auto Penalty", + L"Autofire shots per 5 AP", + L"Accuracy", + L"Reliability", + L"Repair Ease", + L"APs to ready", + L"APs to fire Single", + L"APs to fire Burst", + L"APs to fire Auto", //10 + L"APs to Reload", + L"APs to Reload Manually", + L"Flash Suppression", + L"Loudness (Lower is better)", + L"To-Hit Modifier", + L"Average Best Laser Range", + L"Aiming Modifier", + L"Min. Range for Aiming Bonus", + L"Bipod Modifier", + L"APs to Throw", //20 + L"APs to Launch", + L"APs to Stab", + L"No Single Shot!", + L"No Burst Mode!", + L"No Auto Mode!", + L"APs to Bash", +}; + +STR16 gzWeaponStatsFasthelpTactical[ 27 ] = +{ + L"Range", + L"Damage", + L"Burst/Auto Penalty", + L"Autofire shots per 5 AP", + L"Accuracy", + L"Reliability", + L"Repair Ease", + L"APs to ready", + L"APs to fire Single", + L"APs to fire Burst", + L"APs to fire Auto", //10 + L"APs to Reload", + L"APs to Reload Manually", + L"To-Hit Modifier", + L"Average Best Laser Range", + L"Aiming Modifier", + L"Min. Range for Aiming Bonus", + L"Flash Suppression", + L"Loudness (Lower is better)", + L"Bipod Modifier", + L"APs to Throw", //20 + L"APs to Launch", + L"APs to Stab", + L"No Single Shot!", + L"No Burst Mode!", + L"No Auto Mode!", + L"APs to Bash", +}; + +STR16 gzAmmoStatsFasthelp[ 20 ] = +{ + L"Armor Penetration (Lower is better)", + L"Bullet Tumble (Higher is better)", + L"Pre-impact Explosion (Higher is better)", + L"Tracer Effect", + L"Anti-Tank", + L"Lockbuster", + L"Ignores Armor", + L"Acidic", + L"Range Modifier", + L"Damage Modifier", + L"To-Hit Modifier", + L"Burst/Auto Penalty Modifier (Higher is better)", + L"Reliability Modifier", + L"Loudness Modifier (Lower is better)", + L"", + L"", + L"", + L"", + L"", + L"", +}; + +STR16 gzArmorStatsFasthelp[ 20 ] = +{ + L"Protection", + L"Coverage (Higher is better)", + L"Degrade Rate (Lower is better)", + L"AP Modifier", + L"To-Hit Modifier", + L"Woodland Camo", + L"Urban Camo", + L"Desert Camo", + L"Snow Camo", + L"Stealth Modifier", + L"Vision Range Modifier", + L"Day Vision Range Modifier", + L"Night Vision Range Modifier", + L"Bright Light Vision Range Modifier", + L"Cave Vision Range Modifier", + L"Tunnel Vision Percentage", + L"Hearing Range Modifier", + L"", + L"", + L"", +}; + +STR16 gzExplosiveStatsFasthelp[ 20 ] = +{ + L"Damage", + L"Stun Damage", + L"Blast Loudness (Lower is better)", + L"Volatility!!! (Lower is better)", + L"Blast Radius", + L"Effect Start Radius", + L"Effect Final Radius ", + L"Effect Duration", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", +}; + +STR16 gzMiscItemStatsFasthelp[ 34 ] = +{ + L"Item Size Modifier (Lower is better)", // 0 + L"Reliability Modifier", + L"Loudness Modifier (Lower is better)", + L"Hides Muzzle Flash", + L"Bipod Modifier", + L"Range Modifier", // 5 + L"To-Hit Modifier", + L"Best Laser Range", + L"Aiming Bonus Modifier", + L"Burst Size Modifier", + L"Burst Penalty Modifier (Higher is better)", // 10 + L"Auto-Fire Penalty Modifier (Higher is better)", + L"AP Modifier", + L"AP to Burst Modifier (Lower is better)", + L"AP to Auto-Fire Modifier (Lower is better)", + L"AP to Ready Modifier (Lower is better)", // 15 + L"AP to Reload Modifier (Lower is better)", + L"Magazine Size Modifier", + L"AP to Attack Modifier (Lower is better)", + L"Damage Modifier", + L"Melee Damage Modifier", // 20 + L"Woodland Camo", + L"Urban Camo", + L"Desert Camo", + L"Snow Camo", + L"Stealth Modifier", // 25 + L"Hearing Range Modifier", + L"Vision Range Modifier", + L"Day Vision Range Modifier", + L"Night Vision Range Modifier", + L"Bright Light Vision Range Modifier", //30 + L"Cave Vision Range Modifier", + L"Tunnel Vision Percentage (Lower is better)", + L"Minimum Range for Aiming Bonus", +}; + +// HEADROCK: End new tooltip text + //The headers used for the merc's money. CHAR16 gMoneyStatsDesc[][ 13 ] = @@ -3507,6 +3688,7 @@ STR16 zOptionsToggleText[] = L"Auto save", L"Silent Skyrider", L"Low CPU usage", + L"Enhanced Description Box", }; //This is the help text associated with the above toggles. diff --git a/Utils/_FrenchText.cpp b/Utils/_FrenchText.cpp index 58087cc4..5670b053 100644 --- a/Utils/_FrenchText.cpp +++ b/Utils/_FrenchText.cpp @@ -1075,15 +1075,16 @@ STR16 sKeyDescriptionStrings[2] = //The headers used to describe various weapon statistics. -CHAR16 gWeaponStatsDesc[][ 14 ] = +CHAR16 gWeaponStatsDesc[][ 16 ] = { - L"Poids (%s):", + // HEADROCK: Changed this for Extended Description project L"Etat :", - L"Munitions :", // Number of bullets left in a magazine + L"Poids (%s):", + L"AP Costs", L"Por. :", // Range L"Dйg. :", // Damage + L"Munitions :", // Number of bullets left in a magazine L"PA :", // abbreviation for Action Points - L"", L"=", L"=", //Lal: additional strings for tooltips @@ -1092,8 +1093,190 @@ CHAR16 gWeaponStatsDesc[][ 14 ] = L"Damage:", //11 L"Weight:", //12 L"Stun Damage:",//13 + // HEADROCK: Added new strings for extended description ** REDUNDANT ** + L"AUTOPEN:", //14 + L"AUTO/5:", //15 + L"Amount:", //16 + }; +// HEADROCK: Several arrays of tooltip text for new Extended Description Box +// Please note, several of these are artificially inflated to 19 entries to help fix a complication with +// changing item type while watching its description box +STR16 gzWeaponStatsFasthelp[ 27 ] = +{ + L"Range", + L"Damage", + L"Burst/Auto Penalty", + L"Autofire shots per 5 AP", + L"Accuracy", + L"Reliability", + L"Repair Ease", + L"APs to ready", + L"APs to fire Single", + L"APs to fire Burst", + L"APs to fire Auto", + L"APs to Reload", + L"APs to Reload Manually", + L"Flash Suppression", + L"Loudness (Lower is better)", + L"To-Hit Modifier", + L"Average Best Laser Range", + L"Aiming Modifier", + L"Min. Range for Aiming Bonus", + L"Bipod Modifier", + L"APs to Throw", + L"APs to Launch", + L"APs to Stab", + L"No Single Shot!", + L"No Burst Mode!", + L"No Auto Mode!", + L"APs to Bash", +}; + +STR16 gzWeaponStatsFasthelpTactical[ 27 ] = +{ + L"Range", + L"Damage", + L"Burst/Auto Penalty", + L"Autofire shots per 5 AP", + L"Accuracy", + L"Reliability", + L"Repair Ease", + L"APs to ready", + L"APs to fire Single", + L"APs to fire Burst", + L"APs to fire Auto", + L"APs to Reload", + L"APs to Reload Manually", + L"To-Hit Modifier", + L"Average Best Laser Range", + L"Aiming Modifier", + L"Min. Range for Aiming Bonus", + L"Flash Suppression", + L"Loudness (Lower is better)", + L"Bipod Modifier", + L"APs to Throw", + L"APs to Launch", + L"APs to Stab", + L"No Single Shot!", + L"No Burst Mode!", + L"No Auto Mode!", + L"APs to Bash", +}; + +STR16 gzAmmoStatsFasthelp[ 20 ] = +{ + L"Armor Penetration (Lower is better)", + L"Bullet Tumble (Higher is better)", + L"Pre-impact Explosion (Higher is better)", + L"Tracer Effect", + L"Anti-Tank", + L"Lockbuster", + L"Ignores Armor", + L"Acidic", + L"Range Modifier", + L"Damage Modifier", + L"To-Hit Modifier", + L"Burst/Auto Penalty Modifier (Higher is better)", + L"Reliability Modifier", + L"Loudness Modifier (Lower is better)", + L"", + L"", + L"", + L"", + L"", + L"", +}; + +STR16 gzArmorStatsFasthelp[ 20 ] = +{ + L"Protection", + L"Coverage (Higher is better)", + L"Degrade Rate (Lower is better)", + L"AP Modifier", + L"To-Hit Modifier", + L"Woodland Camo", + L"Urban Camo", + L"Desert Camo", + L"Snow Camo", + L"Stealth Modifier", + L"Vision Range Modifier", + L"Day Vision Range Modifier", + L"Night Vision Range Modifier", + L"Bright Light Vision Range Modifier", + L"Cave Vision Range Modifier", + L"Tunnel Vision Percentage", + L"Hearing Range Modifier", + L"", + L"", + L"", +}; + +STR16 gzExplosiveStatsFasthelp[ 20 ] = +{ + L"Damage", + L"Stun Damage", + L"Blast Loudness (Lower is better)", + L"Volatility!!! (Lower is better)", + L"Blast Radius", + L"Effect Start Radius", + L"Effect Final Radius ", + L"Effect Duration", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", +}; + +STR16 gzMiscItemStatsFasthelp[ 34 ] = +{ + L"Item Size Modifier (Lower is better)", // 0 + L"Reliability Modifier", + L"Loudness Modifier (Lower is better)", + L"Hides Muzzle Flash", + L"Bipod Modifier", + L"Range Modifier", // 5 + L"To-Hit Modifier", + L"Best Laser Range", + L"Aiming Bonus Modifier", + L"Burst Size Modifier", + L"Burst Penalty Modifier (Higher is better)", // 10 + L"Auto-Fire Penalty Modifier (Higher is better)", + L"AP Modifier", + L"AP to Burst Modifier (Lower is better)", + L"AP to Auto-Fire Modifier (Lower is better)", + L"AP to Ready Modifier (Lower is better)", // 15 + L"AP to Reload Modifier (Lower is better)", + L"Magazine Size Modifier", + L"AP to Attack Modifier (Lower is better)", + L"Damage Modifier", + L"Melee Damage Modifier", // 20 + L"Woodland Camo", + L"Urban Camo", + L"Desert Camo", + L"Snow Camo", + L"Stealth Modifier", // 25 + L"Hearing Range Modifier", + L"Vision Range Modifier", + L"Day Vision Range Modifier", + L"Night Vision Range Modifier", + L"Bright Light Vision Range Modifier", //30 + L"Cave Vision Range Modifier", + L"Tunnel Vision Percentage (Lower is better)", + L"Minimum Range for Aiming Bonus", +}; + +// HEADROCK: End new tooltip text + //The headers used for the merc's money. CHAR16 gMoneyStatsDesc[][ 13 ] = @@ -3493,6 +3676,7 @@ STR16 zOptionsToggleText[] = L"Auto save", L"Silent Skyrider", L"Low CPU usage", + L"Enhanced Description Box", }; //This is the help text associated with the above toggles. diff --git a/Utils/_GermanText.cpp b/Utils/_GermanText.cpp index 748df717..863b1587 100644 --- a/Utils/_GermanText.cpp +++ b/Utils/_GermanText.cpp @@ -1052,15 +1052,16 @@ STR16 sKeyDescriptionStrings[2]= }; //The headers used to describe various weapon statistics. -CHAR16 gWeaponStatsDesc[][ 14 ] = //USED TO BE 13 +CHAR16 gWeaponStatsDesc[][ 16 ] = { - L"Gew. (%s):", //weight + // HEADROCK: Changed this for Extended Description project L"Status:", - L"Anzahl:", // Number of bullets left in a magazine + L"Gew. (%s):", //weight + L"AP Kosten", L"Reichw.:", // Range L"Schaden:", + L"Anzahl:", // Number of bullets left in a magazine L"AP:", // abbreviation for Action Points - L"", L"=", L"=", //Lal: additional strings for tooltips @@ -1069,8 +1070,190 @@ CHAR16 gWeaponStatsDesc[][ 14 ] = //USED TO BE 13 L"Schaden:", //11 L"Gewicht:", //12 L"Bet. Schaden:", //13 + // HEADROCK: Added new strings for extended description ** REDUNDANT ** + L"AUTOSTRAFE:", //14 + L"AUTO/5:", //15 + L"Menge:", //16 + }; +// HEADROCK: Several arrays of tooltip text for new Extended Description Box +// Please note, several of these are artificially inflated to 19 entries to help fix a complication with +// changing item type while watching its description box +STR16 gzWeaponStatsFasthelp[ 27 ] = +{ + L"Reichweite", + L"Schaden", + L"Burst/Auto Strafe", + L"Autofeuer Schьsse fьr 5 AP", + L"Genauigkeit", + L"Zuverlдssigkeit", + L"Reparaturleichtigkeit", + L"APs zum Anlegen", + L"APs fьr Einzelschuss", + L"APs fьr FeuerstoЯ", + L"APs fьr Autofeuer", + L"APs zum Nachladen", + L"APs zum manuellen Nachladen", + L"Mьndungsfeuerdдmpfung", + L"Lautstдrke (Niedriger ist besser)", + L"Treffer Modifikator", + L"Durchschn. beste Laser Reichweite", + L"Zielen Modifikator", + L"Min. Reichweite fьr Zielen Bonus", + L"Zweibein Modifikator", + L"APs zum Werfen", + L"APs zum AbschieЯen", + L"APs zum Stechen", + L"Kein Einzelschuss!", + L"Kein FeuerstoЯ!", + L"Kein Autofeuer!", + L"APs zum Schlagen", +}; + +STR16 gzWeaponStatsFasthelpTactical[ 27 ] = +{ + L"Reichweite", + L"Schaden", + L"FeuerstoЯ/Autofeuer Strafe", + L"Autofeuer Schьsse fьr 5 AP", + L"Genauigkeit", + L"Zuverlдssigkeit", + L"Reparaturleichtigkeit", + L"APs zum Anlegen", + L"APs fьr Einzelschuss", + L"APs fьr FeuerstoЯ", + L"APs fьr Autofeuer", + L"APs zum Nachladen", + L"APs zum manuellen Nachladen", + L"Treffer Modifikator", + L"Durchschn. beste Laser Reichweite", + L"Zielen Modifikator", + L"Min. Reichweite fьr Zielen Bonus", + L"Mьndungsfeuerdдmpfung", + L"Lautstдrke (Niedriger ist besser)", + L"Zweibein Modifikator", + L"APs zum Werfen", + L"APs zum AbschieЯen", + L"APs zum Stechen", + L"Kein Einzelschuss!", + L"Kein FeuerstoЯ!", + L"Kein Autofeuer!", + L"APs zum Schlagen", +}; + +STR16 gzAmmoStatsFasthelp[ 20 ] = +{ + L"Rьstungsdurchschlag (Niedriger ist besser)", + L"Projektilsturz (Hцher ist besser)", + L"Voraufprall Explosion (Hцher ist besser)", + L"Leuchtspur Effekt", + L"Panzerbrechend", + L"Schlossbrecher", + L"Ignoriert Rьstung", + L"Sдurehaltig", + L"Reichweite MOdifikator", + L"Schaden Modifikator", + L"Treffer Modifikator", + L"FeuerstoЯ/Autofeuer Strafe Modifikator (Hцher ist besser)", + L"Zuverlдssigheits Modifikator", + L"Lautstдrke Modifikator (Niedriger ist besser)", + L"", + L"", + L"", + L"", + L"", + L"", +}; + +STR16 gzArmorStatsFasthelp[ 20 ] = +{ + L"Schutz", + L"Deckung (Hцher ist besser)", + L"Abschwдchungsgrad (Niedriger ist besser) ", + L"AP Modifikator", + L"Treffer Modifikator", + L"Waldgebiet Tarnung", + L"Stadt Tarnung", + L"Wьste Tarnung", + L"Schnee Tarnung", + L"Anschleichen Modifikator", + L"Sichtweite Modifikator", + L"Tagsichtweite Modifikator", + L"Nachtsichtweite Modifikator", + L"Grelles Licht Modifikator", + L"Hцhle Sichtweite Modifikator", + L"Tunnelsicht Modifikator", + L"Gerдuschreichweite Modifikator", + L"", + L"", + L"", +}; + +STR16 gzExplosiveStatsFasthelp[ 20 ] = +{ + L"Schaden", + L"Betдubungsschaden", + L"Detonation Gerдusch (Niedriger ist besser)", + L"Verflьchtigung!!! (Niedriger ist besser)", + L"Detonationsbereich", + L"Startauswirkungsbereich", + L"Endauswirkungsbereich", + L"Auswirkungsdauer", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", +}; + +STR16 gzMiscItemStatsFasthelp[ 34 ] = +{ + L"GegenstandsgrцЯe Modifikator (Niedriger ist besser)", + L"Zuverlдssigkeits Modifikator", + L"Lautstдrke Modifikator (Niedriger ist besser)", + L"Verbirgt Mьndungsfeuer", + L"Zweibein Modifikator", + L"Reichweite Modifikator", + L"Treffer Modifikator", + L"Beste Laser Reichweite", + L"Zielen Bonus Modifikator", + L"FeuerstoЯgrцЯe Modifikator", + L"FeuerstoЯ Strafe Modifikator", + L"Autofeuer Strafe Modifikator", + L"AP Modifikator", + L"AP fьr FeuerstoЯ Modifikator (Niedriger ist besser)", + L"AP fьr Autofeuer Modifikator (Niedriger ist besser)", + L"AP fьr Anlegen Modifikator", + L"AP fьr Nachladen Mofifikator", + L"MagazingrцЯe Modifikator", + L"AP fьr Angriff Modifikator", + L"Schaden Modifikator", + L"Nahkampf Modifikator", + L"Waldgebiet Tarnung", + L"Stadt Tarnung", + L"Wьsten Tarnung", + L"Schnee Tarnung", + L"Anschleichen Modifikator", + L"Gerдuschreichweite Modifikator", + L"Sichtweite Modifikator", + L"Tagsichtweite Modifikator", + L"Nachtsichtweite Modifikator", + L"Grelles Licht Modifikator", + L"Hцhle Sichtweite Modifikator", + L"Tunnelsicht Modifikator (Niedriger ist besser)", + L"Minimale Reichweiter fьr Zielbonus", +}; + +// HEADROCK: End new tooltip text + //The headers used for the merc's money. CHAR16 gMoneyStatsDesc[][ 13 ] = { @@ -3310,6 +3493,7 @@ STR16 zOptionsToggleText[] = L"Automatisch speichern", L"Stummer Skyrider", L"Niedrige CPU Belastung", + L"Enhanced Description Box", }; //This is the help text associated with the above toggles. diff --git a/Utils/_ItalianText.cpp b/Utils/_ItalianText.cpp index 7f856ed9..a74e4572 100644 --- a/Utils/_ItalianText.cpp +++ b/Utils/_ItalianText.cpp @@ -1068,15 +1068,16 @@ STR16 sKeyDescriptionStrings[2] = //The headers used to describe various weapon statistics. -CHAR16 gWeaponStatsDesc[][ 14 ] = +CHAR16 gWeaponStatsDesc[][ 16 ] = { - L"Peso (%s):", + // HEADROCK: Changed this for Extended Description project L"Stato:", - L"Ammontare:", // Number of bullets left in a magazine + L"Peso (%s):", + L"AP Costs", L"Git:", // Range L"Dan:", // Damage + L"Ammontare:", // Number of bullets left in a magazine L"PA:", // abbreviation for Action Points - L"", L"=", L"=", //Lal: additional strings for tooltips @@ -1085,8 +1086,190 @@ CHAR16 gWeaponStatsDesc[][ 14 ] = L"Damage:", //11 L"Weight:", //12 L"Stun Damage:",//13 + // HEADROCK: Added new strings for extended description ** REDUNDANT ** + L"AUTOPEN:", //14 + L"AUTO/5:", //15 + L"Amount:", //16 + }; +// HEADROCK: Several arrays of tooltip text for new Extended Description Box +// Please note, several of these are artificially inflated to 19 entries to help fix a complication with +// changing item type while watching its description box +STR16 gzWeaponStatsFasthelp[ 27 ] = +{ + L"Range", + L"Damage", + L"Burst/Auto Penalty", + L"Autofire shots per 5 AP", + L"Accuracy", + L"Reliability", + L"Repair Ease", + L"APs to ready", + L"APs to fire Single", + L"APs to fire Burst", + L"APs to fire Auto", + L"APs to Reload", + L"APs to Reload Manually", + L"Flash Suppression", + L"Loudness (Lower is better)", + L"To-Hit Modifier", + L"Average Best Laser Range", + L"Aiming Modifier", + L"Min. Range for Aiming Bonus", + L"Bipod Modifier", + L"APs to Throw", + L"APs to Launch", + L"APs to Stab", + L"No Single Shot!", + L"No Burst Mode!", + L"No Auto Mode!", + L"APs to Bash", +}; + +STR16 gzWeaponStatsFasthelpTactical[ 27 ] = +{ + L"Range", + L"Damage", + L"Burst/Auto Penalty", + L"Autofire shots per 5 AP", + L"Accuracy", + L"Reliability", + L"Repair Ease", + L"APs to ready", + L"APs to fire Single", + L"APs to fire Burst", + L"APs to fire Auto", + L"APs to Reload", + L"APs to Reload Manually", + L"To-Hit Modifier", + L"Average Best Laser Range", + L"Aiming Modifier", + L"Min. Range for Aiming Bonus", + L"Flash Suppression", + L"Loudness (Lower is better)", + L"Bipod Modifier", + L"APs to Throw", + L"APs to Launch", + L"APs to Stab", + L"No Single Shot!", + L"No Burst Mode!", + L"No Auto Mode!", + L"APs to Bash", +}; + +STR16 gzAmmoStatsFasthelp[ 20 ] = +{ + L"Armor Penetration (Lower is better)", + L"Bullet Tumble (Higher is better)", + L"Pre-impact Explosion (Higher is better)", + L"Tracer Effect", + L"Anti-Tank", + L"Lockbuster", + L"Ignores Armor", + L"Acidic", + L"Range Modifier", + L"Damage Modifier", + L"To-Hit Modifier", + L"Burst/Auto Penalty Modifier (Higher is better)", + L"Reliability Modifier", + L"Loudness Modifier (Lower is better)", + L"", + L"", + L"", + L"", + L"", + L"", +}; + +STR16 gzArmorStatsFasthelp[ 20 ] = +{ + L"Protection", + L"Coverage (Higher is better)", + L"Degrade Rate (Lower is better)", + L"AP Modifier", + L"To-Hit Modifier", + L"Woodland Camo", + L"Urban Camo", + L"Desert Camo", + L"Snow Camo", + L"Stealth Modifier", + L"Vision Range Modifier", + L"Day Vision Range Modifier", + L"Night Vision Range Modifier", + L"Bright Light Vision Range Modifier", + L"Cave Vision Range Modifier", + L"Tunnel Vision Percentage", + L"Hearing Range Modifier", + L"", + L"", + L"", +}; + +STR16 gzExplosiveStatsFasthelp[ 20 ] = +{ + L"Damage", + L"Stun Damage", + L"Blast Loudness (Lower is better)", + L"Volatility!!! (Lower is better)", + L"Blast Radius", + L"Effect Start Radius", + L"Effect Final Radius ", + L"Effect Duration", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", +}; + +STR16 gzMiscItemStatsFasthelp[ 34 ] = +{ + L"Item Size Modifier (Lower is better)", // 0 + L"Reliability Modifier", + L"Loudness Modifier (Lower is better)", + L"Hides Muzzle Flash", + L"Bipod Modifier", + L"Range Modifier", // 5 + L"To-Hit Modifier", + L"Best Laser Range", + L"Aiming Bonus Modifier", + L"Burst Size Modifier", + L"Burst Penalty Modifier (Higher is better)", // 10 + L"Auto-Fire Penalty Modifier (Higher is better)", + L"AP Modifier", + L"AP to Burst Modifier (Lower is better)", + L"AP to Auto-Fire Modifier (Lower is better)", + L"AP to Ready Modifier (Lower is better)", // 15 + L"AP to Reload Modifier (Lower is better)", + L"Magazine Size Modifier", + L"AP to Attack Modifier (Lower is better)", + L"Damage Modifier", + L"Melee Damage Modifier", // 20 + L"Woodland Camo", + L"Urban Camo", + L"Desert Camo", + L"Snow Camo", + L"Stealth Modifier", // 25 + L"Hearing Range Modifier", + L"Vision Range Modifier", + L"Day Vision Range Modifier", + L"Night Vision Range Modifier", + L"Bright Light Vision Range Modifier", //30 + L"Cave Vision Range Modifier", + L"Tunnel Vision Percentage (Lower is better)", + L"Minimum Range for Aiming Bonus", +}; + +// HEADROCK: End new tooltip text + //The headers used for the merc's money. CHAR16 gMoneyStatsDesc[][ 13 ] = @@ -3485,6 +3668,7 @@ STR16 zOptionsToggleText[] = L"Auto save", L"Silent Skyrider", L"Low CPU usage", + L"Enhanced Description Box", }; //This is the help text associated with the above toggles. diff --git a/Utils/_Ja25PolishText.cpp b/Utils/_Ja25PolishText.cpp index 8b7bf82b..8ffd54ab 100644 --- a/Utils/_Ja25PolishText.cpp +++ b/Utils/_Ja25PolishText.cpp @@ -15,56 +15,56 @@ STR16 zNewTacticalMessages[]= { - L"Range to target: %d tiles, Brightness: %d/%d", - L"Attaching the transmitter to your laptop computer.", - L"You cannot afford to hire %s", - L"For a limited time, the above fee covers the cost of the entire mission and includes the equipment listed below.", - L"Hire %s now and take advantage of our unprecedented 'one fee covers all' pricing. Also included in this unbelievable offer is the mercenary's personal equipment at no charge.", - L"Fee", - L"There is someone else in the sector...", - L"Gun Range: %d tiles, Chance to hit: %d percent", - L"Display Cover", - L"Line of Sight", - L"New Recruits cannot arrive there.", - L"Since your laptop has no transmitter, you won't be able to hire new team members. Perhaps this would be a good time to load a saved game or start over!", - L"%s hears the sound of crumpling metal coming from underneath Jerry's body. It sounds disturbingly like your laptop antenna being crushed.", //the %s is the name of a merc. @@@ Modified + L"Odlegіoњж od celu (w polach): %d, Jasnoњж = %d/%d", + L"Nadajnik zostaі podі№czony do twojego laptopa.", + L"Nie moїesz zatrudniж %s(a)", + L"Na okreњlony czas, poniїsze honorarium pokryje koszt caіej misji razem z wyposaїeniem zamieszonym poniїej.", + L"Zatrudnij %s(a) juї teraz i weџ udziaі naszej promocji 'jedno honorarium pokrywa wszystko'. Ponadto w tej niewiarygodnej ofercie caіy ekwipunek najemnika dostaniesz za darmo.", + L"Honorarium", + L"Ktoњ jest w sektorze...", + L"Zasiкg broni (w polach): %d, Szansa na trafienie: %d procent", + L"Pokaї osіonк", + L"Zasiкg wzroku", + L"Nowi rekruci nie mog№ tam przybyж.", + L"Dopуki twуj laprop bкdzie bez nadajnika, nie bкdziesz mуgі zatrudniaж nowych czіonkуw zespoіu. Moїliwe, їe to odpowiedni moment їeby odczytaж zapisany stan gry lub zacz№ж graж od nowa!", + L"%s sіyszy dџwiкk zgniatanego metalu dochodz№cy spod ciaіa Jerrego. To niestety zabrzmiaіo jak dџwiкk zgniatanej anteny od twojego laptopa.", //the %s is the name of a merc. @@@ Modified L"After scanning the note left behind by Deputy Commander Morris, %s senses an oppurtinity. The note contains the coordinates for launching missiles against different towns in Arulco. It also gives the coodinates of the origin - the missile facility.", L"Noticing the control panel, %s figures the numbers can be reveresed, so that the missile might destroy this very facility. %s needs to find an escape route. The elevator appears to offer the fastest solution...", - L"This is an IRON MAN game and you cannot save when enemies are around.", // @@@ new text - L"(Cannot save during combat)", //@@@@ new text - L"The current campaign name is greater than 30 characters.", // @@@ new text - L"The current campaign cannot be found.", // @@@ new text - L"Campaign: Default ( %S )", // @@@ new text - L"Campaign: %S", // @@@ new text - L"You have selected the campaign %S. This campaign is a player-modified version of the original Unfinished Business campaign. Are you sure you wish to play the %S campaign?", // @@@ new text - L"In order to use the editor, please select a campaign other than the default.", ///@@new + L"To jest tryb CZЈOWIEK ZE STALI i nie moїesz zapisywaж gry gdy wrуg jest w sektorze.", // @@@ new text + L"(Nie moїna zapisywaж gry podczas walki)", //@@@@ new text + L"Kampania ma wiкcej niї 30 postaci.", // @@@ new text + L"Nie moїna odnaleџж kampanii.", // @@@ new text + L"Kampania: Standardowa ( %S )", // @@@ new text + L"Kampania: %S", // @@@ new text + L"Wybraіeњ kampaniк %S. Ta kampania zostaіa stworzona przez fanуw gry. Czy jesteњ pewien, їe chcesz w ni№ zagraж?", // @@@ new text + L"Їeby uїyж edytora powinieneњ wczeњniej wybraж kampaniк inn№ niї standardowa.", ///@@new }; //these strings match up with the defines in IMP Skill trait.cpp STR16 gzIMPSkillTraitsText[]= { - L"Lock picking", - L"Hand to hand combat", - L"Electronics", - L"Night operations", - L"Throwing", - L"Teaching", - L"Heavy Weapons", - L"Auto Weapons", - L"Stealth", - L"Ambidextrous", - L"Knifing", - L"Sniper", - L"Camouflage", - L"Martial Arts", + L"Otwieranie zamkуw", + L"Walka wrкcz", + L"Elektronika", + L"Operacje nocne", + L"Rzucanie", + L"Szkolenie", + L"Broс ciкїka", + L"Broс automatyczna", + L"Skradanie siк", + L"Oburкcznoњж", + L"Broс biaіa", + L"Snajper", + L"Kamuflaї", + L"Sztuki walki", - L"None", - L"I.M.P. Specialties", + L"Brak", + L"Umiejкtnoњci", }; //@@@: New string as of March 3, 2000. STR16 gzIronManModeWarningText[]= { - L"You have chosen IRON MAN mode. This setting makes the game considerably more challenging as you will not be able to save your game when in a sector occupied by enemies. This setting will affect the entire course of the game. Are you sure want to play in IRON MAN mode?", + L"Wybraіeњ tryb CZЈOWIEK ZE STALI. Opcja ta sprawi, їe gra bкdzie duїo trudniejsza poniewaї nie bкdzie moїliwoњci zapisywania gry podczas walki. Bкdzie to miaіo wpіyw na caіy przebieg rozgrywki. Czy na pewno chcesz graж w trybie CZЈOWIEK ZE STALI?", }; diff --git a/Utils/_PolishText.cpp b/Utils/_PolishText.cpp index 146f025c..08ba88fd 100644 --- a/Utils/_PolishText.cpp +++ b/Utils/_PolishText.cpp @@ -103,12 +103,12 @@ FAST HELP TEXT -- Explains how the syntax of fast help text works. STR16 pCreditsJA2113[] = { L"@T,{;JA2 v1.13 Development Team", - L"@T,C144,R134,{;Coding", - L"@T,C144,R134,{;Graphics and Sounds", - L"@};(Various other mods!)", - L"@T,C144,R134,{;Items", - L"@T,C144,R134,{;Other Contributors", - L"@};(All other community members who contributed input and feedback!)", + L"@T,C144,R134,{;Kodowanie", + L"@T,C144,R134,{;Grafika i dџwiкki", + L"@};(Rуїne inne mody!)", + L"@T,C144,R134,{;Przedmioty", + L"@T,C144,R134,{;Pozostali autorzy", + L"@};(Wszyscy pozostali czіonkowie sceny JA ktуrzy nas wsparli!)", }; CHAR16 ItemNames[MAXITEMS][80] = @@ -144,8 +144,10 @@ CHAR16 AmmoCaliber[MAXITEMS][20];// = // L"5.7mm", // L"Monstrum", // L"Rakiety", -// L"", // dart +// L"strzaіka", // dart // L"", // flame +// L".50 cal", // barrett +// L"9mm Hvy", // Val silent //}; // This BobbyRayAmmoCaliber is virtually the same as AmmoCaliber however the bobby version doesnt have as much room for the words. @@ -172,11 +174,14 @@ CHAR16 BobbyRayAmmoCaliber[MAXITEMS][20] ;//= // L"5.7mm", // L"Monstrum", // L"Rakiety", -// L"", // dart +// L"strzaіka", // dart +// L"", // flamethrower +// L".50 cal", // barrett +// L"9mm Hvy", // Val silent //}; -CHAR16 WeaponType[][30] = +CHAR16 WeaponType[MAXITEMS][30] = { L"Inny", L"Pistolet", @@ -247,7 +252,7 @@ CHAR16 Message[][STRING_LENGTH] = L"duїa waga", L"niewielkie rozmiary", L"szybki ci№gіy ogieс", - L"brak ci№gіego ognia", + L"brak moїliwoњci strzelania seri№", L"duїy magazynek", L"maіy magazynek", @@ -289,7 +294,7 @@ CHAR16 Message[][STRING_LENGTH] = L"Ta zmiana bкdzie trwaіa. Kontynuowaж?", L"%s ma wiкcej energii!", L"%s poњlizgn№і(nкіa) siк na kulkach!", - L"%s nie chwyciі(a) - %s!", + L"%s nie chwyciі(a) - %s!", //to byіo - L"%s nie zdoіaі chwyciж %s!", teraz jest - L"%s nie zdoіaі zabraж %s z rкki wroga!", L"%s naprawiі(a) %s", L"Przerwanie dla: ", L"Poddaж siк?", @@ -298,10 +303,13 @@ CHAR16 Message[][STRING_LENGTH] = L"Aby podrуїowaж helikopterem Skyridera, musisz najpierw zmieniж przydziaі najemnikуw na POJAZD/HELIKOPTER.", L"%s miaі(a) czas by przeіadowaж tylko jedn№ broс", L"Tura dzikich kotуw", - L"automatic", - L"no full auto", - L"The enemy has no more items to steal!", - L"The enemy has no item in its hand!", + L"ogieс ci№gіy", + L"brak ognia ci№gіego", + L"celna", + L"niecelna", + L"broс samoczynna", + L"Wrуg nie ma przedmiotуw, ktуre moїna ukraњж!", + L"Wrуg nie ma їadnego przedmiotu w rкce!", }; @@ -366,13 +374,13 @@ STR16 pAssignmentStrings[] = L"Sіuїba", // on active duty L"Lekarz", // administering medical aid L"Pacjent", // getting medical aid - L"Pojazd", // sitting around resting + L"Pojazd", // in a vehicle L"Podrуї", // in transit - abbreviated form L"Naprawa", // repairing - L"Praktyka", // training themselves // ***************NEW******************** as of June 24. 1998 - L"Samoobr.", // training a town to revolt // *************NEW******************** as of June 24, 1998 + L"Praktyka", // training themselves + L"Samoobr.", // training a town to revolt L"Instruk.", // training a teammate - L"Uczeс", // being trained by someone else // *******************NEW************** as of June 24, 1998 + L"Uczeс", // being trained by someone else L"Nie їyje", // dead L"Obezwі.", // abbreviation for incapacitated L"Jeniec", // Prisoner of war - captured @@ -497,7 +505,7 @@ STR16 pLongAssignmentStrings[] = L"Nie їyje", L"Obezwіadniony", L"Jeniec", - L"W szpitalu", + L"W szpitalu", // patient in a hospital L"Pusty", // Vehicle is empty }; @@ -540,8 +548,8 @@ STR16 pInvPanelTitleStrings[] = L"Osіona", // the armor rating of the merc L"Ekwip.", // the weight the merc is carrying L"Kamuf.", // the merc's camouflage rating - L"Camouflage:", - L"Protection:", + L"Kamuflaї:", + L"Ochrona:", }; STR16 pShortAttributeStrings[] = @@ -561,7 +569,7 @@ STR16 pShortAttributeStrings[] = STR16 pUpperLeftMapScreenStrings[] = { - L"Przydziaі", // the mercs current assignment // *********************NEW****************** as of June 24, 1998 + L"Przydziaі", // the mercs current assignment L"Kontrakt", // the contract info about the merc L"Zdrowie", // the health level of the current merc L"Morale", // the morale of the current merc @@ -571,10 +579,10 @@ STR16 pUpperLeftMapScreenStrings[] = STR16 pTrainingStrings[] = { - L"Praktyka", // tell merc to train self // ****************************NEW******************* as of June 24, 1998 - L"Samoobrona", // tell merc to train town // *****************************NEW ****************** as of June 24, 1998 + L"Praktyka", // tell merc to train self + L"Samoobrona", // tell merc to train town L"Instruktor", // tell merc to act as trainer - L"Uczeс", // tell merc to be train by other // **********************NEW******************* as of June 24, 1998 + L"Uczeс", // tell merc to be train by other }; STR16 pGuardMenuStrings[] = @@ -621,31 +629,31 @@ STR16 pAssignMenuStrings[] = //lal STR16 pMilitiaControlMenuStrings[] = { - L"Attack", // set militia to aggresive - L"Hold Position", // set militia to stationary - L"Retreat", // retreat militia - L"Come to me", // retreat militia - L"Get down", // retreat militia - L"Take cover", - L"All: Attack", - L"All: Hold Position", - L"All: Retreat", - L"All: Come to me", - L"All: Spread out", - L"All: Get down", - L"All: Take cover", - //L"All: Find items", - L"Cancel", // cancel this menu + L"Atakuj", // set militia to aggresive + L"Utrzymaj pozycjк", // set militia to stationary + L"Wycofaj siк", // retreat militia + L"Chodџ do mnie", // retreat militia + L"Padnij", // retreat militia + L"Kryj siк", + L"Wszyscy: Atakujcie", + L"Wszyscy: Utrzymajcie pozycje", + L"Wszyscy: Wycofajcie siк", + L"Wszyscy: Chodџcie do mnie", + L"Wszyscy: Rozproszcie siк", + L"Wszyscy: Padnijcie", + L"Wszyscy: Kryjcie siк", + //L"Wszyscy: Szukajcie przedmiotуw", + L"Anuluj", // cancel this menu }; //STR16 pTalkToAllMenuStrings[] = //{ -// L"Attack", // set militia to aggresive -// L"Hold Position", // set militia to stationary -// L"Retreat", // retreat militia -// L"Come to me", // retreat militia -// L"Get down", // retreat militia -// L"Cancel", // cancel this menu +// L"Atak", // set militia to aggresive +// L"Utrzymaj pozycjк", // set militia to stationary +// L"Odwrуt", // retreat militia +// L"Za mn№", // retreat militia +// L"Padnij", // retreat militia +// L"Anuluj", // cancel this menu //}; STR16 pRemoveMercStrings[] = @@ -670,10 +678,10 @@ STR16 pAttributeMenuStrings[] = STR16 pTrainingMenuStrings[] = { - L"Praktyka", // train yourself //****************************NEW************************** as of June 24, 1998 - L"Samoobrona", // train the town // ****************************NEW ************************* as of June 24, 1998 - L"Instruktor", // train your teammates // *******************NEW************************** as of June 24, 1998 - L"Uczeс", // be trained by an instructor //***************NEW************************** as of June 24, 1998 + L"Praktyka", // train yourself + L"Samoobrona", // train the town + L"Instruktor", // train your teammates + L"Uczeс", // be trained by an instructor L"Anuluj", // cancel this menu }; @@ -743,23 +751,23 @@ STR16 gzMercSkillText[] = { L"Brak umiejкtnoњci", L"Otwieranie zamkуw", - L"Walka wrкcz", + L"Walka wrкcz", //JA25: modified L"Elektronika", - L"Nocne operacje", + L"Nocne operacje", //JA25: modified L"Rzucanie", L"Szkolenie", L"Ciкїka broс", L"Broс automatyczna", L"Skradanie siк", L"Oburкcznoњж", - L"Kradzieїe", + L"Kradzieї", L"Sztuki walki", L"Broс biaіa", - L"Sniper", - L"Kamuflaї", - L"Kamuflaї (Urban)", - L"Kamuflaї (Desert)", - L"Kamuflaї (Snow)", + L"Snajper", //JA25: modified + L"Kamuflaї", //JA25: modified + L"Kamuflaї (miasto)", + L"Kamuflaї (pustynia)", + L"Kamuflaї (њnieg)", L"(Eksp.)", }; @@ -820,7 +828,7 @@ STR16 pMapScreenMouseRegionHelpText[] = L"Nanieњ trasк podrуїy", L"Kontrakt najemnika", L"Usuс najemnika", - L"Њpij", // *****************************NEW********************* as of June 29, 1998 + L"Њpij", }; // volumes of noises @@ -977,9 +985,9 @@ STR16 gpStrategicString[] = //The different headers(titles) for the prebattle interface. L"STARCIE Z WROGIEM", //STR_PB_ENEMYENCOUNTER_HEADER, L"INWAZJA WROGA", //STR_PB_ENEMYINVASION_HEADER, // 30 - L"ZASADZKA WROGA", - L"WEJЊCIE DO WROGIEGO SEKTORA", - L"ATAK STWORУW", + L"ZASADZKA WROGA", //STR_PB_ENEMYAMBUSH_HEADER + L"WEJЊCIE DO WROGIEGO SEKTORA", //STR_PB_ENTERINGENEMYSECTOR_HEADER + L"ATAK STWORУW", //STR_PB_CREATUREATTACK_HEADER L"ATAK DZIKICH KOTУW", //STR_PB_BLOODCATAMBUSH_HEADER L"WEJЊCIE DO LEGOWISKA DZIKICH KOTУW", //STR_PB_ENTERINGBLOODCATLAIR_HEADER @@ -994,7 +1002,7 @@ STR16 gpStrategicString[] = L"Dzikie koty", L"Sektor", L"Brak", //If there are no uninvolved mercs in this fight. - L"N/D", //Acronym of Not Applicable N/A + L"N/D", //Acronym of Not Applicable L"d", //One letter abbreviation of day L"g", //One letter abbreviation of hour @@ -1069,25 +1077,208 @@ STR16 sKeyDescriptionStrings[2] = //The headers used to describe various weapon statistics. -CHAR16 gWeaponStatsDesc[][ 14 ] = +CHAR16 gWeaponStatsDesc[][ 16 ] = { - L"Waga (%s):", // change kg to another weight unit if your standard is not kilograms, and TELL SIR-TECH! + // HEADROCK: Changed this for Extended Description project L"Stan:", - L"Iloњж:", // Number of bullets left in a magazine + L"Waga (%s):", + L"PA Koszty", L"Zas.:", // Range L"Siіa:", // Damage + L"Iloњж:", // Number of bullets left in a magazine L"PA:", // abbreviation for Action Points - L"", L"=", L"=", //Lal: additional strings for tooltips - L"Accuracy:", //9 - L"Range:", //10 - L"Damage:", //11 - L"Weight:", //12 - L"Stun Damage:",//13 + L"Celnoњж:", //9 + L"Zasiкg:", //10 + L"Siіa:", //11 + L"Waga:", //12 + L"Ogіuszenie:",//13 + // HEADROCK: Added new strings for extended description ** REDUNDANT ** + L"AUTOPEN:", //14 + L"AUTO/5:", //15 + L"Amount:", //16 + }; +// HEADROCK: Several arrays of tooltip text for new Extended Description Box +// Please note, several of these are artificially inflated to 19 entries to help fix a complication with +// changing item type while watching its description box +STR16 gzWeaponStatsFasthelp[ 27 ] = +{ + L"Range", + L"Damage", + L"Burst/Auto Penalty", + L"Autofire shots per 5 AP", + L"Accuracy", + L"Reliability", + L"Repair Ease", + L"APs to ready", + L"APs to fire Single", + L"APs to fire Burst", + L"APs to fire Auto", + L"APs to Reload", + L"APs to Reload Manually", + L"Flash Suppression", + L"Loudness (Lower is better)", + L"To-Hit Modifier", + L"Average Best Laser Range", + L"Aiming Modifier", + L"Min. Range for Aiming Bonus", + L"Bipod Modifier", + L"APs to Throw", + L"APs to Launch", + L"APs to Stab", + L"No Single Shot!", + L"No Burst Mode!", + L"No Auto Mode!", + L"APs to Bash", +}; + +STR16 gzWeaponStatsFasthelpTactical[ 27 ] = +{ + L"Range", + L"Damage", + L"Burst/Auto Penalty", + L"Autofire shots per 5 AP", + L"Accuracy", + L"Reliability", + L"Repair Ease", + L"APs to ready", + L"APs to fire Single", + L"APs to fire Burst", + L"APs to fire Auto", + L"APs to Reload", + L"APs to Reload Manually", + L"To-Hit Modifier", + L"Average Best Laser Range", + L"Aiming Modifier", + L"Min. Range for Aiming Bonus", + L"Flash Suppression", + L"Loudness (Lower is better)", + L"Bipod Modifier", + L"APs to Throw", + L"APs to Launch", + L"APs to Stab", + L"No Single Shot!", + L"No Burst Mode!", + L"No Auto Mode!", + L"APs to Bash", +}; + +STR16 gzAmmoStatsFasthelp[ 20 ] = +{ + L"Armor Penetration (Lower is better)", + L"Bullet Tumble (Higher is better)", + L"Pre-impact Explosion (Higher is better)", + L"Tracer Effect", + L"Anti-Tank", + L"Lockbuster", + L"Ignores Armor", + L"Acidic", + L"Range Modifier", + L"Damage Modifier", + L"To-Hit Modifier", + L"Burst/Auto Penalty Modifier (Higher is better)", + L"Reliability Modifier", + L"Loudness Modifier (Lower is better)", + L"", + L"", + L"", + L"", + L"", + L"", +}; + +STR16 gzArmorStatsFasthelp[ 20 ] = +{ + L"Protection", + L"Coverage (Higher is better)", + L"Degrade Rate (Lower is better)", + L"AP Modifier", + L"To-Hit Modifier", + L"Woodland Camo", + L"Urban Camo", + L"Desert Camo", + L"Snow Camo", + L"Stealth Modifier", + L"Vision Range Modifier", + L"Day Vision Range Modifier", + L"Night Vision Range Modifier", + L"Bright Light Vision Range Modifier", + L"Cave Vision Range Modifier", + L"Tunnel Vision Percentage", + L"Hearing Range Modifier", + L"", + L"", + L"", +}; + +STR16 gzExplosiveStatsFasthelp[ 20 ] = +{ + L"Damage", + L"Stun Damage", + L"Blast Loudness (Lower is better)", + L"Volatility!!! (Lower is better)", + L"Blast Radius", + L"Effect Start Radius", + L"Effect Final Radius ", + L"Effect Duration", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", +}; + +STR16 gzMiscItemStatsFasthelp[ 34 ] = +{ + L"Item Size Modifier (Lower is better)", // 0 + L"Reliability Modifier", + L"Loudness Modifier (Lower is better)", + L"Hides Muzzle Flash", + L"Bipod Modifier", + L"Range Modifier", // 5 + L"To-Hit Modifier", + L"Best Laser Range", + L"Aiming Bonus Modifier", + L"Burst Size Modifier", + L"Burst Penalty Modifier (Higher is better)", // 10 + L"Auto-Fire Penalty Modifier (Higher is better)", + L"AP Modifier", + L"AP to Burst Modifier (Lower is better)", + L"AP to Auto-Fire Modifier (Lower is better)", + L"AP to Ready Modifier (Lower is better)", // 15 + L"AP to Reload Modifier (Lower is better)", + L"Magazine Size Modifier", + L"AP to Attack Modifier (Lower is better)", + L"Damage Modifier", + L"Melee Damage Modifier", // 20 + L"Woodland Camo", + L"Urban Camo", + L"Desert Camo", + L"Snow Camo", + L"Stealth Modifier", // 25 + L"Hearing Range Modifier", + L"Vision Range Modifier", + L"Day Vision Range Modifier", + L"Night Vision Range Modifier", + L"Bright Light Vision Range Modifier", //30 + L"Cave Vision Range Modifier", + L"Tunnel Vision Percentage (Lower is better)", + L"Minimum Range for Aiming Bonus", +}; + +// HEADROCK: End new tooltip text + //The headers used for the merc's money. CHAR16 gMoneyStatsDesc[][ 13 ] = @@ -1309,7 +1500,7 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] = L"Wycisz", L"Pozycja do gуry (|P|g|U|p)", L"Poziom kursora (|T|a|b)", - L"Wspinaj siк / Zeskocz", + L"Wspinaj siк / |Zeskocz", L"Pozycja w dуі (|P|g|D|n)", L"Badaж (|C|t|r|l)", L"Poprzedni najemnik", @@ -1395,7 +1586,7 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] = L"Ktoњ inny majstruje przy tych drzwiach.", L"Stan: %d/%d\nPaliwo: %d/%d", L"%s nie widzi - %s.", // Cannot see person trying to talk to - L"Attachment removed", + L"Dodatek usuniкty", L"Can not gain another vehicle as you already have 2", }; @@ -1704,38 +1895,38 @@ STR16 pSenderNameList[] = L"Pomoc", L"Psych Pro Inc", L"Speck", - L"R.I.S.", + L"R.I.S.", //5 L"Barry", L"Blood", L"Lynx", L"Grizzly", - L"Vicki", + L"Vicki", //10 L"Trevor", L"Grunty", L"Ivan", L"Steroid", - L"Igor", + L"Igor", //15 L"Shadow", L"Red", L"Reaper", L"Fidel", - L"Fox", + L"Fox", //20 L"Sidney", L"Gus", L"Buns", L"Ice", - L"Spider", + L"Spider", //25 L"Cliff", L"Bull", L"Hitman", L"Buzz", - L"Raider", + L"Raider", //30 L"Raven", L"Static", L"Len", L"Danny", L"Magic", - L"Stephan", + L"Stephen", L"Scully", L"Malice", L"Dr.Q", @@ -1824,8 +2015,8 @@ STR16 pFinanceSummary[] = STR16 pFinanceHeaders[] = { L"Dzieс", // the day column - L"Ma", // the credits column - L"Winien", // the debits column + L"Ma", // the credits column (to ADD money to your account) + L"Winien", // the debits column (to SUBTRACT money from your account) L"Transakcja", // transaction type - see TransactionText below L"Saldo", // balance at this point in time L"Strona", // page number @@ -1863,6 +2054,7 @@ STR16 pTransactionText[] = L"Samoobrona w - %s", // initial cost to equip a town's militia L"Zakupy u - %s.", //is used for the Shop keeper interface. The dealers name will be appended to the end of the string. L"%s wpіaciі(a) pieni№dze.", + L"Sprzedano rzecz(y) miejscowym", }; STR16 pTransactionAlternateText[] = @@ -1953,7 +2145,7 @@ STR16 pMapErrorString[] = L"musi mieж eskortк, aby siк przemieszczaж. Umieњж j№ w oddziale z eskort№.", // for a female L"Najemnik nie przybyі jeszcze do Arulco!", L"Wygl№da na to, їe trzeba wpierw uregulowaж sprawy kontraktu.", - L"", + L"Nie moїna przemieњciж najemnika. Trwa nalot powietrzny.", //11-15 L"Rozkazy przemieszczenia? Trwa walka!", L"Zaatakowaіy ciк dzikie koty, w sektorze %s!", @@ -1968,10 +2160,10 @@ STR16 pMapErrorString[] = L"%s nie moїe siк przyі№czyж, poniewaї %s jest zbyt daleko.", //21-25 L"%s - kopalnia zostaіa przejкta przez siіy Deidranny!", - L"Siіy Deidranny wіaњnie zaatakowaіy bazк rakiet Ziemia-Powietrze w - %s.", - L"Siіy Deidranny wіaњnie zaatakowaіy - %s.", - L"Wіaњnie zauwaїono siіy Deidranny w - %s.", - L"Siіy Deidranny wіaњnie przejкіy - %s.", + L"Siіy wroga wіaњnie zaatakowaіy bazк rakiet Ziemia-Powietrze w - %s.", + L"Siіy wroga wіaњnie zaatakowaіy - %s.", + L"Wіaњnie zauwaїono siіy wroga w - %s.", + L"Siіy wroga wіaњnie przejкіy - %s.", //26-30 L"Przynajmniej jeden z twoich najemnikуw nie mуgі siк poіoїyж spaж.", L"Przynajmniej jeden z twoich najemnikуw nie mуgі wstaж.", @@ -2070,6 +2262,8 @@ STR16 pMercContractOverStrings[] = // Text used on IMP Web Pages +// WDS: Allow flexible numbers of IMPs of each sex +// note: I only updated the English text to remove "three" below STR16 pImpPopUpStrings[] = { L"Nieprawidіowy kod dostкpu", @@ -2079,11 +2273,11 @@ STR16 pImpPopUpStrings[] = L"Opcja tym razem nieaktywna.", L"Aby wykonaж profil, musisz mieж miejsce dla przynajmniej jednego czіonka zaіogi.", L"Profil zostaі juї wykonany.", - L"Cannot load I.M.P. character from disk.", - L"You have already reached the maximum number of I.M.P. characters.", - L"You have already three I.M.P characters with the same gender on your team.", - L"You cannot afford the I.M.P character.", - L"The new I.M.P character has joined your team.", + L"Nie moїna zaіadowaж postaci I.M.P. z dysku.", + L"Wykorzystaіeњ juї maksymaln№ liczbк postaci I.M.P.", + L"Masz juї w oddziale trzy postacie I.M.P. tej samej pіci.", //L"You have already the maximum number of I.M.P characters with that gender on your team.", BYЈo ->>L"You have already three I.M.P characters with the same gender on your team.", + L"Nie staж ciк na postaж I.M.P.", + L"Nowa postaж I.M.P. doі№czyіa do oddziaіu.", }; @@ -2093,7 +2287,7 @@ STR16 pImpButtonText[] = { L"O Nas", // about the IMP site L"ZACZNIJ", // begin profiling - L"Osobowoњж", // personality section + L"Umiejкtnoњci", // personality section L"Atrybuty", // personal stats/attributes section L"Portret", // the personal portrait selection L"Gіos %d", // the voice selection @@ -2361,7 +2555,7 @@ STR16 pPersonnelString[] = STR16 pWebTitle[ ]= { - L"sir-FER 4.0", // our name for thL"sir-FER 4.0", // our name for the version of the browser, play on company name + L"sir-FER 4.0", // our name for the version of the browser, play on company name }; @@ -2556,8 +2750,7 @@ STR16 InsContractText[] = { L"Wstecz", L"Dalej", - //L"Akceptujк", - L"OK", + L"Akceptujк", L"Skasuj", }; @@ -2594,8 +2787,8 @@ STR16 MercAccountText[] = STR16 MercAccountPageText[] = { // Text on the buttons on the bottom of the screen - L"Previous", - L"Next", + L"Wstecz", + L"Dalej", }; //For use at the M.E.R.C. web site. Text relating a MERC mercenary @@ -2808,49 +3001,49 @@ STR16 BobbyROrderFormText[] = STR16 BobbyRFilter[] = { // Guns - L"Heavy W.", - L"Pistol", - L"M. Pistol", - L"SMG", - L"Rifle", - L"SN Rifle", - L"AS Rifle", - L"MG", - L"Shotgun", + L"Inny", + L"Pistolet", + L"Pistolet maszynowy", + L"Karabin maszynowy", + L"Karabin", + L"Karabin snajperski", + L"Karabin bojowy", + L"Lekki karabin maszynowy", + L"Strzelba", // Ammo - L"Pistol", - L"M. Pistol", - L"SMG", - L"Rifle", - L"SN Rifle", - L"AS Rifle", - L"MG", - L"Shotgun", + L"Pistolet", + L"Pistolet maszynowy", + L"Karabin maszynowy", + L"Karabin", + L"Karabin snajperski", + L"Karabin bojowy", + L"Lekki karabin maszynowy", + L"Strzelba", // Used - L"Guns", - L"Armor", + L"Broс", + L"Pancerz", L"LBE Gear", - L"Misc", + L"Rуїne", // Armour - L"Helmets", - L"Vests", - L"Leggings", - L"Plates", + L"Heіmy", + L"Kamizelki", + L"Getry ochronne", + L"Pіytki ceramiczne", // Misc - L"Blades", - L"Th. Knives", + L"Ostrza", + L"Noїe do rzucania", L"Punch. W.", - L"Grenades", - L"Bombs", - L"Med. Kits", - L"Kits", - L"Face Items", + L"Granaty", + L"Bomby", + L"Apteczki", + L"Ekwipunek", + L"Na twarz", L"LBE Gear", - L"Misc.", + L"Inne", }; @@ -2859,8 +3052,8 @@ STR16 BobbyRFilter[] = STR16 BobbyRText[] = { L"Zamуw", // Title - - L"Kliknij wybrane towary. Lewym klawiszem zwiкkszasz iloњж towaru, a prawym zmniejszasz. Gdy juї skompletujesz swoje zakupy przejdџ do formularza zamуwienia.", // instructions on how to order + // instructions on how to order + L"Kliknij wybrane towary. Lewym klawiszem zwiкkszasz iloњж towaru, a prawym zmniejszasz. Gdy juї skompletujesz swoje zakupy przejdџ do formularza zamуwienia.", //Text on the buttons to go the various links @@ -2888,7 +3081,7 @@ STR16 BobbyRText[] = L"Mag:", // number of rounds of ammo the Magazine can hold L"Zas:", // The range of the gun L"Siіa:", // Damage of the weapon - L"CS:", // Weapon's Rate Of Fire, acroymn ROF + L"CS:", // Weapon's Rate Of Fire, acronym ROF L"Koszt:", // Cost of the item L"Na stanie:", // The number of items still in the store's inventory L"Iloњж na zamуw.:", // The number of items on order @@ -2943,8 +3136,8 @@ STR16 BobbyRaysFrontText[] = STR16 AimSortText[] = { L"Czіonkowie A.I.M.", // Title - - L"Sortuj wg:", // Title for the way to sort + // Title for the way to sort + L"Sortuj wg:", // sort by... @@ -3097,7 +3290,7 @@ STR16 AimPopUpText[] = //If you try to hire more mercs than game can support - L"Masz juї peіny zespуі najemnikуw.", + L"Masz juї peіny zespуі 18 najemnikуw.", L"Nagrana wiadomoњж", L"Wiadomoњж zapisana", @@ -3171,6 +3364,7 @@ STR16 AimFiText[] = STR16 AimAlumniText[] = { + // Text of the buttons L"STRONA 1", L"STRONA 2", @@ -3367,12 +3561,13 @@ STR16 zSaveLoadText[] = L"Elementy S-F", L"Stopieс trudnoњci", - L"Platyna", //Placeholder English - L"Bobby Ray's", - L"Good Selection", - L"Great Selection", - L"Excellent Selection", - L"Awesome Selection", + L"Platynowy tryb", //Placeholder English + + L"Wyposaїenie Bobby Ray's", + L"Normalne", + L"Њwietne", + L"Wyњmienite", + L"Niewiarygodne", L"New Inventory does not work in 640x480 screen size. Please resize and try again.", L"New Inventory does not work from the default 'Data' folder.", @@ -3400,8 +3595,8 @@ STR16 zMarksMapScreenText[] = L"Najemnik posiada zastaw na їycie.", // other items - L"Lekarze", // people acting a field medics and bandaging wounded mercs // **************************************NEW******** as of July 09, 1998 - L"Pacjenci", // people who are being bandaged by a medic // ****************************************************NEW******** as of July 10, 1998 + L"Lekarze", // people acting a field medics and bandaging wounded mercs + L"Pacjenci", // people who are being bandaged by a medic L"Gotowe", // Continue on with the game after autobandage is complete L"Przerwij", // Stop autobandaging of patients by medics now L"Przykro nam, ale ta opcja jest wyі№czona w wersji demo.", // informs player this option/button has been disabled in the demo @@ -3410,7 +3605,8 @@ STR16 zMarksMapScreenText[] = L"Brak chкtnych ludzi do szkolenia, w tej chwili.", L"%s posiada juї maksymaln№ liczbк oddziaіуw samoobrony.", L"Najemnik ma kontrakt na okreњlony czas.", - L"Kontrakt najemnika nie jest ubezpieczony", + L"Kontrakt najemnika nie jest ubezpieczony", + L"Mapa", // 24 }; @@ -3460,111 +3656,113 @@ STR16 zOptionsToggleText[] = L"Stara metoda wyboru", L"Pokazuj trasк ruchu", L"Pokazuj chybione strzaіy", - L"Potwierdzenia w trybie Real-Time", - L"Informacja, їe najemnik њpi/budzi siк", + L"Potwierdzenia Real-Time", + L"Najemnik њpi/budzi siк", L"Uїywaj systemu metrycznego", - L"Њwiatіo wokуі najemnikуw podczas ruchu", + L"Oњwietlenie podczas ruchu", L"Przyci№gaj kursor do najemnikуw", L"Przyci№gaj kursor do drzwi", L"Pulsuj№ce przedmioty", L"Pokazuj korony drzew", L"Pokazuj siatkк", L"Pokazuj kursor 3D", - L"Show Chance to Hit on cursor", - L"GL Burst uses Burst cursor", - L"Enemies Drop all Items", - L"High angle Grenade launching", - L"Restrict extra Aim Levels", - L"Space selects next Squad", - L"Show Item Shadow", - L"Show Weapon Ranges in Tiles", - L"Tracer effect for single shot", - L"Rain noises", - L"Allow crows", - L"Random I.M.P personality", - L"Auto save", - L"Silent Skyrider", - L"Low CPU usage", + L"Pokazuj szansк na trafienie", + L"Zamiana kursora granatnika", + L"Wrуg opuszcza caіy ekwipunek", + L"Wysoki k№t strzaіуw z granatnika", + L"Ograniczenie poziomуw celowania", + L"Spacja = nastкpny oddziaі", + L"Pokazuj cienie przedmiotуw", + L"Pokazuj zasiкg broni w polach", + L"Efekt smugowy dla poj. strzaіu", + L"Odgіosy padaj№cego deszczu", + L"Pokazuj wrony", + L"Losowa osobowoњж postaci I.M.P.", + L"Automatyczny zapis", + L"Cichy Skyrider", + L"Niskie obci№їenie procesora", + L"Enhanced Description Box", }; //This is the help text associated with the above toggles. STR16 zOptionsScreenHelpText[] = { //speech - L"Wі№cz tк opcjк, jeњli chcesz sіuchaж dialogуw.", + L"Jeњli WЈҐCZONE, w grze pojawiaж siк bкd№ dialogi.", //Mute Confirmation - L"Wі№cza lub wyі№cza gіosowe potwierzenia postaci.", + L"Jeњli WЈҐCZONE, gіosowe potwierdzenia postaci zostan№ wyciszone.", //Subtitles - L"Wі№cza lub wyі№cza napisy podczas dialogуw.", + L"Jeњli WЈҐCZONE, pojawiaж siк bкd№ napisy podczas rozmуw z innymi postaciami.", //Key to advance speech - L"Jeњli napisy s№ wі№czone, opcja ta pozwoli ci spokojnie je przeczytaж podczas dialogu.", + L"Jeњli WЈҐCZONE, napisy pojawiaj№ce siк podczas dialogуw bкd№ znikaіy dopiero po klikniкciu.", //Toggle smoke animation - L"Wyі№cz tк opcjк, aby poprawiж pіynnoњж dziaіania gry.", + L"Jeњli WЈҐCZONE, dym z granatуw bкdzie animowany. Moїe spowolniж dziaіanie gry.", //Blood n Gore - L"Wyі№cz tк opcjк, jeњli nie lubisz widoku krwi.", + L"Jeњli WЈҐCZONE, pokazywane bкd№ bardzo drastyczne sceny.", //Never move my mouse - L"Wyі№cz tк opcjк, aby kursor myszki automatycznie ustawiaі siк nad pojawiaj№cymi siк okienkami dialogowymi.", + L"Jeњli WЈҐCZONE, kursor nie bкdzie automatycznie ustawiaі siк nad pojawiaj№cymi siк okienkami dialogowymi.", //Old selection method - L"Wі№cz tк opcjк, aby wybуr postaci dziaіaі tak jak w poprzedniej wersji gry.", + L"Jeњli WЈҐCZONE, wybуr postaci bкdzie dziaіaі tak jak w poprzednich czкњciach gry.", //Show movement path - L"Wі№cz tк opcjк jeњli chcesz widzieж trasк ruchu w trybie Real-Time.", + L"Jeњli WЈҐCZONE, bкdziesz widziaі trasк ruchu w trybie Real-Time.", //show misses - L"Wі№cz tк opcjк, aby zobaczyж w co trafiaj№ twoje kule gdy pudіujesz.", + L"Jeњli WЈҐCZONE, bкdzie mуgі obserwowaж w co trafiaj№ twoje kule gdy spudіujesz.", //Real Time Confirmation - L"Gdy opcja ta jest wі№czona, kaїdy ruch najemnika w trybie Real-Time bкdzie wymagaі dodatkowego, potwierdzaj№cego klikniкcia.", + L"Jeњli WЈҐCZONE, kaїdy ruch najemnika w trybie Real-Time bкdzie wymagaі dodatkowego, potwierdzaj№cego klikniкcia.", //Sleep/Wake notification - L"Gdy opcja ta jest wі№czona, wyњwietlana bкdzie informacja, їe najemnik poіoїyі siк spaж lub wstaі i wrуciі do pracy.", + L"Jeњli WЈҐCZONE, wyњwietlana bкdzie informacja, їe najemnik poіoїyі siк spaж lub wstaі i wrуciі do pracy.", //Use the metric system - L"Gdy opcja ta jest wі№czona, gra uїywa systemu metrycznego.", + L"Jeњli WЈҐCZONE, gra bкdzie uїywaіa systemu metrycznego.", //Merc Lighted movement - L"Gdy opcja ta jest wі№czona, teren wokуі najemnika bкdzie oњwietlony podczas ruchu. Wyі№cz tк opcjк, jeњli obniїa pіynnoњж gry.", + L"Jeњli WЈҐCZONE, teren wokуі najemnika bкdzie oњwietlony podczas ruchu. Moїe spowolniж dziaіanie gry.", //Smart cursor - L"Gdy opcja ta jest wі№czona, kursor automatycznie ustawia siк na najemnikach gdy znajdzie siк w ich pobliїu.", + L"Jeњli WЈҐCZONE, kursor bкdzie automatycznie ustawiaі siк na najemnikach gdy znajdzie siк w ich pobliїu.", //snap cursor to the door - L"Gdy opcja ta jest wі№czona, kursor automatycznie ustawi siк na drzwiach gdy znajdzie siк w ich pobliїu.", + L"Jeњli WЈҐCZONE, kursor bкdzie automatycznie ustawiaі siк na drzwiach gdy znajdzie siк w ich pobliїu.", //glow items - L"Gdy opcja ta jest wі№czona, przedmioty pulsuj№. ( |I )", + L"Jeњli WЈҐCZONE, przedmioty bкd№ pulsowaж. ( |I )", //toggle tree tops - L"Gdy opcja ta jest wі№czona, wyњwietlane s№ korony drzew. ( |T )", + L"Jeњli WЈҐCZONE, wyњwietlane bкd№ korony drzew. ( |T )", //toggle wireframe - L"Gdy opcja ta jest wі№czona, wyњwietlane s№ zarysy niewidocznych њcian. ( |W )", + L"Jeњli WЈҐCZONE, wyњwietlane bкd№ zarysy niewidocznych њcian. ( |W )", - L"Gdy opcja ta jest wі№czona, kursor ruchu wyњwietlany jest w 3D. ( |Home )", + L"Jeњli WЈҐCZONE, kursor ruchu wyњwietlany bкdzie w 3D. ( |Home )", // Options for 1.13 - L"When ON, the chance to hit is shown on the cursor.", - L"When ON, GL burst uses burst cursor.", - L"When ON, dead enemies drop all items.", - L"When ON, grenade launchers fire grenades at higher angles (|Q).", - L"When ON, aim levels beyond 4 are restricted to rifles and sniper rifles.", - L"When ON, |S|p|a|c|e selects next squad automatically.", - L"When ON, item shadows will be shown.", - L"When ON, weapon ranges will be shown in tiles.", - L"When ON, tracer effect will be shown for single shots.", - L"When ON, you will hear rain noises when it is raining.", - L"When ON, the crows are present in game.", - L"When ON, I.M.P characters will get random personality and attitude.", - L"When ON, game will be saved after each players turn.", - L"When ON, Skyrider will not talk anymore.", - L"When ON, game will run with much lower CPU usage.", + L"Jeњli WЈҐCZONE, kursor bкdzie pokazywaі szansк na trafienie.", + L"Jeњli WЈҐCZONE, seria z granatnika bкdzie uїywaіa kursora serii z broni palnej.", + L"Jeњli WЈҐCZONE, martwi wrogowie bкd№ upuszczaж caіy ekwipunek.", + L"Jeњli WЈҐCZONE, granatniki bкd№ strzelaіy pod wysokim k№tem. ( |Q )", + L"Jeњli WЈҐCZONE, poziom celowania powyїej 4 bкdzie dostкpny tylko dla karabinуw i karabinуw snajperskich.", + L"Jeњli WЈҐCZONE, |S|p|a|c|j|a wybiera kolejny oddziaі.", + L"Jeњli WЈҐCZONE, pokazywane bкd№ cienie przedmiotуw.", + L"Jeњli WЈҐCZONE, zasiкg broni bкdzie wyњwietlany w polach.", + L"Jeњli WЈҐCZONE, pojedynczy strzaі bкdzie z efektem pocisku smugowego", + L"Jeњli WЈҐCZONE, bкdziesz sіyszaі padaj№cy deszcz.", + L"Jeњli WЈҐCZONE, w grze pojawiaж siк bкd№ wrony.", + L"Jeњli WЈҐCZONE, postacie I.M.P. bкd№ otrzymywaж losow№ osobowoњж i postawк.", + L"Jeњli WЈҐCZONE, gra bкdzie zapisywana kaїdorazowo po zakoсczeniu tury gracza.", + L"Jeњli WЈҐCZONE, Skyrider nie bкdzie nic mуwiі.", + L"Jeњli WЈҐCZONE, gra bкdzie obci№їaіa procesor w mniejszym stopniu.", + L"Jeњli WЈҐCZONE, gra bкdzie uїyciem "Enhanced Description Box" opisu.", }; @@ -3574,7 +3772,7 @@ STR16 gzGIOScreenText[] = L"Styl gry", L"Realistyczny", L"S-F", - L"Platyna", //Placeholder English + L"Platynowy", //Placeholder English L"Opcje broni", L"Mnуstwo broni", L"Standardowe uzbrojenie", @@ -3582,23 +3780,23 @@ STR16 gzGIOScreenText[] = L"Nowicjusz", L"Doњwiadczony", L"Ekspert", - L"INSANE", + L"SZALONY", L"Ok", L"Anuluj", - L"Dodatkowe opcje", - L"Nielimitowany czas", - L"Tury limitowane czasowo", + L"Rozszerzony poziom trudnoњci", + L"Zapis gry w dowolnym momencie", + L"CZЈOWIEK ZE STALI", L"Nie dziaіa w wersji demo", - L"Bobby Ray's Selection", - L"Good", - L"Great", - L"Excellent", - L"Awesome", - L"Inventory System", - L"Old", - L"New", + L"Wyposaїenie Bobby Ray's", + L"Normalne", + L"Њwietne", + L"Wyњmienite", + L"Niewiarygodne", + L"System Inwentarza", + L"Stara", + L"Nowa", L"Load MP Game", - L"INITIAL GAME SETTINGS (Only the server settings take effect)", + L"POCZҐTKOWE USTAWIENIA GRY (Only the server settings take effect)", }; STR16 pDeliveryLocationStrings[] = @@ -3683,7 +3881,7 @@ STR16 pMessageStrings[] = L"Brak opisu", //Save slots that don't have a description. L"Gra zapisana.", L"Gra zapisana.", - L"Szybki zapis", //The name of the quicksave file (filename, text reference) + L"Szybki zapis", //10 The name of the quicksave file (filename, text reference) L"SaveGame", //The name of the normal savegame file, such as SaveGame01, SaveGame02, etc. L"sav", //The 3 character dos extension (represents sav) L"..\\SavedGames", //The name of the directory where games are saved. @@ -3693,7 +3891,7 @@ STR16 pMessageStrings[] = L"Demo", //Demo of JA2 L"Debug", //State of development of a project (JA2) that is a debug build L"", //Release build for JA2 - L"strz/min", //Abbreviation for Rounds per minute -- the potential # of bullets fired in a minute. + L"strz/min", //20 Abbreviation for Rounds per minute -- the potential # of bullets fired in a minute. L"min", //Abbreviation for minute. L"m", //One character abbreviation for meter (metric distance measurement unit). L"kul", //Abbreviation for rounds (# of bullets) @@ -3703,7 +3901,7 @@ STR16 pMessageStrings[] = L"USD", //Abbreviation to US dollars L"N/D", //Lowercase acronym for not applicable. L"Tymczasem", //Meanwhile - L"%s przybyі(a) do sektora %s%s", //Name/Squad has arrived in sector A9. Order must not change without notifying + L"%s przybyі(a) do sektora %s%s", //30 Name/Squad has arrived in sector A9. Order must not change without notifying //SirTech L"Wersja", L"Wolna pozycja na szybki zapis", @@ -3714,7 +3912,7 @@ STR16 pMessageStrings[] = L"Najкto - %s z A.I.M.", L"%s zіapaі(a) %s", //'Merc name' has caught 'item' -- let SirTech know if name comes after item. L"%s zaaplikowaі(a) sobie lekarstwo", //'Merc name' has taken the drug - L"%s nie posiada wiedzy medycznej",//'Merc name' has no medical skill. + L"%s nie posiada wiedzy medycznej",//40 'Merc name' has no medical skill. //CDRom errors (such as ejecting CD while attempting to read the CD) L"Integralnoњж gry zostaіa naraїona na szwank.", @@ -3736,7 +3934,7 @@ STR16 pMessageStrings[] = L"Brak wolnego miejsca, by przekazaж %s do - %s.", //pass "item" to "merc". Same instructions as above. //A list of attachments appear after the items. Ex: Kevlar vest ( Ceramic Plate 'Attached )' - L" doі№czono )", + L" doі№czono]", // 50 //Cheat modes L"Pierwszy poziom lamerskich zagrywek osi№gniкty", @@ -3756,30 +3954,30 @@ STR16 pMessageStrings[] = //These are used in the cheat modes for changing levels in the game. Going from a basement level to //an upper level, etc. L"Nie moїna wyjњж do gуry z tego poziomu...", - L"Nie ma juї niїszych poziomуw...", + L"Nie ma juї niїszych poziomуw...", // 60 L"Wejњcie na %d poziom pod ziemi№...", L"Wyjњcie z podziemii...", - L" - ", // used in the shop keeper inteface to mark the ownership of the item eg Red's gun + L"'s", // used in the shop keeper inteface to mark the ownership of the item eg Red's gun L"Automatyczne centrowanie ekranu wyі№czone.", L"Automatyczne centrowanie ekranu wі№czone.", L"Kursor 3D wyі№czony.", L"Kursor 3D wі№czony.", L"Oddziaі %d aktywny.", L"%s - Nie staж ciк by wypіaciж jej/jemu dzienn№ pensjк w wysokoњci %s.", //first %s is the mercs name, the seconds is a string containing the salary - L"Pomiс", + L"Pomiс", // 70 L"%s nie moїe odejњж sam(a).", L"Utworzono zapis gry o nazwie SaveGame99.sav. W razie potrzeby zmieс jego nazwк na SaveGame01..10. Wtedy bкdzie moїna go odczytaж ze standardowego okna odczytu gry.", L"%s wypiі(a) trochк - %s", L"Przesyіka dotarіa do Drassen.", L"%s przybкdzie do wyznaczonego punktu zrzutu (sektor %s) w dniu %d, okoіo godziny %s.", //first %s is mercs name, next is the sector location and name where they will be arriving in, lastely is the day an the time of arrival L"Lista historii zaktualizowana.", - L"Grenade Bursts use Targeting Cursor (Spread fire enabled)", - L"Grenade Bursts use Trajectory Cursor (Spread fire disabled)", - L"Drop All Enabled", - L"Drop All Disabled", - L"Grenade Launchers fire at standard angles", - L"Grenade Launchers fire at higher angles", + L"Seria z granatnika uїywa kursora celowania (dostкpny ogieс rozproszony)", //L"Grenade Bursts use Targeting Cursor (Spread fire enabled)", BYЈO -->>L"Grenade Bursts - Using Targeting Cursor (Spread fire enabled)", + L"Seria z granatnika uїywa kursora trajektorii (dostкpny ogieс rozproszony)", //L"Grenade Bursts use Trajectory Cursor (Spread fire disabled)", BYЈO -->L"Grenade Bursts - Using Trajectory Cursor (Spread fire disabled)", + L"Upuszczanie wszystkiego wі№czone", + L"Upuszczanie wszystkiego wyі№czone", + L"Granatniki strzelaj№ pod standardowymi k№tami", //L"Grenade Launchers fire at standard angles", BYЈo->>L"Grenade Launchers - Fire at standard angles", + L"Granatniki strzelaj№ pod wysokimi k№tami", //L"Grenade Launchers fire at higher angles", BYЈo-->>L"Grenade Launchers - Fire at high angles", #ifdef JA2BETAVERSION L"Automatyczny zapis zostaі pomyњlnie wykonany.", #endif @@ -3953,7 +4151,7 @@ STR16 gzCreditNameTitle[]= { L"Game Internals Programmer", // Chris Camfield L"Co-designer/Writer", // Shaun Lyng - L"Strategic Systems & Editor Programmer", //Kris Marnes + L"Strategic Systems & Editor Programmer", //Kris \"The Cow Rape Man\" Marnes L"Producer/Co-designer", // Ian Currie L"Co-designer/Map Designer", // Linda Currie L"Artist", // Eric \"WTF\" Cheng @@ -3997,16 +4195,14 @@ STR16 sRepairsDoneString[] = L"%s skoсczyі(a) naprawiaж ekwipunek wszystkich czіonkуw oddziaіu", }; - STR16 zGioDifConfirmText[]= { - L"Wybrano opcjк Nowicjusz. Opcja ta jest przeznaczona dla niedoњwiadczonych graczy, lub dla tych, ktуrzy nie maj№ ochoty na dіugie i ciкїkie walki. Pamiкtaj, їe opcja ta ma wpіyw na przebieg caіej gry. Czy na pewno chcesz graж w trybie Nowicjusz?", - L"Wybrano opcjк Doњwiadczony. Opcja ta jest przenaczona dla graczy posiadaj№cych juї pewne doњwiadczenie w grach tego typu. Pamiкtaj, їe opcja ta ma wpіyw na przebieg caіej gry. Czy na pewno chcesz graж w trybie Doњwiadczony?", - L"Wybrano opcjк Ekspert. Jakby co, to ostrzegaliњmy ciк. Nie obwiniaj nas, jeњli wrуcisz w plastikowym worku. Pamiкtaj, їe opcja ta ma wpіyw na przebieg caіej gry. Czy na pewno chcesz graж w trybie Ekspert?", - L"You have chosen INSANE mode. WARNING: Don't blame us if you get shipped back in little pieces... Deidranna WILL kick your ass. Hard. Your choice will affect things throughout the entire course of the game, so choose wisely. Are you sure you want to play in INSANE mode?", + L"Wybrano opcjк NOWICJUSZ. Opcja ta jest przeznaczona dla niedoњwiadczonych graczy, lub dla tych, ktуrzy nie maj№ ochoty na dіugie i ciкїkie walki. Pamiкtaj, їe opcja ta ma wpіyw na przebieg caіej gry. Czy na pewno chcesz graж w trybie Nowicjusz?", + L"Wybrano opcjк DOЊWIADCZONY. Opcja ta jest przenaczona dla graczy posiadaj№cych juї pewne doњwiadczenie w grach tego typu. Pamiкtaj, їe opcja ta ma wpіyw na przebieg caіej gry. Czy na pewno chcesz graж w trybie Doњwiadczony?", + L"Wybrano opcjк EKSPERT. Jakby co, to ostrzegaliњmy ciк. Nie obwiniaj nas, jeњli wrуcisz w plastikowym worku. Pamiкtaj, їe opcja ta ma wpіyw na przebieg caіej gry. Czy na pewno chcesz graж w trybie Ekspert?", + L"Wybrano opcjк SZALONY. OSTRZEЇENIE: Nie obwiniaj nas, jeњli wrуcisz w malutkich kawaіeczkach... Deidranna NAPRAWDК skopie ci tyіek. Mocno. Pamiкtaj, їe opcja ta ma wpіyw na przebieg caіej gry. Czy na pewno chcesz graж w trybie SZALONY?", }; - STR16 gzLateLocalizedString[] = { L"%S - nie odnaleziono pliku...", @@ -4142,64 +4338,64 @@ STR16 gzLateLocalizedString[] = //Displayed with the version information when cheats are enabled. L"Bieї№cy/Maks. postкp: %d%%/%d%%", - //59 L"Eskortowaж Johna i Mary?", - L"Przeі№cznik aktywowany.", + // 60 + L"Przeі№cznik aktywowany.", - L"%s's armour attachment has been smashed!", - L"%s fires %d more rounds than intended!", - L"%s fires %d more round than intended!", + L"%s: dodatki do pancerza zostaіy zniszczone!", + L"%s wystrzeliі(a) %d pocisk(уw) wiкcej niї to byіo zamierzone!", + L"%s wystrzeliі(a) %d pocisk(уw) wiкcej niї to byіo zamierzone!", }; STR16 gzCWStrings[] = { - L"Call reinforcements from adjacent sectors?", + L"Wezwaж posiіki z s№siednich sektorуw?", }; // WANNE: Tooltips STR16 gzTooltipStrings[] = { // Debug info - L"%s|Location: %d\n", - L"%s|Brightness: %d / %d\n", - L"%s|Range to |Target: %d\n", + L"%s|Miejsce: %d\n", + L"%s|Jasnoњж: %d / %d\n", + L"%s|Odlegіoњж do |Celu: %d\n", L"%s|I|D: %d\n", - L"%s|Orders: %d\n", - L"%s|Attitude: %d\n", - L"%s|Current |A|Ps: %d\n", - L"%s|Current |Health: %d\n", + L"%s|Rozkazy: %d\n", + L"%s|Postawa: %d\n", + L"%s|Aktualne |P|A: %d\n", + L"%s|Aktualne |Zdrowie: %d\n", // Full info - L"%s|Helmet: %s\n", - L"%s|Vest: %s\n", - L"%s|Leggings: %s\n", + L"%s|Heіm: %s\n", + L"%s|Kamizelka: %s\n", + L"%s|Getry ochronne: %s\n", // Limited, Basic - L"|Armor: ", - L"Helmet ", - L"Vest ", - L"Leggings", - L"worn", - L"no Armor", + L"|Pancerz: ", + L"heіm ", + L"kamizelka ", + L"getry ochronne", + L"uїywane", + L"brak pancerza", L"%s|N|V|G: %s\n", - L"no NVG", - L"%s|Gas |Mask: %s\n", - L"no Gas Mask", - L"%s|Head |Position |1: %s\n", - L"%s|Head |Position |2: %s\n", - L"\n(in Backpack) ", - L"%s|Weapon: %s ", - L"no Weapon", - L"Handgun", + L"brak NVG", + L"%s|Maska |Gazowa: %s\n", + L"brak maski gazowej", + L"%s|Pozycja |Gіowy |1: %s\n", + L"%s|Pozycja |Gіуw |2: %s\n", + L"\n(w plecaku) ", + L"%s|Broс: %s ", + L"brak broni", + L"rewolwer", L"SMG", - L"Rifle", + L"karabin", L"MG", - L"Shotgun", - L"Knife", - L"Heavy Weapon", - L"no Helmet", - L"no Vest", - L"no Leggings", - L"|Armor: %s\n", + L"strzelba", + L"nуї", + L"broс Ciкїka", + L"brak heіmu", + L"brak kamizelki", + L"brak getrуw ochronnych", + L"|Pancerz: %s\n", }; STR16 New113Message[] = @@ -4339,7 +4535,7 @@ STR16 MPClientMessage[] = STR16 MPHelp[] = { // 0 - L"Welcome to Jagged Alliance 2 Multiplayer", + L"Welcome to JAGGED ALLIANCE 2 v1.13 Multiplayer", L"Press 'F1' for help", L"Multiplayer controls (from strategy screen)", L"* first set up ja2_mp.ini *", diff --git a/Utils/_RussianText.cpp b/Utils/_RussianText.cpp index 1601b12a..20349c73 100644 --- a/Utils/_RussianText.cpp +++ b/Utils/_RussianText.cpp @@ -207,10 +207,10 @@ CHAR16 TeamTurnString[][STRING_LENGTH] = L"Ход Ополчения", L"Ход Гражданских", L"Player_Plan",// planning turn - L"Client #1",//hayden - L"Client #2",//hayden - L"Client #3",//hayden - L"Client #4",//hayden + L"Client №1",//hayden + L"Client №2",//hayden + L"Client №3",//hayden + L"Client №4",//hayden }; CHAR16 Message[][STRING_LENGTH] = @@ -577,7 +577,7 @@ STR16 pUpperLeftMapScreenStrings[] = L"Назначение", // the mercs current assignment L"Контракт", // the contract info about the merc L"Здоровье", // the health level of the current merc - L"Мораль", // the morale of the current merc + L"Боевой дух", // the morale of the current merc L"Сост.", // the condition of the current vehicle L"Бензин", // the fuel level of the current vehicle }; @@ -592,7 +592,7 @@ STR16 pTrainingStrings[] = STR16 pGuardMenuStrings[] = { - L"Скоростр.:", // the allowable rate of fire for a merc who is guarding + L"Ведение огня:", // the allowable rate of fire for a merc who is guarding L" Агрессивная атака", // the merc can be aggressive in their choice of fire rates L" Беречь патроны", // conserve ammo L" Воздержаться от стрельбы", // fire only when the merc needs to @@ -608,7 +608,7 @@ STR16 pGuardMenuStrings[] = STR16 pOtherGuardMenuStrings[] = { - L"Скоростр.:", + L"Ведение огня:", L" *Агрессивная атака*", L" *Беречь патроны*", L" *Воздержаться от стрельбы*", @@ -653,12 +653,12 @@ STR16 pMilitiaControlMenuStrings[] = //STR16 pTalkToAllMenuStrings[] = //{ -// L"Attack", // set militia to aggresive -// L"Hold Position", // set militia to stationary -// L"Retreat", // retreat militia -// L"Come to me", // retreat militia -// L"Get down", // retreat militia -// L"Cancel", // cancel this menu +// L"В атаку", // set militia to aggresive +// L"Держать оборону", // set militia to stationary +// L"Отступать", // retreat militia +// L"За мной", // retreat militia +// L"Ложись", // retreat militia +// L"Отмена", // cancel this menu //}; STR16 pRemoveMercStrings[] = @@ -1049,7 +1049,7 @@ STR16 gpStrategicString[] = L"Войти в сектор, чтобы атаковать врага. (|E)", L"Отступить отрядом в предыдущий сектор. (|R)", //singular version L"Всем отрядам отступить в предыдущий сектор. (|R)", //multiple groups with same previous sector -//!!!What about repeated "R" as hotkey? + //various popup messages for battle conditions. //%c%d is the sector -- ex: A9 @@ -1082,15 +1082,16 @@ STR16 sKeyDescriptionStrings[2] = //The headers used to describe various weapon statistics. -CHAR16 gWeaponStatsDesc[][ 14 ] = +CHAR16 gWeaponStatsDesc[][ 16 ] = { - L"Вес (%s):", + // HEADROCK: Changed this for Extended Description project L"Состояние:", - L"Всего:", // Number of bullets left in a magazine + L"Вес (%s):", + L"Нужно ОД", L"Дист:", // Range L"Урон:", // Damage + L"Всего:", // Number of bullets left in a magazine L"ОД:", // abbreviation for Action Points - L"", L"=", L"=", //Lal: additional strings for tooltips @@ -1098,9 +1099,191 @@ CHAR16 gWeaponStatsDesc[][ 14 ] = L"Дист:", //10 L"Урон:", //11 L"Вес:", //12 - L"Шок:",//13 + L"Оглушение:",//13 + // HEADROCK: Added new strings for extended description ** REDUNDANT ** + L"АВТОШТРАФ:", //14 + L"AUTO/5:", //15 + L"Всего:", //16 + }; +// HEADROCK: Several arrays of tooltip text for new Extended Description Box +// Please note, several of these are artificially inflated to 19 entries to help fix a complication with +// changing item type while watching its description box +STR16 gzWeaponStatsFasthelp[ 27 ] = +{ + L"Дальность", + L"Урон", + L"Burst/Auto Penalty", + L"Autofire shots per 5 AP", + L"Точность", + L"Надёжность", + L"Простота ремонта", + L"ОД на вскидку", + L"ОД на 1 выстрел", + L"ОД на огонь с отсечкой", + L"ОД на огонь очередью", + L"ОД на замену магазина", + L"ОД на досылку патрона", + L"Пламегаситель", + L"Шумность (Чем меньше, тем лучше)", + L"To-Hit Modifier", + L"Average Best Laser Range", + L"Aiming Modifier", + L"Min. Range for Aiming Bonus", + L"Bipod Modifier", + L"ОД на бросок", + L"ОД на выстрел", + L"ОД на удар ножом", + L"Не стреляет одиночными!", + L"Нет отсечки патрона!", + L"Нет автоматического режима!", + L"ОД на удар", +}; + +STR16 gzWeaponStatsFasthelpTactical[ 27 ] = +{ + L"Дальность", + L"Урон", + L"Burst/Auto Penalty", + L"Autofire shots per 5 AP", + L"Точность", + L"Надёжность", + L"Простота ремонта", + L"ОД на вскидку", + L"ОД на 1 выстрел", + L"ОД на огонь с отсечкой", + L"ОД на огонь очередью", + L"ОД на замену магазина", + L"ОД на досылку патрона", + L"To-Hit Modifier", + L"Average Best Laser Range", + L"Aiming Modifier", + L"Min. Range for Aiming Bonus", + L"Пламегаситель", + L"Шумность\n(Чем меньше, тем лучше)", + L"Bipod Modifier", + L"ОД на бросок", + L"ОД на выстрел", + L"ОД на удар ножом", + L"Не стреляет одиночными!", + L"Нет отсечки патрона!", + L"Нет автоматического режима!", + L"ОД на удар", +}; + +STR16 gzAmmoStatsFasthelp[ 20 ] = +{ + L"Armor Penetration (Lower is better)", + L"Bullet Tumble (Higher is better)", + L"Pre-impact Explosion (Higher is better)", + L"Трассирующий эффект", + L"Anti-Tank", + L"Lockbuster", + L"Ignores Armor", + L"Acidic", + L"Range Modifier", + L"Damage Modifier", + L"To-Hit Modifier", + L"Burst/Auto Penalty Modifier (Higher is better)", + L"Reliability Modifier", + L"Loudness Modifier (Lower is better)", + L"", + L"", + L"", + L"", + L"", + L"", +}; + +STR16 gzArmorStatsFasthelp[ 20 ] = +{ + L"Защита", + L"Покрытие тела\n(чем больше, тем лучше)", + L"Изнашиваемость\n(чем меньше, тем лучше)", + L"Влияние на подвижность", + L"To-Hit Modifier", + L"Камуфляж (Лес)", + L"Камуфляж (Город)", + L"Камуфляж (Пустыня)", + L"Камуфляж (Снег)", + L"Stealth Modifier", + L"Vision Range Modifier", + L"Day Vision Range Modifier", + L"Night Vision Range Modifier", + L"Bright Light Vision Range Modifier", + L"Cave Vision Range Modifier", + L"Tunnel Vision Percentage", + L"Hearing Range Modifier", + L"", + L"", + L"", +}; + +STR16 gzExplosiveStatsFasthelp[ 20 ] = +{ + L"Урон", + L"Оглушение", //отнимает энергию + L"Зона слышимости взрыва\n(чем меньше, тем лучше)", + L"Взрывоопасность!!!\n(чем меньше, тем лучше)", + L"Зона действия взрыва", + L"Начальная зона действия", + L"Максимальная зона действия", + L"Время действия", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", +}; + +STR16 gzMiscItemStatsFasthelp[ 34 ] = +{ + L"Item Size Modifier (Lower is better)", // 0 + L"Reliability Modifier", + L"Loudness Modifier (Lower is better)", + L"Hides Muzzle Flash", + L"Bipod Modifier", + L"Range Modifier", // 5 + L"To-Hit Modifier", + L"Best Laser Range", + L"Aiming Bonus Modifier", + L"Burst Size Modifier", + L"Burst Penalty Modifier (Higher is better)", // 10 + L"Auto-Fire Penalty Modifier (Higher is better)", + L"AP Modifier", + L"AP to Burst Modifier (Lower is better)", + L"AP to Auto-Fire Modifier (Lower is better)", + L"AP to Ready Modifier (Lower is better)", // 15 + L"AP to Reload Modifier (Lower is better)", + L"Magazine Size Modifier", + L"AP to Attack Modifier (Lower is better)", + L"Damage Modifier", + L"Melee Damage Modifier", // 20 + L"Камуфляж (Лес)", + L"Камуфляж (Город)", + L"Камуфляж (Пустыня)", + L"Камуфляж (Снег)", + L"Stealth Modifier", // 25 + L"Hearing Range Modifier", + L"Vision Range Modifier", + L"Day Vision Range Modifier", + L"Night Vision Range Modifier", + L"Bright Light Vision Range Modifier", //30 + L"Cave Vision Range Modifier", + L"Tunnel Vision Percentage (Lower is better)", + L"Minimum Range for Aiming Bonus", +}; + +// HEADROCK: End new tooltip text + //The headers used for the merc's money. CHAR16 gMoneyStatsDesc[][ 13 ] = @@ -1330,7 +1513,7 @@ CHAR16 TacticalStr[][ MED_STRING_LENGTH ] = L"Настройки (|O)", L"Режим очереди (|B)", L"Смотреть/Повернуться (|L)", - L"Здоровье: %d/%d\nЭнергия: %d/%d\nМораль: %s", + L"Здоровье: %d/%d\nЭнергия: %d/%d\nБоевой дух: %s", L"Ну и?", //this means "what?" L"Продолж.", // an abbrieviation for "Continued" L"%s будет говорить.", @@ -1614,7 +1797,7 @@ STR16 pwMiscSectorStrings[] = STR16 pMapInventoryErrorString[] = { - L"%s стоит слишком далеко.", //Merc is in sector with item but not close enough + L"%s слишком далеко.", //Merc is in sector with item but not close enough L"Нельзя выбрать этого бойца.", //MARK CARTER L"%s вне этого сектора, и не может подобрать предмет.", L"Во время боя вам придется подбирать вещи с земли.", @@ -1675,7 +1858,7 @@ STR16 pMapScreenBorderButtonHelpText[] = L"Шахты (|M)", L"Отряды и враги (|T)", L"Карта воздушного пространства (|A)", - L"Показать вещи (|I)", + L"Вещи (|I)", L"Ополчение и враги (|Z)", }; @@ -1876,7 +2059,7 @@ STR16 pTransactionText[] = L"%s: оружие ополчению.", // initial cost to equip a town's militia L"%s продал вам вещи.", //is used for the Shop keeper interface. The dealers name will be appended to the end of the string. L"%s кладет наличные на счет.", - L"Снаряжение продано населению", //пишет при продаже вещей из инвентаря сектора (алт+клик) + L"Снаряжение продано населению", }; STR16 pTransactionAlternateText[] = @@ -1927,7 +2110,7 @@ STR16 pMapScreenStatusStrings[] = { L"Здоровье", L"Энергия", - L"Мораль", + L"Боевой дух", L"Состояние", // the condition of the current vehicle (its "health") L"Бензин", // the fuel level of the current vehicle (its "energy") }; @@ -1935,8 +2118,8 @@ STR16 pMapScreenStatusStrings[] = STR16 pMapScreenPrevNextCharButtonHelpText[] = { - L"Предыдущий наемник\n(|С|т|р|е|л|к|а |В|л|е|в|о)", // previous merc in the list - L"Следующий наемник\n(|С|т|р|е|л|к|а |В|п|р|а|в|о)", // next merc in the list + L"Предыдущий боец\n(|С|т|р|е|л|к|а |В|л|е|в|о)", // previous merc in the list + L"Следующий боец\n(|С|т|р|е|л|к|а |В|п|р|а|в|о)", // next merc in the list }; @@ -2149,12 +2332,12 @@ STR16 pFilesTitle[] = STR16 pFilesSenderList[] = { L"Отчет разведки", // the recon report sent to the player. Recon is an abbreviation for reconissance - L"В розыске #1", // first intercept file .. Intercept is the title of the organization sending the file...similar in function to INTERPOL/CIA/KGB..refer to fist record in files.txt for the translated title - L"В розыске #2", // second intercept file - L"В розыске #3", // third intercept file - L"В розыске #4", // fourth intercept file - L"В розыске #5", // fifth intercept file - L"В розыске #6", // sixth intercept file + L"В розыске №1", // first intercept file .. Intercept is the title of the organization sending the file...similar in function to INTERPOL/CIA/KGB..refer to fist record in files.txt for the translated title + L"В розыске №2", // second intercept file + L"В розыске №3", // third intercept file + L"В розыске №4", // fourth intercept file + L"В розыске №5", // fifth intercept file + L"В розыске №6", // sixth intercept file }; // Text having to do with the History Log @@ -2353,15 +2536,15 @@ STR16 sATMText[ ]= L"Сумма должна быть кратна $10", // transfer amount must be a multiple of $10 }; -// Web error messages. Please use German equivilant for these messages. +// Web error messages. Please use foreign language equivilant for these messages. // DNS is the acronym for Domain Name Server // URL is the acronym for Uniform Resource Locator STR16 pErrorStrings[] = { L"Ошибка", - L"Сервер не зарегистрирован в DNS.", - L"Проверьте адрес и попробуйте еще раз.", + L"Сервер не имеет записи DNS.", + L"Проверьте адрес и попробуйте ещё раз.", L"OK", //Превышено время ожидания ответа сервера. L"Обрыв соединения с сервером.", }; @@ -2666,7 +2849,7 @@ STR16 MercHomePageText[] = L"Просмотр счета", L"Просмотр файлов", // The version number on the video conferencing system that pops up when Speck is talking - L"Спек Ком v3.2", + L"Speck Com v3.2", }; // For use at MiGillicutty's Web Page. @@ -2833,7 +3016,6 @@ STR16 BobbyRFilter[] = L"Ружья", // Ammo - //L"Heavy W.", L"Пистолеты", L"Авт.пистол.", L"ПП", @@ -2914,7 +3096,7 @@ STR16 BobbyRText[] = //Popup that tells the player that they can only order 10 items at a time - L"Черт! Эта форма поддерживает не более 10 предметов в одном заказе. Если вы хотите заказать больше (а мы надеемся, вы хотите), то заполните еще один заказ и примите наши извинения за неудобства.", + L"Чёрт! Эта форма поддерживает не более 10 предметов в одном заказе. Если вы хотите заказать больше (а мы надеемся, вы хотите), то заполните еще один заказ и примите наши извинения за неудобства.", // A popup that tells the user that they are trying to order more items then the store has in stock @@ -3454,13 +3636,13 @@ STR16 pMilitiaConfirmStrings[] = //Strings used in the popup box when withdrawing, or depositing money from the $ sign at the bottom of the single merc panel STR16 gzMoneyWithdrawMessageText[] = { - L"За один раз вы можете снять со счета не более $20.000.", + L"За один раз вы можете снять со счета не более $20 000.", L"Вы решили положить %s на свой счет?", }; STR16 gzCopyrightText[] = { - L"Aвтopcкиe пpaвa (C) 1999 Sir-Tech Canada Ltd. Bce пpaвa зaщищeны.", + L"Авторские права (C) 1999 Sir-Tech Canada Ltd. Все права защищены.", }; //option Text @@ -3474,8 +3656,8 @@ STR16 zOptionsToggleText[] = L"Кровь и жестокость", L"Не трогать мышь!", L"Старый метод выбора", - L"Показывать путь движения", - L"Показывать промахи", + L"Показать путь движения", + L"Показать промахи", L"Игра в реальном времени", L"Подтверждение сна/подъема", L"Метрическая система", @@ -3484,11 +3666,11 @@ STR16 zOptionsToggleText[] = L"Курсор на дверь", L"Мерцание вещей", L"Показать кроны деревьев", - L"Показывать каркасы", + L"Показать каркасы", L"Трехмерный курсор", - L"Показывать шанс попадания", + L"Показать шанс попадания", L"Курсор очереди для гранат", - L"Выпадение всего из врагов", //Весь трофей врага + L"Враг оставляет всё снаряжене", L"Стрельба гранатой навесом", L"Классическое прицеливание", L"Выбор пробелом след. отряда", @@ -3499,8 +3681,9 @@ STR16 zOptionsToggleText[] = L"Вороны", L"Случайный I.M.P персонаж", L"Автосохранение каждый ход", - L"Молчаливый пилот вертолета", - L"Низкое использование CPU", + L"Молчаливый пилот вертолёта", + L"Низкая загрузка процессора", + L"Расширенное описание предметов", //Enhanced Description Box }; //This is the help text associated with the above toggles. @@ -3546,7 +3729,7 @@ STR16 zOptionsScreenHelpText[] = L"Если включено, то используется метрическая система мер,\nиначе будет британская.", //Merc Lighted movement - L"При ходьбе карта подсвечивается вокруг бойца.\nВыключите опцию для повышения производительности системы.", + L"При ходьбе карта подсвечивается вокруг бойца (|G).\nВыключите опцию для повышения производительности системы.", //Smart cursor L"Если включено, то перемещение курсора возле наемника\nавтоматически выбирает его.", @@ -3581,6 +3764,7 @@ STR16 zOptionsScreenHelpText[] = L"Если включено, игра будет автоматически сохраняться\nпосле каждого хода игрока.", L"Если включено, Небесный Всадник\nне будет вас раздражать болтливостью.", L"Если включено, игра будет использовать\nменьше процессорного времени.", + L"Если включено, будет задействовано\nрасширенное описание предметов.", //EDB description }; @@ -3752,11 +3936,11 @@ STR16 pMessageStrings[] = L"Не хватает места, чтобы передать %s %s.", //pass "item" to "merc". Same instructions as above. //A list of attachments appear after the items. Ex: Kevlar vest ( Ceramic Plate 'Attached )' - L" присоединен )", // 50 + L" присоединён]", // 50 //Cheat modes - L"Достигнут чит-уровень один.", - L"Достигнут чит-уровень два.", + L"Ну и зачем тебе это надо?", + L"Активирован режим кодов.", //Toggling various stealth modes L"Отряд идет тихим шагом.", @@ -3781,7 +3965,7 @@ STR16 pMessageStrings[] = L"Режим следования ВКЛ.", L"3D курсор ВЫКЛ.", L"3D курсор ВКЛ.", - L"Выбран %dй отряд.", + L"Выбран %d-й отряд.", L"Не хватает денег, чтобы заплатить %s ежедневный гонорар %s", //first %s is the mercs name, the seconds is a string containing the salary L"Нет", L"%s не может уйти в одиночку.", @@ -3939,7 +4123,7 @@ STR16 BrokenLinkText[] = STR16 gzBobbyRShipmentText[] = { L"Последние поступления", - L"Заказ #", + L"Заказ №", L"Количество", L"Заказано", }; @@ -4115,7 +4299,7 @@ STR16 gzLateLocalizedString[] = L"Этот предмет отсюда взять невозможно.", //39 - L"Оставшиеся наемники не могут сражаться. Сражение с тварями продолжат ополченцы.", + L"Оставшиеся бойцы не могут сражаться. Сражение с тварями продолжит ополчение.", //40-43 //%s is the name of merc. @@ -4159,7 +4343,8 @@ STR16 gzLateLocalizedString[] = //59 L"Сопроводить Джона и Мэри?", - L"Кнопка нажата.", //пишет при нажатии кнопки, к примеру кнопка в шкафу шиза + //60 + L"Кнопка нажата.", L"%s чувствует что в бронежилете что-то треснуло!", L"%s выпустил на %d больше пуль!", @@ -4300,14 +4485,14 @@ STR16 MPClientMessage[] = L"Вы уже подключены.", L"Вы уже подключаетесь...", // 5 - L"Клиент #%d - '%S' нанял %s.", - L"Клиент #%d - '%S' нанял еще бойца.", + L"Клиент №%d - '%S' нанял %s.", + L"Клиент №%d - '%S' нанял еще бойца.", L"Вы готовы к бою (всего готово = %d/%d).", L"Вы отменили готовность к бою (всего готово = %d/%d).", L"Отряды подтягиваются к месту битвы...", //'Starting battle...' // 10 - L"Клиент #%d - '%S' готов к бою (всего готово = %d/%d).", - L"Клиент #%d - '%S' отменил готовность к бою (всего готово = %d/%d).", + L"Клиент №%d - '%S' готов к бою (всего готово = %d/%d).", + L"Клиент №%d - '%S' отменил готовность к бою (всего готово = %d/%d).", L"Похоже, вы уже готовы к бою, однако, придется подождать остальных. (Если хотите изменить расположение своих бойцов, нажмите кнопку 'ДА').", L"Начнем же битву!", L"Для начала игры необходимо запустить клиент.", @@ -4327,13 +4512,13 @@ STR16 MPClientMessage[] = // 25 L"Тестовая чит-функция '9' включена.", - L"Новый игрок: клиент #%d - '%S', Сторона: %d, Команда: %d.", + L"Новый игрок: клиент №%d - '%S', Сторона: %d, Команда: %d.", L"Команда: %d.",//not used any more L"%s (клиент %d - '%S') был убит %s (клиент %d - '%S')", - L"Клиент #%d - '%S' выкинут из игры.", + L"Клиент №%d - '%S' выкинут из игры.", // 30 - L"Принудительно дать ход клиенту: #1 - '%S' | #2 - '%S' | #3 - '%S' | #4 - '%S'", - L"Начался ход клиента #%d", + L"Принудительно дать ход клиенту: №1 - '%S' | №2 - '%S' | №3 - '%S' | №4 - '%S'", + L"Начался ход клиента №%d", L"Запрос перехода в режим реального время...", L"Переход в режим реального времени.", L"Ошибка: что-то пошло не так, возвращаю обратно.", diff --git a/Utils/_TaiwaneseText.cpp b/Utils/_TaiwaneseText.cpp index deef0260..543fd891 100644 --- a/Utils/_TaiwaneseText.cpp +++ b/Utils/_TaiwaneseText.cpp @@ -1083,15 +1083,16 @@ STR16 sKeyDescriptionStrings[2] = //The headers used to describe various weapon statistics. -CHAR16 gWeaponStatsDesc[][ 14 ] = +CHAR16 gWeaponStatsDesc[][ 16 ] = { - L"Weight (%s):", + // HEADROCK: Changed this for Extended Description project L"Status:", - L"Amount:", // Number of bullets left in a magazine + L"Weight (%s):", + L"AP Costs", L"Rng:", // Range L"Dam:", // Damage + L"Amount:", // Number of bullets left in a magazine L"AP:", // abbreviation for Action Points - L"", L"=", L"=", //Lal: additional strings for tooltips @@ -1100,10 +1101,190 @@ CHAR16 gWeaponStatsDesc[][ 14 ] = L"Damage:", //11 L"Weight:", //12 L"Stun Damage:",//13 - + // HEADROCK: Added new strings for extended description ** REDUNDANT ** + L"AUTOPEN:", //14 + L"AUTO/5:", //15 + L"Amount:", //16 }; +// HEADROCK: Several arrays of tooltip text for new Extended Description Box +// Please note, several of these are artificially inflated to 19 entries to help fix a complication with +// changing item type while watching its description box +STR16 gzWeaponStatsFasthelp[ 27 ] = +{ + L"Range", + L"Damage", + L"Burst/Auto Penalty", + L"Autofire shots per 5 AP", + L"Accuracy", + L"Reliability", + L"Repair Ease", + L"APs to ready", + L"APs to fire Single", + L"APs to fire Burst", + L"APs to fire Auto", + L"APs to Reload", + L"APs to Reload Manually", + L"Flash Suppression", + L"Loudness (Lower is better)", + L"To-Hit Modifier", + L"Average Best Laser Range", + L"Aiming Modifier", + L"Min. Range for Aiming Bonus", + L"Bipod Modifier", + L"APs to Throw", + L"APs to Launch", + L"APs to Stab", + L"No Single Shot!", + L"No Burst Mode!", + L"No Auto Mode!", + L"APs to Bash", +}; + +STR16 gzWeaponStatsFasthelpTactical[ 27 ] = +{ + L"Range", + L"Damage", + L"Burst/Auto Penalty", + L"Autofire shots per 5 AP", + L"Accuracy", + L"Reliability", + L"Repair Ease", + L"APs to ready", + L"APs to fire Single", + L"APs to fire Burst", + L"APs to fire Auto", + L"APs to Reload", + L"APs to Reload Manually", + L"To-Hit Modifier", + L"Average Best Laser Range", + L"Aiming Modifier", + L"Min. Range for Aiming Bonus", + L"Flash Suppression", + L"Loudness (Lower is better)", + L"Bipod Modifier", + L"APs to Throw", + L"APs to Launch", + L"APs to Stab", + L"No Single Shot!", + L"No Burst Mode!", + L"No Auto Mode!", + L"APs to Bash", +}; + +STR16 gzAmmoStatsFasthelp[ 20 ] = +{ + L"Armor Penetration (Lower is better)", + L"Bullet Tumble (Higher is better)", + L"Pre-impact Explosion (Higher is better)", + L"Tracer Effect", + L"Anti-Tank", + L"Lockbuster", + L"Ignores Armor", + L"Acidic", + L"Range Modifier", + L"Damage Modifier", + L"To-Hit Modifier", + L"Burst/Auto Penalty Modifier (Higher is better)", + L"Reliability Modifier", + L"Loudness Modifier (Lower is better)", + L"", + L"", + L"", + L"", + L"", + L"", +}; + +STR16 gzArmorStatsFasthelp[ 20 ] = +{ + L"Protection", + L"Coverage (Higher is better)", + L"Degrade Rate (Lower is better)", + L"AP Modifier", + L"To-Hit Modifier", + L"Woodland Camo", + L"Urban Camo", + L"Desert Camo", + L"Snow Camo", + L"Stealth Modifier", + L"Vision Range Modifier", + L"Day Vision Range Modifier", + L"Night Vision Range Modifier", + L"Bright Light Vision Range Modifier", + L"Cave Vision Range Modifier", + L"Tunnel Vision Percentage", + L"Hearing Range Modifier", + L"", + L"", + L"", +}; + +STR16 gzExplosiveStatsFasthelp[ 20 ] = +{ + L"Damage", + L"Stun Damage", + L"Blast Loudness (Lower is better)", + L"Volatility!!! (Lower is better)", + L"Blast Radius", + L"Effect Start Radius", + L"Effect Final Radius ", + L"Effect Duration", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", + L"", +}; + +STR16 gzMiscItemStatsFasthelp[ 34 ] = +{ + L"Item Size Modifier (Lower is better)", // 0 + L"Reliability Modifier", + L"Loudness Modifier (Lower is better)", + L"Hides Muzzle Flash", + L"Bipod Modifier", + L"Range Modifier", // 5 + L"To-Hit Modifier", + L"Best Laser Range", + L"Aiming Bonus Modifier", + L"Burst Size Modifier", + L"Burst Penalty Modifier (Higher is better)", // 10 + L"Auto-Fire Penalty Modifier (Higher is better)", + L"AP Modifier", + L"AP to Burst Modifier (Lower is better)", + L"AP to Auto-Fire Modifier (Lower is better)", + L"AP to Ready Modifier (Lower is better)", // 15 + L"AP to Reload Modifier (Lower is better)", + L"Magazine Size Modifier", + L"AP to Attack Modifier (Lower is better)", + L"Damage Modifier", + L"Melee Damage Modifier", // 20 + L"Woodland Camo", + L"Urban Camo", + L"Desert Camo", + L"Snow Camo", + L"Stealth Modifier", // 25 + L"Hearing Range Modifier", + L"Vision Range Modifier", + L"Day Vision Range Modifier", + L"Night Vision Range Modifier", + L"Bright Light Vision Range Modifier", //30 + L"Cave Vision Range Modifier", + L"Tunnel Vision Percentage (Lower is better)", + L"Minimum Range for Aiming Bonus", +}; + +// HEADROCK: End new tooltip text + //The headers used for the merc's money. CHAR16 gMoneyStatsDesc[][ 13 ] = @@ -3506,6 +3687,7 @@ STR16 zOptionsToggleText[] = L"Auto save", L"Silent Skyrider", L"Low CPU usage", + L"Enhanced Description Box", }; //This is the help text associated with the above toggles.