Compare commits

...

8 Commits

Author SHA1 Message Date
667aa38cda Avoid adding loaded scene to tree until all loading is finished.
Some checks failed
linting & formatting / build (push) Failing after 32s
itch.io publish action / build (linux64, x86_64) (push) Successful in 2m22s
itch.io publish action / build (osx, app) (push) Successful in 2m24s
itch.io publish action / build (win64, exe) (push) Successful in 2m30s
2025-09-07 01:45:25 -06:00
35a03797f7 Beast & alert functions in debug menu 2025-09-07 00:52:29 -06:00
9c26eb24d0 Shambler spawn tweaks 2025-09-07 00:52:16 -06:00
2d91fd3082 Fixed spook manager not actually filtering spawners based on sightlines 2025-09-07 00:19:04 -06:00
0740f08941 Tweaks to text copy 2025-09-07 00:07:20 -06:00
54dbf34d18 Load a room with expensive stuff in it on game start to precache things 2025-09-07 00:05:39 -06:00
ddf0e2cccc TransientFloorSpawner removal is persistent 2025-09-06 23:29:40 -06:00
5440366f52 I don't wanna jinx it but I think I fixed the issue with the beast getting stuck on nav links 2025-09-06 21:51:34 -06:00
24 changed files with 270 additions and 116 deletions

View File

@ -79,9 +79,9 @@ ACTION_select_manual,"Select manual"
ACTION_pause,Pause
,
HUD_WARNING,WARNING
HUD_ALERT_MSG,"ANTIPSIONIC SURGE DETECTED\nEXERCISE EXTREME CAUTION"
HUD_ALERT_MSG,"ANTI-PSIONIC SURGE DETECTED\nEXERCISE EXTREME CAUTION"
HUD_TANK_WARNING,"TANK FULL\nRETURN TO SHIP"
HUD_ALERT_CLEAR_MSG_1,"ADMINISTERING EMERGENCY PROPSIONIC DOSE..."
HUD_ALERT_CLEAR_MSG_1,"ADMINISTERING EMERGENCY COUNTER-PSIONIC DOSE..."
HUD_ALERT_CLEAR_MSG_2,COMPLETE!
,
INTERACTIVE_SCANNER_LABEL,"Retinal Scanner"

1 keys en
79 ACTION_pause Pause
80
81 HUD_WARNING WARNING
82 HUD_ALERT_MSG ANTIPSIONIC SURGE DETECTED\nEXERCISE EXTREME CAUTION ANTI-PSIONIC SURGE DETECTED\nEXERCISE EXTREME CAUTION
83 HUD_TANK_WARNING TANK FULL\nRETURN TO SHIP
84 HUD_ALERT_CLEAR_MSG_1 ADMINISTERING EMERGENCY PROPSIONIC DOSE... ADMINISTERING EMERGENCY COUNTER-PSIONIC DOSE...
85 HUD_ALERT_CLEAR_MSG_2 COMPLETE!
86
87 INTERACTIVE_SCANNER_LABEL Retinal Scanner

View File

