generated from krampus/template-godot4
Compare commits
3 Commits
e8e794fbe0
...
56d48949ab
Author | SHA1 | Date | |
---|---|---|---|
56d48949ab | |||
66b8c90070 | |||
e5ce84bec1 |
Binary file not shown.
Binary file not shown.
BIN
assets/materials/grunk_overlays/bright_overlay.material
Normal file
BIN
assets/materials/grunk_overlays/bright_overlay.material
Normal file
Binary file not shown.
BIN
assets/materials/grunk_overlays/crystal_overlay.material
Normal file
BIN
assets/materials/grunk_overlays/crystal_overlay.material
Normal file
Binary file not shown.
BIN
assets/materials/grunk_overlays/danger_overlay.material
Normal file
BIN
assets/materials/grunk_overlays/danger_overlay.material
Normal file
Binary file not shown.
BIN
assets/materials/grunk_overlays/debug_overlay.material
Normal file
BIN
assets/materials/grunk_overlays/debug_overlay.material
Normal file
Binary file not shown.
BIN
assets/materials/grunk_overlays/gunk_overlay.material
Normal file
BIN
assets/materials/grunk_overlays/gunk_overlay.material
Normal file
Binary file not shown.
BIN
assets/materials/grunk_overlays/lowrez_overlay.material
Normal file
BIN
assets/materials/grunk_overlays/lowrez_overlay.material
Normal file
Binary file not shown.
BIN
assets/materials/grunk_overlays/oily_overlay.material
Normal file
BIN
assets/materials/grunk_overlays/oily_overlay.material
Normal file
Binary file not shown.
26
assets/materials/grunk_textures/crazy_grunk.tres
Normal file
26
assets/materials/grunk_textures/crazy_grunk.tres
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
[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")
|
22
assets/materials/grunk_textures/crystal_grunk.tres
Normal file
22
assets/materials/grunk_textures/crystal_grunk.tres
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
[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")
|
23
assets/materials/grunk_textures/detailed_grunk.tres
Normal file
23
assets/materials/grunk_textures/detailed_grunk.tres
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
[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")
|
16
assets/materials/grunk_textures/lumpy_grunk.tres
Normal file
16
assets/materials/grunk_textures/lumpy_grunk.tres
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
[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")
|
@ -6,3 +6,4 @@ 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
|
||||||
|
15
assets/materials/gunk_noise_2.tres
Normal file
15
assets/materials/gunk_noise_2.tres
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
[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.
Binary file not shown.
@ -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/gunk_overlay.material" id="4_knpho"]
|
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/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/gunk_overlay_lowrez.material" id="14_asais"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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"]
|
||||||
|
@ -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/gunk_overlay.material" id="3_s2uxq"]
|
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/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/gunk_overlay_lowrez.material" id="6_d0c5k"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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"]
|
||||||
|
@ -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/gunk_overlay.material" id="5_hwbyh"]
|
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/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/gunk_overlay_bright.material" id="11_i2ry3"]
|
[ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/grunk_overlays/bright_overlay.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/gunk_overlay_lowrez.material" id="13_qaol8"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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"]
|
||||||
|
@ -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/gunk_overlay.material" id="4_650i1"]
|
[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://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/gunk_overlay_bright.material" id="11_iefrw"]
|
[ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/grunk_overlays/bright_overlay.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/gunk_overlay_lowrez.material" id="17_wqkax"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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"]
|
||||||
|
@ -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/gunk_overlay.material" id="4_yqi6h"]
|
[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://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/gunk_overlay_bright.material" id="6_8pwhd"]
|
[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://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/gunk_overlay_lowrez.material" id="9_57qp5"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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"]
|
||||||
|
@ -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/gunk_overlay.material" id="4_rcrnx"]
|
[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://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="5_rcrnx"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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"]
|
||||||
|
@ -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/gunk_overlay.material" id="4_yvs0w"]
|
[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://c1vy4bkwb1g5m" path="res://assets/materials/gunk_overlay_lowrez.material" id="5_yvs0w"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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"]
|
||||||
|
@ -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/gunk_overlay_lowrez.material" id="3_6lrbi"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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/gunk_overlay.material" id="6_jshbi"]
|
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/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"]
|
||||||
|
@ -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/gunk_overlay.material" id="4_6issa"]
|
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/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/gunk_overlay_lowrez.material" id="5_6issa"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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"]
|
||||||
|
@ -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/gunk_overlay.material" id="4_ibsng"]
|
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/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/gunk_overlay_lowrez.material" id="17_f3alo"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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"]
|
||||||
|
@ -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/gunk_overlay.material" id="7_qjnj2"]
|
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/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"]
|
||||||
|
@ -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/gunk_overlay.material" id="3_cr8wn"]
|
[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://djoxlkeqf4cvp" path="res://assets/materials/grunk_overlay_debug.material" id="4_lrgpr"]
|
[ext_resource type="Material" uid="uid://djoxlkeqf4cvp" path="res://assets/materials/grunk_overlays/debug_overlay.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)
|
||||||
|
@ -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/gunk_overlay.material" id="6_r07l4"]
|
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/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"]
|
||||||
|
@ -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/gunk_overlay.material" id="7_nsdlh"]
|
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/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/gunk_overlay_bright.material" id="14_olej6"]
|
[ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/grunk_overlays/bright_overlay.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/gunk_overlay_lowrez.material" id="16_x0tbd"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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"]
|
||||||
|
@ -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/gunk_overlay_bright.material" id="37_00w3i"]
|
[ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/grunk_overlays/bright_overlay.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/gunk_overlay_oily.material" id="41_6kdm2"]
|
[ext_resource type="Material" uid="uid://dl3cvc4e7evn4" path="res://assets/materials/grunk_overlays/oily_overlay.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"]
|
||||||
|
|
||||||
|
@ -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/gunk_overlay.material" id="4_cdbrk"]
|
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/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/gunk_overlay_lowrez.material" id="15_h40r5"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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/gunk_overlay_bright.material" id="40_l2a0i"]
|
[ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/grunk_overlays/bright_overlay.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"]
|
||||||
|
BIN
levels/sandbox/gunk_sandbox.material
Normal file
BIN
levels/sandbox/gunk_sandbox.material
Normal file
Binary file not shown.
138
levels/sandbox/material_test.tscn
Normal file
138
levels/sandbox/material_test.tscn
Normal file
@ -0,0 +1,138 @@
|
|||||||
|
[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
@ -103,6 +103,26 @@ 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]
|
||||||
|
|
||||||
|
@ -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/gunk_overlay.material" id="8_4grlf"]
|
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/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")
|
||||||
|
@ -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/gunk_overlay_lowrez.material" id="7_rlyiq"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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"]
|
||||||
|
@ -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/gunk_overlay_lowrez.material" id="6_c6a2t"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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")
|
||||||
|
@ -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/gunk_overlay.material" id="8_rgfsf"]
|
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/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
@ -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/gunk_overlay_lowrez.material" id="2_8v7ae"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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"]
|
||||||
|
@ -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/gunk_overlay_lowrez.material" id="7_n1l4q"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="7_n1l4q"]
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ygl0i"]
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ygl0i"]
|
||||||
transparency = 2
|
transparency = 2
|
||||||
|
@ -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/gunk_overlay.material" id="7_lcrh2"]
|
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/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")
|
||||||
|
@ -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/gunk_overlay_lowrez.material" id="6_8nypc"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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")
|
||||||
|
@ -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/gunk_overlay_bright.material" id="8_3gl0p"]
|
[ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/grunk_overlays/bright_overlay.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"]
|
||||||
|
@ -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/gunk_overlay_lowrez.material" id="7_vgbo1"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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"]
|
||||||
|
@ -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/gunk_overlay.material" id="8_pr1sr"]
|
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/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"]
|
||||||
|
@ -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/gunk_overlay.material" id="7_84i3a"]
|
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/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")
|
||||||
|
@ -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/gunk_overlay_lowrez.material" id="6_vis60"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="6_vis60"]
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_qbm60"]
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_qbm60"]
|
||||||
transparency = 2
|
transparency = 2
|
||||||
|
@ -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/gunk_overlay_lowrez.material" id="7_7amwm"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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"]
|
||||||
|
@ -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/gunk_overlay_lowrez.material" id="7_c2e1y"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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")
|
||||||
|
@ -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/gunk_overlay_lowrez.material" id="8_b7lht"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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"]
|
||||||
|
@ -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/gunk_overlay_lowrez.material" id="8_2qpft"]
|
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.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"]
|
||||||
|
@ -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/gunk_overlay.material" id="7_hb7yx"]
|
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="7_hb7yx"]
|
||||||
|
|
||||||
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_t12qs"]
|
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_t12qs"]
|
||||||
transparency = 2
|
transparency = 2
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
// -*- mode: glsl -*-
|
||||||
/* Gunk shader adapted to a canvas item */
|
/* Gunk shader adapted to a canvas item */
|
||||||
shader_type canvas_item;
|
shader_type canvas_item;
|
||||||
|
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
// -*- mode: glsl -*-
|
||||||
// Common logic for gunk shaders
|
// Common logic for gunk shaders
|
||||||
|
|
||||||
group_uniforms gunk_material;
|
group_uniforms gunk_material;
|
||||||
@ -36,6 +37,23 @@ 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,
|
||||||
@ -89,3 +107,82 @@ 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));
|
||||||
|
}
|
||||||
|
@ -1,31 +1,16 @@
|
|||||||
|
// -*- 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);
|
||||||
|
|
||||||
|
|
||||||
// Build normal map from bump map
|
vec3 nmap = sobel_convolution(UV, uvt);
|
||||||
float h_center = bump_sample(UV, uvt, 0.0, 0.0);
|
ALBEDO = nmap / 2.0 + 0.5;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
// -*- mode: glsl -*-
|
||||||
shader_type spatial;
|
shader_type spatial;
|
||||||
render_mode depth_prepass_alpha;
|
render_mode depth_prepass_alpha;
|
||||||
|
|
||||||
@ -23,11 +24,6 @@ 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);
|
||||||
@ -36,17 +32,11 @@ void fragment() {
|
|||||||
EMISSION = base_emission(UV, value);
|
EMISSION = base_emission(UV, value);
|
||||||
SPECULAR = base_specular();
|
SPECULAR = base_specular();
|
||||||
|
|
||||||
// Build normal map from bump map
|
vec3 nmap = sobel_convolution(UV, uvt);
|
||||||
float h_center = bump_sample(uvt, 0.0, 0.0);
|
NORMAL_MAP = nmap / 2.0 + 0.5;
|
||||||
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) * normal_diff_map;
|
vec3 world_normal = mat3(TANGENT, BINORMAL, NORMAL) * nmap;
|
||||||
EMISSION += rim_glow(
|
EMISSION += rim_glow(
|
||||||
world_normal,
|
world_normal,
|
||||||
VIEW,
|
VIEW,
|
||||||
|
@ -1,20 +1,10 @@
|
|||||||
|
// -*- 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);
|
||||||
@ -23,17 +13,16 @@ void fragment() {
|
|||||||
EMISSION = base_emission(UV, value);
|
EMISSION = base_emission(UV, value);
|
||||||
SPECULAR = base_specular();
|
SPECULAR = base_specular();
|
||||||
|
|
||||||
// Build normal map from bump map
|
// vec3 nmap = minimal_convolution(UV, uvt);
|
||||||
float h_center = bump_sample(UV, uvt, 0.0, 0.0);
|
// vec3 nmap = cross_convolution(UV, uvt);
|
||||||
float h_right = bump_sample(UV, uvt, 1.0, 0.0);
|
vec3 nmap = sobel_convolution(UV, uvt);
|
||||||
float h_down = bump_sample(UV, uvt, 0.0, 1.0);
|
// vec3 nmap = sobel_5x5_convolution(UV, uvt);
|
||||||
float dx = (h_center - h_right) * bump_strength;
|
// vec3 nmap = scharr_convolution(UV, uvt);
|
||||||
float dy = (h_center - h_down) * bump_strength;
|
// vec3 nmap = godot_convolution(UV, uvt);
|
||||||
vec3 normal_diff_map = normalize(vec3(dx, dy, 1.0));
|
NORMAL_MAP = nmap / 2.0 + 0.5;
|
||||||
NORMAL_MAP = normal_diff_map / 2.0 + 0.5;
|
|
||||||
|
|
||||||
// add fresnel
|
// add fresnel
|
||||||
vec3 world_normal = mat3(TANGENT, BINORMAL, NORMAL) * normal_diff_map;
|
vec3 world_normal = mat3(TANGENT, BINORMAL, NORMAL) * nmap;
|
||||||
EMISSION += rim_glow(
|
EMISSION += rim_glow(
|
||||||
world_normal,
|
world_normal,
|
||||||
VIEW,
|
VIEW,
|
||||||
|
21
src/world/grunk_beast/behaviors/actions/await_signal.gd
Normal file
21
src/world/grunk_beast/behaviors/actions/await_signal.gd
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
@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)
|
@ -0,0 +1 @@
|
|||||||
|
uid://bjgvke8pjbdiq
|
@ -0,0 +1,15 @@
|
|||||||
|
@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
|
@ -0,0 +1 @@
|
|||||||
|
uid://tjiapxgue0vf
|
@ -0,0 +1,17 @@
|
|||||||
|
@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
|
@ -0,0 +1 @@
|
|||||||
|
uid://ccifed50rmjm2
|
@ -0,0 +1,7 @@
|
|||||||
|
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
|
@ -0,0 +1 @@
|
|||||||
|
uid://yar3g43pb3fm
|
@ -0,0 +1,12 @@
|
|||||||
|
@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
|
@ -0,0 +1 @@
|
|||||||
|
uid://cx8cifdmdrlpe
|
13
src/world/grunk_beast/behaviors/actions/set_player_target.gd
Normal file
13
src/world/grunk_beast/behaviors/actions/set_player_target.gd
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
@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
|
@ -0,0 +1 @@
|
|||||||
|
uid://rdfsxwehjjrd
|
@ -0,0 +1,21 @@
|
|||||||
|
@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
|
@ -0,0 +1 @@
|
|||||||
|
uid://dj7a2tj4cqap2
|
@ -0,0 +1,15 @@
|
|||||||
|
@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
|
@ -0,0 +1 @@
|
|||||||
|
uid://du7uk56300y28
|
@ -0,0 +1,32 @@
|
|||||||
|
@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
|
@ -0,0 +1 @@
|
|||||||
|
uid://dlbmi25edn8b7
|
17
src/world/grunk_beast/behaviors/conditions/point_in_range.gd
Normal file
17
src/world/grunk_beast/behaviors/conditions/point_in_range.gd
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
@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
|
@ -0,0 +1 @@
|
|||||||
|
uid://o625e667ig2e
|
@ -0,0 +1,9 @@
|
|||||||
|
@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
|
@ -0,0 +1 @@
|
|||||||
|
uid://rpsd3i11lnur
|
49
src/world/grunk_beast/behaviors/decorators/random_chance.gd
Normal file
49
src/world/grunk_beast/behaviors/decorators/random_chance.gd
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
@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
|
@ -0,0 +1 @@
|
|||||||
|
uid://c7n3lak5yhrpv
|
@ -2,13 +2,21 @@ class_name GrunkBeast extends CharacterBody3D
|
|||||||
## Grunk beast controller
|
## Grunk beast controller
|
||||||
|
|
||||||
#region Constants
|
#region Constants
|
||||||
const STALKING_SOUND_LIMIT := 25.0
|
const ANGER_KEY := "anger_level"
|
||||||
|
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 base_speed := 80.0
|
@export var speed_curve: Curve
|
||||||
@export var pursuit_speed := 360.0
|
@export var anger_level: float:
|
||||||
|
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):
|
||||||
@ -29,35 +37,81 @@ 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:
|
||||||
model.play_spawn_animation()
|
start_spawn()
|
||||||
behavior.disable()
|
|
||||||
model.spawn_animation_finished.connect(behavior.enable)
|
|
||||||
|
|
||||||
|
|
||||||
func is_pursuing() -> bool:
|
func start_spawn() -> void:
|
||||||
return blackboard.has_value("pursuit_target")
|
model.play_spawn_animation()
|
||||||
|
root_block.await_signal(model.spawn_animation_finished)
|
||||||
|
# Set point of interest to spawn point
|
||||||
func is_stalking() -> bool:
|
point_of_interest = global_position
|
||||||
return false # TODO
|
|
||||||
|
|
||||||
|
|
||||||
func get_speed() -> float:
|
func get_speed() -> float:
|
||||||
if is_pursuing():
|
return speed_curve.sample(anger_level)
|
||||||
return pursuit_speed
|
|
||||||
return base_speed
|
|
||||||
|
|
||||||
|
|
||||||
func path_shorter_than(target: Vector3, limit: float) -> bool:
|
func path_shorter_than(target: Vector3, limit: float) -> bool:
|
||||||
@ -89,25 +143,19 @@ func path_shorter_than(target: Vector3, limit: float) -> bool:
|
|||||||
return true
|
return true
|
||||||
|
|
||||||
|
|
||||||
## Clear this beast's pursuit and stalking targets
|
func _physics_process(_delta: float) -> void:
|
||||||
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() * delta
|
motion = relative_pos.normalized() * get_speed()
|
||||||
|
|
||||||
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 * delta
|
velocity += gravity
|
||||||
|
|
||||||
if motion:
|
if motion:
|
||||||
model.set_target_rotation(atan2(motion.x, motion.z))
|
model.set_target_rotation(atan2(motion.x, motion.z))
|
||||||
@ -115,12 +163,20 @@ 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:
|
||||||
# Check that the source isn't too far away, e.g. a sound from another room
|
point_of_interest = source
|
||||||
if behavior.enabled and path_shorter_than(source, STALKING_SOUND_LIMIT):
|
if sound_detection_cooldown.is_stopped():
|
||||||
blackboard.set_value("stalking_target", source)
|
anger_level += GrunkBeast.anger_noise
|
||||||
stalking_timer.start()
|
if source.distance_to(self.global_position) <= GrunkBeast.provocation_range:
|
||||||
|
anger_level += GrunkBeast.anger_noise_near
|
||||||
|
sound_detection_cooldown.start()
|
||||||
|
# TODO animation?
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
@ -132,3 +188,21 @@ 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
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
[gd_scene load_steps=35 format=3 uid="uid://ehf5sg3ahvbf"]
|
[gd_scene load_steps=40 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,20 +14,31 @@
|
|||||||
[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://8hn4kne15ac5" path="res://addons/beehave/nodes/composites/selector.gd" id="12_dkcdj"]
|
[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://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://c5cikaa68tsto" path="res://src/world/grunk_beast/behaviors/actions/set_player_priority_target.gd" id="14_csisu"]
|
[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://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
|
||||||
@ -38,20 +49,21 @@ 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_d4ex2"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_6qixb"]
|
||||||
radius = 20.0
|
radius = 6.0
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_oons1"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_d4ex2"]
|
||||||
radius = 4.0
|
radius = 6.2
|
||||||
|
|
||||||
[sub_resource type="SphereShape3D" id="SphereShape3D_lak6w"]
|
[sub_resource type="SphereShape3D" id="SphereShape3D_lak6w"]
|
||||||
radius = 10.0
|
radius = 12.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")
|
||||||
@ -60,12 +72,22 @@ 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")
|
||||||
@ -99,20 +121,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="PursuitRange" type="Area3D" parent="."]
|
[node name="PouncingRange" type="Area3D" parent="."]
|
||||||
collision_layer = 0
|
collision_layer = 0
|
||||||
collision_mask = 8
|
collision_mask = 8
|
||||||
|
|
||||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="PursuitRange"]
|
[node name="CollisionShape3D" type="CollisionShape3D" parent="PouncingRange"]
|
||||||
|
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
|
||||||
@ -120,11 +142,13 @@ 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="StalkingTimer" type="Timer" parent="."]
|
[node name="SoundDetectionCooldown" 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")
|
||||||
@ -136,151 +160,253 @@ 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="GrabSequence" type="Node" parent="GrunkBeastBehavior/StateSelector"]
|
[node name="InverterDecorator" 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="IsTargetInGrabbingRange" type="Node" parent="GrunkBeastBehavior/StateSelector/GrabSequence" node_paths=PackedStringArray("area")]
|
[node name="IncrementBeastAnger" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence"]
|
||||||
|
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/GrabSequence"]
|
[node name="GrabCooldown" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/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/GrabSequence/GrabCooldown"]
|
[node name="GrabTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/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="PursuitSequence" type="Node" parent="GrunkBeastBehavior/StateSelector"]
|
[node name="ChaseSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector"]
|
||||||
script = ExtResource("12_xde72")
|
script = ExtResource("12_xde72")
|
||||||
metadata/_custom_type_script = "uid://dcojdhvj8qcw0"
|
metadata/_custom_type_script = "uid://dcojdhvj8qcw0"
|
||||||
|
|
||||||
[node name="TargetSelector" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitSequence"]
|
[node name="TargetReachable" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/ChaseSequence"]
|
||||||
script = ExtResource("12_dkcdj")
|
script = ExtResource("32_6qixb")
|
||||||
metadata/_custom_type_script = "uid://8hn4kne15ac5"
|
metadata/_custom_type_script = "uid://rpsd3i11lnur"
|
||||||
|
|
||||||
[node name="SetPlayerPriorityTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitSequence/TargetSelector"]
|
[node name="TravelToDestination" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/ChaseSequence"]
|
||||||
script = ExtResource("14_csisu")
|
|
||||||
metadata/_custom_type_script = "uid://c5cikaa68tsto"
|
|
||||||
|
|
||||||
[node name="TargetInPursuitRange" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitSequence/TargetSelector" node_paths=PackedStringArray("area")]
|
|
||||||
script = ExtResource("9_xuag8")
|
|
||||||
blackboard_key = "pursuit_target"
|
|
||||||
area = NodePath("../../../../../PursuitRange")
|
|
||||||
metadata/_custom_type_script = "uid://7k5hor1omsxc"
|
|
||||||
|
|
||||||
[node name="GetTargetFromAggroRange" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitSequence/TargetSelector" node_paths=PackedStringArray("area")]
|
|
||||||
script = ExtResource("13_x8l6r")
|
|
||||||
blackboard_key = "pursuit_target"
|
|
||||||
area = NodePath("../../../../../AggroRange")
|
|
||||||
metadata/_custom_type_script = "uid://b34l3v4sr8rmq"
|
|
||||||
|
|
||||||
[node name="UpdateStalkingTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitSequence"]
|
|
||||||
script = ExtResource("16_lak6w")
|
|
||||||
metadata/_custom_type_script = "uid://yw2u7rlr0whk"
|
|
||||||
|
|
||||||
[node name="PursueTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitSequence"]
|
|
||||||
script = ExtResource("14_x8l6r")
|
|
||||||
blackboard_key = "pursuit_target"
|
|
||||||
metadata/_custom_type_script = "uid://bkdwuqv4tudka"
|
|
||||||
|
|
||||||
[node name="AlwaysFailDecorator" type="Node" parent="GrunkBeastBehavior/StateSelector"]
|
|
||||||
script = ExtResource("15_oons1")
|
|
||||||
metadata/_custom_type_script = "uid://dwfdg523bk776"
|
|
||||||
|
|
||||||
[node name="ErasePursuitTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/AlwaysFailDecorator"]
|
|
||||||
script = ExtResource("15_4b27i")
|
|
||||||
key = "pursuit_target"
|
|
||||||
metadata/_custom_type_script = "uid://demv7xh27ouvr"
|
|
||||||
|
|
||||||
[node name="StalkingSequence" type="Node" parent="GrunkBeastBehavior/StateSelector"]
|
|
||||||
script = ExtResource("12_xde72")
|
|
||||||
metadata/_custom_type_script = "uid://dcojdhvj8qcw0"
|
|
||||||
|
|
||||||
[node name="StalkingTimerRunning" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence" node_paths=PackedStringArray("timer")]
|
|
||||||
script = ExtResource("16_oons1")
|
|
||||||
timer = NodePath("../../../../StalkingTimer")
|
|
||||||
metadata/_custom_type_script = "uid://h0cp58nswpml"
|
|
||||||
|
|
||||||
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence"]
|
|
||||||
script = ExtResource("10_kjykp")
|
|
||||||
blackboard_key = "stalking_target"
|
|
||||||
metadata/_custom_type_script = "uid://u1ntpwjwjqhj"
|
|
||||||
|
|
||||||
[node name="TravelToDestination" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence"]
|
|
||||||
script = ExtResource("14_4y64f")
|
script = ExtResource("14_4y64f")
|
||||||
metadata/_custom_type_script = "uid://om57w2acvgb7"
|
metadata/_custom_type_script = "uid://om57w2acvgb7"
|
||||||
|
|
||||||
[node name="RandomDelay" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence"]
|
[node name="FrustrationSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector"]
|
||||||
script = ExtResource("11_mbqcc")
|
script = ExtResource("12_xde72")
|
||||||
mean_time = 4.0
|
metadata/_custom_type_script = "uid://dcojdhvj8qcw0"
|
||||||
st_dev_time = 0.6
|
|
||||||
wait_time = 3.98107
|
|
||||||
metadata/_custom_type_script = "uid://beyk2xtbjrsg4"
|
|
||||||
|
|
||||||
[node name="RandomStalkingBehavior" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence/RandomDelay"]
|
[node name="HasLineOfSight" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/FrustrationSequence" node_paths=PackedStringArray("exclusions", "sight_origin")]
|
||||||
script = ExtResource("24_xs4mp")
|
script = ExtResource("32_urnsk")
|
||||||
use_weights = true
|
blackboard_key = "pursuit_target"
|
||||||
Weights/PickRandomStalkTarget = 10
|
exclusions = [NodePath("../../../../../../../..")]
|
||||||
Weights/SniffSequence = 1
|
sight_origin = NodePath("../../../../../../../../CollisionShape3D/SightOrigin")
|
||||||
metadata/_custom_type_script = "uid://dvnmhlldp23hg"
|
metadata/_custom_type_script = "uid://dlbmi25edn8b7"
|
||||||
|
|
||||||
[node name="PickRandomStalkTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence/RandomDelay/RandomStalkingBehavior"]
|
[node name="FrustrationCooldown" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/FrustrationSequence"]
|
||||||
script = ExtResource("24_asd50")
|
script = ExtResource("10_ntlom")
|
||||||
blackboard_key = "stalking_target"
|
wait_time = 1.0
|
||||||
metadata/_custom_type_script = "uid://ubcelage67hs"
|
metadata/_custom_type_script = "uid://2qri6rrfv8ui"
|
||||||
|
|
||||||
[node name="SniffSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence/RandomDelay/RandomStalkingBehavior"]
|
[node name="GetFrustrated" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/FrustrationSequence/FrustrationCooldown"]
|
||||||
|
script = ExtResource("31_6qixb")
|
||||||
|
settings_key = "game/gameplay/beast/anger_pursuit_frustrated"
|
||||||
|
delta = 6.0
|
||||||
|
metadata/_custom_type_script = "uid://ccifed50rmjm2"
|
||||||
|
|
||||||
|
[node name="BoredomCooldown" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector"]
|
||||||
|
script = ExtResource("10_ntlom")
|
||||||
|
metadata/_custom_type_script = "uid://2qri6rrfv8ui"
|
||||||
|
|
||||||
|
[node name="GetBored" type="Node" parent="GrunkBeastBehavior/StateSelector/PursuitMode/AlwaysSucceedDecorator/PursuitSequence/ActionSelector/BoredomCooldown"]
|
||||||
|
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")
|
script = ExtResource("8_0gxpq")
|
||||||
metadata/_custom_type_script = "uid://cg016dbe7gs1x"
|
metadata/_custom_type_script = "uid://cg016dbe7gs1x"
|
||||||
|
|
||||||
[node name="Sniff" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence/RandomDelay/RandomStalkingBehavior/SniffSequence"]
|
[node name="IncrementBeastAnger" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite"]
|
||||||
script = ExtResource("26_lak6w")
|
script = ExtResource("31_6qixb")
|
||||||
metadata/_custom_type_script = "uid://bksvlal4gjhfr"
|
settings_key = "game/gameplay/beast/anger_pursuit_frustrated"
|
||||||
|
delta = 4.0
|
||||||
|
metadata/_custom_type_script = "uid://ccifed50rmjm2"
|
||||||
|
|
||||||
[node name="SetTargetFromArea" type="Node" parent="GrunkBeastBehavior/StateSelector/StalkingSequence/RandomDelay/RandomStalkingBehavior/SniffSequence" node_paths=PackedStringArray("area")]
|
[node name="ActionSelector" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite"]
|
||||||
script = ExtResource("13_x8l6r")
|
script = ExtResource("7_vvw1q")
|
||||||
blackboard_key = "stalking_target"
|
metadata/_custom_type_script = "uid://cw22yurt5l74k"
|
||||||
area = NodePath("../../../../../../../SniffRange")
|
|
||||||
metadata/_custom_type_script = "uid://b34l3v4sr8rmq"
|
|
||||||
|
|
||||||
[node name="AlwaysFailDecorator2" type="Node" parent="GrunkBeastBehavior/StateSelector"]
|
[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="EraseStalkingTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/AlwaysFailDecorator2"]
|
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/AlwaysFailDecorator"]
|
||||||
script = ExtResource("15_4b27i")
|
script = ExtResource("10_kjykp")
|
||||||
key = "stalking_target"
|
blackboard_key = "point_of_interest"
|
||||||
metadata/_custom_type_script = "uid://demv7xh27ouvr"
|
metadata/_custom_type_script = "uid://u1ntpwjwjqhj"
|
||||||
|
|
||||||
[node name="LurkSequence" type="Node" parent="GrunkBeastBehavior/StateSelector"]
|
[node name="InvestigateAction" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector"]
|
||||||
|
script = ExtResource("12_xde72")
|
||||||
|
metadata/_custom_type_script = "uid://dcojdhvj8qcw0"
|
||||||
|
|
||||||
|
[node name="POIInRange" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction"]
|
||||||
|
script = ExtResource("34_vbkm0")
|
||||||
|
blackboard_key = "point_of_interest"
|
||||||
|
max_range = 6.2
|
||||||
|
metadata/_custom_type_script = "uid://o625e667ig2e"
|
||||||
|
|
||||||
|
[node name="AlwaysSucceedDecorator" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction"]
|
||||||
|
script = ExtResource("35_4alar")
|
||||||
|
metadata/_custom_type_script = "uid://dsf3a8vlolhx8"
|
||||||
|
|
||||||
|
[node name="InvestigateSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator"]
|
||||||
script = ExtResource("8_0gxpq")
|
script = ExtResource("8_0gxpq")
|
||||||
metadata/_custom_type_script = "uid://cg016dbe7gs1x"
|
metadata/_custom_type_script = "uid://cg016dbe7gs1x"
|
||||||
|
|
||||||
[node name="RandomDelay" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkSequence"]
|
[node name="RandomDelay" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence"]
|
||||||
script = ExtResource("11_mbqcc")
|
script = ExtResource("11_mbqcc")
|
||||||
mean_time = 5.0
|
mean_time = 4.0
|
||||||
st_dev_time = 1.0
|
st_dev_time = 0.6
|
||||||
wait_time = 5.28899
|
wait_time = 4.48953
|
||||||
metadata/_custom_type_script = "uid://beyk2xtbjrsg4"
|
metadata/_custom_type_script = "uid://beyk2xtbjrsg4"
|
||||||
|
|
||||||
[node name="PickRandomLurkTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkSequence/RandomDelay"]
|
[node name="PickRandomInvestigationTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomDelay"]
|
||||||
|
script = ExtResource("24_asd50")
|
||||||
|
blackboard_key = "investigation_target"
|
||||||
|
metadata/_custom_type_script = "uid://ubcelage67hs"
|
||||||
|
|
||||||
|
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence"]
|
||||||
|
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")
|
||||||
|
metadata/_custom_type_script = "uid://cg016dbe7gs1x"
|
||||||
|
|
||||||
|
[node name="Sniff" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance/SniffSequence"]
|
||||||
|
script = ExtResource("26_lak6w")
|
||||||
|
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")]
|
||||||
|
script = ExtResource("13_x8l6r")
|
||||||
|
blackboard_key = "point_of_interest"
|
||||||
|
area = NodePath("../../../../../../../../../../../SniffRange")
|
||||||
|
metadata/_custom_type_script = "uid://b34l3v4sr8rmq"
|
||||||
|
|
||||||
|
[node name="IncrementBeastAnger" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomChance/SniffSequence"]
|
||||||
|
script = ExtResource("31_6qixb")
|
||||||
|
settings_key = "game/gameplay/beast/anger_sniff"
|
||||||
|
delta = 40.0
|
||||||
|
metadata/_custom_type_script = "uid://ccifed50rmjm2"
|
||||||
|
|
||||||
|
[node name="TravelSequence" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector"]
|
||||||
|
script = ExtResource("8_0gxpq")
|
||||||
|
metadata/_custom_type_script = "uid://cg016dbe7gs1x"
|
||||||
|
|
||||||
|
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/SequenceComposite/ActionSelector/TravelSequence"]
|
||||||
|
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")
|
||||||
|
mean_time = 9.0
|
||||||
|
st_dev_time = 1.0
|
||||||
|
wait_time = 9.31084
|
||||||
|
metadata/_custom_type_script = "uid://beyk2xtbjrsg4"
|
||||||
|
|
||||||
|
[node name="PickRandomLurkTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode/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/LurkSequence"]
|
[node name="SetNavTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode"]
|
||||||
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/LurkSequence"]
|
[node name="TravelToDestination" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode"]
|
||||||
script = ExtResource("14_4y64f")
|
script = ExtResource("14_4y64f")
|
||||||
metadata/_custom_type_script = "uid://om57w2acvgb7"
|
metadata/_custom_type_script = "uid://om57w2acvgb7"
|
||||||
|
|
||||||
@ -289,6 +415,49 @@ 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"]
|
||||||
|
@ -24,7 +24,9 @@ var _busy := false
|
|||||||
func trigger() -> void:
|
func trigger() -> void:
|
||||||
if not _busy:
|
if not _busy:
|
||||||
_busy = true
|
_busy = true
|
||||||
World.instance.manager.raise_alert(ALERT_DELTA)
|
if World.instance and World.instance.manager:
|
||||||
|
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()
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
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)
|
||||||
|
|
||||||
|
@ -1,6 +1 @@
|
|||||||
extends Node
|
extends Node
|
||||||
|
|
||||||
|
|
||||||
func _ready() -> void:
|
|
||||||
print("PROJECT SETTINGS")
|
|
||||||
print(ProjectSettings.get_property_list())
|
|
||||||
|
@ -1,6 +1,33 @@
|
|||||||
[gd_scene load_steps=2 format=3 uid="uid://db8w8eljku535"]
|
[gd_scene load_steps=6 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"
|
||||||
|
@ -2,10 +2,29 @@
|
|||||||
|
|
||||||
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).
|
97
vault/elements/grunk beast behavior tree.canvas
Normal file
97
vault/elements/grunk beast behavior tree.canvas
Normal file
@ -0,0 +1,97 @@
|
|||||||
|
{
|
||||||
|
"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"}
|
||||||
|
]
|
||||||
|
}
|
@ -13,21 +13,77 @@ 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
|
||||||
Behavior changes based on [[grunk alert]]
|
See [[grunk beast behavior tree.canvas|grunk beast behavior tree]].
|
||||||
##### LEVEL 0 - Unaware
|
Related to [[grunk alert]].
|
||||||
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.
|
|
||||||
|
|
||||||
Can we orchestrate a spooky sighting? ([[meet spook]]?)
|
The beast is inactive below alert level 2. When level 2 is reached, the beast [[#Spawning|spawns]] in the vicinity of the player.
|
||||||
##### LEVEL 2 - Aggressive
|
|
||||||
Beast will pursue the player on sight.
|
At a high level, there are broadly three behavior types we want the beast to have:
|
||||||
##### LEVEL 3 - Predatory
|
- Lurking (unaware of the player, just meandering about)
|
||||||
Beast will pursue player automatically and relentlessly.
|
- When lurking, the beast randomly wanders between preset lurk points.
|
||||||
##### LEVEL 4 - Swarming
|
- Tracking (actively looking for the player)
|
||||||
Beasts spawn at every spawn point, all pursuing the player.
|
- When tracking, the beast investigates the latest **point-of-interest** (POI)
|
||||||
##### LEVEL 5 - He's right behind me, isn't he?
|
- Pursuit (chasing the player)
|
||||||
Unavoidable death. Show cutscene with player grabbed by beast.
|
- When in pursuit, the beast directly chases the player.
|
||||||
|
|
||||||
|
|
||||||
The player can reset the alert level to 2 by returning to the safe zone.
|
The beast's behavior while active is controlled by _anger level_.
|
||||||
|
#### 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.
|
Loading…
x
Reference in New Issue
Block a user