From 8b2e059f07f7b8d085f80a704b5afefaf647b132 Mon Sep 17 00:00:00 2001 From: Mike McGhen Date: Wed, 11 Mar 2026 10:23:19 -0400 Subject: [PATCH] Wires in new audio sound fxs --- assets/audio/sfx/door_close.wav | Bin 0 -> 37045 bytes assets/audio/sfx/enemy_shoot.wav | Bin 0 -> 20224 bytes assets/audio/sfx/room_clear.wav | Bin 0 -> 18954 bytes scripts/autoload/audio_manager.gd | 5 +++++ scripts/enemies/enemy_base.gd | 1 + scripts/enemies/hivemind.gd | 2 ++ scripts/enemies/relay.gd | 2 ++ scripts/enemies/repeater.gd | 1 + scripts/enemies/warden.gd | 2 ++ scripts/rooms/room.gd | 8 ++++++++ 10 files changed, 21 insertions(+) create mode 100644 assets/audio/sfx/door_close.wav create mode 100644 assets/audio/sfx/enemy_shoot.wav create mode 100644 assets/audio/sfx/room_clear.wav diff --git a/assets/audio/sfx/door_close.wav b/assets/audio/sfx/door_close.wav new file mode 100644 index 0000000000000000000000000000000000000000..38a583ff80fee1bdcf62dbb6e8b2e17642c8d46b GIT binary patch literal 37045 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 Q9ax=l25RyPhh(Qt{=E=s! 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 m`IchC{Bz void: _die() func _die() -> void: + AudioManager.play("enemy_death") _spawn_drop() queue_free() diff --git a/scripts/enemies/hivemind.gd b/scripts/enemies/hivemind.gd index 9c3a515..d9bcd0b 100644 --- a/scripts/enemies/hivemind.gd +++ b/scripts/enemies/hivemind.gd @@ -863,6 +863,7 @@ func take_damage(amount: float) -> void: current_health -= amount _flash_timer = 0.1 + AudioManager.play("enemy_hit") EventBus.boss_health_changed.emit(maxf(current_health, 0.0), max_health, "THE HIVEMIND") if current_health <= 0.0: @@ -907,6 +908,7 @@ func _tick_climax(delta: float) -> void: func _die() -> void: + AudioManager.play("enemy_death") _clear_orbiters() _end_beam() diff --git a/scripts/enemies/relay.gd b/scripts/enemies/relay.gd index f18dfe5..3b158f8 100644 --- a/scripts/enemies/relay.gd +++ b/scripts/enemies/relay.gd @@ -369,6 +369,7 @@ func take_damage(amount: float) -> void: return current_health -= amount + AudioManager.play("enemy_hit") EventBus.boss_health_changed.emit(current_health, max_health, "THE RELAY") if current_health <= 5.0 and _phase != Phase.CLIMAX: @@ -412,6 +413,7 @@ func _tick_climax(delta: float) -> void: _die() func _die() -> void: + AudioManager.play("enemy_death") EventBus.boss_died.emit() # Cleanup burst projectiles diff --git a/scripts/enemies/repeater.gd b/scripts/enemies/repeater.gd index 5444a76..503dbf5 100644 --- a/scripts/enemies/repeater.gd +++ b/scripts/enemies/repeater.gd @@ -86,6 +86,7 @@ func _do_fire(delta: float) -> void: _shot_timer = BURST_PAUSE func _fire_projectile() -> void: + AudioManager.play("enemy_shoot") var proj = ENEMY_PROJECTILE.instantiate() proj.position = (get_parent() as Node2D).to_local(global_position) proj.direction = Vector2.from_angle(_fire_angle) diff --git a/scripts/enemies/warden.gd b/scripts/enemies/warden.gd index 8cccc03..6042027 100644 --- a/scripts/enemies/warden.gd +++ b/scripts/enemies/warden.gd @@ -370,12 +370,14 @@ func take_damage(amount: float) -> void: return # already dying current_health -= amount _flash_timer = 0.1 + AudioManager.play("enemy_hit") EventBus.boss_health_changed.emit(maxf(current_health, 0.0), max_health, "THE WARDEN") if current_health <= 0.0: _enter_climax() func _die() -> void: + AudioManager.play("enemy_death") _clear_mines() for entry in _sweep_projs: if is_instance_valid(entry["node"]): diff --git a/scripts/rooms/room.gd b/scripts/rooms/room.gd index cc60a10..bb0c7cf 100644 --- a/scripts/rooms/room.gd +++ b/scripts/rooms/room.gd @@ -327,6 +327,7 @@ func _on_enemy_died() -> void: _enemy_count -= 1 if _enemy_count <= 0: data.cleared = true + AudioManager.play("room_clear") if data.type == RoomData.RoomType.BOSS: _spawn_body_part_drop() _spawn_floor_exit() @@ -566,11 +567,18 @@ func _update_door_locks() -> void: (area as Area2D).monitoring = not locked # Update physical door barriers + var was_unlocked := false + for door in _physical_doors.values(): + if not door.is_locked(): + was_unlocked = true + break for door in _physical_doors.values(): if locked: door.lock() else: door.unlock() + if locked and was_unlocked: + AudioManager.play("door_close") # --------------------------------------------------------------------------- # Explicit signal cleanup on exit (safer than relying on Godot auto-cleanup)