System: Fix setting-altering patches not applying on startup

This commit is contained in:
Stenzek 2025-02-09 15:38:12 +10:00
parent 0428a93315
commit 4236beabaf
No known key found for this signature in database
3 changed files with 35 additions and 2 deletions

View File

@ -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<const char*, 1> s_cheat_code_type_names = {{"Gameshark"}};
static std::array<const char*, 1> 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<CheatCode>& 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

View File

@ -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();

View File

@ -1928,7 +1928,11 @@ bool System::Initialize(std::unique_ptr<CDImage> disc, DiscRegion disc_region, b
UpdateMemorySaveStateSettings();
if (!IsReplayingGPUDump())
{
Cheats::ReloadCheats(true, true, false, true);
if (Cheats::HasAnySettingOverrides())
ApplySettings(true);
}
PerformanceCounters::Clear();