diff --git a/Generals/Code/GameEngine/Source/GameClient/GlobalLanguage.cpp b/Generals/Code/GameEngine/Source/GameClient/GlobalLanguage.cpp index 8ff34f43ef..8743374179 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GlobalLanguage.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GlobalLanguage.cpp @@ -187,7 +187,8 @@ void GlobalLanguage::parseFontFileName( INI *ini, void * instance, void *store, Int GlobalLanguage::adjustFontSize(Int theFontSize) { - Real adjustFactor = TheGlobalData->m_xResolution/800.0f; + // TheSuperHackers @bugfix Mauller 10/08/2025 Scale fonts based on the smallest screen dimension so they are independent of aspect ratio + Real adjustFactor = min(TheGlobalData->m_xResolution/800.0f, TheGlobalData->m_yResolution/600.0f); adjustFactor = 1.0f + (adjustFactor-1.0f) * m_resolutionFontSizeAdjustment; if (adjustFactor<1.0f) adjustFactor = 1.0f; if (adjustFactor>2.0f) adjustFactor = 2.0f; diff --git a/GeneralsMD/Code/GameEngine/Include/Common/GlobalData.h b/GeneralsMD/Code/GameEngine/Include/Common/GlobalData.h index ed3bbcc1d1..acdcf02f3b 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/GlobalData.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/GlobalData.h @@ -409,6 +409,9 @@ class GlobalData : public SubsystemInterface Int m_systemTimeFontSize; Int m_gameTimeFontSize; + // TheSuperHackers @feature user adjustable font size percentage + Real m_userFontSizeAdjustment; + Real m_shakeSubtleIntensity; ///< Intensity for shaking a camera with SHAKE_SUBTLE Real m_shakeNormalIntensity; ///< Intensity for shaking a camera with SHAKE_NORMAL Real m_shakeStrongIntensity; ///< Intensity for shaking a camera with SHAKE_STRONG diff --git a/GeneralsMD/Code/GameEngine/Include/Common/UserPreferences.h b/GeneralsMD/Code/GameEngine/Include/Common/UserPreferences.h index 9e4d83a4bf..5feecd3de9 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/UserPreferences.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/UserPreferences.h @@ -135,6 +135,8 @@ class OptionPreferences : public UserPreferences Int getSystemTimeFontSize(void); Int getGameTimeFontSize(void); + + Real getUserFontScale(void); }; //----------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/GameEngine/Include/GameClient/GlobalLanguage.h b/GeneralsMD/Code/GameEngine/Include/GameClient/GlobalLanguage.h index a8324393c9..ef26c11e81 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameClient/GlobalLanguage.h +++ b/GeneralsMD/Code/GameEngine/Include/GameClient/GlobalLanguage.h @@ -101,6 +101,7 @@ class GlobalLanguage : public SubsystemInterface FontDesc m_creditsNormalFont; Real m_resolutionFontSizeAdjustment; + Real m_userFontSizeAdjustment; //UnicodeString m_unicodeFontNameUStr; diff --git a/GeneralsMD/Code/GameEngine/Source/Common/GlobalData.cpp b/GeneralsMD/Code/GameEngine/Source/Common/GlobalData.cpp index ed0d16e478..9aeb8bfd47 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/GlobalData.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/GlobalData.cpp @@ -937,6 +937,8 @@ GlobalData::GlobalData() m_systemTimeFontSize = 8; m_gameTimeFontSize = 8; + m_userFontSizeAdjustment = 1.0f; + m_debugShowGraphicalFramerate = FALSE; // By default, show all asserts. @@ -1204,6 +1206,8 @@ void GlobalData::parseGameDataDefinition( INI* ini ) TheWritableGlobalData->m_systemTimeFontSize = optionPref.getSystemTimeFontSize(); TheWritableGlobalData->m_gameTimeFontSize = optionPref.getGameTimeFontSize(); + TheWritableGlobalData->m_userFontSizeAdjustment = optionPref.getUserFontScale(); + Int val=optionPref.getGammaValue(); //generate a value between 0.6 and 2.0. if (val < 50) diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp index 598c97d23b..60e2b63671 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp @@ -828,6 +828,20 @@ Int OptionPreferences::getGameTimeFontSize(void) return fontSize; } +Real OptionPreferences::getUserFontScale(void) +{ + OptionPreferences::const_iterator it = find("UserFontScale"); + if (it == end()) + return 1.0f; + + Real fontScale = (Real)atof(it->second.str()) / 100.0f; + if (fontScale < 0.5f) + { + fontScale = 0.5f; + } + return fontScale; +} + static OptionPreferences *pref = NULL; static void setDefaults( void ) @@ -1354,6 +1368,16 @@ static void saveOptions( void ) TheInGameUI->refreshGameTimeResources(); } + //------------------------------------------------------------------------------------------------- + // Set User Font Scaling Percentage + val = pref->getUserFontScale() * 100.0f; // TheSuperHackers @todo replace with options input when applicable + if (val >= 50) + { + AsciiString prefString; + prefString.format("%d", REAL_TO_INT( val ) ); + (*pref)["UserFontScale"] = prefString; + } + //------------------------------------------------------------------------------------------------- // Resolution // diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GlobalLanguage.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GlobalLanguage.cpp index 6a8f6f7fec..61227f6ee4 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GlobalLanguage.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GlobalLanguage.cpp @@ -191,8 +191,9 @@ void GlobalLanguage::parseFontFileName( INI *ini, void * instance, void *store, Int GlobalLanguage::adjustFontSize(Int theFontSize) { - Real adjustFactor = TheGlobalData->m_xResolution/800.0f; - adjustFactor = 1.0f + (adjustFactor-1.0f) * m_resolutionFontSizeAdjustment; + // TheSuperHackers @bugfix Mauller 10/08/2025 Scale fonts based on the smallest screen dimension so they are independent of aspect ratio + Real adjustFactor = min(TheGlobalData->m_xResolution/800.0f, TheGlobalData->m_yResolution/600.0f); + adjustFactor = 1.0f + (adjustFactor-1.0f) * m_resolutionFontSizeAdjustment * TheGlobalData->m_userFontSizeAdjustment; if (adjustFactor<1.0f) adjustFactor = 1.0f; if (adjustFactor>2.0f) adjustFactor = 2.0f; Int pointSize = REAL_TO_INT_FLOOR(theFontSize*adjustFactor);