diff --git a/asset_dev/sfx/alarm_screech.aup3 b/asset_dev/sfx/alarm_screech.aup3 new file mode 100644 index 0000000..ea4590c Binary files /dev/null and b/asset_dev/sfx/alarm_screech.aup3 differ diff --git a/asset_dev/sfx/alarm_screech_2.aup3 b/asset_dev/sfx/alarm_screech_2.aup3 new file mode 100644 index 0000000..d4f80d2 Binary files /dev/null and b/asset_dev/sfx/alarm_screech_2.aup3 differ diff --git a/asset_dev/sfx/alarm_screech_2.aup3-shm b/asset_dev/sfx/alarm_screech_2.aup3-shm new file mode 100644 index 0000000..92d42dc Binary files /dev/null and b/asset_dev/sfx/alarm_screech_2.aup3-shm differ diff --git a/asset_dev/sfx/alarm_screech_2.aup3-wal b/asset_dev/sfx/alarm_screech_2.aup3-wal new file mode 100644 index 0000000..c939449 Binary files /dev/null and b/asset_dev/sfx/alarm_screech_2.aup3-wal differ diff --git a/assets/sfx/grunk/alarm_screech.wav b/assets/sfx/grunk/alarm_screech.wav new file mode 100644 index 0000000..5b78b1c Binary files /dev/null and b/assets/sfx/grunk/alarm_screech.wav differ diff --git a/assets/sfx/grunk/alarm_screech.wav.import b/assets/sfx/grunk/alarm_screech.wav.import new file mode 100644 index 0000000..7a7837e --- /dev/null +++ b/assets/sfx/grunk/alarm_screech.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://hgmlqv0ss85r" +path="res://.godot/imported/alarm_screech.wav-99f30850091e72de3c561e544b0403c0.sample" + +[deps] + +source_file="res://assets/sfx/grunk/alarm_screech.wav" +dest_files=["res://.godot/imported/alarm_screech.wav-99f30850091e72de3c561e544b0403c0.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/sfx/grunk/alarm_screech_2.wav b/assets/sfx/grunk/alarm_screech_2.wav new file mode 100644 index 0000000..c13a945 Binary files /dev/null and b/assets/sfx/grunk/alarm_screech_2.wav differ diff --git a/assets/sfx/grunk/alarm_screech_2.wav.import b/assets/sfx/grunk/alarm_screech_2.wav.import new file mode 100644 index 0000000..9e43b93 --- /dev/null +++ b/assets/sfx/grunk/alarm_screech_2.wav.import @@ -0,0 +1,24 @@ +[remap] + +importer="wav" +type="AudioStreamWAV" +uid="uid://ypk1d4adrcs" +path="res://.godot/imported/alarm_screech_2.wav-3e4031c4a9d371f7d272e525f351a120.sample" + +[deps] + +source_file="res://assets/sfx/grunk/alarm_screech_2.wav" +dest_files=["res://.godot/imported/alarm_screech_2.wav-3e4031c4a9d371f7d272e525f351a120.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/levels/ghost_ship/player_ship/player_ship.tscn b/levels/ghost_ship/player_ship/player_ship.tscn index bf51a91..319c820 100644 --- a/levels/ghost_ship/player_ship/player_ship.tscn +++ b/levels/ghost_ship/player_ship/player_ship.tscn @@ -103,6 +103,66 @@ _data = { } point_count = 2 +[sub_resource type="Animation" id="Animation_ta4yu"] +length = 0.001 +tracks/0/type = "bezier" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Path3D:curve:point_1/position:x") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/1/type = "bezier" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Path3D:curve:point_1/position:y") +tracks/1/interp = 1 +tracks/1/loop_wrap = true +tracks/1/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(-1.4, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/2/type = "bezier" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Path3D:curve:point_1/position:z") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"handle_modes": PackedInt32Array(0), +"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0), +"times": PackedFloat32Array(0) +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Path3D/GrunkTerminal:rotation") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0.2618, 1.5708, 0)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Path3D/GrunkTerminal/AudioStreamPlayer3D:playing") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} + [sub_resource type="Animation" id="Animation_i4yi7"] resource_name = "jangle" length = 3.0 @@ -164,66 +224,6 @@ tracks/4/keys = { "values": [true] } -[sub_resource type="Animation" id="Animation_ta4yu"] -length = 0.001 -tracks/0/type = "bezier" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("Path3D:curve:point_1/position:x") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"handle_modes": PackedInt32Array(0), -"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0), -"times": PackedFloat32Array(0) -} -tracks/1/type = "bezier" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath("Path3D:curve:point_1/position:y") -tracks/1/interp = 1 -tracks/1/loop_wrap = true -tracks/1/keys = { -"handle_modes": PackedInt32Array(0), -"points": PackedFloat32Array(-1.4, -0.25, 0, 0.25, 0), -"times": PackedFloat32Array(0) -} -tracks/2/type = "bezier" -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/path = NodePath("Path3D:curve:point_1/position:z") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/keys = { -"handle_modes": PackedInt32Array(0), -"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0), -"times": PackedFloat32Array(0) -} -tracks/3/type = "value" -tracks/3/imported = false -tracks/3/enabled = true -tracks/3/path = NodePath("Path3D/GrunkTerminal:rotation") -tracks/3/interp = 1 -tracks/3/loop_wrap = true -tracks/3/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Vector3(0.2618, 1.5708, 0)] -} -tracks/4/type = "value" -tracks/4/imported = false -tracks/4/enabled = true -tracks/4/path = NodePath("Path3D/GrunkTerminal/AudioStreamPlayer3D:playing") -tracks/4/interp = 1 -tracks/4/loop_wrap = true -tracks/4/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 1, -"values": [false] -} - [sub_resource type="AnimationLibrary" id="AnimationLibrary_fw23o"] _data = { &"RESET": SubResource("Animation_ta4yu"), @@ -233,6 +233,21 @@ _data = { [sub_resource type="BoxShape3D" id="BoxShape3D_nps14"] size = Vector3(3, 3, 4) +[sub_resource type="Animation" id="Animation_kkevb"] +length = 0.001 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Door:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 0, +"values": [Vector3(0, -0.3, 0)] +} + [sub_resource type="Animation" id="Animation_nps14"] resource_name = "open" length = 0.2 @@ -249,21 +264,6 @@ tracks/0/keys = { "values": [Vector3(0, -0.3, 0), Vector3(0, 2.25, 0)] } -[sub_resource type="Animation" id="Animation_kkevb"] -length = 0.001 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("Door:position") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0), -"transitions": PackedFloat32Array(1), -"update": 0, -"values": [Vector3(0, -0.3, 0)] -} - [sub_resource type="AnimationLibrary" id="AnimationLibrary_kkevb"] _data = { &"RESET": SubResource("Animation_kkevb"), @@ -363,7 +363,7 @@ curve = SubResource("Curve3D_ta4yu") script = ExtResource("13_i4yi7") [node name="GrunkTerminal" parent="TerminalCable/Path3D" instance=ExtResource("13_3trrp")] -transform = Transform3D(-4.37114e-08, 0.258819, 0.965926, 0, 0.965926, -0.258819, -1, -1.13134e-08, -4.2222e-08, 0, -1.4, 0) +transform = Transform3D(-3.61999e-06, 0.25882, 0.965926, 0, 0.965926, -0.25882, -1, -9.36925e-07, -3.49664e-06, 0, -1.4, 0) [node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="TerminalCable/Path3D/GrunkTerminal"] stream = ExtResource("14_was05") diff --git a/src/world/mechanics/alarm/gunk_alarm.gd b/src/world/mechanics/alarm/gunk_alarm.gd index 066a37a..38893b3 100644 --- a/src/world/mechanics/alarm/gunk_alarm.gd +++ b/src/world/mechanics/alarm/gunk_alarm.gd @@ -15,6 +15,7 @@ var _busy := false @onready var pulse_listener_timer: Timer = %PulseListenerTimer @onready var animation_player: AnimationPlayer = $FrameSkipper/AlarmMesh/AnimationPlayer @onready var bud: MeshInstance3D = $FrameSkipper/AlarmMesh/Armature/Skeleton3D/Bud +@onready var alarm_sfx: AudioStreamPlayer3D = %AlarmSFX ## Trigger this alarm. @@ -25,6 +26,7 @@ func trigger() -> void: _busy = true Game.manager.raise_alert(ALERT_DELTA) animation_player.play("trigger") + alarm_sfx.play() ## Pulse this alarm, resetting the pulse countdown until triggering. diff --git a/src/world/mechanics/alarm/gunk_alarm.tscn b/src/world/mechanics/alarm/gunk_alarm.tscn index 98b1d53..d896605 100644 --- a/src/world/mechanics/alarm/gunk_alarm.tscn +++ b/src/world/mechanics/alarm/gunk_alarm.tscn @@ -1,10 +1,11 @@ -[gd_scene load_steps=9 format=4 uid="uid://dgeg3kkogm71m"] +[gd_scene load_steps=10 format=4 uid="uid://dgeg3kkogm71m"] [ext_resource type="Script" uid="uid://djb5tabjcvwkt" path="res://src/world/mechanics/alarm/gunk_alarm.gd" id="1_piaxx"] [ext_resource type="PackedScene" uid="uid://60ks4l42qxia" path="res://assets/grunk/alarm/alarm.gltf" id="2_6vdvf"] [ext_resource type="Script" uid="uid://bukihqt1lybnx" path="res://src/util/frame_skipper.gd" id="2_gujky"] [ext_resource type="Material" uid="uid://bmab6i16v748m" path="res://assets/materials/grunk_jittery.material" id="3_g4yos"] [ext_resource type="Material" uid="uid://cdpvcruywnp4x" path="res://src/world/mechanics/alarm/alarm_core.material" id="4_c5y52"] +[ext_resource type="AudioStream" uid="uid://ypk1d4adrcs" path="res://assets/sfx/grunk/alarm_screech_2.wav" id="6_6vdvf"] [sub_resource type="ArrayMesh" id="ArrayMesh_c5y52"] resource_local_to_scene = true @@ -99,7 +100,7 @@ bones/28/rotation = Quaternion(0.362943, -7.93195e-08, 1.03952e-07, 0.931811) mesh = SubResource("ArrayMesh_c5y52") [node name="AnimationPlayer" parent="FrameSkipper/AlarmMesh" index="1"] -speed_scale = 4.0 +speed_scale = 7.4 [node name="CollisionMesh" type="MeshInstance3D" parent="."] transform = Transform3D(0.906308, 0, -0.422618, 0, 1, 0, 0.422618, 0, 0.906308, 0, 0.2, 0) @@ -114,6 +115,11 @@ shape = SubResource("ConcavePolygonShape3D_bxx3m") unique_name_in_owner = true one_shot = true +[node name="AlarmSFX" type="AudioStreamPlayer3D" parent="."] +unique_name_in_owner = true +stream = ExtResource("6_6vdvf") +pitch_scale = 1.1 + [connection signal="timeout" from="PulseListenerTimer" to="." method="trigger"] [editable path="FrameSkipper/AlarmMesh"] diff --git a/vault/TODO.md b/vault/TODO.md index 7d88506..68d85f6 100644 --- a/vault/TODO.md +++ b/vault/TODO.md @@ -60,7 +60,7 @@ - [x] switch OK - [ ] switch activation - [x] bulkhead opening - - [ ] grunk alarm shriek + - [x] grunk alarm shriek - [ ] grunk relay chitter - [ ] grunk chittering - [ ] grunkbeast???