From 0f9f53c1b737f06041fff7ef1ff0b2c7d85fa694 Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Mon, 4 Jul 2022 14:48:48 -0700 Subject: [PATCH] Compat: Add setting to skip compat flags. This allows configuring "ALL" to skip all, regardless of if new game IDs are added in a later stable release. --- Core/Compatibility.cpp | 14 +++++++++++++- Core/Compatibility.h | 2 ++ Core/Config.cpp | 2 ++ Core/Config.h | 2 ++ 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Core/Compatibility.cpp b/Core/Compatibility.cpp index 7a27543ab4..ec8d462be9 100644 --- a/Core/Compatibility.cpp +++ b/Core/Compatibility.cpp @@ -18,12 +18,22 @@ #include #include "Common/Data/Format/IniFile.h" +#include "Common/StringUtils.h" #include "Core/Compatibility.h" +#include "Core/Config.h" #include "Core/System.h" void Compatibility::Load(const std::string &gameID) { Clear(); + // Allow ignoring compat settings by name (regardless of game ID.) + std::vector ignored; + SplitString(g_Config.sIgnoreCompatSettings, ',', ignored); + ignored_ = std::set(ignored.begin(), ignored.end()); + // If ALL, don't process any compat flags. + if (ignored_.find("ALL") != ignored_.end()) + return; + { IniFile compat; // This loads from assets. @@ -83,5 +93,7 @@ void Compatibility::CheckSettings(IniFile &iniFile, const std::string &gameID) { } void Compatibility::CheckSetting(IniFile &iniFile, const std::string &gameID, const char *option, bool *flag) { - iniFile.Get(option, gameID.c_str(), flag, *flag); + if (ignored_.find(option) != ignored_.end()) { + iniFile.Get(option, gameID.c_str(), flag, *flag); + } } diff --git a/Core/Compatibility.h b/Core/Compatibility.h index fd3e76d743..e64ab462d9 100644 --- a/Core/Compatibility.h +++ b/Core/Compatibility.h @@ -19,6 +19,7 @@ #include #include +#include // Compatibility flags are controlled by assets/compat.ini. // Alternatively, if PSP/SYSTEM/compat.ini exists, it is merged on top, to enable editing @@ -100,4 +101,5 @@ private: void CheckSetting(IniFile &iniFile, const std::string &gameID, const char *option, bool *flag); CompatFlags flags_{}; + std::set ignored_; }; diff --git a/Core/Config.cpp b/Core/Config.cpp index 81c0be55b8..d9f6dac8fe 100644 --- a/Core/Config.cpp +++ b/Core/Config.cpp @@ -597,6 +597,8 @@ static ConfigSetting generalSettings[] = { ReportedConfigSetting("MemStickInserted", &g_Config.bMemStickInserted, true, true, true), ConfigSetting("EnablePlugins", &g_Config.bLoadPlugins, true, true, true), + ReportedConfigSetting("IgnoreCompatSettings", &g_Config.sIgnoreCompatSettings, "", true, true), + ConfigSetting(false), }; diff --git a/Core/Config.h b/Core/Config.h index 92d240c0af..54fb67b6ca 100644 --- a/Core/Config.h +++ b/Core/Config.h @@ -141,6 +141,8 @@ public: std::vector vPinnedPaths; std::string sLanguageIni; + std::string sIgnoreCompatSettings; + bool bDiscordPresence; // Enables setting the Discord presence to the current game (or menu) // GFX