diff --git a/Data/Sys/GameSettings/RSO.ini b/Data/Sys/GameSettings/RSO.ini new file mode 100644 index 0000000000..ce45e11f6f --- /dev/null +++ b/Data/Sys/GameSettings/RSO.ini @@ -0,0 +1,17 @@ +# RSOE4Z, RSOP4Z - Solitaire & Mahjong + +[Core] +# Values set here will override the main Dolphin settings. + +[OnLoad] +# Add memory patches to be loaded once on boot here. + +[OnFrame] +# Add memory patches to be applied every frame here. + +[ActionReplay] +# Add action replay cheats here. + +[Video_Hacks] +BBoxEnable = True +ImmediateXFBEnable = False diff --git a/Source/Core/Core/DolphinAnalytics.cpp b/Source/Core/Core/DolphinAnalytics.cpp index b999b55e2a..4edb936343 100644 --- a/Source/Core/Core/DolphinAnalytics.cpp +++ b/Source/Core/Core/DolphinAnalytics.cpp @@ -136,7 +136,7 @@ void DolphinAnalytics::ReportGameStart() } // Keep in sync with enum class GameQuirk definition. -constexpr std::array GAME_QUIRKS_NAMES{ +constexpr std::array GAME_QUIRKS_NAMES{ "directly-reads-wiimote-input", "uses-DVDLowStopLaser", "uses-DVDLowOffset", @@ -164,6 +164,7 @@ constexpr std::array GAME_QUIRKS_NAMES{ "mismatched-gpu-normals-between-cp-and-xf", "mismatched-gpu-tex-coords-between-cp-and-xf", "mismatched-gpu-matrix-indices-between-cp-and-xf", + "reads-bounding-box", }; static_assert(GAME_QUIRKS_NAMES.size() == static_cast(GameQuirk::COUNT), "Game quirks names and enum definition are out of sync."); diff --git a/Source/Core/Core/DolphinAnalytics.h b/Source/Core/Core/DolphinAnalytics.h index 98c7d4a973..76e69f49c2 100644 --- a/Source/Core/Core/DolphinAnalytics.h +++ b/Source/Core/Core/DolphinAnalytics.h @@ -89,6 +89,11 @@ enum class GameQuirk // but testing is needed to find out which of these is actually used for what. MISMATCHED_GPU_MATRIX_INDICES_BETWEEN_CP_AND_XF, + // Only a few games use the Bounding Box feature. Note that every game initializes the bounding + // box registers (using BPMEM_CLEARBBOX1/BPMEM_CLEARBBOX2) on startup, as part of the SDK, but + // only a few read them (from PE_BBOX_LEFT etc.) + READS_BOUNDING_BOX, + COUNT, }; diff --git a/Source/Core/VideoCommon/VideoBackendBase.cpp b/Source/Core/VideoCommon/VideoBackendBase.cpp index b6f4fee2f3..9d6ff70664 100644 --- a/Source/Core/VideoCommon/VideoBackendBase.cpp +++ b/Source/Core/VideoCommon/VideoBackendBase.cpp @@ -20,6 +20,7 @@ #include "Core/Config/MainSettings.h" #include "Core/ConfigManager.h" #include "Core/Core.h" +#include "Core/DolphinAnalytics.h" #include "Core/System.h" // TODO: ugly @@ -171,6 +172,8 @@ u32 VideoBackendBase::Video_GetQueryResult(PerfQueryType type) u16 VideoBackendBase::Video_GetBoundingBox(int index) { + DolphinAnalytics::Instance().ReportGameQuirk(GameQuirk::READS_BOUNDING_BOX); + if (!g_ActiveConfig.bBBoxEnable) { static bool warn_once = true;