From ea7410ef8863dcd34649919d8d2c303aef00800f Mon Sep 17 00:00:00 2001 From: nyarw Date: Tue, 29 Sep 2026 21:18:37 +0200 Subject: [PATCH 1/4] fix: generate mipmaps for images and convert to rgba8 --- scripts/skinning/SkinManager.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/skinning/SkinManager.cs b/scripts/skinning/SkinManager.cs index 1c908f6c..71f75dbf 100644 --- a/scripts/skinning/SkinManager.cs +++ b/scripts/skinning/SkinManager.cs @@ -202,7 +202,13 @@ private static ImageTexture loadTexture(string skinPath) } var image = Image.LoadFromFile(fullPath); - return image != null ? ImageTexture.CreateFromImage(image) : null; + if (image == null) + return null; + + image.Convert(Image.Format.Rgba8); + image.GenerateMipmaps(); + + return ImageTexture.CreateFromImage(image); } private static byte[] loadSound(string skinPath) From 7076458012f4a80a1a2c01556d11af8f2628c01e Mon Sep 17 00:00:00 2001 From: nyarw Date: Tue, 29 Sep 2026 21:20:26 +0200 Subject: [PATCH 2/4] fix: smoothen the combo progress --- scripts/shaders/combo_progress.gdshader | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scripts/shaders/combo_progress.gdshader b/scripts/shaders/combo_progress.gdshader index 7ea92a88..1d019de7 100644 --- a/scripts/shaders/combo_progress.gdshader +++ b/scripts/shaders/combo_progress.gdshader @@ -29,9 +29,11 @@ void fragment() { vec2 middle = (points[a] + points[b]) / 2.0; float dotp = dot(normalize(point_diff), UV - middle); - if (abs(dotp) <= distance(point_diff, vec2(0.0, 0.0)) / 2.0 + thickness && distance(UV, middle + dotp * normalize(point_diff)) <= thickness / 256.0) - { - COLOR = vec4(background_colour.rgb, 1.0); + float dist_to_line = distance(UV, middle + dotp * normalize(point_diff)); + float line_alpha = smoothstep((thickness / 256.0) + fwidth(dist_to_line), (thickness / 256.0) - fwidth(dist_to_line), dist_to_line); + + if (abs(dotp) <= distance(point_diff, vec2(0.0, 0.0)) / 2.0 + thickness) { + COLOR = mix(COLOR, vec4(background_colour.rgb, 1.0), line_alpha); } if (frag_angle <= progress * 360.0) From 6a1920e3d2c7978267cb7e174cf8bb141cf006bd Mon Sep 17 00:00:00 2001 From: nyarw Date: Tue, 29 Sep 2026 22:10:47 +0200 Subject: [PATCH 3/4] fix: reset missing profile keys to their defaults on load --- scripts/database/settings/ISettingsItem.cs | 2 ++ scripts/database/settings/SettingsItem.cs | 2 ++ scripts/database/settings/SettingsProfileConverter.cs | 10 +++++++++- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/scripts/database/settings/ISettingsItem.cs b/scripts/database/settings/ISettingsItem.cs index ee28af13..8e834e74 100644 --- a/scripts/database/settings/ISettingsItem.cs +++ b/scripts/database/settings/ISettingsItem.cs @@ -10,6 +10,8 @@ public interface ISettingsItem void SetVariant(Variant variant); + void Reset(); + string Id { get; } Type Type { get; } diff --git a/scripts/database/settings/SettingsItem.cs b/scripts/database/settings/SettingsItem.cs index 6a1e456a..5abac12a 100644 --- a/scripts/database/settings/SettingsItem.cs +++ b/scripts/database/settings/SettingsItem.cs @@ -66,6 +66,8 @@ public void SetVariant(Variant value) Value = value.As(); } + public void Reset() => Value = DefaultValue; + public Action UpdateAction { get; set; } = null; public static implicit operator T(SettingsItem item) => item.Value; diff --git a/scripts/database/settings/SettingsProfileConverter.cs b/scripts/database/settings/SettingsProfileConverter.cs index 8a6c8d72..3452a972 100644 --- a/scripts/database/settings/SettingsProfileConverter.cs +++ b/scripts/database/settings/SettingsProfileConverter.cs @@ -49,10 +49,18 @@ public static void Deserialize(string path, SettingsProfile profile) { object value = property.GetValue(profile); - if (value is ISettingsItem item && item.SaveToDisk && data.ContainsKey(property.Name)) + if (value is not ISettingsItem { SaveToDisk: true } item) + { + continue; + } + if (data.ContainsKey(property.Name)) { item.SetVariant(data[property.Name]); } + else + { + item.Reset(); + } } } catch (Exception) From 2ee65b03973d664bfda6d7c775dc0ae8d4114757 Mon Sep 17 00:00:00 2001 From: nyarw Date: Tue, 29 Sep 2026 22:14:17 +0200 Subject: [PATCH 4/4] feat: MSAA anti-aliasing dropdown off by default --- scripts/database/settings/SettingsProfile.cs | 27 ++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/scripts/database/settings/SettingsProfile.cs b/scripts/database/settings/SettingsProfile.cs index a8c32855..d4a5eeb0 100644 --- a/scripts/database/settings/SettingsProfile.cs +++ b/scripts/database/settings/SettingsProfile.cs @@ -293,6 +293,12 @@ public partial class SettingsProfile [Order] public SettingsItem VSyncMenus { get; private set; } + /// + /// Sets the MSAA value in the viewport + /// + [Order] + public SettingsItem AntiAliasing { get; private set; } + #endregion #region Audio @@ -1047,6 +1053,27 @@ public SettingsProfile() }, }; + AntiAliasing = new("Off (roughest)") + { + Id = "AntiAliasing", + Title = "Anti Aliasing", + Description = "Smoothes edges, at the cost of performance", + Section = SettingsSection.Video, + UpdateAction = (value, _) => + { + var root = (Engine.GetMainLoop() as SceneTree)?.Root; + root?.Msaa3D = value switch + { + "Off (roughest)" => Viewport.Msaa.Disabled, + "2x (rough)" => Viewport.Msaa.Msaa2X, + "4x (smooth)" => Viewport.Msaa.Msaa4X, + "8x (smoothest)" => Viewport.Msaa.Msaa8X, + _ => Viewport.Msaa.Disabled, + }; + }, + List = new("Off (roughest)") { Values = ["Off (roughest)", "2x (rough)", "4x (smooth)", "8x (smoothest)"] }, + }; + #endregion #region Audio