From 378fd48c97f41749b4ff8a659d713d7f89130240 Mon Sep 17 00:00:00 2001 From: Codex-1010 Date: Tue, 15 Sep 2026 23:28:13 -0500 Subject: [PATCH 1/8] Player: Add sound effect for throwing the grapple string --- .../sounds/grapple/grapple_throw.wav | 3 +++ .../sounds/grapple/grapple_throw.wav.import | 24 +++++++++++++++++++ .../sounds/grapple/grapple_throw.wav.license | 4 ++++ .../player/components/player_hook.gd | 4 ++++ .../characters/player/player.tscn | 5 ++++ 5 files changed, 40 insertions(+) create mode 100644 assets/third_party/sounds/grapple/grapple_throw.wav create mode 100644 assets/third_party/sounds/grapple/grapple_throw.wav.import create mode 100644 assets/third_party/sounds/grapple/grapple_throw.wav.license diff --git a/assets/third_party/sounds/grapple/grapple_throw.wav b/assets/third_party/sounds/grapple/grapple_throw.wav new file mode 100644 index 0000000000..2ec2842811 --- /dev/null +++ b/assets/third_party/sounds/grapple/grapple_throw.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f587bdf6f5e9f126a4e0fb71ef7e2a31b2635ed246f09ddafb1190c7c47da4af +size 408174 diff --git a/assets/third_party/sounds/grapple/grapple_throw.wav.import b/assets/third_party/sounds/grapple/grapple_throw.wav.import new file mode 100644 index 0000000000..5395acb20e --- /dev/null +++ b/assets/third_party/sounds/grapple/grapple_throw.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://cbie64bvakm04" +path="res://.godot/imported/grapple_throw.wav-60b0968c11fa0748c5ce03fd2618b33d.sample" + +[deps] + +source_file="res://assets/third_party/sounds/grapple/grapple_throw.wav" +dest_files=["res://.godot/imported/grapple_throw.wav-60b0968c11fa0748c5ce03fd2618b33d.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 diff --git a/assets/third_party/sounds/grapple/grapple_throw.wav.license b/assets/third_party/sounds/grapple/grapple_throw.wav.license new file mode 100644 index 0000000000..2d6295aecb --- /dev/null +++ b/assets/third_party/sounds/grapple/grapple_throw.wav.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: ErikCruzDev +SPDX-License-Identifier: CC0-1.0 + +Whip woosh by ErikCruzDev -- https://freesound.org/people/ErikCruzDev/sounds/735907/ diff --git a/scenes/game_elements/characters/player/components/player_hook.gd b/scenes/game_elements/characters/player/components/player_hook.gd index b680397dce..f517c89e8a 100644 --- a/scenes/game_elements/characters/player/components/player_hook.gd +++ b/scenes/game_elements/characters/player/components/player_hook.gd @@ -100,6 +100,9 @@ var hook_string: Line2D ## A [PhantomCamera2D] at the tip of the string. @onready var phantom_camera_2d: PhantomCamera2D = %PhantomCamera2D +## Plays a sound effect when the string is thrown. +@onready var throw_audio_player: AudioStreamPlayer2D = $ThrowAudioPlayer + func _enter_tree() -> void: if not character and get_parent() is CharacterBody2D: @@ -141,6 +144,7 @@ func _new_hook_string() -> Line2D: character.add_sibling(new_hook_string) new_hook_string.owner = character.owner string_thrown.emit() + throw_audio_player.play() return new_hook_string diff --git a/scenes/game_elements/characters/player/player.tscn b/scenes/game_elements/characters/player/player.tscn index 8c507a27b2..2cc83f4321 100644 --- a/scenes/game_elements/characters/player/player.tscn +++ b/scenes/game_elements/characters/player/player.tscn @@ -14,6 +14,7 @@ [ext_resource type="Texture2D" uid="uid://dxaq5piwxqnht" path="res://scenes/game_elements/characters/player/components/dust.png" id="12_3in67"] [ext_resource type="PackedScene" uid="uid://cl06pid826dtg" path="res://scenes/game_elements/characters/player/components/player_repel.tscn" id="12_tnibl"] [ext_resource type="PackedScene" uid="uid://b3111eergq5yg" path="res://scenes/game_elements/characters/player/components/player_hook.tscn" id="13_ecbbk"] +[ext_resource type="AudioStream" uid="uid://cbie64bvakm04" path="res://assets/third_party/sounds/grapple/grapple_throw.wav" id="14_tnibl"] [ext_resource type="Script" uid="uid://bk52qjv58locq" path="res://scenes/game_logic/light2d_behaviors/artificial_light_behavior.gd" id="16_ecbbk"] [ext_resource type="Texture2D" uid="uid://b5ooaiyxdrp6a" path="res://scenes/game_elements/components/light_texture_256x256.tres" id="16_tnibl"] @@ -443,6 +444,10 @@ unique_name_in_owner = true position = Vector2(0, -20) character = NodePath("..") +[node name="ThrowAudioPlayer" type="AudioStreamPlayer2D" parent="PlayerHook" unique_id=777622145] +stream = ExtResource("14_tnibl") +volume_db = -6.0 + [node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=683750023] unique_name_in_owner = true libraries/ = SubResource("AnimationLibrary_qek5x") From 0de17d02ed7afd766c464fe8b97f35bfd9f7362e Mon Sep 17 00:00:00 2001 From: Codex-1010 Date: Tue, 22 Sep 2026 23:47:27 -0500 Subject: [PATCH 2/8] Player: Add sounds for grapple hit, fly, fail and collect events --- .../sounds/grapple/grapple_collect.license | 0 .../sounds/grapple/grapple_collect.wav | 3 +++ .../sounds/grapple/grapple_collect.wav.import | 24 +++++++++++++++++++ .../sounds/grapple/grapple_fail.license | 4 ++++ .../sounds/grapple/grapple_fail.ogg | 3 +++ .../sounds/grapple/grapple_fail.ogg.import | 19 +++++++++++++++ .../sounds/grapple/grapple_fly.license | 4 ++++ .../sounds/grapple/grapple_fly.wav | 3 +++ .../sounds/grapple/grapple_fly.wav.import | 24 +++++++++++++++++++ .../sounds/grapple/grapple_hit.license | 0 .../sounds/grapple/grapple_hit.wav | 3 +++ .../sounds/grapple/grapple_hit.wav.import | 24 +++++++++++++++++++ .../player/components/player_hook.gd | 16 +++++++++++++ .../characters/player/player.tscn | 16 +++++++++++++ 14 files changed, 143 insertions(+) create mode 100644 assets/third_party/sounds/grapple/grapple_collect.license create mode 100644 assets/third_party/sounds/grapple/grapple_collect.wav create mode 100644 assets/third_party/sounds/grapple/grapple_collect.wav.import create mode 100644 assets/third_party/sounds/grapple/grapple_fail.license create mode 100644 assets/third_party/sounds/grapple/grapple_fail.ogg create mode 100644 assets/third_party/sounds/grapple/grapple_fail.ogg.import create mode 100644 assets/third_party/sounds/grapple/grapple_fly.license create mode 100644 assets/third_party/sounds/grapple/grapple_fly.wav create mode 100644 assets/third_party/sounds/grapple/grapple_fly.wav.import create mode 100644 assets/third_party/sounds/grapple/grapple_hit.license create mode 100644 assets/third_party/sounds/grapple/grapple_hit.wav create mode 100644 assets/third_party/sounds/grapple/grapple_hit.wav.import diff --git a/assets/third_party/sounds/grapple/grapple_collect.license b/assets/third_party/sounds/grapple/grapple_collect.license new file mode 100644 index 0000000000..e69de29bb2 diff --git a/assets/third_party/sounds/grapple/grapple_collect.wav b/assets/third_party/sounds/grapple/grapple_collect.wav new file mode 100644 index 0000000000..6cb76dc53a --- /dev/null +++ b/assets/third_party/sounds/grapple/grapple_collect.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e6802ece95d9668394f923bdf19d2ebee260dee9d19070505ca53d5b1a792167 +size 3494 diff --git a/assets/third_party/sounds/grapple/grapple_collect.wav.import b/assets/third_party/sounds/grapple/grapple_collect.wav.import new file mode 100644 index 0000000000..452fc1042b --- /dev/null +++ b/assets/third_party/sounds/grapple/grapple_collect.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://dvctnwkgdbsew" +path="res://.godot/imported/grapple_collect.wav-45318d61b4076db79d40877c4146f334.sample" + +[deps] + +source_file="res://assets/third_party/sounds/grapple/grapple_collect.wav" +dest_files=["res://.godot/imported/grapple_collect.wav-45318d61b4076db79d40877c4146f334.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 diff --git a/assets/third_party/sounds/grapple/grapple_fail.license b/assets/third_party/sounds/grapple/grapple_fail.license new file mode 100644 index 0000000000..d721de61e3 --- /dev/null +++ b/assets/third_party/sounds/grapple/grapple_fail.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: WizardOZ +SPDX-License-Identifier: CC0-1.0 + +Swoosh.ogg by WizardOZ -- https://freesound.org/people/WizardOZ/sounds/419341/ diff --git a/assets/third_party/sounds/grapple/grapple_fail.ogg b/assets/third_party/sounds/grapple/grapple_fail.ogg new file mode 100644 index 0000000000..09f70ce466 --- /dev/null +++ b/assets/third_party/sounds/grapple/grapple_fail.ogg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59a18e66333af3e72cf4c499b539fa3fe09965fb07dcaecf776c93a74b9a405f +size 13037 diff --git a/assets/third_party/sounds/grapple/grapple_fail.ogg.import b/assets/third_party/sounds/grapple/grapple_fail.ogg.import new file mode 100644 index 0000000000..792e35bc60 --- /dev/null +++ b/assets/third_party/sounds/grapple/grapple_fail.ogg.import @@ -0,0 +1,19 @@ +[remap] + +importer="oggvorbisstr" +type="AudioStreamOggVorbis" +uid="uid://b87ceihlec2h2" +path="res://.godot/imported/grapple_fail.ogg-4194c49b417cd161a0bb938e5efede4b.oggvorbisstr" + +[deps] + +source_file="res://assets/third_party/sounds/grapple/grapple_fail.ogg" +dest_files=["res://.godot/imported/grapple_fail.ogg-4194c49b417cd161a0bb938e5efede4b.oggvorbisstr"] + +[params] + +loop=false +loop_offset=0 +bpm=0 +beat_count=0 +bar_beats=4 diff --git a/assets/third_party/sounds/grapple/grapple_fly.license b/assets/third_party/sounds/grapple/grapple_fly.license new file mode 100644 index 0000000000..8335e1f72b --- /dev/null +++ b/assets/third_party/sounds/grapple/grapple_fly.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: Nox_Sound +SPDX-License-Identifier: CC0-1.0 + +Whoosh_Rope.wav by Nox_Sound -- https://freesound.org/people/Nox_Sound/sounds/473583/ diff --git a/assets/third_party/sounds/grapple/grapple_fly.wav b/assets/third_party/sounds/grapple/grapple_fly.wav new file mode 100644 index 0000000000..62acdc1bd1 --- /dev/null +++ b/assets/third_party/sounds/grapple/grapple_fly.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4a71c57156821d113513502ad710c00ae2b93a58f5ef154a71a5b9a7472dc8d +size 61874 diff --git a/assets/third_party/sounds/grapple/grapple_fly.wav.import b/assets/third_party/sounds/grapple/grapple_fly.wav.import new file mode 100644 index 0000000000..add82fbfc9 --- /dev/null +++ b/assets/third_party/sounds/grapple/grapple_fly.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://do2l7t3usqkos" +path="res://.godot/imported/grapple_fly.wav-4edb2cb74a4ee442c9cb3b70a939567e.sample" + +[deps] + +source_file="res://assets/third_party/sounds/grapple/grapple_fly.wav" +dest_files=["res://.godot/imported/grapple_fly.wav-4edb2cb74a4ee442c9cb3b70a939567e.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 diff --git a/assets/third_party/sounds/grapple/grapple_hit.license b/assets/third_party/sounds/grapple/grapple_hit.license new file mode 100644 index 0000000000..e69de29bb2 diff --git a/assets/third_party/sounds/grapple/grapple_hit.wav b/assets/third_party/sounds/grapple/grapple_hit.wav new file mode 100644 index 0000000000..ac76fbc492 --- /dev/null +++ b/assets/third_party/sounds/grapple/grapple_hit.wav @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed4452dce975fa3a1bca24d75f1457e6e33221cbd4ba3ad23b7ef8e8440b02d0 +size 20814 diff --git a/assets/third_party/sounds/grapple/grapple_hit.wav.import b/assets/third_party/sounds/grapple/grapple_hit.wav.import new file mode 100644 index 0000000000..499d78203a --- /dev/null +++ b/assets/third_party/sounds/grapple/grapple_hit.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://5265ydem2dka" +path="res://.godot/imported/grapple_hit.wav-c50fc30668acb41e34849796725d7641.sample" + +[deps] + +source_file="res://assets/third_party/sounds/grapple/grapple_hit.wav" +dest_files=["res://.godot/imported/grapple_hit.wav-c50fc30668acb41e34849796725d7641.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 diff --git a/scenes/game_elements/characters/player/components/player_hook.gd b/scenes/game_elements/characters/player/components/player_hook.gd index f517c89e8a..defbe6c454 100644 --- a/scenes/game_elements/characters/player/components/player_hook.gd +++ b/scenes/game_elements/characters/player/components/player_hook.gd @@ -103,6 +103,18 @@ var hook_string: Line2D ## Plays a sound effect when the string is thrown. @onready var throw_audio_player: AudioStreamPlayer2D = $ThrowAudioPlayer +## Plays a sound effect while the string is flying through the air. +@onready var fly_audio_player: AudioStreamPlayer2D = $FlyAudioPlayer + +## Plays a sound effect when the string hits a hookable area. +@onready var hit_audio_player: AudioStreamPlayer2D = $HitAudioPlayer + +## Plays a sound effect when a throw fails to hook anything. +@onready var fail_audio_player: AudioStreamPlayer2D = $FailAudioPlayer + +## Plays a sound effect when a collectible is picked up through the hook. +@onready var collect_audio_player: AudioStreamPlayer2D = $CollectAudioPlayer + func _enter_tree() -> void: if not character and get_parent() is CharacterBody2D: @@ -145,6 +157,7 @@ func _new_hook_string() -> Line2D: new_hook_string.owner = character.owner string_thrown.emit() throw_audio_player.play() + fly_audio_player.play() return new_hook_string @@ -159,6 +172,7 @@ func hooked(_new_hooked_to: HookableArea, is_loop: bool) -> void: CameraUtilities.copy_current_camera_limits(phantom_camera_2d) phantom_camera_2d.priority = 20 hook_ending.global_position = p + hit_audio_player.play() areas_hooked.append(_new_hooked_to) if not _new_hooked_to.hook_control: # The area hooked doesn't have a control to aim from it, so start pulling: @@ -189,6 +203,7 @@ func hit_wall(wall_point: Vector2) -> void: hook_string = _new_hook_string() hook_string.add_point(wall_point, 0) areas_hooked.append(null) + fail_audio_player.play() ## Called when a throw has hit the air. @@ -199,6 +214,7 @@ func hit_air(air_point: Vector2) -> void: hook_string = _new_hook_string() hook_string.add_point(air_point, 0) areas_hooked.append(null) + fail_audio_player.play() ## Remove the [member hook_string]. diff --git a/scenes/game_elements/characters/player/player.tscn b/scenes/game_elements/characters/player/player.tscn index 2cc83f4321..5fb7956729 100644 --- a/scenes/game_elements/characters/player/player.tscn +++ b/scenes/game_elements/characters/player/player.tscn @@ -15,8 +15,12 @@ [ext_resource type="PackedScene" uid="uid://cl06pid826dtg" path="res://scenes/game_elements/characters/player/components/player_repel.tscn" id="12_tnibl"] [ext_resource type="PackedScene" uid="uid://b3111eergq5yg" path="res://scenes/game_elements/characters/player/components/player_hook.tscn" id="13_ecbbk"] [ext_resource type="AudioStream" uid="uid://cbie64bvakm04" path="res://assets/third_party/sounds/grapple/grapple_throw.wav" id="14_tnibl"] +[ext_resource type="AudioStream" uid="uid://do2l7t3usqkos" path="res://assets/third_party/sounds/grapple/grapple_fly.wav" id="15_ubfef"] +[ext_resource type="AudioStream" uid="uid://5265ydem2dka" path="res://assets/third_party/sounds/grapple/grapple_hit.wav" id="16_2ge3f"] [ext_resource type="Script" uid="uid://bk52qjv58locq" path="res://scenes/game_logic/light2d_behaviors/artificial_light_behavior.gd" id="16_ecbbk"] [ext_resource type="Texture2D" uid="uid://b5ooaiyxdrp6a" path="res://scenes/game_elements/components/light_texture_256x256.tres" id="16_tnibl"] +[ext_resource type="AudioStream" uid="uid://b87ceihlec2h2" path="res://assets/third_party/sounds/grapple/grapple_fail.ogg" id="17_gwwh8"] +[ext_resource type="AudioStream" uid="uid://dvctnwkgdbsew" path="res://assets/third_party/sounds/grapple/grapple_collect.wav" id="18_m5klb"] [sub_resource type="Resource" id="Resource_cvb4d"] script = ExtResource("3_cvb4d") @@ -448,6 +452,18 @@ character = NodePath("..") stream = ExtResource("14_tnibl") volume_db = -6.0 +[node name="FlyAudioPlayer" type="AudioStreamPlayer2D" parent="PlayerHook" unique_id=90856791] +stream = ExtResource("15_ubfef") + +[node name="HitAudioPlayer" type="AudioStreamPlayer2D" parent="PlayerHook" unique_id=2144461127] +stream = ExtResource("16_2ge3f") + +[node name="FailAudioPlayer" type="AudioStreamPlayer2D" parent="PlayerHook" unique_id=739492964] +stream = ExtResource("17_gwwh8") + +[node name="CollectAudioPlayer" type="AudioStreamPlayer2D" parent="PlayerHook" unique_id=314969344] +stream = ExtResource("18_m5klb") + [node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=683750023] unique_name_in_owner = true libraries/ = SubResource("AnimationLibrary_qek5x") From 7d4628fcd5b5ffa4a4ed122dabb693274cbcd778 Mon Sep 17 00:00:00 2001 From: Codex-1010 Date: Tue, 22 Sep 2026 23:58:27 -0500 Subject: [PATCH 3/8] Player: Use unique node names for audio players --- .../characters/player/components/player_hook.gd | 10 +++++----- scenes/game_elements/characters/player/player.tscn | 5 +++++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/scenes/game_elements/characters/player/components/player_hook.gd b/scenes/game_elements/characters/player/components/player_hook.gd index defbe6c454..765168778b 100644 --- a/scenes/game_elements/characters/player/components/player_hook.gd +++ b/scenes/game_elements/characters/player/components/player_hook.gd @@ -101,19 +101,19 @@ var hook_string: Line2D @onready var phantom_camera_2d: PhantomCamera2D = %PhantomCamera2D ## Plays a sound effect when the string is thrown. -@onready var throw_audio_player: AudioStreamPlayer2D = $ThrowAudioPlayer +@onready var throw_audio_player: AudioStreamPlayer2D = %ThrowAudioPlayer ## Plays a sound effect while the string is flying through the air. -@onready var fly_audio_player: AudioStreamPlayer2D = $FlyAudioPlayer +@onready var fly_audio_player: AudioStreamPlayer2D = %FlyAudioPlayer ## Plays a sound effect when the string hits a hookable area. -@onready var hit_audio_player: AudioStreamPlayer2D = $HitAudioPlayer +@onready var hit_audio_player: AudioStreamPlayer2D = %HitAudioPlayer ## Plays a sound effect when a throw fails to hook anything. -@onready var fail_audio_player: AudioStreamPlayer2D = $FailAudioPlayer +@onready var fail_audio_player: AudioStreamPlayer2D = %FailAudioPlayer ## Plays a sound effect when a collectible is picked up through the hook. -@onready var collect_audio_player: AudioStreamPlayer2D = $CollectAudioPlayer +@onready var collect_audio_player: AudioStreamPlayer2D = %CollectAudioPlayer func _enter_tree() -> void: diff --git a/scenes/game_elements/characters/player/player.tscn b/scenes/game_elements/characters/player/player.tscn index 5fb7956729..ec7d5c80ff 100644 --- a/scenes/game_elements/characters/player/player.tscn +++ b/scenes/game_elements/characters/player/player.tscn @@ -449,19 +449,24 @@ position = Vector2(0, -20) character = NodePath("..") [node name="ThrowAudioPlayer" type="AudioStreamPlayer2D" parent="PlayerHook" unique_id=777622145] +unique_name_in_owner = true stream = ExtResource("14_tnibl") volume_db = -6.0 [node name="FlyAudioPlayer" type="AudioStreamPlayer2D" parent="PlayerHook" unique_id=90856791] +unique_name_in_owner = true stream = ExtResource("15_ubfef") [node name="HitAudioPlayer" type="AudioStreamPlayer2D" parent="PlayerHook" unique_id=2144461127] +unique_name_in_owner = true stream = ExtResource("16_2ge3f") [node name="FailAudioPlayer" type="AudioStreamPlayer2D" parent="PlayerHook" unique_id=739492964] +unique_name_in_owner = true stream = ExtResource("17_gwwh8") [node name="CollectAudioPlayer" type="AudioStreamPlayer2D" parent="PlayerHook" unique_id=314969344] +unique_name_in_owner = true stream = ExtResource("18_m5klb") [node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=683750023] From b0ee3234a318e148fe15b2af28808eeaba61f680 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Wed, 23 Sep 2026 09:51:24 -0300 Subject: [PATCH 4/8] Move grappling hook sound effects to PlayerHook --- .../player/components/player_hook.tscn | 26 +++++++++++++++++++ .../characters/player/player.tscn | 26 ------------------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/scenes/game_elements/characters/player/components/player_hook.tscn b/scenes/game_elements/characters/player/components/player_hook.tscn index d8fb4d6990..88d35f3373 100644 --- a/scenes/game_elements/characters/player/components/player_hook.tscn +++ b/scenes/game_elements/characters/player/components/player_hook.tscn @@ -4,6 +4,11 @@ [ext_resource type="PackedScene" uid="uid://b0dehcnfo68j1" path="res://scenes/game_elements/props/hook_control/hook_control.tscn" id="2_5svv0"] [ext_resource type="Script" uid="uid://bhexx6mj1xv3q" path="res://addons/phantom_camera/scripts/phantom_camera/phantom_camera_2d.gd" id="3_wahl3"] [ext_resource type="Script" uid="uid://8umksf8e80fw" path="res://addons/phantom_camera/scripts/resources/tween_resource.gd" id="4_muesi"] +[ext_resource type="AudioStream" uid="uid://cbie64bvakm04" path="res://assets/third_party/sounds/grapple/grapple_throw.wav" id="5_4y42v"] +[ext_resource type="AudioStream" uid="uid://do2l7t3usqkos" path="res://assets/third_party/sounds/grapple/grapple_fly.wav" id="6_282du"] +[ext_resource type="AudioStream" uid="uid://5265ydem2dka" path="res://assets/third_party/sounds/grapple/grapple_hit.wav" id="7_y2mwr"] +[ext_resource type="AudioStream" uid="uid://b87ceihlec2h2" path="res://assets/third_party/sounds/grapple/grapple_fail.ogg" id="8_xdtmi"] +[ext_resource type="AudioStream" uid="uid://dvctnwkgdbsew" path="res://assets/third_party/sounds/grapple/grapple_collect.wav" id="9_jel7r"] [sub_resource type="Resource" id="Resource_lv7pl"] script = ExtResource("4_muesi") @@ -28,3 +33,24 @@ dead_zone_width = 0.4 dead_zone_height = 0.2 draw_limits = true metadata/_custom_type_script = "uid://bhexx6mj1xv3q" + +[node name="ThrowAudioPlayer" type="AudioStreamPlayer2D" parent="." unique_id=557191266] +unique_name_in_owner = true +stream = ExtResource("5_4y42v") +volume_db = -6.0 + +[node name="FlyAudioPlayer" type="AudioStreamPlayer2D" parent="." unique_id=1205196393] +unique_name_in_owner = true +stream = ExtResource("6_282du") + +[node name="HitAudioPlayer" type="AudioStreamPlayer2D" parent="." unique_id=1735421435] +unique_name_in_owner = true +stream = ExtResource("7_y2mwr") + +[node name="FailAudioPlayer" type="AudioStreamPlayer2D" parent="." unique_id=1335991406] +unique_name_in_owner = true +stream = ExtResource("8_xdtmi") + +[node name="CollectAudioPlayer" type="AudioStreamPlayer2D" parent="." unique_id=1144699779] +unique_name_in_owner = true +stream = ExtResource("9_jel7r") diff --git a/scenes/game_elements/characters/player/player.tscn b/scenes/game_elements/characters/player/player.tscn index ec7d5c80ff..8c507a27b2 100644 --- a/scenes/game_elements/characters/player/player.tscn +++ b/scenes/game_elements/characters/player/player.tscn @@ -14,13 +14,8 @@ [ext_resource type="Texture2D" uid="uid://dxaq5piwxqnht" path="res://scenes/game_elements/characters/player/components/dust.png" id="12_3in67"] [ext_resource type="PackedScene" uid="uid://cl06pid826dtg" path="res://scenes/game_elements/characters/player/components/player_repel.tscn" id="12_tnibl"] [ext_resource type="PackedScene" uid="uid://b3111eergq5yg" path="res://scenes/game_elements/characters/player/components/player_hook.tscn" id="13_ecbbk"] -[ext_resource type="AudioStream" uid="uid://cbie64bvakm04" path="res://assets/third_party/sounds/grapple/grapple_throw.wav" id="14_tnibl"] -[ext_resource type="AudioStream" uid="uid://do2l7t3usqkos" path="res://assets/third_party/sounds/grapple/grapple_fly.wav" id="15_ubfef"] -[ext_resource type="AudioStream" uid="uid://5265ydem2dka" path="res://assets/third_party/sounds/grapple/grapple_hit.wav" id="16_2ge3f"] [ext_resource type="Script" uid="uid://bk52qjv58locq" path="res://scenes/game_logic/light2d_behaviors/artificial_light_behavior.gd" id="16_ecbbk"] [ext_resource type="Texture2D" uid="uid://b5ooaiyxdrp6a" path="res://scenes/game_elements/components/light_texture_256x256.tres" id="16_tnibl"] -[ext_resource type="AudioStream" uid="uid://b87ceihlec2h2" path="res://assets/third_party/sounds/grapple/grapple_fail.ogg" id="17_gwwh8"] -[ext_resource type="AudioStream" uid="uid://dvctnwkgdbsew" path="res://assets/third_party/sounds/grapple/grapple_collect.wav" id="18_m5klb"] [sub_resource type="Resource" id="Resource_cvb4d"] script = ExtResource("3_cvb4d") @@ -448,27 +443,6 @@ unique_name_in_owner = true position = Vector2(0, -20) character = NodePath("..") -[node name="ThrowAudioPlayer" type="AudioStreamPlayer2D" parent="PlayerHook" unique_id=777622145] -unique_name_in_owner = true -stream = ExtResource("14_tnibl") -volume_db = -6.0 - -[node name="FlyAudioPlayer" type="AudioStreamPlayer2D" parent="PlayerHook" unique_id=90856791] -unique_name_in_owner = true -stream = ExtResource("15_ubfef") - -[node name="HitAudioPlayer" type="AudioStreamPlayer2D" parent="PlayerHook" unique_id=2144461127] -unique_name_in_owner = true -stream = ExtResource("16_2ge3f") - -[node name="FailAudioPlayer" type="AudioStreamPlayer2D" parent="PlayerHook" unique_id=739492964] -unique_name_in_owner = true -stream = ExtResource("17_gwwh8") - -[node name="CollectAudioPlayer" type="AudioStreamPlayer2D" parent="PlayerHook" unique_id=314969344] -unique_name_in_owner = true -stream = ExtResource("18_m5klb") - [node name="AnimationPlayer" type="AnimationPlayer" parent="." unique_id=683750023] unique_name_in_owner = true libraries/ = SubResource("AnimationLibrary_qek5x") From 54f3f6041debf019642a50c22ae8605d8ca6bf54 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Wed, 23 Sep 2026 10:47:39 -0300 Subject: [PATCH 5/8] Grapple sounds: Adjust volume, pitch and max distance Also change when to play them in the script, and always play the throw effect combined with the others. Also rename the nodes to match the code. --- .../player/components/player_hook.gd | 24 ++++++++--------- .../player/components/player_hook.tscn | 27 +++++++++++-------- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/scenes/game_elements/characters/player/components/player_hook.gd b/scenes/game_elements/characters/player/components/player_hook.gd index 765168778b..db13d1a412 100644 --- a/scenes/game_elements/characters/player/components/player_hook.gd +++ b/scenes/game_elements/characters/player/components/player_hook.gd @@ -103,17 +103,14 @@ var hook_string: Line2D ## Plays a sound effect when the string is thrown. @onready var throw_audio_player: AudioStreamPlayer2D = %ThrowAudioPlayer -## Plays a sound effect while the string is flying through the air. -@onready var fly_audio_player: AudioStreamPlayer2D = %FlyAudioPlayer +## Plays a sound effect while the string hits the air. +@onready var hit_air_audio_player: AudioStreamPlayer2D = %HitAirAudioPlayer ## Plays a sound effect when the string hits a hookable area. -@onready var hit_audio_player: AudioStreamPlayer2D = %HitAudioPlayer +@onready var hooked_audio_player: AudioStreamPlayer2D = %HookedAudioPlayer -## Plays a sound effect when a throw fails to hook anything. -@onready var fail_audio_player: AudioStreamPlayer2D = %FailAudioPlayer - -## Plays a sound effect when a collectible is picked up through the hook. -@onready var collect_audio_player: AudioStreamPlayer2D = %CollectAudioPlayer +## Plays a sound effect when the string hits a wall. +@onready var hit_wall_audio_player: AudioStreamPlayer2D = %HitWallAudioPlayer func _enter_tree() -> void: @@ -156,8 +153,6 @@ func _new_hook_string() -> Line2D: character.add_sibling(new_hook_string) new_hook_string.owner = character.owner string_thrown.emit() - throw_audio_player.play() - fly_audio_player.play() return new_hook_string @@ -172,7 +167,8 @@ func hooked(_new_hooked_to: HookableArea, is_loop: bool) -> void: CameraUtilities.copy_current_camera_limits(phantom_camera_2d) phantom_camera_2d.priority = 20 hook_ending.global_position = p - hit_audio_player.play() + throw_audio_player.play() + hooked_audio_player.play() areas_hooked.append(_new_hooked_to) if not _new_hooked_to.hook_control: # The area hooked doesn't have a control to aim from it, so start pulling: @@ -203,7 +199,8 @@ func hit_wall(wall_point: Vector2) -> void: hook_string = _new_hook_string() hook_string.add_point(wall_point, 0) areas_hooked.append(null) - fail_audio_player.play() + throw_audio_player.play() + hit_wall_audio_player.play() ## Called when a throw has hit the air. @@ -214,7 +211,8 @@ func hit_air(air_point: Vector2) -> void: hook_string = _new_hook_string() hook_string.add_point(air_point, 0) areas_hooked.append(null) - fail_audio_player.play() + throw_audio_player.play() + hit_air_audio_player.play() ## Remove the [member hook_string]. diff --git a/scenes/game_elements/characters/player/components/player_hook.tscn b/scenes/game_elements/characters/player/components/player_hook.tscn index 88d35f3373..574dee1e0d 100644 --- a/scenes/game_elements/characters/player/components/player_hook.tscn +++ b/scenes/game_elements/characters/player/components/player_hook.tscn @@ -8,7 +8,6 @@ [ext_resource type="AudioStream" uid="uid://do2l7t3usqkos" path="res://assets/third_party/sounds/grapple/grapple_fly.wav" id="6_282du"] [ext_resource type="AudioStream" uid="uid://5265ydem2dka" path="res://assets/third_party/sounds/grapple/grapple_hit.wav" id="7_y2mwr"] [ext_resource type="AudioStream" uid="uid://b87ceihlec2h2" path="res://assets/third_party/sounds/grapple/grapple_fail.ogg" id="8_xdtmi"] -[ext_resource type="AudioStream" uid="uid://dvctnwkgdbsew" path="res://assets/third_party/sounds/grapple/grapple_collect.wav" id="9_jel7r"] [sub_resource type="Resource" id="Resource_lv7pl"] script = ExtResource("4_muesi") @@ -37,20 +36,26 @@ metadata/_custom_type_script = "uid://bhexx6mj1xv3q" [node name="ThrowAudioPlayer" type="AudioStreamPlayer2D" parent="." unique_id=557191266] unique_name_in_owner = true stream = ExtResource("5_4y42v") -volume_db = -6.0 +volume_db = 8.0 +max_distance = 1200.0 -[node name="FlyAudioPlayer" type="AudioStreamPlayer2D" parent="." unique_id=1205196393] -unique_name_in_owner = true -stream = ExtResource("6_282du") - -[node name="HitAudioPlayer" type="AudioStreamPlayer2D" parent="." unique_id=1735421435] +[node name="HookedAudioPlayer" type="AudioStreamPlayer2D" parent="." unique_id=1735421435] unique_name_in_owner = true stream = ExtResource("7_y2mwr") +volume_db = 6.0 +pitch_scale = 5.0 +max_distance = 1200.0 -[node name="FailAudioPlayer" type="AudioStreamPlayer2D" parent="." unique_id=1335991406] +[node name="HitAirAudioPlayer" type="AudioStreamPlayer2D" parent="." unique_id=1205196393] unique_name_in_owner = true -stream = ExtResource("8_xdtmi") +stream = ExtResource("6_282du") +volume_db = -10.0 +pitch_scale = 1.3 +max_distance = 1200.0 -[node name="CollectAudioPlayer" type="AudioStreamPlayer2D" parent="." unique_id=1144699779] +[node name="HitWallAudioPlayer" type="AudioStreamPlayer2D" parent="." unique_id=1335991406] unique_name_in_owner = true -stream = ExtResource("9_jel7r") +stream = ExtResource("8_xdtmi") +volume_db = -3.0 +pitch_scale = 5.0 +max_distance = 1200.0 From 5cfe73b09cefddcc37563b3595d48bfb04a411b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Wed, 23 Sep 2026 10:52:04 -0300 Subject: [PATCH 6/8] Rename license files --- .../{grapple_collect.license => grapple_collect.wav.license} | 0 .../grapple/{grapple_fail.license => grapple_fail.ogg.license} | 0 .../grapple/{grapple_fly.license => grapple_fly.wav.license} | 0 .../grapple/{grapple_hit.license => grapple_hit.wav.license} | 0 4 files changed, 0 insertions(+), 0 deletions(-) rename assets/third_party/sounds/grapple/{grapple_collect.license => grapple_collect.wav.license} (100%) rename assets/third_party/sounds/grapple/{grapple_fail.license => grapple_fail.ogg.license} (100%) rename assets/third_party/sounds/grapple/{grapple_fly.license => grapple_fly.wav.license} (100%) rename assets/third_party/sounds/grapple/{grapple_hit.license => grapple_hit.wav.license} (100%) diff --git a/assets/third_party/sounds/grapple/grapple_collect.license b/assets/third_party/sounds/grapple/grapple_collect.wav.license similarity index 100% rename from assets/third_party/sounds/grapple/grapple_collect.license rename to assets/third_party/sounds/grapple/grapple_collect.wav.license diff --git a/assets/third_party/sounds/grapple/grapple_fail.license b/assets/third_party/sounds/grapple/grapple_fail.ogg.license similarity index 100% rename from assets/third_party/sounds/grapple/grapple_fail.license rename to assets/third_party/sounds/grapple/grapple_fail.ogg.license diff --git a/assets/third_party/sounds/grapple/grapple_fly.license b/assets/third_party/sounds/grapple/grapple_fly.wav.license similarity index 100% rename from assets/third_party/sounds/grapple/grapple_fly.license rename to assets/third_party/sounds/grapple/grapple_fly.wav.license diff --git a/assets/third_party/sounds/grapple/grapple_hit.license b/assets/third_party/sounds/grapple/grapple_hit.wav.license similarity index 100% rename from assets/third_party/sounds/grapple/grapple_hit.license rename to assets/third_party/sounds/grapple/grapple_hit.wav.license From 8dc516cf6d8510c08635f892b94e4dda4633f8c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20Qui=C3=B1ones?= Date: Wed, 23 Sep 2026 10:58:53 -0300 Subject: [PATCH 7/8] Hook audio: Change to SFX bus and set panning strength --- .../characters/player/components/player_hook.tscn | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/scenes/game_elements/characters/player/components/player_hook.tscn b/scenes/game_elements/characters/player/components/player_hook.tscn index 574dee1e0d..37abf3b939 100644 --- a/scenes/game_elements/characters/player/components/player_hook.tscn +++ b/scenes/game_elements/characters/player/components/player_hook.tscn @@ -38,6 +38,8 @@ unique_name_in_owner = true stream = ExtResource("5_4y42v") volume_db = 8.0 max_distance = 1200.0 +panning_strength = 0.5 +bus = &"SFX" [node name="HookedAudioPlayer" type="AudioStreamPlayer2D" parent="." unique_id=1735421435] unique_name_in_owner = true @@ -45,6 +47,8 @@ stream = ExtResource("7_y2mwr") volume_db = 6.0 pitch_scale = 5.0 max_distance = 1200.0 +panning_strength = 0.5 +bus = &"SFX" [node name="HitAirAudioPlayer" type="AudioStreamPlayer2D" parent="." unique_id=1205196393] unique_name_in_owner = true @@ -52,6 +56,8 @@ stream = ExtResource("6_282du") volume_db = -10.0 pitch_scale = 1.3 max_distance = 1200.0 +panning_strength = 0.5 +bus = &"SFX" [node name="HitWallAudioPlayer" type="AudioStreamPlayer2D" parent="." unique_id=1335991406] unique_name_in_owner = true @@ -59,3 +65,5 @@ stream = ExtResource("8_xdtmi") volume_db = -3.0 pitch_scale = 5.0 max_distance = 1200.0 +panning_strength = 0.5 +bus = &"SFX" From 0995567da12990af04e16e41dc5084600c89398c Mon Sep 17 00:00:00 2001 From: Codex-1010 Date: Wed, 23 Sep 2026 13:48:58 -0500 Subject: [PATCH 8/8] Add missing license file contents --- assets/third_party/sounds/grapple/grapple_collect.wav.license | 4 ++++ assets/third_party/sounds/grapple/grapple_hit.wav.license | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/assets/third_party/sounds/grapple/grapple_collect.wav.license b/assets/third_party/sounds/grapple/grapple_collect.wav.license index e69de29bb2..86b3fe78f0 100644 --- a/assets/third_party/sounds/grapple/grapple_collect.wav.license +++ b/assets/third_party/sounds/grapple/grapple_collect.wav.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: LSpec +SPDX-License-Identifier: CC0-1.0 + +pickup_item_pop_effect by LSpec -- https://freesound.org/people/LSpec/sounds/868506/ diff --git a/assets/third_party/sounds/grapple/grapple_hit.wav.license b/assets/third_party/sounds/grapple/grapple_hit.wav.license index e69de29bb2..0f25c19c84 100644 --- a/assets/third_party/sounds/grapple/grapple_hit.wav.license +++ b/assets/third_party/sounds/grapple/grapple_hit.wav.license @@ -0,0 +1,4 @@ +SPDX-FileCopyrightText: The.sound.Root +SPDX-License-Identifier: CC0-1.0 + +Short Click by The.sound.Root -- https://freesound.org/people/The.sound.Root/sounds/792319/