@ -0,0 +1,31 @@
[gd_scene load_steps=7 format=3 uid="uid://dtuwt3kemds6o"]
[ext_resource type="Material" uid="uid://cqjr3cbxtfg2j" path="res://assets/materials/grunk_overlays/gunk_overlay.material" id="1_wo7bt"]
[ext_resource type="Material" uid="uid://c1vy4bkwb1g5m" path="res://assets/materials/grunk_overlays/lowrez_overlay.material" id="2_oj27o"]
[ext_resource type="Material" uid="uid://dutkfm4ek0ysh" path="res://assets/materials/grunk_overlays/bright_overlay.material" id="3_41thd"]
[ext_resource type="PackedScene" uid="uid://2yqi5u5eo025" path="res://src/world/gunk_node/grunk_nodule.tscn" id="4_3phbs"]
[ext_resource type="PackedScene" uid="uid://brrd33217oplv" path="res://src/world/grunk_beast/shambler/shambler.tscn" id="5_ynncq"]
[sub_resource type="QuadMesh" id="QuadMesh_3qnro"]
[node name="PrecacheRoom" type="Node3D"]
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
material_overlay = ExtResource("1_wo7bt")
mesh = SubResource("QuadMesh_3qnro")
[node name="MeshInstance3D2" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -3)
material_overlay = ExtResource("2_oj27o")
mesh = SubResource("QuadMesh_3qnro")
[node name="MeshInstance3D3" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -6)
material_overlay = ExtResource("3_41thd")
mesh = SubResource("QuadMesh_3qnro")
[node name="GrunkNodule" parent="." instance=ExtResource("4_3phbs")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, 0)
[node name="Shambler" parent="." instance=ExtResource("5_ynncq")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 0, -3)

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=26 format=3 uid="uid://ogcjwuvqo5rc"]
[gd_scene load_steps=27 format=3 uid="uid://ogcjwuvqo5rc"]
[ext_resource type="Script" uid="uid://dir6earo8ftlp" path="res://levels/testing/beast_spawner_test/beast_spawner_test.gd" id="1_a4s6t"]
[ext_resource type="PackedScene" uid="uid://b47goj32i6sdh" path="res://src/ui/elements/input_prompt/input_prompt.tscn" id="2_pn3sm"]
@ -18,6 +18,7 @@
[ext_resource type="Texture2D" uid="uid://dkilg200w8x4y" path="res://assets/props/vending_machine/vending_machine_M.png" id="15_jafew"]
[ext_resource type="Texture2D" uid="uid://8v7jta2qdvut" path="res://assets/props/vending_machine/vending_machine_N.png" id="16_smofw"]
[ext_resource type="Texture2D" uid="uid://gbvtbiurxrop" path="res://assets/props/vending_machine/vending_machine_R.png" id="17_ks403"]
[ext_resource type="PackedScene" uid="uid://ddmgqfhiv3aag" path="res://levels/ghost_ship/level/corridor_1/corridor_1.tscn" id="19_avb8e"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_hda7d"]
@ -744,3 +745,6 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -40.5, 0.499, 13.5)
[node name="VendingMachine" parent="." instance=ExtResource("12_y2hej")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.5, -6)
surface_material_override/0 = SubResource("StandardMaterial3D_mo4ho")
[node name="Corridor1" parent="." instance=ExtResource("19_avb8e")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 27, 0, 28.5)

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=62 format=4 uid="uid://tvirbm0kgvp8"]
[gd_scene load_steps=59 format=4 uid="uid://tvirbm0kgvp8"]
[ext_resource type="PackedScene" uid="uid://bwe2jdmvinhqd" path="res://src/player/player.tscn" id="1_fgk6j"]
[ext_resource type="Script" uid="uid://68r4ht5ut1ct" path="res://src/game/level.gd" id="1_hv7qb"]
@ -38,28 +38,27 @@ sky_material = SubResource("ProceduralSkyMaterial_1lom2")
background_mode = 2
sky = SubResource("Sky_18csx")
[sub_resource type="WorldBoundaryShape3D" id="WorldBoundaryShape3D_m4lys"]
[sub_resource type="NavigationMesh" id="NavigationMesh_hv7qb"]
vertices = PackedVector3Array(-27.5, 0.499, -20.75, -27.5, 0.499, -17.25, -26.75, 0.499, -18.25, -26.25, 0.499, -19, -26.25, 0.499, -22.25, -26.25, 0.499, -28.25, -26.25, 0.499, -30.75, -27.5, 0.499, -30.75, -27.5, 0.499, -27.5, -13.5, 0.499, -18.5, -13.75, 0.499, -17.25, -11, 0.499, -17.25, -9.75, 0.499, -18.5, -26.25, 0.499, -25.25, -27.5, 0.499, -24, -6.25, 0.499, -18.5, -8.25, 0.499, -17.25, -5.5, 0.499, -17.25, -2.5, 0.499, -17.25, -2.5, 0.499, -18.5, -16.5, 0.499, -17.25, -17, 0.499, -18.5, -18, 0.499, -17.5, -25.75, 0.499, -18.5, -25.5, 0.499, -18.25, -23, 0.499, -18.5, -19.75, 0.499, -17.5, -19.25, 0.499, -17.25, -24.75, 0.499, -17.25, -22, 0.499, -17.25, -20.25, 0.499, -18.5, -21.75, 0.499, -24.25, -24.25, 0.499, -24.25, -24.25, 0.499, -20.25, -21.75, 0.499, -20.25, -11.25, 0.499, -24.25, -13.75, 0.499, -24.25, -13.75, 0.499, -20.25, -11.25, 0.499, -20.25, -3, 0.499, -20.25, -3, 0.499, -24.25, -5.75, 0.499, -24.25, -5.75, 0.499, -20.25, -8.5, 0.499, -20.25, -8.5, 0.499, -24.25, -19, 0.499, -24.25, -19, 0.499, -20.25, -16.5, 0.499, -24.25, -16.5, 0.499, -20.25, -0.25, 0.499, -17.5, 0.75, 0.499, -18, 0.75, 0.499, -19.75, -0.5, 0.499, -19.75, -0.5, 0.499, -9.5, -0.5, 0.499, -6, 0.75, 0.499, -6, 0.75, 0.499, -9.5, 1.75, 0.499, -20.25, 1.75, 0.499, -24.25, -0.75, 0.499, -24.25, -1, 0.499, -20.25, -0.5, 0.499, -13, 0.75, 0.499, -12.75, 0, 0.499, -13.25, -0.5, 0.499, -16.5, -0.25, 0.499, -15.25, 24.25, 0.499, -22, 24.25, 0.499, -24.25, 21.25, 0.499, -24.25, 2.5, 0.499, -19.75, 4.5, 0.499, -24.25, 24.25, 0.499, -10.25, 24.25, 0.499, -12.75, 15.75, 0.499, -24.25, 24.25, 0.499, -19.75, 7.25, 0.499, -24.25, 18.5, 0.499, -24.25, 24.25, 0.499, -17.5, 10, 0.499, -24.25, 24.25, 0.499, -5.5, 24.25, 0.499, -8, 2.5, 0.499, -9.25, 2.5, 0.499, -5.75, 24.25, 0.499, -15, 2.5, 0.499, -16.25, 13, 0.499, -24.25, 2.5, 0.499, -12.75, -21.5, 0.499, -15.5, -24.25, 0.499, -15.5, -24.25, 0.499, -13.25, -24.25, 0.499, 21.75, -24.25, 0.499, 24.25, -21.5, 0.499, 24.25, -2.25, 0.499, -12.75, -2.25, 0.499, -15.5, -5, 0.499, -15.5, -24.25, 0.499, -10.75, -24.25, 0.499, 19.25, -2.25, 0.499, -10, -7.75, 0.499, -15.5, -18.75, 0.499, -15.5, -24.25, 0.499, -8.25, -18.75, 0.499, 24.25, -24.25, 0.499, 16.75, -1.5, 0.499, -3.75, -2.25, 0.499, -4.25, -24.25, 0.499, 4.25, -24.25, 0.499, 6.75, -4.5, 0.499, 24.25, -1.5, 0.499, 24.25, -24.25, 0.499, 9.25, -10.25, 0.499, 24.25, -7.25, 0.499, 24.25, -2.25, 0.499, -7.25, -10.5, 0.499, -15.5, -16, 0.499, -15.5, -24.25, 0.499, -5.75, -16, 0.499, 24.25, -24.25, 0.499, 14.25, -13.25, 0.499, -15.5, -24.25, 0.499, -3.25, -24.25, 0.499, -0.75, -24.25, 0.499, 11.75, -13, 0.499, 24.25, -24.25, 0.499, 1.75, 0.75, 0.499, -4.25, -0.5, 0.499, -4.25, 1.75, 0.499, -3.75, 1.75, 0.499, 24.25, 21.25, 0.499, 24.25, 24.25, 0.499, 24.25, 24.25, 0.499, 20.5, 18.5, 0.499, 24.25, 15.75, 0.499, 24.25, 24.25, 0.499, 16.75, 13, 0.499, 24.25, 7.25, 0.499, 24.25, 24.25, 0.499, 13, 24.25, 0.499, 9.25, 4.5, 0.499, 24.25, 10, 0.499, 24.25, 24.25, 0.499, 1.75, 2.5, 0.499, -4.25, 24.25, 0.499, 5.5, 24.25, 0.499, -2)
polygons = [PackedInt32Array(2, 1, 3), PackedInt32Array(3, 1, 0), PackedInt32Array(3, 0, 4), PackedInt32Array(6, 5, 7), PackedInt32Array(7, 5, 8), PackedInt32Array(10, 9, 11), PackedInt32Array(11, 9, 12), PackedInt32Array(5, 13, 8), PackedInt32Array(8, 13, 14), PackedInt32Array(17, 16, 15), PackedInt32Array(15, 16, 12), PackedInt32Array(13, 4, 14), PackedInt32Array(14, 4, 0), PackedInt32Array(18, 17, 19), PackedInt32Array(19, 17, 15), PackedInt32Array(22, 21, 20), PackedInt32Array(20, 21, 10), PackedInt32Array(10, 21, 9), PackedInt32Array(12, 16, 11), PackedInt32Array(23, 2, 3), PackedInt32Array(2, 23, 24), PackedInt32Array(24, 23, 25), PackedInt32Array(26, 22, 27), PackedInt32Array(27, 22, 20), PackedInt32Array(26, 29, 30), PackedInt32Array(30, 29, 25), PackedInt32Array(25, 29, 28), PackedInt32Array(25, 28, 24), PackedInt32Array(27, 29, 26), PackedInt32Array(34, 33, 31), PackedInt32Array(31, 33, 32), PackedInt32Array(38, 37, 35), PackedInt32Array(35, 37, 36), PackedInt32Array(42, 41, 39), PackedInt32Array(39, 41, 40), PackedInt32Array(44, 41, 43), PackedInt32Array(43, 41, 42), PackedInt32Array(46, 34, 45), PackedInt32Array(45, 34, 31), PackedInt32Array(35, 44, 38), PackedInt32Array(38, 44, 43), PackedInt32Array(48, 46, 47), PackedInt32Array(47, 46, 45), PackedInt32Array(37, 48, 36), PackedInt32Array(36, 48, 47), PackedInt32Array(51, 50, 52), PackedInt32Array(52, 50, 49), PackedInt32Array(56, 55, 53), PackedInt32Array(53, 55, 54), PackedInt32Array(52, 60, 51), PackedInt32Array(51, 60, 57), PackedInt32Array(57, 60, 59), PackedInt32Array(57, 59, 58), PackedInt32Array(63, 62, 61), PackedInt32Array(61, 62, 56), PackedInt32Array(61, 56, 53), PackedInt32Array(39, 40, 60), PackedInt32Array(60, 40, 59), PackedInt32Array(65, 64, 49), PackedInt32Array(49, 64, 52), PackedInt32Array(63, 61, 65), PackedInt32Array(65, 61, 64), PackedInt32Array(68, 67, 66), PackedInt32Array(57, 58, 69), PackedInt32Array(69, 58, 70), PackedInt32Array(73, 72, 71), PackedInt32Array(68, 66, 74), PackedInt32Array(69, 70, 75), PackedInt32Array(74, 77, 68), PackedInt32Array(68, 77, 76), PackedInt32Array(69, 75, 78), PackedInt32Array(80, 79, 73), PackedInt32Array(73, 79, 81), PackedInt32Array(81, 79, 82), PackedInt32Array(77, 83, 76), PackedInt32Array(76, 83, 73), PackedInt32Array(78, 85, 69), PackedInt32Array(69, 85, 84), PackedInt32Array(73, 71, 80), PackedInt32Array(81, 86, 73), PackedInt32Array(73, 83, 72), PackedInt32Array(85, 73, 84), PackedInt32Array(84, 73, 86), PackedInt32Array(89, 88, 87), PackedInt32Array(92, 91, 90), PackedInt32Array(95, 94, 93), PackedInt32Array(96, 89, 87), PackedInt32Array(92, 90, 97), PackedInt32Array(93, 98, 95), PackedInt32Array(95, 98, 99), PackedInt32Array(87, 100, 96), PackedInt32Array(96, 100, 101), PackedInt32Array(92, 97, 102), PackedInt32Array(102, 97, 103), PackedInt32Array(105, 104, 106), PackedInt32Array(106, 104, 107), PackedInt32Array(107, 104, 108), PackedInt32Array(108, 104, 109), PackedInt32Array(110, 107, 111), PackedInt32Array(111, 107, 112), PackedInt32Array(108, 112, 107), PackedInt32Array(98, 113, 99), PackedInt32Array(99, 113, 114), PackedInt32Array(101, 100, 116), PackedInt32Array(116, 100, 115), PackedInt32Array(102, 103, 117), PackedInt32Array(117, 103, 118), PackedInt32Array(121, 120, 119), PackedInt32Array(122, 110, 123), PackedInt32Array(123, 110, 111), PackedInt32Array(124, 121, 119), PackedInt32Array(114, 113, 119), PackedInt32Array(119, 113, 105), PackedInt32Array(119, 105, 124), PackedInt32Array(124, 105, 106), PackedInt32Array(116, 115, 120), PackedInt32Array(120, 115, 119), PackedInt32Array(118, 122, 117), PackedInt32Array(117, 122, 123), PackedInt32Array(126, 54, 125), PackedInt32Array(125, 54, 55), PackedInt32Array(125, 127, 126), PackedInt32Array(126, 127, 104), PackedInt32Array(104, 127, 128), PackedInt32Array(104, 128, 109), PackedInt32Array(131, 130, 129), PackedInt32Array(131, 129, 132), PackedInt32Array(131, 132, 133), PackedInt32Array(133, 135, 131), PackedInt32Array(131, 135, 134), PackedInt32Array(136, 139, 137), PackedInt32Array(137, 139, 138), PackedInt32Array(135, 140, 134), PackedInt32Array(134, 140, 137), PackedInt32Array(142, 141, 127), PackedInt32Array(127, 141, 143), PackedInt32Array(137, 140, 136), PackedInt32Array(82, 79, 142), PackedInt32Array(142, 79, 144), PackedInt32Array(143, 138, 127), PackedInt32Array(127, 138, 139), PackedInt32Array(127, 139, 128), PackedInt32Array(142, 144, 141)]
vertices = PackedVector3Array(-26.25, 0.5, -28.75, -26.25, 0.5, -30.75, -27.5, 0.5, -30.75, -27.5, 0.5, -28.25, -26.25, 0.5, -23.25, -26.25, 0.5, -26, -27.5, 0.5, -25.75, -27.5, 0.5, -23.25, -27.5, 0.5, -20.5, -26.25, 0.5, -20.5, 0.75, 0.5, -18, 0.75, 0.5, -18.75, -0.5, 0.5, -18.75, -0.25, 0.5, -17.5, -0.5, 0.5, -14.75, -0.5, 0.5, -12.75, 0, 0.5, -13.25, -0.25, 0.5, -15.25, -0.5, 0.5, -10.5, 0.75, 0.5, -10.5, 0.75, 0.5, -12.75, -25.5, 0.5, -18.5, -27.5, 0.5, -18.5, -27.5, 0.5, -17.25, -24.75, 0.5, -17.25, -19.25, 0.5, -17.25, -16.25, 0.5, -17.25, -16.25, 0.5, -18.5, -20, 0.5, -18.5, -21, 0.5, -17.5, -23.25, 0.5, -18.5, -22.75, 0.5, -17.5, -22, 0.5, -17.25, -14.25, 0.5, -18.5, -14.25, 0.5, -17.25, -11.5, 0.5, -17.25, -11.5, 0.5, -18.5, -8.5, 0.5, -17.25, -5.5, 0.5, -17.25, -5.5, 0.5, -18.5, -8.5, 0.5, -18.5, -2.5, 0.5, -17.25, -2.5, 0.5, -18.5, 0.75, 0.5, -6.5, 0.75, 0.5, -8.5, -0.5, 0.5, -8.5, -0.5, 0.5, -6.5, 2.25, 0.5, 14.75, 9.25, 0.5, 10, 9.25, 0.5, 7.75, 0, 0.5, 14.75, 0.75, 0.5, -4.25, -0.5, 0.5, -4.25, 9.25, 0.5, 5.5, 9.25, 0.5, 3, 5.25, 0.5, -3.75, 1.25, 0.5, -3.75, -1, 0.5, -3.75, -9.25, 0.5, 12.25, -9.25, 0.5, 14.75, -7, 0.5, 14.75, 6.75, 0.5, 14.75, 9.25, 0.5, 14.75, 9.25, 0.5, 12.25, 9.25, 0.5, -1.5, 9.25, 0.5, -3.75, -5.25, 0.5, -3.75, -9.25, 0.5, -3.75, -9.25, 0.5, -1.5, -4.75, 0.5, 14.75, -9.25, 0.5, 10, 4.5, 0.5, 14.75, 9.25, 0.5, 0.75, -9.25, 0.5, 0.75, -3.25, 0.5, -3.75, -9.25, 0.5, 3, -9.25, 0.5, 5.5, -9.25, 0.5, 7.75, -2.5, 0.5, 14.75)
polygons = [PackedInt32Array(1, 0, 2), PackedInt32Array(2, 0, 3), PackedInt32Array(7, 6, 4), PackedInt32Array(4, 6, 5), PackedInt32Array(6, 3, 5), PackedInt32Array(5, 3, 0), PackedInt32Array(4, 9, 7), PackedInt32Array(7, 9, 8), PackedInt32Array(11, 10, 12), PackedInt32Array(12, 10, 13), PackedInt32Array(17, 16, 14), PackedInt32Array(14, 16, 15), PackedInt32Array(16, 20, 15), PackedInt32Array(15, 20, 19), PackedInt32Array(15, 19, 18), PackedInt32Array(17, 14, 13), PackedInt32Array(13, 14, 12), PackedInt32Array(22, 21, 23), PackedInt32Array(23, 21, 24), PackedInt32Array(29, 28, 25), PackedInt32Array(25, 28, 26), PackedInt32Array(26, 28, 27), PackedInt32Array(31, 24, 30), PackedInt32Array(30, 24, 21), PackedInt32Array(31, 29, 32), PackedInt32Array(32, 29, 25), PackedInt32Array(32, 24, 31), PackedInt32Array(36, 35, 33), PackedInt32Array(33, 35, 34), PackedInt32Array(40, 39, 37), PackedInt32Array(37, 39, 38), PackedInt32Array(39, 42, 38), PackedInt32Array(38, 42, 41), PackedInt32Array(37, 35, 40), PackedInt32Array(40, 35, 36), PackedInt32Array(46, 45, 43), PackedInt32Array(43, 45, 44), PackedInt32Array(48, 47, 49), PackedInt32Array(49, 47, 50), PackedInt32Array(52, 46, 51), PackedInt32Array(51, 46, 43), PackedInt32Array(55, 54, 53), PackedInt32Array(51, 56, 52), PackedInt32Array(52, 56, 57), PackedInt32Array(55, 53, 49), PackedInt32Array(60, 59, 58), PackedInt32Array(63, 62, 61), PackedInt32Array(55, 65, 64), PackedInt32Array(68, 67, 66), PackedInt32Array(60, 58, 69), PackedInt32Array(69, 58, 70), PackedInt32Array(63, 61, 71), PackedInt32Array(55, 64, 72), PackedInt32Array(68, 66, 73), PackedInt32Array(73, 66, 74), PackedInt32Array(57, 56, 75), PackedInt32Array(75, 56, 76), PackedInt32Array(63, 71, 48), PackedInt32Array(48, 71, 47), PackedInt32Array(78, 77, 76), PackedInt32Array(55, 72, 54), PackedInt32Array(69, 70, 78), PackedInt32Array(78, 70, 77), PackedInt32Array(78, 76, 50), PackedInt32Array(50, 76, 49), PackedInt32Array(49, 76, 56), PackedInt32Array(49, 56, 55), PackedInt32Array(73, 74, 75), PackedInt32Array(75, 74, 57)]
geometry_parsed_geometry_type = 1
geometry_collision_mask = 4278190081
agent_height = 2.0
agent_radius = 0.75
region_min_size = 14.0
edge_max_length = 4.0
[sub_resource type="PlaneMesh" id="PlaneMesh_nwuu1"]
size = Vector2(50, 50)
size = Vector2(20, 20)
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_gyhlh"]
data = PackedVector3Array(25, 0, 25, -25, 0, 25, 25, 0, -25, -25, 0, 25, -25, 0, -25, 25, 0, -25)
[sub_resource type="WorldBoundaryShape3D" id="WorldBoundaryShape3D_m4lys"]
[sub_resource type="ConvexPolygonShape3D" id="ConvexPolygonShape3D_qfeop"]
points = PackedVector3Array(-10, 0, -10, -10, 0, 10, 10, 0, -10, 10, 0, 10)
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_u8j4k"]
data = PackedVector3Array(-1.5, 0, -6, -1.5, 0, 6, -1.5, 3, -6, -1.5, 3, -6, -1.5, 0, 6, -1.5, 3, 6, 1.5, 0, 6, 1.5, 0, -6, 1.5, 3, 6, 1.5, 3, 6, 1.5, 0, -6, 1.5, 3, -6, -1.5, 0, 6, -1.5, 0, -6, 1.5, 0, 6, 1.5, 0, 6, -1.5, 0, -6, 1.5, 0, -6, 1.5, 3, 6, 1.5, 3, -6, -1.5, 3, 6, -1.5, 3, 6, 1.5, 3, -6, -1.5, 3, -6)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_e2fuu"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_qfeop"]
resource_local_to_scene = true
albedo_texture = ExtResource("6_e2fuu")
metallic = 1.0
@ -85,7 +84,7 @@ _surfaces = [{
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_hv7qb"]
[sub_resource type="ArrayMesh" id="ArrayMesh_1v8x7"]
resource_local_to_scene = true
_surfaces = [{
"aabb": AABB(-0.375, -0.25, -0.75, 0.75, 0.5, 1.5),
@ -94,7 +93,7 @@ _surfaces = [{
"index_count": 84,
"index_data": PackedByteArray("FgANAAwADAANABcAFwANAA4ADgANABgAGAANAA8ADwANABkAGgAHAAIAAgAHABsAEAABABEAEQABABwAHQAAAAYABgAAAAMACQAUAAgACAAUABUAFQAUAAoACgAUAB4AHgAUAAsACwAUAB8AIAATAAUABQATAAQAIQAiACMAIwAiACQAJQASACYAJgASACcAKAApACoAKgApACsALAAtAC4ALgAtAC8A"),
"lods": [0.108952, PackedByteArray("DAANAA4ADgANAA8AEAABABEAEAARAAYAEQAAAAYABgAAAAMAEQABAAIAAgABAAcABwASAAIABwATABIAEgATAAUABQATAAQACQAUAAgACAAUABUAFQAUAAoACgAUAAsA"), 0.261829, PackedByteArray("AAABAAIAAQAAAAYABgAAAAMAAgABAAcABwAEAAIAAgAEAAUACAAJAAoACgAJAAsA"), 0.524037, PackedByteArray("AAABAAIAAQAAAAMAAgABAAQAAgAEAAUA")],
"material": SubResource("StandardMaterial3D_e2fuu"),
"material": SubResource("StandardMaterial3D_qfeop"),
"name": "Cube",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
@ -104,7 +103,7 @@ _surfaces = [{
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_isly2")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_wxmii"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_0p851"]
resource_local_to_scene = true
albedo_texture = ExtResource("6_e2fuu")
metallic = 1.0
@ -115,7 +114,7 @@ normal_texture = ExtResource("8_wxmii")
ao_enabled = true
texture_filter = 2
[sub_resource type="ArrayMesh" id="ArrayMesh_nsdlh"]
[sub_resource type="ArrayMesh" id="ArrayMesh_uhukx"]
resource_local_to_scene = true
_surfaces = [{
"aabb": AABB(-0.375, -0.25, -0.75, 0.75, 0.5, 1.5),
@ -124,7 +123,7 @@ _surfaces = [{
"index_count": 84,
"index_data": PackedByteArray("FgANAAwADAANABcAFwANAA4ADgANABgAGAANAA8ADwANABkAGgAHAAIAAgAHABsAEAABABEAEQABABwAHQAAAAYABgAAAAMACQAUAAgACAAUABUAFQAUAAoACgAUAB4AHgAUAAsACwAUAB8AIAATAAUABQATAAQAIQAiACMAIwAiACQAJQASACYAJgASACcAKAApACoAKgApACsALAAtAC4ALgAtAC8A"),
"lods": [0.108952, PackedByteArray("DAANAA4ADgANAA8AEAABABEAEAARAAYAEQAAAAYABgAAAAMAEQABAAIAAgABAAcABwASAAIABwATABIAEgATAAUABQATAAQACQAUAAgACAAUABUAFQAUAAoACgAUAAsA"), 0.261829, PackedByteArray("AAABAAIAAQAAAAYABgAAAAMAAgABAAcABwAEAAIAAgAEAAUACAAJAAoACgAJAAsA"), 0.524037, PackedByteArray("AAABAAIAAQAAAAMAAgABAAQAAgAEAAUA")],
"material": SubResource("StandardMaterial3D_wxmii"),
"material": SubResource("StandardMaterial3D_0p851"),
"name": "Cube",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
@ -134,7 +133,7 @@ _surfaces = [{
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_isly2")
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_br5h1"]
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_rrd17"]
resource_local_to_scene = true
albedo_texture = ExtResource("6_e2fuu")
metallic = 1.0
@ -145,7 +144,7 @@ normal_texture = ExtResource("8_wxmii")
ao_enabled = true
texture_filter = 2
[sub_resource type="ArrayMesh" id="ArrayMesh_qluxd"]
[sub_resource type="ArrayMesh" id="ArrayMesh_saqgh"]
resource_local_to_scene = true
_surfaces = [{
"aabb": AABB(-0.375, -0.25, -0.75, 0.75, 0.5, 1.5),
@ -154,7 +153,7 @@ _surfaces = [{
"index_count": 84,
"index_data": PackedByteArray("FgANAAwADAANABcAFwANAA4ADgANABgAGAANAA8ADwANABkAGgAHAAIAAgAHABsAEAABABEAEQABABwAHQAAAAYABgAAAAMACQAUAAgACAAUABUAFQAUAAoACgAUAB4AHgAUAAsACwAUAB8AIAATAAUABQATAAQAIQAiACMAIwAiACQAJQASACYAJgASACcAKAApACoAKgApACsALAAtAC4ALgAtAC8A"),
"lods": [0.108952, PackedByteArray("DAANAA4ADgANAA8AEAABABEAEAARAAYAEQAAAAYABgAAAAMAEQABAAIAAgABAAcABwASAAIABwATABIAEgATAAUABQATAAQACQAUAAgACAAUABUAFQAUAAoACgAUAAsA"), 0.261829, PackedByteArray("AAABAAIAAQAAAAYABgAAAAMAAgABAAcABwAEAAIAAgAEAAUACAAJAAoACgAJAAsA"), 0.524037, PackedByteArray("AAABAAIAAQAAAAMAAgABAAQAAgAEAAUA")],
"material": SubResource("StandardMaterial3D_br5h1"),
"material": SubResource("StandardMaterial3D_rrd17"),
"name": "Cube",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
@ -240,51 +239,6 @@ data = PackedVector3Array(-1, 0, 0.2, -1, -0.4, 0, -1, 0, -0.2, -1, 0, -0.2, -1,
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_o1heh"]
data = PackedVector3Array(-1.5, 0, -1.5, -1.5, 0, 1.5, -1.5, 3, -1.5, -1.5, 3, -1.5, -1.5, 0, 1.5, -1.5, 3, 1.5, -1.5, 0, 1.5, -1.5, 0, -1.5, 1.5, 0, 1.5, 1.5, 0, 1.5, -1.5, 0, -1.5, 1.5, 0, -1.5, 1.5, 3, 1.5, 1.5, 3, -1.5, -1.5, 3, 1.5, -1.5, 3, 1.5, 1.5, 3, -1.5, -1.5, 3, -1.5)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_h6xp0"]
resource_local_to_scene = true
albedo_texture = ExtResource("6_e2fuu")
metallic = 1.0
metallic_texture = ExtResource("7_hv7qb")
roughness_texture = ExtResource("9_nsdlh")
normal_enabled = true
normal_texture = ExtResource("8_wxmii")
ao_enabled = true
texture_filter = 2
[sub_resource type="ArrayMesh" id="ArrayMesh_u2hqf"]
_surfaces = [{
"aabb": AABB(-0.375, -0.25, -0.75, 0.75, 0.5, 1.5),
"format": 34896613377,
"index_count": 84,
"index_data": PackedByteArray("CgAGAAIAAgAEAAoABAAGAAoACwAEAAIADAAGAAQABAAIAAwACwAIAAQADAAIAAYAAgABAAsAAQAIAAsADQABAAIAAgAGAA0ABwABAA0ADQAGAAcACQABAAcACQAIAAEABwAGAA4ACQAHAAUABQAHAA4ABQAIAAkABgAIAA8AAwAIAAUADgAGAAAAAAAGAA8ADgAAAAUADwAIAAAABQAAAAMAAAAIAAMA"),
"lods": [0.108952, PackedByteArray("AgAGAAcABAAGAAIAAgABAAQABwABAAIABAAIAAYAAQAIAAQACQABAAcACQAIAAEACQAHAAUABQAIAAkABwAGAAAABwAAAAUABgAIAAAAAwAIAAUAAAAIAAMABQAAAAMA"), 0.261829, PackedByteArray("AAABAAIAAgABAAQAAQAAAAUABAADAAIAAQADAAQAAgADAAAABQADAAEABQAAAAMA"), 0.524037, PackedByteArray("AAABAAIAAgABAAMAAQAAAAMAAgADAAAA")],
"name": "Cube",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 16,
"vertex_data": PackedByteArray("AAAyM///AADc3f//AAAAAP//zMz//wAAAAAyMwAAAAD//zIzAAAAAAAAzMwAAAAA3N0AAP//AAAhIv////8AACEiAAAAAAAAISL//wAAAAD//zIz//8AAP//zMwAAAAA3N0AAAAAAADc3f////8AAAAAzMz//wAAISIAAP//AAA=")
}]
blend_shape_mode = 0
[sub_resource type="ArrayMesh" id="ArrayMesh_irt7r"]
resource_local_to_scene = true
_surfaces = [{
"aabb": AABB(-0.375, -0.25, -0.75, 0.75, 0.5, 1.5),
"attribute_data": PackedByteArray("/7//P/9v/7//X/8//7//vwAA/78AAP8//6f/v/9H/7//p/+//7//v/+f//f/v////6cAAP/H/wf/n/83/7//P/+X/7//l/8//zf/P/8P/7//x//H/5//x/+/AAD/n/8H/6f/P//H/zf/X/+//0f/P/9v/z//p/8//6f////H//f/D/8//5f/v/+X/z//p/+//6f/P/83/7//R/+//0f/P/9v/z//b/+//1//P/9f/7//N/+//w//v/83/z//D/8/"),
"format": 34896613399,
"index_count": 84,
"index_data": PackedByteArray("FgANAAwADAANABcAFwANAA4ADgANABgAGAANAA8ADwANABkAGgAHAAIAAgAHABsAEAABABEAEQABABwAHQAAAAYABgAAAAMACQAUAAgACAAUABUAFQAUAAoACgAUAB4AHgAUAAsACwAUAB8AIAATAAUABQATAAQAIQAiACMAIwAiACQAJQASACYAJgASACcAKAApACoAKgApACsALAAtAC4ALgAtAC8A"),
"lods": [0.108952, PackedByteArray("DAANAA4ADgANAA8AEAABABEAEAARAAYAEQAAAAYABgAAAAMAEQABAAIAAgABAAcABwASAAIABwATABIAEgATAAUABQATAAQACQAUAAgACAAUABUAFQAUAAoACgAUAAsA"), 0.261829, PackedByteArray("AAABAAIAAQAAAAYABgAAAAMAAgABAAcABwAEAAIAAgAEAAUACAAJAAoACgAJAAsA"), 0.524037, PackedByteArray("AAABAAIAAQAAAAMAAgABAAQAAgAEAAUA")],
"material": SubResource("StandardMaterial3D_h6xp0"),
"name": "Cube",
"primitive": 3,
"uv_scale": Vector4(0, 0, 0, 0),
"vertex_count": 48,
"vertex_data": PackedByteArray("AAAyM///VNXc3f//AAD/////zMz//1TVAAAyMwAAVNUAADIzAAD8xQAAMjP///zFAADMzAAAVNX//zIzAABU1QAAzMwAAP//AAAyMwAA///c3f//AAD/////MjMAAP/////MzP///7/c3QAA///svyEi/////0TBAAAyM///Fr8hIv//AAD//yEi////////3N0AAP///MUhIgAAAAD8xSEiAAAAAP//ISL//wAA/////zIz////v9zd//////+/AADMzP//DMEhIgAA//+cvP//zMwAAFTV//8yM///VNXc3f///////wAAzMz//1TV///MzAAA///c3QAAAAD//yEiAAD///zFISL//wAAqukhIv////+q6QAAzMwAAKrpAADMzP//qunc3QAAAAD8xf//MjMAAPzF//8yM////MXc3f////+q6dzd//8AAKrp///MzP//qun//8zMAACq6dzdAAAAAP+/ISIAAAAA/7/c3QAA////vyEiAAD///+/VFWqqv9//7+qKqoqVFWqqv45/pz+Of6cVFWqqqoqqir/P/+//z//v/7A/0C2QLbA/3//f/9//3//f/9//3//f/9//7//f/+//xwBRv45/pwOQA3A/z//v/9//3//f/9//3//f/9//3+qKqoqqiqqKv9//79UVaqq0sDSQKlCqML+Of6cCWoEtQlqBLUJagS1CWoEtf8cAUb/HAFG/xwBRgQ19hUENfYVBDX2FQQ19hUAAP9/AAD/fwAA/38AAP9/")
}]
blend_shape_mode = 0
shadow_mesh = SubResource("ArrayMesh_u2hqf")
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_tx4qh"]
data = PackedVector3Array(1.5, 0, 1.5, -1.5, 0, 1.5, 1.5, 0, -1.5, 1.5, 0, -1.5, -1.5, 0, 1.5, -1.5, 0, -1.5)
@ -338,28 +292,28 @@ transform = Transform3D(0.866025, -0.156955, -0.474726, 0.5, 0.271854, 0.82225,
environment = SubResource("Environment_pwykw")
[node name="GrunkBeast" parent="." instance=ExtResource("2_1lom2")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -11.7, 1.5, -18.3)
spawn_on_load = null
anger_level = null
point_of_interest = null
debug_destroy = null
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -26.7, 0, -24.3)
spawn_on_load = true
[node name="WorldFloor" type="StaticBody3D" parent="." groups=["PlasticMaterial"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.001, 0)
collision_layer = 5
[node name="CollisionShape3D" type="CollisionShape3D" parent="WorldFloor"]
shape = SubResource("WorldBoundaryShape3D_m4lys")
[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."]
navigation_mesh = SubResource("NavigationMesh_hv7qb")
[node name="WorldFloor" type="StaticBody3D" parent="NavigationRegion3D" groups=["PlasticMaterial"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.001, 0)
collision_layer = 5
[node name="AreaFloor" type="StaticBody3D" parent="NavigationRegion3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 5.5)
[node name="MeshInstance3D" type="MeshInstance3D" parent="NavigationRegion3D/WorldFloor"]
[node name="MeshInstance3D" type="MeshInstance3D" parent="NavigationRegion3D/AreaFloor"]
mesh = SubResource("PlaneMesh_nwuu1")
skeleton = NodePath("../../..")
[node name="CollisionShape3D3" type="CollisionShape3D" parent="NavigationRegion3D/WorldFloor"]
shape = SubResource("ConcavePolygonShape3D_gyhlh")
[node name="CollisionShape3D" type="CollisionShape3D" parent="NavigationRegion3D/WorldFloor"]
shape = SubResource("WorldBoundaryShape3D_m4lys")
[node name="CollisionShape3D" type="CollisionShape3D" parent="NavigationRegion3D/AreaFloor"]
shape = SubResource("ConvexPolygonShape3D_qfeop")
[node name="Corridor1" type="Node3D" parent="NavigationRegion3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -10.5)
@ -383,17 +337,17 @@ source_gunk_material = ExtResource("7_nsdlh")
[node name="CrateLong" parent="NavigationRegion3D/Corridor1/Hallway1" instance=ExtResource("5_18csx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0.25, -5.9)
mesh = SubResource("ArrayMesh_hv7qb")
mesh = SubResource("ArrayMesh_1v8x7")
skeleton = NodePath("")
[node name="CrateLong3" parent="NavigationRegion3D/Corridor1/Hallway1" instance=ExtResource("5_18csx")]
transform = Transform3D(0.258819, -0.965926, 0, 0.965926, 0.258819, 0, 0, 0, 1, 1.2, 0.426927, -3.9)
mesh = SubResource("ArrayMesh_nsdlh")
mesh = SubResource("ArrayMesh_uhukx")
skeleton = NodePath("")
[node name="CrateLong2" parent="NavigationRegion3D/Corridor1/Hallway1" instance=ExtResource("5_18csx")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0.75, -5.9)
mesh = SubResource("ArrayMesh_qluxd")
mesh = SubResource("ArrayMesh_saqgh")
skeleton = NodePath("")
[node name="FloatingDust" parent="NavigationRegion3D/Corridor1/Hallway1" instance=ExtResource("10_br5h1")]
@ -498,7 +452,7 @@ process_material = SubResource("ParticleProcessMaterial_m3sro")
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, -1.5)
[node name="TarpCrateLogo" parent="NavigationRegion3D/Corridor1/Hallway2" instance=ExtResource("19_iuevq")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0.8, -11.4)
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0.8, -14.4)
skeleton = NodePath("")
[node name="Hallway3" type="MeshInstance3D" parent="NavigationRegion3D/Corridor1"]
@ -527,11 +481,6 @@ process_material = SubResource("ParticleProcessMaterial_m3sro")
[node name="OverheadLight" parent="NavigationRegion3D/Corridor1/Hallway3" instance=ExtResource("12_h6xp0")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 3, -1.5)
[node name="CrateLong" parent="NavigationRegion3D/Corridor1/Hallway3" instance=ExtResource("5_18csx")]
transform = Transform3D(-4.37114e-08, -0.965926, 0.258819, 1.77636e-15, 0.258819, 0.965926, -1, 4.2222e-08, -1.13133e-08, 1.06072, 0.789149, 6.6)
mesh = SubResource("ArrayMesh_irt7r")
skeleton = NodePath("../..")
[node name="T-Junction2" type="MeshInstance3D" parent="NavigationRegion3D/Corridor1"]
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -27, 0, -7.5)
mesh = ExtResource("21_e5vs1")
@ -626,5 +575,17 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -27, 1.5, -19.5)
[node name="Bulkhead" parent="NavigationRegion3D" instance=ExtResource("27_18csx")]
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -1.5, 0, -18)
[node name="Bulkhead4" parent="NavigationRegion3D" instance=ExtResource("27_18csx")]
transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 7.12879e-07, 0, -9.6)
[node name="Bulkhead2" parent="NavigationRegion3D" instance=ExtResource("27_18csx")]
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, -15.2724, 0, -18)
[node name="Bulkhead3" parent="NavigationRegion3D" instance=ExtResource("27_18csx")]
transform = Transform3D(1, 0, 1.06581e-14, 0, 1, 0, -1.06581e-14, 0, 1, -26.9809, 0, -19.5)
[connection signal="activated" from="NavigationRegion3D/Corridor1/Hallway1/SwitchA2" to="NavigationRegion3D/Bulkhead" method="open"]
[connection signal="activated" from="NavigationRegion3D/Corridor1/Hallway1/SwitchA2" to="NavigationRegion3D/Bulkhead4" method="open"]
[connection signal="activated" from="NavigationRegion3D/Corridor1/Hallway1/SwitchA2" to="NavigationRegion3D/Bulkhead2" method="open"]
[connection signal="activated" from="NavigationRegion3D/Corridor1/Hallway1/SwitchA2" to="NavigationRegion3D/Bulkhead3" method="open"]
[connection signal="activated" from="NavigationRegion3D/Corridor1/Hallway4/SwitchB1" to="NavigationRegion3D/Corridor1/Hallway4/SwitchB1" method="disable"]

View File

@ -3,6 +3,6 @@ extends Node
@export_file("*.tscn") var initial_scene := "res://src/world/world.tscn"
func _ready() -> void:
func _init() -> void:
print("Starting from editor-only entrypoint.")
Game.instance.queue_scene(initial_scene)

View File

@ -4,6 +4,7 @@ class_name Game extends Node
@export_file("*.tscn") var start_scene: String
var _loading_resources: Dictionary[String, Promise] = {}
var _queued_content: Node
@onready var content: Node = %Content
@onready var loading_screen: Control = %LoadingScreen
@ -89,6 +90,10 @@ func _unload_content() -> void:
func _finish_scene_load(scene_instance: Node) -> void:
_queued_content = scene_instance
func _add_scene_content(scene_instance: Node) -> void:
# Unpause in case the previous scene was paused.
get_tree().paused = false
# Reset time scale in case it's been changed.
@ -115,5 +120,11 @@ func _process(_delta: float) -> void:
# Continue loading
pass
if not _loading_resources:
# Delay adding queued scene to the tree until loading is finished
if _queued_content:
_add_scene_content(_queued_content)
_queued_content = null
if not _loading_resources:
loading_screen.visible = false

View File

@ -1,8 +1,9 @@
[gd_scene load_steps=13 format=3 uid="uid://qpq2cm1hgeha"]
[gd_scene load_steps=14 format=3 uid="uid://qpq2cm1hgeha"]
[ext_resource type="Script" uid="uid://dxl25lkyped4" path="res://src/game/game.gd" id="1_qnjlk"]
[ext_resource type="Theme" uid="uid://dj2ij1b2yjicr" path="res://src/ui/menus/title_screen/title_screen.theme" id="2_kgj8g"]
[ext_resource type="Script" uid="uid://ctf1if4ly6nun" path="res://src/game/loading_screen.gd" id="3_kgj8g"]
[ext_resource type="Script" uid="uid://byoyeyop7dlra" path="res://src/game/shader_precache.gd" id="31_yi3n0"]
[sub_resource type="Animation" id="Animation_kgj8g"]
length = 0.001
@ -156,6 +157,22 @@ transitions = ["Start", "initial_display", SubResource("AnimationNodeStateMachin
script = ExtResource("1_qnjlk")
start_scene = "uid://bctwol681jdk0"
[node name="ShaderPrecache" type="SubViewport" parent="."]
render_target_update_mode = 4
script = ExtResource("31_yi3n0")
precache_scene_path = "uid://dtuwt3kemds6o"
[node name="CanvasLayer" type="CanvasLayer" parent="ShaderPrecache"]
layer = -1
visible = false
[node name="PrecacheRoot" type="Node3D" parent="ShaderPrecache/CanvasLayer"]
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1000, 0)
[node name="Camera3D" type="Camera3D" parent="ShaderPrecache/CanvasLayer/PrecacheRoot"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1.65382)
[node name="Content" type="Node" parent="."]
unique_name_in_owner = true

View File

@ -0,0 +1,39 @@
extends SubViewport
## Render a set of shader materials for one frame to force a cache
@export_file("*.tscn") var precache_scene_path: String
var _precache_started := false
var _scene_loaded := false
var _scene_rendered := false
@onready var precache_root: Node3D = %PrecacheRoot
# Called every frame. 'delta' is the elapsed time since the previous frame.
func _process(_delta: float) -> void:
if not _precache_started:
print_debug("Loading precache scene...")
Game.instance.queue_load(precache_scene_path, ResourceLoader.CACHE_MODE_REUSE).finally(
_on_precache_scene_loaded
)
_precache_started = true
return
if not _scene_loaded:
return
if not _scene_rendered:
print_debug("Rendering precache scene...")
_scene_rendered = true
return
print_debug("Shader precache complete!")
queue_free()
func _on_precache_scene_loaded(scene: PackedScene) -> void:
print_debug("Precache scene loaded. Now instantiating...")
var instance: Node3D = scene.instantiate()
precache_root.add_child(instance)
_scene_loaded = true

View File

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

View File

@ -373,7 +373,7 @@ volume_db = -14.0
unique_name_in_owner = true
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.45, 0)
enabled = false
start_position = Vector3(0, 0, -1.5)
end_position = Vector3(0, 0, 1.5)
start_position = Vector3(0, 0, -0.5)
end_position = Vector3(0, 0, 0.5)
[connection signal="animation_finished" from="AnimationPlayer" to="." method="_on_animation_player_animation_finished"]

View File

@ -11,6 +11,8 @@ var _track_list_dirty := false
@onready var toothbrush: CheckButton = %Toothbrush
@onready var stickers: CheckButton = %Stickers
@onready var alert_level_label: Label = %AlertLevelLabel
@onready var tracks_collected_list: VBoxContainer = %TracksCollectedList
@onready var append_target: Panel = %AppendTarget
@ -26,6 +28,7 @@ func _ready() -> void:
toothbrush.set_pressed_no_signal(World.instance.manager.toothbrush_unlocked)
stickers.set_pressed_no_signal(World.instance.manager.stickers_unlocked)
_build_track_list()
_update_alert_level()
func _build_track_list() -> void:
@ -107,7 +110,31 @@ func _update_track_list() -> void:
World.instance.manager.mp3_collection = track_list
func _update_alert_level() -> void:
if World.instance and World.instance.manager:
alert_level_label.text = str(World.instance.manager.alert_level)
func unlock_doors() -> void:
for node: Node in get_tree().get_nodes_in_group("Bulkheads"):
if node.has_method("open"):
node.call("open")
func trigger_alarm() -> void:
World.instance.manager.raise_alert(1)
_update_alert_level.call_deferred()
func reset_alert_level() -> void:
World.instance.manager.clear_alert()
_update_alert_level.call_deferred()
func spawn_beast() -> void:
World.instance.spook_manager.spawn_beast_near_player()
func kill_beasts() -> void:
for c: Node in get_tree().get_nodes_in_group(GrunkBeast.GROUP):
c.queue_free()

View File

@ -172,6 +172,39 @@ alignment = 2
layout_mode = 2
text = "Advance to next milestone"
[node name="HBoxContainer7" type="HBoxContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
alignment = 2
[node name="Label" type="Label" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer7"]
layout_mode = 2
text = "Current alert level: "
[node name="AlertLevelLabel" type="Label" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer7"]
unique_name_in_owner = true
layout_mode = 2
text = "0"
[node name="TriggerAlarm" type="Button" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer7"]
layout_mode = 2
text = "Trigger alarm"
[node name="ResetAlertLevel" type="Button" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer7"]
layout_mode = 2
text = "Reset alert level"
[node name="HBoxContainer8" type="HBoxContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
alignment = 2
[node name="SpawnBeast" type="Button" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer8"]
layout_mode = 2
text = "Spawn grunkbeast"
[node name="KillBeasts" type="Button" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer8"]
layout_mode = 2
text = "Despawn all grunkbeasts"
[node name="HBoxContainer6" type="HBoxContainer" parent="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer"]
layout_mode = 2
theme_override_constants/separation = 16
@ -342,6 +375,10 @@ preserve_on_drag = true
[connection signal="toggled" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4/Toothbrush" to="." method="set_toothbrush_unlocked"]
[connection signal="toggled" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer4/Stickers" to="." method="set_stickers_unlocked"]
[connection signal="pressed" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer5/UnlockNextMilestone" to="." method="unlock_next_milestone"]
[connection signal="pressed" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer7/TriggerAlarm" to="." method="trigger_alarm"]
[connection signal="pressed" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer7/ResetAlertLevel" to="." method="reset_alert_level"]
[connection signal="pressed" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer8/SpawnBeast" to="." method="spawn_beast"]
[connection signal="pressed" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer8/KillBeasts" to="." method="kill_beasts"]
[connection signal="child_entered_tree" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksCollectedColumn/TracksCollected/MarginContainer/ScrollContainer/MarginContainer/TracksCollectedList" to="." method="_on_track_list_changed" unbinds=1]
[connection signal="child_exiting_tree" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksCollectedColumn/TracksCollected/MarginContainer/ScrollContainer/MarginContainer/TracksCollectedList" to="." method="_on_track_list_changed" unbinds=1]
[connection signal="child_order_changed" from="MarginContainer/VBoxContainer/ScrollContainer/MarginContainer/VBoxContainer/HBoxContainer6/TracksCollectedColumn/TracksCollected/MarginContainer/ScrollContainer/MarginContainer/TracksCollectedList" to="." method="_on_track_list_changed"]

View File

@ -9,14 +9,17 @@ static func _load_world(level: PackedScene, save: SaveState = null) -> void:
world.save_state = save
world.initial_level = level
print_debug("Loading world")
Game.instance.queue_scene(WORLD_SCENE).then(finish_load)
static func load_level(level_path: String, save: SaveState = null) -> void:
print_debug("Loading level from ", level_path)
var chain_load := func(level: PackedScene) -> void: LoadingTools._load_world(level, save)
Game.instance.queue_load(level_path).then(chain_load)
static func load_save(save_path: String) -> void:
print_debug("Loading save from ", save_path)
var chain_load := func(save: SaveState) -> void: load_level(save.level_path, save)
Game.instance.queue_load(save_path, ResourceLoader.CACHE_MODE_REPLACE_DEEP).then(chain_load)

View File

@ -0,0 +1,13 @@
extends FloorSpawner
## Floor spawner that gets removed when the player degrunks it
## We can use this to ensure the beast only gets spawned on heavily-grunked parts of the floor.
func serialize() -> Dictionary:
# Nothing to serialize, but we need a placeholder value to show we haven't been destroyed.
return {}
func deserialize(_state: Dictionary) -> void:
# Nothing to deserialize, but we won't be freed!
pass

View File

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

View File

@ -1,6 +1,6 @@
[gd_scene load_steps=6 format=3 uid="uid://5vh7mnjavlle"]
[ext_resource type="Script" uid="uid://cqildi0gndwp2" path="res://src/world/grunk_beast/beast_spawner/floor_spawner.gd" id="1_42oks"]
[ext_resource type="Script" uid="uid://b7wejb2uwu43a" path="res://src/world/grunk_beast/beast_spawner/transient_floor_spawner.gd" id="1_42oks"]
[ext_resource type="PackedScene" uid="uid://ehf5sg3ahvbf" path="res://src/world/grunk_beast/grunk_beast.tscn" id="2_e5rh0"]
[sub_resource type="CylinderShape3D" id="CylinderShape3D_42oks"]
@ -16,10 +16,9 @@ height = 0.02
height = 0.1
radius = 1.2
[node name="TransientFloorSpawner" type="Node3D" node_paths=PackedStringArray("spawn_exclusion_area") groups=["BeastSpawnPoint"]]
[node name="TransientFloorSpawner" type="Node3D" groups=["BeastSpawnPoint", "Persistent"]]
script = ExtResource("1_42oks")
beast_scene = ExtResource("2_e5rh0")
spawn_exclusion_area = NodePath("SpawnExclusionArea")
spawn_priority = 10
metadata/_custom_type_script = "uid://cqildi0gndwp2"

View File

@ -11,11 +11,6 @@ class_name PursueTarget extends ActionLeaf
func tick(actor: Node, blackboard: Blackboard) -> int:
# Bug workaround -- do not update nav target while inside a link!
var beast := actor as GrunkBeast
if beast.traversing_link:
return RUNNING
if not blackboard.has_value(blackboard_key):
return FAILURE

View File

@ -11,14 +11,10 @@ class_name SetNavTarget extends ActionLeaf
@export var blackboard_key := "target"
@onready var nav_agent: NavigationAgent3D = %NavAgent
@onready var navigation_update_cooldown: Timer = %NavigationUpdateCooldown
func tick(actor: Node, blackboard: Blackboard) -> int:
# Bug workaround -- do not update nav target while inside a link!
var beast := actor as GrunkBeast
if beast.traversing_link:
return RUNNING
if not blackboard.has_value(blackboard_key):
return FAILURE

View File

@ -166,7 +166,7 @@ func _physics_process(_delta: float) -> void:
var motion := Vector3.ZERO
if pathfinding and not nav_agent.is_navigation_finished():
if pathfinding and (traversing_link or not nav_agent.is_navigation_finished()):
motion = global_position.direction_to(nav_agent.get_next_path_position()) * get_speed()
motion.y = velocity.y

View File

@ -96,7 +96,7 @@ script = ExtResource("4_csisu")
[node name="NavAgent" type="NavigationAgent3D" parent="Navigation"]
unique_name_in_owner = true
path_height_offset = 0.25
path_postprocessing = 1
debug_enabled = true
[node name="NavProbe" type="NavigationAgent3D" parent="Navigation"]
@ -164,6 +164,11 @@ one_shot = true
[node name="AngerDecay" type="Timer" parent="."]
autostart = true
[node name="NavigationUpdateCooldown" type="Timer" parent="."]
unique_name_in_owner = true
wait_time = 0.1
one_shot = true
[node name="GrunkBeastBehavior" type="Node" parent="." node_paths=PackedStringArray("blackboard", "actor")]
unique_name_in_owner = true
script = ExtResource("6_d4ex2")
@ -384,7 +389,7 @@ metadata/_custom_type_script = "uid://cg016dbe7gs1x"
script = ExtResource("11_mbqcc")
mean_time = 4.0
st_dev_time = 0.6
wait_time = 3.52478
wait_time = 4.75634
metadata/_custom_type_script = "uid://beyk2xtbjrsg4"
[node name="PickRandomInvestigationTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/TrackingMode/ActionSelector/InvestigateAction/AlwaysSucceedDecorator/InvestigateSequence/RandomDelay"]
@ -478,7 +483,7 @@ metadata/_custom_type_script = "uid://bogt3htgqe12s"
script = ExtResource("11_mbqcc")
mean_time = 9.0
st_dev_time = 1.0
wait_time = 9.52982
wait_time = 9.92344
metadata/_custom_type_script = "uid://beyk2xtbjrsg4"
[node name="PickRandomLurkTarget" type="Node" parent="GrunkBeastBehavior/StateSelector/LurkingMode/RandomDelay"]

View File

@ -3,7 +3,7 @@ class_name Shambler extends BeastModel
const LOOK_TARGET_ACCELERATION := 12.0
const BLEND_ACCELERATION := 6.0
const SPAWN_RUMBLE := 0.05
#const SPAWN_RUMBLE := 0.05
@export var time_scale_factor := 4.0
@export var idle_blend_curve: Curve
@ -36,7 +36,20 @@ func _ready() -> void:
func _start_player_rumble() -> void:
# TODO this is awful. Integrate PhantomCamera or similar
if Player.instance:
create_tween().tween_property(Player.instance, "camera_rumble", SPAWN_RUMBLE, 1.2)
var tween := create_tween()
Player.instance.camera_rumble = 0.08
(
tween
. tween_property(Player.instance, "camera_rumble", 0.004, 0.8)
. set_trans(Tween.TRANS_EXPO)
. set_ease(Tween.EASE_OUT)
)
(
tween
. tween_property(Player.instance, "camera_rumble", 0.05, 2.0)
. set_trans(Tween.TRANS_QUART)
. set_ease(Tween.EASE_IN)
)
func _end_player_rumble() -> void:

View File

@ -143,7 +143,7 @@ _data = [Vector2(0, 0), 0.0, 2.58321, 0, 0, Vector2(1, 1), -0.403345, 0.0, 0, 0]
point_count = 2
[sub_resource type="Curve" id="Curve_xlxrx"]
_data = [Vector2(0, 0), 0.0, 1.63477, 0, 0, Vector2(0.837947, 1), -1.37504, -1.37504, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0]
_data = [Vector2(0, 0), 0.0, 1.63477, 0, 0, Vector2(0.837947, 1), -0.720372, -0.720372, 0, 0, Vector2(1, 1), 0.0, 0.0, 0, 0]
point_count = 3
[sub_resource type="Curve" id="Curve_6bdpa"]
@ -203,6 +203,7 @@ size = Vector2(0.05, 0.05)
[sub_resource type="PlaneMesh" id="PlaneMesh_xlxrx"]
material = ExtResource("8_6bdpa")
size = Vector2(4, 4)
[sub_resource type="Curve" id="Curve_c7m4v"]
_data = [Vector2(0, 1), 0.0, 0.0, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0]
@ -425,6 +426,7 @@ process_material = SubResource("ParticleProcessMaterial_xyfav")
draw_pass_1 = SubResource("SphereMesh_o6myl")
[node name="GurglePop" type="GPUParticles3D" parent="SpawnEffects/GurgleEffect" index="0"]
emitting = false
amount = 64
lifetime = 0.2
preprocess = 1.13
@ -433,7 +435,7 @@ process_material = SubResource("ParticleProcessMaterial_vru5p")
draw_pass_1 = SubResource("QuadMesh_10hsf")
[node name="SpawnRift" type="MeshInstance3D" parent="SpawnEffects" index="3"]
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0.01, 0)
transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0.01, -0.385)
visible = false
mesh = SubResource("PlaneMesh_xlxrx")
skeleton = NodePath("../..")

View File

@ -17,7 +17,7 @@ func _get_best_spawners() -> Array[BeastSpawner]:
)
if visible_spawners:
# Get spawners the player is currently looking at
var seen_spawners := spawners.filter(
var seen_spawners := visible_spawners.filter(
func(s: BeastSpawner) -> bool:
return SceneTools.player_looking_at(s.global_position)
)

View File

@ -13,7 +13,6 @@ volume_db = -14.0
[node name="World" type="Node"]
script = ExtResource("1_1k4gi")
pause_enabled = null
manager = ExtResource("2_5kmgb")
spook_manager = ExtResource("3_l0av5")
pause_music_effect = SubResource("AudioEffectAmplify_5kmgb")