1
0
mirror of https://github.com/libretro/RetroArch synced 2024-07-03 08:48:42 +00:00

re-enforce hardcore limitations once achievements are loaded (#13862)

This commit is contained in:
Jamiras 2022-04-19 01:41:49 -06:00 committed by GitHub
parent da5d135a9f
commit 56c9db9c4c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 5 deletions

View File

@ -834,6 +834,12 @@ void rcheevos_leaderboards_enabled_changed(void)
}
}
static void rcheevos_enforce_hardcore_settings(void)
{
/* disable slowdown */
runloop_state_get_ptr()->slowmotion = false;
}
static void rcheevos_toggle_hardcore_active(rcheevos_locals_t* locals)
{
settings_t* settings = config_get_ptr();
@ -864,8 +870,7 @@ static void rcheevos_toggle_hardcore_active(rcheevos_locals_t* locals)
runloop_msg_queue_push(msg, 0, 3 * 60, true, NULL,
MESSAGE_QUEUE_ICON_DEFAULT, MESSAGE_QUEUE_CATEGORY_INFO);
/* disable slowdown */
runloop_state_get_ptr()->slowmotion = false;
rcheevos_enforce_hardcore_settings();
/* Reactivate leaderboards */
if (locals->leaderboards_enabled)
@ -935,6 +940,9 @@ void rcheevos_toggle_hardcore_paused(void)
void rcheevos_hardcore_enabled_changed(void)
{
/* called whenever a setting that could potentially affect hardcore enabledness changes
* (i.e. cheevos_enable, hardcore_mode_enable) to synchronize the internal state to the configs.
* also called when a game is first loaded to synchronize the internal state to the configs. */
const settings_t* settings = config_get_ptr();
const bool enabled = settings
&& settings->bools.cheevos_enable
@ -947,6 +955,12 @@ void rcheevos_hardcore_enabled_changed(void)
/* update leaderboard state flags */
rcheevos_leaderboards_enabled_changed();
}
else if (rcheevos_locals.hardcore_active && rcheevos_locals.loaded)
{
/* hardcore enabledness didn't change, but hardcore is active, so make
* sure to enforce the restrictions. */
rcheevos_enforce_hardcore_settings();
}
}
void rcheevos_validate_config_settings(void)
@ -1591,10 +1605,18 @@ static void rcheevos_start_session_async(retro_task_t* task)
}
#endif
/* if there's nothing for the runtime to process,
* disable hardcore. */
if (!needs_runtime)
{
/* if there's nothing for the runtime to process,
* disable hardcore. */
rcheevos_pause_hardcore();
}
else if (rcheevos_locals.hardcore_active)
{
/* hardcore is active. we're going to start processing
* achievements. make sure restrictions are enforced */
rcheevos_enforce_hardcore_settings();
}
task_set_finished(task, true);

View File

@ -6261,7 +6261,7 @@ static enum runloop_state_enum runloop_check_state(
bool widgets_active = dispwidget_get_ptr()->active;
#endif
#ifdef HAVE_CHEEVOS
bool cheevos_hardcore_active = rcheevos_hardcore_active();
bool cheevos_hardcore_active = false;
#endif
#if defined(HAVE_TRANSLATE) && defined(HAVE_GFX_WIDGETS)
@ -6961,6 +6961,10 @@ static enum runloop_state_enum runloop_check_state(
bool trig_frameadvance = false;
bool pause_pressed = BIT256_GET(current_bits, RARCH_PAUSE_TOGGLE);
#ifdef HAVE_CHEEVOS
/* make sure not to evaluate this before calling menu_driver_iterate
* as that may change its value */
cheevos_hardcore_active = rcheevos_hardcore_active();
if (cheevos_hardcore_active)
{
static int unpaused_frames = 0;