Compare commits

..

5 Commits

Author SHA1 Message Date
f966dc43df Computer does a little jingle jangle on reload
All checks were successful
linting & formatting / build (push) Successful in 22s
2025-04-01 20:03:35 -06:00
2440103f66 Creaking metal 2025-04-01 18:18:46 -06:00
0a7dabc797 Chitter & ambiance 2025-04-01 16:12:47 -06:00
c1610629df Plastic footsteps 2025-04-01 12:38:15 -06:00
76f6cff965 Squishy footsteps for grunk 2025-04-01 12:23:31 -06:00
76 changed files with 1098 additions and 20 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://dx4d8a3mgpws"
path="res://.godot/imported/drone_loop.wav-50d3d68932a0f8909ec9e82813b96e81.sample"
[deps]
source_file="res://assets/sfx/ambient/drone_loop.wav"
dest_files=["res://.godot/imported/drone_loop.wav-50d3d68932a0f8909ec9e82813b96e81.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=2
edit/loop_begin=0
edit/loop_end=-1
compress/mode=2

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://cqh31d5my7fst"
path="res://.godot/imported/metal_creak1.wav-a72b7ee01a1248f0ebb7ee255aa967a8.sample"
[deps]
source_file="res://assets/sfx/ambient/metal_creak1.wav"
dest_files=["res://.godot/imported/metal_creak1.wav-a72b7ee01a1248f0ebb7ee255aa967a8.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

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://cfvdtl1n42bis"
path="res://.godot/imported/metal_creak2.wav-d321f0e1beee9e46895a66b1d0ba6cd3.sample"
[deps]
source_file="res://assets/sfx/ambient/metal_creak2.wav"
dest_files=["res://.godot/imported/metal_creak2.wav-d321f0e1beee9e46895a66b1d0ba6cd3.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

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://p5uendw5mb3x"
path="res://.godot/imported/metal_creak3.wav-abbe70474878fc7f80613c55338c8ac9.sample"
[deps]
source_file="res://assets/sfx/ambient/metal_creak3.wav"
dest_files=["res://.godot/imported/metal_creak3.wav-abbe70474878fc7f80613c55338c8ac9.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

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://2qg0vqhygdwu"
path="res://.godot/imported/metal_creak4.wav-8caa320412d3816732c7bc29c9c56bf9.sample"
[deps]
source_file="res://assets/sfx/ambient/metal_creak4.wav"
dest_files=["res://.godot/imported/metal_creak4.wav-8caa320412d3816732c7bc29c9c56bf9.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

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://ot7sr34qya3j"
path="res://.godot/imported/metal_creak5.wav-f548f5f5f39eb91fc2441b8edfa5a2ef.sample"
[deps]
source_file="res://assets/sfx/ambient/metal_creak5.wav"
dest_files=["res://.godot/imported/metal_creak5.wav-f548f5f5f39eb91fc2441b8edfa5a2ef.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

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://7w531ufwc8c3"
path="res://.godot/imported/metal_creak6.wav-c732fd331c4152c703e3a68ffbd882b3.sample"
[deps]
source_file="res://assets/sfx/ambient/metal_creak6.wav"
dest_files=["res://.godot/imported/metal_creak6.wav-c732fd331c4152c703e3a68ffbd882b3.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

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://c60m6qlq5cnp2"
path="res://.godot/imported/metal_creak7.wav-5492a96fdd18e144010413a42f059a68.sample"
[deps]
source_file="res://assets/sfx/ambient/metal_creak7.wav"
dest_files=["res://.godot/imported/metal_creak7.wav-5492a96fdd18e144010413a42f059a68.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

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://cvwc2r2cmnaim"
path="res://.godot/imported/metal_creak8.wav-0cff1fbe83cc492a5c003e6149dbf2dc.sample"
[deps]
source_file="res://assets/sfx/ambient/metal_creak8.wav"
dest_files=["res://.godot/imported/metal_creak8.wav-0cff1fbe83cc492a5c003e6149dbf2dc.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

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://c838ofbu4bqrn"
path="res://.godot/imported/computer_noise.wav-1bfe3b9b5e4b3c21bd96289c75340c5a.sample"
[deps]
source_file="res://assets/sfx/computer_noise.wav"
dest_files=["res://.godot/imported/computer_noise.wav-1bfe3b9b5e4b3c21bd96289c75340c5a.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

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://tlmmikytpp6r"
path="res://.godot/imported/grunk1.wav-bd52b5c2c311b3ac2d168133a66e115d.sample"
[deps]
source_file="res://assets/sfx/footsteps/grunk/grunk1.wav"
dest_files=["res://.godot/imported/grunk1.wav-bd52b5c2c311b3ac2d168133a66e115d.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

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://dmscjvx66fxlf"
path="res://.godot/imported/grunk2.wav-a45a2bc9fb219818c07548021cc2541a.sample"
[deps]
source_file="res://assets/sfx/footsteps/grunk/grunk2.wav"
dest_files=["res://.godot/imported/grunk2.wav-a45a2bc9fb219818c07548021cc2541a.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

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://dmqyajdgxld0o"
path="res://.godot/imported/grunk3.wav-252122fced628008dbb7cd192545111b.sample"
[deps]
source_file="res://assets/sfx/footsteps/grunk/grunk3.wav"
dest_files=["res://.godot/imported/grunk3.wav-252122fced628008dbb7cd192545111b.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

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://djdixjel10yn1"
path="res://.godot/imported/grunk4.wav-6bed7493bcbb4f9c0e5465ab36b7a847.sample"
[deps]
source_file="res://assets/sfx/footsteps/grunk/grunk4.wav"
dest_files=["res://.godot/imported/grunk4.wav-6bed7493bcbb4f9c0e5465ab36b7a847.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

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://4mbqcr8vmd5c"
path="res://.godot/imported/grunk5.wav-1cc1d241834c620d0bd372b7bad0d0a5.sample"
[deps]
source_file="res://assets/sfx/footsteps/grunk/grunk5.wav"
dest_files=["res://.godot/imported/grunk5.wav-1cc1d241834c620d0bd372b7bad0d0a5.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

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://div20rlq8ync5"
path="res://.godot/imported/plastic1.wav-794d926ca63a1f188c40e6f854b3a8b5.sample"
[deps]
source_file="res://assets/sfx/footsteps/plastic/plastic1.wav"
dest_files=["res://.godot/imported/plastic1.wav-794d926ca63a1f188c40e6f854b3a8b5.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

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://dvyr3m24ccgrf"
path="res://.godot/imported/plastic2.wav-7fde480418e5945fd50869995510dbce.sample"
[deps]
source_file="res://assets/sfx/footsteps/plastic/plastic2.wav"
dest_files=["res://.godot/imported/plastic2.wav-7fde480418e5945fd50869995510dbce.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

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://djucfo3l7x7px"
path="res://.godot/imported/plastic3.wav-3f1a85212096e927a6e4e086c37a5f31.sample"
[deps]
source_file="res://assets/sfx/footsteps/plastic/plastic3.wav"
dest_files=["res://.godot/imported/plastic3.wav-3f1a85212096e927a6e4e086c37a5f31.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

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://cim5scvx3y6lk"
path="res://.godot/imported/plastic4.wav-52d2cab1714f4cb394db64cfbe66c6b7.sample"
[deps]
source_file="res://assets/sfx/footsteps/plastic/plastic4.wav"
dest_files=["res://.godot/imported/plastic4.wav-52d2cab1714f4cb394db64cfbe66c6b7.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

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://ck86vhmbg3xnj"
path="res://.godot/imported/plastic5.wav-2bc1ec30deb6f15a4a6d84a82dbe29e6.sample"
[deps]
source_file="res://assets/sfx/footsteps/plastic/plastic5.wav"
dest_files=["res://.godot/imported/plastic5.wav-2bc1ec30deb6f15a4a6d84a82dbe29e6.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

BIN
assets/sfx/grunk/groan1.wav Normal file

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://b288km80xeh0"
path="res://.godot/imported/groan1.wav-166de7281a9e784fa78c70717b1d3d25.sample"
[deps]
source_file="res://assets/sfx/grunk/groan1.wav"
dest_files=["res://.godot/imported/groan1.wav-166de7281a9e784fa78c70717b1d3d25.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

BIN
assets/sfx/grunk/groan2.wav Normal file

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://bujyltdunajj4"
path="res://.godot/imported/groan2.wav-4e09bb09a4fa758f7652d6019d2f82fc.sample"
[deps]
source_file="res://assets/sfx/grunk/groan2.wav"
dest_files=["res://.godot/imported/groan2.wav-4e09bb09a4fa758f7652d6019d2f82fc.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

BIN
assets/sfx/grunk/groan3.wav Normal file

Binary file not shown.

View File

@ -0,0 +1,24 @@
[remap]
importer="wav"
type="AudioStreamWAV"
uid="uid://bvtopyke5d17x"
path="res://.godot/imported/groan3.wav-fe410936dcc4c7f7a7e17ce1ef5eecf0.sample"
[deps]
source_file="res://assets/sfx/grunk/groan3.wav"
dest_files=["res://.godot/imported/groan3.wav-fe410936dcc4c7f7a7e17ce1ef5eecf0.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

View File

@ -0,0 +1,62 @@
extends AudioStreamPlayer
const MUTE_VOLUME := -80.0
@export var volume_increment := 0.618
@export var base_volume := -14.0
@export var boosted_volume := -2.0
var target_volume := MUTE_VOLUME
var suppressed := false
var boosted := false
func _ready() -> void:
Game.manager.alert_raised.connect(_on_alert_raised)
func get_target_volume() -> float:
if suppressed:
return MUTE_VOLUME
if boosted:
return boosted_volume
return target_volume
## Temporarily suppress ambience
func suppress(time: float = 5.0) -> void:
suppressed = true
get_tree().create_timer(time).timeout.connect(_unsuppress)
## Temporarily boost ambience
func boost(time: float = 5.0) -> void:
boosted = true
get_tree().create_timer(time).timeout.connect(_unboost)
func _unsuppress() -> void:
suppressed = false
func _unboost() -> void:
boosted = false
func _process(delta: float) -> void:
volume_db = lerpf(volume_db, get_target_volume(), volume_increment * delta)
func _on_player_enters_ship(_body: Node3D) -> void:
target_volume = MUTE_VOLUME
func _on_player_exits_ship(_body: Node3D) -> void:
target_volume = base_volume
func _on_alert_raised(new_level: int) -> void:
if new_level == Game.manager.MAX_ALERT:
suppress(30)
else:
boost(10.0)

View File

@ -0,0 +1 @@
uid://441gcyrbv0jd

View File

@ -1,9 +1,36 @@
[gd_scene load_steps=5 format=3 uid="uid://bov4ok76woyc"] [gd_scene load_steps=18 format=3 uid="uid://bov4ok76woyc"]
[ext_resource type="PackedScene" uid="uid://crydi5cjgfwe5" path="res://levels/ghost_ship/ghost_ship_level.tscn" id="1_aj2m7"] [ext_resource type="PackedScene" uid="uid://crydi5cjgfwe5" path="res://levels/ghost_ship/ghost_ship_level.tscn" id="1_aj2m7"]
[ext_resource type="Environment" uid="uid://bkvij3ljl5ox3" path="res://levels/ghost_ship/environment_3.tres" id="1_wwgrl"] [ext_resource type="Environment" uid="uid://bkvij3ljl5ox3" path="res://levels/ghost_ship/environment_3.tres" id="1_wwgrl"]
[ext_resource type="PackedScene" uid="uid://bwe2jdmvinhqd" path="res://src/player/player.tscn" id="2_0ef5p"] [ext_resource type="PackedScene" uid="uid://bwe2jdmvinhqd" path="res://src/player/player.tscn" id="2_0ef5p"]
[ext_resource type="PackedScene" uid="uid://d1kacn4b60ucy" path="res://src/ui/post_processing.tscn" id="3_o7mxe"] [ext_resource type="PackedScene" uid="uid://d1kacn4b60ucy" path="res://src/ui/post_processing.tscn" id="3_o7mxe"]
[ext_resource type="AudioStream" uid="uid://dx4d8a3mgpws" path="res://assets/sfx/ambient/drone_loop.wav" id="5_ejh2c"]
[ext_resource type="Script" uid="uid://441gcyrbv0jd" path="res://levels/ghost_ship/ambient_drone.gd" id="5_jiowi"]
[ext_resource type="PackedScene" uid="uid://dd21uy6yfgg51" path="res://src/effects/creaker/creaker.tscn" id="7_vdioa"]
[ext_resource type="AudioStream" uid="uid://cqh31d5my7fst" path="res://assets/sfx/ambient/metal_creak1.wav" id="8_ihj8k"]
[ext_resource type="AudioStream" uid="uid://cfvdtl1n42bis" path="res://assets/sfx/ambient/metal_creak2.wav" id="9_d2iql"]
[ext_resource type="AudioStream" uid="uid://p5uendw5mb3x" path="res://assets/sfx/ambient/metal_creak3.wav" id="10_8h40n"]
[ext_resource type="AudioStream" uid="uid://2qg0vqhygdwu" path="res://assets/sfx/ambient/metal_creak4.wav" id="11_it47q"]
[ext_resource type="AudioStream" uid="uid://ot7sr34qya3j" path="res://assets/sfx/ambient/metal_creak5.wav" id="12_h081y"]
[ext_resource type="AudioStream" uid="uid://7w531ufwc8c3" path="res://assets/sfx/ambient/metal_creak6.wav" id="13_law5k"]
[ext_resource type="AudioStream" uid="uid://c60m6qlq5cnp2" path="res://assets/sfx/ambient/metal_creak7.wav" id="14_4mbcm"]
[ext_resource type="AudioStream" uid="uid://cvwc2r2cmnaim" path="res://assets/sfx/ambient/metal_creak8.wav" id="15_r4ldl"]
[sub_resource type="BoxShape3D" id="BoxShape3D_o7mxe"]
size = Vector3(6, 4, 15)
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_d8fas"]
playback_mode = 1
random_pitch = 1.1
streams_count = 8
stream_0/stream = ExtResource("8_ihj8k")
stream_1/stream = ExtResource("9_d2iql")
stream_2/stream = ExtResource("10_8h40n")
stream_3/stream = ExtResource("11_it47q")
stream_4/stream = ExtResource("12_h081y")
stream_5/stream = ExtResource("13_law5k")
stream_6/stream = ExtResource("14_4mbcm")
stream_7/stream = ExtResource("15_r4ldl")
[node name="GhostShip" type="Node3D"] [node name="GhostShip" type="Node3D"]
@ -18,3 +45,61 @@ environment = ExtResource("1_wwgrl")
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 1, 0) transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 0, 1, 0)
[node name="Player" parent="PlayerSpawn" instance=ExtResource("2_0ef5p")] [node name="Player" parent="PlayerSpawn" instance=ExtResource("2_0ef5p")]
[node name="PlayerShipArea" type="Area3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
collision_layer = 0
collision_mask = 8
[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerShipArea"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0)
shape = SubResource("BoxShape3D_o7mxe")
[node name="AmbientDrone" type="AudioStreamPlayer" parent="."]
unique_name_in_owner = true
stream = ExtResource("5_ejh2c")
volume_db = -80.0
autoplay = true
bus = &"Music"
script = ExtResource("5_jiowi")
base_volume = -18.0
[node name="AmbientSFX" type="Node3D" parent="."]
[node name="Creaker" parent="AmbientSFX" instance=ExtResource("7_vdioa")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -21, 1, -38)
stream = SubResource("AudioStreamRandomizer_d8fas")
unit_size = 2.0
interval_mean = 120.0
interval_st_dev = 30.0
[node name="Creaker2" parent="AmbientSFX" instance=ExtResource("7_vdioa")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 1, -54)
stream = SubResource("AudioStreamRandomizer_d8fas")
unit_size = 2.0
interval_mean = 120.0
interval_st_dev = 30.0
[node name="Creaker3" parent="AmbientSFX" instance=ExtResource("7_vdioa")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -27, 1, -54)
stream = SubResource("AudioStreamRandomizer_d8fas")
unit_size = 2.0
interval_mean = 120.0
interval_st_dev = 30.0
[node name="Creaker4" parent="AmbientSFX" instance=ExtResource("7_vdioa")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -2, -77)
stream = SubResource("AudioStreamRandomizer_d8fas")
unit_size = 2.0
interval_mean = 120.0
interval_st_dev = 30.0
[node name="Creaker5" parent="AmbientSFX" instance=ExtResource("7_vdioa")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 2, -38)
stream = SubResource("AudioStreamRandomizer_d8fas")
unit_size = 2.0
interval_mean = 120.0
interval_st_dev = 30.0
[connection signal="body_entered" from="PlayerShipArea" to="AmbientDrone" method="_on_player_enters_ship"]
[connection signal="body_exited" from="PlayerShipArea" to="AmbientDrone" method="_on_player_exits_ship"]

View File

@ -6196,6 +6196,7 @@ outline_size = 36
[node name="GrunkNodule" parent="Airlock" instance=ExtResource("19_ji5cn")] [node name="GrunkNodule" parent="Airlock" instance=ExtResource("19_ji5cn")]
transform = Transform3D(1, 0, 0, 0, 0.866026, -0.5, 0, 0.5, 0.866026, -2.05, 0.15, -4.5) transform = Transform3D(1, 0, 0, 0, 0.866026, -0.5, 0, 0.5, 0.866026, -2.05, 0.15, -4.5)
chitter = true
value = 4000.0 value = 4000.0
[node name="GrunkNodule2" parent="Airlock" instance=ExtResource("19_ji5cn")] [node name="GrunkNodule2" parent="Airlock" instance=ExtResource("19_ji5cn")]
@ -6203,6 +6204,7 @@ transform = Transform3D(0.5, 0, 0, 0, 0.353553, 0.353554, 0, -0.353554, 0.353553
[node name="GrunkNodule3" parent="Airlock" instance=ExtResource("19_ji5cn")] [node name="GrunkNodule3" parent="Airlock" instance=ExtResource("19_ji5cn")]
transform = Transform3D(0.5, 0, 0, 0, 0.353553, 0.353554, 0, -0.353554, 0.353553, 1.4, 2.65, -4.3) transform = Transform3D(0.5, 0, 0, 0, 0.353553, 0.353554, 0, -0.353554, 0.353553, 1.4, 2.65, -4.3)
chitter = true
[node name="OverheadLight" parent="Airlock" instance=ExtResource("39_kp5n7")] [node name="OverheadLight" parent="Airlock" instance=ExtResource("39_kp5n7")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 0)
@ -6293,10 +6295,12 @@ shape = SubResource("ConcavePolygonShape3D_ruwlj")
[node name="GrunkNodule" parent="Corridor1/Hallway2" instance=ExtResource("19_ji5cn")] [node name="GrunkNodule" parent="Corridor1/Hallway2" instance=ExtResource("19_ji5cn")]
transform = Transform3D(0.866025, 0.5, 0, -0.5, 0.866025, 0, 0, 0, 1, -1.35, 0, -1.15) transform = Transform3D(0.866025, 0.5, 0, -0.5, 0.866025, 0, 0, 0, 1, -1.35, 0, -1.15)
chitter = true
value = 4000.0 value = 4000.0
[node name="GrunkNodule2" parent="Corridor1/Hallway2" instance=ExtResource("19_ji5cn")] [node name="GrunkNodule2" parent="Corridor1/Hallway2" instance=ExtResource("19_ji5cn")]
transform = Transform3D(0.519615, 0.3, 0, 2.98023e-08, 2.98023e-08, -0.6, -0.3, 0.519615, 0, -1.35, 0, 0.25) transform = Transform3D(0.519615, 0.3, 0, 2.98023e-08, 2.98023e-08, -0.6, -0.3, 0.519615, 0, -1.35, 0, 0.25)
chitter = true
[node name="GrunkNodule3" parent="Corridor1/Hallway2" instance=ExtResource("19_ji5cn")] [node name="GrunkNodule3" parent="Corridor1/Hallway2" instance=ExtResource("19_ji5cn")]
transform = Transform3D(0.129904, 0.375, -0.45, -0.439868, -0.241946, -0.328601, -0.386835, 0.401045, 0.222535, -1.35, 0.5, -0.25) transform = Transform3D(0.129904, 0.375, -0.45, -0.439868, -0.241946, -0.328601, -0.386835, 0.401045, 0.222535, -1.35, 0.5, -0.25)
@ -6307,10 +6311,12 @@ value = 800.0
[node name="GrunkNodule6" parent="Corridor1/Hallway2" instance=ExtResource("19_ji5cn")] [node name="GrunkNodule6" parent="Corridor1/Hallway2" instance=ExtResource("19_ji5cn")]
transform = Transform3D(0.109602, 0.109602, 0.268468, 0.219203, -0.219203, 9.58262e-10, 0.189835, 0.189835, -0.155, -1.5, 1.52511, -2.25) transform = Transform3D(0.109602, 0.109602, 0.268468, 0.219203, -0.219203, 9.58262e-10, 0.189835, 0.189835, -0.155, -1.5, 1.52511, -2.25)
chitter = true
value = 800.0 value = 800.0
[node name="GrunkNodule5" parent="Corridor1/Hallway2" instance=ExtResource("19_ji5cn")] [node name="GrunkNodule5" parent="Corridor1/Hallway2" instance=ExtResource("19_ji5cn")]
transform = Transform3D(0.0773296, 0.288598, 0.1725, 0.0446463, 0.166622, -0.298779, -0.333244, 0.0892925, -7.54021e-09, -1.5, 1.12511, -1.75) transform = Transform3D(0.0773296, 0.288598, 0.1725, 0.0446463, 0.166622, -0.298779, -0.333244, 0.0892925, -7.54021e-09, -1.5, 1.12511, -1.75)
chitter = true
value = 800.0 value = 800.0
[node name="FloatingDust" parent="Corridor1/Hallway2" instance=ExtResource("25_6giaa")] [node name="FloatingDust" parent="Corridor1/Hallway2" instance=ExtResource("25_6giaa")]
@ -6791,6 +6797,7 @@ value = 500.0
[node name="GrunkNodule7" parent="MessHall/Traps/Trap1" instance=ExtResource("19_ji5cn")] [node name="GrunkNodule7" parent="MessHall/Traps/Trap1" instance=ExtResource("19_ji5cn")]
transform = Transform3D(0.214063, 0.323536, -0.0974745, -0.07312, -0.0683013, -0.387283, -0.329895, 0.225076, 0.0225905, 1.44886, 0.3, 1.41177) transform = Transform3D(0.214063, 0.323536, -0.0974745, -0.07312, -0.0683013, -0.387283, -0.329895, 0.225076, 0.0225905, 1.44886, 0.3, 1.41177)
chitter = true
durability = 1.5 durability = 1.5
value = 500.0 value = 500.0
@ -6812,9 +6819,11 @@ transform = Transform3D(-0.364606, -0.492715, -0.338074, -0.478109, 0.478109, -0
[node name="GrunkNodule8" parent="MessHall/Traps/Trap1" instance=ExtResource("19_ji5cn")] [node name="GrunkNodule8" parent="MessHall/Traps/Trap1" instance=ExtResource("19_ji5cn")]
transform = Transform3D(-0.435211, -0.430994, -0.338873, -0.539981, 0.411872, 0.169653, 0.0949319, 0.366886, -0.588543, -0.507496, 0.6, -2.41218) transform = Transform3D(-0.435211, -0.430994, -0.338873, -0.539981, 0.411872, 0.169653, 0.0949319, 0.366886, -0.588543, -0.507496, 0.6, -2.41218)
chitter = true
[node name="GrunkNodule9" parent="MessHall/Traps/Trap1" instance=ExtResource("19_ji5cn")] [node name="GrunkNodule9" parent="MessHall/Traps/Trap1" instance=ExtResource("19_ji5cn")]
transform = Transform3D(-0.0703269, 0.693365, 0.0655666, 0.696452, 0.0702819, 0.00378095, -0.00283841, 0.0656149, -0.696912, -1.35603, 0.6, -0.942478) transform = Transform3D(-0.0703269, 0.693365, 0.0655666, 0.696452, 0.0702819, 0.00378095, -0.00283841, 0.0656149, -0.696912, -1.35603, 0.6, -0.942478)
chitter = true
[node name="GrunkNodule10" parent="MessHall/Traps/Trap1" instance=ExtResource("19_ji5cn")] [node name="GrunkNodule10" parent="MessHall/Traps/Trap1" instance=ExtResource("19_ji5cn")]
transform = Transform3D(0.0233609, -0.207042, -0.45452, 0.497466, 0.0502018, 0.00270045, 0.0445172, -0.452342, 0.208338, -1.49432, 0.348541, 0.0263252) transform = Transform3D(0.0233609, -0.207042, -0.45452, 0.497466, 0.0502018, 0.00270045, 0.0445172, -0.452342, 0.208338, -1.49432, 0.348541, 0.0263252)
@ -6824,6 +6833,7 @@ editor_description = "Teach players traps may not always be obvious"
[node name="GrunkNodule8" parent="MessHall/Traps/Trap2" instance=ExtResource("19_ji5cn")] [node name="GrunkNodule8" parent="MessHall/Traps/Trap2" instance=ExtResource("19_ji5cn")]
transform = Transform3D(0.73038, 0.635646, -0.25, -0.683013, 0.683013, -0.258819, 0.00623576, 0.35979, 0.933013, 2.53411, 0.4, 5.23866) transform = Transform3D(0.73038, 0.635646, -0.25, -0.683013, 0.683013, -0.258819, 0.00623576, 0.35979, 0.933013, 2.53411, 0.4, 5.23866)
chitter = true
[node name="GrunkNodule10" parent="MessHall/Traps/Trap2" instance=ExtResource("19_ji5cn")] [node name="GrunkNodule10" parent="MessHall/Traps/Trap2" instance=ExtResource("19_ji5cn")]
transform = Transform3D(-0.124128, -0.101968, 0.578096, -0.434356, -0.381517, -0.160559, 0.394876, -0.451716, 0.00511129, 2.23411, 1.3, 4.63866) transform = Transform3D(-0.124128, -0.101968, 0.578096, -0.434356, -0.381517, -0.160559, 0.394876, -0.451716, 0.00511129, 2.23411, 1.3, 4.63866)
@ -6839,6 +6849,7 @@ value = 300.0
[node name="GrunkNodule16" parent="MessHall/Traps/Trap2" instance=ExtResource("19_ji5cn")] [node name="GrunkNodule16" parent="MessHall/Traps/Trap2" instance=ExtResource("19_ji5cn")]
transform = Transform3D(0.121483, -0.134858, -0.238862, -0.195351, 0.140856, -0.178879, 0.192561, 0.227976, -0.030777, 1.37645, 1.58525, 4.81688) transform = Transform3D(0.121483, -0.134858, -0.238862, -0.195351, 0.140856, -0.178879, 0.192561, 0.227976, -0.030777, 1.37645, 1.58525, 4.81688)
chitter = true
value = 300.0 value = 300.0
[node name="GrunkNodule12" parent="MessHall/Traps/Trap2" instance=ExtResource("19_ji5cn")] [node name="GrunkNodule12" parent="MessHall/Traps/Trap2" instance=ExtResource("19_ji5cn")]

View File

@ -18,6 +18,7 @@ const STALLING_MSG := "\n\n\n\n\n. . . C a l c u l a t i n G . . ."
@onready var text_terminal: TextTerminal = %TextTerminal @onready var text_terminal: TextTerminal = %TextTerminal
@onready var stall_timer: Timer = %StallTimer @onready var stall_timer: Timer = %StallTimer
@onready var terminal_animation: AnimationPlayer = %TerminalAnimation
func _ready() -> void: func _ready() -> void:
@ -56,6 +57,7 @@ func build_message() -> String:
## Under the hood this is instantaneous, but we want to stall for dramatic effect. ## Under the hood this is instantaneous, but we want to stall for dramatic effect.
func recompute() -> void: func recompute() -> void:
text_terminal.text = STALLING_MSG text_terminal.text = STALLING_MSG
terminal_animation.play("jangle")
stall_timer.start() stall_timer.start()

View File

@ -24,6 +24,7 @@ func deposit_grunk() -> void:
# Tank is disabled until the player collects more grunk. # Tank is disabled until the player collects more grunk.
tank_interactor.enabled = false tank_interactor.enabled = false
Game.manager.deposit_tank() Game.manager.deposit_tank()
set_liquid_level(clampf(Game.manager.grunk_vault / MAX_GRUNK, 0.0, 1.0)) set_liquid_level(clampf(Game.manager.grunk_vault / MAX_GRUNK, 0.0, 1.0))

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=22 format=3 uid="uid://oowut88kr2ox"] [gd_scene load_steps=29 format=3 uid="uid://oowut88kr2ox"]
[ext_resource type="Script" uid="uid://lfd36ps52xgk" path="res://levels/ghost_ship/player_ship/player_ship.gd" id="1_0r2ng"] [ext_resource type="Script" uid="uid://lfd36ps52xgk" path="res://levels/ghost_ship/player_ship/player_ship.gd" id="1_0r2ng"]
[ext_resource type="ArrayMesh" uid="uid://dq4aj5ph31rce" path="res://assets/level/player_ship/player_ship.obj" id="1_nafoa"] [ext_resource type="ArrayMesh" uid="uid://dq4aj5ph31rce" path="res://assets/level/player_ship/player_ship.obj" id="1_nafoa"]
@ -13,6 +13,8 @@
[ext_resource type="Texture2D" uid="uid://cm1jrvx7ftx4c" path="res://assets/black.png" id="9_xuj2g"] [ext_resource type="Texture2D" uid="uid://cm1jrvx7ftx4c" path="res://assets/black.png" id="9_xuj2g"]
[ext_resource type="FastNoiseLite" uid="uid://cnlvdtx68giv6" path="res://assets/materials/gunk_noise.tres" id="10_2mvif"] [ext_resource type="FastNoiseLite" uid="uid://cnlvdtx68giv6" path="res://assets/materials/gunk_noise.tres" id="10_2mvif"]
[ext_resource type="PackedScene" uid="uid://mgygam1kakb7" path="res://levels/ghost_ship/player_ship/grunk_terminal/grunk_terminal.tscn" id="13_3trrp"] [ext_resource type="PackedScene" uid="uid://mgygam1kakb7" path="res://levels/ghost_ship/player_ship/grunk_terminal/grunk_terminal.tscn" id="13_3trrp"]
[ext_resource type="Script" uid="uid://vewq8h8uulbg" path="res://src/util/translator_path_3d.gd" id="13_i4yi7"]
[ext_resource type="AudioStream" uid="uid://c838ofbu4bqrn" path="res://assets/sfx/computer_noise.wav" id="14_was05"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_xpsdy"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_xpsdy"]
transparency = 1 transparency = 1
@ -79,10 +81,147 @@ shader_parameter/jitter_noise = SubResource("NoiseTexture3D_omayi")
shader_parameter/vertex_inflation = 0.0 shader_parameter/vertex_inflation = 0.0
shader_parameter/inflation_pixellation = 10.0 shader_parameter/inflation_pixellation = 10.0
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_i4yi7"]
albedo_color = Color(0.243137, 0.231373, 0.219608, 1)
[sub_resource type="Curve3D" id="Curve3D_ta4yu"]
_data = {
"points": PackedVector3Array(0, 0, 0, -0.6, -0.525, 0, 0, 0, 0, -0.6, 0, 0, 0.05, 0, 0, 0, -1.4, 0),
"tilts": PackedFloat32Array(0, 0)
}
point_count = 2
[sub_resource type="Animation" id="Animation_i4yi7"]
resource_name = "jangle"
length = 3.0
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, 0, 0, 0),
"points": PackedFloat32Array(0, -0.25, 0, 0.25, 0.15, 0, -0.25, 0.15, 0.25, -0.15, 0, -0.25, -0.025, 0.266667, 0.0459175, 0, -0.366667, -0.00160158, 0.25, 0),
"times": PackedFloat32Array(0, 1, 2, 3)
}
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, 0, 0, 0, 0, 0, 0),
"points": PackedFloat32Array(-1.4, -0.25, 0, 0.16, 0.25, -1.4, -0.25, 0.25, 0.25, -0.2, -1.4, -0.25, -0.2, 0.25, 0.15, -1.4, -0.25, 0.15, 0.25, -0.1, -1.4, -0.25, -0.1, 0.25, 0.05, -1.4, -0.25, 0.05, 0.25, 0, -1.4, -0.25, 0, 0.25, 0),
"times": PackedFloat32Array(0, 0.6, 1, 1.5, 2, 2.5, 3)
}
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, 0, 0, 0, 0, 0),
"points": PackedFloat32Array(0, -0.25, 0, 0.2, 0.2, 0, -0.2, 0.2, 0.233333, -0.227317, 0, -0.2, 0.0429476, 0.2, -0.025, 0, -0.2, -0.025, 0.2, 0.013, 0, -0.2, 0.013, 0.2, -0.001, 0, -0.0666666, 0.00136808, 0.25, 0),
"times": PackedFloat32Array(0, 0.8, 1.9, 2.3, 2.6, 3)
}
tracks/3/type = "value"
tracks/3/imported = false
tracks/3/enabled = true
tracks/3/path = NodePath("Path3D/GrunkTerminal:rotation")
tracks/3/interp = 2
tracks/3/loop_wrap = true
tracks/3/keys = {
"times": PackedFloat32Array(0, 0.5, 1.3, 2.2, 3),
"transitions": PackedFloat32Array(0.618, 1, 1, 1, 1),
"update": 0,
"values": [Vector3(0.2618, 1.5708, 0), Vector3(0.158825, 1.5708, 0.174533), Vector3(0.467748, 1.5708, -0.139626), Vector3(0.261799, 1.5708, 0.0698132), Vector3(0.261799, 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": [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"),
&"jangle": SubResource("Animation_i4yi7")
}
[node name="PlayerShip" type="Node3D"] [node name="PlayerShip" type="Node3D"]
script = ExtResource("1_0r2ng") script = ExtResource("1_0r2ng")
[node name="StaticBody3D" type="StaticBody3D" parent="."] [node name="StaticBody3D" type="StaticBody3D" parent="." groups=["PlasticMaterial"]]
collision_layer = 5 collision_layer = 5
[node name="PlayerShipMesh" type="MeshInstance3D" parent="StaticBody3D"] [node name="PlayerShipMesh" type="MeshInstance3D" parent="StaticBody3D"]
@ -126,7 +265,38 @@ light_energy = 2.0
light_indirect_energy = 8.0 light_indirect_energy = 8.0
omni_range = 10.0 omni_range = 10.0
[node name="GrunkTerminal" parent="." instance=ExtResource("13_3trrp")] [node name="TerminalCable" type="CSGPolygon3D" parent="."]
transform = Transform3D(-0.707107, 0.183013, 0.683013, 0, 0.965926, -0.258819, -0.707107, -0.183013, -0.683013, -1.87678, 1.71247, 4.17322) transform = Transform3D(0.707107, 0, 0.707107, 0, 1, 0, -0.707107, 0, 0.707107, -1.87678, 3.21247, 4.17322)
polygon = PackedVector2Array(0.25, 0, 0.125, 0.217, -0.125, 0.217, -0.25, 0, -0.125, -0.216, 0.125, -0.216)
mode = 2
path_node = NodePath("Path3D")
path_interval_type = 0
path_interval = 0.25
path_simplify_angle = 0.0
path_rotation = 2
path_rotation_accurate = false
path_local = true
path_continuous_u = true
path_u_distance = 1.0
path_joined = false
material = SubResource("StandardMaterial3D_i4yi7")
[node name="Path3D" type="Path3D" parent="TerminalCable"]
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)
[node name="AudioStreamPlayer3D" type="AudioStreamPlayer3D" parent="TerminalCable/Path3D/GrunkTerminal"]
stream = ExtResource("14_was05")
volume_db = -6.0
unit_size = 1.0
[node name="TerminalAnimation" type="AnimationPlayer" parent="TerminalCable"]
unique_name_in_owner = true
libraries = {
&"": SubResource("AnimationLibrary_fw23o")
}
[connection signal="activated" from="TankInteractor" to="." method="deposit_grunk"] [connection signal="activated" from="TankInteractor" to="." method="deposit_grunk"]

View File

@ -181,6 +181,7 @@ locale/translations=PackedStringArray("res://assets/text/text.en.translation")
3d_physics/layer_1="Physics" 3d_physics/layer_1="Physics"
3d_physics/layer_2="Interactive" 3d_physics/layer_2="Interactive"
3d_physics/layer_3="Sprayable" 3d_physics/layer_3="Sprayable"
3d_physics/layer_4="Player"
[rendering] [rendering]

View File

@ -0,0 +1,20 @@
extends AudioStreamPlayer3D
# Plays sounds at a random interval
@export var interval_mean := 60.0
@export var interval_st_dev := 10.0
@onready var timer: Timer = %Timer
func _ready() -> void:
restart_timer()
func restart_timer() -> void:
timer.start(maxf(0.0, randfn(interval_mean, interval_st_dev)))
func _on_timer_timeout() -> void:
play()
restart_timer()

View File

@ -0,0 +1 @@
uid://g26s3cyq4iao

View File

@ -0,0 +1,12 @@
[gd_scene load_steps=2 format=3 uid="uid://dd21uy6yfgg51"]
[ext_resource type="Script" uid="uid://g26s3cyq4iao" path="res://src/effects/creaker/creaker.gd" id="1_4jx4a"]
[node name="Creaker" type="AudioStreamPlayer3D"]
script = ExtResource("1_4jx4a")
[node name="Timer" type="Timer" parent="."]
unique_name_in_owner = true
one_shot = true
[connection signal="timeout" from="Timer" to="." method="_on_timer_timeout"]

View File

@ -1,14 +1,16 @@
class_name FootController extends Node3D class_name FootController extends Node3D
@onready var metal: AudioStreamPlayer3D = $Metal @onready var metal: AudioStreamPlayer3D = $Metal
@onready var grunk: AudioStreamPlayer3D = $Grunk
@onready var plastic: AudioStreamPlayer3D = $Plastic
func get_player_for_material(surface_material: SurfaceMaterial.Type) -> AudioStreamPlayer3D: func get_player_for_material(surface_material: SurfaceMaterial.Type) -> AudioStreamPlayer3D:
match surface_material: match surface_material:
SurfaceMaterial.Type.GRUNK: SurfaceMaterial.Type.GRUNK:
pass # TODO return grunk
SurfaceMaterial.Type.PLASTIC: SurfaceMaterial.Type.PLASTIC:
pass # TODO return plastic
SurfaceMaterial.Type.METAL: SurfaceMaterial.Type.METAL:
return metal return metal
SurfaceMaterial.Type.UNKNOWN: SurfaceMaterial.Type.UNKNOWN:

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=36 format=3 uid="uid://bwe2jdmvinhqd"] [gd_scene load_steps=49 format=3 uid="uid://bwe2jdmvinhqd"]
[ext_resource type="Script" uid="uid://buwh0g1ga2aka" path="res://src/player/player.gd" id="1_npueo"] [ext_resource type="Script" uid="uid://buwh0g1ga2aka" path="res://src/player/player.gd" id="1_npueo"]
[ext_resource type="Script" uid="uid://cx1yt0drthpw3" path="res://src/player/camera_controller.gd" id="2_veeqv"] [ext_resource type="Script" uid="uid://cx1yt0drthpw3" path="res://src/player/camera_controller.gd" id="2_veeqv"]
@ -17,10 +17,19 @@
[ext_resource type="AudioStream" uid="uid://bpdnw4qgbp6kj" path="res://assets/sfx/footsteps/metal/metal9.wav" id="14_4uy46"] [ext_resource type="AudioStream" uid="uid://bpdnw4qgbp6kj" path="res://assets/sfx/footsteps/metal/metal9.wav" id="14_4uy46"]
[ext_resource type="AudioStream" uid="uid://eagr344y4coh" path="res://assets/sfx/footsteps/metal/metal11.wav" id="15_k60ra"] [ext_resource type="AudioStream" uid="uid://eagr344y4coh" path="res://assets/sfx/footsteps/metal/metal11.wav" id="15_k60ra"]
[ext_resource type="AudioStream" uid="uid://bguwbr0nlhgkl" path="res://assets/sfx/footsteps/metal/metal2.wav" id="16_a4vah"] [ext_resource type="AudioStream" uid="uid://bguwbr0nlhgkl" path="res://assets/sfx/footsteps/metal/metal2.wav" id="16_a4vah"]
[ext_resource type="AudioStream" uid="uid://tlmmikytpp6r" path="res://assets/sfx/footsteps/grunk/grunk1.wav" id="17_a4vah"]
[ext_resource type="AudioStream" uid="uid://co83ygaa4d65u" path="res://assets/sfx/footsteps/metal/metal4.wav" id="17_vwi60"] [ext_resource type="AudioStream" uid="uid://co83ygaa4d65u" path="res://assets/sfx/footsteps/metal/metal4.wav" id="17_vwi60"]
[ext_resource type="AudioStream" uid="uid://dkx88wqwfvfst" path="res://assets/sfx/footsteps/metal/metal6.wav" id="18_o04tx"] [ext_resource type="AudioStream" uid="uid://dkx88wqwfvfst" path="res://assets/sfx/footsteps/metal/metal6.wav" id="18_o04tx"]
[ext_resource type="AudioStream" uid="uid://dmqyajdgxld0o" path="res://assets/sfx/footsteps/grunk/grunk3.wav" id="18_vwi60"]
[ext_resource type="AudioStream" uid="uid://bo3klycfvvq2q" path="res://assets/sfx/footsteps/metal/metal8.wav" id="19_j2873"] [ext_resource type="AudioStream" uid="uid://bo3klycfvvq2q" path="res://assets/sfx/footsteps/metal/metal8.wav" id="19_j2873"]
[ext_resource type="AudioStream" uid="uid://4mbqcr8vmd5c" path="res://assets/sfx/footsteps/grunk/grunk5.wav" id="19_o04tx"]
[ext_resource type="AudioStream" uid="uid://btiyoi1ipofd" path="res://assets/sfx/footsteps/metal/metal10.wav" id="20_dpt0q"] [ext_resource type="AudioStream" uid="uid://btiyoi1ipofd" path="res://assets/sfx/footsteps/metal/metal10.wav" id="20_dpt0q"]
[ext_resource type="AudioStream" uid="uid://dvyr3m24ccgrf" path="res://assets/sfx/footsteps/plastic/plastic2.wav" id="20_vwi60"]
[ext_resource type="AudioStream" uid="uid://dmscjvx66fxlf" path="res://assets/sfx/footsteps/grunk/grunk2.wav" id="25_j2873"]
[ext_resource type="AudioStream" uid="uid://djdixjel10yn1" path="res://assets/sfx/footsteps/grunk/grunk4.wav" id="26_dpt0q"]
[ext_resource type="AudioStream" uid="uid://div20rlq8ync5" path="res://assets/sfx/footsteps/plastic/plastic1.wav" id="28_dpt0q"]
[ext_resource type="AudioStream" uid="uid://djucfo3l7x7px" path="res://assets/sfx/footsteps/plastic/plastic3.wav" id="29_wcxbk"]
[ext_resource type="AudioStream" uid="uid://ck86vhmbg3xnj" path="res://assets/sfx/footsteps/plastic/plastic5.wav" id="30_p6grl"]
[sub_resource type="Animation" id="Animation_x42xx"] [sub_resource type="Animation" id="Animation_x42xx"]
length = 0.001 length = 0.001
@ -172,6 +181,22 @@ stream_3/stream = ExtResource("13_5efpn")
stream_4/stream = ExtResource("14_4uy46") stream_4/stream = ExtResource("14_4uy46")
stream_5/stream = ExtResource("15_k60ra") stream_5/stream = ExtResource("15_k60ra")
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_wcxbk"]
playback_mode = 1
random_pitch = 1.1
streams_count = 3
stream_0/stream = ExtResource("17_a4vah")
stream_1/stream = ExtResource("18_vwi60")
stream_2/stream = ExtResource("19_o04tx")
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_o04tx"]
playback_mode = 1
random_pitch = 1.1
streams_count = 3
stream_0/stream = ExtResource("20_vwi60")
stream_1/stream = ExtResource("20_vwi60")
stream_2/stream = ExtResource("20_vwi60")
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_ylhto"] [sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_ylhto"]
random_pitch = 1.1 random_pitch = 1.1
streams_count = 5 streams_count = 5
@ -181,7 +206,24 @@ stream_2/stream = ExtResource("18_o04tx")
stream_3/stream = ExtResource("19_j2873") stream_3/stream = ExtResource("19_j2873")
stream_4/stream = ExtResource("20_dpt0q") stream_4/stream = ExtResource("20_dpt0q")
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_p6grl"]
playback_mode = 1
random_pitch = 1.1
streams_count = 3
stream_0/stream = ExtResource("25_j2873")
stream_1/stream = ExtResource("26_dpt0q")
stream_2/stream = ExtResource("17_a4vah")
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_e7e1q"]
playback_mode = 1
random_pitch = 1.1
streams_count = 3
stream_0/stream = ExtResource("28_dpt0q")
stream_1/stream = ExtResource("29_wcxbk")
stream_2/stream = ExtResource("30_p6grl")
[node name="Player" type="CharacterBody3D"] [node name="Player" type="CharacterBody3D"]
collision_layer = 9
script = ExtResource("1_npueo") script = ExtResource("1_npueo")
[node name="CameraPivot" type="Node3D" parent="."] [node name="CameraPivot" type="Node3D" parent="."]
@ -267,6 +309,16 @@ stream = SubResource("AudioStreamRandomizer_8ydov")
volume_db = -42.0 volume_db = -42.0
bus = &"SFX" bus = &"SFX"
[node name="Grunk" type="AudioStreamPlayer3D" parent="FootstepController/LeftFoot"]
stream = SubResource("AudioStreamRandomizer_wcxbk")
volume_db = -20.0
bus = &"SFX"
[node name="Plastic" type="AudioStreamPlayer3D" parent="FootstepController/LeftFoot"]
stream = SubResource("AudioStreamRandomizer_o04tx")
volume_db = -24.0
bus = &"SFX"
[node name="RightFoot" type="Node3D" parent="FootstepController"] [node name="RightFoot" type="Node3D" parent="FootstepController"]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, 0, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.4, 0, 0)
@ -277,6 +329,17 @@ stream = SubResource("AudioStreamRandomizer_ylhto")
volume_db = -42.0 volume_db = -42.0
bus = &"SFX" bus = &"SFX"
[node name="Grunk" type="AudioStreamPlayer3D" parent="FootstepController/RightFoot"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.8, 0, 0)
stream = SubResource("AudioStreamRandomizer_p6grl")
volume_db = -20.0
bus = &"SFX"
[node name="Plastic" type="AudioStreamPlayer3D" parent="FootstepController/RightFoot"]
stream = SubResource("AudioStreamRandomizer_e7e1q")
volume_db = -24.0
bus = &"SFX"
[node name="FootCast" type="RayCast3D" parent="FootstepController"] [node name="FootCast" type="RayCast3D" parent="FootstepController"]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0518835, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.0518835, 0)

View File

@ -0,0 +1,10 @@
@tool
class_name TranslatorPath3D extends Path3D
## Keeps all child elements at the last point on the curve.
func _process(_delta: float) -> void:
if curve and curve.point_count > 1:
var endpoint := curve.get_point_position(curve.point_count - 1)
for c: Node3D in get_children():
c.position = endpoint

View File

@ -0,0 +1 @@
uid://vewq8h8uulbg

View File

@ -3,10 +3,22 @@ extends GunkNode
@export var jitter_scale_factor := 0.05 @export var jitter_scale_factor := 0.05
@export var jitter_inflation_factor := 1.0 @export var jitter_inflation_factor := 1.0
@export var chitter: bool = false
@export var chitter_time_mean := 120.0
@export var chitter_time_st_dev := 30.0
@export var splatter_scene: PackedScene @export var splatter_scene: PackedScene
@onready var mesh_instance: MeshInstance3D = %MeshInstance3D @onready var mesh_instance: MeshInstance3D = %MeshInstance3D
@onready var chitter_sfx: AudioStreamPlayer3D = %ChitterSFX
@onready var chitter_timer: Timer = %ChitterTimer
func _ready() -> void:
if chitter:
start_chitter_timer()
func _process(delta: float) -> void: func _process(delta: float) -> void:
super._process(delta) super._process(delta)
@ -21,3 +33,13 @@ func _destroy() -> void:
add_sibling(splatter) add_sibling(splatter)
splatter.global_position = global_position splatter.global_position = global_position
splatter.emitting = true splatter.emitting = true
func start_chitter_timer() -> void:
var interval := randfn(chitter_time_mean, chitter_time_st_dev)
chitter_timer.start(interval)
func _on_chitter_timer_timeout() -> void:
chitter_sfx.play()
start_chitter_timer()

View File

@ -1,8 +1,11 @@
[gd_scene load_steps=7 format=4 uid="uid://2yqi5u5eo025"] [gd_scene load_steps=11 format=4 uid="uid://2yqi5u5eo025"]
[ext_resource type="Script" uid="uid://07t7yhijru8f" path="res://src/world/gunk_node/grunk_nodule.gd" id="1_iyr82"] [ext_resource type="Script" uid="uid://07t7yhijru8f" path="res://src/world/gunk_node/grunk_nodule.gd" id="1_iyr82"]
[ext_resource type="PackedScene" uid="uid://xlt78xc1tmkl" path="res://src/effects/grunk_splatter.tscn" id="2_m8r0a"] [ext_resource type="PackedScene" uid="uid://xlt78xc1tmkl" path="res://src/effects/grunk_splatter.tscn" id="2_m8r0a"]
[ext_resource type="Material" uid="uid://bmab6i16v748m" path="res://assets/materials/grunk_jittery.material" id="3_eu6j6"] [ext_resource type="Material" uid="uid://bmab6i16v748m" path="res://assets/materials/grunk_jittery.material" id="3_eu6j6"]
[ext_resource type="AudioStream" uid="uid://b288km80xeh0" path="res://assets/sfx/grunk/groan1.wav" id="4_ri4uq"]
[ext_resource type="AudioStream" uid="uid://bujyltdunajj4" path="res://assets/sfx/grunk/groan2.wav" id="5_7fplw"]
[ext_resource type="AudioStream" uid="uid://bvtopyke5d17x" path="res://assets/sfx/grunk/groan3.wav" id="6_omayi"]
[sub_resource type="ArrayMesh" id="ArrayMesh_24j8i"] [sub_resource type="ArrayMesh" id="ArrayMesh_24j8i"]
_surfaces = [{ _surfaces = [{
@ -39,6 +42,13 @@ shadow_mesh = SubResource("ArrayMesh_24j8i")
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_530fq"] [sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_530fq"]
data = PackedVector3Array(0.7236, -0.4472, 0.5257, 0, -1, 0, -0.2764, -0.4472, 0.8506, 0, -1, 0, 0.7236, -0.4472, 0.5257, 0.7236, -0.4472, -0.5257, -0.2764, -0.4472, 0.8506, 0, -1, 0, -0.8944, -0.4472, 0, -0.8944, -0.4472, 0, 0, -1, 0, -0.2764, -0.4472, -0.8506, -0.2764, -0.4472, -0.8506, 0, -1, 0, 0.7236, -0.4472, -0.5257, 0.7236, -0.4472, -0.5257, 0.7236, -0.4472, 0.5257, 0.8944, 0.4472, 0, 0.7236, -0.4472, 0.5257, -0.2764, -0.4472, 0.8506, 0.2764, 0.4472, 0.8506, -0.2764, -0.4472, 0.8506, -0.8944, -0.4472, 0, -0.7236, 0.4472, 0.5257, -0.8944, -0.4472, 0, -0.2764, -0.4472, -0.8506, -0.7236, 0.4472, -0.5257, -0.2764, -0.4472, -0.8506, 0.7236, -0.4472, -0.5257, 0.2764, 0.4472, -0.8506, 0.8944, 0.4472, 0, 0.7236, -0.4472, 0.5257, 0.2764, 0.4472, 0.8506, 0.2764, 0.4472, 0.8506, -0.2764, -0.4472, 0.8506, -0.7236, 0.4472, 0.5257, -0.7236, 0.4472, 0.5257, -0.8944, -0.4472, 0, -0.7236, 0.4472, -0.5257, -0.7236, 0.4472, -0.5257, -0.2764, -0.4472, -0.8506, 0.2764, 0.4472, -0.8506, 0.2764, 0.4472, -0.8506, 0.7236, -0.4472, -0.5257, 0.8944, 0.4472, 0, 0.8944, 0.4472, 0, 0.2764, 0.4472, 0.8506, 0, 1, 0, 0.2764, 0.4472, 0.8506, -0.7236, 0.4472, 0.5257, 0, 1, 0, -0.7236, 0.4472, 0.5257, -0.7236, 0.4472, -0.5257, 0, 1, 0, -0.7236, 0.4472, -0.5257, 0.2764, 0.4472, -0.8506, 0, 1, 0, 0.2764, 0.4472, -0.8506, 0.8944, 0.4472, 0, 0, 1, 0) data = PackedVector3Array(0.7236, -0.4472, 0.5257, 0, -1, 0, -0.2764, -0.4472, 0.8506, 0, -1, 0, 0.7236, -0.4472, 0.5257, 0.7236, -0.4472, -0.5257, -0.2764, -0.4472, 0.8506, 0, -1, 0, -0.8944, -0.4472, 0, -0.8944, -0.4472, 0, 0, -1, 0, -0.2764, -0.4472, -0.8506, -0.2764, -0.4472, -0.8506, 0, -1, 0, 0.7236, -0.4472, -0.5257, 0.7236, -0.4472, -0.5257, 0.7236, -0.4472, 0.5257, 0.8944, 0.4472, 0, 0.7236, -0.4472, 0.5257, -0.2764, -0.4472, 0.8506, 0.2764, 0.4472, 0.8506, -0.2764, -0.4472, 0.8506, -0.8944, -0.4472, 0, -0.7236, 0.4472, 0.5257, -0.8944, -0.4472, 0, -0.2764, -0.4472, -0.8506, -0.7236, 0.4472, -0.5257, -0.2764, -0.4472, -0.8506, 0.7236, -0.4472, -0.5257, 0.2764, 0.4472, -0.8506, 0.8944, 0.4472, 0, 0.7236, -0.4472, 0.5257, 0.2764, 0.4472, 0.8506, 0.2764, 0.4472, 0.8506, -0.2764, -0.4472, 0.8506, -0.7236, 0.4472, 0.5257, -0.7236, 0.4472, 0.5257, -0.8944, -0.4472, 0, -0.7236, 0.4472, -0.5257, -0.7236, 0.4472, -0.5257, -0.2764, -0.4472, -0.8506, 0.2764, 0.4472, -0.8506, 0.2764, 0.4472, -0.8506, 0.7236, -0.4472, -0.5257, 0.8944, 0.4472, 0, 0.8944, 0.4472, 0, 0.2764, 0.4472, 0.8506, 0, 1, 0, 0.2764, 0.4472, 0.8506, -0.7236, 0.4472, 0.5257, 0, 1, 0, -0.7236, 0.4472, 0.5257, -0.7236, 0.4472, -0.5257, 0, 1, 0, -0.7236, 0.4472, -0.5257, 0.2764, 0.4472, -0.8506, 0, 1, 0, 0.2764, 0.4472, -0.8506, 0.8944, 0.4472, 0, 0, 1, 0)
[sub_resource type="AudioStreamRandomizer" id="AudioStreamRandomizer_yg8lg"]
random_pitch = 1.1
streams_count = 3
stream_0/stream = ExtResource("4_ri4uq")
stream_1/stream = ExtResource("5_7fplw")
stream_2/stream = ExtResource("6_omayi")
[node name="GrunkNodule" type="StaticBody3D"] [node name="GrunkNodule" type="StaticBody3D"]
collision_layer = 5 collision_layer = 5
script = ExtResource("1_iyr82") script = ExtResource("1_iyr82")
@ -52,3 +62,15 @@ mesh = SubResource("ArrayMesh_iyr82")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."] [node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("ConcavePolygonShape3D_530fq") shape = SubResource("ConcavePolygonShape3D_530fq")
[node name="ChitterSFX" type="AudioStreamPlayer3D" parent="."]
unique_name_in_owner = true
stream = SubResource("AudioStreamRandomizer_yg8lg")
volume_db = -20.0
bus = &"SFX"
[node name="ChitterTimer" type="Timer" parent="."]
unique_name_in_owner = true
one_shot = true
[connection signal="timeout" from="ChitterTimer" to="." method="_on_chitter_timer_timeout"]

View File

@ -12,10 +12,11 @@ const PLASTIC_MATERIAL_GROUP := "PlasticMaterial"
static func material_for_collider(collider: Node) -> SurfaceMaterial.Type: static func material_for_collider(collider: Node) -> SurfaceMaterial.Type:
if collider is GunkNode: if collider:
return Type.GRUNK if collider is GunkNode:
if collider.is_in_group(METAL_MATERIAL_GROUP): return Type.GRUNK
return Type.METAL if collider.is_in_group(METAL_MATERIAL_GROUP):
if collider.is_in_group(PLASTIC_MATERIAL_GROUP): return Type.METAL
return Type.PLASTIC if collider.is_in_group(PLASTIC_MATERIAL_GROUP):
return Type.PLASTIC
return Type.UNKNOWN return Type.UNKNOWN

View File

@ -48,9 +48,12 @@
- [ ] SFX: - [ ] SFX:
- [ ] ui bonk - [ ] ui bonk
- [ ] prop clear glitter - [ ] prop clear glitter
- [x] computer bleep on reload
- [ ] grunk tank deposit schlorp
- [ ] player ship door
- [x] metal footsteps - [x] metal footsteps
- [ ] plastic footsteps - [x] plastic footsteps
- [ ] grunk footsteps - [x] grunk footsteps
- [x] beam noises - [x] beam noises
- [x] spray noises - [x] spray noises
- [ ] switch klaxon - [ ] switch klaxon
@ -61,8 +64,8 @@
- [ ] grunk relay chitter - [ ] grunk relay chitter
- [ ] grunk chittering - [ ] grunk chittering
- [ ] grunkbeast??? - [ ] grunkbeast???
- [ ] grunk ambiance - [x] grunk ambiance
- [ ] spaceship ambiance - [x] spaceship ambiance
- [ ] models: - [ ] models:
- [ ] [[grunk]] nodes: - [ ] [[grunk]] nodes:
- [ ] [[alarm]] - [ ] [[alarm]]

View File

@ -1,18 +1,54 @@
- SFX - SFX
- "Walking on Metal" - "Walking on Metal"
- author: Sanderboah - author: Sanderboah
- CC0
- retrieved from https://freesound.org/people/Sanderboah/sounds/696374/ - retrieved from https://freesound.org/people/Sanderboah/sounds/696374/
- assets/sfx/footsteps/metal/metal*.wav - assets/sfx/footsteps/metal/metal*.wav
- "Click_Electronic_04.wav" - "Click_Electronic_04.wav"
- author: LittleRobotSoundFactory - author: LittleRobotSoundFactory
- CC BY 4.0
- retrieved from https://freesound.org/people/LittleRobotSoundFactory/sounds/288956/ - retrieved from https://freesound.org/people/LittleRobotSoundFactory/sounds/288956/
- assets/sfx/click_electronic_04.wav - assets/sfx/click_electronic_04.wav
- "Air Hiss" - "Air Hiss"
- author: Jofae - author: Jofae
- CC0
- retrieved from https://freesound.org/people/Jofae/sounds/367125/ - retrieved from https://freesound.org/people/Jofae/sounds/367125/
- assets/sfx/air_hiss.wav - assets/sfx/air_hiss.wav
- modified - modified
- "Heavy Mechanical Door Open" - "Heavy Mechanical Door Open"
- author: lowpolygon - author: lowpolygon
- CC0
- retrieved from https://freesound.org/people/lowpolygon/sounds/421722/ - retrieved from https://freesound.org/people/lowpolygon/sounds/421722/
- assets/sfx/mechanical_door.wav - assets/sfx/mechanical_door.wav
- modified
- "Footsteps_Mountain_Boots_Mud_Mono.wav"
- author: Nox_Sound
- CC0
- retrieved from https://freesound.org/people/Nox_Sound/sounds/548384/
- assets/sfx/footsteps/grunk/grunk*.wav
- "Footsteps_Boots_Tile_Mono.wav"
- author: Nox_Sound
- CC0
- retrieved from https://freesound.org/people/Nox_Sound/sounds/530588/
- assets/sfx/footsteps/plastic/plastic*.wav
- "Metal creak.wav"
- author: sophiehall3535
- CC0
- retrieved from https://freesound.org/people/sophiehall3535/sounds/245945/
- assets/sfx/ambient/metal_creak1.wav
- "Drone Loop (Fixed)"
- author: Fission9
- CC0
- retrieved from https://freesound.org/people/Fission9/sounds/567220/
- assets/sfx/ambient/drone_loop.wav
- "mechanical dishwasher rusty door mechanism metal creak stress"
- author: jerry.berumen
- CC BY 4.0
- retrieved from https://freesound.org/people/jerry.berumen/sounds/769512/
- assets/sfx/ambient/metal_creak2-8.wav
- "Printer startup"
- author: Clagnar
- CC0
- retrieved from https://freesound.org/people/Clagnar/sounds/547256/
- assets/sfx/computer_noise.wav
- modified