From c07744564a7c8c7a2c61c7c934dec97420e932c3 Mon Sep 17 00:00:00 2001 From: radius Date: Thu, 20 Sep 2018 23:20:38 -0500 Subject: [PATCH] prevent retroachievements cheating exploit Revert "prevent retroachievements cheating exploit" and reimplement it in a better way This reverts commit d323338caa4882925d184f5ee7a506bfa8c78c1e. --- cheevos/cheevos.c | 1 + cheevos/cheevos.h | 2 ++ command.c | 3 +++ intl/msg_hash_us.h | 6 +++++- msg_hash.h | 1 + retroarch.c | 6 ++++++ 6 files changed, 18 insertions(+), 1 deletion(-) diff --git a/cheevos/cheevos.c b/cheevos/cheevos.c index 2d2daab6d8..bdee9179ef 100644 --- a/cheevos/cheevos.c +++ b/cheevos/cheevos.c @@ -288,6 +288,7 @@ static cheevos_locals_t cheevos_locals = bool cheevos_loaded = false; bool cheevos_hardcore_active = false; bool cheevos_hardcore_paused = false; +bool cheevos_state_loaded_flag = false; int cheats_are_enabled = 0; int cheats_were_enabled = 0; diff --git a/cheevos/cheevos.h b/cheevos/cheevos.h index 45c799dfe3..c04d63eae0 100644 --- a/cheevos/cheevos.h +++ b/cheevos/cheevos.h @@ -155,8 +155,10 @@ cheevos_console_t cheevos_get_console(void); extern bool cheevos_loaded; extern bool cheevos_hardcore_active; extern bool cheevos_hardcore_paused; +extern bool cheevos_state_loaded_flag; extern int cheats_are_enabled; extern int cheats_were_enabled; +; RETRO_END_DECLS diff --git a/command.c b/command.c index 7e4bf1ff36..3dbab53f45 100644 --- a/command.c +++ b/command.c @@ -1675,6 +1675,9 @@ static bool command_event_main_state(unsigned cmd) case CMD_EVENT_LOAD_STATE: if (content_load_state(state_path, false, false)) { +#ifdef HAVE_CHEEVOS + cheevos_state_loaded_flag = true; +#endif ret = true; #ifdef HAVE_NETWORKING netplay_driver_ctl(RARCH_NETPLAY_CTL_LOAD_SAVESTATE, NULL); diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index df819d8a24..2aa85f0cfb 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -3711,7 +3711,7 @@ MSG_HASH( ) MSG_HASH( MSG_CHEEVOS_HARDCORE_MODE_ENABLE, - "Hardcore Mode Enabled, savestate & rewind were disabled." + "Achievements Hardcore Mode Enabled, savestate & rewind were disabled." ) MSG_HASH( MSG_COMPARING_WITH_KNOWN_MAGIC_NUMBERS, @@ -7542,3 +7542,7 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_INPUT_META_STREAMING_TOGGLE, "Streaming toggle" ) +MSG_HASH( + MSG_CHEEVOS_HARDCORE_MODE_DISABLED, + "Savestate loaded, Achievements Hardcore Mode disabled for the current session." + ) diff --git a/msg_hash.h b/msg_hash.h index 46e316508b..39b6abfff4 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -2107,6 +2107,7 @@ enum msg_hash_enums MSG_CHEAT_SEARCH_ADD_MATCH_SUCCESS, MSG_CHEAT_SEARCH_ADD_MATCH_FAIL, MSG_CHEAT_SEARCH_DELETE_MATCH_SUCCESS, + MSG_CHEEVOS_HARDCORE_MODE_DISABLED, MSG_LAST }; diff --git a/retroarch.c b/retroarch.c index 5d247c98ba..fed75b385c 100644 --- a/retroarch.c +++ b/retroarch.c @@ -3156,6 +3156,12 @@ static enum runloop_state runloop_check_state( && settings->bools.cheevos_hardcore_mode_enable && cheevos_loaded && !cheevos_hardcore_paused; + if (cheevos_hardcore_active && cheevos_state_loaded_flag) + { + cheevos_hardcore_paused = true; + runloop_msg_queue_push(msg_hash_to_str(MSG_CHEEVOS_HARDCORE_MODE_DISABLED), 0, 180, true); + } + if (!cheevos_hardcore_active) #endif {