From 4ce001aef3e3ce3f116cf08d307edaa9569a20f7 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sun, 23 Mar 2025 17:08:25 +1000 Subject: [PATCH] GameDatabase: Add DisableFullTrueColor trait --- data/resources/gamedb.yaml | 5 +++++ src/core/game_database.cpp | 28 +++++++++++++++++++--------- src/core/game_database.h | 1 + 3 files changed, 25 insertions(+), 9 deletions(-) diff --git a/data/resources/gamedb.yaml b/data/resources/gamedb.yaml index 42615f4e6..c8410d477 100644 --- a/data/resources/gamedb.yaml +++ b/data/resources/gamedb.yaml @@ -19400,6 +19400,7 @@ SLES-03552: traits: - ForceRecompilerICache - DisableWidescreen # Breaks sprite sizes. + - DisableFullTrueColor # Breaks menu background colour. metadata: publisher: "Capcom" developer: "Capcom" @@ -19425,6 +19426,7 @@ SLUS-01324: traits: - ForceRecompilerICache - DisableWidescreen # Breaks sprite sizes. + - DisableFullTrueColor # Breaks menu background colour. metadata: publisher: "Capcom" developer: "Capcom" @@ -19447,6 +19449,7 @@ SLPS-02728: traits: - ForceRecompilerICache - DisableWidescreen # Breaks sprite sizes. + - DisableFullTrueColor # Breaks menu background colour. codes: - SLPS-02728 - SLPM-87159 @@ -81489,6 +81492,8 @@ SLUS-01383: controllers: - AnalogController - DigitalController + traits: + - DisableFullTrueColor # Breaks loading screen background colour. metadata: publisher: "Knowledge Adventure" developer: "Digital Illusions CE, Canada" diff --git a/src/core/game_database.cpp b/src/core/game_database.cpp index 7838ea8f6..c7f008dde 100644 --- a/src/core/game_database.cpp +++ b/src/core/game_database.cpp @@ -40,7 +40,7 @@ namespace GameDatabase { enum : u32 { GAME_DATABASE_CACHE_SIGNATURE = 0x45434C48, - GAME_DATABASE_CACHE_VERSION = 23, + GAME_DATABASE_CACHE_VERSION = 24, }; static const Entry* GetEntryForId(std::string_view code); @@ -74,7 +74,7 @@ static constexpr const std::array(Compatibility TRANSLATE_DISAMBIG_NOOP("GameDatabase", "No Issues", "CompatibilityRating"), }}; -static constexpr const std::array(Trait::MaxCount)> s_trait_names = {{ +static constexpr const std::array s_trait_names = { "ForceInterpreter", "ForceSoftwareRenderer", "ForceSoftwareRendererForReadbacks", @@ -86,6 +86,7 @@ static constexpr const std::array(Trait::MaxCou "DisableAutoAnalogMode", "DisableMultitap", "DisableTrueColor", + "DisableFullTrueColor", "DisableUpscaling", "DisableTextureFiltering", "DisableSpriteTextureFiltering", @@ -103,9 +104,10 @@ static constexpr const std::array(Trait::MaxCou "ForceRecompilerICache", "ForceCDROMSubQSkew", "IsLibCryptProtected", -}}; +}; +static_assert(s_trait_names.size() == static_cast(Trait::MaxCount)); -static constexpr const std::array(Trait::MaxCount)> s_trait_display_names = {{ +static constexpr const std::array s_trait_display_names = { TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Force Interpreter", "GameDatabase::Trait"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Force Software Renderer", "GameDatabase::Trait"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Force Software Renderer For Readbacks", "GameDatabase::Trait"), @@ -117,6 +119,7 @@ static constexpr const std::array(Trait::MaxCou TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Disable Automatic Analog Mode", "GameDatabase::Trait"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Disable Multitap", "GameDatabase::Trait"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Disable True Color", "GameDatabase::Trait"), + TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Disable Full True Color", "GameDatabase::Trait"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Disable Upscaling", "GameDatabase::Trait"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Disable Texture Filtering", "GameDatabase::Trait"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Disable Sprite Texture Filtering", "GameDatabase::Trait"), @@ -134,13 +137,15 @@ static constexpr const std::array(Trait::MaxCou TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Force Recompiler ICache", "GameDatabase::Trait"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Force CD-ROM SubQ Skew", "GameDatabase::Trait"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Is LibCrypt Protected", "GameDatabase::Trait"), -}}; +}; +static_assert(s_trait_display_names.size() == static_cast(Trait::MaxCount)); -static constexpr std::array(Language::MaxCount)> s_language_names = {{ +static constexpr std::array s_language_names = { "Catalan", "Chinese", "Czech", "Danish", "Dutch", "English", "Finnish", "French", "German", "Greek", "Hebrew", "Iranian", "Italian", "Japanese", "Korean", "Norwegian", "Polish", "Portuguese", "Russian", "Spanish", "Swedish", "Turkish", -}}; +}; +static_assert(s_language_names.size() == static_cast(Language::MaxCount)); static constexpr const char* GAMEDB_YAML_FILENAME = "gamedb.yaml"; static constexpr const char* DISCDB_YAML_FILENAME = "discdb.yaml"; @@ -521,8 +526,9 @@ void GameDatabase::Entry::ApplySettings(Settings& settings, bool display_osd_mes } } - if (HasTrait(Trait::DisableTrueColor) || HasTrait(Trait::DisableScaledDithering) || - HasTrait(Trait::ForceShaderBlending) || HasTrait(Trait::ForceFullTrueColor)) + if (HasTrait(Trait::DisableTrueColor) || HasTrait(Trait::DisableFullTrueColor) || + HasTrait(Trait::DisableScaledDithering) || HasTrait(Trait::ForceShaderBlending) || + HasTrait(Trait::ForceFullTrueColor)) { // Note: The order these are applied matters. const GPUDitheringMode old_mode = settings.gpu_dithering_mode; @@ -545,6 +551,10 @@ void GameDatabase::Entry::ApplySettings(Settings& settings, bool display_osd_mes { settings.gpu_dithering_mode = GPUDitheringMode::TrueColorFull; } + if (HasTrait(Trait::DisableFullTrueColor) && settings.gpu_dithering_mode == GPUDitheringMode::TrueColorFull) + { + settings.gpu_dithering_mode = GPUDitheringMode::TrueColor; + } if (display_osd_messages && settings.gpu_dithering_mode != old_mode) { diff --git a/src/core/game_database.h b/src/core/game_database.h index c4133ca4e..9e626a4a2 100644 --- a/src/core/game_database.h +++ b/src/core/game_database.h @@ -44,6 +44,7 @@ enum class Trait : u32 DisableAutoAnalogMode, DisableMultitap, DisableTrueColor, + DisableFullTrueColor, DisableUpscaling, DisableTextureFiltering, DisableSpriteTextureFiltering,