add option to auto-apply cheat codes when a game loads ; fix some misc bugs in cheat engine

This commit is contained in:
Sven 2018-08-07 17:34:46 -04:00
parent 0f634d563b
commit b648d70f27
12 changed files with 49 additions and 8 deletions

View file

@ -1089,7 +1089,8 @@ static void command_event_deinit_core(bool reinit)
static void command_event_init_cheats(void)
{
bool allow_cheats = true;
settings_t *settings = config_get_ptr();
bool allow_cheats = true;
#ifdef HAVE_NETWORKING
allow_cheats &= !netplay_driver_ctl(
@ -1102,7 +1103,10 @@ static void command_event_init_cheats(void)
cheat_manager_alloc_if_empty() ;
cheat_manager_load_game_specific_cheats() ;
/* TODO/FIXME - add some stuff here. */
if (settings != NULL && settings->bools.apply_cheats_after_load)
cheat_manager_apply_cheats();
}
static void command_event_load_auto_state(void)

View file

@ -529,6 +529,9 @@ 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;
/* When set, all enabled cheats are auto-applied when a game is loaded. */
static const bool apply_cheats_after_load = 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 */

View file

@ -1281,6 +1281,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings,
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("apply_cheats_after_load", &settings->bools.apply_cheats_after_load, true, apply_cheats_after_load, 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);

View file

@ -240,6 +240,7 @@ typedef struct settings
bool playlist_entry_rename;
bool rewind_enable;
bool apply_cheats_after_toggle;
bool apply_cheats_after_load;
bool run_ahead_enabled;
bool run_ahead_secondary_instance;
bool run_ahead_hide_warnings;

View file

@ -939,6 +939,8 @@ 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_CHEAT_APPLY_AFTER_LOAD,
"cheat_apply_after_load")
MSG_HASH(MENU_ENUM_LABEL_REWIND_GRANULARITY,
"rewind_granularity")
MSG_HASH(MENU_ENUM_LABEL_REWIND_BUFFER_SIZE,

View file

@ -1185,6 +1185,10 @@ int menu_hash_get_help_us_enum(enum msg_hash_enums msg, char *s, size_t len)
snprintf(s, len,
"Apply cheat immediately after toggling.");
break;
case MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_LOAD:
snprintf(s, len,
"Auto-apply cheats when game loads.");
break;
case MENU_ENUM_LABEL_LIBRETRO_DIR_PATH:
snprintf(s, len,
"Core Directory. \n"

View file

@ -1401,6 +1401,8 @@ 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_CHEAT_APPLY_AFTER_LOAD,
"Auto-Apply Cheats During Game Load")
MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_GRANULARITY,
"Rewind Granularity")
MSG_HASH(MENU_ENUM_LABEL_VALUE_REWIND_BUFFER_SIZE,
@ -2834,6 +2836,10 @@ MSG_HASH(
MENU_ENUM_SUBLABEL_CHEAT_APPLY_AFTER_TOGGLE,
"Apply cheat immediately after toggling."
)
MSG_HASH(
MENU_ENUM_SUBLABEL_CHEAT_APPLY_AFTER_LOAD,
"Auto-apply cheats when game loads."
)
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."

View file

@ -511,7 +511,7 @@ void cheat_manager_update(cheat_manager_t *handle, unsigned handle_idx)
{
char msg[256];
if (!handle || !handle->cheats)
if (!handle || !handle->cheats || handle->size == 0)
return;
snprintf(msg, sizeof(msg), "Cheat: #%u [%s]: %s",
@ -526,7 +526,7 @@ void cheat_manager_update(cheat_manager_t *handle, unsigned handle_idx)
void cheat_manager_toggle_index(unsigned i)
{
settings_t *settings = config_get_ptr();
if (!cheat_manager_state.cheats)
if (!cheat_manager_state.cheats || cheat_manager_state.size == 0 )
return;
cheat_manager_state.cheats[i].state = !cheat_manager_state.cheats[i].state;
@ -542,7 +542,7 @@ void cheat_manager_toggle_index(unsigned i)
void cheat_manager_toggle(void)
{
if (!cheat_manager_state.cheats)
if (!cheat_manager_state.cheats || cheat_manager_state.size == 0)
return;
cheat_manager_state.cheats[cheat_manager_state.ptr].state ^= true;
@ -552,7 +552,7 @@ void cheat_manager_toggle(void)
void cheat_manager_index_next(void)
{
if (!cheat_manager_state.cheats)
if (!cheat_manager_state.cheats || cheat_manager_state.size == 0)
return;
cheat_manager_state.ptr = (cheat_manager_state.ptr + 1) % cheat_manager_state.size;
@ -561,7 +561,7 @@ void cheat_manager_index_next(void)
void cheat_manager_index_prev(void)
{
if (!cheat_manager_state.cheats)
if (!cheat_manager_state.cheats || cheat_manager_state.size == 0)
return;
if (cheat_manager_state.ptr == 0)

View file

@ -207,6 +207,7 @@ default_sublabel_macro(action_bind_sublabel_run_ahead_hide_warnings, MENU_
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_cheat_apply_after_load, MENU_ENUM_SUBLABEL_CHEAT_APPLY_AFTER_LOAD)
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)

View file

@ -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_LOAD,
PARSE_ONLY_BOOL, false);
menu_displaylist_parse_settings_enum(menu, info,
MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_TOGGLE,
PARSE_ONLY_BOOL, false);

View file

@ -3321,12 +3321,27 @@ static bool setting_append_list(
START_SUB_GROUP(list, list_info, "State", &group_info, &subgroup_info, parent_group);
CONFIG_BOOL(
list, list_info,
&settings->bools.apply_cheats_after_load,
MENU_ENUM_LABEL_CHEAT_APPLY_AFTER_LOAD,
MENU_ENUM_LABEL_VALUE_CHEAT_APPLY_AFTER_LOAD,
apply_cheats_after_load,
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);
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,
apply_cheats_after_toggle,
MENU_ENUM_LABEL_VALUE_OFF,
MENU_ENUM_LABEL_VALUE_ON,
&group_info,

View file

@ -1313,6 +1313,7 @@ enum msg_hash_enums
MENU_LABEL(FASTFORWARD_RATIO),
MENU_LABEL(REWIND_ENABLE),
MENU_LABEL(CHEAT_APPLY_AFTER_TOGGLE),
MENU_LABEL(CHEAT_APPLY_AFTER_LOAD),
MENU_ENUM_LABEL_ENABLE_HOTKEY,
MENU_ENUM_LABEL_DISK_EJECT_TOGGLE,