From 8b4d9c3b74397599df8fcbab118ecab00f4081ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Henrik=20Rydg=C3=A5rd?= Date: Tue, 6 Oct 2026 19:08:29 -0600 Subject: [PATCH] Headless: Don't apply compat flags to frame dumps Headless replays frame dumps to compare them with references and with the PSP, which a game's workarounds skew: DarkStalkers' present hack (16510) replaces the game's final upscale, so the replay didn't match the PSP's. The app still applies them. Co-Authored-By: Claude Opus 5.5 (1M context) --- Core/Compatibility.h | 3 ++- Core/System.cpp | 8 +++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/Core/Compatibility.h b/Core/Compatibility.h index 3903cceed6..fc4b225b35 100644 --- a/Core/Compatibility.h +++ b/Core/Compatibility.h @@ -147,6 +147,8 @@ public: const VRCompat &vrCompat() const { return vrCompat_; } void Load(const std::string &gameID); + // No flags at all. + void Clear(); const std::string &GetActiveFlagsString() const { return activeList_; @@ -155,7 +157,6 @@ public: private: - void Clear(); void CheckSettings(IniFile &iniFile, const std::string &gameID); void CheckVRSettings(IniFile &iniFile, const std::string &gameID); void CheckSetting(IniFile &iniFile, const std::string &gameID, const char *option, bool *flag); diff --git a/Core/System.cpp b/Core/System.cpp index b4a3b7c476..9aed799bcd 100644 --- a/Core/System.cpp +++ b/Core/System.cpp @@ -498,7 +498,13 @@ static bool CPU_Init(FileLoader *fileLoader, IdentifiedFileType type, std::strin // Homebrew get fake disc IDs assigned to the global paramSFO, so they shouldn't clash with real games. std::string discId = g_paramSFO.GetDiscID(); - g_CoreParameter.compat.Load(discId); + if (type == IdentifiedFileType::PPSSPP_GE_DUMP && g_CoreParameter.headLess) { + // Headless replays frame dumps to compare them with references and with the PSP, which a game's + // workarounds would skew: DarkStalkers' present hack replaces the game's final upscale. + g_CoreParameter.compat.Clear(); + } else { + g_CoreParameter.compat.Load(discId); + } ShowCompatWarnings(g_CoreParameter.compat); // This must be before Memory::Init because plugins can override the memory size.