diff --git a/Core/Compatibility.cpp b/Core/Compatibility.cpp index db48c4f4c9..02a4abee90 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. @@ -85,5 +95,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 9340c36411..7499dcd9f4 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 @@ -102,4 +103,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 0a87026bf1..888c3c4aea 100644 --- a/Core/Config.cpp +++ b/Core/Config.cpp @@ -600,6 +600,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 9df0ad0ec8..8c989ce319 100644 --- a/Core/Config.h +++ b/Core/Config.h @@ -144,6 +144,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