From ede8f2028a48ffcccf65801adcee051b00753231 Mon Sep 17 00:00:00 2001 From: Marco Date: Sat, 21 Jun 2025 15:41:29 +0200 Subject: [PATCH] Enemy AI --- 3D/MapScenes/TestLevel.tscn | 784 +++++++++--------- IsoTest/IsoMapTest2.tscn | 8 +- Resources/Enemies/Fairy_Guard_3D.tres | 69 ++ Resources/Weapons/EnemyWeapon_Big_3D.tres | 22 + Scenes/Actors/Generic_Enemy_FSM_3D.tscn | 112 +++ Scripts/Components/FSM/Enemy/3D/Alert.cs | 96 +++ Scripts/Components/FSM/Enemy/3D/Alert.cs.uid | 1 + Scripts/Components/FSM/Enemy/3D/Controlled.cs | 19 + .../Components/FSM/Enemy/3D/Controlled.cs.uid | 1 + Scripts/Components/FSM/Enemy/3D/Dead.cs | 19 + Scripts/Components/FSM/Enemy/3D/Dead.cs.uid | 1 + .../FSM/Enemy/3D/EnemyFSMAnimatedSprite3D.cs | 16 + .../Enemy/3D/EnemyFSMAnimatedSprite3D.cs.uid | 1 + .../Components/FSM/Enemy/3D/EnemyProxy3D.cs | 78 ++ .../FSM/Enemy/3D/EnemyProxy3D.cs.uid | 1 + .../FSM/Enemy/3D/EnemyStateBase3D.cs | 9 + .../FSM/Enemy/3D/EnemyStateBase3D.cs.uid | 1 + .../FSM/Enemy/3D/EnemyStateMachine3D.cs | 10 + .../FSM/Enemy/3D/EnemyStateMachine3D.cs.uid | 1 + .../Components/FSM/Enemy/3D/EnemyStorage3D.cs | 31 + .../FSM/Enemy/3D/EnemyStorage3D.cs.uid | 1 + Scripts/Components/FSM/Enemy/3D/Idle.cs | 93 +++ Scripts/Components/FSM/Enemy/3D/Idle.cs.uid | 1 + Scripts/Components/FSM/Enemy/3D/Init.cs | 25 + Scripts/Components/FSM/Enemy/3D/Init.cs.uid | 1 + .../FSM/Enemy/3D/NavigationProvider3D.cs | 84 ++ .../FSM/Enemy/3D/NavigationProvider3D.cs.uid | 1 + .../FSM/Enemy/3D/PlayerDetection3D.cs | 120 +++ .../FSM/Enemy/3D/PlayerDetection3D.cs.uid | 1 + Scripts/Components/FSM/Enemy/3D/Shooting.cs | 171 ++++ .../Components/FSM/Enemy/3D/Shooting.cs.uid | 1 + Scripts/Components/FSM/Enemy/Alert.cs | 49 +- Sprites/Actors/FairyGuard.png.import | 6 +- project.godot | 1 + 34 files changed, 1418 insertions(+), 417 deletions(-) create mode 100644 Resources/Enemies/Fairy_Guard_3D.tres create mode 100644 Resources/Weapons/EnemyWeapon_Big_3D.tres create mode 100644 Scenes/Actors/Generic_Enemy_FSM_3D.tscn create mode 100644 Scripts/Components/FSM/Enemy/3D/Alert.cs create mode 100644 Scripts/Components/FSM/Enemy/3D/Alert.cs.uid create mode 100644 Scripts/Components/FSM/Enemy/3D/Controlled.cs create mode 100644 Scripts/Components/FSM/Enemy/3D/Controlled.cs.uid create mode 100644 Scripts/Components/FSM/Enemy/3D/Dead.cs create mode 100644 Scripts/Components/FSM/Enemy/3D/Dead.cs.uid create mode 100644 Scripts/Components/FSM/Enemy/3D/EnemyFSMAnimatedSprite3D.cs create mode 100644 Scripts/Components/FSM/Enemy/3D/EnemyFSMAnimatedSprite3D.cs.uid create mode 100644 Scripts/Components/FSM/Enemy/3D/EnemyProxy3D.cs create mode 100644 Scripts/Components/FSM/Enemy/3D/EnemyProxy3D.cs.uid create mode 100644 Scripts/Components/FSM/Enemy/3D/EnemyStateBase3D.cs create mode 100644 Scripts/Components/FSM/Enemy/3D/EnemyStateBase3D.cs.uid create mode 100644 Scripts/Components/FSM/Enemy/3D/EnemyStateMachine3D.cs create mode 100644 Scripts/Components/FSM/Enemy/3D/EnemyStateMachine3D.cs.uid create mode 100644 Scripts/Components/FSM/Enemy/3D/EnemyStorage3D.cs create mode 100644 Scripts/Components/FSM/Enemy/3D/EnemyStorage3D.cs.uid create mode 100644 Scripts/Components/FSM/Enemy/3D/Idle.cs create mode 100644 Scripts/Components/FSM/Enemy/3D/Idle.cs.uid create mode 100644 Scripts/Components/FSM/Enemy/3D/Init.cs create mode 100644 Scripts/Components/FSM/Enemy/3D/Init.cs.uid create mode 100644 Scripts/Components/FSM/Enemy/3D/NavigationProvider3D.cs create mode 100644 Scripts/Components/FSM/Enemy/3D/NavigationProvider3D.cs.uid create mode 100644 Scripts/Components/FSM/Enemy/3D/PlayerDetection3D.cs create mode 100644 Scripts/Components/FSM/Enemy/3D/PlayerDetection3D.cs.uid create mode 100644 Scripts/Components/FSM/Enemy/3D/Shooting.cs create mode 100644 Scripts/Components/FSM/Enemy/3D/Shooting.cs.uid diff --git a/3D/MapScenes/TestLevel.tscn b/3D/MapScenes/TestLevel.tscn index cc75fea7..a9c97882 100644 --- a/3D/MapScenes/TestLevel.tscn +++ b/3D/MapScenes/TestLevel.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=307 format=4 uid="uid://c8gtrjf2xeue7"] +[gd_scene load_steps=308 format=4 uid="uid://c8gtrjf2xeue7"] [ext_resource type="Script" uid="uid://kno58homctew" path="res://addons/func_godot/src/map/func_godot_map.gd" id="1_n6h0p"] [ext_resource type="Script" uid="uid://crpgy1o73rtlx" path="res://Scripts/Utils/MapProxy3D.cs" id="1_pvlbf"] @@ -1191,1173 +1191,1181 @@ albedo_texture = SubResource("AtlasTexture_d7jmf") [sub_resource type="PlaneMesh" id="PlaneMesh_k08ee"] material = SubResource("StandardMaterial3D_dt4t5") +[sub_resource type="NavigationMesh" id="NavigationMesh_fi82p"] +vertices = PackedVector3Array(-48.25, 0, 5.5, -47.5, 0, 5.5, -47.5, 0, 2, -48.5, 0, 2, -41.5, 4, 15.75, -41.5, 4, 16.5, -40.75, 4, 16.75, -37.25, 4, 13.25, -40.75, 4, 15.25, -30, 4, 15.25, -29.25, 4, 15, -29.25, 4, 14.25, -30, 4, 14, -37.5, 4, 4.75, -40.75, 4, 4.75, -40.75, 4, 19.5, -30, 4, 19.5, -30, 4, 13.25, -70.25, 0, 7.25, -70.25, 0, 18.5, -68.5, 0, 18.5, -68.5, 0, 7.25, -70.25, 4, 18.25, -68.75, 4, 18.25, -68.25, 4, 17.25, -68.75, 4, 14.25, -68.75, 4, 7.25, -70.25, 4, 7.25, -58.75, 4.25, 14.5, -59.25, 4, 17.5, -67.25, 0, 19, -61, 0, 25, -55, 0, 25, -54.75, 0, 7.25, -67.25, 0, 7.25, -53.25, 0, 25.25, -53.25, 0, 28.5, -42.5, 0, 28.5, -42.5, 0, 7.25, 22.75, 1.5, 8.75, 22.75, 1.5, 9.25, 26.25, 1.5, 9.25, 26.25, 1.5, 8.75, 26.75, 1.5, 15.25, 26.5, 1.5, 14, 26, 1.5, 14.5, 29.5, 1.5, 13, 30.75, 2.25, 13.25, 30.75, 2, 12.5, 29.5, 1.5, 12.5, 26.75, 1.5, 16, 25.25, 1.5, 16, 25.5, 1.5, 17, 26.5, 1.5, 17.75, 28.75, 1.5, 10.75, 28.5, 1.75, 10.25, 27.5, 1.5, 10.25, 28.25, 1.5, 11.5, 27.75, 2, 13, 28.5, 1.5, 13, 29.5, 1.5, 11.75, 23, 1.75, 17.25, 22.75, 1.75, 18.5, 23.5, 1.5, 18.75, 25, 1.5, 17.5, 27.5, 1.5, 9.5, 32.5, 1.5, 16.5, 31.75, 1.5, 17, 31.5, 1.5, 18, 32, 1.5, 19.5, 32.5, 1.5, 20, 26, 1.5, 11.5, 28.5, 1.5, 15, 29.5, 1.5, 16, 26, 1.5, 19.5, 23.25, 1.75, 20.75, 25.5, 1.5, 21, 32.25, 1.5, 11.5, 32, 1.5, 10.75, 23.5, 1.5, 14.5, 23.5, 1.5, 16, 22.75, 2.25, 11.75, 23.25, 2, 12, 23.5, 1.75, 11.5, 23.5, 2, 10.25, 22.75, 2.25, 10.25, -28.75, 4, 14.25, -28.25, 4, 15.25, -28.25, 4, 19.5, -25, 4, 19.75, -24, 4, 19.5, -24, 4, 12.5, -25.75, 4, 13.25, -25.25, 4, 12.5, -28.25, 4, 13.25, -27.25, 4, 19.75, -27.75, 4.25, 22.5, -25, 4, 22.25, -55.75, 4, 17.25, -54.25, 4, 17.25, -54.5, 4.25, 14.5, -56.25, 4, 17.75, -59, 4.25, 24, -56.25, 4, 24.25, -42.25, 4, 16.5, -42.5, 4, 15.5, -42.5, 4.25, 14.5, -42.5, 4, 17.25, 47.25, 3.5, 15, 47.25, 3.25, 15.5, 47.75, 3.25, 15.5, 47.75, 3.5, 15, 32.5, 1.5, 16, 34.5, 1.5, 16.25, 44.75, 1.5, 19, 45.5, 1.5, 20.75, 46.75, 1.5, 20.5, 46.5, 1.5, 18.75, 45.25, 1.5, 18.75, 44.25, 1.5, 22.25, 42.75, 1.5, 22.25, 42.5, 1.5, 24.25, 45.5, 1.5, 24.5, 48.5, 1.5, 16.75, 49.5, 1.5, 16.5, 45, 1.5, 16.75, 48, 1.5, 18.5, 44.75, 1.5, 21.75, 33.5, 3, 17.25, 33.5, 3, 17.75, 34.25, 3, 17.75, 34.25, 3, 17.25, 13, 1.5, 17.5, 12.25, 1.75, 17.75, 12.75, 1.5, 18.25, 13.5, 1.5, 18.25, 14.25, 1.5, 22.25, 15, 1.5, 22.5, 15, 1.5, 21.25, 14.25, 1.5, 21.25, 16, 1.5, 21, 16.25, 1.5, 20, 12.75, 1.5, 20.25, 13, 1.5, 21, 17, 1.5, 20, 17, 1.75, 17.75, 15.75, 1.5, 22.75, 13, 1.5, 22.75, 13, 1.5, 27.5, 15.5, 1.5, 27.5, -61.5, 0, 25.25, -67.75, 0, 19.75, -70.25, 0, 19.75, -70.25, 0, 28.5, -61.5, 0, 28.5, 33.5, 3.5, 19.5, 33.5, 3.5, 22.5, 35, 3.5, 22.5, 35, 3.5, 19.5, 38.5, 4, 19.5, 38.5, 4, 20.5, 39.5, 4, 20.5, 39.5, 4, 19.5, 28.5, 2, 21.5, 29.75, 2, 21.75, 29.5, 2, 20.5, 28.5, 2, 20.5, 21.75, 1.5, 24.75, 21.75, 1.5, 25.5, 22.75, 1.5, 25.75, 22.75, 1.5, 24.25, 26.5, 1.5, 27.5, 26.75, 1.5, 25.25, 26.75, 1.5, 24.5, 32.5, 1.5, 23.25, 32.5, 1.5, 21, 31.5, 1.5, 21.5, 31.75, 1.5, 24, 31.25, 1.5, 25.25, 31, 1.5, 24.75, 30, 1.5, 24.75, 31.5, 1.5, 27.5, 32.75, 1.5, 27.5, 32.75, 1.5, 25.75, 22.75, 2, 20.75, 26.5, 1.5, 21.5, 22.75, 1.5, 21.9167, 34.5, 1.5, 25.5, 34.5, 1.5, 23.5, 22.75, 1.5, 27.5, -28.25, 2.5, 31, -28.25, 2.5, 29, -28.75, 2.5, 28.75, -32.75, 2.5, 29.25, -35.75, 2.5, 31, -35.75, 2.5, 29.25, -35.75, 2.5, 21.25, -35.75, 2.5, 24.5, -32.25, 2.5, 24.75, -28.5, 2.5, 21.25, -32.25, 2.5, 28.75, -23.75, 2.5, 21.25, -23.75, 2.5, 23, -5.5, 2.5, 23, -5.5, 2.5, 21.25, 13.75, 1.5, 32, 13.75, 1.5, 31.25, 13, 1.5, 31, 13, 1.5, 32.25, 10, 1.5, 21.25, 9.25, 1.5, 21.25, 9.25, 1.5, 22.25, 10.5, 1.5, 23.25, 9.5, 1.5, 30.25, 9.25, 1.5, 34, 13, 1.5, 34, 11, 1.5, 29, 8.25, 1.5, 29.25, 8.25, 1.5, 30, 9.75, 1.5, 29.25, 12.5, 1.5, 23.25, 8.25, 1.5, 22.75, 8.25, 1.5, 24.25, 11.25, 1.5, 27.5, 10.25, 1.5, 27.75, 8, 1.5, 25.5, 13, 1.5, 29.25, 2.75, 1.5, 24.75, 1.75, 1.5, 24.5, 1.75, 1.5, 27.5, 8.25, 1.5, 27.5, 6.75, 1.5, 24.75, 6.5, 1.5, 22.75, 3.25, 1.25, 22.75, 3.25, 1.5, 24.25, 6.5, 1.5, 25.75, 6.5, 1.5, 27.5, 21, 1.5, 25.75, 21, 1.5, 24.5, 18, 1.5, 23.25, 16, 1.5, 23.25, 21, 1.5, 27.5, 20, 1.5, 21.25, 19.25, 1.5, 21.25, 19.25, 1.5, 22.25, 20, 1.5, 22.5, 21, 1.5, 22.75, -25, 4, 23.75, -27.75, 4.25, 27.5, -4.75, 4, 27.5, -4.75, 4, 24.25, -5.5, 4.25, 23.75, -3.75, 4, 23.75, 2, 4, 27.5, 2.25, 4, 22.75, -3.75, 4, 22.75, -54.75, 4, 28.5, -54.75, 4.25, 26, -56.25, 4, 26, -56, 4, 28.75, -55.5, 4, 30.25, -58.75, 4, 29.75, -59.5, 4, 30.25, -59.5, 4, 37, -55.5, 4, 37, -55.25, 4, 35, -59, 4.25, 25.75, -56, 4, 30, -60.5, 4.25, 26, -60.5, 4.25, 28.5, -58.75, 4, 28.75, -37.5, 4, 25, -40.5, 4, 25, -40.5, 4, 29.75, -37.5, 4, 35, -41.25, 4, 30.25, -36, 4, 25.75, -35.75, 4, 27.75, -33.75, 4, 27.75, -33.75, 4.25, 25.5, -60.25, 0, 26.25, -60.25, 0, 28.5, -54.5, 0, 28.5, -54.5, 0, 26.25, 27.5, 3.5, 26.25, 27.5, 3.5, 28.25, 30.5, 3.5, 28, 30.5, 3.5, 26.25, 33.75, 3, 26.75, 33.75, 3, 27.5, 34.25, 3, 27.5, 34.25, 3, 26.75, -5.5, 2.5, 31, -5.5, 2.5, 28.75, 14.5, 1.5, 32, 14.75, 1.5, 30.75, 23.25, 1.5, 33, 28.5, 1.5, 33, 28.5, 1.5, 29.25, 23, 1.5, 29.5, 14.75, 1.5, 33, 17.5, 1.5, 32.5, 17.5, 1.5, 29.25, 14.75, 1.5, 29.25, 19.25, 1.5, 29.25, 21.5, 1.5, 29.75, 18.75, 1.5, 32.75, 21.5, 1.5, 33, 19.25, 1.5, 32.25) +polygons = [PackedInt32Array(1, 0, 2), PackedInt32Array(2, 0, 3), PackedInt32Array(5, 4, 6), PackedInt32Array(6, 4, 8), PackedInt32Array(6, 8, 7), PackedInt32Array(10, 9, 11), PackedInt32Array(11, 9, 12), PackedInt32Array(12, 9, 7), PackedInt32Array(13, 7, 14), PackedInt32Array(14, 7, 8), PackedInt32Array(6, 7, 15), PackedInt32Array(15, 7, 9), PackedInt32Array(15, 9, 16), PackedInt32Array(7, 17, 12), PackedInt32Array(21, 20, 18), PackedInt32Array(18, 20, 19), PackedInt32Array(23, 22, 24), PackedInt32Array(24, 22, 25), PackedInt32Array(26, 25, 27), PackedInt32Array(27, 25, 22), PackedInt32Array(29, 24, 28), PackedInt32Array(28, 24, 25), PackedInt32Array(31, 30, 32), PackedInt32Array(32, 30, 34), PackedInt32Array(32, 34, 33), PackedInt32Array(37, 36, 35), PackedInt32Array(35, 32, 33), PackedInt32Array(33, 38, 35), PackedInt32Array(35, 38, 37), PackedInt32Array(42, 41, 39), PackedInt32Array(39, 41, 40), PackedInt32Array(43, 45, 44), PackedInt32Array(49, 48, 46), PackedInt32Array(46, 48, 47), PackedInt32Array(43, 50, 51), PackedInt32Array(51, 50, 52), PackedInt32Array(52, 50, 53), PackedInt32Array(54, 57, 55), PackedInt32Array(55, 57, 56), PackedInt32Array(54, 60, 57), PackedInt32Array(57, 60, 49), PackedInt32Array(57, 49, 59), PackedInt32Array(57, 59, 58), PackedInt32Array(62, 61, 63), PackedInt32Array(63, 61, 64), PackedInt32Array(41, 65, 56), PackedInt32Array(67, 66, 68), PackedInt32Array(68, 66, 69), PackedInt32Array(69, 66, 70), PackedInt32Array(57, 71, 56), PackedInt32Array(56, 71, 41), PackedInt32Array(43, 72, 50), PackedInt32Array(50, 72, 73), PackedInt32Array(59, 49, 46), PackedInt32Array(53, 74, 64), PackedInt32Array(64, 74, 63), PackedInt32Array(63, 74, 76), PackedInt32Array(63, 76, 75), PackedInt32Array(59, 46, 72), PackedInt32Array(72, 46, 73), PackedInt32Array(64, 52, 53), PackedInt32Array(77, 60, 78), PackedInt32Array(78, 60, 54), PackedInt32Array(43, 51, 45), PackedInt32Array(45, 51, 80), PackedInt32Array(45, 80, 79), PackedInt32Array(68, 69, 53), PackedInt32Array(53, 69, 74), PackedInt32Array(82, 81, 83), PackedInt32Array(83, 81, 84), PackedInt32Array(84, 81, 85), PackedInt32Array(11, 86, 10), PackedInt32Array(10, 86, 87), PackedInt32Array(89, 88, 90), PackedInt32Array(90, 88, 87), PackedInt32Array(90, 87, 92), PackedInt32Array(90, 92, 91), PackedInt32Array(92, 93, 91), PackedInt32Array(86, 94, 87), PackedInt32Array(87, 94, 92), PackedInt32Array(89, 95, 88), PackedInt32Array(89, 97, 95), PackedInt32Array(95, 97, 96), PackedInt32Array(100, 99, 98), PackedInt32Array(101, 29, 98), PackedInt32Array(98, 29, 28), PackedInt32Array(98, 28, 100), PackedInt32Array(103, 102, 101), PackedInt32Array(101, 102, 29), PackedInt32Array(5, 104, 4), PackedInt32Array(4, 104, 105), PackedInt32Array(105, 99, 106), PackedInt32Array(106, 99, 100), PackedInt32Array(104, 107, 105), PackedInt32Array(105, 107, 99), PackedInt32Array(111, 110, 108), PackedInt32Array(108, 110, 109), PackedInt32Array(113, 66, 112), PackedInt32Array(118, 117, 114), PackedInt32Array(114, 117, 115), PackedInt32Array(115, 117, 116), PackedInt32Array(120, 119, 121), PackedInt32Array(121, 119, 122), PackedInt32Array(125, 124, 123), PackedInt32Array(117, 118, 126), PackedInt32Array(126, 118, 125), PackedInt32Array(126, 125, 123), PackedInt32Array(122, 119, 127), PackedInt32Array(114, 115, 127), PackedInt32Array(127, 115, 122), PackedInt32Array(131, 130, 128), PackedInt32Array(128, 130, 129), PackedInt32Array(133, 132, 134), PackedInt32Array(134, 132, 135), PackedInt32Array(139, 138, 136), PackedInt32Array(136, 138, 137), PackedInt32Array(140, 138, 141), PackedInt32Array(139, 143, 142), PackedInt32Array(142, 134, 135), PackedInt32Array(145, 144, 141), PackedInt32Array(138, 139, 141), PackedInt32Array(141, 139, 142), PackedInt32Array(141, 142, 135), PackedInt32Array(141, 135, 145), PackedInt32Array(137, 146, 147), PackedInt32Array(147, 146, 149), PackedInt32Array(147, 149, 148), PackedInt32Array(147, 136, 137), PackedInt32Array(150, 151, 31), PackedInt32Array(31, 151, 30), PackedInt32Array(152, 151, 153), PackedInt32Array(153, 151, 150), PackedInt32Array(153, 150, 154), PackedInt32Array(158, 157, 155), PackedInt32Array(155, 157, 156), PackedInt32Array(162, 161, 159), PackedInt32Array(159, 161, 160), PackedInt32Array(166, 165, 163), PackedInt32Array(163, 165, 164), PackedInt32Array(169, 168, 167), PackedInt32Array(167, 170, 169), PackedInt32Array(169, 170, 173), PackedInt32Array(169, 173, 172), PackedInt32Array(169, 172, 171), PackedInt32Array(175, 174, 176), PackedInt32Array(176, 174, 177), PackedInt32Array(180, 179, 178), PackedInt32Array(182, 181, 183), PackedInt32Array(183, 181, 178), PackedInt32Array(173, 180, 172), PackedInt32Array(172, 180, 178), PackedInt32Array(184, 75, 186), PackedInt32Array(186, 75, 76), PackedInt32Array(186, 76, 185), PackedInt32Array(186, 185, 170), PackedInt32Array(170, 185, 173), PackedInt32Array(177, 174, 178), PackedInt32Array(178, 174, 183), PackedInt32Array(183, 174, 187), PackedInt32Array(187, 174, 188), PackedInt32Array(171, 189, 169), PackedInt32Array(179, 177, 178), PackedInt32Array(191, 190, 192), PackedInt32Array(192, 190, 193), PackedInt32Array(193, 190, 194), PackedInt32Array(194, 195, 193), PackedInt32Array(197, 196, 198), PackedInt32Array(198, 196, 199), PackedInt32Array(200, 198, 192), PackedInt32Array(192, 198, 199), PackedInt32Array(192, 193, 200), PackedInt32Array(204, 203, 201), PackedInt32Array(201, 203, 202), PackedInt32Array(205, 208, 206), PackedInt32Array(206, 208, 207), PackedInt32Array(210, 209, 211), PackedInt32Array(211, 209, 212), PackedInt32Array(215, 214, 208), PackedInt32Array(208, 214, 213), PackedInt32Array(208, 213, 216), PackedInt32Array(216, 207, 208), PackedInt32Array(218, 217, 213), PackedInt32Array(213, 217, 219), PackedInt32Array(148, 220, 147), PackedInt32Array(221, 211, 222), PackedInt32Array(222, 211, 212), PackedInt32Array(223, 216, 224), PackedInt32Array(224, 216, 219), PackedInt32Array(219, 216, 213), PackedInt32Array(222, 212, 225), PackedInt32Array(225, 212, 220), PackedInt32Array(225, 220, 223), PackedInt32Array(223, 220, 148), PackedInt32Array(216, 226, 207), PackedInt32Array(227, 229, 228), PackedInt32Array(224, 230, 223), PackedInt32Array(223, 230, 225), PackedInt32Array(231, 235, 232), PackedInt32Array(232, 235, 234), PackedInt32Array(232, 234, 233), PackedInt32Array(227, 234, 229), PackedInt32Array(229, 234, 235), PackedInt32Array(229, 235, 236), PackedInt32Array(235, 231, 225), PackedInt32Array(225, 231, 222), PackedInt32Array(168, 237, 167), PackedInt32Array(167, 237, 238), PackedInt32Array(237, 241, 239), PackedInt32Array(239, 241, 240), PackedInt32Array(240, 241, 149), PackedInt32Array(243, 242, 244), PackedInt32Array(244, 242, 245), PackedInt32Array(149, 146, 240), PackedInt32Array(244, 245, 239), PackedInt32Array(239, 245, 238), PackedInt32Array(239, 238, 237), PackedInt32Array(245, 246, 238), PackedInt32Array(97, 247, 96), PackedInt32Array(96, 247, 248), PackedInt32Array(250, 249, 251), PackedInt32Array(251, 249, 247), PackedInt32Array(247, 249, 248), PackedInt32Array(250, 252, 249), PackedInt32Array(249, 252, 253), PackedInt32Array(253, 252, 254), PackedInt32Array(252, 255, 254), PackedInt32Array(256, 259, 257), PackedInt32Array(257, 259, 258), PackedInt32Array(261, 260, 262), PackedInt32Array(262, 260, 265), PackedInt32Array(262, 265, 264), PackedInt32Array(262, 264, 263), PackedInt32Array(258, 266, 103), PackedInt32Array(103, 266, 102), PackedInt32Array(261, 267, 260), PackedInt32Array(268, 266, 269), PackedInt32Array(269, 266, 270), PackedInt32Array(270, 266, 258), PackedInt32Array(270, 258, 259), PackedInt32Array(270, 259, 261), PackedInt32Array(261, 259, 267), PackedInt32Array(272, 271, 273), PackedInt32Array(273, 271, 274), PackedInt32Array(260, 275, 265), PackedInt32Array(265, 275, 274), PackedInt32Array(275, 273, 274), PackedInt32Array(277, 276, 278), PackedInt32Array(278, 276, 279), PackedInt32Array(283, 282, 280), PackedInt32Array(280, 282, 281), PackedInt32Array(287, 286, 284), PackedInt32Array(284, 286, 285), PackedInt32Array(291, 290, 288), PackedInt32Array(288, 290, 289), PackedInt32Array(190, 191, 292), PackedInt32Array(292, 191, 293), PackedInt32Array(205, 206, 294), PackedInt32Array(294, 206, 295), PackedInt32Array(296, 299, 297), PackedInt32Array(297, 299, 298), PackedInt32Array(294, 295, 300), PackedInt32Array(300, 295, 301), PackedInt32Array(301, 295, 302), PackedInt32Array(295, 303, 302), PackedInt32Array(299, 305, 304), PackedInt32Array(298, 299, 304), PackedInt32Array(300, 301, 306), PackedInt32Array(307, 300, 306), PackedInt32Array(307, 306, 308), PackedInt32Array(304, 305, 308), PackedInt32Array(308, 305, 307)] +geometry_collision_mask = 49 +geometry_source_geometry_mode = 1 + [node name="TestLevel" type="Node3D"] script = ExtResource("1_pvlbf") -[node name="FuncGodotMap" type="Node3D" parent="."] +[node name="Maps" type="Node3D" parent="." groups=["navigation_mesh_source_group"]] + +[node name="FuncGodotMap" type="Node3D" parent="Maps"] script = ExtResource("1_n6h0p") local_map_file = "uid://p7u4ms0pilsp" map_settings = ExtResource("2_i0sba") metadata/_custom_type_script = "uid://kno58homctew" -[node name="entity_0_worldspawn" type="StaticBody3D" parent="FuncGodotMap" groups=["Solid"]] +[node name="entity_0_worldspawn" type="StaticBody3D" parent="Maps/FuncGodotMap" groups=["Solid"]] collision_mask = 0 script = ExtResource("4_aq78g") -[node name="entity_0_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_mesh_instance" type="MeshInstance3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] mesh = SubResource("ArrayMesh_edwp5") -[node name="entity_0_occluder_instance" type="OccluderInstance3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_occluder_instance" type="OccluderInstance3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] occluder = SubResource("ArrayOccluder3D_65jyg") -[node name="entity_0_brush_0_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_0_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_despu") -[node name="entity_0_brush_1_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_1_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_xfc73") -[node name="entity_0_brush_2_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_2_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_vmy31") -[node name="entity_0_brush_3_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_3_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_fx3g2") -[node name="entity_0_brush_4_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_4_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_um16p") -[node name="entity_0_brush_5_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_5_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_bbydx") -[node name="entity_0_brush_6_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_6_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_btcca") -[node name="entity_0_brush_7_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_7_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_vtttv") -[node name="entity_0_brush_8_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_8_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_4ihv5") -[node name="entity_0_brush_9_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_9_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_kpymp") -[node name="entity_0_brush_10_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_10_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_mf5at") -[node name="entity_0_brush_11_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_11_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_005j7") -[node name="entity_0_brush_12_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_12_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_npv1g") -[node name="entity_0_brush_13_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_13_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_rfncj") -[node name="entity_0_brush_14_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_14_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_51d8c") -[node name="entity_0_brush_15_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_15_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_x5npb") -[node name="entity_0_brush_16_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_16_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_f4ugk") -[node name="entity_0_brush_17_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_17_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_hd6lw") -[node name="entity_0_brush_18_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_18_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_umvl4") -[node name="entity_0_brush_19_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_19_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_kob5s") -[node name="entity_0_brush_20_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_20_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_awrmj") -[node name="entity_0_brush_21_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_21_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_ar5cd") -[node name="entity_0_brush_22_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_22_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_d7jmf") -[node name="entity_0_brush_23_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_23_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_dt4t5") -[node name="entity_0_brush_24_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_24_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_k08ee") -[node name="entity_0_brush_25_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_25_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_cgmn7") -[node name="entity_0_brush_26_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_26_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_rri8m") -[node name="entity_0_brush_27_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_27_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_6uhge") -[node name="entity_0_brush_28_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_28_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_dohfg") -[node name="entity_0_brush_29_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_29_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_xobi1") -[node name="entity_0_brush_30_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_30_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_u76qv") -[node name="entity_0_brush_31_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_31_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_m15da") -[node name="entity_0_brush_32_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_32_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_qj04d") -[node name="entity_0_brush_33_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_33_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_1ohqu") -[node name="entity_0_brush_34_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_34_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_3vwxl") -[node name="entity_0_brush_35_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_35_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_s22g3") -[node name="entity_0_brush_36_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_36_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_qyisa") -[node name="entity_0_brush_37_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_37_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_8tkgc") -[node name="entity_0_brush_38_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_38_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_7yyul") -[node name="entity_0_brush_39_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_39_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_2fpqp") -[node name="entity_0_brush_40_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_40_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_8dp4g") -[node name="entity_0_brush_41_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_41_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_ysniq") -[node name="entity_0_brush_42_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_42_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_10jhb") -[node name="entity_0_brush_43_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_43_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_rs7yp") -[node name="entity_0_brush_44_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_44_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_76leh") -[node name="entity_0_brush_45_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_45_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_aup1v") -[node name="entity_0_brush_46_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_46_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_282ry") -[node name="entity_0_brush_47_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_47_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_qch81") -[node name="entity_0_brush_48_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_48_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_1ynbr") -[node name="entity_0_brush_49_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_49_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_06nuc") -[node name="entity_0_brush_50_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_50_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_50ch6") -[node name="entity_0_brush_51_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_51_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_4hbjx") -[node name="entity_0_brush_52_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_52_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_h23yi") -[node name="entity_0_brush_53_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_53_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_t3pst") -[node name="entity_0_brush_54_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_54_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_uq5wt") -[node name="entity_0_brush_55_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_55_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_3gabe") -[node name="entity_0_brush_56_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_56_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_u084i") -[node name="entity_0_brush_57_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_57_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_y7x20") -[node name="entity_0_brush_58_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_58_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_26ey8") -[node name="entity_0_brush_59_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_59_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_1if6d") -[node name="entity_0_brush_60_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_60_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_7454f") -[node name="entity_0_brush_61_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_61_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_lj5yp") -[node name="entity_0_brush_62_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_62_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_ovk1m") -[node name="entity_0_brush_63_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_63_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_0as78") -[node name="entity_0_brush_64_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_64_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_3kkpy") -[node name="entity_0_brush_65_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_65_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_gsllo") -[node name="entity_0_brush_66_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_66_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_vw8vi") -[node name="entity_0_brush_67_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_67_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_rxlpn") -[node name="entity_0_brush_68_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_68_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_yksbs") -[node name="entity_0_brush_69_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_69_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_a7ecd") -[node name="entity_0_brush_70_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_70_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_pntvd") -[node name="entity_0_brush_71_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_71_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_ha4bl") -[node name="entity_0_brush_72_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_72_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_k2jjr") -[node name="entity_0_brush_73_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_73_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_jttma") -[node name="entity_0_brush_74_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_74_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_71pda") -[node name="entity_0_brush_75_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_75_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_eb4ni") -[node name="entity_0_brush_76_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_76_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_t2hhd") -[node name="entity_0_brush_77_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_77_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_kr0e6") -[node name="entity_0_brush_78_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_78_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_dfn68") -[node name="entity_0_brush_79_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_79_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_7ch4s") -[node name="entity_0_brush_80_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_80_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_k1x1b") -[node name="entity_0_brush_81_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_81_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_kndcl") -[node name="entity_0_brush_82_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_82_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_jxkn6") -[node name="entity_0_brush_83_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_83_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_0t8qf") -[node name="entity_0_brush_84_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_84_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_hbd51") -[node name="entity_0_brush_85_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_85_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_8qmsi") -[node name="entity_0_brush_86_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_86_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_2vcc0") -[node name="entity_0_brush_87_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_87_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_xnadi") -[node name="entity_0_brush_88_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_88_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_se0xs") -[node name="entity_0_brush_89_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_89_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_6eprq") -[node name="entity_0_brush_90_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_90_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_s5pjv") -[node name="entity_0_brush_91_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_91_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_1vr48") -[node name="entity_0_brush_92_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_92_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_ux5gi") -[node name="entity_0_brush_93_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_93_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_wibkk") -[node name="entity_0_brush_94_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_94_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_maft2") -[node name="entity_0_brush_95_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_95_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_gujah") -[node name="entity_0_brush_96_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_96_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_kir23") -[node name="entity_0_brush_97_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_97_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_8gulh") -[node name="entity_0_brush_98_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_98_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_72qdp") -[node name="entity_0_brush_99_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_99_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_c56ee") -[node name="entity_0_brush_100_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_100_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_0ymhm") -[node name="entity_0_brush_101_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_101_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_rhfld") -[node name="entity_0_brush_102_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_102_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_r3t5n") -[node name="entity_0_brush_103_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_103_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_nncat") -[node name="entity_0_brush_104_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_104_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_dmhwx") -[node name="entity_0_brush_105_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_105_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_iwnek") -[node name="entity_0_brush_106_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_106_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_neslk") -[node name="entity_0_brush_107_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_107_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_7ubpa") -[node name="entity_0_brush_108_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_108_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_7yuhb") -[node name="entity_0_brush_109_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_109_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_hvysx") -[node name="entity_0_brush_110_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_110_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_q0keq") -[node name="entity_0_brush_111_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_111_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_5pf6x") -[node name="entity_0_brush_112_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_112_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_757rj") -[node name="entity_0_brush_113_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_113_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_fbf1r") -[node name="entity_0_brush_114_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_114_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_xoc2w") -[node name="entity_0_brush_115_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_115_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_i5mgl") -[node name="entity_0_brush_116_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_116_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_1upl2") -[node name="entity_0_brush_117_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_117_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_bvqbo") -[node name="entity_0_brush_118_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_118_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_6pe5d") -[node name="entity_0_brush_119_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_119_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_h3j20") -[node name="entity_0_brush_120_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_120_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_dtwsa") -[node name="entity_0_brush_121_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_121_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_nk1ty") -[node name="entity_0_brush_122_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_122_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_aarlm") -[node name="entity_0_brush_123_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_123_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_gr044") -[node name="entity_0_brush_124_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_124_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_kyy03") -[node name="entity_0_brush_125_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_125_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_qcqf2") -[node name="entity_0_brush_126_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_126_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_o6162") -[node name="entity_0_brush_127_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_127_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_cj0b8") -[node name="entity_0_brush_128_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_128_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_0x0wi") -[node name="entity_0_brush_129_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_129_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_olbpk") -[node name="entity_0_brush_130_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_130_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_dec0f") -[node name="entity_0_brush_131_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_131_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_s3koj") -[node name="entity_0_brush_132_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_132_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_l2xtj") -[node name="entity_0_brush_133_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_133_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_jqgpr") -[node name="entity_0_brush_134_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_134_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_08nsu") -[node name="entity_0_brush_135_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_135_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_xq63j") -[node name="entity_0_brush_136_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_136_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_66xfe") -[node name="entity_0_brush_137_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_137_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_fd1l7") -[node name="entity_0_brush_138_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_138_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_yitaf") -[node name="entity_0_brush_139_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_139_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_xsf2q") -[node name="entity_0_brush_140_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_140_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_hv7o6") -[node name="entity_0_brush_141_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_141_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_6n4le") -[node name="entity_0_brush_142_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_142_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_eckcw") -[node name="entity_0_brush_143_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_143_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_hgy3e") -[node name="entity_0_brush_144_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_144_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_7tbo1") -[node name="entity_0_brush_145_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_145_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_ij05k") -[node name="entity_0_brush_146_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_146_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_mpbqv") -[node name="entity_0_brush_147_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_147_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_i2fwl") -[node name="entity_0_brush_148_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_148_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_no2u7") -[node name="entity_0_brush_149_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_149_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_2sfjp") -[node name="entity_0_brush_150_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_150_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_xx2h5") -[node name="entity_0_brush_151_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_151_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_6c77w") -[node name="entity_0_brush_152_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_152_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_vr518") -[node name="entity_0_brush_153_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_153_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_dejua") -[node name="entity_0_brush_154_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_154_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_sv8yx") -[node name="entity_0_brush_155_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_155_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_s4mxk") -[node name="entity_0_brush_156_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_156_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_c68eb") -[node name="entity_0_brush_157_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_157_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_4oaab") -[node name="entity_0_brush_158_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_158_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_6an5u") -[node name="entity_0_brush_159_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_159_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_mndtp") -[node name="entity_0_brush_160_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_160_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_rwrx4") -[node name="entity_0_brush_161_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_161_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_e8e87") -[node name="entity_0_brush_162_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_162_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_rqghm") -[node name="entity_0_brush_163_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_163_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_oqox1") -[node name="entity_0_brush_164_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_164_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_twi2o") -[node name="entity_0_brush_165_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_165_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_rqpdr") -[node name="entity_0_brush_166_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_166_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_oys4n") -[node name="entity_0_brush_167_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_167_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_givs1") -[node name="entity_0_brush_168_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_168_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_kjj1v") -[node name="entity_0_brush_169_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_169_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_e0dpg") -[node name="entity_0_brush_170_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_170_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_gv6o2") -[node name="entity_0_brush_171_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_171_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_kmibl") -[node name="entity_0_brush_172_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_172_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_a1qgy") -[node name="entity_0_brush_173_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_173_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_i7kdv") -[node name="entity_0_brush_174_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_174_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_penog") -[node name="entity_0_brush_175_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_175_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_k0inm") -[node name="entity_0_brush_176_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_176_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_j1d2l") -[node name="entity_0_brush_177_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_177_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_b3fbf") -[node name="entity_0_brush_178_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_178_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_y38vk") -[node name="entity_0_brush_179_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_179_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_x8arn") -[node name="entity_0_brush_180_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_180_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_vptk6") -[node name="entity_0_brush_181_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_181_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_a2a2p") -[node name="entity_0_brush_182_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_182_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_s61t2") -[node name="entity_0_brush_183_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_183_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_m3fgh") -[node name="entity_0_brush_184_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_184_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_11om5") -[node name="entity_0_brush_185_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_185_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_3auv3") -[node name="entity_0_brush_186_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_186_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_krj3j") -[node name="entity_0_brush_187_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_187_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_gs7ew") -[node name="entity_0_brush_188_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_188_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_p8h87") -[node name="entity_0_brush_189_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_189_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_280rc") -[node name="entity_0_brush_190_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_190_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_10viq") -[node name="entity_0_brush_191_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_191_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_j0h0u") -[node name="entity_0_brush_192_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_192_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_nsian") -[node name="entity_0_brush_193_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_193_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_bjm27") -[node name="entity_0_brush_194_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_194_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_7rew8") -[node name="entity_0_brush_195_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_195_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_htt8e") -[node name="entity_0_brush_196_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_196_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_bcaqk") -[node name="entity_0_brush_197_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_197_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_ut8v4") -[node name="entity_0_brush_198_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_198_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_aybhs") -[node name="entity_0_brush_199_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_199_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_6kfnk") -[node name="entity_0_brush_200_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_200_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_vuprk") -[node name="entity_0_brush_201_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_201_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_5cqv7") -[node name="entity_0_brush_202_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_202_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_k71ok") -[node name="entity_0_brush_203_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_203_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_ogxld") -[node name="entity_0_brush_204_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_204_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_8gqob") -[node name="entity_0_brush_205_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_205_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_bapjn") -[node name="entity_0_brush_206_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_206_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_5auhv") -[node name="entity_0_brush_207_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_207_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_f2clm") -[node name="entity_0_brush_208_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_208_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_umv6g") -[node name="entity_0_brush_209_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_209_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_o7uq2") -[node name="entity_0_brush_210_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_210_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_85le0") -[node name="entity_0_brush_211_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_211_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_ve2gk") -[node name="entity_0_brush_212_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_212_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_2emea") -[node name="entity_0_brush_213_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_213_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_3i5qx") -[node name="entity_0_brush_214_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_214_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_qquw8") -[node name="entity_0_brush_215_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_215_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_ue7xc") -[node name="entity_0_brush_216_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_216_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_svlbj") -[node name="entity_0_brush_217_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_217_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_uvn5l") -[node name="entity_0_brush_218_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_218_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_2wt7c") -[node name="entity_0_brush_219_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_219_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_ses4j") -[node name="entity_0_brush_220_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_220_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_264vs") -[node name="entity_0_brush_221_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_221_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_4f6he") -[node name="entity_0_brush_222_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_222_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_2ouaw") -[node name="entity_0_brush_223_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_223_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_sulx0") -[node name="entity_0_brush_224_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_224_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_21w35") -[node name="entity_0_brush_225_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_225_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_w7r6y") -[node name="entity_0_brush_226_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_226_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_h8hhj") -[node name="entity_0_brush_227_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_227_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_hl43h") -[node name="entity_0_brush_228_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_228_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_7q5yc") -[node name="entity_0_brush_229_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_229_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_igc2x") -[node name="entity_0_brush_230_collision_shape" type="CollisionShape3D" parent="FuncGodotMap/entity_0_worldspawn"] +[node name="entity_0_brush_230_collision_shape" type="CollisionShape3D" parent="Maps/FuncGodotMap/entity_0_worldspawn"] shape = SubResource("ConvexPolygonShape3D_x5cqq") -[node name="entity_1_wall_grille" type="Node3D" parent="FuncGodotMap"] +[node name="entity_1_wall_grille" type="Node3D" parent="Maps/FuncGodotMap"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 3, 2, 21.875) -[node name="entity_1_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_1_wall_grille"] +[node name="entity_1_mesh_instance" type="MeshInstance3D" parent="Maps/FuncGodotMap/entity_1_wall_grille"] cast_shadow = 2 gi_mode = 0 mesh = SubResource("ArrayMesh_h0om7") -[node name="entity_2_wall_grille" type="Node3D" parent="FuncGodotMap"] +[node name="entity_2_wall_grille" type="Node3D" parent="Maps/FuncGodotMap"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 2, 21.875) -[node name="entity_2_mesh_instance" type="MeshInstance3D" parent="FuncGodotMap/entity_2_wall_grille"] +[node name="entity_2_mesh_instance" type="MeshInstance3D" parent="Maps/FuncGodotMap/entity_2_wall_grille"] cast_shadow = 2 gi_mode = 0 mesh = SubResource("ArrayMesh_fc23i") -[node name="group_1_Wall_Brick" type="Node3D" parent="FuncGodotMap"] +[node name="group_1_Wall_Brick" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_2_Wall_Brick" type="Node3D" parent="FuncGodotMap"] +[node name="group_2_Wall_Brick" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_3_Wall_Panel_Blue" type="Node3D" parent="FuncGodotMap"] +[node name="group_3_Wall_Panel_Blue" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_4_Wall_Panel_Blue" type="Node3D" parent="FuncGodotMap"] +[node name="group_4_Wall_Panel_Blue" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_5_Wall_Panel_Blue" type="Node3D" parent="FuncGodotMap"] +[node name="group_5_Wall_Panel_Blue" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_6_Wall_Panel_Blue" type="Node3D" parent="FuncGodotMap"] +[node name="group_6_Wall_Panel_Blue" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_7_Wall_Panel_Blue" type="Node3D" parent="FuncGodotMap"] +[node name="group_7_Wall_Panel_Blue" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_8_Wall_Panel_Blue" type="Node3D" parent="FuncGodotMap"] +[node name="group_8_Wall_Panel_Blue" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_9_Wall_Panel_Blue" type="Node3D" parent="FuncGodotMap"] +[node name="group_9_Wall_Panel_Blue" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_10_Wall_Panel_Blue_Small" type="Node3D" parent="FuncGodotMap"] +[node name="group_10_Wall_Panel_Blue_Small" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_11_Wall_Panel_Blue_Small" type="Node3D" parent="FuncGodotMap"] +[node name="group_11_Wall_Panel_Blue_Small" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_12_Wall_Panel_Blue_Small" type="Node3D" parent="FuncGodotMap"] +[node name="group_12_Wall_Panel_Blue_Small" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_13_Wall_Panel_Grille" type="Node3D" parent="FuncGodotMap"] +[node name="group_13_Wall_Panel_Grille" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_14_Wall_Panel_Grille" type="Node3D" parent="FuncGodotMap"] +[node name="group_14_Wall_Panel_Grille" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_15_Wall_Brick" type="Node3D" parent="FuncGodotMap"] +[node name="group_15_Wall_Brick" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_16_Wall_Panel_Electric" type="Node3D" parent="FuncGodotMap"] +[node name="group_16_Wall_Panel_Electric" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_17_Wall_Panel_Electric" type="Node3D" parent="FuncGodotMap"] +[node name="group_17_Wall_Panel_Electric" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_18_Wall_Panel_Grille" type="Node3D" parent="FuncGodotMap"] +[node name="group_18_Wall_Panel_Grille" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_19_Wall_Panel_Grille" type="Node3D" parent="FuncGodotMap"] +[node name="group_19_Wall_Panel_Grille" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_20_Wall_Panel_Grille" type="Node3D" parent="FuncGodotMap"] +[node name="group_20_Wall_Panel_Grille" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_21_Wall_Panel_Grille" type="Node3D" parent="FuncGodotMap"] +[node name="group_21_Wall_Panel_Grille" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_22_Wall_Panel_Blue" type="Node3D" parent="FuncGodotMap"] +[node name="group_22_Wall_Panel_Blue" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_23_Wall_Panel_Blue" type="Node3D" parent="FuncGodotMap"] +[node name="group_23_Wall_Panel_Blue" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_25_Wall_Panel_Blue" type="Node3D" parent="FuncGodotMap"] +[node name="group_25_Wall_Panel_Blue" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="entity_27_light_omni" type="OmniLight3D" parent="FuncGodotMap"] +[node name="entity_27_light_omni" type="OmniLight3D" parent="Maps/FuncGodotMap"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 28.5, 2.5, 15.5) -[node name="entity_28_light_spot" type="SpotLight3D" parent="FuncGodotMap"] +[node name="entity_28_light_spot" type="SpotLight3D" parent="Maps/FuncGodotMap"] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 25.5, 2.5, 8.5) shadow_bias = 0.1 spot_range = 10.0 script = ExtResource("31_c2mph") -[node name="entity_29_light_omni" type="OmniLight3D" parent="FuncGodotMap"] +[node name="entity_29_light_omni" type="OmniLight3D" parent="Maps/FuncGodotMap"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 14.5, 2.5, 19.5) -[node name="entity_30_light_omni" type="OmniLight3D" parent="FuncGodotMap"] +[node name="entity_30_light_omni" type="OmniLight3D" parent="Maps/FuncGodotMap"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 17.5, 2.5, 25.5) -[node name="entity_31_light_omni" type="OmniLight3D" parent="FuncGodotMap"] +[node name="entity_31_light_omni" type="OmniLight3D" parent="Maps/FuncGodotMap"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.5, 2.5, 25.5) -[node name="entity_32_light_omni" type="OmniLight3D" parent="FuncGodotMap"] +[node name="entity_32_light_omni" type="OmniLight3D" parent="Maps/FuncGodotMap"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 11.5, 2.5, 31.5) -[node name="entity_33_light_omni" type="OmniLight3D" parent="FuncGodotMap"] +[node name="entity_33_light_omni" type="OmniLight3D" parent="Maps/FuncGodotMap"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 2.5, 23.5) -[node name="entity_34_light_omni" type="OmniLight3D" parent="FuncGodotMap"] +[node name="entity_34_light_omni" type="OmniLight3D" parent="Maps/FuncGodotMap"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16.5, 2.5, 30.5) -[node name="entity_35_light_omni" type="OmniLight3D" parent="FuncGodotMap"] +[node name="entity_35_light_omni" type="OmniLight3D" parent="Maps/FuncGodotMap"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20.5, 2.5, 30.5) -[node name="entity_36_light_omni" type="OmniLight3D" parent="FuncGodotMap"] +[node name="entity_36_light_omni" type="OmniLight3D" parent="Maps/FuncGodotMap"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 25.5, 2.5, 30.5) -[node name="entity_37_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("33_8pgky")] +[node name="entity_37_actor_barrel_1" parent="Maps/FuncGodotMap" instance=ExtResource("33_8pgky")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 31.5, 1.5, 16) -[node name="entity_38_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("33_8pgky")] +[node name="entity_38_actor_barrel_1" parent="Maps/FuncGodotMap" instance=ExtResource("33_8pgky")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 31.5, 1.5, 20.5) -[node name="entity_39_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("33_8pgky")] +[node name="entity_39_actor_barrel_1" parent="Maps/FuncGodotMap" instance=ExtResource("33_8pgky")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 26.5, 1.5, 20.5) -[node name="entity_40_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("33_8pgky")] +[node name="entity_40_actor_barrel_1" parent="Maps/FuncGodotMap" instance=ExtResource("33_8pgky")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22.5, 1.5, 16.5) -[node name="entity_41_actor_tank" parent="FuncGodotMap" instance=ExtResource("36_p0kgf")] +[node name="entity_41_actor_tank" parent="Maps/FuncGodotMap" instance=ExtResource("36_p0kgf")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 34, 1.5, 17.5) -[node name="entity_42_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_42_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 22.5, 1.25, 20.75) -[node name="entity_43_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_43_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(1.19249e-08, 0, -1, 0, 1, 0, 1, 0, 1.19249e-08, 22.5, 1.25, 17.75) -[node name="entity_44_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_44_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 34.5, 1.5, 15) -[node name="entity_45_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_45_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 33.5, 1.5, 15) -[node name="entity_46_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_46_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 32.5, 1.5, 15) -[node name="entity_47_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_47_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 31.5, 1.5, 15) -[node name="entity_48_actor_tube_junction" parent="FuncGodotMap" instance=ExtResource("40_mv1c4")] +[node name="entity_48_actor_tube_junction" parent="Maps/FuncGodotMap" instance=ExtResource("40_mv1c4")] transform = Transform3D(1.19249e-08, 0, -1, 0, 1, 0, 1, 0, 1.19249e-08, 30.5, 1.5, 15) -[node name="entity_49_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_49_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 31.5, 1.5, 13) -[node name="entity_50_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_50_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 32.5, 1.5, 13) -[node name="entity_51_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_51_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 33.5, 1.5, 13) -[node name="entity_52_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_52_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 34.5, 1.5, 13) -[node name="entity_53_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_53_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(1.39071e-07, 0, 1, 0, 1, 0, -1, 0, 1.39071e-07, 30.5, 1.5, 14) -[node name="entity_54_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_54_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 22.5, 1.5, 13) -[node name="entity_55_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_55_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 23.5, 1.5, 13) -[node name="entity_56_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_56_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 24.5, 1.5, 13) -[node name="entity_57_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_57_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 25.5, 1.5, 13) -[node name="entity_58_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_58_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 26.5, 1.5, 13) -[node name="entity_59_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_59_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(1.39071e-07, 0, 1, 0, 1, 0, -1, 0, 1.39071e-07, 27.5, 1.5, 14) -[node name="entity_60_actor_tube_junction" parent="FuncGodotMap" instance=ExtResource("40_mv1c4")] +[node name="entity_60_actor_tube_junction" parent="Maps/FuncGodotMap" instance=ExtResource("40_mv1c4")] transform = Transform3D(1, 0, 1.74846e-07, 0, 1, 0, -1.74846e-07, 0, 1, 30.5, 1.5, 17) -[node name="entity_61_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_61_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 29.5, 1.5, 17) -[node name="entity_62_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_62_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 28.5, 1.5, 17) -[node name="entity_63_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_63_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 27.5, 1.5, 17) -[node name="entity_64_actor_tube_straight" parent="FuncGodotMap" instance=ExtResource("43_e6gae")] +[node name="entity_64_actor_tube_straight" parent="Maps/FuncGodotMap" instance=ExtResource("43_e6gae")] transform = Transform3D(1.39071e-07, 0, 1, 0, 1, 0, -1, 0, 1.39071e-07, 30.5, 1.5, 16) -[node name="entity_65_actor_box_red" parent="FuncGodotMap" instance=ExtResource("40_6xnl1")] +[node name="entity_65_actor_box_red" parent="Maps/FuncGodotMap" instance=ExtResource("40_6xnl1")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 29.5, 1.25, 23.5) -[node name="entity_66_actor_box_red" parent="FuncGodotMap" instance=ExtResource("40_6xnl1")] +[node name="entity_66_actor_box_red" parent="Maps/FuncGodotMap" instance=ExtResource("40_6xnl1")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 30.5, 1.25, 23.5) -[node name="entity_67_actor_box_red" parent="FuncGodotMap" instance=ExtResource("40_6xnl1")] +[node name="entity_67_actor_box_red" parent="Maps/FuncGodotMap" instance=ExtResource("40_6xnl1")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 29.5, 1.75, 23.5) -[node name="entity_68_actor_box_red" parent="FuncGodotMap" instance=ExtResource("40_6xnl1")] +[node name="entity_68_actor_box_red" parent="Maps/FuncGodotMap" instance=ExtResource("40_6xnl1")] transform = Transform3D(-0.707107, 0, -0.707107, 0, 1, 0, 0.707107, 0, -0.707107, 30.5, 1.75, 23.5) -[node name="entity_69_actor_box_red" parent="FuncGodotMap" instance=ExtResource("40_6xnl1")] +[node name="entity_69_actor_box_red" parent="Maps/FuncGodotMap" instance=ExtResource("40_6xnl1")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 27.5, 1.25, 20.5) -[node name="entity_70_actor_box_red" parent="FuncGodotMap" instance=ExtResource("40_6xnl1")] +[node name="entity_70_actor_box_red" parent="Maps/FuncGodotMap" instance=ExtResource("40_6xnl1")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 28.5, 1.25, 20.5) -[node name="entity_71_actor_box_red" parent="FuncGodotMap" instance=ExtResource("40_6xnl1")] +[node name="entity_71_actor_box_red" parent="Maps/FuncGodotMap" instance=ExtResource("40_6xnl1")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 30.5, 1.25, 20.5) -[node name="entity_72_actor_box_red" parent="FuncGodotMap" instance=ExtResource("40_6xnl1")] +[node name="entity_72_actor_box_red" parent="Maps/FuncGodotMap" instance=ExtResource("40_6xnl1")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 28.5, 1.25, 21.5) -[node name="entity_73_actor_box_red" parent="FuncGodotMap" instance=ExtResource("40_6xnl1")] +[node name="entity_73_actor_box_red" parent="Maps/FuncGodotMap" instance=ExtResource("40_6xnl1")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 27.5, 1.25, 21.5) -[node name="entity_74_actor_box_red" parent="FuncGodotMap" instance=ExtResource("40_6xnl1")] +[node name="entity_74_actor_box_red" parent="Maps/FuncGodotMap" instance=ExtResource("40_6xnl1")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 27.5, 1.25, 22.5) -[node name="entity_75_actor_box_red" parent="FuncGodotMap" instance=ExtResource("40_6xnl1")] +[node name="entity_75_actor_box_red" parent="Maps/FuncGodotMap" instance=ExtResource("40_6xnl1")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 28.5, 1.25, 22.5) -[node name="entity_76_actor_box_red" parent="FuncGodotMap" instance=ExtResource("40_6xnl1")] +[node name="entity_76_actor_box_red" parent="Maps/FuncGodotMap" instance=ExtResource("40_6xnl1")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 27.5, 1.25, 23.5) -[node name="entity_77_actor_box_blue" parent="FuncGodotMap" instance=ExtResource("37_e6gae")] +[node name="entity_77_actor_box_blue" parent="Maps/FuncGodotMap" instance=ExtResource("37_e6gae")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30.5, 1.25, 22.5) -[node name="entity_78_actor_box_blue" parent="FuncGodotMap" instance=ExtResource("37_e6gae")] +[node name="entity_78_actor_box_blue" parent="Maps/FuncGodotMap" instance=ExtResource("37_e6gae")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30.5, 1.75, 22.5) -[node name="entity_79_actor_box_blue" parent="FuncGodotMap" instance=ExtResource("37_e6gae")] +[node name="entity_79_actor_box_blue" parent="Maps/FuncGodotMap" instance=ExtResource("37_e6gae")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 28.5, 1.75, 22.5) -[node name="entity_80_actor_box_blue" parent="FuncGodotMap" instance=ExtResource("37_e6gae")] +[node name="entity_80_actor_box_blue" parent="Maps/FuncGodotMap" instance=ExtResource("37_e6gae")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 27.5, 1.75, 21.5) -[node name="entity_81_actor_box_blue" parent="FuncGodotMap" instance=ExtResource("37_e6gae")] +[node name="entity_81_actor_box_blue" parent="Maps/FuncGodotMap" instance=ExtResource("37_e6gae")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 28.5, 1.25, 8.5) -[node name="entity_82_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_82_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 12, 1.25, 16.75) -[node name="entity_83_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_83_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 12, 1.25, 17.25) -[node name="entity_84_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_84_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 13, 1.25, 16.75) -[node name="entity_85_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_85_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 12, 1.75, 16.75) -[node name="entity_86_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_86_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 17, 1.25, 16.75) -[node name="entity_87_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_87_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 17, 1.25, 17.25) -[node name="entity_88_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_88_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 16, 1.25, 16.75) -[node name="entity_89_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_89_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 17, 1.75, 16.75) -[node name="entity_90_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_90_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 17, 1.25, 22.25) -[node name="entity_91_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_91_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 11.5, 1.25, 22.25) -[node name="entity_92_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_92_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 17, 1.75, 22.25) -[node name="entity_93_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_93_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 11.5, 1.75, 22.25) -[node name="entity_94_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_94_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 11.5, 1.25, 22.75) -[node name="entity_95_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_95_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 17, 1.25, 22.75) -[node name="entity_96_actor_table" parent="FuncGodotMap" instance=ExtResource("43_7bofg")] +[node name="entity_96_actor_table" parent="Maps/FuncGodotMap" instance=ExtResource("43_7bofg")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 14.5, 1.25, 17) -[node name="entity_97_actor_box_blue" parent="FuncGodotMap" instance=ExtResource("37_e6gae")] +[node name="entity_97_actor_box_blue" parent="Maps/FuncGodotMap" instance=ExtResource("37_e6gae")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 1.25, 21) -[node name="entity_98_actor_box_red" parent="FuncGodotMap" instance=ExtResource("40_6xnl1")] +[node name="entity_98_actor_box_red" parent="Maps/FuncGodotMap" instance=ExtResource("40_6xnl1")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 12, 1.75, 21) -[node name="entity_99_actor_box_blue" parent="FuncGodotMap" instance=ExtResource("37_e6gae")] +[node name="entity_99_actor_box_blue" parent="Maps/FuncGodotMap" instance=ExtResource("37_e6gae")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 17, 1.25, 21) -[node name="entity_100_actor_box_blue" parent="FuncGodotMap" instance=ExtResource("37_e6gae")] +[node name="entity_100_actor_box_blue" parent="Maps/FuncGodotMap" instance=ExtResource("37_e6gae")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 17, 1.75, 21) -[node name="entity_101_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("33_8pgky")] +[node name="entity_101_actor_barrel_1" parent="Maps/FuncGodotMap" instance=ExtResource("33_8pgky")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22.5, 1.5, 15.5) -[node name="entity_102_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("33_8pgky")] +[node name="entity_102_actor_barrel_1" parent="Maps/FuncGodotMap" instance=ExtResource("33_8pgky")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22.5, 1.5, 14.5) -[node name="entity_103_actor_barrel_1" parent="FuncGodotMap" instance=ExtResource("33_8pgky")] +[node name="entity_103_actor_barrel_1" parent="Maps/FuncGodotMap" instance=ExtResource("33_8pgky")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22.5, 2, 14.5) -[node name="entity_104_actor_tank" parent="FuncGodotMap" instance=ExtResource("36_p0kgf")] +[node name="entity_104_actor_tank" parent="Maps/FuncGodotMap" instance=ExtResource("36_p0kgf")] transform = Transform3D(1.19249e-08, 0, -1, 0, 1, 0, 1, 0, 1.19249e-08, 34, 1.5, 27) -[node name="entity_105_actor_ac_unit" parent="FuncGodotMap" instance=ExtResource("45_23h3s")] +[node name="entity_105_actor_ac_unit" parent="Maps/FuncGodotMap" instance=ExtResource("45_23h3s")] transform = Transform3D(1.39071e-07, 0, 1, 0, 1, 0, -1, 0, 1.39071e-07, 22.5, 1.5, 19.5) -[node name="entity_106_actor_ac_unit" parent="FuncGodotMap" instance=ExtResource("45_23h3s")] +[node name="entity_106_actor_ac_unit" parent="Maps/FuncGodotMap" instance=ExtResource("45_23h3s")] transform = Transform3D(1, 0, 1.74846e-07, 0, 1, 0, -1.74846e-07, 0, 1, 34.5, 1.5, 10.5) -[node name="entity_107_actor_terminal" parent="FuncGodotMap" instance=ExtResource("46_t4e15")] +[node name="entity_107_actor_terminal" parent="Maps/FuncGodotMap" instance=ExtResource("46_t4e15")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 14.5, 1.75, 17) -[node name="entity_108_actor_ac_unit" parent="FuncGodotMap" instance=ExtResource("45_23h3s")] +[node name="entity_108_actor_ac_unit" parent="Maps/FuncGodotMap" instance=ExtResource("45_23h3s")] transform = Transform3D(1.39071e-07, 0, 1, 0, 1, 0, -1, 0, 1.39071e-07, 11.75, 1.5, 19) -[node name="entity_109_actor_tube_corner" parent="FuncGodotMap" instance=ExtResource("47_t4e15")] +[node name="entity_109_actor_tube_corner" parent="Maps/FuncGodotMap" instance=ExtResource("47_t4e15")] transform = Transform3D(1.39071e-07, 0, 1, 0, 1, 0, -1, 0, 1.39071e-07, 30.5, 1.5, 13) -[node name="entity_110_actor_tube_corner" parent="FuncGodotMap" instance=ExtResource("47_t4e15")] +[node name="entity_110_actor_tube_corner" parent="Maps/FuncGodotMap" instance=ExtResource("47_t4e15")] transform = Transform3D(1, 0, 1.74846e-07, 0, 1, 0, -1.74846e-07, 0, 1, 27.5, 1.5, 13) -[node name="entity_111_actor_box_green" parent="FuncGodotMap" instance=ExtResource("48_1mv1n")] +[node name="entity_111_actor_box_green" parent="Maps/FuncGodotMap" instance=ExtResource("48_1mv1n")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 29.5, 1.25, 20.5) -[node name="entity_112_actor_box_green" parent="FuncGodotMap" instance=ExtResource("48_1mv1n")] +[node name="entity_112_actor_box_green" parent="Maps/FuncGodotMap" instance=ExtResource("48_1mv1n")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 29.5, 1.25, 21.5) -[node name="entity_113_actor_box_yellow" parent="FuncGodotMap" instance=ExtResource("49_orfn6")] +[node name="entity_113_actor_box_yellow" parent="Maps/FuncGodotMap" instance=ExtResource("49_orfn6")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 30.5, 1.25, 21.5) -[node name="entity_114_actor_box_green" parent="FuncGodotMap" instance=ExtResource("48_1mv1n")] +[node name="entity_114_actor_box_green" parent="Maps/FuncGodotMap" instance=ExtResource("48_1mv1n")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 30.5, 1.75, 20.5) -[node name="entity_115_actor_box_yellow" parent="FuncGodotMap" instance=ExtResource("49_orfn6")] +[node name="entity_115_actor_box_yellow" parent="Maps/FuncGodotMap" instance=ExtResource("49_orfn6")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 27.5, 1.75, 20.5) -[node name="entity_116_actor_box_yellow" parent="FuncGodotMap" instance=ExtResource("49_orfn6")] +[node name="entity_116_actor_box_yellow" parent="Maps/FuncGodotMap" instance=ExtResource("49_orfn6")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 29.5, 1.25, 22.5) -[node name="entity_117_actor_capacitor" parent="FuncGodotMap" instance=ExtResource("50_orfn6")] +[node name="entity_117_actor_capacitor" parent="Maps/FuncGodotMap" instance=ExtResource("50_orfn6")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 8.5, 1.75, 33) -[node name="entity_118_actor_capacitor" parent="FuncGodotMap" instance=ExtResource("50_orfn6")] +[node name="entity_118_actor_capacitor" parent="Maps/FuncGodotMap" instance=ExtResource("50_orfn6")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 8.5, 1.75, 31) -[node name="entity_119_actor_box_green" parent="FuncGodotMap" instance=ExtResource("48_1mv1n")] +[node name="entity_119_actor_box_green" parent="Maps/FuncGodotMap" instance=ExtResource("48_1mv1n")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 44.5, 1.25, 15.5) -[node name="entity_120_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_120_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 49.5, 1.75, 15.25) -[node name="entity_121_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_121_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 49.5, 1.25, 15.25) -[node name="entity_122_actor_table" parent="FuncGodotMap" instance=ExtResource("43_7bofg")] +[node name="entity_122_actor_table" parent="Maps/FuncGodotMap" instance=ExtResource("43_7bofg")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 45.75, 1.25, 15.5) -[node name="entity_123_actor_box_green" parent="FuncGodotMap" instance=ExtResource("48_1mv1n")] +[node name="entity_123_actor_box_green" parent="Maps/FuncGodotMap" instance=ExtResource("48_1mv1n")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 49.5, 1.25, 17.5) -[node name="entity_124_actor_box_red" parent="FuncGodotMap" instance=ExtResource("40_6xnl1")] +[node name="entity_124_actor_box_red" parent="Maps/FuncGodotMap" instance=ExtResource("40_6xnl1")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 49, 1.25, 18.5) -[node name="entity_125_actor_box_blue" parent="FuncGodotMap" instance=ExtResource("37_e6gae")] +[node name="entity_125_actor_box_blue" parent="Maps/FuncGodotMap" instance=ExtResource("37_e6gae")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 47.5, 1.25, 19.5) -[node name="entity_126_actor_box_yellow" parent="FuncGodotMap" instance=ExtResource("49_orfn6")] +[node name="entity_126_actor_box_yellow" parent="Maps/FuncGodotMap" instance=ExtResource("49_orfn6")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 49.5, 1.25, 20) -[node name="entity_127_actor_box_blue" parent="FuncGodotMap" instance=ExtResource("37_e6gae")] +[node name="entity_127_actor_box_blue" parent="Maps/FuncGodotMap" instance=ExtResource("37_e6gae")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 44.5, 1.75, 15.5) -[node name="entity_128_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_128_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 48.5, 1.25, 15.25) -[node name="entity_129_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_129_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 49.5, 1.25, 15.75) -[node name="entity_130_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_130_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 49.5, 1.25, 19.25) -[node name="entity_131_actor_ac_unit" parent="FuncGodotMap" instance=ExtResource("45_23h3s")] +[node name="entity_131_actor_ac_unit" parent="Maps/FuncGodotMap" instance=ExtResource("45_23h3s")] transform = Transform3D(1.39071e-07, 0, 1, 0, 1, 0, -1, 0, 1.39071e-07, 44.25, 1.5, 17.75) -[node name="entity_132_actor_vendingmachine" parent="FuncGodotMap" instance=ExtResource("50_xly81")] +[node name="entity_132_actor_vendingmachine" parent="Maps/FuncGodotMap" instance=ExtResource("50_xly81")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 47.5, 1.75, 15.5) -[node name="entity_133_actor_terminal_big" parent="FuncGodotMap" instance=ExtResource("53_anja4")] +[node name="entity_133_actor_terminal_big" parent="Maps/FuncGodotMap" instance=ExtResource("53_anja4")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 33.25, 1.75, 10.5) -[node name="entity_134_actor_box_green" parent="FuncGodotMap" instance=ExtResource("48_1mv1n")] +[node name="entity_134_actor_box_green" parent="Maps/FuncGodotMap" instance=ExtResource("48_1mv1n")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 28.5, 1.25, 23.5) -[node name="entity_135_actor_box_green" parent="FuncGodotMap" instance=ExtResource("48_1mv1n")] +[node name="entity_135_actor_box_green" parent="Maps/FuncGodotMap" instance=ExtResource("48_1mv1n")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 28.5, 1.75, 23.5) -[node name="entity_136_actor_capacitor_mini" parent="FuncGodotMap" instance=ExtResource("53_xly81")] +[node name="entity_136_actor_capacitor_mini" parent="Maps/FuncGodotMap" instance=ExtResource("53_xly81")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 22.5, 1.5, 11.5) -[node name="entity_137_actor_capacitor_mini" parent="FuncGodotMap" instance=ExtResource("53_xly81")] +[node name="entity_137_actor_capacitor_mini" parent="Maps/FuncGodotMap" instance=ExtResource("53_xly81")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 22.5, 1.5, 10.5) -[node name="entity_138_actor_table" parent="FuncGodotMap" instance=ExtResource("43_7bofg")] +[node name="entity_138_actor_table" parent="Maps/FuncGodotMap" instance=ExtResource("43_7bofg")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 24.75, 1.25, 10.5) -[node name="entity_139_actor_terminal" parent="FuncGodotMap" instance=ExtResource("46_t4e15")] +[node name="entity_139_actor_terminal" parent="Maps/FuncGodotMap" instance=ExtResource("46_t4e15")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 24.75, 1.75, 10.5) -[node name="entity_140_actor_box_wood" parent="FuncGodotMap" instance=ExtResource("38_mv1c4")] +[node name="entity_140_actor_box_wood" parent="Maps/FuncGodotMap" instance=ExtResource("38_mv1c4")] transform = Transform3D(1.19249e-08, 0, -1, 0, 1, 0, 1, 0, 1.19249e-08, 23.5, 1.25, 10.5) -[node name="entity_141_actor_box_blue" parent="FuncGodotMap" instance=ExtResource("37_e6gae")] +[node name="entity_141_actor_box_blue" parent="Maps/FuncGodotMap" instance=ExtResource("37_e6gae")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 28.5, 1.75, 8.5) -[node name="entity_142_actor_box_red" parent="FuncGodotMap" instance=ExtResource("40_6xnl1")] +[node name="entity_142_actor_box_red" parent="Maps/FuncGodotMap" instance=ExtResource("40_6xnl1")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 28.5, 1.25, 9.25) -[node name="group_26_Test_Light" type="Node3D" parent="FuncGodotMap"] +[node name="group_26_Test_Light" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_27_Test_Light" type="Node3D" parent="FuncGodotMap"] +[node name="group_27_Test_Light" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_28_Test_Light" type="Node3D" parent="FuncGodotMap"] +[node name="group_28_Test_Light" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="group_29_Test_Light" type="Node3D" parent="FuncGodotMap"] +[node name="group_29_Test_Light" type="Node3D" parent="Maps/FuncGodotMap"] metadata/_tb_type = "_tb_group" -[node name="entity_147_actor_tank_large" parent="FuncGodotMap" instance=ExtResource("57_r8ono")] +[node name="entity_147_actor_tank_large" parent="Maps/FuncGodotMap" instance=ExtResource("57_r8ono")] transform = Transform3D(-1, 0, -8.74228e-08, 0, 1, 0, 8.74228e-08, 0, -1, 34, 2, 21) -[node name="entity_148_actor_tank_large" parent="FuncGodotMap" instance=ExtResource("57_r8ono")] +[node name="entity_148_actor_tank_large" parent="Maps/FuncGodotMap" instance=ExtResource("57_r8ono")] transform = Transform3D(1.19249e-08, 0, -1, 0, 1, 0, 1, 0, 1.19249e-08, 28.983, 2, 26.8706) [node name="Props" type="Node3D" parent="."] @@ -2414,6 +2422,7 @@ transform = Transform3D(-4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 7.3827 [node name="FloorEmitter" parent="Props" instance=ExtResource("63_r8ono")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 24.9526, 1.32944, 25.5859) Script = ExtResource("64_fi82p") +EmitOnStart = false [node name="Light" type="Node3D" parent="."] @@ -2469,3 +2478,6 @@ mesh = SubResource("PlaneMesh_k08ee") [node name="Poster" parent="." instance=ExtResource("63_booe2")] transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, -4.4781, 5.34499, 23.0014) + +[node name="NavigationRegion3D" type="NavigationRegion3D" parent="."] +navigation_mesh = SubResource("NavigationMesh_fi82p") diff --git a/IsoTest/IsoMapTest2.tscn b/IsoTest/IsoMapTest2.tscn index 6fa12403..7273d45c 100644 --- a/IsoTest/IsoMapTest2.tscn +++ b/IsoTest/IsoMapTest2.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=59 format=3 uid="uid://ec4m3geediis"] +[gd_scene load_steps=60 format=3 uid="uid://ec4m3geediis"] [ext_resource type="Script" uid="uid://cvisn0b641od4" path="res://addons/cyclops_level_builder/nodes/cyclops_block.gd" id="1_18fbr"] [ext_resource type="Script" uid="uid://ba0tf7ihw4hpp" path="res://Scripts/Misc/CameraController3D.cs" id="1_g4gcm"] @@ -19,6 +19,7 @@ [ext_resource type="PackedScene" uid="uid://c8gtrjf2xeue7" path="res://3D/MapScenes/TestLevel.tscn" id="12_g83w3"] [ext_resource type="Script" uid="uid://dnslcy71dgea" path="res://Scripts/Misc/CameraTarget3D.cs" id="16_e2nai"] [ext_resource type="PackedScene" uid="uid://cupulrjeeivxm" path="res://3D/MapScenes/TestLevel2.tscn" id="18_e2nai"] +[ext_resource type="PackedScene" uid="uid://bh3vxmqflijgj" path="res://Scenes/Actors/Generic_Enemy_FSM_3D.tscn" id="20_1dvih"] [sub_resource type="Resource" id="Resource_id3mo"] script = ExtResource("2_kler0") @@ -483,7 +484,7 @@ hframes = 4 transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.84862, 0, -4.8932) [node name="StartPosition" type="Marker3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 21.5972, 1.57535, 17.7437) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 22.8199, 1.57535, 10.1004) [node name="CameraTarget" type="Marker3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 21.0389, 2.33215, 3.16925) @@ -500,3 +501,6 @@ TargetPath = NodePath("../CameraTarget") [node name="TestLevel2" parent="." instance=ExtResource("18_e2nai")] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 69.0028, 0, -23.3622) + +[node name="FairyGuardFsm" parent="." instance=ExtResource("20_1dvih")] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20.7257, 1.4, 18.9936) diff --git a/Resources/Enemies/Fairy_Guard_3D.tres b/Resources/Enemies/Fairy_Guard_3D.tres new file mode 100644 index 00000000..84891810 --- /dev/null +++ b/Resources/Enemies/Fairy_Guard_3D.tres @@ -0,0 +1,69 @@ +[gd_resource type="Resource" script_class="EnemyResource" load_steps=17 format=3 uid="uid://ccym6mcq4fbul"] + +[ext_resource type="SpriteFrames" uid="uid://ch2ll1on8im2p" path="res://Resources/Sprites/FairyGuard.tres" id="1_b2551"] +[ext_resource type="Texture2D" uid="uid://xhwfgbv0fjbr" path="res://Sprites/Actors/FairyGuard.png" id="2_c6xyh"] +[ext_resource type="Script" uid="uid://cq65aed620ijo" path="res://Scripts/Resources/Loot/LootDrop.cs" id="3_juf1x"] +[ext_resource type="Resource" uid="uid://ct1fa2huvy34n" path="res://Resources/Items/Ammo1.tres" id="4_m2lqx"] +[ext_resource type="Resource" uid="uid://dy53gia1tmkah" path="res://Resources/Items/Points_Pickup.tres" id="5_80clb"] +[ext_resource type="Resource" uid="uid://bhbufxodybsw4" path="res://Resources/Items/Shield_Pickup.tres" id="6_ili73"] +[ext_resource type="Resource" uid="uid://dodwpect0ldjf" path="res://Resources/Items/Heart_Pickup.tres" id="7_7ibiq"] +[ext_resource type="Resource" uid="uid://clr1gln7nxa1o" path="res://Resources/Items/Power_Pickup.tres" id="8_lij2i"] +[ext_resource type="Resource" uid="uid://c6ywv08e6is5o" path="res://Resources/Weapons/EnemyWeapon_Big_3D.tres" id="9_b2551"] +[ext_resource type="Script" uid="uid://cd5o0ceb50jki" path="res://Scripts/Resources/EnemyResource.cs" id="10_by7h3"] + +[sub_resource type="AtlasTexture" id="AtlasTexture_n54y5"] +atlas = ExtResource("2_c6xyh") +region = Rect2(0, 0, 16, 16) + +[sub_resource type="Resource" id="Resource_c8nix"] +script = ExtResource("3_juf1x") +Item = ExtResource("4_m2lqx") +Chance = 40.0 +metadata/_custom_type_script = "uid://cq65aed620ijo" + +[sub_resource type="Resource" id="Resource_gs2l3"] +script = ExtResource("3_juf1x") +Item = ExtResource("5_80clb") +Chance = 10.0 +metadata/_custom_type_script = "uid://cq65aed620ijo" + +[sub_resource type="Resource" id="Resource_sqnvg"] +script = ExtResource("3_juf1x") +Item = ExtResource("6_ili73") +Chance = 5.0 +metadata/_custom_type_script = "uid://cq65aed620ijo" + +[sub_resource type="Resource" id="Resource_5tyar"] +script = ExtResource("3_juf1x") +Item = ExtResource("7_7ibiq") +Chance = 5.0 +metadata/_custom_type_script = "uid://cq65aed620ijo" + +[sub_resource type="Resource" id="Resource_48xq6"] +script = ExtResource("3_juf1x") +Item = ExtResource("8_lij2i") +Chance = 6.0 +metadata/_custom_type_script = "uid://cq65aed620ijo" + +[resource] +script = ExtResource("10_by7h3") +EnemyName = &"Fairy Guard" +EnemyKey = &"FAIRY_GUARD" +PrefabPath = &"uid://bh3vxmqflijgj" +MaxHealth = 10.0 +MovementSpeed = 2.0 +Weapon = ExtResource("9_b2551") +LootDrops = Array[ExtResource("3_juf1x")]([SubResource("Resource_c8nix"), SubResource("Resource_gs2l3"), SubResource("Resource_sqnvg"), SubResource("Resource_5tyar"), SubResource("Resource_48xq6")]) +MotivationReward = 4.0 +PredictPlayer = false +PlayerDetectionRange = 4.0 +ViewRange = 5.0 +AlarmReactRange = 8.0 +PlayerDisengageRange = 10.0 +StrafeSpeed = 1.5 +MaxStrafeDistance = 1.0 +MinStrafeDistance = 0.2 +ResponseTime = 0.5 +IconSprite = SubResource("AtlasTexture_n54y5") +AnimationFrames = ExtResource("1_b2551") +metadata/_custom_type_script = "uid://cd5o0ceb50jki" diff --git a/Resources/Weapons/EnemyWeapon_Big_3D.tres b/Resources/Weapons/EnemyWeapon_Big_3D.tres new file mode 100644 index 00000000..4c9f988f --- /dev/null +++ b/Resources/Weapons/EnemyWeapon_Big_3D.tres @@ -0,0 +1,22 @@ +[gd_resource type="Resource" script_class="WeaponResource" load_steps=3 format=3 uid="uid://c6ywv08e6is5o"] + +[ext_resource type="Resource" uid="uid://wbdspte0ch33" path="res://Resources/Bullets/simple_enemy_bullet_3D.tres" id="1_itg3a"] +[ext_resource type="Script" uid="uid://b6fmrnipv88bk" path="res://Scripts/Resources/WeaponResource.cs" id="2_6m4qy"] + +[resource] +script = ExtResource("2_6m4qy") +Name = &"Enemy weapon with big bullets" +BulletData = ExtResource("1_itg3a") +Priority = 0 +AmmoPerShot = 1 +RateOfFire = 0.6 +BulletCapacity = 4 +ReloadTime = 1.0 +AutoReload = true +InfiniteAmmo = true +ItemKey = &"" +AmmoKey = &"" +BulletsPerShot = 1 +SpreadAngle = 0.0 +RandomSpread = 0.0 +_rotationOffset = 0.0 diff --git a/Scenes/Actors/Generic_Enemy_FSM_3D.tscn b/Scenes/Actors/Generic_Enemy_FSM_3D.tscn new file mode 100644 index 00000000..e9c3218c --- /dev/null +++ b/Scenes/Actors/Generic_Enemy_FSM_3D.tscn @@ -0,0 +1,112 @@ +[gd_scene load_steps=18 format=3 uid="uid://bh3vxmqflijgj"] + +[ext_resource type="Script" uid="uid://dwregubt4iila" path="res://Scripts/Components/FSM/Enemy/3D/EnemyProxy3D.cs" id="1_a3crc"] +[ext_resource type="Resource" uid="uid://ccym6mcq4fbul" path="res://Resources/Enemies/Fairy_Guard_3D.tres" id="2_jgarc"] +[ext_resource type="Script" uid="uid://c651imhj6rjsh" path="res://Scripts/Components/FSM/Enemy/3D/EnemyStateMachine3D.cs" id="2_xne4s"] +[ext_resource type="Script" uid="uid://cy34e3htvbvnl" path="res://Scripts/Components/FSM/Enemy/3D/Init.cs" id="4_jgarc"] +[ext_resource type="Script" uid="uid://jpdgfn701crh" path="res://Scripts/Components/FSM/Enemy/3D/Idle.cs" id="5_rg1hb"] +[ext_resource type="Script" uid="uid://dvtdw2hcp4rm2" path="res://Scripts/Components/FSM/Enemy/3D/Alert.cs" id="6_jgarc"] +[ext_resource type="Script" uid="uid://crahxykgis2bp" path="res://Scripts/Components/FSM/Enemy/3D/Shooting.cs" id="7_rg1hb"] +[ext_resource type="Script" uid="uid://3irm5sccr2fc" path="res://Scripts/Components/FSM/Enemy/3D/Dead.cs" id="8_5j04l"] +[ext_resource type="Script" uid="uid://mpws3eyrmx0q" path="res://Scripts/Components/FSM/Enemy/3D/Controlled.cs" id="9_dm2sd"] +[ext_resource type="SpriteFrames" uid="uid://ch2ll1on8im2p" path="res://Resources/Sprites/FairyGuard.tres" id="10_hew1j"] +[ext_resource type="Script" uid="uid://de31afbiua8xu" path="res://Scripts/Components/FSM/Enemy/3D/EnemyFSMAnimatedSprite3D.cs" id="11_jgarc"] +[ext_resource type="Script" uid="uid://chq5a73kw0c0m" path="res://Scripts/Components/FSM/Enemy/3D/EnemyStorage3D.cs" id="11_xne4s"] +[ext_resource type="Script" uid="uid://extjdng8nk6r" path="res://Scripts/Components/FSM/Enemy/3D/PlayerDetection3D.cs" id="13_rg1hb"] +[ext_resource type="Script" uid="uid://k5k8wf821ytg" path="res://Scripts/Components/FSM/Enemy/3D/NavigationProvider3D.cs" id="14_dm2sd"] +[ext_resource type="PackedScene" uid="uid://cfgc6ik8vb08c" path="res://Scenes/Weapons/BaseWeapon_3D.tscn" id="15_27vgy"] + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_jgarc"] +radius = 0.264547 +height = 0.935884 + +[sub_resource type="CylinderShape3D" id="CylinderShape3D_5j04l"] +height = 1.91858 +radius = 3.04834 + +[node name="FairyGuardFsm" type="CharacterBody3D" node_paths=PackedStringArray("EnemyFSM")] +collision_layer = 64 +collision_mask = 17 +script = ExtResource("1_a3crc") +EnemyFSM = NodePath("StateMachine") +EnemyResource = ExtResource("2_jgarc") + +[node name="CollisionShape2D" type="CollisionShape3D" parent="."] +shape = SubResource("CapsuleShape3D_jgarc") + +[node name="StateMachine" type="Node" parent="."] +script = ExtResource("2_xne4s") + +[node name="Init" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "DetectionProvider")] +script = ExtResource("4_jgarc") +Storage = NodePath("../../Storage") +DetectionProvider = NodePath("../../PlayerDetectionProvider") + +[node name="Idle" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "PlayerDetection", "_moduleNodes")] +script = ExtResource("5_rg1hb") +Storage = NodePath("../../Storage") +PlayerDetection = NodePath("../../PlayerDetectionProvider") +DebugEnabled = true +_moduleNodes = [NodePath(""), NodePath(""), NodePath("")] + +[node name="Alert" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "PlayerDetection", "NavigationModule", "_moduleNodes")] +script = ExtResource("6_jgarc") +Storage = NodePath("../../Storage") +PlayerDetection = NodePath("../../PlayerDetectionProvider") +NavigationModule = NodePath("../../NavigationProvider") +DebugEnabled = true +_moduleNodes = [NodePath(""), NodePath("")] + +[node name="Shooting" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "PlayerDetection", "EquippedWeapon", "NavigationModule", "_moduleNodes")] +script = ExtResource("7_rg1hb") +Storage = NodePath("../../Storage") +PlayerDetection = NodePath("../../PlayerDetectionProvider") +EquippedWeapon = NodePath("../../Weapon") +NavigationModule = NodePath("../../NavigationProvider") +_moduleNodes = [NodePath(""), NodePath("")] + +[node name="Dead" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage")] +script = ExtResource("8_5j04l") +Storage = NodePath("../../Storage") + +[node name="Controlled" type="Node" parent="StateMachine" node_paths=PackedStringArray("Storage", "_moduleNodes")] +script = ExtResource("9_dm2sd") +Storage = NodePath("../../Storage") +_moduleNodes = [NodePath("")] + +[node name="AnimatedSprite2D" type="AnimatedSprite3D" parent="."] +pixel_size = 0.05 +billboard = 1 +texture_filter = 0 +sprite_frames = ExtResource("10_hew1j") +animation = &"down" +script = ExtResource("11_jgarc") + +[node name="Storage" type="Node" parent="." node_paths=PackedStringArray("Root")] +script = ExtResource("11_xne4s") +Root = NodePath("..") + +[node name="PlayerDetectionProvider" type="Area3D" parent="."] +collision_layer = 0 +collision_mask = 2 +script = ExtResource("13_rg1hb") +ObstaclesCollisionMask = 17 + +[node name="CollisionShape3D" type="CollisionShape3D" parent="PlayerDetectionProvider"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.557434, 0) +shape = SubResource("CylinderShape3D_5j04l") + +[node name="NavigationProvider" type="Node" parent="." node_paths=PackedStringArray("NavigationAgent", "StorageModule")] +script = ExtResource("14_dm2sd") +NavigationAgent = NodePath("../NavigationAgent3D") +StorageModule = NodePath("../Storage") + +[node name="NavigationAgent3D" type="NavigationAgent3D" parent="."] +path_postprocessing = 1 +debug_enabled = true + +[node name="Weapon" parent="." instance=ExtResource("15_27vgy")] + +[connection signal="body_entered" from="PlayerDetectionProvider" to="PlayerDetectionProvider" method="_on_body_entered"] +[connection signal="body_exited" from="PlayerDetectionProvider" to="PlayerDetectionProvider" method="_on_body_exited"] +[connection signal="velocity_computed" from="NavigationAgent3D" to="NavigationProvider" method="_on_navigation_agent_3d_velocity_computed"] diff --git a/Scripts/Components/FSM/Enemy/3D/Alert.cs b/Scripts/Components/FSM/Enemy/3D/Alert.cs new file mode 100644 index 00000000..ca1934c8 --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/Alert.cs @@ -0,0 +1,96 @@ +using Cirno.Scripts.Enums; +using Cirno.Scripts.Utils; +using Godot; + +namespace Cirno.Scripts.Components.FSM.Enemy._3D; + +public partial class Alert : EnemyStateBase3D +{ + public override EnemyState StateId => EnemyState.Alert; + + [Export] public EnemyStorage3D Storage { get; private set; } + [Export] public PlayerDetection3D PlayerDetection { get; private set; } + [Export] public NavigationProvider3D NavigationModule { get; private set; } + [Export] public bool DebugEnabled { get; set; } = false; + + private bool _isPlayerInRange = false; + + public override void EnterState() + { + base.EnterState(); + // player detection + // damage receiver will be a module + + NavigationModule.Init(MainObject); + + PlayerDetection.SetRange(Storage.Root.EnemyResource.PlayerDetectionRange); + + PlayerDetection.PlayerInRange += PlayerDetectionOnPlayerInRange; + + PlayerDetection.PlayerOutOfRange += PlayerDetectionOnPlayerOutOfRange; + + GD.Print("Entered alert"); + } + + private void PlayerDetectionOnPlayerOutOfRange() + { + _isPlayerInRange = false; + } + + public override void ExitState() + { + base.ExitState(); + PlayerDetection.PlayerInRange -= PlayerDetectionOnPlayerInRange; + + PlayerDetection.PlayerOutOfRange -= PlayerDetectionOnPlayerOutOfRange; + NavigationModule.SetTarget(null); + // DamageReceiver.HealthProvider.ResourceDepleted -= HealthProviderOnResourceDepleted; + // DamageReceiver.ChangeState(false); + // NavigationModule.SetTarget(null); + } + + private void PlayerDetectionOnPlayerInRange() + { + //_isPlayerInRange = true; + } + + public override void PhysicsProcessState(double delta) + { + base.PhysicsProcessState(delta); + if (PlayerDetection.IsPlayerInRange(Storage.Root.EnemyResource.ViewRange) && PlayerDetection.IsPlayerInSight()) + { + StateMachine.SetState(EnemyState.Shooting); + return; + } + + // if player is outside disengage range, change to idle (later on, search) + if (MainObject.GlobalPosition.DistanceTo(GameController.Instance.PlayerPosition.Value) >= + Storage.Root.EnemyResource.PlayerDisengageRange) + { + StateMachine.SetState(EnemyState.Idle); + return; + } + + // Move towards last known position + if (PlayerDetection.LastKnownPlayerPosition.HasValue) + { + MoveTowardsPosition(PlayerDetection.LastKnownPlayerPosition.Value); + } + + NavigationModule.Move(Storage.EnemyData.MovementSpeed); + + //Storage.FacingDirection = MainObject.Velocity.SnapToCardinal().Normalized(); + Storage.FacingDirection = MainObject.Velocity.ToVector2().Normalized(); + Storage.AimingDirection = Storage.FacingDirection; + } + + private void MoveTowardsPosition(Vector3 position) + { + NavigationModule.SetTarget(position); + } + + public override void ProcessState(double delta) + { + base.ProcessState(delta); + } +} \ No newline at end of file diff --git a/Scripts/Components/FSM/Enemy/3D/Alert.cs.uid b/Scripts/Components/FSM/Enemy/3D/Alert.cs.uid new file mode 100644 index 00000000..77d2fa80 --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/Alert.cs.uid @@ -0,0 +1 @@ +uid://dvtdw2hcp4rm2 diff --git a/Scripts/Components/FSM/Enemy/3D/Controlled.cs b/Scripts/Components/FSM/Enemy/3D/Controlled.cs new file mode 100644 index 00000000..2a23a169 --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/Controlled.cs @@ -0,0 +1,19 @@ +using Cirno.Scripts.Enums; +using Godot; + +namespace Cirno.Scripts.Components.FSM.Enemy._3D; + +public partial class Controlled : EnemyStateBase3D +{ + public override EnemyState StateId => EnemyState.Controlled; + + [Export] public EnemyStorage3D Storage { get; private set; } + + public override void EnterState() + { + base.EnterState(); + // player detection + // damage receiver will be a module + + } +} \ No newline at end of file diff --git a/Scripts/Components/FSM/Enemy/3D/Controlled.cs.uid b/Scripts/Components/FSM/Enemy/3D/Controlled.cs.uid new file mode 100644 index 00000000..19ef72c2 --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/Controlled.cs.uid @@ -0,0 +1 @@ +uid://mpws3eyrmx0q diff --git a/Scripts/Components/FSM/Enemy/3D/Dead.cs b/Scripts/Components/FSM/Enemy/3D/Dead.cs new file mode 100644 index 00000000..d01b5a52 --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/Dead.cs @@ -0,0 +1,19 @@ +using Cirno.Scripts.Enums; +using Godot; + +namespace Cirno.Scripts.Components.FSM.Enemy._3D; + +public partial class Dead : EnemyStateBase3D +{ + public override EnemyState StateId => EnemyState.Dead; + + [Export] public EnemyStorage3D Storage { get; private set; } + + public override void EnterState() + { + base.EnterState(); + // player detection + // damage receiver will be a module + + } +} \ No newline at end of file diff --git a/Scripts/Components/FSM/Enemy/3D/Dead.cs.uid b/Scripts/Components/FSM/Enemy/3D/Dead.cs.uid new file mode 100644 index 00000000..0106c66f --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/Dead.cs.uid @@ -0,0 +1 @@ +uid://3irm5sccr2fc diff --git a/Scripts/Components/FSM/Enemy/3D/EnemyFSMAnimatedSprite3D.cs b/Scripts/Components/FSM/Enemy/3D/EnemyFSMAnimatedSprite3D.cs new file mode 100644 index 00000000..b198dd56 --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/EnemyFSMAnimatedSprite3D.cs @@ -0,0 +1,16 @@ +using Godot; + +namespace Cirno.Scripts.Components.FSM.Enemy._3D; + +public partial class EnemyFSMAnimatedSprite3D : AnimatedSprite3D +{ + public override void _Ready() + { + var enemyFsmProxy = this.GetParentOrNull(); + + if (enemyFsmProxy?.EnemyResource?.AnimationFrames != null) + { + this.SpriteFrames = enemyFsmProxy.EnemyResource.AnimationFrames; + } + } +} \ No newline at end of file diff --git a/Scripts/Components/FSM/Enemy/3D/EnemyFSMAnimatedSprite3D.cs.uid b/Scripts/Components/FSM/Enemy/3D/EnemyFSMAnimatedSprite3D.cs.uid new file mode 100644 index 00000000..6f35a451 --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/EnemyFSMAnimatedSprite3D.cs.uid @@ -0,0 +1 @@ +uid://de31afbiua8xu diff --git a/Scripts/Components/FSM/Enemy/3D/EnemyProxy3D.cs b/Scripts/Components/FSM/Enemy/3D/EnemyProxy3D.cs new file mode 100644 index 00000000..278100e7 --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/EnemyProxy3D.cs @@ -0,0 +1,78 @@ +using Cirno.Scripts.Enums; +using Cirno.Scripts.Resources; +using Cirno.Scripts.Resources.Loot; +using Godot; +using Godot.Collections; + +namespace Cirno.Scripts.Components.FSM.Enemy._3D; + +public partial class EnemyProxy3D : CharacterBody3D, IActivable +{ + [Export] public EnemyStateMachine3D EnemyFSM { get; private set; } + + [Export] public EnemyResource EnemyResource { get; private set; } + + [Export] public Array ExtraLoot { get; private set; } = []; + + [Export] public bool OverrideLoot { get; set; } = false; + + [Export] + public AiState StartingAiState { get; private set; } + + [ExportCategory("Defeat Script")] + [Export] public Node DefeatScript { get; set; } + + [Export] public ActivationType ActivationType { get; private set; } = ActivationType.Toggle; + + [Signal] public delegate void DeathEventHandler(EnemyProxy3D enemy); + + public void Init(EnemyResource enemyResource) + { + this.EnemyResource = enemyResource; + + } + + public void TriggerDeath() + { + EmitSignalDeath(this); + } + + public void RequestAlert(Vector3 destination) + { + //EnemyFSM.SetState(EnemyState.Alert); + } + + public bool Activate(ActivationType activationType = ActivationType.Toggle) + { + switch (activationType) + { + case ActivationType.Toggle: + EnemyFSM.SetState(EnemyState.Controlled); + break; + case ActivationType.Enable: + // Enable or disable AI + EnemyFSM.SetState(EnemyState.Shooting); + break; + case ActivationType.Disable: + EnemyFSM.SetState(EnemyState.Idle); + // Enable or disable AI + break; + case ActivationType.Use: + break; + case ActivationType.Destroy: + EnemyFSM.SetState(EnemyState.Dead); + break; + case ActivationType.Open: + break; + case ActivationType.Close: + break; + } + + return true; + } + + public void Toggle() + { + this.Activate(); + } +} \ No newline at end of file diff --git a/Scripts/Components/FSM/Enemy/3D/EnemyProxy3D.cs.uid b/Scripts/Components/FSM/Enemy/3D/EnemyProxy3D.cs.uid new file mode 100644 index 00000000..565a033e --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/EnemyProxy3D.cs.uid @@ -0,0 +1 @@ +uid://dwregubt4iila diff --git a/Scripts/Components/FSM/Enemy/3D/EnemyStateBase3D.cs b/Scripts/Components/FSM/Enemy/3D/EnemyStateBase3D.cs new file mode 100644 index 00000000..43291f94 --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/EnemyStateBase3D.cs @@ -0,0 +1,9 @@ +using Cirno.Scripts.Enums; +using Godot; + +namespace Cirno.Scripts.Components.FSM.Enemy._3D; + +public abstract partial class EnemyStateBase3D : BaseState +{ + +} \ No newline at end of file diff --git a/Scripts/Components/FSM/Enemy/3D/EnemyStateBase3D.cs.uid b/Scripts/Components/FSM/Enemy/3D/EnemyStateBase3D.cs.uid new file mode 100644 index 00000000..c1a3ab3a --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/EnemyStateBase3D.cs.uid @@ -0,0 +1 @@ +uid://62p771loh356 diff --git a/Scripts/Components/FSM/Enemy/3D/EnemyStateMachine3D.cs b/Scripts/Components/FSM/Enemy/3D/EnemyStateMachine3D.cs new file mode 100644 index 00000000..0c7e1e1c --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/EnemyStateMachine3D.cs @@ -0,0 +1,10 @@ +using Cirno.Scripts.Enums; +using Godot; + +namespace Cirno.Scripts.Components.FSM.Enemy._3D; + +public partial class EnemyStateMachine3D : StateMachineBase +{ + [Export] public override EnemyState InitialState { get; protected set; } = EnemyState.Init; + +} \ No newline at end of file diff --git a/Scripts/Components/FSM/Enemy/3D/EnemyStateMachine3D.cs.uid b/Scripts/Components/FSM/Enemy/3D/EnemyStateMachine3D.cs.uid new file mode 100644 index 00000000..18e051f9 --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/EnemyStateMachine3D.cs.uid @@ -0,0 +1 @@ +uid://c651imhj6rjsh diff --git a/Scripts/Components/FSM/Enemy/3D/EnemyStorage3D.cs b/Scripts/Components/FSM/Enemy/3D/EnemyStorage3D.cs new file mode 100644 index 00000000..49deeb2a --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/EnemyStorage3D.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; +using System.Linq; +using Cirno.Scripts.Resources; +using Cirno.Scripts.Resources.Loot; +using Godot; + +namespace Cirno.Scripts.Components.FSM.Enemy._3D; + +public partial class EnemyStorage3D : Node +{ + [Export] + public EnemyProxy3D Root { get; private set; } + + public Node3D RootAsNode => Root; + + public EnemyResource EnemyData => Root.EnemyResource; + + public Vector3 HomePosition { get; set; } + + public Vector2 MovementDirection { get; set; } + public Vector2 FacingDirection { get; set; } + + public Vector2 AimingDirection { get; set; } + public Vector3 KnockbackVelocity { get; set; } = Vector3.Zero; + + public float MovementSpeed => Root.EnemyResource.MovementSpeed; + + public IEnumerable LootDrops => Root.OverrideLoot ? Root.ExtraLoot : Root.EnemyResource.LootDrops.Concat(Root.ExtraLoot); + + public AiState AiState { get; set; } +} \ No newline at end of file diff --git a/Scripts/Components/FSM/Enemy/3D/EnemyStorage3D.cs.uid b/Scripts/Components/FSM/Enemy/3D/EnemyStorage3D.cs.uid new file mode 100644 index 00000000..1878e6a5 --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/EnemyStorage3D.cs.uid @@ -0,0 +1 @@ +uid://chq5a73kw0c0m diff --git a/Scripts/Components/FSM/Enemy/3D/Idle.cs b/Scripts/Components/FSM/Enemy/3D/Idle.cs new file mode 100644 index 00000000..a0482c54 --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/Idle.cs @@ -0,0 +1,93 @@ +using Cirno.Scripts.Enums; +using Godot; + +namespace Cirno.Scripts.Components.FSM.Enemy._3D; + +public partial class Idle : EnemyStateBase3D +{ + public override EnemyState StateId => EnemyState.Idle; + + [Export] public EnemyStorage3D Storage { get; private set; } + [Export] public PlayerDetection3D PlayerDetection { get; private set; } + + [Export] public bool DebugEnabled { get; set; } = false; + + private bool _isPlayerInRange = false; + + public override void EnterState() + { + base.EnterState(); + PlayerDetection.SetRange(Storage.Root.EnemyResource.PlayerDetectionRange); + + _isPlayerInRange = PlayerDetection.IsPlayerInRange(Storage.Root.EnemyResource.ViewRange); + + PlayerDetection.PlayerInRange += PlayerDetectionOnPlayerInRange; + + PlayerDetection.PlayerOutOfRange += PlayerDetectionOnPlayerOutOfRange; + + // player detection + // damage receiver will be a module + GD.Print("Entered Idle"); + } + + public override void ExitState() + { + base.ExitState(); + + PlayerDetection.PlayerInRange -= PlayerDetectionOnPlayerInRange; + + PlayerDetection.PlayerOutOfRange -= PlayerDetectionOnPlayerOutOfRange; + + // DamageReceiver.HealthProvider.ResourceDepleted -= HealthProviderOnResourceDepleted; + // + // DamageReceiver.HealthProvider.ResourceDecreased -= HealthProviderOnResourceDecreased; + // DamageReceiver.ChangeState(false); + + } + + private void HealthProviderOnResourceDepleted() + { + ChangeState(EnemyState.Dead); + } + + private void HealthProviderOnResourceDecreased(float oldvalue, float newvalue, float maxvalue) + { + Storage.AiState = AiState.Enabled; + ChangeState(EnemyState.Alert); + } + + private void PlayerDetectionOnPlayerInRange() + { + _isPlayerInRange = true; + GD.Print("Player In Range"); + } + + private void PlayerDetectionOnPlayerOutOfRange() + { + _isPlayerInRange = false; + } + + public override void PhysicsProcessState(double delta) + { + base.PhysicsProcessState(delta); + if (Storage.AiState is AiState.Enabled && _isPlayerInRange) + { + if (PlayerDetection.IsPlayerInSight()) + { + GD.Print("Moving to alert"); + StateMachine.SetState(EnemyState.Alert); + } + } + + if (DebugEnabled) + { + DebugDraw3D.DrawText(MainObject.GlobalPosition - new Vector3(0,16,0), "Idle"); + + } + } + + public override void ProcessState(double delta) + { + base.ProcessState(delta); + } +} \ No newline at end of file diff --git a/Scripts/Components/FSM/Enemy/3D/Idle.cs.uid b/Scripts/Components/FSM/Enemy/3D/Idle.cs.uid new file mode 100644 index 00000000..050d3fd9 --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/Idle.cs.uid @@ -0,0 +1 @@ +uid://jpdgfn701crh diff --git a/Scripts/Components/FSM/Enemy/3D/Init.cs b/Scripts/Components/FSM/Enemy/3D/Init.cs new file mode 100644 index 00000000..8ef54209 --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/Init.cs @@ -0,0 +1,25 @@ +using Cirno.Scripts.Enums; +using Godot; + +namespace Cirno.Scripts.Components.FSM.Enemy._3D; + +public partial class Init : EnemyStateBase3D +{ + public override EnemyState StateId => EnemyState.Init; + [Export] public EnemyStorage3D Storage {get; private set;} + + [Export] public PlayerDetection3D DetectionProvider { get; private set; } + + public override void EnterState() + { + //DamageReceiver.HealthProvider.MaxResource = StorageModule.Root.EnemyResource.MaxHealth; + DetectionProvider.Initialize(MainObject); + Storage.AiState = Storage.Root.StartingAiState; + + Storage.HomePosition = MainObject.GlobalPosition; + // TODO: Hide wings + // TODO: Hide aiming reticule + + StateMachine.SetState(EnemyState.Idle); + } +} \ No newline at end of file diff --git a/Scripts/Components/FSM/Enemy/3D/Init.cs.uid b/Scripts/Components/FSM/Enemy/3D/Init.cs.uid new file mode 100644 index 00000000..15ff4ff5 --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/Init.cs.uid @@ -0,0 +1 @@ +uid://cy34e3htvbvnl diff --git a/Scripts/Components/FSM/Enemy/3D/NavigationProvider3D.cs b/Scripts/Components/FSM/Enemy/3D/NavigationProvider3D.cs new file mode 100644 index 00000000..7fcb5b6e --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/NavigationProvider3D.cs @@ -0,0 +1,84 @@ +using Cirno.Scripts.Utils; +using Godot; + +namespace Cirno.Scripts.Components.FSM.Enemy._3D; + +public partial class NavigationProvider3D : Node +{ + private Vector3? _lastTargetPosition; + private CharacterBody3D _characterBody; + //private NavigationAgent3D _navigationAgent; + + [Export] public NavigationAgent3D NavigationAgent { get; private set; } + + [Export] + public EnemyStorage3D StorageModule { get; private set; } + + public void Init(CharacterBody3D characterBody) + { + _characterBody = characterBody; + + if (NavigationAgent is not null) return; + //_navigationAgent = this.GetNode("NavigationAgent"); + } + + public void SetTarget(Vector3? target) + { + _lastTargetPosition = target; + } + + public void Move(float movementSpeed) + { + if (!_lastTargetPosition.HasValue) + { + return; + } + + NavigationAgent.SetTargetPosition(_lastTargetPosition.Value); + + var currentAgentPosition = _characterBody.GlobalPosition; + + if (NavigationAgent.IsNavigationFinished()) + { + return; + } + + var nextPathPosition = NavigationAgent.GetNextPathPosition(); + + var newVelocity = currentAgentPosition.DirectionTo(nextPathPosition) * movementSpeed; + + newVelocity += StorageModule.KnockbackVelocity; + + if (NavigationAgent.AvoidanceEnabled) + { + NavigationAgent.SetVelocity(newVelocity); + } + else + { + _on_navigation_agent_3d_velocity_computed(newVelocity); + } + + _characterBody.MoveAndSlide(); + } + + public void _on_navigation_agent_3d_velocity_computed(Vector3 safeVelocity) + { + if (_characterBody is null) return; + _characterBody.Velocity = safeVelocity; + if (_characterBody.Velocity.Length() > 0) + { + StorageModule.FacingDirection = _characterBody.Velocity.Normalized().ToVector2(); + } + } + + public bool IsNavigable(Vector3 newPos) + { + NavigationAgent.SetTargetPosition(newPos); + return NavigationAgent.IsTargetReachable(); + } + + public bool IsNavigationFinished() + { + return NavigationAgent.IsNavigationFinished(); + } +} \ No newline at end of file diff --git a/Scripts/Components/FSM/Enemy/3D/NavigationProvider3D.cs.uid b/Scripts/Components/FSM/Enemy/3D/NavigationProvider3D.cs.uid new file mode 100644 index 00000000..5cbfabfb --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/NavigationProvider3D.cs.uid @@ -0,0 +1 @@ +uid://k5k8wf821ytg diff --git a/Scripts/Components/FSM/Enemy/3D/PlayerDetection3D.cs b/Scripts/Components/FSM/Enemy/3D/PlayerDetection3D.cs new file mode 100644 index 00000000..2d59afad --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/PlayerDetection3D.cs @@ -0,0 +1,120 @@ +using Cirno.Scripts.Components.FSM._3DPlayer; +using Godot; + +namespace Cirno.Scripts.Components.FSM.Enemy._3D; + +public partial class PlayerDetection3D : Area3D +{ + [Signal] + public delegate void PlayerInRangeEventHandler(); + + [Signal] + public delegate void PlayerOutOfRangeEventHandler(); + + [Export(PropertyHint.Layers3DPhysics)] + public uint ObstaclesCollisionMask { get; private set; } + + public Vector3? LastKnownPlayerPosition { get; set; } + public Vector3? LastKnowPlayerVelocity { get; set; } + + //public bool PlayerInActiveArea { get; private set; } + private CollisionShape3D _collisionShape; + + private bool _initialized = false; + // public override void _Ready() + // { + // CallDeferred(MethodName.Initialize); + // } + + private CharacterBody3D _mainBody; + + public void Initialize(CharacterBody3D mainBody) + { + _mainBody = mainBody; + _initialized = true; + } + + public void SetRange(float range) + { + _collisionShape ??= this.GetNode("CollisionShape3D"); + if (_collisionShape.Shape is CylinderShape3D shape3D) + { + shape3D.Radius = range; + } + } + + public bool IsPlayerInRange(float range) + { + if (!_initialized) return false; + if (GameController.Instance is null) return false; + + if (!GameController.Instance.PlayerPosition.HasValue) + { + return false; + } + + return this.GlobalPosition.DistanceTo(GameController.Instance.PlayerPosition.Value) <= range; + } + + public bool IsPlayerInSight() + { + if (!_initialized) return false; + if (GameController.Instance is null) return false; + //if (_cachedPlayer == null) return false; + if (!GameController.Instance.PlayerPosition.HasValue) return false; + + var found = HasLineOfSight(this.GlobalPosition, GameController.Instance.PlayerPosition.Value); + + // var spaceState = GetWorld2D().DirectSpaceState; + // + // // It needs to use its own collision mask because it's detecting obstacles rather than the player + // var query = PhysicsRayQueryParameters2D.Create(this.GlobalPosition, GameController.Instance.PlayerPosition.Value, ObstaclesCollisionMask, + // [GetRid()]); + // //query.CollideWithBodies = true; + // //query.CollideWithAreas = true; + // // var query = PhysicsRayQueryParameters2D.Create(this.GlobalPosition, _cachedPlayer.GlobalPosition, CollisionMask, new Array { GetRid() }); + // var result = spaceState.IntersectRay(query); + // + // // If count is 0 then the player is in sight, otherwise there is level geometry in the way + // var found = result.Count == 0; + if (found) + { + LastKnownPlayerPosition = GameController.Instance.PlayerPosition; + LastKnowPlayerVelocity = GameController.Instance.PlayerVelocity; + } + return found; + } + + private void _on_body_entered(Node3D area) + { + if (area is not IsoPlayerFSMProxy player) return; + EmitSignal(SignalName.PlayerInRange); + //PlayerInActiveArea = true; + } + + private void _on_body_exited(Node3D area) + { + if (area is not IsoPlayerFSMProxy player) return; + EmitSignal(SignalName.PlayerOutOfRange); + //PlayerInActiveArea = false; + } + + public bool HasLineOfSight(Vector3 startPos, Vector3 endPos) + { + var spaceState = GetWorld3D().DirectSpaceState; + + // It needs to use its own collision mask because it's detecting obstacles rather than the player + var query = PhysicsRayQueryParameters3D.Create(startPos, endPos, ObstaclesCollisionMask, + [GetRid(), _mainBody.GetRid()]); + query.CollideWithBodies = true; + + //query.CollideWithAreas = true; + // var query = PhysicsRayQueryParameters2D.Create(this.GlobalPosition, _cachedPlayer.GlobalPosition, CollisionMask, new Array { GetRid() }); + var result = spaceState.IntersectRay(query); + + // If count is 0 then the player is in sight, otherwise there is level geometry in the way + var found = result.Count == 0; + + return found; + } +} \ No newline at end of file diff --git a/Scripts/Components/FSM/Enemy/3D/PlayerDetection3D.cs.uid b/Scripts/Components/FSM/Enemy/3D/PlayerDetection3D.cs.uid new file mode 100644 index 00000000..f33f7905 --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/PlayerDetection3D.cs.uid @@ -0,0 +1 @@ +uid://extjdng8nk6r diff --git a/Scripts/Components/FSM/Enemy/3D/Shooting.cs b/Scripts/Components/FSM/Enemy/3D/Shooting.cs new file mode 100644 index 00000000..ebde7785 --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/Shooting.cs @@ -0,0 +1,171 @@ +using Cirno.Scripts.Enums; +using Cirno.Scripts.Utils; +using Cirno.Scripts.Weapons; +using Godot; + +namespace Cirno.Scripts.Components.FSM.Enemy._3D; + +public partial class Shooting : EnemyStateBase3D +{ + public override EnemyState StateId => EnemyState.Shooting; + + [Export] public EnemyStorage3D Storage { get; private set; } + + [Export] public PlayerDetection3D PlayerDetection { get; private set; } + + [Export] public Weapon3D EquippedWeapon; + [Export] public NavigationProvider3D NavigationModule { get; private set; } + + private bool _isPlayerInRange = false; + private Vector3? _currentStrafeTarget = null; + private float _strafeSpeed => Storage.EnemyData.StrafeSpeed; + + private double _responseTimer = 0; + public override void EnterState() + { + base.EnterState(); + + GD.Print("Entering Shooting"); + + PlayerDetection.PlayerOutOfRange += PlayerDetectionOnPlayerOutOfRange; + + //DamageReceiver.ChangeState(true); + + //DamageReceiver.HealthProvider.ResourceDepleted += HealthProviderOnResourceDepleted; + + EquippedWeapon.WeaponData = Storage.Root.EnemyResource.Weapon; + + _currentStrafeTarget = null; + + _responseTimer = 0; + + } + + private void PlayerDetectionOnPlayerOutOfRange() + { + GD.Print("Player out of range, returning to alert"); + StateMachine.SetState(EnemyState.Alert); + } + + public override void ExitState() + { + base.ExitState(); + + PlayerDetection.PlayerOutOfRange -= PlayerDetectionOnPlayerOutOfRange; + + //DamageReceiver.HealthProvider.ResourceDepleted -= HealthProviderOnResourceDepleted; + + _currentStrafeTarget = null; + + //DamageReceiver.ChangeState(false); + + } + + public override void PhysicsProcessState(double delta) + { + base.PhysicsProcessState(delta); + + if (PlayerDetection.IsPlayerInRange(Storage.Root.EnemyResource.ViewRange) && PlayerDetection.IsPlayerInSight()) + { + // SHOOT + Shoot(); + + if (_strafeSpeed > 0) + { + // Check if a strafe position is needed + if (!_currentStrafeTarget.HasValue || NavigationModule.IsNavigationFinished()) + { + if (_responseTimer < Storage.EnemyData.ResponseTime) + { + _responseTimer += delta; + } + else + { + _currentStrafeTarget = CalculateStrafePosition(); + _responseTimer = 0; + } + } + } + } + else + { + GD.Print("Back to alert because the player could not be detected anymore"); + StateMachine.SetState(EnemyState.Alert); + return; + } + + if (_currentStrafeTarget.HasValue) + { + NavigationModule.SetTarget(_currentStrafeTarget.Value); + NavigationModule.Move(_strafeSpeed); + } + } + + private Vector3? CalculateStrafePosition() + { + var playerPos = PlayerDetection.LastKnownPlayerPosition.Value; + var enemyPos = MainObject.GlobalPosition; + + // Calculate direction to player + var directionToPlayer = (playerPos - enemyPos).Normalized(); + + // Get perpendicular vectors (left and right strafing directions) + var leftStrafe = directionToPlayer.Rotated(Vector3.Up, -Mathf.Pi / 2); + var rightStrafe = directionToPlayer.Rotated(Vector3.Up,Mathf.Pi / 2); + + // Randomly decide left or right first + bool tryLeftFirst = GD.Randf() < 0.5f; + + for (float factor = 1f; factor > 0.25f; factor *= 0.75f) + { + float strafeDistance = Mathf.Lerp(Storage.EnemyData.MinStrafeDistance, Storage.EnemyData.MaxStrafeDistance, factor); + var newPos = enemyPos + (tryLeftFirst ? leftStrafe : rightStrafe) * strafeDistance; + if (NavigationModule.IsNavigable(newPos) && PlayerDetection.HasLineOfSight(newPos, playerPos)) + { + return newPos; + } + } + + for (float factor = 1f; factor > 0.25f; factor *= 0.75f) + { + float strafeDistance = Mathf.Lerp(Storage.EnemyData.MinStrafeDistance, Storage.EnemyData.MaxStrafeDistance, factor); + var newPos = enemyPos + (tryLeftFirst ? rightStrafe : leftStrafe) * strafeDistance; + if (NavigationModule.IsNavigable(newPos) && PlayerDetection.HasLineOfSight(newPos, playerPos)) + { + return newPos; + } + } + + return null; // No valid strafe position found + } + + private Vector2 GetShootDirection() + { + // if (Storage.EnemyData.PredictPlayer && PlayerDetection.LastKnowPlayerVelocity.HasValue) + // { + // var predictedDirection = MathFunctions.PredictInterceptPosition(MainObject.GlobalPosition, + // PlayerDetection.LastKnownPlayerPosition.Value, PlayerDetection.LastKnowPlayerVelocity.Value, + // EquippedWeapon.WeaponData.BulletData.BulletSpeed); + // if (predictedDirection.HasValue) return (predictedDirection.Value - MainObject.GlobalPosition).Normalized(); + // + // } + + return ( PlayerDetection.LastKnownPlayerPosition.Value - MainObject.GlobalPosition).ToVector2().Normalized(); + } + + private void Shoot() + { + if (EquippedWeapon == null) return; + if (!PlayerDetection.LastKnownPlayerPosition.HasValue) return; + + var direction = GetShootDirection(); + + // Shoot at the player's last known position + EquippedWeapon.ShootDirection = direction; + //StorageModule.FacingDirection = direction; + Storage.FacingDirection = direction.SnapToCardinal().Normalized(); + Storage.AimingDirection = Storage.FacingDirection; + + EquippedWeapon.Shoot(); + } +} \ No newline at end of file diff --git a/Scripts/Components/FSM/Enemy/3D/Shooting.cs.uid b/Scripts/Components/FSM/Enemy/3D/Shooting.cs.uid new file mode 100644 index 00000000..f5305d7d --- /dev/null +++ b/Scripts/Components/FSM/Enemy/3D/Shooting.cs.uid @@ -0,0 +1 @@ +uid://crahxykgis2bp diff --git a/Scripts/Components/FSM/Enemy/Alert.cs b/Scripts/Components/FSM/Enemy/Alert.cs index 6e770cb0..cccc6f86 100644 --- a/Scripts/Components/FSM/Enemy/Alert.cs +++ b/Scripts/Components/FSM/Enemy/Alert.cs @@ -8,39 +8,35 @@ public partial class Alert : EnemyStateBase { public override EnemyState StateId => EnemyState.Alert; - [Export] - public EnemyStorageModule StorageModule { get; private set; } - - [Export] - public PlayerDetectionModule PlayerDetection { get; private set; } - - [Export] - public GenericDamageReceiver DamageReceiver { get; private set; } - - [Export] - public NavigationMovementModule NavigationModule { get; private set; } - + [Export] public EnemyStorageModule StorageModule { get; private set; } + + [Export] public PlayerDetectionModule PlayerDetection { get; private set; } + + [Export] public GenericDamageReceiver DamageReceiver { get; private set; } + + [Export] public NavigationMovementModule NavigationModule { get; private set; } + private bool _isPlayerInRange = false; - + public override void EnterState() { base.EnterState(); NavigationModule.Init(MainObject); - + PlayerDetection.SetRange(StorageModule.Root.EnemyResource.PlayerDetectionRange); - + //_isPlayerInRange = PlayerDetection.IsPlayerInRange(StorageModule.Root.EnemyResource.ViewRange); //GD.Print($"Player In Range: {_isPlayerInRange}"); - + PlayerDetection.PlayerInRange += PlayerDetectionOnPlayerInRange; - + PlayerDetection.PlayerOutOfRange += PlayerDetectionOnPlayerOutOfRange; DamageReceiver.ChangeState(true); - + DamageReceiver.HealthProvider.ResourceDepleted += HealthProviderOnResourceDepleted; } - + private void HealthProviderOnResourceDepleted() { ChangeState(EnemyState.Dead); @@ -55,12 +51,12 @@ public partial class Alert : EnemyStateBase { base.ExitState(); PlayerDetection.PlayerInRange -= PlayerDetectionOnPlayerInRange; - + PlayerDetection.PlayerOutOfRange -= PlayerDetectionOnPlayerOutOfRange; - + DamageReceiver.HealthProvider.ResourceDepleted -= HealthProviderOnResourceDepleted; DamageReceiver.ChangeState(false); - NavigationModule.SetTarget(null); + NavigationModule.SetTarget(null); } private void PlayerDetectionOnPlayerInRange() @@ -71,12 +67,13 @@ public partial class Alert : EnemyStateBase public override void PhysicsProcessState(double delta) { base.PhysicsProcessState(delta); - if (PlayerDetection.IsPlayerInRange(StorageModule.Root.EnemyResource.ViewRange) && PlayerDetection.IsPlayerInSight()) + if (PlayerDetection.IsPlayerInRange(StorageModule.Root.EnemyResource.ViewRange) && + PlayerDetection.IsPlayerInSight()) { StateMachine.SetState(EnemyState.Shooting); return; } - + // if player is outside disengage range, change to idle (later on, search) if (MainObject.GlobalPosition.DistanceTo(GameManager.Instance.PlayerPosition.Value) >= StorageModule.Root.EnemyResource.PlayerDisengageRange) @@ -84,13 +81,13 @@ public partial class Alert : EnemyStateBase StateMachine.SetState(EnemyState.Idle); return; } - + // Move towards last known position if (PlayerDetection.LastKnownPlayerPosition.HasValue) { MoveTowardsPosition(PlayerDetection.LastKnownPlayerPosition.Value); } - + NavigationModule.Move(StorageModule.EnemyData.MovementSpeed); StorageModule.FacingDirection = MainObject.Velocity.SnapToCardinal().Normalized(); diff --git a/Sprites/Actors/FairyGuard.png.import b/Sprites/Actors/FairyGuard.png.import index 99db8ae6..c6744d10 100644 --- a/Sprites/Actors/FairyGuard.png.import +++ b/Sprites/Actors/FairyGuard.png.import @@ -15,13 +15,13 @@ dest_files=["res://.godot/imported/FairyGuard.png-c13f7bb7cfab625be756e4c8ce7276 [params] -compress/mode=0 +compress/mode=3 compress/high_quality=false compress/lossy_quality=0.7 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=false +mipmaps/generate=true mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -31,4 +31,4 @@ process/normal_map_invert_y=false process/hdr_as_srgb=false process/hdr_clamp_exposure=false process/size_limit=0 -detect_3d/compress_to=1 +detect_3d/compress_to=0 diff --git a/project.godot b/project.godot index f1652266..56337941 100644 --- a/project.godot +++ b/project.godot @@ -172,6 +172,7 @@ Solid="" Acid="" Destroyable="" navigation_polygon_source_geometry_group="" +navigation_mesh_source_group="" [importer_defaults]