diff --git a/managers/cheat_manager.c b/managers/cheat_manager.c index 211f2066f7..a828479f65 100644 --- a/managers/cheat_manager.c +++ b/managers/cheat_manager.c @@ -48,7 +48,6 @@ #include "../dynamic.h" #include "../core.h" #include "../verbosity.h" -#include "../configuration.h" cheat_manager_t cheat_manager_state; @@ -579,19 +578,16 @@ void cheat_manager_update(cheat_manager_t *handle, unsigned handle_idx) RARCH_LOG("%s\n", msg); } -void cheat_manager_toggle_index(unsigned i) +void cheat_manager_toggle_index(bool apply_cheats_after_toggle, + unsigned i) { - settings_t *settings = config_get_ptr(); if (!cheat_manager_state.cheats || cheat_manager_state.size == 0) return; cheat_manager_state.cheats[i].state = !cheat_manager_state.cheats[i].state; cheat_manager_update(&cheat_manager_state, i); - if (!settings) - return; - - if (settings->bools.apply_cheats_after_toggle) + if (apply_cheats_after_toggle) cheat_manager_apply_cheats(); } @@ -650,27 +646,24 @@ bool cheat_manager_get_code_state(unsigned i) static bool cheat_manager_get_game_specific_filename( char *s, size_t len, + const char *path_cheat_database, bool saving) { char s1[PATH_MAX_LENGTH]; struct retro_system_info system_info; - settings_t *settings = config_get_ptr(); global_t *global = global_get_ptr(); const char *core_name = NULL; const char *game_name = NULL; s1[0] = '\0'; - if (!settings || !global) - return false; - - if (!core_get_system_info(&system_info)) + if (!global || !core_get_system_info(&system_info)) return false; core_name = system_info.library_name; game_name = path_basename(global->name.cheatfile); - if (string_is_empty(settings->paths.path_cheat_database) || + if (string_is_empty(path_cheat_database) || string_is_empty(core_name) || string_is_empty(game_name)) return false; @@ -678,7 +671,7 @@ static bool cheat_manager_get_game_specific_filename( s[0] = '\0'; fill_pathname_join(s1, - settings->paths.path_cheat_database, core_name, + path_cheat_database, core_name, sizeof(s1)); if (saving) @@ -693,24 +686,28 @@ static bool cheat_manager_get_game_specific_filename( return true; } -void cheat_manager_load_game_specific_cheats(void) +void cheat_manager_load_game_specific_cheats(const char *path_cheat_database) { char cheat_file[PATH_MAX_LENGTH]; if (cheat_manager_get_game_specific_filename( - cheat_file, sizeof(cheat_file), false)) + cheat_file, sizeof(cheat_file), + path_cheat_database, + false)) { RARCH_LOG("[Cheats]: Load game-specific cheatfile: %s\n", cheat_file); cheat_manager_load(cheat_file, true); } } -void cheat_manager_save_game_specific_cheats(void) +void cheat_manager_save_game_specific_cheats(const char *path_cheat_database) { char cheat_file[PATH_MAX_LENGTH]; if (cheat_manager_get_game_specific_filename( - cheat_file, sizeof(cheat_file), true)) + cheat_file, sizeof(cheat_file), + path_cheat_database, + true)) { RARCH_LOG("[Cheats]: Save game-specific cheatfile: %s\n", cheat_file); cheat_manager_save(cheat_file, NULL, true); diff --git a/managers/cheat_manager.h b/managers/cheat_manager.h index c3bc5269bd..c999a68a08 100644 --- a/managers/cheat_manager.h +++ b/managers/cheat_manager.h @@ -217,7 +217,8 @@ void cheat_manager_apply_cheats(void); void cheat_manager_update(cheat_manager_t *handle, unsigned handle_idx); -void cheat_manager_toggle_index(unsigned i); +void cheat_manager_toggle_index(bool apply_cheats_after_toggle, + unsigned i); unsigned cheat_manager_get_buf_size(void); @@ -235,9 +236,9 @@ bool cheat_manager_copy_idx_to_working(unsigned idx); bool cheat_manager_copy_working_to_idx(unsigned idx); -void cheat_manager_load_game_specific_cheats(void); +void cheat_manager_load_game_specific_cheats(const char *path_cheat_database); -void cheat_manager_save_game_specific_cheats(void); +void cheat_manager_save_game_specific_cheats(const char *path_cheat_database); int cheat_manager_initialize_memory(rarch_setting_t *setting, bool wraparound); diff --git a/menu/cbs/menu_cbs_ok.c b/menu/cbs/menu_cbs_ok.c index 1f58f978ae..ed108ee2c9 100644 --- a/menu/cbs/menu_cbs_ok.c +++ b/menu/cbs/menu_cbs_ok.c @@ -3469,9 +3469,14 @@ int action_ok_core_option_dropdown_list(const char *path, static int action_ok_cheat_reload_cheats(const char *path, const char *label, unsigned type, size_t idx, size_t entry_idx) { - bool refresh = false ; + bool refresh = false; + settings_t *settings = config_get_ptr(); + cheat_manager_realloc(0, CHEAT_HANDLER_TYPE_EMU); - cheat_manager_load_game_specific_cheats(); + + cheat_manager_load_game_specific_cheats( + settings->paths.path_cheat_database); + menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL); return 0 ; diff --git a/menu/cbs/menu_cbs_right.c b/menu/cbs/menu_cbs_right.c index a19b556dcb..c7c9bcbdcb 100644 --- a/menu/cbs/menu_cbs_right.c +++ b/menu/cbs/menu_cbs_right.c @@ -104,7 +104,10 @@ int shader_action_preset_parameter_right(unsigned type, const char *label, bool int generic_action_cheat_toggle(size_t idx, unsigned type, const char *label, bool wraparound) { - cheat_manager_toggle_index((unsigned)idx); + settings_t *settings = config_get_ptr(); + cheat_manager_toggle_index( + settings->bools.apply_cheats_after_toggle, + (unsigned)idx); return 0; } diff --git a/retroarch.c b/retroarch.c index ac4af9421c..2f9b1473ec 100644 --- a/retroarch.c +++ b/retroarch.c @@ -5584,7 +5584,8 @@ static void command_event_deinit_core(bool reinit) static void command_event_init_cheats(void) { - bool allow_cheats = true; + settings_t *settings = configuration_settings; + bool allow_cheats = true; #ifdef HAVE_NETWORKING allow_cheats &= !netplay_driver_ctl( @@ -5596,13 +5597,11 @@ static void command_event_init_cheats(void) return; cheat_manager_alloc_if_empty(); - cheat_manager_load_game_specific_cheats(); + cheat_manager_load_game_specific_cheats( + settings->paths.path_cheat_database); - { - settings_t *settings = configuration_settings; - if (settings && settings->bools.apply_cheats_after_load) - cheat_manager_apply_cheats(); - } + if (settings->bools.apply_cheats_after_load) + cheat_manager_apply_cheats(); } static void command_event_load_auto_state(void) diff --git a/tasks/task_save.c b/tasks/task_save.c index 773b0aea3f..af5e83bc73 100644 --- a/tasks/task_save.c +++ b/tasks/task_save.c @@ -1556,8 +1556,10 @@ bool content_save_ram_file(unsigned slot) bool event_save_files(bool is_sram_used) { unsigned i; + settings_t *settings = config_get_ptr(); - cheat_manager_save_game_specific_cheats(); + cheat_manager_save_game_specific_cheats( + settings->paths.path_cheat_database); if (!task_save_files || !is_sram_used) return false;