Compare commits

..

No commits in common. "56d48949ab5549cc9801c79a7f541f8a3fb45abb" and "e8e794fbe00ba5a267661e7a3bec7d5715069066" have entirely different histories.

99 changed files with 289 additions and 1309 deletions

Binary file not shown.

View File

@ -1,26 +0,0 @@
[gd_resource type="NoiseTexture3D" load_steps=3 format=3 uid="uid://cb3s6dhui6jme"]
[sub_resource type="Gradient" id="Gradient_71qbw"]
offsets = PackedFloat32Array(0, 0.11, 0.22, 0.33, 0.44, 0.55, 0.66, 0.77, 0.88, 1)
colors = PackedColorArray(0.17, 0.17, 0.17, 1, 1, 1, 1, 1, 0.65, 0.65, 0.65, 1, 1, 1, 1, 1, 0.31, 0.31, 0.31, 1, 1, 1, 1, 1, 0.7, 0.7, 0.7, 1, 1, 1, 1, 1, 0.32, 0.32, 0.32, 1, 1, 1, 1, 1)
[sub_resource type="FastNoiseLite" id="FastNoiseLite_cmbsv"]
noise_type = 3
seed = 4
frequency = 0.0104
fractal_type = 3
fractal_octaves = 1
cellular_return_type = 6
domain_warp_type = 2
domain_warp_amplitude = 5.0
domain_warp_frequency = 0.1
metadata/_preview_in_3d_space_ = true
[resource]
width = 256
height = 256
depth = 32
seamless = true
seamless_blend_skirt = 0.6
color_ramp = SubResource("Gradient_71qbw")
noise = SubResource("FastNoiseLite_cmbsv")

View File

@ -1,22 +0,0 @@
[gd_resource type="NoiseTexture3D" load_steps=2 format=3 uid="uid://eh67onsjmk71"]
[sub_resource type="FastNoiseLite" id="FastNoiseLite_8501y"]
noise_type = 2
frequency = 0.0031
fractal_type = 3
fractal_octaves = 3
fractal_gain = 2.0
cellular_distance_function = 2
cellular_jitter = 1.58
cellular_return_type = 6
domain_warp_type = 2
domain_warp_amplitude = 2.0
domain_warp_frequency = 0.1
metadata/_preview_in_3d_space_ = true
[resource]
width = 256
height = 256
seamless = true
seamless_blend_skirt = 0.6
noise = SubResource("FastNoiseLite_8501y")

View File

@ -1,23 +0,0 @@
[gd_resource type="NoiseTexture3D" load_steps=2 format=3 uid="uid://qwu7xshh6o42"]
[sub_resource type="FastNoiseLite" id="FastNoiseLite_p3blp"]
noise_type = 0
seed = 4
frequency = 0.001
fractal_type = 3
fractal_octaves = 4
fractal_gain = 2.0
fractal_weighted_strength = 0.42
cellular_return_type = 6
domain_warp_type = 2
domain_warp_amplitude = 5.0
domain_warp_frequency = 0.1
metadata/_preview_in_3d_space_ = true
[resource]
width = 256
height = 256
invert = true
seamless = true
seamless_blend_skirt = 0.6
noise = SubResource("FastNoiseLite_p3blp")

View File

@ -1,16 +0,0 @@
[gd_resource type="NoiseTexture3D" load_steps=2 format=3 uid="uid://5eyl0ek5vpba"]
[sub_resource type="FastNoiseLite" id="FastNoiseLite_w5jvl"]
frequency = 0.0025
fractal_type = 2
fractal_octaves = 4
fractal_gain = 0.667
domain_warp_type = 2
metadata/_preview_in_3d_space_ = true
[resource]
width = 256
height = 256
seamless = true
seamless_blend_skirt = 0.5
noise = SubResource("FastNoiseLite_w5jvl")

View File

@ -6,4 +6,3 @@ fractal_type = 2
fractal_octaves = 4 fractal_octaves = 4
fractal_gain = 0.667 fractal_gain = 0.667
domain_warp_type = 2 domain_warp_type = 2
metadata/_preview_in_3d_space_ = true

View File

@ -1,15 +0,0 @@
[gd_resource type="FastNoiseLite" format=3 uid="uid://ceerxkqyngc6i"]
[resource]
noise_type = 0
seed = 4
frequency = 0.0017
fractal_type = 3
fractal_octaves = 4
fractal_gain = 2.0
fractal_weighted_strength = 0.18
cellular_return_type = 6
domain_warp_type = 2
domain_warp_amplitude = 5.0
domain_warp_frequency = 0.1
metadata/_preview_in_3d_space_ = true

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -4,7 +4,7 @@
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="2_si4vj"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="2_si4vj"]
[ext_resource type="Texture2D" uid="uid://dthjo3ymo7say" path="res://levels/ghost_ship/level/airlock/floor_mask.png" id="3_7lojt"] [ext_resource type="Texture2D" uid="uid://dthjo3ymo7say" path="res://levels/ghost_ship/level/airlock/floor_mask.png" id="3_7lojt"]
[ext_resource type="ArrayMesh" uid="uid://bumwpsm42csme" path="res://assets/level/ceiling/ceiling_9x9.mesh" id="4_hgu5g"] [ext_resource type="ArrayMesh" uid="uid://bumwpsm42csme" path="res://assets/level/ceiling/ceiling_9x9.mesh" id="4_hgu5g"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="4_knpho"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="4_knpho"]
[ext_resource type="Texture2D" uid="uid://bn4nrclcovuej" path="res://assets/level/wall/wall_1_C.png" id="5_oawwh"] [ext_resource type="Texture2D" uid="uid://bn4nrclcovuej" path="res://assets/level/wall/wall_1_C.png" id="5_oawwh"]
[ext_resource type="Texture2D" uid="uid://da3nqwmiwbu8s" path="res://assets/level/wall/wall_1_M.png" id="6_orm16"] [ext_resource type="Texture2D" uid="uid://da3nqwmiwbu8s" path="res://assets/level/wall/wall_1_M.png" id="6_orm16"]
[ext_resource type="Texture2D" uid="uid://bujelwt4b5d0s" path="res://assets/level/wall/wall_1_N.png" id="7_8qct8"] [ext_resource type="Texture2D" uid="uid://bujelwt4b5d0s" path="res://assets/level/wall/wall_1_N.png" id="7_8qct8"]
@ -14,7 +14,7 @@
[ext_resource type="Texture2D" uid="uid://cpdrvdu3qt62t" path="res://assets/level/wall/wall_2_N.png" id="11_3mk3p"] [ext_resource type="Texture2D" uid="uid://cpdrvdu3qt62t" path="res://assets/level/wall/wall_2_N.png" id="11_3mk3p"]
[ext_resource type="Texture2D" uid="uid://ba5vvrx730go8" path="res://assets/level/wall/wall_2_R.png" id="12_608qq"] [ext_resource type="Texture2D" uid="uid://ba5vvrx730go8" path="res://assets/level/wall/wall_2_R.png" id="12_608qq"]
[ext_resource type="ArrayMesh" uid="uid://bx00qgk2dyjrw" path="res://assets/level/wall/wall_2.mesh" id="13_wvsd4"] [ext_resource type="ArrayMesh" uid="uid://bx00qgk2dyjrw" path="res://assets/level/wall/wall_2.mesh" id="13_wvsd4"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="14_asais"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="14_asais"]
[ext_resource type="PackedScene" uid="uid://b7ycqk0r7n2t" path="res://assets/props/eva_suit/eva_suit.gltf" id="15_e4f0d"] [ext_resource type="PackedScene" uid="uid://b7ycqk0r7n2t" path="res://assets/props/eva_suit/eva_suit.gltf" id="15_e4f0d"]
[ext_resource type="PackedScene" uid="uid://dl6vekf0joac4" path="res://src/props/eva_suit/eva_suit.tscn" id="16_oacma"] [ext_resource type="PackedScene" uid="uid://dl6vekf0joac4" path="res://src/props/eva_suit/eva_suit.tscn" id="16_oacma"]
[ext_resource type="ArrayMesh" uid="uid://c66fwpu8pe7ti" path="res://assets/props/tarp_crate/tarp_crate_2.obj" id="17_4abyn"] [ext_resource type="ArrayMesh" uid="uid://c66fwpu8pe7ti" path="res://assets/props/tarp_crate/tarp_crate_2.obj" id="17_4abyn"]

View File

@ -2,10 +2,10 @@
[ext_resource type="ArrayMesh" uid="uid://bumwpsm42csme" path="res://assets/level/ceiling/ceiling_9x9.mesh" id="1_20lab"] [ext_resource type="ArrayMesh" uid="uid://bumwpsm42csme" path="res://assets/level/ceiling/ceiling_9x9.mesh" id="1_20lab"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="2_jd3pc"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="2_jd3pc"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="3_s2uxq"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="3_s2uxq"]
[ext_resource type="ArrayMesh" uid="uid://dpr5cgq743f4s" path="res://assets/level/floor/floor_9x9.mesh" id="4_exqd3"] [ext_resource type="ArrayMesh" uid="uid://dpr5cgq743f4s" path="res://assets/level/floor/floor_9x9.mesh" id="4_exqd3"]
[ext_resource type="ArrayMesh" uid="uid://c785n3j3aq4sf" path="res://assets/level/wall/wall_1.mesh" id="5_fopii"] [ext_resource type="ArrayMesh" uid="uid://c785n3j3aq4sf" path="res://assets/level/wall/wall_1.mesh" id="5_fopii"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="6_d0c5k"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="6_d0c5k"]
[ext_resource type="Texture2D" uid="uid://bd52xpmm3oqw" path="res://assets/props/bulkhead/bulkhead_door_C.png" id="7_iwhm6"] [ext_resource type="Texture2D" uid="uid://bd52xpmm3oqw" path="res://assets/props/bulkhead/bulkhead_door_C.png" id="7_iwhm6"]
[ext_resource type="Texture2D" uid="uid://nexcq3xxrebb" path="res://assets/props/bulkhead/bulkhead_door_M.png" id="8_qdfj2"] [ext_resource type="Texture2D" uid="uid://nexcq3xxrebb" path="res://assets/props/bulkhead/bulkhead_door_M.png" id="8_qdfj2"]
[ext_resource type="Texture2D" uid="uid://dk4sm780p6jfc" path="res://assets/props/bulkhead/bulkhead_door_N.png" id="9_wwtwk"] [ext_resource type="Texture2D" uid="uid://dk4sm780p6jfc" path="res://assets/props/bulkhead/bulkhead_door_N.png" id="9_wwtwk"]

View File

@ -3,14 +3,14 @@
[ext_resource type="ArrayMesh" uid="uid://cqd0a7ousx01n" path="res://assets/level/hallway/hallway_1.mesh" id="1_ckpmb"] [ext_resource type="ArrayMesh" uid="uid://cqd0a7ousx01n" path="res://assets/level/hallway/hallway_1.mesh" id="1_ckpmb"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="3_s4vba"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="3_s4vba"]
[ext_resource type="PackedScene" uid="uid://drm5dspi48pf5" path="res://src/props/crate_long/phys_crate_long.tscn" id="4_vc8nj"] [ext_resource type="PackedScene" uid="uid://drm5dspi48pf5" path="res://src/props/crate_long/phys_crate_long.tscn" id="4_vc8nj"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="5_hwbyh"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="5_hwbyh"]
[ext_resource type="PackedScene" uid="uid://30o8ltnnxpxo" path="res://src/effects/floating_dust.tscn" id="8_t14hf"] [ext_resource type="PackedScene" uid="uid://30o8ltnnxpxo" path="res://src/effects/floating_dust.tscn" id="8_t14hf"]
[ext_resource type="Script" uid="uid://c3i315cnqikok" path="res://src/game/tutorial/tutorial_area.gd" id="9_20ek7"] [ext_resource type="Script" uid="uid://c3i315cnqikok" path="res://src/game/tutorial/tutorial_area.gd" id="9_20ek7"]
[ext_resource type="PackedScene" uid="uid://d2feet02a603e" path="res://src/props/overhead_light/overhead_light.tscn" id="9_vwa0l"] [ext_resource type="PackedScene" uid="uid://d2feet02a603e" path="res://src/props/overhead_light/overhead_light.tscn" id="9_vwa0l"]
[ext_resource type="Material" uid="uid://dmolqtdktqdsl" path="res://levels/ghost_ship/guide_sign/airlock_sign.material" id="10_5qwf5"] [ext_resource type="Material" uid="uid://dmolqtdktqdsl" path="res://levels/ghost_ship/guide_sign/airlock_sign.material" id="10_5qwf5"]
[ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/grunk_overlays/bright_overlay.material" id="11_i2ry3"] [ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/gunk_overlay_bright.material" id="11_i2ry3"]
[ext_resource type="ArrayMesh" uid="uid://bm0ryb1t7ha7e" path="res://assets/level/t-junction/t-junction_1.mesh" id="12_3ls22"] [ext_resource type="ArrayMesh" uid="uid://bm0ryb1t7ha7e" path="res://assets/level/t-junction/t-junction_1.mesh" id="12_3ls22"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="13_qaol8"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="13_qaol8"]
[ext_resource type="PackedScene" uid="uid://2yqi5u5eo025" path="res://src/world/gunk_node/grunk_nodule.tscn" id="14_bfrms"] [ext_resource type="PackedScene" uid="uid://2yqi5u5eo025" path="res://src/world/gunk_node/grunk_nodule.tscn" id="14_bfrms"]
[ext_resource type="PackedScene" uid="uid://rykf34p8n8x6" path="res://src/props/overhead_light/burnout_light.tscn" id="15_rjmc1"] [ext_resource type="PackedScene" uid="uid://rykf34p8n8x6" path="res://src/props/overhead_light/burnout_light.tscn" id="15_rjmc1"]
[ext_resource type="PackedScene" uid="uid://cjqayfrj2oxyr" path="res://src/props/tarp_crate/tarp_crate_logo.tscn" id="16_c1bv0"] [ext_resource type="PackedScene" uid="uid://cjqayfrj2oxyr" path="res://src/props/tarp_crate/tarp_crate_logo.tscn" id="16_c1bv0"]

View File

@ -3,14 +3,14 @@
[ext_resource type="ArrayMesh" uid="uid://c4klxlj1oop7t" path="res://assets/level/hallway/hallway_4.mesh" id="1_ka7sa"] [ext_resource type="ArrayMesh" uid="uid://c4klxlj1oop7t" path="res://assets/level/hallway/hallway_4.mesh" id="1_ka7sa"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="2_osdhu"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="2_osdhu"]
[ext_resource type="PackedScene" uid="uid://30o8ltnnxpxo" path="res://src/effects/floating_dust.tscn" id="3_osdhu"] [ext_resource type="PackedScene" uid="uid://30o8ltnnxpxo" path="res://src/effects/floating_dust.tscn" id="3_osdhu"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="4_650i1"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="4_650i1"]
[ext_resource type="Material" uid="uid://b8xdnogrfefvf" path="res://levels/ghost_ship/guide_sign/mess_hall_sign.material" id="5_650i1"] [ext_resource type="Material" uid="uid://b8xdnogrfefvf" path="res://levels/ghost_ship/guide_sign/mess_hall_sign.material" id="5_650i1"]
[ext_resource type="Texture2D" uid="uid://duvfb656uahuu" path="res://assets/level/guide_signs/guide_sign_mess_hall_C.png" id="6_o070x"] [ext_resource type="Texture2D" uid="uid://duvfb656uahuu" path="res://assets/level/guide_signs/guide_sign_mess_hall_C.png" id="6_o070x"]
[ext_resource type="Texture2D" uid="uid://dm50ac5enanm6" path="res://assets/level/guide_signs/guide_sign_mess_hall_E.png" id="7_bmovs"] [ext_resource type="Texture2D" uid="uid://dm50ac5enanm6" path="res://assets/level/guide_signs/guide_sign_mess_hall_E.png" id="7_bmovs"]
[ext_resource type="Texture2D" uid="uid://7qbnrtjmvl57" path="res://assets/props/guide_sign/guide_sign_M.png" id="8_f8vhe"] [ext_resource type="Texture2D" uid="uid://7qbnrtjmvl57" path="res://assets/props/guide_sign/guide_sign_M.png" id="8_f8vhe"]
[ext_resource type="Texture2D" uid="uid://d2h6ec1a0jm7c" path="res://assets/props/guide_sign/guide_sign_N.png" id="9_fsxgt"] [ext_resource type="Texture2D" uid="uid://d2h6ec1a0jm7c" path="res://assets/props/guide_sign/guide_sign_N.png" id="9_fsxgt"]
[ext_resource type="Texture2D" uid="uid://cjm8vlxnejx3w" path="res://assets/props/guide_sign/guide_sign_R.png" id="10_ikww0"] [ext_resource type="Texture2D" uid="uid://cjm8vlxnejx3w" path="res://assets/props/guide_sign/guide_sign_R.png" id="10_ikww0"]
[ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/grunk_overlays/bright_overlay.material" id="11_iefrw"] [ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/gunk_overlay_bright.material" id="11_iefrw"]
[ext_resource type="PackedScene" uid="uid://bpsiwx1517pk1" path="res://src/props/tarp_crate/tarp_crate.tscn" id="12_vtfca"] [ext_resource type="PackedScene" uid="uid://bpsiwx1517pk1" path="res://src/props/tarp_crate/tarp_crate.tscn" id="12_vtfca"]
[ext_resource type="Script" uid="uid://c3i315cnqikok" path="res://src/game/tutorial/tutorial_area.gd" id="14_6qtqj"] [ext_resource type="Script" uid="uid://c3i315cnqikok" path="res://src/game/tutorial/tutorial_area.gd" id="14_6qtqj"]
[ext_resource type="ArrayMesh" uid="uid://b17naqcl4ie21" path="res://assets/level/floor/floor_1.mesh" id="14_ihtb8"] [ext_resource type="ArrayMesh" uid="uid://b17naqcl4ie21" path="res://assets/level/floor/floor_1.mesh" id="14_ihtb8"]
@ -19,7 +19,7 @@
[ext_resource type="ArrayMesh" uid="uid://b3f5p4o7qr1mf" path="res://assets/level/t-junction/t-junction_2.mesh" id="16_0fxnd"] [ext_resource type="ArrayMesh" uid="uid://b3f5p4o7qr1mf" path="res://assets/level/t-junction/t-junction_2.mesh" id="16_0fxnd"]
[ext_resource type="ArrayMesh" uid="uid://dbgk0kdg1vufk" path="res://assets/level/ceiling/ceiling_1.mesh" id="16_cnewm"] [ext_resource type="ArrayMesh" uid="uid://dbgk0kdg1vufk" path="res://assets/level/ceiling/ceiling_1.mesh" id="16_cnewm"]
[ext_resource type="ArrayMesh" uid="uid://c785n3j3aq4sf" path="res://assets/level/wall/wall_1.mesh" id="17_ka7sa"] [ext_resource type="ArrayMesh" uid="uid://c785n3j3aq4sf" path="res://assets/level/wall/wall_1.mesh" id="17_ka7sa"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="17_wqkax"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="17_wqkax"]
[ext_resource type="PackedScene" uid="uid://drm5dspi48pf5" path="res://src/props/crate_long/phys_crate_long.tscn" id="19_j48oc"] [ext_resource type="PackedScene" uid="uid://drm5dspi48pf5" path="res://src/props/crate_long/phys_crate_long.tscn" id="19_j48oc"]
[ext_resource type="PackedScene" uid="uid://kctp5erogwcb" path="res://src/world/mechanics/listener/listener.tscn" id="22_arxka"] [ext_resource type="PackedScene" uid="uid://kctp5erogwcb" path="res://src/world/mechanics/listener/listener.tscn" id="22_arxka"]
[ext_resource type="ArrayMesh" uid="uid://d0sdsir1hqnbu" path="res://assets/level/wall/wall_4.mesh" id="23_7ox1u"] [ext_resource type="ArrayMesh" uid="uid://d0sdsir1hqnbu" path="res://assets/level/wall/wall_4.mesh" id="23_7ox1u"]

View File

