From 5878355d615431a3e9f71d3e713913cd301645e0 Mon Sep 17 00:00:00 2001 From: silversurfer Date: Sat, 16 Nov 2013 16:55:32 +0000 Subject: [PATCH] This revision requires GameDir 1873 to work because of a new icon in ItemInfoAdvancedIcons.sti!!! - Weapons.xml tags and are now FLOAT type values. This allows to differentiate weapons by smaller steps. - Items.xml tags and are now FLOAT types as well. - Items.xml tag will now be displayed in UDB advanced tab. - Item_Settings.ini has new modifiers for gun type specific and . This allows modders to quickly adjust recoil values for any gun type. - fixed UDB description for and - All recoil calculations now use FLOAT values for more precision. git-svn-id: https://ja2svn.mooo.com/source/ja2/trunk/GameSource/ja2_v1.13/Build@6613 3b4a5df2-a311-0410-b5c6-a8a6f20db521 --- GameSettings.cpp | 46 ++++++-- GameSettings.h | 3 + Tactical/Interface Enhanced.cpp | 182 +++++++++++++++++++++++--------- Tactical/Item Types.h | 4 +- Tactical/Items.cpp | 62 +++++++---- Tactical/Items.h | 8 +- Tactical/LOS.cpp | 14 +-- Tactical/LOS.h | 2 +- Tactical/Weapons.cpp | 4 +- Tactical/Weapons.h | 4 +- TacticalAI/Attacks.cpp | 6 +- TacticalAI/DecideAction.cpp | 4 - Utils/Text.h | 6 +- Utils/XML_Items.cpp | 4 +- Utils/_ChineseText.cpp | 3 + Utils/_DutchText.cpp | 7 +- Utils/_EnglishText.cpp | 79 +++++++------- Utils/_FrenchText.cpp | 3 + Utils/_GermanText.cpp | 7 +- Utils/_ItalianText.cpp | 7 +- Utils/_PolishText.cpp | 7 +- Utils/_RussianText.cpp | 3 + Utils/_TaiwaneseText.cpp | 7 +- 23 files changed, 313 insertions(+), 159 deletions(-) diff --git a/GameSettings.cpp b/GameSettings.cpp index 929315641..f9222ec2d 100644 --- a/GameSettings.cpp +++ b/GameSettings.cpp @@ -2608,7 +2608,7 @@ void LoadItemSettings() gItemSettings.fBestLaserRangeModifier = iniReader.ReadFloat ("Common Settings","BEST_LASER_RANGE_MODIFIER", 1.0f, 0.1f, 5.0f); // -------------- WEAPON MODIFIERS ---------------- - // values to fine-tune weapon overheating + // weapon overheating modifiers // --------- PISTOLS ---------- gItemSettings.fOverheatJamThresholdModifierGun[GUN_PISTOL] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_JAM_THRESHOLD_PISTOL_MODIFIER", 1.0f, 0.1f, 10.0f); gItemSettings.fOverheatDamageThresholdModifierGun[GUN_PISTOL] = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_DAMAGE_THRESHOLD_PISTOL_MODIFIER", 1.0f, 0.1f, 10.0f); @@ -2655,7 +2655,7 @@ void LoadItemSettings() gItemSettings.fOverheatTemperatureModifierLauncher = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_TEMPERATURE_LAUNCHER_MODIFIER", 1.0f, 0.1f, 10.0f); gItemSettings.fOverheatCooldownModifierLauncher = iniReader.ReadFloat ("Weapon Settings","OVERHEATING_COOLDOWN_LAUNCHER_MODIFIER", 1.0f, 0.1f, 10.0f); - // values to adjust weapon range + // weapon range modifiers gItemSettings.fRangeModifierGun[GUN_PISTOL] = iniReader.ReadFloat ("Weapon Settings","RANGE_PISTOL_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fRangeModifierGun[GUN_M_PISTOL] = iniReader.ReadFloat ("Weapon Settings","RANGE_MP_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fRangeModifierGun[GUN_SMG] = iniReader.ReadFloat ("Weapon Settings","RANGE_SMG_MODIFIER", 1.0f, 0.1f, 5.0f); @@ -2667,7 +2667,7 @@ void LoadItemSettings() // -------- LAUNCHERs --------- gItemSettings.fRangeModifierLauncher = iniReader.ReadFloat ("Weapon Settings","RANGE_LAUNCHER_MODIFIER", 1.0f, 0.1f, 5.0f); - // values to adjust damage + // weapon damage modifiers // ----------- GUNS ----------- gItemSettings.fDamageModifierGun[GUN_PISTOL] = iniReader.ReadFloat ("Weapon Settings","DAMAGE_PISTOL_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fDamageModifierGun[GUN_M_PISTOL] = iniReader.ReadFloat ("Weapon Settings","DAMAGE_MP_MODIFIER", 1.0f, 0.1f, 5.0f); @@ -2682,7 +2682,7 @@ void LoadItemSettings() gItemSettings.fDamageModifierPunch = iniReader.ReadFloat ("Weapon Settings","DAMAGE_PUNCH_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fDamageModifierTentacle = iniReader.ReadFloat ("Weapon Settings","DAMAGE_TENTACLE_MODIFIER", 1.0f, 0.1f, 5.0f); - // values to adjust APs needed for a single attack + // APs needed for a single attack modifiers gItemSettings.fShotsPer4TurnsModifierGun[GUN_PISTOL] = iniReader.ReadFloat ("Weapon Settings","SP4T_PISTOL_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fShotsPer4TurnsModifierGun[GUN_M_PISTOL] = iniReader.ReadFloat ("Weapon Settings","SP4T_MP_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fShotsPer4TurnsModifierGun[GUN_SMG] = iniReader.ReadFloat ("Weapon Settings","SP4T_SMG_MODIFIER", 1.0f, 0.1f, 5.0f); @@ -2697,7 +2697,7 @@ void LoadItemSettings() gItemSettings.fShotsPer4TurnsModifierTentacle = iniReader.ReadFloat ("Weapon Settings","SP4T_TENTACLE_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fShotsPer4TurnsModifierThrowKnife = iniReader.ReadFloat ("Weapon Settings","SP4T_THROWKNIFE_MODIFIER", 1.0f, 0.1f, 5.0f); - // values to adjust Burst APs + // Burst AP modifiers gItemSettings.fBurstAPModifierGun[GUN_PISTOL] = iniReader.ReadFloat ("Weapon Settings","BURST_AP_PISTOL_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fBurstAPModifierGun[GUN_M_PISTOL] = iniReader.ReadFloat ("Weapon Settings","BURST_AP_MP_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fBurstAPModifierGun[GUN_SMG] = iniReader.ReadFloat ("Weapon Settings","BURST_AP_SMG_MODIFIER", 1.0f, 0.1f, 5.0f); @@ -2707,7 +2707,7 @@ void LoadItemSettings() gItemSettings.fBurstAPModifierGun[GUN_LMG] = iniReader.ReadFloat ("Weapon Settings","BURST_AP_LMG_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fBurstAPModifierGun[GUN_SHOTGUN] = iniReader.ReadFloat ("Weapon Settings","BURST_AP_SHOTGUN_MODIFIER", 1.0f, 0.1f, 5.0f); - // values to adjust Auto Fire APs + // Auto Fire AP modifiers gItemSettings.fAFShotsPer5APModifierGun[GUN_PISTOL] = iniReader.ReadFloat ("Weapon Settings","AF_SP5AP_PISTOL_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fAFShotsPer5APModifierGun[GUN_M_PISTOL] = iniReader.ReadFloat ("Weapon Settings","AF_SP5AP_MP_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fAFShotsPer5APModifierGun[GUN_SMG] = iniReader.ReadFloat ("Weapon Settings","AF_SP5AP_SMG_MODIFIER", 1.0f, 0.1f, 5.0f); @@ -2717,7 +2717,7 @@ void LoadItemSettings() gItemSettings.fAFShotsPer5APModifierGun[GUN_LMG] = iniReader.ReadFloat ("Weapon Settings","AF_SP5AP_LMG_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fAFShotsPer5APModifierGun[GUN_SHOTGUN] = iniReader.ReadFloat ("Weapon Settings","AF_SP5AP_SHOTGUN_MODIFIER", 1.0f, 0.1f, 5.0f); - // values to adjust AP to Reload + // AP to Reload modifiers gItemSettings.fAPtoReloadModifierGun[GUN_PISTOL] = iniReader.ReadFloat ("Weapon Settings","AP_RELOAD_PISTOL_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fAPtoReloadModifierGun[GUN_M_PISTOL] = iniReader.ReadFloat ("Weapon Settings","AP_RELOAD_MP_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fAPtoReloadModifierGun[GUN_SMG] = iniReader.ReadFloat ("Weapon Settings","AP_RELOAD_SMG_MODIFIER", 1.0f, 0.1f, 5.0f); @@ -2728,7 +2728,7 @@ void LoadItemSettings() gItemSettings.fAPtoReloadModifierGun[GUN_SHOTGUN] = iniReader.ReadFloat ("Weapon Settings","AP_RELOAD_SHOTGUN_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fAPtoReloadModifierLauncher = iniReader.ReadFloat ("Weapon Settings","AP_RELOAD_LAUNCHER_MODIFIER", 1.0f, 0.1f, 5.0f); - // values to adjust AP to re-chamber/pump + // AP to re-chamber/pump modifiers gItemSettings.fAPtoReloadManuallyModifierGun[GUN_PISTOL] = iniReader.ReadFloat ("Weapon Settings","AP_RELOAD_MAN_PISTOL_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fAPtoReloadManuallyModifierGun[GUN_M_PISTOL] = iniReader.ReadFloat ("Weapon Settings","AP_RELOAD_MAN_MP_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fAPtoReloadManuallyModifierGun[GUN_SMG] = iniReader.ReadFloat ("Weapon Settings","AP_RELOAD_MAN_SMG_MODIFIER", 1.0f, 0.1f, 5.0f); @@ -2739,7 +2739,7 @@ void LoadItemSettings() gItemSettings.fAPtoReloadManuallyModifierGun[GUN_SHOTGUN] = iniReader.ReadFloat ("Weapon Settings","AP_RELOAD_MAN_SHOTGUN_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fAPtoReloadManuallyModifierLauncher = iniReader.ReadFloat ("Weapon Settings","AP_RELOAD_MAN_LAUNCHER_MODIFIER", 1.0f, 0.1f, 5.0f); - // values to adjust max distance for messy death + // max distance for messy death modifiers gItemSettings.fDistMessyModifierGun[GUN_PISTOL] = iniReader.ReadFloat ("Weapon Settings","DIST_MESSY_PISTOL_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fDistMessyModifierGun[GUN_M_PISTOL] = iniReader.ReadFloat ("Weapon Settings","DIST_MESSY_MP_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fDistMessyModifierGun[GUN_SMG] = iniReader.ReadFloat ("Weapon Settings","DIST_MESSY_SMG_MODIFIER", 1.0f, 0.1f, 5.0f); @@ -2749,7 +2749,7 @@ void LoadItemSettings() gItemSettings.fDistMessyModifierGun[GUN_LMG] = iniReader.ReadFloat ("Weapon Settings","DIST_MESSY_LMG_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fDistMessyModifierGun[GUN_SHOTGUN] = iniReader.ReadFloat ("Weapon Settings","DIST_MESSY_SHOTGUN_MODIFIER", 1.0f, 0.1f, 5.0f); - // values to adjust weapon handling + // weapon handling modifiers gItemSettings.fHandlingModifierGun[GUN_PISTOL] = iniReader.ReadFloat ("Weapon Settings","HANDLING_PISTOL_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fHandlingModifierGun[GUN_M_PISTOL] = iniReader.ReadFloat ("Weapon Settings","HANDLING_MP_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fHandlingModifierGun[GUN_SMG] = iniReader.ReadFloat ("Weapon Settings","HANDLING_SMG_MODIFIER", 1.0f, 0.1f, 5.0f); @@ -2760,6 +2760,32 @@ void LoadItemSettings() gItemSettings.fHandlingModifierGun[GUN_SHOTGUN] = iniReader.ReadFloat ("Weapon Settings","HANDLING_SHOTGUN_MODIFIER", 1.0f, 0.1f, 5.0f); gItemSettings.fHandlingModifierLauncher = iniReader.ReadFloat ("Weapon Settings","HANDLING_LAUNCHER_MODIFIER", 1.0f, 0.1f, 5.0f); + // weapon recoil modifiers + // --------- PISTOLS ---------- + gItemSettings.fRecoilXModifierGun[GUN_PISTOL] = iniReader.ReadFloat ("Weapon Settings","RECOILX_PISTOL_MODIFIER", 1.0f, 0.1f, 5.0f); + gItemSettings.fRecoilYModifierGun[GUN_PISTOL] = iniReader.ReadFloat ("Weapon Settings","RECOILY_PISTOL_MODIFIER", 1.0f, 0.1f, 5.0f); + // ----- MACHINE PISTOLS ------ + gItemSettings.fRecoilXModifierGun[GUN_M_PISTOL] = iniReader.ReadFloat ("Weapon Settings","RECOILX_MP_MODIFIER", 1.0f, 0.1f, 5.0f); + gItemSettings.fRecoilYModifierGun[GUN_M_PISTOL] = iniReader.ReadFloat ("Weapon Settings","RECOILY_MP_MODIFIER", 1.0f, 0.1f, 5.0f); + // ---------- SMGS ------------ + gItemSettings.fRecoilXModifierGun[GUN_SMG] = iniReader.ReadFloat ("Weapon Settings","RECOILX_SMG_MODIFIER", 1.0f, 0.1f, 5.0f); + gItemSettings.fRecoilYModifierGun[GUN_SMG] = iniReader.ReadFloat ("Weapon Settings","RECOILY_SMG_MODIFIER", 1.0f, 0.1f, 5.0f); + // --------- RIFLES ----------- + gItemSettings.fRecoilXModifierGun[GUN_RIFLE] = iniReader.ReadFloat ("Weapon Settings","RECOILX_RIFLE_MODIFIER", 1.0f, 0.1f, 5.0f); + gItemSettings.fRecoilYModifierGun[GUN_RIFLE] = iniReader.ReadFloat ("Weapon Settings","RECOILY_RIFLE_MODIFIER", 1.0f, 0.1f, 5.0f); + // ------ SNIPER RIFLES ------- + gItemSettings.fRecoilXModifierGun[GUN_SN_RIFLE] = iniReader.ReadFloat ("Weapon Settings","RECOILX_SNIPER_MODIFIER", 1.0f, 0.1f, 5.0f); + gItemSettings.fRecoilYModifierGun[GUN_SN_RIFLE] = iniReader.ReadFloat ("Weapon Settings","RECOILY_SNIPER_MODIFIER", 1.0f, 0.1f, 5.0f); + // ------ ASSAULT RIFLES ------ + gItemSettings.fRecoilXModifierGun[GUN_AS_RIFLE] = iniReader.ReadFloat ("Weapon Settings","RECOILX_AR_MODIFIER", 1.0f, 0.1f, 5.0f); + gItemSettings.fRecoilYModifierGun[GUN_AS_RIFLE] = iniReader.ReadFloat ("Weapon Settings","RECOILY_AR_MODIFIER", 1.0f, 0.1f, 5.0f); + // ---------- LMGS ------------ + gItemSettings.fRecoilXModifierGun[GUN_LMG] = iniReader.ReadFloat ("Weapon Settings","RECOILX_LMG_MODIFIER", 1.0f, 0.1f, 5.0f); + gItemSettings.fRecoilYModifierGun[GUN_LMG] = iniReader.ReadFloat ("Weapon Settings","RECOILY_LMG_MODIFIER", 1.0f, 0.1f, 5.0f); + // -------- SHOTGUNS ---------- + gItemSettings.fRecoilXModifierGun[GUN_SHOTGUN] = iniReader.ReadFloat ("Weapon Settings","RECOILX_SHOTGUN_MODIFIER", 1.0f, 0.1f, 5.0f); + gItemSettings.fRecoilYModifierGun[GUN_SHOTGUN] = iniReader.ReadFloat ("Weapon Settings","RECOILY_SHOTGUN_MODIFIER", 1.0f, 0.1f, 5.0f); + // -------------- ARMOR MODIFIERS ---------------- gItemSettings.fCamoLBEoverVestModifier = iniReader.ReadFloat ("Armor Settings","CAMO_LBE_OVER_VEST_MODIFIER", 0.2f, 0.0f, 1.0f); gItemSettings.fCamoLBEoverPantsModifier = iniReader.ReadFloat ("Armor Settings","CAMO_LBE_OVER_PANTS_MODIFIER", 0.2f, 0.0f, 1.0f); diff --git a/GameSettings.h b/GameSettings.h index fbbe4ec95..39ae2678f 100644 --- a/GameSettings.h +++ b/GameSettings.h @@ -1992,6 +1992,9 @@ typedef struct // Handling modifiers FLOAT fHandlingModifierGun[9]; FLOAT fHandlingModifierLauncher; + // Recoil modifiers + FLOAT fRecoilXModifierGun[9]; + FLOAT fRecoilYModifierGun[9]; // -------------- ARMOR MODIFIERS ---------------- FLOAT fCamoLBEoverVestModifier; diff --git a/Tactical/Interface Enhanced.cpp b/Tactical/Interface Enhanced.cpp index 42a73c7f0..d2370c853 100644 --- a/Tactical/Interface Enhanced.cpp +++ b/Tactical/Interface Enhanced.cpp @@ -3151,11 +3151,33 @@ void InternalInitEDBTooltipRegion( OBJECTTYPE * gpItemDescObject, UINT32 guiCurr } } - INT8 bDummy; - INT8 bRecoilModifier; - GetFlatRecoilModifier( gpItemDescObject, &bRecoilModifier, &bDummy ); + ///////////////////// PERCENT RECOIL MODIFIER + if ( GetPercentRecoilModifier( gpItemDescObject ) != 0 ) + { + if ( UsingNewCTHSystem() == true ) + { + if (cnt >= sFirstLine && cnt < sLastLine) + { + if (Item[ gpItemDescObject->usItem ].usItemClass & (IC_WEAPON|IC_PUNCH)) + { + swprintf( pStr, L"%s%s", szUDBAdvStatsTooltipText[ 65 ], szUDBAdvStatsExplanationsTooltipTextForWeapons[ 52 ]); + } + else + { + swprintf( pStr, L"%s%s", szUDBAdvStatsTooltipText[ 65 ], szUDBAdvStatsExplanationsTooltipText[ 64 ]); + } + SetRegionFastHelpText( &(gUDBFasthelpRegions[ iFirstDataRegion + (cnt-sFirstLine) ]), pStr ); + MSYS_EnableRegion( &gUDBFasthelpRegions[ iFirstDataRegion + (cnt-sFirstLine) ] ); + } + cnt++; + } + } + + FLOAT bRecoilModifierX; + FLOAT bRecoilModifierY; + GetFlatRecoilModifier( gpItemDescObject, &bRecoilModifierX, &bRecoilModifierY ); ///////////////////// LATERAL RECOIL MODIFIER - if (bRecoilModifier != 0 ) + if (bRecoilModifierX != 0 ) { if( UsingNewCTHSystem() == true ) { @@ -3176,9 +3198,8 @@ void InternalInitEDBTooltipRegion( OBJECTTYPE * gpItemDescObject, UINT32 guiCurr } } - GetFlatRecoilModifier( gpItemDescObject, &bDummy, &bRecoilModifier ); ///////////////////// VERTICAL RECOIL MODIFIER - if (bRecoilModifier != 0 ) + if (bRecoilModifierY != 0 ) { if( UsingNewCTHSystem() == true ) { @@ -5047,11 +5068,25 @@ void DrawAdvancedStats( OBJECTTYPE * gpItemDescObject ) cnt++; } } + + ///////////////////// PERCENT RECOIL MODIFIER + if ( GetPercentRecoilModifier( gpItemDescObject ) != 0 ) + { + if ( UsingNewCTHSystem() == true ) + { + if (cnt >= sFirstLine && cnt < sLastLine) + { + BltVideoObjectFromIndex( guiSAVEBUFFER, guiItemInfoAdvancedIcon, 62, gItemDescAdvRegions[cnt-sFirstLine][0].sLeft + sOffsetX, gItemDescAdvRegions[cnt-sFirstLine][0].sTop + sOffsetY, VO_BLT_SRCTRANSPARENCY, NULL ); + } + cnt++; + } + } + + FLOAT bRecoilModifierX; + FLOAT bRecoilModifierY; + GetFlatRecoilModifier( gpItemDescObject, &bRecoilModifierX, &bRecoilModifierY ); ///////////////////// LATERAL RECOIL MODIFIER - INT8 bRecoilModifier; - INT8 bDummy; - GetFlatRecoilModifier( gpItemDescObject, &bRecoilModifier, &bDummy ); - if (bRecoilModifier != 0) + if (bRecoilModifierX != 0) { if( UsingNewCTHSystem() == true ) { @@ -5063,9 +5098,8 @@ void DrawAdvancedStats( OBJECTTYPE * gpItemDescObject ) } } - GetFlatRecoilModifier( gpItemDescObject, &bDummy, &bRecoilModifier ); ///////////////////// VERTICAL RECOIL MODIFIER - if (bRecoilModifier != 0 ) + if (bRecoilModifierY != 0 ) { if( UsingNewCTHSystem() == true ) { @@ -7450,21 +7484,28 @@ void DrawWeaponValues( OBJECTTYPE * gpItemDescObject ) // Set line to draw into ubNumLine = 20; - INT8 iFinalRecoilX = 0; - INT8 iFinalRecoilY = 0; + FLOAT iFinalRecoilX = 0; + FLOAT iFinalRecoilY = 0; // Get final Recoil GetRecoil( gpItemDescSoldier, gpItemDescObject, &iFinalRecoilX, &iFinalRecoilY, 3 ); // Get base Recoil - INT8 iRecoilX = Weapon[ gpItemDescObject->usItem ].bRecoilX; - INT8 iRecoilY = Weapon[ gpItemDescObject->usItem ].bRecoilY; + FLOAT iRecoilX = Weapon[ gpItemDescObject->usItem ].bRecoilX; + FLOAT iRecoilY = Weapon[ gpItemDescObject->usItem ].bRecoilY; if (iRecoilX == -127) { iRecoilX = 0; } // -127 means "invalid". These guns don't actually have any recoil parameters. if (iRecoilY == -127) { iRecoilY = 0; } - FLOAT dBaseRecoil = sqrt((FLOAT)((iRecoilX * iRecoilX)+(iRecoilY * iRecoilY))); - FLOAT dFinalRecoil = sqrt((FLOAT)((iFinalRecoilX * iFinalRecoilX) + (iFinalRecoilY * iFinalRecoilY))); + // modify by ini values + if ( Item[ gpItemDescObject->usItem ].usItemClass == IC_GUN ) + { + iRecoilX *= gItemSettings.fRecoilXModifierGun[ Weapon[ gpItemDescObject->usItem ].ubWeaponType ]; + iRecoilY *= gItemSettings.fRecoilYModifierGun[ Weapon[ gpItemDescObject->usItem ].ubWeaponType ]; + } + + FLOAT dBaseRecoil = sqrt( ((iRecoilX * iRecoilX)+(iRecoilY * iRecoilY)) ); + FLOAT dFinalRecoil = sqrt( ((iFinalRecoilX * iFinalRecoilX) + (iFinalRecoilY * iFinalRecoilY)) ); FLOAT dRecoilModifier = dFinalRecoil - dBaseRecoil; // Set Y coordinates @@ -9130,8 +9171,8 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject ) INT16 iModifier[3]; FLOAT iFloatModifier[3]; - INT8 bDummyValue; - INT8 bRecoilModifier; + FLOAT bRecoilModifierX; + FLOAT bRecoilModifierY; ///////////////////// INDEX swprintf( pStr, gzItemDescGenIndexes[0] ); @@ -9851,7 +9892,7 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject ) } ///////////////////// RANGE MODIFIER - iModifier[0] = GetRangeBonus( gpItemDescObject ); + iModifier[0] = GetRangeBonus( gpItemDescObject ) / CELL_X_SIZE; iModifier[1] = iModifier[0]; iModifier[2] = iModifier[0]; if (iModifier[0] != 0 ) @@ -9873,26 +9914,14 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject ) if (iModifier[cnt2] > 0) { SetFontForeground( ITEMDESC_FONTPOSITIVE ); - swprintf( pStr, L"%d", iModifier[cnt2] ); - wcscat( pStr, L"%" ); + swprintf( pStr, L"+%d", iModifier[cnt2] ); FindFontCenterCoordinates( sLeft, sTop, sWidth, sHeight, pStr, BLOCKFONT2, &usX, &usY); - #ifdef CHINESE - wcscat( pStr, ChineseSpecString1 ); - #else - wcscat( pStr, L"%" ); - #endif } else if (iModifier[cnt2] < 0) { SetFontForeground( ITEMDESC_FONTNEGATIVE ); swprintf( pStr, L"%d", iModifier[cnt2] ); - wcscat( pStr, L"%" ); FindFontCenterCoordinates( sLeft, sTop, sWidth, sHeight, pStr, BLOCKFONT2, &usX, &usY); - #ifdef CHINESE - wcscat( pStr, ChineseSpecString1 ); - #else - wcscat( pStr, L"%" ); - #endif } else { @@ -9988,12 +10017,12 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject ) cnt++; } - ///////////////////// LATERAL RECOIL MODIFIER - GetFlatRecoilModifier( gpItemDescObject, &bRecoilModifier, &bDummyValue ); - iModifier[0] = bRecoilModifier; - iModifier[1] = bRecoilModifier; - iModifier[2] = bRecoilModifier; - if (iModifier[0] != 0 && UsingNewCTHSystem() == true ) + ///////////////////// PERCENT RECOIL MODIFIER + iModifier[0] = GetPercentRecoilModifier( gpItemDescObject ); + iModifier[1] = iModifier[0]; + iModifier[2] = iModifier[0]; + + if ( iModifier[0] != 0 && UsingNewCTHSystem() == true ) { if (cnt >= sFirstLine && cnt < sLastLine) { @@ -10011,12 +10040,67 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject ) { SetFontForeground( ITEMDESC_FONTNEGATIVE ); swprintf( pStr, L"+%d", iModifier[cnt2] ); + wcscat( pStr, L"%" ); FindFontCenterCoordinates( sLeft, sTop, sWidth, sHeight, pStr, BLOCKFONT2, &usX, &usY); + #ifdef CHINESE + wcscat( pStr, ChineseSpecString1 ); + #else + wcscat( pStr, L"%" ); + #endif } else if (iModifier[cnt2] < 0) { SetFontForeground( ITEMDESC_FONTPOSITIVE ); swprintf( pStr, L"%d", iModifier[cnt2] ); + wcscat( pStr, L"%" ); + FindFontCenterCoordinates( sLeft, sTop, sWidth, sHeight, pStr, BLOCKFONT2, &usX, &usY); + #ifdef CHINESE + wcscat( pStr, ChineseSpecString1 ); + #else + wcscat( pStr, L"%" ); + #endif + } + else + { + swprintf( pStr, L"--" ); + FindFontCenterCoordinates( sLeft, sTop, sWidth, sHeight, pStr, BLOCKFONT2, &usX, &usY); + } + mprintf( usX, usY, pStr ); + } + } + cnt++; + } + + GetFlatRecoilModifier( gpItemDescObject, &bRecoilModifierX, &bRecoilModifierY ); + ///////////////////// LATERAL RECOIL MODIFIER + iFloatModifier[0] = bRecoilModifierX; + iFloatModifier[1] = bRecoilModifierX; + iFloatModifier[2] = bRecoilModifierX; + + if (iFloatModifier[0] != 0 && UsingNewCTHSystem() == true ) + { + if (cnt >= sFirstLine && cnt < sLastLine) + { + // Set Y coordinates + sTop = gItemDescAdvRegions[cnt-sFirstLine][1].sTop; + sHeight = gItemDescAdvRegions[cnt-sFirstLine][1].sBottom - sTop; + + // Print Values + for (UINT8 cnt2 = 0; cnt2 < 3; cnt2++) + { + SetFontForeground( 5 ); + sLeft = gItemDescAdvRegions[cnt-sFirstLine][cnt2+1].sLeft; + sWidth = gItemDescAdvRegions[cnt-sFirstLine][cnt2+1].sRight - sLeft; + if (iFloatModifier[cnt2] > 0) + { + SetFontForeground( ITEMDESC_FONTNEGATIVE ); + swprintf( pStr, L"+%3.1f", iFloatModifier[cnt2] ); + FindFontCenterCoordinates( sLeft, sTop, sWidth, sHeight, pStr, BLOCKFONT2, &usX, &usY); + } + else if (iFloatModifier[cnt2] < 0) + { + SetFontForeground( ITEMDESC_FONTPOSITIVE ); + swprintf( pStr, L"%3.1f", iFloatModifier[cnt2] ); FindFontCenterCoordinates( sLeft, sTop, sWidth, sHeight, pStr, BLOCKFONT2, &usX, &usY); } else @@ -10031,11 +10115,11 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject ) } ///////////////////// VERTICAL RECOIL MODIFIER - GetFlatRecoilModifier( gpItemDescObject, &bDummyValue, &bRecoilModifier ); - iModifier[0] = bRecoilModifier; - iModifier[1] = bRecoilModifier; - iModifier[2] = bRecoilModifier; - if (iModifier[0] != 0 && UsingNewCTHSystem() == true ) + iFloatModifier[0] = bRecoilModifierY; + iFloatModifier[1] = bRecoilModifierY; + iFloatModifier[2] = bRecoilModifierY; + + if (iFloatModifier[0] != 0 && UsingNewCTHSystem() == true ) { if (cnt >= sFirstLine && cnt < sLastLine) { @@ -10049,16 +10133,16 @@ void DrawAdvancedValues( OBJECTTYPE *gpItemDescObject ) SetFontForeground( 5 ); sLeft = gItemDescAdvRegions[cnt-sFirstLine][cnt2+1].sLeft; sWidth = gItemDescAdvRegions[cnt-sFirstLine][cnt2+1].sRight - sLeft; - if (iModifier[cnt2] > 0) + if (iFloatModifier[cnt2] > 0) { SetFontForeground( ITEMDESC_FONTNEGATIVE ); - swprintf( pStr, L"+%d", iModifier[cnt2] ); + swprintf( pStr, L"+%3.1f", iFloatModifier[cnt2] ); FindFontCenterCoordinates( sLeft, sTop, sWidth, sHeight, pStr, BLOCKFONT2, &usX, &usY); } - else if (iModifier[cnt2] < 0) + else if (iFloatModifier[cnt2] < 0) { SetFontForeground( ITEMDESC_FONTPOSITIVE ); - swprintf( pStr, L"%d", iModifier[cnt2] ); + swprintf( pStr, L"%3.1f", iFloatModifier[cnt2] ); FindFontCenterCoordinates( sLeft, sTop, sWidth, sHeight, pStr, BLOCKFONT2, &usX, &usY); } else diff --git a/Tactical/Item Types.h b/Tactical/Item Types.h index 0ef7398e0..9cd27a287 100644 --- a/Tactical/Item Types.h +++ b/Tactical/Item Types.h @@ -1099,8 +1099,8 @@ typedef struct INT16 aimlevelsmodifier[3]; // HEADROCK HAM 4: New modifiers that do not require a stance array, since they affect the gun objectively, not // subjectively. - INT16 RecoilModifierX; - INT16 RecoilModifierY; + FLOAT RecoilModifierX; + FLOAT RecoilModifierY; INT16 PercentRecoilModifier; INT16 percentaccuracymodifier; FLOAT scopemagfactor; diff --git a/Tactical/Items.cpp b/Tactical/Items.cpp index b1712c164..132d93c6d 100644 --- a/Tactical/Items.cpp +++ b/Tactical/Items.cpp @@ -9832,6 +9832,15 @@ INT16 BonusReduceMore( INT16 bonus, INT16 status, INT16 statusCutoff = 100 ) return bonus; } +// Scale bonus with item status. Status < 50% creates a penalty! +FLOAT BonusReduceMoreFloat( FLOAT bonus, INT16 status, INT16 statusCutoff = 100 ) +{ + if ( bonus > 0 && status < statusCutoff && statusCutoff > 0 && statusCutoff <= 100 ) + return ( ( ( (FLOAT)status * 100.0f ) / (FLOAT)statusCutoff - 50.0f ) * bonus ) / 50.0f; + else // A penalty can't be reduced by status! + return bonus; +} + // Some items either work or they don't... INT16 BonusOnOff( INT16 bonus, INT16 status ) { @@ -10452,7 +10461,7 @@ INT16 GetBurstToHitBonus( OBJECTTYPE * pObj, BOOLEAN fProneStance ) return( bonus ); } -void GetRecoil( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObj, INT8 *bRecoilX, INT8 *bRecoilY, UINT8 ubNumBullet ) +void GetRecoil( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObj, FLOAT *bRecoilX, FLOAT *bRecoilY, UINT8 ubNumBullet ) { *bRecoilX = 0; *bRecoilY = 0; @@ -10476,6 +10485,12 @@ void GetRecoil( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObj, INT8 *bRecoilX, INT8 *b *bRecoilX = Weapon[pObjUsed->usItem].bRecoilX; *bRecoilY = Weapon[pObjUsed->usItem].bRecoilY; + // modify by ini values + if ( Item[ pObj->usItem ].usItemClass == IC_GUN ) + { + *bRecoilX *= gItemSettings.fRecoilXModifierGun[ Weapon[ pObj->usItem ].ubWeaponType ]; + *bRecoilY *= gItemSettings.fRecoilYModifierGun[ Weapon[ pObj->usItem ].ubWeaponType ]; + } // Apply a percentage-based modifier. This can increase or decrease BOTH axes. At most, it can eliminate // recoil on the gun. @@ -10483,19 +10498,22 @@ void GetRecoil( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObj, INT8 *bRecoilX, INT8 *b INT16 sPercentRecoilModifier = __max(-100, (GetBasePercentRecoilModifier( pObjUsed ) + GetAttachmentPercentRecoilModifier( pObjUsedInHand ) )); - *bRecoilX += (*bRecoilX * sPercentRecoilModifier ) / 100; - *bRecoilY += (*bRecoilY * sPercentRecoilModifier ) / 100; + *bRecoilX *= ( (FLOAT)( 100 + sPercentRecoilModifier ) / 100 ); + *bRecoilY *= ( (FLOAT)( 100 + sPercentRecoilModifier ) / 100 ); // Apply a flat modifier. This acts on either axis, and if powerful enough can "reverse polarity" of either // axis recoil. For instance, it can make a gun that normally pulls LEFT start pulling RIGHT instead. - INT8 bRecoilAdjustX = 0; - INT8 bRecoilAdjustY = 0; + FLOAT bRecoilAdjustX = 0; + FLOAT bRecoilAdjustY = 0; //GetFlatRecoilModifier( pObj, &bRecoilAdjustX, &bRecoilAdjustY ); GetBaseFlatRecoilModifier( pObj, &bRecoilAdjustX, &bRecoilAdjustY ); GetAttachmentFlatRecoilModifier( &pSoldier->inv[HANDPOS], &bRecoilAdjustX, &bRecoilAdjustY); //JMich TODO: Currently no check for dual wielding + // silversurfer: I don't think that we need a check for dual wielding here. This function is supposed to return weapon recoil value. + // It doesn't matter if this gun is wielded by someone else, with right, left hand or with the toes. The gun always produces the same recoil. + // Controlling recoil when firing two guns is more difficult but this should be checked outside this function. *bRecoilX = __max(0, *bRecoilX + bRecoilAdjustX); *bRecoilY = __max(0, *bRecoilY + bRecoilAdjustY); @@ -10507,15 +10525,15 @@ void GetRecoil( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObj, INT8 *bRecoilX, INT8 *b // HEADROCK HAM 4: This function calculates the flat recoil adjustment for a gun. Flat adjustment increases // or decreases recoil by a specific number of points in either the vertical or horizontal axes (or both). // It can potentially cause a weapon it reverse its recoil direction. -void GetBaseFlatRecoilModifier( OBJECTTYPE *pObj, INT8 *bRecoilModifierX, INT8 *bRecoilModifierY ) +void GetBaseFlatRecoilModifier( OBJECTTYPE *pObj, FLOAT *bRecoilModifierX, FLOAT *bRecoilModifierY ) { - INT8 bRecoilAdjustX = 0; - INT8 bRecoilAdjustY = 0; + FLOAT bRecoilAdjustX = 0; + FLOAT bRecoilAdjustY = 0; if (pObj->exists() == true && UsingNewCTHSystem() == true) { // Inherent item modifiers - bRecoilAdjustX += BonusReduceMore( Item[pObj->usItem].RecoilModifierX, (*pObj)[0]->data.objectStatus ); - bRecoilAdjustY += BonusReduceMore( Item[pObj->usItem].RecoilModifierY, (*pObj)[0]->data.objectStatus ); + bRecoilAdjustX += BonusReduceMoreFloat( Item[pObj->usItem].RecoilModifierX, (*pObj)[0]->data.objectStatus ); + bRecoilAdjustY += BonusReduceMoreFloat( Item[pObj->usItem].RecoilModifierY, (*pObj)[0]->data.objectStatus ); // Ammo item modifiers bRecoilAdjustX += Item[(*pObj)[0]->data.gun.usGunAmmoItem].RecoilModifierX; @@ -10525,10 +10543,10 @@ void GetBaseFlatRecoilModifier( OBJECTTYPE *pObj, INT8 *bRecoilModifierX, INT8 * *bRecoilModifierX = bRecoilAdjustX; *bRecoilModifierY = bRecoilAdjustY; } -void GetAttachmentFlatRecoilModifier( OBJECTTYPE *pObj, INT8 *bRecoilModifierX, INT8 *bRecoilModifierY ) +void GetAttachmentFlatRecoilModifier( OBJECTTYPE *pObj, FLOAT *bRecoilModifierX, FLOAT *bRecoilModifierY ) { - INT8 bRecoilAdjustX = 0; - INT8 bRecoilAdjustY = 0; + FLOAT bRecoilAdjustX = 0; + FLOAT bRecoilAdjustY = 0; if (pObj->exists() == true && UsingNewCTHSystem() == true) { // Attachment item modifiers @@ -10536,8 +10554,8 @@ void GetAttachmentFlatRecoilModifier( OBJECTTYPE *pObj, INT8 *bRecoilModifierX, { if (iter->exists()) { - bRecoilAdjustX += BonusReduceMore( Item[iter->usItem].RecoilModifierX, (*iter)[0]->data.objectStatus ); - bRecoilAdjustY += BonusReduceMore( Item[iter->usItem].RecoilModifierY, (*iter)[0]->data.objectStatus ); + bRecoilAdjustX += BonusReduceMoreFloat( Item[iter->usItem].RecoilModifierX, (*iter)[0]->data.objectStatus ); + bRecoilAdjustY += BonusReduceMoreFloat( Item[iter->usItem].RecoilModifierY, (*iter)[0]->data.objectStatus ); } } } @@ -10545,17 +10563,17 @@ void GetAttachmentFlatRecoilModifier( OBJECTTYPE *pObj, INT8 *bRecoilModifierX, *bRecoilModifierX += bRecoilAdjustX; *bRecoilModifierY += bRecoilAdjustY; } -void GetFlatRecoilModifier( OBJECTTYPE *pObj, INT8 *bRecoilModifierX, INT8 *bRecoilModifierY ) +void GetFlatRecoilModifier( OBJECTTYPE *pObj, FLOAT *bRecoilModifierX, FLOAT *bRecoilModifierY ) { - INT8 bRecoilAdjustX = 0; - INT8 bRecoilAdjustY = 0; + FLOAT bRecoilAdjustX = 0; + FLOAT bRecoilAdjustY = 0; if (pObj->exists() == true && UsingNewCTHSystem() == true) { // Inherent item modifiers - bRecoilAdjustX += BonusReduceMore( Item[pObj->usItem].RecoilModifierX, (*pObj)[0]->data.objectStatus ); - bRecoilAdjustY += BonusReduceMore( Item[pObj->usItem].RecoilModifierY, (*pObj)[0]->data.objectStatus ); + bRecoilAdjustX += BonusReduceMoreFloat( Item[pObj->usItem].RecoilModifierX, (*pObj)[0]->data.objectStatus ); + bRecoilAdjustY += BonusReduceMoreFloat( Item[pObj->usItem].RecoilModifierY, (*pObj)[0]->data.objectStatus ); // Ammo item modifiers bRecoilAdjustX += Item[(*pObj)[0]->data.gun.usGunAmmoItem].RecoilModifierX; @@ -10566,8 +10584,8 @@ void GetFlatRecoilModifier( OBJECTTYPE *pObj, INT8 *bRecoilModifierX, INT8 *bRec { if (iter->exists()) { - bRecoilAdjustX += BonusReduceMore( Item[iter->usItem].RecoilModifierX, (*iter)[0]->data.objectStatus ); - bRecoilAdjustY += BonusReduceMore( Item[iter->usItem].RecoilModifierY, (*iter)[0]->data.objectStatus ); + bRecoilAdjustX += BonusReduceMoreFloat( Item[iter->usItem].RecoilModifierX, (*iter)[0]->data.objectStatus ); + bRecoilAdjustY += BonusReduceMoreFloat( Item[iter->usItem].RecoilModifierY, (*iter)[0]->data.objectStatus ); } } } diff --git a/Tactical/Items.h b/Tactical/Items.h index f5e1b9ed1..285df521a 100644 --- a/Tactical/Items.h +++ b/Tactical/Items.h @@ -306,10 +306,10 @@ BOOLEAN HasFastBurst( OBJECTTYPE * pObj ); INT16 GetMagSizeBonus( OBJECTTYPE * pObj, UINT8 subObject = 0 ); // HEADROCK HAM 4: This function now calculates and returns the weapon's recoil as X/Y offsets. -void GetRecoil( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObj, INT8 *bRecoilX, INT8 *bRecoilY, UINT8 ubNumBullet ); -void GetBaseFlatRecoilModifier( OBJECTTYPE *pObj, INT8 *bRecoilModifierX, INT8 *bRecoilModifierY); -void GetAttachmentFlatRecoilModifier( OBJECTTYPE *pObj, INT8 *bRecoilModifierX, INT8 *bRecoilModifierY); -void GetFlatRecoilModifier( OBJECTTYPE *pObj, INT8 *bRecoilModifierX, INT8 *bRecoilModifierY ); +void GetRecoil( SOLDIERTYPE *pSoldier, OBJECTTYPE *pObj, FLOAT *bRecoilX, FLOAT *bRecoilY, UINT8 ubNumBullet ); +void GetBaseFlatRecoilModifier( OBJECTTYPE *pObj, FLOAT *bRecoilModifierX, FLOAT *bRecoilModifierY); +void GetAttachmentFlatRecoilModifier( OBJECTTYPE *pObj, FLOAT *bRecoilModifierX, FLOAT *bRecoilModifierY); +void GetFlatRecoilModifier( OBJECTTYPE *pObj, FLOAT *bRecoilModifierX, FLOAT *bRecoilModifierY ); INT16 GetBasePercentRecoilModifier( OBJECTTYPE *pObj ); INT16 GetAttachmentPercentRecoilModifier( OBJECTTYPE *pObj); INT16 GetPercentRecoilModifier( OBJECTTYPE *pObj ); diff --git a/Tactical/LOS.cpp b/Tactical/LOS.cpp index b23fe6b7d..eae025928 100644 --- a/Tactical/LOS.cpp +++ b/Tactical/LOS.cpp @@ -8831,8 +8831,8 @@ void CalcPreRecoilOffset( SOLDIERTYPE *pShooter, OBJECTTYPE *pWeapon, FLOAT *dMu // We can also anticipate the recoil of the weapon, which we should set here. - INT8 bGunRecoilX; - INT8 bGunRecoilY; + FLOAT bGunRecoilX; + FLOAT bGunRecoilY; // Get the gun's recoil values for our first bullet. // silversurfer: The first bullet will never be affected by recoil so ask for number 2 instead. @@ -8936,8 +8936,8 @@ void CalcPreRecoilOffset( SOLDIERTYPE *pShooter, OBJECTTYPE *pWeapon, FLOAT *dMu // The basic ideal is CF = -Recoil. If we can achieve this, then our muzzle will be completely stationary // after the first bullet is fired, allowing us to adjust CF as we please during the following CF check. - FLOAT dIdealCounterForceX = (FLOAT)-bGunRecoilX; - FLOAT dIdealCounterForceY = (FLOAT)-bGunRecoilY; + FLOAT dIdealCounterForceX = -bGunRecoilX; + FLOAT dIdealCounterForceY = -bGunRecoilY; // But we also want the volley to be moving at least somewhat toward the target. Therefore, lets figure // out where our muzzle is, and adjust in that direction by as much force as could be undone by the next @@ -9034,8 +9034,8 @@ void CalcRecoilOffset( SOLDIERTYPE *pShooter, FLOAT *dMuzzleOffsetX, FLOAT *dMuz // shooters might be overwhelmed and start firing towards the sky. // Get X/Y recoil parameters from the gun. - INT8 bGunRecoilX; - INT8 bGunRecoilY; + FLOAT bGunRecoilX; + FLOAT bGunRecoilY; if( fSecondHandBurst ) GetRecoil( pShooter, pWeapon, &bGunRecoilX, &bGunRecoilY, (pShooter->bDoBurst/2) ); @@ -9227,7 +9227,7 @@ void CalcRecoilOffset( SOLDIERTYPE *pShooter, FLOAT *dMuzzleOffsetX, FLOAT *dMuz } -FLOAT CalcCounterForceChange( SOLDIERTYPE * pShooter, UINT32 uiCounterForceAccuracy, FLOAT dCounterForceMax, FLOAT dMuzzleOffset, INT8 bRecoil, FLOAT dPrevCounterForce, UINT32 uiIntendedBullets ) +FLOAT CalcCounterForceChange( SOLDIERTYPE * pShooter, UINT32 uiCounterForceAccuracy, FLOAT dCounterForceMax, FLOAT dMuzzleOffset, FLOAT bRecoil, FLOAT dPrevCounterForce, UINT32 uiIntendedBullets ) { ///////////////////////////////////////////////////////////////////////////////////////// // HEADROCK HAM 5: New Counter-Force Calculation diff --git a/Tactical/LOS.h b/Tactical/LOS.h index 90b2d7845..5e602df38 100644 --- a/Tactical/LOS.h +++ b/Tactical/LOS.h @@ -241,7 +241,7 @@ UINT32 CalcCounterForceAccuracy(SOLDIERTYPE *pShooter, OBJECTTYPE *pWeapon, UINT void CalcPreRecoilOffset( SOLDIERTYPE *pShooter, OBJECTTYPE *pWeapon, FLOAT *dMuzzleOffsetX, FLOAT *dMuzzleOffsetY, UINT32 uiRange ); void CalcRecoilOffset( SOLDIERTYPE *pShooter, FLOAT *dMuzzleOffsetX, FLOAT *dMuzzleOffsetY, OBJECTTYPE *pWeapon, UINT32 uiRange ); // HEADROCK HAM 5: New function, completely replaces the Counter Force Frequency check. -FLOAT CalcCounterForceChange( SOLDIERTYPE * pShooter, UINT32 uiCounterForceAccuracy, FLOAT dCounterForceMax, FLOAT dMuzzleOffset, INT8 bRecoil, FLOAT dPrevCounterForce, UINT32 uiIntendedBullets ); +FLOAT CalcCounterForceChange( SOLDIERTYPE * pShooter, UINT32 uiCounterForceAccuracy, FLOAT dCounterForceMax, FLOAT dMuzzleOffset, FLOAT bRecoil, FLOAT dPrevCounterForce, UINT32 uiIntendedBullets ); // HEADROCK HAM 4: Required for shooting mechanic extern INT8 EffectiveMarksmanship( SOLDIERTYPE * pSoldier ); diff --git a/Tactical/Weapons.cpp b/Tactical/Weapons.cpp index 8268e100b..79786ba76 100644 --- a/Tactical/Weapons.cpp +++ b/Tactical/Weapons.cpp @@ -687,12 +687,12 @@ weaponEndElementHandle(void *userData, const XML_Char *name) else if(strcmp(name, "bRecoilX") == 0) { pData->curElement = WEAPON_ELEMENT_WEAPON; - pData->curWeapon.bRecoilX = (INT8) atol(pData->szCharData); + pData->curWeapon.bRecoilX = (FLOAT) atof(pData->szCharData); } else if(strcmp(name, "bRecoilY") == 0) { pData->curElement = WEAPON_ELEMENT_WEAPON; - pData->curWeapon.bRecoilY = (INT8) atol(pData->szCharData); + pData->curWeapon.bRecoilY = (FLOAT) atof(pData->szCharData); } else if(strcmp(name, "ubRecoilDelay") == 0) { diff --git a/Tactical/Weapons.h b/Tactical/Weapons.h index d8d4aa0c8..e827a6be6 100644 --- a/Tactical/Weapons.h +++ b/Tactical/Weapons.h @@ -379,8 +379,8 @@ typedef struct UINT16 ManualReloadSound; BOOLEAN EasyUnjam; // Guns where each bullet has its own chamber (like revolvers) are easyer to unjam - INT8 bRecoilX; // HEADROCK HAM 4: Recoil now measured in points of muzzle deviation X and Y. - INT8 bRecoilY; // Positive values indicated upwards (Y) and rightwards (X). Negatives are down (-Y) and left (-X). + FLOAT bRecoilX; // HEADROCK HAM 4: Recoil now measured in points of muzzle deviation X and Y. + FLOAT bRecoilY; // Positive values indicated upwards (Y) and rightwards (X). Negatives are down (-Y) and left (-X). // Note that each value is an array. Each item in the array determines recoil // for a different bullet in the sequence. Not all values have to be filled, // but the last filled value will determine the recoil for longer volleys. diff --git a/TacticalAI/Attacks.cpp b/TacticalAI/Attacks.cpp index dccc6675e..e48fa7100 100644 --- a/TacticalAI/Attacks.cpp +++ b/TacticalAI/Attacks.cpp @@ -3137,12 +3137,12 @@ BOOLEAN AIDetermineStealingWeaponAttempt( SOLDIERTYPE * pSoldier, SOLDIERTYPE * // recoil system. FLOAT AICalcRecoilForShot( SOLDIERTYPE *pSoldier, OBJECTTYPE *pWeapon, UINT8 ubShotNum) { - INT8 bRecoilX = 0; - INT8 bRecoilY = 0; + FLOAT bRecoilX = 0; + FLOAT bRecoilY = 0; GetRecoil( pSoldier, pWeapon, &bRecoilX, &bRecoilY, ubShotNum ); // Return average shooter's ability to control this gun. // HEADROCK HAM 4: TODO: Incorporate items that alter max counter-force. - FLOAT AverageRecoil = __max(0, ((FLOAT)sqrt( (FLOAT)(bRecoilX * bRecoilX) + (FLOAT)(bRecoilY * bRecoilY) ) - (gGameCTHConstants.RECOIL_MAX_COUNTER_FORCE * 0.7f) ) ); + FLOAT AverageRecoil = __max(0, ( sqrt( (bRecoilX * bRecoilX) + (bRecoilY * bRecoilY) ) - (gGameCTHConstants.RECOIL_MAX_COUNTER_FORCE * 0.7f) ) ); return AverageRecoil; } diff --git a/TacticalAI/DecideAction.cpp b/TacticalAI/DecideAction.cpp index f7b35dbea..bb8b84381 100644 --- a/TacticalAI/DecideAction.cpp +++ b/TacticalAI/DecideAction.cpp @@ -2704,8 +2704,6 @@ INT8 DecideActionRed(SOLDIERTYPE *pSoldier, UINT8 ubUnconsciousOK) if(UsingNewCTHSystem() == true){ do { - INT8 bRecoilX = 0; - INT8 bRecoilY = 0; pSoldier->bDoAutofire++; dTotalRecoil += AICalcRecoilForShot( pSoldier, &(pSoldier->inv[BestShot.bWeaponIn]), pSoldier->bDoAutofire ); ubBurstAPs = CalcAPsToAutofire( pSoldier->CalcActionPoints(), &(pSoldier->inv[BestShot.bWeaponIn]), pSoldier->bDoAutofire, pSoldier ); @@ -5306,8 +5304,6 @@ L_NEWAIM: if(UsingNewCTHSystem() == true){ do { - INT8 bRecoilX = 0; - INT8 bRecoilY = 0; pSoldier->bDoAutofire++; dTotalRecoil += AICalcRecoilForShot( pSoldier, &(pSoldier->inv[BestShot.bWeaponIn]), pSoldier->bDoAutofire ); ubBurstAPs = CalcAPsToAutofire( pSoldier->CalcActionPoints(), &(pSoldier->inv[BestShot.bWeaponIn]), pSoldier->bDoAutofire, pSoldier ); diff --git a/Utils/Text.h b/Utils/Text.h index 6f00549d1..5c6575c94 100644 --- a/Utils/Text.h +++ b/Utils/Text.h @@ -663,9 +663,9 @@ extern STR16 szUDBGenCommonStatsTooltipText[ 1 ]; // silversurfer new for i extern STR16 szUDBGenCommonStatsExplanationsTooltipText[ 1 ]; // silversurfer new for items that don't fit the other categories extern STR16 szUDBGenSecondaryStatsTooltipText[ 37 ]; // Flugente Food System: 26 -> 28 external feeding: 28->30 JMich_SkillsModifiers: 31 for Defusal kit - covert item: 31->32 silversurfer more tags: 32->37 extern STR16 szUDBGenSecondaryStatsExplanationsTooltipText[ 37 ]; // Flugente Food System: 26 -> 28 external feeding: 28->30 JMich_SkillsModifiers: 31 for Defusal kit - covert item: 31->32 silversurfer more tags: 32->37 -extern STR16 szUDBAdvStatsTooltipText[ 65 ]; // Flugente Overheating Weapons: 48->56 poison: 56->57 dirt: 57->58 food:58->64 silversurfer Best Laser Range:64->65 -extern STR16 szUDBAdvStatsExplanationsTooltipText[ 64 ]; // Flugente Overheating Weapons: 48->56 poison: 56->57 dirt: 57->58 food:58->64 -extern STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[ 52 ]; // Flugente Overheating Weapons: 48->52 +extern STR16 szUDBAdvStatsTooltipText[ 66 ]; // Flugente Overheating Weapons: 48->56 poison: 56->57 dirt: 57->58 food:58->64 silversurfer Best Laser Range:64->65 silversurfer PercentRecoilModifier: 66 +extern STR16 szUDBAdvStatsExplanationsTooltipText[ 65 ]; // Flugente Overheating Weapons: 48->56 poison: 56->57 dirt: 57->58 food:58->64 silversurfer Best Laser Range:64->65 silversurfer PercentRecoilModifier: 65 +extern STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[ 53 ]; // Flugente Overheating Weapons: 48->52 silversurfer Best Laser Range:64->65 silversurfer PercentRecoilModifier: 53 // Headrock: End Externs extern STR16 sKeyDescriptionStrings[2]; diff --git a/Utils/XML_Items.cpp b/Utils/XML_Items.cpp index 338a30908..7281ae87b 100644 --- a/Utils/XML_Items.cpp +++ b/Utils/XML_Items.cpp @@ -1201,12 +1201,12 @@ itemEndElementHandle(void *userData, const XML_Char *name) else if(strcmp(name, "RecoilModifierX") == 0) { pData->curElement = ELEMENT; - pData->curItem.RecoilModifierX = (INT16) atol(pData->szCharData); + pData->curItem.RecoilModifierX = (FLOAT) atof(pData->szCharData); } else if(strcmp(name, "RecoilModifierY") == 0) { pData->curElement = ELEMENT; - pData->curItem.RecoilModifierY = (INT16) atol(pData->szCharData); + pData->curItem.RecoilModifierY = (FLOAT) atof(pData->szCharData); } else if(strcmp(name, "PercentRecoilModifier") == 0) { diff --git a/Utils/_ChineseText.cpp b/Utils/_ChineseText.cpp index 2534eab58..4829e8036 100644 --- a/Utils/_ChineseText.cpp +++ b/Utils/_ChineseText.cpp @@ -7496,6 +7496,7 @@ STR16 szUDBAdvStatsTooltipText[]= L"|士|气|修|正",//L"|M|o|r|a|l|e |M|o|d|i|f|i|e|r", L"|延|迟|修|正",//L"|D|e|c|a|y |M|o|d|i|f|i|e|r", L"|最|佳|激|光|距|离",//L"|B|e|s|t |L|a|s|e|r |R|a|n|g|e", + L"|P|e|r|c|e|n|t |R|e|c|o|i|l |M|o|d|i|f|i|e|r", // 65 // TODO.Translate }; // Alternate tooltip text for weapon Advanced Stats. Just different wording, nothing spectacular. @@ -7565,6 +7566,7 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]= L"\n \n每次会吃掉多少\n 百分比单位\n \n该数值越低越好", // L"\n \nThe percentage of the item\nthat will be eaten at once.\n \nLower is better.", L"\n \n可以改变相应量士气 \n \n该数值越高越好", // L"\n \nMorale is adjusted by this amount.\n \nHigher is better.", L"\n \n这个物品随时间而便腐败\n 超过50%腐败会产生毒性 \n这是食物的霉变率\n \n该数值越低越好", // L"\n \nThis item becomes stale over time.\nIf more then 50% is molded it becomes poisoneous.\nThis is the rate at which mold is generated.\nLower is better.", + L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Recoil by the listed percentage.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", // TODO.TRANSLATE }; STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]= @@ -7621,6 +7623,7 @@ STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]= L"\n \n每回合自动冷却所降低的温度值。", L"\n \n当武器温度超过卡壳阈值时,\n卡壳将更容易发生。", L"\n \n当武器温度超过损坏阈值时,\n武器将更容易损坏。", + L"\n \nThis weapon's recoil strength is being\nmodified by this percentage value by its ammo,\nattachments, or inherent abilities.\n \nThis has no effect if the weapon lacks both\nBurst and Auto-Fire modes.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", // TODO.Translate }; // HEADROCK HAM 4: Text for the new CTH indicator. diff --git a/Utils/_DutchText.cpp b/Utils/_DutchText.cpp index b81f5cbe1..358acdabe 100644 --- a/Utils/_DutchText.cpp +++ b/Utils/_DutchText.cpp @@ -7507,6 +7507,7 @@ STR16 szUDBAdvStatsTooltipText[]= L"|M|o|r|a|l|e |M|o|d|i|f|i|e|r",//TODO.translate L"|D|e|c|a|y |M|o|d|i|f|i|e|r",//TODO.translate L"|B|e|s|t |L|a|s|e|r |R|a|n|g|e",//TODO.translate + L"|P|e|r|c|e|n|t |R|e|c|o|i|l |M|o|d|i|f|i|e|r", // 65 }; // Alternate tooltip text for weapon Advanced Stats. Just different wording, nothing spectacular. @@ -7527,8 +7528,8 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]= L"\n \nWhen attached to a ranged weapon, this item\nmodifies its maximum effective range.\n \nMaximum Range mainly dictates how far a bullet\nfired from the weapon can fly before it begins\ndropping sharply towards the ground.\n \nHigher is better.", L"\n \nWhen attached to a ranged weapon, this item\nprovides extra magnification, making shots at a distance\ncomparatively easier to make.\n \nNote that a high Magnification Factor is detrimental\nwhen used at targets CLOSER than the\noptimal distance.\n \nHigher is better.", L"\n \nWhen attached to a ranged weapon, this item\nprojects a dot on the target, making it easier to hit.\n \nThe projection effect is only useful up to a given\ndistance, beyond which it begins to diminish and\neventually disappears.\n \nHigher is better.", - L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Horizontal Recoil\nby the listed percentage.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", - L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Vertical Recoil\nby the listed percentage.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", + L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Horizontal Recoil\nby the listed value.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", + L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Vertical Recoil\nby the listed value.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", L"\n \nThis item modifies the shooter's ability to\ncope with recoil during Burst or Autofire volleys.\n \nWhen high, this can help a shooter to control\nguns with powerful recoil, even if the shooter\nhas low Strength.\n \nHigher is better.", L"\n \nThis item modifies the shooter's ability to\naccurately apply counter-force against a gun's\nrecoil, during Burst or Autofire volleys.\n \nA high bonus helps the shooter bring the gun's muzzle\nprecisely towards the target, even at longer ranges,\nmaking volleys more accurate as a result.\n \nHigher is better.", L"\n \nThis item modifies the shooter's ability to\nfrequently reasses how much counter-force they\nneed to apply against a gun's recoil, during Burst\nor Autofire volleys.\n \nHigher frequency makes volleys more accurate on the whole,\nand also makes longer volleys more accurate assuming\nthe shooter can overcome recoil correctly.\n \nHigher is better.", @@ -7576,6 +7577,7 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]= L"\n \nThe percentage of the item\nthat will be eaten at once.\n \nLower is better.", // TODO.TRANSLATE L"\n \nMorale is adjusted by this amount.\n \nHigher is better.", // TODO.TRANSLATE L"\n \nThis item becomes stale over time.\nIf more then 50% is molded it becomes poisoneous.\nThis is the rate at which mold is generated.\nLower is better.", // TODO.TRANSLATE + L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Recoil by the listed percentage.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", }; STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]= @@ -7632,6 +7634,7 @@ STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]= L"\n \nEvery turn, the temperature is lowered\nby this amount.\nWeapon attachments can affect this.\n \nHigher is better.", L"\n \nIf a gun's temperature is above this,\nit will jam more frequently.", L"\n \nIf a gun's temperature is above this,\nit will be damaged more easily.", + L"\n \nThis weapon's recoil strength is being\nmodified by this percentage value by its ammo,\nattachments, or inherent abilities.\n \nThis has no effect if the weapon lacks both\nBurst and Auto-Fire modes.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", }; // HEADROCK HAM 4: Text for the new CTH indicator. diff --git a/Utils/_EnglishText.cpp b/Utils/_EnglishText.cpp index 694937ce0..32b31483f 100644 --- a/Utils/_EnglishText.cpp +++ b/Utils/_EnglishText.cpp @@ -7431,196 +7431,199 @@ STR16 szUDBGenSecondaryStatsExplanationsTooltipText[]= STR16 szUDBAdvStatsTooltipText[]= { - L"|A|c|c|u|r|a|c|y |M|o|d|i|f|i|e|r", + L"|A|c|c|u|r|a|c|y |M|o|d|i|f|i|e|r", // 0 L"|F|l|a|t |S|n|a|p|s|h|o|t |M|o|d|i|f|i|e|r", L"|P|e|r|c|e|n|t |S|n|a|p|s|h|o|t |M|o|d|i|f|i|e|r", L"|F|l|a|t |A|i|m|i|n|g |M|o|d|i|f|i|e|r", L"|P|e|r|c|e|n|t |A|i|m|i|n|g |M|o|d|i|f|i|e|r", - L"|A|l|l|o|w|e|d |A|i|m|i|n|g |L|e|v|e|l|s |M|o|d|i|f|i|e|r", + L"|A|l|l|o|w|e|d |A|i|m|i|n|g |L|e|v|e|l|s |M|o|d|i|f|i|e|r", // 5 L"|A|i|m|i|n|g |C|a|p |M|o|d|i|f|i|e|r", L"|G|u|n |H|a|n|d|l|i|n|g |M|o|d|i|f|i|e|r", L"|D|r|o|p |C|o|m|p|e|n|s|a|t|i|o|n |M|o|d|i|f|i|e|r", L"|T|a|r|g|e|t |T|r|a|c|k|i|n|g |M|o|d|i|f|i|e|r", - L"|D|a|m|a|g|e |M|o|d|i|f|i|e|r", + L"|D|a|m|a|g|e |M|o|d|i|f|i|e|r", // 10 L"|M|e|l|e|e |D|a|m|a|g|e |M|o|d|i|f|i|e|r", L"|R|a|n|g|e |M|o|d|i|f|i|e|r", L"|S|c|o|p|e |M|a|g|n|i|f|i|c|a|t|i|o|n |F|a|c|t|o|r", L"|P|r|o|j|e|c|t|i|o|n |F|a|c|t|o|r", - L"|L|a|t|e|r|a|l |R|e|c|o|i|l |M|o|d|i|f|i|e|r", + L"|L|a|t|e|r|a|l |R|e|c|o|i|l |M|o|d|i|f|i|e|r", // 15 L"|V|e|r|t|i|c|a|l |R|e|c|o|i|l |M|o|d|i|f|i|e|r", L"|M|a|x|i|m|u|m |C|o|u|n|t|e|r|-|F|o|r|c|e |M|o|d|i|f|i|e|r", L"|C|o|u|n|t|e|r|-|F|o|r|c|e |A|c|c|u|r|a|c|y |M|o|d|i|f|i|e|r", L"|C|o|u|n|t|e|r|-|F|o|r|c|e |F|r|e|q|u|e|n|c|y |M|o|d|i|f|i|e|r", - L"|T|o|t|a|l |A|P |M|o|d|i|f|i|e|r", + L"|T|o|t|a|l |A|P |M|o|d|i|f|i|e|r", // 20 L"|A|P|-|t|o|-|R|e|a|d|y |M|o|d|i|f|i|e|r", L"|S|i|n|g|l|e|-|a|t|t|a|c|k |A|P |M|o|d|i|f|i|e|r", L"|B|u|r|s|t |A|P |M|o|d|i|f|i|e|r", L"|A|u|t|o|f|i|r|e |A|P |M|o|d|i|f|i|e|r", - L"|R|e|l|o|a|d |A|P |M|o|d|i|f|i|e|r", + L"|R|e|l|o|a|d |A|P |M|o|d|i|f|i|e|r", // 25 L"|M|a|g|a|z|i|n|e |S|i|z|e |M|o|d|i|f|i|e|r", L"|B|u|r|s|t |S|i|z|e |M|o|d|i|f|i|e|r", L"|H|i|d|d|e|n |M|u|z|z|l|e |F|l|a|s|h", L"|L|o|u|d|n|e|s|s |M|o|d|i|f|i|e|r", - L"|I|t|e|m |S|i|z|e |M|o|d|i|f|i|e|r", + L"|I|t|e|m |S|i|z|e |M|o|d|i|f|i|e|r", // 30 L"|R|e|l|i|a|b|i|l|i|t|y |M|o|d|i|f|i|e|r", L"|W|o|o|d|l|a|n|d |C|a|m|o|u|f|l|a|g|e", L"|U|r|b|a|n |C|a|m|o|u|f|l|a|g|e", L"|D|e|s|e|r|t |C|a|m|o|u|f|l|a|g|e", - L"|S|n|o|w |C|a|m|o|u|f|l|a|g|e", + L"|S|n|o|w |C|a|m|o|u|f|l|a|g|e", // 35 L"|S|t|e|a|l|t|h |M|o|d|i|f|i|e|r", L"|H|e|a|r|i|n|g |R|a|n|g|e |M|o|d|i|f|i|e|r", L"|G|e|n|e|r|a|l |V|i|s|i|o|n |R|a|n|g|e |M|o|d|i|f|i|e|r", L"|N|i|g|h|t|-|t|i|m|e |V|i|s|i|o|n |R|a|n|g|e |M|o|d|i|f|i|e|r", - L"|D|a|y|-|t|i|m|e |V|i|s|i|o|n |R|a|n|g|e |M|o|d|i|f|i|e|r", + L"|D|a|y|-|t|i|m|e |V|i|s|i|o|n |R|a|n|g|e |M|o|d|i|f|i|e|r", // 40 L"|B|r|i|g|h|t|-|L|i|g|h|t |V|i|s|i|o|n |R|a|n|g|e |M|o|d|i|f|i|e|r", L"|C|a|v|e |V|i|s|i|o|n |R|a|n|g|e |M|o|d|i|f|i|e|r", L"|T|u|n|n|e|l |V|i|s|i|o|n", L"|M|a|x|i|m|u|m |C|o|u|n|t|e|r|-|F|o|r|c|e", - L"|C|o|u|n|t|e|r|-|F|o|r|c|e |F|r|e|q|u|e|n|c|y", + L"|C|o|u|n|t|e|r|-|F|o|r|c|e |F|r|e|q|u|e|n|c|y", // 45 L"|T|o|-|H|i|t |B|o|n|u|s", L"|A|i|m |B|o|n|u|s", L"|S|i|n|g|l|e |S|h|o|t |T|e|m|p|e|r|a|t|u|r|e", L"|C|o|o|l|d|o|w|n |F|a|c|t|o|r", - L"|J|a|m |T|h|r|e|s|h|o|l|d", + L"|J|a|m |T|h|r|e|s|h|o|l|d", // 50 L"|D|a|m|a|g|e |T|h|r|e|s|h|o|l|d", L"|T|e|m|p|e|r|a|t|u|r|e |M|o|d|i|f|i|e|r", L"|C|o|o|l|d|o|w|n |M|o|d|i|f|i|e|r", L"|J|a|m |T|h|r|e|s|h|o|l|d |M|o|d|i|f|i|e|r", - L"|D|a|m|a|g|e |T|h|r|e|s|h|o|l|d |M|o|d|i|f|i|e|r", + L"|D|a|m|a|g|e |T|h|r|e|s|h|o|l|d |M|o|d|i|f|i|e|r", // 55 L"|P|o|i|s|o|n |P|e|r|c|e|n|t|a|g|e", L"|D|i|r|t |M|o|d|i|f|i|e|r", L"|P|o|i|s|o|n |M|o|d|i|f|i|e|r", L"|F|o|o|d| |P|o|i|n|t|s", - L"|D|r|i|n|k |P|o|i|n|t|s", + L"|D|r|i|n|k |P|o|i|n|t|s", // 60 L"|P|o|r|t|i|o|n |S|i|z|e", L"|M|o|r|a|l|e |M|o|d|i|f|i|e|r", L"|D|e|c|a|y |M|o|d|i|f|i|e|r", L"|B|e|s|t |L|a|s|e|r |R|a|n|g|e", + L"|P|e|r|c|e|n|t |R|e|c|o|i|l |M|o|d|i|f|i|e|r", // 65 }; // Alternate tooltip text for weapon Advanced Stats. Just different wording, nothing spectacular. STR16 szUDBAdvStatsExplanationsTooltipText[]= { - L"\n \nWhen attached to a ranged weapon, this item\nmodifies the weapon's Accuracy value.\n \nIncreased accuracy allows the gun to hit targets\nat longer ranges more often, assuming it is\nalso well-aimed.\n \nScale: -100 to +100.\nHigher is better.", + L"\n \nWhen attached to a ranged weapon, this item\nmodifies the weapon's Accuracy value.\n \nIncreased accuracy allows the gun to hit targets\nat longer ranges more often, assuming it is\nalso well-aimed.\n \nScale: -100 to +100.\nHigher is better.", // 0 L"\n \nThis item modifies the shooter's accuracy\nfor ANY shot with a ranged weapon by the\nlisted amount.\n \nScale: -100 to +100.\nHigher is better.", L"\n \nThis item modifies the shooter's accuracy\nfor ANY shot with a ranged weapon by the\nlisted percentage, based on their original accuracy.\n \nHigher is better.", L"\n \nThis item modifies the accuracy gained from each\nextra aiming level you pay for, when aiming\na ranged weapon, by the\nlisted amount.\n \nScale: -100 to +100.\nHigher is better.", L"\n \nThis item modifies the accuracy gained from each\nextra aiming level you pay for, when aiming\na ranged weapon, by the\nlisted percentage based on the original value.\n \nHigher is better.", - L"\n \nThis item modifies the number of extra aiming\nlevels this gun can take.\n \nReducing the number of allowed aiming levels\nmeans that each level adds proportionally\nmore accuracy to the shot.\nTherefore, the FEWER aiming levels are allowed,\nthe faster you can aim this gun, without losing\naccuracy!\n \nLower is better.", + L"\n \nThis item modifies the number of extra aiming\nlevels this gun can take.\n \nReducing the number of allowed aiming levels\nmeans that each level adds proportionally\nmore accuracy to the shot.\nTherefore, the FEWER aiming levels are allowed,\nthe faster you can aim this gun, without losing\naccuracy!\n \nLower is better.", // 5 L"\n \nThis item modifies the shooter's maximum accuracy\nwhen using ranged weapons, as a percentage\nof their original maximum accuracy.\n \nHigher is better.", L"\n \nWhen attached to a ranged weapon, this item\nmodifies the weapon's Handling difficulty.\n \nBetter handling makes the gun more accurate to fire,\nwith or without extra aiming.\n \nNote that this is based on the gun's original\nGun Handling factor, which is higher for rifles and\nheavy weapons, and lower for pistols and small\nweapons.\n \nLower is better.", L"\n \nThis item modifies the difficulty of\ncompensating for shots beyond a weapon's range.\n \nA high bonus here can increase a weapon's\nnatural Maximum Range by at least a few tiles.\n \nHigher is better.", L"\n \nThis item modifies the difficulty of hitting\na moving target with a ranged weapon.\n \nA high bonus here can help hitting\nfast-moving targets, even at a distance.\n \nHigher is better.", - L"\n \nThis item modifies the damage output of\nyour weapon, by the listed amount.\n \nHigher is better.", + L"\n \nThis item modifies the damage output of\nyour weapon, by the listed amount.\n \nHigher is better.", // 10 L"\n \nThis item modifies the damage output of\nyour melee weapon, by the listed amount.\n \nThis applies only to melee weapons, both sharp\nand blunt.\n \nHigher is better.", L"\n \nWhen attached to a ranged weapon, this item\nmodifies its maximum effective range.\n \nMaximum Range mainly dictates how far a bullet\nfired from the weapon can fly before it begins\ndropping sharply towards the ground.\n \nHigher is better.", L"\n \nWhen attached to a ranged weapon, this item\nprovides extra magnification, making shots at a distance\ncomparatively easier to make.\n \nNote that a high Magnification Factor is detrimental\nwhen used at targets CLOSER than the\noptimal distance.\n \nHigher is better.", L"\n \nWhen attached to a ranged weapon, this item\nprojects a dot on the target, making it easier to hit.\n \nThe projection effect is only useful up to a given\ndistance, beyond which it begins to diminish and\neventually disappears.\n \nHigher is better.", - L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Horizontal Recoil\nby the listed percentage.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", - L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Vertical Recoil\nby the listed percentage.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", + L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Horizontal Recoil\nby the listed value.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", // 15 + L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Vertical Recoil\nby the listed value.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", L"\n \nThis item modifies the shooter's ability to\ncope with recoil during Burst or Autofire volleys.\n \nWhen high, this can help a shooter to control\nguns with powerful recoil, even if the shooter\nhas low Strength.\n \nHigher is better.", L"\n \nThis item modifies the shooter's ability to\naccurately apply counter-force against a gun's\nrecoil, during Burst or Autofire volleys.\n \nA high bonus helps the shooter bring the gun's muzzle\nprecisely towards the target, even at longer ranges,\nmaking volleys more accurate as a result.\n \nHigher is better.", L"\n \nThis item modifies the shooter's ability to\nfrequently reasses how much counter-force they\nneed to apply against a gun's recoil, during Burst\nor Autofire volleys.\n \nHigher frequency makes volleys more accurate on the whole,\nand also makes longer volleys more accurate assuming\nthe shooter can overcome recoil correctly.\n \nHigher is better.", - L"\n \nThis item directly modifies the amount of\nAPs the character gets at the start of each turn.\n \nHigher is better.", + L"\n \nThis item directly modifies the amount of\nAPs the character gets at the start of each turn.\n \nHigher is better.", // 20 L"\n \nWhen attached to a ranged weapon, this item\nmodifiest the AP cost to bring the weapon to\n'Ready' mode.\n \nLower is better.", L"\n \nWhen attached to any weapon, this item\nmodifies the AP cost to make a single attack with\nthat weapon.\n \nNote that for Burst/Auto-capable weapons, the\ncost of using these modes is directly influenced\nby this modifier as well!\n \nLower is better.", L"\n \nWhen attached to a ranged weapon capable of\nBurst-fire mode, this item modifies the AP cost\nof firing a Burst.\n \nLower is better.", L"\n \nWhen attached to a ranged weapon capable of\nAuto-fire mode, this item modifies the AP cost\nof firing an Autofire Volley.\n \nNote that it does NOT modify the extra AP\ncost for adding bullets to the volley, only\nthe initial cost for starting the volley.\n \nLower is better.", - L"\n \nWhen attached to a ranged weapon, this item\nmodifies the AP cost of reloading the weapon.\n \nLower is better.", + L"\n \nWhen attached to a ranged weapon, this item\nmodifies the AP cost of reloading the weapon.\n \nLower is better.", // 25 L"\n \nWhen attached to a ranged weapon, this item\nchanges the size of magazines that can be loaded\ninto the weapon.\n \nThat weapon will now accept larger or smaller\nmagazines of the same caliber.\n \nHigher is better.", L"\n \nWhen attached to a ranged weapon, this item\nmodifies the amount of bullets fired\nby the weapon in Burst mode.\n \nIf the weapon was not initially Burst-Capable, and the\nmodifier is positive, attaching it to the weapon\nwill enable burst-fire mode.\n \nConversely, if the weapon is initially Burst-Capable,\na high-enough negative modifier here can disable\nburst mode completely.\n \nHigher is USUALLY better. Of course, part of the\npoint in Burst Mode is to conserve bullets...", L"\n \nWhen attached to a ranged weapon, this item\nwill hide the weapon's muzzle flash.\n \nThis makes sure that enemies cannot spot the shooter\nif he is firing while hidden, and is especially\nimportant at night.", L"\n \nWhen attached to a weapon, this item modifies\nthe range at which firing the weapon can be\nheard by both enemies and mercs.\n \nIf this modifier drops the weapon's Loudness value\nto 0, the weapon becomes completely silent.\n \nLower is better.", - L"\n \nThis item modifies the size of any item it\nis attached to.\n \nSize is important when using the New Inventory system,\nwhere pockets only accept items of specific sizes and shapes.\n \nIncreasing an item's size makes it too big for some pockets\nit used to fit into.\n \nConversely, making an item smaller means it will fit into\nmore pockets, and pockets will be able to contain\nmore of it.\n \nLower is generall better.", + L"\n \nThis item modifies the size of any item it\nis attached to.\n \nSize is important when using the New Inventory system,\nwhere pockets only accept items of specific sizes and shapes.\n \nIncreasing an item's size makes it too big for some pockets\nit used to fit into.\n \nConversely, making an item smaller means it will fit into\nmore pockets, and pockets will be able to contain\nmore of it.\n \nLower is generall better.", // 30 L"\n \nWhen attached to any weapon, this item modifies\nthat weapon's Reliability value.\n \nIf positive, the weapon's condition will deteriorate\nslower when used in combat. Otherwise, the\nweapon deteriorates faster.\n \nHigher is better.", L"\n \nWhen this item is worn, or attached to a worn\nitem, it modifies the wearer's camouflage in\nwoodland backgrounds.\n \nTo make good on a positive Woodland Camo modifier, the\nwearer needs to stay close to trees or tall grass.\n \nHigher is better.", L"\n \nWhen this item is worn, or attached to a worn\nitem, it modifies the wearer's camouflage in\nurban backgrounds.\n \nTo make good on a positive Urban Camo modifier, the\nwearer needs to stay close to asphalt or concrete.\n \nHigher is better.", L"\n \nWhen this item is worn, or attached to a worn\nitem, it modifies the wearer's camouflage in\ndesert backgrounds.\n \nTo make good on a positive Desert Camo modifier, the\nwearer needs to stay close to sand, gravel, or\ndesert vegetation.\n \nHigher is better.", - L"\n \nWhen this item is worn, or attached to a worn\nitem, it modifies the wearer's camouflage in\nsnowy backgrounds.\n \nTo make good on a positive Snow Camo modifier, the\nwearer needs to stay close to snowy tiles.\n \nHigher is better.", + L"\n \nWhen this item is worn, or attached to a worn\nitem, it modifies the wearer's camouflage in\nsnowy backgrounds.\n \nTo make good on a positive Snow Camo modifier, the\nwearer needs to stay close to snowy tiles.\n \nHigher is better.", // 35 L"\n \nWhen this item is worn, or attached to a worn\nitem, it modifies the wearer's stealth ability by\nmaking it more difficult to HEAR the character moving\nwhile in Sneaking mode.\n \nNote that this does NOT change a character's visibility,\nonly the amount of noise they make while sneaking.\n \nHigher is better.", L"\n \nWhen this item is worn, or attached to a worn\nitem, it modifies the wearer's Hearing Range by the\nlisted percent.\n \nA positive bonus makes it possible to hear noises\nfrom a greater distance.\n \nConversely, a negative modifier impairs the wearer's hearing.\n \nHigher is better.", L"\n \nWhen this item is worn, or attached to a worn\nitem, it modifies the wearer's Vision Range by the\nlisted percent.\n \nThis General modifier works in all conditions.\n \nHigher is better.", L"\n \nWhen this item is worn, or attached to a worn\nitem, it modifies the wearer's Vision Range by the\nlisted percent.\n \nThis Night-Vision modifier works only when light\nlevels are sufficiently low.\n \nHigher is better.", - L"\n \nWhen this item is worn, or attached to a worn\nitem, it modifies the wearer's Vision Range by the\nlisted percent.\n \nThis Day-Vision modifier works only when light\nlevels are average or higher.\n \nHigher is better.", + L"\n \nWhen this item is worn, or attached to a worn\nitem, it modifies the wearer's Vision Range by the\nlisted percent.\n \nThis Day-Vision modifier works only when light\nlevels are average or higher.\n \nHigher is better.", // 40 L"\n \nWhen this item is worn, or attached to a worn\nitem, it modifies the wearer's Vision Range by the\nlisted percent.\n \nThis Bright-Vision modifier works only when light\nlevels are very high, for example when looking\ninto tiles lit by Break-Lights or at high noon.\n \nHigher is better.", L"\n \nWhen this item is worn, or attached to a worn\nitem, it modifies the wearer's Vision Range by the\nlisted percent.\n \nThis Cave-Vision modifier works only in the dark\nand only underground.\n \nHigher is better.", L"\n \nWhen this item is worn, or attached to a worn\nitem, it changes the wearer's field-of-view.\n \nNarrowing the field of view shortens sightrange to\neither side.\n \nLower is better.", L"\n \nThis is the shooter's ability to\ncope with recoil during Burst or Autofire volleys.\n \n\n \nHigher is better.", - L"\n \nThis is the shooter's ability to\nfrequently reasses how much counter-force they\nneed to apply against a gun's recoil, during Burst\nor Autofire volleys.\n \nLower frequency makes volleys more accurate on the whole,\nand also makes longer volleys more accurate assuming\nthe shooter can overcome recoil correctly.\n \nLower is better.", + L"\n \nThis is the shooter's ability to\nfrequently reasses how much counter-force they\nneed to apply against a gun's recoil, during Burst\nor Autofire volleys.\n \nLower frequency makes volleys more accurate on the whole,\nand also makes longer volleys more accurate assuming\nthe shooter can overcome recoil correctly.\n \nLower is better.", // 45 L"\n \nWhen attached to a ranged weapon, this item\nmodifies the weapon's CTH value.\n \nIncreased CTH allows the gun to hit targets\nmore often, assuming it is also well-aimed.\n \nHigher is better.", L"\n \nWhen attached to a ranged weapon, this item\nmodifies the weapon's Aim Bonus.\n \nIncreased Aim Bonus allows the gun to hit\ntargets at longer ranges more often, assuming\nit is also well-aimed.\n \nHigher is better.", L"\n \nA single shot causes this much heat.\nAmmunition types and attachments can\naffect this value.\n \nLower is better.", L"\n \nEvery turn, the temperature is lowered\nby this amount.\n \nHigher is better.", - L"\n \nIf an item's temperature is above this,\nit will jam more frequently.\n \nHigher is better.", + L"\n \nIf an item's temperature is above this,\nit will jam more frequently.\n \nHigher is better.", // 50 L"\n \nIf an item's temperature is above this,\nit will be damaged more easily.\n \nHigher is better.", L"\n \nA gun's single shot temperature is\nincreased by this percentage.\n \nLower is better.", L"\n \nA gun's cooldown factor is\nincreased by this percentage.\n \nHigher is better.", L"\n \nA gun's jam threshold is\nincreased by this percentage.\n \nHigher is better.", - L"\n \nA gun's damage threshold is\nincreased by this percentage.\n \nHigher is better.", + L"\n \nA gun's damage threshold is\nincreased by this percentage.\n \nHigher is better.", // 55 L"\n \nThis is the percentage of damage dealt\nby this item that will be poisonous.\n\nUsefulness depends on wether enemy\nhas poison resistance or absorption.", L"\n \nA single shot causes this much dirt.\nAmmunition types and attachments can\naffect this value.\n \nLower is better.", L"\n \nWhen this item is eaten\nit causes that much poison.\n \nLower is better.", L"\n \nAmount of energy in kcal.\n \nHigher is better.", - L"\n \nAmount of water in liter.\n \nHigher is better.", + L"\n \nAmount of water in liter.\n \nHigher is better.", // 60 L"\n \nThe percentage of the item\nthat will be eaten at once.\n \nLower is better.", L"\n \nMorale is adjusted by this amount.\n \nHigher is better.", L"\n \nThis item becomes stale over time.\nIf more then 50% is molded it becomes poisoneous.\nThis is the rate at which mold is generated.\nLower is better.", + L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Recoil by the listed percentage.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", }; STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]= { - L"\n \nThis weapon's accuracy is being modified by\nan ammo, attachment, or built-in attributes.\n \nIncreased accuracy allows the gun to hit targets\nat longer ranges more often, assuming it is\nalso well-aimed.\n \nScale: -100 to +100.\nHigher is better.", + L"\n \nThis weapon's accuracy is being modified by\nan ammo, attachment, or built-in attributes.\n \nIncreased accuracy allows the gun to hit targets\nat longer ranges more often, assuming it is\nalso well-aimed.\n \nScale: -100 to +100.\nHigher is better.", // 0 L"\n \nThis weapon modifies its shooter's accuracy\nwith ANY shot by the listed amount.\n \nScale: -100 to +100.\nHigher is better.", L"\n \nThis weapon modifies its shooter's accuracy\nwith ANY shot by the listed percentage\nbased on the shooter's original accuracy.\n \nHigher is better.", L"\n \nThis weapon modifies the amount of accuracy\ngained from each extra aiming level you\npay for by the listed amount.\n \nScale: -100 to +100.\nHigher is better.", L"\n \nThis weapon modifies the amount of accuracy\ngained from each extra aiming level you\npay for by the listed percentage, based\non the shooter's original accuracy.\n \nHigher is better.", - L"\n \nThe number of Extra Aiming Levels allowed\nfor this gun has been modified by its ammo,\nattachments, or built-in attributes.\nIf the number of levels is being reduced, the gun is\nfaster to aim without being any less accurate.\n \nConversely, if the number of levels is increased,\nthe gun becomes slower to aim without being\nmore accurate.\n \nLower is better.", + L"\n \nThe number of Extra Aiming Levels allowed\nfor this gun has been modified by its ammo,\nattachments, or built-in attributes.\nIf the number of levels is being reduced, the gun is\nfaster to aim without being any less accurate.\n \nConversely, if the number of levels is increased,\nthe gun becomes slower to aim without being\nmore accurate.\n \nLower is better.", // 5 L"\n \nThis weapon modifies the shooter's maximum\naccuracy, as a percentage of the shooter's original\nmaximum accuracy.\n \nHigher is better.", L"\n \nThis weapon's attachments or inherent abilities\nmodify the weapon's Handling difficulty.\n \nBetter handling makes the gun more accurate to fire,\nwith or without extra aiming.\n \nNote that this is based on the gun's original\nGun Handling factor, which is higher for rifles and\nheavy weapons, and lower for pistols and small\nweapons.\n \nLower is better.", L"\n \nThis weapon's ability to compensate for shots\nbeyond its maximum range is being modified by\nattachments or the weapon's inherent abilities.\n \nA high bonus here can increase a weapon's\nnatural Maximum Range by at least a few tiles.\n \nHigher is better.", L"\n \nThis weapon's ability to hit moving targets\nat a distance is being modified by attachments\nor the weapon's inherent abilities.\n \nA high bonus here can help hitting\nfast-moving targets, even at a distance.\n \nHigher is better.", - L"\n \nThis weapon's damage output is being modified\nby its ammo, attachments, or inherent abilities.\n \nHigher is better.", + L"\n \nThis weapon's damage output is being modified\nby its ammo, attachments, or inherent abilities.\n \nHigher is better.", // 10 L"\n \nThis weapon's melee-combat damage output is being\nmodified by its ammo, attachments, or inherent abilities.\n \nThis applies only to melee weapons, both sharp\nand blunt.\n \nHigher is better.", L"\n \nThis weapon's maximum range has been increased\nor decreased thanks to its ammo, attachments,\nor inherent abilities.\n \nMaximum Range mainly dictates how far a bullet\nfired from the weapon can fly before it begins\ndropping sharply towards the ground.\n \nHigher is better.", L"\n \nThis weapon is equipped with optical magnification,\nmaking shots at a distance comparatively easier to make.\n \nNote that a high Magnification Factor is detrimental\nwhen used at targets CLOSER than the\noptimal distance.\n \nHigher is better.", L"\n \nThis weapon is equipped with a projection device\n(possibly a laser), which projects a dot on\nthe target, making it easier to hit.\n \nThe projection effect is only useful up to a given\ndistance, beyond which it begins to diminish and\neventually disappears.\n \nHigher is better.", - L"\n \nThis weapon's horizontal recoil strength is being\nmodified by its ammo, attachments, or inherent\nabilities.\n \nThis has no effect if the weapon lacks both\nBurst and Auto-Fire modes.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", + L"\n \nThis weapon's horizontal recoil strength is being\nmodified by its ammo, attachments, or inherent\nabilities.\n \nThis has no effect if the weapon lacks both\nBurst and Auto-Fire modes.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", // 15 L"\n \nThis weapon's vertical recoil strength is being\nmodified by its ammo, attachments, or inherent\nabilities.\n \nThis has no effect if the weapon lacks both\nBurst and Auto-Fire modes.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", L"\n \nThis weapon modifies the shooter's ability to\ncope with recoil during Burst or Autofire volleys,\ndue to its attachments, ammo, or inherent abilities.\n \nWhen high, this can help a shooter to control\nguns with powerful recoil, even if the shooter\nhas low Strength.\n \nHigher is better.", L"\n \nThis weapon modifies the shooter's ability to\naccurately apply counter-force against its\nrecoil, due to its attachments, ammo, or inherent abilities.\n \nNaturally, this has no effect if the weapon lacks\nboth Burst and Auto-Fire modes.\n \nA high bonus helps the shooter bring the gun's muzzle\nprecisely towards the target, even at longer ranges,\nmaking volleys more accurate as a result.\n \nHigher is better.", L"\n \nThis weapon modifies the shooter's ability to\nfrequently reasses how much counter-force they\nneed to apply against a gun's recoil, due to its\nattachments, ammo, or inherent abilities.\n \nNaturally, this has no effect if the weapon lacks\nboth Burst and Auto-Fire modes.\n \nHigher frequency makes volleys more accurate on the whole,\nand also makes longer volleys more accurate assuming\nthe shooter can overcome recoil correctly.\n \nHigher is better.", - L"\n \nWhen held in hand, this weapon modifies the amount of\nAPs its user gets at the start of each turn.\n \nHigher is better.", + L"\n \nWhen held in hand, this weapon modifies the amount of\nAPs its user gets at the start of each turn.\n \nHigher is better.", // 20 L"\n \nDue to its attachments, ammo or inherent abilities,\nthe AP cost to bring this weapon to 'Ready' mode has\nbeen modified.\n \nLower is better.", L"\n \nDue to its attachments, ammo or inherent abilities,\nthe AP cost to make a single attack with this\nweapon has been modified.\n \nNote that for Burst/Auto-capable weapons, the\ncost of using these modes is directly influenced\nby this modifier as well!\n \nLower is better.", L"\n \nDue to its attachments, ammo or inherent abilities,\nthe AP cost to fire a Burst with this weapon has\nbeen modified.\n \nNaturally, this has no effect if the weapon is not\ncapable of Burst fire.\n \nLower is better.", L"\n \nDue to its attachments, ammo or inherent abilities,\nthe AP cost to fire an Autofire Volley with this weapon\nhas been modified.\n \nNaturally, this has no effect if the weapon is not\ncapable of Auto Fire.\n \nNote that it does NOT modify the extra AP\ncost for adding bullets to the volley, only\nthe initial cost for starting the volley.\n \nLower is better.", - L"\n \nDue to its attachments, ammo or inherent abilities,\nthe AP cost of reloading this weapon has been modified.\n \nLower is better.", + L"\n \nDue to its attachments, ammo or inherent abilities,\nthe AP cost of reloading this weapon has been modified.\n \nLower is better.", // 25 L"\n \nDue to its attachments, ammo or inherent abilities,\nthe size of magazines that can be loaded into this\nweapon has been modified.\n \nThe weapon will now accept larger or smaller\nmagazines of the same caliber.\n \nHigher is better.", L"\n \nDue to its attachments, ammo or inherent abilities,\nthe amount of bullets fired by this weapon in Burst mode\nhas been modified.\n \nIf the weapon was not initially Burst-Capable, and the\nmodifier is positive, then this is what\ngives the weapon its burst-fire capability.\n \nConversely, if the weapon was initially Burst-Capable,\na high-enough negative modifier here may have\ndisabled burst mode entirely for this weapon.\n \nHigher is USUALLY better. Of course, part of the\npoint in Burst Mode is to conserve bullets...", L"\n \nDue to its attachments, ammo or inherent abilities,\nthis weapon produces no muzzle flash.\n \nThis makes sure that enemies cannot spot the shooter\nif he is firing while hidden, and is especially\nimportant at night.", L"\n \nDue to its attachments, ammo or inherent abilities,\nthis weapon's loudness has been modified. The distance\nat which enemies and mercs can hear the weapon being\nused has subsequently changed.\n \nIf this modifier drops the weapon's Loudness value\nto 0, the weapon becomes completely silent.\n \nLower is better.", - L"\n \nDue to its attachments, ammo or inherent abilities,\nthis weapon's size category has changed.\n \nSize is important when using the New Inventory system,\nwhere pockets only accept items of specific sizes and shapes.\n \nIncreasing an item's size makes it too big for some pockets\nit used to fit into.\n \nConversely, making an item smaller means it will fit into\nmore pockets, and pockets will be able to contain\nmore of it.\n \nLower is generall better.", + L"\n \nDue to its attachments, ammo or inherent abilities,\nthis weapon's size category has changed.\n \nSize is important when using the New Inventory system,\nwhere pockets only accept items of specific sizes and shapes.\n \nIncreasing an item's size makes it too big for some pockets\nit used to fit into.\n \nConversely, making an item smaller means it will fit into\nmore pockets, and pockets will be able to contain\nmore of it.\n \nLower is generall better.", // 30 L"\n \nDue to its attachments, ammo or inherent abilities,\nthis weapon's reliability has been modified.\n \nIf positive, the weapon's condition will deteriorate\nslower when used in combat. Otherwise, the\nweapon deteriorates faster.\n \nHigher is better.", L"\n \nWhen this weapon is held in hand, it modifies the\nsoldier's camouflage in woodland backgrounds.\n \nTo make good on a positive Woodland Camo modifier, the\nwearer needs to stay close to trees or tall grass.\n \nHigher is better.", L"\n \nWhen this weapon is held in hand, it modifies the\nsoldier's camouflage in urban backgrounds.\n \nTo make good on a positive Urban Camo modifier, the\nwearer needs to stay close to asphalt or concrete.\n \nHigher is better.", L"\n \nWhen this weapon is held in hand, it modifies the\nsoldier's camouflage in desert backgrounds.\n \nTo make good on a positive Desert Camo modifier, the\nwearer needs to stay close to sand, gravel, or\ndesert vegetation.\n \nHigher is better.", - L"\n \nWhen this weapon is held in hand, it modifies the\nsoldier's camouflage in snowy backgrounds.\n \nTo make good on a positive Snow Camo modifier, the\nwearer needs to stay close to snowy tiles.\n \nHigher is better.", + L"\n \nWhen this weapon is held in hand, it modifies the\nsoldier's camouflage in snowy backgrounds.\n \nTo make good on a positive Snow Camo modifier, the\nwearer needs to stay close to snowy tiles.\n \nHigher is better.", // 35 L"\n \nWhen this weapon is held in hand, it modifies the\nsoldier's stealth ability by making it\nmore or less difficult to HEAR the character moving\nwhile in Sneaking mode.\n \nNote that this does NOT change a character's visibility,\nonly the amount of noise they make while sneaking.\n \nHigher is better.", L"\n \nWhen this weapon is held in hand, it modifies the\nsoldier's Hearing Range by the listed percent.\n \nA positive bonus makes it possible to hear noises\nfrom a greater distance.\n \nConversely, a negative modifier impairs the wearer's hearing.\n \nHigher is better.", L"\n \nWhen this weapon is raised to the shooting position,\nit modifies the wearer's Vision Range by the\nlisted percent, thanks to attachments or\ninherent properties of the weapon.\n \nThis General modifier works in all conditions.\n \nHigher is better.", L"\n \nWhen this weapon is raised to the shooting position,\nit modifies the wearer's Vision Range by the\nlisted percent, thanks to attachments or\ninherent properties of the weapon.\n \nThis Night-Vision modifier works only when light\nlevels are sufficiently low.\n \nHigher is better.", - L"\n \nWhen this weapon is raised to the shooting position,\nit modifies the wearer's Vision Range by the\nlisted percent, thanks to attachments or\ninherent properties of the weapon.\n \nThis Day-Vision modifier works only when light\nlevels are average or higher.\n \nHigher is better.", + L"\n \nWhen this weapon is raised to the shooting position,\nit modifies the wearer's Vision Range by the\nlisted percent, thanks to attachments or\ninherent properties of the weapon.\n \nThis Day-Vision modifier works only when light\nlevels are average or higher.\n \nHigher is better.", // 40 L"\n \nWhen this weapon is raised to the shooting position,\nit modifies the wearer's Vision Range by the\nlisted percent, thanks to attachments or\ninherent properties of the weapon.\n \nThis Bright-Vision modifier works only when light\nlevels are very high, for example when looking\ninto tiles lit by Break-Lights or at high noon.\n \nHigher is better.", L"\n \nWhen this weapon is raised to the shooting position,\nit modifies the wearer's Vision Range by the\nlisted percent, thanks to attachments or\ninherent properties of the weapon.\n \nThis Cave-Vision modifier works only in the dark\nand only underground.\n \nHigher is better.", L"\n \nWhen this weapon is raised to the shooting position,\nit changes the wearer's field-of-view.\n \nNarrowing the field of view shortens sightrange to\neither side.\n \nHigher is better.", L"\n \nThis is the shooter's ability to\ncope with recoil during Burst or Autofire volleys.\n \nHigher is better.", - L"\n \nThis is the shooter's ability to\nfrequently reasses how much counter-force they\nneed to apply against a gun's recoil.\n \nNaturally, this has no effect if the weapon lacks\nboth Burst and Auto-Fire modes.\n \nLower frequency makes volleys more accurate on the whole,\nand also makes longer volleys more accurate assuming\nthe shooter can overcome recoil correctly.\n \nLower is better.", + L"\n \nThis is the shooter's ability to\nfrequently reasses how much counter-force they\nneed to apply against a gun's recoil.\n \nNaturally, this has no effect if the weapon lacks\nboth Burst and Auto-Fire modes.\n \nLower frequency makes volleys more accurate on the whole,\nand also makes longer volleys more accurate assuming\nthe shooter can overcome recoil correctly.\n \nLower is better.", // 45 L"\n \nThis weapon's to-hit is being modified by\nan ammo, attachment, or built-in attributes.\n \nIncreased To-Hit allows the gun to hit targets\nmore often, assuming it is also well-aimed.\n \nHigher is better.", L"\n \nThis weapon's Aim Bonus is being modified by\nan ammo, attachment, or built-in attributes.\n \nIncreased Aim Bonus allows the gun to hit\ntargets at longer ranges more often, assuming\nit is also well-aimed.\n \nHigher is better.", L"\n \nA single shot causes this much heat.\nThe type of ammunition can affect this value.\n \nLower is better.", L"\n \nEvery turn, the temperature is lowered\nby this amount.\nWeapon attachments can affect this.\n \nHigher is better.", - L"\n \nIf a gun's temperature is above this,\nit will jam more frequently.", + L"\n \nIf a gun's temperature is above this,\nit will jam more frequently.", // 50 L"\n \nIf a gun's temperature is above this,\nit will be damaged more easily.", + L"\n \nThis weapon's recoil strength is being\nmodified by this percentage value by its ammo,\nattachments, or inherent abilities.\n \nThis has no effect if the weapon lacks both\nBurst and Auto-Fire modes.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", }; // HEADROCK HAM 4: Text for the new CTH indicator. diff --git a/Utils/_FrenchText.cpp b/Utils/_FrenchText.cpp index 3d4f6987f..515debcbc 100644 --- a/Utils/_FrenchText.cpp +++ b/Utils/_FrenchText.cpp @@ -7492,6 +7492,7 @@ STR16 szUDBAdvStatsTooltipText[]= L"|M|o|r|a|l|e |M|o|d|i|f|i|e|r",//TODO.translate L"|D|e|c|a|y |M|o|d|i|f|i|e|r",//TODO.translate L"|B|e|s|t |L|a|s|e|r |R|a|n|g|e",//TODO.translate + L"|P|e|r|c|e|n|t |R|e|c|o|i|l |M|o|d|i|f|i|e|r", // 65 // TODO.Translate }; // Alternate tooltip text for weapon Advanced Stats. Just different wording, nothing spectacular. @@ -7561,6 +7562,7 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]= L"\n \nThe percentage of the item\nthat will be eaten at once.\n \nLower is better.", // TODO.TRANSLATE L"\n \nMorale is adjusted by this amount.\n \nHigher is better.", // TODO.TRANSLATE L"\n \nThis item becomes stale over time.\nIf more then 50% is molded it becomes poisoneous.\nThis is the rate at which mold is generated.\nLower is better.", // TODO.TRANSLATE + L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Recoil by the listed percentage.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", // TODO.TRANSLATE }; STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]= @@ -7617,6 +7619,7 @@ STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]= L"\n \nÀ chaque tour, la température de l'arme diminue\nde cette valeur.\nLes accessoires des armes peuvent influer\nsur cette valeur.\n \nValeur élevée recommandée.", L"\n \nSi la température d'une arme dépasse cette valeur,\nelle s'enrayera plus souvent.", L"\n \nSi la température d'une arme dépasse cette valeur,\nelle se détériorera plus facilement.", + L"\n \nThis weapon's recoil strength is being\nmodified by this percentage value by its ammo,\nattachments, or inherent abilities.\n \nThis has no effect if the weapon lacks both\nBurst and Auto-Fire modes.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", // TODO.Translate }; // HEADROCK HAM 4: Text for the new CTH indicator. diff --git a/Utils/_GermanText.cpp b/Utils/_GermanText.cpp index b07dd7bb8..6df45d104 100644 --- a/Utils/_GermanText.cpp +++ b/Utils/_GermanText.cpp @@ -7319,6 +7319,7 @@ STR16 szUDBAdvStatsTooltipText[]= L"|M|o|r|a|l |M|o|d|i|f|i|k|a|t|o|r", L"|S|c|h|i|m|m|e|l |R|a|t|e", L"|B|e|s|t|e |L|a|s|e|r |R|e|i|c|h|w|e|i|t|e", + L"|P|r|o|z|e|n|t|u|a|l|e|r |R|ü|c|k|s|t|o|ß |M|o|d|i|f|i|k|a|t|o|r", // 65 }; // Alternate tooltip text for weapon Advanced Stats. Just different wording, nothing spectacular. @@ -7339,8 +7340,8 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]= L"\n \nWenn befestigt an einer Fernwaffe verändert\ndieser Gegenstand die größte effektive Reichweite.\n \nDie größte effektive Reichweite bestimmt,\nwie weit eine Kugel fliegt, bevor sie schnell in Richtung Boden fällt.\n \nHöher ist besser.", L"\n \nWenn befestigt an einer Fernwaffe bietet\ndieser Gegenstand eine zusätzlich Zielvergrößerung an,\nwas Schüsse auf große Entfernung vergleichsweise einfacher macht.\n \nEin hoher Vergrößerungsfaktor wirkt sich allerdings nachteilig aus\nbei Zielen, die näher als die optimale Entfernung sind.\n\nHöher ist besser.", L"\n \nWenn befestigt an einer Fernwaffe blendet\ndieser Gegenstand einen Punkt über das Ziel ein,\nwas das Treffen deutlich vereinfacht.\n\nDieser Effekt ist nur bis zu einer bestimmten Entfernung nützlich, darüber hinaus vermindert und schließlich verschwindet der Effekt.\n \nHöher ist besser.", - L"\n \nWenn befestigt an Feuerstoß oder Dauerfeuer fähigen Fernwaffen\nverändert dieser Gegenstand den horizontalen Rückstoß um den genannten Prozentsatz.\n\n Ein geringerer Rückstoß macht es einfacher, die Waffe im Dauerfeuer auf das Ziel gerichtet zu halten.\n \nNiedriger ist besser.", - L"\n \nWenn befestigt an Feuerstoß oder Dauerfeuer fähigen Fernwaffen\nverändert dieser Gegenstand den vertikalen Rückstoß um den genannten Prozentsatz.\n\n Ein geringerer Rückstoß macht es einfacher, die Waffe im Dauerfeuer auf das Ziel gerichtet zu halten.\n \nNiedriger ist besser.", + L"\n \nWenn befestigt an Feuerstoß oder Dauerfeuer fähigen Fernwaffen\nverändert dieser Gegenstand den horizontalen Rückstoß um den genannten Wert.\n\n Ein geringerer Rückstoß macht es einfacher, die Waffe im Dauerfeuer auf das Ziel gerichtet zu halten.\n \nNiedriger ist besser.", + L"\n \nWenn befestigt an Feuerstoß oder Dauerfeuer fähigen Fernwaffen\nverändert dieser Gegenstand den vertikalen Rückstoß um den genannten Wert.\n\n Ein geringerer Rückstoß macht es einfacher, die Waffe im Dauerfeuer auf das Ziel gerichtet zu halten.\n \nNiedriger ist besser.", L"\n \nDieser Gegenstand verändert die Fähigkeit des Schützen,\nseine Waffe im Feuerstoß oder Dauerfeuer unter Kontrolle zu behalten.\n\n Ein hoher Wert kann auch körperlich schwachen Schützen helfen, Waffen mit starkem Rückstoß zu kontrollieren. \n \nHöher ist besser.", L"\n \nDieser Gegenstand verändert die Fähigkeit des Schützen,\ndem Rückstoß der Waffe im Feuerstoß oder Dauerfeuer wirksam entgegenzuwirken.\n\n Ein hoher Wert erlaubt dem Schützen,\n die Waffe besser auf das Ziel auszurichten,\n was im Ergebnis die Genauigkeit von Feuerstößen erhöht. \n \nHöher ist besser.", L"\n \nDieser Gegenstand verändert die Fähigkeit des Schützen,\ndie Kraft, welche er benötigt, um dem Rückstoß im Feuerstoß oder Dauerfeuer entgegenzuwirken, öfter anzupassen.\n\n Ein höherer Wert macht Feuerstöße generell genauer,\n insbesondere lange Feuerstöße,\nvorausgesetzt, der Schütze kann dem Rückstoß wirksam entgegenwirken. \n \nHöher ist besser.", @@ -7388,6 +7389,7 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]= L"\n \nProzentsatz des Gegenstandes der mit einem\n Bissen aufgebraucht wird.\n \nWeniger ist besser.", L"\n \nDie Moral wird um diese Zahl modifiziert.\n \nHöher ist besser.", L"\n \nDer Gegenstand wird mit der Zeit schlecht.\nIst mehr als 50% verschimmelt wird er giftig.\nDies ist die Rate in der Schimmel entsteht.\n \nNiedriger ist besser.", + L"\n \nWenn befestigt an Feuerstoß oder Dauerfeuer fähigen Fernwaffen\nverändert dieser Gegenstand den Rückstoß um den genannten Prozentwert.\n\n Ein geringerer Rückstoß macht es einfacher, die Waffe im Dauerfeuer auf das Ziel gerichtet zu halten.\n \nNiedriger ist besser.", }; STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]= @@ -7444,6 +7446,7 @@ STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]= L"\n \nIn jeder Runde kühlt die Temperatur um diesen Wert ab.\nAnbauten an der Waffe können diesen Wert beinflussen.\n \nHöher ist besser.", L"\n \nWenn die Temperatur der Waffe über diese Wert steigt,\nkann die Waffe leicht blockieren.", L"\n \nWenn die Temperatur der Waffe über diesen Wert steigt,\nkann die Waffe Schaden davon tragen.", + L"\n \nDer horizontale Rückstoß wurde prozentual geändert\ndurch Munition, Erweiterungen oder inhärenter\nFähigkeiten.\n \nDies hat keine Wirkung bei Einzelschüssen!\n \nEin reduzierter Rückstoß erleichtert es bei einer Salve die\nMündung auf das Ziel zu richten!\n \nNiedriger ist besser.", }; // HEADROCK HAM 4: Text for the new CTH indicator. diff --git a/Utils/_ItalianText.cpp b/Utils/_ItalianText.cpp index a0730b5ec..0b5a27186 100644 --- a/Utils/_ItalianText.cpp +++ b/Utils/_ItalianText.cpp @@ -7493,6 +7493,7 @@ STR16 szUDBAdvStatsTooltipText[]= L"|M|o|r|a|l|e |M|o|d|i|f|i|e|r",//TODO.translate L"|D|e|c|a|y |M|o|d|i|f|i|e|r",//TODO.translate L"|B|e|s|t |L|a|s|e|r |R|a|n|g|e",//TODO.translate + L"|P|e|r|c|e|n|t |R|e|c|o|i|l |M|o|d|i|f|i|e|r", // 65 }; // Alternate tooltip text for weapon Advanced Stats. Just different wording, nothing spectacular. @@ -7513,8 +7514,8 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]= L"\n \nWhen attached to a ranged weapon, this item\nmodifies its maximum effective range.\n \nMaximum Range mainly dictates how far a bullet\nfired from the weapon can fly before it begins\ndropping sharply towards the ground.\n \nHigher is better.", L"\n \nWhen attached to a ranged weapon, this item\nprovides extra magnification, making shots at a distance\ncomparatively easier to make.\n \nNote that a high Magnification Factor is detrimental\nwhen used at targets CLOSER than the\noptimal distance.\n \nHigher is better.", L"\n \nWhen attached to a ranged weapon, this item\nprojects a dot on the target, making it easier to hit.\n \nThe projection effect is only useful up to a given\ndistance, beyond which it begins to diminish and\neventually disappears.\n \nHigher is better.", - L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Horizontal Recoil\nby the listed percentage.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", - L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Vertical Recoil\nby the listed percentage.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", + L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Horizontal Recoil\nby the listed value.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", + L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Vertical Recoil\nby the listed value.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", L"\n \nThis item modifies the shooter's ability to\ncope with recoil during Burst or Autofire volleys.\n \nWhen high, this can help a shooter to control\nguns with powerful recoil, even if the shooter\nhas low Strength.\n \nHigher is better.", L"\n \nThis item modifies the shooter's ability to\naccurately apply counter-force against a gun's\nrecoil, during Burst or Autofire volleys.\n \nA high bonus helps the shooter bring the gun's muzzle\nprecisely towards the target, even at longer ranges,\nmaking volleys more accurate as a result.\n \nHigher is better.", L"\n \nThis item modifies the shooter's ability to\nfrequently reasses how much counter-force they\nneed to apply against a gun's recoil, during Burst\nor Autofire volleys.\n \nHigher frequency makes volleys more accurate on the whole,\nand also makes longer volleys more accurate assuming\nthe shooter can overcome recoil correctly.\n \nHigher is better.", @@ -7562,6 +7563,7 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]= L"\n \nThe percentage of the item\nthat will be eaten at once.\n \nLower is better.", // TODO.TRANSLATE L"\n \nMorale is adjusted by this amount.\n \nHigher is better.", // TODO.TRANSLATE L"\n \nThis item becomes stale over time.\nIf more then 50% is molded it becomes poisoneous.\nThis is the rate at which mold is generated.\nLower is better.", // TODO.TRANSLATE + L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Recoil by the listed percentage.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", }; STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]= @@ -7618,6 +7620,7 @@ STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]= L"\n \nEvery turn, the temperature is lowered\nby this amount.\nWeapon attachments can affect this.\n \nHigher is better.", L"\n \nIf a gun's temperature is above this,\nit will jam more frequently.", L"\n \nIf a gun's temperature is above this,\nit will be damaged more easily.", + L"\n \nThis weapon's recoil strength is being\nmodified by this percentage value by its ammo,\nattachments, or inherent abilities.\n \nThis has no effect if the weapon lacks both\nBurst and Auto-Fire modes.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", }; // HEADROCK HAM 4: Text for the new CTH indicator. diff --git a/Utils/_PolishText.cpp b/Utils/_PolishText.cpp index bc8bf17e5..c5dbfe279 100644 --- a/Utils/_PolishText.cpp +++ b/Utils/_PolishText.cpp @@ -7516,6 +7516,7 @@ STR16 szUDBAdvStatsTooltipText[]= L"|M|o|r|a|l|e |M|o|d|i|f|i|e|r",//TODO.translate L"|D|e|c|a|y |M|o|d|i|f|i|e|r",//TODO.translate L"|B|e|s|t |L|a|s|e|r |R|a|n|g|e",//TODO.translate + L"|P|e|r|c|e|n|t |R|e|c|o|i|l |M|o|d|i|f|i|e|r", // 65 }; // Alternate tooltip text for weapon Advanced Stats. Just different wording, nothing spectacular. @@ -7536,8 +7537,8 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]= L"\n \nWhen attached to a ranged weapon, this item\nmodifies its maximum effective range.\n \nMaximum Range mainly dictates how far a bullet\nfired from the weapon can fly before it begins\ndropping sharply towards the ground.\n \nHigher is better.", L"\n \nWhen attached to a ranged weapon, this item\nprovides extra magnification, making shots at a distance\ncomparatively easier to make.\n \nNote that a high Magnification Factor is detrimental\nwhen used at targets CLOSER than the\noptimal distance.\n \nHigher is better.", L"\n \nWhen attached to a ranged weapon, this item\nprojects a dot on the target, making it easier to hit.\n \nThe projection effect is only useful up to a given\ndistance, beyond which it begins to diminish and\neventually disappears.\n \nHigher is better.", - L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Horizontal Recoil\nby the listed percentage.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", - L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Vertical Recoil\nby the listed percentage.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", + L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Horizontal Recoil\nby the listed value.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", + L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Vertical Recoil\nby the listed value.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", L"\n \nThis item modifies the shooter's ability to\ncope with recoil during Burst or Autofire volleys.\n \nWhen high, this can help a shooter to control\nguns with powerful recoil, even if the shooter\nhas low Strength.\n \nHigher is better.", L"\n \nThis item modifies the shooter's ability to\naccurately apply counter-force against a gun's\nrecoil, during Burst or Autofire volleys.\n \nA high bonus helps the shooter bring the gun's muzzle\nprecisely towards the target, even at longer ranges,\nmaking volleys more accurate as a result.\n \nHigher is better.", L"\n \nThis item modifies the shooter's ability to\nfrequently reasses how much counter-force they\nneed to apply against a gun's recoil, during Burst\nor Autofire volleys.\n \nHigher frequency makes volleys more accurate on the whole,\nand also makes longer volleys more accurate assuming\nthe shooter can overcome recoil correctly.\n \nHigher is better.", @@ -7585,6 +7586,7 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]= L"\n \nThe percentage of the item\nthat will be eaten at once.\n \nLower is better.", // TODO.TRANSLATE L"\n \nMorale is adjusted by this amount.\n \nHigher is better.", // TODO.TRANSLATE L"\n \nThis item becomes stale over time.\nIf more then 50% is molded it becomes poisoneous.\nThis is the rate at which mold is generated.\nLower is better.", // TODO.TRANSLATE + L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Recoil by the listed percentage.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", }; STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]= @@ -7641,6 +7643,7 @@ STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]= L"\n \nEvery turn, the temperature is lowered\nby this amount.\nWeapon attachments can affect this.\n \nHigher is better.", L"\n \nIf a gun's temperature is above this,\nit will jam more frequently.", L"\n \nIf a gun's temperature is above this,\nit will be damaged more easily.", + L"\n \nThis weapon's recoil strength is being\nmodified by this percentage value by its ammo,\nattachments, or inherent abilities.\n \nThis has no effect if the weapon lacks both\nBurst and Auto-Fire modes.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", }; // HEADROCK HAM 4: Text for the new CTH indicator. diff --git a/Utils/_RussianText.cpp b/Utils/_RussianText.cpp index a49f6a685..2908c1441 100644 --- a/Utils/_RussianText.cpp +++ b/Utils/_RussianText.cpp @@ -7495,6 +7495,7 @@ STR16 szUDBAdvStatsTooltipText[]= L"|M|o|r|a|l|e |M|o|d|i|f|i|e|r",//TODO.translate L"|D|e|c|a|y |M|o|d|i|f|i|e|r",//TODO.translate L"|B|e|s|t |L|a|s|e|r |R|a|n|g|e",//TODO.translate + L"|P|e|r|c|e|n|t |R|e|c|o|i|l |M|o|d|i|f|i|e|r", // 65 // TODO.Translate }; // Alternate tooltip text for weapon Advanced Stats. Just different wording, nothing spectacular. @@ -7564,6 +7565,7 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]= L"\n \nThe percentage of the item\nthat will be eaten at once.\n \nLower is better.", // TODO.TRANSLATE L"\n \nMorale is adjusted by this amount.\n \nHigher is better.", // TODO.TRANSLATE L"\n \nThis item becomes stale over time.\nIf more then 50% is molded it becomes poisoneous.\nThis is the rate at which mold is generated.\nLower is better.", // TODO.TRANSLATE + L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Recoil by the listed percentage.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", // TODO.TRANSLATE }; STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]= @@ -7620,6 +7622,7 @@ STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]= L"\n \nEvery turn, the temperature is lowered\nby this amount.\nWeapon attachments can affect this.\n \nHigher is better.", L"\n \nIf a gun's temperature is above this,\nit will jam more frequently.", L"\n \nIf a gun's temperature is above this,\nit will be damaged more easily.", + L"\n \nThis weapon's recoil strength is being\nmodified by this percentage value by its ammo,\nattachments, or inherent abilities.\n \nThis has no effect if the weapon lacks both\nBurst and Auto-Fire modes.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", // TODO.Translate }; // HEADROCK HAM 4: Text for the new CTH indicator. diff --git a/Utils/_TaiwaneseText.cpp b/Utils/_TaiwaneseText.cpp index 75bd7f68d..7f27e3b74 100644 --- a/Utils/_TaiwaneseText.cpp +++ b/Utils/_TaiwaneseText.cpp @@ -7510,6 +7510,7 @@ STR16 szUDBAdvStatsTooltipText[]= L"|M|o|r|a|l|e |M|o|d|i|f|i|e|r",//TODO.translate L"|D|e|c|a|y |M|o|d|i|f|i|e|r",//TODO.translate L"|B|e|s|t |L|a|s|e|r |R|a|n|g|e",//TODO.translate + L"|P|e|r|c|e|n|t |R|e|c|o|i|l |M|o|d|i|f|i|e|r", // 65 }; // Alternate tooltip text for weapon Advanced Stats. Just different wording, nothing spectacular. @@ -7530,8 +7531,8 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]= L"\n \nWhen attached to a ranged weapon, this item\nmodifies its maximum effective range.\n \nMaximum Range mainly dictates how far a bullet\nfired from the weapon can fly before it begins\ndropping sharply towards the ground.\n \nHigher is better.", L"\n \nWhen attached to a ranged weapon, this item\nprovides extra magnification, making shots at a distance\ncomparatively easier to make.\n \nNote that a high Magnification Factor is detrimental\nwhen used at targets CLOSER than the\noptimal distance.\n \nHigher is better.", L"\n \nWhen attached to a ranged weapon, this item\nprojects a dot on the target, making it easier to hit.\n \nThe projection effect is only useful up to a given\ndistance, beyond which it begins to diminish and\neventually disappears.\n \nHigher is better.", - L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Horizontal Recoil\nby the listed percentage.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", - L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Vertical Recoil\nby the listed percentage.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", + L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Horizontal Recoil\nby the listed value.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", + L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Vertical Recoil\nby the listed value.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", L"\n \nThis item modifies the shooter's ability to\ncope with recoil during Burst or Autofire volleys.\n \nWhen high, this can help a shooter to control\nguns with powerful recoil, even if the shooter\nhas low Strength.\n \nHigher is better.", L"\n \nThis item modifies the shooter's ability to\naccurately apply counter-force against a gun's\nrecoil, during Burst or Autofire volleys.\n \nA high bonus helps the shooter bring the gun's muzzle\nprecisely towards the target, even at longer ranges,\nmaking volleys more accurate as a result.\n \nHigher is better.", L"\n \nThis item modifies the shooter's ability to\nfrequently reasses how much counter-force they\nneed to apply against a gun's recoil, during Burst\nor Autofire volleys.\n \nHigher frequency makes volleys more accurate on the whole,\nand also makes longer volleys more accurate assuming\nthe shooter can overcome recoil correctly.\n \nHigher is better.", @@ -7579,6 +7580,7 @@ STR16 szUDBAdvStatsExplanationsTooltipText[]= L"\n \nThe percentage of the item\nthat will be eaten at once.\n \nLower is better.", // TODO.TRANSLATE L"\n \nMorale is adjusted by this amount.\n \nHigher is better.", // TODO.TRANSLATE L"\n \nThis item becomes stale over time.\nIf more then 50% is molded it becomes poisoneous.\nThis is the rate at which mold is generated.\nLower is better.", // TODO.TRANSLATE + L"\n \nWhen attached to a ranged weapon capable\nof Burst or Autofire modes, this item modifies\nthe weapon's Recoil by the listed percentage.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", }; STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]= @@ -7635,6 +7637,7 @@ STR16 szUDBAdvStatsExplanationsTooltipTextForWeapons[]= L"\n \nEvery turn, the temperature is lowered\nby this amount.\nWeapon attachments can affect this.\n \nHigher is better.", L"\n \nIf a gun's temperature is above this,\nit will jam more frequently.", L"\n \nIf a gun's temperature is above this,\nit will be damaged more easily.", + L"\n \nThis weapon's recoil strength is being\nmodified by this percentage value by its ammo,\nattachments, or inherent abilities.\n \nThis has no effect if the weapon lacks both\nBurst and Auto-Fire modes.\n \nReducing recoil makes it easier to keep the gun's\nmuzzle pointed at the target during a volley.\n \nLower is better.", }; // HEADROCK HAM 4: Text for the new CTH indicator.