From 3bba9aeeafee6832df6ed8d886d054002dd319a2 Mon Sep 17 00:00:00 2001 From: Sven <40953353+RetroSven@users.noreply.github.com> Date: Thu, 2 Aug 2018 10:59:37 -0400 Subject: [PATCH] add an option to auto-apply cheats whenever they are toggled on/off --- config.def.h | 3 +++ configuration.c | 1 + configuration.h | 1 + intl/msg_hash_lbl.h | 4 ++++ intl/msg_hash_us.c | 4 ++++ intl/msg_hash_us.h | 8 ++++++++ managers/cheat_manager.c | 9 +++++++++ menu/cbs/menu_cbs_sublabel.c | 4 ++++ menu/menu_displaylist.c | 7 +++++-- menu/menu_setting.c | 31 +++++++++++++++++++++++++++++-- msg_hash.h | 2 ++ 11 files changed, 70 insertions(+), 4 deletions(-) diff --git a/config.def.h b/config.def.h index 30ad88751c..b0502d3488 100644 --- a/config.def.h +++ b/config.def.h @@ -526,6 +526,9 @@ static const bool framecount_show = true; * depending on the save state buffer. */ static const bool rewind_enable = false; +/* When set, any time a cheat is toggled it is immediately applied. */ +static const bool apply_cheats_after_toggle = false; + /* The buffer size for the rewind buffer. This needs to be about * 15-20MB per minute. Very game dependant. */ static const unsigned rewind_buffer_size = 20 << 20; /* 20MiB */ diff --git a/configuration.c b/configuration.c index 3afa6efbfd..e01540759a 100644 --- a/configuration.c +++ b/configuration.c @@ -1280,6 +1280,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings, SETTING_BOOL("ui_menubar_enable", &settings->bools.ui_menubar_enable, true, true, false); SETTING_BOOL("suspend_screensaver_enable", &settings->bools.ui_suspend_screensaver_enable, true, true, false); SETTING_BOOL("rewind_enable", &settings->bools.rewind_enable, true, rewind_enable, false); + SETTING_BOOL("apply_cheats_after_toggle", &settings->bools.apply_cheats_after_toggle, true, apply_cheats_after_toggle, false); SETTING_BOOL("run_ahead_enabled", &settings->bools.run_ahead_enabled, true, false, false); SETTING_BOOL("run_ahead_secondary_instance", &settings->bools.run_ahead_secondary_instance, true, false, false); SETTING_BOOL("run_ahead_hide_warnings", &settings->bools.run_ahead_hide_warnings, true, false, false); diff --git a/configuration.h b/configuration.h index 8955319959..dd0d930470 100644 --- a/configuration.h +++ b/configuration.h @@ -239,6 +239,7 @@ typedef struct settings bool playlist_entry_remove; bool playlist_entry_rename; bool rewind_enable; + bool apply_cheats_after_toggle; bool run_ahead_enabled; bool run_ahead_secondary_instance; bool run_ahead_hide_warnings; diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index 8b1dda3d77..c8ab74c511 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -937,6 +937,8 @@ MSG_HASH(MENU_ENUM_LABEL_INPUT_META_REWIND, "input_meta_rewind") MSG_HASH(MENU_ENUM_LABEL_REWIND_ENABLE, "rewind_enable") +MSG_HASH(MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_TOGGLE, + "cheat_apply_after_toggle") MSG_HASH(MENU_ENUM_LABEL_REWIND_GRANULARITY, "rewind_granularity") MSG_HASH(MENU_ENUM_LABEL_REWIND_BUFFER_SIZE, @@ -945,6 +947,8 @@ MSG_HASH(MENU_ENUM_LABEL_REWIND_BUFFER_SIZE_STEP, "rewind_buffer_size_step") MSG_HASH(MENU_ENUM_LABEL_REWIND_SETTINGS, "rewind_settings") +MSG_HASH(MENU_ENUM_LABEL_CHEAT_SETTINGS, + "cheat_settings") MSG_HASH(MENU_ENUM_LABEL_RGUI_BROWSER_DIRECTORY, "rgui_browser_directory") MSG_HASH(MENU_ENUM_LABEL_RGUI_CONFIG_DIRECTORY, diff --git a/intl/msg_hash_us.c b/intl/msg_hash_us.c index b30e8076c6..41529f2284 100644 --- a/intl/msg_hash_us.c +++ b/intl/msg_hash_us.c @@ -1181,6 +1181,10 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len) "This will take a performance hit, \n" "so it is disabled by default."); break; + case MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_TOGGLE: + snprintf(s, len, + "Apply cheat immediately after toggling."); + break; case MENU_ENUM_LABEL_LIBRETRO_DIR_PATH: snprintf(s, len, "Core Directory. \n" diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index d92b15ab4b..1730bc9391 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -1395,6 +1395,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_RETRO_ACHIEVEMENTS_SETTINGS, "Achievements") MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_ENABLE, "Rewind Enable") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEAT_APPLY_AFTER_TOGGLE, + "Apply After Toggle") MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY, "Rewind Granularity") MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_BUFFER_SIZE, @@ -1403,6 +1405,8 @@ MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_BUFFER_SIZE_STEP, "Rewind Buffer Size Step (MB)") MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_SETTINGS, "Rewind") +MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEAT_SETTINGS, + "Cheat Settings") MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEAT_DETAILS_SETTINGS, "Cheat Details") MSG_HASH(MENU_ENUM_LABEL_VALUE_CHEAT_SEARCH_SETTINGS, @@ -2822,6 +2826,10 @@ MSG_HASH( MENU_ENUM_SUBLABEL_REWIND_ENABLE, "Enable rewinding. This will take a performance hit when playing." ) +MSG_HASH( + MENU_ENUM_SUBLABEL_CHEAT_APPLY_AFTER_TOGGLE, + "Apply cheat immediately after toggling." +) MSG_HASH( MENU_ENUM_SUBLABEL_REWIND_GRANULARITY, "When rewinding a defined number of frames, you can rewind several frames at a time, increasing the rewind speed." diff --git a/managers/cheat_manager.c b/managers/cheat_manager.c index a2a5ad85fa..79c9eff9a0 100644 --- a/managers/cheat_manager.c +++ b/managers/cheat_manager.c @@ -494,6 +494,15 @@ void cheat_manager_toggle_index(unsigned i) cheat_manager_state.cheats[i].state = !cheat_manager_state.cheats[i].state; cheat_manager_update(&cheat_manager_state, i); + + settings_t *settings = config_get_ptr(); + + if ( !settings ) + return ; + + if ( settings->bools.apply_cheats_after_toggle ) + cheat_manager_apply_cheats(); + } void cheat_manager_toggle(void) diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index 974634a546..a82dc57daa 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -206,6 +206,7 @@ default_sublabel_macro(action_bind_sublabel_run_ahead_secondary_instance, MENU_ default_sublabel_macro(action_bind_sublabel_run_ahead_hide_warnings, MENU_ENUM_SUBLABEL_RUN_AHEAD_HIDE_WARNINGS) default_sublabel_macro(action_bind_sublabel_run_ahead_frames, MENU_ENUM_SUBLABEL_RUN_AHEAD_FRAMES) default_sublabel_macro(action_bind_sublabel_rewind, MENU_ENUM_SUBLABEL_REWIND_ENABLE) +default_sublabel_macro(action_bind_sublabel_cheat_apply_after_toggle, MENU_ENUM_SUBLABEL_CHEAT_APPLY_AFTER_TOGGLE) default_sublabel_macro(action_bind_sublabel_rewind_granularity, MENU_ENUM_SUBLABEL_REWIND_GRANULARITY) default_sublabel_macro(action_bind_sublabel_rewind_buffer_size, MENU_ENUM_SUBLABEL_REWIND_BUFFER_SIZE) default_sublabel_macro(action_bind_sublabel_rewind_buffer_size_step, MENU_ENUM_SUBLABEL_REWIND_BUFFER_SIZE_STEP) @@ -1392,6 +1393,9 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_REWIND_ENABLE: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_rewind); break; + case MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_TOGGLE: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_cheat_apply_after_toggle); + break; case MENU_ENUM_LABEL_REWIND_GRANULARITY: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_rewind_granularity); break; diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index d8d9f9192d..2f635f1170 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -3157,7 +3157,7 @@ static unsigned menu_displaylist_parse_options( } static int menu_displaylist_parse_options_cheats( - menu_displaylist_info_t *info) + menu_displaylist_info_t *info, menu_handle_t *menu) { unsigned i; @@ -3204,6 +3204,9 @@ static int menu_displaylist_parse_options_cheats( msg_hash_to_str(MENU_ENUM_LABEL_CHEAT_DELETE_ALL), MENU_ENUM_LABEL_CHEAT_DELETE_ALL, MENU_SETTING_ACTION, 0, 0); + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_TOGGLE, + PARSE_ONLY_BOOL, false); menu_entries_append_enum(info->list, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CHEAT_APPLY_CHANGES), msg_hash_to_str(MENU_ENUM_LABEL_CHEAT_APPLY_CHANGES), @@ -6868,7 +6871,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, void *data) break; case DISPLAYLIST_OPTIONS_CHEATS: menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list); - ret = menu_displaylist_parse_options_cheats(info); + ret = menu_displaylist_parse_options_cheats(info, menu); info->need_push = true; break; diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 2e534c21de..09f2d22397 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -105,7 +105,7 @@ enum settings_list_type SETTINGS_LIST_REWIND, SETTINGS_LIST_CHEAT_DETAILS, SETTINGS_LIST_CHEAT_SEARCH, - SETTINGS_LIST_CHEAT_MATCHES, + SETTINGS_LIST_CHEATS, SETTINGS_LIST_VIDEO, SETTINGS_LIST_AUDIO, SETTINGS_LIST_INPUT, @@ -3295,6 +3295,33 @@ static bool setting_append_list( END_SUB_GROUP(list, list_info, parent_group); END_GROUP(list, list_info, parent_group); break; + case SETTINGS_LIST_CHEATS: + { + START_GROUP(list, list_info, &group_info, msg_hash_to_str(MENU_ENUM_LABEL_VALUE_CHEAT_SETTINGS), parent_group); + + parent_group = msg_hash_to_str(MENU_ENUM_LABEL_CHEAT_SETTINGS); + + START_SUB_GROUP(list, list_info, "State", &group_info, &subgroup_info, parent_group); + + CONFIG_BOOL( + list, list_info, + &settings->bools.apply_cheats_after_toggle, + MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_TOGGLE, + MENU_ENUM_LABEL_VALUE_CHEAT_APPLY_AFTER_TOGGLE, + rewind_enable, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_CMD_APPLY_AUTO); + + END_SUB_GROUP(list, list_info, parent_group); + END_GROUP(list, list_info, parent_group); + break; + } case SETTINGS_LIST_CHEAT_DETAILS: { int max_bit_position; @@ -8770,7 +8797,7 @@ static rarch_setting_t *menu_setting_new_internal(rarch_setting_info_t *list_inf SETTINGS_LIST_REWIND, SETTINGS_LIST_CHEAT_DETAILS, SETTINGS_LIST_CHEAT_SEARCH, - SETTINGS_LIST_CHEAT_MATCHES, + SETTINGS_LIST_CHEATS, SETTINGS_LIST_VIDEO, SETTINGS_LIST_AUDIO, SETTINGS_LIST_INPUT, diff --git a/msg_hash.h b/msg_hash.h index 47165cf0c3..499000286d 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -1311,6 +1311,7 @@ enum msg_hash_enums MENU_LABEL(FASTFORWARD_RATIO), MENU_LABEL(REWIND_ENABLE), + MENU_LABEL(CHEAT_APPLY_AFTER_TOGGLE), MENU_ENUM_LABEL_ENABLE_HOTKEY, MENU_ENUM_LABEL_DISK_EJECT_TOGGLE, @@ -1584,6 +1585,7 @@ enum msg_hash_enums MENU_LABEL(RECORDING_SETTINGS), MENU_LABEL(OVERLAY_SETTINGS), MENU_LABEL(REWIND_SETTINGS), + MENU_LABEL(CHEAT_SETTINGS), MENU_LABEL(CHEAT_DETAILS_SETTINGS), MENU_LABEL(CHEAT_SEARCH_SETTINGS),