diff --git a/Audio/Midi/Song1.mid b/Audio/Midi/Song1.mid deleted file mode 100644 index 8cabb595..00000000 Binary files a/Audio/Midi/Song1.mid and /dev/null differ diff --git a/Audio/Midi/Song2.mid b/Audio/Midi/Song2.mid deleted file mode 100644 index 49e3e6de..00000000 Binary files a/Audio/Midi/Song2.mid and /dev/null differ diff --git a/Audio/Midi/Song3.mid b/Audio/Midi/Song3.mid deleted file mode 100644 index 831fb61f..00000000 Binary files a/Audio/Midi/Song3.mid and /dev/null differ diff --git a/Audio/Midi/florestan-subset.sf2 b/Audio/Midi/florestan-subset.sf2 deleted file mode 100644 index 56a930ac..00000000 Binary files a/Audio/Midi/florestan-subset.sf2 and /dev/null differ diff --git a/Audio/songMaps/Song1.tres b/Audio/songMaps/Song1.tres new file mode 100644 index 00000000..bf63d7af --- /dev/null +++ b/Audio/songMaps/Song1.tres @@ -0,0 +1,216 @@ +[gd_resource type="Resource" load_steps=44 format=3 uid="uid://djm7g0svpexde"] + +[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_5ry1j"] +[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_gbqfw"] + +[sub_resource type="Resource" id="Resource_sycg1"] +script = ExtResource("1_5ry1j") +Beat = 16.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_vh0lg"] +script = ExtResource("1_5ry1j") +Beat = 24.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_4fym7"] +script = ExtResource("1_5ry1j") +Beat = 32.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_mf3c7"] +script = ExtResource("1_5ry1j") +Beat = 5.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_5kf2q"] +script = ExtResource("1_5ry1j") +Beat = 9.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_f15o4"] +script = ExtResource("1_5ry1j") +Beat = 13.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_oert5"] +script = ExtResource("1_5ry1j") +Beat = 17.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_kytyf"] +script = ExtResource("1_5ry1j") +Beat = 21.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_kmfoh"] +script = ExtResource("1_5ry1j") +Beat = 25.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_hsn40"] +script = ExtResource("1_5ry1j") +Beat = 29.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_fdk4c"] +script = ExtResource("1_5ry1j") +Beat = 33.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_1aoo3"] +script = ExtResource("1_5ry1j") +Beat = 37.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_wlcjv"] +script = ExtResource("1_5ry1j") +Beat = 41.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_i1n24"] +script = ExtResource("1_5ry1j") +Beat = 45.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_n2wrp"] +script = ExtResource("1_5ry1j") +Beat = 49.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_gmg26"] +script = ExtResource("1_5ry1j") +Beat = 53.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_2jtmb"] +script = ExtResource("1_5ry1j") +Beat = 57.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_l3uo1"] +script = ExtResource("1_5ry1j") +Beat = 32.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ayat2"] +script = ExtResource("1_5ry1j") +Beat = 35.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_5hrj0"] +script = ExtResource("1_5ry1j") +Beat = 38.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_sbk3e"] +script = ExtResource("1_5ry1j") +Beat = 41.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_erw8g"] +script = ExtResource("1_5ry1j") +Beat = 44.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ohcnr"] +script = ExtResource("1_5ry1j") +Beat = 47.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_1xng4"] +script = ExtResource("1_5ry1j") +Beat = 50.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ullhh"] +script = ExtResource("1_5ry1j") +Beat = 53.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_jf4ph"] +script = ExtResource("1_5ry1j") +Beat = 56.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_l0ykb"] +script = ExtResource("1_5ry1j") +Beat = 59.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_o3ga4"] +script = ExtResource("1_5ry1j") +Beat = 4.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_j4bu6"] +script = ExtResource("1_5ry1j") +Beat = 8.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_3pmwc"] +script = ExtResource("1_5ry1j") +Beat = 12.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_8a8dw"] +script = ExtResource("1_5ry1j") +Beat = 16.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_sen1l"] +script = ExtResource("1_5ry1j") +Beat = 20.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_i8i3p"] +script = ExtResource("1_5ry1j") +Beat = 24.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_v6ql4"] +script = ExtResource("1_5ry1j") +Beat = 28.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_v3ixx"] +script = ExtResource("1_5ry1j") +Beat = 32.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_fjllr"] +script = ExtResource("1_5ry1j") +Beat = 36.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_kfijo"] +script = ExtResource("1_5ry1j") +Beat = 40.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_j42ns"] +script = ExtResource("1_5ry1j") +Beat = 44.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_c3aa2"] +script = ExtResource("1_5ry1j") +Beat = 48.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_a36fj"] +script = ExtResource("1_5ry1j") +Beat = 52.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_gwuir"] +script = ExtResource("1_5ry1j") +Beat = 56.0 +Length = 0.0 + +[resource] +script = ExtResource("2_gbqfw") +UpLaneData = [SubResource("Resource_o3ga4"), SubResource("Resource_j4bu6"), SubResource("Resource_3pmwc"), SubResource("Resource_8a8dw"), SubResource("Resource_sen1l"), SubResource("Resource_i8i3p"), SubResource("Resource_v6ql4"), SubResource("Resource_v3ixx"), SubResource("Resource_fjllr"), SubResource("Resource_kfijo"), SubResource("Resource_j42ns"), SubResource("Resource_c3aa2"), SubResource("Resource_a36fj"), SubResource("Resource_gwuir")] +DownLaneData = [SubResource("Resource_sycg1"), SubResource("Resource_vh0lg"), SubResource("Resource_4fym7")] +LeftLaneData = [SubResource("Resource_mf3c7"), SubResource("Resource_5kf2q"), SubResource("Resource_f15o4"), SubResource("Resource_oert5"), SubResource("Resource_kytyf"), SubResource("Resource_kmfoh"), SubResource("Resource_hsn40"), SubResource("Resource_fdk4c"), SubResource("Resource_1aoo3"), SubResource("Resource_wlcjv"), SubResource("Resource_i1n24"), SubResource("Resource_n2wrp"), SubResource("Resource_gmg26"), SubResource("Resource_2jtmb")] +RightLaneData = [SubResource("Resource_l3uo1"), SubResource("Resource_ayat2"), SubResource("Resource_5hrj0"), SubResource("Resource_sbk3e"), SubResource("Resource_erw8g"), SubResource("Resource_ohcnr"), SubResource("Resource_1xng4"), SubResource("Resource_ullhh"), SubResource("Resource_jf4ph"), SubResource("Resource_l0ykb")] diff --git a/Audio/songMaps/Song2.tres b/Audio/songMaps/Song2.tres new file mode 100644 index 00000000..486b0873 --- /dev/null +++ b/Audio/songMaps/Song2.tres @@ -0,0 +1,156 @@ +[gd_resource type="Resource" load_steps=32 format=3] + +[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_7gfc4"] +[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_12jpe"] + +[sub_resource type="Resource" id="Resource_rxom0"] +script = ExtResource("1_7gfc4") +Beat = 1.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_asj20"] +script = ExtResource("1_7gfc4") +Beat = 6.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_hredl"] +script = ExtResource("1_7gfc4") +Beat = 10.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_iciyj"] +script = ExtResource("1_7gfc4") +Beat = 14.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_1w85u"] +script = ExtResource("1_7gfc4") +Beat = 17.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_daxqs"] +script = ExtResource("1_7gfc4") +Beat = 22.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_6qbd8"] +script = ExtResource("1_7gfc4") +Beat = 25.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_54mir"] +script = ExtResource("1_7gfc4") +Beat = 30.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ijh26"] +script = ExtResource("1_7gfc4") +Beat = 2.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_sstcx"] +script = ExtResource("1_7gfc4") +Beat = 4.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ldqq5"] +script = ExtResource("1_7gfc4") +Beat = 5.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_eltqr"] +script = ExtResource("1_7gfc4") +Beat = 10.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_fxmce"] +script = ExtResource("1_7gfc4") +Beat = 12.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_l7bpk"] +script = ExtResource("1_7gfc4") +Beat = 14.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_do8wm"] +script = ExtResource("1_7gfc4") +Beat = 15.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_qvcn2"] +script = ExtResource("1_7gfc4") +Beat = 18.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_siock"] +script = ExtResource("1_7gfc4") +Beat = 20.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_lec0e"] +script = ExtResource("1_7gfc4") +Beat = 22.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_6wstj"] +script = ExtResource("1_7gfc4") +Beat = 25.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_uxbx5"] +script = ExtResource("1_7gfc4") +Beat = 26.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_chdui"] +script = ExtResource("1_7gfc4") +Beat = 28.0 +Length = 1.0 + +[sub_resource type="Resource" id="Resource_t7pyo"] +script = ExtResource("1_7gfc4") +Beat = 8.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_1obgv"] +script = ExtResource("1_7gfc4") +Beat = 15.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_3ah33"] +script = ExtResource("1_7gfc4") +Beat = 24.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_87dqu"] +script = ExtResource("1_7gfc4") +Beat = 1.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_81s21"] +script = ExtResource("1_7gfc4") +Beat = 2.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_pyy5l"] +script = ExtResource("1_7gfc4") +Beat = 9.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_7lmg0"] +script = ExtResource("1_7gfc4") +Beat = 17.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_hgf3i"] +script = ExtResource("1_7gfc4") +Beat = 25.0 +Length = 0.0 + +[resource] +script = ExtResource("2_12jpe") +UpLaneData = Array[ExtResource("1_7gfc4")]([SubResource("Resource_87dqu"), SubResource("Resource_81s21"), SubResource("Resource_pyy5l"), SubResource("Resource_7lmg0"), SubResource("Resource_hgf3i")]) +DownLaneData = Array[ExtResource("1_7gfc4")]([SubResource("Resource_rxom0"), SubResource("Resource_asj20"), SubResource("Resource_hredl"), SubResource("Resource_iciyj"), SubResource("Resource_1w85u"), SubResource("Resource_daxqs"), SubResource("Resource_6qbd8"), SubResource("Resource_54mir")]) +LeftLaneData = Array[ExtResource("1_7gfc4")]([SubResource("Resource_ijh26"), SubResource("Resource_sstcx"), SubResource("Resource_ldqq5"), SubResource("Resource_eltqr"), SubResource("Resource_fxmce"), SubResource("Resource_l7bpk"), SubResource("Resource_do8wm"), SubResource("Resource_qvcn2"), SubResource("Resource_siock"), SubResource("Resource_lec0e"), SubResource("Resource_6wstj"), SubResource("Resource_uxbx5"), SubResource("Resource_chdui")]) +RightLaneData = Array[ExtResource("1_7gfc4")]([SubResource("Resource_t7pyo"), SubResource("Resource_1obgv"), SubResource("Resource_3ah33")]) diff --git a/Audio/songMaps/Song3.tres b/Audio/songMaps/Song3.tres new file mode 100644 index 00000000..28d691de --- /dev/null +++ b/Audio/songMaps/Song3.tres @@ -0,0 +1,281 @@ +[gd_resource type="Resource" load_steps=57 format=3 uid="uid://ekxscjn7ys6v"] + +[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_7kndb"] +[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_xg88o"] + +[sub_resource type="Resource" id="Resource_7kndb"] +script = ExtResource("1_7kndb") +Beat = 3.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_xg88o"] +script = ExtResource("1_7kndb") +Beat = 6.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_g8421"] +script = ExtResource("1_7kndb") +Beat = 7.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_11qbm"] +script = ExtResource("1_7kndb") +Beat = 17.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_hrrtc"] +script = ExtResource("1_7kndb") +Beat = 20.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_rmog3"] +script = ExtResource("1_7kndb") +Beat = 22.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_tnqsp"] +script = ExtResource("1_7kndb") +Beat = 25.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_6n6ig"] +script = ExtResource("1_7kndb") +Beat = 27.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ci2g3"] +script = ExtResource("1_7kndb") +Beat = 32.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_2c17a"] +script = ExtResource("1_7kndb") +Beat = 34.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_gugsw"] +script = ExtResource("1_7kndb") +Beat = 39.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_j4ixp"] +script = ExtResource("1_7kndb") +Beat = 44.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_i2oko"] +script = ExtResource("1_7kndb") +Beat = 48.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_6oq4l"] +script = ExtResource("1_7kndb") +Beat = 50.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_s8y6q"] +script = ExtResource("1_7kndb") +Beat = 53.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_pdfmt"] +script = ExtResource("1_7kndb") +Beat = 59.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_lkwp6"] +script = ExtResource("1_7kndb") +Beat = 9.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_sd1fo"] +script = ExtResource("1_7kndb") +Beat = 12.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_wkvcn"] +script = ExtResource("1_7kndb") +Beat = 18.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_woki6"] +script = ExtResource("1_7kndb") +Beat = 21.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_gm3ao"] +script = ExtResource("1_7kndb") +Beat = 24.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_8sl4t"] +script = ExtResource("1_7kndb") +Beat = 29.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_j8ilf"] +script = ExtResource("1_7kndb") +Beat = 45.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_14d3f"] +script = ExtResource("1_7kndb") +Beat = 53.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_1qfq5"] +script = ExtResource("1_7kndb") +Beat = 56.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_v0l44"] +script = ExtResource("1_7kndb") +Beat = 59.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ywfrj"] +script = ExtResource("1_7kndb") +Beat = 60.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_0m2gd"] +script = ExtResource("1_7kndb") +Beat = 5.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_yjy3y"] +script = ExtResource("1_7kndb") +Beat = 12.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_31o0y"] +script = ExtResource("1_7kndb") +Beat = 16.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ismkv"] +script = ExtResource("1_7kndb") +Beat = 23.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_jkqwb"] +script = ExtResource("1_7kndb") +Beat = 27.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_k1pbh"] +script = ExtResource("1_7kndb") +Beat = 35.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_0nv8p"] +script = ExtResource("1_7kndb") +Beat = 39.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_bskfl"] +script = ExtResource("1_7kndb") +Beat = 42.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_8cd7v"] +script = ExtResource("1_7kndb") +Beat = 47.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_4giuv"] +script = ExtResource("1_7kndb") +Beat = 52.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_2wwc7"] +script = ExtResource("1_7kndb") +Beat = 56.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_y6l23"] +script = ExtResource("1_7kndb") +Beat = 62.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_wc7xs"] +script = ExtResource("1_7kndb") +Beat = 5.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_k53ay"] +script = ExtResource("1_7kndb") +Beat = 11.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_blbm2"] +script = ExtResource("1_7kndb") +Beat = 13.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_3gjtl"] +script = ExtResource("1_7kndb") +Beat = 19.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_mi50b"] +script = ExtResource("1_7kndb") +Beat = 23.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_vdnsu"] +script = ExtResource("1_7kndb") +Beat = 25.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_1xwp0"] +script = ExtResource("1_7kndb") +Beat = 32.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ybe5s"] +script = ExtResource("1_7kndb") +Beat = 36.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_wd1lo"] +script = ExtResource("1_7kndb") +Beat = 40.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_eotyn"] +script = ExtResource("1_7kndb") +Beat = 44.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_3wyug"] +script = ExtResource("1_7kndb") +Beat = 51.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_77c6u"] +script = ExtResource("1_7kndb") +Beat = 55.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_811fa"] +script = ExtResource("1_7kndb") +Beat = 57.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_6kji1"] +script = ExtResource("1_7kndb") +Beat = 60.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_tdwrl"] +script = ExtResource("1_7kndb") +Beat = 63.0 +Length = 0.0 + +[resource] +script = ExtResource("2_xg88o") +UpLaneData = [SubResource("Resource_wc7xs"), SubResource("Resource_k53ay"), SubResource("Resource_blbm2"), SubResource("Resource_3gjtl"), SubResource("Resource_mi50b"), SubResource("Resource_vdnsu"), SubResource("Resource_1xwp0"), SubResource("Resource_ybe5s"), SubResource("Resource_wd1lo"), SubResource("Resource_eotyn"), SubResource("Resource_3wyug"), SubResource("Resource_77c6u"), SubResource("Resource_811fa"), SubResource("Resource_6kji1"), SubResource("Resource_tdwrl")] +DownLaneData = [SubResource("Resource_7kndb"), SubResource("Resource_xg88o"), SubResource("Resource_g8421"), SubResource("Resource_11qbm"), SubResource("Resource_hrrtc"), SubResource("Resource_rmog3"), SubResource("Resource_tnqsp"), SubResource("Resource_6n6ig"), SubResource("Resource_ci2g3"), SubResource("Resource_2c17a"), SubResource("Resource_gugsw"), SubResource("Resource_j4ixp"), SubResource("Resource_i2oko"), SubResource("Resource_6oq4l"), SubResource("Resource_s8y6q"), SubResource("Resource_pdfmt")] +LeftLaneData = [SubResource("Resource_lkwp6"), SubResource("Resource_sd1fo"), SubResource("Resource_wkvcn"), SubResource("Resource_woki6"), SubResource("Resource_gm3ao"), SubResource("Resource_8sl4t"), SubResource("Resource_j8ilf"), SubResource("Resource_14d3f"), SubResource("Resource_1qfq5"), SubResource("Resource_v0l44"), SubResource("Resource_ywfrj")] +RightLaneData = [SubResource("Resource_0m2gd"), SubResource("Resource_yjy3y"), SubResource("Resource_31o0y"), SubResource("Resource_ismkv"), SubResource("Resource_jkqwb"), SubResource("Resource_k1pbh"), SubResource("Resource_0nv8p"), SubResource("Resource_bskfl"), SubResource("Resource_8cd7v"), SubResource("Resource_4giuv"), SubResource("Resource_2wwc7"), SubResource("Resource_y6l23")] diff --git a/Classes/MidiMaestro/MidiMaestro.cs b/Classes/MidiMaestro/MidiMaestro.cs index 57e6fca8..1bd1964f 100644 --- a/Classes/MidiMaestro/MidiMaestro.cs +++ b/Classes/MidiMaestro/MidiMaestro.cs @@ -2,30 +2,23 @@ using System.Linq; using FunkEngine; using Godot; -using Melanchall.DryWetMidi.Core; -using Melanchall.DryWetMidi.Interaction; /** - MidiMaestro: Manages reading midi file into lane note information. + MidiMaestro: Manages reading a song map file into lane note information. */ public partial class MidiMaestro : Resource { - private MidiFile _midiFile; - - public static TempoMap TempoMap { get; private set; } - public static TimeSignature TimeSignature { get; private set; } - //The four note rows that we care about - private readonly MidiNoteInfo[] _upNotes; - private readonly MidiNoteInfo[] _downNotes; - private readonly MidiNoteInfo[] _leftNotes; - private readonly MidiNoteInfo[] _rightNotes; + private readonly NoteInfo[] _upNotes; + private readonly NoteInfo[] _downNotes; + private readonly NoteInfo[] _leftNotes; + private readonly NoteInfo[] _rightNotes; //private MidiFile strippedSong; /** - * Constructor loads midi file and populates lane note arrays with midiNoteInfo - * A string file path to a valid midi file + * Constructor loads resource file and populates lane note arrays with NoteInfo + * A string file path to a valid songMap .tres file */ public MidiMaestro(string filePath) { @@ -36,44 +29,32 @@ public MidiMaestro(string filePath) if (!FileAccess.FileExists(filePath)) { - GD.PushError("ERROR: Unable to load level Midi file: " + filePath); + GD.PushError("ERROR: Unable to load level songMap resource file: " + filePath); } - _midiFile = MidiFile.Read(filePath); - TempoMap = _midiFile.GetTempoMap(); - TimeSignature = TempoMap.GetTimeSignatureAtTime(new MidiTimeSpan()); + NoteChart savedChart = ResourceLoader.Load(filePath); - //Strip out the notes from the midi file - foreach (var track in _midiFile.GetTrackChunks()) + if (savedChart != null) { - string trackName = track.Events.OfType().FirstOrDefault()?.Text; - MidiNoteInfo[] noteEvents = track - .GetNotes() - .Select(note => new MidiNoteInfo(note)) - .ToArray(); - - switch (trackName) - { - case "Up": - _upNotes = noteEvents; - break; - case "Down": - _downNotes = noteEvents; - break; - case "Left": - _leftNotes = noteEvents; - break; - case "Right": - _rightNotes = noteEvents; - break; - } + _upNotes = savedChart.GetLane(ArrowType.Up).ToArray(); + _downNotes = savedChart.GetLane(ArrowType.Down).ToArray(); + _leftNotes = savedChart.GetLane(ArrowType.Left).ToArray(); + _rightNotes = savedChart.GetLane(ArrowType.Right).ToArray(); + } + else + { + GD.PushError("ERROR: Unable to load songMap resource file: " + filePath); + _upNotes = []; + _downNotes = []; + _leftNotes = []; + _rightNotes = []; } } /** - * Gets midiNoteInfo by lane. + * Gets NoteInfo by lane. */ - public MidiNoteInfo[] GetNotes(ArrowType arrowType) + public NoteInfo[] GetNotes(ArrowType arrowType) { return arrowType switch { @@ -85,39 +66,3 @@ public MidiNoteInfo[] GetNotes(ArrowType arrowType) }; } } - -//A facade to wrap the midi notes. This is a simple class that wraps a Note object from the DryWetMidi library. -public class MidiNoteInfo -{ - private readonly Melanchall.DryWetMidi.Interaction.Note _note; - - public MidiNoteInfo(Melanchall.DryWetMidi.Interaction.Note note) - { - _note = note; - } - - public long GetStartTimeBeat() - { - var beatsBar = _note.TimeAs(MidiMaestro.TempoMap); - return beatsBar.Bars * MidiMaestro.TimeSignature.Numerator + beatsBar.Beats; - } - - public long GetStartTimeTicks() => _note.Time; - - public float GetStartTimeSeconds() => - _note.TimeAs(MidiMaestro.TempoMap).Milliseconds / 1000f - + _note.TimeAs(MidiMaestro.TempoMap).Seconds; - - public long GetEndTime() => _note.EndTime; //ticks - - public long GetDuration() => _note.Length; //ticks - - public long GetDurationBeats() - { - var beatsBar = TimeConverter.ConvertTo( - _note.Length, - MidiMaestro.TempoMap - ); - return beatsBar.Bars * MidiMaestro.TimeSignature.Numerator + beatsBar.Beats; - } -} diff --git a/Classes/MidiMaestro/NoteChart.cs b/Classes/MidiMaestro/NoteChart.cs new file mode 100644 index 00000000..5e239bdc --- /dev/null +++ b/Classes/MidiMaestro/NoteChart.cs @@ -0,0 +1,71 @@ +using System; +using System.Linq; +using FunkEngine; +using Godot; +using Godot.Collections; + +public partial class NoteChart : Resource +{ //Godot is unhappy with this sometimes. + const float Precision = 0.0001f; + + [Export] + Array UpLaneData = []; + + [Export] + Array DownLaneData = []; + + [Export] + Array LeftLaneData = []; + + [Export] + Array RightLaneData = []; + + public void Reset() + { + UpLaneData = []; + DownLaneData = []; + LeftLaneData = []; + RightLaneData = []; + } + + public void SaveChart(string path) + { + ResourceSaver.Save(this, path); + } + + public Array GetLane(ArrowType arrowType) + { + return arrowType switch + { + ArrowType.Up => UpLaneData, + ArrowType.Down => DownLaneData, + ArrowType.Left => LeftLaneData, + ArrowType.Right => RightLaneData, + _ => throw new ArgumentOutOfRangeException(nameof(arrowType), arrowType, null), + }; + } + + public void RemoveNote(ArrowType type, float beat) + { + if (beat == 0) + return; //All my homies hate beat 0 + for (int i = 0; i < GetLane(type).Count; i++) + { + if (Math.Abs(GetLane(type)[i].Beat - beat) > Precision) + continue; + GetLane(type).RemoveAt(i); + return; + } + } + + public void AddNote(ArrowType type, float beat, float len = 0) + { + if (beat == 0) + return; //All my homies hate beat 0 + if (GetLane(type).Any(note => Math.Abs(note.Beat - beat) < Precision)) //Fuck it, traverse the whole array. + { + return; + } + GetLane(type).Add(new NoteInfo().Create(beat, len)); + } +} diff --git a/Classes/MidiMaestro/NoteChart.cs.uid b/Classes/MidiMaestro/NoteChart.cs.uid new file mode 100644 index 00000000..51ea474f --- /dev/null +++ b/Classes/MidiMaestro/NoteChart.cs.uid @@ -0,0 +1 @@ +uid://bnpnavb5lwobj diff --git a/Classes/MidiMaestro/NoteInfo.cs b/Classes/MidiMaestro/NoteInfo.cs new file mode 100644 index 00000000..17aacd8d --- /dev/null +++ b/Classes/MidiMaestro/NoteInfo.cs @@ -0,0 +1,18 @@ +using System; +using Godot; + +public partial class NoteInfo : Resource +{ + [Export] + public float Beat; + + [Export] + public float Length; + + public NoteInfo Create(float beat = 0, float len = 0) + { + Beat = beat; + Length = len; + return this; + } +} diff --git a/Classes/MidiMaestro/NoteInfo.cs.uid b/Classes/MidiMaestro/NoteInfo.cs.uid new file mode 100644 index 00000000..017bc56b --- /dev/null +++ b/Classes/MidiMaestro/NoteInfo.cs.uid @@ -0,0 +1 @@ +uid://bhbpcmtr6e6pk diff --git a/Classes/MidiMaestro/SongTemplate.cs b/Classes/MidiMaestro/SongTemplate.cs index cea1ba68..9cff9f5d 100644 --- a/Classes/MidiMaestro/SongTemplate.cs +++ b/Classes/MidiMaestro/SongTemplate.cs @@ -7,7 +7,7 @@ public struct SongTemplate { public string Name; public readonly string AudioLocation; - public string MIDILocation; + public string SongMapLocation; public readonly string[] EnemyScenePath; public SongData SongData; @@ -15,13 +15,13 @@ public SongTemplate( SongData songData, string name = "", string audioLocation = "", - string midiLocation = "", + string songMapLocation = "", string[] enemyScenePath = null ) { Name = name; AudioLocation = audioLocation; - MIDILocation = midiLocation; + SongMapLocation = songMapLocation; SongData = songData; EnemyScenePath = enemyScenePath; } diff --git a/Funk Engine.csproj b/Funk Engine.csproj index 2eddb4c7..ae20ca2b 100644 --- a/Funk Engine.csproj +++ b/Funk Engine.csproj @@ -4,9 +4,6 @@ true FunkEngine - - - diff --git a/Globals/Scribe.cs b/Globals/Scribe.cs index a339e390..e15a8b97 100644 --- a/Globals/Scribe.cs +++ b/Globals/Scribe.cs @@ -365,7 +365,7 @@ public partial class Scribe : Node }, "Song1", "Audio/Song1.ogg", - "Audio/Midi/Song1.mid", + "Audio/songMaps/Song1.tres", [P_BossBlood.LoadPath] ), new SongTemplate( @@ -377,7 +377,7 @@ public partial class Scribe : Node }, "Song2", "Audio/Song2.ogg", - "Audio/Midi/Song2.mid", + "Audio/songMaps/Song2.tres", [P_Parasifly.LoadPath] ), new SongTemplate( @@ -389,7 +389,7 @@ public partial class Scribe : Node }, "Song2", "Audio/Song2.ogg", - "Audio/Midi/Song2.mid", + "Audio/songMaps/Song2.tres", [P_Parasifly.LoadPath, P_Parasifly.LoadPath] ), new SongTemplate( @@ -401,7 +401,7 @@ public partial class Scribe : Node }, "Song3", "Audio/Song3.ogg", - "Audio/Midi/Song3.mid", + "Audio/songMaps/Song3.tres", [P_TheGWS.LoadPath] ), }; diff --git a/Scenes/BattleDirector/BattleScene.tscn b/Scenes/BattleDirector/BattleScene.tscn index 4e373b4b..647e287b 100644 --- a/Scenes/BattleDirector/BattleScene.tscn +++ b/Scenes/BattleDirector/BattleScene.tscn @@ -19,10 +19,9 @@ gradient = SubResource("Gradient_8uy3a") fill_from = Vector2(1, 0) fill_to = Vector2(0.738532, 1) -[node name="ProtoBattleDirector" type="Node2D" node_paths=PackedStringArray("BackgroundRect", "PuppetMarkers", "CD", "CM", "NPB", "Audio", "_focusedButton")] +[node name="ProtoBattleDirector" type="Node2D" node_paths=PackedStringArray("PuppetMarkers", "CD", "CM", "NPB", "Audio", "_focusedButton")] process_mode = 1 script = ExtResource("1_jmdo1") -BackgroundRect = NodePath("BackGround") PuppetMarkers = [NodePath("PlayerMarker"), NodePath("Enemy1Marker"), NodePath("Enemy2Marker"), NodePath("Enemy3Marker")] CD = NodePath("Conductor") CM = NodePath("SubViewport") diff --git a/Scenes/BattleDirector/Scripts/BattleDirector.cs b/Scenes/BattleDirector/Scripts/BattleDirector.cs index 6a83124c..b776ca33 100644 --- a/Scenes/BattleDirector/Scripts/BattleDirector.cs +++ b/Scenes/BattleDirector/Scripts/BattleDirector.cs @@ -2,7 +2,6 @@ using System.Linq; using FunkEngine; using Godot; -using Melanchall.DryWetMidi.Interaction; /**BattleDirector: Higher priority director to manage battle effects. Can directly access managers, which should signal up to Director WIP */ diff --git a/Scenes/BattleDirector/Scripts/Conductor.cs b/Scenes/BattleDirector/Scripts/Conductor.cs index 0aa92719..146bba7a 100644 --- a/Scenes/BattleDirector/Scripts/Conductor.cs +++ b/Scenes/BattleDirector/Scripts/Conductor.cs @@ -23,7 +23,7 @@ public void Initialize(SongData curSong) if (_initialized) return; - MM = new MidiMaestro(StageProducer.Config.CurSong.MIDILocation); + MM = new MidiMaestro(StageProducer.Config.CurSong.SongMapLocation); CM.ArrowFromInput += ReceiveNoteInput; CM.Initialize(curSong); @@ -41,14 +41,9 @@ private void AddInitialNotes() { foreach (ArrowType type in Enum.GetValues(typeof(ArrowType))) { - foreach (MidiNoteInfo mNote in MM.GetNotes(type)) + foreach (NoteInfo Note in MM.GetNotes(type)) { - AddNoteData( - Scribe.NoteDictionary[0], - type, - new Beat((int)mNote.GetStartTimeBeat()), - mNote.GetDurationBeats() - ); + AddNoteData(Scribe.NoteDictionary[0], type, new Beat((int)Note.Beat), Note.Length); } } SpawnInitialNotes();