From f17ba0d172bc52bd5bd41f17a307d321a9e1b133 Mon Sep 17 00:00:00 2001 From: Birbattac Date: Wed, 14 Oct 2026 21:19:05 -0400 Subject: [PATCH 1/7] added custom space color setting --- scripts/database/settings/SettingsProfile.cs | 25 ++++++++++++++++++++ scripts/game/Attempt.cs | 2 -- scripts/spaces/BaseSpace.cs | 10 ++++++-- scripts/spaces/Solid.cs | 7 +++++- scripts/spaces/Squircles.cs | 6 ++++- scripts/ui/SettingsMenu.cs | 3 +++ 6 files changed, 47 insertions(+), 6 deletions(-) diff --git a/scripts/database/settings/SettingsProfile.cs b/scripts/database/settings/SettingsProfile.cs index f20d31a2..4eb28344 100644 --- a/scripts/database/settings/SettingsProfile.cs +++ b/scripts/database/settings/SettingsProfile.cs @@ -120,6 +120,12 @@ public partial class SettingsProfile [Order] public SettingsItem GameSpace { get; private set; } + /// + /// Sets the default color of the space + /// + [Order] + public SettingsItem SpaceColor { get; private set; } + /// /// Toggles note hit effects for the game space /// @@ -742,6 +748,25 @@ public SettingsProfile() }, }; + SpaceColor = new("") + { + Id = "SpaceColor", + Title = "Space Color", + Description = "Changes the color of the space (only when space hit effects is off)", + Placeholder = "Colorset", + Section = SettingsSection.Spaces, + UpdateAction = (_, init) => + { + if (!init) + { + if (SpaceColor.Value != "Colorset" && (!SpaceColor.Value.IsValidHtmlColor() || SpaceColor.Value.Length != 6)) + { + SpaceColor.Value = "Colorset"; + } + } + }, + }; + SpaceHitEffects = new(true) { Id = "SpaceHitEffects", diff --git a/scripts/game/Attempt.cs b/scripts/game/Attempt.cs index 7aa32df0..0d8c28fd 100644 --- a/scripts/game/Attempt.cs +++ b/scripts/game/Attempt.cs @@ -118,7 +118,5 @@ public Attempt( var skin = SkinManager.Instance.Skin; int index = (int)(FirstNote - 1) % skin.NoteColors.Length; - - LastHitColour = skin.NoteColors[index >= 0 ? index : ^Math.Abs(index)]; } } diff --git a/scripts/spaces/BaseSpace.cs b/scripts/spaces/BaseSpace.cs index 5d7223f4..fba8008d 100644 --- a/scripts/spaces/BaseSpace.cs +++ b/scripts/spaces/BaseSpace.cs @@ -59,8 +59,14 @@ public virtual void OnHit(uint combo) { } public virtual void Load() { var skin = SkinManager.Instance.Skin; - - NoteHitColor = skin.NoteColors[^1]; + if (SettingsManager.Instance.Settings.SpaceColor.Value != "Colorset" && !SettingsManager.Instance.Settings.SpaceHitEffects) + { + NoteHitColor = Util.Misc.ParseColor(SettingsManager.Instance.Settings.SpaceColor.Value, Colors.Black); + } + else + { + NoteHitColor = skin.NoteColors[^1]; + } } public virtual void UpdateMap(Map map) diff --git a/scripts/spaces/Solid.cs b/scripts/spaces/Solid.cs index 2b41819f..85d3da75 100644 --- a/scripts/spaces/Solid.cs +++ b/scripts/spaces/Solid.cs @@ -73,7 +73,12 @@ public override void UpdateMap(Map map) private void updateColor(Color color) { - var darkened = color.Darkened(0.9f); + var darkened = color.Darkened(0); + if (!Playing || SettingsManager.Instance.Settings.SpaceColor.Value == "Colorset" || SettingsManager.Instance.Settings.SpaceHitEffects) + { + darkened = color.Darkened(0.9f); + } + WorldEnvironment.Environment.BackgroundColor = Playing ? darkened : (Cover != null ? darkened : defaultEnvironmentColor); } diff --git a/scripts/spaces/Squircles.cs b/scripts/spaces/Squircles.cs index 13c25c4f..951580a3 100644 --- a/scripts/spaces/Squircles.cs +++ b/scripts/spaces/Squircles.cs @@ -81,7 +81,11 @@ public override void UpdateMap(Map map) private void updateColor(Color color) { - Color darkened = color.Darkened(0.9f); + var darkened = color.Darkened(0); + if (!Playing || SettingsManager.Instance.Settings.SpaceColor.Value == "Colorset" || SettingsManager.Instance.Settings.SpaceHitEffects) + { + darkened = color.Darkened(0.9f); + } WorldEnvironment.Environment.BackgroundColor = Playing ? darkened : (Cover != null ? darkened : defaultEnvironmentColor); particlesNear.Color = color.Lightened(0.1f); diff --git a/scripts/ui/SettingsMenu.cs b/scripts/ui/SettingsMenu.cs index ddc91b4e..4f59d962 100644 --- a/scripts/ui/SettingsMenu.cs +++ b/scripts/ui/SettingsMenu.cs @@ -420,6 +420,9 @@ void applyLineEdit() } } + Logger.Log(setting.Id); + Logger.Log(setting.Placeholder); + if (setting.Placeholder != "") { lineEdit.PlaceholderText = setting.Placeholder; From fa5738e4ea6e96b7cf5be3291e840d99f25ec66d Mon Sep 17 00:00:00 2001 From: Birbattac Date: Wed, 14 Oct 2026 21:21:14 -0400 Subject: [PATCH 2/7] removed some logs --- scripts/ui/SettingsMenu.cs | 3 --- 1 file changed, 3 deletions(-) diff --git a/scripts/ui/SettingsMenu.cs b/scripts/ui/SettingsMenu.cs index 4f59d962..ddc91b4e 100644 --- a/scripts/ui/SettingsMenu.cs +++ b/scripts/ui/SettingsMenu.cs @@ -420,9 +420,6 @@ void applyLineEdit() } } - Logger.Log(setting.Id); - Logger.Log(setting.Placeholder); - if (setting.Placeholder != "") { lineEdit.PlaceholderText = setting.Placeholder; From 7bd60f4d5694292f0f818477ecbe7ef7b3a7b82a Mon Sep 17 00:00:00 2001 From: Birbattac Date: Wed, 14 Oct 2026 21:33:46 -0400 Subject: [PATCH 3/7] formatted + csharpier --- scenes/main.tscn | 1 - scripts/spaces/Solid.cs | 1 - 2 files changed, 2 deletions(-) diff --git a/scenes/main.tscn b/scenes/main.tscn index 02c331f3..2ecef339 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -200,7 +200,6 @@ offset_bottom = -8.0 theme_override_styles/panel = SubResource("StyleBoxEmpty_l24nh") [node name="CategoryTemplate" type="ScrollContainer" parent="Settings/Holder/Categories" unique_id=1591103492] -visible = false layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 diff --git a/scripts/spaces/Solid.cs b/scripts/spaces/Solid.cs index 85d3da75..1682a9ea 100644 --- a/scripts/spaces/Solid.cs +++ b/scripts/spaces/Solid.cs @@ -79,7 +79,6 @@ private void updateColor(Color color) darkened = color.Darkened(0.9f); } - WorldEnvironment.Environment.BackgroundColor = Playing ? darkened : (Cover != null ? darkened : defaultEnvironmentColor); } } From f16699d0f8c3b874d811ffc10d3fb90f9da9ee9b Mon Sep 17 00:00:00 2001 From: Birbattac Date: Mon, 19 Oct 2026 15:13:42 -0400 Subject: [PATCH 4/7] Simplified a few conditionals, disabled settings template, and added functionality for more spaces --- scenes/main.tscn | 2 +- scripts/game/Attempt.cs | 9 +++++++++ scripts/spaces/BaseSpace.cs | 2 ++ scripts/spaces/Solid.cs | 2 +- scripts/spaces/Squircles.cs | 2 +- scripts/spaces/TriTunnel.cs | 9 ++++++++- scripts/spaces/Vortex.cs | 4 ++++ 7 files changed, 26 insertions(+), 4 deletions(-) diff --git a/scenes/main.tscn b/scenes/main.tscn index 2ecef339..728d142e 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -132,7 +132,6 @@ size = Vector2i(1280, 720) render_target_update_mode = 4 [node name="Settings" type="ColorRect" parent="." unique_id=1393582030 node_paths=PackedStringArray("ImportNightlyDialog", "UserFolderDialog")] -visible = false z_index = 1 anchors_preset = 15 anchor_right = 1.0 @@ -200,6 +199,7 @@ offset_bottom = -8.0 theme_override_styles/panel = SubResource("StyleBoxEmpty_l24nh") [node name="CategoryTemplate" type="ScrollContainer" parent="Settings/Holder/Categories" unique_id=1591103492] +visible = false layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 diff --git a/scripts/game/Attempt.cs b/scripts/game/Attempt.cs index 0d8c28fd..037f1067 100644 --- a/scripts/game/Attempt.cs +++ b/scripts/game/Attempt.cs @@ -118,5 +118,14 @@ public Attempt( var skin = SkinManager.Instance.Skin; int index = (int)(FirstNote - 1) % skin.NoteColors.Length; + + if (Settings.SpaceColor.Value != "Colorset" && !Settings.SpaceHitEffects) + { + LastHitColour = Util.Misc.ParseColor(SettingsManager.Instance.Settings.SpaceColor.Value, Colors.Black); + } + else + { + LastHitColour = skin.NoteColors[^1]; + } } } diff --git a/scripts/spaces/BaseSpace.cs b/scripts/spaces/BaseSpace.cs index fba8008d..8db5fd96 100644 --- a/scripts/spaces/BaseSpace.cs +++ b/scripts/spaces/BaseSpace.cs @@ -9,6 +9,7 @@ public partial class BaseSpace : Node3D public WorldEnvironment WorldEnvironment; public ImageTexture Cover; public Color NoteHitColor = new(0xffffffff); + public bool CustomColor; public override void _Ready() { @@ -61,6 +62,7 @@ public virtual void Load() var skin = SkinManager.Instance.Skin; if (SettingsManager.Instance.Settings.SpaceColor.Value != "Colorset" && !SettingsManager.Instance.Settings.SpaceHitEffects) { + CustomColor = true; NoteHitColor = Util.Misc.ParseColor(SettingsManager.Instance.Settings.SpaceColor.Value, Colors.Black); } else diff --git a/scripts/spaces/Solid.cs b/scripts/spaces/Solid.cs index 1682a9ea..b1d6bef7 100644 --- a/scripts/spaces/Solid.cs +++ b/scripts/spaces/Solid.cs @@ -74,7 +74,7 @@ public override void UpdateMap(Map map) private void updateColor(Color color) { var darkened = color.Darkened(0); - if (!Playing || SettingsManager.Instance.Settings.SpaceColor.Value == "Colorset" || SettingsManager.Instance.Settings.SpaceHitEffects) + if (!Playing || !CustomColor) { darkened = color.Darkened(0.9f); } diff --git a/scripts/spaces/Squircles.cs b/scripts/spaces/Squircles.cs index 951580a3..b53652f5 100644 --- a/scripts/spaces/Squircles.cs +++ b/scripts/spaces/Squircles.cs @@ -82,7 +82,7 @@ public override void UpdateMap(Map map) private void updateColor(Color color) { var darkened = color.Darkened(0); - if (!Playing || SettingsManager.Instance.Settings.SpaceColor.Value == "Colorset" || SettingsManager.Instance.Settings.SpaceHitEffects) + if (!Playing || !CustomColor) { darkened = color.Darkened(0.9f); } diff --git a/scripts/spaces/TriTunnel.cs b/scripts/spaces/TriTunnel.cs index 42bec7bb..33b01b09 100644 --- a/scripts/spaces/TriTunnel.cs +++ b/scripts/spaces/TriTunnel.cs @@ -37,6 +37,13 @@ public override void _Process(double delta) } // Hit VFX - tunnelTexture.AlbedoColor = settings.SpaceHitEffects ? NoteHitColor : tunnelColor; + if (settings.SpaceHitEffects || CustomColor) + { + tunnelTexture.AlbedoColor = NoteHitColor; + } + else + { + tunnelTexture.AlbedoColor = tunnelColor; + } } } diff --git a/scripts/spaces/Vortex.cs b/scripts/spaces/Vortex.cs index 8811433f..1b4a1b3e 100644 --- a/scripts/spaces/Vortex.cs +++ b/scripts/spaces/Vortex.cs @@ -78,6 +78,10 @@ public override void _Process(double delta) { color = squircleMaterials[i].AlbedoColor.Lerp(lastHitColors[i], Math.Min(1, (float)delta * 6)); } + else if (CustomColor) + { + color = NoteHitColor; + } squircleMaterials[i].AlbedoColor = color; } From ed8aa2f7be230c644638b1b3601bf21c2a4f770f Mon Sep 17 00:00:00 2001 From: Birbattac Date: Mon, 19 Oct 2026 18:22:49 -0400 Subject: [PATCH 5/7] switched the space color setting to use a godot color picker and added a custom space color bool to toggle on and off --- scenes/main.tscn | 38 +++++++++++++++++++ scripts/database/settings/SettingsProfile.cs | 33 ++++++++++++---- .../settings/SettingsProfileConverter.cs | 3 ++ scripts/game/Attempt.cs | 5 ++- scripts/spaces/BaseSpace.cs | 13 +++++-- scripts/ui/SettingsMenu.cs | 33 +++++++++++++++- 6 files changed, 111 insertions(+), 14 deletions(-) diff --git a/scenes/main.tscn b/scenes/main.tscn index 728d142e..9609aac6 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -326,6 +326,44 @@ theme = ExtResource("3_tipki") theme_override_colors/font_color = Color(1, 1, 1, 1) text = "Button" +[node name="ColorButton" type="Button" parent="Settings/Holder/Categories/CategoryTemplate/Container/SettingTemplate" unique_id=84045289] +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.8 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = 8.0 +offset_top = 4.0 +offset_bottom = -4.0 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_stretch_ratio = 0.0 +theme_override_font_sizes/font_size = 12 +text = "Pick Color" +clip_text = true + +[node name="ColorPicker" type="ColorPicker" parent="Settings/Holder/Categories/CategoryTemplate/Container/SettingTemplate" unique_id=1549088178] +visible = false +top_level = true +z_index = 1 +layout_mode = 1 +anchors_preset = -1 +anchor_left = 0.553 +anchor_top = 0.33 +anchor_right = 0.67 +anchor_bottom = 0.362 +offset_right = 70.0 +offset_bottom = 422.0 +grow_horizontal = 0 +grow_vertical = 2 +scale = Vector2(0.75, 0.75) +mouse_filter = 0 +edit_alpha = false +edit_intensity = false +deferred_mode = true +color_modes_visible = false +presets_visible = false + [node name="Sidebar" type="ScrollContainer" parent="Settings/Holder" unique_id=1655790017] layout_mode = 1 anchors_preset = -1 diff --git a/scripts/database/settings/SettingsProfile.cs b/scripts/database/settings/SettingsProfile.cs index 4eb28344..ff6ad209 100644 --- a/scripts/database/settings/SettingsProfile.cs +++ b/scripts/database/settings/SettingsProfile.cs @@ -124,7 +124,13 @@ public partial class SettingsProfile /// Sets the default color of the space /// [Order] - public SettingsItem SpaceColor { get; private set; } + public SettingsItem SpaceColor { get; private set; } + + /// + /// Toggles the use of a custom color + /// + [Order] + public SettingsItem CustomSpaceColor { get; private set; } /// /// Toggles note hit effects for the game space @@ -748,21 +754,25 @@ public SettingsProfile() }, }; - SpaceColor = new("") + SpaceColor = new(Color.Color8(0,0,0,0)) { Id = "SpaceColor", Title = "Space Color", Description = "Changes the color of the space (only when space hit effects is off)", - Placeholder = "Colorset", + Section = SettingsSection.Spaces, + }; + + CustomSpaceColor = new(false) + { + Id = "CustomSpaceColor", + Title = "Custom Space Color", + Description = "Toggles the use of a custom space color", Section = SettingsSection.Spaces, UpdateAction = (_, init) => { - if (!init) + if ((bool)CustomSpaceColor.GetVariant()) { - if (SpaceColor.Value != "Colorset" && (!SpaceColor.Value.IsValidHtmlColor() || SpaceColor.Value.Length != 6)) - { - SpaceColor.Value = "Colorset"; - } + SpaceHitEffects.SetVariant(false); } }, }; @@ -773,6 +783,13 @@ public SettingsProfile() Title = "Space Hit Effects", Description = "Toggles note hit effects for the game space", Section = SettingsSection.Spaces, + UpdateAction = (_, init) => + { + if ((bool)SpaceHitEffects.GetVariant()) + { + CustomSpaceColor.SetVariant(false); + } + }, }; SpaceEffects = new(true) diff --git a/scripts/database/settings/SettingsProfileConverter.cs b/scripts/database/settings/SettingsProfileConverter.cs index 3452a972..755e9382 100644 --- a/scripts/database/settings/SettingsProfileConverter.cs +++ b/scripts/database/settings/SettingsProfileConverter.cs @@ -29,6 +29,9 @@ public static string Serialize(SettingsProfile profile) case Variant.Type.Float: data[property.Name] = Math.Round((float)value, 4); break; + case Variant.Type.Color: + data[property.Name] = value.AsColor().ToHtml(); + break; default: data[property.Name] = value; break; diff --git a/scripts/game/Attempt.cs b/scripts/game/Attempt.cs index 037f1067..5bed1f96 100644 --- a/scripts/game/Attempt.cs +++ b/scripts/game/Attempt.cs @@ -119,13 +119,14 @@ public Attempt( var skin = SkinManager.Instance.Skin; int index = (int)(FirstNote - 1) % skin.NoteColors.Length; - if (Settings.SpaceColor.Value != "Colorset" && !Settings.SpaceHitEffects) + if (Settings.CustomSpaceColor) { - LastHitColour = Util.Misc.ParseColor(SettingsManager.Instance.Settings.SpaceColor.Value, Colors.Black); + LastHitColour = Settings.SpaceColor; } else { LastHitColour = skin.NoteColors[^1]; } + LastHitColour = skin.NoteColors[^1]; } } diff --git a/scripts/spaces/BaseSpace.cs b/scripts/spaces/BaseSpace.cs index 8db5fd96..16c763dc 100644 --- a/scripts/spaces/BaseSpace.cs +++ b/scripts/spaces/BaseSpace.cs @@ -46,13 +46,21 @@ public override void _Process(double delta) { base._Process(delta); + CustomColor = SettingsManager.Instance.Settings.CustomSpaceColor; + if (Playing) { if (SettingsManager.Instance.Settings.SpaceHitEffects) { NoteHitColor = NoteHitColor.Lerp(Game.Attempt.LastHitColour, Math.Min(1, (float)delta * 8)); } + else if (CustomColor) + { + NoteHitColor = (Color)SettingsManager.Instance.Settings.SpaceColor.GetVariant(); + } } + + } public virtual void OnHit(uint combo) { } @@ -60,10 +68,9 @@ public virtual void OnHit(uint combo) { } public virtual void Load() { var skin = SkinManager.Instance.Skin; - if (SettingsManager.Instance.Settings.SpaceColor.Value != "Colorset" && !SettingsManager.Instance.Settings.SpaceHitEffects) + if (CustomColor) { - CustomColor = true; - NoteHitColor = Util.Misc.ParseColor(SettingsManager.Instance.Settings.SpaceColor.Value, Colors.Black); + NoteHitColor = (Color)SettingsManager.Instance.Settings.SpaceColor.GetVariant(); } else { diff --git a/scripts/ui/SettingsMenu.cs b/scripts/ui/SettingsMenu.cs index ddc91b4e..96419487 100644 --- a/scripts/ui/SettingsMenu.cs +++ b/scripts/ui/SettingsMenu.cs @@ -88,6 +88,8 @@ public override void _Ready() OptionButton optionButtonTemplate = settingTemplate.GetNode("OptionButton"); HBoxContainer buttonHboxTemplate = settingTemplate.GetNode("ButtonHBoxContainer"); Button buttonTemplate = buttonHboxTemplate.GetNode