From 940ad64d418aefb5b5f465d3d09ed0628d7f30a4 Mon Sep 17 00:00:00 2001 From: Tatsuya79 Date: Thu, 26 Jan 2023 15:56:33 +0100 Subject: [PATCH] Allow bypassing savestate info files filtering (#14906) --- config.def.h | 6 ++++++ configuration.c | 1 + configuration.h | 1 + core_info.c | 16 ++++++++++++++++ intl/msg_hash_lbl.h | 4 ++++ intl/msg_hash_us.c | 3 +++ intl/msg_hash_us.h | 8 ++++++++ menu/cbs/menu_cbs_sublabel.c | 4 ++++ menu/menu_displaylist.c | 1 + menu/menu_setting.c | 11 +++++++++-- msg_hash.h | 1 + 11 files changed, 54 insertions(+), 2 deletions(-) diff --git a/config.def.h b/config.def.h index 60edc9c7b3..fc9ff578ba 100644 --- a/config.def.h +++ b/config.def.h @@ -321,6 +321,12 @@ * load times on platforms with slow IO */ #define DEFAULT_CORE_INFO_CACHE_ENABLE true +/* Specifies whether to ignore core info + * savestate capabilities, allowing to + * experiment with related features + * (run ahead, rewind, etc) */ +#define DEFAULT_CORE_INFO_SAVESTATE_BYPASS false + /* Specifies whether to 'reload' (fork and quit) * RetroArch when launching content with the * currently loaded core diff --git a/configuration.c b/configuration.c index 429edbe6da..24e468962d 100644 --- a/configuration.c +++ b/configuration.c @@ -1664,6 +1664,7 @@ static struct config_bool_setting *populate_settings_bool( SETTING_BOOL("load_dummy_on_core_shutdown", &settings->bools.load_dummy_on_core_shutdown, true, DEFAULT_LOAD_DUMMY_ON_CORE_SHUTDOWN, false); SETTING_BOOL("check_firmware_before_loading", &settings->bools.check_firmware_before_loading, true, DEFAULT_CHECK_FIRMWARE_BEFORE_LOADING, false); SETTING_BOOL("core_option_category_enable", &settings->bools.core_option_category_enable, true, DEFAULT_CORE_OPTION_CATEGORY_ENABLE, false); + SETTING_BOOL("core_info_savestate_bypass", &settings->bools.core_info_savestate_bypass, true, DEFAULT_CORE_INFO_SAVESTATE_BYPASS, false); #if defined(__WINRT__) || defined(WINAPI_FAMILY) && WINAPI_FAMILY == WINAPI_FAMILY_PHONE_APP SETTING_BOOL("core_info_cache_enable", &settings->bools.core_info_cache_enable, false, DEFAULT_CORE_INFO_CACHE_ENABLE, false); #else diff --git a/configuration.h b/configuration.h index 392196b461..3619ca7f0a 100644 --- a/configuration.h +++ b/configuration.h @@ -905,6 +905,7 @@ typedef struct settings bool check_firmware_before_loading; bool core_option_category_enable; bool core_info_cache_enable; + bool core_info_savestate_bypass; #ifndef HAVE_DYNAMIC bool always_reload_core_on_run_content; #endif diff --git a/core_info.c b/core_info.c index cf1c217f35..90ff52358c 100644 --- a/core_info.c +++ b/core_info.c @@ -2776,6 +2776,10 @@ void core_info_qsort(core_info_list_t *core_info_list, bool core_info_current_supports_savestate(void) { core_info_state_t *p_coreinfo = &core_info_st; + settings_t *settings = config_get_ptr(); + + if (settings->bools.core_info_savestate_bypass) + return true; /* If no core is currently loaded, assume * by default that all savestate functionality @@ -2790,6 +2794,10 @@ bool core_info_current_supports_savestate(void) bool core_info_current_supports_rewind(void) { core_info_state_t *p_coreinfo = &core_info_st; + settings_t *settings = config_get_ptr(); + + if (settings->bools.core_info_savestate_bypass) + return true; /* If no core is currently loaded, assume * by default that all savestate functionality @@ -2804,6 +2812,10 @@ bool core_info_current_supports_rewind(void) bool core_info_current_supports_netplay(void) { core_info_state_t *p_coreinfo = &core_info_st; + settings_t *settings = config_get_ptr(); + + if (settings->bools.core_info_savestate_bypass) + return true; /* If no core is currently loaded, assume * by default that all savestate functionality @@ -2818,6 +2830,10 @@ bool core_info_current_supports_netplay(void) bool core_info_current_supports_runahead(void) { core_info_state_t *p_coreinfo = &core_info_st; + settings_t *settings = config_get_ptr(); + + if (settings->bools.core_info_savestate_bypass) + return true; /* If no core is currently loaded, assume * by default that all savestate functionality diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index 880973e8a3..dda4eefa41 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -1485,6 +1485,10 @@ MSG_HASH( MENU_ENUM_LABEL_CORE_INFO_CACHE_ENABLE, "core_info_cache_enable" ) +MSG_HASH( + MENU_ENUM_LABEL_CORE_INFO_SAVESTATE_BYPASS, + "core_info_savestate_bypass" + ) MSG_HASH( MENU_ENUM_LABEL_DUMMY_ON_CORE_SHUTDOWN, "dummy_on_core_shutdown" diff --git a/intl/msg_hash_us.c b/intl/msg_hash_us.c index 3a3d176131..e94591d952 100644 --- a/intl/msg_hash_us.c +++ b/intl/msg_hash_us.c @@ -86,6 +86,9 @@ int msg_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) case MENU_ENUM_LABEL_CHECK_FOR_MISSING_FIRMWARE: strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_HELP_CHECK_FOR_MISSING_FIRMWARE), len); break; + case MENU_ENUM_LABEL_CORE_INFO_SAVESTATE_BYPASS: + strlcpy(s, msg_hash_to_str(MENU_ENUM_SUBLABEL_CORE_INFO_SAVESTATE_BYPASS), len); + break; case MENU_ENUM_LABEL_PARENT_DIRECTORY: strlcpy(s, msg_hash_to_str(MENU_ENUM_LABEL_HELP_PARENT_DIRECTORY), len); break; diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index 37a27f990d..1c0cf74bb4 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -3935,6 +3935,14 @@ MSG_HASH( MENU_ENUM_SUBLABEL_CORE_INFO_CACHE_ENABLE, "Maintain a persistent local cache of installed core information. Greatly reduces loading times on platforms with slow disk access." ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_CORE_INFO_SAVESTATE_BYPASS, + "Bypass Core Info Save States Features" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CORE_INFO_SAVESTATE_BYPASS, + "Specifies whether to ignore core info savestate capabilities, allowing to experiment with related features (run ahead, rewind, etc)." + ) #ifndef HAVE_DYNAMIC MSG_HASH( MENU_ENUM_LABEL_VALUE_ALWAYS_RELOAD_CORE_ON_RUN_CONTENT, diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index 13ff93bd86..8d67fa41c3 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -525,6 +525,7 @@ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_dummy_on_core_shutdown, MENU_ DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_dummy_check_missing_firmware, MENU_ENUM_SUBLABEL_CHECK_FOR_MISSING_FIRMWARE) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_option_category_enable, MENU_ENUM_SUBLABEL_CORE_OPTION_CATEGORY_ENABLE) DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_info_cache_enable, MENU_ENUM_SUBLABEL_CORE_INFO_CACHE_ENABLE) +DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_core_info_savestate_bypass, MENU_ENUM_SUBLABEL_CORE_INFO_SAVESTATE_BYPASS) #ifndef HAVE_DYNAMIC DEFAULT_SUBLABEL_MACRO(action_bind_sublabel_always_reload_core_on_run_content, MENU_ENUM_SUBLABEL_ALWAYS_RELOAD_CORE_ON_RUN_CONTENT) #endif @@ -4216,6 +4217,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_CORE_INFO_CACHE_ENABLE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_core_info_cache_enable); break; + case MENU_ENUM_LABEL_CORE_INFO_SAVESTATE_BYPASS: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_core_info_savestate_bypass); + break; #ifndef HAVE_DYNAMIC case MENU_ENUM_LABEL_ALWAYS_RELOAD_CORE_ON_RUN_CONTENT: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_always_reload_core_on_run_content); diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index f32552db80..92bb4f1289 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -10084,6 +10084,7 @@ unsigned menu_displaylist_build_list( { menu_displaylist_build_info_t build_list[] = { {MENU_ENUM_LABEL_CORE_INFO_CACHE_ENABLE, PARSE_ONLY_BOOL}, + {MENU_ENUM_LABEL_CORE_INFO_SAVESTATE_BYPASS, PARSE_ONLY_BOOL}, {MENU_ENUM_LABEL_CHECK_FOR_MISSING_FIRMWARE, PARSE_ONLY_BOOL}, {MENU_ENUM_LABEL_CORE_OPTION_CATEGORY_ENABLE, PARSE_ONLY_BOOL}, {MENU_ENUM_LABEL_DRIVER_SWITCH_ENABLE, PARSE_ONLY_BOOL}, diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 2c74585d5d..ed0d75b6e7 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -10606,9 +10606,9 @@ static bool setting_append_list( { unsigned i, listing = 0; #ifndef HAVE_DYNAMIC - struct bool_entry bool_entries[9]; + struct bool_entry bool_entries[10]; #else - struct bool_entry bool_entries[8]; + struct bool_entry bool_entries[9]; #endif START_GROUP(list, list_info, &group_info, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CORE_SETTINGS), parent_group); @@ -10675,6 +10675,13 @@ static bool setting_append_list( bool_entries[listing].flags = SD_FLAG_ADVANCED; listing++; + bool_entries[listing].target = &settings->bools.core_info_savestate_bypass; + bool_entries[listing].name_enum_idx = MENU_ENUM_LABEL_CORE_INFO_SAVESTATE_BYPASS; + bool_entries[listing].SHORT_enum_idx = MENU_ENUM_LABEL_VALUE_CORE_INFO_SAVESTATE_BYPASS; + bool_entries[listing].default_value = DEFAULT_CORE_INFO_SAVESTATE_BYPASS; + bool_entries[listing].flags = SD_FLAG_ADVANCED; + listing++; + #ifndef HAVE_DYNAMIC bool_entries[listing].target = &settings->bools.always_reload_core_on_run_content; bool_entries[listing].name_enum_idx = MENU_ENUM_LABEL_ALWAYS_RELOAD_CORE_ON_RUN_CONTENT; diff --git a/msg_hash.h b/msg_hash.h index 07d8555ffc..11a9e27e9e 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -2738,6 +2738,7 @@ enum msg_hash_enums MENU_LBL_H(DUMMY_ON_CORE_SHUTDOWN), MENU_LBL_H(CHECK_FOR_MISSING_FIRMWARE), + MENU_LABEL(CORE_INFO_SAVESTATE_BYPASS), MENU_LABEL(CORE_OPTION_CATEGORY_ENABLE), MENU_LABEL(CORE_INFO_CACHE_ENABLE), #ifndef HAVE_DYNAMIC