diff --git a/arrow/arrow.gd b/arrow/arrow.gd index 79919cf..4192cb2 100644 --- a/arrow/arrow.gd +++ b/arrow/arrow.gd @@ -2,6 +2,7 @@ extends RigidBody2D @onready var area_2d: Area2D = $Area2D @onready var kill_after: Timer = $KillAfter +@onready var kill_audio: AudioStreamPlayer = $KillAudio @export var speed = 100 @export var rotation_speed = 1 @@ -33,4 +34,5 @@ func _on_kill_after_timeout() -> void: func _on_body_entered(body: Node) -> void: is_moving = false + kill_audio.play() kill_after.start() diff --git a/arrow/arrow.tscn b/arrow/arrow.tscn index 638105e..4433313 100644 --- a/arrow/arrow.tscn +++ b/arrow/arrow.tscn @@ -1,8 +1,11 @@ -[gd_scene load_steps=6 format=3 uid="uid://4bfkbcr7v8tj"] +[gd_scene load_steps=10 format=3 uid="uid://4bfkbcr7v8tj"] [ext_resource type="Script" uid="uid://127t4dvlp6tv" path="res://arrow/arrow.gd" id="1_d2qln"] [ext_resource type="Script" uid="uid://dt2lsk3je41th" path="res://damageable/hitbox.gd" id="2_d2qln"] [ext_resource type="Texture2D" uid="uid://lhq6h8f81qrr" path="res://player/assets/Fleche.png" id="2_ofxgm"] +[ext_resource type="AudioStream" uid="uid://ca5ip2v4sbw8r" path="res://world_assets/audio/384912__ali_6868__arrow-impact-3.wav" id="4_lo0oj"] +[ext_resource type="AudioStream" uid="uid://cl171ph84g5t2" path="res://world_assets/audio/384913__ali_6868__arrow-impact-2.wav" id="5_nl01e"] +[ext_resource type="AudioStream" uid="uid://ejdkgkgh1arq" path="res://world_assets/audio/384914__ali_6868__arrow-impact-1.wav" id="6_e3mw3"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_d2qln"] size = Vector2(2, 2) @@ -10,6 +13,12 @@ size = Vector2(2, 2) [sub_resource type="RectangleShape2D" id="RectangleShape2D_yaehf"] size = Vector2(12, 5) +[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_l8mgh"] +streams_count = 3 +stream_0/stream = ExtResource("4_lo0oj") +stream_1/stream = ExtResource("5_nl01e") +stream_2/stream = ExtResource("6_e3mw3") + [node name="Arrow" type="RigidBody2D"] collision_layer = 0 collision_mask = 0 @@ -42,6 +51,10 @@ wait_time = 3.0 one_shot = true ignore_time_scale = true +[node name="KillAudio" type="AudioStreamPlayer" parent="."] +stream = SubResource("AudioStreamRandomizer_l8mgh") +bus = &"SFX" + [connection signal="body_entered" from="." to="." method="_on_body_entered"] [connection signal="body_entered" from="Area2D" to="." method="_on_body_entered"] [connection signal="body_entered" from="Area2D" to="Area2D" method="_on_body_entered"] diff --git a/damageable/damageable.gd b/damageable/damageable.gd index 1f890bf..5619885 100644 --- a/damageable/damageable.gd +++ b/damageable/damageable.gd @@ -6,8 +6,8 @@ class_name Damageable var active = true -signal got_hit signal die +signal got_hit func set_active(new_active: bool): active = new_active @@ -16,9 +16,9 @@ func damage(value: int = 0, direction: Vector2 = Vector2.UP): if not active: return + got_hit.emit() if hitback_velocity > 0: get_parent().velocity = hitback_velocity * direction - got_hit.emit() health -= value if health <= 0: diff --git a/default_bus_layout.tres b/default_bus_layout.tres index 1bbac79..4ca7676 100644 --- a/default_bus_layout.tres +++ b/default_bus_layout.tres @@ -5,17 +5,29 @@ bus/1/name = &"SFX" bus/1/solo = false bus/1/mute = false bus/1/bypass_fx = false -bus/1/volume_db = -3.32682 +bus/1/volume_db = -9.2092 bus/1/send = &"Master" bus/2/name = &"Ambiance" bus/2/solo = false bus/2/mute = false bus/2/bypass_fx = false -bus/2/volume_db = -10.9863 +bus/2/volume_db = -9.2092 bus/2/send = &"Master" bus/3/name = &"Music" bus/3/solo = false bus/3/mute = false bus/3/bypass_fx = false -bus/3/volume_db = -6.25101 +bus/3/volume_db = -4.003 bus/3/send = &"Master" +bus/4/name = &"Gearup" +bus/4/solo = false +bus/4/mute = false +bus/4/bypass_fx = false +bus/4/volume_db = 0.0 +bus/4/send = &"Master" +bus/5/name = &"Steps" +bus/5/solo = false +bus/5/mute = false +bus/5/bypass_fx = false +bus/5/volume_db = -20.3684 +bus/5/send = &"Master" diff --git a/ennemy/skeleton.gd b/ennemy/skeleton.gd index ff1a384..cc26155 100644 --- a/ennemy/skeleton.gd +++ b/ennemy/skeleton.gd @@ -5,6 +5,8 @@ extends AnimatedSprite2D @onready var wait_to_die: Timer = $WaitToDie @onready var hitting: Timer = $Hitting @onready var wait_to_hit: Timer = $WaitToHit +@onready var die_audio: AudioStreamPlayer = $DieAudio +@onready var hitsound: AudioStreamPlayer = $Hit var is_dying = false @@ -18,6 +20,7 @@ func hit(): hitbox.monitorable = true hitbox.monitoring = true play("hit") + hitsound.play() hitting.start() func stop_hitting(): @@ -37,6 +40,7 @@ func _on_damageable_die() -> void: hitbox_2.set_deferred("monitoring", false) is_dying = true play("die") + die_audio.play() wait_to_die.start() func _on_wait_to_die_timeout() -> void: diff --git a/ennemy/skeleton.tscn b/ennemy/skeleton.tscn index 1f21d71..1839a3e 100644 --- a/ennemy/skeleton.tscn +++ b/ennemy/skeleton.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=67 format=3 uid="uid://b2fyaj2fmrug7"] +[gd_scene load_steps=71 format=3 uid="uid://b2fyaj2fmrug7"] [ext_resource type="Texture2D" uid="uid://din26pdtyka1n" path="res://ennemy/Skeleton/Sprite Sheets/Skeleton Hit.png" id="1_yndcr"] [ext_resource type="Texture2D" uid="uid://bpxn5oa3r3121" path="res://ennemy/Skeleton/Sprite Sheets/Skeleton Dead.png" id="2_sx7nw"] @@ -7,6 +7,9 @@ [ext_resource type="Script" uid="uid://bhbn4pngdfk7w" path="res://damageable/damageable.gd" id="5_oqxir"] [ext_resource type="Script" uid="uid://b0ewbthpfsy7t" path="res://ennemy/skeleton.gd" id="5_sx7nw"] [ext_resource type="PackedScene" uid="uid://7sqwi3lygb1u" path="res://damageable/hitbox.tscn" id="6_kopbd"] +[ext_resource type="AudioStream" uid="uid://cwnf4q8286apo" path="res://world_assets/audio/446013__slavicmagic__sword-hit.wav" id="8_whaqf"] +[ext_resource type="AudioStream" uid="uid://k3nqsuybwrlf" path="res://world_assets/audio/swordhit2.wav" id="9_oqxir"] +[ext_resource type="AudioStream" uid="uid://c4crs3etujcdo" path="res://world_assets/audio/swordhit.wav" id="10_kopbd"] [sub_resource type="AtlasTexture" id="AtlasTexture_yvsr8"] atlas = ExtResource("1_yndcr") @@ -434,6 +437,11 @@ radius = 6.08276 [sub_resource type="RectangleShape2D" id="RectangleShape2D_kq58d"] size = Vector2(6, 21) +[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_qeio8"] +streams_count = 2 +stream_0/stream = ExtResource("9_oqxir") +stream_1/stream = ExtResource("10_kopbd") + [node name="Skeleton" type="AnimatedSprite2D"] sprite_frames = SubResource("SpriteFrames_getpj") animation = &"die" @@ -471,6 +479,13 @@ one_shot = true [node name="WaitToHit" type="Timer" parent="."] wait_time = 3.0 +[node name="DieAudio" type="AudioStreamPlayer" parent="."] +stream = ExtResource("8_whaqf") +bus = &"SFX" + +[node name="Hit" type="AudioStreamPlayer" parent="."] +stream = SubResource("AudioStreamRandomizer_qeio8") + [connection signal="die" from="Hitbox2/Damageable" to="." method="_on_damageable_die"] [connection signal="timeout" from="WaitToDie" to="." method="_on_wait_to_die_timeout"] [connection signal="timeout" from="Hitting" to="." method="stop_hitting"] diff --git a/main.gd b/main.gd index f98b067..05e6dfa 100644 --- a/main.gd +++ b/main.gd @@ -52,6 +52,7 @@ func _process(delta: float) -> void: background_close.global_position.x = active_camera.global_position.x * parallax_close # foreground_far.global_position.x = active_camera.global_position.x * foreground +@onready var dance_music: AudioStreamPlayer = $DanceMusic func _on_start_dancing() -> void: dance_cutscene.play("dance") diff --git a/main.tscn b/main.tscn index bb26c16..7100a49 100644 --- a/main.tscn +++ b/main.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=118 format=4 uid="uid://s1cx1gvt4bed"] +[gd_scene load_steps=122 format=4 uid="uid://s1cx1gvt4bed"] [ext_resource type="Script" uid="uid://cvtt52wodbopm" path="res://main.gd" id="1_272bh"] [ext_resource type="PackedScene" uid="uid://yvp44oauis4n" path="res://player/player.tscn" id="1_ig7tw"] @@ -25,6 +25,9 @@ [ext_resource type="Texture2D" uid="uid://dut0ru3y8rung" path="res://ennemy/Flammes.png" id="18_d13ii"] [ext_resource type="AudioStream" uid="uid://c0w61do2a1hbc" path="res://ennemy/black-magic-159868.mp3" id="19_0odxb"] [ext_resource type="PackedScene" uid="uid://b2fyaj2fmrug7" path="res://ennemy/skeleton.tscn" id="19_d13ii"] +[ext_resource type="AudioStream" uid="uid://dfmfve4c3l4fb" path="res://world_assets/audio/564024__gertraut_hecher__harp-arpeggio-medieval-tune.wav" id="26_xuqvo"] +[ext_resource type="AudioStream" uid="uid://cqqa1wa2qs8ib" path="res://world_assets/audio/575585_gertraut_hecher_medieval_life_minstrels_and_jugglers.wav" id="27_qsp4k"] +[ext_resource type="AudioStream" uid="uid://ohxncjlv12wy" path="res://world_assets/audio/787351__gertraut_hecher__medieval-dance-saltarello.wav" id="28_kq58d"] [sub_resource type="AtlasTexture" id="AtlasTexture_ycdy4"] atlas = ExtResource("3_dg77c") @@ -847,6 +850,30 @@ tracks/0/keys = { "update": 0, "values": [Color(0, 0, 0, 0)] } +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("DanceMusic:playing") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("DanceMusic:volume_db") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [0.0] +} [sub_resource type="Animation" id="Animation_2cqfq"] resource_name = "dance" @@ -961,6 +988,30 @@ tracks/7/keys = { "method": &"play" }] } +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("DanceMusic:playing") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [true] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("DanceMusic:volume_db") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 2.99, 6, 8), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, -80.0] +} [sub_resource type="AnimationLibrary" id="AnimationLibrary_yaehf"] _data = { @@ -1208,6 +1259,12 @@ _data = { &"flee": SubResource("Animation_wy5fy") } +[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_seu75"] +streams_count = 3 +stream_0/stream = ExtResource("26_xuqvo") +stream_1/stream = ExtResource("27_qsp4k") +stream_2/stream = ExtResource("28_kq58d") + [node name="Main" type="Node2D"] script = ExtResource("1_272bh") @@ -1639,6 +1696,10 @@ libraries = { &"": SubResource("AnimationLibrary_qnost") } +[node name="DanceMusic" type="AudioStreamPlayer" parent="."] +stream = SubResource("AudioStreamRandomizer_seu75") +bus = &"Music" + [connection signal="dialogue_ended" from="OpeningDialogue" to="Player" method="_on_dialogue_manager_dialogue_ended"] [connection signal="dialogue_ended" from="NPCFirstDialogue" to="ShieldChoice" method="start_choice"] [connection signal="accepted" from="ShieldChoice" to="NPCShieldDialogue" method="on_dialogue_started"] diff --git a/player/player.gd b/player/player.gd index c884d7c..84128ff 100644 --- a/player/player.gd +++ b/player/player.gd @@ -29,6 +29,14 @@ var has_shield = false var has_sword = false var has_armor = false +@onready var steps_player: AudioStreamPlayer = $StepsPlayer +@onready var gearup_armor: AudioStreamPlayer = $GearupArmor +@onready var gearup_sword: AudioStreamPlayer = $GearupSword +@onready var gearup_shield: AudioStreamPlayer = $GearupShield +@onready var sword_hit: AudioStreamPlayer = $SwordHit +@onready var got_hit_audio: AudioStreamPlayer = $GotHitAudio + + func play_anim(): current_sprite.play(current_animation) @@ -115,6 +123,7 @@ func _physics_process(delta: float) -> void: func hit(): is_hitting = true + sword_hit.play() hitting.start() hitbox.monitoring = true @@ -139,6 +148,7 @@ func _on_npc_shield_dialogue_dialogue_ended() -> void: current_sprite.play("idle") current_sprite.visible = true has_shield = true + gearup_shield.play() func _on_red_hood_sword_dialogue_dialogue_ended() -> void: set_in_play() @@ -147,8 +157,10 @@ func _on_red_hood_sword_dialogue_dialogue_ended() -> void: current_sprite.play("idle") current_sprite.visible = true has_sword = true + gearup_sword.play() func _on_put_on_armor() -> void: + gearup_armor.play() current_sprite.visible = false current_sprite = armor current_sprite.play("power_up") @@ -161,3 +173,15 @@ func _on_final_armor_dialogue_ended() -> void: func _on_trigger_final_dialogue_body_entered(body: Node2D) -> void: set_in_cutscene() + + +func _on_step_sound_interval_timeout() -> void: + if velocity.x == 0: + return + if not is_on_floor(): + return + steps_player.play() + + +func _on_damageable_got_hit() -> void: + got_hit_audio.play() diff --git a/player/player.tscn b/player/player.tscn index 005f998..212fcfe 100644 --- a/player/player.tscn +++ b/player/player.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=79 format=3 uid="uid://yvp44oauis4n"] +[gd_scene load_steps=90 format=3 uid="uid://yvp44oauis4n"] [ext_resource type="Script" uid="uid://c1fqj3lba7wik" path="res://player/player.gd" id="1_yw30f"] [ext_resource type="Texture2D" uid="uid://cjruk5xlt3tyn" path="res://ennemy/MechantVol.png" id="2_ebec5"] @@ -13,6 +13,15 @@ [ext_resource type="Shape2D" uid="uid://6rhdwj5jxbxn" path="res://player/player_collision.tres" id="5_qjkh3"] [ext_resource type="Texture2D" uid="uid://dw6tn0grt2ajc" path="res://player/assets/WalkCycle.png" id="10_yllr7"] [ext_resource type="PackedScene" uid="uid://7sqwi3lygb1u" path="res://damageable/hitbox.tscn" id="11_2ieo8"] +[ext_resource type="AudioStream" uid="uid://cw85p1vga71gf" path="res://world_assets/audio/443275__loscolt890__regularfootstep001.wav" id="14_32hag"] +[ext_resource type="AudioStream" uid="uid://dui2a6u3ulit4" path="res://world_assets/audio/443279__loscolt890__regularfootstep003.wav" id="15_tqiix"] +[ext_resource type="AudioStream" uid="uid://b5r486lhi7jnj" path="res://world_assets/audio/443280__loscolt890__regularfootstep002.wav" id="16_e7oew"] +[ext_resource type="AudioStream" uid="uid://brkkvx06htfsi" path="res://world_assets/audio/gearuparmor.wav" id="17_c35mf"] +[ext_resource type="AudioStream" uid="uid://d2ic760ktymkc" path="res://world_assets/audio/gearupsword.wav" id="18_65viv"] +[ext_resource type="AudioStream" uid="uid://bx1m1b8l5j0cc" path="res://world_assets/audio/gearupshield.wav" id="19_x7c3f"] +[ext_resource type="AudioStream" uid="uid://k3nqsuybwrlf" path="res://world_assets/audio/swordhit2.wav" id="20_x7c3f"] +[ext_resource type="AudioStream" uid="uid://c4crs3etujcdo" path="res://world_assets/audio/swordhit.wav" id="21_bjvpn"] +[ext_resource type="AudioStream" uid="uid://cwnf4q8286apo" path="res://world_assets/audio/446013__slavicmagic__sword-hit.wav" id="22_bjvpn"] [sub_resource type="AtlasTexture" id="AtlasTexture_3dxkp"] atlas = ExtResource("2_ebec5") @@ -571,6 +580,17 @@ animations = [{ [sub_resource type="CircleShape2D" id="CircleShape2D_ebec5"] +[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_c35mf"] +streams_count = 3 +stream_0/stream = ExtResource("14_32hag") +stream_1/stream = ExtResource("15_tqiix") +stream_2/stream = ExtResource("16_e7oew") + +[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_s7qer"] +streams_count = 2 +stream_0/stream = ExtResource("20_x7c3f") +stream_1/stream = ExtResource("21_bjvpn") + [node name="Player" type="CharacterBody2D"] collision_layer = 3 script = ExtResource("1_yw30f") @@ -630,4 +650,34 @@ damage = 10 position = Vector2(16, -10) shape = SubResource("CircleShape2D_ebec5") +[node name="StepsPlayer" type="AudioStreamPlayer" parent="."] +stream = SubResource("AudioStreamRandomizer_c35mf") +bus = &"Steps" + +[node name="GearupArmor" type="AudioStreamPlayer" parent="."] +stream = ExtResource("17_c35mf") +bus = &"Gearup" + +[node name="GearupSword" type="AudioStreamPlayer" parent="."] +stream = ExtResource("18_65viv") +bus = &"Gearup" + +[node name="GearupShield" type="AudioStreamPlayer" parent="."] +stream = ExtResource("19_x7c3f") +bus = &"Gearup" + +[node name="SwordHit" type="AudioStreamPlayer" parent="."] +stream = SubResource("AudioStreamRandomizer_s7qer") +bus = &"SFX" + +[node name="StepSoundInterval" type="Timer" parent="."] +wait_time = 0.5 +autostart = true + +[node name="GotHitAudio" type="AudioStreamPlayer" parent="."] +stream = ExtResource("22_bjvpn") +bus = &"SFX" + +[connection signal="got_hit" from="Damageable" to="." method="_on_damageable_got_hit"] [connection signal="timeout" from="Hitting" to="." method="_on_hitting_timeout"] +[connection signal="timeout" from="StepSoundInterval" to="." method="_on_step_sound_interval_timeout"] diff --git a/world_assets/audio/446013__slavicmagic__sword-hit.wav b/world_assets/audio/446013__slavicmagic__sword-hit.wav new file mode 100644 index 0000000..5622bf2 --- /dev/null +++ b/world_assets/audio/446013__slavicmagic__sword-hit.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:290e2679743199bde1a00b4d4588c129f179960d886dcad0128840662ba47c8a +size 251332 diff --git a/world_assets/audio/446013__slavicmagic__sword-hit.wav.import b/world_assets/audio/446013__slavicmagic__sword-hit.wav.import new file mode 100644 index 0000000..04fc46b --- /dev/null +++ b/world_assets/audio/446013__slavicmagic__sword-hit.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cwnf4q8286apo" +path="res://.godot/imported/446013__slavicmagic__sword-hit.wav-855cd710e9d0137dad496c6b33c60516.sample" + +[deps] + +source_file="res://world_assets/audio/446013__slavicmagic__sword-hit.wav" +dest_files=["res://.godot/imported/446013__slavicmagic__sword-hit.wav-855cd710e9d0137dad496c6b33c60516.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=2