From 4236beabafc17a75a9187ad706826476f76716a0 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sun, 9 Feb 2025 15:38:12 +1000 Subject: [PATCH] System: Fix setting-altering patches not applying on startup --- src/core/cheats.cpp | 30 ++++++++++++++++++++++++++++-- src/core/cheats.h | 3 +++ src/core/system.cpp | 4 ++++ 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/core/cheats.cpp b/src/core/cheats.cpp index b559da708..0caa0b04a 100644 --- a/src/core/cheats.cpp +++ b/src/core/cheats.cpp @@ -186,6 +186,7 @@ public: ALWAYS_INLINE bool IsManuallyActivated() const { return (m_metadata.activation == CodeActivation::Manual); } ALWAYS_INLINE bool HasOptions() const { return m_metadata.has_options; } + bool HasAnySettingOverrides() const; void ApplySettingOverrides(); virtual void SetOptionValue(u32 value) = 0; @@ -264,6 +265,14 @@ Cheats::CheatCode::CheatCode(Metadata metadata) : m_metadata(std::move(metadata) { } +Cheats::CheatCode::~CheatCode() = default; + +bool Cheats::CheatCode::HasAnySettingOverrides() const +{ + return (m_metadata.disable_widescreen_rendering || m_metadata.override_aspect_ratio.has_value() || + m_metadata.override_cpu_overclock.has_value()); +} + void Cheats::CheatCode::ApplySettingOverrides() { if (m_metadata.disable_widescreen_rendering && g_settings.gpu_widescreen_hack) @@ -286,8 +295,6 @@ void Cheats::CheatCode::ApplySettingOverrides() } } -Cheats::CheatCode::~CheatCode() = default; - static std::array s_cheat_code_type_names = {{"Gameshark"}}; static std::array s_cheat_code_type_display_names{{TRANSLATE_NOOP("Cheats", "Gameshark")}}; @@ -927,6 +934,25 @@ void Cheats::UnloadAll() s_database_cheat_codes_enabled = false; } +bool Cheats::HasAnySettingOverrides() +{ + for (const std::string& name : s_enabled_patches) + { + for (std::unique_ptr& code : s_patch_codes) + { + if (name == code->GetName()) + { + if (code->HasAnySettingOverrides()) + return true; + + break; + } + } + } + + return false; +} + void Cheats::ApplySettingOverrides() { // only need to check patches for this diff --git a/src/core/cheats.h b/src/core/cheats.h index 893e77600..858827263 100644 --- a/src/core/cheats.h +++ b/src/core/cheats.h @@ -129,6 +129,9 @@ extern void ReloadCheats(bool reload_files, bool reload_enabled_list, bool verbo /// Releases all cheat-related state. extern void UnloadAll(); +/// Returns true if any patches have setting overrides specified. +extern bool HasAnySettingOverrides(); + /// Applies setting changes based on patches. extern void ApplySettingOverrides(); diff --git a/src/core/system.cpp b/src/core/system.cpp index 5a643bb48..9f4c91287 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -1928,7 +1928,11 @@ bool System::Initialize(std::unique_ptr disc, DiscRegion disc_region, b UpdateMemorySaveStateSettings(); if (!IsReplayingGPUDump()) + { Cheats::ReloadCheats(true, true, false, true); + if (Cheats::HasAnySettingOverrides()) + ApplySettings(true); + } PerformanceCounters::Clear();