diff --git a/prefabs/spaces/tunnel.tscn b/prefabs/spaces/tunnel.tscn new file mode 100644 index 0000000..1fe88e9 --- /dev/null +++ b/prefabs/spaces/tunnel.tscn @@ -0,0 +1,140 @@ +[gd_scene format=3 uid="uid://deift37sj4byw"] + +[ext_resource type="Script" uid="uid://dppxcyrky5dtp" path="res://scripts/spaces/Tunnel.cs" id="1_hk1of"] +[ext_resource type="Texture2D" uid="uid://rvoiaddddovf" path="res://textures/tunnel_ring_b.png" id="2_5m0re"] +[ext_resource type="Texture2D" uid="uid://dj66qsxt3lvm5" path="res://textures/tunnel_space_a.png" id="3_frc3x"] +[ext_resource type="Texture2D" uid="uid://frwrbwqgan5x" path="res://textures/tunnel_neonroad.png" id="4_5ioxn"] + +[sub_resource type="Environment" id="Environment_i2qd1"] +ambient_light_source = 1 +ambient_light_color = Color(1, 1, 1, 1) +reflected_light_source = 1 +fog_enabled = true +fog_mode = 1 +fog_light_color = Color(0, 0, 0, 1) +fog_light_energy = 0.01 +fog_density = 1.0 +fog_depth_curve = 0.8485127 +fog_depth_begin = 5.0 +fog_depth_end = 150.0 + +[sub_resource type="StandardMaterial3D" id="2"] +cull_mode = 2 +shading_mode = 0 +albedo_texture = ExtResource("2_5m0re") +distance_fade_mode = 1 +distance_fade_min_distance = 10.0 +distance_fade_max_distance = 40.0 + +[sub_resource type="QuadMesh" id="4"] +material = SubResource("2") +size = Vector2(8, 8) + +[sub_resource type="StandardMaterial3D" id="1"] +transparency = 1 +cull_mode = 2 +shading_mode = 0 +albedo_texture = ExtResource("3_frc3x") +distance_fade_mode = 1 +distance_fade_min_distance = 10.0 +distance_fade_max_distance = 40.0 + +[sub_resource type="QuadMesh" id="5"] +material = SubResource("1") +size = Vector2(8, 8) + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_6gcud"] +shading_mode = 0 +albedo_texture = ExtResource("4_5ioxn") +texture_filter = 5 +billboard_keep_scale = true +grow_amount = -7.051 +point_size = 23.8 +distance_fade_mode = 1 +distance_fade_min_distance = 150.0 + +[sub_resource type="PlaneMesh" id="PlaneMesh_tiw4t"] +material = SubResource("StandardMaterial3D_6gcud") +size = Vector2(120, 120) + +[node name="Tunnel" type="Node3D" unique_id=1740008516] +script = ExtResource("1_hk1of") + +[node name="WorldEnvironment" type="WorldEnvironment" parent="." unique_id=278552244] +environment = SubResource("Environment_i2qd1") + +[node name="Rings" type="Node3D" parent="." unique_id=1743608970] +transform = Transform3D(3.5, 0, 0, 0, 3.5, 0, 0, 0, 3.5, 0, 0, 0) + +[node name="1" type="MeshInstance3D" parent="Rings" unique_id=2007434064] +cast_shadow = 0 +mesh = SubResource("4") + +[node name="2" type="MeshInstance3D" parent="Rings" unique_id=1988406875] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -7.5000014) +cast_shadow = 0 +mesh = SubResource("5") + +[node name="3" type="MeshInstance3D" parent="Rings" unique_id=1582574032] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -15) +cast_shadow = 0 +mesh = SubResource("4") + +[node name="4" type="MeshInstance3D" parent="Rings" unique_id=176014594] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -22.5) +cast_shadow = 0 +mesh = SubResource("5") + +[node name="5" type="MeshInstance3D" parent="Rings" unique_id=1324853464] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -30) +cast_shadow = 0 +mesh = SubResource("4") + +[node name="6" type="MeshInstance3D" parent="Rings" unique_id=1303428517] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -37.5) +cast_shadow = 0 +mesh = SubResource("5") + +[node name="7" type="MeshInstance3D" parent="Rings" unique_id=1899433621] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -45.000004) +cast_shadow = 0 +mesh = SubResource("4") + +[node name="8" type="MeshInstance3D" parent="Rings" unique_id=1309912634] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -52.5) +cast_shadow = 0 +mesh = SubResource("5") + +[node name="9" type="MeshInstance3D" parent="Rings" unique_id=1836294748] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 7.5) +cast_shadow = 0 +mesh = SubResource("5") + +[node name="10" type="MeshInstance3D" parent="Rings" unique_id=74715341] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 15) +cast_shadow = 0 +mesh = SubResource("4") + +[node name="11" type="MeshInstance3D" parent="Rings" unique_id=482743723] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 22.5) +cast_shadow = 0 +mesh = SubResource("5") + +[node name="12" type="MeshInstance3D" parent="Rings" unique_id=655974884] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 30) +cast_shadow = 0 +mesh = SubResource("4") + +[node name="13" type="MeshInstance3D" parent="Rings" unique_id=635914509] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 37.5) +cast_shadow = 0 +mesh = SubResource("5") + +[node name="14" type="MeshInstance3D" parent="Rings" unique_id=1492842686] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 45) +cast_shadow = 0 +mesh = SubResource("4") + +[node name="Road" type="MeshInstance3D" parent="." unique_id=653721320] +transform = Transform3D(0.2, 0, 0, 0, 1.204, 0, 0, 0, 2.806, 0, -20, 0) +mesh = SubResource("PlaneMesh_tiw4t") diff --git a/project.godot b/project.godot index 888be97..ea26796 100644 --- a/project.godot +++ b/project.godot @@ -15,7 +15,7 @@ compatibility/default_parent_skeleton_in_mesh_instance_3d=true [application] config/name="Rhythia" -config/version="0.1.1" +config/version="0.1.2" run/main_scene="uid://cyrs54b4ot1p8" config/use_custom_user_dir=true config/custom_user_dir_name="Rhythia" @@ -68,6 +68,10 @@ folder_colors={ "res://user/": "pink" } +[gui] + +timers/tooltip_delay_sec=0.1 + [input_devices] pointing/android/enable_long_press_as_right_click=true diff --git a/scenes/game.tscn b/scenes/game.tscn index 084454b..85cb9d5 100644 --- a/scenes/game.tscn +++ b/scenes/game.tscn @@ -1,7 +1,6 @@ [gd_scene format=3 uid="uid://vp1nmsiqt5yv"] [ext_resource type="Script" uid="uid://8s0npsnw42ce" path="res://scripts/scenes/LegacyRunner.cs" id="1_1hgss"] -[ext_resource type="ArrayMesh" uid="uid://ceww5w8t33lqy" path="res://user/meshes/squircle.obj" id="2_e1j6l"] [ext_resource type="Texture2D" uid="uid://b3g4aw54n6bow" path="res://user/skins/default/game/grid.png" id="2_q78ea"] [ext_resource type="Script" uid="uid://okqdw5gj567n" path="res://scripts/game/LegacyRenderer.cs" id="3_ew8wr"] [ext_resource type="Texture2D" uid="uid://3e1tjlr4m0wt" path="res://user/skins/default/game/cursor.png" id="3_negii"] @@ -11,6 +10,7 @@ [ext_resource type="Texture2D" uid="uid://4x2vfpyjkri6" path="res://user/skins/default/game/health.png" id="7_wjg6i"] [ext_resource type="Texture2D" uid="uid://dmc5f6ajp8xv1" path="res://user/skins/default/game/progress_background.png" id="8_eu3ux"] [ext_resource type="Shader" uid="uid://dsysoy6w8ndnk" path="res://scripts/shaders/video_background.gdshader" id="8_ocxsu"] +[ext_resource type="ArrayMesh" uid="uid://uqxu6tq6xhhg" path="res://user/meshes/squircle.obj" id="9_e1j6l"] [ext_resource type="Texture2D" uid="uid://d3s17ehomjscd" path="res://user/skins/default/game/progress.png" id="9_nde5v"] [ext_resource type="FontFile" uid="uid://cmjos3o0k2f6t" path="res://fonts/Comfortaa-Medium.ttf" id="11_o37lt"] [ext_resource type="Texture2D" uid="uid://80bitp5weqrb" path="res://user/skins/default/game/panel_left_background.png" id="11_sdncv"] @@ -85,8 +85,8 @@ font_color = Color(1, 1, 1, 0.8) [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_73q55"] transparency = 1 -cull_mode = 2 shading_mode = 0 +specular_mode = 2 disable_fog = true vertex_color_use_as_albedo = true vertex_color_is_srgb = true @@ -94,7 +94,7 @@ vertex_color_is_srgb = true [sub_resource type="MultiMesh" id="MultiMesh_almyi"] transform_format = 1 use_colors = true -mesh = ExtResource("2_e1j6l") +mesh = ExtResource("9_e1j6l") [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_a6jk1"] resource_name = "Material" @@ -520,6 +520,7 @@ vertical_alignment = 1 [node name="ProgressMask" type="Control" parent="PauseHud/PauseVP/Control" unique_id=1572831027] clip_contents = true layout_mode = 1 +anchors_preset = 8 anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 diff --git a/scenes/main_menu.tscn b/scenes/main_menu.tscn index 15f5388..f2d627b 100644 --- a/scenes/main_menu.tscn +++ b/scenes/main_menu.tscn @@ -97,6 +97,10 @@ bg_color = Color(1, 1, 1, 1) font = ExtResource("5_hl5e0") font_size = 36 +[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_k5xsf"] +content_margin_left = 4.0 +content_margin_right = 4.0 + [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_5gt56"] bg_color = Color(0, 0, 0, 0.0627451) @@ -414,25 +418,26 @@ layout_mode = 2 [node name="Header" type="Label" parent="Menus/Home/News/VBoxContainer" unique_id=1350479761] layout_mode = 2 -text = "0.1.1 (early-26feb22)" +text = "0.1.2 (early-26apr30)" label_settings = SubResource("LabelSettings_0uejd") horizontal_alignment = 1 vertical_alignment = 1 [node name="RichTextLabel" type="RichTextLabel" parent="Menus/Home/News/VBoxContainer" unique_id=473981233] -custom_minimum_size = Vector2(0, 400) +custom_minimum_size = Vector2(0, 480) layout_mode = 2 theme = ExtResource("6_engjn") theme_override_constants/line_separation = 2 theme_override_constants/paragraph_separation = 6 theme_override_fonts/normal_font = ExtResource("7_6h3lr") +theme_override_styles/normal = SubResource("StyleBoxEmpty_k5xsf") bbcode_enabled = true text = "[font_size=28][b]FEATURES[/b][font_size=18] -+ Support for image files other than PNG & JPG[br]+ Reset to defaults setting[br]+ Display FPS setting[br]+ Parallax setting now applies to Spin mode[br]* Non-PHXM maps are now imported on startup (SSPM & TXT) ++ Galaxy space[br]+ Tunnel space[br]+ Cursor Rotation setting[br]+ Cursor Opacity setting[br]+ Space to Pause setting[br]+ Local Offset setting[br]+ More volume settings[br]+ Super Simple HUD setting[br]+ Hold R to exit map keybind[br]+ F1 to open wiki keybind[br]+ Ctrl + M to mute keybind[br]+ Miss sounds[br]+ Menu music (currently empty, replace menu.mp3 to your skin folder)[br]* Changed Fade Out setting to a slider & updated its behaviour to work more like Fade In[br]* Added support for nightly colorset format [font_size=28][b]FIXES[/b][font_size=18] -* Gameplay performance improvements (~25-35% increase)[br]* Improved map importing (faster and more reliable)[br]* Waves space coloring is more consistent[br]* Pressing ESC to close settings is more reliable[br]* Absolute input made more accurate[br]* Map preview no longer inverted[br]* Spin no longer displays a placeholder mod icon in gameplay +* Fixed comma decimal separator number formatting[br]* Fixed Start From slider with comma decimal separator[br]* Fixed map info covers resizing after import[br]* Fixed map list not updating on map deletion[br]* Safer cover & skin texture loading[br]* Safer note color parsing[br]* Fixed maps failing to import on systems with <4 threads[br]* Dynamic song resyncing during gameplay[br]* Fixed song progress bar incremental update delay[br]* Fixed double Esc to open game menu after opening settings[br]* Fixed flickering notes in replays[br]* Fixed clicking outside the update popup causing a softlock[br]* Fixed displayed selected profile inaccurate[br]* Fixed number range settings imprecision[br]* Fixed song search bar not focusing on key press after using slider [font_size=28][b]MISC[/b][font_size=18] -* Set default window size to 1280x720" +* Cap framerate at 30 when unfocused[br]* Allow windowed mode to be resized" shortcut_keys_enabled = false [node name="Panel" type="Panel" parent="Menus/Home/News/VBoxContainer/RichTextLabel" unique_id=1035549202] @@ -1662,7 +1667,7 @@ grow_vertical = 2 theme_override_fonts/normal_font = ExtResource("19_c6nra") theme_override_font_sizes/normal_font_size = 18 bbcode_enabled = true -text = "Rhythia [font_size=12][color=ffffffa0]early-26aprXX" +text = "Rhythia [font_size=12][color=ffffffa0]0.1.2 (early-26apr30)" shortcut_keys_enabled = false vertical_alignment = 1 diff --git a/scripts/FileInitializer.cs b/scripts/FileInitializer.cs index b85769b..f29423c 100644 --- a/scripts/FileInitializer.cs +++ b/scripts/FileInitializer.cs @@ -13,7 +13,13 @@ public override void _Ready() objExporter = new Node(); AddChild(objExporter); objExporter.SetScript(script); - + + // Temporary for 0.1.2 as the mesh's faces were fixed + if (File.Exists($"{Constants.USER_FOLDER}/meshes/squircle.obj")) + { + File.Delete($"{Constants.USER_FOLDER}/meshes/squircle.obj"); + } + deepCopy(); } @@ -26,10 +32,8 @@ private void deepCopy(string resDir = "") Directory.CreateDirectory(userDir); } - foreach (string resFile in DirAccess.GetFilesAt($"res://user{resDir}")) { - string userFile = $"{userDir}/{resFile}"; string ext = resFile.GetExtension(); @@ -51,7 +55,6 @@ private void deepCopy(string resDir = "") foreach (string resFile in ResourceLoader.ListDirectory($"res://user{resDir}").Where(x => x.Last() != '/')) { - string userFile = $"{userDir}/{resFile}"; string ext = resFile.GetExtension(); @@ -78,10 +81,11 @@ private void deepCopy(string resDir = "") Logger.Error($"[{resFile}] {resource.GetType().Name} is not supported for the user folder."); continue; } + File.WriteAllBytes(userFile, buffer); } - foreach (string dir in Godot.DirAccess.GetDirectoriesAt($"res://user{resDir}")) + foreach (string dir in DirAccess.GetDirectoriesAt($"res://user{resDir}")) { deepCopy($"{resDir}/{dir}"); } diff --git a/scripts/SoundManager.cs b/scripts/SoundManager.cs index bd0cd63..3aab834 100644 --- a/scripts/SoundManager.cs +++ b/scripts/SoundManager.cs @@ -41,11 +41,11 @@ public override void _Ready() { Instance = this; - HitSound = new(); - MissSound = new(); - FailSound = new(); - Song = new(); - MenuMusic = new(); + HitSound = new() { Name = "Hit" }; + MissSound = new() { Name = "Miss" }; + FailSound = new() { Name = "Fail" }; + Song = new() { Name = "Song" }; + MenuMusic = new() { Name = "Menu" }; HitSound.MaxPolyphony = 16; MissSound.MaxPolyphony = 16; @@ -329,6 +329,7 @@ public static bool ToggleJukeboxPause() if (Song != null && (Song.Playing || Song.StreamPaused)) { Song.StreamPaused = !Song.StreamPaused; + JukeboxPanel.Instance.UpdateMap(Map); return Song.StreamPaused; } @@ -427,6 +428,8 @@ public static void RefreshMenuMusicPlayback() return; } + JukeboxPanel.Instance?.UpdateMap(Map); + if (menuMusicPausedByUser) { if (MenuMusic.Playing && !MenuMusic.StreamPaused) diff --git a/scripts/database/settings/SettingsProfile.cs b/scripts/database/settings/SettingsProfile.cs index a1bd69e..942a319 100644 --- a/scripts/database/settings/SettingsProfile.cs +++ b/scripts/database/settings/SettingsProfile.cs @@ -537,7 +537,7 @@ public SettingsProfile() UpdateAction = (_, init) => { if (!init) { SkinManager.Load(); } }, List = new("skin") { - Values = ["skin", "void", "grid", "squircles", "waves", "galaxy"] + Values = ["skin", "void", "grid", "squircles", "waves", "galaxy", "tunnel"] } }; @@ -550,7 +550,7 @@ public SettingsProfile() UpdateAction = (_, init) => { if (!init) { SkinManager.Load(); } }, List = new("skin") { - Values = ["skin", "void", "grid", "squircles", "waves", "galaxy"] + Values = ["skin", "void", "grid", "squircles", "waves", "galaxy", "tunnel"] } }; diff --git a/scripts/game/LegacyRenderer.cs b/scripts/game/LegacyRenderer.cs index e39c339..b832f13 100644 --- a/scripts/game/LegacyRenderer.cs +++ b/scripts/game/LegacyRenderer.cs @@ -12,18 +12,23 @@ public override void _Ready() public override void _Process(double delta) { - if (!LegacyRunner.Playing) + if (!LegacyRunner.Playing || LegacyRunner.CurrentAttempt.Stopped) { return; } Multimesh.InstanceCount = LegacyRunner.ToProcess; + if (LegacyRunner.ToProcess == 0) + { + return; + } + float ar = (float)(LegacyRunner.CurrentAttempt.IsReplay ? LegacyRunner.CurrentAttempt.Replays[0].ApproachRate : settings.ApproachRate.Value); float ad = (float)(LegacyRunner.CurrentAttempt.IsReplay ? LegacyRunner.CurrentAttempt.Replays[0].ApproachDistance : settings.ApproachDistance.Value); float at = ad / ar; - float fadeIn = (float)(LegacyRunner.CurrentAttempt.IsReplay ? LegacyRunner.CurrentAttempt.Replays[0].FadeIn : settings.FadeIn.Value); - float fadeOut = (float)(LegacyRunner.CurrentAttempt.IsReplay ? (LegacyRunner.CurrentAttempt.Replays[0].FadeOut ? 100 : 0) : settings.FadeOut.Value); + float fadeIn = (float)(LegacyRunner.CurrentAttempt.IsReplay ? LegacyRunner.CurrentAttempt.Replays[0].FadeIn : settings.FadeIn.Value) / 100; + float fadeOut = (float)(LegacyRunner.CurrentAttempt.IsReplay ? (LegacyRunner.CurrentAttempt.Replays[0].FadeOut ? 100 : 0) : settings.FadeOut.Value) / 100; bool pushback = LegacyRunner.CurrentAttempt.IsReplay ? LegacyRunner.CurrentAttempt.Replays[0].Pushback : settings.Pushback.Value; float hitWindowDepth = pushback ? (float)Constants.HIT_WINDOW * ar / 1000 : 0; float noteOpacity = (float)settings.NoteOpacity; @@ -36,14 +41,20 @@ public override void _Process(double delta) noteOpacity = Math.Clamp(noteOpacity, 0, 1); - float noteSize = (float)(LegacyRunner.CurrentAttempt.IsReplay ? LegacyRunner.CurrentAttempt.Replays[0].NoteSize : settings.NoteSize.Value) / 4; + float noteSize = (float)(LegacyRunner.CurrentAttempt.IsReplay ? LegacyRunner.CurrentAttempt.Replays[0].NoteSize : settings.NoteSize.Value) / 2; Transform3D transform = new(Vector3.Right * noteSize, Vector3.Up * noteSize, Vector3.Back * noteSize, Vector3.Zero); for (int i = 0; i < LegacyRunner.ToProcess; i++) { Note note = LegacyRunner.ProcessNotes[i]; float depth = (note.Millisecond - (float)LegacyRunner.CurrentAttempt.Progress) / (1000 * at) * ad / (float)LegacyRunner.CurrentAttempt.Speed; - float alpha = Math.Clamp((1 - (float)depth / ad) / (fadeIn / 100), 0, 1); + float progress = 1 - Math.Max(0, (depth + hitWindowDepth) / (ad + hitWindowDepth)); + float alpha = 1; + + if (fadeIn > 0) + { + alpha = Math.Min(1, progress / fadeIn); + } if (LegacyRunner.CurrentAttempt.Mods["Ghost"]) { @@ -51,8 +62,7 @@ public override void _Process(double delta) } else if (fadeOut > 0) { - float fadeOutScale = fadeOut / 100f; - alpha *= Math.Min(1, (depth + hitWindowDepth) / (ad * fadeOutScale + hitWindowDepth)); + alpha -= 1 - Math.Min(1, (1 - progress) / fadeOut); } if (!pushback && note.Millisecond - LegacyRunner.CurrentAttempt.Progress <= 0) @@ -63,7 +73,6 @@ public override void _Process(double delta) int j = LegacyRunner.ToProcess - i - 1; Color color = SkinManager.Instance.Skin.NoteColors[note.Index % SkinManager.Instance.Skin.NoteColors.Length]; - transform.Origin = new Vector3(note.X, note.Y, -depth); color.A = Math.Clamp(alpha * noteOpacity, 0, 1); Multimesh.SetInstanceTransform(j, transform); diff --git a/scripts/map/MapParser.cs b/scripts/map/MapParser.cs index f5ac8fc..7e5aaea 100644 --- a/scripts/map/MapParser.cs +++ b/scripts/map/MapParser.cs @@ -1,11 +1,7 @@ using System; using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Diagnostics; using System.IO; using System.IO.Compression; -using System.Linq; -using System.Runtime.InteropServices.Marshalling; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; diff --git a/scripts/scenes/LegacyRunner.cs b/scripts/scenes/LegacyRunner.cs index cfc28c1..d98a896 100644 --- a/scripts/scenes/LegacyRunner.cs +++ b/scripts/scenes/LegacyRunner.cs @@ -757,7 +757,7 @@ public override void _Ready() float cursorTransparency = 1f - cursorOpacity; cursor.Transparency = cursorTransparency; - cursorMaterial?.AlbedoTexture = SkinManager.Instance.Skin.CursorImage; + cursorMaterial.AlbedoTexture = SkinManager.Instance.Skin.CursorImage; (cursorTrailMultimesh.MaterialOverride as StandardMaterial3D).AlbedoTexture = SkinManager.Instance.Skin.CursorImage; (grid.GetActiveMaterial(0) as StandardMaterial3D).AlbedoTexture = SkinManager.Instance.Skin.GridImage; @@ -794,11 +794,7 @@ public override void _Ready() musicStarted = false; - if (CurrentAttempt.Map.Notes != null && CurrentAttempt.Map.Notes.Length > 0) - { - MapLength = CurrentAttempt.Map.Notes[^1].Millisecond; - } - else if (CurrentAttempt.Map.AudioBuffer != null) + if (CurrentAttempt.Map.AudioBuffer != null) { MapLength = (float)SoundManager.Song.Stream.GetLength() * 1000; } @@ -807,7 +803,7 @@ public override void _Ready() MapLength = CurrentAttempt.Map.Length + 1000; } - MapLength += Constants.HIT_WINDOW + 1000; + MapLength += Constants.HIT_WINDOW; // TODO: Fix videos @@ -922,18 +918,18 @@ public override void _Process(double delta) { return; } - + if (isPauseRampActive()) { updatePauseStateEachFrame(delta); } - else + else if (CurrentAttempt.Progress > 0 && CurrentAttempt.Progress < MapLength && !CurrentAttempt.Stopped) { double audioDelay = CurrentAttempt.Progress - 1000 * (SoundManager.Song.GetPlaybackPosition() + AudioServer.GetTimeSinceLastMix()); - - if (Math.Abs(audioDelay) > 25 && CurrentAttempt.Progress > 0) + + if (Math.Abs(audioDelay / CurrentAttempt.Speed) > Math.Max(40, delta)) { - SoundManager.Song.PitchScale = Math.Max(Mathf.Epsilon, (float)CurrentAttempt.Speed + (float)audioDelay / 1000); + SoundManager.Song.PitchScale = (float)Math.Clamp(CurrentAttempt.Speed + audioDelay / 1000, Math.Max(0.01, CurrentAttempt.Speed - 0.5), CurrentAttempt.Speed + 0.5); } else if (Math.Abs(SoundManager.Song.PitchScale - CurrentAttempt.Speed) > Mathf.Epsilon) { @@ -1312,7 +1308,8 @@ public override void _Input(InputEvent @event) if (CurrentAttempt.IsReplay) { Playing = !Playing; - SoundManager.Song.PitchScale = Playing ? (float)CurrentAttempt.Speed : 0.00000000000001f; // ooohh my goood + // SoundManager.Song.PitchScale = Playing ? (float)CurrentAttempt.Speed : 0.00000000000001f; // ooohh my goood + SoundManager.Song.StreamPaused = !Playing; replayViewerPause.TextureNormal = GD.Load(Playing ? "res://textures/ui/pause.png" : "res://textures/ui/play.png"); } else @@ -1638,8 +1635,8 @@ private static void updatePauseStateEachFrame(double delta) pauseHoldTime += (float)delta; pauseState = Math.Max(0, pauseState - (float)(delta / pauseHoldDuration)); pauseHudControl.SetProgress(Math.Clamp(1f - pauseState, 0f, 1f)); - - if (CurrentAttempt.Map.AudioBuffer != null && musicStarted && SoundManager.Song.Playing) + + if (CurrentAttempt.Map.AudioBuffer != null && musicStarted && SoundManager.Song.Playing && getTargetMusicVolumeDb() > float.NegativeInfinity) { SoundManager.Song.VolumeDb = Mathf.Lerp(getTargetMusicVolumeDb() - 60, getTargetMusicVolumeDb(), 1 - pauseState); } diff --git a/scripts/scenes/MainMenu.cs b/scripts/scenes/MainMenu.cs index f29daaa..25bac19 100644 --- a/scripts/scenes/MainMenu.cs +++ b/scripts/scenes/MainMenu.cs @@ -109,7 +109,7 @@ public override void Load() public override void _Process(double delta) { - if (Rhythia.Quitting) + if (Rhythia.Quitting && SoundManager.Song.VolumeDb > float.NegativeInfinity) { SoundManager.Song.VolumeDb = Mathf.Lerp(SoundManager.Song.VolumeDb, -80f, (float)delta * 2); } diff --git a/scripts/scenes/Results.cs b/scripts/scenes/Results.cs index 6ebdd50..9cf51b6 100644 --- a/scripts/scenes/Results.cs +++ b/scripts/scenes/Results.cs @@ -121,7 +121,7 @@ public override void _Process(double delta) public override void _Input(InputEvent @event) { - if (@event is InputEventKey eventKey && eventKey.Pressed) + if (@event is InputEventKey eventKey && eventKey.Pressed && !eventKey.Echo) { switch (eventKey.PhysicalKeycode) { diff --git a/scripts/skinning/SkinManager.cs b/scripts/skinning/SkinManager.cs index dfdeafc..84b9816 100644 --- a/scripts/skinning/SkinManager.cs +++ b/scripts/skinning/SkinManager.cs @@ -1,9 +1,6 @@ -using System.Collections.Generic; using System.IO; -using System.Text.RegularExpressions; using Godot; using Tomlyn; -using Tomlyn.Model; [GlobalClass] public partial class SkinManager : Node @@ -49,7 +46,7 @@ public static void Load() string configFile = $"{Constants.USER_FOLDER}/skins/{settings.Skin.Value}/config.toml"; - if (File.Exists(configFile) && Toml.TryToModel(File.ReadAllText(configFile), out SkinConfig config, out _)) + if (File.Exists(configFile) && Toml.TryToModel(File.ReadAllText(configFile), out SkinConfig config, out _)) { skin.Config = config; } @@ -136,15 +133,15 @@ public static void Load() // Meshes - skin.NoteMesh = loadMesh($"{Constants.USER_FOLDER}/meshes/{(settings.NoteMesh.Value == "skin" ? skin.Config.NoteMesh : settings.NoteMesh.Value)}.obj"); + skin.NoteMesh = loadMesh($"{Constants.USER_FOLDER}/meshes/{(settings.NoteMesh == "skin" ? skin.Config.NoteMesh : settings.NoteMesh)}.obj"); // Colors - string colorsetPath = $"{Constants.USER_FOLDER}/colorsets/{(settings.NoteColors.Value == "skin" ? skin.Config.NoteColors : settings.NoteColors.Value)}.txt"; + string colorsetPath = $"{Constants.USER_FOLDER}/colorsets/{(settings.NoteColors == "skin" ? skin.Config.NoteColors : settings.NoteColors)}.txt"; if (File.Exists(colorsetPath)) { - string[] split = File.ReadAllText(colorsetPath).Split(","); + string[] split = File.ReadAllText(colorsetPath).StripEdges().ReplaceLineEndings(",").Split(","); Color[] colors = new Color[split.Length]; for (int i = 0; i < split.Length; i++) @@ -157,8 +154,8 @@ public static void Load() // Spaces - skin.GameSpace = loadSpace($"res://prefabs/spaces/{(settings.GameSpace.Value == "skin" ? skin.Config.GameSpace : settings.GameSpace.Value)}.tscn"); - skin.MenuSpace = loadSpace($"res://prefabs/spaces/{(settings.MenuSpace.Value == "skin" ? skin.Config.MenuSpace : settings.MenuSpace.Value)}.tscn"); + skin.GameSpace = loadSpace($"res://prefabs/spaces/{(settings.GameSpace == "skin" ? skin.Config.GameSpace : settings.GameSpace)}.tscn"); + skin.MenuSpace = loadSpace($"res://prefabs/spaces/{(settings.MenuSpace == "skin" ? skin.Config.MenuSpace : settings.MenuSpace)}.tscn"); ///// if (!SettingsManager.HideNotifications) @@ -221,8 +218,8 @@ private static Shader loadShader(string skinPath) private static ArrayMesh loadMesh(string path) { bool exists = ResourceLoader.Exists(path) || Godot.FileAccess.FileExists(path); - - return Util.Misc.OBJParser.Call("load_obj", exists ? path : "res://user/meshes/squircle.obj").As(); + + return exists ? Util.Misc.OBJParser.Call("load_obj", path).As() : GD.Load("res://user/meshes/squircle.obj"); } private static BaseSpace loadSpace(string path) diff --git a/scripts/spaces/Tunnel.cs b/scripts/spaces/Tunnel.cs new file mode 100644 index 0000000..07532b8 --- /dev/null +++ b/scripts/spaces/Tunnel.cs @@ -0,0 +1,39 @@ +using Godot; + +namespace Spaces; + +public partial class Tunnel : BaseSpace +{ + private SettingsProfile settings; + private StandardMaterial3D tileMaterial; + private StandardMaterial3D ringMaterialA; + private StandardMaterial3D ringMaterialB; + private Node3D rings; + + private const float ring_loop_end = 52.5f; + + public override void _Ready() + { + base._Ready(); + + settings = SettingsManager.Instance.Settings; + rings = GetNode("Rings"); + + tileMaterial = (GetNode("Road").Mesh as PlaneMesh).Material as StandardMaterial3D; + ringMaterialA = (rings.GetChild(0).Mesh as PlaneMesh).Material as StandardMaterial3D; + ringMaterialB = (rings.GetChild(1).Mesh as PlaneMesh).Material as StandardMaterial3D; + } + + public override void _Process(double delta) + { + base._Process(delta); + + // Ring movement + rings.Position = Vector3.Back * (float)(Time.GetTicksMsec() / 1000f * settings.ApproachRate / 2) % ring_loop_end; + + // Hit FX + tileMaterial.AlbedoColor = NoteHitColor; + ringMaterialA.AlbedoColor = NoteHitColor; + ringMaterialB.AlbedoColor = NoteHitColor; + } +} diff --git a/scripts/spaces/Tunnel.cs.uid b/scripts/spaces/Tunnel.cs.uid new file mode 100644 index 0000000..770afbd --- /dev/null +++ b/scripts/spaces/Tunnel.cs.uid @@ -0,0 +1 @@ +uid://dppxcyrky5dtp diff --git a/scripts/ui/SettingsMenu.cs b/scripts/ui/SettingsMenu.cs index eb30f82..1b89c2c 100644 --- a/scripts/ui/SettingsMenu.cs +++ b/scripts/ui/SettingsMenu.cs @@ -311,12 +311,12 @@ void applyLineEdit() if ((double)setting.GetVariant() != value) { setting.SetVariant(value); } } - float placeholder = 0; + double placeholder = 0; - if (setting is SettingsItem) { placeholder = (setting as SettingsItem).DefaultValue; } + if (setting is SettingsItem) { placeholder = (setting as SettingsItem).DefaultValue; } else if (setting is SettingsItem) { placeholder = (setting as SettingsItem).DefaultValue; } - lineEdit.PlaceholderText = placeholder.ToString("F2"); + lineEdit.PlaceholderText = placeholder.ToString("F4"); slider.Step = setting.Slider.Step; slider.MinValue = setting.Slider.MinValue; slider.MaxValue = setting.Slider.MaxValue; diff --git a/scripts/ui/menu/JukeboxPanel.cs b/scripts/ui/menu/JukeboxPanel.cs index de4aec4..d6a9ebe 100644 --- a/scripts/ui/menu/JukeboxPanel.cs +++ b/scripts/ui/menu/JukeboxPanel.cs @@ -114,10 +114,12 @@ public void UpdateMap(Map map) { Map = map; - title.Text = map.PrettyTitle; - selectButton.Disabled = false; - - pauseButton.TextureNormal = SkinManager.Instance.Skin.JukeboxPauseImage; + if (Map != null) + { + title.Text = map.PrettyTitle; + selectButton.Disabled = false; + pauseButton.TextureNormal = SkinManager.Instance.Skin.JukeboxPauseImage; + } } public void UpdateSkin(SkinProfile skin = null) @@ -137,7 +139,7 @@ private void pause() private void skip() { - if (!SettingsManager.Instance.Settings.AutoplayJukebox.Value) + if (!SettingsManager.Instance.Settings.AutoplayJukebox) { return; } @@ -148,7 +150,7 @@ private void skip() private void rewind() { - if (!SettingsManager.Instance.Settings.AutoplayJukebox.Value) + if (!SettingsManager.Instance.Settings.AutoplayJukebox) { return; } diff --git a/scripts/ui/menu/play/SearchPanel.cs b/scripts/ui/menu/play/SearchPanel.cs index e42ce37..5694979 100644 --- a/scripts/ui/menu/play/SearchPanel.cs +++ b/scripts/ui/menu/play/SearchPanel.cs @@ -1,4 +1,3 @@ -using System; using Godot; public partial class SearchPanel : Panel @@ -26,7 +25,9 @@ public override void _Input(InputEvent @event) { if (@event is InputEventKey eventKey && eventKey.Pressed && !eventKey.CtrlPressed && !eventKey.AltPressed) { - if (GetViewport().GuiGetFocusOwner() == null && eventKey.Keycode != Key.Space && eventKey.Keycode != Key.Escape) + Control focusOwner = GetViewport().GuiGetFocusOwner(); + + if (focusOwner is not LineEdit && eventKey.Keycode != Key.Space && eventKey.Keycode != Key.Escape) { lineEdit.GrabFocus(); } diff --git a/scripts/util/FileParser.cs b/scripts/util/FileParser.cs index 554163b..81512ce 100644 --- a/scripts/util/FileParser.cs +++ b/scripts/util/FileParser.cs @@ -1,7 +1,6 @@ using System; using System.IO; using System.Text; -using Godot; public class FileParser { @@ -24,6 +23,7 @@ public FileParser(string path) Buffer = file.GetBuffer(Length); file.Close(); } + Pointer = 0; } diff --git a/scripts/util/Misc.cs b/scripts/util/Misc.cs index bfa0a9f..fc49e3d 100644 --- a/scripts/util/Misc.cs +++ b/scripts/util/Misc.cs @@ -1,7 +1,4 @@ -using System; -using System.Collections.Generic; using System.Globalization; -using System.IO; using Godot; namespace Util; @@ -47,7 +44,7 @@ public static void CopyProperties(Node node, Node reference) public static void CopyReference(Node node, Node reference) { - Util.Misc.CopyProperties(node, reference); + CopyProperties(node, reference); reference.ReplaceBy(node); reference.QueueFree(); diff --git a/scripts/util/OBJParser.gd b/scripts/util/OBJParser.gd index 5b7351f..208d4dd 100644 --- a/scripts/util/OBJParser.gd +++ b/scripts/util/OBJParser.gd @@ -150,7 +150,7 @@ static func _create_obj(obj: String, mats: Dictionary) -> Mesh: var faces: Dictionary = {} var mat_name: String = "default" - var count_mtl: int =0 + var count_mtl: int = 0 # Parse var lines: PackedStringArray = obj.split("\n", false) @@ -162,7 +162,7 @@ static func _create_obj(obj: String, mats: Dictionary) -> Mesh: pass "v": # Vertice - var n_v: Vector3 = 2 * Vector3(parts[1].to_float(), parts[2].to_float(), parts[3].to_float()) + var n_v: Vector3 = Vector3(parts[1].to_float(), parts[2].to_float(), parts[3].to_float()) vertices.append(n_v) "vn": # Normal diff --git a/textures/tunnel_neonroad.png b/textures/tunnel_neonroad.png new file mode 100644 index 0000000..fda745b Binary files /dev/null and b/textures/tunnel_neonroad.png differ diff --git a/textures/tunnel_neonroad.png.import b/textures/tunnel_neonroad.png.import new file mode 100644 index 0000000..5e11375 --- /dev/null +++ b/textures/tunnel_neonroad.png.import @@ -0,0 +1,41 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://frwrbwqgan5x" +path.s3tc="res://.godot/imported/tunnel_neonroad.png-d20bc35a74f7193fbf270b8bead3a317.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://textures/tunnel_neonroad.png" +dest_files=["res://.godot/imported/tunnel_neonroad.png-d20bc35a74f7193fbf270b8bead3a317.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/textures/tunnel_ring_b.png b/textures/tunnel_ring_b.png new file mode 100644 index 0000000..2ef81dc Binary files /dev/null and b/textures/tunnel_ring_b.png differ diff --git a/textures/tunnel_ring_b.png.import b/textures/tunnel_ring_b.png.import new file mode 100644 index 0000000..ee479f4 --- /dev/null +++ b/textures/tunnel_ring_b.png.import @@ -0,0 +1,41 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://rvoiaddddovf" +path.s3tc="res://.godot/imported/tunnel_ring_b.png-1c35dfc6f563f961d39e6af154dd0376.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://textures/tunnel_ring_b.png" +dest_files=["res://.godot/imported/tunnel_ring_b.png-1c35dfc6f563f961d39e6af154dd0376.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/textures/tunnel_space_a.png b/textures/tunnel_space_a.png new file mode 100644 index 0000000..11c37ba Binary files /dev/null and b/textures/tunnel_space_a.png differ diff --git a/textures/tunnel_space_a.png.import b/textures/tunnel_space_a.png.import new file mode 100644 index 0000000..1e91ccd --- /dev/null +++ b/textures/tunnel_space_a.png.import @@ -0,0 +1,41 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dj66qsxt3lvm5" +path.s3tc="res://.godot/imported/tunnel_space_a.png-c019dce8ef63e414d647fd95a98a56e7.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://textures/tunnel_space_a.png" +dest_files=["res://.godot/imported/tunnel_space_a.png-c019dce8ef63e414d647fd95a98a56e7.s3tc.ctex"] + +[params] + +compress/mode=2 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=true +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=0 diff --git a/user/meshes/square.obj b/user/meshes/square.obj index da84797..3889f40 100644 --- a/user/meshes/square.obj +++ b/user/meshes/square.obj @@ -1,6 +1,5 @@ # Blender 5.0.1 # www.blender.org -mtllib square.mtl o Cube.001 v 0.800000 0.800000 -0.075000 v 0.800000 -0.800000 -0.075000 diff --git a/user/meshes/square.obj.import b/user/meshes/square.obj.import index b59eb99..e094d0a 100644 --- a/user/meshes/square.obj.import +++ b/user/meshes/square.obj.import @@ -3,7 +3,7 @@ importer="wavefront_obj" importer_version=1 type="Mesh" -uid="uid://v2cifd2durhd" +uid="uid://b76iw5pddg837" path="res://.godot/imported/square.obj-b64992a908e864fa32bae9caee718e21.mesh" [deps] diff --git a/user/meshes/squircle.obj b/user/meshes/squircle.obj index cf5343e..0bade98 100644 --- a/user/meshes/squircle.obj +++ b/user/meshes/squircle.obj @@ -1,447 +1,620 @@ -# Blender 5.0.1 +# Blender 4.4.0 # www.blender.org -mtllib squircle_scaled.mtl -o squircle -v -0.999654 -0.499860 -0.124970 -v 0.999718 0.499942 -0.124966 -v 0.999718 -0.499860 -0.124970 -v 0.987152 -0.611138 -0.124970 -v 0.791786 -0.490374 -0.124970 -v 0.762080 -0.575150 -0.124970 -v 0.950592 -0.716706 -0.124970 -v -0.791718 -0.490374 -0.124970 -v -0.762016 -0.575150 -0.124970 -v -0.987088 -0.611138 -0.124970 -v -0.950528 -0.716706 -0.124970 -v -0.715174 -0.651126 -0.124970 -v -0.891118 -0.811534 -0.124970 -v -0.651194 -0.714650 -0.124970 -v -0.811142 -0.890596 -0.124970 -v -0.716316 -0.950234 -0.124970 -v -0.574646 -0.762406 -0.124970 -v 0.891182 -0.811534 -0.124970 -v 0.811206 -0.890596 -0.124970 -v 0.714094 -0.651126 -0.124970 -v 0.651258 -0.714650 -0.124970 -v 0.716378 -0.950234 -0.124970 -v 0.574708 -0.762406 -0.124970 -v 0.611268 -0.987136 -0.124970 -v 0.490164 -0.792110 -0.124970 -v 0.500446 -0.999702 -0.124970 -v -0.500384 -0.999702 -0.124970 -v -0.611206 -0.987136 -0.124970 -v -0.490102 -0.792110 -0.124970 -v 0.791786 0.490346 -0.124966 -v 0.762080 0.575120 -0.124966 -v 0.987152 0.611106 -0.124966 -v 0.950592 0.716790 -0.124966 -v 0.714094 0.651206 -0.124966 -v 0.891182 0.811502 -0.124966 -v 0.651258 0.714618 -0.124966 -v 0.811206 0.890676 -0.124966 -v 0.716378 0.950202 -0.124966 -v 0.574708 0.762374 -0.124966 -v 0.611268 0.987218 -0.124966 -v 0.490164 0.792078 -0.124966 -v 0.500446 0.999674 -0.124966 -v -0.500384 0.999674 -0.124966 -v -0.490102 0.792078 -0.124966 -v -0.611206 0.987218 -0.124966 -v -0.574646 0.762374 -0.124966 -v -0.716316 0.950202 -0.124966 -v -0.651194 0.714618 -0.124966 -v -0.811142 0.890676 -0.124966 -v -0.999654 0.499942 -0.124966 -v -0.791718 0.490346 -0.124966 -v -0.715174 0.651206 -0.124966 -v -0.891118 0.811502 -0.124966 -v -0.987088 0.611106 -0.124966 -v -0.950528 0.716790 -0.124966 -v -0.762016 0.575120 -0.124966 -v -0.400986 0.999674 -0.124966 -v 0.401050 0.999674 -0.124966 -v -0.999654 0.401116 -0.124966 -v 0.999718 0.401116 -0.124966 -v 0.999718 -0.401148 -0.124970 -v -0.999654 -0.401148 -0.124970 -v -0.400986 -0.999702 -0.124970 -v 0.401050 -0.999702 -0.124970 -v -0.999654 -0.499860 0.125082 -v 0.999718 0.499942 0.125082 -v 0.999718 -0.499860 0.125082 -v 0.987152 -0.611138 0.125082 -v 0.791786 -0.490378 0.125082 -v 0.762080 -0.575150 0.125082 -v 0.950592 -0.716706 0.125082 -v -0.791718 -0.490378 0.125082 -v -0.762016 -0.575150 0.125082 -v -0.987088 -0.611138 0.125082 -v -0.950528 -0.716706 0.125082 -v -0.715174 -0.651126 0.125082 -v -0.891118 -0.811534 0.125082 -v -0.651194 -0.714650 0.125082 -v -0.811142 -0.890596 0.125082 -v -0.716316 -0.950234 0.125082 -v -0.574646 -0.762406 0.125082 -v 0.891182 -0.811534 0.125082 -v 0.811206 -0.890596 0.125082 -v 0.714094 -0.651126 0.125082 -v 0.651258 -0.714650 0.125082 -v 0.716378 -0.950234 0.125082 -v 0.574708 -0.762406 0.125082 +o Squircle.001 v 0.611268 -0.987136 0.125080 -v 0.490164 -0.792110 0.125082 v 0.500446 -0.999702 0.125080 v -0.500384 -0.999702 0.125080 v -0.611206 -0.987136 0.125080 -v -0.490102 -0.792110 0.125082 -v 0.791786 0.490342 0.125082 -v 0.762080 0.575120 0.125082 +v -0.999654 -0.499860 -0.124964 +v -0.999654 0.499941 -0.124964 +v -0.950528 -0.716706 -0.124964 +v -0.987088 -0.611135 -0.124964 +v -0.987088 0.611105 -0.124964 +v -0.762016 0.575120 -0.124964 +v -0.791718 0.490338 -0.124964 +v -0.891119 -0.811532 -0.124964 +v -0.762016 -0.575150 -0.124964 +v -0.791718 -0.490374 -0.124964 +v -0.950528 0.716791 -0.124964 +v -0.891118 0.811502 -0.124964 +v -0.811142 0.890676 -0.124964 +v -0.715174 -0.651126 -0.124964 +v -0.500385 0.999674 -0.124964 +v -0.611206 0.987218 -0.124964 +v -0.716316 0.950202 -0.124964 +v -0.651194 0.714618 -0.124964 +v -0.574647 0.762374 -0.124964 +v 0.500447 0.999674 -0.124964 +v 0.490164 0.792078 -0.124964 +v -0.490094 0.792078 -0.124964 +v 0.611267 0.987218 -0.124964 +v 0.574708 0.762374 -0.124964 +v 0.716378 0.950202 -0.124964 +v 0.651258 0.714618 -0.124964 +v 0.811205 0.890676 -0.124964 +v -0.715173 0.651207 -0.124964 +v -0.811144 -0.890594 -0.124964 +v -0.716316 -0.950234 -0.124964 +v -0.500384 -0.999702 -0.124964 +v -0.490104 -0.792109 -0.124964 +v -0.574646 -0.762406 -0.124964 +v -0.611206 -0.987136 -0.124964 +v -0.651194 -0.714650 -0.124964 +v 0.500446 -0.999702 -0.124964 +v 0.490164 -0.792110 -0.124964 +v 0.574708 -0.762406 -0.124964 +v 0.651258 -0.714650 -0.124964 +v 0.714094 -0.651126 -0.124964 +v 0.611265 -0.987136 -0.124964 +v 0.762080 -0.575150 -0.124964 +v 0.791785 -0.490376 -0.124964 +v 0.762080 0.575121 -0.124964 +v 0.791786 0.490347 -0.124964 +v 0.950592 -0.716706 -0.124964 +v 0.891183 -0.811532 -0.124964 +v 0.987152 -0.611138 -0.124964 +v 0.987152 0.611105 -0.124964 +v 0.950592 0.716789 -0.124964 +v 0.716375 -0.950235 -0.124964 +v 0.811204 -0.890597 -0.124964 +v 0.999718 -0.499858 -0.124964 +v 0.999718 0.499941 -0.124964 +v 0.891182 0.811502 -0.124964 +v 0.714094 0.651206 -0.124964 +v -0.811142 0.890676 0.125082 +v -0.716316 0.950202 0.125082 +v -0.574646 0.762374 0.125082 +v -0.611206 0.987218 0.125082 +v -0.490102 0.792078 0.125082 +v -0.651194 0.714618 0.125082 +v 0.490164 0.792078 0.125082 +v 0.574708 0.762374 0.125082 +v 0.500447 0.999674 0.125082 +v 0.651258 0.714618 0.125082 +v 0.611268 0.987218 0.125082 +v 0.714094 -0.651126 0.125082 +v 0.714094 0.651206 0.125082 +v 0.791786 -0.490378 0.125082 +v 0.987152 -0.611138 0.125082 +v 0.999718 -0.499860 0.125082 +v 0.999718 0.499942 0.125082 v 0.987152 0.611106 0.125082 v 0.950592 0.716790 0.125082 -v 0.714094 0.651206 0.125082 +v 0.891182 -0.811534 0.125082 +v 0.950592 -0.716706 0.125082 +v 0.762080 -0.575150 0.125082 +v 0.791786 0.490342 0.125082 +v 0.762080 0.575120 0.125082 v 0.891182 0.811502 0.125082 -v 0.651258 0.714618 0.125082 v 0.811206 0.890676 0.125082 v 0.716378 0.950202 0.125082 -v 0.574708 0.762374 0.125082 -v 0.611268 0.987218 0.125082 -v 0.490164 0.792078 0.125082 -v 0.500446 0.999674 0.125082 -v -0.500384 0.999674 0.125082 -v -0.490102 0.792078 0.125082 -v -0.611206 0.987218 0.125082 -v -0.574646 0.762374 0.125082 -v -0.716316 0.950202 0.125082 -v -0.651194 0.714618 0.125082 -v -0.811142 0.890676 0.125082 +v -0.999654 -0.499860 0.125082 +v -0.987088 -0.611138 0.125082 v -0.999654 0.499942 0.125082 -v -0.791718 0.490342 0.125082 -v -0.715174 0.651206 0.125082 -v -0.891118 0.811502 0.125082 v -0.987088 0.611106 0.125082 v -0.950528 0.716790 0.125082 +v -0.762016 -0.575150 0.125082 +v -0.715174 0.651206 0.125082 v -0.762016 0.575120 0.125082 -v -0.400986 0.999674 0.125082 -v 0.401050 0.999674 0.125082 -v -0.999654 0.401116 0.125082 -v 0.999718 0.401116 0.125082 -v 0.999718 -0.401148 0.125082 -v -0.999654 -0.401148 0.125082 -v -0.400986 -0.999702 0.125080 -v 0.401050 -0.999702 0.125080 -vn -0.0000 -0.0000 -1.0000 -vn -0.0000 -0.0000 1.0000 -vn 0.8455 -0.5340 -0.0000 -vn -0.0000 1.0000 -0.0000 -vn -0.7109 0.7032 -0.0000 -vn -0.9937 0.1122 -0.0000 -vn -0.9438 0.3307 -0.0000 -vn -0.9438 0.3306 -0.0000 -vn -0.0000 -1.0000 -0.0000 -vn 0.3313 -0.9435 -0.0000 -vn 1.0000 -0.0000 -0.0000 -vn 0.3315 -0.9435 -0.0000 -vn -0.3322 -0.9432 -0.0000 +v -0.950528 -0.716706 0.125082 +v -0.791718 -0.490378 0.125082 +v -0.716316 -0.950234 0.125082 +v -0.811142 -0.890596 0.125082 +v -0.891118 -0.811534 0.125082 +v -0.791718 0.490342 0.125082 +v -0.891118 0.811502 0.125082 +v -0.651194 -0.714650 0.125082 +v -0.715174 -0.651126 0.125082 +v -0.574646 -0.762406 0.125082 +v -0.490102 -0.792110 0.125082 +v 0.490164 -0.792110 0.125082 +v 0.574708 -0.762406 0.125082 +v 0.651258 -0.714650 0.125082 +v 0.811206 -0.890596 0.125082 +v 0.716378 -0.950234 0.125082 +v -0.500385 0.999674 0.125081 +v -0.474262 -0.999702 -0.059257 +v -0.400986 -0.999702 -0.124964 vn -1.0000 -0.0000 -0.0000 -vn 0.5324 0.8465 -0.0000 -vn -0.5317 -0.8470 -0.0000 +vn -1.0000 -0.0004 0.0003 +vn -0.9937 -0.1124 -0.0000 +vn -0.9937 -0.1123 -0.0000 +vn 0.1119 -0.9937 -0.0003 +vn 0.1117 -0.9937 -0.0000 +vn 0.7030 0.7112 -0.0000 +vn 0.7034 0.7108 0.0001 +vn 0.7030 0.7112 0.0005 +vn 0.9437 0.3307 -0.0000 +vn -0.5291 0.8486 0.0004 +vn -0.5293 0.8484 -0.0000 +vn 0.7035 -0.7107 -0.0000 +vn -0.9436 0.3310 -0.0000 +vn -0.9439 0.3302 -0.0000 +vn -0.9437 0.3308 -0.0003 +vn -0.3315 0.9435 -0.0003 +vn -0.3315 0.9435 -0.0000 +vn -0.3316 0.9434 -0.0003 +vn 0.9937 -0.1123 0.0003 +vn 0.9937 -0.1122 0.0003 +vn 0.9936 -0.1127 -0.0000 +vn -0.8512 -0.5248 -0.0000 +vn 0.3310 0.9436 -0.0000 +vn 0.3316 0.9434 -0.0005 +vn 0.3314 -0.9435 -0.0005 +vn 0.3314 -0.9435 0.0005 +vn 0.3311 -0.9436 0.0002 +vn -0.9450 -0.3270 -0.0000 +vn -0.9451 -0.3267 0.0004 +vn -0.9451 -0.3269 -0.0005 vn 0.3313 0.9435 -0.0000 -vn 0.8471 0.5314 -0.0000 -vn 0.7035 0.7107 -0.0000 -vn 0.7046 0.7096 -0.0000 -vn -0.3315 -0.9435 -0.0000 -vn -0.9449 -0.3272 -0.0000 -vn -0.1117 -0.9937 -0.0000 +vn 0.3312 0.9435 -0.0000 +vn 0.3312 0.9436 -0.0000 +vn 0.7109 -0.7032 -0.0000 +vn 0.7110 -0.7032 -0.0000 vn 0.5293 0.8484 -0.0000 -vn -0.8516 0.5243 -0.0000 -vn 0.9937 -0.1123 -0.0000 -vn -0.3315 0.9435 -0.0000 -vn 0.9450 0.3269 -0.0000 -vn -0.7103 -0.7039 -0.0000 -vn 0.5293 -0.8484 -0.0000 -vn -0.1117 0.9937 -0.0000 -vn 0.9937 0.1123 -0.0000 -vn 0.7030 -0.7112 -0.0000 +vn 0.5293 0.8485 -0.0000 +vn 0.8455 -0.5340 -0.0000 +vn 0.7103 0.7039 -0.0000 +vn 0.7104 0.7038 -0.0000 +vn -0.3322 -0.9432 -0.0000 +vn -0.7035 -0.7107 -0.0000 +vn -0.8515 0.5244 -0.0005 +vn -0.8515 0.5243 -0.0006 +vn -0.8512 0.5248 -0.0000 +vn 0.9450 -0.3270 -0.0000 +vn 0.9451 -0.3269 -0.0000 +vn 0.9450 -0.3269 -0.0000 +vn 1.0000 -0.0000 -0.0000 vn -0.5293 -0.8484 -0.0000 -vn -0.8458 -0.5334 -0.0000 -vn 0.5324 -0.8465 -0.0000 +vn -0.5294 -0.8484 -0.0000 +vn -0.1126 0.9936 -0.0000 +vn -0.1127 0.9936 -0.0000 +vn -0.0000 -1.0000 -0.0000 +vn 0.5324 0.8465 -0.0000 +vn 0.5327 0.8463 -0.0000 +vn -0.3312 0.9436 -0.0000 +vn -0.3313 0.9435 -0.0000 vn 0.1127 0.9936 -0.0000 -vn -0.8474 -0.5309 -0.0000 -vn -0.7030 -0.7112 -0.0000 -vn 0.8512 0.5248 -0.0000 -vn -0.9937 -0.1122 -0.0000 -vn -0.9437 -0.3307 -0.0000 +vn 0.1126 0.9936 -0.0000 +vn -0.5323 0.8465 -0.0000 +vn -0.5324 0.8465 -0.0000 +vn 0.8457 0.5336 -0.0003 +vn 0.8458 0.5334 -0.0000 +vn 0.8458 0.5335 -0.0000 +vn -0.7030 0.7112 -0.0000 +vn -0.7031 0.7111 -0.0000 +vn 0.5317 -0.8470 -0.0000 +vn 0.5317 -0.8469 -0.0000 +vn -0.5315 -0.8471 0.0004 +vn -0.5317 -0.8469 -0.0000 +vn -0.0000 -0.0000 1.0000 +vn 0.8474 0.5309 -0.0000 +vn 0.8476 0.5307 0.0004 +vn 0.8474 0.5309 0.0005 vn 0.9437 -0.3307 -0.0000 -vn -0.5317 0.8470 -0.0000 -vn -0.3322 0.9432 -0.0000 -vn -0.5293 0.8484 -0.0000 -vn 0.1127 -0.9936 -0.0000 -vn -0.7035 0.7107 -0.0000 -vn 0.3315 0.9435 -0.0000 -vn 0.9438 0.3307 -0.0000 -vn 0.9437 0.3307 -0.0000 -vn -0.8471 0.5314 -0.0000 +vn 0.9438 -0.3306 -0.0000 +vn -0.0000 1.0000 -0.0000 +vn -0.0004 1.0000 0.0002 +vn -0.0005 1.0000 -0.0000 +vn 0.9937 0.1122 -0.0000 +vn 0.9936 0.1125 -0.0001 +vn 0.9937 0.1122 0.0003 +vn -0.8474 -0.5310 0.0001 +vn -0.8471 -0.5314 -0.0000 +vn 0.3322 -0.9432 -0.0000 +vn -0.0003 -0.0004 1.0000 +vn 0.5293 -0.8484 -0.0000 +vn 0.9449 0.3274 -0.0003 +vn 0.9449 0.3272 -0.0000 +vn 0.9449 0.3272 0.0001 +vn -0.7046 -0.7096 -0.0000 +vn -0.7046 -0.7097 -0.0000 +vn -0.9437 -0.3307 -0.0001 +vn -0.9438 -0.3307 -0.0000 +vn -0.9437 -0.3307 -0.0000 +vn -0.0000 -0.0000 -1.0000 +vn -0.0005 -0.0001 -1.0000 +vn 0.8473 -0.5311 -0.0004 +vn 0.8471 -0.5314 -0.0000 +vn -0.0004 1.0000 -0.0003 vn -0.8474 0.5309 -0.0000 -vn 0.9450 -0.3269 -0.0000 -vn -0.9449 0.3272 -0.0000 +vn -0.8475 0.5309 -0.0000 +vn -0.1117 -0.9937 0.0003 +vn -0.1117 -0.9937 -0.0000 +vn -0.1116 -0.9937 -0.0000 +vn -0.9448 0.3276 -0.0000 +vn -0.9449 0.3274 -0.0003 +vn -0.3315 -0.9435 -0.0000 +vn -0.3316 -0.9434 -0.0003 +vn -0.3318 -0.9434 -0.0000 +vn -0.9937 0.1122 -0.0000 +vn -0.9937 0.1120 0.0004 +vn -0.9936 0.1127 -0.0000 +vn -0.7040 0.7102 -0.0000 vn -0.7039 0.7103 -0.0000 +vn 0.1117 -0.9937 0.0003 +vn 0.7030 0.7112 0.0001 +vn -0.5293 0.8484 0.0005 +vn -0.9438 0.3305 0.0004 +vn 0.3313 0.9435 0.0004 +vn 0.3312 -0.9436 0.0004 +vn -0.9450 -0.3269 -0.0000 +vn -0.7036 -0.7106 -0.0000 +vn -0.8518 0.5238 -0.0000 +vn -0.5293 -0.8485 -0.0000 +vn 0.5323 0.8465 0.0003 +vn -0.3312 0.9435 0.0001 +vn 0.1122 0.9937 0.0004 +vn -0.5324 0.8465 0.0001 +vn 0.8458 0.5335 0.0003 +vn 0.5316 -0.8470 -0.0000 +vn -0.5313 -0.8472 -0.0000 +vn -0.0005 -0.0000 1.0000 +vn 0.0002 -0.0005 1.0000 +vn -0.0003 0.0004 1.0000 +vn -0.0003 0.0003 1.0000 +vn -0.8472 -0.5313 -0.0005 +vn 0.3321 -0.9432 -0.0000 +vn -0.0005 0.0001 1.0000 +vn -0.0004 0.0002 1.0000 +vn 0.0005 -0.0001 1.0000 +vn 0.9449 0.3273 -0.0003 +vn -0.9438 -0.3306 -0.0000 +vn -0.0000 0.0001 -1.0000 +vn -0.0000 -0.0001 -1.0000 +vn 0.0004 -0.0003 -1.0000 +vn 0.0002 0.0004 -1.0000 +vn 0.0005 -0.0000 -1.0000 +vn 0.8472 -0.5313 0.0005 +vn 0.0003 0.0004 -1.0000 +vn 0.0002 -0.0004 -1.0000 +vn -0.0004 0.0002 -1.0000 +vn -0.0005 -0.0002 -1.0000 +vn -0.8474 0.5310 -0.0000 +vn -0.1120 -0.9937 -0.0000 +vn -0.9450 0.3272 0.0003 +vn -0.3314 -0.9435 -0.0000 +vn -0.9937 0.1123 -0.0000 +vt 0.562514 0.750000 +vt 0.437500 0.500000 +vt 0.562514 0.500000 vt 0.000000 0.000000 +vt 0.812572 0.750000 +vt 0.687429 0.500000 +vt 0.812572 0.500000 +vt 0.428085 0.279714 +vt 0.410386 0.256143 +vt 0.438686 0.276000 +vt 0.561314 0.474000 +vt 0.571914 0.470286 +vt 0.576414 0.498429 +vt 0.400957 0.813714 +vt 0.381185 0.964572 +vt 0.611371 0.773571 +vt 0.601471 0.986429 +vt 0.599042 0.813714 +vt 0.312571 0.750000 +vt 0.437500 0.750000 +vt 0.687428 0.750000 +vt 0.404671 0.303143 +vt 0.400957 0.313714 +vt 0.375000 0.324857 +vt 0.375000 0.312428 +vt 0.376571 0.298571 +vt 0.381185 0.285428 +vt 0.388643 0.273571 +vt 0.398529 0.263571 +vt 0.423586 0.251571 +vt 0.437500 0.250000 +vt 0.562514 0.250000 +vt 0.576414 0.251571 +vt 0.589629 0.256143 +vt 0.601471 0.263571 +vt 0.611371 0.273571 +vt 0.618814 0.285428 +vt 0.623443 0.298571 +vt 0.589357 0.293571 +vt 0.581428 0.285571 +vt 0.410643 0.293571 +vt 0.571914 0.279714 +vt 0.418585 0.285571 +vt 0.561313 0.276000 +vt 0.381185 0.464571 +vt 0.376571 0.451428 +vt 0.375000 0.437571 +vt 0.400957 0.436286 +vt 0.388642 0.476428 +vt 0.410386 0.493857 +vt 0.398528 0.486428 +vt 0.423586 0.498429 +vt 0.601471 0.486429 +vt 0.589628 0.493857 +vt 0.618814 0.464571 +vt 0.611371 0.476429 +vt 0.625000 0.437571 +vt 0.623443 0.451428 +vt 0.625000 0.312428 +vt 0.595328 0.303143 +vt 0.599042 0.313714 +vt 0.404671 0.446857 +vt 0.410643 0.456429 +vt 0.599042 0.436286 +vt 0.418586 0.464286 +vt 0.595328 0.446857 +vt 0.589357 0.456429 +vt 0.428086 0.470286 +vt 0.438686 0.474000 +vt 0.581428 0.464286 +vt 0.418586 0.964429 +vt 0.428086 0.970286 +vt 0.423586 0.998429 +vt 0.410386 0.993857 +vt 0.398528 0.986429 +vt 0.388643 0.976429 +vt 0.381185 0.785429 +vt 0.388643 0.773571 +vt 0.398528 0.763571 +vt 0.410386 0.756143 +vt 0.423586 0.751571 +vt 0.418586 0.785714 +vt 0.410643 0.793571 +vt 0.410643 0.956429 +vt 0.404671 0.946857 +vt 0.404671 0.803143 +vt 0.400957 0.936286 +vt 0.576414 0.751571 +vt 0.589629 0.756143 +vt 0.601471 0.763571 +vt 0.618814 0.785429 +vt 0.623442 0.798571 +vt 0.625000 0.812429 +vt 0.625000 0.937572 +vt 0.623443 0.951429 +vt 0.618814 0.964572 +vt 0.611371 0.976429 +vt 0.589629 0.993857 +vt 0.576414 0.998429 +vt 0.562514 1.000000 +vt 0.437500 1.000000 +vt 0.438685 0.974000 +vt 0.428086 0.779714 +vt 0.438685 0.776000 +vt 0.561314 0.974000 +vt 0.561314 0.776000 +vt 0.571914 0.970286 +vt 0.581428 0.964429 +vt 0.571914 0.779714 +vt 0.581428 0.785714 +vt 0.589357 0.956429 +vt 0.595328 0.946857 +vt 0.589357 0.793571 +vt 0.595328 0.803143 +vt 0.599042 0.936286 +vt 0.312571 0.500000 s 1 -usemtl Meshpart1Mtl -f 1/1/1 8/1/1 9/1/1 -f 3/1/2 5/1/2 6/1/2 -f 38/1/2 36/1/2 37/1/2 -f 50/1/2 51/1/2 56/1/2 -f 36/1/1 35/1/1 33/1/1 -f 40/1/2 39/1/2 36/1/2 -f 33/1/1 34/1/1 36/1/1 -f 2/1/1 30/1/1 31/1/1 -f 32/1/1 31/1/1 34/1/1 -f 42/1/2 41/1/2 39/1/2 -f 4/1/2 6/1/2 20/1/2 -f 43/1/1 44/1/1 46/1/1 -f 27/1/2 29/1/2 17/1/2 -f 26/1/1 25/1/1 23/1/1 -f 28/1/2 17/1/2 14/1/2 -f 10/1/1 9/1/1 12/1/1 -f 24/1/1 23/1/1 21/1/1 -f 20/1/2 7/1/2 4/1/2 -f 22/1/1 21/1/1 20/1/1 -f 14/1/2 16/1/2 28/1/2 -f 11/1/1 12/1/1 14/1/1 -f 54/1/2 56/1/2 52/1/2 -f 45/1/1 46/1/1 48/1/1 -f 19/1/1 20/1/1 18/1/1 -f 13/1/1 14/1/1 15/1/1 -f 48/1/1 47/1/1 45/1/1 -f 53/1/1 48/1/1 55/1/1 -f 52/1/2 55/1/2 54/1/2 -f 57/1/2 41/1/2 58/1/2 -f 59/1/1 8/1/1 62/1/1 -f 64/1/2 29/1/2 63/1/2 -f 60/1/2 5/1/2 61/1/2 -f 65/1/2 72/1/2 126/1/2 -f 67/1/1 69/1/1 125/1/1 -f 102/1/1 100/1/1 104/1/1 -f 114/1/1 115/1/1 123/1/1 -f 100/1/2 99/1/2 101/1/2 -f 104/1/1 103/1/1 106/1/1 -f 97/1/2 98/1/2 96/1/2 -f 66/1/2 94/1/2 124/1/2 -f 96/1/2 95/1/2 66/1/2 -f 106/1/1 105/1/1 122/1/1 -f 68/1/1 70/1/1 67/1/1 -f 107/1/2 108/1/2 121/1/2 -f 91/1/1 93/1/1 127/1/1 -f 90/1/2 89/1/2 128/1/2 -f 92/1/1 81/1/1 91/1/1 -f 74/1/2 73/1/2 65/1/2 -f 88/1/2 87/1/2 90/1/2 -f 84/1/1 71/1/1 82/1/1 -f 86/1/2 85/1/2 88/1/2 -f 78/1/1 80/1/1 79/1/1 -f 75/1/2 76/1/2 74/1/2 -f 118/1/1 120/1/1 114/1/1 -f 109/1/2 110/1/2 107/1/2 -f 83/1/2 84/1/2 86/1/2 -f 77/1/2 78/1/2 75/1/2 -f 112/1/2 111/1/2 113/1/2 -f 112/1/2 117/1/2 119/1/2 -f 116/1/1 119/1/1 112/1/1 -f 105/1/1 121/1/1 122/1/1 -f 72/1/2 123/1/2 126/1/2 -f 93/1/1 128/1/1 127/1/1 -f 69/1/1 124/1/1 125/1/1 -f 6/1/3 84/1/3 20/1/3 -f 44/1/4 105/1/4 41/1/4 -f 21/1/5 84/1/5 20/1/5 -f 4/1/6 67/1/6 3/1/6 -f 51/1/7 120/1/8 56/1/7 -f 58/1/9 121/1/9 57/1/9 -f 22/1/10 88/1/10 24/1/10 -f 51/1/11 72/1/11 8/1/11 -f 44/1/12 110/1/12 46/1/12 -f 38/1/13 104/1/13 40/1/13 -f 62/1/14 123/1/14 59/1/14 -f 15/1/15 80/1/15 16/1/15 -f 37/1/16 102/1/16 38/1/16 -f 25/1/9 93/1/9 29/1/9 -f 16/1/17 92/1/17 28/1/17 -f 43/1/4 121/1/4 57/1/4 -f 35/1/18 97/1/18 33/1/18 -f 63/1/4 128/1/4 64/1/4 -f 37/1/19 99/1/19 35/1/19 -f 30/1/11 69/1/11 5/1/11 -f 12/1/20 78/1/20 14/1/20 -f 29/1/21 81/1/21 17/1/21 -f 61/1/14 124/1/14 60/1/14 -f 11/1/22 74/1/22 10/1/22 -f 40/1/23 106/1/23 42/1/23 -f 27/1/4 127/1/4 63/1/4 -f 39/1/24 100/1/24 36/1/24 -f 56/1/25 116/1/25 52/1/25 -f 54/1/26 114/1/26 50/1/26 -f 25/1/27 87/1/27 23/1/27 -f 33/1/28 96/1/28 32/1/28 -f 34/1/29 100/1/29 36/1/29 -f 46/1/30 112/1/30 48/1/30 -f 26/1/9 128/1/9 64/1/9 -f 45/1/31 107/1/31 43/1/31 -f 32/1/32 66/1/32 2/1/32 -f 18/1/33 83/1/33 19/1/33 -f 17/1/34 78/1/34 14/1/34 -f 31/1/35 98/1/35 34/1/35 -f 19/1/36 86/1/36 22/1/36 -f 28/1/37 91/1/37 27/1/37 -f 13/1/38 75/1/38 11/1/38 -f 2/1/11 124/1/11 60/1/11 -f 3/1/14 125/1/14 61/1/14 -f 15/1/39 77/1/39 13/1/39 -f 9/1/40 76/1/40 12/1/40 -f 10/1/41 65/1/41 1/1/41 -f 30/1/42 95/1/42 31/1/42 -f 5/1/43 70/1/43 6/1/43 -f 49/1/44 111/1/44 47/1/44 -f 47/1/45 109/1/45 45/1/45 -f 23/1/46 85/1/46 21/1/46 -f 42/1/9 122/1/9 58/1/9 -f 1/1/14 126/1/14 62/1/14 -f 24/1/47 90/1/47 26/1/47 -f 53/1/48 113/1/48 49/1/48 -f 41/1/49 103/1/49 39/1/49 -f 8/1/50 73/1/51 9/1/50 -f 55/1/52 117/1/52 53/1/52 -f 18/1/53 71/1/53 7/1/53 -f 55/1/54 118/1/54 54/1/54 -f 7/1/55 68/1/55 4/1/55 -f 50/1/11 123/1/11 59/1/11 -f 52/1/56 112/1/56 48/1/56 -f 1/1/1 62/1/1 8/1/1 -f 3/1/2 61/1/2 5/1/2 -f 38/1/2 40/1/2 36/1/2 -f 50/1/2 59/1/2 51/1/2 -f 36/1/1 37/1/1 35/1/1 -f 40/1/2 42/1/2 39/1/2 -f 33/1/1 32/1/1 34/1/1 -f 2/1/1 60/1/1 30/1/1 -f 32/1/1 2/1/1 31/1/1 -f 42/1/2 58/1/2 41/1/2 -f 4/1/2 3/1/2 6/1/2 -f 43/1/1 57/1/1 44/1/1 -f 27/1/2 63/1/2 29/1/2 -f 26/1/1 64/1/1 25/1/1 -f 28/1/2 27/1/2 17/1/2 -f 10/1/1 1/1/1 9/1/1 -f 24/1/1 26/1/1 23/1/1 -f 20/1/2 18/1/2 7/1/2 -f 22/1/1 24/1/1 21/1/1 -f 14/1/2 15/1/2 16/1/2 -f 11/1/1 10/1/1 12/1/1 -f 54/1/2 50/1/2 56/1/2 -f 45/1/1 43/1/1 46/1/1 -f 19/1/1 22/1/1 20/1/1 -f 13/1/1 11/1/1 14/1/1 -f 48/1/1 49/1/1 47/1/1 -f 53/1/1 49/1/1 48/1/1 -f 52/1/2 48/1/2 55/1/2 -f 57/1/2 44/1/2 41/1/2 -f 59/1/1 51/1/1 8/1/1 -f 64/1/2 25/1/2 29/1/2 -f 60/1/2 30/1/2 5/1/2 -f 65/1/2 73/1/2 72/1/2 -f 67/1/1 70/1/1 69/1/1 -f 102/1/1 101/1/1 100/1/1 -f 114/1/1 120/1/1 115/1/1 -f 100/1/2 97/1/2 99/1/2 -f 104/1/1 100/1/1 103/1/1 -f 97/1/2 100/1/2 98/1/2 -f 66/1/2 95/1/2 94/1/2 -f 96/1/2 98/1/2 95/1/2 -f 106/1/1 103/1/1 105/1/1 -f 68/1/1 84/1/1 70/1/1 -f 107/1/2 110/1/2 108/1/2 -f 91/1/1 81/1/1 93/1/1 -f 90/1/2 87/1/2 89/1/2 -f 92/1/1 78/1/1 81/1/1 -f 74/1/2 76/1/2 73/1/2 -f 88/1/2 85/1/2 87/1/2 -f 84/1/1 68/1/1 71/1/1 -f 86/1/2 84/1/2 85/1/2 -f 78/1/1 92/1/1 80/1/1 -f 75/1/2 78/1/2 76/1/2 -f 118/1/1 116/1/1 120/1/1 -f 109/1/2 112/1/2 110/1/2 -f 83/1/2 82/1/2 84/1/2 -f 77/1/2 79/1/2 78/1/2 -f 112/1/2 109/1/2 111/1/2 -f 112/1/2 113/1/2 117/1/2 -f 116/1/1 118/1/1 119/1/1 -f 105/1/1 108/1/1 121/1/1 -f 72/1/2 115/1/2 123/1/2 -f 93/1/1 89/1/1 128/1/1 -f 69/1/1 94/1/1 124/1/1 -f 6/1/3 70/1/3 84/1/3 -f 44/1/4 108/1/4 105/1/4 -f 21/1/5 85/1/5 84/1/5 -f 4/1/6 68/1/6 67/1/6 -f 51/1/7 115/1/8 120/1/8 -f 58/1/9 122/1/9 121/1/9 -f 22/1/10 86/1/10 88/1/10 -f 51/1/11 115/1/11 72/1/11 -f 44/1/12 108/1/12 110/1/12 -f 38/1/13 102/1/13 104/1/13 -f 62/1/14 126/1/14 123/1/14 -f 15/1/15 79/1/15 80/1/15 -f 37/1/16 101/1/16 102/1/16 -f 25/1/9 89/1/9 93/1/9 -f 16/1/17 80/1/17 92/1/17 -f 43/1/4 107/1/4 121/1/4 -f 35/1/18 99/1/18 97/1/18 -f 63/1/4 127/1/4 128/1/4 -f 37/1/19 101/1/19 99/1/19 -f 30/1/11 94/1/11 69/1/11 -f 12/1/20 76/1/20 78/1/20 -f 29/1/21 93/1/21 81/1/21 -f 61/1/14 125/1/14 124/1/14 -f 11/1/22 75/1/22 74/1/22 -f 40/1/23 104/1/23 106/1/23 -f 27/1/4 91/1/4 127/1/4 -f 39/1/24 103/1/24 100/1/24 -f 56/1/25 120/1/25 116/1/25 -f 54/1/26 118/1/26 114/1/26 -f 25/1/27 89/1/27 87/1/27 -f 33/1/28 97/1/28 96/1/28 -f 34/1/29 98/1/29 100/1/29 -f 46/1/30 110/1/30 112/1/30 -f 26/1/9 90/1/9 128/1/9 -f 45/1/31 109/1/31 107/1/31 -f 32/1/32 96/1/32 66/1/32 -f 18/1/33 82/1/33 83/1/33 -f 17/1/34 81/1/34 78/1/34 -f 31/1/35 95/1/35 98/1/35 -f 19/1/36 83/1/36 86/1/36 -f 28/1/37 92/1/37 91/1/37 -f 13/1/38 77/1/38 75/1/38 -f 2/1/11 66/1/11 124/1/11 -f 3/1/14 67/1/14 125/1/14 -f 15/1/39 79/1/39 77/1/39 -f 9/1/40 73/1/40 76/1/40 -f 10/1/41 74/1/41 65/1/41 -f 30/1/42 94/1/42 95/1/42 -f 5/1/43 69/1/43 70/1/43 -f 49/1/44 113/1/44 111/1/44 -f 47/1/45 111/1/45 109/1/45 -f 23/1/46 87/1/46 85/1/46 -f 42/1/9 106/1/9 122/1/9 -f 1/1/14 65/1/14 126/1/14 -f 24/1/47 88/1/47 90/1/47 -f 53/1/48 117/1/48 113/1/48 -f 41/1/49 105/1/49 103/1/49 -f 8/1/50 72/1/51 73/1/51 -f 55/1/52 119/1/52 117/1/52 -f 18/1/53 82/1/53 71/1/53 -f 55/1/54 119/1/54 118/1/54 -f 7/1/55 71/1/55 68/1/55 -f 50/1/11 114/1/11 123/1/11 -f 52/1/56 116/1/56 112/1/56 +f 77/1/1 57/2/2 58/3/1 +f 53/4/3 77/4/4 58/4/4 +f 20/4/5 112/4/6 19/4/6 +f 100/4/7 33/4/8 99/4/9 +f 49/4/10 84/4/10 48/4/10 +f 66/4/11 23/4/12 63/4/12 +f 102/4/13 17/4/13 16/4/13 +f 101/4/14 10/4/15 95/4/16 +f 65/4/17 23/4/18 26/4/19 +f 101/4/1 14/4/1 11/4/1 +f 90/4/20 9/4/21 6/4/22 +f 93/4/23 18/4/23 13/4/23 +f 67/4/24 28/4/24 68/4/25 +f 107/4/26 42/4/27 41/4/28 +f 54/4/29 78/4/30 53/4/31 +f 4/4/32 34/4/33 38/4/34 +f 109/4/35 44/4/35 43/4/36 +f 68/4/37 30/4/38 70/4/37 +f 82/4/39 44/4/39 72/4/39 +f 73/4/40 30/4/40 60/4/41 +f 29/4/42 71/4/42 87/4/42 +f 86/4/43 59/4/43 31/4/43 +f 94/4/44 10/4/45 32/4/46 +f 92/4/47 9/4/48 91/4/49 +f 83/4/50 47/4/50 74/4/50 +f 37/4/51 103/4/51 105/4/52 +f 2/4/53 45/4/54 1/4/54 +f 112/5/55 24/6/55 19/7/55 +f 41/4/55 106/4/55 107/4/55 +f 99/4/56 34/4/57 98/4/56 +f 1/4/58 55/4/59 111/4/59 +f 6/4/50 88/4/50 90/4/50 +f 4/4/60 35/4/61 3/4/60 +f 111/4/62 56/4/63 110/4/63 +f 48/4/64 73/4/65 60/4/66 +f 110/4/67 51/4/68 80/4/67 +f 61/4/69 21/4/69 17/4/70 +f 31/4/71 87/4/72 86/4/72 +f 13/8/73 7/9/73 14/10/73 +f 12/4/74 96/4/75 7/4/76 +f 74/4/77 46/4/78 82/4/77 +f 67/4/79 26/4/80 25/4/81 +f 8/4/82 88/4/83 5/4/84 +f 59/4/85 79/4/86 54/4/86 +f 62/4/87 20/4/87 21/4/87 +f 49/11/88 48/12/73 53/13/73 +f 108/4/89 43/4/89 42/4/89 +f 7/4/90 89/4/91 8/4/92 +f 104/4/93 39/4/93 18/4/94 +f 97/4/95 13/4/96 14/4/97 +f 107/14/98 98/15/98 1/4/99 +f 15/4/100 102/4/101 16/4/101 +f 86/16/98 102/17/98 67/18/98 +f 2/19/79 35/4/79 114/4/102 +f 81/4/103 51/4/103 50/4/104 +f 69/4/105 27/4/106 24/4/107 +f 81/4/108 52/4/108 75/4/109 +f 36/4/110 105/4/111 106/4/112 +f 76/4/113 52/4/114 57/4/115 +f 66/4/116 32/4/116 22/4/117 +f 77/1/1 76/20/1 57/2/2 +f 53/4/3 78/4/4 77/4/4 +f 20/4/5 64/4/118 112/4/6 +f 100/4/7 12/4/119 33/4/8 +f 49/4/10 83/4/10 84/4/10 +f 66/4/11 22/4/120 23/4/12 +f 102/4/13 61/4/13 17/4/13 +f 101/4/14 11/4/121 10/4/15 +f 65/4/17 63/4/18 23/4/18 +f 101/4/1 97/4/1 14/4/1 +f 90/4/20 91/4/22 9/4/21 +f 93/4/23 104/4/23 18/4/23 +f 67/4/24 25/4/122 28/4/24 +f 107/4/26 108/4/123 42/4/27 +f 54/4/29 79/4/124 78/4/30 +f 4/4/32 98/4/32 34/4/33 +f 109/4/35 72/4/36 44/4/35 +f 68/4/37 28/4/37 30/4/38 +f 82/4/39 46/4/39 44/4/39 +f 73/4/40 70/4/40 30/4/40 +f 29/4/42 27/4/42 71/4/42 +f 86/4/43 85/4/125 59/4/43 +f 94/4/44 95/4/126 10/4/45 +f 92/4/47 15/4/48 9/4/48 +f 83/4/50 49/4/50 47/4/50 +f 37/4/51 39/4/127 103/4/51 +f 2/4/53 40/4/54 45/4/54 +f 112/5/55 69/21/55 24/6/55 +f 41/4/55 36/4/55 106/4/55 +f 99/4/56 33/4/128 34/4/57 +f 1/4/58 45/4/129 55/4/59 +f 6/4/50 5/4/50 88/4/50 +f 4/4/60 38/4/130 35/4/61 +f 111/4/62 55/4/131 56/4/63 +f 48/4/64 84/4/132 73/4/65 +f 110/4/67 56/4/67 51/4/68 +f 61/4/69 62/4/133 21/4/69 +f 31/4/71 29/4/134 87/4/72 +f 37/22/73 36/23/73 114/24/73 +f 114/24/73 35/25/73 38/26/73 +f 38/26/73 34/27/73 33/28/73 +f 33/28/73 12/29/73 7/9/73 +f 7/9/73 8/30/73 5/31/73 +f 5/31/73 6/32/73 9/33/73 +f 9/33/73 15/34/73 16/35/73 +f 16/35/73 17/36/135 21/37/136 +f 21/37/136 20/38/137 22/39/138 +f 21/37/136 22/39/138 32/40/73 +f 9/33/73 16/35/73 21/37/136 +f 7/9/73 5/31/73 9/33/73 +f 38/26/73 33/28/73 7/9/73 +f 37/22/73 114/24/73 38/26/73 +f 39/41/73 37/22/73 38/26/73 +f 9/33/73 21/37/136 32/40/73 +f 9/33/73 32/40/73 10/42/73 +f 39/41/73 38/26/73 7/9/73 +f 18/43/73 39/41/73 7/9/73 +f 9/33/73 10/42/73 11/44/73 +f 9/33/73 11/44/73 14/10/73 +f 13/8/73 18/43/73 7/9/73 +f 7/9/73 9/33/73 14/10/73 +f 12/4/74 100/4/74 96/4/75 +f 74/4/77 47/4/77 46/4/78 +f 67/4/79 65/4/79 26/4/80 +f 8/4/82 89/4/82 88/4/83 +f 59/4/85 85/4/139 79/4/86 +f 62/4/87 64/4/140 20/4/87 +f 55/45/73 45/46/73 40/47/73 +f 40/47/73 114/24/73 36/23/73 +f 40/47/73 36/23/73 41/48/73 +f 56/49/73 55/45/73 40/47/73 +f 50/50/73 51/51/73 56/49/73 +f 57/2/141 52/52/142 50/50/73 +f 53/13/73 58/3/135 57/2/141 +f 59/53/73 54/54/73 53/13/73 +f 29/55/73 31/56/73 59/53/73 +f 24/57/73 27/58/73 29/55/73 +f 20/38/73 19/59/73 24/57/73 +f 23/60/73 22/39/73 20/38/73 +f 26/61/143 23/60/73 20/38/73 +f 20/38/73 24/57/73 29/55/73 +f 29/55/73 59/53/73 53/13/73 +f 53/13/73 57/2/141 50/50/73 +f 50/50/73 56/49/73 40/47/73 +f 40/47/73 41/48/73 42/62/88 +f 40/47/73 42/62/88 43/63/73 +f 26/61/143 20/38/73 29/55/73 +f 25/64/73 26/61/143 29/55/73 +f 50/50/73 40/47/73 43/63/73 +f 50/50/73 43/63/73 44/65/73 +f 28/66/73 25/64/73 29/55/73 +f 30/67/73 28/66/73 29/55/73 +f 50/50/73 44/65/73 46/68/73 +f 50/50/73 46/68/73 47/69/73 +f 30/67/73 29/55/73 53/13/73 +f 60/70/73 30/67/73 53/13/73 +f 53/13/73 50/50/73 47/69/73 +f 53/13/73 47/69/73 49/11/88 +f 48/12/73 60/70/73 53/13/73 +f 108/4/89 109/4/89 43/4/89 +f 7/4/90 96/4/144 89/4/91 +f 104/4/93 103/4/93 39/4/93 +f 97/4/95 93/4/145 13/4/96 +f 104/71/98 93/72/98 89/73/98 +f 89/73/98 96/74/98 100/75/98 +f 100/75/98 99/76/98 98/15/98 +f 98/15/98 4/4/146 3/4/98 +f 3/4/98 2/4/98 1/4/99 +f 1/4/99 111/77/147 110/78/98 +f 110/78/98 80/79/98 81/80/98 +f 81/80/98 75/81/148 72/82/149 +f 81/80/98 72/82/149 109/83/98 +f 1/4/99 110/78/98 81/80/98 +f 98/15/98 3/4/98 1/4/99 +f 89/73/98 100/75/98 98/15/98 +f 103/84/150 104/71/98 89/73/98 +f 105/85/98 103/84/150 89/73/98 +f 1/4/99 81/80/98 109/83/98 +f 1/4/99 109/83/98 108/86/146 +f 105/85/98 89/73/98 98/15/98 +f 106/87/98 105/85/98 98/15/98 +f 1/4/99 108/86/146 107/14/98 +f 107/14/98 106/87/98 98/15/98 +f 15/4/100 92/4/151 102/4/101 +f 77/1/99 78/88/98 79/89/98 +f 79/89/98 85/90/98 86/16/98 +f 86/16/98 87/91/98 71/92/98 +f 71/92/98 69/93/98 112/94/147 +f 112/94/147 64/95/152 62/96/153 +f 62/96/153 61/97/98 102/17/98 +f 102/17/98 92/98/98 91/99/98 +f 91/99/98 90/100/98 88/101/98 +f 88/101/98 89/73/154 93/72/155 +f 88/101/98 93/72/155 97/102/98 +f 102/17/98 91/99/98 88/101/98 +f 112/94/147 62/96/153 102/17/98 +f 86/16/98 71/92/98 112/94/147 +f 77/1/99 79/89/98 86/16/98 +f 75/81/98 76/20/98 77/1/99 +f 82/103/98 72/82/98 75/81/98 +f 74/104/98 82/103/98 75/81/98 +f 75/81/98 77/1/99 86/16/98 +f 86/16/98 112/94/147 102/17/98 +f 102/17/98 88/101/98 97/102/98 +f 102/17/98 97/102/98 101/105/98 +f 74/104/98 75/81/98 86/16/98 +f 83/106/98 74/104/98 86/16/98 +f 102/17/98 101/105/98 95/107/98 +f 102/17/98 95/107/98 94/108/98 +f 84/109/98 83/106/98 86/16/98 +f 73/110/98 84/109/98 86/16/98 +f 102/17/98 94/108/98 66/111/98 +f 102/17/98 66/111/98 63/112/98 +f 70/113/98 73/110/98 86/16/98 +f 68/114/98 70/113/98 86/16/98 +f 102/17/98 63/112/98 65/115/98 +f 67/18/98 68/114/98 86/16/98 +f 102/17/98 65/115/98 67/18/98 +f 114/4/102 40/116/79 2/19/79 +f 2/19/79 3/4/79 35/4/79 +f 81/4/103 80/4/156 51/4/103 +f 69/4/105 71/4/157 27/4/106 +f 81/4/108 50/4/158 52/4/108 +f 36/4/110 37/4/159 105/4/111 +f 76/4/113 75/4/160 52/4/114 +f 66/4/116 94/4/117 32/4/116 diff --git a/user/meshes/squircle.obj.import b/user/meshes/squircle.obj.import index f0127aa..06470cb 100644 --- a/user/meshes/squircle.obj.import +++ b/user/meshes/squircle.obj.import @@ -3,7 +3,7 @@ importer="wavefront_obj" importer_version=1 type="Mesh" -uid="uid://ceww5w8t33lqy" +uid="uid://uqxu6tq6xhhg" path="res://.godot/imported/squircle.obj-225977f59237681c89d063aa285f28d6.mesh" [deps] diff --git a/user/skins/default/menu.mp3 b/user/skins/default/menu.mp3 index 4037223..a5b50d1 100644 Binary files a/user/skins/default/menu.mp3 and b/user/skins/default/menu.mp3 differ diff --git a/user/skins/default/menu.mp3.import b/user/skins/default/menu.mp3.import index 0945c7f..d4ebcf2 100644 --- a/user/skins/default/menu.mp3.import +++ b/user/skins/default/menu.mp3.import @@ -2,7 +2,7 @@ importer="mp3" type="AudioStreamMP3" -uid="uid://dmcsqenc85jnh" +uid="uid://clsspjk4xdg3t" path="res://.godot/imported/menu.mp3-6464f7e421fc1b163d703d2d678f5f82.mp3str" [deps]