@ -4,12 +4,12 @@
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="2_rvc24"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="2_rvc24"]
[ext_resource type="PackedScene" uid="uid://30o8ltnnxpxo" path="res://src/effects/floating_dust.tscn" id="3_rvc24"] [ext_resource type="PackedScene" uid="uid://30o8ltnnxpxo" path="res://src/effects/floating_dust.tscn" id="3_rvc24"]
[ext_resource type="PackedScene" uid="uid://rykf34p8n8x6" path="res://src/props/overhead_light/burnout_light.tscn" id="4_8y1ya"] [ext_resource type="PackedScene" uid="uid://rykf34p8n8x6" path="res://src/props/overhead_light/burnout_light.tscn" id="4_8y1ya"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="4_yqi6h"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="4_yqi6h"]
[ext_resource type="Material" uid="uid://dt73a25l7h8if" path="res://levels/ghost_ship/guide_sign/crew_quarters_sign.material" id="5_yqi6h"] [ext_resource type="Material" uid="uid://dt73a25l7h8if" path="res://levels/ghost_ship/guide_sign/crew_quarters_sign.material" id="5_yqi6h"]
[ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/grunk_overlays/bright_overlay.material" id="6_8pwhd"] [ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/gunk_overlay_bright.material" id="6_8pwhd"]
[ext_resource type="Material" uid="uid://lp1osos3aqdl" path="res://levels/ghost_ship/guide_sign/ops_sign.material" id="7_h1n2n"] [ext_resource type="Material" uid="uid://lp1osos3aqdl" path="res://levels/ghost_ship/guide_sign/ops_sign.material" id="7_h1n2n"]
[ext_resource type="ArrayMesh" uid="uid://b3f5p4o7qr1mf" path="res://assets/level/t-junction/t-junction_2.mesh" id="8_1goqq"] [ext_resource type="ArrayMesh" uid="uid://b3f5p4o7qr1mf" path="res://assets/level/t-junction/t-junction_2.mesh" id="8_1goqq"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="9_57qp5"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="9_57qp5"]
[ext_resource type="PackedScene" uid="uid://d2feet02a603e" path="res://src/props/overhead_light/overhead_light.tscn" id="10_f0kmn"] [ext_resource type="PackedScene" uid="uid://d2feet02a603e" path="res://src/props/overhead_light/overhead_light.tscn" id="10_f0kmn"]
[ext_resource type="ArrayMesh" uid="uid://bm0ryb1t7ha7e" path="res://assets/level/t-junction/t-junction_1.mesh" id="11_s3mtr"] [ext_resource type="ArrayMesh" uid="uid://bm0ryb1t7ha7e" path="res://assets/level/t-junction/t-junction_1.mesh" id="11_s3mtr"]
[ext_resource type="ArrayMesh" uid="uid://dkh2r61ydupb7" path="res://assets/level/floor/floor_2.mesh" id="12_i8gqp"] [ext_resource type="ArrayMesh" uid="uid://dkh2r61ydupb7" path="res://assets/level/floor/floor_2.mesh" id="12_i8gqp"]

View File

@ -4,8 +4,8 @@
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="2_xbtal"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="2_xbtal"]
[ext_resource type="ArrayMesh" uid="uid://bumwpsm42csme" path="res://assets/level/ceiling/ceiling_9x9.mesh" id="3_xbtal"] [ext_resource type="ArrayMesh" uid="uid://bumwpsm42csme" path="res://assets/level/ceiling/ceiling_9x9.mesh" id="3_xbtal"]
[ext_resource type="ArrayMesh" uid="uid://c785n3j3aq4sf" path="res://assets/level/wall/wall_1.mesh" id="4_mxi1m"] [ext_resource type="ArrayMesh" uid="uid://c785n3j3aq4sf" path="res://assets/level/wall/wall_1.mesh" id="4_mxi1m"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="4_rcrnx"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="4_rcrnx"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="5_rcrnx"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="5_rcrnx"]
[ext_resource type="PackedScene" uid="uid://30o8ltnnxpxo" path="res://src/effects/floating_dust.tscn" id="7_smsfc"] [ext_resource type="PackedScene" uid="uid://30o8ltnnxpxo" path="res://src/effects/floating_dust.tscn" id="7_smsfc"]
[ext_resource type="ArrayMesh" uid="uid://b17naqcl4ie21" path="res://assets/level/floor/floor_1.mesh" id="8_vt83f"] [ext_resource type="ArrayMesh" uid="uid://b17naqcl4ie21" path="res://assets/level/floor/floor_1.mesh" id="8_vt83f"]
[ext_resource type="ArrayMesh" uid="uid://dbgk0kdg1vufk" path="res://assets/level/ceiling/ceiling_1.mesh" id="9_ga3kk"] [ext_resource type="ArrayMesh" uid="uid://dbgk0kdg1vufk" path="res://assets/level/ceiling/ceiling_1.mesh" id="9_ga3kk"]

View File

@ -4,8 +4,8 @@
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="2_lknyg"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="2_lknyg"]
[ext_resource type="ArrayMesh" uid="uid://bumwpsm42csme" path="res://assets/level/ceiling/ceiling_9x9.mesh" id="3_lknyg"] [ext_resource type="ArrayMesh" uid="uid://bumwpsm42csme" path="res://assets/level/ceiling/ceiling_9x9.mesh" id="3_lknyg"]
[ext_resource type="ArrayMesh" uid="uid://c785n3j3aq4sf" path="res://assets/level/wall/wall_1.mesh" id="4_g8qvw"] [ext_resource type="ArrayMesh" uid="uid://c785n3j3aq4sf" path="res://assets/level/wall/wall_1.mesh" id="4_g8qvw"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="4_yvs0w"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="4_yvs0w"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="5_yvs0w"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="5_yvs0w"]
[ext_resource type="ArrayMesh" uid="uid://b17naqcl4ie21" path="res://assets/level/floor/floor_1.mesh" id="6_jnjru"] [ext_resource type="ArrayMesh" uid="uid://b17naqcl4ie21" path="res://assets/level/floor/floor_1.mesh" id="6_jnjru"]
[ext_resource type="ArrayMesh" uid="uid://dkh2r61ydupb7" path="res://assets/level/floor/floor_2.mesh" id="7_bnexv"] [ext_resource type="ArrayMesh" uid="uid://dkh2r61ydupb7" path="res://assets/level/floor/floor_2.mesh" id="7_bnexv"]
[ext_resource type="ArrayMesh" uid="uid://dbgk0kdg1vufk" path="res://assets/level/ceiling/ceiling_1.mesh" id="8_p5an5"] [ext_resource type="ArrayMesh" uid="uid://dbgk0kdg1vufk" path="res://assets/level/ceiling/ceiling_1.mesh" id="8_p5an5"]

View File

@ -2,11 +2,11 @@
[ext_resource type="ArrayMesh" uid="uid://c785n3j3aq4sf" path="res://assets/level/wall/wall_1.mesh" id="1_ind8m"] [ext_resource type="ArrayMesh" uid="uid://c785n3j3aq4sf" path="res://assets/level/wall/wall_1.mesh" id="1_ind8m"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="2_vyxvc"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="2_vyxvc"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="3_6lrbi"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="3_6lrbi"]
[ext_resource type="ArrayMesh" uid="uid://dpr5cgq743f4s" path="res://assets/level/floor/floor_9x9.mesh" id="4_pmhe8"] [ext_resource type="ArrayMesh" uid="uid://dpr5cgq743f4s" path="res://assets/level/floor/floor_9x9.mesh" id="4_pmhe8"]
[ext_resource type="ArrayMesh" uid="uid://bumwpsm42csme" path="res://assets/level/ceiling/ceiling_9x9.mesh" id="5_vyxvc"] [ext_resource type="ArrayMesh" uid="uid://bumwpsm42csme" path="res://assets/level/ceiling/ceiling_9x9.mesh" id="5_vyxvc"]
[ext_resource type="PackedScene" uid="uid://ca7b5gjl3ri0p" path="res://src/props/cafe_table/cafe_table.tscn" id="6_1ls0l"] [ext_resource type="PackedScene" uid="uid://ca7b5gjl3ri0p" path="res://src/props/cafe_table/cafe_table.tscn" id="6_1ls0l"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="6_jshbi"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="6_jshbi"]
[ext_resource type="PackedScene" uid="uid://c8pkhw0b47xdd" path="res://src/props/cupboard/cupboard.tscn" id="7_jshbi"] [ext_resource type="PackedScene" uid="uid://c8pkhw0b47xdd" path="res://src/props/cupboard/cupboard.tscn" id="7_jshbi"]
[ext_resource type="PackedScene" uid="uid://dtus42gmb1kqq" path="res://src/props/vending_machine/vending_machine.tscn" id="8_g7nyg"] [ext_resource type="PackedScene" uid="uid://dtus42gmb1kqq" path="res://src/props/vending_machine/vending_machine.tscn" id="8_g7nyg"]
[ext_resource type="Texture2D" uid="uid://d2xq0uvxh2ojk" path="res://assets/props/vending_machine/vending_machine_C.png" id="9_6xy1x"] [ext_resource type="Texture2D" uid="uid://d2xq0uvxh2ojk" path="res://assets/props/vending_machine/vending_machine_C.png" id="9_6xy1x"]

View File

@ -3,9 +3,9 @@
[ext_resource type="ArrayMesh" uid="uid://dpr5cgq743f4s" path="res://assets/level/floor/floor_9x9.mesh" id="1_80no3"] [ext_resource type="ArrayMesh" uid="uid://dpr5cgq743f4s" path="res://assets/level/floor/floor_9x9.mesh" id="1_80no3"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="2_chf33"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="2_chf33"]
[ext_resource type="ArrayMesh" uid="uid://bumwpsm42csme" path="res://assets/level/ceiling/ceiling_9x9.mesh" id="3_chf33"] [ext_resource type="ArrayMesh" uid="uid://bumwpsm42csme" path="res://assets/level/ceiling/ceiling_9x9.mesh" id="3_chf33"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="4_6issa"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="4_6issa"]
[ext_resource type="ArrayMesh" uid="uid://c785n3j3aq4sf" path="res://assets/level/wall/wall_1.mesh" id="4_vmimu"] [ext_resource type="ArrayMesh" uid="uid://c785n3j3aq4sf" path="res://assets/level/wall/wall_1.mesh" id="4_vmimu"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="5_6issa"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="5_6issa"]
[ext_resource type="ArrayMesh" uid="uid://d0sdsir1hqnbu" path="res://assets/level/wall/wall_4.mesh" id="6_jmo1t"] [ext_resource type="ArrayMesh" uid="uid://d0sdsir1hqnbu" path="res://assets/level/wall/wall_4.mesh" id="6_jmo1t"]
[ext_resource type="ArrayMesh" uid="uid://bx00qgk2dyjrw" path="res://assets/level/wall/wall_2.mesh" id="7_7c0f0"] [ext_resource type="ArrayMesh" uid="uid://bx00qgk2dyjrw" path="res://assets/level/wall/wall_2.mesh" id="7_7c0f0"]
[ext_resource type="ArrayMesh" uid="uid://dkh2r61ydupb7" path="res://assets/level/floor/floor_2.mesh" id="8_pascc"] [ext_resource type="ArrayMesh" uid="uid://dkh2r61ydupb7" path="res://assets/level/floor/floor_2.mesh" id="8_pascc"]

View File

@ -3,7 +3,7 @@
[ext_resource type="Script" uid="uid://c8lfvagqptams" path="res://levels/grunkbeast_test/visual_test/visual_test.gd" id="1_f3alo"] [ext_resource type="Script" uid="uid://c8lfvagqptams" path="res://levels/grunkbeast_test/visual_test/visual_test.gd" id="1_f3alo"]
[ext_resource type="ArrayMesh" uid="uid://c4klxlj1oop7t" path="res://assets/level/hallway/hallway_4.mesh" id="2_jle5o"] [ext_resource type="ArrayMesh" uid="uid://c4klxlj1oop7t" path="res://assets/level/hallway/hallway_4.mesh" id="2_jle5o"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="3_lpqtr"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="3_lpqtr"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="4_ibsng"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="4_ibsng"]
[ext_resource type="PackedScene" uid="uid://30o8ltnnxpxo" path="res://src/effects/floating_dust.tscn" id="5_hposp"] [ext_resource type="PackedScene" uid="uid://30o8ltnnxpxo" path="res://src/effects/floating_dust.tscn" id="5_hposp"]
[ext_resource type="PackedScene" uid="uid://d2feet02a603e" path="res://src/props/overhead_light/overhead_light.tscn" id="6_n2727"] [ext_resource type="PackedScene" uid="uid://d2feet02a603e" path="res://src/props/overhead_light/overhead_light.tscn" id="6_n2727"]
[ext_resource type="Material" uid="uid://b8xdnogrfefvf" path="res://levels/ghost_ship/guide_sign/mess_hall_sign.material" id="7_07ff1"] [ext_resource type="Material" uid="uid://b8xdnogrfefvf" path="res://levels/ghost_ship/guide_sign/mess_hall_sign.material" id="7_07ff1"]
@ -14,7 +14,7 @@
[ext_resource type="Texture2D" uid="uid://cjm8vlxnejx3w" path="res://assets/props/guide_sign/guide_sign_R.png" id="12_ya8yf"] [ext_resource type="Texture2D" uid="uid://cjm8vlxnejx3w" path="res://assets/props/guide_sign/guide_sign_R.png" id="12_ya8yf"]
[ext_resource type="PackedScene" uid="uid://bpsiwx1517pk1" path="res://src/props/tarp_crate/tarp_crate.tscn" id="14_u7y2c"] [ext_resource type="PackedScene" uid="uid://bpsiwx1517pk1" path="res://src/props/tarp_crate/tarp_crate.tscn" id="14_u7y2c"]
[ext_resource type="ArrayMesh" uid="uid://b17naqcl4ie21" path="res://assets/level/floor/floor_1.mesh" id="16_43u2e"] [ext_resource type="ArrayMesh" uid="uid://b17naqcl4ie21" path="res://assets/level/floor/floor_1.mesh" id="16_43u2e"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="17_f3alo"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="17_f3alo"]
[ext_resource type="ArrayMesh" uid="uid://dbgk0kdg1vufk" path="res://assets/level/ceiling/ceiling_1.mesh" id="18_8q52p"] [ext_resource type="ArrayMesh" uid="uid://dbgk0kdg1vufk" path="res://assets/level/ceiling/ceiling_1.mesh" id="18_8q52p"]
[ext_resource type="ArrayMesh" uid="uid://c785n3j3aq4sf" path="res://assets/level/wall/wall_1.mesh" id="19_clw2p"] [ext_resource type="ArrayMesh" uid="uid://c785n3j3aq4sf" path="res://assets/level/wall/wall_1.mesh" id="19_clw2p"]
[ext_resource type="Material" uid="uid://dt73a25l7h8if" path="res://levels/ghost_ship/guide_sign/crew_quarters_sign.material" id="20_7nq4j"] [ext_resource type="Material" uid="uid://dt73a25l7h8if" path="res://levels/ghost_ship/guide_sign/crew_quarters_sign.material" id="20_7nq4j"]

View File

@ -5,7 +5,7 @@
[ext_resource type="PackedScene" uid="uid://b6eg8t04rkh0c" path="res://src/props/wall_switch/wall_switch.tscn" id="3_awnx0"] [ext_resource type="PackedScene" uid="uid://b6eg8t04rkh0c" path="res://src/props/wall_switch/wall_switch.tscn" id="3_awnx0"]
[ext_resource type="Script" uid="uid://deg5xd87cy8rg" path="res://src/props/interactive.gd" id="4_qjnj2"] [ext_resource type="Script" uid="uid://deg5xd87cy8rg" path="res://src/props/interactive.gd" id="4_qjnj2"]
[ext_resource type="Texture2D" uid="uid://8cm835h4gxwe" path="res://assets/debug_mask.png" id="5_aix42"] [ext_resource type="Texture2D" uid="uid://8cm835h4gxwe" path="res://assets/debug_mask.png" id="5_aix42"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="7_qjnj2"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="7_qjnj2"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="8_awnx0"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="8_awnx0"]
[ext_resource type="PackedScene" uid="uid://cubwniraol1qn" path="res://src/props/bulkhead/bulkhead.tscn" id="8_ujrcv"] [ext_resource type="PackedScene" uid="uid://cubwniraol1qn" path="res://src/props/bulkhead/bulkhead.tscn" id="8_ujrcv"]
[ext_resource type="PackedScene" uid="uid://b5jubpjj3d277" path="res://levels/mechanic_test/signal_test.tscn" id="9_ix0jw"] [ext_resource type="PackedScene" uid="uid://b5jubpjj3d277" path="res://levels/mechanic_test/signal_test.tscn" id="9_ix0jw"]

View File

@ -2,8 +2,8 @@
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="1_7477u"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="1_7477u"]
[ext_resource type="Texture2D" uid="uid://8cm835h4gxwe" path="res://assets/debug_mask.png" id="2_7477u"] [ext_resource type="Texture2D" uid="uid://8cm835h4gxwe" path="res://assets/debug_mask.png" id="2_7477u"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="3_cr8wn"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="3_cr8wn"]
[ext_resource type="Material" uid="uid://djoxlkeqf4cvp" path="res://assets/materials/grunk_overlays/debug_overlay.material" id="4_lrgpr"] [ext_resource type="Material" uid="uid://djoxlkeqf4cvp" path="res://assets/materials/grunk_overlay_debug.material" id="4_lrgpr"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_awnx0"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_awnx0"]
albedo_color = Color(1, 0.403922, 1, 1) albedo_color = Color(1, 0.403922, 1, 1)

View File

@ -2,7 +2,7 @@
[ext_resource type="Material" uid="uid://bgafiida0ob2j" path="res://assets/materials/level/wall_2.material" id="1_e8utx"] [ext_resource type="Material" uid="uid://bgafiida0ob2j" path="res://assets/materials/level/wall_2.material" id="1_e8utx"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="5_r07l4"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="5_r07l4"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="6_r07l4"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="6_r07l4"]
[ext_resource type="PackedScene" uid="uid://dgqx1h4dtkwma" path="res://src/world/mechanics/trigger/gunk_trigger.tscn" id="8_gx82l"] [ext_resource type="PackedScene" uid="uid://dgqx1h4dtkwma" path="res://src/world/mechanics/trigger/gunk_trigger.tscn" id="8_gx82l"]
[ext_resource type="PackedScene" uid="uid://bttust5ohud8e" path="res://src/world/mechanics/relay/gunk_relay.tscn" id="9_d4a3d"] [ext_resource type="PackedScene" uid="uid://bttust5ohud8e" path="res://src/world/mechanics/relay/gunk_relay.tscn" id="9_d4a3d"]
[ext_resource type="PackedScene" uid="uid://dgeg3kkogm71m" path="res://src/world/mechanics/alarm/gunk_alarm.tscn" id="10_l8xa5"] [ext_resource type="PackedScene" uid="uid://dgeg3kkogm71m" path="res://src/world/mechanics/alarm/gunk_alarm.tscn" id="10_l8xa5"]

View File

