diff --git a/Audio/District_Four.ogg.import b/Audio/District_Four.ogg.import index a603eea4..56612a76 100644 --- a/Audio/District_Four.ogg.import +++ b/Audio/District_Four.ogg.import @@ -12,8 +12,8 @@ dest_files=["res://.godot/imported/District_Four.ogg-f8fbac641cef73b68aacab4d4b3 [params] -loop=false -loop_offset=0 -bpm=0 +loop=true +loop_offset=0.0 +bpm=0.0 beat_count=0 bar_beats=4 diff --git a/Audio/EtherDisco.ogg b/Audio/EtherDisco.ogg new file mode 100644 index 00000000..74c7d9b3 Binary files /dev/null and b/Audio/EtherDisco.ogg differ diff --git a/Audio/EtherDisco.ogg.import b/Audio/EtherDisco.ogg.import new file mode 100644 index 00000000..c2937b71 --- /dev/null +++ b/Audio/EtherDisco.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://bspnmia0ri0f0" +path="res://.godot/imported/EtherDisco.ogg-3b94e136f0b274b61f3f2f8574c69a3f.oggvorbisstr" + +[deps] + +source_file="res://Audio/EtherDisco.ogg" +dest_files=["res://.godot/imported/EtherDisco.ogg-3b94e136f0b274b61f3f2f8574c69a3f.oggvorbisstr"] + +[params] + +loop=true +loop_offset=0.0 +bpm=0.0 +beat_count=0 +bar_beats=4 diff --git a/Audio/Jammin' Forest (Charting Edition).ogg b/Audio/Jammin' Forest (Charting Edition).ogg new file mode 100644 index 00000000..4f04f72f Binary files /dev/null and b/Audio/Jammin' Forest (Charting Edition).ogg differ diff --git a/Audio/Jammin' Forest (Charting Edition).ogg.import b/Audio/Jammin' Forest (Charting Edition).ogg.import new file mode 100644 index 00000000..b99e5dc5 --- /dev/null +++ b/Audio/Jammin' Forest (Charting Edition).ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://c70d4avm2nwyx" +path="res://.godot/imported/Jammin' Forest (Charting Edition).ogg-01caecc202b174f75f330647287d2898.oggvorbisstr" + +[deps] + +source_file="res://Audio/Jammin' Forest (Charting Edition).ogg" +dest_files=["res://.godot/imported/Jammin' Forest (Charting Edition).ogg-01caecc202b174f75f330647287d2898.oggvorbisstr"] + +[params] + +loop=true +loop_offset=0.0 +bpm=0.0 +beat_count=0 +bar_beats=4 diff --git a/Audio/Paint-the-Town-Neon-Red.ogg b/Audio/Paint-the-Town-Neon-Red.ogg new file mode 100644 index 00000000..b8080ae9 Binary files /dev/null and b/Audio/Paint-the-Town-Neon-Red.ogg differ diff --git a/Audio/Paint-the-Town-Neon-Red.ogg.import b/Audio/Paint-the-Town-Neon-Red.ogg.import new file mode 100644 index 00000000..1b0306e1 --- /dev/null +++ b/Audio/Paint-the-Town-Neon-Red.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://da2ldmsjlkdod" +path="res://.godot/imported/Paint-the-Town-Neon-Red.ogg-7260abb0effce89b5960fea87855b356.oggvorbisstr" + +[deps] + +source_file="res://Audio/Paint-the-Town-Neon-Red.ogg" +dest_files=["res://.godot/imported/Paint-the-Town-Neon-Red.ogg-7260abb0effce89b5960fea87855b356.oggvorbisstr"] + +[params] + +loop=true +loop_offset=0.0 +bpm=0.0 +beat_count=0 +bar_beats=4 diff --git a/Audio/Spooky-Forest.ogg b/Audio/Spooky-Forest.ogg new file mode 100644 index 00000000..b07e3edf Binary files /dev/null and b/Audio/Spooky-Forest.ogg differ diff --git a/Audio/Spooky-Forest.ogg.import b/Audio/Spooky-Forest.ogg.import new file mode 100644 index 00000000..afa90c48 --- /dev/null +++ b/Audio/Spooky-Forest.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://lardvkxjnxtb" +path="res://.godot/imported/Spooky-Forest.ogg-e31a016717572f98fa1fc44e9c059a97.oggvorbisstr" + +[deps] + +source_file="res://Audio/Spooky-Forest.ogg" +dest_files=["res://.godot/imported/Spooky-Forest.ogg-e31a016717572f98fa1fc44e9c059a97.oggvorbisstr"] + +[params] + +loop=true +loop_offset=0.0 +bpm=0.0 +beat_count=0 +bar_beats=4 diff --git a/Audio/songMaps/Astrorat.tres b/Audio/songMaps/Astrorat.tres new file mode 100644 index 00000000..a2f0ca82 --- /dev/null +++ b/Audio/songMaps/Astrorat.tres @@ -0,0 +1,220 @@ +[gd_resource type="Resource" load_steps=44 format=3 uid="uid://c6f4svggjh6br"] + +[ext_resource type="Script" uid="uid://bhbpcmtr6e6pk" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_2eqea"] +[ext_resource type="Script" uid="uid://bnpnavb5lwobj" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_658pd"] + +[sub_resource type="Resource" id="Resource_0ttw5"] +script = ExtResource("1_2eqea") +Beat = 11.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_l0i1e"] +script = ExtResource("1_2eqea") +Beat = 4.4 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_q06y0"] +script = ExtResource("1_2eqea") +Beat = 13.9 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_w8ofo"] +script = ExtResource("1_2eqea") +Beat = 3.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ydc1g"] +script = ExtResource("1_2eqea") +Beat = 2.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_irvvx"] +script = ExtResource("1_2eqea") +Beat = 8.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_w2s6l"] +script = ExtResource("1_2eqea") +Beat = 9.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_exuk7"] +script = ExtResource("1_2eqea") +Beat = 12.2 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_dk24q"] +script = ExtResource("1_2eqea") +Beat = 18.4 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_wgol3"] +script = ExtResource("1_2eqea") +Beat = 17.2 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_qqfs2"] +script = ExtResource("1_2eqea") +Beat = 5.8 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_a68i2"] +script = ExtResource("1_2eqea") +Beat = 23.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_nnp0y"] +script = ExtResource("1_2eqea") +Beat = 24.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_dnh6q"] +script = ExtResource("1_2eqea") +Beat = 25.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_klyd2"] +script = ExtResource("1_2eqea") +Beat = 27.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_0n5dw"] +script = ExtResource("1_2eqea") +Beat = 21.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_5g7v8"] +script = ExtResource("1_2eqea") +Beat = 7.1 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_s6s0g"] +script = ExtResource("1_2eqea") +Beat = 1.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_boxlj"] +script = ExtResource("1_2eqea") +Beat = 10.6 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_7os4q"] +script = ExtResource("1_2eqea") +Beat = 16.2 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_6h64d"] +script = ExtResource("1_2eqea") +Beat = 26.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_xi2wb"] +script = ExtResource("1_2eqea") +Beat = 22.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_mgqc0"] +script = ExtResource("1_2eqea") +Beat = 20.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_c66mr"] +script = ExtResource("1_2eqea") +Beat = 15.4 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_7gaev"] +script = ExtResource("1_2eqea") +Beat = 2.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_wmx5m"] +script = ExtResource("1_2eqea") +Beat = 8.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_dk1sj"] +script = ExtResource("1_2eqea") +Beat = 23.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_4jkdb"] +script = ExtResource("1_2eqea") +Beat = 24.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_sy2kx"] +script = ExtResource("1_2eqea") +Beat = 1.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ryhj6"] +script = ExtResource("1_2eqea") +Beat = 27.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_vvh4f"] +script = ExtResource("1_2eqea") +Beat = 21.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_rijti"] +script = ExtResource("1_2eqea") +Beat = 18.4 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_nu6ys"] +script = ExtResource("1_2eqea") +Beat = 17.2 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_68fmb"] +script = ExtResource("1_2eqea") +Beat = 5.8 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_5kcxv"] +script = ExtResource("1_2eqea") +Beat = 9.6 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ow73n"] +script = ExtResource("1_2eqea") +Beat = 3.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_1flyl"] +script = ExtResource("1_2eqea") +Beat = 4.4 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_k72np"] +script = ExtResource("1_2eqea") +Beat = 12.2 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_kj2ca"] +script = ExtResource("1_2eqea") +Beat = 13.9 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_priv2"] +script = ExtResource("1_2eqea") +Beat = 25.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_qnlwb"] +script = ExtResource("1_2eqea") +Beat = 26.0 +Length = 0.0 + +[resource] +script = ExtResource("2_658pd") +Bpm = 120 +NumLoops = 4 +SongSpeed = 200.0 +SongMapLocation = "EtherDisco.ogg" +UpLaneData = Array[ExtResource("1_2eqea")]([SubResource("Resource_rijti"), SubResource("Resource_nu6ys"), SubResource("Resource_68fmb"), SubResource("Resource_5kcxv"), SubResource("Resource_ow73n"), SubResource("Resource_1flyl"), SubResource("Resource_k72np"), SubResource("Resource_kj2ca"), SubResource("Resource_priv2"), SubResource("Resource_qnlwb")]) +DownLaneData = Array[ExtResource("1_2eqea")]([SubResource("Resource_0ttw5"), SubResource("Resource_l0i1e"), SubResource("Resource_q06y0"), SubResource("Resource_w8ofo"), SubResource("Resource_ydc1g"), SubResource("Resource_irvvx"), SubResource("Resource_w2s6l"), SubResource("Resource_exuk7"), SubResource("Resource_dk24q"), SubResource("Resource_wgol3"), SubResource("Resource_qqfs2"), SubResource("Resource_a68i2"), SubResource("Resource_nnp0y"), SubResource("Resource_dnh6q"), SubResource("Resource_klyd2"), SubResource("Resource_0n5dw")]) +LeftLaneData = Array[ExtResource("1_2eqea")]([SubResource("Resource_5g7v8"), SubResource("Resource_s6s0g"), SubResource("Resource_boxlj"), SubResource("Resource_7os4q"), SubResource("Resource_6h64d"), SubResource("Resource_xi2wb")]) +RightLaneData = Array[ExtResource("1_2eqea")]([SubResource("Resource_mgqc0"), SubResource("Resource_c66mr"), SubResource("Resource_7gaev"), SubResource("Resource_wmx5m"), SubResource("Resource_dk1sj"), SubResource("Resource_4jkdb"), SubResource("Resource_sy2kx"), SubResource("Resource_ryhj6"), SubResource("Resource_vvh4f")]) diff --git a/Audio/songMaps/Song1.tres b/Audio/songMaps/BossBlood.tres similarity index 73% rename from Audio/songMaps/Song1.tres rename to Audio/songMaps/BossBlood.tres index 7e95ae2e..ece02d0f 100644 --- a/Audio/songMaps/Song1.tres +++ b/Audio/songMaps/BossBlood.tres @@ -1,250 +1,254 @@ -[gd_resource type="Resource" load_steps=51 format=3] +[gd_resource type="Resource" load_steps=51 format=3 uid="uid://iumt7xjdgn6x"] -[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"] +[ext_resource type="Script" uid="uid://bhbpcmtr6e6pk" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_mc06a"] +[ext_resource type="Script" uid="uid://bnpnavb5lwobj" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_uhxkd"] [sub_resource type="Resource" id="Resource_h1ijp"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 9.0 Length = 0.0 [sub_resource type="Resource" id="Resource_ysbfa"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 25.0 Length = 0.0 [sub_resource type="Resource" id="Resource_j4c1l"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 49.0 Length = 0.0 [sub_resource type="Resource" id="Resource_lktv3"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 53.0 Length = 0.0 [sub_resource type="Resource" id="Resource_b0kfm"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 57.0 Length = 0.0 [sub_resource type="Resource" id="Resource_xbckj"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 34.0 Length = 0.0 [sub_resource type="Resource" id="Resource_gs0vr"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 43.0 Length = 0.0 [sub_resource type="Resource" id="Resource_4ygvu"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 44.0 Length = 0.0 [sub_resource type="Resource" id="Resource_efsyh"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 17.0 Length = 0.0 [sub_resource type="Resource" id="Resource_mf3c7"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 5.0 Length = 0.0 [sub_resource type="Resource" id="Resource_f15o4"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 13.0 Length = 0.0 [sub_resource type="Resource" id="Resource_hsn40"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 29.0 Length = 0.0 [sub_resource type="Resource" id="Resource_fdk4c"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 33.0 Length = 0.0 [sub_resource type="Resource" id="Resource_1aoo3"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 37.0 Length = 0.0 [sub_resource type="Resource" id="Resource_wlcjv"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 41.0 Length = 0.0 [sub_resource type="Resource" id="Resource_i1n24"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 45.0 Length = 0.0 [sub_resource type="Resource" id="Resource_2jtmb"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 57.0 Length = 0.0 [sub_resource type="Resource" id="Resource_qx4ac"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 50.0 Length = 0.0 [sub_resource type="Resource" id="Resource_csfw3"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 59.0 Length = 0.0 [sub_resource type="Resource" id="Resource_l3uo1"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 32.0 Length = 0.0 [sub_resource type="Resource" id="Resource_erw8g"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 44.0 Length = 0.0 [sub_resource type="Resource" id="Resource_alq0l"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 36.0 Length = 0.0 [sub_resource type="Resource" id="Resource_rkc43"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 4.0 Length = 0.0 [sub_resource type="Resource" id="Resource_tudf6"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 8.0 Length = 0.0 [sub_resource type="Resource" id="Resource_tlvlu"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 12.0 Length = 0.0 [sub_resource type="Resource" id="Resource_p167p"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 16.0 Length = 0.0 [sub_resource type="Resource" id="Resource_dc6jo"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 20.0 Length = 0.0 [sub_resource type="Resource" id="Resource_w3cuf"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 24.0 Length = 0.0 [sub_resource type="Resource" id="Resource_vjysj"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 28.0 Length = 0.0 [sub_resource type="Resource" id="Resource_aqpy1"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 40.0 Length = 0.0 [sub_resource type="Resource" id="Resource_ctve7"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 48.0 Length = 0.0 [sub_resource type="Resource" id="Resource_nl7kj"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 56.0 Length = 0.0 [sub_resource type="Resource" id="Resource_ogyoe"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 60.0 Length = 0.0 [sub_resource type="Resource" id="Resource_q33e3"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 61.0 Length = 0.0 [sub_resource type="Resource" id="Resource_vqw4k"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 52.0 Length = 0.0 [sub_resource type="Resource" id="Resource_s8jc0"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 33.0 Length = 0.0 [sub_resource type="Resource" id="Resource_fjllr"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 36.0 Length = 0.0 [sub_resource type="Resource" id="Resource_y2wfd"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 17.0 Length = 0.0 [sub_resource type="Resource" id="Resource_cb61k"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 41.0 Length = 0.0 [sub_resource type="Resource" id="Resource_hbkgo"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 49.0 Length = 0.0 [sub_resource type="Resource" id="Resource_80wib"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 35.0 Length = 0.0 [sub_resource type="Resource" id="Resource_jsm3m"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 50.0 Length = 0.0 [sub_resource type="Resource" id="Resource_ryg8k"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 51.0 Length = 0.0 [sub_resource type="Resource" id="Resource_gj6xo"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 58.0 Length = 0.0 [sub_resource type="Resource" id="Resource_112dg"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 59.0 Length = 0.0 [sub_resource type="Resource" id="Resource_eguul"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 42.0 Length = 0.0 [sub_resource type="Resource" id="Resource_tdy7a"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 21.0 Length = 0.0 [sub_resource type="Resource" id="Resource_d7de0"] -script = ExtResource("1_5ry1j") +script = ExtResource("1_mc06a") Beat = 26.0 Length = 0.0 [resource] -script = ExtResource("2_gbqfw") +script = ExtResource("2_uhxkd") +Bpm = 120 +NumLoops = 5 +SongSpeed = 200.0 +SongMapLocation = "Song1.ogg" UpLaneData = [SubResource("Resource_fjllr"), SubResource("Resource_y2wfd"), SubResource("Resource_cb61k"), SubResource("Resource_hbkgo"), SubResource("Resource_80wib"), SubResource("Resource_jsm3m"), SubResource("Resource_ryg8k"), SubResource("Resource_gj6xo"), SubResource("Resource_112dg"), SubResource("Resource_eguul"), SubResource("Resource_tdy7a"), SubResource("Resource_d7de0")] DownLaneData = [SubResource("Resource_h1ijp"), SubResource("Resource_ysbfa"), SubResource("Resource_j4c1l"), SubResource("Resource_lktv3"), SubResource("Resource_b0kfm"), SubResource("Resource_xbckj"), SubResource("Resource_gs0vr"), SubResource("Resource_4ygvu"), SubResource("Resource_efsyh")] LeftLaneData = [SubResource("Resource_mf3c7"), SubResource("Resource_f15o4"), SubResource("Resource_hsn40"), SubResource("Resource_fdk4c"), SubResource("Resource_1aoo3"), SubResource("Resource_wlcjv"), SubResource("Resource_i1n24"), SubResource("Resource_2jtmb"), SubResource("Resource_qx4ac"), SubResource("Resource_csfw3")] diff --git a/Audio/songMaps/CyberFoxSong.tres b/Audio/songMaps/CyberFoxSong.tres index 27df1cea..fc3ee873 100644 --- a/Audio/songMaps/CyberFoxSong.tres +++ b/Audio/songMaps/CyberFoxSong.tres @@ -1,7 +1,7 @@ -[gd_resource type="Resource" load_steps=25 format=3] +[gd_resource type="Resource" load_steps=25 format=3 uid="uid://xhi8r70ht3dp"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_8ueh4"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_s63u8"] +[ext_resource type="Script" uid="uid://bhbpcmtr6e6pk" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_8ueh4"] +[ext_resource type="Script" uid="uid://bnpnavb5lwobj" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_s63u8"] [sub_resource type="Resource" id="Resource_ljr32"] script = ExtResource("1_8ueh4") @@ -115,7 +115,11 @@ Length = 0.0 [resource] script = ExtResource("2_s63u8") -UpLaneData = Array[ExtResource("1_8ueh4")]([SubResource("Resource_50tbs"), SubResource("Resource_ttd2q"), SubResource("Resource_nnlde"), SubResource("Resource_rwedv"), SubResource("Resource_3eydr"), SubResource("Resource_83big")]) -DownLaneData = Array[ExtResource("1_8ueh4")]([SubResource("Resource_ljr32"), SubResource("Resource_bb3yp"), SubResource("Resource_852ml"), SubResource("Resource_38nu8"), SubResource("Resource_ct6sp"), SubResource("Resource_8ueh4"), SubResource("Resource_7lpnw")]) -LeftLaneData = Array[ExtResource("1_8ueh4")]([SubResource("Resource_yk705"), SubResource("Resource_oocdv"), SubResource("Resource_uswjw"), SubResource("Resource_e1hbr")]) -RightLaneData = Array[ExtResource("1_8ueh4")]([SubResource("Resource_gryrv"), SubResource("Resource_kwtfb"), SubResource("Resource_c2bxv"), SubResource("Resource_s63u8"), SubResource("Resource_lrc4j")]) +Bpm = 180 +NumLoops = 1 +SongSpeed = 200.0 +SongMapLocation = "CyberFoxSong.ogg" +UpLaneData = [SubResource("Resource_50tbs"), SubResource("Resource_ttd2q"), SubResource("Resource_nnlde"), SubResource("Resource_rwedv"), SubResource("Resource_3eydr"), SubResource("Resource_83big")] +DownLaneData = [SubResource("Resource_ljr32"), SubResource("Resource_bb3yp"), SubResource("Resource_852ml"), SubResource("Resource_38nu8"), SubResource("Resource_ct6sp"), SubResource("Resource_8ueh4"), SubResource("Resource_7lpnw")] +LeftLaneData = [SubResource("Resource_yk705"), SubResource("Resource_oocdv"), SubResource("Resource_uswjw"), SubResource("Resource_e1hbr")] +RightLaneData = [SubResource("Resource_gryrv"), SubResource("Resource_kwtfb"), SubResource("Resource_c2bxv"), SubResource("Resource_s63u8"), SubResource("Resource_lrc4j")] diff --git a/Audio/songMaps/EcholaneSong.tres b/Audio/songMaps/EcholaneSong.tres index 3713f118..52e00c04 100644 --- a/Audio/songMaps/EcholaneSong.tres +++ b/Audio/songMaps/EcholaneSong.tres @@ -1,7 +1,7 @@ -[gd_resource type="Resource" load_steps=46 format=3] +[gd_resource type="Resource" load_steps=46 format=3 uid="uid://2oiuwngh6w4p"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_vkj58"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_ulihw"] +[ext_resource type="Script" uid="uid://bhbpcmtr6e6pk" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_vkj58"] +[ext_resource type="Script" uid="uid://bnpnavb5lwobj" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_ulihw"] [sub_resource type="Resource" id="Resource_vkj58"] script = ExtResource("1_vkj58") @@ -220,7 +220,11 @@ Length = 0.0 [resource] script = ExtResource("2_ulihw") -UpLaneData = Array[ExtResource("1_vkj58")]([SubResource("Resource_3lcfd"), SubResource("Resource_b1quw"), SubResource("Resource_lq0og"), SubResource("Resource_56y1a"), SubResource("Resource_jljr5"), SubResource("Resource_bxx88"), SubResource("Resource_bdoqu"), SubResource("Resource_cr07w")]) -DownLaneData = Array[ExtResource("1_vkj58")]([SubResource("Resource_vkj58"), SubResource("Resource_ulihw"), SubResource("Resource_t8863"), SubResource("Resource_6g1by"), SubResource("Resource_m02wy"), SubResource("Resource_t1nlw"), SubResource("Resource_iknre"), SubResource("Resource_icwn4"), SubResource("Resource_vkj1q"), SubResource("Resource_g5inb")]) -LeftLaneData = Array[ExtResource("1_vkj58")]([SubResource("Resource_7jmhk"), SubResource("Resource_plxvd"), SubResource("Resource_jva8p"), SubResource("Resource_pref2"), SubResource("Resource_3tvlw"), SubResource("Resource_iq4by"), SubResource("Resource_rekwa"), SubResource("Resource_xbnbk"), SubResource("Resource_byp8i"), SubResource("Resource_dime5")]) -RightLaneData = Array[ExtResource("1_vkj58")]([SubResource("Resource_dnuvc"), SubResource("Resource_n5nx3"), SubResource("Resource_y8tsg"), SubResource("Resource_msofk"), SubResource("Resource_8qmnl"), SubResource("Resource_w7vp2"), SubResource("Resource_kvr5u"), SubResource("Resource_6jc5o"), SubResource("Resource_14q1d"), SubResource("Resource_vixxy"), SubResource("Resource_ktvox"), SubResource("Resource_4vybl"), SubResource("Resource_hclfl"), SubResource("Resource_bmq0x"), SubResource("Resource_6hjh7")]) +Bpm = 120 +NumLoops = 4 +SongSpeed = 200.0 +SongMapLocation = "EcholaneSong.ogg" +UpLaneData = [SubResource("Resource_3lcfd"), SubResource("Resource_b1quw"), SubResource("Resource_lq0og"), SubResource("Resource_56y1a"), SubResource("Resource_jljr5"), SubResource("Resource_bxx88"), SubResource("Resource_bdoqu"), SubResource("Resource_cr07w")] +DownLaneData = [SubResource("Resource_vkj58"), SubResource("Resource_ulihw"), SubResource("Resource_t8863"), SubResource("Resource_6g1by"), SubResource("Resource_m02wy"), SubResource("Resource_t1nlw"), SubResource("Resource_iknre"), SubResource("Resource_icwn4"), SubResource("Resource_vkj1q"), SubResource("Resource_g5inb")] +LeftLaneData = [SubResource("Resource_7jmhk"), SubResource("Resource_plxvd"), SubResource("Resource_jva8p"), SubResource("Resource_pref2"), SubResource("Resource_3tvlw"), SubResource("Resource_iq4by"), SubResource("Resource_rekwa"), SubResource("Resource_xbnbk"), SubResource("Resource_byp8i"), SubResource("Resource_dime5")] +RightLaneData = [SubResource("Resource_dnuvc"), SubResource("Resource_n5nx3"), SubResource("Resource_y8tsg"), SubResource("Resource_msofk"), SubResource("Resource_8qmnl"), SubResource("Resource_w7vp2"), SubResource("Resource_kvr5u"), SubResource("Resource_6jc5o"), SubResource("Resource_14q1d"), SubResource("Resource_vixxy"), SubResource("Resource_ktvox"), SubResource("Resource_4vybl"), SubResource("Resource_hclfl"), SubResource("Resource_bmq0x"), SubResource("Resource_6hjh7")] diff --git a/Audio/songMaps/FrostWaltz.tres b/Audio/songMaps/FrostWaltz.tres index 6562d14b..47d5fa10 100644 --- a/Audio/songMaps/FrostWaltz.tres +++ b/Audio/songMaps/FrostWaltz.tres @@ -95,7 +95,11 @@ Length = 0.0 [resource] script = ExtResource("2_ipsne") -UpLaneData = Array[ExtResource("1_8s5n5")]([SubResource("Resource_ffi45"), SubResource("Resource_3tfr0"), SubResource("Resource_ipsne")]) -DownLaneData = Array[ExtResource("1_8s5n5")]([SubResource("Resource_dwqep"), SubResource("Resource_ukqut"), SubResource("Resource_x1mw3"), SubResource("Resource_54umo"), SubResource("Resource_o0hqd"), SubResource("Resource_8s5n5"), SubResource("Resource_bsuy3")]) -LeftLaneData = Array[ExtResource("1_8s5n5")]([SubResource("Resource_828xi"), SubResource("Resource_gfy4r"), SubResource("Resource_716y2"), SubResource("Resource_6sju3"), SubResource("Resource_h8r3u")]) -RightLaneData = Array[ExtResource("1_8s5n5")]([SubResource("Resource_3skly"), SubResource("Resource_fe74b"), SubResource("Resource_1d04x")]) +Bpm = 99 +NumLoops = 5 +SongSpeed = 200.0 +SongMapLocation = "FrostWaltz.ogg" +UpLaneData = [SubResource("Resource_ffi45"), SubResource("Resource_3tfr0"), SubResource("Resource_ipsne")] +DownLaneData = [SubResource("Resource_dwqep"), SubResource("Resource_ukqut"), SubResource("Resource_x1mw3"), SubResource("Resource_54umo"), SubResource("Resource_o0hqd"), SubResource("Resource_8s5n5"), SubResource("Resource_bsuy3")] +LeftLaneData = [SubResource("Resource_828xi"), SubResource("Resource_gfy4r"), SubResource("Resource_716y2"), SubResource("Resource_6sju3"), SubResource("Resource_h8r3u")] +RightLaneData = [SubResource("Resource_3skly"), SubResource("Resource_fe74b"), SubResource("Resource_1d04x")] diff --git a/Audio/songMaps/Song3.tres b/Audio/songMaps/GWS.tres similarity index 73% rename from Audio/songMaps/Song3.tres rename to Audio/songMaps/GWS.tres index c8e3c520..78318377 100644 --- a/Audio/songMaps/Song3.tres +++ b/Audio/songMaps/GWS.tres @@ -1,295 +1,299 @@ -[gd_resource type="Resource" load_steps=60 format=3] +[gd_resource type="Resource" load_steps=60 format=3 uid="uid://cnxhv0busahh0"] -[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"] +[ext_resource type="Script" uid="uid://bhbpcmtr6e6pk" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_6fik5"] +[ext_resource type="Script" uid="uid://bnpnavb5lwobj" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_4vdmh"] [sub_resource type="Resource" id="Resource_11qbm"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 17.0 Length = 0.0 [sub_resource type="Resource" id="Resource_hrrtc"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 20.0 Length = 0.0 [sub_resource type="Resource" id="Resource_rmog3"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 22.0 Length = 0.0 [sub_resource type="Resource" id="Resource_tnqsp"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 25.0 Length = 0.0 [sub_resource type="Resource" id="Resource_fldsc"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 38.0 Length = 0.0 [sub_resource type="Resource" id="Resource_ntp27"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 35.0 Length = 0.0 [sub_resource type="Resource" id="Resource_7nmxt"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 49.0 Length = 0.0 [sub_resource type="Resource" id="Resource_47jch"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 57.0 Length = 0.0 [sub_resource type="Resource" id="Resource_kp5f0"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 41.0 Length = 0.0 [sub_resource type="Resource" id="Resource_v8s33"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 52.0 Length = 0.0 [sub_resource type="Resource" id="Resource_hrafv"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 61.0 Length = 0.0 [sub_resource type="Resource" id="Resource_d50tw"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 4.0 Length = 0.0 [sub_resource type="Resource" id="Resource_a8amf"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 44.0 Length = 0.0 [sub_resource type="Resource" id="Resource_mbtm7"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 12.0 Length = 0.0 [sub_resource type="Resource" id="Resource_ynh6c"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 28.0 Length = 0.0 [sub_resource type="Resource" id="Resource_marsf"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 33.0 Length = 0.0 [sub_resource type="Resource" id="Resource_wkvcn"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 18.0 Length = 0.0 [sub_resource type="Resource" id="Resource_woki6"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 21.0 Length = 0.0 [sub_resource type="Resource" id="Resource_gm3ao"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 24.0 Length = 0.0 [sub_resource type="Resource" id="Resource_1qfq5"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 56.0 Length = 0.0 [sub_resource type="Resource" id="Resource_ywfrj"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 60.0 Length = 0.0 [sub_resource type="Resource" id="Resource_rxusk"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 8.0 Length = 0.0 [sub_resource type="Resource" id="Resource_r88cj"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 36.0 Length = 0.0 [sub_resource type="Resource" id="Resource_5e2go"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 50.0 Length = 0.0 [sub_resource type="Resource" id="Resource_s083v"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 40.0 Length = 0.0 [sub_resource type="Resource" id="Resource_jc0cy"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 52.0 Length = 0.0 [sub_resource type="Resource" id="Resource_3oete"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 61.0 Length = 0.0 [sub_resource type="Resource" id="Resource_b24fs"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 5.0 Length = 0.0 [sub_resource type="Resource" id="Resource_45x0b"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 33.0 Length = 0.0 [sub_resource type="Resource" id="Resource_x70wl"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 45.0 Length = 0.0 [sub_resource type="Resource" id="Resource_6e30o"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 29.0 Length = 0.0 [sub_resource type="Resource" id="Resource_8l6ei"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 32.0 Length = 0.0 [sub_resource type="Resource" id="Resource_31o0y"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 16.0 Length = 0.0 [sub_resource type="Resource" id="Resource_2wwc7"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 56.0 Length = 0.0 [sub_resource type="Resource" id="Resource_m5e6q"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 24.0 Length = 0.0 [sub_resource type="Resource" id="Resource_v8sin"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 38.0 Length = 0.0 [sub_resource type="Resource" id="Resource_ykqor"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 48.0 Length = 0.0 [sub_resource type="Resource" id="Resource_cbmdd"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 34.0 Length = 0.0 [sub_resource type="Resource" id="Resource_ak0tp"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 40.0 Length = 0.0 [sub_resource type="Resource" id="Resource_pd2wi"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 53.0 Length = 0.0 [sub_resource type="Resource" id="Resource_11m2d"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 3.0 Length = 0.0 [sub_resource type="Resource" id="Resource_7totf"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 8.0 Length = 0.0 [sub_resource type="Resource" id="Resource_ob06q"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 45.0 Length = 0.0 [sub_resource type="Resource" id="Resource_s6r1b"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 29.0 Length = 0.0 [sub_resource type="Resource" id="Resource_3gjtl"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 19.0 Length = 0.0 [sub_resource type="Resource" id="Resource_vdnsu"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 25.0 Length = 0.0 [sub_resource type="Resource" id="Resource_3wyug"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 51.0 Length = 0.0 [sub_resource type="Resource" id="Resource_6kji1"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 60.0 Length = 0.0 [sub_resource type="Resource" id="Resource_w6jqv"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 54.0 Length = 0.0 [sub_resource type="Resource" id="Resource_083mg"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 37.0 Length = 0.0 [sub_resource type="Resource" id="Resource_dsf4k"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 57.0 Length = 0.0 [sub_resource type="Resource" id="Resource_2woca"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 41.0 Length = 0.0 [sub_resource type="Resource" id="Resource_jsj5h"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 6.0 Length = 0.0 [sub_resource type="Resource" id="Resource_qoqm3"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 32.0 Length = 0.0 [sub_resource type="Resource" id="Resource_nob8r"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 44.0 Length = 0.0 [sub_resource type="Resource" id="Resource_a6epf"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 12.0 Length = 0.0 [sub_resource type="Resource" id="Resource_ekjhc"] -script = ExtResource("1_7kndb") +script = ExtResource("1_6fik5") Beat = 28.0 Length = 0.0 [resource] -script = ExtResource("2_xg88o") +script = ExtResource("2_4vdmh") +Bpm = 120 +NumLoops = 1 +SongSpeed = 200.0 +SongMapLocation = "Song3.ogg" UpLaneData = [SubResource("Resource_3gjtl"), SubResource("Resource_vdnsu"), SubResource("Resource_3wyug"), SubResource("Resource_6kji1"), SubResource("Resource_w6jqv"), SubResource("Resource_083mg"), SubResource("Resource_dsf4k"), SubResource("Resource_2woca"), SubResource("Resource_jsj5h"), SubResource("Resource_qoqm3"), SubResource("Resource_nob8r"), SubResource("Resource_a6epf"), SubResource("Resource_ekjhc")] DownLaneData = [SubResource("Resource_11qbm"), SubResource("Resource_hrrtc"), SubResource("Resource_rmog3"), SubResource("Resource_tnqsp"), SubResource("Resource_fldsc"), SubResource("Resource_ntp27"), SubResource("Resource_7nmxt"), SubResource("Resource_47jch"), SubResource("Resource_kp5f0"), SubResource("Resource_v8s33"), SubResource("Resource_hrafv"), SubResource("Resource_d50tw"), SubResource("Resource_a8amf"), SubResource("Resource_mbtm7"), SubResource("Resource_ynh6c"), SubResource("Resource_marsf")] LeftLaneData = [SubResource("Resource_wkvcn"), SubResource("Resource_woki6"), SubResource("Resource_gm3ao"), SubResource("Resource_1qfq5"), SubResource("Resource_ywfrj"), SubResource("Resource_rxusk"), SubResource("Resource_r88cj"), SubResource("Resource_5e2go"), SubResource("Resource_s083v"), SubResource("Resource_jc0cy"), SubResource("Resource_3oete"), SubResource("Resource_b24fs"), SubResource("Resource_45x0b"), SubResource("Resource_x70wl"), SubResource("Resource_6e30o"), SubResource("Resource_8l6ei")] diff --git a/Audio/songMaps/Gobbler.tres b/Audio/songMaps/Gobbler.tres index ec3b18b5..ab872abf 100644 --- a/Audio/songMaps/Gobbler.tres +++ b/Audio/songMaps/Gobbler.tres @@ -1,7 +1,7 @@ -[gd_resource type="Resource" load_steps=45 format=3] +[gd_resource type="Resource" load_steps=45 format=3 uid="uid://dfs1r7rw8x2fv"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_tuude"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_hfiht"] +[ext_resource type="Script" uid="uid://bhbpcmtr6e6pk" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_tuude"] +[ext_resource type="Script" uid="uid://bnpnavb5lwobj" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_hfiht"] [sub_resource type="Resource" id="Resource_i2qfq"] script = ExtResource("1_tuude") @@ -215,7 +215,11 @@ Length = 0.0 [resource] script = ExtResource("2_hfiht") -UpLaneData = Array[ExtResource("1_tuude")]([SubResource("Resource_8xjpx"), SubResource("Resource_wsgab"), SubResource("Resource_qwdig"), SubResource("Resource_66kxm"), SubResource("Resource_7ilo7"), SubResource("Resource_a20b3"), SubResource("Resource_pqrtt"), SubResource("Resource_pwr5v"), SubResource("Resource_rt0eg"), SubResource("Resource_8g5uo")]) -DownLaneData = Array[ExtResource("1_tuude")]([SubResource("Resource_i2qfq"), SubResource("Resource_clkmt"), SubResource("Resource_2yhqr"), SubResource("Resource_avloc"), SubResource("Resource_7ipoh"), SubResource("Resource_rc4vs"), SubResource("Resource_hsxfe"), SubResource("Resource_5uul0"), SubResource("Resource_20iwo")]) -LeftLaneData = Array[ExtResource("1_tuude")]([SubResource("Resource_q3mne"), SubResource("Resource_klde2"), SubResource("Resource_6wxhr"), SubResource("Resource_4fyoq"), SubResource("Resource_1hg6d"), SubResource("Resource_6on7t"), SubResource("Resource_eq4ob"), SubResource("Resource_2rtaq"), SubResource("Resource_t5na6")]) -RightLaneData = Array[ExtResource("1_tuude")]([SubResource("Resource_447id"), SubResource("Resource_5hmpv"), SubResource("Resource_xky58"), SubResource("Resource_sxqb5"), SubResource("Resource_ae4y0"), SubResource("Resource_j7a00"), SubResource("Resource_tbgdx"), SubResource("Resource_55ty7"), SubResource("Resource_meqji"), SubResource("Resource_bc4nj"), SubResource("Resource_i1t8w"), SubResource("Resource_qmi4l"), SubResource("Resource_ebk8g"), SubResource("Resource_cj46n")]) +Bpm = 120 +NumLoops = 6 +SongSpeed = 200.0 +SongMapLocation = "Gobbler.ogg" +UpLaneData = [SubResource("Resource_8xjpx"), SubResource("Resource_wsgab"), SubResource("Resource_qwdig"), SubResource("Resource_66kxm"), SubResource("Resource_7ilo7"), SubResource("Resource_a20b3"), SubResource("Resource_pqrtt"), SubResource("Resource_pwr5v"), SubResource("Resource_rt0eg"), SubResource("Resource_8g5uo")] +DownLaneData = [SubResource("Resource_i2qfq"), SubResource("Resource_clkmt"), SubResource("Resource_2yhqr"), SubResource("Resource_avloc"), SubResource("Resource_7ipoh"), SubResource("Resource_rc4vs"), SubResource("Resource_hsxfe"), SubResource("Resource_5uul0"), SubResource("Resource_20iwo")] +LeftLaneData = [SubResource("Resource_q3mne"), SubResource("Resource_klde2"), SubResource("Resource_6wxhr"), SubResource("Resource_4fyoq"), SubResource("Resource_1hg6d"), SubResource("Resource_6on7t"), SubResource("Resource_eq4ob"), SubResource("Resource_2rtaq"), SubResource("Resource_t5na6")] +RightLaneData = [SubResource("Resource_447id"), SubResource("Resource_5hmpv"), SubResource("Resource_xky58"), SubResource("Resource_sxqb5"), SubResource("Resource_ae4y0"), SubResource("Resource_j7a00"), SubResource("Resource_tbgdx"), SubResource("Resource_55ty7"), SubResource("Resource_meqji"), SubResource("Resource_bc4nj"), SubResource("Resource_i1t8w"), SubResource("Resource_qmi4l"), SubResource("Resource_ebk8g"), SubResource("Resource_cj46n")] diff --git a/Audio/songMaps/HoloRepeat.tres b/Audio/songMaps/HoloRepeat.tres index a51e8538..8c4f67cb 100644 --- a/Audio/songMaps/HoloRepeat.tres +++ b/Audio/songMaps/HoloRepeat.tres @@ -1,7 +1,7 @@ -[gd_resource type="Resource" load_steps=27 format=3] +[gd_resource type="Resource" load_steps=27 format=3 uid="uid://dh7fdqbs6mwrq"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_y4wy8"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_1kkot"] +[ext_resource type="Script" uid="uid://bhbpcmtr6e6pk" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_y4wy8"] +[ext_resource type="Script" uid="uid://bnpnavb5lwobj" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_1kkot"] [sub_resource type="Resource" id="Resource_wxfu7"] script = ExtResource("1_y4wy8") @@ -125,6 +125,10 @@ Length = 0.0 [resource] script = ExtResource("2_1kkot") +Bpm = 130 +NumLoops = 1 +SongSpeed = 200.0 +SongMapLocation = "Holo_ThereItIs.ogg" UpLaneData = [SubResource("Resource_rclq0"), SubResource("Resource_d15sy"), SubResource("Resource_xylpo"), SubResource("Resource_c4e5y"), SubResource("Resource_7lbis"), SubResource("Resource_8usgo")] DownLaneData = [SubResource("Resource_wxfu7"), SubResource("Resource_cjafy"), SubResource("Resource_jdotv"), SubResource("Resource_per1x"), SubResource("Resource_lw4uc"), SubResource("Resource_nxcmx")] LeftLaneData = [SubResource("Resource_x0uap"), SubResource("Resource_1m0i6"), SubResource("Resource_1mpgo"), SubResource("Resource_iuho0"), SubResource("Resource_uj1b6"), SubResource("Resource_fi760")] diff --git a/Audio/songMaps/Jammin' Forest.tres b/Audio/songMaps/Jammin' Forest.tres new file mode 100644 index 00000000..9b81a6cc --- /dev/null +++ b/Audio/songMaps/Jammin' Forest.tres @@ -0,0 +1,90 @@ +[gd_resource type="Resource" load_steps=18 format=3 uid="uid://csmn1qu7o67eo"] + +[ext_resource type="Script" uid="uid://bhbpcmtr6e6pk" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_0pymh"] +[ext_resource type="Script" uid="uid://bnpnavb5lwobj" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_2wffk"] + +[sub_resource type="Resource" id="Resource_sdqpm"] +script = ExtResource("1_0pymh") +Beat = 4.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_k02mj"] +script = ExtResource("1_0pymh") +Beat = 6.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_fpi3x"] +script = ExtResource("1_0pymh") +Beat = 20.0 +Length = 4.0 + +[sub_resource type="Resource" id="Resource_w82ea"] +script = ExtResource("1_0pymh") +Beat = 10.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_8y5mj"] +script = ExtResource("1_0pymh") +Beat = 14.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_moa4j"] +script = ExtResource("1_0pymh") +Beat = 18.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_0pymh"] +script = ExtResource("1_0pymh") +Beat = 3.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_iy0fj"] +script = ExtResource("1_0pymh") +Beat = 1.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_w0kh8"] +script = ExtResource("1_0pymh") +Beat = 16.0 +Length = 4.0 + +[sub_resource type="Resource" id="Resource_eva2x"] +script = ExtResource("1_0pymh") +Beat = 2.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_na3r5"] +script = ExtResource("1_0pymh") +Beat = 7.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_wiej5"] +script = ExtResource("1_0pymh") +Beat = 8.0 +Length = 4.0 + +[sub_resource type="Resource" id="Resource_kbcyp"] +script = ExtResource("1_0pymh") +Beat = 5.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_cbvew"] +script = ExtResource("1_0pymh") +Beat = 12.0 +Length = 4.0 + +[sub_resource type="Resource" id="Resource_kadiu"] +script = ExtResource("1_0pymh") +Beat = 22.0 +Length = 0.0 + +[resource] +script = ExtResource("2_2wffk") +Bpm = 150 +NumLoops = 4 +SongSpeed = 200.0 +SongMapLocation = "Jammin' Forest (Charting Edition).ogg" +UpLaneData = Array[ExtResource("1_0pymh")]([SubResource("Resource_kbcyp"), SubResource("Resource_cbvew"), SubResource("Resource_kadiu")]) +DownLaneData = Array[ExtResource("1_0pymh")]([SubResource("Resource_sdqpm"), SubResource("Resource_k02mj"), SubResource("Resource_fpi3x"), SubResource("Resource_w82ea"), SubResource("Resource_8y5mj"), SubResource("Resource_moa4j")]) +LeftLaneData = Array[ExtResource("1_0pymh")]([SubResource("Resource_0pymh"), SubResource("Resource_iy0fj"), SubResource("Resource_w0kh8")]) +RightLaneData = Array[ExtResource("1_0pymh")]([SubResource("Resource_eva2x"), SubResource("Resource_na3r5"), SubResource("Resource_wiej5")]) diff --git a/Audio/songMaps/KeythuluSong.tres b/Audio/songMaps/KeythuluSong.tres index 3eec9775..5a162c18 100644 --- a/Audio/songMaps/KeythuluSong.tres +++ b/Audio/songMaps/KeythuluSong.tres @@ -1,7 +1,7 @@ -[gd_resource type="Resource" load_steps=43 format=3] +[gd_resource type="Resource" load_steps=43 format=3 uid="uid://lm4pv832bgt5"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_8ueh4"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_s63u8"] +[ext_resource type="Script" uid="uid://bhbpcmtr6e6pk" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_8ueh4"] +[ext_resource type="Script" uid="uid://bnpnavb5lwobj" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_s63u8"] [sub_resource type="Resource" id="Resource_ljr32"] script = ExtResource("1_8ueh4") @@ -205,7 +205,11 @@ Length = 0.0 [resource] script = ExtResource("2_s63u8") -UpLaneData = Array[ExtResource("1_8ueh4")]([SubResource("Resource_vkfw6"), SubResource("Resource_5vawl"), SubResource("Resource_wqml3"), SubResource("Resource_knus5"), SubResource("Resource_iyhat"), SubResource("Resource_e231o"), SubResource("Resource_u1ybv"), SubResource("Resource_s63u8"), SubResource("Resource_rwedv")]) -DownLaneData = Array[ExtResource("1_8ueh4")]([SubResource("Resource_ljr32"), SubResource("Resource_bb3yp"), SubResource("Resource_852ml"), SubResource("Resource_38nu8"), SubResource("Resource_3eydr"), SubResource("Resource_ct6sp"), SubResource("Resource_yk705"), SubResource("Resource_uswjw"), SubResource("Resource_e1hbr"), SubResource("Resource_8ueh4")]) -LeftLaneData = Array[ExtResource("1_8ueh4")]([SubResource("Resource_gryrv"), SubResource("Resource_kwtfb"), SubResource("Resource_c2bxv"), SubResource("Resource_7lpnw"), SubResource("Resource_50tbs"), SubResource("Resource_ttd2q"), SubResource("Resource_nnlde"), SubResource("Resource_lrc4j"), SubResource("Resource_83big"), SubResource("Resource_oocdv")]) -RightLaneData = Array[ExtResource("1_8ueh4")]([SubResource("Resource_lfmd3"), SubResource("Resource_x1ijp"), SubResource("Resource_6jgy8"), SubResource("Resource_oxq2d"), SubResource("Resource_3102k"), SubResource("Resource_j4fdm"), SubResource("Resource_5raac"), SubResource("Resource_c27cp"), SubResource("Resource_pfqra"), SubResource("Resource_2nxl5"), SubResource("Resource_67x67")]) +Bpm = 170 +NumLoops = 9 +SongSpeed = 200.0 +SongMapLocation = "KeythuluSong.ogg" +UpLaneData = [SubResource("Resource_vkfw6"), SubResource("Resource_5vawl"), SubResource("Resource_wqml3"), SubResource("Resource_knus5"), SubResource("Resource_iyhat"), SubResource("Resource_e231o"), SubResource("Resource_u1ybv"), SubResource("Resource_s63u8"), SubResource("Resource_rwedv")] +DownLaneData = [SubResource("Resource_ljr32"), SubResource("Resource_bb3yp"), SubResource("Resource_852ml"), SubResource("Resource_38nu8"), SubResource("Resource_3eydr"), SubResource("Resource_ct6sp"), SubResource("Resource_yk705"), SubResource("Resource_uswjw"), SubResource("Resource_e1hbr"), SubResource("Resource_8ueh4")] +LeftLaneData = [SubResource("Resource_gryrv"), SubResource("Resource_kwtfb"), SubResource("Resource_c2bxv"), SubResource("Resource_7lpnw"), SubResource("Resource_50tbs"), SubResource("Resource_ttd2q"), SubResource("Resource_nnlde"), SubResource("Resource_lrc4j"), SubResource("Resource_83big"), SubResource("Resource_oocdv")] +RightLaneData = [SubResource("Resource_lfmd3"), SubResource("Resource_x1ijp"), SubResource("Resource_6jgy8"), SubResource("Resource_oxq2d"), SubResource("Resource_3102k"), SubResource("Resource_j4fdm"), SubResource("Resource_5raac"), SubResource("Resource_c27cp"), SubResource("Resource_pfqra"), SubResource("Resource_2nxl5"), SubResource("Resource_67x67")] diff --git a/Audio/songMaps/Mushroom.tres b/Audio/songMaps/Mushroom.tres index 76fd946b..c6b9aa65 100644 --- a/Audio/songMaps/Mushroom.tres +++ b/Audio/songMaps/Mushroom.tres @@ -75,7 +75,11 @@ Length = 0.0 [resource] script = ExtResource("2_0c8vj") -UpLaneData = Array[ExtResource("1_n1l5w")]([SubResource("Resource_ymucf"), SubResource("Resource_bmgju"), SubResource("Resource_sosma"), SubResource("Resource_3retf")]) -DownLaneData = Array[ExtResource("1_n1l5w")]([SubResource("Resource_pprmk"), SubResource("Resource_n1l5w"), SubResource("Resource_0c8vj")]) -LeftLaneData = Array[ExtResource("1_n1l5w")]([SubResource("Resource_4gn2h"), SubResource("Resource_aa728"), SubResource("Resource_olyge"), SubResource("Resource_rjl7u")]) -RightLaneData = Array[ExtResource("1_n1l5w")]([SubResource("Resource_ea4gl"), SubResource("Resource_seepc"), SubResource("Resource_xdem2")]) +Bpm = 100 +NumLoops = 4 +SongSpeed = 200.0 +SongMapLocation = "Mushroom.ogg" +UpLaneData = [SubResource("Resource_ymucf"), SubResource("Resource_bmgju"), SubResource("Resource_sosma"), SubResource("Resource_3retf")] +DownLaneData = [SubResource("Resource_pprmk"), SubResource("Resource_n1l5w"), SubResource("Resource_0c8vj")] +LeftLaneData = [SubResource("Resource_4gn2h"), SubResource("Resource_aa728"), SubResource("Resource_olyge"), SubResource("Resource_rjl7u")] +RightLaneData = [SubResource("Resource_ea4gl"), SubResource("Resource_seepc"), SubResource("Resource_xdem2")] diff --git a/Audio/songMaps/ParasiflyDouble.tres b/Audio/songMaps/ParasiflyDouble.tres new file mode 100644 index 00000000..d070cdc9 --- /dev/null +++ b/Audio/songMaps/ParasiflyDouble.tres @@ -0,0 +1,130 @@ +[gd_resource type="Resource" load_steps=26 format=3 uid="uid://vdkolb7ylhcu"] + +[ext_resource type="Script" uid="uid://bhbpcmtr6e6pk" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_2gxac"] +[ext_resource type="Script" uid="uid://bnpnavb5lwobj" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_p8lx2"] + +[sub_resource type="Resource" id="Resource_svc5u"] +script = ExtResource("1_2gxac") +Beat = 2.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ienox"] +script = ExtResource("1_2gxac") +Beat = 6.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ax4q1"] +script = ExtResource("1_2gxac") +Beat = 10.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_663rs"] +script = ExtResource("1_2gxac") +Beat = 15.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_86xei"] +script = ExtResource("1_2gxac") +Beat = 20.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_w3gx2"] +script = ExtResource("1_2gxac") +Beat = 12.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_t01kg"] +script = ExtResource("1_2gxac") +Beat = 18.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_rnhdg"] +script = ExtResource("1_2gxac") +Beat = 8.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_of7dy"] +script = ExtResource("1_2gxac") +Beat = 22.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_xq1dl"] +script = ExtResource("1_2gxac") +Beat = 11.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ym0tj"] +script = ExtResource("1_2gxac") +Beat = 4.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_1vvgc"] +script = ExtResource("1_2gxac") +Beat = 11.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_wjmqy"] +script = ExtResource("1_2gxac") +Beat = 14.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_64q4o"] +script = ExtResource("1_2gxac") +Beat = 16.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_rubmr"] +script = ExtResource("1_2gxac") +Beat = 19.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ejow0"] +script = ExtResource("1_2gxac") +Beat = 20.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_pbett"] +script = ExtResource("1_2gxac") +Beat = 8.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_gru0r"] +script = ExtResource("1_2gxac") +Beat = 22.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_wljiu"] +script = ExtResource("1_2gxac") +Beat = 10.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_3viwm"] +script = ExtResource("1_2gxac") +Beat = 2.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_mcgpp"] +script = ExtResource("1_2gxac") +Beat = 4.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_olklg"] +script = ExtResource("1_2gxac") +Beat = 12.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_57g2b"] +script = ExtResource("1_2gxac") +Beat = 18.0 +Length = 0.0 + +[resource] +script = ExtResource("2_p8lx2") +Bpm = 120 +NumLoops = 2 +SongSpeed = 200.0 +SongMapLocation = "Song2.ogg" +UpLaneData = [SubResource("Resource_3viwm"), SubResource("Resource_mcgpp"), SubResource("Resource_olklg"), SubResource("Resource_57g2b")] +DownLaneData = [SubResource("Resource_svc5u"), SubResource("Resource_ienox"), SubResource("Resource_ax4q1"), SubResource("Resource_663rs"), SubResource("Resource_86xei"), SubResource("Resource_w3gx2"), SubResource("Resource_t01kg")] +LeftLaneData = [SubResource("Resource_rnhdg"), SubResource("Resource_of7dy"), SubResource("Resource_xq1dl")] +RightLaneData = [SubResource("Resource_ym0tj"), SubResource("Resource_1vvgc"), SubResource("Resource_wjmqy"), SubResource("Resource_64q4o"), SubResource("Resource_rubmr"), SubResource("Resource_ejow0"), SubResource("Resource_pbett"), SubResource("Resource_gru0r"), SubResource("Resource_wljiu")] diff --git a/Audio/songMaps/ParasiflySingle.tres b/Audio/songMaps/ParasiflySingle.tres new file mode 100644 index 00000000..94eddfa4 --- /dev/null +++ b/Audio/songMaps/ParasiflySingle.tres @@ -0,0 +1,130 @@ +[gd_resource type="Resource" load_steps=26 format=3 uid="uid://drmfhafnnokw1"] + +[ext_resource type="Script" uid="uid://bhbpcmtr6e6pk" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_qiqje"] +[ext_resource type="Script" uid="uid://bnpnavb5lwobj" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_qfjvo"] + +[sub_resource type="Resource" id="Resource_svc5u"] +script = ExtResource("1_qiqje") +Beat = 2.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ienox"] +script = ExtResource("1_qiqje") +Beat = 6.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ax4q1"] +script = ExtResource("1_qiqje") +Beat = 10.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_663rs"] +script = ExtResource("1_qiqje") +Beat = 15.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_86xei"] +script = ExtResource("1_qiqje") +Beat = 20.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_w3gx2"] +script = ExtResource("1_qiqje") +Beat = 12.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_t01kg"] +script = ExtResource("1_qiqje") +Beat = 18.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_rnhdg"] +script = ExtResource("1_qiqje") +Beat = 8.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_of7dy"] +script = ExtResource("1_qiqje") +Beat = 22.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_xq1dl"] +script = ExtResource("1_qiqje") +Beat = 11.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ym0tj"] +script = ExtResource("1_qiqje") +Beat = 4.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_1vvgc"] +script = ExtResource("1_qiqje") +Beat = 11.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_wjmqy"] +script = ExtResource("1_qiqje") +Beat = 14.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_64q4o"] +script = ExtResource("1_qiqje") +Beat = 16.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_rubmr"] +script = ExtResource("1_qiqje") +Beat = 19.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_ejow0"] +script = ExtResource("1_qiqje") +Beat = 20.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_pbett"] +script = ExtResource("1_qiqje") +Beat = 8.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_gru0r"] +script = ExtResource("1_qiqje") +Beat = 22.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_wljiu"] +script = ExtResource("1_qiqje") +Beat = 10.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_3viwm"] +script = ExtResource("1_qiqje") +Beat = 2.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_mcgpp"] +script = ExtResource("1_qiqje") +Beat = 4.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_olklg"] +script = ExtResource("1_qiqje") +Beat = 12.0 +Length = 0.0 + +[sub_resource type="Resource" id="Resource_57g2b"] +script = ExtResource("1_qiqje") +Beat = 18.0 +Length = 0.0 + +[resource] +script = ExtResource("2_qfjvo") +Bpm = 60 +NumLoops = 1 +SongSpeed = 200.0 +SongMapLocation = "Song2.ogg" +UpLaneData = [SubResource("Resource_3viwm"), SubResource("Resource_mcgpp"), SubResource("Resource_olklg"), SubResource("Resource_57g2b")] +DownLaneData = [SubResource("Resource_svc5u"), SubResource("Resource_ienox"), SubResource("Resource_ax4q1"), SubResource("Resource_663rs"), SubResource("Resource_86xei"), SubResource("Resource_w3gx2"), SubResource("Resource_t01kg")] +LeftLaneData = [SubResource("Resource_rnhdg"), SubResource("Resource_of7dy"), SubResource("Resource_xq1dl")] +RightLaneData = [SubResource("Resource_ym0tj"), SubResource("Resource_1vvgc"), SubResource("Resource_wjmqy"), SubResource("Resource_64q4o"), SubResource("Resource_rubmr"), SubResource("Resource_ejow0"), SubResource("Resource_pbett"), SubResource("Resource_gru0r"), SubResource("Resource_wljiu")] diff --git a/Audio/songMaps/Shapes.tres b/Audio/songMaps/Shapes.tres index 5e567069..25119e0e 100644 --- a/Audio/songMaps/Shapes.tres +++ b/Audio/songMaps/Shapes.tres @@ -1,7 +1,7 @@ -[gd_resource type="Resource" load_steps=39 format=3] +[gd_resource type="Resource" load_steps=39 format=3 uid="uid://dcdgn2fv63vls"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_egl41"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_j6rk8"] +[ext_resource type="Script" uid="uid://bhbpcmtr6e6pk" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_egl41"] +[ext_resource type="Script" uid="uid://bnpnavb5lwobj" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_j6rk8"] [sub_resource type="Resource" id="Resource_egl41"] script = ExtResource("1_egl41") @@ -185,7 +185,11 @@ Length = 0.0 [resource] script = ExtResource("2_j6rk8") -UpLaneData = Array[ExtResource("1_egl41")]([SubResource("Resource_20ma1"), SubResource("Resource_t2x17"), SubResource("Resource_hsyk0"), SubResource("Resource_txx7m"), SubResource("Resource_uic3e"), SubResource("Resource_fy78b"), SubResource("Resource_p1dmw"), SubResource("Resource_7k1m6"), SubResource("Resource_e223l")]) -DownLaneData = Array[ExtResource("1_egl41")]([SubResource("Resource_egl41"), SubResource("Resource_j6rk8"), SubResource("Resource_61fe8"), SubResource("Resource_dmlrl"), SubResource("Resource_xny5e"), SubResource("Resource_sybk5"), SubResource("Resource_cs7yi"), SubResource("Resource_xv7yd"), SubResource("Resource_pfidy"), SubResource("Resource_n0y2d")]) -LeftLaneData = Array[ExtResource("1_egl41")]([SubResource("Resource_i5oul"), SubResource("Resource_qnkk3"), SubResource("Resource_oqhlp"), SubResource("Resource_af8di"), SubResource("Resource_p5qx0"), SubResource("Resource_5ddno"), SubResource("Resource_ep11h")]) -RightLaneData = Array[ExtResource("1_egl41")]([SubResource("Resource_yjewp"), SubResource("Resource_pn3jr"), SubResource("Resource_yxbuu"), SubResource("Resource_5ue8d"), SubResource("Resource_kjeyd"), SubResource("Resource_pljkl"), SubResource("Resource_0h2yl"), SubResource("Resource_ijt06"), SubResource("Resource_61fei"), SubResource("Resource_vxhs1")]) +Bpm = 107 +NumLoops = 7 +SongSpeed = 200.0 +SongMapLocation = "Shapes.ogg" +UpLaneData = [SubResource("Resource_20ma1"), SubResource("Resource_t2x17"), SubResource("Resource_hsyk0"), SubResource("Resource_txx7m"), SubResource("Resource_uic3e"), SubResource("Resource_fy78b"), SubResource("Resource_p1dmw"), SubResource("Resource_7k1m6"), SubResource("Resource_e223l")] +DownLaneData = [SubResource("Resource_egl41"), SubResource("Resource_j6rk8"), SubResource("Resource_61fe8"), SubResource("Resource_dmlrl"), SubResource("Resource_xny5e"), SubResource("Resource_sybk5"), SubResource("Resource_cs7yi"), SubResource("Resource_xv7yd"), SubResource("Resource_pfidy"), SubResource("Resource_n0y2d")] +LeftLaneData = [SubResource("Resource_i5oul"), SubResource("Resource_qnkk3"), SubResource("Resource_oqhlp"), SubResource("Resource_af8di"), SubResource("Resource_p5qx0"), SubResource("Resource_5ddno"), SubResource("Resource_ep11h")] +RightLaneData = [SubResource("Resource_yjewp"), SubResource("Resource_pn3jr"), SubResource("Resource_yxbuu"), SubResource("Resource_5ue8d"), SubResource("Resource_kjeyd"), SubResource("Resource_pljkl"), SubResource("Resource_0h2yl"), SubResource("Resource_ijt06"), SubResource("Resource_61fei"), SubResource("Resource_vxhs1")] diff --git a/Audio/songMaps/Song2.tres b/Audio/songMaps/Song2.tres deleted file mode 100644 index 93e6a038..00000000 --- a/Audio/songMaps/Song2.tres +++ /dev/null @@ -1,126 +0,0 @@ -[gd_resource type="Resource" load_steps=26 format=3] - -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_vo5rw"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_hgwt2"] - -[sub_resource type="Resource" id="Resource_svc5u"] -script = ExtResource("1_vo5rw") -Beat = 2.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_ienox"] -script = ExtResource("1_vo5rw") -Beat = 6.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_ax4q1"] -script = ExtResource("1_vo5rw") -Beat = 10.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_663rs"] -script = ExtResource("1_vo5rw") -Beat = 15.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_86xei"] -script = ExtResource("1_vo5rw") -Beat = 20.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_w3gx2"] -script = ExtResource("1_vo5rw") -Beat = 12.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_t01kg"] -script = ExtResource("1_vo5rw") -Beat = 18.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_rnhdg"] -script = ExtResource("1_vo5rw") -Beat = 8.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_of7dy"] -script = ExtResource("1_vo5rw") -Beat = 22.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_xq1dl"] -script = ExtResource("1_vo5rw") -Beat = 11.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_ym0tj"] -script = ExtResource("1_vo5rw") -Beat = 4.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_1vvgc"] -script = ExtResource("1_vo5rw") -Beat = 11.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_wjmqy"] -script = ExtResource("1_vo5rw") -Beat = 14.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_64q4o"] -script = ExtResource("1_vo5rw") -Beat = 16.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_rubmr"] -script = ExtResource("1_vo5rw") -Beat = 19.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_ejow0"] -script = ExtResource("1_vo5rw") -Beat = 20.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_pbett"] -script = ExtResource("1_vo5rw") -Beat = 8.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_gru0r"] -script = ExtResource("1_vo5rw") -Beat = 22.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_wljiu"] -script = ExtResource("1_vo5rw") -Beat = 10.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_3viwm"] -script = ExtResource("1_vo5rw") -Beat = 2.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_mcgpp"] -script = ExtResource("1_vo5rw") -Beat = 4.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_olklg"] -script = ExtResource("1_vo5rw") -Beat = 12.0 -Length = 0.0 - -[sub_resource type="Resource" id="Resource_57g2b"] -script = ExtResource("1_vo5rw") -Beat = 18.0 -Length = 0.0 - -[resource] -script = ExtResource("2_hgwt2") -UpLaneData = Array[ExtResource("1_vo5rw")]([SubResource("Resource_3viwm"), SubResource("Resource_mcgpp"), SubResource("Resource_olklg"), SubResource("Resource_57g2b")]) -DownLaneData = Array[ExtResource("1_vo5rw")]([SubResource("Resource_svc5u"), SubResource("Resource_ienox"), SubResource("Resource_ax4q1"), SubResource("Resource_663rs"), SubResource("Resource_86xei"), SubResource("Resource_w3gx2"), SubResource("Resource_t01kg")]) -LeftLaneData = Array[ExtResource("1_vo5rw")]([SubResource("Resource_rnhdg"), SubResource("Resource_of7dy"), SubResource("Resource_xq1dl")]) -RightLaneData = Array[ExtResource("1_vo5rw")]([SubResource("Resource_ym0tj"), SubResource("Resource_1vvgc"), SubResource("Resource_wjmqy"), SubResource("Resource_64q4o"), SubResource("Resource_rubmr"), SubResource("Resource_ejow0"), SubResource("Resource_pbett"), SubResource("Resource_gru0r"), SubResource("Resource_wljiu")]) diff --git a/Audio/songMaps/Spider.tres b/Audio/songMaps/Spider.tres index 7e666dc5..b33870ef 100644 --- a/Audio/songMaps/Spider.tres +++ b/Audio/songMaps/Spider.tres @@ -1,7 +1,7 @@ -[gd_resource type="Resource" load_steps=29 format=3] +[gd_resource type="Resource" load_steps=29 format=3 uid="uid://ca5svgb1cmdc"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_kilos"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_ojgcg"] +[ext_resource type="Script" uid="uid://bhbpcmtr6e6pk" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_kilos"] +[ext_resource type="Script" uid="uid://bnpnavb5lwobj" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_ojgcg"] [sub_resource type="Resource" id="Resource_kilos"] script = ExtResource("1_kilos") @@ -135,7 +135,11 @@ Length = 0.0 [resource] script = ExtResource("2_ojgcg") -UpLaneData = Array[ExtResource("1_kilos")]([SubResource("Resource_j42ns"), SubResource("Resource_kihon"), SubResource("Resource_j43rp"), SubResource("Resource_3j8yo"), SubResource("Resource_vk213"), SubResource("Resource_dsydf")]) -DownLaneData = Array[ExtResource("1_kilos")]([SubResource("Resource_kilos"), SubResource("Resource_ojgcg"), SubResource("Resource_e2i3v"), SubResource("Resource_bxgte"), SubResource("Resource_7c41j"), SubResource("Resource_ibasm"), SubResource("Resource_57q1g")]) -LeftLaneData = Array[ExtResource("1_kilos")]([SubResource("Resource_5kf2q"), SubResource("Resource_klick"), SubResource("Resource_ncgpb"), SubResource("Resource_58gsr"), SubResource("Resource_cuxey"), SubResource("Resource_uqtyg"), SubResource("Resource_8wxpt"), SubResource("Resource_7xcdg")]) -RightLaneData = Array[ExtResource("1_kilos")]([SubResource("Resource_erw8g"), SubResource("Resource_ka8yr"), SubResource("Resource_8jxfc"), SubResource("Resource_al1ha"), SubResource("Resource_heg8m")]) +Bpm = 130 +NumLoops = 3 +SongSpeed = 200.0 +SongMapLocation = "Spider.ogg" +UpLaneData = [SubResource("Resource_j42ns"), SubResource("Resource_kihon"), SubResource("Resource_j43rp"), SubResource("Resource_3j8yo"), SubResource("Resource_vk213"), SubResource("Resource_dsydf")] +DownLaneData = [SubResource("Resource_kilos"), SubResource("Resource_ojgcg"), SubResource("Resource_e2i3v"), SubResource("Resource_bxgte"), SubResource("Resource_7c41j"), SubResource("Resource_ibasm"), SubResource("Resource_57q1g")] +LeftLaneData = [SubResource("Resource_5kf2q"), SubResource("Resource_klick"), SubResource("Resource_ncgpb"), SubResource("Resource_58gsr"), SubResource("Resource_cuxey"), SubResource("Resource_uqtyg"), SubResource("Resource_8wxpt"), SubResource("Resource_7xcdg")] +RightLaneData = [SubResource("Resource_erw8g"), SubResource("Resource_ka8yr"), SubResource("Resource_8jxfc"), SubResource("Resource_al1ha"), SubResource("Resource_heg8m")] diff --git a/Audio/songMaps/SquirkelSong.tres b/Audio/songMaps/SquirkelSong.tres index ff14f0c3..eaef9def 100644 --- a/Audio/songMaps/SquirkelSong.tres +++ b/Audio/songMaps/SquirkelSong.tres @@ -1,7 +1,7 @@ -[gd_resource type="Resource" load_steps=19 format=3] +[gd_resource type="Resource" load_steps=19 format=3 uid="uid://bsofxdw0mkiuw"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_8ueh4"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_s63u8"] +[ext_resource type="Script" uid="uid://bhbpcmtr6e6pk" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_8ueh4"] +[ext_resource type="Script" uid="uid://bnpnavb5lwobj" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_s63u8"] [sub_resource type="Resource" id="Resource_ljr32"] script = ExtResource("1_8ueh4") @@ -85,6 +85,10 @@ Length = 0.0 [resource] script = ExtResource("2_s63u8") +Bpm = 180 +NumLoops = 5 +SongSpeed = 200.0 +SongMapLocation = "SquirkelSong.ogg" UpLaneData = Array[ExtResource("1_8ueh4")]([SubResource("Resource_50tbs"), SubResource("Resource_ttd2q")]) DownLaneData = Array[ExtResource("1_8ueh4")]([SubResource("Resource_ljr32"), SubResource("Resource_bb3yp"), SubResource("Resource_852ml"), SubResource("Resource_38nu8"), SubResource("Resource_3eydr"), SubResource("Resource_ct6sp"), SubResource("Resource_yk705"), SubResource("Resource_oocdv")]) LeftLaneData = Array[ExtResource("1_8ueh4")]([]) diff --git a/Audio/songMaps/TutorialBoss176_7.tres b/Audio/songMaps/TutorialBoss176_7.tres index b90c3588..adebdd64 100644 --- a/Audio/songMaps/TutorialBoss176_7.tres +++ b/Audio/songMaps/TutorialBoss176_7.tres @@ -1,7 +1,7 @@ -[gd_resource type="Resource" load_steps=60 format=3] +[gd_resource type="Resource" load_steps=60 format=3 uid="uid://e0qdn4kgsv3k"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_w1u0b"] -[ext_resource type="Script" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_gbai3"] +[ext_resource type="Script" uid="uid://bhbpcmtr6e6pk" path="res://Classes/MidiMaestro/NoteInfo.cs" id="1_w1u0b"] +[ext_resource type="Script" uid="uid://bnpnavb5lwobj" path="res://Classes/MidiMaestro/NoteChart.cs" id="2_gbai3"] [sub_resource type="Resource" id="Resource_sxt82"] script = ExtResource("1_w1u0b") @@ -290,7 +290,11 @@ Length = 0.0 [resource] script = ExtResource("2_gbai3") -UpLaneData = Array[ExtResource("1_w1u0b")]([SubResource("Resource_w1u0b"), SubResource("Resource_gbai3"), SubResource("Resource_bcwc6"), SubResource("Resource_0k2f6"), SubResource("Resource_tgoco"), SubResource("Resource_x1j4d"), SubResource("Resource_e76xg"), SubResource("Resource_vhygb"), SubResource("Resource_unq76"), SubResource("Resource_cn75w"), SubResource("Resource_3pobr"), SubResource("Resource_43v1q"), SubResource("Resource_2i0ix"), SubResource("Resource_eo1b6"), SubResource("Resource_ehfsr"), SubResource("Resource_05gdy"), SubResource("Resource_b164v"), SubResource("Resource_86j1n"), SubResource("Resource_p6bp3"), SubResource("Resource_7erhr"), SubResource("Resource_n6xrx"), SubResource("Resource_75ujr"), SubResource("Resource_mlxr3"), SubResource("Resource_5vw1o"), SubResource("Resource_suuru")]) -DownLaneData = Array[ExtResource("1_w1u0b")]([SubResource("Resource_sxt82"), SubResource("Resource_j5ca6"), SubResource("Resource_cfyig"), SubResource("Resource_oq2fs"), SubResource("Resource_bv13m"), SubResource("Resource_lg6ov"), SubResource("Resource_eg7rs"), SubResource("Resource_x3k65"), SubResource("Resource_d5g7d"), SubResource("Resource_1cpsm"), SubResource("Resource_giltv")]) -LeftLaneData = Array[ExtResource("1_w1u0b")]([SubResource("Resource_oqa5e"), SubResource("Resource_kk6vq"), SubResource("Resource_3scxn"), SubResource("Resource_p5ohh"), SubResource("Resource_dxorp"), SubResource("Resource_pm5wf"), SubResource("Resource_biar7"), SubResource("Resource_bnjg0"), SubResource("Resource_7gvq1")]) -RightLaneData = Array[ExtResource("1_w1u0b")]([SubResource("Resource_pgga6"), SubResource("Resource_gr1jk"), SubResource("Resource_w2pru"), SubResource("Resource_wgekv"), SubResource("Resource_qsagv"), SubResource("Resource_gmjq8"), SubResource("Resource_35mcn"), SubResource("Resource_pwkkg"), SubResource("Resource_gks01"), SubResource("Resource_vp8wv"), SubResource("Resource_ur61o"), SubResource("Resource_71lt2")]) +Bpm = 176 +NumLoops = 7 +SongSpeed = 200.0 +SongMapLocation = "District_Four.ogg" +UpLaneData = [SubResource("Resource_w1u0b"), SubResource("Resource_gbai3"), SubResource("Resource_bcwc6"), SubResource("Resource_0k2f6"), SubResource("Resource_tgoco"), SubResource("Resource_x1j4d"), SubResource("Resource_e76xg"), SubResource("Resource_vhygb"), SubResource("Resource_unq76"), SubResource("Resource_cn75w"), SubResource("Resource_3pobr"), SubResource("Resource_43v1q"), SubResource("Resource_2i0ix"), SubResource("Resource_eo1b6"), SubResource("Resource_ehfsr"), SubResource("Resource_05gdy"), SubResource("Resource_b164v"), SubResource("Resource_86j1n"), SubResource("Resource_p6bp3"), SubResource("Resource_7erhr"), SubResource("Resource_n6xrx"), SubResource("Resource_75ujr"), SubResource("Resource_mlxr3"), SubResource("Resource_5vw1o"), SubResource("Resource_suuru")] +DownLaneData = [SubResource("Resource_sxt82"), SubResource("Resource_j5ca6"), SubResource("Resource_cfyig"), SubResource("Resource_oq2fs"), SubResource("Resource_bv13m"), SubResource("Resource_lg6ov"), SubResource("Resource_eg7rs"), SubResource("Resource_x3k65"), SubResource("Resource_d5g7d"), SubResource("Resource_1cpsm"), SubResource("Resource_giltv")] +LeftLaneData = [SubResource("Resource_oqa5e"), SubResource("Resource_kk6vq"), SubResource("Resource_3scxn"), SubResource("Resource_p5ohh"), SubResource("Resource_dxorp"), SubResource("Resource_pm5wf"), SubResource("Resource_biar7"), SubResource("Resource_bnjg0"), SubResource("Resource_7gvq1")] +RightLaneData = [SubResource("Resource_pgga6"), SubResource("Resource_gr1jk"), SubResource("Resource_w2pru"), SubResource("Resource_wgekv"), SubResource("Resource_qsagv"), SubResource("Resource_gmjq8"), SubResource("Resource_35mcn"), SubResource("Resource_pwkkg"), SubResource("Resource_gks01"), SubResource("Resource_vp8wv"), SubResource("Resource_ur61o"), SubResource("Resource_71lt2")] diff --git a/Audio/songMaps/TutorialSong.tres b/Audio/songMaps/TutorialSong.tres index a24d6ee3..eaa80232 100644 --- a/Audio/songMaps/TutorialSong.tres +++ b/Audio/songMaps/TutorialSong.tres @@ -105,7 +105,11 @@ Length = 0.0 [resource] script = ExtResource("2_bsw0b") -UpLaneData = Array[ExtResource("1_roxhp")]([SubResource("Resource_bnbk2"), SubResource("Resource_t2mc0"), SubResource("Resource_xl4h8"), SubResource("Resource_7i220"), SubResource("Resource_txc3y"), SubResource("Resource_iixj3"), SubResource("Resource_5o1tj"), SubResource("Resource_l3ivu"), SubResource("Resource_d6d5y")]) -DownLaneData = Array[ExtResource("1_roxhp")]([SubResource("Resource_a0ovt"), SubResource("Resource_ahash"), SubResource("Resource_6gc2p"), SubResource("Resource_tjsh3"), SubResource("Resource_s18ys"), SubResource("Resource_wcsgu"), SubResource("Resource_r81qg"), SubResource("Resource_roxhp")]) -LeftLaneData = Array[ExtResource("1_roxhp")]([SubResource("Resource_ifw8a"), SubResource("Resource_d0m6p"), SubResource("Resource_owwlp")]) -RightLaneData = Array[ExtResource("1_roxhp")]([]) +Bpm = 90 +NumLoops = 1 +SongSpeed = 200.0 +SongMapLocation = "TutorialSong.ogg" +UpLaneData = [SubResource("Resource_bnbk2"), SubResource("Resource_t2mc0"), SubResource("Resource_xl4h8"), SubResource("Resource_7i220"), SubResource("Resource_txc3y"), SubResource("Resource_iixj3"), SubResource("Resource_5o1tj"), SubResource("Resource_l3ivu"), SubResource("Resource_d6d5y")] +DownLaneData = [SubResource("Resource_a0ovt"), SubResource("Resource_ahash"), SubResource("Resource_6gc2p"), SubResource("Resource_tjsh3"), SubResource("Resource_s18ys"), SubResource("Resource_wcsgu"), SubResource("Resource_r81qg"), SubResource("Resource_roxhp")] +LeftLaneData = [SubResource("Resource_ifw8a"), SubResource("Resource_d0m6p"), SubResource("Resource_owwlp")] +RightLaneData = [] diff --git a/Classes/Events/EventDatabase.cs b/Classes/Events/EventDatabase.cs index 5a869ebd..89a97a82 100644 --- a/Classes/Events/EventDatabase.cs +++ b/Classes/Events/EventDatabase.cs @@ -4,6 +4,7 @@ /// /// Holds all game events and their associated logic. /// + public class EventDatabase { public const int EventDatabaseSize = 3; @@ -22,7 +23,15 @@ public class EventDatabase 0, StageProducer.PlayerStats.CurNotes.Length - 1 ); + var note = StageProducer.PlayerStats.CurNotes[randIndex]; + string name = note.Name.ToUpper().Replace(" ", ""); + string localizedName = TranslationServer.Translate("NOTE_" + name + "_NAME"); StageProducer.PlayerStats.RemoveNote(randIndex); + + self.OutcomeDescriptions[0] = string.Format( + TranslationServer.Translate("EVENT_EVENT1_OUTCOME1"), + localizedName + ); }, (self, node) => { @@ -30,11 +39,25 @@ public class EventDatabase 0, StageProducer.PlayerStats.CurRelics.Length - 1 ); + var relic = StageProducer.PlayerStats.CurRelics[randIndex]; + string name = relic.Name.ToUpper().Replace(" ", ""); + string localizedName = TranslationServer.Translate("RELIC_" + name + "_NAME"); StageProducer.PlayerStats.RemoveRelic(randIndex); + + self.OutcomeDescriptions[1] = string.Format( + TranslationServer.Translate("EVENT_EVENT1_OUTCOME2"), + localizedName + ); }, (self, node) => { + string stolenMoney = (StageProducer.PlayerStats.Money / 2).ToString(); StageProducer.PlayerStats.Money /= 2; + + self.OutcomeDescriptions[2] = self.OutcomeDescriptions[0] = string.Format( + TranslationServer.Translate("EVENT_EVENT1_OUTCOME3"), + stolenMoney + ); }, ], GD.Load("res://Classes/Events/Assets/Bandit_Event.png"), @@ -68,14 +91,19 @@ public class EventDatabase .SetEase(Tween.EaseType.Out); // Defer execution of the outcome until the tween finishes + string eventEffect = ""; tween.TweenCallback( Callable.From(() => { switch (spinOutcome) { case 0: + eventEffect = (StageProducer.PlayerStats.Money / 2).ToString(); StageProducer.PlayerStats.Money /= 2; - self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME2"; + self.OutcomeDescriptions[0] = string.Format( + TranslationServer.Translate("EVENT_EVENT2_OUTCOME2"), + eventEffect + ); break; case 1: self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME3"; @@ -89,15 +117,23 @@ public class EventDatabase StageProducer.PlayerStats.Money += 50; break; case 3: - self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME5"; StageProducer.PlayerStats.AddNote( Scribe.GetRandomRewardNotes(1, StageProducer.CurRoom + 10)[ 0 ] ); + var note = StageProducer.PlayerStats.CurNotes[^1]; + string name = note.Name.ToUpper().Replace(" ", ""); + eventEffect = TranslationServer.Translate( + "NOTE_" + name + "_NAME" + ); + + self.OutcomeDescriptions[0] = string.Format( + TranslationServer.Translate("EVENT_EVENT2_OUTCOME5"), + eventEffect + ); break; case 4: - self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME6"; StageProducer.PlayerStats.AddRelic( Scribe.GetRandomRelics( 1, @@ -105,6 +141,16 @@ public class EventDatabase StageProducer.PlayerStats.RarityOdds )[0] ); + + var relic = StageProducer.PlayerStats.CurRelics[^1]; + string name1 = relic.Name.ToUpper().Replace(" ", ""); + eventEffect = TranslationServer.Translate( + "RELIC_" + name1 + "_NAME" + ); + self.OutcomeDescriptions[0] = string.Format( + TranslationServer.Translate("EVENT_EVENT2_OUTCOME6"), + eventEffect + ); break; case 5: self.OutcomeDescriptions[0] = "EVENT_EVENT2_OUTCOME7"; diff --git a/Classes/MapAreas/MapLevels.cs b/Classes/MapAreas/MapLevels.cs index 6166090c..57299d6b 100644 --- a/Classes/MapAreas/MapLevels.cs +++ b/Classes/MapAreas/MapLevels.cs @@ -136,7 +136,7 @@ private MapLevels( new MapLevels( 2, CityMapConfig, - [7, 8, 10], + [7, 8, 10, 16, 17], [6, 9], [14], [], diff --git a/Classes/MidiMaestro/MidiMaestro.cs b/Classes/MidiMaestro/MidiMaestro.cs index 1bd1964f..2c7bfa8f 100644 --- a/Classes/MidiMaestro/MidiMaestro.cs +++ b/Classes/MidiMaestro/MidiMaestro.cs @@ -20,9 +20,9 @@ public partial class MidiMaestro : Resource * 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) + public MidiMaestro(NoteChart savedChart) { - if (!OS.HasFeature("editor")) + /*if (!OS.HasFeature("editor")) { filePath = OS.GetExecutablePath().GetBaseDir() + "/" + filePath; } @@ -32,7 +32,7 @@ public MidiMaestro(string filePath) GD.PushError("ERROR: Unable to load level songMap resource file: " + filePath); } - NoteChart savedChart = ResourceLoader.Load(filePath); + NoteChart savedChart = ResourceLoader.Load(filePath);*/ if (savedChart != null) { @@ -43,7 +43,7 @@ public MidiMaestro(string filePath) } else { - GD.PushError("ERROR: Unable to load songMap resource file: " + filePath); + GD.PushError("ERROR: Unable to load songMap resource file!"); _upNotes = []; _downNotes = []; _leftNotes = []; diff --git a/Classes/MidiMaestro/NoteChart.cs b/Classes/MidiMaestro/NoteChart.cs index 5e239bdc..d5f9fc85 100644 --- a/Classes/MidiMaestro/NoteChart.cs +++ b/Classes/MidiMaestro/NoteChart.cs @@ -8,6 +8,20 @@ public partial class NoteChart : Resource { //Godot is unhappy with this sometimes. const float Precision = 0.0001f; + [Export] + public int Bpm { get; set; } + + [Export] + public int NumLoops { get; set; } + + //178 is average for most fights + //<= 0 means go with default chart speed based on song length + [Export] + public float SongSpeed { get; set; } = -1; + + [Export] + public string SongMapLocation { get; set; } = ""; + [Export] Array UpLaneData = []; diff --git a/Classes/MidiMaestro/SongTemplate.cs b/Classes/MidiMaestro/SongTemplate.cs index 9cff9f5d..89d6e749 100644 --- a/Classes/MidiMaestro/SongTemplate.cs +++ b/Classes/MidiMaestro/SongTemplate.cs @@ -1,3 +1,6 @@ +using System.Text.Json; +using Godot; + namespace FunkEngine.Classes.MidiMaestro; /** @@ -6,23 +9,67 @@ namespace FunkEngine.Classes.MidiMaestro; public struct SongTemplate { public string Name; - public readonly string AudioLocation; - public string SongMapLocation; + public readonly NoteChart Chart; public readonly string[] EnemyScenePath; - public SongData SongData; - public SongTemplate( - SongData songData, - string name = "", - string audioLocation = "", - string songMapLocation = "", - string[] enemyScenePath = null - ) + public SongTemplate(string name = "", string[] enemyScenePath = null, NoteChart chart = null) { Name = name; - AudioLocation = audioLocation; - SongMapLocation = songMapLocation; - SongData = songData; + Chart = chart; EnemyScenePath = enemyScenePath; } + + public struct NoteChartMemento( + string name = "", + string[] enemyScenePath = null, + string chartPath = "" + ) + { + public string Name { get; init; } = name; + public string ChartPath { get; init; } = chartPath; + public string[] EnemyScenePath { get; init; } = enemyScenePath; + } + + public static string ToJSONString(SongTemplate template, string chartPath) + { + NoteChartMemento inbetween = new NoteChartMemento( + template.Name, + template.EnemyScenePath, + chartPath + ); + string result = JsonSerializer.Serialize(inbetween); + return result; + } + + public static SongTemplate CreateFromPath(string path, bool fromUserPath = true) + { + if (!FileAccess.FileExists(path)) + return new SongTemplate("CUSTOM_SONTEM_NOT_FOUND", [path]); + + FileAccess file = FileAccess.Open(path, FileAccess.ModeFlags.Read); + string json = file.GetAsText(); + + file.Close(); + try + { + NoteChartMemento result = JsonSerializer.Deserialize(json); + if (string.IsNullOrEmpty(result.ChartPath)) + return new SongTemplate("CUSTOM_NO_CHART_PATH", [json]); + if (!FileAccess.FileExists(path.GetBaseDir() + "/" + result.ChartPath)) + return new SongTemplate( + "CUSTOM_CHART_NOT_FOUND", + [path.GetBaseDir() + "/" + result.ChartPath] + ); + + NoteChart nc = ResourceLoader.Load( + path.GetBaseDir() + "/" + result.ChartPath + ); + return new SongTemplate(result.Name, result.EnemyScenePath, nc); + } + catch (JsonException) + { + GD.PushWarning("Cannot deserialize SongTemplate, returning error object."); + return new SongTemplate("CUSTOM_COULD_NOT_READ", [json]); + } + } } diff --git a/Classes/Notes/Assets/Note_PlayerBrass.png b/Classes/Notes/Assets/Note_PlayerBrass.png new file mode 100644 index 00000000..743b18e3 Binary files /dev/null and b/Classes/Notes/Assets/Note_PlayerBrass.png differ diff --git a/SharedAssets/NoteArrow_Black_Outline.png.import b/Classes/Notes/Assets/Note_PlayerBrass.png.import similarity index 65% rename from SharedAssets/NoteArrow_Black_Outline.png.import rename to Classes/Notes/Assets/Note_PlayerBrass.png.import index d2024495..2200c58c 100644 --- a/SharedAssets/NoteArrow_Black_Outline.png.import +++ b/Classes/Notes/Assets/Note_PlayerBrass.png.import @@ -2,16 +2,16 @@ importer="texture" type="CompressedTexture2D" -uid="uid://xtygvpk7s8e4" -path="res://.godot/imported/NoteArrow_Black_Outline.png-60b3e26fae858d07195c337ad8018a56.ctex" +uid="uid://5eg3uodp8qjj" +path="res://.godot/imported/Note_PlayerBrass.png-cef5666b6abc9b5c518867ec908822bd.ctex" metadata={ "vram_texture": false } [deps] -source_file="res://SharedAssets/NoteArrow_Black_Outline.png" -dest_files=["res://.godot/imported/NoteArrow_Black_Outline.png-60b3e26fae858d07195c337ad8018a56.ctex"] +source_file="res://Classes/Notes/Assets/Note_PlayerBrass.png" +dest_files=["res://.godot/imported/Note_PlayerBrass.png-cef5666b6abc9b5c518867ec908822bd.ctex"] [params] diff --git a/Classes/Relics/Assets/Relic_LootersLens.png b/Classes/Relics/Assets/Relic_LootersLens.png new file mode 100644 index 00000000..a83958ff Binary files /dev/null and b/Classes/Relics/Assets/Relic_LootersLens.png differ diff --git a/Classes/Relics/Assets/Relic_LootersLens.png.import b/Classes/Relics/Assets/Relic_LootersLens.png.import new file mode 100644 index 00000000..3a8c1cdd --- /dev/null +++ b/Classes/Relics/Assets/Relic_LootersLens.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b1kavqh73arsv" +path="res://.godot/imported/Relic_LootersLens.png-fbad200d69c23fb6df24a1cee6ad0bd2.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Classes/Relics/Assets/Relic_LootersLens.png" +dest_files=["res://.godot/imported/Relic_LootersLens.png-fbad200d69c23fb6df24a1cee6ad0bd2.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=1 diff --git a/Classes/Relics/Assets/Relic_Quito.png b/Classes/Relics/Assets/Relic_Quito.png new file mode 100644 index 00000000..de3f34a5 Binary files /dev/null and b/Classes/Relics/Assets/Relic_Quito.png differ diff --git a/Classes/Relics/Assets/Relic_Quito.png.import b/Classes/Relics/Assets/Relic_Quito.png.import new file mode 100644 index 00000000..ab35bc65 --- /dev/null +++ b/Classes/Relics/Assets/Relic_Quito.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://fqipkj25gbym" +path="res://.godot/imported/Relic_Quito.png-5c7f1276f14d3faa906bdf363c28e4f8.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Classes/Relics/Assets/Relic_Quito.png" +dest_files=["res://.godot/imported/Relic_Quito.png-5c7f1276f14d3faa906bdf363c28e4f8.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=1 diff --git a/Classes/Relics/Assets/Relic_Soloist'sTriangle.png b/Classes/Relics/Assets/Relic_Soloist'sTriangle.png new file mode 100644 index 00000000..6c992a5c Binary files /dev/null and b/Classes/Relics/Assets/Relic_Soloist'sTriangle.png differ diff --git a/Classes/Relics/Assets/Relic_Soloist'sTriangle.png.import b/Classes/Relics/Assets/Relic_Soloist'sTriangle.png.import new file mode 100644 index 00000000..97c95cd1 --- /dev/null +++ b/Classes/Relics/Assets/Relic_Soloist'sTriangle.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://drq2grd4nh0c5" +path="res://.godot/imported/Relic_Soloist'sTriangle.png-b379020270ecace18bdeff6920a65ad7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Classes/Relics/Assets/Relic_Soloist'sTriangle.png" +dest_files=["res://.godot/imported/Relic_Soloist'sTriangle.png-b379020270ecace18bdeff6920a65ad7.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=1 diff --git a/Classes/Relics/Assets/Relic_Tinsel.png b/Classes/Relics/Assets/Relic_Tinsel.png new file mode 100644 index 00000000..3f04aaa9 Binary files /dev/null and b/Classes/Relics/Assets/Relic_Tinsel.png differ diff --git a/Classes/Relics/Assets/Relic_Tinsel.png.import b/Classes/Relics/Assets/Relic_Tinsel.png.import new file mode 100644 index 00000000..c5dc2a3b --- /dev/null +++ b/Classes/Relics/Assets/Relic_Tinsel.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://c1n8xbesrvua8" +path="res://.godot/imported/Relic_Tinsel.png-1250f95620196fce37933afc2a2856ec.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Classes/Relics/Assets/Relic_Tinsel.png" +dest_files=["res://.godot/imported/Relic_Tinsel.png-1250f95620196fce37933afc2a2856ec.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=1 diff --git a/Classes/Relics/Assets/Relic_WarHorn.png b/Classes/Relics/Assets/Relic_WarHorn.png new file mode 100644 index 00000000..7a18dd6d Binary files /dev/null and b/Classes/Relics/Assets/Relic_WarHorn.png differ diff --git a/Classes/Relics/Assets/Relic_WarHorn.png.import b/Classes/Relics/Assets/Relic_WarHorn.png.import new file mode 100644 index 00000000..0cba51ca --- /dev/null +++ b/Classes/Relics/Assets/Relic_WarHorn.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dk0ri03m3tns" +path="res://.godot/imported/Relic_WarHorn.png-e617c4620279dcc6112d25b0abc021c7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Classes/Relics/Assets/Relic_WarHorn.png" +dest_files=["res://.godot/imported/Relic_WarHorn.png-e617c4620279dcc6112d25b0abc021c7.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=1 diff --git a/Globals/FunkEngineNameSpace.cs b/Globals/FunkEngineNameSpace.cs index 78b98bd0..f4777cb0 100644 --- a/Globals/FunkEngineNameSpace.cs +++ b/Globals/FunkEngineNameSpace.cs @@ -7,15 +7,6 @@ namespace FunkEngine; #region Structs -/** - * SongData: Basic information defining the statistics of an in-battle song. - */ -public struct SongData -{ - public int Bpm; - public double SongLength; - public int NumLoops; -} /** * ArrowData: Data representing the necessary information for each arrow checker. @@ -268,6 +259,7 @@ public enum Stages Load, Continue, Title, + Custom, } public enum Rarity @@ -298,13 +290,25 @@ public Room[] GetRooms() return _rooms; } + public static bool ForceEliteBattles = false; + public class Room { public int Idx { get; private set; } public int[] Children { get; private set; } = []; public int X { get; private set; } public int Y { get; private set; } - public Stages Type { get; private set; } + public Stages Type + { + get + { + if (ForceEliteBattles && _type == Stages.Battle) + return Stages.Elite; + return _type; + } + private set { _type = value; } + } + private Stages _type; public Room(int idx, int x, int y) { diff --git a/Globals/SaveSystem.cs b/Globals/SaveSystem.cs index 071e0255..8e478d50 100644 --- a/Globals/SaveSystem.cs +++ b/Globals/SaveSystem.cs @@ -15,10 +15,10 @@ public static class SaveSystem private const float DefaultVolume = 1f; private const string DefaultInputType = "WASD"; //WASD or CONTROLLER - private const int DefaultInputKeyboardUp = 87; //W + private const int DefaultInputKeyboardUp = 83; //S private const int DefaultInputKeyboardLeft = 65; //A - private const int DefaultInputKeyboardDown = 83; //S - private const int DefaultInputKeyboardRight = 68; //D + private const int DefaultInputKeyboardDown = 75; //K + private const int DefaultInputKeyboardRight = 76; //L private const int DefaultInputKeyboardSecondary = 4194325; //Shift private const int DefaultInputKeyboardInventory = 73; //I private const int DefaultInputControllerUp = 3; //Y @@ -28,8 +28,11 @@ public static class SaveSystem private const int DefaultInputControllerSecondary = 10; //right bumper private const int DefaultInputControllerInventory = 4; //back button private const string DefaultLanguage = "en"; + private const bool DefaultTypeIsArrow = false; + private const bool DefaultVerticalScroll = true; private const bool DefaultHighCon = false; private const bool DefaultFirstTime = true; + private const bool DefaultHasWon = false; public enum ConfigSettings { @@ -48,8 +51,11 @@ public enum ConfigSettings InputControllerSecondary, InputControllerInventory, LanguageKey, + TypeIsArrow, HighContrast, FirstTime, + HasWon, + VerticalScroll, } /** @@ -73,8 +79,11 @@ private static void InitConfig() UpdateConfig(ConfigSettings.InputControllerSecondary, DefaultInputControllerSecondary); UpdateConfig(ConfigSettings.InputControllerInventory, DefaultInputControllerInventory); UpdateConfig(ConfigSettings.LanguageKey, DefaultLanguage); + UpdateConfig(ConfigSettings.TypeIsArrow, DefaultTypeIsArrow); UpdateConfig(ConfigSettings.HighContrast, DefaultHighCon); UpdateConfig(ConfigSettings.FirstTime, DefaultFirstTime); + UpdateConfig(ConfigSettings.HasWon, DefaultHasWon); + UpdateConfig(ConfigSettings.VerticalScroll, DefaultVerticalScroll); } private static void SaveConfig() @@ -133,12 +142,21 @@ public static void UpdateConfig(ConfigSettings setting, Variant value) case ConfigSettings.LanguageKey: _curConfigData.SetValue("Options", "LanguageKey", value); break; + case ConfigSettings.TypeIsArrow: + _curConfigData.SetValue("Options", "TypeIsArrow", value); + break; + case ConfigSettings.VerticalScroll: + _curConfigData.SetValue("Options", "VerticalScroll", value); + break; case ConfigSettings.HighContrast: _curConfigData.SetValue("Options", "HighContrast", value); break; case ConfigSettings.FirstTime: _curConfigData.SetValue("Game", "FirstTime", value); break; + case ConfigSettings.HasWon: + _curConfigData.SetValue("Game", "HasWon", value); + break; default: GD.PushError("SaveSystem.UpdateConfig: Invalid config setting passed. " + setting); break; @@ -274,10 +292,16 @@ public static Variant GetConfigValue(ConfigSettings setting) ); case ConfigSettings.LanguageKey: return _curConfigData.GetValue("Options", "LanguageKey", DefaultLanguage); + case ConfigSettings.TypeIsArrow: + return _curConfigData.GetValue("Options", "TypeIsArrow", DefaultTypeIsArrow); + case ConfigSettings.VerticalScroll: + return _curConfigData.GetValue("Options", "VerticalScroll", DefaultVerticalScroll); case ConfigSettings.HighContrast: return _curConfigData.GetValue("Options", "HighContrast", DefaultHighCon); case ConfigSettings.FirstTime: return _curConfigData.GetValue("Game", "FirstTime", DefaultFirstTime); + case ConfigSettings.HasWon: + return _curConfigData.GetValue("Game", "HasWon", DefaultHasWon); default: GD.PushError("Invalid config setting passed. " + setting); return float.MinValue; diff --git a/Globals/Scribe.cs b/Globals/Scribe.cs index 8835dc97..7cab15df 100644 --- a/Globals/Scribe.cs +++ b/Globals/Scribe.cs @@ -244,6 +244,31 @@ public partial class Scribe : Node director.AddStatus(Targetting.Player, StatusEffect.Poison, amt); } ), + new Note( + 18, + "PlayerBrass", + GD.Load("res://Classes/Notes/Assets/Note_PlayerBrass.png"), + 0, + (director, note, timing) => + { + if (note.GetBaseVal() == 0) //Setup, so it doesn't trigger on place. + { + note.SetBaseVal(2); + return; + } + if (timing == Timing.Miss) + { + director.AddStatus(Targetting.Player, StatusEffect.Mulligan, 1); + return; + } + director.DealDamage( + Targetting.First, + note.GetBaseVal() * director.NPB.ComboMult, + note.Owner + ); + director.NPB.ResetCurrentCombo(); + } + ), }; public static readonly RelicTemplate[] RelicDictionary = new[] @@ -535,7 +560,7 @@ e is BattleDirector.Harbinger.OnDamageInstanceArgs dmgArgs (e, self, val) => { //TODO: make damage scale with current act - e.BD.DealDamage(Targetting.All, val, e.BD.Player); + e.BD.DealDamage(Targetting.All, val, null); } ), } @@ -549,7 +574,7 @@ e is BattleDirector.Harbinger.OnDamageInstanceArgs dmgArgs { new RelicEffect( BattleEffectTrigger.OnDamageInstance, - 10, + 5, (e, self, val) => { if ( @@ -580,201 +605,209 @@ e is BattleDirector.Harbinger.OnDamageInstanceArgs dmgArgs ), } ), + new RelicTemplate( + 18, + "War Horn", + Rarity.Epic, + GD.Load("res://Classes/Relics/Assets/Relic_WarHorn.png"), + new RelicEffect[] + { + new RelicEffect( + BattleEffectTrigger.OnPickup, + 1, + (e, self, val) => + { + MapGrid.ForceEliteBattles = true; + } + ), + } + ), + new RelicTemplate( + 19, + "Looter's Lens", + Rarity.Uncommon, + GD.Load("res://Classes/Relics/Assets/Relic_LootersLens.png"), + new RelicEffect[] + { + new RelicEffect( + BattleEffectTrigger.OnPickup, + 1, + (e, self, val) => + { + StageProducer.PlayerStats.RewardAmountModifier += val; + } + ), + } + ), + new RelicTemplate( + 20, + "Quito", + Rarity.Legendary, + GD.Load("res://Classes/Relics/Assets/Relic_Quito.png"), + new RelicEffect[] + { + new RelicEffect( + BattleEffectTrigger.NoteHit, + 1, + (e, self, val) => + { + if ( + e is BattleDirector.Harbinger.NoteHitArgs noteArgs + && noteArgs.Note.Owner == e.BD.Player + && noteArgs.Timing != Timing.Miss + ) + { + noteArgs.Note.OnHit(e.BD, Timing.Bad); + } + } + ), + } + ), + new RelicTemplate( + 21, + "Soloist's Triangle", + Rarity.Epic, + GD.Load("res://Classes/Relics/Assets/Relic_Soloist'sTriangle.png"), + new RelicEffect[] + { + new RelicEffect( + BattleEffectTrigger.OnPickup, + 2, + (e, self, val) => + { + StageProducer.PlayerStats.ChartSpeedMultiplier *= val; + StageProducer.PlayerStats.RewardAmountModifier += 3; + } + ), + } + ), + new RelicTemplate( + 22, + "Tinsel", + Rarity.Legendary, + GD.Load("res://Classes/Relics/Assets/Relic_Tinsel.png"), + new RelicEffect[] // all this combined might be OP, but just slowing down the speed felt boring for a legendary + { + new RelicEffect( + BattleEffectTrigger.OnPickup, + 2, + (e, self, val) => + { + StageProducer.PlayerStats.ChartSpeedMultiplier /= val; + } + ), + new RelicEffect( + BattleEffectTrigger.OnDamageInstance, + 1, + (e, self, val) => + { + if ( + e is BattleDirector.Harbinger.OnDamageInstanceArgs dmgArgs + && dmgArgs.Dmg.Target == e.BD.Player + && dmgArgs.Dmg.Damage > 1 + ) + { + dmgArgs.Dmg.ModifyDamage(-val); + } + } + ), + } + ), }; + private static string DefaultNoteChartPath = "Audio/songMaps/"; + public static readonly SongTemplate[] SongDictionary = new[] //Generalize and make pools for areas/room types { new SongTemplate( - new SongData - { - Bpm = 120, - SongLength = -1, - NumLoops = 5, - }, "Song1", - "Audio/Song1.ogg", - "Audio/songMaps/Song1.tres", - [P_BossBlood.LoadPath] + [P_BossBlood.LoadPath], + ResourceLoader.Load(DefaultNoteChartPath + "BossBlood.tres") ), new SongTemplate( - new SongData - { - Bpm = 60, - SongLength = -1, - NumLoops = 1, - }, "Song2", - "Audio/Song2.ogg", - "Audio/songMaps/Song2.tres", - [P_Parasifly.LoadPath] + [P_Parasifly.LoadPath], + ResourceLoader.Load(DefaultNoteChartPath + "ParasiflySingle.tres") ), new SongTemplate( - new SongData - { - Bpm = 120, - SongLength = -1, - NumLoops = 2, - }, "Song2", - "Audio/Song2.ogg", - "Audio/songMaps/Song2.tres", - [P_Parasifly.LoadPath, P_Parasifly.LoadPath] + [P_Parasifly.LoadPath, P_Parasifly.LoadPath], + ResourceLoader.Load(DefaultNoteChartPath + "ParasiflyDouble.tres") ), new SongTemplate( - new SongData - { - Bpm = 120, - SongLength = -1, - NumLoops = 1, - }, "Song3", - "Audio/Song3.ogg", - "Audio/songMaps/Song3.tres", - [P_TheGWS.LoadPath] + [P_TheGWS.LoadPath], + ResourceLoader.Load(DefaultNoteChartPath + "GWS.tres") ), new SongTemplate( - new SongData - { - Bpm = 90, - SongLength = -1, - NumLoops = 1, - }, "TutorialSong", - "Audio/TutorialSong.ogg", - "Audio/songMaps/TutorialSong.tres", - [P_Strawman.LoadPath] + [P_Strawman.LoadPath], + ResourceLoader.Load(DefaultNoteChartPath + "TutorialSong.tres") ), new SongTemplate( - new SongData - { - Bpm = 176, - SongLength = -1, - NumLoops = 7, - }, "YouWillDie:)", - "Audio/District_Four.ogg", - "Audio/songMaps/TutorialBoss176_7.tres", - [P_Effigy.LoadPath] + [P_Effigy.LoadPath], + ResourceLoader.Load(DefaultNoteChartPath + "TutorialBoss176_7.tres") ), new SongTemplate( - new SongData - { - Bpm = 120, - SongLength = -1, - NumLoops = 4, - }, "EcholaneSong", - "Audio/EcholaneSong.ogg", - "Audio/songMaps/EcholaneSong.tres", - [P_Turtle.LoadPath] + [P_Turtle.LoadPath], + ResourceLoader.Load(DefaultNoteChartPath + "EcholaneSong.tres") ), new SongTemplate( - new SongData - { - Bpm = 180, - SongLength = -1, - NumLoops = 1, - }, "CyberFoxSong", - "Audio/CyberFoxSong.ogg", - "Audio/songMaps/CyberFoxSong.tres", - [P_CyberFox.LoadPath] + [P_CyberFox.LoadPath], + ResourceLoader.Load(DefaultNoteChartPath + "CyberFoxSong.tres") ), new SongTemplate( - new SongData - { - Bpm = 120, - SongLength = -1, - NumLoops = 6, - }, "GobblerSong", - "Audio/Gobbler.ogg", - "Audio/songMaps/Gobbler.tres", - [P_Gobbler.LoadPath] + [P_Gobbler.LoadPath], + ResourceLoader.Load(DefaultNoteChartPath + "Gobbler.tres") ), new SongTemplate( //9 - new SongData - { - Bpm = 130, - SongLength = -1, - NumLoops = 1, - }, "Holograeme", - "Audio/Holo_ThereItIs.ogg", - "Audio/songMaps/HoloRepeat.tres", - [P_Holograeme.LoadPath] + [P_Holograeme.LoadPath], + ResourceLoader.Load(DefaultNoteChartPath + "HoloRepeat.tres") ), new SongTemplate( //10 - new SongData - { - Bpm = 107, - SongLength = -1, - NumLoops = 7, - }, "Shapes", - "Audio/Shapes.ogg", - "Audio/songMaps/Shapes.tres", - [P_Shapes.LoadPath] + [P_Shapes.LoadPath], + ResourceLoader.Load(DefaultNoteChartPath + "Shapes.tres") ), new SongTemplate( //11 - new SongData - { - Bpm = 130, - SongLength = -1, - NumLoops = 3, - }, "Spideer", - "Audio/Spider.ogg", - "Audio/songMaps/Spider.tres", - [P_Spider.LoadPath, P_Spider.LoadPath] + [P_Spider.LoadPath, P_Spider.LoadPath], + ResourceLoader.Load(DefaultNoteChartPath + "Spider.tres") ), new SongTemplate( //12 - new SongData - { - Bpm = 180, - SongLength = -1, - NumLoops = 5, - }, "Squirkel", - "Audio/SquirkelSong.ogg", - "Audio/songMaps/SquirkelSong.tres", - [P_Squirkel.LoadPath] + [P_Squirkel.LoadPath], + ResourceLoader.Load(DefaultNoteChartPath + "SquirkelSong.tres") ), new SongTemplate( //13 - new SongData - { - Bpm = 100, - SongLength = -1, - NumLoops = 4, - }, "Mushroom", - "Audio/Mushroom.ogg", - "Audio/songMaps/Mushroom.tres", - [P_Mushroom.LoadPath] + [P_Mushroom.LoadPath], + ResourceLoader.Load(DefaultNoteChartPath + "Mushroom.tres") ), new SongTemplate( - new SongData - { - Bpm = 170, - SongLength = -1, - NumLoops = 9, - }, "Keythulu", - "Audio/KeythuluSong.ogg", - "Audio/songMaps/KeythuluSong.tres", - [P_Keythulu.LoadPath] + [P_Keythulu.LoadPath], + ResourceLoader.Load(DefaultNoteChartPath + "KeythuluSong.tres") ), new SongTemplate( // 15 - new SongData - { - Bpm = 99, - SongLength = -1, - NumLoops = 5, - }, - name: "LWS", - audioLocation: "Audio/FrostWaltz.ogg", - songMapLocation: "Audio/songMaps/FrostWaltz.tres", - enemyScenePath: [P_LWS.LoadPath] + "LWS", + [P_LWS.LoadPath], + ResourceLoader.Load(DefaultNoteChartPath + "FrostWaltz.tres") + ), + new SongTemplate( // 16 + name: "Astrorat", + enemyScenePath: [P_Astrorat.LoadPath], + ResourceLoader.Load(DefaultNoteChartPath + "Astrorat.tres") + ), + new SongTemplate( // 17 + name: "CatGirl", + enemyScenePath: [P_Midriff.LoadPath], + ResourceLoader.Load(DefaultNoteChartPath + "Jammin' Forest.tres") ), }; diff --git a/Globals/StageProducer.cs b/Globals/StageProducer.cs index f9606d0a..b0a3e6e0 100644 --- a/Globals/StageProducer.cs +++ b/Globals/StageProducer.cs @@ -2,6 +2,7 @@ using System.Linq; using System.Threading.Tasks; using FunkEngine; +using FunkEngine.Classes.MidiMaestro; using Godot; /** @@ -35,6 +36,13 @@ public override void _EnterTree() { InitFromCfg(); LiveInstance = this; + + GD.Load(BattleDirector.LoadPath); + GD.Load(Cartographer.LoadPath); + GD.Load(ShopScene.LoadPath); + GD.Load(EventScene.LoadPath); + GD.Load(ChestScene.LoadPath); + GD.Load(TitleScreen.EffectsLoadPath); } public void InitFromCfg() @@ -51,6 +59,12 @@ public void InitFromCfg() .GetConfigValue(SaveSystem.ConfigSettings.HighContrast) .AsBool(); GetTree().Root.CallDeferred("add_child", ContrastFilter); + InputHandler.UseArrows = SaveSystem + .GetConfigValue(SaveSystem.ConfigSettings.TypeIsArrow) + .AsBool(); + BattleDirector.VerticalScroll = SaveSystem + .GetConfigValue(SaveSystem.ConfigSettings.VerticalScroll) + .AsBool(); } private void GenerateMapConsistent() @@ -76,6 +90,7 @@ private void StartNewGame() EventScene.EventPool = null; Scribe.InitRelicPools(); IsInitialized = true; + MapGrid.ForceEliteBattles = false; } private bool LoadGame() @@ -218,8 +233,29 @@ public void TransitionStage(Stages nextStage, int nextRoomIdx = -1) _preloadStage = null; //Apply grayscale shader to all scenes GetTree().Root.AddChild(ContrastFilter); + LastStage = _curStage; _curStage = nextStage; } + + public Stages LastStage; //Hacky, purely to have title screen return to custom menu. + + public void TransitionToCustom(SongTemplate song) + { + GetTree().Root.RemoveChild(ContrastFilter); + GetTree().Root.AddChild(ContrastFilter); + GlobalRng.Randomize(); + PlayerStats = new PlayerStats(); + Config = new BattleConfig + { + BattleRoom = null, + RoomType = Stages.Custom, + CurSong = song, + EnemyScenePath = song.EnemyScenePath, + }; + GetTree().ChangeSceneToFile(BattleDirector.LoadPath); + _curStage = Stages.Custom; + } + #endregion private void RefreshBattlePool() @@ -300,6 +336,14 @@ public override void _Input(InputEvent @event) + ".png" ); } + else if (eventKey.Keycode == Key.F11) + { + DisplayServer.WindowSetMode( + DisplayServer.WindowGetMode() == DisplayServer.WindowMode.ExclusiveFullscreen + ? DisplayServer.WindowMode.Windowed + : DisplayServer.WindowMode.ExclusiveFullscreen + ); + } } } diff --git a/Globals/Translations/Translations.csv b/Globals/Translations/Translations.csv index a0b7cb2b..47d68594 100644 --- a/Globals/Translations/Translations.csv +++ b/Globals/Translations/Translations.csv @@ -34,6 +34,7 @@ SHOP_REMOVAL,Remove A Note,移除音符 SHOP_CONFIRM,Confirm Purchase,购买已确认 SHOP_CANCEL,Cancel,取消操作 REMOVAL_COST,Removal Fee,删除费用 +SHOP_HEAL,Heal 25%: 50g,愈合 25%: 50硬币 BATTLE_ROOM_BEGIN_BUTTON,Begin Battle [Enter],开始战斗 [Enter] BATTLE_ROOM_PERFECT,Perfect,Perfect BATTLE_ROOM_GOOD,Good,良好 @@ -70,10 +71,12 @@ NOTE_PLAYERECHO_NAME,Echo Note,回音符 NOTE_PLAYERECHO_TOOLTIP,Deals more damage with each loop.,每次循环造成更多伤害。 NOTE_PLAYERPOISON_NAME,Poison Note,毒药音符 NOTE_PLAYERPOISON_TOOLTIP,Applies stacks of poison based on timing.,根据时机施加中毒层数。 -NOTE_PLAYERMONEY_NAME,Money Note,钱的便条 +NOTE_PLAYERMONEY_NAME,Money Note,金钱音符 NOTE_PLAYERMONEY_TOOLTIP,"Deals no damage, but gives you money when hit.",不会造成伤害,但命中时会获得金钱。 NOTE_PLAYERCOMBO_NAME,Combo Note,连击音符 NOTE_PLAYERCOMBO_TOOLTIP,"Deals no damage, but gives you double the combo bar charge when hit.",不会造成伤害,但命中时会获得双倍连击槽充能。 +NOTE_PLAYERBRASS_NAME,Brass Cannon Note,铜管加农炮音符 +NOTE_PLAYERBRASS_TOOLTIP,"Can be missed without penalty. When hit, deals double the multiplier in damage, then resets the current multiplier.",失误不计。命中时,造成双倍连击倍率伤害,并重置当前连击倍率。 RELIC_BREAKFAST_NAME,Breakfast,早餐 RELIC_BREAKFAST_TOOLTIP,Increases max hp.,提高最大生命值 RELIC_GOODVIBES_NAME,Good Vibes,良好消息 @@ -110,19 +113,31 @@ RELIC_BLOODMONEY_NAME,Blood Money,血腥钱袋 RELIC_BLOODMONEY_TOOLTIP,Gain money when taking damage below half health.,在生命值低于一半时受到伤害可获得金钱。 RELIC_COUPON_NAME,Coupon,优惠券 RELIC_COUPON_TOOLTIP,Get a 10% discount on notes and relics in the shop.,在商店购买音符和遗物时可享受9折优惠。 +RELIC_WARHORN_NAME,War Horn,战号 +RELIC_WARHORN_TOOLTIP,All normal battles are now elite battles.,所有普通战斗现在都会变为精英战斗。 +RELIC_LOOTER'SLENS_NAME,Looter's Lens,盗贼之镜片 +RELIC_LOOTER'SLENS_TOOLTIP,Can see one more item in reward selection screens.,在奖励选择界面上可以多看到一个物品。 +RELIC_QUITO_NAME,Quito,基多 +RELIC_QUITO_TOOLTIP,"Quito mimics the player, duplicating all of their notes with bad timing.",基多模仿玩家,"复制他们所有的音符,但时机很差。" +RELIC_SOLOIST'STRIANGLE_NAME,Soloist's Triangle,独奏者的三角铁 +RELIC_SOLOIST'STRIANGLE_TOOLTIP,"Charts move at double speed, reward selections have 3 additional options to choose from.","谱面移动速度加倍,奖励选择中额外提供3个选项。" +RELIC_TINSEL_NAME,Tinsel,廷瑟 +RELIC_TINSEL_TOOLTIP,"Become an aspect of the turtle. Charts move at half speed, and all damage taken is reduced by 1 (damage cannot be reduced below 1).","化身为龟之化身。图表移动速度减半,所受伤害减少1点(伤害最低为1点)。" INVENTORY_TAB_NOTES,Notes,乐谱 INVENTORY_TAB_RELICS,Relics,遗物 OPTIONS_VOLUME_LABEL,Master Volume,最终音量设置 OPTIONS_CONTRAST_LABEL,High Contrast,高对比度模式 +OPTIONS_NOTE_SWAP,Use arrows?,使用箭头? +OPTIONS_VERT_SCROLL,Vertical Scroll?,垂直滚动? HOW_TO_PLAY,How to Play,如何游玩 HOW_TO_PLAY_BLOCK1,Hit notes to\nbuild combo,点击音符\n以建立连击 HOW_TO_PLAY_BLOCK2,Place notes when\ncombo is full,当连击满\n时放置音符 HOW_TO_PLAY_BLOCK3,Only placed notes\nhave effects,只有已放置\n的音符才有效 TUTORIAL_NODYING,No dying during a tutorial!,教程中不会死亡! TUTORIAL_DIALOGUE_1,"Hello, welcome to Midnight Riff!",你好!欢迎来到午夜即兴! -TUTORIAL_DIALOGUE_2,This is a rhythm game where notes move right to left.,这是一款节奏游戏,音符从右向左移动。 +TUTORIAL_DIALOGUE_2,This is a rhythm roguelike game!,这是一款节奏肉鸽游戏! TUTORIAL_DIALOGUE_3,"Press the correct button as the notes line up to hit the note. Try to time it as well as you can!",音符对齐时按下正确的按键,尽量精准地进行点击! -TUTORIAL_DIALOGUE_4,"What are the correct buttons? I'll help you out and show you. These can be changed from the meu. Once you press continue we can get started!",正确的按键是什么?我会帮你指出来。这些可以在菜单中更改。按下继续后,我们就可以开始了! +TUTORIAL_DIALOGUE_4,"What are the correct buttons? I'll help you out and show you. These can be changed from the menu. Once you press continue we can get started!",正确的按键是什么?我会帮你指出来。这些可以在菜单中更改。按下继续后,我们就可以开始了! TUTORIAL_LOOP_1,At set intervals the chart loops! This means all notes on the chart repeat. You know a loop is coming up when this symbol scrolls by.,在固定的时间间隔内,乐谱会循环!这意味着乐谱上的所有音符都会重复出现。当这个符号滚动经过时,你就知道循环即将开始。 TUTORIAL_LOOP_2,"In case you haven't noticed, I'll explain these things on the left side. This is your note queue.",如果你还没注意到,我会在左侧解释这些内容。这是你的音符队列。 TUTORIAL_LOOP_3,"This is the combo multiplier, as you hit notes successfully your multiplier will rise. If you miss a note, your multiplier gets reset.",这是连击倍数,成功点击音符后,你的倍数将会上升。如果你错过了一个音符,你的倍数将会重置。 @@ -130,7 +145,7 @@ TUTORIAL_LOOP_4,"This is the freestyle bar, as you hit notes successfully, the f TUTORIAL_LOOP_5,"By now you've probably taken damage. These aren't just cozy songs, these are battles! You take damage when you miss or have bad timing, or from enemy effects. How do you deal damage to enemies? Fill up the bar and I'll tell you.",到目前为止,你可能已经受到伤害了。这些不仅仅是轻松的歌曲,它们是战斗!你错过音符或时机不好,或者受到敌人的效果影响时,都会受到伤害。你如何对敌人造成伤害?填满能量条,我会告诉你。 TUTORIAL_PLACE_1,"Okay, now that the bar is full, you can press a lane button to place your own note. Your notes have special effects. Placing notes consumes the freestyle bar.",好的,现在能量条已满,你可以按下轨道按键放置你自己的音符。你的音符具有特殊效果。放置音符会消耗风格条。 TUTORIAL_PLACE_2,These note effects range from dealing damage to applying status effects!,这些音符效果从造成伤害到施加状态效果不等! -TUTORIAL_PLACE_3,"Your notes can be placed anywhere a note doesn't already exist, and that isn't over the loop marker. But be careful, if you try to place a note while the bar isn't full you may miss a note!",你的音符可以放置在任何没有音符存在且不在循环标记上的位置。但是要小心,如果你试图在能量条未满时放置音符,你可能会错过音符! +TUTORIAL_PLACE_3,"Your notes can be placed anywhere a note doesn't already exist, and that isn't over the loop marker.",你的音符可以放置在任何没有音符存在且不在循环标记上的位置。 TUTORIAL_PLACE_4,"The note you'll place is indicated in the top of the note queue.",你将要放置的音符显示在音符队列顶部。 TUTORIAL_PLACE_5,"Notes are automatically hit when you place them, how helpful, but they come back around when the chart loops, and you need to time hitting them then.",放置音符时会自动击中,这非常方便,但当乐谱循环时它们会再次出现,你需要掌握时机才能击中它们。 TUTORIAL_PLACE_6,"Now go ahead, place a note in the bottom lane!",现在,在最下方的轨道上放置一个音符吧! @@ -143,23 +158,52 @@ EVENT_EVENT1_DESC,A bandit approaches you.,一个强盗拦住了你。 EVENT_EVENT1_OPTION1,Give them a random note,给他一个随机音符 EVENT_EVENT1_OPTION2,Give them a random relic,给他一件随机遗物 EVENT_EVENT1_OPTION3,Give them half your gold,给他你一半的金币 -EVENT_EVENT1_OUTCOME1,You got robbed of a random note.,你被抢走了一个随机音符 -EVENT_EVENT1_OUTCOME2,You got robbed of a random relic.,你被抢走了一件随机遗物 -EVENT_EVENT1_OUTCOME3,You got robbed of half your gold.,你被抢走了一半金币 +EVENT_EVENT1_OUTCOME1,You got robbed of a random note. ({0}),你被抢走了一个随机音符 ({0}) +EVENT_EVENT1_OUTCOME2,You got robbed of a random relic.({0}),你被抢走了一件随机遗物 ({0}) +EVENT_EVENT1_OUTCOME3,You got robbed of half your gold. ({0}),你被抢走了一半金币 ({0}) EVENT_EVENT2_DESC,There is a wheel with different outcomes.,这里有一个转盘,结果各不相同。 EVENT_EVENT2_OPTION1,Spin the wheel,转动转盘 EVENT_EVENT2_OPTION2,Ignore the cool wheel,忽略这个酷炫的转盘 EVENT_EVENT2_OUTCOME1,You decided not to spin the wheel.,你决定不转动转盘。 -EVENT_EVENT2_OUTCOME2,You lost half your money.,你损失了一半的金币。 -EVENT_EVENT2_OUTCOME3,You took some damage.,你受到了一些伤害。 -EVENT_EVENT2_OUTCOME4,You won a lot of money!,你赢得了很多金币! -EVENT_EVENT2_OUTCOME5,You gained a random note!,你获得了一个随机音符! -EVENT_EVENT2_OUTCOME6,You gained a random relic!,你获得了一件随机遗物! -EVENT_EVENT2_OUTCOME7,You gained some health!,你恢复了一些生命值! +EVENT_EVENT2_OUTCOME2,You lost half your money. ({0}),你损失了一半的金币。({0}) +EVENT_EVENT2_OUTCOME3,You took some damage. (10),你受到了一些伤害。(10) +EVENT_EVENT2_OUTCOME4,You won a lot of money! (50),你赢得了很多金币!(50) +EVENT_EVENT2_OUTCOME5,You gained a random note! ({0}),你获得了一个随机音符!({0}) +EVENT_EVENT2_OUTCOME6,You gained a random relic ({0})!,你获得了一件随机遗物!({0}) +EVENT_EVENT2_OUTCOME7,You gained some health! (20),你恢复了一些生命值!(20) EVENT_EVENT3_DESC,There is a field medic on the side of the road.,路边有一名战地医生。 EVENT_EVENT3_OPTION1,Receive a bit of healing,接受一些治疗 EVENT_EVENT3_OPTION2,Increase bar charge rate.,提高能量条充能速度 EVENT_EVENT3_OPTION3,Purchase 2 heal notes (30g),购买2个治疗音符 (30硬币) EVENT_EVENT3_OUTCOME1,The medic patched you up.\nYou restored 10 Health.,医生为你包扎了伤口。\n你恢复了10点生命值。 EVENT_EVENT3_OUTCOME2,The medic gave you a shot of adrenaline.\nFreestyle bar fills 8% faster!,医生给你注射了一针肾上腺素。\n风格条充能速度提升8%! -EVENT_EVENT3_OUTCOME3,The medic sold you some healing supplies.\nAdded 2 heal notes to your inventory.,医生卖给你一些治疗用品。\n你的背包中增加了2个治疗音符。 \ No newline at end of file +EVENT_EVENT3_OUTCOME3,The medic sold you some healing supplies.\nAdded 2 heal notes to your inventory.,医生卖给你一些治疗用品。\n你的背包中增加了2个治疗音符。 +CUSTOM_DIFFICULTY,Difficulty: ,困难: +CUSTOM_SONG,Song: ,歌曲: +CUSTOM_BPM,BPM: ,BPM: +CUSTOM_LOOPS,Number of Loops: , 循环次数: +CUSTOM_SONG_SELECT,Custom Song,自定义歌曲 +CUSTOM_SONG_NOT_FOUND,Could not find song file!,无法找到歌曲文件! +CUSTOM_SONTEM_NOT_FOUND,Could not find .sontem file!,无法找到 .sontem 文件! +CUSTOM_NO_CHART_PATH,There was no chart file path!,未提供谱面文件路径! +CUSTOM_CHART_NOT_FOUND,Could not find chart files at path!,无法在指定路径下找到谱面文件! +CUSTOM_COULD_NOT_READ,Invalid/broken sontem file!,无效或损坏的 .sontem 文件! +CUSTOM_RESULTS,Results,自定义歌曲结算 +CUSTOM_PLAYER_HP,HP Remaining: ,剩余HP: +CUSTOM_ENEMY_HP,Enemy HP Remaining: ,敌人剩余HP: +CUSTOM_NOTES_PLACED,Notes Placed: ,已放置音符: +CUSTOM_PERFECTS,Perfect Hits: ,Perfect 命中: +CUSTOM_MISSES,Missed Notes: ,失误音符: +CUSTOM_LOOPS_TAKEN,Loops Taken: ,循环次数: +CREDITS,Credits,制作人员 +CREDITS_LEAD,Producer and Lead Programmer,制作人与主程序员 +CREDITS_DESIGN,Scenario Designer and Assistant Programmer,剧情设计师与助理程序员 +CREDITS_TOOLS,Tools Lead,工具主管 +CREDITS_ART,Lead Artist,主美术 +CREDITS_PROGRAMMING,Assistant Programmer,助理程序员 +CREDITS_MUSIC,Music,音乐 +CREDITS_ADDITIONAL_ART,Art,额外美术 +CREDITS_ADDITIONAL_HELP,Additional Help,额外协助 +CREDITS_OTHER_PLAYTESTERS,All our other playtesters,以及所有其他测试玩家 +CREDITS_SPECIAL_THANKS,Special Thanks,特别鸣谢 +CREDITS_THANKS_PLAYERS,And to you the player!,以及屏幕前的你! \ No newline at end of file diff --git a/README.md b/README.md index b7f77ed8..7f252ba1 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,10 @@ **Midnight Riff** is a rhythm-rougelike game currently in development as a senior capstone project at the University of California, Santa Cruz. -We now have a Steam page! -[**Check us out here**](https://store.steampowered.com/app/3647600/Midnight_Riff/) +[**Steam Page**](https://store.steampowered.com/app/3647600/Midnight_Riff/) +[**Discord**](https://discord.gg/JS3vRU89JZ) +[**Youtube**](https://www.youtube.com/@ProjectFunkEngine) +[**Bluesky**](https://bsky.app/profile/projectfunkengine.bsky.social) --- @@ -14,43 +16,46 @@ We now have a Steam page! - Connor Lowe - Combat Designer - Thomas Wessel - Tools / Engine Lead - Raul Mojarro - Programming Support -- Michael Quinn - Design Support ### Artists - **Evelyn Fu** - Art Lead - Ares Atlas - Emily Wen -## Composer -- Sam Meyer - --- ## Attributions ### Music - **Title Screen**: [Crystal Cave – Cynicmusic](https://opengameart.org/content/crystal-cave-song18) -- **Tutorial Song**: [Mute bass 002 – josefpres](https://freesound.org/people/josefpres/sounds/792389/) +- **Chest Background**: [Spooky Forest - Sam Meyer](https://soundcloud.com/lionsatemysanity) +- **Event Background**: [Paint the Town Neon Red - Sam Meyer](https://soundcloud.com/lionsatemysanity) +- **Boss Blood Song**: [gameMusic – Magntron](https://freesound.org/people/Magntron/sounds/335571/) - **Parasifly Song**: [Piano loops 181 – josefpres](https://freesound.org/people/josefpres/sounds/789998/) -- **Squirkel Song:** [Bass Stories](https://pixabay.com/music/happy-childrens-tunes-bass-stories-15656/) -- **Weaver Song:** [Jungle-ish beat for video games](https://pixabay.com/music/video-games-jungle-ish-beat-for-video-games-314073/) - **GWS Song**: [Dark loops 220 – josefpres](https://freesound.org/people/josefpres/sounds/620230/) -- **Elite Mushroom Song:** [Mysterious Ambience](https://opengameart.org/content/mysterious-ambience-song21) -- **Boss Blood Song**: [gameMusic – Magntron](https://freesound.org/people/Magntron/sounds/335571/) -- **Shape Dudes Song:** [Data - Karl Casey](https://karlcasey.bandcamp.com/track/data) -- **Gobbler Song:** [Punk - Mere Notilde](https://notilde.bandcamp.com/track/punk) -- **BoomFox Song:** [We're Finally Landing - HOME](https://soundcloud.com/home-2001/home-before-the-night-01-were) +- **Tutorial Song**: [Mute bass 002 – josefpres](https://freesound.org/people/josefpres/sounds/792389/) +- **Effigy Song**: [District Four - Kevin MacLeod](https://incompetech.com/) +  Licensed under Creative Commons: By Attribution 4.0 License +  [http://creativecommons.org/licenses/by/4.0/](http://creativecommons.org/licenses/by/4.0/) - **Mafioso Turtle Song**: [Echolane](https://echoln.bandcamp.com/) +- **BoomFox Song:** [We're Finally Landing - HOME](https://soundcloud.com/home-2001/home-before-the-night-01-were) +- **Gobbler Song:** [Punk - Mere Notilde](https://notilde.bandcamp.com/track/punk) +- **Holograeme Song**: [There It Is - Kevin MacLeod](https://incompetech.com/) +  Licensed under Creative Commons: By Attribution 4.0 License +  [http://creativecommons.org/licenses/by/4.0/](http://creativecommons.org/licenses/by/4.0/) +- **Shape Dudes Song:** [Data - Karl Casey](https://karlcasey.bandcamp.com/track/data) +- **Weaver Song:** [Jungle-ish beat for video games - IHateTuesdays](https://pixabay.com/music/video-games-jungle-ish-beat-for-video-games-314073/) +- **Squirkel Song:** [Bass Stories - Pixabay](https://pixabay.com/music/happy-childrens-tunes-bass-stories-15656/) +- **Elite Mushroom Song:** [Mysterious Ambience - Cynicmusic](https://opengameart.org/content/mysterious-ambience-song21) - **Keythulu Song:** [Resonance - HOME](https://open.spotify.com/track/1TuopWDIuDi1553081zvuU) -- **LWS Song**: "Frost Waltz" Kevin MacLeod ([incompetech.com](https://incompetech.com/)) - Licensed under Creative Commons: By Attribution 4.0 License - [http://creativecommons.org/licenses/by/4.0/](http://creativecommons.org/licenses/by/4.0/) -- **Holograeme Song**: "There It Is" Kevin MacLeod ([incompetech.com](https://incompetech.com/)) -Licensed under Creative Commons: By Attribution 4.0 License -[http://creativecommons.org/licenses/by/4.0/](http://creativecommons.org/licenses/by/4.0/) -- **Effigy Song**: "District Four" Kevin MacLeod ([incompetech.com](https://incompetech.com/)) - Licensed under Creative Commons: By Attribution 4.0 License - [http://creativecommons.org/licenses/by/4.0/](http://creativecommons.org/licenses/by/4.0/) +- **LWS Song**: [Frost Waltz - Kevin Macleod](https://incompetech.com/) +  Licensed under Creative Commons: By Attribution 4.0 License +  [http://creativecommons.org/licenses/by/4.0/](http://creativecommons.org/licenses/by/4.0/) +- **Astrorat Song** [Ether Disco - Kevin MacLeod](https://incompetech.com/) +  Licensed under Creative Commons: By Attribution 4.0 License +  [http://creativecommons.org/licenses/by/4.0/](http://creativecommons.org/licenses/by/4.0/) +- **Catgirl Song** [Jammin' Forest - Sam Meyer](https://soundcloud.com/lionsatemysanity) + ### Images - **Input Buttons**: [inputKeys – Nicolae (Xelu) Berbece](https://thoseawesomeguys.com/prompts/) diff --git a/Scenes/3DWizard/3DWizard.tscn b/Scenes/3DWizard/3DWizard.tscn new file mode 100644 index 00000000..60ae9079 --- /dev/null +++ b/Scenes/3DWizard/3DWizard.tscn @@ -0,0 +1,57 @@ +[gd_scene load_steps=8 format=3 uid="uid://dyd2nc2sgt0qw"] + +[ext_resource type="Script" uid="uid://b07ivt3coc3lm" path="res://Scenes/3DWizard/DimensionalWizard.cs" id="1_7ax4h"] +[ext_resource type="PackedScene" uid="uid://dfevfib11kou1" path="res://Scenes/ChartViewport/ChartViewport.tscn" id="1_7h5n6"] +[ext_resource type="Shader" uid="uid://dp36iuuy414k1" path="res://SharedAssets/StarryNight.gdshader" id="2_xxbq6"] + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_xxbq6"] +shader = ExtResource("2_xxbq6") +shader_parameter/bg_top_color = Vector4(0.18, 0.08, 0.12, 0) +shader_parameter/bg_bottom_color = Vector4(0.028, 0.008, 0.184, 0) +shader_parameter/gradient_ratio = 1.0 +shader_parameter/time_scale = 1.0 + +[sub_resource type="ViewportTexture" id="ViewportTexture_xxbq6"] +viewport_path = NodePath("SubViewport") + +[sub_resource type="ViewportTexture" id="ViewportTexture_7ax4h"] +viewport_path = NodePath("BG") + +[sub_resource type="Environment" id="Environment_7h5n6"] +ambient_light_source = 1 +reflected_light_source = 1 + +[node name="3DWizard" type="Node3D" node_paths=PackedStringArray("CM")] +script = ExtResource("1_7ax4h") +CM = NodePath("SubViewport/VPContainer") + +[node name="BG" type="SubViewport" parent="."] +size = Vector2i(1200, 500) + +[node name="StarShader" type="ColorRect" parent="BG"] +z_index = -1 +material = SubResource("ShaderMaterial_xxbq6") +offset_right = 1200.0 +offset_bottom = 500.0 +color = Color(0, 0, 0, 1) + +[node name="SubViewport" type="SubViewport" parent="."] +transparent_bg = true +size = Vector2i(680, 940) + +[node name="VPContainer" parent="SubViewport" instance=ExtResource("1_7h5n6")] +offset_top = 380.0 +offset_bottom = 560.0 + +[node name="Sprite3D" type="Sprite3D" parent="."] +transform = Transform3D(-4.37114e-08, -1, 0, 0.617036, -2.69715e-08, 0.786935, -0.786935, 3.4398e-08, 0.617036, 0, 0, 0.138215) +texture = SubResource("ViewportTexture_xxbq6") + +[node name="BGSprite" type="Sprite3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1.581, -1.032) +texture = SubResource("ViewportTexture_7ax4h") + +[node name="Camera3D" type="Camera3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.999729, -0.023298, 0, 0.023298, 0.999729, 0, -1.55715, 3.51069) +environment = SubResource("Environment_7h5n6") +fov = 53.5 diff --git a/Scenes/3DWizard/DimensionalWizard.cs b/Scenes/3DWizard/DimensionalWizard.cs new file mode 100644 index 00000000..8c1de5e4 --- /dev/null +++ b/Scenes/3DWizard/DimensionalWizard.cs @@ -0,0 +1,8 @@ +using System; +using Godot; + +public partial class DimensionalWizard : Node3D +{ + [Export] + public ChartManager CM; +} diff --git a/Scenes/3DWizard/DimensionalWizard.cs.uid b/Scenes/3DWizard/DimensionalWizard.cs.uid new file mode 100644 index 00000000..090d7a10 --- /dev/null +++ b/Scenes/3DWizard/DimensionalWizard.cs.uid @@ -0,0 +1 @@ +uid://b07ivt3coc3lm diff --git a/Scenes/BattleDirector/Assets/NoteQueue_Frame.png b/Scenes/BattleDirector/Assets/NoteQueue_Frame.png index 8ce76dec..25ae06b2 100644 Binary files a/Scenes/BattleDirector/Assets/NoteQueue_Frame.png and b/Scenes/BattleDirector/Assets/NoteQueue_Frame.png differ diff --git a/Scenes/BattleDirector/BattleScene.tscn b/Scenes/BattleDirector/BattleScene.tscn index c135a47e..2e60464c 100644 --- a/Scenes/BattleDirector/BattleScene.tscn +++ b/Scenes/BattleDirector/BattleScene.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=12 format=3 uid="uid://b0mrgr7h0ty1y"] +[gd_scene load_steps=13 format=3 uid="uid://b0mrgr7h0ty1y"] [ext_resource type="Script" uid="uid://bttu0wmy2fp64" path="res://Scenes/BattleDirector/Scripts/BattleDirector.cs" id="1_jmdo1"] [ext_resource type="Script" uid="uid://pl57giqyhckb" path="res://Scenes/UI/Scripts/MenuModule.cs" id="2_ka0ws"] [ext_resource type="Script" uid="uid://tg14hkh1n7iv" path="res://Scenes/BattleDirector/Scripts/Conductor.cs" id="3_elcaj"] [ext_resource type="PackedScene" uid="uid://duhiilcv4tat3" path="res://Scenes/BattleDirector/NotePlacementBar.tscn" id="4_qk7om"] -[ext_resource type="PackedScene" uid="uid://dfevfib11kou1" path="res://Scenes/ChartViewport/ChartViewport.tscn" id="5_r2xh0"] +[ext_resource type="PackedScene" uid="uid://dyd2nc2sgt0qw" path="res://Scenes/3DWizard/3DWizard.tscn" id="5_e25q1"] +[ext_resource type="PackedScene" uid="uid://dfevfib11kou1" path="res://Scenes/ChartViewport/ChartViewport.tscn" id="5_gbbxr"] [ext_resource type="Texture2D" uid="uid://qhwve7fik4do" path="res://SharedAssets/BackGround_Full.png" id="6_0jtpx"] [ext_resource type="Script" uid="uid://cp6t6haqyef7o" path="res://Scenes/AreaBasedBackground.cs" id="7_6k2qj"] [ext_resource type="Texture2D" uid="uid://dbjotl0v1ymia" path="res://SharedAssets/BattleFrame1.png" id="7_klvil"] @@ -19,13 +20,14 @@ gradient = SubResource("Gradient_8uy3a") fill_from = Vector2(1, 0) fill_to = Vector2(0.738532, 1) -[node name="ProtoBattleDirector" type="Node2D" node_paths=PackedStringArray("PuppetMarkers", "_countdownLabel", "CD", "CM", "NPB", "Audio", "FocusedButton")] +[node name="ProtoBattleDirector" type="Node2D" node_paths=PackedStringArray("PuppetMarkers", "_countdownLabel", "CD", "CM", "DW", "NPB", "Audio", "FocusedButton")] process_mode = 1 script = ExtResource("1_jmdo1") PuppetMarkers = [NodePath("PlayerMarker"), NodePath("Enemy1Marker"), NodePath("Enemy2Marker"), NodePath("Enemy3Marker")] _countdownLabel = NodePath("CountInControl/Countdown") CD = NodePath("Conductor") -CM = NodePath("SubViewport") +CM = NodePath("VPContainer") +DW = NodePath("3D/SubViewport/3DWizard") NPB = NodePath("NotePlacementBar") Audio = NodePath("AudioStreamPlayer") FocusedButton = NodePath("StartButton") @@ -37,9 +39,8 @@ metadata/_edit_lock_ = true script = ExtResource("2_ka0ws") CurSceneNode = NodePath("..") -[node name="Conductor" type="Node" parent="." node_paths=PackedStringArray("CM")] +[node name="Conductor" type="Node" parent="."] script = ExtResource("3_elcaj") -CM = NodePath("../SubViewport") [node name="PlayerMarker" type="Marker2D" parent="."] position = Vector2(158, 125) @@ -64,7 +65,21 @@ offset_right = 81.0 offset_bottom = 175.0 texture = SubResource("GradientTexture2D_bajwn") -[node name="SubViewport" parent="." instance=ExtResource("5_r2xh0")] +[node name="3D" type="SubViewportContainer" parent="."] +offset_left = 80.0 +offset_top = 180.0 +offset_right = 560.0 +offset_bottom = 360.0 + +[node name="SubViewport" type="SubViewport" parent="3D"] +handle_input_locally = false +size = Vector2i(480, 180) +render_target_update_mode = 4 + +[node name="3DWizard" parent="3D/SubViewport" instance=ExtResource("5_e25q1")] +visible = false + +[node name="VPContainer" parent="." instance=ExtResource("5_gbbxr")] offset_left = 80.0 offset_top = 180.0 offset_right = 560.0 diff --git a/Scenes/BattleDirector/NotePlacementBar.tscn b/Scenes/BattleDirector/NotePlacementBar.tscn index 1fc0ddd2..54d676b3 100644 --- a/Scenes/BattleDirector/NotePlacementBar.tscn +++ b/Scenes/BattleDirector/NotePlacementBar.tscn @@ -1,10 +1,9 @@ -[gd_scene load_steps=15 format=3 uid="uid://duhiilcv4tat3"] +[gd_scene load_steps=14 format=3 uid="uid://duhiilcv4tat3"] [ext_resource type="Script" uid="uid://gj666xe815py" path="res://Scenes/BattleDirector/Scripts/NotePlacementBar.cs" id="1_456es"] [ext_resource type="Texture2D" uid="uid://cnyr5usjdv0ni" path="res://Scenes/BattleDirector/Assets/NoteQueue_Frame.png" id="2_3tw16"] [ext_resource type="Texture2D" uid="uid://gcst7q2acsqm" path="res://Scenes/BattleDirector/Assets/PlacementBar_Under.png" id="2_5a8x5"] [ext_resource type="Shader" uid="uid://difiiwiddwutp" path="res://Scenes/BattleDirector/Assets/wave.gdshader" id="2_kb2co"] -[ext_resource type="Texture2D" uid="uid://c3chrsxrulapd" path="res://Classes/Notes/Assets/Note_PlayerBasic.png" id="3_6ylx6"] [ext_resource type="Texture2D" uid="uid://bi4tbiovlm2g1" path="res://Scenes/BattleDirector/Assets/PlacementBar_Over.png" id="3_kb2co"] [ext_resource type="Texture2D" uid="uid://caw70lr5e1yiq" path="res://Classes/Notes/Assets/Note_PlayerDouble.png" id="4_6w8ha"] @@ -127,16 +126,13 @@ scale_amount_max = 2.0 color = Color(1, 1, 0.0745098, 1) [node name="NoteQueueSprite" type="Sprite2D" parent="."] -position = Vector2(23, 66) -rotation = -1.5708 +position = Vector2(23, 69) texture = ExtResource("2_3tw16") -[node name="NextNote" type="Sprite2D" parent="NoteQueueSprite"] -position = Vector2(-16, 0) -rotation = 1.5708 -texture = ExtResource("3_6ylx6") - [node name="CurrentNote" type="Sprite2D" parent="NoteQueueSprite"] -position = Vector2(16, 0) -rotation = 1.5708 +position = Vector2(1, -19) +texture = ExtResource("4_6w8ha") + +[node name="NextNote" type="Sprite2D" parent="NoteQueueSprite"] +position = Vector2(1, 14) texture = ExtResource("4_6w8ha") diff --git a/Scenes/BattleDirector/Scripts/BattleDirector.cs b/Scenes/BattleDirector/Scripts/BattleDirector.cs index dbede1fe..e8210735 100644 --- a/Scenes/BattleDirector/Scripts/BattleDirector.cs +++ b/Scenes/BattleDirector/Scripts/BattleDirector.cs @@ -25,6 +25,9 @@ public partial class BattleDirector : Node2D [Export] private ChartManager CM; + [Export] + private DimensionalWizard DW; + [Export] public NotePlacementBar NPB; @@ -40,30 +43,33 @@ public partial class BattleDirector : Node2D public static bool AutoPlay = false; public static bool PlayerDisabled = false; + public static bool VerticalScroll = false; + public static float VerticalScrollRotation = 90f; #endregion #region Initialization - Timer _countdownTimer; //TODO: Make in time with bpm + Tween _countdownTween; //TODO: Make in time with bpm + int _countdown; public bool HasPlayed; //TODO: Disable input during countdown public void StartCountdown() { CM.ArrowTween?.Pause(); Audio.SetStreamPaused(true); - if (_countdownTimer == null) - { - _countdownTimer = new Timer(); - AddChild(_countdownTimer); - _countdownTimer.Timeout += SyncStartWithMix; - } - _countdownTimer.Start(3); + _countdownTween?.Kill(); + _countdownTween = CreateTween(); + _countdownTween.Finished += SyncStartWithMix; + + _countdown = 4; + _countdownTween.TweenProperty(this, nameof(_countdown), 0, 5 / (TimeKeeper.Bpm / 60)); _countdownLabel.Visible = true; + _countdownTween.Play(); } private void SyncStartWithMix() { - _countdownTimer.Stop(); + _countdownTween.Stop(); var timer = GetTree().CreateTimer(AudioServer.GetTimeToNextMix()); timer.Timeout += BeginPlayback; } @@ -81,25 +87,51 @@ private void BeginPlayback() CM.BeginTweens(); Audio.Play(); } + if (Player.GetCurrentHealth() <= 0 && !_battleEnding) + CheckBattleStatus(Player); HasPlayed = true; _initializedPlaying = true; } + public override void _EnterTree() + { + GD.Load(NoteQueueParticlesFactory.LoadPath); + } + public override void _Ready() { - SongData curSong = StageProducer.Config.CurSong.SongData; - Audio.SetStream(GD.Load(StageProducer.Config.CurSong.AudioLocation)); - if (curSong.SongLength <= 0) - { - curSong.SongLength = Audio.Stream.GetLength(); - } + NoteChart curChart = StageProducer.Config.CurSong.Chart; - TimeKeeper.InitVals(curSong.Bpm); + Audio.SetStream( + StageProducer.Config.RoomType == Stages.Custom + ? AudioStreamOggVorbis.LoadFromFile( + CustomSelection.UserSongDir + curChart.SongMapLocation + ) + : GD.Load("Audio/" + curChart.SongMapLocation) + ); + + double songLen = Audio.Stream.GetLength(); + + TimeKeeper.InitVals(curChart.Bpm); Harbinger.Init(this); InitPlayer(); InitEnemies(); InitScoringGuide(); - CD.Initialize(curSong, _enemies); + CM.Visible = !VerticalScroll; + DW.Visible = VerticalScroll; + if (VerticalScroll) + { + CM.ProcessMode = ProcessModeEnum.Disabled; + CM = DW.CM; + DW.ProcessMode = ProcessModeEnum.Inherit; + } + else + { + CM.ProcessMode = ProcessModeEnum.Inherit; + DW.ProcessMode = ProcessModeEnum.Disabled; + } + CD.Initialize(CM, curChart, songLen, _enemies); + CD.NoteInputEvent += OnTimedInput; FocusedButton.GrabFocus(); @@ -111,6 +143,11 @@ public override void _Ready() }; Harbinger.Instance.InvokeBattleStarted(); + if (StageProducer.Config.RoomType != Stages.Custom) + return; + _customSongResultsScene = GD.Load(CustomScore.LoadPath) + .Instantiate(); + _customSongResultsScene.ListenToDirector(); } public ScoringScreen.ScoreGuide BattleScore; @@ -170,8 +207,10 @@ public override void _Process(double delta) { if (FocusedButton != null && GetViewport().GuiGetFocusOwner() == null) FocusedButton.GrabFocus(); - if (_countdownTimer != null) - _countdownLabel.Text = ((int)_countdownTimer.TimeLeft + 1).ToString(); + if (_countdownTween != null) + _countdownLabel.Text = (_countdown + 1).ToString(); + if (IsBattleWon() || Player.GetCurrentHealth() <= 0) + return; TimeKeeper.CurrentTime = Audio.GetPlaybackPosition(); Beat realBeat = TimeKeeper.GetBeatFromTime(Audio.GetPlaybackPosition()); UpdateBeat(realBeat); @@ -199,7 +238,7 @@ public override void _UnhandledInput(InputEvent @event) { if (@event is InputEventKey eventKey && eventKey.Pressed && !eventKey.Echo) { - return; + //return; if (eventKey.Keycode == Key.Key0) { DebugKillEnemy(); @@ -217,7 +256,7 @@ public bool PlayerAddNote(ArrowType type, Beat beat) if (!NPB.CanPlaceNote()) return false; - Note noteToPlace = NPB.NotePlaced(); + Note noteToPlace = NPB.NotePlaced().Clone(); noteToPlace.OnHit(this, Timing.Okay); CD.AddPlayerNote(noteToPlace.SetOwner(Player), type, beat); @@ -295,10 +334,13 @@ private Timing CheckTiming(double beatDif) #endregion #region Battle End + private bool _battleEnding = false; + private void CheckBattleStatus(PuppetTemplate puppet) //Called when a puppet dies { var tween = CreateTween(); tween.TweenProperty(puppet, "modulate:a", 0, 2f); + _battleEnding = true; if (puppet == Player) { CM.ProcessMode = ProcessModeEnum.Disabled; @@ -322,6 +364,12 @@ private bool IsBattleWon() private void OnBattleWon() { + if (StageProducer.Config.RoomType == Stages.Custom) + { + _customSongResultsScene.ShowResults(this, (float)_enemies[0].GetCurrentHealth() / 500); + _customSongResultsScene.Finished += TransitionOutOfCustom; + return; + } Harbinger.Instance.InvokeBattleEnded(); CleanUpRelics(); BattleScore.SetEndHp(Player.GetCurrentHealth()); @@ -334,6 +382,12 @@ private void OnBattleWon() private void OnBattleLost() { + if (StageProducer.Config.RoomType == Stages.Custom) + { + _customSongResultsScene.ShowResults(this, (float)_enemies[0].GetCurrentHealth() / 500); + _customSongResultsScene.Finished += TransitionOutOfCustom; + return; + } Audio.StreamPaused = true; SaveSystem.ClearSave(); AddChild(GD.Load(EndScreen.LoadPath).Instantiate()); @@ -352,6 +406,14 @@ private void ShowRewardSelection(int amount) rewardSelect.Selected += TransitionOutOfBattle; } + private CustomScore _customSongResultsScene; + + private void TransitionOutOfCustom() + { + BgAudioPlayer.LiveInstance.PlayLevelMusic(); + StageProducer.LiveInstance.TransitionStage(Stages.Title); + } + private void TransitionOutOfBattle() { StageProducer.LiveInstance.TransitionStage(Stages.Map); @@ -377,15 +439,6 @@ public void DealDamage(Targetting targetting, int damage, PuppetTemplate source) } } - /*public void ReduceMeter(Note note, int amountLost, PuppetTemplate source) - { - PuppetTemplate[] targets = GetTargets(note.TargetType); - foreach (PuppetTemplate target in targets) - { - target. - } - }*/ - public void AddStatus(Targetting targetting, StatusEffect status, int amount = 1) { if (amount == 0) diff --git a/Scenes/BattleDirector/Scripts/Conductor.cs b/Scenes/BattleDirector/Scripts/Conductor.cs index 55f37f62..034d7acf 100644 --- a/Scenes/BattleDirector/Scripts/Conductor.cs +++ b/Scenes/BattleDirector/Scripts/Conductor.cs @@ -7,7 +7,6 @@ */ public partial class Conductor : Node { - [Export] private ChartManager CM; private MidiMaestro MM; @@ -19,15 +18,21 @@ public partial class Conductor : Node private bool _initialized; #region Initialization - public void Initialize(SongData curSong, EnemyPuppet[] enemies = null) + public void Initialize( + ChartManager cm, + NoteChart curSong, + double songLen, + EnemyPuppet[] enemies = null + ) { if (_initialized) return; - MM = new MidiMaestro(StageProducer.Config.CurSong.SongMapLocation); + CM = cm; + MM = new MidiMaestro(curSong); CM.ArrowFromInput += ReceiveNoteInput; - CM.Initialize(curSong); + CM.Initialize(curSong, songLen); //Approximately the first note offscreen _beatSpawnOffset = diff --git a/Scenes/BattleDirector/Scripts/NotePlacementBar.cs b/Scenes/BattleDirector/Scripts/NotePlacementBar.cs index ad0f7cf7..d69e5314 100644 --- a/Scenes/BattleDirector/Scripts/NotePlacementBar.cs +++ b/Scenes/BattleDirector/Scripts/NotePlacementBar.cs @@ -48,7 +48,7 @@ private double CurrentBarValue private int _currentCombo; private int MaxComboMult; - private int ComboMult => + public int ComboMult => Math.Min(_currentCombo / _notesToIncreaseCombo + 1 + _bonusMult, MaxComboMult); private int _bonusMult; private int _notesToIncreaseCombo; diff --git a/Scenes/BattleDirector/Scripts/NoteQueueParticlesFactory.cs b/Scenes/BattleDirector/Scripts/NoteQueueParticlesFactory.cs index 029f31b0..a4d81a1b 100644 --- a/Scenes/BattleDirector/Scripts/NoteQueueParticlesFactory.cs +++ b/Scenes/BattleDirector/Scripts/NoteQueueParticlesFactory.cs @@ -4,9 +4,8 @@ */ public static class NoteQueueParticlesFactory { - private static readonly PackedScene ParticlesScene = GD.Load( - "res://Scenes/BattleDirector/NotePoofParticles.tscn" - ); + public const string LoadPath = "res://Scenes/BattleDirector/NotePoofParticles.tscn"; + private static readonly PackedScene ParticlesScene = GD.Load(LoadPath); public static GpuParticles2D NoteParticles( Node parent, diff --git a/Scenes/BattleDirector/Tutorial/Toriel.cs b/Scenes/BattleDirector/Tutorial/Toriel.cs index 93ad1c14..1ab5d190 100644 --- a/Scenes/BattleDirector/Tutorial/Toriel.cs +++ b/Scenes/BattleDirector/Tutorial/Toriel.cs @@ -113,8 +113,6 @@ public void Dialogue2() { _nextButton.Pressed -= Dialogue2; _dialogueLabel.Text = Tr("TUTORIAL_DIALOGUE_2"); - _selector.Visible = true; - _selector.Position = _noteMarker.Position - _selector.Size / 2; _nextButton.Pressed += Dialogue3; } @@ -122,6 +120,7 @@ public void Dialogue3() { _nextButton.Pressed -= Dialogue3; _dialogueLabel.Text = Tr("TUTORIAL_DIALOGUE_3"); + _selector.Visible = true; _selector.Position = _inputSprites[(int)ArrowType.Down].Position - _selector.Size / 2; _nextButton.Pressed += Dialogue4; } diff --git a/Scenes/BattleDirector/Tutorial/Toriel.tscn b/Scenes/BattleDirector/Tutorial/Toriel.tscn index cfb1a582..be818e99 100644 --- a/Scenes/BattleDirector/Tutorial/Toriel.tscn +++ b/Scenes/BattleDirector/Tutorial/Toriel.tscn @@ -10,7 +10,7 @@ process_mode = 3 layer = 0 script = ExtResource("1_mf0nq") -_dialogueLabel = NodePath("Control/CenterContainer/VBoxContainer/NinePatchRect/MarginContainer/TextLabel") +_dialogueLabel = NodePath("Control/CenterContainer/VBoxContainer/MarginContainer/MarginContainer/TextLabel") _dialogueBox = NodePath("Control") _nextButton = NodePath("Control/CenterContainer/VBoxContainer/MarginContainer2/NextButton") _inputSprites = [NodePath("Up"), NodePath("Down"), NodePath("Left"), NodePath("Right")] @@ -42,7 +42,16 @@ mouse_filter = 2 [node name="VBoxContainer" type="VBoxContainer" parent="Control/CenterContainer"] layout_mode = 2 -[node name="NinePatchRect" type="NinePatchRect" parent="Control/CenterContainer/VBoxContainer"] +[node name="MarginContainer" type="MarginContainer" parent="Control/CenterContainer/VBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +mouse_filter = 2 +theme_override_constants/margin_left = 6 +theme_override_constants/margin_top = 6 +theme_override_constants/margin_right = 6 +theme_override_constants/margin_bottom = 6 + +[node name="NinePatchRect" type="NinePatchRect" parent="Control/CenterContainer/VBoxContainer/MarginContainer"] custom_minimum_size = Vector2(250, 150) layout_mode = 2 texture = ExtResource("2_3a4m1") @@ -51,26 +60,17 @@ patch_margin_top = 8 patch_margin_right = 8 patch_margin_bottom = 8 -[node name="MarginContainer" type="MarginContainer" parent="Control/CenterContainer/VBoxContainer/NinePatchRect"] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 -size_flags_vertical = 3 -mouse_filter = 2 -theme_override_constants/margin_left = 6 -theme_override_constants/margin_top = 6 -theme_override_constants/margin_right = 6 -theme_override_constants/margin_bottom = 6 +[node name="MarginContainer" type="MarginContainer" parent="Control/CenterContainer/VBoxContainer/MarginContainer"] +layout_mode = 2 +theme_override_constants/margin_left = 4 +theme_override_constants/margin_top = 4 +theme_override_constants/margin_right = 4 +theme_override_constants/margin_bottom = 4 -[node name="TextLabel" type="Label" parent="Control/CenterContainer/VBoxContainer/NinePatchRect/MarginContainer"] +[node name="TextLabel" type="Label" parent="Control/CenterContainer/VBoxContainer/MarginContainer/MarginContainer"] layout_mode = 2 size_flags_vertical = 1 -autowrap_mode = 2 -clip_text = true -text_overrun_behavior = 4 +autowrap_mode = 3 [node name="MarginContainer2" type="MarginContainer" parent="Control/CenterContainer/VBoxContainer"] process_mode = 3 @@ -112,38 +112,38 @@ position = Vector2(22, 249) position = Vector2(35, 202) [node name="BarMarker" type="Marker2D" parent="."] -position = Vector2(59, 266) +position = Vector2(59, 267) [node name="NoteMarker" type="Marker2D" parent="."] -position = Vector2(364, 294) +position = Vector2(392, 246) [node name="LoopMarker" type="Marker2D" parent="."] -position = Vector2(129, 270) +position = Vector2(320, 309) [node name="Up" type="Sprite2D" parent="."] visible = false self_modulate = Color(1, 1, 1, 0.45) -position = Vector2(129, 248) +position = Vector2(284, 313) scale = Vector2(0.5, 0.5) texture = ExtResource("4_d6o7n") [node name="Down" type="Sprite2D" parent="."] visible = false self_modulate = Color(1, 1, 1, 0.45) -position = Vector2(129, 292) +position = Vector2(357, 313) scale = Vector2(0.5, 0.5) texture = ExtResource("4_d6o7n") [node name="Left" type="Sprite2D" parent="."] visible = false self_modulate = Color(1, 1, 1, 0.45) -position = Vector2(129, 210) +position = Vector2(214, 313) scale = Vector2(0.5, 0.5) texture = ExtResource("4_d6o7n") [node name="Right" type="Sprite2D" parent="."] visible = false self_modulate = Color(1, 1, 1, 0.45) -position = Vector2(129, 330) +position = Vector2(422, 313) scale = Vector2(0.5, 0.5) texture = ExtResource("4_d6o7n") diff --git a/Scenes/ChartViewport/ChartViewport.tscn b/Scenes/ChartViewport/ChartViewport.tscn index f65b608e..573c3212 100644 --- a/Scenes/ChartViewport/ChartViewport.tscn +++ b/Scenes/ChartViewport/ChartViewport.tscn @@ -1,6 +1,7 @@ -[gd_scene load_steps=7 format=3 uid="uid://dfevfib11kou1"] +[gd_scene load_steps=8 format=3 uid="uid://dfevfib11kou1"] [ext_resource type="Script" uid="uid://btgmfxqoe2wqx" path="res://Scenes/ChartViewport/Scripts/ChartManager.cs" id="1_ruh2l"] +[ext_resource type="Texture2D" uid="uid://3kimu20ebgtu" path="res://Scenes/ChartViewport/LaneLines.png" id="2_543sd"] [ext_resource type="Texture2D" uid="uid://cp78odda2doab" path="res://Scenes/ChartViewport/LoopMarker.png" id="2_q5cjc"] [ext_resource type="Script" uid="uid://cf58ep1c2o0q2" path="res://Scenes/ChartViewport/Scripts/Loopable.cs" id="3_5u57h"] [ext_resource type="PackedScene" uid="uid://bn8txx53xlguw" path="res://Scenes/NoteManager/NoteManager.tscn" id="4_fd5fw"] @@ -29,6 +30,13 @@ render_target_update_mode = 4 position = Vector2(-50, 0) anchor_mode = 0 +[node name="LaneLines" type="TextureRect" parent="SubViewport"] +offset_left = -50.0 +offset_top = 45.0 +offset_right = 480.0 +offset_bottom = 135.0 +texture = ExtResource("2_543sd") + [node name="StarShader" type="ColorRect" parent="SubViewport"] z_index = -1 material = SubResource("ShaderMaterial_5uw0y") diff --git a/Scenes/ChartViewport/LaneLines.png b/Scenes/ChartViewport/LaneLines.png new file mode 100644 index 00000000..4d3d6bcf Binary files /dev/null and b/Scenes/ChartViewport/LaneLines.png differ diff --git a/Scenes/ChartViewport/LaneLines.png.import b/Scenes/ChartViewport/LaneLines.png.import new file mode 100644 index 00000000..e59de181 --- /dev/null +++ b/Scenes/ChartViewport/LaneLines.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://3kimu20ebgtu" +path="res://.godot/imported/LaneLines.png-fa4c66b9892f799286e4b25955ab6fae.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Scenes/ChartViewport/LaneLines.png" +dest_files=["res://.godot/imported/LaneLines.png-fa4c66b9892f799286e4b25955ab6fae.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=1 diff --git a/Scenes/ChartViewport/Scripts/ChartManager.cs b/Scenes/ChartViewport/Scripts/ChartManager.cs index 396718ec..71c96b5d 100644 --- a/Scenes/ChartViewport/Scripts/ChartManager.cs +++ b/Scenes/ChartViewport/Scripts/ChartManager.cs @@ -74,23 +74,25 @@ public override void _Process(double delta) private bool _initialized; - public void Initialize(SongData songData) + public void Initialize(NoteChart songData, double songLen) { if (_initialized) return; TimeKeeper.LoopsPerSong = songData.NumLoops; - TimeKeeper.SongLength = songData.SongLength; + TimeKeeper.SongLength = songLen; - double _loopLen = songData.SongLength / songData.NumLoops; + double loopLen = songLen / songData.NumLoops; + if (songData.SongSpeed > 0) + _chartLength = + songData.SongSpeed * loopLen * StageProducer.PlayerStats.ChartSpeedMultiplier; //99% sure chart length can never be less than (chart viewport width) * 2, //otherwise there isn't room for things to loop from off and on screen _chartLength = Math.Max( - _loopLen * Math.Ceiling(Size.X * 2 / _loopLen), + loopLen * Math.Ceiling(Size.X * 2 / loopLen), //Also minimize rounding point imprecision, improvement is qualitative - _loopLen * Math.Floor(_chartLength / _loopLen) + loopLen * Math.Floor(_chartLength / loopLen) ); - TimeKeeper.ChartWidth = _chartLength; TimeKeeper.Bpm = songData.Bpm; @@ -102,7 +104,7 @@ public void Initialize(SongData songData) public void BeginTweens() { if (ArrowTween != null) - this.ArrowTween.Kill(); + ArrowTween.Kill(); //This could be good as a function to call on something, to have many things animated to the beat. ArrowTween = CreateTween(); ArrowTween @@ -279,6 +281,11 @@ public void ComboText(Timing timed, ArrowType arrow, int currentCombo) TextParticle newText = new TextParticle(); AddChild(newText); newText.Position = IH.Arrows[(int)arrow].Node.Position - newText.Size / 2; + if (BattleDirector.VerticalScroll) + { + newText.RotationDegrees += 90f; + newText.Position += Vector2.Right * 70; + } IH.FeedbackEffect(arrow, timed); newText.Text = Tr("BATTLE_ROOM_" + timed.ToString().ToUpper()) + $" {currentCombo}"; } diff --git a/Scenes/ChestScene/ChestScene.tscn b/Scenes/ChestScene/ChestScene.tscn index bd88dc49..0a177dc4 100644 --- a/Scenes/ChestScene/ChestScene.tscn +++ b/Scenes/ChestScene/ChestScene.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=11 format=3 uid="uid://c4vmb783d3v03"] [ext_resource type="Script" uid="uid://cetn71kolbrmg" path="res://Scenes/ChestScene/ChestScene.cs" id="1_ardd2"] -[ext_resource type="AudioStream" uid="uid://be5ial13ynf3o" path="res://Audio/Song1.ogg" id="2_x78jo"] +[ext_resource type="AudioStream" uid="uid://lardvkxjnxtb" path="res://Audio/Spooky-Forest.ogg" id="2_u0wcg"] [ext_resource type="Script" uid="uid://pl57giqyhckb" path="res://Scenes/UI/Scripts/MenuModule.cs" id="3_5uvci"] [ext_resource type="Script" uid="uid://cp6t6haqyef7o" path="res://Scenes/AreaBasedBackground.cs" id="5_u0wcg"] [ext_resource type="Shader" uid="uid://dp36iuuy414k1" path="res://SharedAssets/StarryNight.gdshader" id="5_whthd"] @@ -25,7 +25,8 @@ PlayerMarker = NodePath("PlayerMarker") [node name="Audio" type="AudioStreamPlayer" parent="."] process_mode = 3 -stream = ExtResource("2_x78jo") +stream = ExtResource("2_u0wcg") +volume_db = -2.0 autoplay = true [node name="UILayer" type="CanvasLayer" parent="." node_paths=PackedStringArray("CurSceneNode")] diff --git a/Scenes/CustomSong/CustomScore.cs b/Scenes/CustomSong/CustomScore.cs new file mode 100644 index 00000000..83a1c8af --- /dev/null +++ b/Scenes/CustomSong/CustomScore.cs @@ -0,0 +1,89 @@ +using System; +using System.Globalization; +using FunkEngine; +using Godot; + +public partial class CustomScore : CanvasLayer +{ + public const string LoadPath = "res://Scenes/CustomSong/CustomScoreScreen.tscn"; + + private enum ScoringVals + { + PlayerHP = 0, + EnemyHP = 1, + NotesPlaced = 2, + Perfects = 3, + Misses = 4, + Loops = 5, + } + + private float[] score = new float[6]; + + [Export] + private Label[] _amtLabels = new Label[6]; + + [Export] + private Button _acceptButton; + + public delegate void FinishedHandler(); + public event FinishedHandler Finished; + + public void ListenToDirector() + { + BattleDirector.Harbinger.Instance.NoteHit += e => + { + if (e is not BattleDirector.Harbinger.NoteHitArgs nArgs) + return; + switch (nArgs.Timing) + { + case Timing.Perfect: + score[(int)ScoringVals.Perfects] += 1; + break; + case Timing.Miss: + score[(int)ScoringVals.Misses] += 1; + break; + } + }; + BattleDirector.Harbinger.Instance.NotePlaced += _ => + { + score[(int)ScoringVals.NotesPlaced] += 1; + }; + } + + public CustomScore ShowResults(BattleDirector battleDirector, float enemyPercent) + { + score[(int)ScoringVals.Loops] = TimeKeeper.LastBeat.Loop; + score[(int)ScoringVals.PlayerHP] = + (float)battleDirector.Player.GetCurrentHealth() + / StageProducer.PlayerStats.MaxHealth + * 100; + score[(int)ScoringVals.EnemyHP] = enemyPercent * 100; + + for (int i = 0; i < 6; i++) + { + _amtLabels[i].Text = score[i].ToString("0"); + if (i == (int)ScoringVals.PlayerHP || i == (int)ScoringVals.EnemyHP) + _amtLabels[i].Text += "%"; + } + battleDirector.AddChild(this); + battleDirector.ProcessMode = ProcessModeEnum.Disabled; + + return this; + } + + public override void _Ready() + { + _acceptButton.Pressed += FinishScoring; + } + + public override void _Process(double delta) + { + _acceptButton.GrabFocus(); + } + + private void FinishScoring() + { + Finished?.Invoke(); + QueueFree(); + } +} diff --git a/Scenes/CustomSong/CustomScore.cs.uid b/Scenes/CustomSong/CustomScore.cs.uid new file mode 100644 index 00000000..0253254f --- /dev/null +++ b/Scenes/CustomSong/CustomScore.cs.uid @@ -0,0 +1 @@ +uid://d2wb4jlf3iphf diff --git a/Scenes/CustomSong/CustomScoreScreen.tscn b/Scenes/CustomSong/CustomScoreScreen.tscn new file mode 100644 index 00000000..39602b92 --- /dev/null +++ b/Scenes/CustomSong/CustomScoreScreen.tscn @@ -0,0 +1,201 @@ +[gd_scene load_steps=6 format=3 uid="uid://de8eb06i6ftr"] + +[ext_resource type="Script" uid="uid://d2wb4jlf3iphf" path="res://Scenes/CustomSong/CustomScore.cs" id="1_qqyeb"] +[ext_resource type="Texture2D" uid="uid://ck16vyh1q68ri" path="res://Scenes/UI/Assets/UI_ForestBackground.png" id="2_f5eg8"] +[ext_resource type="Texture2D" uid="uid://8u3xvcma81d" path="res://Scenes/UI/Assets/UI_CrystalFrame.png" id="3_5fo4y"] +[ext_resource type="Texture2D" uid="uid://burj10os057fx" path="res://Scenes/UI/Assets/UI_CrystalFrameInset.png" id="4_pghd5"] +[ext_resource type="Theme" uid="uid://d37e3tpsbxwak" path="res://Scenes/UI/Assets/GeneralTheme.tres" id="6_ql2an"] + +[node name="ScoreScreen" type="CanvasLayer" node_paths=PackedStringArray("_amtLabels", "_acceptButton")] +process_mode = 3 +script = ExtResource("1_qqyeb") +_amtLabels = [NodePath("Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer/PlayerHPPercent"), NodePath("Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer2/EnemyHPPercent"), NodePath("Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer3/NotesPlacedAmt"), NodePath("Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer4/PerfectAmt"), NodePath("Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer5/MissedAmt"), NodePath("Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer6/LoopsAmt")] +_acceptButton = NodePath("Bg/WindowMargin/VBoxContainer/ButtonMargin/AcceptButton") + +[node name="Bg" type="NinePatchRect" parent="."] +self_modulate = Color(1, 1, 1, 0.75) +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("2_f5eg8") +patch_margin_left = 100 +patch_margin_top = 100 +patch_margin_right = 102 +patch_margin_bottom = 100 + +[node name="WindowMargin" type="MarginContainer" parent="Bg"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 175 +theme_override_constants/margin_top = 50 +theme_override_constants/margin_right = 175 +theme_override_constants/margin_bottom = 50 + +[node name="PanelBg" type="NinePatchRect" parent="Bg/WindowMargin"] +self_modulate = Color(1, 1, 1, 0.75) +layout_mode = 2 +texture = ExtResource("3_5fo4y") +patch_margin_left = 30 +patch_margin_top = 10 +patch_margin_right = 20 +patch_margin_bottom = 27 + +[node name="VBoxContainer" type="VBoxContainer" parent="Bg/WindowMargin"] +layout_mode = 2 + +[node name="TitleContainer" type="MarginContainer" parent="Bg/WindowMargin/VBoxContainer"] +layout_mode = 2 + +[node name="TopPanelBg" type="NinePatchRect" parent="Bg/WindowMargin/VBoxContainer/TitleContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +size_flags_stretch_ratio = 0.25 +texture = ExtResource("3_5fo4y") +patch_margin_left = 30 +patch_margin_top = 10 +patch_margin_right = 20 +patch_margin_bottom = 27 + +[node name="Title" type="CenterContainer" parent="Bg/WindowMargin/VBoxContainer/TitleContainer"] +layout_mode = 2 + +[node name="TitleText" type="RichTextLabel" parent="Bg/WindowMargin/VBoxContainer/TitleContainer/Title"] +custom_minimum_size = Vector2(400, 47) +layout_mode = 2 +theme_override_font_sizes/normal_font_size = 32 +bbcode_enabled = true +text = "CUSTOM_RESULTS" +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="MarginContainer" type="MarginContainer" parent="Bg/WindowMargin/VBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_constants/margin_left = 6 +theme_override_constants/margin_top = 0 +theme_override_constants/margin_right = 6 +theme_override_constants/margin_bottom = 4 + +[node name="BottomPanelBg" type="NinePatchRect" parent="Bg/WindowMargin/VBoxContainer/MarginContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 +texture = ExtResource("4_pghd5") +patch_margin_left = 30 +patch_margin_top = 10 +patch_margin_right = 20 +patch_margin_bottom = 27 + +[node name="HBoxContainer" type="HBoxContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="LabelMargin" type="MarginContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/margin_left = 8 +theme_override_constants/margin_top = 8 +theme_override_constants/margin_right = 8 +theme_override_constants/margin_bottom = 8 + +[node name="LabelVbox" type="VBoxContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin"] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/separation = 11 +alignment = 1 + +[node name="HBoxContainer" type="HBoxContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox"] +layout_mode = 2 + +[node name="PlayerHP" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer"] +layout_mode = 2 +text = "CUSTOM_PLAYER_HP" + +[node name="PlayerHPPercent" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 10 +text = "999" +horizontal_alignment = 2 + +[node name="HBoxContainer2" type="HBoxContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox"] +layout_mode = 2 + +[node name="EnemyHP" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer2"] +layout_mode = 2 +text = "CUSTOM_ENEMY_HP" + +[node name="EnemyHPPercent" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer2"] +layout_mode = 2 +size_flags_horizontal = 10 +text = "999" +horizontal_alignment = 2 + +[node name="HBoxContainer3" type="HBoxContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox"] +layout_mode = 2 + +[node name="NotesPlaced" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer3"] +layout_mode = 2 +text = "CUSTOM_NOTES_PLACED" + +[node name="NotesPlacedAmt" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer3"] +layout_mode = 2 +size_flags_horizontal = 10 +text = "999" +horizontal_alignment = 2 + +[node name="HBoxContainer4" type="HBoxContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox"] +layout_mode = 2 + +[node name="Perfects" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer4"] +layout_mode = 2 +text = "CUSTOM_PERFECTS" + +[node name="PerfectAmt" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer4"] +layout_mode = 2 +size_flags_horizontal = 10 +text = "999" +horizontal_alignment = 2 + +[node name="HBoxContainer5" type="HBoxContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox"] +layout_mode = 2 + +[node name="Misses" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer5"] +layout_mode = 2 +text = "CUSTOM_MISSES" + +[node name="MissedAmt" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer5"] +layout_mode = 2 +size_flags_horizontal = 10 +text = "999" +horizontal_alignment = 2 + +[node name="HBoxContainer6" type="HBoxContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox"] +layout_mode = 2 + +[node name="LoopsTake" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer6"] +layout_mode = 2 +text = "CUSTOM_LOOPS_TAKEN" + +[node name="LoopsAmt" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer6"] +layout_mode = 2 +size_flags_horizontal = 10 +text = "999" +horizontal_alignment = 2 + +[node name="ButtonMargin" type="MarginContainer" parent="Bg/WindowMargin/VBoxContainer"] +layout_mode = 2 +theme_override_constants/margin_top = -3 +theme_override_constants/margin_bottom = 9 + +[node name="AcceptButton" type="Button" parent="Bg/WindowMargin/VBoxContainer/ButtonMargin"] +layout_mode = 2 +size_flags_horizontal = 6 +theme = ExtResource("6_ql2an") +text = "ESCAPE_MENU_TITLE" diff --git a/Scenes/CustomSong/CustomSelection.tscn b/Scenes/CustomSong/CustomSelection.tscn new file mode 100644 index 00000000..270bb5b2 --- /dev/null +++ b/Scenes/CustomSong/CustomSelection.tscn @@ -0,0 +1,134 @@ +[gd_scene load_steps=5 format=3 uid="uid://4afpdcupy6x"] + +[ext_resource type="Script" uid="uid://cvt1bucvy5o2b" path="res://Scenes/CustomSong/Scripts/CustomSelection.cs" id="1_2bets"] +[ext_resource type="Texture2D" uid="uid://ck16vyh1q68ri" path="res://Scenes/UI/Assets/UI_ForestBackground.png" id="1_2j36x"] +[ext_resource type="Texture2D" uid="uid://djd6iw2g84bba" path="res://Scenes/UI/Assets/UI_CenterFrame.png" id="2_2bets"] +[ext_resource type="Theme" uid="uid://d37e3tpsbxwak" path="res://Scenes/UI/Assets/GeneralTheme.tres" id="4_fvo50"] + +[node name="CustomSongMenu" type="CanvasLayer" node_paths=PackedStringArray("_returnButton", "_songList", "_songDescription", "_focused")] +process_mode = 3 +script = ExtResource("1_2bets") +_returnButton = NodePath("Control/ReturnButton") +_songList = NodePath("Control/Background/MarginContainer/HBoxContainer/MarginContainer2/ScrollContainer/Songs") +_songDescription = NodePath("Control/Background/MarginContainer/HBoxContainer/MarginContainer/OptionsBackground/MarginContainer/SongDetails") +_focused = NodePath("Control/ReturnButton") + +[node name="Control" type="Control" parent="."] +layout_mode = 3 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="Background" type="NinePatchRect" parent="Control"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +texture = ExtResource("1_2j36x") +patch_margin_left = 105 +patch_margin_top = 100 +patch_margin_right = 105 +patch_margin_bottom = 100 + +[node name="MarginContainer" type="MarginContainer" parent="Control/Background"] +layout_mode = 1 +anchors_preset = 8 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +offset_left = -255.0 +offset_top = -155.0 +offset_right = 255.0 +offset_bottom = 105.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 5 +theme_override_constants/margin_top = 5 +theme_override_constants/margin_right = 5 +theme_override_constants/margin_bottom = 5 + +[node name="OptionsBackground" type="NinePatchRect" parent="Control/Background/MarginContainer"] +layout_mode = 2 +texture = ExtResource("2_2bets") +patch_margin_left = 5 +patch_margin_top = 5 +patch_margin_right = 5 +patch_margin_bottom = 5 + +[node name="HBoxContainer" type="HBoxContainer" parent="Control/Background/MarginContainer"] +custom_minimum_size = Vector2(500, 250) +layout_mode = 2 + +[node name="MarginContainer2" type="MarginContainer" parent="Control/Background/MarginContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/margin_left = 8 +theme_override_constants/margin_top = 8 +theme_override_constants/margin_bottom = 8 + +[node name="ScrollContainer" type="ScrollContainer" parent="Control/Background/MarginContainer/HBoxContainer/MarginContainer2"] +layout_mode = 2 +size_flags_horizontal = 3 +follow_focus = true +horizontal_scroll_mode = 0 + +[node name="Songs" type="VBoxContainer" parent="Control/Background/MarginContainer/HBoxContainer/MarginContainer2/ScrollContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +size_flags_vertical = 3 + +[node name="MarginContainer" type="MarginContainer" parent="Control/Background/MarginContainer/HBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 3 +theme_override_constants/margin_top = 4 +theme_override_constants/margin_right = 4 +theme_override_constants/margin_bottom = 4 + +[node name="OptionsBackground" type="NinePatchRect" parent="Control/Background/MarginContainer/HBoxContainer/MarginContainer"] +layout_mode = 2 +texture = ExtResource("2_2bets") +patch_margin_left = 5 +patch_margin_top = 5 +patch_margin_right = 5 +patch_margin_bottom = 5 + +[node name="MarginContainer" type="MarginContainer" parent="Control/Background/MarginContainer/HBoxContainer/MarginContainer/OptionsBackground"] +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 +theme_override_constants/margin_left = 4 +theme_override_constants/margin_top = 4 +theme_override_constants/margin_right = 4 +theme_override_constants/margin_bottom = 4 + +[node name="SongDetails" type="Label" parent="Control/Background/MarginContainer/HBoxContainer/MarginContainer/OptionsBackground/MarginContainer"] +layout_mode = 2 +size_flags_vertical = 1 +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="ReturnButton" type="Button" parent="Control"] +layout_mode = 1 +anchors_preset = 7 +anchor_left = 0.5 +anchor_top = 1.0 +anchor_right = 0.5 +anchor_bottom = 1.0 +offset_left = -91.5 +offset_top = -59.0 +offset_right = 91.5 +offset_bottom = -22.0 +grow_horizontal = 2 +grow_vertical = 0 +theme = ExtResource("4_fvo50") +text = "CONTROLS_RETURN_BUTTON" diff --git a/Scenes/CustomSong/Scripts/CustomSelection.cs b/Scenes/CustomSong/Scripts/CustomSelection.cs new file mode 100644 index 00000000..da7dc166 --- /dev/null +++ b/Scenes/CustomSong/Scripts/CustomSelection.cs @@ -0,0 +1,164 @@ +using System; +using System.Collections.Generic; +using System.IO; +using FunkEngine; +using FunkEngine.Classes.MidiMaestro; +using Godot; +using FileAccess = Godot.FileAccess; + +public partial class CustomSelection : CanvasLayer, IFocusableMenu +{ + public const string LoadPath = "res://Scenes/CustomSong/CustomSelection.tscn"; + public const string UserSongDir = "user://Exports/"; + + [Export] + private Button _returnButton; + + [Export] + private VBoxContainer _songList; + + [Export] + private Label _songDescription; + + private DirAccess _dirAccess = DirAccess.Open(UserSongDir); + readonly List _customSongs = new List(); + + public override void _EnterTree() + { + _returnButton.Pressed += ReturnToPrev; + + if (!DirAccess.DirExistsAbsolute(UserSongDir)) + DirAccess.Open("user://").MakeDirRecursive(UserSongDir); + _dirAccess = DirAccess.Open(UserSongDir); + if (_dirAccess == null) + { + GD.PushWarning("Could not open user song directory!"); + return; + } + foreach (string file in _dirAccess.GetFiles()) + { + if (file.GetExtension() == "sontem") + { + SongTemplate result = SongTemplate.CreateFromPath(UserSongDir + file); + _customSongs.Add(result); + } + } + } + + SongTemplate _selectedSong; + + public override void _Ready() + { + foreach (SongTemplate song in _customSongs) + { + DisplayButton newButton = GD.Load(DisplayButton.LoadPath) + .Instantiate(); + _songList.AddChild(newButton); + if (song.Chart == null) + { + newButton.Text = Tr(song.Name); + newButton.Disabled = true; + newButton.FocusEntered += () => + { + _songDescription.Text = song.EnemyScenePath[0]; + }; + continue; + } + if (!FileAccess.FileExists(UserSongDir + song.Chart.SongMapLocation)) + { + newButton.Text = Tr("CUSTOM_SONG_NOT_FOUND"); + newButton.Disabled = true; + newButton.FocusEntered += () => + { + _songDescription.Text = UserSongDir + song.Chart.SongMapLocation; + }; + continue; + } + + float arbitraryDifficulty = 0; + arbitraryDifficulty += (float)song.Chart.Bpm / 120; + arbitraryDifficulty += (float)song.Chart.GetLane(ArrowType.Up).Count / 10; + arbitraryDifficulty += (float)song.Chart.GetLane(ArrowType.Right).Count / 10; + arbitraryDifficulty += (float)song.Chart.GetLane(ArrowType.Left).Count / 10; + arbitraryDifficulty += (float)song.Chart.GetLane(ArrowType.Down).Count / 10; + arbitraryDifficulty = (float)Math.Floor(arbitraryDifficulty); + + newButton.Text = song.Name; + newButton.FocusEntered += () => + { + _songDescription.Text = + song.Name + + "\n \n" + + Tr("CUSTOM_SONG") + + song.Chart.SongMapLocation + + "\n" + + Tr("CUSTOM_BPM") + + song.Chart.Bpm + + "\n" + + Tr("CUSTOM_LOOPS") + + song.Chart.NumLoops + + "\n" + + Tr("CUSTOM_DIFFICULTY") + + new string('\u2605', (int)arbitraryDifficulty); + + _selectedSong = song; + }; + newButton.Pressed += StartCustomSelection; + } + } + + private void StartCustomSelection() + { + BgAudioPlayer.LiveInstance.StopMusic(); + StageProducer.LiveInstance.TransitionToCustom(_selectedSong); + } + + #region IFocusableMenu + public IFocusableMenu Prev { get; set; } + private ProcessModeEnum _previousProcessMode; + + [Export] + private Control _focused; + + public void ResumeFocus() + { + ProcessMode = _previousProcessMode; + _focused.GrabFocus(); + } + + public void PauseFocus() + { + _focused = GetViewport().GuiGetFocusOwner(); + _previousProcessMode = ProcessMode; + ProcessMode = ProcessModeEnum.Disabled; + } + + public void OpenMenu(IFocusableMenu prev) + { + Prev = prev; + Prev.PauseFocus(); + _focused.GrabFocus(); + } + + public void ReturnToPrev() + { + StageProducer.LiveInstance.LastStage = Stages.Title; + Prev.ResumeFocus(); + QueueFree(); + } + + public override void _Input(InputEvent @event) + { + if (ControlSettings.IsOutOfFocus(this)) + { + GetViewport().SetInputAsHandled(); + return; + } + if (@event.IsActionPressed("ui_cancel")) + { + ReturnToPrev(); + GetViewport().SetInputAsHandled(); + } + } + #endregion +} diff --git a/Scenes/CustomSong/Scripts/CustomSelection.cs.uid b/Scenes/CustomSong/Scripts/CustomSelection.cs.uid new file mode 100644 index 00000000..87272ed3 --- /dev/null +++ b/Scenes/CustomSong/Scripts/CustomSelection.cs.uid @@ -0,0 +1 @@ +uid://cvt1bucvy5o2b diff --git a/Scenes/EventScene/EventScene.tscn b/Scenes/EventScene/EventScene.tscn index 92dbbd0d..9441d533 100644 --- a/Scenes/EventScene/EventScene.tscn +++ b/Scenes/EventScene/EventScene.tscn @@ -1,8 +1,8 @@ [gd_scene load_steps=10 format=3 uid="uid://u7oppwtmvmci"] [ext_resource type="Script" uid="uid://md1vhln8ji5h" path="res://Scenes/EventScene/EventScene.cs" id="1_x82kl"] -[ext_resource type="AudioStream" uid="uid://be5ial13ynf3o" path="res://Audio/Song1.ogg" id="2_vywvm"] [ext_resource type="Script" uid="uid://pl57giqyhckb" path="res://Scenes/UI/Scripts/MenuModule.cs" id="2_x82kl"] +[ext_resource type="AudioStream" uid="uid://da2ldmsjlkdod" path="res://Audio/Paint-the-Town-Neon-Red.ogg" id="3_4prsq"] [ext_resource type="Texture2D" uid="uid://qhwve7fik4do" path="res://SharedAssets/BackGround_Full.png" id="4_l56en"] [ext_resource type="Texture2D" uid="uid://8u3xvcma81d" path="res://Scenes/UI/Assets/UI_CrystalFrame.png" id="5_erk58"] [ext_resource type="Script" uid="uid://cp6t6haqyef7o" path="res://Scenes/AreaBasedBackground.cs" id="5_v3lan"] @@ -26,7 +26,8 @@ CurSceneNode = NodePath("..") [node name="Audio" type="AudioStreamPlayer" parent="."] unique_name_in_owner = true -stream = ExtResource("2_vywvm") +stream = ExtResource("3_4prsq") +volume_db = -15.0 autoplay = true [node name="PlayerMarker" type="Marker2D" parent="."] diff --git a/Scenes/Maps/Scripts/Cartographer.cs b/Scenes/Maps/Scripts/Cartographer.cs index def841d0..66e421d4 100644 --- a/Scenes/Maps/Scripts/Cartographer.cs +++ b/Scenes/Maps/Scripts/Cartographer.cs @@ -74,6 +74,10 @@ public override void _Process(double delta) public override void _EnterTree() { BgAudioPlayer.LiveInstance.PlayLevelMusic(); + if (!SaveSystem.GetConfigValue(SaveSystem.ConfigSettings.FirstTime).AsBool()) + return; + BattleDirector.VerticalScroll = true; + SaveSystem.UpdateConfig(SaveSystem.ConfigSettings.VerticalScroll, true); } private Vector2 GetPosition(int x, int y) @@ -204,6 +208,7 @@ private void WinArea() } EndScreen es = GD.Load(EndScreen.LoadPath).Instantiate(); + es.HasWon = true; AddChild(es); es.TopLabel.Text = Tr("BATTLE_ROOM_WIN"); ProcessMode = ProcessModeEnum.Disabled; diff --git a/Scenes/NoteManager/Assets/Arrow_Outline.png b/Scenes/NoteManager/Assets/Arrow_Outline.png index c15bebb1..d030bb58 100644 Binary files a/Scenes/NoteManager/Assets/Arrow_Outline.png and b/Scenes/NoteManager/Assets/Arrow_Outline.png differ diff --git a/Scenes/NoteManager/Assets/Arrow_Outline.png.import b/Scenes/NoteManager/Assets/Arrow_Outline.png.import index d96ddd56..355d468a 100644 --- a/Scenes/NoteManager/Assets/Arrow_Outline.png.import +++ b/Scenes/NoteManager/Assets/Arrow_Outline.png.import @@ -2,7 +2,7 @@ importer="texture" type="CompressedTexture2D" -uid="uid://cgq2ar3pdmkac" +uid="uid://c2j0nmuox6flp" path="res://.godot/imported/Arrow_Outline.png-dbc89009df5f433f3228bbd1180824d6.ctex" metadata={ "vram_texture": false diff --git a/Scenes/NoteManager/Assets/BottomNoteOutline.png b/Scenes/NoteManager/Assets/BottomNoteOutline.png new file mode 100644 index 00000000..bc936801 Binary files /dev/null and b/Scenes/NoteManager/Assets/BottomNoteOutline.png differ diff --git a/Scenes/NoteManager/Assets/BottomNoteOutline.png.import b/Scenes/NoteManager/Assets/BottomNoteOutline.png.import new file mode 100644 index 00000000..a0471559 --- /dev/null +++ b/Scenes/NoteManager/Assets/BottomNoteOutline.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://bh68528ekvjbk" +path="res://.godot/imported/BottomNoteOutline.png-dc150bdd190bb985754ca1468a3ef9c6.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Scenes/NoteManager/Assets/BottomNoteOutline.png" +dest_files=["res://.godot/imported/BottomNoteOutline.png-dc150bdd190bb985754ca1468a3ef9c6.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=1 diff --git a/Scenes/NoteManager/Assets/LeftNoteOutline.png b/Scenes/NoteManager/Assets/LeftNoteOutline.png new file mode 100644 index 00000000..193b3324 Binary files /dev/null and b/Scenes/NoteManager/Assets/LeftNoteOutline.png differ diff --git a/Scenes/NoteManager/Assets/LeftNoteOutline.png.import b/Scenes/NoteManager/Assets/LeftNoteOutline.png.import new file mode 100644 index 00000000..15797272 --- /dev/null +++ b/Scenes/NoteManager/Assets/LeftNoteOutline.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://s84c7d50wjvn" +path="res://.godot/imported/LeftNoteOutline.png-3862cf3f2ce1e27b8968108f0bab1d60.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Scenes/NoteManager/Assets/LeftNoteOutline.png" +dest_files=["res://.godot/imported/LeftNoteOutline.png-3862cf3f2ce1e27b8968108f0bab1d60.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=1 diff --git a/Scenes/NoteManager/Assets/New_Arrow.png b/Scenes/NoteManager/Assets/New_Arrow.png index 053319db..31a28ae2 100644 Binary files a/Scenes/NoteManager/Assets/New_Arrow.png and b/Scenes/NoteManager/Assets/New_Arrow.png differ diff --git a/Scenes/NoteManager/Assets/New_Arrow.png.import b/Scenes/NoteManager/Assets/New_Arrow.png.import index 6ee119f2..165cf091 100644 --- a/Scenes/NoteManager/Assets/New_Arrow.png.import +++ b/Scenes/NoteManager/Assets/New_Arrow.png.import @@ -2,7 +2,7 @@ importer="texture" type="CompressedTexture2D" -uid="uid://hfxynr5jdgsp" +uid="uid://cvua2fv6dk2pk" path="res://.godot/imported/New_Arrow.png-b9cc790fe65b856a0cee80c6a83cb011.ctex" metadata={ "vram_texture": false diff --git a/Scenes/NoteManager/Assets/Note.png b/Scenes/NoteManager/Assets/Note.png new file mode 100644 index 00000000..9d5c2b8e Binary files /dev/null and b/Scenes/NoteManager/Assets/Note.png differ diff --git a/Scenes/NoteManager/Assets/Note.png.import b/Scenes/NoteManager/Assets/Note.png.import new file mode 100644 index 00000000..b1b6b6c5 --- /dev/null +++ b/Scenes/NoteManager/Assets/Note.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://2jj65hqoi8su" +path="res://.godot/imported/Note.png-2e674f71d2a373c4546b38b47d74eb69.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Scenes/NoteManager/Assets/Note.png" +dest_files=["res://.godot/imported/Note.png-2e674f71d2a373c4546b38b47d74eb69.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=1 diff --git a/Scenes/NoteManager/Assets/NoteWIthOutline.png b/Scenes/NoteManager/Assets/NoteWIthOutline.png new file mode 100644 index 00000000..4e95b968 Binary files /dev/null and b/Scenes/NoteManager/Assets/NoteWIthOutline.png differ diff --git a/Scenes/NoteManager/Assets/NoteWIthOutline.png.import b/Scenes/NoteManager/Assets/NoteWIthOutline.png.import new file mode 100644 index 00000000..e9bef490 --- /dev/null +++ b/Scenes/NoteManager/Assets/NoteWIthOutline.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://coav3xvksq4jy" +path="res://.godot/imported/NoteWIthOutline.png-00b7213af7b9958e4dcd747d842ce073.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Scenes/NoteManager/Assets/NoteWIthOutline.png" +dest_files=["res://.godot/imported/NoteWIthOutline.png-00b7213af7b9958e4dcd747d842ce073.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=1 diff --git a/Scenes/NoteManager/Assets/RightNoteOutline.png b/Scenes/NoteManager/Assets/RightNoteOutline.png new file mode 100644 index 00000000..377e7bac Binary files /dev/null and b/Scenes/NoteManager/Assets/RightNoteOutline.png differ diff --git a/Scenes/NoteManager/Assets/RightNoteOutline.png.import b/Scenes/NoteManager/Assets/RightNoteOutline.png.import new file mode 100644 index 00000000..c0783e0a --- /dev/null +++ b/Scenes/NoteManager/Assets/RightNoteOutline.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dslb58tkhgroj" +path="res://.godot/imported/RightNoteOutline.png-2ceb3dbfbab26c238d24a42d793fe330.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Scenes/NoteManager/Assets/RightNoteOutline.png" +dest_files=["res://.godot/imported/RightNoteOutline.png-2ceb3dbfbab26c238d24a42d793fe330.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=1 diff --git a/Scenes/NoteManager/Assets/TopNoteOutline.png b/Scenes/NoteManager/Assets/TopNoteOutline.png new file mode 100644 index 00000000..35518bb5 Binary files /dev/null and b/Scenes/NoteManager/Assets/TopNoteOutline.png differ diff --git a/Scenes/NoteManager/Assets/TopNoteOutline.png.import b/Scenes/NoteManager/Assets/TopNoteOutline.png.import new file mode 100644 index 00000000..d3cb3171 --- /dev/null +++ b/Scenes/NoteManager/Assets/TopNoteOutline.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://br6xfjuq6c2nk" +path="res://.godot/imported/TopNoteOutline.png-9589b0c47ba2f4dac012050482888434.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Scenes/NoteManager/Assets/TopNoteOutline.png" +dest_files=["res://.godot/imported/TopNoteOutline.png-9589b0c47ba2f4dac012050482888434.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=1 diff --git a/Scenes/NoteManager/HoldArrow.tscn b/Scenes/NoteManager/HoldArrow.tscn index 7b749f03..ffe7dbc6 100644 --- a/Scenes/NoteManager/HoldArrow.tscn +++ b/Scenes/NoteManager/HoldArrow.tscn @@ -1,21 +1,18 @@ -[gd_scene load_steps=5 format=3 uid="uid://b3owchvgq1l87"] +[gd_scene load_steps=4 format=3 uid="uid://b3owchvgq1l87"] -[ext_resource type="Texture2D" uid="uid://hfxynr5jdgsp" path="res://Scenes/NoteManager/Assets/New_Arrow.png" id="1_nn8ao"] +[ext_resource type="Texture2D" uid="uid://2jj65hqoi8su" path="res://Scenes/NoteManager/Assets/Note.png" id="1_el0uw"] [ext_resource type="Script" uid="uid://ci5tt447bivmk" path="res://Scenes/NoteManager/Scripts/HoldArrow.cs" id="2_hehcu"] -[ext_resource type="Texture2D" uid="uid://cgq2ar3pdmkac" path="res://Scenes/NoteManager/Assets/Arrow_Outline.png" id="3_pvvea"] [ext_resource type="Texture2D" uid="uid://dbnvl0gbhl5b4" path="res://Scenes/NoteManager/Assets/Arrow_Trail.png" id="4_xgcwb"] [node name="Right-arrow" type="Sprite2D" node_paths=PackedStringArray("_trail", "OutlineSprite", "IconSprite")] z_index = 2 -rotation = 3.14159 -texture = ExtResource("1_nn8ao") +texture = ExtResource("1_el0uw") script = ExtResource("2_hehcu") _trail = NodePath("CometTail/TrailRemote/Trail") OutlineSprite = NodePath("Outline") IconSprite = NodePath("Icon") [node name="Outline" type="Sprite2D" parent="."] -texture = ExtResource("3_pvvea") [node name="Icon" type="Sprite2D" parent="."] diff --git a/Scenes/NoteManager/NoteArrow.tscn b/Scenes/NoteManager/NoteArrow.tscn index dc5521ce..ae606faf 100644 --- a/Scenes/NoteManager/NoteArrow.tscn +++ b/Scenes/NoteManager/NoteArrow.tscn @@ -1,16 +1,14 @@ -[gd_scene load_steps=4 format=3 uid="uid://ck3bfqy30rjbq"] +[gd_scene load_steps=3 format=3 uid="uid://ck3bfqy30rjbq"] -[ext_resource type="Texture2D" uid="uid://hfxynr5jdgsp" path="res://Scenes/NoteManager/Assets/New_Arrow.png" id="1_wq1hy"] +[ext_resource type="Texture2D" uid="uid://2jj65hqoi8su" path="res://Scenes/NoteManager/Assets/Note.png" id="1_t5o3d"] [ext_resource type="Script" uid="uid://cfdthf532wby7" path="res://Scenes/NoteManager/Scripts/NoteArrow.cs" id="2_lbl4b"] -[ext_resource type="Texture2D" uid="uid://cgq2ar3pdmkac" path="res://Scenes/NoteManager/Assets/Arrow_Outline.png" id="3_5g4ja"] [node name="Right-arrow" type="Sprite2D" node_paths=PackedStringArray("OutlineSprite", "IconSprite")] -texture = ExtResource("1_wq1hy") +texture = ExtResource("1_t5o3d") script = ExtResource("2_lbl4b") OutlineSprite = NodePath("Outline") IconSprite = NodePath("Icon") [node name="Outline" type="Sprite2D" parent="."] -texture = ExtResource("3_5g4ja") [node name="Icon" type="Sprite2D" parent="."] diff --git a/Scenes/NoteManager/NoteManager.tscn b/Scenes/NoteManager/NoteManager.tscn index fc5e75d8..2e5da20d 100644 --- a/Scenes/NoteManager/NoteManager.tscn +++ b/Scenes/NoteManager/NoteManager.tscn @@ -1,61 +1,65 @@ -[gd_scene load_steps=7 format=3 uid="uid://bn8txx53xlguw"] +[gd_scene load_steps=10 format=3 uid="uid://bn8txx53xlguw"] [ext_resource type="Script" uid="uid://bok6bnyemsgck" path="res://Scenes/NoteManager/Scripts/InputHandler.cs" id="1_2oeuf"] -[ext_resource type="Texture2D" uid="uid://hfxynr5jdgsp" path="res://Scenes/NoteManager/Assets/New_Arrow.png" id="2_pb1qk"] +[ext_resource type="Texture2D" uid="uid://2jj65hqoi8su" path="res://Scenes/NoteManager/Assets/Note.png" id="2_shvru"] [ext_resource type="Script" uid="uid://coukobemtvmah" path="res://Scenes/NoteManager/Scripts/NoteChecker.cs" id="3_0cioe"] -[ext_resource type="Texture2D" uid="uid://cgq2ar3pdmkac" path="res://Scenes/NoteManager/Assets/Arrow_Outline.png" id="4_3mttx"] +[ext_resource type="Texture2D" uid="uid://br6xfjuq6c2nk" path="res://Scenes/NoteManager/Assets/TopNoteOutline.png" id="4_adgij"] [ext_resource type="Texture2D" uid="uid://b0tvsewgnf2x7" path="res://icon.svg" id="4_foklt"] [ext_resource type="PackedScene" uid="uid://bcf6vs4aqoxr5" path="res://Scenes/ChartViewport/HitParticles.tscn" id="5_jv1tr"] +[ext_resource type="Texture2D" uid="uid://s84c7d50wjvn" path="res://Scenes/NoteManager/Assets/LeftNoteOutline.png" id="7_hm3i3"] +[ext_resource type="Texture2D" uid="uid://dslb58tkhgroj" path="res://Scenes/NoteManager/Assets/RightNoteOutline.png" id="9_osoy2"] +[ext_resource type="Texture2D" uid="uid://bh68528ekvjbk" path="res://Scenes/NoteManager/Assets/BottomNoteOutline.png" id="11_ymppf"] [node name="noteManager" type="Node2D"] script = ExtResource("1_2oeuf") [node name="noteCheckers" type="Node2D" parent="."] -[node name="arrowLeft" type="Sprite2D" parent="noteCheckers"] -position = Vector2(0, 29) -rotation = 3.14159 -texture = ExtResource("2_pb1qk") +[node name="arrowLeft" type="Sprite2D" parent="noteCheckers" node_paths=PackedStringArray("Outline")] +position = Vector2(0, 27) +texture = ExtResource("2_shvru") script = ExtResource("3_0cioe") +Outline = NodePath("Outline") [node name="Outline" type="Sprite2D" parent="noteCheckers/arrowLeft"] -modulate = Color(0, 0, 0, 1) -texture = ExtResource("4_3mttx") +self_modulate = Color(0.45, 0.45, 0.45, 1) +texture = ExtResource("4_adgij") [node name="HitParticles" parent="noteCheckers/arrowLeft" instance=ExtResource("5_jv1tr")] -[node name="arrowUp" type="Sprite2D" parent="noteCheckers"] +[node name="arrowUp" type="Sprite2D" parent="noteCheckers" node_paths=PackedStringArray("Outline")] position = Vector2(0, 68) -rotation = -1.5708 -texture = ExtResource("2_pb1qk") +texture = ExtResource("2_shvru") script = ExtResource("3_0cioe") +Outline = NodePath("Outline") [node name="Outline" type="Sprite2D" parent="noteCheckers/arrowUp"] -modulate = Color(0, 0, 0, 1) -texture = ExtResource("4_3mttx") +self_modulate = Color(0.45, 0.45, 0.45, 1) +texture = ExtResource("7_hm3i3") [node name="HitParticles" parent="noteCheckers/arrowUp" instance=ExtResource("5_jv1tr")] -[node name="arrowDown" type="Sprite2D" parent="noteCheckers"] +[node name="arrowDown" type="Sprite2D" parent="noteCheckers" node_paths=PackedStringArray("Outline")] position = Vector2(0, 112) -rotation = 1.5708 -texture = ExtResource("2_pb1qk") +texture = ExtResource("2_shvru") script = ExtResource("3_0cioe") +Outline = NodePath("Outline") [node name="Outline" type="Sprite2D" parent="noteCheckers/arrowDown"] -modulate = Color(0, 0, 0, 1) -texture = ExtResource("4_3mttx") +self_modulate = Color(0.45, 0.45, 0.45, 1) +texture = ExtResource("9_osoy2") [node name="HitParticles" parent="noteCheckers/arrowDown" instance=ExtResource("5_jv1tr")] -[node name="arrowRight" type="Sprite2D" parent="noteCheckers"] -position = Vector2(0, 151) -texture = ExtResource("2_pb1qk") +[node name="arrowRight" type="Sprite2D" parent="noteCheckers" node_paths=PackedStringArray("Outline")] +position = Vector2(0, 153) +texture = ExtResource("2_shvru") script = ExtResource("3_0cioe") +Outline = NodePath("Outline") [node name="Outline" type="Sprite2D" parent="noteCheckers/arrowRight"] -modulate = Color(0, 0, 0, 1) -texture = ExtResource("4_3mttx") +self_modulate = Color(0.45, 0.45, 0.45, 1) +texture = ExtResource("11_ymppf") [node name="HitParticles" parent="noteCheckers/arrowRight" instance=ExtResource("5_jv1tr")] diff --git a/Scenes/NoteManager/Scripts/InputHandler.cs b/Scenes/NoteManager/Scripts/InputHandler.cs index bb6f21a9..c61dfdb2 100644 --- a/Scenes/NoteManager/Scripts/InputHandler.cs +++ b/Scenes/NoteManager/Scripts/InputHandler.cs @@ -40,6 +40,8 @@ public partial class InputHandler : Node2D }, }; + public static bool UseArrows = false; + private void InitializeArrowCheckers() { //Set the color of the arrows @@ -53,6 +55,11 @@ private void InitializeArrowCheckers() public override void _Ready() { InitializeArrowCheckers(); + UpdateArrowSprites(); + if (!BattleDirector.VerticalScroll) + return; + foreach (CheckerData data in Arrows) + data.Node.RotationDegrees += 90f; } public override void _Process(double delta) @@ -99,7 +106,7 @@ public void FeedbackEffect(ArrowType arrow, Timing timed) switch (timed) { case Timing.Perfect: - particleAmount = 10; + particleAmount = 30; break; case Timing.Good: particleAmount = 7; @@ -113,4 +120,42 @@ public void FeedbackEffect(ArrowType arrow, Timing timed) particles.Emit(particleAmount); } + + private static readonly string ArrowFolderPath = "res://Scenes/NoteManager/Assets/"; + + private void UpdateArrowSprites() + { + if (!UseArrows) + return; + Arrows[(int)ArrowType.Left].Node.Texture = GD.Load( + ArrowFolderPath + "New_Arrow.png" + ); + Arrows[(int)ArrowType.Left].Node.Outline.Texture = GD.Load( + ArrowFolderPath + "Arrow_Outline.png" + ); + Arrows[(int)ArrowType.Left].Node.RotationDegrees = 180f; + + Arrows[(int)ArrowType.Up].Node.Texture = GD.Load( + ArrowFolderPath + "New_Arrow.png" + ); + Arrows[(int)ArrowType.Up].Node.Outline.Texture = GD.Load( + ArrowFolderPath + "Arrow_Outline.png" + ); + Arrows[(int)ArrowType.Up].Node.RotationDegrees = 270f; + + Arrows[(int)ArrowType.Down].Node.Texture = GD.Load( + ArrowFolderPath + "New_Arrow.png" + ); + Arrows[(int)ArrowType.Down].Node.Outline.Texture = GD.Load( + ArrowFolderPath + "Arrow_Outline.png" + ); + Arrows[(int)ArrowType.Down].Node.RotationDegrees = 90f; + + Arrows[(int)ArrowType.Right].Node.Texture = GD.Load( + ArrowFolderPath + "New_Arrow.png" + ); + Arrows[(int)ArrowType.Right].Node.Outline.Texture = GD.Load( + ArrowFolderPath + "Arrow_Outline.png" + ); + } } diff --git a/Scenes/NoteManager/Scripts/NoteArrow.cs b/Scenes/NoteManager/Scripts/NoteArrow.cs index 566fd2e5..a1241f35 100644 --- a/Scenes/NoteManager/Scripts/NoteArrow.cs +++ b/Scenes/NoteManager/Scripts/NoteArrow.cs @@ -1,7 +1,5 @@ using System; - -namespace FunkEngine; - +using FunkEngine; using Godot; public partial class NoteArrow : Sprite2D @@ -36,8 +34,12 @@ public virtual void Init(CheckerData parentChecker, ArrowData arrowData, double Position = new Vector2(GetNewPosX(), parentChecker.Node.GlobalPosition.Y); RotationDegrees = parentChecker.Node.RotationDegrees; + Texture = parentChecker.Node.Texture; + OutlineSprite.Texture = parentChecker.Node.Outline.Texture; IconSprite.Texture = arrowData.NoteRef.Texture; IconSprite.Rotation = -Rotation; + if (BattleDirector.VerticalScroll) + IconSprite.RotationDegrees += BattleDirector.VerticalScrollRotation; OutlineSprite.Modulate = parentChecker.Color; } diff --git a/Scenes/NoteManager/Scripts/NoteChecker.cs b/Scenes/NoteManager/Scripts/NoteChecker.cs index f6e19e0b..6beb0f66 100644 --- a/Scenes/NoteManager/Scripts/NoteChecker.cs +++ b/Scenes/NoteManager/Scripts/NoteChecker.cs @@ -10,11 +10,14 @@ public partial class NoteChecker : Sprite2D private float _fadeTime = 2.0f; public HitParticles Particles; + [Export] + public Sprite2D Outline; + public override void _Process(double delta) { - SelfModulate = _isPressed - ? Modulate.Lerp(_color, _fadeTime) - : SelfModulate.Lerp( + Modulate = _isPressed + ? SelfModulate.Lerp(_color.Lightened(.5f), _fadeTime) + : Modulate.Lerp( new Color(_color.R * 0.5f, _color.G * 0.5f, _color.B * 0.5f, 1), (float)delta * _fadeTime ); @@ -30,6 +33,6 @@ public void SetColor(Color color) _color = color; Particles = GetNode("HitParticles"); Particles.Modulate = color; - SelfModulate = new Color(_color.R * 0.5f, _color.G * 0.5f, _color.B * 0.5f, 1); + Modulate = new Color(_color.R * 0.5f, _color.G * 0.5f, _color.B * 0.5f, 1); } } diff --git a/Scenes/Puppets/Enemies/Astrorat/Assets/Astrorat.png b/Scenes/Puppets/Enemies/Astrorat/Assets/Astrorat.png new file mode 100644 index 00000000..635a57f5 Binary files /dev/null and b/Scenes/Puppets/Enemies/Astrorat/Assets/Astrorat.png differ diff --git a/Scenes/Puppets/Enemies/Astrorat/Assets/Astrorat.png.import b/Scenes/Puppets/Enemies/Astrorat/Assets/Astrorat.png.import new file mode 100644 index 00000000..bf701cea --- /dev/null +++ b/Scenes/Puppets/Enemies/Astrorat/Assets/Astrorat.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cas3b83awvdsy" +path="res://.godot/imported/Astrorat.png-0987223ba75fc4af182080429227827b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Scenes/Puppets/Enemies/Astrorat/Assets/Astrorat.png" +dest_files=["res://.godot/imported/Astrorat.png-0987223ba75fc4af182080429227827b.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=1 diff --git a/Scenes/Puppets/Enemies/Astrorat/Astrorat.cs.uid b/Scenes/Puppets/Enemies/Astrorat/Astrorat.cs.uid new file mode 100644 index 00000000..ef18796a --- /dev/null +++ b/Scenes/Puppets/Enemies/Astrorat/Astrorat.cs.uid @@ -0,0 +1 @@ +uid://x2wvnlq6hk4f diff --git a/Scenes/Puppets/Enemies/Astrorat/Astrorat.tscn b/Scenes/Puppets/Enemies/Astrorat/Astrorat.tscn new file mode 100644 index 00000000..07cf405d --- /dev/null +++ b/Scenes/Puppets/Enemies/Astrorat/Astrorat.tscn @@ -0,0 +1,34 @@ +[gd_scene load_steps=7 format=3 uid="uid://2p4sq686xtjn"] + +[ext_resource type="Script" uid="uid://btsx15pcbm1eu" path="res://Scenes/Puppets/Enemies/Astrorat/P_Astrorat.cs" id="1_26bsl"] +[ext_resource type="Texture2D" uid="uid://cas3b83awvdsy" path="res://Scenes/Puppets/Enemies/Astrorat/Assets/Astrorat.png" id="2_26bsl"] +[ext_resource type="PackedScene" uid="uid://bgomxovxs7sr8" path="res://Scenes/Puppets/HealthBar.tscn" id="3_lb5uo"] +[ext_resource type="PackedScene" uid="uid://cdoguwlxehbpg" path="res://Scenes/Puppets/StatusContainer.tscn" id="4_udbb0"] + +[sub_resource type="Gradient" id="Gradient_hguc7"] +offsets = PackedFloat32Array(0.0227273, 1) +colors = PackedColorArray(0, 1, 0.0999999, 1, 1, 1, 1, 1) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_545vi"] +resource_local_to_scene = true +gradient = SubResource("Gradient_hguc7") +width = 100 +height = 18 + +[node name="EnemPuppet" type="Node2D" node_paths=PackedStringArray("HealthBar", "Sprite", "_statusContainer")] +script = ExtResource("1_26bsl") +HealthBar = NodePath("ProgressBar") +Sprite = NodePath("Sprite") +_statusContainer = NodePath("StatusContainer") + +[node name="Sprite" type="Sprite2D" parent="."] +texture = ExtResource("2_26bsl") + +[node name="ProgressBar" parent="." instance=ExtResource("3_lb5uo")] +offset_left = -50.0 +offset_top = 32.0 +offset_right = 52.0 +offset_bottom = 52.0 +texture_progress = SubResource("GradientTexture2D_545vi") + +[node name="StatusContainer" parent="." instance=ExtResource("4_udbb0")] diff --git a/Scenes/Puppets/Enemies/Astrorat/P_Astrorat.cs b/Scenes/Puppets/Enemies/Astrorat/P_Astrorat.cs new file mode 100644 index 00000000..2c763707 --- /dev/null +++ b/Scenes/Puppets/Enemies/Astrorat/P_Astrorat.cs @@ -0,0 +1,23 @@ +using FunkEngine; +using Godot; + +public partial class P_Astrorat : EnemyPuppet +{ + public static new readonly string LoadPath = + "res://Scenes/Puppets/Enemies/Astrorat/Astrorat.tscn"; + + public override void _Ready() + { + MaxHealth = 150; + CurrentHealth = MaxHealth; + BaseMoney = 20; + base._Ready(); + var enemyTween = CreateTween(); + enemyTween.TweenProperty(Sprite, "position", Vector2.Up * 5, 1f).AsRelative(); + enemyTween.TweenProperty(Sprite, "position", Vector2.Down * 5, 1f).AsRelative(); + enemyTween.SetTrans(Tween.TransitionType.Quad); + enemyTween.SetEase(Tween.EaseType.InOut); + enemyTween.SetLoops(); + enemyTween.Play(); + } +} diff --git a/Scenes/Puppets/Enemies/Astrorat/P_Astrorat.cs.uid b/Scenes/Puppets/Enemies/Astrorat/P_Astrorat.cs.uid new file mode 100644 index 00000000..f82ca5c9 --- /dev/null +++ b/Scenes/Puppets/Enemies/Astrorat/P_Astrorat.cs.uid @@ -0,0 +1 @@ +uid://btsx15pcbm1eu diff --git a/Scenes/Puppets/Enemies/BossBlood/P_BossBlood.cs b/Scenes/Puppets/Enemies/BossBlood/P_BossBlood.cs index 90d2f495..9198c3b9 100644 --- a/Scenes/Puppets/Enemies/BossBlood/P_BossBlood.cs +++ b/Scenes/Puppets/Enemies/BossBlood/P_BossBlood.cs @@ -8,9 +8,9 @@ public partial class P_BossBlood : EnemyPuppet public override void _Ready() { - MaxHealth = 225; + MaxHealth = 250; CurrentHealth = MaxHealth; - BaseMoney = 15; + BaseMoney = 50; InitialNote = (14, 3); base._Ready(); var enemTween = CreateTween(); @@ -26,7 +26,7 @@ public override void _Ready() new EnemyEffect( this, BattleEffectTrigger.OnLoop, - 20, + 30, (e, eff, val) => { eff.Owner.Heal(val); diff --git a/Scenes/Puppets/Enemies/CyberFox/P_CyberFox.cs b/Scenes/Puppets/Enemies/CyberFox/P_CyberFox.cs index 7e381731..985adf80 100644 --- a/Scenes/Puppets/Enemies/CyberFox/P_CyberFox.cs +++ b/Scenes/Puppets/Enemies/CyberFox/P_CyberFox.cs @@ -14,7 +14,7 @@ public override void _Ready() { MaxHealth = 130; CurrentHealth = MaxHealth; - BaseMoney = 5; + BaseMoney = 20; base._Ready(); var enemTween = CreateTween(); enemTween.TweenProperty(Sprite, "position", Vector2.Right * 10, 0.5f).AsRelative(); diff --git a/Scenes/Puppets/Enemies/Effigy/P_Effigy.cs b/Scenes/Puppets/Enemies/Effigy/P_Effigy.cs index 6373e338..fb510cd6 100644 --- a/Scenes/Puppets/Enemies/Effigy/P_Effigy.cs +++ b/Scenes/Puppets/Enemies/Effigy/P_Effigy.cs @@ -10,7 +10,7 @@ public partial class P_Effigy : EnemyPuppet public override void _Ready() { MaxHealth = 124; - BaseMoney = 99; + BaseMoney = 80; CurrentHealth = MaxHealth; base._Ready(); diff --git a/Scenes/Puppets/Enemies/Holograeme/P_Holograeme.cs b/Scenes/Puppets/Enemies/Holograeme/P_Holograeme.cs index 7edc344d..468906b9 100644 --- a/Scenes/Puppets/Enemies/Holograeme/P_Holograeme.cs +++ b/Scenes/Puppets/Enemies/Holograeme/P_Holograeme.cs @@ -20,6 +20,7 @@ public override void _ExitTree() BattleDirector.AutoPlay = false; BattleDirector.PlayerDisabled = false; Conductor.BeatSpawnOffsetModifier = 0; + BattleDirector.VerticalScrollRotation = 90f; } public override void _Ready() @@ -27,7 +28,7 @@ public override void _Ready() Conductor.BeatSpawnOffsetModifier = 1; MaxHealth = 3; CurrentHealth = MaxHealth; - BaseMoney = 20; + BaseMoney = 40; base._Ready(); _hands[0] = _redHand; @@ -43,6 +44,7 @@ public override void _Ready() { BattleDirector.AutoPlay = true; BattleDirector.PlayerDisabled = true; + BattleDirector.VerticalScrollRotation = 0f; e.BD.AddStatus(Targetting.Player, StatusEffect.Disable); } ), @@ -90,10 +92,9 @@ public override void _Ready() if ( e is not BattleDirector.Harbinger.OnDamageInstanceArgs dArgs || dArgs.Dmg.Target != eff.Owner - || dArgs.Dmg.Source != dArgs.BD.Player ) return; - if (dArgs.Dmg.Damage < val) + if (dArgs.Dmg.Source != e.BD.Player || dArgs.Dmg.Damage < val) { dArgs.Dmg.ModifyDamage(0, 0); } diff --git a/Scenes/Puppets/Enemies/Keythulu/P_Keythulu.cs b/Scenes/Puppets/Enemies/Keythulu/P_Keythulu.cs index 587c878d..fb91b3ac 100644 --- a/Scenes/Puppets/Enemies/Keythulu/P_Keythulu.cs +++ b/Scenes/Puppets/Enemies/Keythulu/P_Keythulu.cs @@ -14,7 +14,7 @@ public override void _Ready() { MaxHealth = 500; CurrentHealth = MaxHealth; - BaseMoney = 50; + BaseMoney = 80; base._Ready(); _effectSprite.Visible = false; @@ -32,7 +32,7 @@ public override void _Ready() new EnemyEffect( this, BattleEffectTrigger.OnBattleStart, - 7, + 6, (e, eff, val) => { e.BD.AddStatus(Targetting.Player, StatusEffect.MindCrush, val); @@ -65,7 +65,10 @@ public override void _Ready() 1, (e, eff, val) => { - if (e is not BattleDirector.Harbinger.OnDamageInstanceArgs dArgs) + if ( + StageProducer.Config.RoomType == Stages.Custom + || e is not BattleDirector.Harbinger.OnDamageInstanceArgs dArgs + ) return; if ( dArgs.Dmg.Target == this @@ -73,6 +76,7 @@ public override void _Ready() ) { SteamWhisperer.PopAchievement("actTwoComp"); + SaveSystem.UpdateConfig(SaveSystem.ConfigSettings.HasWon, true); } } ), diff --git a/Scenes/Puppets/Enemies/LWS/P_LWS.cs b/Scenes/Puppets/Enemies/LWS/P_LWS.cs index e02e0bd6..4da24ce9 100644 --- a/Scenes/Puppets/Enemies/LWS/P_LWS.cs +++ b/Scenes/Puppets/Enemies/LWS/P_LWS.cs @@ -10,7 +10,7 @@ public override void _Ready() { MaxHealth = 80; CurrentHealth = MaxHealth; - BaseMoney = 8; + BaseMoney = 10; InitialNote = (16, 3); base._Ready(); var enemyTween = CreateTween(); diff --git a/Scenes/Puppets/Enemies/Midriff/Midriff.png b/Scenes/Puppets/Enemies/Midriff/Midriff.png new file mode 100644 index 00000000..56361af7 Binary files /dev/null and b/Scenes/Puppets/Enemies/Midriff/Midriff.png differ diff --git a/Scenes/Puppets/Enemies/Midriff/Midriff.png.import b/Scenes/Puppets/Enemies/Midriff/Midriff.png.import new file mode 100644 index 00000000..c0c99785 --- /dev/null +++ b/Scenes/Puppets/Enemies/Midriff/Midriff.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dtcbwdbt0rfa0" +path="res://.godot/imported/Midriff.png-b295a34f57615845c5000683590fac01.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Scenes/Puppets/Enemies/Midriff/Midriff.png" +dest_files=["res://.godot/imported/Midriff.png-b295a34f57615845c5000683590fac01.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=1 diff --git a/Scenes/Puppets/Enemies/Midriff/Midriff.tscn b/Scenes/Puppets/Enemies/Midriff/Midriff.tscn new file mode 100644 index 00000000..1346118f --- /dev/null +++ b/Scenes/Puppets/Enemies/Midriff/Midriff.tscn @@ -0,0 +1,35 @@ +[gd_scene load_steps=7 format=3 uid="uid://bgq3f6b1raig1"] + +[ext_resource type="Texture2D" uid="uid://dtcbwdbt0rfa0" path="res://Scenes/Puppets/Enemies/Midriff/Midriff.png" id="1_f0bei"] +[ext_resource type="Script" uid="uid://dc1em0rtddv3u" path="res://Scenes/Puppets/Enemies/Midriff/P_Midriff.cs" id="1_qspld"] +[ext_resource type="PackedScene" uid="uid://bgomxovxs7sr8" path="res://Scenes/Puppets/HealthBar.tscn" id="2_qspld"] +[ext_resource type="PackedScene" uid="uid://cdoguwlxehbpg" path="res://Scenes/Puppets/StatusContainer.tscn" id="3_oulkg"] + +[sub_resource type="Gradient" id="Gradient_hguc7"] +offsets = PackedFloat32Array(0.0227273, 1) +colors = PackedColorArray(0, 1, 0.0999999, 1, 1, 1, 1, 1) + +[sub_resource type="GradientTexture2D" id="GradientTexture2D_545vi"] +resource_local_to_scene = true +gradient = SubResource("Gradient_hguc7") +width = 100 +height = 18 + +[node name="Midriff" type="Node2D" node_paths=PackedStringArray("HealthBar", "Sprite", "_statusContainer")] +script = ExtResource("1_qspld") +HealthBar = NodePath("ProgressBar") +Sprite = NodePath("Sprite") +_statusContainer = NodePath("StatusContainer") + +[node name="Sprite" type="Sprite2D" parent="."] +position = Vector2(0, -31) +texture = ExtResource("1_f0bei") + +[node name="ProgressBar" parent="." instance=ExtResource("2_qspld")] +offset_left = -50.0 +offset_top = 32.0 +offset_right = 52.0 +offset_bottom = 52.0 +texture_progress = SubResource("GradientTexture2D_545vi") + +[node name="StatusContainer" parent="." instance=ExtResource("3_oulkg")] diff --git a/Scenes/Puppets/Enemies/Midriff/P_Midriff.cs b/Scenes/Puppets/Enemies/Midriff/P_Midriff.cs new file mode 100644 index 00000000..7ec69dce --- /dev/null +++ b/Scenes/Puppets/Enemies/Midriff/P_Midriff.cs @@ -0,0 +1,40 @@ +using FunkEngine; +using Godot; + +public partial class P_Midriff : EnemyPuppet +{ + public static new readonly string LoadPath = + "res://Scenes/Puppets/Enemies/Midriff/Midriff.tscn"; + + public override void _Ready() + { + MaxHealth = 100; + CurrentHealth = MaxHealth; + BaseMoney = 12; + base._Ready(); + var enemyTween = CreateTween(); + enemyTween.TweenProperty(Sprite, "position", Vector2.Left * 5, 1f).AsRelative(); + enemyTween.TweenProperty(Sprite, "position", Vector2.Right * 5, 1f).AsRelative(); + enemyTween.SetTrans(Tween.TransitionType.Quad); + enemyTween.SetEase(Tween.EaseType.InOut); + enemyTween.SetLoops(); + enemyTween.Play(); + + BattleEvents = new EnemyEffect[] + { + new EnemyEffect( + this, + BattleEffectTrigger.OnBattleStart, + 50, + (_, _, val) => + { + if (StageProducer.CurLevel.Id <= 1) + return; + MaxHealth += val; + CurrentHealth = MaxHealth; + BaseMoney += val / 10; + } + ), + }; + } +} diff --git a/Scenes/Puppets/Enemies/Midriff/P_Midriff.cs.uid b/Scenes/Puppets/Enemies/Midriff/P_Midriff.cs.uid new file mode 100644 index 00000000..bc818f37 --- /dev/null +++ b/Scenes/Puppets/Enemies/Midriff/P_Midriff.cs.uid @@ -0,0 +1 @@ +uid://dc1em0rtddv3u diff --git a/Scenes/Puppets/Enemies/Mushroom/P_Mushroom.cs b/Scenes/Puppets/Enemies/Mushroom/P_Mushroom.cs index b8b3283a..4ad1ce8c 100644 --- a/Scenes/Puppets/Enemies/Mushroom/P_Mushroom.cs +++ b/Scenes/Puppets/Enemies/Mushroom/P_Mushroom.cs @@ -9,9 +9,9 @@ public partial class P_Mushroom : EnemyPuppet public override void _Ready() { - MaxHealth = 200; + MaxHealth = 150; CurrentHealth = MaxHealth; - BaseMoney = 10; + BaseMoney = 20; InitialNote = (17, 1); base._Ready(); BattleEvents = new EnemyEffect[] diff --git a/Scenes/Puppets/Enemies/Parasifly/P_Parasifly.cs b/Scenes/Puppets/Enemies/Parasifly/P_Parasifly.cs index cd26339a..bf27cee0 100644 --- a/Scenes/Puppets/Enemies/Parasifly/P_Parasifly.cs +++ b/Scenes/Puppets/Enemies/Parasifly/P_Parasifly.cs @@ -8,9 +8,9 @@ public partial class P_Parasifly : EnemyPuppet public override void _Ready() { - MaxHealth = 100; + MaxHealth = 75; CurrentHealth = MaxHealth; - BaseMoney = 5; + BaseMoney = 7; InitialNote = (13, 2); base._Ready(); var enemTween = CreateTween(); diff --git a/Scenes/Puppets/Enemies/Shapes/P_Shapes.cs b/Scenes/Puppets/Enemies/Shapes/P_Shapes.cs index c3e75288..d8f249f3 100644 --- a/Scenes/Puppets/Enemies/Shapes/P_Shapes.cs +++ b/Scenes/Puppets/Enemies/Shapes/P_Shapes.cs @@ -10,7 +10,7 @@ public override void _Ready() { MaxHealth = 150; CurrentHealth = MaxHealth; - BaseMoney = 10; + BaseMoney = 20; base._Ready(); var enemTween = CreateTween(); enemTween.TweenProperty(Sprite, "position", Vector2.Right * 10, 3f).AsRelative(); diff --git a/Scenes/Puppets/Enemies/Spider/P_Spider.cs b/Scenes/Puppets/Enemies/Spider/P_Spider.cs index 256684ad..9febd0bd 100644 --- a/Scenes/Puppets/Enemies/Spider/P_Spider.cs +++ b/Scenes/Puppets/Enemies/Spider/P_Spider.cs @@ -8,7 +8,7 @@ public partial class P_Spider : EnemyPuppet public override void _Ready() { - MaxHealth = 100; + MaxHealth = 60; CurrentHealth = MaxHealth; BaseMoney = 5; InitialNote = (15, 2); diff --git a/Scenes/Puppets/Enemies/Squirkel/P_Squirkel.cs b/Scenes/Puppets/Enemies/Squirkel/P_Squirkel.cs index 8c6dbab7..fa903499 100644 --- a/Scenes/Puppets/Enemies/Squirkel/P_Squirkel.cs +++ b/Scenes/Puppets/Enemies/Squirkel/P_Squirkel.cs @@ -11,7 +11,7 @@ public override void _Ready() { MaxHealth = 90; CurrentHealth = MaxHealth; - BaseMoney = 5; + BaseMoney = 10; base._Ready(); var tween = CreateTween(); diff --git a/Scenes/Puppets/Enemies/Strawman/P_Strawman.cs b/Scenes/Puppets/Enemies/Strawman/P_Strawman.cs index 564f9a08..cfb99b03 100644 --- a/Scenes/Puppets/Enemies/Strawman/P_Strawman.cs +++ b/Scenes/Puppets/Enemies/Strawman/P_Strawman.cs @@ -13,7 +13,7 @@ public override void _Ready() { CurrentHealth = 40; MaxHealth = 40; - BaseMoney = 1; + BaseMoney = 5; base._Ready(); BattleEvents = new EnemyEffect[] diff --git a/Scenes/Puppets/Enemies/TheGWS/P_TheGWS.cs b/Scenes/Puppets/Enemies/TheGWS/P_TheGWS.cs index ebd3d242..b119fdbd 100644 --- a/Scenes/Puppets/Enemies/TheGWS/P_TheGWS.cs +++ b/Scenes/Puppets/Enemies/TheGWS/P_TheGWS.cs @@ -10,7 +10,7 @@ public override void _Ready() { MaxHealth = 150; CurrentHealth = MaxHealth; - BaseMoney = 10; + BaseMoney = 20; InitialNote = (10, 7); base._Ready(); var enemTween = CreateTween(); diff --git a/Scenes/Puppets/Enemies/TheGobbler/P_Gobbler.cs b/Scenes/Puppets/Enemies/TheGobbler/P_Gobbler.cs index a0fa417d..f620243c 100644 --- a/Scenes/Puppets/Enemies/TheGobbler/P_Gobbler.cs +++ b/Scenes/Puppets/Enemies/TheGobbler/P_Gobbler.cs @@ -11,7 +11,7 @@ public override void _Ready() { MaxHealth = 150; CurrentHealth = MaxHealth; - BaseMoney = 10; + BaseMoney = 20; base._Ready(); var enemTween = CreateTween(); enemTween.TweenProperty(Sprite, "position", Vector2.Right * 10, 3f).AsRelative(); diff --git a/Scenes/Puppets/Enemies/Turtle/P_Turtle.cs b/Scenes/Puppets/Enemies/Turtle/P_Turtle.cs index 5b25cc85..47ad8089 100644 --- a/Scenes/Puppets/Enemies/Turtle/P_Turtle.cs +++ b/Scenes/Puppets/Enemies/Turtle/P_Turtle.cs @@ -8,9 +8,9 @@ public partial class P_Turtle : EnemyPuppet public override void _Ready() { - MaxHealth = 150; + MaxHealth = 225; CurrentHealth = MaxHealth; - BaseMoney = 10; + BaseMoney = 40; base._Ready(); var enemTween = CreateTween(); enemTween.TweenProperty(Sprite, "position", Vector2.Right * 10, 3f).AsRelative(); diff --git a/Scenes/Puppets/Scripts/PlayerStats.cs b/Scenes/Puppets/Scripts/PlayerStats.cs index 3d3581f7..557469f0 100644 --- a/Scenes/Puppets/Scripts/PlayerStats.cs +++ b/Scenes/Puppets/Scripts/PlayerStats.cs @@ -16,6 +16,7 @@ public partial class PlayerStats : Resource public int Rerolls = 0; public int Shortcuts = 0; public int DiscountPercent = 0; + public float ChartSpeedMultiplier = 1f; //Array in order of descending rarities, Legendary -> ... Common. Int odds out of 100. public int[] RarityOdds = [1, 5, 10, 20, 100]; @@ -79,6 +80,7 @@ public void RemoveNote(int index) CurNotes = CurNotes.Where((_, i) => i != index).ToArray(); } + //Can remove more than 1 public void RemoveNote(Note nSelection) { CurNotes = CurNotes.Where(n => n != nSelection).ToArray(); diff --git a/Scenes/ShopScene/Scripts/ShopScene.cs b/Scenes/ShopScene/Scripts/ShopScene.cs index 7709e7a3..d66c9735 100644 --- a/Scenes/ShopScene/Scripts/ShopScene.cs +++ b/Scenes/ShopScene/Scripts/ShopScene.cs @@ -17,6 +17,9 @@ public partial class ShopScene : Control [Export] private Button _removalButton; + [Export] + private Button _healButton; + [Export] private GridContainer _noteGrid; @@ -50,15 +53,19 @@ public partial class ShopScene : Control [Export] private Label _removalCostLabel; + [Export] + private PlayerPuppet _player; + private ButtonGroup _bGroup; - private readonly int[] _priceByRarity = [100, 90, 80, 70, 60, 50, 9]; - const int NoteCost = 45; + private readonly int[] _priceByRarity = [200, 180, 160, 140, 120, 100, 18]; + const int NoteCost = 90; private List _shopItems = new List(); - public override void _Ready() + public override void _EnterTree() { + BgAudioPlayer.LiveInstance.ResumeLevelMusic(); _bGroup = new ButtonGroup(); Initialize(); _confirmationButton.Pressed += TryPurchase; @@ -66,11 +73,7 @@ public override void _Ready() _removalButton.Pressed += OpenRemovalPane; _removalAcceptButton.Pressed += RemoveNote; _cancelRemoveButton.Pressed += CloseRemovalPane; - } - - public override void _EnterTree() - { - BgAudioPlayer.LiveInstance.ResumeLevelMusic(); + _healButton.Pressed += TryHeal; } private void Initialize() @@ -78,6 +81,7 @@ private void Initialize() UpdateMoneyLabel(); GenerateShopItems(); PopulatePossessedNotes(); + UpdateHealButton(); } public override void _Input(InputEvent @event) @@ -99,6 +103,14 @@ public override void _Input(InputEvent @event) GetViewport().SetInputAsHandled(); } } + if (@event is InputEventKey eventKey && eventKey.Pressed && !eventKey.Echo) + { + if (eventKey.Keycode == Key.Key0) + { + StageProducer.PlayerStats.Money += 999; + UpdateMoneyLabel(); + } + } } private void UpdateMoneyLabel() @@ -164,7 +176,8 @@ private void AddShopItem(GridContainer container, IDisplayable item, int basePri private int GetPrice(int basePrice) { - return Math.Max(basePrice * (1 - StageProducer.PlayerStats.DiscountPercent / 100), 0); //Price can't go negative + return (int) + Math.Max(basePrice * (1 - (float)StageProducer.PlayerStats.DiscountPercent / 100), 0); //Price can't go negative } private IDisplayable _currentItem; @@ -209,6 +222,7 @@ private void TryPurchase() _currentUItem = null; RefreshShopPrices(); + UpdateHealButton(); } private Control _lastFocused; @@ -246,7 +260,7 @@ private void ChangeDescription(IDisplayable displayable) _descriptionLabel.Text = Tr(type + name + "_NAME") + ": " + Tr(type + name + "_TOOLTIP"); } - private const int RemovalCost = 50; + private const int RemovalCost = 75; private bool _hasRemoved; private void OpenRemovalPane() @@ -318,8 +332,42 @@ private void RemoveNote() StageProducer.PlayerStats.Money -= RemovalCost; _removalButton.Disabled = true; _hasRemoved = true; - StageProducer.PlayerStats.RemoveNote(_toRemove); + StageProducer.PlayerStats.RemoveNote( + Array.IndexOf(StageProducer.PlayerStats.CurNotes, _toRemove) + ); _selectedRemoveButton.QueueFree(); CloseRemovalPane(); + UpdateMoneyLabel(); + UpdateHealButton(); + } + + private bool _hasHealed; + private const int HealCost = 50; + private int _healAmount = (StageProducer.PlayerStats.MaxHealth / 4); + + private void UpdateHealButton() + { + _healButton.Disabled = + StageProducer.PlayerStats.Money < HealCost + || StageProducer.PlayerStats.CurrentHealth == StageProducer.PlayerStats.MaxHealth + || _hasHealed; + } + + private void TryHeal() + { + if ( + StageProducer.PlayerStats.Money < HealCost + || StageProducer.PlayerStats.CurrentHealth == StageProducer.PlayerStats.MaxHealth + || _hasHealed + ) + { + return; + } + + StageProducer.PlayerStats.Money -= HealCost; + _hasHealed = true; + _player.Heal(_healAmount); + UpdateHealButton(); + UpdateMoneyLabel(); } } diff --git a/Scenes/ShopScene/ShopScene.tscn b/Scenes/ShopScene/ShopScene.tscn index c6d905f7..5bfaee34 100644 --- a/Scenes/ShopScene/ShopScene.tscn +++ b/Scenes/ShopScene/ShopScene.tscn @@ -55,6 +55,7 @@ offset_bottom = 180.0 texture = ExtResource("2_dt33i") script = ExtResource("3_n34g6") -[node name="ShopUI" parent="." instance=ExtResource("8_2xatg")] +[node name="ShopUI" parent="." node_paths=PackedStringArray("_player") instance=ExtResource("8_2xatg")] offset_right = 640.0 offset_bottom = 360.0 +_player = NodePath("../PlayerMarker/PlayerPuppet") diff --git a/Scenes/ShopScene/ShopUI.tscn b/Scenes/ShopScene/ShopUI.tscn index 6a999efe..2aaca710 100644 --- a/Scenes/ShopScene/ShopUI.tscn +++ b/Scenes/ShopScene/ShopUI.tscn @@ -8,7 +8,7 @@ [ext_resource type="Script" uid="uid://cahjluc6v7ked" path="res://Scenes/UI/TitleScreen/Scripts/SceneChange.cs" id="5_w0f8r"] [ext_resource type="Texture2D" uid="uid://dyt1cvag13aik" path="res://SharedAssets/Money.png" id="6_tf865"] -[node name="ShopUI" type="Control" node_paths=PackedStringArray("_moneyLabel", "_exitButton", "_removalButton", "_noteGrid", "_relicGrid", "_confirmationPopup", "_confirmationButton", "_denyButton", "_descriptionLabel", "_removalPanel", "_possessionGrid", "_removalAcceptButton", "_cancelRemoveButton", "_removalCostLabel")] +[node name="ShopUI" type="Control" node_paths=PackedStringArray("_moneyLabel", "_exitButton", "_removalButton", "_healButton", "_noteGrid", "_relicGrid", "_confirmationPopup", "_confirmationButton", "_denyButton", "_descriptionLabel", "_removalPanel", "_possessionGrid", "_removalAcceptButton", "_cancelRemoveButton", "_removalCostLabel")] z_index = 2 layout_mode = 3 anchors_preset = 15 @@ -18,8 +18,9 @@ grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_bmt43") _moneyLabel = NodePath("MoneyContainer/MoneyFrame/MarginContainer/HBoxContainer/MoneyLabel") -_exitButton = NodePath("BottomPanel/DescBox/HBoxContainer/OptionsBG/OptionsMargin/OptionsBG/MarginContainer/VBoxContainer/Continue") -_removalButton = NodePath("BottomPanel/DescBox/HBoxContainer/OptionsBG/OptionsMargin/OptionsBG/MarginContainer/VBoxContainer/Removal") +_exitButton = NodePath("OptionsBG/OptionsMargin/OptionsBG/MarginContainer/VBoxContainer/Continue") +_removalButton = NodePath("OptionsBG/OptionsMargin/OptionsBG/MarginContainer/VBoxContainer/Removal") +_healButton = NodePath("OptionsBG/OptionsMargin/OptionsBG/MarginContainer/VBoxContainer/Heal") _noteGrid = NodePath("TopPanel/MarginContainer/VBoxContainer/NoteSelection/MarginContainer/NotesBox/CenterContainer/NotesGrid") _relicGrid = NodePath("TopPanel/MarginContainer/VBoxContainer/RelicSelection/MarginContainer/RelicsBox/CenterContainer/RelicsGrid") _confirmationPopup = NodePath("ConfirmPurchase") @@ -34,7 +35,7 @@ _removalCostLabel = NodePath("Removal/Panel/MarginContainer/VBoxContainer/Option [node name="TopPanel" type="NinePatchRect" parent="."] layout_mode = 0 -offset_right = 508.0 +offset_right = 463.0 offset_bottom = 211.0 texture = ExtResource("1_67his") patch_margin_left = 12 @@ -137,7 +138,7 @@ columns = 6 [node name="BottomPanel" type="NinePatchRect" parent="."] layout_mode = 0 offset_top = 211.0 -offset_right = 640.0 +offset_right = 463.0 offset_bottom = 360.0 texture = ExtResource("1_67his") patch_margin_left = 12 @@ -146,10 +147,12 @@ patch_margin_right = 12 patch_margin_bottom = 12 [node name="DescBox" type="MarginContainer" parent="BottomPanel"] -layout_mode = 2 -offset_right = 640.0 -offset_bottom = 149.0 -grow_vertical = 0 +layout_mode = 1 +anchors_preset = 15 +anchor_right = 1.0 +anchor_bottom = 1.0 +grow_horizontal = 2 +grow_vertical = 2 size_flags_vertical = 3 size_flags_stretch_ratio = 0.4 theme_override_constants/margin_left = 10 @@ -210,9 +213,18 @@ autowrap_mode = 2 clip_text = true text_overrun_behavior = 1 -[node name="OptionsBG" type="NinePatchRect" parent="BottomPanel/DescBox/HBoxContainer"] +[node name="OptionsBG" type="NinePatchRect" parent="."] self_modulate = Color(1, 1, 1, 0.75) -layout_mode = 2 +layout_mode = 1 +anchors_preset = 3 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +offset_left = -176.0 +offset_top = -179.0 +grow_horizontal = 0 +grow_vertical = 0 size_flags_horizontal = 3 size_flags_vertical = 3 size_flags_stretch_ratio = 0.39 @@ -222,7 +234,7 @@ patch_margin_top = 6 patch_margin_right = 6 patch_margin_bottom = 7 -[node name="OptionsMargin" type="MarginContainer" parent="BottomPanel/DescBox/HBoxContainer/OptionsBG"] +[node name="OptionsMargin" type="MarginContainer" parent="OptionsBG"] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -235,7 +247,7 @@ theme_override_constants/margin_top = 4 theme_override_constants/margin_right = 4 theme_override_constants/margin_bottom = 4 -[node name="OptionsBG" type="NinePatchRect" parent="BottomPanel/DescBox/HBoxContainer/OptionsBG/OptionsMargin"] +[node name="OptionsBG" type="NinePatchRect" parent="OptionsBG/OptionsMargin"] layout_mode = 2 texture = ExtResource("3_r34tc") patch_margin_left = 7 @@ -243,7 +255,7 @@ patch_margin_top = 7 patch_margin_right = 7 patch_margin_bottom = 7 -[node name="MarginContainer" type="MarginContainer" parent="BottomPanel/DescBox/HBoxContainer/OptionsBG/OptionsMargin/OptionsBG"] +[node name="MarginContainer" type="MarginContainer" parent="OptionsBG/OptionsMargin/OptionsBG"] layout_mode = 1 anchors_preset = 15 anchor_right = 1.0 @@ -251,21 +263,28 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 theme_override_constants/margin_left = 7 -theme_override_constants/margin_top = 7 +theme_override_constants/margin_top = 0 theme_override_constants/margin_right = 7 -[node name="VBoxContainer" type="VBoxContainer" parent="BottomPanel/DescBox/HBoxContainer/OptionsBG/OptionsMargin/OptionsBG/MarginContainer"] +[node name="VBoxContainer" type="VBoxContainer" parent="OptionsBG/OptionsMargin/OptionsBG/MarginContainer"] layout_mode = 2 alignment = 1 -[node name="Removal" type="Button" parent="BottomPanel/DescBox/HBoxContainer/OptionsBG/OptionsMargin/OptionsBG/MarginContainer/VBoxContainer"] +[node name="Removal" type="Button" parent="OptionsBG/OptionsMargin/OptionsBG/MarginContainer/VBoxContainer"] layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 4 theme = ExtResource("4_3vktw") text = "SHOP_REMOVAL" -[node name="Continue" type="Button" parent="BottomPanel/DescBox/HBoxContainer/OptionsBG/OptionsMargin/OptionsBG/MarginContainer/VBoxContainer"] +[node name="Heal" type="Button" parent="OptionsBG/OptionsMargin/OptionsBG/MarginContainer/VBoxContainer"] +layout_mode = 2 +size_flags_horizontal = 4 +size_flags_vertical = 4 +theme = ExtResource("4_3vktw") +text = "SHOP_HEAL" + +[node name="Continue" type="Button" parent="OptionsBG/OptionsMargin/OptionsBG/MarginContainer/VBoxContainer"] layout_mode = 2 size_flags_horizontal = 4 size_flags_vertical = 4 diff --git a/Scenes/UI/Assets/DisplayButtonTheme.tres b/Scenes/UI/Assets/DisplayButtonTheme.tres index 723e48bd..2d54291a 100644 --- a/Scenes/UI/Assets/DisplayButtonTheme.tres +++ b/Scenes/UI/Assets/DisplayButtonTheme.tres @@ -1,4 +1,4 @@ -[gd_resource type="Theme" load_steps=9 format=3 uid="uid://ckecvh3spna35"] +[gd_resource type="Theme" load_steps=15 format=3 uid="uid://ckecvh3spna35"] [ext_resource type="Texture2D" uid="uid://cegasble5d7uw" path="res://Scenes/UI/Assets/UI_Selection.png" id="1_2cv7a"] [ext_resource type="Texture2D" uid="uid://burj10os057fx" path="res://Scenes/UI/Assets/UI_CrystalFrameInset.png" id="1_cx0nq"] @@ -49,6 +49,51 @@ texture_margin_right = 6.0 texture_margin_bottom = 6.0 modulate_color = Color(2, 2, 2, 0.8) +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_m0rnd"] +texture = ExtResource("1_cx0nq") +texture_margin_left = 6.0 +texture_margin_top = 6.0 +texture_margin_right = 6.0 +texture_margin_bottom = 6.0 +modulate_color = Color(1, 1, 1, 0.8) + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_juphm"] +texture = ExtResource("1_2cv7a") +texture_margin_left = 20.0 +texture_margin_top = 20.0 +texture_margin_right = 20.0 +texture_margin_bottom = 20.0 + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_nysmq"] +texture = ExtResource("1_cx0nq") +texture_margin_left = 6.0 +texture_margin_top = 6.0 +texture_margin_right = 6.0 +texture_margin_bottom = 6.0 + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_p2uoo"] +texture = ExtResource("1_cx0nq") +texture_margin_left = 6.0 +texture_margin_top = 6.0 +texture_margin_right = 6.0 +texture_margin_bottom = 6.0 + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_5a8h5"] +texture = ExtResource("1_cx0nq") +texture_margin_left = 6.0 +texture_margin_top = 6.0 +texture_margin_right = 6.0 +texture_margin_bottom = 6.0 +modulate_color = Color(1, 1, 1, 0.8) + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_bo0wt"] +texture = ExtResource("1_cx0nq") +texture_margin_left = 6.0 +texture_margin_top = 6.0 +texture_margin_right = 6.0 +texture_margin_bottom = 6.0 +modulate_color = Color(1, 1, 1, 0.8) + [resource] Button/styles/disabled = SubResource("StyleBoxTexture_7041q") Button/styles/focus = SubResource("StyleBoxTexture_2t3ig") @@ -56,3 +101,10 @@ Button/styles/hover = SubResource("StyleBoxTexture_qs7pc") Button/styles/hover_pressed = SubResource("StyleBoxTexture_yqny2") Button/styles/normal = SubResource("StyleBoxTexture_2cv7a") Button/styles/pressed = SubResource("StyleBoxTexture_5plxl") +nopress/base_type = &"Button" +nopress/styles/disabled = SubResource("StyleBoxTexture_m0rnd") +nopress/styles/focus = SubResource("StyleBoxTexture_juphm") +nopress/styles/hover = SubResource("StyleBoxTexture_nysmq") +nopress/styles/hover_pressed = SubResource("StyleBoxTexture_p2uoo") +nopress/styles/normal = SubResource("StyleBoxTexture_5a8h5") +nopress/styles/pressed = SubResource("StyleBoxTexture_bo0wt") diff --git a/Scenes/UI/Assets/GeneralTheme.tres b/Scenes/UI/Assets/GeneralTheme.tres index cdbaff2f..3b35e005 100644 --- a/Scenes/UI/Assets/GeneralTheme.tres +++ b/Scenes/UI/Assets/GeneralTheme.tres @@ -1,8 +1,9 @@ -[gd_resource type="Theme" load_steps=12 format=3 uid="uid://d37e3tpsbxwak"] +[gd_resource type="Theme" load_steps=22 format=3 uid="uid://d37e3tpsbxwak"] [ext_resource type="Texture2D" uid="uid://dj0nfgig1kd5l" path="res://Scenes/UI/Assets/3DButton.png" id="1_nsq46"] [ext_resource type="Texture2D" uid="uid://cegasble5d7uw" path="res://Scenes/UI/Assets/UI_Selection.png" id="2_d2tmw"] [ext_resource type="Texture2D" uid="uid://b5jfffpaextmp" path="res://Scenes/UI/Assets/3DButtonPressed.png" id="2_i0sgk"] +[ext_resource type="Texture2D" uid="uid://djd6iw2g84bba" path="res://Scenes/UI/Assets/UI_CenterFrame.png" id="4_fcxv1"] [sub_resource type="StyleBoxTexture" id="StyleBoxTexture_agpvv"] texture = ExtResource("1_nsq46") @@ -51,13 +52,90 @@ texture_margin_right = 9.0 texture_margin_bottom = 13.0 modulate_color = Color(0.801938, 0.00206308, 0.972656, 0.8) +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_fcxv1"] +texture = ExtResource("2_d2tmw") +texture_margin_left = 20.0 +texture_margin_top = 20.0 +texture_margin_right = 20.0 +texture_margin_bottom = 20.0 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_o3ngu"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0.584, 0.004, 0.725, 0.4) +corner_radius_top_left = 4 +corner_radius_top_right = 4 +corner_radius_bottom_right = 4 +corner_radius_bottom_left = 4 +corner_detail = 6 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_x6kye"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0.754963, 0.0147022, 0.93338, 0.9) +corner_radius_top_left = 4 +corner_radius_top_right = 4 +corner_radius_bottom_right = 4 +corner_radius_bottom_left = 4 +corner_detail = 6 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_gstb8"] +content_margin_left = 4.0 +content_margin_top = 4.0 +content_margin_right = 4.0 +content_margin_bottom = 4.0 +bg_color = Color(0.89, 0.8, 1, 0.2) +corner_radius_top_left = 4 +corner_radius_top_right = 4 +corner_radius_bottom_right = 4 +corner_radius_bottom_left = 4 +corner_detail = 6 + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_a72e7"] +bg_color = Color(1, 1, 1, 0.25) + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_o3ngu"] +texture = ExtResource("4_fcxv1") +texture_margin_left = 6.0 +texture_margin_top = 6.0 +texture_margin_right = 6.0 +texture_margin_bottom = 6.0 + +[sub_resource type="CompressedTexture2D" id="CompressedTexture2D_fcxv1"] +load_path = "res://.godot/imported/UI_Selection.png-8c5709c8210ccab47a36d274ec2686c0.ctex" + +[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_a72e7"] +texture = SubResource("CompressedTexture2D_fcxv1") +texture_margin_left = 20.0 +texture_margin_top = 21.0 +texture_margin_right = 20.0 +expand_margin_left = 1.0 +expand_margin_top = 2.0 +expand_margin_right = 1.0 +expand_margin_bottom = 2.0 +region_rect = Rect2(0, 0, 98, 20) + +[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_fcxv1"] +content_margin_left = 10.0 +content_margin_top = 4.0 +content_margin_right = 10.0 +content_margin_bottom = 4.0 +bg_color = Color(0.039, 0.012, 0.149, 0.75) +border_color = Color(0.175, 0.175, 0.175, 1) +corner_detail = 1 + [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_crcjn"] content_margin_left = 10.0 content_margin_top = 4.0 content_margin_right = 10.0 content_margin_bottom = 4.0 -bg_color = Color(0.1, 0.1, 0.1, 1) +bg_color = Color(0.0392157, 0.0117647, 0.145098, 1) border_width_top = 2 +border_color = Color(0.890196, 0.8, 1, 1) corner_detail = 1 [sub_resource type="StyleBoxFlat" id="StyleBoxFlat_gxcar"] @@ -65,9 +143,7 @@ content_margin_left = 10.0 content_margin_top = 4.0 content_margin_right = 10.0 content_margin_bottom = 4.0 -bg_color = Color(0, 0, 0, 0.8) -border_width_left = 1 -border_width_right = 1 +bg_color = Color(0.039, 0.012, 0.149, 0.75) border_color = Color(0.175, 0.175, 0.175, 1) corner_detail = 1 @@ -91,5 +167,13 @@ Button/styles/hover = SubResource("StyleBoxTexture_crcjn") Button/styles/hover_pressed = SubResource("StyleBoxTexture_gxcar") Button/styles/normal = SubResource("StyleBoxTexture_a6bcw") Button/styles/pressed = SubResource("StyleBoxTexture_3eh60") +CheckBox/styles/focus = SubResource("StyleBoxTexture_fcxv1") +HSlider/styles/grabber_area = SubResource("StyleBoxFlat_o3ngu") +HSlider/styles/grabber_area_highlight = SubResource("StyleBoxFlat_x6kye") +HSlider/styles/slider = SubResource("StyleBoxFlat_gstb8") +PopupMenu/styles/hover = SubResource("StyleBoxFlat_a72e7") +PopupMenu/styles/panel = SubResource("StyleBoxTexture_o3ngu") +TabContainer/styles/tab_focus = SubResource("StyleBoxTexture_a72e7") +TabContainer/styles/tab_hovered = SubResource("StyleBoxFlat_fcxv1") TabContainer/styles/tab_selected = SubResource("StyleBoxFlat_crcjn") TabContainer/styles/tab_unselected = SubResource("StyleBoxFlat_gxcar") diff --git a/Scenes/UI/EndScreen.tscn b/Scenes/UI/EndScreen.tscn index 040778e1..946b85b1 100644 --- a/Scenes/UI/EndScreen.tscn +++ b/Scenes/UI/EndScreen.tscn @@ -5,10 +5,11 @@ [ext_resource type="Texture2D" uid="uid://djd6iw2g84bba" path="res://Scenes/UI/Assets/UI_CenterFrame.png" id="3_aiuvw"] [ext_resource type="Theme" uid="uid://d37e3tpsbxwak" path="res://Scenes/UI/Assets/GeneralTheme.tres" id="4_1vt77"] -[node name="CanvasLayer" type="CanvasLayer" node_paths=PackedStringArray("_buttons", "TopLabel")] +[node name="CanvasLayer" type="CanvasLayer" node_paths=PackedStringArray("_buttons", "_creditsCont", "TopLabel")] process_mode = 3 script = ExtResource("1_37m3y") -_buttons = [NodePath("MarginContainer2/MarginContainer/VBoxContainer/MarginContainer/Restart"), NodePath("MarginContainer2/MarginContainer/VBoxContainer/MarginContainer2/Title"), NodePath("MarginContainer2/MarginContainer/VBoxContainer/MarginContainer3/Quit")] +_buttons = [NodePath("MarginContainer2/MarginContainer/VBoxContainer/MarginContainer/Restart"), NodePath("MarginContainer2/MarginContainer/VBoxContainer/MarginContainer2/Title"), NodePath("MarginContainer2/MarginContainer/VBoxContainer/MarginContainer3/Quit"), NodePath("MarginContainer2/MarginContainer/VBoxContainer/MarginContainer5/Credits")] +_creditsCont = NodePath("MarginContainer2/MarginContainer/VBoxContainer/MarginContainer5") TopLabel = NodePath("MarginContainer2/MarginContainer/VBoxContainer/TopLabel") [node name="Background" type="NinePatchRect" parent="."] @@ -49,7 +50,6 @@ theme_override_constants/margin_bottom = 10 [node name="VBoxContainer" type="VBoxContainer" parent="MarginContainer2/MarginContainer"] layout_mode = 2 -theme_override_constants/separation = 4 [node name="TopLabel" type="Label" parent="MarginContainer2/MarginContainer/VBoxContainer"] unique_name_in_owner = true @@ -71,29 +71,39 @@ size_flags_vertical = 3 layout_mode = 2 size_flags_vertical = 3 theme_override_constants/margin_left = 20 -theme_override_constants/margin_top = 20 +theme_override_constants/margin_top = 10 theme_override_constants/margin_right = 20 -theme_override_constants/margin_bottom = 20 +theme_override_constants/margin_bottom = 10 [node name="Restart" type="Button" parent="MarginContainer2/MarginContainer/VBoxContainer/MarginContainer"] layout_mode = 2 focus_neighbor_top = NodePath("../../MarginContainer3/Quit") -focus_neighbor_bottom = NodePath("../../MarginContainer2/Title") theme = ExtResource("4_1vt77") text = "END_SCREEN_RESTART" +[node name="MarginContainer5" type="MarginContainer" parent="MarginContainer2/MarginContainer/VBoxContainer"] +layout_mode = 2 +size_flags_vertical = 3 +theme_override_constants/margin_left = 20 +theme_override_constants/margin_top = 10 +theme_override_constants/margin_right = 20 +theme_override_constants/margin_bottom = 10 + +[node name="Credits" type="Button" parent="MarginContainer2/MarginContainer/VBoxContainer/MarginContainer5"] +layout_mode = 2 +theme = ExtResource("4_1vt77") +text = "CREDITS" + [node name="MarginContainer2" type="MarginContainer" parent="MarginContainer2/MarginContainer/VBoxContainer"] layout_mode = 2 size_flags_vertical = 3 theme_override_constants/margin_left = 20 -theme_override_constants/margin_top = 20 +theme_override_constants/margin_top = 10 theme_override_constants/margin_right = 20 -theme_override_constants/margin_bottom = 20 +theme_override_constants/margin_bottom = 10 [node name="Title" type="Button" parent="MarginContainer2/MarginContainer/VBoxContainer/MarginContainer2"] layout_mode = 2 -focus_neighbor_top = NodePath("../../MarginContainer/Restart") -focus_neighbor_bottom = NodePath("../../MarginContainer3/Quit") theme = ExtResource("4_1vt77") text = "ESCAPE_MENU_TITLE" @@ -101,13 +111,12 @@ text = "ESCAPE_MENU_TITLE" layout_mode = 2 size_flags_vertical = 3 theme_override_constants/margin_left = 20 -theme_override_constants/margin_top = 20 +theme_override_constants/margin_top = 10 theme_override_constants/margin_right = 20 -theme_override_constants/margin_bottom = 20 +theme_override_constants/margin_bottom = 10 [node name="Quit" type="Button" parent="MarginContainer2/MarginContainer/VBoxContainer/MarginContainer3"] layout_mode = 2 -focus_neighbor_top = NodePath("../../MarginContainer2/Title") focus_neighbor_bottom = NodePath("../../MarginContainer/Restart") theme = ExtResource("4_1vt77") text = "TITLE_QUIT" diff --git a/Scenes/UI/Inventory.tscn b/Scenes/UI/Inventory.tscn index 7fa6e6ab..123d27ab 100644 --- a/Scenes/UI/Inventory.tscn +++ b/Scenes/UI/Inventory.tscn @@ -1,7 +1,8 @@ -[gd_scene load_steps=6 format=3 uid="uid://be6fb2sr5i515"] +[gd_scene load_steps=7 format=3 uid="uid://be6fb2sr5i515"] [ext_resource type="Script" uid="uid://kqa0ovjph1hd" path="res://Scenes/UI/Scripts/Inventory.cs" id="1_8rcwd"] [ext_resource type="Texture2D" uid="uid://ck16vyh1q68ri" path="res://Scenes/UI/Assets/UI_ForestBackground.png" id="2_s6pj7"] +[ext_resource type="Theme" uid="uid://d37e3tpsbxwak" path="res://Scenes/UI/Assets/GeneralTheme.tres" id="3_e51wb"] [ext_resource type="Texture2D" uid="uid://8u3xvcma81d" path="res://Scenes/UI/Assets/UI_CrystalFrame.png" id="3_s6pj7"] [ext_resource type="Texture2D" uid="uid://burj10os057fx" path="res://Scenes/UI/Assets/UI_CrystalFrameInset.png" id="4_b6trj"] [ext_resource type="Texture2D" uid="uid://dyt1cvag13aik" path="res://SharedAssets/Money.png" id="5_si1x5"] @@ -53,6 +54,7 @@ layout_mode = 2 [node name="Tabs" type="TabContainer" parent="MarginContainer/InvenVBox"] layout_mode = 2 size_flags_vertical = 3 +theme = ExtResource("3_e51wb") current_tab = 0 clip_tabs = false diff --git a/Scenes/UI/Options/Credits.tscn b/Scenes/UI/Options/Credits.tscn index 53deb38c..1e92ca02 100644 --- a/Scenes/UI/Options/Credits.tscn +++ b/Scenes/UI/Options/Credits.tscn @@ -6,6 +6,7 @@ [node name="Credits" type="Control" node_paths=PackedStringArray("CreditsText", "_returnButton")] process_mode = 3 +z_index = 20 layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -13,8 +14,8 @@ anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 script = ExtResource("1_n36fd") -CreditsText = NodePath("Node2D/Label") -ScrollSpeed = 24.0 +CreditsText = NodePath("Node2D") +ScrollSpeed = 30.0 RestartPositionY = 400.0 _returnButton = NodePath("Return Button") @@ -28,29 +29,196 @@ offset_top = 5.0 offset_right = 422.851 offset_bottom = 185.0 -[node name="Node2D" type="Node2D" parent="."] +[node name="Node2D" type="VBoxContainer" parent="."] +layout_mode = 1 +anchors_preset = 5 +anchor_left = 0.5 +anchor_right = 0.5 +offset_left = -160.5 +offset_right = 160.5 +offset_bottom = 939.0 +grow_horizontal = 2 +theme_override_constants/separation = 6 -[node name="Label" type="Label" parent="Node2D"] -offset_left = 217.0 -offset_top = -3.0 -offset_right = 467.0 -offset_bottom = 410.0 -text = "Credits - -Programmers - Jarod Spanger: Project Lead +[node name="Label2" type="Label" parent="Node2D"] +layout_mode = 2 +text = "CREDITS" +horizontal_alignment = 1 + +[node name="Label9" type="Label" parent="Node2D"] +layout_mode = 2 +horizontal_alignment = 1 + +[node name="Label3" type="Label" parent="Node2D"] +layout_mode = 2 +text = "CREDITS_LEAD" +horizontal_alignment = 1 + +[node name="Label4" type="Label" parent="Node2D"] +layout_mode = 2 +text = "Jarod Spangler +" +horizontal_alignment = 1 + +[node name="Label5" type="Label" parent="Node2D"] +layout_mode = 2 +text = "CREDITS_DESIGN" +horizontal_alignment = 1 + +[node name="Label6" type="Label" parent="Node2D"] +layout_mode = 2 +text = "Connor Lowe +" +horizontal_alignment = 1 + +[node name="Label7" type="Label" parent="Node2D"] +layout_mode = 2 +text = "CREDITS_TOOLS" +horizontal_alignment = 1 + +[node name="Label8" type="Label" parent="Node2D"] +layout_mode = 2 +text = "Thomas Wessel +" +horizontal_alignment = 1 + +[node name="Label10" type="Label" parent="Node2D"] +layout_mode = 2 +text = "CREDITS_PROGRAMMING" +horizontal_alignment = 1 + +[node name="Label11" type="Label" parent="Node2D"] +layout_mode = 2 +text = "Raul Mojarro +" +horizontal_alignment = 1 + +[node name="Label12" type="Label" parent="Node2D"] +layout_mode = 2 +text = "CREDITS_ART" +horizontal_alignment = 1 + +[node name="Label13" type="Label" parent="Node2D"] +layout_mode = 2 +text = "Evelyn Fu +" +horizontal_alignment = 1 + +[node name="Label16" type="Label" parent="Node2D"] +layout_mode = 2 +text = "CREDITS_MUSIC" +horizontal_alignment = 1 + +[node name="Label17" type="Label" parent="Node2D"] +layout_mode = 2 +text = "Sam Meyer +Echolane +" +horizontal_alignment = 1 + +[node name="Label14" type="Label" parent="Node2D"] +layout_mode = 2 +text = "CREDITS_ADDITIONAL_ART" +horizontal_alignment = 1 + +[node name="Label15" type="Label" parent="Node2D"] +layout_mode = 2 +text = "Ares Atlas +Emily Wen +Norman Zhu +Patrick Galang +Zeke Davidson +Lyssa Li +Ashley Knapp +Nolan Jensen +Mimi Fournier +Kevin Paw +Brendan Trieu +Jarod Spangler Connor Lowe -Raul Mojarro -Thomas Wessel +" +horizontal_alignment = 1 + +[node name="Label18" type="Label" parent="Node2D"] +layout_mode = 2 +text = "CREDITS_ADDITIONAL_HELP" +horizontal_alignment = 1 + +[node name="Label19" type="Label" parent="Node2D"] +layout_mode = 2 +text = "Jaxon Ruiz +Marco Ogaz-Vega +Patrick Hu Michael Quinn +Reese Garcia" +horizontal_alignment = 1 -Artists -Ares Atlas -Evelyn Fu -Emily Wen +[node name="Label20" type="Label" parent="Node2D"] +layout_mode = 2 +text = "CREDITS_OTHER_PLAYTESTERS" +horizontal_alignment = 1 + +[node name="Label22" type="Label" parent="Node2D"] +layout_mode = 2 +horizontal_alignment = 1 + +[node name="Label21" type="Label" parent="Node2D"] +layout_mode = 2 +text = "CREDITS_SPECIAL_THANKS" +horizontal_alignment = 1 + +[node name="Label23" type="Label" parent="Node2D"] +layout_mode = 2 +text = "Tyler Coleman +Graeme Devine" +horizontal_alignment = 1 + +[node name="Label24" type="Label" parent="Node2D"] +layout_mode = 2 +text = "CREDITS_THANKS_PLAYERS" +horizontal_alignment = 1 -Sound -Sam Meyer: Composer" +[node name="Label" type="Label" parent="Node2D"] +layout_mode = 2 +text = " +Crystal Cave - Cynicmusic +Spooky Forest - Sam Meyer +Paint the Town Neon Red - Sam Meyer +gameMusic - Magntron +Piano loops 181 - josefpres +Dark loops 220 - josefpres +Mute bass 002 - josefpres +District Four - Kevin MacLeod +Funk Engine - Echolane +We're Finally Landing - HOME +Punk - Mere Notilde +There It Is - Kevin Macleod +Data - Karl Casey +Jungle-ish beat for video games - IHateTuesdays +Bass Stories - Pixabay +Mysterious Ambience - Cynicmusic +Resonance - HOME +Frost Waltz - Kevin MacLeod +Ether Disco - Kevin MacLeod +Jammin' Forest - Sam Meyer +" +horizontal_alignment = 1 + +[node name="HSeparator" type="HSeparator" parent="Node2D"] +visible = false +layout_mode = 2 +theme_override_constants/separation = 18 + +[node name="Label25" type="Label" parent="Node2D"] +visible = false +layout_mode = 2 +text = "Emily Wen" +horizontal_alignment = 1 + +[node name="Label26" type="Label" parent="Node2D"] +visible = false +layout_mode = 2 +text = "Ares Atlas" horizontal_alignment = 1 [node name="Return Button" type="Button" parent="."] diff --git a/Scenes/UI/Options/HowToPlay.tscn b/Scenes/UI/Options/HowToPlay.tscn index 1883ffcf..04ff7993 100644 --- a/Scenes/UI/Options/HowToPlay.tscn +++ b/Scenes/UI/Options/HowToPlay.tscn @@ -1,13 +1,13 @@ [gd_scene load_steps=11 format=3 uid="uid://cavxn51vwbew3"] [ext_resource type="Script" uid="uid://chu2uvshtv2vv" path="res://Scenes/UI/Options/Scripts/HowToPlay.cs" id="1_kqayr"] -[ext_resource type="Texture2D" uid="uid://xtygvpk7s8e4" path="res://SharedAssets/NoteArrow_Black_Outline.png" id="2_4i384"] [ext_resource type="Texture2D" uid="uid://ck16vyh1q68ri" path="res://Scenes/UI/Assets/UI_ForestBackground.png" id="2_ma418"] [ext_resource type="Texture2D" uid="uid://dp3vkn65j4o3s" path="res://Scenes/UI/Assets/HowToPlay_Combo_Bar.png" id="3_7006y"] [ext_resource type="Theme" uid="uid://d37e3tpsbxwak" path="res://Scenes/UI/Assets/GeneralTheme.tres" id="3_xqve7"] [ext_resource type="Texture2D" uid="uid://cr82n7aojboaw" path="res://Scenes/UI/Assets/UI_CenterFrameLight.png" id="4_4vscx"] [ext_resource type="Texture2D" uid="uid://caw70lr5e1yiq" path="res://Classes/Notes/Assets/Note_PlayerDouble.png" id="4_m6low"] [ext_resource type="Texture2D" uid="uid://cdf3g3174du4r" path="res://Classes/Notes/Assets/Note_PlayerHeal.png" id="5_8kiq2"] +[ext_resource type="Texture2D" uid="uid://coav3xvksq4jy" path="res://Scenes/NoteManager/Assets/NoteWIthOutline.png" id="5_xqve7"] [ext_resource type="Texture2D" uid="uid://c3chrsxrulapd" path="res://Classes/Notes/Assets/Note_PlayerBasic.png" id="6_uonw3"] [ext_resource type="Texture2D" uid="uid://dg0lmu0pip4lr" path="res://Classes/Notes/Assets/Note_PlayerVampire.png" id="7_rbdrm"] @@ -81,22 +81,19 @@ patch_margin_bottom = 5 [node name="Left" type="Sprite2D" parent="Control/MarginContainer"] position = Vector2(27.0001, 62) -rotation = -3.14159 -texture = ExtResource("2_4i384") +texture = ExtResource("5_xqve7") [node name="Up" type="Sprite2D" parent="Control/MarginContainer"] position = Vector2(27.0001, 102) -rotation = -1.5708 -texture = ExtResource("2_4i384") +texture = ExtResource("5_xqve7") [node name="Down" type="Sprite2D" parent="Control/MarginContainer"] position = Vector2(27.0001, 145) -rotation = 1.5708 -texture = ExtResource("2_4i384") +texture = ExtResource("5_xqve7") [node name="Right" type="Sprite2D" parent="Control/MarginContainer"] position = Vector2(27.0001, 186) -texture = ExtResource("2_4i384") +texture = ExtResource("5_xqve7") [node name="Label" type="Label" parent="Control/MarginContainer"] layout_mode = 2 @@ -169,22 +166,19 @@ text = "HOW_TO_PLAY_BLOCK3" [node name="Left" type="Sprite2D" parent="Control/MarginContainer3"] position = Vector2(27.0001, 62) -rotation = -3.14159 -texture = ExtResource("2_4i384") +texture = ExtResource("5_xqve7") [node name="Up" type="Sprite2D" parent="Control/MarginContainer3"] position = Vector2(27.0001, 102) -rotation = -1.5708 -texture = ExtResource("2_4i384") +texture = ExtResource("5_xqve7") [node name="Down" type="Sprite2D" parent="Control/MarginContainer3"] position = Vector2(27.0001, 145) -rotation = 1.5708 -texture = ExtResource("2_4i384") +texture = ExtResource("5_xqve7") [node name="Right" type="Sprite2D" parent="Control/MarginContainer3"] position = Vector2(27.0001, 186) -texture = ExtResource("2_4i384") +texture = ExtResource("5_xqve7") [node name="DoubleNote" type="Sprite2D" parent="Control/MarginContainer3"] position = Vector2(27, 60) diff --git a/Scenes/UI/Options/OptionsMenu.tscn b/Scenes/UI/Options/OptionsMenu.tscn index 7ae34a3c..48e8fd10 100644 --- a/Scenes/UI/Options/OptionsMenu.tscn +++ b/Scenes/UI/Options/OptionsMenu.tscn @@ -6,7 +6,7 @@ [ext_resource type="Texture2D" uid="uid://djd6iw2g84bba" path="res://Scenes/UI/Assets/UI_CenterFrame.png" id="3_qydxi"] [ext_resource type="Theme" uid="uid://d37e3tpsbxwak" path="res://Scenes/UI/Assets/GeneralTheme.tres" id="4_r616m"] -[node name="OptionsMenu" type="CanvasLayer" node_paths=PackedStringArray("_focused", "_volumeSlider", "_closeButton", "_controlsButton", "_highContrastToggle", "_howToPlayButton")] +[node name="OptionsMenu" type="CanvasLayer" node_paths=PackedStringArray("_focused", "_volumeSlider", "_closeButton", "_controlsButton", "_highContrastToggle", "_howToPlayButton", "_titleScreenOptions", "_noteSpriteToggle", "_verticalScrollToggle")] process_mode = 3 script = ExtResource("1_yjq7i") _focused = NodePath("Control/CenterContainer/MarginContainer/MarginContainer/VBoxContainer/HBoxContainer/CheckBox") @@ -15,6 +15,9 @@ _closeButton = NodePath("Control/CenterContainer/MarginContainer/MarginContainer _controlsButton = NodePath("Control/CenterContainer/MarginContainer/MarginContainer/VBoxContainer/ControlsButton") _highContrastToggle = NodePath("Control/CenterContainer/MarginContainer/MarginContainer/VBoxContainer/HBoxContainer/CheckBox") _howToPlayButton = NodePath("Control/CenterContainer/MarginContainer/MarginContainer/VBoxContainer/HowToPlayButton") +_titleScreenOptions = NodePath("Control/MarginContainer2") +_noteSpriteToggle = NodePath("Control/MarginContainer2/CenterContainer/MarginContainer/VBoxContainer/NoteCheckbox") +_verticalScrollToggle = NodePath("Control/MarginContainer2/CenterContainer/MarginContainer/VBoxContainer/VerticalScroll") [node name="Control" type="Control" parent="."] layout_mode = 3 @@ -39,6 +42,77 @@ patch_margin_top = 100 patch_margin_right = 105 patch_margin_bottom = 100 +[node name="MarginContainer2" type="MarginContainer" parent="Control"] +layout_mode = 1 +offset_right = 162.0 +offset_bottom = 105.0 +size_flags_horizontal = 0 +size_flags_vertical = 0 +theme_override_constants/margin_left = 7 +theme_override_constants/margin_top = 7 + +[node name="OptionsBackground" type="NinePatchRect" parent="Control/MarginContainer2"] +layout_mode = 2 +texture = ExtResource("3_qydxi") +patch_margin_left = 5 +patch_margin_top = 5 +patch_margin_right = 5 +patch_margin_bottom = 5 + +[node name="MoreOpaque" type="NinePatchRect" parent="Control/MarginContainer2"] +layout_mode = 2 +texture = ExtResource("3_qydxi") +patch_margin_left = 5 +patch_margin_top = 5 +patch_margin_right = 5 +patch_margin_bottom = 5 + +[node name="MoreMoreOpaque" type="NinePatchRect" parent="Control/MarginContainer2"] +layout_mode = 2 +texture = ExtResource("3_qydxi") +patch_margin_left = 5 +patch_margin_top = 5 +patch_margin_right = 5 +patch_margin_bottom = 5 + +[node name="CenterContainer" type="CenterContainer" parent="Control/MarginContainer2"] +layout_mode = 2 + +[node name="MarginContainer" type="MarginContainer" parent="Control/MarginContainer2/CenterContainer"] +layout_mode = 2 +size_flags_horizontal = 0 +theme_override_constants/margin_left = 7 +theme_override_constants/margin_top = 7 +theme_override_constants/margin_right = 7 +theme_override_constants/margin_bottom = 7 + +[node name="VBoxContainer" type="VBoxContainer" parent="Control/MarginContainer2/CenterContainer/MarginContainer"] +layout_mode = 2 +size_flags_horizontal = 0 +size_flags_vertical = 0 + +[node name="NoteLabel" type="Label" parent="Control/MarginContainer2/CenterContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "OPTIONS_NOTE_SWAP" +horizontal_alignment = 1 + +[node name="NoteCheckbox" type="CheckBox" parent="Control/MarginContainer2/CenterContainer/MarginContainer/VBoxContainer"] +self_modulate = Color(2, 3, 2, 1) +layout_mode = 2 +size_flags_horizontal = 4 +focus_neighbor_right = NodePath("../../../../../CenterContainer/MarginContainer/MarginContainer/VBoxContainer/HBoxContainer/CheckBox") + +[node name="VerticalLabel" type="Label" parent="Control/MarginContainer2/CenterContainer/MarginContainer/VBoxContainer"] +layout_mode = 2 +text = "OPTIONS_VERT_SCROLL" +horizontal_alignment = 1 + +[node name="VerticalScroll" type="CheckBox" parent="Control/MarginContainer2/CenterContainer/MarginContainer/VBoxContainer"] +modulate = Color(2, 3, 2, 1) +layout_mode = 2 +size_flags_horizontal = 4 +focus_neighbor_right = NodePath("../../../../../CenterContainer/MarginContainer/MarginContainer/VBoxContainer/HBoxContainer/CheckBox") + [node name="CenterContainer" type="CenterContainer" parent="Control"] layout_mode = 1 anchors_preset = 15 @@ -46,6 +120,7 @@ anchor_right = 1.0 anchor_bottom = 1.0 grow_horizontal = 2 grow_vertical = 2 +mouse_filter = 2 [node name="MarginContainer" type="MarginContainer" parent="Control/CenterContainer"] layout_mode = 2 @@ -87,6 +162,7 @@ alignment = 1 [node name="CheckBox" type="CheckBox" parent="Control/CenterContainer/MarginContainer/MarginContainer/VBoxContainer/HBoxContainer"] self_modulate = Color(2, 3, 2, 1) layout_mode = 2 +focus_neighbor_left = NodePath("../../../../../../MarginContainer2/CenterContainer/MarginContainer/VBoxContainer/NoteCheckbox") [node name="Label" type="Label" parent="Control/CenterContainer/MarginContainer/MarginContainer/VBoxContainer/HBoxContainer"] layout_mode = 2 @@ -106,6 +182,7 @@ horizontal_alignment = 1 [node name="Volume" type="HSlider" parent="Control/CenterContainer/MarginContainer/MarginContainer/VBoxContainer/Container"] layout_mode = 2 tooltip_text = "OPTIONS_VOLUME_LABEL" +theme = ExtResource("4_r616m") max_value = 1.0 step = 0.01 value = 1.0 diff --git a/Scenes/UI/Options/Scripts/CreditsMenu.cs b/Scenes/UI/Options/Scripts/CreditsMenu.cs index a634515d..474625b9 100644 --- a/Scenes/UI/Options/Scripts/CreditsMenu.cs +++ b/Scenes/UI/Options/Scripts/CreditsMenu.cs @@ -7,13 +7,13 @@ public partial class CreditsMenu : Control, IFocusableMenu public static readonly string LoadPath = "res://Scenes/UI/Options/Credits.tscn"; [Export] - public Label CreditsText; + public Control CreditsText; [Export] - public float ScrollSpeed = 50f; + public float ScrollSpeed = 60f; - public float FadeStartY = 0; - public float FadeEndY = -400f; + public float FadeStartY = -500f; + public float FadeEndY = -1200f; [Export] public float RestartPositionY = 800f; @@ -32,6 +32,7 @@ public override void _Ready() } _returnButton.Pressed += ReturnToPrev; _returnButton.GrabFocus(); + BgAudioPlayer.LiveInstance.ResumeLevelMusic(); } public void ResumeFocus() diff --git a/Scenes/UI/Options/Scripts/OptionsMenu.cs b/Scenes/UI/Options/Scripts/OptionsMenu.cs index b709adc5..3e8905dd 100644 --- a/Scenes/UI/Options/Scripts/OptionsMenu.cs +++ b/Scenes/UI/Options/Scripts/OptionsMenu.cs @@ -26,6 +26,15 @@ public partial class OptionsMenu : CanvasLayer, IFocusableMenu [Export] private Button _howToPlayButton; + [Export] + private MarginContainer _titleScreenOptions; + + [Export] + private CheckBox _noteSpriteToggle; + + [Export] + private CheckBox _verticalScrollToggle; + private const float MinVolumeVal = 0f; public override void _Ready() @@ -46,6 +55,14 @@ public override void _Ready() _controlsButton.Pressed += OpenControls; _highContrastToggle.Toggled += HighContrastChanged; _howToPlayButton.Pressed += OpenHowToPlay; + + _titleScreenOptions.Visible = + !StageProducer.IsInitialized + && !SaveSystem.GetConfigValue(SaveSystem.ConfigSettings.FirstTime).AsBool(); + _noteSpriteToggle.ButtonPressed = InputHandler.UseArrows; + _noteSpriteToggle.Toggled += ArrowSpritesToggled; + _verticalScrollToggle.ButtonPressed = BattleDirector.VerticalScroll; + _verticalScrollToggle.Toggled += VerticalScrollToggled; } public override void _Input(InputEvent @event) @@ -112,6 +129,18 @@ public static void ChangeVolume(double value) ); } + private void ArrowSpritesToggled(bool value) + { + InputHandler.UseArrows = value; + SaveSystem.UpdateConfig(SaveSystem.ConfigSettings.TypeIsArrow, value); + } + + private void VerticalScrollToggled(bool value) + { + BattleDirector.VerticalScroll = value; + SaveSystem.UpdateConfig(SaveSystem.ConfigSettings.VerticalScroll, value); + } + private void HighContrastChanged(bool toggled) { StageProducer.ContrastFilter.Visible = toggled; diff --git a/Scenes/UI/Remapping/ControlSettings.cs b/Scenes/UI/Remapping/ControlSettings.cs index b5714900..5ae9746c 100644 --- a/Scenes/UI/Remapping/ControlSettings.cs +++ b/Scenes/UI/Remapping/ControlSettings.cs @@ -39,6 +39,32 @@ public partial class ControlSettings : Node2D, IFocusableMenu private JoyButton _tempJoyButton; private string _chosenKey = ""; + [Export] + private Sprite2D _keyboardUpSprite; + + [Export] + private Sprite2D _keyboardDownSprite; + + [Export] + private Sprite2D _keyboardLeftSprite; + + [Export] + private Sprite2D _keyboardRightSprite; + + [Export] + private Sprite2D _controllerUpSprite; + + [Export] + private Sprite2D _controllerDownSprite; + + [Export] + private Sprite2D _controllerLeftSprite; + + [Export] + private Sprite2D _controllerRightSprite; + + private static readonly string NotePath = "res://Scenes/NoteManager/Assets/"; + //These just don't play well with inputs private readonly HashSet _invalidKeys = new HashSet { @@ -137,6 +163,7 @@ public override void _Ready() _closeButton.Pressed += ReturnToPrev; InitInputSprites(); + InitNoteSprites(); } private void InitInputSprites() @@ -154,6 +181,27 @@ private void InitInputSprites() UpdateKeySprites(); } + + private void InitNoteSprites() + { + if (!InputHandler.UseArrows) + return; + _keyboardUpSprite.Texture = GD.Load(NotePath + "New_Arrow.png"); + _keyboardUpSprite.RotationDegrees = 270f; + _keyboardDownSprite.Texture = GD.Load(NotePath + "New_Arrow.png"); + _keyboardDownSprite.RotationDegrees = 90f; + _keyboardLeftSprite.Texture = GD.Load(NotePath + "New_Arrow.png"); + _keyboardLeftSprite.RotationDegrees = 180f; + _keyboardRightSprite.Texture = GD.Load(NotePath + "New_Arrow.png"); + + _controllerUpSprite.Texture = GD.Load(NotePath + "New_Arrow.png"); + _controllerUpSprite.RotationDegrees = 270f; + _controllerDownSprite.Texture = GD.Load(NotePath + "New_Arrow.png"); + _controllerDownSprite.RotationDegrees = 90f; + _controllerLeftSprite.Texture = GD.Load(NotePath + "New_Arrow.png"); + _controllerLeftSprite.RotationDegrees = 180f; + _controllerRightSprite.Texture = GD.Load(NotePath + "New_Arrow.png"); + } #endregion #region Focus and Menus diff --git a/Scenes/UI/Remapping/Remap.tscn b/Scenes/UI/Remapping/Remap.tscn index adbf744d..6dacf5de 100644 --- a/Scenes/UI/Remapping/Remap.tscn +++ b/Scenes/UI/Remapping/Remap.tscn @@ -1,11 +1,14 @@ -[gd_scene load_steps=19 format=3 uid="uid://bew23sumjs0fg"] +[gd_scene load_steps=22 format=3 uid="uid://bew23sumjs0fg"] [ext_resource type="Script" uid="uid://lnlfcp1n0mad" path="res://Scenes/UI/Remapping/ControlSettings.cs" id="1_ir12b"] [ext_resource type="Texture2D" uid="uid://ck16vyh1q68ri" path="res://Scenes/UI/Assets/UI_ForestBackground.png" id="2_tqdi0"] [ext_resource type="Theme" uid="uid://d37e3tpsbxwak" path="res://Scenes/UI/Assets/GeneralTheme.tres" id="3_wr01w"] +[ext_resource type="Texture2D" uid="uid://br6xfjuq6c2nk" path="res://Scenes/NoteManager/Assets/TopNoteOutline.png" id="4_4nu1q"] [ext_resource type="Texture2D" uid="uid://8u3xvcma81d" path="res://Scenes/UI/Assets/UI_CrystalFrame.png" id="4_8jqfi"] -[ext_resource type="Texture2D" uid="uid://xtygvpk7s8e4" path="res://SharedAssets/NoteArrow_Black_Outline.png" id="4_se2m3"] +[ext_resource type="Texture2D" uid="uid://bh68528ekvjbk" path="res://Scenes/NoteManager/Assets/BottomNoteOutline.png" id="5_s0mtp"] [ext_resource type="Texture2D" uid="uid://ucxkeg8mkugt" path="res://Scenes/UI/Remapping/Assets/A.png" id="6_rrvpi"] +[ext_resource type="Texture2D" uid="uid://s84c7d50wjvn" path="res://Scenes/NoteManager/Assets/LeftNoteOutline.png" id="6_sl0ys"] +[ext_resource type="Texture2D" uid="uid://dslb58tkhgroj" path="res://Scenes/NoteManager/Assets/RightNoteOutline.png" id="7_3xifn"] [ext_resource type="Texture2D" uid="uid://e4dr0lk7ll0e" path="res://Scenes/UI/Remapping/Assets/W.png" id="7_kgn1x"] [ext_resource type="Texture2D" uid="uid://bhjl3xnuwauu0" path="res://Scenes/UI/Remapping/Assets/S.png" id="8_40ke1"] [ext_resource type="Texture2D" uid="uid://bpic7oh05r5fp" path="res://Scenes/UI/Remapping/Assets/D.png" id="9_qhhwk"] @@ -19,7 +22,7 @@ [ext_resource type="Texture2D" uid="uid://cpxcg12lovxu5" path="res://Scenes/UI/Remapping/Assets/Joypad Button 4 (Back, Sony Select, Xbox Back, Nintendo -).png" id="16_s0mtp"] [ext_resource type="Texture2D" uid="uid://djd6iw2g84bba" path="res://Scenes/UI/Assets/UI_CenterFrame.png" id="18_8iace"] -[node name="Remap" type="Node2D" node_paths=PackedStringArray("_closeButton", "_remapPopup", "_remapLabel", "_remapDescription", "_remapTimer", "_remapTabs")] +[node name="Remap" type="Node2D" node_paths=PackedStringArray("_closeButton", "_remapPopup", "_remapLabel", "_remapDescription", "_remapTimer", "_remapTabs", "_keyboardUpSprite", "_keyboardDownSprite", "_keyboardLeftSprite", "_keyboardRightSprite", "_controllerUpSprite", "_controllerDownSprite", "_controllerLeftSprite", "_controllerRightSprite")] process_mode = 3 script = ExtResource("1_ir12b") _closeButton = NodePath("Panel/TitleButton") @@ -28,6 +31,14 @@ _remapLabel = NodePath("RemapPopup/Label2") _remapDescription = NodePath("RemapPopup/Label3") _remapTimer = NodePath("RemapPopup/Timer") _remapTabs = NodePath("Panel/TabContainer") +_keyboardUpSprite = NodePath("Panel/TabContainer/CONTROLS_KEYBOARD/Up") +_keyboardDownSprite = NodePath("Panel/TabContainer/CONTROLS_KEYBOARD/Down") +_keyboardLeftSprite = NodePath("Panel/TabContainer/CONTROLS_KEYBOARD/Left") +_keyboardRightSprite = NodePath("Panel/TabContainer/CONTROLS_KEYBOARD/Right") +_controllerUpSprite = NodePath("Panel/TabContainer/CONTROLS_CONTROLLER/Up") +_controllerDownSprite = NodePath("Panel/TabContainer/CONTROLS_CONTROLLER/Down") +_controllerLeftSprite = NodePath("Panel/TabContainer/CONTROLS_CONTROLLER/Left") +_controllerRightSprite = NodePath("Panel/TabContainer/CONTROLS_CONTROLLER/Right") [node name="Background" type="NinePatchRect" parent="."] offset_right = 640.0 @@ -67,6 +78,7 @@ offset_left = 101.0 offset_top = 52.0 offset_right = 553.0 offset_bottom = 301.0 +theme = ExtResource("3_wr01w") current_tab = 0 [node name="CONTROLS_KEYBOARD" type="Control" parent="Panel/TabContainer"] @@ -152,25 +164,22 @@ theme = ExtResource("3_wr01w") [node name="Left" type="Sprite2D" parent="Panel/TabContainer/CONTROLS_KEYBOARD"] z_index = 1 position = Vector2(81, 39) -rotation = -3.14159 -texture = ExtResource("4_se2m3") +texture = ExtResource("4_4nu1q") [node name="Right" type="Sprite2D" parent="Panel/TabContainer/CONTROLS_KEYBOARD"] z_index = 1 position = Vector2(279, 39) -texture = ExtResource("4_se2m3") +texture = ExtResource("5_s0mtp") [node name="Up" type="Sprite2D" parent="Panel/TabContainer/CONTROLS_KEYBOARD"] z_index = 1 position = Vector2(82, 115) -rotation = -1.5708 -texture = ExtResource("4_se2m3") +texture = ExtResource("6_sl0ys") [node name="Down" type="Sprite2D" parent="Panel/TabContainer/CONTROLS_KEYBOARD"] z_index = 1 position = Vector2(280, 114) -rotation = 1.5708 -texture = ExtResource("4_se2m3") +texture = ExtResource("7_3xifn") [node name="TEMPSecondaryButtonText" type="Label" parent="Panel/TabContainer/CONTROLS_KEYBOARD"] z_index = 1 @@ -392,25 +401,22 @@ theme = ExtResource("3_wr01w") [node name="Left" type="Sprite2D" parent="Panel/TabContainer/CONTROLS_CONTROLLER"] z_index = 1 position = Vector2(81, 39) -rotation = -3.14159 -texture = ExtResource("4_se2m3") +texture = ExtResource("4_4nu1q") [node name="Up" type="Sprite2D" parent="Panel/TabContainer/CONTROLS_CONTROLLER"] z_index = 1 position = Vector2(82, 115) -rotation = -1.5708 -texture = ExtResource("4_se2m3") +texture = ExtResource("6_sl0ys") [node name="Right" type="Sprite2D" parent="Panel/TabContainer/CONTROLS_CONTROLLER"] z_index = 1 position = Vector2(279, 39) -texture = ExtResource("4_se2m3") +texture = ExtResource("5_s0mtp") [node name="Down" type="Sprite2D" parent="Panel/TabContainer/CONTROLS_CONTROLLER"] z_index = 1 position = Vector2(280, 114) -rotation = 1.5708 -texture = ExtResource("4_se2m3") +texture = ExtResource("7_3xifn") [node name="TEMPSecondaryButtonText" type="Label" parent="Panel/TabContainer/CONTROLS_CONTROLLER"] z_index = 1 diff --git a/Scenes/UI/ScoreScreen.tscn b/Scenes/UI/ScoreScreen.tscn index 5fa20eb6..00bdf94d 100644 --- a/Scenes/UI/ScoreScreen.tscn +++ b/Scenes/UI/ScoreScreen.tscn @@ -10,17 +10,17 @@ [node name="ScoreScreen" type="CanvasLayer" node_paths=PackedStringArray("_styleLabel", "_styleAmount", "_perfectsLabel", "_perfectsAmount", "_placedLabel", "_placedAmount", "_totalLabel", "_totalAmount", "_relicLabel", "_relicAmount", "_acceptButton")] process_mode = 3 script = ExtResource("1_ma4hf") -_styleLabel = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/LabelMargin/LabelVbox/StyleLabel") -_styleAmount = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox/StyleLabel") -_perfectsLabel = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/LabelMargin/LabelVbox/PerfectLabel") -_perfectsAmount = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox/PerfectLabel") -_placedLabel = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/LabelMargin/LabelVbox/PlacedLabel") -_placedAmount = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox/PlacedLabel") -_totalLabel = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/LabelMargin/LabelVbox/TotalLabel") -_totalAmount = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox/HBoxContainer/TotalLabel") -_relicLabel = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/LabelMargin/LabelVbox/RelicLabel") -_relicAmount = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox/RelicLabel") -_acceptButton = NodePath("Bg/WindowMargin/PanelBg/VBoxContainer/ButtonMargin/AcceptButton") +_styleLabel = NodePath("Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer/StyleLabel") +_styleAmount = NodePath("Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer/StyleLabel2") +_perfectsLabel = NodePath("Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer2/PerfectLabel") +_perfectsAmount = NodePath("Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer2/PerfectLabel2") +_placedLabel = NodePath("Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer3/PlacedLabel") +_placedAmount = NodePath("Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer3/PlacedLabel2") +_totalLabel = NodePath("Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer6/TotalLabel") +_totalAmount = NodePath("Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer6/HBoxContainer/TotalLabel") +_relicLabel = NodePath("Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer4/RelicLabel") +_relicAmount = NodePath("Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer4/RelicLabel2") +_acceptButton = NodePath("Bg/WindowMargin/VBoxContainer/ButtonMargin/AcceptButton") [node name="Bg" type="NinePatchRect" parent="."] self_modulate = Color(1, 1, 1, 0.75) @@ -49,6 +49,7 @@ theme_override_constants/margin_bottom = 50 [node name="PanelBg" type="NinePatchRect" parent="Bg/WindowMargin"] self_modulate = Color(1, 1, 1, 0.75) +custom_minimum_size = Vector2(0, 280) layout_mode = 2 texture = ExtResource("2_usavq") patch_margin_left = 30 @@ -56,16 +57,14 @@ patch_margin_top = 10 patch_margin_right = 20 patch_margin_bottom = 27 -[node name="VBoxContainer" type="VBoxContainer" parent="Bg/WindowMargin/PanelBg"] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 +[node name="VBoxContainer" type="VBoxContainer" parent="Bg/WindowMargin"] +layout_mode = 2 + +[node name="MarginContainer2" type="MarginContainer" parent="Bg/WindowMargin/VBoxContainer"] +layout_mode = 2 -[node name="TopPanelBg" type="NinePatchRect" parent="Bg/WindowMargin/PanelBg/VBoxContainer"] -self_modulate = Color(1, 1, 1, 0.5) +[node name="TopPanelBg" type="NinePatchRect" parent="Bg/WindowMargin/VBoxContainer/MarginContainer2"] +custom_minimum_size = Vector2(0, 45) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 @@ -76,16 +75,11 @@ patch_margin_top = 10 patch_margin_right = 20 patch_margin_bottom = 27 -[node name="Title" type="CenterContainer" parent="Bg/WindowMargin/PanelBg/VBoxContainer/TopPanelBg"] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 +[node name="Title" type="CenterContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer2"] +layout_mode = 2 -[node name="TitleText" type="RichTextLabel" parent="Bg/WindowMargin/PanelBg/VBoxContainer/TopPanelBg/Title"] -custom_minimum_size = Vector2(400, 47) +[node name="TitleText" type="RichTextLabel" parent="Bg/WindowMargin/VBoxContainer/MarginContainer2/Title"] +custom_minimum_size = Vector2(293, 40) layout_mode = 2 theme_override_font_sizes/normal_font_size = 32 bbcode_enabled = true @@ -93,7 +87,7 @@ text = "SCORING_SCENE_TITLE" horizontal_alignment = 1 vertical_alignment = 1 -[node name="MarginContainer" type="MarginContainer" parent="Bg/WindowMargin/PanelBg/VBoxContainer"] +[node name="MarginContainer" type="MarginContainer" parent="Bg/WindowMargin/VBoxContainer"] layout_mode = 2 size_flags_vertical = 3 theme_override_constants/margin_left = 4 @@ -101,8 +95,8 @@ theme_override_constants/margin_top = 0 theme_override_constants/margin_right = 4 theme_override_constants/margin_bottom = 4 -[node name="BottomPanelBg" type="NinePatchRect" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer"] -self_modulate = Color(1, 1, 1, 0.5) +[node name="BottomPanelBg" type="NinePatchRect" parent="Bg/WindowMargin/VBoxContainer/MarginContainer"] +custom_minimum_size = Vector2(0, 175) layout_mode = 2 size_flags_horizontal = 3 size_flags_vertical = 3 @@ -112,16 +106,11 @@ patch_margin_top = 10 patch_margin_right = 20 patch_margin_bottom = 27 -[node name="HBoxContainer" type="HBoxContainer" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg"] -layout_mode = 1 -anchors_preset = 15 -anchor_right = 1.0 -anchor_bottom = 1.0 -grow_horizontal = 2 -grow_vertical = 2 +[node name="HBoxContainer" type="HBoxContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer"] +layout_mode = 2 size_flags_vertical = 3 -[node name="LabelMargin" type="MarginContainer" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer"] +[node name="LabelMargin" type="MarginContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 3 theme_override_constants/margin_left = 8 @@ -129,95 +118,108 @@ theme_override_constants/margin_top = 8 theme_override_constants/margin_right = 8 theme_override_constants/margin_bottom = 8 -[node name="LabelVbox" type="VBoxContainer" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/LabelMargin"] +[node name="LabelVbox" type="VBoxContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin"] layout_mode = 2 size_flags_horizontal = 3 -theme_override_constants/separation = 11 alignment = 1 -[node name="StyleLabel" type="Label" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/LabelMargin/LabelVbox"] +[node name="HBoxContainer" type="HBoxContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox"] layout_mode = 2 -text = "SCORING_STYLE" +size_flags_vertical = 3 -[node name="PerfectLabel" type="Label" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/LabelMargin/LabelVbox"] +[node name="StyleLabel" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer"] layout_mode = 2 -text = "SCORING_PERFECTS" +text = "SCORING_STYLE" -[node name="PlacedLabel" type="Label" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/LabelMargin/LabelVbox"] +[node name="StyleLabel2" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer"] layout_mode = 2 -text = "SCORING_PLACED" +size_flags_horizontal = 10 +text = "999" +horizontal_alignment = 2 -[node name="RelicLabel" type="Label" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/LabelMargin/LabelVbox"] +[node name="HBoxContainer2" type="HBoxContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox"] layout_mode = 2 -text = "SCORING_RELICS" +size_flags_vertical = 3 -[node name="Placeholder" type="Label" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/LabelMargin/LabelVbox"] +[node name="PerfectLabel" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer2"] layout_mode = 2 +text = "SCORING_PERFECTS" -[node name="TotalLabel" type="Label" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/LabelMargin/LabelVbox"] +[node name="PerfectLabel2" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer2"] layout_mode = 2 -text = "SCORING_TOTAL" +size_flags_horizontal = 10 +text = "999" +horizontal_alignment = 2 -[node name="ScoreMargin" type="MarginContainer" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer"] +[node name="HBoxContainer3" type="HBoxContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox"] layout_mode = 2 -size_flags_horizontal = 3 -size_flags_stretch_ratio = 0.25 -theme_override_constants/margin_left = 8 -theme_override_constants/margin_top = 8 -theme_override_constants/margin_right = 8 -theme_override_constants/margin_bottom = 8 +size_flags_vertical = 3 -[node name="LabelVbox" type="VBoxContainer" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin"] +[node name="PlacedLabel" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer3"] layout_mode = 2 -size_flags_horizontal = 3 -theme_override_constants/separation = 11 -alignment = 1 +text = "SCORING_PLACED" -[node name="StyleLabel" type="Label" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox"] +[node name="PlacedLabel2" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer3"] layout_mode = 2 +size_flags_horizontal = 10 text = "999" horizontal_alignment = 2 -[node name="PerfectLabel" type="Label" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox"] +[node name="HBoxContainer4" type="HBoxContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox"] layout_mode = 2 -text = "999" -horizontal_alignment = 2 +size_flags_vertical = 3 -[node name="PlacedLabel" type="Label" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox"] +[node name="RelicLabel" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer4"] layout_mode = 2 -text = "999" -horizontal_alignment = 2 +text = "SCORING_RELICS" -[node name="RelicLabel" type="Label" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox"] +[node name="RelicLabel2" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer4"] layout_mode = 2 +size_flags_horizontal = 10 text = "999" horizontal_alignment = 2 -[node name="Placeholder" type="Label" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox"] +[node name="HBoxContainer5" type="HBoxContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="Placeholder" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer5"] +layout_mode = 2 + +[node name="Placeholder2" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer5"] layout_mode = 2 horizontal_alignment = 2 -[node name="HBoxContainer" type="HBoxContainer" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox"] +[node name="HBoxContainer6" type="HBoxContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox"] +layout_mode = 2 +size_flags_vertical = 3 + +[node name="TotalLabel" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer6"] layout_mode = 2 +text = "SCORING_TOTAL" + +[node name="HBoxContainer" type="HBoxContainer" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer6"] +layout_mode = 2 +size_flags_horizontal = 10 -[node name="MoneyIcon" type="TextureRect" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox/HBoxContainer"] +[node name="MoneyIcon" type="TextureRect" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer6/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 0 size_flags_vertical = 4 texture = ExtResource("5_0mn6u") -[node name="TotalLabel" type="Label" parent="Bg/WindowMargin/PanelBg/VBoxContainer/MarginContainer/BottomPanelBg/HBoxContainer/ScoreMargin/LabelVbox/HBoxContainer"] +[node name="TotalLabel" type="Label" parent="Bg/WindowMargin/VBoxContainer/MarginContainer/HBoxContainer/LabelMargin/LabelVbox/HBoxContainer6/HBoxContainer"] layout_mode = 2 size_flags_horizontal = 10 text = "999" horizontal_alignment = 2 -[node name="ButtonMargin" type="MarginContainer" parent="Bg/WindowMargin/PanelBg/VBoxContainer"] +[node name="ButtonMargin" type="MarginContainer" parent="Bg/WindowMargin/VBoxContainer"] layout_mode = 2 theme_override_constants/margin_top = -3 theme_override_constants/margin_bottom = 9 -[node name="AcceptButton" type="Button" parent="Bg/WindowMargin/PanelBg/VBoxContainer/ButtonMargin"] +[node name="AcceptButton" type="Button" parent="Bg/WindowMargin/VBoxContainer/ButtonMargin"] layout_mode = 2 size_flags_horizontal = 6 theme = ExtResource("4_1rsqt") diff --git a/Scenes/UI/Scripts/EndScreen.cs b/Scenes/UI/Scripts/EndScreen.cs index 2d483cf9..987da103 100644 --- a/Scenes/UI/Scripts/EndScreen.cs +++ b/Scenes/UI/Scripts/EndScreen.cs @@ -1,22 +1,30 @@ using FunkEngine; using Godot; -public partial class EndScreen : CanvasLayer +public partial class EndScreen : CanvasLayer, IFocusableMenu { public static readonly string LoadPath = "res://Scenes/UI/EndScreen.tscn"; [Export] private Button[] _buttons; + [Export] + private MarginContainer _creditsCont; + [Export] public Label TopLabel; + public bool HasWon = false; + public override void _Ready() { _buttons[0].Pressed += Restart; _buttons[1].Pressed += QuitToMainMenu; _buttons[2].Pressed += Quit; + _buttons[3].Pressed += OpenCredits; _buttons[0].GrabFocus(); + _creditsCont.Visible = HasWon; + BgAudioPlayer.LiveInstance.PlayLevelMusic(); } private void Restart() @@ -36,4 +44,36 @@ private void QuitToMainMenu() GetTree().Paused = false; StageProducer.LiveInstance.TransitionStage(Stages.Title); } + + private void OpenCredits() + { + CreditsMenu credits = GD.Load(CreditsMenu.LoadPath).Instantiate(); + AddChild(credits); + credits.OpenMenu(this); + } + + public IFocusableMenu Prev { get; set; } + + public void ResumeFocus() + { + ProcessMode = ProcessModeEnum.Always; + _buttons[3].GrabFocus(); //Should only get resumed from Credits + } + + public void PauseFocus() + { + ProcessMode = ProcessModeEnum.Disabled; + } + + public void OpenMenu(IFocusableMenu prev) + { + GD.PushWarning("EndScreen OpenMenu not implemented yet!"); + Prev = prev; + Prev.PauseFocus(); + } + + public void ReturnToPrev() + { + GD.PushError("EndScreen should not return to previous menu!"); + } } diff --git a/Scenes/UI/Scripts/Inventory.cs b/Scenes/UI/Scripts/Inventory.cs index 71dd4d93..e28979a8 100644 --- a/Scenes/UI/Scripts/Inventory.cs +++ b/Scenes/UI/Scripts/Inventory.cs @@ -40,6 +40,7 @@ private void AddDisplayButtons(IDisplayable[] displayables, Node parentNode) var newButton = GD.Load(DisplayButton.LoadPath) .Instantiate(); newButton.Display(item.Texture, item.Name, true); + newButton.ThemeTypeVariation = "nopress"; newButton.Pressed += () => { DoDescription(newButton); diff --git a/Scenes/UI/Scripts/PauseMenu.cs b/Scenes/UI/Scripts/PauseMenu.cs index 6fe23493..a0902324 100644 --- a/Scenes/UI/Scripts/PauseMenu.cs +++ b/Scenes/UI/Scripts/PauseMenu.cs @@ -17,6 +17,7 @@ public override void _Ready() PauseButtons[1].Pressed += OpenOptions; PauseButtons[2].Pressed += Quit; PauseButtons[3].Pressed += QuitToMainMenu; + GD.Load(TitleScreen.LoadPath); } private void OpenOptions() diff --git a/Scenes/UI/Scripts/ScoringScreen.cs b/Scenes/UI/Scripts/ScoringScreen.cs index a37d24e2..af9960ff 100644 --- a/Scenes/UI/Scripts/ScoringScreen.cs +++ b/Scenes/UI/Scripts/ScoringScreen.cs @@ -124,7 +124,7 @@ private void GenerateScore(ScoreGuide info) _perfectMulti = 1 + (float)info.TotalPerfects / (info.TotalHits - info.TotalPlaced); if (float.IsNaN(_perfectMulti)) _perfectMulti = 1; - _placedMulti = Math.Max(2 - (float)Math.Abs(info.TotalPlaced - info.BaseMoney) / 10, 1); + _placedMulti = Math.Min(1 + (float)info.TotalPlaced / 20, 2); _relicBonus = info.RelicBonus; DrawScoreLabels(); } @@ -132,7 +132,7 @@ private void GenerateScore(ScoreGuide info) private int CalcTotalBase(ScoreGuide info) { int result = info.BaseMoney; - result += (int)((info.EndingHealth / info.StartingHealth) * 10); + result += (int)(Math.Min((info.EndingHealth / info.StartingHealth), 1) * 10); result += StageProducer.GlobalRng.RandiRange(0, 3); return result; } diff --git a/Scenes/UI/TitleScreen/Scripts/TitleScreen.cs b/Scenes/UI/TitleScreen/Scripts/TitleScreen.cs index 65dd551c..b6eca91a 100644 --- a/Scenes/UI/TitleScreen/Scripts/TitleScreen.cs +++ b/Scenes/UI/TitleScreen/Scripts/TitleScreen.cs @@ -1,10 +1,11 @@ +using System.Threading.Tasks; using FunkEngine; using Godot; public partial class TitleScreen : Control, IFocusableMenu { public static readonly string LoadPath = "res://Scenes/UI/TitleScreen/TitleScreen.tscn"; - private static readonly string EffectsLoadPath = + public static readonly string EffectsLoadPath = "res://Scenes/UI/TitleScreen/TitleScreenEffects.tscn"; [Export] @@ -15,6 +16,9 @@ public partial class TitleScreen : Control, IFocusableMenu [Export] public Button Options; + [Export] + private Button _customSelectionButton; + private Control _focused; public IFocusableMenu Prev { get; set; } @@ -36,11 +40,16 @@ public override void _UnhandledInput(InputEvent @event) public override void _EnterTree() { BgAudioPlayer.LiveInstance.PlayLevelMusic(); + Options.Pressed += OpenOptions; + _customSelectionButton.Pressed += OpenCustomSelection; } public override void _Ready() { - Options.Pressed += OpenOptions; + if (StageProducer.LiveInstance.LastStage == Stages.Custom) + OpenCustomSelection(); + _customSelectionButton.Visible = (bool) + SaveSystem.GetConfigValue(SaveSystem.ConfigSettings.HasWon); } public override void _Process(double delta) @@ -79,13 +88,36 @@ private void OpenOptions() optionsMenu.OpenMenu(this); } + private void OpenCustomSelection() + { + CustomSelection customMenu = GD.Load(CustomSelection.LoadPath) + .Instantiate(); + AddChild(customMenu); + customMenu.OpenMenu(this); + } + + private bool taskStarted = false; + private void InitEffects() { - if (_effectsPlaceholder is not InstancePlaceholder placeholder) + if (taskStarted || _effectsPlaceholder is not InstancePlaceholder placeholder) return; - _effectsRoot = placeholder.CreateInstance(true, GD.Load(EffectsLoadPath)); - TextLight = _effectsRoot.GetNode("TextLight"); - TweenLight(); + + taskStarted = true; + Task.Run(() => //Will need to monitor to make sure this is safe + { + Callable + .From(() => + { + _effectsRoot = placeholder.CreateInstance( + true, + GD.Load(EffectsLoadPath) + ); + TextLight = _effectsRoot.GetNode("TextLight"); + TweenLight(); + }) + .CallDeferred(); + }); } private void TweenLight() diff --git a/Scenes/UI/TitleScreen/TitleScreen.tscn b/Scenes/UI/TitleScreen/TitleScreen.tscn index 96a32b3a..a7092d37 100644 --- a/Scenes/UI/TitleScreen/TitleScreen.tscn +++ b/Scenes/UI/TitleScreen/TitleScreen.tscn @@ -26,7 +26,7 @@ shader_parameter/height = 10.0 shader_parameter/speed = 2.0 shader_parameter/freq = 10.0 -[node name="Title" type="Control" node_paths=PackedStringArray("_effectsPlaceholder", "Options")] +[node name="Title" type="Control" node_paths=PackedStringArray("_effectsPlaceholder", "Options", "_customSelectionButton")] layout_mode = 3 anchors_preset = 15 anchor_right = 1.0 @@ -38,6 +38,7 @@ size_flags_vertical = 3 script = ExtResource("1_r22ha") _effectsPlaceholder = NodePath("Effects") Options = NodePath("VBoxContainer/OptionsMargin/Options") +_customSelectionButton = NodePath("Custom") [node name="Effects" parent="." instance_placeholder="res://Scenes/UI/TitleScreen/TitleScreenEffects.tscn"] @@ -221,3 +222,13 @@ focus_neighbor_right = NodePath("../../HBoxContainer/MarginContainer2/Quit") theme = ExtResource("13_v0au1") theme_override_font_sizes/font_size = 24 text = "TITLE_OPTIONS" + +[node name="Custom" type="Button" parent="."] +visible = false +z_index = 1 +layout_mode = 0 +offset_top = 1.0 +offset_right = 113.0 +offset_bottom = 40.0 +theme = ExtResource("13_v0au1") +text = "CUSTOM_SONG_SELECT" diff --git a/Scenes/UI/TitleScreen/TitleScreenEffects.tscn b/Scenes/UI/TitleScreen/TitleScreenEffects.tscn index c1398f02..670edb8d 100644 --- a/Scenes/UI/TitleScreen/TitleScreenEffects.tscn +++ b/Scenes/UI/TitleScreen/TitleScreenEffects.tscn @@ -1,7 +1,7 @@ [gd_scene load_steps=4 format=3 uid="uid://dkaxidh7xlvfc"] [ext_resource type="Texture2D" uid="uid://iqbqsiyjd3uq" path="res://Scenes/UI/TitleScreen/Assets/2D_Shadow_Map.webp" id="1_07rxh"] -[ext_resource type="Texture2D" uid="uid://hfxynr5jdgsp" path="res://Scenes/NoteManager/Assets/New_Arrow.png" id="2_ty17s"] +[ext_resource type="Texture2D" uid="uid://coav3xvksq4jy" path="res://Scenes/NoteManager/Assets/NoteWIthOutline.png" id="2_ltons"] [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_4croe"] particle_flag_disable_z = true @@ -34,7 +34,7 @@ light_mask = 0 z_index = -1 z_as_relative = false position = Vector2(643, 154) -texture = ExtResource("2_ty17s") +texture = ExtResource("2_ltons") lifetime = 15.0 randomness = 1.0 process_material = SubResource("ParticleProcessMaterial_4croe") diff --git a/SharedAssets/BattleFrame1.png b/SharedAssets/BattleFrame1.png index 2e512481..005729fd 100644 Binary files a/SharedAssets/BattleFrame1.png and b/SharedAssets/BattleFrame1.png differ diff --git a/SharedAssets/Heart.png b/SharedAssets/Heart.png new file mode 100644 index 00000000..8291fa20 Binary files /dev/null and b/SharedAssets/Heart.png differ diff --git a/SharedAssets/Heart.png.import b/SharedAssets/Heart.png.import new file mode 100644 index 00000000..52d4bfcb --- /dev/null +++ b/SharedAssets/Heart.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dtaf4wcsur721" +path="res://.godot/imported/Heart.png-7dfefac643a1f449fa6e4073fe6379c7.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://SharedAssets/Heart.png" +dest_files=["res://.godot/imported/Heart.png-7dfefac643a1f449fa6e4073fe6379c7.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=1 diff --git a/SharedAssets/NoteArrow_Black_Outline.png b/SharedAssets/NoteArrow_Black_Outline.png deleted file mode 100644 index f26bc0a3..00000000 Binary files a/SharedAssets/NoteArrow_Black_Outline.png and /dev/null differ diff --git a/SharedAssets/SplashScreenGodot.png b/SharedAssets/SplashScreenGodot.png new file mode 100644 index 00000000..b3275747 Binary files /dev/null and b/SharedAssets/SplashScreenGodot.png differ diff --git a/SharedAssets/SplashScreenGodot.png.import b/SharedAssets/SplashScreenGodot.png.import new file mode 100644 index 00000000..c498deb2 --- /dev/null +++ b/SharedAssets/SplashScreenGodot.png.import @@ -0,0 +1,34 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://buc2vne427up1" +path="res://.godot/imported/SplashScreenGodot.png-d169252b8ad42d7ed1f93c8536ff8bdd.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://SharedAssets/SplashScreenGodot.png" +dest_files=["res://.godot/imported/SplashScreenGodot.png-d169252b8ad42d7ed1f93c8536ff8bdd.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +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=1 diff --git a/project.godot b/project.godot index 9fb978b4..bd90939a 100644 --- a/project.godot +++ b/project.godot @@ -14,6 +14,8 @@ config/name="ProjectFunkEngine" config/tags=PackedStringArray("cool") run/main_scene="res://Scenes/UI/TitleScreen/TitleScreen.tscn" config/features=PackedStringArray("4.4", "C#", "Forward Plus") +boot_splash/bg_color=Color(0.103744, 0.103744, 0.103744, 1) +boot_splash/image="uid://buc2vne427up1" config/icon="res://SharedAssets/Character1.png" [audio] @@ -32,6 +34,7 @@ SteamWhisperer="*res://Globals/SteamWhisperer.cs" window/size/viewport_width=640 window/size/viewport_height=360 +window/size/mode=4 window/stretch/mode="canvas_items" window/stretch/scale_mode="integer"