GameDatabase: Add DisableFullTrueColor trait

This commit is contained in:
Stenzek 2025-03-23 17:08:25 +10:00
parent 1fca8ae6bf
commit 4ce001aef3
No known key found for this signature in database
3 changed files with 25 additions and 9 deletions

View File

@ -19400,6 +19400,7 @@ SLES-03552:
traits: traits:
- ForceRecompilerICache - ForceRecompilerICache
- DisableWidescreen # Breaks sprite sizes. - DisableWidescreen # Breaks sprite sizes.
- DisableFullTrueColor # Breaks menu background colour.
metadata: metadata:
publisher: "Capcom" publisher: "Capcom"
developer: "Capcom" developer: "Capcom"
@ -19425,6 +19426,7 @@ SLUS-01324:
traits: traits:
- ForceRecompilerICache - ForceRecompilerICache
- DisableWidescreen # Breaks sprite sizes. - DisableWidescreen # Breaks sprite sizes.
- DisableFullTrueColor # Breaks menu background colour.
metadata: metadata:
publisher: "Capcom" publisher: "Capcom"
developer: "Capcom" developer: "Capcom"
@ -19447,6 +19449,7 @@ SLPS-02728:
traits: traits:
- ForceRecompilerICache - ForceRecompilerICache
- DisableWidescreen # Breaks sprite sizes. - DisableWidescreen # Breaks sprite sizes.
- DisableFullTrueColor # Breaks menu background colour.
codes: codes:
- SLPS-02728 - SLPS-02728
- SLPM-87159 - SLPM-87159
@ -81489,6 +81492,8 @@ SLUS-01383:
controllers: controllers:
- AnalogController - AnalogController
- DigitalController - DigitalController
traits:
- DisableFullTrueColor # Breaks loading screen background colour.
metadata: metadata:
publisher: "Knowledge Adventure" publisher: "Knowledge Adventure"
developer: "Digital Illusions CE, Canada" developer: "Digital Illusions CE, Canada"

View File

