diff --git a/.gitattributes b/.gitattributes index 94aefeb..cb8c172 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,3 +2,5 @@ * text=auto eol=lf *.png filter=lfs diff=lfs merge=lfs -text lockable *.[tT][tT][fF] filter=lfs diff=lfs merge=lfs -text lockable +*.wav filter=lfs diff=lfs merge=lfs -text lockable +*.mp[34] filter=lfs diff=lfs merge=lfs -text lockable diff --git a/Audio/BGM/olympus_combat.mp3 b/Audio/BGM/olympus_combat.mp3 new file mode 100644 index 0000000..7db6f84 --- /dev/null +++ b/Audio/BGM/olympus_combat.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a13a2c8e4b9cb807fe59c8420ef4a6e5214b07b284994abee728f911f68547b6 +size 2177792 diff --git a/Audio/BGM/olympus_combat.mp3.import b/Audio/BGM/olympus_combat.mp3.import new file mode 100644 index 0000000..058824d --- /dev/null +++ b/Audio/BGM/olympus_combat.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://jlr3b1nye15g" +path="res://.godot/imported/olympus_combat.mp3-599f3eaab3c0e1f24a9caebb3f1f4bc6.mp3str" + +[deps] + +source_file="res://Audio/BGM/olympus_combat.mp3" +dest_files=["res://.godot/imported/olympus_combat.mp3-599f3eaab3c0e1f24a9caebb3f1f4bc6.mp3str"] + +[params] + +loop=true +loop_offset=0.66 +bpm=0.0 +beat_count=0 +bar_beats=4 diff --git a/Audio/BGM/olympus_overworld.mp3 b/Audio/BGM/olympus_overworld.mp3 new file mode 100644 index 0000000..04d2fac --- /dev/null +++ b/Audio/BGM/olympus_overworld.mp3 @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bc348fabac89105de787faf9663042cf42057484b8534175400d55644b1e86ae +size 2683815 diff --git a/Audio/BGM/olympus_overworld.mp3.import b/Audio/BGM/olympus_overworld.mp3.import new file mode 100644 index 0000000..714de42 --- /dev/null +++ b/Audio/BGM/olympus_overworld.mp3.import @@ -0,0 +1,19 @@ +[remap] + +importer="mp3" +type="AudioStreamMP3" +uid="uid://osasql3x1b8q" +path="res://.godot/imported/olympus_overworld.mp3-9490863377fdcac4c0a1d48df9c90915.mp3str" + +[deps] + +source_file="res://Audio/BGM/olympus_overworld.mp3" +dest_files=["res://.godot/imported/olympus_overworld.mp3-9490863377fdcac4c0a1d48df9c90915.mp3str"] + +[params] + +loop=true +loop_offset=14.778 +bpm=0.0 +beat_count=0 +bar_beats=4 diff --git a/Audio/SFX/accept.wav b/Audio/SFX/accept.wav new file mode 100644 index 0000000..5288df4 --- /dev/null +++ b/Audio/SFX/accept.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c5ce29a1b33ff1f8fff7d2214dec5397805f8d54a16145ec38f2a4b7050cf838 +size 13868 diff --git a/Audio/SFX/accept.wav.import b/Audio/SFX/accept.wav.import new file mode 100644 index 0000000..b284b17 --- /dev/null +++ b/Audio/SFX/accept.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://01sdb5n7snib" +path="res://.godot/imported/accept.wav-9449d916ad08f7ed2c514004bdb8a99a.sample" + +[deps] + +source_file="res://Audio/SFX/accept.wav" +dest_files=["res://.godot/imported/accept.wav-9449d916ad08f7ed2c514004bdb8a99a.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/Audio/SFX/attack1.wav b/Audio/SFX/attack1.wav new file mode 100644 index 0000000..725baad --- /dev/null +++ b/Audio/SFX/attack1.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb673ad32a05a8ef5f368522c898555e26e20af255cd9b901a79165381b9e497 +size 39468 diff --git a/Audio/SFX/attack1.wav.import b/Audio/SFX/attack1.wav.import new file mode 100644 index 0000000..2162472 --- /dev/null +++ b/Audio/SFX/attack1.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dwvq50tfulr43" +path="res://.godot/imported/attack1.wav-146957159e922939fdee86d98610f407.sample" + +[deps] + +source_file="res://Audio/SFX/attack1.wav" +dest_files=["res://.godot/imported/attack1.wav-146957159e922939fdee86d98610f407.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/Audio/SFX/attack2.wav b/Audio/SFX/attack2.wav new file mode 100644 index 0000000..12f91e2 --- /dev/null +++ b/Audio/SFX/attack2.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd52591d7e9164901bb59376b3ebd105dd7f6a1bc8f15eeee04baaa7bc92b453 +size 31276 diff --git a/Audio/SFX/attack2.wav.import b/Audio/SFX/attack2.wav.import new file mode 100644 index 0000000..bf36ca3 --- /dev/null +++ b/Audio/SFX/attack2.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://ck7bsakeccju0" +path="res://.godot/imported/attack2.wav-e412bcbaff20a9867a9b0931c31ed2fa.sample" + +[deps] + +source_file="res://Audio/SFX/attack2.wav" +dest_files=["res://.godot/imported/attack2.wav-e412bcbaff20a9867a9b0931c31ed2fa.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/Audio/SFX/dialog_open.wav b/Audio/SFX/dialog_open.wav new file mode 100644 index 0000000..a166137 --- /dev/null +++ b/Audio/SFX/dialog_open.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:45aa4db2e67eb3f0961bd33ca7e862c7a2a87149ab6fc36de90f2cb51b853a59 +size 21548 diff --git a/Audio/SFX/dialog_open.wav.import b/Audio/SFX/dialog_open.wav.import new file mode 100644 index 0000000..2e91fac --- /dev/null +++ b/Audio/SFX/dialog_open.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://drossx2nhgeue" +path="res://.godot/imported/dialog_open.wav-3ebd2a749cac39a43ee08835f8d689c8.sample" + +[deps] + +source_file="res://Audio/SFX/dialog_open.wav" +dest_files=["res://.godot/imported/dialog_open.wav-3ebd2a749cac39a43ee08835f8d689c8.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/Audio/SFX/dialog_page.wav b/Audio/SFX/dialog_page.wav new file mode 100644 index 0000000..a4a41fe --- /dev/null +++ b/Audio/SFX/dialog_page.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09a47cd13959ad813818b9e77d13eccffa784acac234ae592aca9a2f07502057 +size 10604 diff --git a/Audio/SFX/dialog_page.wav.import b/Audio/SFX/dialog_page.wav.import new file mode 100644 index 0000000..4ab3df2 --- /dev/null +++ b/Audio/SFX/dialog_page.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://b72f2jvv2283j" +path="res://.godot/imported/dialog_page.wav-cb65501f9b4a89cdf8f0f25ee05c197f.sample" + +[deps] + +source_file="res://Audio/SFX/dialog_page.wav" +dest_files=["res://.godot/imported/dialog_page.wav-cb65501f9b4a89cdf8f0f25ee05c197f.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/Audio/SFX/hit1.wav b/Audio/SFX/hit1.wav new file mode 100644 index 0000000..937130c --- /dev/null +++ b/Audio/SFX/hit1.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22d4a04ceab5a4951756f6cf9786ed23a9a93e12caebf40559394fb5079d8f5b +size 54828 diff --git a/Audio/SFX/hit1.wav.import b/Audio/SFX/hit1.wav.import new file mode 100644 index 0000000..eb0d83e --- /dev/null +++ b/Audio/SFX/hit1.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://btwcqirsk7053" +path="res://.godot/imported/hit1.wav-3e256e252ad03dcc25545cbe66848bb5.sample" + +[deps] + +source_file="res://Audio/SFX/hit1.wav" +dest_files=["res://.godot/imported/hit1.wav-3e256e252ad03dcc25545cbe66848bb5.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/Audio/SFX/hit2.wav b/Audio/SFX/hit2.wav new file mode 100644 index 0000000..b46500f --- /dev/null +++ b/Audio/SFX/hit2.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:636d81b736bc76963c194ee6620909564816550c3a11e24e4d8565fcb0f9ad43 +size 61484 diff --git a/Audio/SFX/hit2.wav.import b/Audio/SFX/hit2.wav.import new file mode 100644 index 0000000..9bf014b --- /dev/null +++ b/Audio/SFX/hit2.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://ukgx1p060uts" +path="res://.godot/imported/hit2.wav-6e6475021e86119df0ebc8161640b5b3.sample" + +[deps] + +source_file="res://Audio/SFX/hit2.wav" +dest_files=["res://.godot/imported/hit2.wav-6e6475021e86119df0ebc8161640b5b3.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/Audio/SFX/hit3.wav b/Audio/SFX/hit3.wav new file mode 100644 index 0000000..1605e2a --- /dev/null +++ b/Audio/SFX/hit3.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fd359cb1c42aa9eb43ea714a6af865208ba27f90e85777bbddee8cbbc402ae6f +size 56108 diff --git a/Audio/SFX/hit3.wav.import b/Audio/SFX/hit3.wav.import new file mode 100644 index 0000000..a963aca --- /dev/null +++ b/Audio/SFX/hit3.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://bxrow17gforve" +path="res://.godot/imported/hit3.wav-237afa0d1d843629dd62d8d9f8226a0b.sample" + +[deps] + +source_file="res://Audio/SFX/hit3.wav" +dest_files=["res://.godot/imported/hit3.wav-237afa0d1d843629dd62d8d9f8226a0b.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/Audio/SFX/hit4.wav b/Audio/SFX/hit4.wav new file mode 100644 index 0000000..f33379a --- /dev/null +++ b/Audio/SFX/hit4.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22c2a80581483e689557552ea4a1b50ce3c1e64cae07ce5f8ee7ff0428400495 +size 56108 diff --git a/Audio/SFX/hit4.wav.import b/Audio/SFX/hit4.wav.import new file mode 100644 index 0000000..6168d93 --- /dev/null +++ b/Audio/SFX/hit4.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://noh0wd5cb342" +path="res://.godot/imported/hit4.wav-21cdfd99af7010f29347789b01f99543.sample" + +[deps] + +source_file="res://Audio/SFX/hit4.wav" +dest_files=["res://.godot/imported/hit4.wav-21cdfd99af7010f29347789b01f99543.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/Audio/SFX/melee.tres b/Audio/SFX/melee.tres new file mode 100644 index 0000000..32f2452 --- /dev/null +++ b/Audio/SFX/melee.tres @@ -0,0 +1,12 @@ +[gd_resource type="AudioStreamRandomizer" load_steps=3 format=3 uid="uid://di3fpfsl2vcyi"] + +[ext_resource type="AudioStream" uid="uid://dwvq50tfulr43" path="res://Audio/SFX/attack1.wav" id="1_6lpn5"] +[ext_resource type="AudioStream" uid="uid://ck7bsakeccju0" path="res://Audio/SFX/attack2.wav" id="2_ey8ig"] + +[resource] +playback_mode = 1 +streams_count = 2 +stream_0/stream = ExtResource("1_6lpn5") +stream_0/weight = 1.0 +stream_1/stream = ExtResource("2_ey8ig") +stream_1/weight = 1.0 diff --git a/Audio/SFX/melee_hit.tres b/Audio/SFX/melee_hit.tres new file mode 100644 index 0000000..87fea29 --- /dev/null +++ b/Audio/SFX/melee_hit.tres @@ -0,0 +1,18 @@ +[gd_resource type="AudioStreamRandomizer" load_steps=5 format=3 uid="uid://dmpd83t5hrd81"] + +[ext_resource type="AudioStream" uid="uid://btwcqirsk7053" path="res://Audio/SFX/hit1.wav" id="1_8053b"] +[ext_resource type="AudioStream" uid="uid://ukgx1p060uts" path="res://Audio/SFX/hit2.wav" id="2_78aou"] +[ext_resource type="AudioStream" uid="uid://bxrow17gforve" path="res://Audio/SFX/hit3.wav" id="3_u5k38"] +[ext_resource type="AudioStream" uid="uid://noh0wd5cb342" path="res://Audio/SFX/hit4.wav" id="4_sampv"] + +[resource] +playback_mode = 1 +streams_count = 4 +stream_0/stream = ExtResource("1_8053b") +stream_0/weight = 1.0 +stream_1/stream = ExtResource("2_78aou") +stream_1/weight = 1.0 +stream_2/stream = ExtResource("3_u5k38") +stream_2/weight = 1.0 +stream_3/stream = ExtResource("4_sampv") +stream_3/weight = 1.0 diff --git a/Audio/SFX/pause.wav b/Audio/SFX/pause.wav new file mode 100644 index 0000000..6709dac --- /dev/null +++ b/Audio/SFX/pause.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c0529ac470f252e8fda6b71143000c354d759f85b3c82be08f2795fd19aac4a +size 31020 diff --git a/Audio/SFX/pause.wav.import b/Audio/SFX/pause.wav.import new file mode 100644 index 0000000..d1d756d --- /dev/null +++ b/Audio/SFX/pause.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://bp70snfsk40vy" +path="res://.godot/imported/pause.wav-31b7f1fec69aeb043b45654c37f79656.sample" + +[deps] + +source_file="res://Audio/SFX/pause.wav" +dest_files=["res://.godot/imported/pause.wav-31b7f1fec69aeb043b45654c37f79656.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/Audio/SFX/puff_smoke.wav b/Audio/SFX/puff_smoke.wav new file mode 100644 index 0000000..0fd97e7 --- /dev/null +++ b/Audio/SFX/puff_smoke.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab16c8f78c53897d54e202841bedd530ba8919d54e700f8b6e3a6b34ddc8155f +size 96428 diff --git a/Audio/SFX/puff_smoke.wav.import b/Audio/SFX/puff_smoke.wav.import new file mode 100644 index 0000000..e0f212d --- /dev/null +++ b/Audio/SFX/puff_smoke.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cvkvgyxqnksir" +path="res://.godot/imported/puff_smoke.wav-e205fe2c6edbf9a60abb47e9cdb79be9.sample" + +[deps] + +source_file="res://Audio/SFX/puff_smoke.wav" +dest_files=["res://.godot/imported/puff_smoke.wav-e205fe2c6edbf9a60abb47e9cdb79be9.sample"] + +[params] + +force/8_bit=false +force/mono=false +force/max_rate=false +force/max_rate_hz=44100 +edit/trim=false +edit/normalize=false +edit/loop_mode=0 +edit/loop_begin=0 +edit/loop_end=-1 +compress/mode=0 diff --git a/Audio/music_manager.tscn b/Audio/music_manager.tscn new file mode 100644 index 0000000..06e138f --- /dev/null +++ b/Audio/music_manager.tscn @@ -0,0 +1,109 @@ +[gd_scene load_steps=6 format=3 uid="uid://81jm7ixvk25n"] + +[ext_resource type="Script" path="res://Scripts/Audio/music_manager.gd" id="1_6oqmm"] + +[sub_resource type="Animation" id="Animation_pdo8g"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Track2:volume_db") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [-80.0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Track1:volume_db") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} + +[sub_resource type="Animation" id="Animation_6vmfp"] +resource_name = "fade_to1" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Track2:volume_db") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0.15, 1), +"transitions": PackedFloat32Array(2.71828, 1), +"update": 0, +"values": [0.0, -80.0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Track1:volume_db") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.8), +"transitions": PackedFloat32Array(0.367879, 1), +"update": 0, +"values": [-80.0, 0.0] +} + +[sub_resource type="Animation" id="Animation_yv1t3"] +resource_name = "fade_to2" +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Track2:volume_db") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.8), +"transitions": PackedFloat32Array(0.367879, 1), +"update": 0, +"values": [-80.0, 0.0] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Track1:volume_db") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0.15, 1), +"transitions": PackedFloat32Array(2.71828, 1), +"update": 0, +"values": [0.0, -80.0] +} + +[sub_resource type="AnimationLibrary" id="AnimationLibrary_ug0wt"] +_data = { +"RESET": SubResource("Animation_pdo8g"), +"fade_to1": SubResource("Animation_6vmfp"), +"fade_to2": SubResource("Animation_yv1t3") +} + +[node name="MusicManager" type="Node"] +process_mode = 3 +script = ExtResource("1_6oqmm") + +[node name="Track1" type="AudioStreamPlayer" parent="."] +bus = &"BGM" + +[node name="Track2" type="AudioStreamPlayer" parent="."] +volume_db = -80.0 +bus = &"BGM" + +[node name="AnimationPlayer" type="AnimationPlayer" parent="."] +libraries = { +"": SubResource("AnimationLibrary_ug0wt") +} + +[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_player_animation_finished"] diff --git a/Audio/sound_manager.tscn b/Audio/sound_manager.tscn new file mode 100644 index 0000000..3e3ac02 --- /dev/null +++ b/Audio/sound_manager.tscn @@ -0,0 +1,14 @@ +[gd_scene load_steps=3 format=3 uid="uid://bbybt6r6351yp"] + +[ext_resource type="Script" path="res://Scripts/Audio/sound_manager.gd" id="1_psrqm"] +[ext_resource type="Script" path="res://Scripts/Audio/sound_queue.gd" id="2_y30yw"] + +[node name="SoundManager" type="Node"] +process_mode = 3 +script = ExtResource("1_psrqm") + +[node name="SoundQueue" type="Node" parent="."] +script = ExtResource("2_y30yw") + +[node name="AudioStreamPlayer" type="AudioStreamPlayer" parent="SoundQueue"] +bus = &"SFX" diff --git a/Cutscenes/prototype_defeated.tres b/Cutscenes/prototype_defeated.tres index abf7f52..e92ad90 100644 --- a/Cutscenes/prototype_defeated.tres +++ b/Cutscenes/prototype_defeated.tres @@ -1,8 +1,13 @@ -[gd_resource type="Resource" script_class="Cutscene" load_steps=4 format=3 uid="uid://cwfayxsvfvfp3"] +[gd_resource type="Resource" script_class="Cutscene" load_steps=6 format=3 uid="uid://cwfayxsvfvfp3"] [ext_resource type="Script" path="res://Scripts/Cutscenes/cutscene.gd" id="1_5oimi"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/wait.gd" id="1_b7jis"] [ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/show_dialogue.gd" id="1_m28bn"] +[sub_resource type="Resource" id="Resource_j0qrl"] +script = ExtResource("1_b7jis") +time = 2.01667 + [sub_resource type="Resource" id="Resource_eeatu"] script = ExtResource("1_m28bn") character = 0 @@ -11,4 +16,4 @@ textbox_direction = 0 [resource] script = ExtResource("1_5oimi") -commands = Array[Resource("res://Scripts/Cutscenes/Commands/base.gd")]([SubResource("Resource_eeatu")]) +commands = Array[Resource("res://Scripts/Cutscenes/Commands/base.gd")]([SubResource("Resource_j0qrl"), SubResource("Resource_eeatu")]) diff --git a/Cutscenes/prototype_start.tres b/Cutscenes/prototype_start.tres index 0ee33d3..83bb592 100644 --- a/Cutscenes/prototype_start.tres +++ b/Cutscenes/prototype_start.tres @@ -1,11 +1,19 @@ -[gd_resource type="Resource" script_class="Cutscene" load_steps=13 format=3 uid="uid://bj3rm1r1ouq0r"] +[gd_resource type="Resource" script_class="Cutscene" load_steps=18 format=3 uid="uid://bj3rm1r1ouq0r"] [ext_resource type="Script" path="res://Scripts/Cutscenes/cutscene.gd" id="1_ejncn"] [ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/wait.gd" id="1_mrqg0"] [ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/show_dialogue.gd" id="1_r5tuj"] +[ext_resource type="AudioStream" uid="uid://osasql3x1b8q" path="res://Audio/BGM/olympus_overworld.mp3" id="1_wnm4j"] [ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/turn_character.gd" id="2_eqfp1"] +[ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/cue_bgm.gd" id="2_fbljl"] [ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/move_character.gd" id="3_rxd5p"] [ext_resource type="Script" path="res://Scripts/Cutscenes/Commands/lookat_character.gd" id="4_dcsx8"] +[ext_resource type="AudioStream" uid="uid://jlr3b1nye15g" path="res://Audio/BGM/olympus_combat.mp3" id="8_o2rwe"] + +[sub_resource type="Resource" id="Resource_xw6ah"] +script = ExtResource("2_fbljl") +music = ExtResource("1_wnm4j") +crossfade = false [sub_resource type="Resource" id="Resource_h6w6u"] script = ExtResource("1_mrqg0") @@ -43,7 +51,12 @@ character = 0 messages = Array[String](["Whaaat? Who are you!?", "You have no chance against me!!"]) textbox_direction = 0 +[sub_resource type="Resource" id="Resource_1sjaa"] +script = ExtResource("2_fbljl") +music = ExtResource("8_o2rwe") +crossfade = true + [resource] resource_name = "prototype_start" script = ExtResource("1_ejncn") -commands = Array[Resource("res://Scripts/Cutscenes/Commands/base.gd")]([SubResource("Resource_h6w6u"), SubResource("Resource_22owj"), SubResource("Resource_rtvbh"), SubResource("Resource_r2p8t"), SubResource("Resource_fuu2y"), SubResource("Resource_x3xc6")]) +commands = Array[Resource("res://Scripts/Cutscenes/Commands/base.gd")]([SubResource("Resource_xw6ah"), SubResource("Resource_h6w6u"), SubResource("Resource_22owj"), SubResource("Resource_rtvbh"), SubResource("Resource_r2p8t"), SubResource("Resource_fuu2y"), SubResource("Resource_x3xc6"), SubResource("Resource_1sjaa")]) diff --git a/Scripts/Audio/music_manager.gd b/Scripts/Audio/music_manager.gd new file mode 100644 index 0000000..1b2215c --- /dev/null +++ b/Scripts/Audio/music_manager.gd @@ -0,0 +1,36 @@ +extends Node + +var _current = 0 + +@onready var _tracks = [ $Track1, $Track2 ] +@onready var _animation_player = $AnimationPlayer + +func play_music(audio: AudioStream, crossfade = true): + if crossfade: + _current += 1 + _current %= 2 + _tracks[_current].stream = audio + _tracks[_current].play() + _animation_player.play("fade_to{0}".format([_current+1])) + else: + _tracks[_current].stream = audio + _tracks[_current].play() + +func _on_game_paused(): + _tracks[_current].volume_db = -10.0 + +func _on_game_unpaused(): + _tracks[_current].volume_db = 0.0 + + +func _on_cutscene_issued_command(command: CutsceneCommand, manager: CutsceneManager): + if command is CueBGMCommand: + play_music(command.music, command.crossfade) + manager.step() + + +func _on_animation_player_animation_finished(anim_name: StringName): + if anim_name == &"fade_to1": + _tracks[1].stop() + else: + _tracks[0].stop() diff --git a/Scripts/Audio/sound_manager.gd b/Scripts/Audio/sound_manager.gd new file mode 100644 index 0000000..81c197d --- /dev/null +++ b/Scripts/Audio/sound_manager.gd @@ -0,0 +1,41 @@ +extends Node + +const dialogue_continue = preload("res://Audio/SFX/dialog_page.wav") + +@export var sounds: Dictionary = { + &"melee": preload("res://Audio/SFX/melee.tres"), + &"melee_hit": preload("res://Audio/SFX/melee_hit.tres"), + &"effect_smoke": preload("res://Audio/SFX/puff_smoke.wav"), + &"pause": preload("res://Audio/SFX/pause.wav"), + &"unpause": preload("res://Audio/SFX/accept.wav"), + &"dialogue_open": preload("res://Audio/SFX/dialog_open.wav"), + &"dialogue_continue": preload("res://Audio/SFX/dialog_page.wav") +} + +@onready var queue = $SoundQueue + +var timer = 0.0 + +func play_sound(sound_name: StringName): + var item = sounds.get(sound_name) + if not item is AudioStream: + push_error("The sound with name {0} is not an AudioStream!".format([sound_name])) + else: + queue.play_sound(item) + +func _on_game_pause_toggled(paused: bool): + play_sound("pause" if paused else "unpause") + +func _on_ui_dialogue_opened(): + play_sound("dialogue_open") + +func _on_ui_dialogue_continued(): + play_sound("dialogue_continue") + +func _on_character_got_hurt(new_health: int): + play_sound("melee_hit") + if new_health <= 0 and Globals.nsfw: + play_sound("effect_smoke") + +func _on_humanoid_character_attacked(): + play_sound("melee") diff --git a/Scripts/Audio/sound_queue.gd b/Scripts/Audio/sound_queue.gd new file mode 100644 index 0000000..87777d5 --- /dev/null +++ b/Scripts/Audio/sound_queue.gd @@ -0,0 +1,46 @@ +@tool +class_name SoundQueue extends Node + +@export_range(1, 16) var count: int = 8 + +var _next: int = 0 +var _tries: int = 0 +var _players: Array[AudioStreamPlayer] = [] + +func _ready(): + if Engine.is_editor_hint(): + return + if get_child_count() == 0: + push_warning("A SoundQueue has no child AudioStreamPlayer!") + return + var child = get_child(0) + if child is AudioStreamPlayer: + _players.append(child as AudioStreamPlayer) + for i in count-1: + var duplicate_player = (child as AudioStreamPlayer).duplicate() + add_child(duplicate_player) + _players.append(duplicate_player) + +func _get_configuration_warnings(): + if get_child_count() == 0: + return ["An AudioStreamPlayer must be set as the first child."] + if not get_child(0) is AudioStreamPlayer: + return ["The first child is not an AudioStreamPlayer."] + +func play_sound(sound: AudioStream): + var player = _players[_next] + if player.playing: + _next+=1 + _next %= _players.size() + _tries += 1 + if _tries < _players.size(): + play_sound(sound) + else: + push_warning("Too many sounds playing!") + else: + _tries = 0 + player.stream = sound + player.play() + +func _on_sound_queued(sound: AudioStream): + play_sound(sound) diff --git a/Scripts/Characters/base.gd b/Scripts/Characters/base.gd index 4196e3b..80ba1e0 100644 --- a/Scripts/Characters/base.gd +++ b/Scripts/Characters/base.gd @@ -10,6 +10,7 @@ class_name CharacterBase @export var KNOCKBACK_POWER: float = 40 @export var KNOCKBACK_RANDOMNESS: float = 50 +signal attacked signal attack_did_hit(other: Area2D, power: int, attack_direction: Vector2) signal got_hurt(new_health: int) signal defeated diff --git a/Scripts/Cutscenes/Commands/cue_bgm.gd b/Scripts/Cutscenes/Commands/cue_bgm.gd new file mode 100644 index 0000000..975ca79 --- /dev/null +++ b/Scripts/Cutscenes/Commands/cue_bgm.gd @@ -0,0 +1,4 @@ +class_name CueBGMCommand extends CutsceneCommand + +@export var music: AudioStream +@export var crossfade = true diff --git a/Scripts/UI/pause_menu.gd b/Scripts/UI/pause_menu.gd index 34582b0..068bb8d 100644 --- a/Scripts/UI/pause_menu.gd +++ b/Scripts/UI/pause_menu.gd @@ -5,14 +5,14 @@ var blink_time = 0 @onready var label = $Control/Label -signal game_unpaused +signal game_unpause_queued func _input(event): if event.is_action_pressed("pause"): get_tree().paused = false visible = false get_viewport().set_input_as_handled() - game_unpaused.emit() + game_unpause_queued.emit() func _process(delta): blink_time += delta diff --git a/Scripts/UI/textbox.gd b/Scripts/UI/textbox.gd index c822262..22aeda2 100644 --- a/Scripts/UI/textbox.gd +++ b/Scripts/UI/textbox.gd @@ -22,6 +22,8 @@ enum TextboxDirection { $RightTextbox/ChatboxContainer/Chatbox/PlacementContainer/NextIndicator ] +signal dialogue_started +signal dialogue_opened signal display_completed signal dialogue_continued signal dialogue_completed @@ -72,6 +74,7 @@ func _dialogue_start(_who: Util.CastCharacter, dialogue: Array[String], directio _text = _dialogue[_next] _display_text = "" animation_player.play("show_" + _directions[_direction]) + dialogue_started.emit() func _dialogue_continue(): _next += 1 @@ -91,6 +94,7 @@ func _end_dialogue(): func _on_animation_finished(anim_name: StringName): if anim_name.contains("show"): _displaying = true + dialogue_opened.emit() elif anim_name.contains("hide"): dialogue_completed.emit() diff --git a/Scripts/game_state.gd b/Scripts/game_state.gd index 7806cdc..17e0bff 100644 --- a/Scripts/game_state.gd +++ b/Scripts/game_state.gd @@ -1,10 +1,15 @@ extends Node -signal game_paused +signal game_pause_toggled(paused: bool) var can_pause = true func _unhandled_input(event): if event.is_action_pressed("pause") and can_pause: - game_paused.emit() + game_pause_toggled.emit(true) get_tree().paused = true + + +func _on_game_unpause_queued(): + get_tree().paused = false + game_pause_toggled.emit(false) diff --git a/Scripts/hiro_ai.gd b/Scripts/hiro_ai.gd index 8ce278c..6cd473d 100644 --- a/Scripts/hiro_ai.gd +++ b/Scripts/hiro_ai.gd @@ -161,6 +161,7 @@ func _on_animation_tree_animation_finished(anim_name): var animation_rng = randf_range(0, 1) anim_tree.set("parameters/melee/blend_position", animation_rng) anim_tree.set("parameters/conditions/melee", true) + attacked.emit() else: state_machine.send_event("melee_complete") @@ -218,6 +219,7 @@ func _on_melee_state_entered(): attack_counter_limit = randi_range(3, 5) anim_tree.set("parameters/conditions/melee", true) state_machine.set_expression_property("melee_stage", 0) + attacked.emit() func _on_meleebox_body_exited(body): if body == player_character: diff --git a/Scripts/hiro_player.gd b/Scripts/hiro_player.gd index b3fd9b7..1e391d6 100644 --- a/Scripts/hiro_player.gd +++ b/Scripts/hiro_player.gd @@ -18,6 +18,7 @@ func _unhandled_input(event): anim_tree.set("parameters/conditions/melee", true) can_move = false velocity = Vector2.ZERO + attacked.emit() func _process(_delta): if movement_scripted_by != null: diff --git a/default_bus_layout.tres b/default_bus_layout.tres new file mode 100644 index 0000000..d41fad4 --- /dev/null +++ b/default_bus_layout.tres @@ -0,0 +1,15 @@ +[gd_resource type="AudioBusLayout" format=3 uid="uid://41c8rrd77eur"] + +[resource] +bus/1/name = &"BGM" +bus/1/solo = false +bus/1/mute = false +bus/1/bypass_fx = false +bus/1/volume_db = 0.0 +bus/1/send = &"Master" +bus/2/name = &"SFX" +bus/2/solo = false +bus/2/mute = false +bus/2/bypass_fx = false +bus/2/volume_db = 0.0 +bus/2/send = &"Master" diff --git a/world/world.tscn b/world/world.tscn index f836a20..69605d0 100644 --- a/world/world.tscn +++ b/world/world.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=28 format=3 uid="uid://bxuxjqxxqy7ce"] +[gd_scene load_steps=30 format=3 uid="uid://bxuxjqxxqy7ce"] [ext_resource type="PackedScene" uid="uid://di21xheryhp0k" path="res://Hiro/hiro_player.tscn" id="1_c1gpq"] [ext_resource type="PackedScene" uid="uid://b8sfype1vx5ad" path="res://Nem/nem_npc.tscn" id="1_sqt7d"] @@ -23,7 +23,9 @@ [ext_resource type="Script" path="res://Scripts/Cutscenes/manager.gd" id="19_5yvrq"] [ext_resource type="Resource" uid="uid://bj3rm1r1ouq0r" path="res://Cutscenes/prototype_start.tres" id="20_elypl"] [ext_resource type="PackedScene" uid="uid://bwrwh5of0jw4a" path="res://Reed/reed_ai.tscn" id="21_dioix"] +[ext_resource type="PackedScene" uid="uid://81jm7ixvk25n" path="res://Audio/music_manager.tscn" id="24_03wyf"] [ext_resource type="Script" path="res://Scripts/game_state.gd" id="24_6ypry"] +[ext_resource type="PackedScene" uid="uid://bbybt6r6351yp" path="res://Audio/sound_manager.tscn" id="25_hm8b0"] [sub_resource type="LabelSettings" id="LabelSettings_f2g0a"] font = ExtResource("2_64thh") @@ -242,26 +244,38 @@ reduce_recoil_time_threshold = 0.75 health = 400 attack_power = 10 +[node name="MusicManager" parent="." instance=ExtResource("24_03wyf")] + +[node name="SoundManager" parent="." instance=ExtResource("25_hm8b0")] + [node name="GameState" type="Node" parent="."] process_mode = 3 script = ExtResource("24_6ypry") +[connection signal="game_unpause_queued" from="PauseMenu" to="GameState" method="_on_game_unpause_queued"] [connection signal="dialogue_completed" from="TextboxUI" to="CutsceneManager" method="_on_ui_dialogue_completed"] +[connection signal="dialogue_continued" from="TextboxUI" to="SoundManager" method="_on_ui_dialogue_continued"] +[connection signal="dialogue_opened" from="TextboxUI" to="SoundManager" method="_on_ui_dialogue_opened"] [connection signal="attack_did_hit" from="HiroPlayer" to="HiroAI" method="_on_player_attack_did_hit"] +[connection signal="attacked" from="HiroPlayer" to="SoundManager" method="_on_humanoid_character_attacked"] [connection signal="defeated" from="HiroPlayer" to="." method="_on_player_defeated"] [connection signal="defeated" from="HiroPlayer" to="HiroAI" method="_on_player_been_defeated"] [connection signal="defeated" from="HiroPlayer" to="ReedAI" method="_on_player_been_defeated"] [connection signal="got_hurt" from="HiroPlayer" to="CanvasLayer/BattleUI" method="_on_player_got_hurt"] +[connection signal="got_hurt" from="HiroPlayer" to="SoundManager" method="_on_character_got_hurt"] [connection signal="attack_did_hit" from="HiroAI" to="HiroPlayer" method="_on_enemy_attack_did_hit"] +[connection signal="attacked" from="HiroAI" to="SoundManager" method="_on_humanoid_character_attacked"] [connection signal="defeated" from="HiroAI" to="." method="_on_ai_defeated"] [connection signal="got_hurt" from="HiroAI" to="CanvasLayer/BattleUI" method="_on_enemy_got_hurt"] +[connection signal="got_hurt" from="HiroAI" to="SoundManager" method="_on_character_got_hurt"] [connection signal="finished" from="CutsceneManager" to="." method="_on_cutscene_finished"] [connection signal="issued_command" from="CutsceneManager" to="." method="_on_cutscene_manager_issued_command"] [connection signal="issued_command" from="CutsceneManager" to="TextboxUI" method="_on_cutscene_command_issued"] [connection signal="issued_command" from="CutsceneManager" to="HiroAI" method="_on_cutscene_issued_command"] [connection signal="issued_command" from="CutsceneManager" to="CutsceneManager" method="_on_issued_command"] +[connection signal="issued_command" from="CutsceneManager" to="MusicManager" method="_on_cutscene_issued_command"] [connection signal="started" from="CutsceneManager" to="." method="_on_cutscene_started"] [connection signal="attack_did_hit" from="ReedAI" to="HiroPlayer" method="_on_enemy_attack_did_hit"] [connection signal="defeated" from="ReedAI" to="." method="_on_ai_defeated"] [connection signal="got_hurt" from="ReedAI" to="CanvasLayer/BattleUI" method="_on_enemy_got_hurt"] -[connection signal="game_paused" from="GameState" to="PauseMenu" method="_on_game_paused"] +[connection signal="game_pause_toggled" from="GameState" to="SoundManager" method="_on_game_pause_toggled"]