* new option to lazy load achievements icons in memory when they're requested, rather than loading them on the next call to the run callback

* move stats options in the ini to a separate section [main::stats]
This commit is contained in:
a 2024-08-18 03:05:40 +03:00
parent 167a64a496
commit 573e17b45a
3 changed files with 50 additions and 30 deletions

View File

@ -257,6 +257,9 @@ public:
// when a stat that's tied to an achievement gets a new value, should the emu save that progress only if it's higher? // when a stat that's tied to an achievement gets a new value, should the emu save that progress only if it's higher?
// the stat itself is always saved regardless of that flag, only affects the achievement progress // the stat itself is always saved regardless of that flag, only affects the achievement progress
bool save_only_higher_stat_achievement_progress = true; bool save_only_higher_stat_achievement_progress = true;
// the emulator loads the achievements icons is memory mainly for `ISteamUserStats::GetAchievementIcon()`
// true means load icons lazily when they are requested, otherwise load icons as soon as the interface ISteamUserStats is initialized
bool lazy_load_achievements_icons = true;
// bypass to make SetAchievement() always return true, prevent some games from breaking // bypass to make SetAchievement() always return true, prevent some games from breaking
bool achievement_bypass = false; bool achievement_bypass = false;

View File

@ -1364,18 +1364,6 @@ static void parse_simple_features(class Settings *settings_client, class Setting
settings_client->steam_deck = ini.GetBoolValue("main::general", "steam_deck", settings_client->steam_deck); settings_client->steam_deck = ini.GetBoolValue("main::general", "steam_deck", settings_client->steam_deck);
settings_server->steam_deck = ini.GetBoolValue("main::general", "steam_deck", settings_server->steam_deck); settings_server->steam_deck = ini.GetBoolValue("main::general", "steam_deck", settings_server->steam_deck);
settings_client->disable_leaderboards_create_unknown = ini.GetBoolValue("main::general", "disable_leaderboards_create_unknown", settings_client->disable_leaderboards_create_unknown);
settings_server->disable_leaderboards_create_unknown = ini.GetBoolValue("main::general", "disable_leaderboards_create_unknown", settings_server->disable_leaderboards_create_unknown);
settings_client->allow_unknown_stats = ini.GetBoolValue("main::general", "allow_unknown_stats", settings_client->allow_unknown_stats);
settings_server->allow_unknown_stats = ini.GetBoolValue("main::general", "allow_unknown_stats", settings_server->allow_unknown_stats);
settings_client->stat_achievement_progress_functionality = ini.GetBoolValue("main::general", "stat_achievement_progress_functionality", settings_client->stat_achievement_progress_functionality);
settings_server->stat_achievement_progress_functionality = ini.GetBoolValue("main::general", "stat_achievement_progress_functionality", settings_server->stat_achievement_progress_functionality);
settings_client->save_only_higher_stat_achievement_progress = ini.GetBoolValue("main::general", "save_only_higher_stat_achievement_progress", settings_client->save_only_higher_stat_achievement_progress);
settings_server->save_only_higher_stat_achievement_progress = ini.GetBoolValue("main::general", "save_only_higher_stat_achievement_progress", settings_server->save_only_higher_stat_achievement_progress);
settings_client->immediate_gameserver_stats = ini.GetBoolValue("main::general", "immediate_gameserver_stats", settings_client->immediate_gameserver_stats); settings_client->immediate_gameserver_stats = ini.GetBoolValue("main::general", "immediate_gameserver_stats", settings_client->immediate_gameserver_stats);
settings_server->immediate_gameserver_stats = ini.GetBoolValue("main::general", "immediate_gameserver_stats", settings_server->immediate_gameserver_stats); settings_server->immediate_gameserver_stats = ini.GetBoolValue("main::general", "immediate_gameserver_stats", settings_server->immediate_gameserver_stats);
@ -1420,6 +1408,25 @@ static void parse_simple_features(class Settings *settings_client, class Setting
settings_server->enable_builtin_preowned_ids = ini.GetBoolValue("main::misc", "enable_steam_preowned_ids", settings_server->enable_builtin_preowned_ids); settings_server->enable_builtin_preowned_ids = ini.GetBoolValue("main::misc", "enable_steam_preowned_ids", settings_server->enable_builtin_preowned_ids);
} }
// [main::stats]
static void parse_stats_features(class Settings *settings_client, class Settings *settings_server)
{
settings_client->disable_leaderboards_create_unknown = ini.GetBoolValue("main::stats", "disable_leaderboards_create_unknown", settings_client->disable_leaderboards_create_unknown);
settings_server->disable_leaderboards_create_unknown = ini.GetBoolValue("main::stats", "disable_leaderboards_create_unknown", settings_server->disable_leaderboards_create_unknown);
settings_client->allow_unknown_stats = ini.GetBoolValue("main::stats", "allow_unknown_stats", settings_client->allow_unknown_stats);
settings_server->allow_unknown_stats = ini.GetBoolValue("main::stats", "allow_unknown_stats", settings_server->allow_unknown_stats);
settings_client->stat_achievement_progress_functionality = ini.GetBoolValue("main::stats", "stat_achievement_progress_functionality", settings_client->stat_achievement_progress_functionality);
settings_server->stat_achievement_progress_functionality = ini.GetBoolValue("main::stats", "stat_achievement_progress_functionality", settings_server->stat_achievement_progress_functionality);
settings_client->save_only_higher_stat_achievement_progress = ini.GetBoolValue("main::stats", "save_only_higher_stat_achievement_progress", settings_client->save_only_higher_stat_achievement_progress);
settings_server->save_only_higher_stat_achievement_progress = ini.GetBoolValue("main::stats", "save_only_higher_stat_achievement_progress", settings_server->save_only_higher_stat_achievement_progress);
settings_client->lazy_load_achievements_icons = ini.GetBoolValue("main::stats", "lazy_load_achievements_icons", settings_client->lazy_load_achievements_icons);
settings_server->lazy_load_achievements_icons = ini.GetBoolValue("main::stats", "lazy_load_achievements_icons", settings_server->lazy_load_achievements_icons);
}
static std::map<SettingsItf, std::string> old_itfs_map{}; static std::map<SettingsItf, std::string> old_itfs_map{};
@ -1673,6 +1680,7 @@ uint32 create_localstorage_settings(Settings **settings_client_out, Settings **s
settings_server->set_supported_languages(supported_languages); settings_server->set_supported_languages(supported_languages);
parse_simple_features(settings_client, settings_server); parse_simple_features(settings_client, settings_server);
parse_stats_features(settings_client, settings_server);
parse_dlc(settings_client, settings_server); parse_dlc(settings_client, settings_server);
parse_installed_app_Ids(settings_client, settings_server); parse_installed_app_Ids(settings_client, settings_server);

View File

@ -15,6 +15,26 @@ steam_deck=0
# 1=enable avatar functionality # 1=enable avatar functionality
# default=0 # default=0
enable_account_avatar=0 enable_account_avatar=0
# 1=synchronize user stats/achievements with game servers as soon as possible instead of caching them until the next call to `Steam_RunCallbacks()`
# not recommended to enable this
# default=0
immediate_gameserver_stats=0
# 1=use the proper type of the server list (internet, friends, etc...) when requested by the game
# 0=always return the type of the server list as "LAN server"
# not recommended to enable this
# default=0
matchmaking_server_list_actual_type=0
# 1=grab the server details for match making using an actual server query
# 0=use the info from the local network messages shared between client/server
# not recommended to enable this, currently breaks some games
# default=0
matchmaking_server_details_via_source_query=0
# very basic crash logger/printer
# this is intended to debug some annoying scenarios, and best used with the debug build of the emu
# default=
crash_printer_location=./path/relative/to/dll/crashes.txt
[main::stats]
# 1=prevent `Steam_User_Stats::FindLeaderboard()` from always succeeding and creating the unknown leaderboard # 1=prevent `Steam_User_Stats::FindLeaderboard()` from always succeeding and creating the unknown leaderboard
# not recommended to enable this # not recommended to enable this
# default=0 # default=0
@ -39,24 +59,13 @@ stat_achievement_progress_functionality=1
# also has no impact on the functions which directly change stats, achievements, or achievements progress # also has no impact on the functions which directly change stats, achievements, or achievements progress
# default=1 # default=1
save_only_higher_stat_achievement_progress=1 save_only_higher_stat_achievement_progress=1
# 1=synchronize user stats/achievements with game servers as soon as possible instead of caching them until the next call to `Steam_RunCallbacks()` # the emulator loads the achievements icons is memory
# not recommended to enable this # this is needed for APIs like `ISteamUserStats::GetAchievementIcon()`
# default=0 # the loaded icon size is controlled by [overlay::appearance] -> Icon_Size, in configs.overlay.ini
immediate_gameserver_stats=0 # 1=load icons lazily when they are requested
# 1=use the proper type of the server list (internet, friends, etc...) when requested by the game # 0=load icons as soon as the interface ISteamUserStats is initialized
# 0=always return the type of the server list as "LAN server" # default=1
# not recommended to enable this lazy_load_achievements_icons=1
# default=0
matchmaking_server_list_actual_type=0
# 1=grab the server details for match making using an actual server query
# 0=use the info from the local network messages shared between client/server
# not recommended to enable this, currently breaks some games
# default=0
matchmaking_server_details_via_source_query=0
# very basic crash logger/printer
# this is intended to debug some annoying scenarios, and best used with the debug build of the emu
# default=
crash_printer_location=./path/relative/to/dll/crashes.txt
[main::connectivity] [main::connectivity]
# 1=prevent hooking OS networking APIs and allow any external requests # 1=prevent hooking OS networking APIs and allow any external requests