From ae9a1167b7f33010f4f5b8c0b0d1aad7df5debe1 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 13 Jan 2013 04:12:10 +0100 Subject: [PATCH] (RARCH_CONSOLE) Refactored sram_dir_enable / state_dir_enable setting - also fixed a reentrant bug to do with set savestate dir/set sram dir boolean variables in parse_input --- frontend/frontend_console.c | 4 +-- frontend/menu/rgui.c | 12 ++++---- frontend/menu/rmenu.c | 57 ++++++++++++++++++++++--------------- general.h | 23 ++++----------- retroarch.c | 7 +++++ settings.c | 43 +++++++++++++++++++++------- 6 files changed, 86 insertions(+), 60 deletions(-) diff --git a/frontend/frontend_console.c b/frontend/frontend_console.c index 67c9a38e5b..48f0ec5c78 100644 --- a/frontend/frontend_console.c +++ b/frontend/frontend_console.c @@ -326,8 +326,8 @@ begin_loop: args.verbose = g_extern.verbose; args.config_path = g_extern.config_path; - args.sram_path = g_extern.console.main_wrap.state.default_sram_dir.enable ? g_extern.console.main_wrap.paths.default_sram_dir : NULL; - args.state_path = g_extern.console.main_wrap.state.default_savestate_dir.enable ? g_extern.console.main_wrap.paths.default_savestate_dir : NULL; + args.sram_path = (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE)) ? g_extern.console.main_wrap.default_sram_dir : NULL; + args.state_path = (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE)) ? g_extern.console.main_wrap.default_savestate_dir : NULL; args.rom_path = g_extern.fullpath; args.libretro_path = g_settings.libretro; diff --git a/frontend/menu/rgui.c b/frontend/menu/rgui.c index 3f4cccf486..d34a251a7e 100644 --- a/frontend/menu/rgui.c +++ b/frontend/menu/rgui.c @@ -467,10 +467,10 @@ static void render_text(rgui_handle_t *rgui) snprintf(type_str, sizeof(type_str), "Cache"); break; case RGUI_SETTINGS_SRAM_DIR: - snprintf(type_str, sizeof(type_str), g_extern.console.main_wrap.state.default_sram_dir.enable ? "ON" : "OFF"); + snprintf(type_str, sizeof(type_str), (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE)) ? "ON" : "OFF"); break; case RGUI_SETTINGS_STATE_DIR: - snprintf(type_str, sizeof(type_str), g_extern.console.main_wrap.state.default_savestate_dir.enable ? "ON" : "OFF"); + snprintf(type_str, sizeof(type_str), (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE)) ? "ON" : "OFF"); break; case RGUI_SETTINGS_DEBUG_TEXT: snprintf(type_str, sizeof(type_str), (g_extern.lifecycle_mode_state & (1ULL << MODE_FPS_DRAW)) ? "ON" : "OFF"); @@ -764,15 +764,15 @@ static int rgui_settings_toggle_setting(rgui_file_type_t setting, rgui_action_t break; case RGUI_SETTINGS_SRAM_DIR: if (action == RGUI_ACTION_START || action == RGUI_ACTION_LEFT) - g_extern.console.main_wrap.state.default_sram_dir.enable = false; + g_extern.lifecycle_mode_state &= ~(1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE); else if (action == RGUI_ACTION_RIGHT) - g_extern.console.main_wrap.state.default_sram_dir.enable = true; + g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE); break; case RGUI_SETTINGS_STATE_DIR: if (action == RGUI_ACTION_START || action == RGUI_ACTION_LEFT) - g_extern.console.main_wrap.state.default_savestate_dir.enable = false; + g_extern.lifecycle_mode_state &= ~(1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE); else if (action == RGUI_ACTION_RIGHT) - g_extern.console.main_wrap.state.default_savestate_dir.enable = true; + g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE); break; case RGUI_SETTINGS_DEBUG_TEXT: if (action == RGUI_ACTION_START || action == RGUI_ACTION_LEFT) diff --git a/frontend/menu/rmenu.c b/frontend/menu/rmenu.c index a9d6b6c278..2d6c295aa2 100644 --- a/frontend/menu/rmenu.c +++ b/frontend/menu/rmenu.c @@ -357,17 +357,17 @@ static void populate_setting_item(void *data, unsigned input) break; case SETTING_PATH_DEFAULT_ROM_DIRECTORY: snprintf(current_item->text, sizeof(current_item->text), "Startup ROM Directory"); - snprintf(current_item->setting_text, sizeof(current_item->setting_text), g_extern.console.main_wrap.paths.default_rom_startup_dir); + snprintf(current_item->setting_text, sizeof(current_item->setting_text), g_extern.console.main_wrap.default_rom_startup_dir); snprintf(current_item->comment, sizeof(current_item->comment), "INFO - Set the default [Startup ROM directory]. NOTE: You will have to\nrestart the emulator for this change to have any effect."); break; case SETTING_PATH_SAVESTATES_DIRECTORY: snprintf(current_item->text, sizeof(current_item->text), "Savestate Directory"); - snprintf(current_item->setting_text, sizeof(current_item->setting_text), g_extern.console.main_wrap.paths.default_savestate_dir); + snprintf(current_item->setting_text, sizeof(current_item->setting_text), g_extern.console.main_wrap.default_savestate_dir); snprintf(current_item->comment, sizeof(current_item->comment), "INFO - Set the default path where all the savestate files will be saved to."); break; case SETTING_PATH_SRAM_DIRECTORY: snprintf(current_item->text, sizeof(current_item->text), "SRAM Directory"); - snprintf(current_item->setting_text, sizeof(current_item->setting_text), g_extern.console.main_wrap.paths.default_sram_dir); + snprintf(current_item->setting_text, sizeof(current_item->setting_text), g_extern.console.main_wrap.default_sram_dir); snprintf(current_item->comment, sizeof(current_item->comment), "INFO - Set the default SRAM (SaveRAM) directory path. All the\nbattery backup saves will be stored in this directory."); break; #ifdef HAVE_XML @@ -384,13 +384,13 @@ static void populate_setting_item(void *data, unsigned input) break; case SETTING_ENABLE_SRAM_PATH: snprintf(current_item->text, sizeof(current_item->text), "Custom SRAM Dir Enable"); - snprintf(current_item->setting_text, sizeof(current_item->setting_text), g_extern.console.main_wrap.state.default_sram_dir.enable ? "ON" : "OFF"); - snprintf(current_item->comment, sizeof(current_item->comment), "INFO - [Custom SRAM Dir Path] is set to '%s'.", g_extern.console.main_wrap.state.default_sram_dir.enable ? "ON" : "OFF"); + snprintf(current_item->setting_text, sizeof(current_item->setting_text), (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE)) ? "ON" : "OFF"); + snprintf(current_item->comment, sizeof(current_item->comment), "INFO - [Custom SRAM Dir Path] is set to '%s'.", (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE)) ? "ON" : "OFF"); break; case SETTING_ENABLE_STATE_PATH: snprintf(current_item->text, sizeof(current_item->text), "Custom Savestate Dir Enable"); - snprintf(current_item->setting_text, sizeof(current_item->setting_text), g_extern.console.main_wrap.state.default_savestate_dir.enable ? "ON" : "OFF"); - snprintf(current_item->comment, sizeof(current_item->comment), "INFO - [Custom Savestate Dir Path] is set to '%s'.", g_extern.console.main_wrap.state.default_savestate_dir.enable ? "ON" : "OFF"); + snprintf(current_item->setting_text, sizeof(current_item->setting_text), (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE)) ? "ON" : "OFF"); + snprintf(current_item->comment, sizeof(current_item->comment), "INFO - [Custom Savestate Dir Path] is set to '%s'.", (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE)) ? "ON" : "OFF"); break; case SETTING_CONTROLS_SCHEME: snprintf(current_item->text, sizeof(current_item->text), "Control Scheme Preset"); @@ -778,13 +778,13 @@ int select_directory(void *data, void *state) switch(current_menu->enum_id) { case PATH_SAVESTATES_DIR_CHOICE: - strlcpy(g_extern.console.main_wrap.paths.default_savestate_dir, path, sizeof(g_extern.console.main_wrap.paths.default_savestate_dir)); + strlcpy(g_extern.console.main_wrap.default_savestate_dir, path, sizeof(g_extern.console.main_wrap.default_savestate_dir)); break; case PATH_SRAM_DIR_CHOICE: - strlcpy(g_extern.console.main_wrap.paths.default_sram_dir, path, sizeof(g_extern.console.main_wrap.paths.default_sram_dir)); + strlcpy(g_extern.console.main_wrap.default_sram_dir, path, sizeof(g_extern.console.main_wrap.default_sram_dir)); break; case PATH_DEFAULT_ROM_DIR_CHOICE: - strlcpy(g_extern.console.main_wrap.paths.default_rom_startup_dir, path, sizeof(g_extern.console.main_wrap.paths.default_rom_startup_dir)); + strlcpy(g_extern.console.main_wrap.default_rom_startup_dir, path, sizeof(g_extern.console.main_wrap.default_rom_startup_dir)); break; #ifdef HAVE_XML case PATH_CHEATS_DIR_CHOICE: @@ -804,13 +804,13 @@ int select_directory(void *data, void *state) switch(current_menu->enum_id) { case PATH_SAVESTATES_DIR_CHOICE: - strlcpy(g_extern.console.main_wrap.paths.default_savestate_dir, path, sizeof(g_extern.console.main_wrap.paths.default_savestate_dir)); + strlcpy(g_extern.console.main_wrap.default_savestate_dir, path, sizeof(g_extern.console.main_wrap.default_savestate_dir)); break; case PATH_SRAM_DIR_CHOICE: - strlcpy(g_extern.console.main_wrap.paths.default_sram_dir, path, sizeof(g_extern.console.main_wrap.paths.default_sram_dir)); + strlcpy(g_extern.console.main_wrap.default_sram_dir, path, sizeof(g_extern.console.main_wrap.default_sram_dir)); break; case PATH_DEFAULT_ROM_DIR_CHOICE: - strlcpy(g_extern.console.main_wrap.paths.default_rom_startup_dir, path, sizeof(g_extern.console.main_wrap.paths.default_rom_startup_dir)); + strlcpy(g_extern.console.main_wrap.default_rom_startup_dir, path, sizeof(g_extern.console.main_wrap.default_rom_startup_dir)); break; #ifdef HAVE_XML case PATH_CHEATS_DIR_CHOICE: @@ -1517,7 +1517,7 @@ static int set_setting_action(void *data, unsigned switchvalue, uint64_t input) } if(input & (1ULL << RMENU_DEVICE_NAV_START)) - strlcpy(g_extern.console.main_wrap.paths.default_rom_startup_dir, default_paths.filesystem_root_dir, sizeof(g_extern.console.main_wrap.paths.default_rom_startup_dir)); + strlcpy(g_extern.console.main_wrap.default_rom_startup_dir, default_paths.filesystem_root_dir, sizeof(g_extern.console.main_wrap.default_rom_startup_dir)); break; case SETTING_PATH_SAVESTATES_DIRECTORY: if((input & (1ULL << RMENU_DEVICE_NAV_LEFT)) || (input & (1ULL << RMENU_DEVICE_NAV_RIGHT)) || (input & (1ULL << RMENU_DEVICE_NAV_B))) @@ -1527,7 +1527,7 @@ static int set_setting_action(void *data, unsigned switchvalue, uint64_t input) } if(input & (1ULL << RMENU_DEVICE_NAV_START)) - strlcpy(g_extern.console.main_wrap.paths.default_savestate_dir, default_paths.savestate_dir, sizeof(g_extern.console.main_wrap.paths.default_savestate_dir)); + strlcpy(g_extern.console.main_wrap.default_savestate_dir, default_paths.savestate_dir, sizeof(g_extern.console.main_wrap.default_savestate_dir)); break; case SETTING_PATH_SRAM_DIRECTORY: @@ -1538,7 +1538,7 @@ static int set_setting_action(void *data, unsigned switchvalue, uint64_t input) } if(input & (1ULL << RMENU_DEVICE_NAV_START)) - strlcpy(g_extern.console.main_wrap.paths.default_sram_dir, default_paths.sram_dir, sizeof(g_extern.console.main_wrap.paths.default_sram_dir)); + strlcpy(g_extern.console.main_wrap.default_sram_dir, default_paths.sram_dir, sizeof(g_extern.console.main_wrap.default_sram_dir)); break; #ifdef HAVE_XML case SETTING_PATH_CHEATS: @@ -1564,25 +1564,36 @@ static int set_setting_action(void *data, unsigned switchvalue, uint64_t input) break; case SETTING_ENABLE_SRAM_PATH: if((input & (1ULL << RMENU_DEVICE_NAV_LEFT)) || (input & (1ULL << RMENU_DEVICE_NAV_RIGHT))) - g_extern.console.main_wrap.state.default_sram_dir.enable = !g_extern.console.main_wrap.state.default_sram_dir.enable; + { + if (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE)) + g_extern.lifecycle_mode_state &= ~(1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE); + else + g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE); + } + if(input & (1ULL << RMENU_DEVICE_NAV_START)) - g_extern.console.main_wrap.state.default_sram_dir.enable = true; + g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE); break; case SETTING_ENABLE_STATE_PATH: if((input & (1ULL << RMENU_DEVICE_NAV_LEFT)) || (input & (1ULL << RMENU_DEVICE_NAV_RIGHT))) - g_extern.console.main_wrap.state.default_savestate_dir.enable = !g_extern.console.main_wrap.state.default_savestate_dir.enable; + { + if (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE)) + g_extern.lifecycle_mode_state &= ~(1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE); + else + g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE); + } if(input & (1ULL << RMENU_DEVICE_NAV_START)) - g_extern.console.main_wrap.state.default_savestate_dir.enable = true; + g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE); break; case SETTING_PATH_DEFAULT_ALL: if((input & (1ULL << RMENU_DEVICE_NAV_LEFT)) || (input & (1ULL << RMENU_DEVICE_NAV_RIGHT)) || (input & (1ULL << RMENU_DEVICE_NAV_B)) || (input & (1ULL << RMENU_DEVICE_NAV_START))) { - strlcpy(g_extern.console.main_wrap.paths.default_rom_startup_dir, "/", sizeof(g_extern.console.main_wrap.paths.default_rom_startup_dir)); - strlcpy(g_extern.console.main_wrap.paths.default_savestate_dir, default_paths.port_dir, sizeof(g_extern.console.main_wrap.paths.default_savestate_dir)); + strlcpy(g_extern.console.main_wrap.default_rom_startup_dir, "/", sizeof(g_extern.console.main_wrap.default_rom_startup_dir)); + strlcpy(g_extern.console.main_wrap.default_savestate_dir, default_paths.port_dir, sizeof(g_extern.console.main_wrap.default_savestate_dir)); #ifdef HAVE_XML strlcpy(g_settings.cheat_database, default_paths.port_dir, sizeof(g_settings.cheat_database)); #endif - strlcpy(g_extern.console.main_wrap.paths.default_sram_dir, "", sizeof(g_extern.console.main_wrap.paths.default_sram_dir)); + strlcpy(g_extern.console.main_wrap.default_sram_dir, "", sizeof(g_extern.console.main_wrap.default_sram_dir)); } break; case SETTING_CONTROLS_SCHEME: diff --git a/general.h b/general.h index a81c142529..637e864e38 100644 --- a/general.h +++ b/general.h @@ -104,6 +104,8 @@ enum menu_enums { MODE_GAME = 0, MODE_LOAD_GAME, + MODE_LOAD_GAME_SRAM_DIR_ENABLE, + MODE_LOAD_GAME_STATE_DIR_ENABLE, MODE_LOAD_FIRST_SHADER, MODE_LOAD_SECOND_SHADER, MODE_INIT, @@ -266,12 +268,6 @@ enum rarch_game_type RARCH_CART_SUFAMI }; -typedef struct rarch_boolean_state -{ - bool enable; - unsigned value; -} rarch_boolean_state_t; - typedef struct rarch_resolution { unsigned idx; @@ -545,18 +541,9 @@ struct global struct { - struct - { - char default_rom_startup_dir[PATH_MAX]; - char default_savestate_dir[PATH_MAX]; - char default_sram_dir[PATH_MAX]; - } paths; - - struct - { - rarch_boolean_state_t default_sram_dir; - rarch_boolean_state_t default_savestate_dir; - } state; + char default_rom_startup_dir[PATH_MAX]; + char default_savestate_dir[PATH_MAX]; + char default_sram_dir[PATH_MAX]; } main_wrap; #ifdef HAVE_OSKUTIL diff --git a/retroarch.c b/retroarch.c index 3aa54422ce..f1c40397fa 100644 --- a/retroarch.c +++ b/retroarch.c @@ -886,6 +886,12 @@ static void parse_input(int argc, char *argv[]) #endif const char *optstring = "hs:fvS:m:p4jJA:g:b:c:B:Y:Z:U:DN:X:" BSV_MOVIE_ARG NETPLAY_ARG DYNAMIC_ARG FFMPEG_RECORD_ARG; +#ifdef RARCH_CONSOLE + // hack - done for reentrancy reasons + g_extern.has_set_save_path = false; + g_extern.has_set_state_path = false; +#endif + for (;;) { val = 0; @@ -895,6 +901,7 @@ static void parse_input(int argc, char *argv[]) if (c == -1) break; + switch (c) { case 'h': diff --git a/settings.c b/settings.c index 9a01d4e4c2..7f828d0fe4 100644 --- a/settings.c +++ b/settings.c @@ -255,7 +255,7 @@ void config_set_defaults(void) g_settings.video.aspect_ratio = -1.0f; // g_extern - strlcpy(g_extern.console.main_wrap.paths.default_sram_dir, default_paths.sram_dir, sizeof(g_extern.console.main_wrap.paths.default_sram_dir)); + strlcpy(g_extern.console.main_wrap.default_sram_dir, default_paths.sram_dir, sizeof(g_extern.console.main_wrap.default_sram_dir)); g_extern.console.screen.overscan_amount = 0.0f; g_extern.console.screen.gamma_correction = DEFAULT_GAMMA; g_extern.lifecycle_mode_state |= (1ULL << MODE_VIDEO_OVERSCAN_ENABLE); @@ -267,12 +267,10 @@ void config_set_defaults(void) g_extern.lifecycle_mode_state |= (1ULL << MODE_VIDEO_FLICKER_FILTER_ENABLE); g_extern.lifecycle_mode_state |= (1ULL << MODE_UNZIP_TO_CURDIR_AND_LOAD_FIRST_FILE); - g_extern.console.main_wrap.state.default_savestate_dir.enable = false; - g_extern.console.main_wrap.state.default_sram_dir.enable = false; g_extern.console.screen.orientation = ORIENTATION_NORMAL; g_extern.console.screen.resolutions.current.id = 0; - strlcpy(g_extern.console.main_wrap.paths.default_rom_startup_dir, default_paths.filebrowser_startup_dir, sizeof(g_extern.console.main_wrap.paths.default_rom_startup_dir)); - strlcpy(g_extern.console.main_wrap.paths.default_savestate_dir, default_paths.savestate_dir, sizeof(g_extern.console.main_wrap.paths.default_savestate_dir)); + strlcpy(g_extern.console.main_wrap.default_rom_startup_dir, default_paths.filebrowser_startup_dir, sizeof(g_extern.console.main_wrap.default_rom_startup_dir)); + strlcpy(g_extern.console.main_wrap.default_savestate_dir, default_paths.savestate_dir, sizeof(g_extern.console.main_wrap.default_savestate_dir)); g_settings.video.aspect_ratio_idx = 0; g_extern.state_slot = 0; g_extern.audio_data.mute = 0; @@ -467,7 +465,7 @@ bool config_load_file(const char *path) CONFIG_GET_INT(input.device[i], cfg); } - CONFIG_GET_STRING_EXTERN(console.main_wrap.paths.default_rom_startup_dir, "default_rom_startup_dir"); + CONFIG_GET_STRING_EXTERN(console.main_wrap.default_rom_startup_dir, "default_rom_startup_dir"); CONFIG_GET_BOOL_EXTERN(console.screen.gamma_correction, "gamma_correction"); bool msg_enable = false; @@ -478,6 +476,8 @@ bool config_load_file(const char *path) bool screenshots_enable = false; bool flicker_filter_enable = false; bool soft_filter_enable = false; + bool sram_dir_enable = false; + bool state_dir_enable = false; int zip_extract_mode = 0; if (config_get_bool(conf, "info_msg_enable", &msg_enable)) @@ -563,8 +563,22 @@ bool config_load_file(const char *path) } } - CONFIG_GET_BOOL_EXTERN(console.main_wrap.state.default_sram_dir.enable, "sram_dir_enable"); - CONFIG_GET_BOOL_EXTERN(console.main_wrap.state.default_savestate_dir.enable, "savestate_dir_enable"); + if (config_get_bool(conf, "sram_dir_enable", &sram_dir_enable)) + { + if (sram_dir_enable) + g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE); + else + g_extern.lifecycle_mode_state &= ~(1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE); + } + + if (config_get_bool(conf, "savestate_dir_enable", &state_dir_enable)) + { + if (state_dir_enable) + g_extern.lifecycle_mode_state |= (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE); + else + g_extern.lifecycle_mode_state &= ~(1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE); + } + CONFIG_GET_FLOAT_EXTERN(console.screen.overscan_amount, "overscan_amount"); CONFIG_GET_INT_EXTERN(console.screen.flicker_filter_index, "flicker_filter_index"); CONFIG_GET_INT_EXTERN(console.screen.soft_filter_index, "soft_filter_index"); @@ -1217,7 +1231,7 @@ bool config_save_file(const char *path) config_set_int(conf, "custom_viewport_height", g_extern.console.screen.viewports.custom_vp.height); config_set_int(conf, "custom_viewport_x", g_extern.console.screen.viewports.custom_vp.x); config_set_int(conf, "custom_viewport_y", g_extern.console.screen.viewports.custom_vp.y); - config_set_string(conf, "default_rom_startup_dir", g_extern.console.main_wrap.paths.default_rom_startup_dir); + config_set_string(conf, "default_rom_startup_dir", g_extern.console.main_wrap.default_rom_startup_dir); config_set_float(conf, "overscan_amount", g_extern.console.screen.overscan_amount); config_set_float(conf, "video_font_size", g_settings.video.font_size); @@ -1233,8 +1247,15 @@ bool config_save_file(const char *path) else config_set_bool(conf, "custom_bgm_enable", false); - config_set_bool(conf, "sram_dir_enable", g_extern.console.main_wrap.state.default_sram_dir.enable); - config_set_bool(conf, "savestate_dir_enable", g_extern.console.main_wrap.state.default_savestate_dir.enable); + if (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_SRAM_DIR_ENABLE)) + config_set_bool(conf, "sram_dir_enable", true); + else + config_set_bool(conf, "sram_dir_enable", false); + + if (g_extern.lifecycle_mode_state & (1ULL << MODE_LOAD_GAME_STATE_DIR_ENABLE)) + config_set_bool(conf, "savestate_dir_enable", true); + else + config_set_bool(conf, "savestate_dir_enable", false); for (unsigned i = 0; i < MAX_PLAYERS; i++) {