From b98ca273010e332517a1e0fe804fa663bcfea7e9 Mon Sep 17 00:00:00 2001 From: JPikachu Date: Mon, 16 Feb 2026 23:58:44 +0000 Subject: [PATCH] [settings] Fix resolution enum for UltraCam When 0.25x (Res1_4X) was added all the resolutions were shifted. This broke UltraCam expecting Res1X at index 2 when it was instead at index 3, Causing a bug where UltraCam would use 0.75x instead of 1x. NOTE: Current users need to readjust resolution settings. Credit: MaxLastBreath - Adressing the issue. Zephyron - Originally fixing the bug in Citron. --- src/common/settings_enums.h | 20 +++++++++++++++++++- src/common/settings_setting.h | 2 +- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/common/settings_enums.h b/src/common/settings_enums.h index d4935d9b6d..b16e8bbdf7 100644 --- a/src/common/settings_enums.h +++ b/src/common/settings_enums.h @@ -142,7 +142,25 @@ ENUM(MemoryLayout, Memory_4Gb, Memory_6Gb, Memory_8Gb, Memory_10Gb, Memory_12Gb) ENUM(ConfirmStop, Ask_Always, Ask_Based_On_Game, Ask_Never); ENUM(FullscreenMode, Borderless, Exclusive); ENUM(NvdecEmulation, Off, Cpu, Gpu); -ENUM(ResolutionSetup, Res1_4X, Res1_2X, Res3_4X, Res1X, Res5_4X, Res3_2X, Res2X, Res3X, Res4X, Res5X, Res6X, Res7X, Res8X); +// Res1X MUST stay at index 2 to maintain compatibility with various mods. +enum class ResolutionSetup : s32 { + Res1_4X = -1, Res1_2X = 0, Res3_4X = 1, + Res1X = 2, Res5_4X = 3, Res3_2X = 4, + Res2X = 5, Res3X = 6, Res4X = 7, + Res5X = 8, Res6X = 9, Res7X = 10, + Res8X = 11 }; +template<> inline std::vector> EnumMetadata::Canonicalizations() { + return { + {"Res1_4X", ResolutionSetup::Res1_4X}, {"Res1_2X", ResolutionSetup::Res1_2X}, {"Res3_4X", ResolutionSetup::Res3_4X}, + {"Res1X", ResolutionSetup::Res1X}, {"Res5_4X", ResolutionSetup::Res5_4X}, {"Res3_2X", ResolutionSetup::Res3_2X}, + {"Res2X", ResolutionSetup::Res2X}, {"Res3X", ResolutionSetup::Res3X}, {"Res4X", ResolutionSetup::Res4X}, + {"Res5X", ResolutionSetup::Res5X}, {"Res6X", ResolutionSetup::Res6X}, {"Res7X", ResolutionSetup::Res7X}, + {"Res8X", ResolutionSetup::Res8X} + }; +} +template<> inline u32 EnumMetadata::Index() { return 19; } +template<> inline ResolutionSetup EnumMetadata::GetFirst() { return ResolutionSetup::Res1_4X; } +template<> inline ResolutionSetup EnumMetadata::GetLast() { return ResolutionSetup::Res8X; } ENUM(ScalingFilter, NearestNeighbor, Bilinear, Bicubic, Gaussian, Lanczos, ScaleForce, Fsr, Area, ZeroTangent, BSpline, Mitchell, Spline1, Mmpx, MaxEnum); ENUM(AntiAliasing, None, Fxaa, Smaa, MaxEnum); ENUM(AspectRatio, R16_9, R4_3, R21_9, R16_10, Stretch); diff --git a/src/common/settings_setting.h b/src/common/settings_setting.h index 9af2cebde0..470625382f 100644 --- a/src/common/settings_setting.h +++ b/src/common/settings_setting.h @@ -129,7 +129,7 @@ protected: } else if constexpr (std::is_floating_point_v) { return fmt::format("{:f}", value_); } else if constexpr (std::is_enum_v) { - return std::to_string(u32(value_)); + return std::to_string(static_cast>(value_)); } else { return std::to_string(value_); }