@ -40,7 +40,7 @@ namespace GameDatabase {
enum : u32 enum : u32
{ {
GAME_DATABASE_CACHE_SIGNATURE = 0x45434C48, GAME_DATABASE_CACHE_SIGNATURE = 0x45434C48,
GAME_DATABASE_CACHE_VERSION = 23, GAME_DATABASE_CACHE_VERSION = 24,
}; };
static const Entry* GetEntryForId(std::string_view code); static const Entry* GetEntryForId(std::string_view code);
@ -74,7 +74,7 @@ static constexpr const std::array<const char*, static_cast<size_t>(Compatibility
TRANSLATE_DISAMBIG_NOOP("GameDatabase", "No Issues", "CompatibilityRating"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "No Issues", "CompatibilityRating"),
}}; }};
static constexpr const std::array<const char*, static_cast<size_t>(Trait::MaxCount)> s_trait_names = {{ static constexpr const std::array s_trait_names = {
"ForceInterpreter", "ForceInterpreter",
"ForceSoftwareRenderer", "ForceSoftwareRenderer",
"ForceSoftwareRendererForReadbacks", "ForceSoftwareRendererForReadbacks",
@ -86,6 +86,7 @@ static constexpr const std::array<const char*, static_cast<size_t>(Trait::MaxCou
"DisableAutoAnalogMode", "DisableAutoAnalogMode",
"DisableMultitap", "DisableMultitap",
"DisableTrueColor", "DisableTrueColor",
"DisableFullTrueColor",
"DisableUpscaling", "DisableUpscaling",
"DisableTextureFiltering", "DisableTextureFiltering",
"DisableSpriteTextureFiltering", "DisableSpriteTextureFiltering",
@ -103,9 +104,10 @@ static constexpr const std::array<const char*, static_cast<size_t>(Trait::MaxCou
"ForceRecompilerICache", "ForceRecompilerICache",
"ForceCDROMSubQSkew", "ForceCDROMSubQSkew",
"IsLibCryptProtected", "IsLibCryptProtected",
}}; };
static_assert(s_trait_names.size() == static_cast<size_t>(Trait::MaxCount));
static constexpr const std::array<const char*, static_cast<size_t>(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 Interpreter", "GameDatabase::Trait"),
TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Force Software Renderer", "GameDatabase::Trait"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Force Software Renderer", "GameDatabase::Trait"),
TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Force Software Renderer For Readbacks", "GameDatabase::Trait"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Force Software Renderer For Readbacks", "GameDatabase::Trait"),
@ -117,6 +119,7 @@ static constexpr const std::array<const char*, static_cast<size_t>(Trait::MaxCou
TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Disable Automatic Analog Mode", "GameDatabase::Trait"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Disable Automatic Analog Mode", "GameDatabase::Trait"),
TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Disable Multitap", "GameDatabase::Trait"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Disable Multitap", "GameDatabase::Trait"),
TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Disable True Color", "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 Upscaling", "GameDatabase::Trait"),
TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Disable Texture Filtering", "GameDatabase::Trait"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Disable Texture Filtering", "GameDatabase::Trait"),
TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Disable Sprite Texture Filtering", "GameDatabase::Trait"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Disable Sprite Texture Filtering", "GameDatabase::Trait"),
@ -134,13 +137,15 @@ static constexpr const std::array<const char*, static_cast<size_t>(Trait::MaxCou
TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Force Recompiler ICache", "GameDatabase::Trait"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Force Recompiler ICache", "GameDatabase::Trait"),
TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Force CD-ROM SubQ Skew", "GameDatabase::Trait"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Force CD-ROM SubQ Skew", "GameDatabase::Trait"),
TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Is LibCrypt Protected", "GameDatabase::Trait"), TRANSLATE_DISAMBIG_NOOP("GameDatabase", "Is LibCrypt Protected", "GameDatabase::Trait"),
}}; };
static_assert(s_trait_display_names.size() == static_cast<size_t>(Trait::MaxCount));
static constexpr std::array<const char*, static_cast<size_t>(Language::MaxCount)> s_language_names = {{ static constexpr std::array s_language_names = {
"Catalan", "Chinese", "Czech", "Danish", "Dutch", "English", "Finnish", "French", "Catalan", "Chinese", "Czech", "Danish", "Dutch", "English", "Finnish", "French",
"German", "Greek", "Hebrew", "Iranian", "Italian", "Japanese", "Korean", "Norwegian", "German", "Greek", "Hebrew", "Iranian", "Italian", "Japanese", "Korean", "Norwegian",
"Polish", "Portuguese", "Russian", "Spanish", "Swedish", "Turkish", "Polish", "Portuguese", "Russian", "Spanish", "Swedish", "Turkish",
}}; };
static_assert(s_language_names.size() == static_cast<size_t>(Language::MaxCount));
static constexpr const char* GAMEDB_YAML_FILENAME = "gamedb.yaml"; static constexpr const char* GAMEDB_YAML_FILENAME = "gamedb.yaml";
static constexpr const char* DISCDB_YAML_FILENAME = "discdb.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) || if (HasTrait(Trait::DisableTrueColor) || HasTrait(Trait::DisableFullTrueColor) ||
HasTrait(Trait::ForceShaderBlending) || HasTrait(Trait::ForceFullTrueColor)) HasTrait(Trait::DisableScaledDithering) || HasTrait(Trait::ForceShaderBlending) ||
HasTrait(Trait::ForceFullTrueColor))
{ {
// Note: The order these are applied matters. // Note: The order these are applied matters.
const GPUDitheringMode old_mode = settings.gpu_dithering_mode; 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; 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) if (display_osd_messages && settings.gpu_dithering_mode != old_mode)
{ {

View File

@ -44,6 +44,7 @@ enum class Trait : u32
DisableAutoAnalogMode, DisableAutoAnalogMode,
DisableMultitap, DisableMultitap,
DisableTrueColor, DisableTrueColor,
DisableFullTrueColor,
DisableUpscaling, DisableUpscaling,
DisableTextureFiltering, DisableTextureFiltering,
DisableSpriteTextureFiltering, DisableSpriteTextureFiltering,