@ -9,16 +9,16 @@
[ext_resource type="Texture2D" uid="uid://clofvb76pv6g" path="res://assets/red.png" id="5_jj0u7"] [ext_resource type="Texture2D" uid="uid://clofvb76pv6g" path="res://assets/red.png" id="5_jj0u7"]
[ext_resource type="Texture2D" uid="uid://cd0w8eqpount3" path="res://assets/props/crate_long/crate_long_C.png" id="6_e2fuu"] [ext_resource type="Texture2D" uid="uid://cd0w8eqpount3" path="res://assets/props/crate_long/crate_long_C.png" id="6_e2fuu"]
[ext_resource type="Texture2D" uid="uid://da5p04vbiy3xe" path="res://assets/props/crate_long/crate_long_M.png" id="7_hv7qb"] [ext_resource type="Texture2D" uid="uid://da5p04vbiy3xe" path="res://assets/props/crate_long/crate_long_M.png" id="7_hv7qb"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="7_nsdlh"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="7_nsdlh"]
[ext_resource type="Texture2D" uid="uid://bsovubygl3go2" path="res://assets/props/crate_long/crate_long_N.png" id="8_wxmii"] [ext_resource type="Texture2D" uid="uid://bsovubygl3go2" path="res://assets/props/crate_long/crate_long_N.png" id="8_wxmii"]
[ext_resource type="Texture2D" uid="uid://b1m1my5q2vlwi" path="res://assets/props/crate_long/crate_long_R.png" id="9_nsdlh"] [ext_resource type="Texture2D" uid="uid://b1m1my5q2vlwi" path="res://assets/props/crate_long/crate_long_R.png" id="9_nsdlh"]
[ext_resource type="PackedScene" uid="uid://30o8ltnnxpxo" path="res://src/effects/floating_dust.tscn" id="10_br5h1"] [ext_resource type="PackedScene" uid="uid://30o8ltnnxpxo" path="res://src/effects/floating_dust.tscn" id="10_br5h1"]
[ext_resource type="PackedScene" uid="uid://b6eg8t04rkh0c" path="res://src/props/wall_switch/wall_switch.tscn" id="11_qluxd"] [ext_resource type="PackedScene" uid="uid://b6eg8t04rkh0c" path="res://src/props/wall_switch/wall_switch.tscn" id="11_qluxd"]
[ext_resource type="PackedScene" uid="uid://d2feet02a603e" path="res://src/props/overhead_light/overhead_light.tscn" id="12_h6xp0"] [ext_resource type="PackedScene" uid="uid://d2feet02a603e" path="res://src/props/overhead_light/overhead_light.tscn" id="12_h6xp0"]
[ext_resource type="Material" uid="uid://dmolqtdktqdsl" path="res://levels/ghost_ship/guide_sign/airlock_sign.material" id="13_irt7r"] [ext_resource type="Material" uid="uid://dmolqtdktqdsl" path="res://levels/ghost_ship/guide_sign/airlock_sign.material" id="13_irt7r"]
[ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/grunk_overlays/bright_overlay.material" id="14_olej6"] [ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/gunk_overlay_bright.material" id="14_olej6"]
[ext_resource type="ArrayMesh" uid="uid://bm0ryb1t7ha7e" path="res://assets/level/t-junction/t-junction_1.mesh" id="15_tmnt4"] [ext_resource type="ArrayMesh" uid="uid://bm0ryb1t7ha7e" path="res://assets/level/t-junction/t-junction_1.mesh" id="15_tmnt4"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="16_x0tbd"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="16_x0tbd"]
[ext_resource type="PackedScene" uid="uid://2yqi5u5eo025" path="res://src/world/gunk_node/grunk_nodule.tscn" id="17_iwy8m"] [ext_resource type="PackedScene" uid="uid://2yqi5u5eo025" path="res://src/world/gunk_node/grunk_nodule.tscn" id="17_iwy8m"]
[ext_resource type="PackedScene" uid="uid://rykf34p8n8x6" path="res://src/props/overhead_light/burnout_light.tscn" id="18_40pb5"] [ext_resource type="PackedScene" uid="uid://rykf34p8n8x6" path="res://src/props/overhead_light/burnout_light.tscn" id="18_40pb5"]
[ext_resource type="PackedScene" uid="uid://cjqayfrj2oxyr" path="res://src/props/tarp_crate/tarp_crate_logo.tscn" id="19_iuevq"] [ext_resource type="PackedScene" uid="uid://cjqayfrj2oxyr" path="res://src/props/tarp_crate/tarp_crate_logo.tscn" id="19_iuevq"]

View File

