From 45105822f3ed5c86694f3bddfc0c43555b1b2499 Mon Sep 17 00:00:00 2001 From: LillyJadeKatrin Date: Wed, 7 Jun 2023 21:46:49 -0400 Subject: [PATCH] Disable frame advance in hardcore mode Frame advancing is easily exploitable for slowing down a game and artificially improving reaction times and is not allowed in RetroAchievements hardcore mode. --- Source/Core/Core/Core.cpp | 8 ++++++++ Source/Core/DolphinQt/MenuBar.cpp | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Source/Core/Core/Core.cpp b/Source/Core/Core/Core.cpp index 536244869a..8390bd44b6 100644 --- a/Source/Core/Core/Core.cpp +++ b/Source/Core/Core/Core.cpp @@ -42,6 +42,7 @@ #include "Core/Boot/Boot.h" #include "Core/BootManager.h" #include "Core/CPUThreadConfigCallback.h" +#include "Core/Config/AchievementSettings.h" #include "Core/Config/MainSettings.h" #include "Core/ConfigManager.h" #include "Core/CoreTiming.h" @@ -1081,6 +1082,13 @@ void HostDispatchJobs() // NOTE: Host Thread void DoFrameStep() { +#ifdef USE_RETRO_ACHIEVEMENTS + if (AchievementManager::GetInstance()->IsHardcoreModeActive()) + { + OSD::AddMessage("Frame stepping is disabled in RetroAchievements hardcore mode"); + return; + } +#endif // USE_RETRO_ACHIEVEMENTS if (GetState() == State::Paused) { // if already paused, frame advance for 1 frame diff --git a/Source/Core/DolphinQt/MenuBar.cpp b/Source/Core/DolphinQt/MenuBar.cpp index 8bf96d7acb..0a0b52e1fc 100644 --- a/Source/Core/DolphinQt/MenuBar.cpp +++ b/Source/Core/DolphinQt/MenuBar.cpp @@ -121,16 +121,16 @@ void MenuBar::OnEmulationStateChanged(Core::State state) m_stop_action->setVisible(running); m_reset_action->setEnabled(running); m_fullscreen_action->setEnabled(running); - m_frame_advance_action->setEnabled(running); m_screenshot_action->setEnabled(running); m_state_save_menu->setEnabled(running); #ifdef USE_RETRO_ACHIEVEMENTS bool hardcore = AchievementManager::GetInstance()->IsHardcoreModeActive(); m_state_load_menu->setEnabled(running && !hardcore); + m_frame_advance_action->setEnabled(running && !hardcore); #else // USE_RETRO_ACHIEVEMENTS m_state_load_menu->setEnabled(running); - + m_frame_advance_action->setEnabled(running); #endif // USE_RETRO_ACHIEVEMENTS // Movie