From 1e005c56c29db8d39fe2ac0eb0b5680cfe7b9e4e Mon Sep 17 00:00:00 2001
From: oldcrate <139006122+oldcrate@users.noreply.github.com>
Date: Tue, 29 Sep 2026 19:59:41 +0200
Subject: [PATCH 01/18] feat: added video backgrounds
---
.gitignore | 1 +
prefabs/map_info_container.tscn | 2 -
project.godot | 2 +-
scenes/game.tscn | 16 +++-
scripts/database/settings/SettingsProfile.cs | 60 +++++++--------
scripts/game/Runner.cs | 78 ++++++++++++++++++--
scripts/game/ui/PauseMenu.cs | 6 ++
scripts/map/MapManager.cs | 4 +-
scripts/ui/menu/play/MapInfoContainer.cs | 18 ++---
9 files changed, 135 insertions(+), 52 deletions(-)
diff --git a/.gitignore b/.gitignore
index 6696ada6..7e6247e1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -30,3 +30,4 @@ mono_crash.*.json
# Other
nuget.config
*.lscache
+addons/gde_gozen
diff --git a/prefabs/map_info_container.tscn b/prefabs/map_info_container.tscn
index db3771d1..de8eaee5 100644
--- a/prefabs/map_info_container.tscn
+++ b/prefabs/map_info_container.tscn
@@ -382,7 +382,6 @@ icon = ExtResource("5_1m5pv")
icon_alignment = 1
[node name="Video" type="Button" parent="Info/ScrollContainer/HBoxContainer/Subholder/Buttons" unique_id=1985048325]
-visible = false
layout_mode = 2
tooltip_text = "Add Video"
focus_mode = 0
@@ -390,7 +389,6 @@ mouse_default_cursor_shape = 2
theme = ExtResource("4_4d08m")
theme_override_colors/font_color = Color(1, 1, 1, 1)
theme_override_constants/icon_max_width = 24
-disabled = true
icon = ExtResource("6_g02bu")
icon_alignment = 1
diff --git a/project.godot b/project.godot
index b22af139..cf4f7cca 100644
--- a/project.godot
+++ b/project.godot
@@ -59,7 +59,7 @@ project/assembly_name="Rhythia"
[editor_plugins]
-enabled=PackedStringArray()
+enabled=PackedStringArray("res://addons/gde_gozen/plugin.cfg")
[file_customization]
diff --git a/scenes/game.tscn b/scenes/game.tscn
index 1d706810..73d957e2 100644
--- a/scenes/game.tscn
+++ b/scenes/game.tscn
@@ -41,6 +41,7 @@
[ext_resource type="Script" uid="uid://cvaggwr3rrenl" path="res://scripts/game/renderers/NoteRenderer.cs" id="34_pr1ej"]
[ext_resource type="Texture2D" uid="uid://bc0w1ujoshiyk" path="res://user/skins/default/game/visibility_assist.png" id="36_05nbr"]
[ext_resource type="Script" uid="uid://c8d872aoiqglo" path="res://scripts/PlayerInputController.cs" id="37_02fa5"]
+[ext_resource type="Script" uid="uid://dqo4ee3g73ock" path="res://addons/gde_gozen/VideoPlayback.cs" id="38_0sl42"]
[ext_resource type="Script" uid="uid://dlxxg2h4cl5hj" path="res://scripts/game/ui/PauseMenu.cs" id="38_8ool0"]
[ext_resource type="Script" uid="uid://c24b7vefbxvbh" path="res://scripts/game/ui/PlaytestOverlay.cs" id="40_m4url"]
@@ -220,7 +221,6 @@ texture_filter = 1
texture_repeat = false
[sub_resource type="QuadMesh" id="QuadMesh_3p7x2"]
-size = Vector2(258.3, 210)
[sub_resource type="StyleBoxEmpty" id="StyleBoxEmpty_d5aou"]
@@ -708,8 +708,7 @@ fov = 70.0
size = 5.0
[node name="Video" type="MeshInstance3D" parent="Runner" unique_id=1036410191]
-transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.479675, -0.459572, -99.9929)
-visible = false
+transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -100)
material_override = SubResource("StandardMaterial3D_rj3ky")
transparency = 1.0
cast_shadow = 0
@@ -721,6 +720,17 @@ transparent_bg = true
canvas_item_default_texture_filter = 2
size = Vector2i(1920, 1080)
+[node name="VideoPlayer" type="Control" parent="Runner/Video/VideoViewport" unique_id=1903130493]
+layout_mode = 3
+anchors_preset = 15
+anchor_right = 1.0
+anchor_bottom = 1.0
+grow_horizontal = 2
+grow_vertical = 2
+script = ExtResource("38_0sl42")
+EnableAudio = false
+metadata/_custom_type_script = "uid://dqo4ee3g73ock"
+
[node name="QuitOverlay" type="Panel" parent="." unique_id=316579954]
visible = false
modulate = Color(1, 1, 1, 0)
diff --git a/scripts/database/settings/SettingsProfile.cs b/scripts/database/settings/SettingsProfile.cs
index d4a5eeb0..e739b733 100644
--- a/scripts/database/settings/SettingsProfile.cs
+++ b/scripts/database/settings/SettingsProfile.cs
@@ -208,14 +208,14 @@ public partial class SettingsProfile
///
/// Adjusts the video background dim
///
- //[Order]
- //public SettingsItem VideoDim { get; private set; }
+ [Order]
+ public SettingsItem VideoDim { get; private set; }
///
/// Adjusts the scale of the video background
///
- //[Order]
- //public SettingsItem VideoRenderScale { get; private set; }
+ [Order]
+ public SettingsItem VideoRenderScale { get; private set; }
///
/// Toggles Grid Guides
@@ -916,37 +916,37 @@ public SettingsProfile()
},
};
- //VideoDim = new(80)
- //{
- //Id = "VideoDim",
- //Title = "Video BG Dim",
- //Description = "Adjusts the video background dim",
- //Section = SettingsSection.Visual,
- //Slider = new()
- //{
- //Step = 1,
- //MinValue = 0,
- //MaxValue = 100
- //}
- //};
+ VideoDim = new(80)
+ {
+ Id = "VideoDim",
+ Title = "Video BG Dim",
+ Description = "Adjusts the video background dim",
+ Section = SettingsSection.Visual,
+ Slider = new()
+ {
+ Step = 1,
+ MinValue = 0,
+ MaxValue = 100
+ }
+ };
#endregion
#region Video
- //VideoRenderScale = new(100)
- //{
- //Id = "VideoRenderScale",
- //Title = "Video BG Render Scale",
- //Description = "Adjusts the scale of the video background",
- //Section = SettingsSection.Visual,
- //Slider = new()
- //{
- //Step = 1,
- //MinValue = 0,
- //MaxValue = 100
- //}
- //};
+ VideoRenderScale = new(100)
+ {
+ Id = "VideoRenderScale",
+ Title = "Video BG Render Scale",
+ Description = "Adjusts the scale of the video background",
+ Section = SettingsSection.Visual,
+ Slider = new()
+ {
+ Step = 1,
+ MinValue = 0,
+ MaxValue = 100
+ }
+ };
SimpleHUD = new(false)
{
diff --git a/scripts/game/Runner.cs b/scripts/game/Runner.cs
index 58eb0a8f..38cc8d74 100644
--- a/scripts/game/Runner.cs
+++ b/scripts/game/Runner.cs
@@ -55,9 +55,16 @@ public partial class Runner : Node3D
[Export]
public MeshInstance3D Cursor;
- // [Export] public VideoStreamPlayer VideoStreamPlayer;
+ [Export]
+ public MeshInstance3D VideoMesh;
+
+ [Export]
+ public SubViewport VideoViewport;
+
+ [Export]
+ public VideoPlayback VideoPlayer;
- public override void _Ready()
+ public override async void _Ready()
{
base._Ready();
@@ -66,7 +73,9 @@ public override void _Ready()
Renderers ??= GetNode>("Renderers");
Grid ??= HudManager.GetNode("Grid");
Cursor ??= GetNode("Cursor");
- // VideoStreamPlayer ??= GetNode("Video/VideoViewport/VideoStreamPlayer");
+ VideoMesh ??= GetNode("Video");
+ VideoViewport ??= GetNode("Video/VideoViewport");
+ VideoPlayer ??= GetNode("Video/VideoViewport/VideoPlayer");
}
public override void _Process(double delta)
@@ -125,7 +134,7 @@ public override void _Process(double delta)
}
}
- // Song state check
+ // Song and video state check
if (Attempt.Map.AudioBuffer != null)
{
@@ -142,6 +151,26 @@ public override void _Process(double delta)
}
}
+ if (Map.VideoBuffer != null && settings.VideoDim < 100 && VideoPlayer.IsOpen())
+ {
+ double offsetProgress = Attempt.Progress - settings.LocalOffset;
+ double songEnd = SoundManager.Song.Stream.GetLength() * 1000;
+
+ if (VideoPlayer.CurrentFrame >= VideoPlayer.GetVideoFrameCount())
+ {
+ VideoPlayer.Close();
+ }
+ else if (!VideoPlayer.IsPlaying && offsetProgress >= 0 && offsetProgress < songEnd)
+ {
+ VideoPlayer.SeekFrame((int)((float)Attempt.Progress / 1000f * VideoPlayer.GetVideoFramerate()));
+ VideoPlayer.Play();
+ }
+ else if (VideoPlayer.IsPlaying && offsetProgress >= songEnd)
+ {
+ VideoPlayer.Close();
+ }
+ }
+
// Skip check
int passedNotes = ObjectIndicesStart[typeof(Note)];
@@ -353,6 +382,23 @@ public void Play()
SoundManager.Song.PitchScale = (float)Speed;
}
+ if (Attempt.Map.VideoBuffer != null && settings.VideoDim < 100)
+ {
+ double parallax = (double)settings.CameraParallax;
+
+ double meshHeight = 2 * Math.Abs(Camera.Position.Z - VideoMesh.Position.Z) * Math.Tan(settings.FoV * Math.PI / 180 / 2);
+ double meshWidth = (double)VideoViewport.Size.X / VideoViewport.Size.Y * meshHeight;
+
+ QuadMesh videoQuad = (QuadMesh)VideoMesh.Mesh;
+ videoQuad.Size = new Vector2((float)meshWidth + 2 * Constants.BOUNDS.X, (float)meshHeight + 2 * Constants.BOUNDS.Y);
+
+ VideoMesh.Visible = true;
+ VideoMesh.Transparency = (float)(double)settings.VideoDim / 100f;
+
+ VideoPlayer.Path = $"{MapUtil.MapsFolder}/{Attempt.Map.Name}/video.mp4";
+ VideoPlayer.PlaybackSpeed = (float)Speed;
+ }
+
if (Attempt.IsReplay)
{
for (int i = 0; i < Attempt.Replays.Length; i++)
@@ -373,9 +419,16 @@ public void Pause(bool? pause = null)
SoundManager.Song.PitchScale = (float)Speed;
SoundManager.Song.StreamPaused = !Playing;
+ if (Attempt.Map.VideoBuffer != null && Attempt.Progress >= 0)
+ {
+ if (Playing && VideoPlayer.IsOpen()) { VideoPlayer.Play(); }
+ else if (!Playing && VideoPlayer.IsOpen()) { VideoPlayer.Pause(); }
+ }
+
if (Playing)
{
syncSongPosition();
+ syncVideoPosition();
}
}
@@ -413,6 +466,7 @@ public void Seek(double ms)
RenderObjects(0);
syncSongPosition();
+ syncVideoPosition();
// Discord.Client.UpdateEndTime(DateTime.UtcNow.AddSeconds((Time.GetUnixTimeFromSystem() + (Attempt.Map.Length - Attempt.Progress) / 1000 / Speed)));
}
@@ -460,6 +514,8 @@ public void Stop(bool results = true)
return;
}
+ VideoPlayer.Close();
+
// give objects a last chance
ProcessObjects();
@@ -691,7 +747,19 @@ private void syncSongPosition()
}
SoundManager.Song.Seek((float)(Attempt.Progress - Attempt.Settings.LocalOffset) / 1000);
- // VideoStreamPlayer.StreamPosition = (float)Attempt.Progress / 1000;
+ }
+ }
+
+ private void syncVideoPosition()
+ {
+ if (Attempt.Map.VideoBuffer != null)
+ {
+ if (!VideoPlayer.IsPlaying && VideoPlayer.IsOpen() && Playing)
+ {
+ VideoPlayer.Play();
+ }
+
+ VideoPlayer.SeekFrame((int)((float)Attempt.Progress / 1000f * VideoPlayer.GetVideoFramerate()));
}
}
}
diff --git a/scripts/game/ui/PauseMenu.cs b/scripts/game/ui/PauseMenu.cs
index 2c932e1c..be9a4f85 100644
--- a/scripts/game/ui/PauseMenu.cs
+++ b/scripts/game/ui/PauseMenu.cs
@@ -48,6 +48,12 @@ public void ShowMenu(bool show = true, bool instant = false)
SoundManager.Song.PitchScale = (float)attempt.Speed;
SoundManager.Song.StreamPaused = !runner.Playing;
+ if (attempt.Map.VideoBuffer != null && attempt.Progress >= 0 && runner.VideoPlayer.IsOpen())
+ {
+ if (runner.Playing) { runner.VideoPlayer.Play(); }
+ else if (!runner.Playing) { runner.VideoPlayer.Pause(); }
+ }
+
MenuCursor.Instance.UpdateVisible(Shown && SettingsManager.Instance.Settings.UseCursorInMenus.Value);
if (Shown)
diff --git a/scripts/map/MapManager.cs b/scripts/map/MapManager.cs
index 7cdbe2d5..7ed70ad4 100644
--- a/scripts/map/MapManager.cs
+++ b/scripts/map/MapManager.cs
@@ -65,10 +65,10 @@ public static void InsertVideo(Map map, string path)
map.AudioBuffer = oldmap.AudioBuffer;
map.CoverBuffer = oldmap.CoverBuffer;
- Directory.Delete(map.FolderPath);
+ Directory.Delete(map.FolderPath, true);
MapParser.Encode(map);
- map.FolderPath = MapCache.GetMd5Checksum(map.FolderPath);
+ map.MetadataObjectHash = MapCache.GetMd5Checksum(map.FolderPath);
Update(map);
}
diff --git a/scripts/ui/menu/play/MapInfoContainer.cs b/scripts/ui/menu/play/MapInfoContainer.cs
index a12d89e4..62a147f1 100644
--- a/scripts/ui/menu/play/MapInfoContainer.cs
+++ b/scripts/ui/menu/play/MapInfoContainer.cs
@@ -148,15 +148,15 @@ public override void _Ready()
favoriteButton.Icon = Map.Favorite ? skin.UnfavoriteButtonImage : skin.FavoriteButtonImage;
};
- //videoButton.Pressed += () =>
- //{
- // videoDialog.Popup();
- //};
-
- //videoDialog.FileSelected += (file) =>
- //{
- // MapManager.InsertVideo(Map, file);
- //};
+ videoButton.Pressed += () =>
+ {
+ videoDialog.Popup();
+ };
+
+ videoDialog.FileSelected += (file) =>
+ {
+ MapManager.InsertVideo(Map, file);
+ };
// copyButton.Pressed += () =>
// {
From e44e0b629f4bbc35f9a7624532d84c1ccbdb8c4c Mon Sep 17 00:00:00 2001
From: oldcrate <139006122+oldcrate@users.noreply.github.com>
Date: Fri, 2 Oct 2026 18:37:34 +0200
Subject: [PATCH 02/18] QoL: added video disable and fade in
---
prefabs/map_info_container.tscn | 2 +-
scripts/database/settings/SettingsProfile.cs | 36 +++++++++++++++++---
scripts/game/Attempt.cs | 5 ++-
scripts/game/Runner.cs | 21 +++++++-----
scripts/game/ui/PauseMenu.cs | 2 +-
scripts/map/Map.cs | 3 ++
scripts/scenes/Game.cs | 8 ++++-
scripts/skinning/SkinManager.cs | 4 +--
scripts/skinning/SkinProfile.cs | 4 +--
scripts/ui/menu/play/MapInfoContainer.cs | 21 +++++++++++-
10 files changed, 85 insertions(+), 21 deletions(-)
diff --git a/prefabs/map_info_container.tscn b/prefabs/map_info_container.tscn
index de8eaee5..2eda6792 100644
--- a/prefabs/map_info_container.tscn
+++ b/prefabs/map_info_container.tscn
@@ -383,7 +383,7 @@ icon_alignment = 1
[node name="Video" type="Button" parent="Info/ScrollContainer/HBoxContainer/Subholder/Buttons" unique_id=1985048325]
layout_mode = 2
-tooltip_text = "Add Video"
+tooltip_text = "Disable Video Background"
focus_mode = 0
mouse_default_cursor_shape = 2
theme = ExtResource("4_4d08m")
diff --git a/scripts/database/settings/SettingsProfile.cs b/scripts/database/settings/SettingsProfile.cs
index e739b733..739c4691 100644
--- a/scripts/database/settings/SettingsProfile.cs
+++ b/scripts/database/settings/SettingsProfile.cs
@@ -115,6 +115,12 @@ public partial class SettingsProfile
[Order]
public SettingsItem GameSpace { get; private set; }
+ ///
+ /// Use void background when video background is visible
+ ///
+ // [Order]
+ // public SettingsItem VideoBgBlankSpace { get; private set; }
+
///
/// Toggles note hit effects for the game space
///
@@ -217,6 +223,12 @@ public partial class SettingsProfile
[Order]
public SettingsItem VideoRenderScale { get; private set; }
+ ///
+ /// Disables video bg for all maps
+ ///
+ [Order]
+ public SettingsItem DisableVideoGlobal { get; private set; }
+
///
/// Toggles Grid Guides
///
@@ -718,6 +730,14 @@ public SettingsProfile()
},
};
+ // VideoBgBlankSpace = new(false)
+ // {
+ // Id = "VideoBgBlankSpace",
+ // Title = "Use Void Space For Video Backgrounds",
+ // Description = "Use the void game space when video background is visible",
+ // Section = SettingsSection.Visual,
+ // };
+
SpaceHitEffects = new(true)
{
Id = "SpaceHitEffects",
@@ -916,6 +936,10 @@ public SettingsProfile()
},
};
+ #endregion
+
+ #region Video
+
VideoDim = new(80)
{
Id = "VideoDim",
@@ -930,10 +954,6 @@ public SettingsProfile()
}
};
- #endregion
-
- #region Video
-
VideoRenderScale = new(100)
{
Id = "VideoRenderScale",
@@ -948,6 +968,14 @@ public SettingsProfile()
}
};
+ DisableVideoGlobal = new(false)
+ {
+ Id = "DisableVideoGlobal",
+ Title = "Disable All Video Backgrounds",
+ Description = "Don't show video backgrounds for any map",
+ Section = SettingsSection.Visual,
+ };
+
SimpleHUD = new(false)
{
Id = "SimpleHUD",
diff --git a/scripts/game/Attempt.cs b/scripts/game/Attempt.cs
index 7aa32df0..3f96a05d 100644
--- a/scripts/game/Attempt.cs
+++ b/scripts/game/Attempt.cs
@@ -27,6 +27,7 @@ public partial class Attempt : RefCounted
public double Speed;
public double StartFrom;
public double Length;
+ public bool DisableVideo;
public double Accuracy = 100;
public double Health = 100;
@@ -70,7 +71,8 @@ public Attempt(
CameraMode cameraMode,
List mods,
string[] players = null,
- Replay[] replays = null
+ Replay[] replays = null,
+ bool disableVideo = false
)
{
ID = $"{map.Name}_{OS.GetUniqueId()}_{Time.GetDatetimeStringFromUnixTime((long)Time.GetUnixTimeFromSystem())}".Replace(":", "_");
@@ -89,6 +91,7 @@ public Attempt(
HasHealthModifier = Modifiers.Any(mod => mod is IHealthModifier);
Objects[typeof(Note)] = [.. map.Notes];
HitsInfo = IsReplay ? Replays[0].Notes : new float[Map.Notes.Length];
+ DisableVideo = disableVideo;
if (IsReplay)
{
diff --git a/scripts/game/Runner.cs b/scripts/game/Runner.cs
index 38cc8d74..bb0df7ac 100644
--- a/scripts/game/Runner.cs
+++ b/scripts/game/Runner.cs
@@ -151,7 +151,7 @@ public override void _Process(double delta)
}
}
- if (Map.VideoBuffer != null && settings.VideoDim < 100 && VideoPlayer.IsOpen())
+ if (!Attempt.DisableVideo && Attempt.Map.VideoBuffer != null && settings.VideoDim < 100 && VideoPlayer.IsOpen())
{
double offsetProgress = Attempt.Progress - settings.LocalOffset;
double songEnd = SoundManager.Song.Stream.GetLength() * 1000;
@@ -382,7 +382,7 @@ public void Play()
SoundManager.Song.PitchScale = (float)Speed;
}
- if (Attempt.Map.VideoBuffer != null && settings.VideoDim < 100)
+ if (!Attempt.DisableVideo && Attempt.Map.VideoBuffer != null && settings.VideoDim < 100)
{
double parallax = (double)settings.CameraParallax;
@@ -392,11 +392,16 @@ public void Play()
QuadMesh videoQuad = (QuadMesh)VideoMesh.Mesh;
videoQuad.Size = new Vector2((float)meshWidth + 2 * Constants.BOUNDS.X, (float)meshHeight + 2 * Constants.BOUNDS.Y);
- VideoMesh.Visible = true;
- VideoMesh.Transparency = (float)(double)settings.VideoDim / 100f;
-
VideoPlayer.Path = $"{MapUtil.MapsFolder}/{Attempt.Map.Name}/video.mp4";
VideoPlayer.PlaybackSpeed = (float)Speed;
+
+ VideoMesh.Transparency = 1;
+ VideoMesh.Visible = true;
+ // VideoMesh.Transparency = (float)(double)settings.VideoDim / 100f;
+
+ Tween fadeIn = VideoMesh.CreateTween();
+ fadeIn.TweenProperty(VideoMesh, "transparency", (float)(double)settings.VideoDim / 100f, Math.Abs(Attempt.Progress) / 1000).SetTrans(Tween.TransitionType.Quad).SetEase(Tween.EaseType.In); // assuming Attempt.Progress < 0
+ fadeIn.Play();
}
if (Attempt.IsReplay)
@@ -419,7 +424,7 @@ public void Pause(bool? pause = null)
SoundManager.Song.PitchScale = (float)Speed;
SoundManager.Song.StreamPaused = !Playing;
- if (Attempt.Map.VideoBuffer != null && Attempt.Progress >= 0)
+ if (!Attempt.DisableVideo && Attempt.Map.VideoBuffer != null && Attempt.Progress >= 0)
{
if (Playing && VideoPlayer.IsOpen()) { VideoPlayer.Play(); }
else if (!Playing && VideoPlayer.IsOpen()) { VideoPlayer.Pause(); }
@@ -752,9 +757,9 @@ private void syncSongPosition()
private void syncVideoPosition()
{
- if (Attempt.Map.VideoBuffer != null)
+ if (!Attempt.Map.DisableVideo && Attempt.Map.VideoBuffer != null && VideoPlayer.IsOpen())
{
- if (!VideoPlayer.IsPlaying && VideoPlayer.IsOpen() && Playing)
+ if (!VideoPlayer.IsPlaying && Playing)
{
VideoPlayer.Play();
}
diff --git a/scripts/game/ui/PauseMenu.cs b/scripts/game/ui/PauseMenu.cs
index be9a4f85..0285ca3d 100644
--- a/scripts/game/ui/PauseMenu.cs
+++ b/scripts/game/ui/PauseMenu.cs
@@ -48,7 +48,7 @@ public void ShowMenu(bool show = true, bool instant = false)
SoundManager.Song.PitchScale = (float)attempt.Speed;
SoundManager.Song.StreamPaused = !runner.Playing;
- if (attempt.Map.VideoBuffer != null && attempt.Progress >= 0 && runner.VideoPlayer.IsOpen())
+ if (!attempt.DisableVideo && attempt.Map.VideoBuffer != null && attempt.Progress >= 0 && runner.VideoPlayer.IsOpen())
{
if (runner.Playing) { runner.VideoPlayer.Play(); }
else if (!runner.Playing) { runner.VideoPlayer.Pause(); }
diff --git a/scripts/map/Map.cs b/scripts/map/Map.cs
index 66c9a60d..03d127b6 100644
--- a/scripts/map/Map.cs
+++ b/scripts/map/Map.cs
@@ -90,6 +90,9 @@ public Texture2D Cover
[Ignore]
public byte[] VideoBuffer { get; set; } = [];
+
+ public bool DisableVideo { get; set; }
+
private Note[] notes;
[Ignore]
diff --git a/scripts/scenes/Game.cs b/scripts/scenes/Game.cs
index c8765e0b..4d64297f 100644
--- a/scripts/scenes/Game.cs
+++ b/scripts/scenes/Game.cs
@@ -224,7 +224,13 @@ public static void Play(
StartQueued = true;
var parsedMap = MapParser.Decode(map.FolderPath, Rhythia.AudioFilePath);
- Attempt = new(parsedMap, speed, startFrom, cameraMode, mods, players, replays);
+
+ bool mapDisableVideo = DatabaseService.Connection.Get