Fixed grunk shader normal maps & fresnel

This commit is contained in:
Rob Kelly 2025-09-03 14:50:12 -06:00
parent 9905e957e5
commit 61fb827435
16 changed files with 333 additions and 53 deletions

View File

@ -63,7 +63,7 @@ turbulence_noise_strength = 0.1
turbulence_noise_scale = 0.3
turbulence_influence_min = 0.0
[sub_resource type="ArrayMesh" id="ArrayMesh_al0j5"]
[sub_resource type="ArrayMesh" id="ArrayMesh_20ek7"]
_surfaces = [{
"aabb": AABB(-1, -0.4, -0.2, 2, 0.4, 0.4),
"format": 34896613377,
@ -92,7 +92,7 @@ _surfaces = [{
"vertex_data": PackedByteArray("AAD///////8AAAAA/3///wAA//8AAP//AAD//wAAsvIAAAAA/3+y8v////8AALLy//8AAP9/svL/////AAD/v///AAD/f/+//////////7////////8mwv//AAD/fybCAAD/////JsIAAAAA/38mwgAA//8AAFTV/////wAAVNUAAP////9U1f///////1TV/z//f/8//3//P/9/PjnAxj45wMY+OcDGPjnAxv9/AAD/fwAA/38AAIYUeOuGFHjrhhR464YUeOtU1aoqVNWqKlTVqipU1aoq")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_al0j5")
shadow_mesh = SubResource("ArrayMesh_20ek7")
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_ojd88"]
data = PackedVector3Array(-1, 0, 0.2, -1, -0.4, 0, -1, 0, -0.2, -1, 0, -0.2, -1, -0.4, 0, 1, 0, -0.2, 1, 0, -0.2, -1, -0.4, 0, 1, -0.4, 0, 1, 0, -0.2, 1, -0.4, 0, 1, 0, 0.2, 1, 0, 0.2, 1, -0.4, 0, -1, 0, 0.2, -1, 0, 0.2, 1, -0.4, 0, -1, -0.4, 0, -1, 0, -0.2, 1, 0, -0.2, -1, 0, 0.2, -1, 0, 0.2, 1, 0, -0.2, 1, 0, 0.2)

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=44 format=3 uid="uid://oowut88kr2ox"]
[gd_scene load_steps=43 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="ArrayMesh" uid="uid://dq4aj5ph31rce" path="res://assets/level/player_ship/player_ship.obj" id="1_nafoa"]
@ -11,7 +11,6 @@
[ext_resource type="Shader" uid="uid://ckxc0ngd37rtk" path="res://src/shaders/gunk.gdshader" id="8_al8ma"]
[ext_resource type="ArrayMesh" uid="uid://bc8457r4rxpey" path="res://assets/level/player_ship/grunk_liquid.obj" id="8_xuj2g"]
[ext_resource type="AudioStream" uid="uid://cimw72d2lexvt" path="res://assets/sfx/grunk/pump.wav" id="9_0e0pl"]
[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="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"]
@ -76,16 +75,19 @@ shader = ExtResource("8_al8ma")
shader_parameter/color_1 = Color(0, 0.03, 0.1, 1)
shader_parameter/color_2 = Color(0, 0.1, 0.3, 1)
shader_parameter/emission_color = Color(0.25, 0.88, 1, 1)
shader_parameter/fresnel_color = Color(0.25, 0.88, 1, 1)
shader_parameter/pixellation = 128.0
shader_parameter/time_pixellation = 30.0
shader_parameter/roughness = 0.15
shader_parameter/specular_contribution = 0.8
shader_parameter/emission_strength = 0.02
shader_parameter/normal_scale = 1.0
shader_parameter/fresnel_power = 4.0
shader_parameter/fresnel_intensity = 0.0
shader_parameter/bump_strength = 10.0
shader_parameter/uv_scale = Vector2(2, 2)
shader_parameter/pan_speed = Vector2(0, 0)
shader_parameter/time_scale = 0.2
shader_parameter/edge_bleed = 0.25
shader_parameter/gunk_mask = ExtResource("9_xuj2g")
shader_parameter/gunk_noise = SubResource("NoiseTexture3D_2roq2")
shader_parameter/gunk_normal_map = SubResource("NoiseTexture3D_fk1xc")
shader_parameter/jitter_magnitude = 0.1

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=45 format=3 uid="uid://dc4tts6342cuj"]
[gd_scene load_steps=59 format=3 uid="uid://dc4tts6342cuj"]
[ext_resource type="Script" uid="uid://dmbdkydqnbyqv" path="res://levels/prop_test/prop_test.gd" id="1_ibd1t"]
[ext_resource type="PackedScene" uid="uid://bwe2jdmvinhqd" path="res://src/player/player.tscn" id="1_ml0ka"]
@ -36,6 +36,15 @@
[ext_resource type="Script" uid="uid://deg5xd87cy8rg" path="res://src/props/interactive.gd" id="28_ibd1t"]
[ext_resource type="PackedScene" uid="uid://d1kacn4b60ucy" path="res://src/ui/post_processing.tscn" id="30_qnhar"]
[ext_resource type="PackedScene" uid="uid://bfm80tqsw22qc" path="res://src/props/wire_shelves/wire_shelves.tscn" id="36_hb05j"]
[ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/gunk_overlay_bright.material" id="37_00w3i"]
[ext_resource type="ArrayMesh" uid="uid://m4did6uilrp7" path="res://assets/props/overhead_light/overhead_light.obj" id="38_csbnx"]
[ext_resource type="Texture2D" uid="uid://bne1d0r5a8nn6" path="res://assets/props/overhead_light/overhead_light_C.png" id="39_q86l6"]
[ext_resource type="Texture2D" uid="uid://jag1fu2515j8" path="res://assets/props/overhead_light/overhead_light_E.png" id="40_6i5op"]
[ext_resource type="Texture2D" uid="uid://bh2jmk7jfjmyr" path="res://assets/props/overhead_light/overhead_light_M.png" id="41_k1cqa"]
[ext_resource type="Texture2D" uid="uid://no4s7dsg8tih" path="res://assets/props/overhead_light/overhead_light_N.png" id="42_8payl"]
[ext_resource type="Texture2D" uid="uid://cr5e4hk33wmwf" path="res://assets/props/overhead_light/overhead_light_R.png" id="43_bkuot"]
[ext_resource type="Shader" uid="uid://dfpidwyes4pvr" path="res://src/shaders/fresnel.gdshader" id="44_csbnx"]
[ext_resource type="Texture2D" uid="uid://8cm835h4gxwe" path="res://assets/debug_mask.png" id="45_q86l6"]
[sub_resource type="WorldBoundaryShape3D" id="WorldBoundaryShape3D_tm4v6"]
@ -72,6 +81,40 @@ height = 0.4
[sub_resource type="SphereShape3D" id="SphereShape3D_mvw32"]
radius = 0.25
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_7xlb7"]
resource_local_to_scene = true
albedo_texture = ExtResource("39_q86l6")
metallic = 1.0
metallic_texture = ExtResource("41_k1cqa")
roughness_texture = ExtResource("43_bkuot")
emission_enabled = true
emission_energy_multiplier = 12.0
emission_texture = ExtResource("40_6i5op")
normal_enabled = true
normal_texture = ExtResource("42_8payl")
texture_filter = 2
[sub_resource type="SphereMesh" id="SphereMesh_00utg"]
[sub_resource type="FastNoiseLite" id="FastNoiseLite_6i5op"]
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_k1cqa"]
seamless = true
as_normal_map = true
noise = SubResource("FastNoiseLite_6i5op")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_csbnx"]
render_priority = 0
shader = ExtResource("44_csbnx")
shader_parameter/base_color = Color(1, 1, 1, 1)
shader_parameter/fresnel_color = Color(0.25, 0.88, 1, 1)
shader_parameter/fresnel_amount = 4.0
shader_parameter/fresnel_intensity = 4.5
shader_parameter/edge_bleed = 0.25
shader_parameter/normal_map_scale = 1.0
shader_parameter/gunk_normal_map = SubResource("NoiseTexture2D_k1cqa")
shader_parameter/gunk_mask = ExtResource("45_q86l6")
[node name="PropTest" type="Node3D"]
script = ExtResource("1_ibd1t")
game_environment = ExtResource("2_qnhar")
@ -441,6 +484,25 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0)
[node name="WireShelves" parent="." instance=ExtResource("36_hb05j")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 49.2, 0, -12)
[node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -11, 2, -5)
material_overlay = ExtResource("37_00w3i")
cast_shadow = 0
gi_mode = 2
mesh = ExtResource("38_csbnx")
skeleton = NodePath("../..")
surface_material_override/0 = SubResource("StandardMaterial3D_7xlb7")
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -10, 1, 0)
material_overlay = ExtResource("37_00w3i")
mesh = SubResource("SphereMesh_00utg")
[node name="MeshInstance3D3" type="MeshInstance3D" parent="."]
transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -10, 1, 3)
material_overlay = SubResource("ShaderMaterial_csbnx")
mesh = SubResource("SphereMesh_00utg")
[connection signal="animation_finished" from="Props/Bulkhead" to="Props/SwitchPodium/OpenSwitch" method="enable"]
[connection signal="activated" from="Props/SwitchPodium/OpenSwitch" to="Props/Bulkhead" method="toggle"]
[connection signal="activated" from="Props/SwitchPodium/OpenSwitch" to="Props/SwitchPodium/OpenSwitch" method="disable"]

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,26 @@
shader_type spatial;
uniform vec3 base_color: source_color = vec3(1.0);
uniform vec3 fresnel_color: source_color = vec3(0.25, 0.88, 1.0);
uniform float fresnel_amount = 4.0;
uniform float fresnel_intensity = 0.0;
uniform float edge_bleed = 0.25;
uniform float normal_map_scale = 1.0;
uniform highp sampler2D gunk_normal_map;
uniform sampler2D gunk_mask;
vec3 fresnel_glow(vec3 normal, vec3 view) {
float normal_angle = dot(normalize(normal), normalize(view));
return pow((1.0 - clamp(normal_angle, 0.0, 1.0)), fresnel_amount) * fresnel_color * fresnel_intensity;
}
void fragment() {
NORMAL_MAP = texture(gunk_normal_map, UV).rgb * normal_map_scale;
vec3 world_normal = mat3(TANGENT, BINORMAL, NORMAL) * (NORMAL_MAP * 2.0 - 1.0);
ALBEDO = base_color + fresnel_glow(world_normal, VIEW);
}