@ -36,9 +36,9 @@
[ext_resource type="Script" uid="uid://deg5xd87cy8rg" path="res://src/props/interactive.gd" id="28_ibd1t"] [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://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="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/grunk_overlays/bright_overlay.material" id="37_00w3i"] [ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/gunk_overlay_bright.material" id="37_00w3i"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="40_6kdm2"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="40_6kdm2"]
[ext_resource type="Material" uid="uid://dl3cvc4e7evn4" path="res://assets/materials/grunk_overlays/oily_overlay.material" id="41_6kdm2"] [ext_resource type="Material" uid="uid://dl3cvc4e7evn4" path="res://assets/materials/gunk_overlay_oily.material" id="41_6kdm2"]
[ext_resource type="Shader" uid="uid://dfpidwyes4pvr" path="res://src/shaders/fresnel.gdshader" id="44_csbnx"] [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"] [ext_resource type="Texture2D" uid="uid://8cm835h4gxwe" path="res://assets/debug_mask.png" id="45_q86l6"]

View File

@ -7,7 +7,7 @@
[ext_resource type="Texture2D" uid="uid://dthjo3ymo7say" path="res://levels/ghost_ship/level/airlock/floor_mask.png" id="3_3t4ks"] [ext_resource type="Texture2D" uid="uid://dthjo3ymo7say" path="res://levels/ghost_ship/level/airlock/floor_mask.png" id="3_3t4ks"]
[ext_resource type="Shader" uid="uid://o1vaioor4435" path="res://src/shaders/gunk/gunk_overlay.gdshader" id="3_l2a0i"] [ext_resource type="Shader" uid="uid://o1vaioor4435" path="res://src/shaders/gunk/gunk_overlay.gdshader" id="3_l2a0i"]
[ext_resource type="Gradient" uid="uid://dcr1dt7cujba4" path="res://assets/swatches/gradients/blessing.tres" id="4_4i8px"] [ext_resource type="Gradient" uid="uid://dcr1dt7cujba4" path="res://assets/swatches/gradients/blessing.tres" id="4_4i8px"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="4_cdbrk"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="4_cdbrk"]
[ext_resource type="ArrayMesh" uid="uid://bumwpsm42csme" path="res://assets/level/ceiling/ceiling_9x9.mesh" id="5_4kd0u"] [ext_resource type="ArrayMesh" uid="uid://bumwpsm42csme" path="res://assets/level/ceiling/ceiling_9x9.mesh" id="5_4kd0u"]
[ext_resource type="FastNoiseLite" uid="uid://cnlvdtx68giv6" path="res://assets/materials/gunk_noise.tres" id="5_hps31"] [ext_resource type="FastNoiseLite" uid="uid://cnlvdtx68giv6" path="res://assets/materials/gunk_noise.tres" id="5_hps31"]
[ext_resource type="Texture2D" uid="uid://bn4nrclcovuej" path="res://assets/level/wall/wall_1_C.png" id="6_ftfu1"] [ext_resource type="Texture2D" uid="uid://bn4nrclcovuej" path="res://assets/level/wall/wall_1_C.png" id="6_ftfu1"]
@ -20,7 +20,7 @@
[ext_resource type="Texture2D" uid="uid://cpdrvdu3qt62t" path="res://assets/level/wall/wall_2_N.png" id="12_328l5"] [ext_resource type="Texture2D" uid="uid://cpdrvdu3qt62t" path="res://assets/level/wall/wall_2_N.png" id="12_328l5"]
[ext_resource type="Texture2D" uid="uid://ba5vvrx730go8" path="res://assets/level/wall/wall_2_R.png" id="13_l2a0i"] [ext_resource type="Texture2D" uid="uid://ba5vvrx730go8" path="res://assets/level/wall/wall_2_R.png" id="13_l2a0i"]
[ext_resource type="ArrayMesh" uid="uid://bx00qgk2dyjrw" path="res://assets/level/wall/wall_2.mesh" id="14_hps31"] [ext_resource type="ArrayMesh" uid="uid://bx00qgk2dyjrw" path="res://assets/level/wall/wall_2.mesh" id="14_hps31"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="15_h40r5"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="15_h40r5"]
[ext_resource type="PackedScene" uid="uid://b7ycqk0r7n2t" path="res://assets/props/eva_suit/eva_suit.gltf" id="16_7sqfj"] [ext_resource type="PackedScene" uid="uid://b7ycqk0r7n2t" path="res://assets/props/eva_suit/eva_suit.gltf" id="16_7sqfj"]
[ext_resource type="ArrayMesh" uid="uid://c66fwpu8pe7ti" path="res://assets/props/tarp_crate/tarp_crate_2.obj" id="18_126eu"] [ext_resource type="ArrayMesh" uid="uid://c66fwpu8pe7ti" path="res://assets/props/tarp_crate/tarp_crate_2.obj" id="18_126eu"]
[ext_resource type="Texture2D" uid="uid://bn8jtn1sbfved" path="res://assets/props/tarp_crate/tarp_crate_logo_C.png" id="19_aldde"] [ext_resource type="Texture2D" uid="uid://bn8jtn1sbfved" path="res://assets/props/tarp_crate/tarp_crate_logo_C.png" id="19_aldde"]
@ -43,7 +43,7 @@
[ext_resource type="ArrayMesh" uid="uid://m4did6uilrp7" path="res://assets/props/overhead_light/overhead_light.obj" id="38_d1qr0"] [ext_resource type="ArrayMesh" uid="uid://m4did6uilrp7" path="res://assets/props/overhead_light/overhead_light.obj" id="38_d1qr0"]
[ext_resource type="Material" uid="uid://dmolqtdktqdsl" path="res://levels/ghost_ship/guide_sign/airlock_sign.material" id="39_328l5"] [ext_resource type="Material" uid="uid://dmolqtdktqdsl" path="res://levels/ghost_ship/guide_sign/airlock_sign.material" id="39_328l5"]
[ext_resource type="Texture2D" uid="uid://bne1d0r5a8nn6" path="res://assets/props/overhead_light/overhead_light_C.png" id="39_p58gl"] [ext_resource type="Texture2D" uid="uid://bne1d0r5a8nn6" path="res://assets/props/overhead_light/overhead_light_C.png" id="39_p58gl"]
[ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/grunk_overlays/bright_overlay.material" id="40_l2a0i"] [ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/gunk_overlay_bright.material" id="40_l2a0i"]
[ext_resource type="Texture2D" uid="uid://jag1fu2515j8" path="res://assets/props/overhead_light/overhead_light_E.png" id="40_qbt1e"] [ext_resource type="Texture2D" uid="uid://jag1fu2515j8" path="res://assets/props/overhead_light/overhead_light_E.png" id="40_qbt1e"]
[ext_resource type="Texture2D" uid="uid://bh2jmk7jfjmyr" path="res://assets/props/overhead_light/overhead_light_M.png" id="41_he183"] [ext_resource type="Texture2D" uid="uid://bh2jmk7jfjmyr" path="res://assets/props/overhead_light/overhead_light_M.png" id="41_he183"]
[ext_resource type="ArrayMesh" uid="uid://bm0ryb1t7ha7e" path="res://assets/level/t-junction/t-junction_1.mesh" id="42_hps31"] [ext_resource type="ArrayMesh" uid="uid://bm0ryb1t7ha7e" path="res://assets/level/t-junction/t-junction_1.mesh" id="42_hps31"]

Binary file not shown.

View File

@ -1,138 +0,0 @@
[gd_scene load_steps=18 format=3 uid="uid://cmo0tpvj2apud"]
[ext_resource type="PackedScene" uid="uid://cppd3scvxf3eg" path="res://src/props/crate_long/static_crate_long.tscn" id="1_cxx6p"]
[ext_resource type="Material" uid="uid://dbw82lqigy5w4" path="res://levels/sandbox/gunk_sandbox.material" id="3_v6ppl"]
[ext_resource type="Environment" uid="uid://bkvij3ljl5ox3" path="res://levels/ghost_ship/environment_3.tres" id="4_iu5sc"]
[ext_resource type="ArrayMesh" uid="uid://m4did6uilrp7" path="res://assets/props/overhead_light/overhead_light.obj" id="5_v6ppl"]
[ext_resource type="Texture2D" uid="uid://bne1d0r5a8nn6" path="res://assets/props/overhead_light/overhead_light_C.png" id="6_lmg7i"]
[ext_resource type="Texture2D" uid="uid://jag1fu2515j8" path="res://assets/props/overhead_light/overhead_light_E.png" id="7_q1isc"]
[ext_resource type="Texture2D" uid="uid://bh2jmk7jfjmyr" path="res://assets/props/overhead_light/overhead_light_M.png" id="8_ivpyi"]
[ext_resource type="Texture2D" uid="uid://no4s7dsg8tih" path="res://assets/props/overhead_light/overhead_light_N.png" id="9_76c1e"]
[ext_resource type="Texture2D" uid="uid://cr5e4hk33wmwf" path="res://assets/props/overhead_light/overhead_light_R.png" id="10_bfrsu"]
[ext_resource type="Shader" uid="uid://dnytoirugot2e" path="res://src/shaders/gunk/canvas_grunk.gdshader" id="10_iu5sc"]
[sub_resource type="QuadMesh" id="QuadMesh_x32de"]
size = Vector2(6, 6)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_0cra1"]
resource_local_to_scene = true
albedo_texture = ExtResource("6_lmg7i")
metallic = 1.0
metallic_texture = ExtResource("8_ivpyi")
roughness_texture = ExtResource("10_bfrsu")
emission_enabled = true
emission_energy_multiplier = 12.0
emission_texture = ExtResource("7_q1isc")
normal_enabled = true
normal_texture = ExtResource("9_76c1e")
texture_filter = 2
[sub_resource type="FastNoiseLite" id="FastNoiseLite_rvtcy"]
noise_type = 0
seed = 4
frequency = 0.0017
fractal_type = 3
fractal_octaves = 4
fractal_gain = 2.0
fractal_weighted_strength = 0.18
cellular_return_type = 6
domain_warp_type = 2
domain_warp_amplitude = 5.0
domain_warp_frequency = 0.1
metadata/_preview_in_3d_space_ = true
[sub_resource type="NoiseTexture3D" id="NoiseTexture3D_iu5sc"]
width = 256
height = 256
depth = 32
invert = true
seamless = true
seamless_blend_skirt = 0.5
noise = SubResource("FastNoiseLite_rvtcy")
[sub_resource type="FastNoiseLite" id="FastNoiseLite_lmg7i"]
frequency = 0.0006
fractal_type = 2
fractal_octaves = 4
fractal_gain = 0.667
domain_warp_type = 2
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_q1isc"]
width = 1024
height = 1024
noise = SubResource("FastNoiseLite_lmg7i")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ivpyi"]
resource_local_to_scene = true
shader = ExtResource("10_iu5sc")
shader_parameter/gunk_noise = SubResource("NoiseTexture3D_iu5sc")
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/uv_scale = Vector2(1, 1)
shader_parameter/pan_speed = Vector2(0, 0)
shader_parameter/time_scale = 0.4
shader_parameter/pixellation = 30.0
shader_parameter/time_pixellation = 30.0
shader_parameter/roughness = 0.15
shader_parameter/specular_contribution = 0.8
shader_parameter/emission_strength = 0.0
shader_parameter/bump_strength = 1.0
shader_parameter/fresnel_color = Color(1, 1, 1, 1)
shader_parameter/fresnel_power = 4.0
shader_parameter/fresnel_intensity = 0.0
shader_parameter/iridescence_color = Color(1, 1, 1, 1)
shader_parameter/iridescence_power = 4.0
shader_parameter/iridescence_intensity = 0.0
shader_parameter/overlay_emission_scale = 1.0
shader_parameter/aspect_ratio = 0.5625
shader_parameter/mask_progress = 1.0
shader_parameter/mask_noise = SubResource("NoiseTexture2D_q1isc")
[node name="MaterialTest" type="Node3D"]
[node name="StaticCrateLong" parent="." instance=ExtResource("1_cxx6p")]
material_overlay = ExtResource("3_v6ppl")
[node name="IlluminatedWall" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, -0.9)
material_overlay = ExtResource("3_v6ppl")
mesh = SubResource("QuadMesh_x32de")
[node name="DarkWall" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 24, 3, -3)
material_overlay = ExtResource("3_v6ppl")
mesh = SubResource("QuadMesh_x32de")
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = ExtResource("4_iu5sc")
[node name="OverheadLight" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, 0)
[node name="SpotLight3D" type="SpotLight3D" parent="OverheadLight"]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, -0.3, 0)
light_color = Color(1, 0.9825, 0.95, 1)
light_energy = 2.0
light_specular = 1.0
shadow_enabled = true
spot_range = 16.0
spot_attenuation = 0.5
spot_angle = 70.0
spot_angle_attenuation = 1.55871
[node name="MeshInstance3D2" type="MeshInstance3D" parent="OverheadLight"]
cast_shadow = 0
gi_mode = 2
mesh = ExtResource("5_v6ppl")
skeleton = NodePath("../..")
surface_material_override/0 = SubResource("StandardMaterial3D_0cra1")
[node name="CanvasGrunk" type="ColorRect" parent="."]
material = SubResource("ShaderMaterial_ivpyi")
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2

File diff suppressed because one or more lines are too long

View File

@ -103,26 +103,6 @@ tutorial/progress/interact=false
tutorial/progress/pick_up=false tutorial/progress/pick_up=false
tutorial/progress/rotate=false tutorial/progress/rotate=false
tutorial/progress/throw=false tutorial/progress/throw=false
gameplay/beast/anger_min=0.0
gameplay/beast/anger_max=150.0
gameplay/beast/anger_decay_rate=1.0
gameplay/beast/anger_noise=10.0
gameplay/beast/anger_noise_near=30.0
gameplay/beast/provocation_range=4.8
gameplay/beast/anger_alarm=60.0
gameplay/beast/anger_alarm_extra=60.0
gameplay/beast/anger_touch=35.0
gameplay/beast/anger_attack=100.0
gameplay/beast/anger_sticker=-60.0
gameplay/beast/anger_sniff=40.0
gameplay/beast/anger_start_pursuit=20.0
gameplay/beast/anger_pursuit_frustrated=6.0
gameplay/beast/anger_pursuit_bored=-10.0
gameplay/beast/anger_threshold_tracking=30.0
gameplay/beast/anger_threshold_pursuit=80.0
gameplay/beast/anger_start_tracking=4.0
gameplay/beast/anger_extra_alert_level=4
gameplay/beast/anger_threshold_pounce=140.0
[global_group] [global_group]

View File

@ -6,7 +6,7 @@
[ext_resource type="Texture2D" uid="uid://6nrac2ciprd4" path="res://assets/props/cafe_table/cafe_table_N.png" id="3_4grlf"] [ext_resource type="Texture2D" uid="uid://6nrac2ciprd4" path="res://assets/props/cafe_table/cafe_table_N.png" id="3_4grlf"]
[ext_resource type="Texture2D" uid="uid://dryw5kjktefst" path="res://assets/props/cafe_table/cafe_table_R.png" id="4_naoko"] [ext_resource type="Texture2D" uid="uid://dryw5kjktefst" path="res://assets/props/cafe_table/cafe_table_R.png" id="4_naoko"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="7_atatm"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="7_atatm"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="8_4grlf"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="8_4grlf"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_q50g7"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_q50g7"]
albedo_texture = ExtResource("1_8c2wd") albedo_texture = ExtResource("1_8c2wd")

View File

@ -7,7 +7,7 @@
[ext_resource type="Texture2D" uid="uid://bsovubygl3go2" path="res://assets/props/crate_long/crate_long_N.png" id="4_q4djj"] [ext_resource type="Texture2D" uid="uid://bsovubygl3go2" path="res://assets/props/crate_long/crate_long_N.png" id="4_q4djj"]
[ext_resource type="Texture2D" uid="uid://b1m1my5q2vlwi" path="res://assets/props/crate_long/crate_long_R.png" id="5_eb8p8"] [ext_resource type="Texture2D" uid="uid://b1m1my5q2vlwi" path="res://assets/props/crate_long/crate_long_R.png" id="5_eb8p8"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_064yj"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_064yj"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="7_rlyiq"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="7_rlyiq"]
[ext_resource type="Script" uid="uid://040xta01xqxd" path="res://src/props/physics/holdable.gd" id="8_p8srg"] [ext_resource type="Script" uid="uid://040xta01xqxd" path="res://src/props/physics/holdable.gd" id="8_p8srg"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_8j27j"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_8j27j"]

View File

@ -6,7 +6,7 @@
[ext_resource type="Texture2D" uid="uid://bsovubygl3go2" path="res://assets/props/crate_long/crate_long_N.png" id="4_d06p6"] [ext_resource type="Texture2D" uid="uid://bsovubygl3go2" path="res://assets/props/crate_long/crate_long_N.png" id="4_d06p6"]
[ext_resource type="Texture2D" uid="uid://b1m1my5q2vlwi" path="res://assets/props/crate_long/crate_long_R.png" id="5_cmp6v"] [ext_resource type="Texture2D" uid="uid://b1m1my5q2vlwi" path="res://assets/props/crate_long/crate_long_R.png" id="5_cmp6v"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_agrnx"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_agrnx"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="6_c6a2t"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="6_c6a2t"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_5pe4w"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_5pe4w"]
albedo_texture = ExtResource("2_oy2vn") albedo_texture = ExtResource("2_oy2vn")

View File

@ -6,7 +6,7 @@
[ext_resource type="Texture2D" uid="uid://c0qid1gqplbly" path="res://assets/props/cupboard/cupboard_N.png" id="3_ssqwt"] [ext_resource type="Texture2D" uid="uid://c0qid1gqplbly" path="res://assets/props/cupboard/cupboard_N.png" id="3_ssqwt"]
[ext_resource type="Texture2D" uid="uid://cdmgbmje8ub3y" path="res://assets/props/cupboard/cupboard_R.png" id="4_q3cl1"] [ext_resource type="Texture2D" uid="uid://cdmgbmje8ub3y" path="res://assets/props/cupboard/cupboard_R.png" id="4_q3cl1"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="7_wyuua"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="7_wyuua"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="8_rgfsf"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="8_rgfsf"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_wyuua"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_wyuua"]
albedo_texture = ExtResource("1_00yk4") albedo_texture = ExtResource("1_00yk4")

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -2,7 +2,7 @@
[ext_resource type="Script" uid="uid://sksndhqyo2bn" path="res://src/props/physics/persistent_prop.gd" id="1_3jm8i"] [ext_resource type="Script" uid="uid://sksndhqyo2bn" path="res://src/props/physics/persistent_prop.gd" id="1_3jm8i"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="1_fu1y0"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="1_fu1y0"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="2_8v7ae"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="2_8v7ae"]
[ext_resource type="ArrayMesh" uid="uid://b3p2eh3b8jg4r" path="res://assets/props/med_cart/med_cart.obj" id="3_3jm8i"] [ext_resource type="ArrayMesh" uid="uid://b3p2eh3b8jg4r" path="res://assets/props/med_cart/med_cart.obj" id="3_3jm8i"]
[ext_resource type="Texture2D" uid="uid://biqh5uq67dl55" path="res://assets/props/med_cart/med_cart_C.png" id="4_r1b3g"] [ext_resource type="Texture2D" uid="uid://biqh5uq67dl55" path="res://assets/props/med_cart/med_cart_C.png" id="4_r1b3g"]
[ext_resource type="Texture2D" uid="uid://bds4qx6kqhplb" path="res://assets/props/med_cart/med_cart_M.png" id="5_u14ky"] [ext_resource type="Texture2D" uid="uid://bds4qx6kqhplb" path="res://assets/props/med_cart/med_cart_M.png" id="5_u14ky"]

View File

@ -6,7 +6,7 @@
[ext_resource type="Texture2D" uid="uid://v4j34fh4vm06" path="res://assets/props/med_cart/med_cart_N.png" id="4_yjujg"] [ext_resource type="Texture2D" uid="uid://v4j34fh4vm06" path="res://assets/props/med_cart/med_cart_N.png" id="4_yjujg"]
[ext_resource type="Texture2D" uid="uid://bcnsofhrfxyjk" path="res://assets/props/med_cart/med_cart_R.png" id="5_6xe2u"] [ext_resource type="Texture2D" uid="uid://bcnsofhrfxyjk" path="res://assets/props/med_cart/med_cart_R.png" id="5_6xe2u"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_cp525"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_cp525"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="7_n1l4q"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="7_n1l4q"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ygl0i"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ygl0i"]
transparency = 2 transparency = 2

View File

@ -6,7 +6,7 @@
[ext_resource type="Texture2D" uid="uid://uk3m431m6r0" path="res://assets/props/operating_table/operating_table_N.png" id="4_mevr1"] [ext_resource type="Texture2D" uid="uid://uk3m431m6r0" path="res://assets/props/operating_table/operating_table_N.png" id="4_mevr1"]
[ext_resource type="Texture2D" uid="uid://c4u3qvdtyoq4a" path="res://assets/props/operating_table/operating_table_R.png" id="5_lcrh2"] [ext_resource type="Texture2D" uid="uid://c4u3qvdtyoq4a" path="res://assets/props/operating_table/operating_table_R.png" id="5_lcrh2"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_mevr1"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_mevr1"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="7_lcrh2"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="7_lcrh2"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lhd0e"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_lhd0e"]
albedo_texture = ExtResource("2_73alj") albedo_texture = ExtResource("2_73alj")

View File

@ -6,7 +6,7 @@
[ext_resource type="Texture2D" uid="uid://buxuntbbfwvfg" path="res://assets/props/overhead_light/overhead_light_burnout_N.png" id="3_vg5ej"] [ext_resource type="Texture2D" uid="uid://buxuntbbfwvfg" path="res://assets/props/overhead_light/overhead_light_burnout_N.png" id="3_vg5ej"]
[ext_resource type="Texture2D" uid="uid://c40m0iq5tot1a" path="res://assets/props/overhead_light/overhead_light_burnout_R.png" id="4_0f8x7"] [ext_resource type="Texture2D" uid="uid://c40m0iq5tot1a" path="res://assets/props/overhead_light/overhead_light_burnout_R.png" id="4_0f8x7"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_1oo6x"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_1oo6x"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="6_8nypc"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="6_8nypc"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_niury"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_niury"]
albedo_texture = ExtResource("1_1oo6x") albedo_texture = ExtResource("1_1oo6x")

View File

@ -7,7 +7,7 @@
[ext_resource type="Texture2D" uid="uid://bh2jmk7jfjmyr" path="res://assets/props/overhead_light/overhead_light_M.png" id="3_ngq1d"] [ext_resource type="Texture2D" uid="uid://bh2jmk7jfjmyr" path="res://assets/props/overhead_light/overhead_light_M.png" id="3_ngq1d"]
[ext_resource type="Texture2D" uid="uid://no4s7dsg8tih" path="res://assets/props/overhead_light/overhead_light_N.png" id="4_3gl0p"] [ext_resource type="Texture2D" uid="uid://no4s7dsg8tih" path="res://assets/props/overhead_light/overhead_light_N.png" id="4_3gl0p"]
[ext_resource type="Texture2D" uid="uid://cr5e4hk33wmwf" path="res://assets/props/overhead_light/overhead_light_R.png" id="5_210ch"] [ext_resource type="Texture2D" uid="uid://cr5e4hk33wmwf" path="res://assets/props/overhead_light/overhead_light_R.png" id="5_210ch"]
[ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/grunk_overlays/bright_overlay.material" id="8_3gl0p"] [ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/gunk_overlay_bright.material" id="8_3gl0p"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="10_ljcul"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="10_ljcul"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ljcul"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ljcul"]

View File

@ -5,7 +5,7 @@
[ext_resource type="Texture2D" uid="uid://dgyk61lmv3q66" path="res://assets/props/railing/railing_M.png" id="3_vgbo1"] [ext_resource type="Texture2D" uid="uid://dgyk61lmv3q66" path="res://assets/props/railing/railing_M.png" id="3_vgbo1"]
[ext_resource type="Texture2D" uid="uid://cd142v5tbh10j" path="res://assets/props/railing/railing_N.png" id="4_d75t1"] [ext_resource type="Texture2D" uid="uid://cd142v5tbh10j" path="res://assets/props/railing/railing_N.png" id="4_d75t1"]
[ext_resource type="Texture2D" uid="uid://tpweuhaqj3uy" path="res://assets/props/railing/railing_R.png" id="5_557y4"] [ext_resource type="Texture2D" uid="uid://tpweuhaqj3uy" path="res://assets/props/railing/railing_R.png" id="5_557y4"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="7_vgbo1"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="7_vgbo1"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="8_d75t1"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="8_d75t1"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nyaqk"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_nyaqk"]

View File

@ -6,7 +6,7 @@
[ext_resource type="Texture2D" uid="uid://c0fmlt2f7h0l7" path="res://assets/props/sofa/sofa_N.png" id="5_p1o88"] [ext_resource type="Texture2D" uid="uid://c0fmlt2f7h0l7" path="res://assets/props/sofa/sofa_N.png" id="5_p1o88"]
[ext_resource type="Texture2D" uid="uid://bgedr6qe65yve" path="res://assets/props/sofa/sofa_R.png" id="6_xa6g3"] [ext_resource type="Texture2D" uid="uid://bgedr6qe65yve" path="res://assets/props/sofa/sofa_R.png" id="6_xa6g3"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="7_twcgi"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="7_twcgi"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="8_pr1sr"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="8_pr1sr"]
[ext_resource type="ArrayMesh" uid="uid://bc4otwcwsiu2m" path="res://assets/props/sofa/sofa_bottom_cushion.obj" id="9_p1o88"] [ext_resource type="ArrayMesh" uid="uid://bc4otwcwsiu2m" path="res://assets/props/sofa/sofa_bottom_cushion.obj" id="9_p1o88"]
[ext_resource type="Script" uid="uid://040xta01xqxd" path="res://src/props/physics/holdable.gd" id="10_xa6g3"] [ext_resource type="Script" uid="uid://040xta01xqxd" path="res://src/props/physics/holdable.gd" id="10_xa6g3"]
[ext_resource type="ArrayMesh" uid="uid://drr1wn0wmt5bi" path="res://assets/props/sofa/sofa_top_cushion.obj" id="11_yib26"] [ext_resource type="ArrayMesh" uid="uid://drr1wn0wmt5bi" path="res://assets/props/sofa/sofa_top_cushion.obj" id="11_yib26"]

View File

@ -6,7 +6,7 @@
[ext_resource type="Texture2D" uid="uid://c0fmlt2f7h0l7" path="res://assets/props/sofa/sofa_N.png" id="4_gvxvv"] [ext_resource type="Texture2D" uid="uid://c0fmlt2f7h0l7" path="res://assets/props/sofa/sofa_N.png" id="4_gvxvv"]
[ext_resource type="Texture2D" uid="uid://bgedr6qe65yve" path="res://assets/props/sofa/sofa_R.png" id="5_v4bqu"] [ext_resource type="Texture2D" uid="uid://bgedr6qe65yve" path="res://assets/props/sofa/sofa_R.png" id="5_v4bqu"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_oo3l6"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_oo3l6"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="7_84i3a"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="7_84i3a"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_dd1m6"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_dd1m6"]
albedo_texture = ExtResource("2_8uuk4") albedo_texture = ExtResource("2_8uuk4")

View File

@ -6,7 +6,7 @@
[ext_resource type="Texture2D" uid="uid://2eg8lmfp1r45" path="res://assets/props/tarp_crate/tarp_crate_N.png" id="3_vis60"] [ext_resource type="Texture2D" uid="uid://2eg8lmfp1r45" path="res://assets/props/tarp_crate/tarp_crate_N.png" id="3_vis60"]
[ext_resource type="Texture2D" uid="uid://i031i4c162sf" path="res://assets/props/tarp_crate/tarp_crate_R.png" id="4_p1cm3"] [ext_resource type="Texture2D" uid="uid://i031i4c162sf" path="res://assets/props/tarp_crate/tarp_crate_R.png" id="4_p1cm3"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_p1cm3"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_p1cm3"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="6_vis60"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="6_vis60"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_qbm60"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_qbm60"]
transparency = 2 transparency = 2

View File

@ -7,7 +7,7 @@
[ext_resource type="Texture2D" uid="uid://c1ksjm73dg0jy" path="res://assets/props/trash_can/trash_can_N.png" id="4_g1iq2"] [ext_resource type="Texture2D" uid="uid://c1ksjm73dg0jy" path="res://assets/props/trash_can/trash_can_N.png" id="4_g1iq2"]
[ext_resource type="Texture2D" uid="uid://b8wb1tr3lpdap" path="res://assets/props/trash_can/trash_can_R.png" id="5_gtvu8"] [ext_resource type="Texture2D" uid="uid://b8wb1tr3lpdap" path="res://assets/props/trash_can/trash_can_R.png" id="5_gtvu8"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_teaen"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_teaen"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="7_7amwm"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="7_7amwm"]
[ext_resource type="Script" uid="uid://040xta01xqxd" path="res://src/props/physics/holdable.gd" id="9_kxk5h"] [ext_resource type="Script" uid="uid://040xta01xqxd" path="res://src/props/physics/holdable.gd" id="9_kxk5h"]
[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_kxk5h"] [sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_kxk5h"]

View File

@ -6,7 +6,7 @@
[ext_resource type="Texture2D" uid="uid://c1ksjm73dg0jy" path="res://assets/props/trash_can/trash_can_N.png" id="4_o6pi7"] [ext_resource type="Texture2D" uid="uid://c1ksjm73dg0jy" path="res://assets/props/trash_can/trash_can_N.png" id="4_o6pi7"]
[ext_resource type="Texture2D" uid="uid://b8wb1tr3lpdap" path="res://assets/props/trash_can/trash_can_R.png" id="5_m8g0a"] [ext_resource type="Texture2D" uid="uid://b8wb1tr3lpdap" path="res://assets/props/trash_can/trash_can_R.png" id="5_m8g0a"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_dmpmb"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_dmpmb"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="7_c2e1y"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="7_c2e1y"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_7ctwk"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_7ctwk"]
albedo_texture = ExtResource("2_hbp6j") albedo_texture = ExtResource("2_hbp6j")

View File

@ -7,7 +7,7 @@
[ext_resource type="Texture2D" uid="uid://8v7jta2qdvut" path="res://assets/props/vending_machine/vending_machine_N.png" id="4_m0mqe"] [ext_resource type="Texture2D" uid="uid://8v7jta2qdvut" path="res://assets/props/vending_machine/vending_machine_N.png" id="4_m0mqe"]
[ext_resource type="Texture2D" uid="uid://gbvtbiurxrop" path="res://assets/props/vending_machine/vending_machine_R.png" id="5_pmvmu"] [ext_resource type="Texture2D" uid="uid://gbvtbiurxrop" path="res://assets/props/vending_machine/vending_machine_R.png" id="5_pmvmu"]
[ext_resource type="Script" uid="uid://jybe7wejrtuj" path="res://src/props/vending_machine/vending_machine.gd" id="6_5b31a"] [ext_resource type="Script" uid="uid://jybe7wejrtuj" path="res://src/props/vending_machine/vending_machine.gd" id="6_5b31a"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="8_b7lht"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="8_b7lht"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="10_8xld6"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="10_8xld6"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_v4lrk"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_v4lrk"]

View File

@ -6,7 +6,7 @@
[ext_resource type="Texture2D" uid="uid://bur4dtt4irwgd" path="res://assets/props/wall_switch/wall_switch_M.png" id="3_3fhmv"] [ext_resource type="Texture2D" uid="uid://bur4dtt4irwgd" path="res://assets/props/wall_switch/wall_switch_M.png" id="3_3fhmv"]
[ext_resource type="Texture2D" uid="uid://ddve6jcfcuthx" path="res://assets/props/wall_switch/wall_switch_N.png" id="4_pg3hp"] [ext_resource type="Texture2D" uid="uid://ddve6jcfcuthx" path="res://assets/props/wall_switch/wall_switch_N.png" id="4_pg3hp"]
[ext_resource type="Texture2D" uid="uid://rq5e0a3sco88" path="res://assets/props/wall_switch/wall_switch_R.png" id="5_555wb"] [ext_resource type="Texture2D" uid="uid://rq5e0a3sco88" path="res://assets/props/wall_switch/wall_switch_R.png" id="5_555wb"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="8_2qpft"] [ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="8_2qpft"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="9_eim2y"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="9_eim2y"]
[ext_resource type="Script" uid="uid://deg5xd87cy8rg" path="res://src/props/interactive.gd" id="10_qw6jt"] [ext_resource type="Script" uid="uid://deg5xd87cy8rg" path="res://src/props/interactive.gd" id="10_qw6jt"]
[ext_resource type="AudioStream" uid="uid://bgayfws34lg7q" path="res://assets/sfx/click_electronic_04.wav" id="11_7shuc"] [ext_resource type="AudioStream" uid="uid://bgayfws34lg7q" path="res://assets/sfx/click_electronic_04.wav" id="11_7shuc"]

View File

@ -6,7 +6,7 @@
[ext_resource type="Texture2D" uid="uid://bd7up85yqwurw" path="res://assets/props/wire_shelves/wire_shelves_N.png" id="4_hb7yx"] [ext_resource type="Texture2D" uid="uid://bd7up85yqwurw" path="res://assets/props/wire_shelves/wire_shelves_N.png" id="4_hb7yx"]
[ext_resource type="Texture2D" uid="uid://dqphwq5u125hf" path="res://assets/props/wire_shelves/wire_shelves_R.png" id="5_ap18a"] [ext_resource type="Texture2D" uid="uid://dqphwq5u125hf" path="res://assets/props/wire_shelves/wire_shelves_R.png" id="5_ap18a"]
[ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_pg3d3"] [ext_resource type="PackedScene" uid="uid://cdi5sl60mw1po" path="res://src/world/gunkable/gunkable.tscn" id="6_pg3d3"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="7_hb7yx"] [ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/gunk_overlay.material" id="7_hb7yx"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_t12qs"] [sub_resource type="StandardMaterial3D" id="StandardMaterial3D_t12qs"]
transparency = 2 transparency = 2

View File

@ -1,4 +1,3 @@
// -*- mode: glsl -*-
/* Gunk shader adapted to a canvas item */ /* Gunk shader adapted to a canvas item */
shader_type canvas_item; shader_type canvas_item;

View File

@ -1,4 +1,3 @@
// -*- mode: glsl -*-
// Common logic for gunk shaders // Common logic for gunk shaders
group_uniforms gunk_material; group_uniforms gunk_material;
@ -37,23 +36,6 @@ uniform sampler2D overlay_albedo: hint_default_transparent, filter_nearest;
uniform sampler2D overlay_emission: hint_default_transparent, filter_nearest; uniform sampler2D overlay_emission: hint_default_transparent, filter_nearest;
uniform float overlay_emission_scale = 1.0; uniform float overlay_emission_scale = 1.0;
#if defined(USE_MASK)
group_uniforms gunk_mask;
uniform float edge_bleed = 0.25;
uniform sampler2D gunk_mask;
#endif
float bump_sample(vec2 uv, vec3 uvt, float dx, float dy) {
vec2 offset = vec2(dx / pixellation, dy / pixellation);
float height = texture(gunk_noise, uvt + vec3(offset, 0.0)).r;
#if defined(USE_MASK)
float mask = texture(gunk_mask, uv + offset).r;
height *= smoothstep(1.0, 0.0, mask);
#endif
return height;
}
vec3 rim_glow( vec3 rim_glow(
vec3 normal, vec3 normal,
vec3 view, vec3 view,
@ -107,82 +89,3 @@ vec3 base_emission(vec2 uv, float value) {
float base_specular() { float base_specular() {
return 0.5 * inversesqrt(specular_contribution); return 0.5 * inversesqrt(specular_contribution);
} }
// Convolution methods
vec3 godot_convolution(vec2 uv, vec3 uvt) {
// from https://github.com/godotengine/godot/blob/master/core/io/image.cpp#L3758
float here = bump_sample(uv, uvt, 0.0, 0.0);
float to_right = bump_sample(uv, uvt, 1.0, 0.0);
float above = bump_sample(uv, uvt, 0.0, -1.0);
vec3 up = vec3(0.0, 1.0, (here - above) * bump_strength);
vec3 across = vec3(1.0, 0.0, (to_right - here) * bump_strength);
return normalize(cross(across, up));
}
vec3 minimal_convolution(vec2 uv, vec3 uvt) {
float h_center = bump_sample(uv, uvt, 0.0, 0.0);
float h_right = bump_sample(uv, uvt, 1.0, 0.0);
float h_down = bump_sample(uv, uvt, 0.0, 1.0);
float dX = (h_center - h_right);
float dY = (h_center - h_down);
float dZ = 1.0 / bump_strength;
return normalize(vec3(dX, dY, dZ));
}
vec3 cross_convolution(vec2 uv, vec3 uvt) {
float h_right = bump_sample(uv, uvt, 1.0, 0.0);
float h_down = bump_sample(uv, uvt, 0.0, 1.0);
float h_left = bump_sample(uv, uvt, -1.0, 0.0);
float h_up = bump_sample(uv, uvt, 0.0, -1.0);
float dX = (h_left - h_right);
float dY = (h_right - h_down);
float dZ = 1.0 / bump_strength * 2.0;
return normalize(vec3(dX, dY, dZ));
}
vec3 sobel_convolution(vec2 uv, vec3 uvt) {
float tl = bump_sample(uv, uvt, -1.0, -1.0);
float l = bump_sample(uv, uvt, -1.0, 0.0);
float bl = bump_sample(uv, uvt, -1.0, 1.0);
float t = bump_sample(uv, uvt, 0.0, -1.0);
float b = bump_sample(uv, uvt, 0.0, 1.0);
float tr = bump_sample(uv, uvt, 1.0, -1.0);
float r = bump_sample(uv, uvt, 1.0, 0.0);
float br = bump_sample(uv, uvt, 1.0, 1.0);
float dX = (tr + 2.0 * r + br) - (tl + 2.0 * l + bl);
float dY = (bl + 2.0 * b + br) - (tl + 2.0 * t + tr);
float dZ = 1.0 / bump_strength * 8.0;
return normalize(vec3(dX, dY, dZ));
}
vec3 scharr_convolution(vec2 uv, vec3 uvt) {
float tl = bump_sample(uv, uvt, -1.0, -1.0);
float l = bump_sample(uv, uvt, -1.0, 0.0);
float bl = bump_sample(uv, uvt, -1.0, 1.0);
float t = bump_sample(uv, uvt, 0.0, -1.0);
float b = bump_sample(uv, uvt, 0.0, 1.0);
float tr = bump_sample(uv, uvt, 1.0, -1.0);
float r = bump_sample(uv, uvt, 1.0, 0.0);
float br = bump_sample(uv, uvt, 1.0, 1.0);
float dX = 3.0*tl + 10.0*l + 3.0*bl - 3.0*tr - 10.0*r - 3.0*br;
float dY = 3.0*tl + 10.0*t + 3.0*tr - 3.0*bl - 10.0*b - 3.0*br;
float dZ = 1.0 / bump_strength * 12.0;
return normalize(vec3(dX, dY, dZ));
}
vec3 sobel_5x5_convolution(vec2 uv, vec3 uvt) {
// Expensive!!
// TODO this can be decomposed into a few small matrix ops
float s[25];
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
s[i*5 + j] = bump_sample(uv, uvt, float(i - 2), float(j - 2));
}
}
float dX = 4.0 * (s[3] + s[23] - s[1] - s[21]) + 5.0 * (s[4] + s[24] - s[0] - s[20]) + 8.0 * (s[9] + s[19] - s[5] - s[15]) + 10.0 * (s[8] + s[14] + s[18] - s[6] - s[10] - s[16]) + 20.0 * (s[13] - s[11]);
float dY = 4.0 * (s[19] + s[15] - s[9] - s[5]) + 5.0 * (s[24] + s[20] - s[4] - s[0]) + 8.0 * (s[23] + s[21] - s[3] - s[1]) + 10.0 * (s[18] + s[22] + s[16] - s[8] - s[2] - s[6]) + 20.0 * (s[17] - s[7]);
float dZ = 1.0 / bump_strength * 240.0;
return normalize(vec3(dX, dY, dZ));
}

View File

@ -1,16 +1,31 @@
// -*- mode: glsl -*-
shader_type spatial; shader_type spatial;
render_mode depth_prepass_alpha, unshaded; render_mode depth_prepass_alpha, unshaded;
#define USE_MASK
#include "common.gdshaderinc" #include "common.gdshaderinc"
group_uniforms gunk_mask;
uniform float edge_bleed = 0.25;
uniform sampler2D gunk_mask;
float bump_sample(vec2 uv, vec3 uvt, float dx, float dy) {
vec2 offset = vec2(dx / pixellation, dy / pixellation);
float height = texture(gunk_noise, uvt + vec3(offset, 0.0)).r;
float mask = texture(gunk_mask, uv + offset / uv_scale).r;
return height * smoothstep(1.0, 0.0, mask);
}
void fragment() { void fragment() {
vec3 uvt = scale_uvt(UV, TIME); vec3 uvt = scale_uvt(UV, TIME);
float value = sample_noise(uvt); float value = sample_noise(uvt);
vec3 nmap = sobel_convolution(UV, uvt); // Build normal map from bump map
ALBEDO = nmap / 2.0 + 0.5; float h_center = bump_sample(UV, uvt, 0.0, 0.0);
float h_right = bump_sample(UV, uvt, 1.0, 0.0);
float h_down = bump_sample(UV, uvt, 0.0, 1.0);
float dx = (h_center - h_right) * bump_strength;
float dy = (h_center - h_down) * bump_strength;
vec3 normal_diff_map = normalize(vec3(dx, dy, 1.0));
ALBEDO = normal_diff_map / 2.0 + 0.5;
} }

View File

@ -1,4 +1,3 @@
// -*- mode: glsl -*-
shader_type spatial; shader_type spatial;
render_mode depth_prepass_alpha; render_mode depth_prepass_alpha;
@ -24,6 +23,11 @@ void vertex() {
VERTEX *= 1.0 + jitter; VERTEX *= 1.0 + jitter;
} }
float bump_sample(vec3 uvt, float dx, float dy) {
vec2 offset = vec2(dx / pixellation, dy / pixellation);
return texture(gunk_noise, uvt + vec3(offset, 0.0)).r;
}
void fragment() { void fragment() {
vec3 uvt = scale_uvt(UV, TIME); vec3 uvt = scale_uvt(UV, TIME);
float value = sample_noise(uvt); float value = sample_noise(uvt);
@ -32,11 +36,17 @@ void fragment() {
EMISSION = base_emission(UV, value); EMISSION = base_emission(UV, value);
SPECULAR = base_specular(); SPECULAR = base_specular();
vec3 nmap = sobel_convolution(UV, uvt); // Build normal map from bump map
NORMAL_MAP = nmap / 2.0 + 0.5; float h_center = bump_sample(uvt, 0.0, 0.0);
float h_right = bump_sample(uvt, 1.0, 0.0);
float h_down = bump_sample(uvt, 0.0, 1.0);
float dx = (h_center - h_right) * bump_strength;
float dy = (h_center - h_down) * bump_strength;
vec3 normal_diff_map = normalize(vec3(dx, dy, 1.0));
NORMAL_MAP = normal_diff_map / 2.0 + 0.5;
// add fresnel // add fresnel
vec3 world_normal = mat3(TANGENT, BINORMAL, NORMAL) * nmap; vec3 world_normal = mat3(TANGENT, BINORMAL, NORMAL) * normal_diff_map;
EMISSION += rim_glow( EMISSION += rim_glow(
world_normal, world_normal,
VIEW, VIEW,

View File

@ -1,10 +1,20 @@
// -*- mode: glsl -*-
shader_type spatial; shader_type spatial;
render_mode depth_prepass_alpha; render_mode depth_prepass_alpha;
#define USE_MASK
#include "common.gdshaderinc" #include "common.gdshaderinc"
group_uniforms gunk_mask;
uniform float edge_bleed = 0.25;
uniform sampler2D gunk_mask;
float bump_sample(vec2 uv, vec3 uvt, float dx, float dy) {
vec2 offset = vec2(dx / pixellation, dy / pixellation);
float height = texture(gunk_noise, uvt + vec3(offset, 0.0)).r;
float mask = texture(gunk_mask, uv + offset / uv_scale).r;
return height * smoothstep(1.0, 0.0, mask);
}
void fragment() { void fragment() {
vec3 uvt = scale_uvt(UV, TIME); vec3 uvt = scale_uvt(UV, TIME);
float value = sample_noise(uvt); float value = sample_noise(uvt);
@ -13,16 +23,17 @@ void fragment() {
EMISSION = base_emission(UV, value); EMISSION = base_emission(UV, value);
SPECULAR = base_specular(); SPECULAR = base_specular();
// vec3 nmap = minimal_convolution(UV, uvt); // Build normal map from bump map
// vec3 nmap = cross_convolution(UV, uvt); float h_center = bump_sample(UV, uvt, 0.0, 0.0);
vec3 nmap = sobel_convolution(UV, uvt); float h_right = bump_sample(UV, uvt, 1.0, 0.0);
// vec3 nmap = sobel_5x5_convolution(UV, uvt); float h_down = bump_sample(UV, uvt, 0.0, 1.0);
// vec3 nmap = scharr_convolution(UV, uvt); float dx = (h_center - h_right) * bump_strength;
// vec3 nmap = godot_convolution(UV, uvt); float dy = (h_center - h_down) * bump_strength;
NORMAL_MAP = nmap / 2.0 + 0.5; vec3 normal_diff_map = normalize(vec3(dx, dy, 1.0));
NORMAL_MAP = normal_diff_map / 2.0 + 0.5;
// add fresnel // add fresnel
vec3 world_normal = mat3(TANGENT, BINORMAL, NORMAL) * nmap; vec3 world_normal = mat3(TANGENT, BINORMAL, NORMAL) * normal_diff_map;
EMISSION += rim_glow( EMISSION += rim_glow(
world_normal, world_normal,
VIEW, VIEW,

View File

@ -1,21 +0,0 @@
@tool
class_name AwaitSignal extends ActionLeaf
## Return `RUNNING` while waiting for an externally-provided signal.
var _blocks: Dictionary[Signal, bool] = {}
func tick(_actor: Node, _blackboard: Blackboard) -> int:
if _blocks:
return RUNNING
return SUCCESS
## Start awaiting the given signal
func await_signal(sig: Signal) -> void:
_blocks[sig] = true
sig.connect(_unblock.bind(sig))
func _unblock(sig: Signal) -> void:
_blocks.erase(sig)

View File

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

View File

@ -1,15 +0,0 @@
@tool
class_name BlackboardIncrementAction extends ActionLeaf
## Increment the given key if it exists and is numeric
## Blackboard key to increment
@export var blackboard_key: String
## Amount to increment the given key by
@export var delta: float
func tick(_actor: Node, blackboard: Blackboard) -> int:
var value: float = blackboard.get_value(blackboard_key, 0.0)
blackboard.set_value(blackboard_key, value + delta)
return SUCCESS

View File

@ -1,17 +0,0 @@
@tool
class_name IncrementBeastAnger extends ActionLeaf
## Add the given amount to the beast's anger level (obeying limits)
## Settings key to read delta from. The value below will be overridden if this is defined.
@export var settings_key: String
## Amount to add (or remove) to the current anger level
@export var delta: float
func tick(_actor: Node, blackboard: Blackboard) -> int:
var value: float = blackboard.get_value(GrunkBeast.ANGER_KEY, 0.0)
var d: float = ProjectSettings.get_setting(settings_key, delta)
blackboard.set_value(
GrunkBeast.ANGER_KEY, clampf(value + d, GrunkBeast.anger_min, GrunkBeast.anger_max)
)
return SUCCESS

View File

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

View File

@ -1,7 +0,0 @@
class_name PrintDebugAction extends ActionLeaf
## Print this node's name every tick.
func tick(_actor: Node, _blackboard: Blackboard) -> int:
print_debug("In ", name, ".tick()")
return SUCCESS

View File

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

View File

@ -1,12 +0,0 @@
@tool
class_name SetPlayerNavTarget extends ActionLeaf
## Set the current nav target to the player's current position.
@onready var nav_agent: NavigationAgent3D = %NavAgent
func tick(_actor: Node, _blackboard: Blackboard) -> int:
if Player.instance:
nav_agent.target_position = Player.instance.global_position
return SUCCESS
return FAILURE

View File

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

View File

@ -1,13 +0,0 @@
@tool
class_name SetPlayerTarget extends ActionLeaf
## Set the player as a pursuit target.
## Blackboard key to set.
@export var blackboard_key := "pursuit_target"
func tick(_actor: Node, blackboard: Blackboard) -> int:
if is_instance_valid(Player.instance):
blackboard.set_value(blackboard_key, Player.instance)
return SUCCESS
return FAILURE

View File

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

View File

@ -1,21 +0,0 @@
@tool
class_name SetTargetPositionFromArea extends ActionLeaf
## Store the global position of the first node in the given area on the blackboard.
##
## Returns FAILURE if there is no such node overlapping the given area.
## NOTE: You probably should only use this with areas masked to only have one possible body.
## Key to store the target under.
@export var blackboard_key := "target"
## Area to get target from.
@export var area: Area3D
func tick(_actor: Node, blackboard: Blackboard) -> int:
var bodies := area.get_overlapping_bodies()
if not bodies or bodies[0] is not Node3D:
return FAILURE
blackboard.set_value(blackboard_key, (bodies[0] as Node3D).global_position)
return SUCCESS

View File

@ -1,15 +0,0 @@
@tool
class_name CompareSetting extends ConditionLeaf
## Is the value on the blackboard at least the threshold set in the project settings?
## Blackboard key to compare
@export var blackboard_key: String
## Project settings key to compare
@export var settings_key: String
func tick(_actor: Node, blackboard: Blackboard) -> int:
var blackboard_value: float = blackboard.get_value(blackboard_key)
var settings_value: float = ProjectSettings.get_setting(settings_key)
return SUCCESS if blackboard_value >= settings_value else FAILURE

View File

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

View File

@ -1,32 +0,0 @@
@tool
class_name HasLineOfSight extends ConditionLeaf
## Does the actor have an unobstructed line-of-sight to the given target?
## Blackboard key of the target Node3D to check.
@export var blackboard_key := "target"
## Physics layers to check for occlusion.
@export_flags_3d_physics var collision_mask := 1
## CollisionObject3Ds to exclude from collision checking
@export var exclusions: Array[CollisionObject3D]
## Node3D to use as the origin for line-of-sight checks
@export var sight_origin: Node3D
func _excluded_rids() -> Array[RID]:
var arr: Array[RID] = []
arr.assign(exclusions.map(func(o: CollisionObject3D) -> RID: return o.get_rid()))
return arr
func tick(_actor: Node, blackboard: Blackboard) -> int:
var target: Node3D = blackboard.get_value(blackboard_key)
var collisions := sight_origin.get_world_3d().direct_space_state.intersect_ray(
PhysicsRayQueryParameters3D.create(
sight_origin.global_position, target.global_position, collision_mask, _excluded_rids()
)
)
return FAILURE if collisions else SUCCESS

View File

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

View File

@ -1,17 +0,0 @@
@tool
class_name PointInRange extends ConditionLeaf
## Is the given point within a set range?
## Blackboard key of the point to check.
@export var blackboard_key := "target"
## Maximum allowed range from this actor to the target.
@export var max_range: float
func tick(actor: Node, blackboard: Blackboard) -> int:
var actor_3d: Node3D = actor
if not blackboard.has_value(blackboard_key):
return FAILURE
var target: Vector3 = blackboard.get_value(blackboard_key)
return SUCCESS if target.distance_to(actor_3d.global_position) <= max_range else FAILURE

View File

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

View File

@ -1,9 +0,0 @@
@tool
class_name TargetReachable extends ConditionLeaf
## Is there a valid path to the current nav agent target?
@onready var nav_agent: NavigationAgent3D = %NavAgent
func tick(_actor: Node, _blackboard: Blackboard) -> int:
return SUCCESS if nav_agent.is_target_reachable() else FAILURE

View File

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

View File

@ -1,49 +0,0 @@
@tool
class_name RandomChance extends Decorator
## Decorator which has a random chance to execute its child.
##
## If the previous return value of the child was not `RUNNING`, this decorator will make a random
## check with the given probability.
## If the check succeeds, or if the previous return value of the child was `RUNNING,
## this node will execute the child and return the child's return value.
## If the check fails, this node will return `FAILURE`.
## The probability this node will execute its child.
@export_range(0.0, 1.0) var probability: float = 0.5
var _last_response := FAILURE
func tick(actor: Node, blackboard: Blackboard) -> int:
var c: BeehaveNode = get_child(0)
var response: int
if c != running_child:
c.before_run(actor, blackboard)
if _last_response != RUNNING and randf() > probability:
response = FAILURE
if can_send_message(blackboard):
BeehaveDebuggerMessages.process_tick(
self.get_instance_id(), response, blackboard.get_debug_data()
)
else:
response = c._safe_tick(actor, blackboard)
if can_send_message(blackboard):
BeehaveDebuggerMessages.process_tick(
c.get_instance_id(), response, blackboard.get_debug_data()
)
if c is ConditionLeaf:
blackboard.set_value("last_condition", c, str(actor.get_instance_id()))
blackboard.set_value("last_condition_status", response, str(actor.get_instance_id()))
if response == RUNNING and c is ActionLeaf:
running_child = c
blackboard.set_value("running_action", c, str(actor.get_instance_id()))
@warning_ignore("int_as_enum_without_cast")
_last_response = response
return response

View File

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

View File

@ -2,21 +2,13 @@ class_name GrunkBeast extends CharacterBody3D
## Grunk beast controller ## Grunk beast controller
#region Constants #region Constants
const ANGER_KEY := "anger_level" const STALKING_SOUND_LIMIT := 25.0
const POI_KEY := "point_of_interest"
#endregion #endregion
#region Exported Properties #region Exported Properties
@export var play_spawn_animation := true @export var play_spawn_animation := true
@export var speed_curve: Curve @export var base_speed := 80.0
@export var anger_level: float: @export var pursuit_speed := 360.0
set = _set_anger_level,
get = _get_anger_level
@export var point_of_interest: Vector3:
set = _set_poi,
get = _get_poi
#@export var base_speed := 80.0
#@export var pursuit_speed := 360.0
@export var debug_destroy: bool: @export var debug_destroy: bool:
set(value): set(value):
@ -37,81 +29,35 @@ var traversing_link := false
@onready var nav_agent: NavigationAgent3D = %NavAgent @onready var nav_agent: NavigationAgent3D = %NavAgent
@onready var nav_probe: NavigationAgent3D = %NavProbe @onready var nav_probe: NavigationAgent3D = %NavProbe
@onready var stalking_timer: Timer = %StalkingTimer
@onready var sound_detection_cooldown: Timer = %SoundDetectionCooldown
@onready var blackboard: Blackboard = %Blackboard @onready var blackboard: Blackboard = %Blackboard
@onready var behavior: BeehaveTree = %GrunkBeastBehavior @onready var behavior: BeehaveTree = %GrunkBeastBehavior
@onready var root_block: AwaitSignal = %RootBlock
@onready var debug_canvas_layer: CanvasLayer = %DebugCanvasLayer
@onready var beast_behavior_label: Label = %BeastBehaviorLabel
@onready var beast_anger_meter: ProgressBar = %BeastAngerMeter
#endregion
#region Static Variables
static var anger_min: float = ProjectSettings.get_setting("game/gameplay/beast/anger_min")
static var anger_max: float = ProjectSettings.get_setting("game/gameplay/beast/anger_max")
static var anger_decay_rate: float = ProjectSettings.get_setting(
"game/gameplay/beast/anger_decay_rate"
)
static var anger_noise: float = ProjectSettings.get_setting("game/gameplay/beast/anger_noise")
static var anger_noise_near: float = ProjectSettings.get_setting(
"game/gameplay/beast/anger_noise_near"
)
static var anger_alarm: float = ProjectSettings.get_setting("game/gameplay/beast/anger_alarm")
static var anger_alarm_extra: float = ProjectSettings.get_setting(
"game/gameplay/beast/anger_alarm_extra"
)
static var anger_touch: float = ProjectSettings.get_setting("game/gameplay/beast/anger_touch")
static var anger_attack: float = ProjectSettings.get_setting("game/gameplay/beast/anger_attack")
static var anger_sticker: float = ProjectSettings.get_setting("game/gameplay/beast/anger_sticker")
static var provocation_range: float = ProjectSettings.get_setting(
"game/gameplay/beast/provocation_range"
)
static var anger_extra_alert_level: float = ProjectSettings.get_setting(
"game/gameplay/beast/anger_extra_alert_level"
)
#endregion
#region Member Access
func _get_anger_level() -> float:
return blackboard.get_value(ANGER_KEY, 0.0)
func _set_anger_level(value: float) -> void:
blackboard.set_value(ANGER_KEY, clampf(value, GrunkBeast.anger_min, GrunkBeast.anger_max))
func _get_poi() -> Vector3:
return blackboard.get_value(POI_KEY, Vector3.ZERO)
func _set_poi(value: Vector3) -> void:
blackboard.set_value(POI_KEY, value)
#endregion #endregion
#region Character Controller #region Character Controller
func _ready() -> void: func _ready() -> void:
if World.instance and World.instance.manager:
World.instance.manager.alarm_triggered.connect(_on_alarm_triggered)
if play_spawn_animation: if play_spawn_animation:
start_spawn() model.play_spawn_animation()
behavior.disable()
model.spawn_animation_finished.connect(behavior.enable)
func start_spawn() -> void: func is_pursuing() -> bool:
model.play_spawn_animation() return blackboard.has_value("pursuit_target")
root_block.await_signal(model.spawn_animation_finished)
# Set point of interest to spawn point
point_of_interest = global_position func is_stalking() -> bool:
return false # TODO
func get_speed() -> float: func get_speed() -> float:
return speed_curve.sample(anger_level) if is_pursuing():
return pursuit_speed
return base_speed
func path_shorter_than(target: Vector3, limit: float) -> bool: func path_shorter_than(target: Vector3, limit: float) -> bool:
@ -143,19 +89,25 @@ func path_shorter_than(target: Vector3, limit: float) -> bool:
return true return true
func _physics_process(_delta: float) -> void: ## Clear this beast's pursuit and stalking targets
func clear_aggro() -> void:
blackboard.erase_value("pursuit_target")
blackboard.erase_value("stalking_target")
func _physics_process(delta: float) -> void:
var motion := Vector3.ZERO var motion := Vector3.ZERO
if pathfinding and not nav_agent.is_navigation_finished(): if pathfinding and not nav_agent.is_navigation_finished():
var path_pos := nav_agent.get_next_path_position() var path_pos := nav_agent.get_next_path_position()
var relative_pos := path_pos - global_position var relative_pos := path_pos - global_position
motion = relative_pos.normalized() * get_speed() motion = relative_pos.normalized() * get_speed() * delta
velocity.x = motion.x velocity.x = motion.x
velocity.z = motion.z velocity.z = motion.z
if not is_on_floor(): if not is_on_floor():
velocity += gravity velocity += gravity * delta
if motion: if motion:
model.set_target_rotation(atan2(motion.x, motion.z)) model.set_target_rotation(atan2(motion.x, motion.z))
@ -163,20 +115,12 @@ func _physics_process(_delta: float) -> void:
model.set_move_speed(velocity.length()) model.set_move_speed(velocity.length())
move_and_slide() move_and_slide()
# Update debug info
if debug_canvas_layer.visible:
beast_behavior_label.text = str(behavior.get_running_action())
beast_anger_meter.value = anger_level
func on_sound_detected(source: Vector3) -> void: func on_sound_detected(source: Vector3) -> void:
point_of_interest = source # Check that the source isn't too far away, e.g. a sound from another room
if sound_detection_cooldown.is_stopped(): if behavior.enabled and path_shorter_than(source, STALKING_SOUND_LIMIT):
anger_level += GrunkBeast.anger_noise blackboard.set_value("stalking_target", source)
if source.distance_to(self.global_position) <= GrunkBeast.provocation_range: stalking_timer.start()
anger_level += GrunkBeast.anger_noise_near
sound_detection_cooldown.start()
# TODO animation?
#endregion #endregion
@ -188,21 +132,3 @@ func _on_link_reached(_details: Dictionary) -> void:
func _on_waypoint_reached(_details: Dictionary) -> void: func _on_waypoint_reached(_details: Dictionary) -> void:
traversing_link = false traversing_link = false
func _anger_decay() -> void:
anger_level -= GrunkBeast.anger_decay_rate
func _on_alarm_triggered(source: GunkAlarm) -> void:
point_of_interest = source.global_position
anger_level += GrunkBeast.anger_alarm
if World.instance.manager.alert_level >= GrunkBeast.anger_extra_alert_level:
anger_level += GrunkBeast.anger_alarm_extra
func _on_touch(body: Node3D) -> void:
var player: Player = body as Player
if not player:
return
anger_level += GrunkBeast.anger_touch

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=40 format=3 uid="uid://ehf5sg3ahvbf"] [gd_scene load_steps=35 format=3 uid="uid://ehf5sg3ahvbf"]
[ext_resource type="PackedScene" uid="uid://brrd33217oplv" path="res://src/world/grunk_beast/shambler/shambler.tscn" id="2_csisu"] [ext_resource type="PackedScene" uid="uid://brrd33217oplv" path="res://src/world/grunk_beast/shambler/shambler.tscn" id="2_csisu"]
[ext_resource type="Script" uid="uid://bukihqt1lybnx" path="res://src/util/frame_skipper.gd" id="2_lak6w"] [ext_resource type="Script" uid="uid://bukihqt1lybnx" path="res://src/util/frame_skipper.gd" id="2_lak6w"]
@ -14,31 +14,20 @@
[ext_resource type="Script" uid="uid://2qri6rrfv8ui" path="res://addons/beehave/nodes/decorators/cooldown.gd" id="10_ntlom"] [ext_resource type="Script" uid="uid://2qri6rrfv8ui" path="res://addons/beehave/nodes/decorators/cooldown.gd" id="10_ntlom"]
[ext_resource type="Script" uid="uid://beyk2xtbjrsg4" path="res://src/world/grunk_beast/behaviors/decorators/random_delay.gd" id="11_mbqcc"] [ext_resource type="Script" uid="uid://beyk2xtbjrsg4" path="res://src/world/grunk_beast/behaviors/decorators/random_delay.gd" id="11_mbqcc"]
[ext_resource type="Script" uid="uid://b0xue7ao0gjqo" path="res://src/world/grunk_beast/behaviors/actions/grab_target.gd" id="11_nq7ke"] [ext_resource type="Script" uid="uid://b0xue7ao0gjqo" path="res://src/world/grunk_beast/behaviors/actions/grab_target.gd" id="11_nq7ke"]
[ext_resource type="Script" uid="uid://du7uk56300y28" path="res://src/world/grunk_beast/behaviors/conditions/compare_setting.gd" id="12_a1qno"] [ext_resource type="Script" uid="uid://8hn4kne15ac5" path="res://addons/beehave/nodes/composites/selector.gd" id="12_dkcdj"]
[ext_resource type="Script" uid="uid://cg55nu4y0a5ud" path="res://src/world/grunk_beast/behaviors/actions/pick_random_from_group.gd" id="12_ml8dd"] [ext_resource type="Script" uid="uid://cg55nu4y0a5ud" path="res://src/world/grunk_beast/behaviors/actions/pick_random_from_group.gd" id="12_ml8dd"]
[ext_resource type="Script" uid="uid://dcojdhvj8qcw0" path="res://addons/beehave/nodes/composites/sequence_reactive.gd" id="12_xde72"] [ext_resource type="Script" uid="uid://dcojdhvj8qcw0" path="res://addons/beehave/nodes/composites/sequence_reactive.gd" id="12_xde72"]
[ext_resource type="Script" uid="uid://b34l3v4sr8rmq" path="res://src/world/grunk_beast/behaviors/actions/set_target_from_area.gd" id="13_x8l6r"] [ext_resource type="Script" uid="uid://b34l3v4sr8rmq" path="res://src/world/grunk_beast/behaviors/actions/set_target_from_area.gd" id="13_x8l6r"]
[ext_resource type="Script" uid="uid://om57w2acvgb7" path="res://src/world/grunk_beast/behaviors/actions/travel_to_destination.gd" id="14_4y64f"] [ext_resource type="Script" uid="uid://om57w2acvgb7" path="res://src/world/grunk_beast/behaviors/actions/travel_to_destination.gd" id="14_4y64f"]
[ext_resource type="Script" uid="uid://rdfsxwehjjrd" path="res://src/world/grunk_beast/behaviors/actions/set_player_target.gd" id="15_1cnlk"] [ext_resource type="Script" uid="uid://c5cikaa68tsto" path="res://src/world/grunk_beast/behaviors/actions/set_player_priority_target.gd" id="14_csisu"]
[ext_resource type="Script" uid="uid://bkdwuqv4tudka" path="res://src/world/grunk_beast/behaviors/actions/pursue_target.gd" id="14_x8l6r"]
[ext_resource type="Script" uid="uid://demv7xh27ouvr" path="res://src/world/grunk_beast/behaviors/actions/blackboard_erase_safe.gd" id="15_4b27i"]
[ext_resource type="Script" uid="uid://dwfdg523bk776" path="res://addons/beehave/nodes/decorators/failer.gd" id="15_oons1"] [ext_resource type="Script" uid="uid://dwfdg523bk776" path="res://addons/beehave/nodes/decorators/failer.gd" id="15_oons1"]
[ext_resource type="Script" uid="uid://yw2u7rlr0whk" path="res://src/world/grunk_beast/behaviors/actions/update_stalking_target.gd" id="16_lak6w"]
[ext_resource type="Script" uid="uid://h0cp58nswpml" path="res://src/world/grunk_beast/behaviors/conditions/timer_running.gd" id="16_oons1"]
[ext_resource type="Script" uid="uid://ubcelage67hs" path="res://src/world/grunk_beast/behaviors/actions/get_random_target.gd" id="24_asd50"] [ext_resource type="Script" uid="uid://ubcelage67hs" path="res://src/world/grunk_beast/behaviors/actions/get_random_target.gd" id="24_asd50"]
[ext_resource type="Script" uid="uid://dvnmhlldp23hg" path="res://addons/beehave/nodes/composites/selector_random.gd" id="24_xs4mp"]
[ext_resource type="Script" uid="uid://bksvlal4gjhfr" path="res://src/world/grunk_beast/behaviors/actions/sniff.gd" id="26_lak6w"] [ext_resource type="Script" uid="uid://bksvlal4gjhfr" path="res://src/world/grunk_beast/behaviors/actions/sniff.gd" id="26_lak6w"]
[ext_resource type="Script" uid="uid://crkjak4kyv56m" path="res://addons/beehave/nodes/decorators/inverter.gd" id="28_csisu"]
[ext_resource type="Script" uid="uid://bjgvke8pjbdiq" path="res://src/world/grunk_beast/behaviors/actions/await_signal.gd" id="29_sm756"]
[ext_resource type="Script" uid="uid://ccifed50rmjm2" path="res://src/world/grunk_beast/behaviors/actions/increment_beast_anger.gd" id="31_6qixb"]
[ext_resource type="Script" uid="uid://rpsd3i11lnur" path="res://src/world/grunk_beast/behaviors/conditions/target_reachable.gd" id="32_6qixb"]
[ext_resource type="Script" uid="uid://dlbmi25edn8b7" path="res://src/world/grunk_beast/behaviors/conditions/has_line_of_sight.gd" id="32_urnsk"]
[ext_resource type="Script" uid="uid://o625e667ig2e" path="res://src/world/grunk_beast/behaviors/conditions/point_in_range.gd" id="34_vbkm0"]
[ext_resource type="Script" uid="uid://dsf3a8vlolhx8" path="res://addons/beehave/nodes/decorators/succeeder.gd" id="35_4alar"]
[ext_resource type="Script" uid="uid://c7n3lak5yhrpv" path="res://src/world/grunk_beast/behaviors/decorators/random_chance.gd" id="36_uy7at"]
[sub_resource type="Curve" id="Curve_sm756"]
_limits = [0.0, 10.0, 0.0, 150.0]
_data = [Vector2(0, 1.2), 0.0, 0.0, 0, 0, Vector2(30, 3), 0.0, 0.0, 0, 0, Vector2(80, 5), 0.00861322, 0.00861322, 0, 0, Vector2(120, 6), 0.0473384, 0.0473384, 0, 0, Vector2(150, 10), 0.0, 0.0, 0, 0]
point_count = 5
[sub_resource type="SphereShape3D" id="SphereShape3D_1cnlk"]
radius = 2.0
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_faau1"] [sub_resource type="CapsuleShape3D" id="CapsuleShape3D_faau1"]
radius = 0.4 radius = 0.4
@ -49,21 +38,20 @@ radius = 16.0
[sub_resource type="SphereShape3D" id="SphereShape3D_3gbao"] [sub_resource type="SphereShape3D" id="SphereShape3D_3gbao"]
radius = 1.4 radius = 1.4
[sub_resource type="SphereShape3D" id="SphereShape3D_6qixb"]
radius = 6.0
[sub_resource type="SphereShape3D" id="SphereShape3D_d4ex2"] [sub_resource type="SphereShape3D" id="SphereShape3D_d4ex2"]
radius = 6.2 radius = 20.0
[sub_resource type="SphereShape3D" id="SphereShape3D_oons1"]
radius = 4.0
[sub_resource type="SphereShape3D" id="SphereShape3D_lak6w"] [sub_resource type="SphereShape3D" id="SphereShape3D_lak6w"]
radius = 12.0 radius = 10.0
[node name="GrunkBeast" type="CharacterBody3D" groups=["GrunkBeast"]] [node name="GrunkBeast" type="CharacterBody3D" groups=["GrunkBeast"]]
collision_layer = 36 collision_layer = 36
wall_min_slide_angle = 0.174533 wall_min_slide_angle = 0.174533
floor_max_angle = 1.0472 floor_max_angle = 1.0472
script = ExtResource("2_qqnhb") script = ExtResource("2_qqnhb")
speed_curve = SubResource("Curve_sm756")
[node name="FrameSkipper" type="Node3D" parent="."] [node name="FrameSkipper" type="Node3D" parent="."]
script = ExtResource("2_lak6w") script = ExtResource("2_lak6w")
@ -72,22 +60,12 @@ frame_skip = 2
[node name="Shambler" parent="FrameSkipper" instance=ExtResource("2_csisu")] [node name="Shambler" parent="FrameSkipper" instance=ExtResource("2_csisu")]
unique_name_in_owner = true unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
visible = false
time_scale_factor = 2.0 time_scale_factor = 2.0
[node name="TouchingRange" type="Area3D" parent="FrameSkipper/Shambler"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, -0.9)
collision_layer = 0
collision_mask = 8
[node name="CollisionShape3D" type="CollisionShape3D" parent="FrameSkipper/Shambler/TouchingRange"]
shape = SubResource("SphereShape3D_1cnlk")
[node name="CollisionShape3D" type="CollisionShape3D" parent="."] [node name="CollisionShape3D" type="CollisionShape3D" parent="."]
shape = SubResource("CapsuleShape3D_faau1") shape = SubResource("CapsuleShape3D_faau1")
[node name="SightOrigin" type="Marker3D" parent="CollisionShape3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.9, 0)
[node name="Navigation" type="Node3D" parent="."] [node name="Navigation" type="Node3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0)
script = ExtResource("4_csisu") script = ExtResource("4_csisu")
@ -121,20 +99,20 @@ collision_mask = 8
[node name="CollisionShape3D" type="CollisionShape3D" parent="GrabbingRange"] [node name="CollisionShape3D" type="CollisionShape3D" parent="GrabbingRange"]
shape = SubResource("SphereShape3D_3gbao") shape = SubResource("SphereShape3D_3gbao")
[node name="PouncingRange" type="Area3D" parent="."] [node name="PursuitRange" type="Area3D" parent="."]
collision_layer = 0 collision_layer = 0
collision_mask = 8 collision_mask = 8
[node name="CollisionShape3D" type="CollisionShape3D" parent="PouncingRange"] [node name="CollisionShape3D" type="CollisionShape3D" parent="PursuitRange"]
shape = SubResource("SphereShape3D_6qixb")
[node name="TrackingRange" type="Area3D" parent="."]
collision_layer = 0
collision_mask = 8
[node name="CollisionShape3D" type="CollisionShape3D" parent="TrackingRange"]
shape = SubResource("SphereShape3D_d4ex2") shape = SubResource("SphereShape3D_d4ex2")
[node name="AggroRange" type="Area3D" parent="."]
collision_layer = 0
collision_mask = 8
[node name="CollisionShape3D" type="CollisionShape3D" parent="AggroRange"]
shape = SubResource("SphereShape3D_oons1")
[node name="SniffRange" type="Area3D" parent="."] [node name="SniffRange" type="Area3D" parent="."]
collision_layer = 0 collision_layer = 0
collision_mask = 8 collision_mask = 8
@ -142,13 +120,11 @@ collision_mask = 8
[node name="CollisionShape3D" type="CollisionShape3D" parent="SniffRange"] [node name="CollisionShape3D" type="CollisionShape3D" parent="SniffRange"]
shape = SubResource("SphereShape3D_lak6w") shape = SubResource("SphereShape3D_lak6w")
[node name="SoundDetectionCooldown" type="Timer" parent="."] [node name="StalkingTimer" type="Timer" parent="."]
unique_name_in_owner = true unique_name_in_owner = true
wait_time = 40.0
one_shot = true one_shot = true
[node name="AngerDecay" type="Timer" parent="."]
autostart = true
[node name="GrunkBeastBehavior" type="Node" parent="." node_paths=PackedStringArray("blackboard", "actor")] [node name="GrunkBeastBehavior" type="Node" parent="." node_paths=PackedStringArray("blackboard", "actor")]
unique_name_in_owner = true unique_name_in_owner = true
script = ExtResource("6_d4ex2") script = ExtResource("6_d4ex2")
@ -160,253 +136,151 @@ metadata/_custom_type_script = "uid://bb0t2ovl7wifo"
script = ExtResource("7_vvw1q") script = ExtResource("7_vvw1q")
metadata/_custom_type_script = "uid://cw22yurt5l74k" metadata/_custom_type_script = "uid://cw22yurt5l74k"
[node name="InverterDecorator" type="Node" parent="GrunkBeastBehavior/StateSelector"] [node name="GrabSequence" type="Node" parent="GrunkBeastBehavior/StateSelector"]
script = ExtResource("28_csisu")
metadata/_custom_type_script = "uid://crkjak4kyv56m"
[node name="RootBlock" type="Node" parent="GrunkBeastBehavior/StateSelector/InverterDecorator"]
unique_name_in_owner = true
script = ExtResource("29_sm756")
metadata/_custom_type_script = "uid://bjgvke8pjbdiq"
[node name="PursuitMode" type="Node" parent="GrunkBeastBehavior/StateSelector"]
script = ExtResource("12_xde72")
metadata/_custom_type_script = "uid://dcojdhvj8qcw0"
[node name="AngerCheck" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode"]
script = ExtResource("12_a1qno")
blackboard_key = "anger_level"
settings_key = "game/gameplay/beast/anger_threshold_pursuit"
metadata/_custom_type_script = "uid://du7uk56300y28"
[node name="AlwaysSucceedDecorator" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode"]
script = ExtResource("35_4alar")
metadata/_custom_type_script = "uid://dsf3a8vlolhx8"
[node name="PursuitSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator"]
script = ExtResource("8_0gxpq") script = ExtResource("8_0gxpq")
metadata/_custom_type_script = "uid://cg016dbe7gs1x" metadata/_custom_type_script = "uid://cg016dbe7gs1x"
[node name="IncrementBeastAnger" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence"] [node name="IsTargetInGrabbingRange" type="Node" parent="GrunkBeastBehavior/StateSelector/GrabSequence" node_paths=PackedStringArray("area")]
script = ExtResource("31_6qixb")
settings_key = "game/gameplay/beast/anger_start_pursuit"
delta = 20.0
metadata/_custom_type_script = "uid://ccifed50rmjm2"
[node name="SetPlayerTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence"]
script = ExtResource("15_1cnlk")
metadata/_custom_type_script = "uid://rdfsxwehjjrd"
[node name="ActionSelector" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence"]
script = ExtResource("7_vvw1q")
metadata/_custom_type_script = "uid://cw22yurt5l74k"
[node name="AlwaysFailDecorator" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector"]
script = ExtResource("15_oons1")
metadata/_custom_type_script = "uid://dwfdg523bk776"
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/AlwaysFailDecorator"]
script = ExtResource("10_kjykp")
blackboard_key = "pursuit_target"
metadata/_custom_type_script = "uid://u1ntpwjwjqhj"
[node name="GrabSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector"]
script = ExtResource("8_0gxpq")
metadata/_custom_type_script = "uid://cg016dbe7gs1x"
[node name="IsTargetInGrabbingRange" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/GrabSequence" node_paths=PackedStringArray("area")]
script = ExtResource("9_xuag8") script = ExtResource("9_xuag8")
blackboard_key = "pursuit_target" blackboard_key = "pursuit_target"
area = NodePath("../../../../../../../../GrabbingRange") area = NodePath("../../../../GrabbingRange")
metadata/_custom_type_script = "uid://7k5hor1omsxc" metadata/_custom_type_script = "uid://7k5hor1omsxc"
[node name="GrabCooldown" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/GrabSequence"] [node name="GrabCooldown" type="Node" parent="GrunkBeastBehavior/StateSelector/GrabSequence"]
script = ExtResource("10_ntlom") script = ExtResource("10_ntlom")
wait_time = 2.0 wait_time = 2.0
metadata/_custom_type_script = "uid://2qri6rrfv8ui" metadata/_custom_type_script = "uid://2qri6rrfv8ui"
[node name="GrabTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/GrabSequence/GrabCooldown"] [node name="GrabTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/GrabSequence/GrabCooldown"]
script = ExtResource("11_nq7ke") script = ExtResource("11_nq7ke")
blackboard_key = "pursuit_target" blackboard_key = "pursuit_target"
metadata/_custom_type_script = "uid://b0xue7ao0gjqo" metadata/_custom_type_script = "uid://b0xue7ao0gjqo"
[node name="ChaseSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector"] [node name="PursuitSequence" type="Node" parent="GrunkBeastBehavior/StateSelector"]
script = ExtResource("12_xde72") script = ExtResource("12_xde72")
metadata/_custom_type_script = "uid://dcojdhvj8qcw0" metadata/_custom_type_script = "uid://dcojdhvj8qcw0"
[node name="TargetReachable" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/ChaseSequence"] [node name="TargetSelector" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitSequence"]
script = ExtResource("32_6qixb") script = ExtResource("12_dkcdj")
metadata/_custom_type_script = "uid://rpsd3i11lnur" metadata/_custom_type_script = "uid://8hn4kne15ac5"
[node name="TravelToDestination" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/ChaseSequence"] [node name="SetPlayerPriorityTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitSequence/TargetSelector"]
script = ExtResource("14_4y64f") script = ExtResource("14_csisu")
metadata/_custom_type_script = "uid://om57w2acvgb7" metadata/_custom_type_script = "uid://c5cikaa68tsto"
[node name="FrustrationSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector"] [node name="TargetInPursuitRange" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitSequence/TargetSelector" node_paths=PackedStringArray("area")]
script = ExtResource("12_xde72") script = ExtResource("9_xuag8")
metadata/_custom_type_script = "uid://dcojdhvj8qcw0"
[node name="HasLineOfSight" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/FrustrationSequence" node_paths=PackedStringArray("exclusions", "sight_origin")]
script = ExtResource("32_urnsk")
blackboard_key = "pursuit_target" blackboard_key = "pursuit_target"
exclusions = [NodePath("../../../../../../../..")] area = NodePath("../../../../../PursuitRange")
sight_origin = NodePath("../../../../../../../../CollisionShape3D/SightOrigin") metadata/_custom_type_script = "uid://7k5hor1omsxc"
metadata/_custom_type_script = "uid://dlbmi25edn8b7"
[node name="FrustrationCooldown" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/FrustrationSequence"] [node name="GetTargetFromAggroRange" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitSequence/TargetSelector" node_paths=PackedStringArray("area")]
script = ExtResource("10_ntlom") script = ExtResource("13_x8l6r")
wait_time = 1.0 blackboard_key = "pursuit_target"
metadata/_custom_type_script = "uid://2qri6rrfv8ui" area = NodePath("../../../../../AggroRange")
metadata/_custom_type_script = "uid://b34l3v4sr8rmq"
[node name="GetFrustrated" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/FrustrationSequence/FrustrationCooldown"] [node name="UpdateStalkingTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitSequence"]
script = ExtResource("31_6qixb") script = ExtResource("16_lak6w")
settings_key = "game/gameplay/beast/anger_pursuit_frustrated" metadata/_custom_type_script = "uid://yw2u7rlr0whk"
delta = 6.0
metadata/_custom_type_script = "uid://ccifed50rmjm2"
[node name="BoredomCooldown" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector"] [node name="PursueTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitSequence"]
script = ExtResource("10_ntlom") script = ExtResource("14_x8l6r")
metadata/_custom_type_script = "uid://2qri6rrfv8ui" blackboard_key = "pursuit_target"
metadata/_custom_type_script = "uid://bkdwuqv4tudka"
[node name="GetBored" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/BoredomCooldown"] [node name="AlwaysFailDecorator" type="Node" parent="GrunkBeastBehavior/StateSelector"]
script = ExtResource("31_6qixb")
settings_key = "game/gameplay/beast/anger_pursuit_bored"
delta = -10.0
metadata/_custom_type_script = "uid://ccifed50rmjm2"
[node name="TrackingMode" type="Node" parent="GrunkBeastBehavior/StateSelector"]
script = ExtResource("12_xde72")
metadata/_custom_type_script = "uid://dcojdhvj8qcw0"
[node name="AngerCheck" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode"]
script = ExtResource("12_a1qno")
blackboard_key = "anger_level"
settings_key = "game/gameplay/beast/anger_threshold_tracking"
metadata/_custom_type_script = "uid://du7uk56300y28"
[node name="SequenceComposite" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode"]
script = ExtResource("8_0gxpq")
metadata/_custom_type_script = "uid://cg016dbe7gs1x"
[node name="IncrementBeastAnger" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite"]
script = ExtResource("31_6qixb")
settings_key = "game/gameplay/beast/anger_pursuit_frustrated"
delta = 4.0
metadata/_custom_type_script = "uid://ccifed50rmjm2"
[node name="ActionSelector" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite"]
script = ExtResource("7_vvw1q")
metadata/_custom_type_script = "uid://cw22yurt5l74k"
[node name="AlwaysFailDecorator" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector"]
script = ExtResource("15_oons1") script = ExtResource("15_oons1")
metadata/_custom_type_script = "uid://dwfdg523bk776" metadata/_custom_type_script = "uid://dwfdg523bk776"
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/AlwaysFailDecorator"] [node name="ErasePursuitTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/AlwaysFailDecorator"]
script = ExtResource("10_kjykp") script = ExtResource("15_4b27i")
blackboard_key = "point_of_interest" key = "pursuit_target"
metadata/_custom_type_script = "uid://u1ntpwjwjqhj" metadata/_custom_type_script = "uid://demv7xh27ouvr"
[node name="InvestigateAction" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector"] [node name="StalkingSequence" type="Node" parent="GrunkBeastBehavior/StateSelector"]
script = ExtResource("12_xde72") script = ExtResource("12_xde72")
metadata/_custom_type_script = "uid://dcojdhvj8qcw0" metadata/_custom_type_script = "uid://dcojdhvj8qcw0"
[node name="POIInRange" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction"] [node name="StalkingTimerRunning" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence" node_paths=PackedStringArray("timer")]
script = ExtResource("34_vbkm0") script = ExtResource("16_oons1")
blackboard_key = "point_of_interest" timer = NodePath("../../../../StalkingTimer")
max_range = 6.2 metadata/_custom_type_script = "uid://h0cp58nswpml"
metadata/_custom_type_script = "uid://o625e667ig2e"
[node name="AlwaysSucceedDecorator" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction"] [node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence"]
script = ExtResource("35_4alar") script = ExtResource("10_kjykp")
metadata/_custom_type_script = "uid://dsf3a8vlolhx8" blackboard_key = "stalking_target"
metadata/_custom_type_script = "uid://u1ntpwjwjqhj"
[node name="InvestigateSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator"] [node name="TravelToDestination" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence"]
script = ExtResource("8_0gxpq") script = ExtResource("14_4y64f")
metadata/_custom_type_script = "uid://cg016dbe7gs1x" metadata/_custom_type_script = "uid://om57w2acvgb7"
[node name="RandomDelay" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence"] [node name="RandomDelay" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence"]
script = ExtResource("11_mbqcc") script = ExtResource("11_mbqcc")
mean_time = 4.0 mean_time = 4.0
st_dev_time = 0.6 st_dev_time = 0.6
wait_time = 4.48953 wait_time = 3.98107
metadata/_custom_type_script = "uid://beyk2xtbjrsg4" metadata/_custom_type_script = "uid://beyk2xtbjrsg4"
[node name="PickRandomInvestigationTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomDelay"] [node name="RandomStalkingBehavior" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence/RandomDelay"]
script = ExtResource("24_xs4mp")
use_weights = true
Weights/PickRandomStalkTarget = 10
Weights/SniffSequence = 1
metadata/_custom_type_script = "uid://dvnmhlldp23hg"
[node name="PickRandomStalkTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence/RandomDelay/RandomStalkingBehavior"]
script = ExtResource("24_asd50") script = ExtResource("24_asd50")
blackboard_key = "investigation_target" blackboard_key = "stalking_target"
metadata/_custom_type_script = "uid://ubcelage67hs" metadata/_custom_type_script = "uid://ubcelage67hs"
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence"] [node name="SniffSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence/RandomDelay/RandomStalkingBehavior"]
script = ExtResource("10_kjykp")
blackboard_key = "investigation_target"
metadata/_custom_type_script = "uid://u1ntpwjwjqhj"
[node name="TravelToDestination" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence"]
script = ExtResource("14_4y64f")
metadata/_custom_type_script = "uid://om57w2acvgb7"
[node name="RandomChance" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence"]
script = ExtResource("36_uy7at")
probability = 0.1
metadata/_custom_type_script = "uid://c7n3lak5yhrpv"
[node name="SniffSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance"]
script = ExtResource("8_0gxpq") script = ExtResource("8_0gxpq")
metadata/_custom_type_script = "uid://cg016dbe7gs1x" metadata/_custom_type_script = "uid://cg016dbe7gs1x"
[node name="Sniff" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance/SniffSequence"] [node name="Sniff" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence/RandomDelay/RandomStalkingBehavior/SniffSequence"]
script = ExtResource("26_lak6w") script = ExtResource("26_lak6w")
metadata/_custom_type_script = "uid://bksvlal4gjhfr" metadata/_custom_type_script = "uid://bksvlal4gjhfr"
[node name="SetTargetFromArea" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance/SniffSequence" node_paths=PackedStringArray("area")] [node name="SetTargetFromArea" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence/RandomDelay/RandomStalkingBehavior/SniffSequence" node_paths=PackedStringArray("area")]
script = ExtResource("13_x8l6r") script = ExtResource("13_x8l6r")
blackboard_key = "point_of_interest" blackboard_key = "stalking_target"
area = NodePath("../../../../../../../../../../../SniffRange") area = NodePath("../../../../../../../SniffRange")
metadata/_custom_type_script = "uid://b34l3v4sr8rmq" metadata/_custom_type_script = "uid://b34l3v4sr8rmq"
[node name="IncrementBeastAnger" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance/SniffSequence"] [node name="AlwaysFailDecorator2" type="Node" parent="GrunkBeastBehavior/StateSelector"]
script = ExtResource("31_6qixb") script = ExtResource("15_oons1")
settings_key = "game/gameplay/beast/anger_sniff" metadata/_custom_type_script = "uid://dwfdg523bk776"
delta = 40.0
metadata/_custom_type_script = "uid://ccifed50rmjm2"
[node name="TravelSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector"] [node name="EraseStalkingTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/AlwaysFailDecorator2"]
script = ExtResource("15_4b27i")
key = "stalking_target"
metadata/_custom_type_script = "uid://demv7xh27ouvr"
[node name="LurkSequence" type="Node" parent="GrunkBeastBehavior/StateSelector"]
script = ExtResource("8_0gxpq") script = ExtResource("8_0gxpq")
metadata/_custom_type_script = "uid://cg016dbe7gs1x" metadata/_custom_type_script = "uid://cg016dbe7gs1x"
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/TravelSequence"] [node name="RandomDelay" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkSequence"]
script = ExtResource("10_kjykp")
blackboard_key = "point_of_interest"
metadata/_custom_type_script = "uid://u1ntpwjwjqhj"
[node name="TravelToDestination" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/TravelSequence"]
script = ExtResource("14_4y64f")
metadata/_custom_type_script = "uid://om57w2acvgb7"
[node name="LurkingMode" type="Node" parent="GrunkBeastBehavior/StateSelector"]
script = ExtResource("8_0gxpq")
metadata/_custom_type_script = "uid://cg016dbe7gs1x"
[node name="RandomDelay" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode"]
script = ExtResource("11_mbqcc") script = ExtResource("11_mbqcc")
mean_time = 9.0 mean_time = 5.0
st_dev_time = 1.0 st_dev_time = 1.0
wait_time = 9.31084 wait_time = 5.28899
metadata/_custom_type_script = "uid://beyk2xtbjrsg4" metadata/_custom_type_script = "uid://beyk2xtbjrsg4"
[node name="PickRandomLurkTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode/RandomDelay"] [node name="PickRandomLurkTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkSequence/RandomDelay"]
script = ExtResource("12_ml8dd") script = ExtResource("12_ml8dd")
blackboard_key = "lurk_target" blackboard_key = "lurk_target"
group = "LurkPoint" group = "LurkPoint"
metadata/_custom_type_script = "uid://cg55nu4y0a5ud" metadata/_custom_type_script = "uid://cg55nu4y0a5ud"
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode"] [node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkSequence"]
script = ExtResource("10_kjykp") script = ExtResource("10_kjykp")
blackboard_key = "lurk_target" blackboard_key = "lurk_target"
metadata/_custom_type_script = "uid://u1ntpwjwjqhj" metadata/_custom_type_script = "uid://u1ntpwjwjqhj"
[node name="TravelToDestination" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode"] [node name="TravelToDestination" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkSequence"]
script = ExtResource("14_4y64f") script = ExtResource("14_4y64f")
metadata/_custom_type_script = "uid://om57w2acvgb7" metadata/_custom_type_script = "uid://om57w2acvgb7"
@ -415,49 +289,6 @@ unique_name_in_owner = true
script = ExtResource("7_cn3ok") script = ExtResource("7_cn3ok")
metadata/_custom_type_script = "uid://dme5f24l0edsf" metadata/_custom_type_script = "uid://dme5f24l0edsf"
[node name="DebugCanvasLayer" type="CanvasLayer" parent="."]
unique_name_in_owner = true
layer = 10
[node name="MarginContainer" type="MarginContainer" parent="DebugCanvasLayer"]
offset_right = 40.0
offset_bottom = 40.0
theme_override_constants/margin_left = 8
theme_override_constants/margin_top = 8
theme_override_constants/margin_right = 8
theme_override_constants/margin_bottom = 8
[node name="VBoxContainer" type="VBoxContainer" parent="DebugCanvasLayer/MarginContainer"]
layout_mode = 2
[node name="HBoxContainer" type="HBoxContainer" parent="DebugCanvasLayer/MarginContainer/VBoxContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="DebugCanvasLayer/MarginContainer/VBoxContainer/HBoxContainer"]
layout_mode = 2
text = "Current beast behavior: "
[node name="BeastBehaviorLabel" type="Label" parent="DebugCanvasLayer/MarginContainer/VBoxContainer/HBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
text = "BEHAVIOR"
[node name="HBoxContainer2" type="HBoxContainer" parent="DebugCanvasLayer/MarginContainer/VBoxContainer"]
layout_mode = 2
[node name="Label" type="Label" parent="DebugCanvasLayer/MarginContainer/VBoxContainer/HBoxContainer2"]
layout_mode = 2
text = "Anger: "
[node name="BeastAngerMeter" type="ProgressBar" parent="DebugCanvasLayer/MarginContainer/VBoxContainer/HBoxContainer2"]
unique_name_in_owner = true
custom_minimum_size = Vector2(300, 0)
layout_mode = 2
size_flags_vertical = 1
max_value = 150.0
[connection signal="body_entered" from="FrameSkipper/Shambler/TouchingRange" to="." method="_on_touch"]
[connection signal="link_reached" from="Navigation/NavAgent" to="." method="_on_link_reached"] [connection signal="link_reached" from="Navigation/NavAgent" to="." method="_on_link_reached"]
[connection signal="waypoint_reached" from="Navigation/NavAgent" to="." method="_on_waypoint_reached"] [connection signal="waypoint_reached" from="Navigation/NavAgent" to="." method="_on_waypoint_reached"]
[connection signal="sound_detected" from="GameSoundListener" to="." method="on_sound_detected"] [connection signal="sound_detected" from="GameSoundListener" to="." method="on_sound_detected"]
[connection signal="timeout" from="AngerDecay" to="." method="_anger_decay"]

View File

@ -24,9 +24,7 @@ var _busy := false
func trigger() -> void: func trigger() -> void:
if not _busy: if not _busy:
_busy = true _busy = true
if World.instance and World.instance.manager: World.instance.manager.raise_alert(ALERT_DELTA)
World.instance.manager.alarm_triggered.emit(self)
World.instance.manager.raise_alert(ALERT_DELTA)
animation_player.play("trigger") animation_player.play("trigger")
trigger_animation.play("trigger") trigger_animation.play("trigger")
alarm_sfx.play() alarm_sfx.play()

View File

@ -1,16 +1,14 @@
class_name WorldManager extends Resource class_name WorldManager extends Resource
## Autoloaded singleton encapsulating game world state. ## Autoloaded singleton encapsulating game world state.
# TODO a lot of this should really be a property of the world.
## Emitted just after `delta` is added to the player's grunk tank. ## Emitted just after `delta` is added to the player's grunk tank.
signal grunk_collected(delta: float) signal grunk_collected(delta: float)
## Emitted just after the grunk tank is emptied, where `amount` is how much had been collected. ## Emitted just after the grunk tank is emptied, where `amount` is how much had been collected.
signal grunk_emptied(amount: float) signal grunk_emptied(amount: float)
## Emitted when an alarm is triggered, whether or not that alarm raises the alert value.
@warning_ignore("unused_signal")
signal alarm_triggered(source: GunkAlarm)
## Emitted just before the alert level is raised to `new_value`. ## Emitted just before the alert level is raised to `new_value`.
signal alert_raised(new_value: int) signal alert_raised(new_value: int)

View File

@ -1 +1,6 @@
extends Node extends Node
func _ready() -> void:
print("PROJECT SETTINGS")
print(ProjectSettings.get_property_list())

View File

@ -1,33 +1,6 @@
[gd_scene load_steps=6 format=3 uid="uid://db8w8eljku535"] [gd_scene load_steps=2 format=3 uid="uid://db8w8eljku535"]
[ext_resource type="Script" uid="uid://duegbpkukv4e" path="res://utilities/sandbox/sandbox.gd" id="1_mxso2"] [ext_resource type="Script" uid="uid://duegbpkukv4e" path="res://utilities/sandbox/sandbox.gd" id="1_mxso2"]
[ext_resource type="Script" uid="uid://bb0t2ovl7wifo" path="res://addons/beehave/nodes/beehave_tree.gd" id="2_fjanr"]
[ext_resource type="Script" uid="uid://dcojdhvj8qcw0" path="res://addons/beehave/nodes/composites/sequence_reactive.gd" id="3_hovx8"]
[ext_resource type="Script" uid="uid://yar3g43pb3fm" path="res://src/world/grunk_beast/behaviors/actions/print_debug_action.gd" id="4_1rbkg"]
[ext_resource type="Script" uid="uid://c7n3lak5yhrpv" path="res://src/world/grunk_beast/behaviors/decorators/random_chance.gd" id="5_f6f0v"]
[node name="Sandbox" type="Node"] [node name="Sandbox" type="Node"]
script = ExtResource("1_mxso2") script = ExtResource("1_mxso2")
[node name="BeehaveTree" type="Node" parent="." node_paths=PackedStringArray("blackboard", "actor")]
script = ExtResource("2_fjanr")
tick_rate = 60
blackboard = NodePath("@Node@94268")
actor = NodePath("..")
metadata/_custom_type_script = "uid://bb0t2ovl7wifo"
[node name="SequenceReactiveComposite" type="Node" parent="BeehaveTree"]
script = ExtResource("3_hovx8")
metadata/_custom_type_script = "uid://dcojdhvj8qcw0"
[node name="DebugA" type="Node" parent="BeehaveTree/SequenceReactiveComposite"]
script = ExtResource("4_1rbkg")
metadata/_custom_type_script = "uid://yar3g43pb3fm"
[node name="RandomChance" type="Node" parent="BeehaveTree/SequenceReactiveComposite"]
script = ExtResource("5_f6f0v")
metadata/_custom_type_script = "uid://c7n3lak5yhrpv"
[node name="DebugBB" type="Node" parent="BeehaveTree/SequenceReactiveComposite/RandomChance"]
script = ExtResource("4_1rbkg")
metadata/_custom_type_script = "uid://yar3g43pb3fm"

View File

@ -2,29 +2,10 @@
Goes up each time an [[alarm]] is triggered, is reset by returning to the safe zone. Goes up each time an [[alarm]] is triggered, is reset by returning to the safe zone.
~~When this hits maximum, it alerts the [[grunk beast]]. #maybe there are effects at other levels too.~~ When this hits maximum, it alerts the [[grunk beast]]. #maybe there are effects at other levels too.
This should NOT be displayed to the player while in-game, to increase anxiety (did I trip the alarm 4 times or only 3???). Player should get a HUD notification (!!GRUNK ALERT!!) when increasing, and the previous alert-level should be shown when resetting at the safe zone. This should NOT be displayed to the player while in-game, to increase anxiety (did I trip the alarm 4 times or only 3???). Player should get a HUD notification (!!GRUNK ALERT!!) when increasing, and the previous alert-level should be shown when resetting at the safe zone.
When returning to the safe zone, if the current level is 1 or lower it remains unchanged. Otherwise, it is reset back to 1.
#### Effects
##### Level 0
- Base level upon starting the game. No spooky effects in play.
##### Level 1
- On first trigger, show a "RETURN TO SHIP IMMEDIATELY" HUD alert.
- Back at the ship, give grunk alert exposition #TODO
- #TODO additional effects? subtle
##### Level 2
- Spawn a roaming [[grunk beast]] in the player's vicinity.
##### Level 3
- Increase [[grunk beast]] aggro level #TODO
##### Level 4
- Every alarm will immediately draw the [[grunk beast]] and increase aggro level #TODO
## #lore ## #lore
I like the idea of modelling this on the [Homeland Security Advisory System](https://en.wikipedia.org/wiki/Homeland_Security_Advisory_System). I like the idea of modelling this on the [Homeland Security Advisory System](https://en.wikipedia.org/wiki/Homeland_Security_Advisory_System).

View File

@ -1,97 +0,0 @@
{
"nodes":[
{"id":"36051ec2b37ba295","type":"group","x":-1000,"y":-1200,"width":400,"height":620,"label":"KEY"},
{"id":"309783e3f860c664","type":"text","text":"# Pursuit Mode","x":100,"y":-280,"width":320,"height":60,"color":"4"},
{"id":"fd3fd449aff1e815","type":"text","text":"# Special Node","x":-960,"y":-1160,"width":320,"height":51,"color":"1"},
{"id":"86d78802272f4cbd","type":"text","text":"# Selector Node","x":-960,"y":-1040,"width":320,"height":51,"color":"5"},
{"id":"c27480b522338d1f","type":"text","text":"# Sequence Node","x":-960,"y":-920,"width":320,"height":51,"color":"4"},
{"id":"6dc7cf8f044bbd41","type":"text","text":"# Condition Node","x":-960,"y":-800,"width":320,"height":51,"color":"3"},
{"id":"962ffdd04cb2bfce","type":"text","text":"# Action Node","x":-960,"y":-674,"width":320,"height":51,"color":"2"},
{"id":"7f5a6c13834abe9c","type":"text","text":"### Angry enough?\n`anger >= 80`?","x":460,"y":-300,"width":320,"height":100,"color":"3"},
{"id":"d2befd3e1c5941aa","type":"text","text":"### Increase anger\n`anger += 20`","x":820,"y":-300,"width":320,"height":100,"color":"2"},
{"id":"c2060d7f0c7efb77","type":"text","text":"# Action Select","x":1180,"y":-280,"width":320,"height":60,"color":"5"},
{"id":"8cdc28edb272066e","type":"text","text":"# Mode Select","x":-260,"y":-400,"width":320,"height":60,"color":"5"},
{"id":"275cd4ee967165b3","type":"text","text":"# ROOT","x":-620,"y":-500,"width":320,"height":51,"color":"1"},
{"id":"bf749d0ee26fc26f","type":"text","text":"# Grab Sequence","x":1540,"y":-160,"width":320,"height":60,"color":"4"},
{"id":"bf46a52cc431843c","type":"text","text":"### Player in range?\nPlayer in `grabbing` range?","x":1900,"y":-180,"width":320,"height":100,"color":"3"},
{"id":"ad2b78ebc3b6bd74","type":"text","text":"### Play grab animation","x":2260,"y":-160,"width":320,"height":60,"color":"2"},
{"id":"8ffff86151c47a52","type":"text","text":"### Player still in range?\nPlayer in `grabbing` range?","x":2620,"y":-180,"width":320,"height":100,"color":"3"},
{"id":"1affedaf6cb9d7c8","type":"text","text":"### Kill player!\n- Start player death sequence\n- Reset `anger` to `70`","x":2980,"y":-190,"width":320,"height":120,"color":"2"},
{"id":"d2b6732a564899a1","type":"text","text":"# Pounce Sequence","x":1540,"y":-40,"width":320,"height":60,"color":"4"},
{"id":"9dbf3c0c1a549010","type":"text","text":"### Angry enough?\n`anger >= 140`?","x":1900,"y":-60,"width":320,"height":100,"color":"3"},
{"id":"6db00220c3eb617b","type":"text","text":"### Player in range?\nPlayer in `pouncing` range?","x":2260,"y":-60,"width":320,"height":100,"color":"3"},
{"id":"386c3689d2552662","type":"text","text":"### Play pounce animation","x":2620,"y":-40,"width":320,"height":60,"color":"2"},
{"id":"aa705ba39e4eb442","type":"text","text":"### Player in range?\nPlayer in `grabbing` range?","x":2980,"y":-60,"width":320,"height":100,"color":"3"},
{"id":"570510f49b95b1e6","type":"text","text":"### Kill player!\n- Start player death sequence\n- Reset `anger` to `70`","x":3340,"y":-70,"width":320,"height":120,"color":"2"},
{"id":"a604ebebb448e995","type":"text","text":"# Chase Sequence","x":1540,"y":80,"width":320,"height":60,"color":"4"},
{"id":"4810094c85c9202c","type":"text","text":"### Valid path to player?","x":1900,"y":80,"width":320,"height":60,"color":"3"},
{"id":"46aeae970743bfc6","type":"text","text":"### Set target to player","x":2260,"y":80,"width":320,"height":60,"color":"2"},
{"id":"28dc8192a23d1bcd","type":"text","text":"# Frustration Seq.","x":1540,"y":200,"width":320,"height":60,"color":"4"},
{"id":"fa47a97ec7d4e52c","type":"text","text":"### Line-of-sight to player?","x":1900,"y":200,"width":320,"height":60,"color":"3"},
{"id":"978d3c19261a3529","type":"text","text":"### Decrease anger\n`anger -= 10`\n(4 second cooldown)","x":1540,"y":320,"width":320,"height":120,"color":"2"},
{"id":"08c59c4c287f924e","type":"text","text":"### Increase anger\n`anger += 6`\n(1 second cooldown)","x":2260,"y":170,"width":320,"height":120,"color":"2"},
{"id":"2aec2c3872c92a8d","type":"text","text":"# Tracking Mode","x":100,"y":500,"width":320,"height":60,"color":"4"},
{"id":"d0648f39f65a5510","type":"text","text":"### Angry enough?\n`anger >= 30`?","x":460,"y":480,"width":320,"height":100,"color":"3"},
{"id":"3bcce476c4ab5421","type":"text","text":"### Increase anger\n`anger += 4`","x":820,"y":480,"width":320,"height":100,"color":"2"},
{"id":"bb2f8a85a5487056","type":"text","text":"# Action Select","x":1180,"y":500,"width":320,"height":60,"color":"5"},
{"id":"298da11cb95a27ac","type":"text","text":"# Investigate Seq.","x":1540,"y":620,"width":320,"height":60,"color":"4"},
{"id":"bbe3db5555641ca1","type":"text","text":"### POI in range?\nPOI in `tracking` range?","x":1900,"y":600,"width":320,"height":100,"color":"3"},
{"id":"0be326d29a48242c","type":"text","text":"### Set random target\nSet target to random spot near POI\n","x":2260,"y":605,"width":320,"height":90,"color":"2"},
{"id":"363285574dfda422","type":"text","text":"### Pathfind toward target\n","x":2620,"y":620,"width":320,"height":60,"color":"2"},
{"id":"9d5415bf810b5457","type":"text","text":"### Pathfind toward target","x":2620,"y":80,"width":320,"height":60,"color":"2"},
{"id":"92bcd5b4fb5f44fd","type":"text","text":"### Wait short random time","x":2980,"y":620,"width":320,"height":60,"color":"2"},
{"id":"1c4816fb489f4557","type":"text","text":"### (RANDOM) Sniff for player\nVery small chance to occur\n- Play sniff animation\n- If player is within `sniffing` range:\n\t- `anger += 40`\n\t- set POI to player's location","x":3340,"y":532,"width":340,"height":236,"color":"2"},
{"id":"f0cc86c4a40f341b","type":"text","text":"# Travel Sequence","x":1540,"y":740,"width":320,"height":60,"color":"4"},
{"id":"01ed790172030d9a","type":"text","text":"### Valid path to POI?","x":1900,"y":740,"width":320,"height":60,"color":"3"},
{"id":"108a4ac0406fcf04","type":"text","text":"### Set target to POI","x":2260,"y":740,"width":320,"height":60,"color":"2"},
{"id":"4e1d130ebeff848e","type":"text","text":"### Pathfind toward target","x":2620,"y":740,"width":320,"height":60,"color":"2"},
{"id":"c517d171c3b8e370","type":"text","text":"# Lurking Mode","x":100,"y":860,"width":320,"height":60,"color":"4"},
{"id":"7191430b387d0c8a","type":"text","text":"### Pathfind toward target","x":820,"y":860,"width":320,"height":60,"color":"2"},
{"id":"48280cdf252acf09","type":"text","text":"### Set target to random lurk target","x":460,"y":850,"width":320,"height":80,"color":"2"},
{"id":"9060f08acc9b27af","type":"text","text":"### Wait short random time","x":1180,"y":860,"width":320,"height":60,"color":"2"}
],
"edges":[
{"id":"54c04a1e088566ee","fromNode":"275cd4ee967165b3","fromSide":"bottom","toNode":"8cdc28edb272066e","toSide":"left"},
{"id":"4ed8f235031ca1f5","fromNode":"8cdc28edb272066e","fromSide":"bottom","toNode":"309783e3f860c664","toSide":"left"},
{"id":"f0a36ff39a5c140c","fromNode":"c2060d7f0c7efb77","fromSide":"bottom","toNode":"bf749d0ee26fc26f","toSide":"left"},
{"id":"157133a9460a568b","fromNode":"c2060d7f0c7efb77","fromSide":"bottom","toNode":"d2b6732a564899a1","toSide":"left"},
{"id":"b7e0229660289458","fromNode":"c2060d7f0c7efb77","fromSide":"bottom","toNode":"a604ebebb448e995","toSide":"left"},
{"id":"b5423e7b64cc7624","fromNode":"c2060d7f0c7efb77","fromSide":"bottom","toNode":"28dc8192a23d1bcd","toSide":"left"},
{"id":"aad3bc694a7dd247","fromNode":"c2060d7f0c7efb77","fromSide":"bottom","toNode":"978d3c19261a3529","toSide":"left"},
{"id":"07387cc6157cd5de","fromNode":"309783e3f860c664","fromSide":"right","toNode":"7f5a6c13834abe9c","toSide":"left"},
{"id":"2899b4b0575cdc67","fromNode":"7f5a6c13834abe9c","fromSide":"right","toNode":"d2befd3e1c5941aa","toSide":"left"},
{"id":"53429a1271248810","fromNode":"d2befd3e1c5941aa","fromSide":"right","toNode":"c2060d7f0c7efb77","toSide":"left"},
{"id":"b1db93bb005c09f1","fromNode":"bf749d0ee26fc26f","fromSide":"right","toNode":"bf46a52cc431843c","toSide":"left"},
{"id":"77f1e4fe76712ca1","fromNode":"bf46a52cc431843c","fromSide":"right","toNode":"ad2b78ebc3b6bd74","toSide":"left"},
{"id":"9d030526dc22bae1","fromNode":"ad2b78ebc3b6bd74","fromSide":"right","toNode":"8ffff86151c47a52","toSide":"left"},
{"id":"9824cbceaa451f2f","fromNode":"8ffff86151c47a52","fromSide":"right","toNode":"1affedaf6cb9d7c8","toSide":"left"},
{"id":"7d76dbf5a11d1036","fromNode":"d2b6732a564899a1","fromSide":"right","toNode":"9dbf3c0c1a549010","toSide":"left"},
{"id":"ce2d091f2736719e","fromNode":"9dbf3c0c1a549010","fromSide":"right","toNode":"6db00220c3eb617b","toSide":"left"},
{"id":"336424d5f0a0814c","fromNode":"6db00220c3eb617b","fromSide":"right","toNode":"386c3689d2552662","toSide":"left"},
{"id":"afd54fd530eedc66","fromNode":"386c3689d2552662","fromSide":"right","toNode":"aa705ba39e4eb442","toSide":"left"},
{"id":"acf9e9e84ff8eb9b","fromNode":"aa705ba39e4eb442","fromSide":"right","toNode":"570510f49b95b1e6","toSide":"left"},
{"id":"d12c5d40b8c7f7d8","fromNode":"a604ebebb448e995","fromSide":"right","toNode":"4810094c85c9202c","toSide":"left"},
{"id":"1f0e37c4ed5fca79","fromNode":"4810094c85c9202c","fromSide":"right","toNode":"46aeae970743bfc6","toSide":"left"},
{"id":"96a1237c33aea9ff","fromNode":"28dc8192a23d1bcd","fromSide":"right","toNode":"fa47a97ec7d4e52c","toSide":"left"},
{"id":"c479fceef406256f","fromNode":"fa47a97ec7d4e52c","fromSide":"right","toNode":"08c59c4c287f924e","toSide":"left"},
{"id":"d9ce788e49ee2db5","fromNode":"8cdc28edb272066e","fromSide":"bottom","toNode":"2aec2c3872c92a8d","toSide":"left"},
{"id":"35fb0ebf2357f5fe","fromNode":"2aec2c3872c92a8d","fromSide":"right","toNode":"d0648f39f65a5510","toSide":"left"},
{"id":"8b5fcc53d8a99ccf","fromNode":"d0648f39f65a5510","fromSide":"right","toNode":"3bcce476c4ab5421","toSide":"left"},
{"id":"73e01f405a5b5900","fromNode":"3bcce476c4ab5421","fromSide":"right","toNode":"bb2f8a85a5487056","toSide":"left"},
{"id":"5141e47e06d4ffef","fromNode":"bb2f8a85a5487056","fromSide":"bottom","toNode":"298da11cb95a27ac","toSide":"left"},
{"id":"caf0a1499e720ead","fromNode":"298da11cb95a27ac","fromSide":"right","toNode":"bbe3db5555641ca1","toSide":"left"},
{"id":"ee81f4a36600c443","fromNode":"bbe3db5555641ca1","fromSide":"right","toNode":"0be326d29a48242c","toSide":"left"},
{"id":"42fdbb6f4ba3f97a","fromNode":"46aeae970743bfc6","fromSide":"right","toNode":"9d5415bf810b5457","toSide":"left"},
{"id":"14051fbc6c9de36a","fromNode":"0be326d29a48242c","fromSide":"right","toNode":"363285574dfda422","toSide":"left"},
{"id":"fb94c928ca2c6ec0","fromNode":"363285574dfda422","fromSide":"right","toNode":"92bcd5b4fb5f44fd","toSide":"left"},
{"id":"2e0ec3d5f5841685","fromNode":"92bcd5b4fb5f44fd","fromSide":"right","toNode":"1c4816fb489f4557","toSide":"left"},
{"id":"b5bf795d14cbe5a4","fromNode":"bb2f8a85a5487056","fromSide":"bottom","toNode":"f0cc86c4a40f341b","toSide":"left"},
{"id":"ea67b7474cd8cf43","fromNode":"01ed790172030d9a","fromSide":"right","toNode":"108a4ac0406fcf04","toSide":"left"},
{"id":"47a9b3f404e333ce","fromNode":"108a4ac0406fcf04","fromSide":"right","toNode":"4e1d130ebeff848e","toSide":"left"},
{"id":"a5b3ecc4691ad152","fromNode":"f0cc86c4a40f341b","fromSide":"right","toNode":"01ed790172030d9a","toSide":"left"},
{"id":"6bca7a2487efb756","fromNode":"8cdc28edb272066e","fromSide":"bottom","toNode":"c517d171c3b8e370","toSide":"left"},
{"id":"ea4251fc19472498","fromNode":"48280cdf252acf09","fromSide":"right","toNode":"7191430b387d0c8a","toSide":"left"},
{"id":"b1b43f72f03bde2f","fromNode":"c517d171c3b8e370","fromSide":"right","toNode":"48280cdf252acf09","toSide":"left"},
{"id":"58ec0dc11931e6c5","fromNode":"7191430b387d0c8a","fromSide":"right","toNode":"9060f08acc9b27af","toSide":"left"}
]
}

View File

@ -13,77 +13,21 @@ Concept: No head, tall spindly legs.
Visually, I imagine it straining to pull itself out of the grunk. Visually, I imagine it straining to pull itself out of the grunk.
### Behavior ### Behavior
See [[grunk beast behavior tree.canvas|grunk beast behavior tree]]. Behavior changes based on [[grunk alert]]
Related to [[grunk alert]]. ##### LEVEL 0 - Unaware
Inactive. No spooky until the player fucks up.
##### LEVEL 1 - Passive
The beast spawns somewhere the player can't see. It will avoid the player.
The beast is inactive below alert level 2. When level 2 is reached, the beast [[#Spawning|spawns]] in the vicinity of the player. Can we orchestrate a spooky sighting? ([[meet spook]]?)
##### LEVEL 2 - Aggressive
At a high level, there are broadly three behavior types we want the beast to have: Beast will pursue the player on sight.
- Lurking (unaware of the player, just meandering about) ##### LEVEL 3 - Predatory
- When lurking, the beast randomly wanders between preset lurk points. Beast will pursue player automatically and relentlessly.
- Tracking (actively looking for the player) ##### LEVEL 4 - Swarming
- When tracking, the beast investigates the latest **point-of-interest** (POI) Beasts spawn at every spawn point, all pursuing the player.
- Pursuit (chasing the player) ##### LEVEL 5 - He's right behind me, isn't he?
- When in pursuit, the beast directly chases the player. Unavoidable death. Show cutscene with player grabbed by beast.
The beast's behavior while active is controlled by _anger level_. The player can reset the alert level to 2 by returning to the safe zone.
#### Anger level
Each beast maintains an independent _anger level_. This is a number between `0` and `150`.
- The beast will slowly relax over time if the player doesn't actively agitate it:
- Anger decreases by `1` per second
- Sounds will slightly agitate the beast:
- A sound in the beast's hearing range increases anger by `10`, up to once per second.
- If the sound is also in the beast's _provocation range_, increase anger by an additional `30`.
- Set the POI to the location of the sound.
- [[alarm|Alarms]] will substantially agitate the beast and furthermore draw it towards the player:
- When an [[alarm]] is triggered, increase anger by `60`.
- At alert level 4 or above, increase anger by an additional `60`.
- Set the POI to the alarm's location.
- If the beast does not have a path to the player, additionally respawn near the player.
- Any attempt by the player to fight back against the beast will greatly anger it:
- If the player touches the beast, increase anger by `35`, up to twice per second (once per 0.5 seconds).
- If the player shoots the beast with a beam, increase anger by `100`, up to once per four seconds.
- If the player sticks a sticker on the beast, _decrease_ anger by `60`. #easter-eggs
- Set the POI to the player's location.
- The beast should lurk when at low anger:
- When anger is `<30`: Slowly wander between lurk points
- The beast should enter tracking mode at medium anger levels:
- If anger is `>=30` and not in **pursuit mode**:
1. Pathfind to the POI. (middle speed)
2. Once there, wander around in a small radius.
3. (randomly with low probability) Sniff for the player, up to once per six seconds.
- When the beast sniffs for the player, if the player is within _sniff range_, increase anger by `40` and set the POI to the player's location.
4. If the POI moves outside _tracking range_, start tracking again from step 1.
- The beast should pursue the player when it gets angry enough:
- When _not_ in **pursuit mode** and anger is `>=80`:
- Increase anger by `20` and enter **pursuit mode**.
- In **pursuit mode**:
- Pathfind directly to the player at pursuit speed.
- Pursuit speed should be faster than the player's walking speed and just slightly slower than the player's running speed. The player can escape if they run fast and don't make any mistakes.
- If the player is in _grabbing range_, grab the player, up to once per four seconds.
- Start grab animation. If the player is still in grabbing range at the end of the animation, the player gets grabbed. GAME OVER MAN!!
- If anger is `>140` and the player is in _pouncing range_, pounce for the player, up to once per four seconds.
- (ditto with the grab action)
- If anger is `<80`, stop **pursuit mode**.
- If the beast does _not_ have a valid path to the player:
- If the beast does _not_ have line-of-sight to the player, _decrease_ anger by `10` up to once per four seconds.
- If the beast DOES have line-of-sight to the player, _increase_ anger by 6 per second.
#### Spawning
The beast spawns by physically pulling itself out of the ground in a grunky spot.
We want the beast to spawn somewhere which would ideally have the following properties:
- Should be near the player.
- The player should _see_ the beast spawn.
- The beast should block the player's easiest escape route.
Every area in the map is part of a _spawn zone_. Each _spawn zone_ has a number of _priority spawns_ associated, which are just small patches of the floor. Priority spawns are destroyed if sprayed/toothbrushed; therefore, the beast will only spawn in a place that is still substantially covered in grunk. Additionally, each spawn zone has an indestructible _default spawn_ which will be used if all priority spawns are unavailable.
When it's time to spawn a beast, we select a spawn point as follows:
- Use the highest-priority priority spawn for this zone which the player is currently looking at (currently in frustum and line-of-sight unblocked).
- If the player is not currently looking at any spawn points in this zone, use the highest priority priority spawn which the player can see (line-of-sight unblocked).
- If the player cannot see any spawn points for this zone, use the highest-priority priority spawn.
- If there are no priority spawns for this zone, use the default spawn with the highest priority.
- If the player is not in a spawn zone or the spawn zone has no default spawns, use a randomly-select map-default spawn.
- If there are no map-default spawns, log an error and do not spawn a beast.