View File

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

View File

@ -14,8 +14,9 @@ uniform float roughness: hint_range(0.0, 1.0) = 0.15;
uniform float specular_contribution = 0.8;
uniform float emission_strength = 0.05;
uniform float normal_scale = 1.0;
uniform float fresnel_amount = 4.0;
uniform float fresnel_power = 4.0;
uniform float fresnel_intensity = 0.0;
uniform float bump_strength = 1.0;
// Used ONLY by the gunk, does not affect the gunk mask.
uniform vec2 uv_scale = vec2(1.0);
@ -52,7 +53,7 @@ void vertex() {
}
vec3 fresnel_glow(vec3 normal, vec3 view) {
return pow((1.0 - dot(normalize(normal), normalize(view))), fresnel_amount) * fresnel_color * fresnel_intensity;
return pow((1.0 - dot(normalize(normal), normalize(view))), fresnel_power) * fresnel_color * fresnel_intensity;
}
float hardstep(float value) {
@ -80,9 +81,21 @@ void fragment() {
vec4 overlay_em = texture(overlay_emission, UV);
emission = mix(emission, overlay_em.rgb * overlay_emission_scale, overlay_em.a);
ALBEDO = color.rgb + fresnel_glow(NORMAL, VIEW);
ALBEDO = color.rgb;
ROUGHNESS = value * roughness;
EMISSION = emission;
SPECULAR = 0.5 * inversesqrt(specular_contribution);
NORMAL_MAP = texture(gunk_normal_map, uvt).xyz;
// Build normal map from bump map
float h_center = texture(gunk_normal_map, uvt).r;
float h_right = texture(gunk_normal_map, uvt + vec3(1.0 / pixellation, 0.0, 0.0)).r;
float h_down = texture(gunk_normal_map, uvt + vec3(0.0, 1.0 / pixellation, 0.0)).r;
float dx = (h_right - h_center) * bump_strength;
float dy = (h_down - h_center) * bump_strength;
vec3 normal_diff_map = normalize(vec3(-dx, -dy, 1.0));
NORMAL_MAP = normal_diff_map / 2.0 + 0.5;
// add fresnel
vec3 world_normal = mat3(TANGENT, BINORMAL, NORMAL) * (NORMAL_MAP * 2.0 - 1.0);
ALBEDO += fresnel_glow(world_normal, VIEW);
}

View File

@ -5,6 +5,7 @@ group_uniforms gunk_material;
uniform vec3 color_1: source_color = vec3(0.0, 0.03, 0.1);
uniform vec3 color_2: source_color = vec3(0.0, 0.1, 0.3);
uniform vec3 emission_color: source_color = vec3(0.25, 0.88, 1.0);
uniform vec3 fresnel_color: source_color = vec3(0.25, 0.88, 1.0);
uniform float pixellation = 128.0;
uniform float time_pixellation = 30.0;
@ -13,6 +14,9 @@ uniform float roughness: hint_range(0.0, 1.0) = 0.15;
uniform float specular_contribution = 0.8;
uniform float emission_strength = 0.05;
uniform float normal_scale = 1.0;
uniform float fresnel_power = 4.0;
uniform float fresnel_intensity = 0.0;
uniform float bump_strength = 1.0;
// Used ONLY by the gunk, does not affect the gunk mask.
uniform vec2 uv_scale = vec2(1.0);
@ -32,6 +36,11 @@ uniform sampler2D overlay_emission: hint_default_transparent, filter_nearest;
uniform float overlay_emission_scale = 1.0;
vec3 fresnel_glow(vec3 normal, vec3 view) {
float normal_angle = dot(normalize(normal), normalize(view));
return pow((1.0 - clamp(normal_angle, 0.0, 1.0)), fresnel_power) * fresnel_color * fresnel_intensity;
}
float hardstep(float value) {
float x = clamp(value, 0.0, 1.0);
return 0.5 * tanh( (20.0 * x - 10.0) * inversesqrt(x - x * x) ) + 0.5;
@ -61,12 +70,26 @@ void fragment() {
ROUGHNESS = value * roughness;
EMISSION = emission;
SPECULAR = 0.5 * inversesqrt(specular_contribution);
NORMAL_MAP = texture(gunk_normal_map, uvt).xyz;
float mask = texture(gunk_mask, UV).r;
float edge_soften = smoothstep(1.0, 0.0, mask);
// Build normal map from bump map
float h_center = texture(gunk_normal_map, uvt).r;
float h_right = texture(gunk_normal_map, uvt + vec3(1.0 / pixellation, 0.0, 0.0)).r;
float h_down = texture(gunk_normal_map, uvt + vec3(0.0, 1.0 / pixellation, 0.0)).r;
float dx = (h_right - h_center) * bump_strength;
float dy = (h_down - h_center) * bump_strength;
vec3 normal_diff_map = normalize(vec3(-dx, -dy, 1.0));
NORMAL_MAP = normal_diff_map / 2.0 + 0.5;
// soften edges
NORMAL_MAP *= smoothstep(1.0, 0.0, mask);
NORMAL_MAP *= edge_soften;
// add fresnel
vec3 world_normal = mat3(TANGENT, BINORMAL, NORMAL) * (NORMAL_MAP * 2.0 - 1.0);
ALBEDO += fresnel_glow(world_normal, VIEW);
// Hardish edge
ALPHA = hardstep(1.0 - mask + edge_bleed);

View File

@ -220,7 +220,7 @@ metadata/_custom_type_script = "uid://om57w2acvgb7"
script = ExtResource("11_mbqcc")
mean_time = 4.0
st_dev_time = 0.6
wait_time = 4.06128
wait_time = 4.63718
metadata/_custom_type_script = "uid://beyk2xtbjrsg4"
[node name="RandomStalkingBehavior" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence/RandomDelay"]
@ -266,7 +266,7 @@ metadata/_custom_type_script = "uid://cg016dbe7gs1x"
script = ExtResource("11_mbqcc")
mean_time = 5.0
st_dev_time = 1.0
wait_time = 4.52556
wait_time = 4.34164
metadata/_custom_type_script = "uid://beyk2xtbjrsg4"
[node name="PickRandomLurkTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkSequence/RandomDelay"]

View File

@ -113,6 +113,54 @@ unique_name_in_owner = true
transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 0, 0, 0)
top_level = true
[node name="Skeleton3D" parent="Armature" index="0"]
bones/1/position = Vector3(2.84217e-14, 1.51485, -2.51305)
bones/1/rotation = Quaternion(0.249313, 1.15445e-07, 2.97205e-08, 0.968423)
bones/1/scale = Vector3(1, 1, 1)
bones/2/rotation = Quaternion(0.204824, -2.09311e-13, 4.88339e-08, 0.978799)
bones/2/scale = Vector3(1, 1, 1)
bones/3/rotation = Quaternion(0.196821, 2.33752e-07, 9.3851e-08, 0.980439)
bones/4/rotation = Quaternion(0.0429047, 4.76413e-07, 5.11467e-08, 0.999079)
bones/5/scale = Vector3(1, 1, 1)
bones/6/rotation = Quaternion(-0.651315, 0.751756, -0.0947566, 0.0409037)
bones/7/rotation = Quaternion(0.50357, -0.0489935, -0.00100176, 0.862563)
bones/8/rotation = Quaternion(0.204939, -0.000834636, 0.0245877, 0.978466)
bones/9/rotation = Quaternion(0.651315, 0.751756, -0.0947566, -0.0409037)
bones/10/rotation = Quaternion(0.50357, 0.0489935, 0.00100176, 0.862563)
bones/11/rotation = Quaternion(0.204939, 0.000834638, -0.0245877, 0.978465)
bones/12/rotation = Quaternion(0.0338831, -0.281898, -0.795744, 0.534955)
bones/13/rotation = Quaternion(0.00213064, 0.0655049, -0.355854, 0.932241)
bones/14/rotation = Quaternion(-0.109452, 0.0150748, -0.151858, 0.982208)
bones/15/rotation = Quaternion(0.269235, -0.0369024, 0.847203, -0.456507)
bones/16/rotation = Quaternion(0.185658, -0.109653, -0.43151, 0.87596)
bones/17/rotation = Quaternion(-0.192939, 0.0499936, 0.0316556, 0.979425)
bones/18/rotation = Quaternion(0.0338831, 0.281898, 0.795744, 0.534955)
bones/19/rotation = Quaternion(0.00213072, -0.0655051, 0.355853, 0.932241)
bones/20/rotation = Quaternion(-0.109452, -0.0150747, 0.151858, 0.982208)
bones/21/rotation = Quaternion(-0.269235, -0.0369029, 0.847203, 0.456507)
bones/22/rotation = Quaternion(0.185658, 0.109653, 0.431509, 0.875961)
bones/23/rotation = Quaternion(-0.192939, -0.0499936, -0.0316556, 0.979425)
bones/24/position = Vector3(1.55329, 0.839106, 0.783253)
bones/24/rotation = Quaternion(0.508763, 0.508763, -0.491081, 0.491081)
bones/25/position = Vector3(0.428726, 0.847774, -1.16198)
bones/26/position = Vector3(-2.36554e-07, -1.66001e-07, 5.12588e-07)
bones/27/rotation = Quaternion(0.0793162, 0.0182055, -0.71141, 0.69805)
bones/28/position = Vector3(-1.55329, 0.839106, 0.783253)
bones/28/rotation = Quaternion(0.508763, -0.508763, 0.491081, 0.491081)
bones/29/position = Vector3(-0.428726, 0.847774, -1.16198)
bones/31/rotation = Quaternion(0.0793162, -0.0182055, 0.71141, 0.69805)
bones/32/position = Vector3(0.776177, 0.476268, -2.27135)
bones/33/position = Vector3(1.47158e-07, 3.29446e-07, -1.54669e-07)
bones/33/rotation = Quaternion(-0.19757, -0.580371, 0.78173, 0.114167)
bones/35/position = Vector3(-0.776177, 0.476268, -2.27135)
bones/36/position = Vector3(-5.46684e-07, 1.39751e-08, -2.09895e-07)
bones/36/rotation = Quaternion(0.19757, -0.580371, 0.78173, -0.114167)
bones/38/position = Vector3(0.737397, 0.515845, -3.26979)
bones/39/position = Vector3(-4.9934e-08, 2.2182e-07, -1.97891e-07)
bones/39/rotation = Quaternion(0.136442, -0.601968, 0.761522, -0.197743)
bones/41/position = Vector3(-0.737397, 0.515845, -3.26979)
bones/42/position = Vector3(3.2303e-07, 2.28217e-07, -7.45868e-09)
[node name="Shambler" parent="Armature/Skeleton3D" index="0"]
surface_material_override/0 = ExtResource("2_nayyt")
@ -129,7 +177,7 @@ primary_limit_angle = 1.5708
primary_damp_threshold = 0.7
[node name="SleeveL" type="BoneAttachment3D" parent="Armature/Skeleton3D" index="2"]
transform = Transform3D(0.043831, 1.41561e-07, -0.999039, 0.999039, 9.59262e-08, 0.0438309, 3.1665e-08, -1, -1.11759e-07, 1.63061, 0.0124229, 0.803843)
transform = Transform3D(0.0438309, 7.45058e-08, -0.999039, 0.999039, 6.10948e-07, 0.0438309, 7.37607e-07, -1, -4.47035e-08, 1.63061, 0.0124229, 0.803842)
bone_name = "Sleeve.L"
bone_idx = 27
@ -140,7 +188,7 @@ particle_scene = ExtResource("5_lqi3b")
metadata/_custom_type_script = "uid://cuqr167olan8n"
[node name="SleeveR" type="BoneAttachment3D" parent="Armature/Skeleton3D" index="3"]
transform = Transform3D(0.043831, -1.41561e-07, 0.999039, -0.999039, 9.59262e-08, 0.0438309, -3.1665e-08, -1, -1.11759e-07, -1.63061, 0.0124235, 0.803843)
transform = Transform3D(0.0438309, -7.45058e-08, 0.999039, -0.999039, 6.10948e-07, 0.0438309, -7.37607e-07, -1, -4.47035e-08, -1.63061, 0.0124234, 0.803842)
bone_name = "Sleeve.R"
bone_idx = 31

View File

@ -4,7 +4,7 @@
[ext_resource type="Resource" uid="uid://tgac5tnfx56r" path="res://src/world/world_manager.tres" id="2_5kmgb"]
[ext_resource type="PackedScene" uid="uid://byvjsvavbg5xe" path="res://src/ui/menus/pause_menu/pause_menu.tscn" id="2_6fy3g"]
[ext_resource type="Resource" uid="uid://0i72bf8ip1lx" path="res://src/world/spook_manager.tres" id="3_l0av5"]
[ext_resource type="PackedScene" uid="uid://700gr7k3gqlf" path="res://levels/grunkbeast_test/visual_test/visual_test.tscn" id="4_5kmgb"]
[ext_resource type="PackedScene" uid="uid://dc4tts6342cuj" path="res://levels/prop_test/prop_test.tscn" id="4_5kmgb"]
[ext_resource type="PackedScene" uid="uid://c0uitm5cg88h1" path="res://src/ui/menus/kill_screen/kill_screen.tscn" id="6_l0av5"]
[ext_resource type="PackedScene" uid="uid://brknr57xc2cp0" path="res://src/ui/elements/save_icon/save_icon.tscn" id="7_5kmgb"]