diff --git a/Game/objects/arena_boundary.tscn b/Game/objects/arena_boundary.tscn index c558f475..66d2d6df 100644 --- a/Game/objects/arena_boundary.tscn +++ b/Game/objects/arena_boundary.tscn @@ -1,41 +1,1207 @@ -[gd_scene load_steps=5 format=3] +[gd_scene format=3] [ext_resource type="Script" path="res://scripts/arena_boundary.gd" id="1_bndry"] [sub_resource type="BoxShape3D" id="BoxShape3D_slab"] -size = Vector3(28, 1, 40) +size = Vector3(40, 1, 58) [sub_resource type="BoxShape3D" id="BoxShape3D_side_wall"] -size = Vector3(1, 13, 38) +size = Vector3(1, 19, 56) -[sub_resource type="BoxShape3D" id="BoxShape3D_end_wall"] -size = Vector3(26, 13, 1) +[sub_resource type="BoxShape3D" id="BoxShape3D_70to3"] +size = Vector3(1, 19, 1.45322) -[node name="ArenaBoundary" type="StaticBody3D"] +[sub_resource type="BoxShape3D" id="BoxShape3D_mys7m"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_ug5oh"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_w2wwk"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_28fxy"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_6eg5t"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_6d3kp"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_vp87n"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_k0pps"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_nm2xc"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_spu1i"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_dixh5"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_5rkxe"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_urrjp"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_xgrqd"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_73mt6"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_tpu0y"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_7uonx"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_7o1xp"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_31w4q"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_l6bcp"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_d2nak"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_2uvqt"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_823ln"] +size = Vector3(1, 19, 1.45322) + +[sub_resource type="BoxShape3D" id="BoxShape3D_je06l"] +size = Vector3(1, 46, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_jgoux"] +size = Vector3(1, 46, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_7xdb5"] +size = Vector3(1, 46, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_x0cdw"] +size = Vector3(1, 46, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_urv61"] +size = Vector3(1, 11.5, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_d4utc"] +size = Vector3(1, 11.5, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_ia3m6"] +size = Vector3(1, 11.5, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_scnnk"] +size = Vector3(1, 11.5, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_x8xbf"] +size = Vector3(1, 11.5, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_w8lo7"] +size = Vector3(1, 11.5, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_t3dc1"] +size = Vector3(1, 11.5, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_tspc8"] +size = Vector3(1, 11.5, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_138sb"] +size = Vector3(1, 46, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_77cuf"] +size = Vector3(1, 46, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_pp5kl"] +size = Vector3(1, 46, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_w6ylh"] +size = Vector3(1, 46, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_sbmh7"] +size = Vector3(1, 11.5, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_2p5c8"] +size = Vector3(1, 11.5, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_mgigv"] +size = Vector3(1, 11.5, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_471fe"] +size = Vector3(1, 11.5, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_brrs7"] +size = Vector3(1, 11.5, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_5lj54"] +size = Vector3(1, 11.5, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_wos4d"] +size = Vector3(1, 11.5, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_2pik3"] +size = Vector3(1, 11.5, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_ynp1c"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_knqi2"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_g6i2r"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_ahx7d"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_b2ujo"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_uxoft"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_ljxpx"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_y2m0l"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_wclbe"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_c1qb1"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_vy2n0"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_joorv"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_2tgpq"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_hggtl"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_8j5v3"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_u0tlb"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_dune6"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_wr5v1"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_y4rn3"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_ir502"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_r8apo"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_mugq5"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_4qt3f"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_udic0"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_pjrmw"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_tdpwr"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_enj3q"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_yf3tl"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_kvlkb"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_3cai2"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_7iouc"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_5oqd1"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_swp73"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_b6xk2"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_5xe0h"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_osk2n"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_fuaob"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_d6hm7"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_2fmod"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_2enp2"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_42xtq"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_e3v61"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_v3uum"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_wwyla"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_8esv4"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_xj6mm"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_f48a8"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_0icua"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_mpjij"] +size = Vector3(1, 46, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_3o3ku"] +size = Vector3(1, 46, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_641kh"] +size = Vector3(1, 46, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_20q5p"] +size = Vector3(1, 46, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_kriro"] +size = Vector3(1, 28, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_ib3tv"] +size = Vector3(1, 28, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_1nqsd"] +size = Vector3(1, 28, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_107cs"] +size = Vector3(1, 28, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_ahi0o"] +size = Vector3(1, 46, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_1k4q3"] +size = Vector3(1, 46, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_88ku5"] +size = Vector3(1, 46, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_s2t7r"] +size = Vector3(1, 46, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_n13mt"] +size = Vector3(1, 28, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_q8ag5"] +size = Vector3(1, 28, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_iv4sd"] +size = Vector3(1, 28, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_uow8i"] +size = Vector3(1, 28, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_35mjm"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_i3lf3"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_q03ke"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_3vu3k"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_kptx0"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_gvr22"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_whaal"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_33rb5"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_25pe1"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_1ruhc"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_ts1pb"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_5awia"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_uk0em"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_im3u6"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_s8i4w"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_1gpcx"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_vmlye"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_kjj1g"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_ueypq"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_wuyqe"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_6hw3y"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_b0ijk"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_waln6"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_5c8ba"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_401pd"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_fxg41"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_foten"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_6a4mw"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_3i2q1"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_tusg2"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_g5byq"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_fueej"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_5ecxb"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_b40lu"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_25tb4"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_le7h5"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_pblft"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_82tww"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_tn4j4"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_rtwoo"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_tj1wf"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_7yu5e"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_hqjkw"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_tsi20"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_gisjl"] +size = Vector3(1, 1.580894, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_ampv8"] +size = Vector3(1, 1.9672551, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_lbqtw"] +size = Vector3(1, 2.2629633, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_iexkr"] +size = Vector3(1, 2.4229994, 1.0956495) + +[sub_resource type="BoxShape3D" id="BoxShape3D_ljcpa"] +size = Vector3(17.25, 19, 1) + +[sub_resource type="BoxShape3D" id="BoxShape3D_lsdkb"] +size = Vector3(17.25, 19, 1) + +[sub_resource type="BoxShape3D" id="BoxShape3D_ticj2"] +size = Vector3(3.5, 16.5, 1) + +[sub_resource type="BoxShape3D" id="BoxShape3D_wsnrg"] +size = Vector3(3.5, 1, 1) + +[sub_resource type="BoxShape3D" id="BoxShape3D_lwe1w"] +size = Vector3(17.25, 19, 1) + +[sub_resource type="BoxShape3D" id="BoxShape3D_8dh5e"] +size = Vector3(17.25, 19, 1) + +[sub_resource type="BoxShape3D" id="BoxShape3D_fmsj5"] +size = Vector3(3.5, 16.5, 1) + +[sub_resource type="BoxShape3D" id="BoxShape3D_8qsh8"] +size = Vector3(3.5, 1, 1) + +[node name="ArenaBoundary" type="StaticBody3D" unique_id=1619476847] collision_layer = 4 collision_mask = 3 script = ExtResource("1_bndry") +metadata/baked_goal_mode = 0 -[node name="FloorShape" type="CollisionShape3D" parent="."] +[node name="FloorShape" type="CollisionShape3D" parent="." unique_id=1975818821] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0) shape = SubResource("BoxShape3D_slab") -[node name="WallPosXShape" type="CollisionShape3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12.5, 5.5, 0) +[node name="WallPosXShape" type="CollisionShape3D" parent="." unique_id=1124245800] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18.5, 8.5, 0) shape = SubResource("BoxShape3D_side_wall") -[node name="WallNegXShape" type="CollisionShape3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12.5, 5.5, 0) +[node name="WallNegXShape" type="CollisionShape3D" parent="." unique_id=887415421] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -18.5, 8.5, 0) shape = SubResource("BoxShape3D_side_wall") -[node name="WallPosZShape" type="CollisionShape3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5.5, 18.5) -shape = SubResource("BoxShape3D_end_wall") - -[node name="WallNegZShape" type="CollisionShape3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5.5, -18.5) -shape = SubResource("BoxShape3D_end_wall") - -[node name="CeilingShape" type="CollisionShape3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 12.5, 0) +[node name="CeilingShape" type="CollisionShape3D" parent="." unique_id=113803213] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 18.5, 0) shape = SubResource("BoxShape3D_slab") + +[node name="@CollisionShape3D@2" type="CollisionShape3D" parent="." unique_id=1104275038] +transform = Transform3D(-0.9914449, 0, 0.13052619, 0, 1, 0, -0.13052619, 0, -0.9914449, -18.461502, 8.5, -23.587368) +shape = SubResource("BoxShape3D_70to3") + +[node name="@CollisionShape3D@3" type="CollisionShape3D" parent="." unique_id=522577702] +transform = Transform3D(-0.9238795, 0, 0.38268343, 0, 1, 0, -0.38268343, 0, -0.9238795, -18.157457, 8.5, -24.722075) +shape = SubResource("BoxShape3D_mys7m") + +[node name="@CollisionShape3D@4" type="CollisionShape3D" parent="." unique_id=899532038] +transform = Transform3D(-0.7933533, 0, 0.6087614, 0, 1, 0, -0.6087614, 0, -0.7933533, -17.57009, 8.5, -25.739426) +shape = SubResource("BoxShape3D_ug5oh") + +[node name="@CollisionShape3D@5" type="CollisionShape3D" parent="." unique_id=430891565] +transform = Transform3D(-0.6087614, 0, 0.7933533, 0, 1, 0, -0.7933533, 0, -0.6087614, -16.739426, 8.5, -26.57009) +shape = SubResource("BoxShape3D_w2wwk") + +[node name="@CollisionShape3D@6" type="CollisionShape3D" parent="." unique_id=27856052] +transform = Transform3D(-0.38268343, 0, 0.9238795, 0, 1, 0, -0.9238795, 0, -0.38268343, -15.722075, 8.5, -27.157457) +shape = SubResource("BoxShape3D_28fxy") + +[node name="@CollisionShape3D@7" type="CollisionShape3D" parent="." unique_id=1821968500] +transform = Transform3D(-0.13052619, 0, 0.9914449, 0, 1, 0, -0.9914449, 0, -0.13052619, -14.587367, 8.5, -27.461502) +shape = SubResource("BoxShape3D_6eg5t") + +[node name="@CollisionShape3D@8" type="CollisionShape3D" parent="." unique_id=1287974722] +transform = Transform3D(-0.9914449, 0, -0.13052619, 0, 1, 0, 0.13052619, 0, -0.9914449, -18.461502, 8.5, 23.587368) +shape = SubResource("BoxShape3D_6d3kp") + +[node name="@CollisionShape3D@9" type="CollisionShape3D" parent="." unique_id=348851793] +transform = Transform3D(-0.9238795, 0, -0.38268343, 0, 1, 0, 0.38268343, 0, -0.9238795, -18.157457, 8.5, 24.722075) +shape = SubResource("BoxShape3D_vp87n") + +[node name="@CollisionShape3D@10" type="CollisionShape3D" parent="." unique_id=65739588] +transform = Transform3D(-0.7933533, 0, -0.6087614, 0, 1, 0, 0.6087614, 0, -0.7933533, -17.57009, 8.5, 25.739426) +shape = SubResource("BoxShape3D_k0pps") + +[node name="@CollisionShape3D@11" type="CollisionShape3D" parent="." unique_id=2051248501] +transform = Transform3D(-0.6087614, 0, -0.7933533, 0, 1, 0, 0.7933533, 0, -0.6087614, -16.739426, 8.5, 26.57009) +shape = SubResource("BoxShape3D_nm2xc") + +[node name="@CollisionShape3D@12" type="CollisionShape3D" parent="." unique_id=1808709514] +transform = Transform3D(-0.38268343, 0, -0.9238795, 0, 1, 0, 0.9238795, 0, -0.38268343, -15.722075, 8.5, 27.157457) +shape = SubResource("BoxShape3D_spu1i") + +[node name="@CollisionShape3D@13" type="CollisionShape3D" parent="." unique_id=1797120446] +transform = Transform3D(-0.13052619, 0, -0.9914449, 0, 1, 0, 0.9914449, 0, -0.13052619, -14.587367, 8.5, 27.461502) +shape = SubResource("BoxShape3D_dixh5") + +[node name="@CollisionShape3D@14" type="CollisionShape3D" parent="." unique_id=714258572] +transform = Transform3D(0.9914449, 0, 0.13052619, 0, 1, 0, -0.13052619, 0, 0.9914449, 18.461502, 8.5, -23.587368) +shape = SubResource("BoxShape3D_5rkxe") + +[node name="@CollisionShape3D@15" type="CollisionShape3D" parent="." unique_id=803125453] +transform = Transform3D(0.9238795, 0, 0.38268343, 0, 1, 0, -0.38268343, 0, 0.9238795, 18.157457, 8.5, -24.722075) +shape = SubResource("BoxShape3D_urrjp") + +[node name="@CollisionShape3D@16" type="CollisionShape3D" parent="." unique_id=1099609608] +transform = Transform3D(0.7933533, 0, 0.6087614, 0, 1, 0, -0.6087614, 0, 0.7933533, 17.57009, 8.5, -25.739426) +shape = SubResource("BoxShape3D_xgrqd") + +[node name="@CollisionShape3D@17" type="CollisionShape3D" parent="." unique_id=603830874] +transform = Transform3D(0.6087614, 0, 0.7933533, 0, 1, 0, -0.7933533, 0, 0.6087614, 16.739426, 8.5, -26.57009) +shape = SubResource("BoxShape3D_73mt6") + +[node name="@CollisionShape3D@18" type="CollisionShape3D" parent="." unique_id=268151333] +transform = Transform3D(0.38268343, 0, 0.9238795, 0, 1, 0, -0.9238795, 0, 0.38268343, 15.722075, 8.5, -27.157457) +shape = SubResource("BoxShape3D_tpu0y") + +[node name="@CollisionShape3D@19" type="CollisionShape3D" parent="." unique_id=2047099920] +transform = Transform3D(0.13052619, 0, 0.9914449, 0, 1, 0, -0.9914449, 0, 0.13052619, 14.587367, 8.5, -27.461502) +shape = SubResource("BoxShape3D_7uonx") + +[node name="@CollisionShape3D@20" type="CollisionShape3D" parent="." unique_id=1708884878] +transform = Transform3D(0.9914449, 0, -0.13052619, 0, 1, 0, 0.13052619, 0, 0.9914449, 18.461502, 8.5, 23.587368) +shape = SubResource("BoxShape3D_7o1xp") + +[node name="@CollisionShape3D@21" type="CollisionShape3D" parent="." unique_id=1464576323] +transform = Transform3D(0.9238795, 0, -0.38268343, 0, 1, 0, 0.38268343, 0, 0.9238795, 18.157457, 8.5, 24.722075) +shape = SubResource("BoxShape3D_31w4q") + +[node name="@CollisionShape3D@22" type="CollisionShape3D" parent="." unique_id=1357920431] +transform = Transform3D(0.7933533, 0, -0.6087614, 0, 1, 0, 0.6087614, 0, 0.7933533, 17.57009, 8.5, 25.739426) +shape = SubResource("BoxShape3D_l6bcp") + +[node name="@CollisionShape3D@23" type="CollisionShape3D" parent="." unique_id=1900487622] +transform = Transform3D(0.6087614, 0, -0.7933533, 0, 1, 0, 0.7933533, 0, 0.6087614, 16.739426, 8.5, 26.57009) +shape = SubResource("BoxShape3D_d2nak") + +[node name="@CollisionShape3D@24" type="CollisionShape3D" parent="." unique_id=1422468273] +transform = Transform3D(0.38268343, 0, -0.9238795, 0, 1, 0, 0.9238795, 0, 0.38268343, 15.722075, 8.5, 27.157457) +shape = SubResource("BoxShape3D_2uvqt") + +[node name="@CollisionShape3D@25" type="CollisionShape3D" parent="." unique_id=1448624736] +transform = Transform3D(0.13052619, 0, -0.9914449, 0, 1, 0, 0.9914449, 0, 0.13052619, 14.587367, 8.5, 27.461502) +shape = SubResource("BoxShape3D_823ln") + +[node name="@CollisionShape3D@26" type="CollisionShape3D" parent="." unique_id=766203373] +transform = Transform3D(-0.19509032, 0, -0.98078525, -0.98078525, 0, 0.19509032, 0, 1, 0, -16.487726, -0.45196313, 0) +shape = SubResource("BoxShape3D_je06l") + +[node name="@CollisionShape3D@27" type="CollisionShape3D" parent="." unique_id=1558013448] +transform = Transform3D(-0.55557024, 0, -0.8314696, -0.8314696, 0, 0.55557024, 0, 1, 0, -17.388926, -0.07867399, 0) +shape = SubResource("BoxShape3D_jgoux") + +[node name="@CollisionShape3D@28" type="CollisionShape3D" parent="." unique_id=1724419520] +transform = Transform3D(-0.8314696, 0, -0.55557024, -0.55557024, 0, 0.8314696, 0, 1, 0, -18.078674, 0.6110744, 0) +shape = SubResource("BoxShape3D_7xdb5") + +[node name="@CollisionShape3D@29" type="CollisionShape3D" parent="." unique_id=1101013650] +transform = Transform3D(-0.98078525, 0, -0.19509032, -0.19509032, 0, 0.98078525, 0, 1, 0, -18.451963, 1.5122743, 0) +shape = SubResource("BoxShape3D_x0cdw") + +[node name="@CollisionShape3D@30" type="CollisionShape3D" parent="." unique_id=916972497] +transform = Transform3D(0, 1, 0, -0.98078525, 0, -0.19509032, -0.19509032, 0, 0.98078525, -8.25, -0.45196313, -25.487726) +shape = SubResource("BoxShape3D_urv61") + +[node name="@CollisionShape3D@31" type="CollisionShape3D" parent="." unique_id=1204377601] +transform = Transform3D(0, 1, 0, -0.8314696, 0, -0.55557024, -0.55557024, 0, 0.8314696, -8.25, -0.07867399, -26.388926) +shape = SubResource("BoxShape3D_d4utc") + +[node name="@CollisionShape3D@32" type="CollisionShape3D" parent="." unique_id=254168758] +transform = Transform3D(0, 1, 0, -0.55557024, 0, -0.8314696, -0.8314696, 0, 0.55557024, -8.25, 0.6110744, -27.078674) +shape = SubResource("BoxShape3D_ia3m6") + +[node name="@CollisionShape3D@33" type="CollisionShape3D" parent="." unique_id=192061742] +transform = Transform3D(0, 1, 0, -0.19509032, 0, -0.98078525, -0.98078525, 0, 0.19509032, -8.25, 1.5122743, -27.451963) +shape = SubResource("BoxShape3D_scnnk") + +[node name="@CollisionShape3D@34" type="CollisionShape3D" parent="." unique_id=238627681] +transform = Transform3D(0, 1, 0, -0.98078525, 0, -0.19509032, -0.19509032, 0, 0.98078525, 8.25, -0.45196313, -25.487726) +shape = SubResource("BoxShape3D_x8xbf") + +[node name="@CollisionShape3D@35" type="CollisionShape3D" parent="." unique_id=139458502] +transform = Transform3D(0, 1, 0, -0.8314696, 0, -0.55557024, -0.55557024, 0, 0.8314696, 8.25, -0.07867399, -26.388926) +shape = SubResource("BoxShape3D_w8lo7") + +[node name="@CollisionShape3D@36" type="CollisionShape3D" parent="." unique_id=720606735] +transform = Transform3D(0, 1, 0, -0.55557024, 0, -0.8314696, -0.8314696, 0, 0.55557024, 8.25, 0.6110744, -27.078674) +shape = SubResource("BoxShape3D_t3dc1") + +[node name="@CollisionShape3D@37" type="CollisionShape3D" parent="." unique_id=74841444] +transform = Transform3D(0, 1, 0, -0.19509032, 0, -0.98078525, -0.98078525, 0, 0.19509032, 8.25, 1.5122743, -27.451963) +shape = SubResource("BoxShape3D_tspc8") + +[node name="@CollisionShape3D@38" type="CollisionShape3D" parent="." unique_id=1563670861] +transform = Transform3D(0.19509032, 0, -0.98078525, -0.98078525, 0, -0.19509032, 0, 1, 0, 16.487726, -0.45196313, 0) +shape = SubResource("BoxShape3D_138sb") + +[node name="@CollisionShape3D@39" type="CollisionShape3D" parent="." unique_id=2024475274] +transform = Transform3D(0.55557024, 0, -0.8314696, -0.8314696, 0, -0.55557024, 0, 1, 0, 17.388926, -0.07867399, 0) +shape = SubResource("BoxShape3D_77cuf") + +[node name="@CollisionShape3D@40" type="CollisionShape3D" parent="." unique_id=1413930222] +transform = Transform3D(0.8314696, 0, -0.55557024, -0.55557024, 0, -0.8314696, 0, 1, 0, 18.078674, 0.6110744, 0) +shape = SubResource("BoxShape3D_pp5kl") + +[node name="@CollisionShape3D@41" type="CollisionShape3D" parent="." unique_id=577018938] +transform = Transform3D(0.98078525, 0, -0.19509032, -0.19509032, 0, -0.98078525, 0, 1, 0, 18.451963, 1.5122743, 0) +shape = SubResource("BoxShape3D_w6ylh") + +[node name="@CollisionShape3D@42" type="CollisionShape3D" parent="." unique_id=1836476293] +transform = Transform3D(0, 1, 0, -0.98078525, 0, 0.19509032, 0.19509032, 0, 0.98078525, -8.25, -0.45196313, 25.487726) +shape = SubResource("BoxShape3D_sbmh7") + +[node name="@CollisionShape3D@43" type="CollisionShape3D" parent="." unique_id=58769382] +transform = Transform3D(0, 1, 0, -0.8314696, 0, 0.55557024, 0.55557024, 0, 0.8314696, -8.25, -0.07867399, 26.388926) +shape = SubResource("BoxShape3D_2p5c8") + +[node name="@CollisionShape3D@44" type="CollisionShape3D" parent="." unique_id=1105278127] +transform = Transform3D(0, 1, 0, -0.55557024, 0, 0.8314696, 0.8314696, 0, 0.55557024, -8.25, 0.6110744, 27.078674) +shape = SubResource("BoxShape3D_mgigv") + +[node name="@CollisionShape3D@45" type="CollisionShape3D" parent="." unique_id=1992341608] +transform = Transform3D(0, 1, 0, -0.19509032, 0, 0.98078525, 0.98078525, 0, 0.19509032, -8.25, 1.5122743, 27.451963) +shape = SubResource("BoxShape3D_471fe") + +[node name="@CollisionShape3D@46" type="CollisionShape3D" parent="." unique_id=485425234] +transform = Transform3D(0, 1, 0, -0.98078525, 0, 0.19509032, 0.19509032, 0, 0.98078525, 8.25, -0.45196313, 25.487726) +shape = SubResource("BoxShape3D_brrs7") + +[node name="@CollisionShape3D@47" type="CollisionShape3D" parent="." unique_id=1721576902] +transform = Transform3D(0, 1, 0, -0.8314696, 0, 0.55557024, 0.55557024, 0, 0.8314696, 8.25, -0.07867399, 26.388926) +shape = SubResource("BoxShape3D_5lj54") + +[node name="@CollisionShape3D@48" type="CollisionShape3D" parent="." unique_id=1425390421] +transform = Transform3D(0, 1, 0, -0.55557024, 0, 0.8314696, 0.8314696, 0, 0.55557024, 8.25, 0.6110744, 27.078674) +shape = SubResource("BoxShape3D_wos4d") + +[node name="@CollisionShape3D@49" type="CollisionShape3D" parent="." unique_id=176512965] +transform = Transform3D(0, 1, 0, -0.19509032, 0, 0.98078525, 0.98078525, 0, 0.19509032, 8.25, 1.5122743, 27.451963) +shape = SubResource("BoxShape3D_2pik3") + +[node name="@CollisionShape3D@50" type="CollisionShape3D" parent="." unique_id=667183873] +transform = Transform3D(-0.18844278, 0.25881904, 0.94736576, -0.98078525, 0, -0.19509032, -0.05049309, -0.9659258, 0.2538459, -16.402958, -0.4519632, -23.64387) +shape = SubResource("BoxShape3D_ynp1c") + +[node name="@CollisionShape3D@51" type="CollisionShape3D" parent="." unique_id=657563479] +transform = Transform3D(-0.53663963, 0.25881904, 0.80313796, -0.8314696, 0, -0.5555702, -0.14379215, -0.9659258, 0.21520017, -17.27345, -0.07867402, -23.877117) +shape = SubResource("BoxShape3D_knqi2") + +[node name="@CollisionShape3D@52" type="CollisionShape3D" parent="." unique_id=396316554] +transform = Transform3D(-0.80313796, 0.25881904, 0.53663963, -0.55557024, 0, -0.8314696, -0.21520017, -0.9659258, 0.14379215, -17.939697, 0.6110744, -24.055637) +shape = SubResource("BoxShape3D_g6i2r") + +[node name="@CollisionShape3D@53" type="CollisionShape3D" parent="." unique_id=1873503928] +transform = Transform3D(-0.94736576, 0.25881904, 0.18844278, -0.19509032, 0, -0.9807852, -0.2538459, -0.9659258, 0.05049309, -18.300266, 1.5122743, -24.152252) +shape = SubResource("BoxShape3D_ahx7d") + +[node name="@CollisionShape3D@54" type="CollisionShape3D" parent="." unique_id=1661021033] +transform = Transform3D(-0.13794969, 0.70710677, 0.6935199, -0.98078525, 0, -0.19509032, -0.13794969, -0.70710677, 0.6935199, -15.759088, -0.4519632, -24.759089) +shape = SubResource("BoxShape3D_b2ujo") + +[node name="@CollisionShape3D@55" type="CollisionShape3D" parent="." unique_id=2035912927] +transform = Transform3D(-0.39284748, 0.70710677, 0.5879378, -0.8314696, 0, -0.55557024, -0.39284748, -0.70710677, 0.5879378, -16.396334, -0.07867402, -25.396334) +shape = SubResource("BoxShape3D_uxoft") + +[node name="@CollisionShape3D@56" type="CollisionShape3D" parent="." unique_id=1373037932] +transform = Transform3D(-0.5879378, 0.70710677, 0.39284748, -0.55557024, 0, -0.83146954, -0.5879378, -0.70710677, 0.39284748, -16.884058, 0.6110744, -25.884058) +shape = SubResource("BoxShape3D_ljxpx") + +[node name="@CollisionShape3D@57" type="CollisionShape3D" parent="." unique_id=197874143] +transform = Transform3D(-0.6935199, 0.70710677, 0.13794969, -0.19509032, 0, -0.9807852, -0.6935199, -0.70710677, 0.13794969, -17.148014, 1.5122743, -26.148014) +shape = SubResource("BoxShape3D_y2m0l") + +[node name="@CollisionShape3D@58" type="CollisionShape3D" parent="." unique_id=659714406] +transform = Transform3D(-0.05049309, 0.9659258, 0.2538459, -0.98078525, 0, -0.19509032, -0.18844278, -0.25881904, 0.94736576, -14.643871, -0.4519632, -25.402958) +shape = SubResource("BoxShape3D_wclbe") + +[node name="@CollisionShape3D@59" type="CollisionShape3D" parent="." unique_id=1740413125] +transform = Transform3D(-0.14379215, 0.9659258, 0.21520017, -0.8314696, 0, -0.5555702, -0.53663963, -0.25881904, 0.80313796, -14.877119, -0.07867402, -26.27345) +shape = SubResource("BoxShape3D_c1qb1") + +[node name="@CollisionShape3D@60" type="CollisionShape3D" parent="." unique_id=2017505391] +transform = Transform3D(-0.21520017, 0.9659258, 0.14379215, -0.55557024, 0, -0.8314696, -0.80313796, -0.25881904, 0.53663963, -15.055638, 0.6110744, -26.939697) +shape = SubResource("BoxShape3D_vy2n0") + +[node name="@CollisionShape3D@61" type="CollisionShape3D" parent="." unique_id=1018638670] +transform = Transform3D(-0.2538459, 0.9659258, 0.05049309, -0.19509032, 0, -0.9807852, -0.94736576, -0.25881904, 0.18844278, -15.152252, 1.5122743, -27.300266) +shape = SubResource("BoxShape3D_joorv") + +[node name="@CollisionShape3D@62" type="CollisionShape3D" parent="." unique_id=1367932492] +transform = Transform3D(-0.18844278, 0.25881904, -0.94736576, -0.98078525, 0, 0.19509032, 0.05049309, 0.9659258, 0.2538459, -16.402958, -0.4519632, 23.64387) +shape = SubResource("BoxShape3D_2tgpq") + +[node name="@CollisionShape3D@63" type="CollisionShape3D" parent="." unique_id=524771239] +transform = Transform3D(-0.53663963, 0.25881904, -0.80313796, -0.8314696, 0, 0.5555702, 0.14379215, 0.9659258, 0.21520017, -17.27345, -0.07867402, 23.877117) +shape = SubResource("BoxShape3D_hggtl") + +[node name="@CollisionShape3D@64" type="CollisionShape3D" parent="." unique_id=62892092] +transform = Transform3D(-0.80313796, 0.25881904, -0.53663963, -0.55557024, 0, 0.8314696, 0.21520017, 0.9659258, 0.14379215, -17.939697, 0.6110744, 24.055637) +shape = SubResource("BoxShape3D_8j5v3") + +[node name="@CollisionShape3D@65" type="CollisionShape3D" parent="." unique_id=1379137103] +transform = Transform3D(-0.94736576, 0.25881904, -0.18844278, -0.19509032, 0, 0.9807852, 0.2538459, 0.9659258, 0.05049309, -18.300266, 1.5122743, 24.152252) +shape = SubResource("BoxShape3D_u0tlb") + +[node name="@CollisionShape3D@66" type="CollisionShape3D" parent="." unique_id=1705235086] +transform = Transform3D(-0.13794969, 0.70710677, -0.6935199, -0.98078525, 0, 0.19509032, 0.13794969, 0.70710677, 0.6935199, -15.759088, -0.4519632, 24.759089) +shape = SubResource("BoxShape3D_dune6") + +[node name="@CollisionShape3D@67" type="CollisionShape3D" parent="." unique_id=1480096261] +transform = Transform3D(-0.39284748, 0.70710677, -0.5879378, -0.8314696, 0, 0.55557024, 0.39284748, 0.70710677, 0.5879378, -16.396334, -0.07867402, 25.396334) +shape = SubResource("BoxShape3D_wr5v1") + +[node name="@CollisionShape3D@68" type="CollisionShape3D" parent="." unique_id=1342038379] +transform = Transform3D(-0.5879378, 0.70710677, -0.39284748, -0.55557024, 0, 0.83146954, 0.5879378, 0.70710677, 0.39284748, -16.884058, 0.6110744, 25.884058) +shape = SubResource("BoxShape3D_y4rn3") + +[node name="@CollisionShape3D@69" type="CollisionShape3D" parent="." unique_id=2042326159] +transform = Transform3D(-0.6935199, 0.70710677, -0.13794969, -0.19509032, 0, 0.9807852, 0.6935199, 0.70710677, 0.13794969, -17.148014, 1.5122743, 26.148014) +shape = SubResource("BoxShape3D_ir502") + +[node name="@CollisionShape3D@70" type="CollisionShape3D" parent="." unique_id=783510485] +transform = Transform3D(-0.05049309, 0.9659258, -0.2538459, -0.98078525, 0, 0.19509032, 0.18844278, 0.25881904, 0.94736576, -14.643871, -0.4519632, 25.402958) +shape = SubResource("BoxShape3D_r8apo") + +[node name="@CollisionShape3D@71" type="CollisionShape3D" parent="." unique_id=1779162211] +transform = Transform3D(-0.14379215, 0.9659258, -0.21520017, -0.8314696, 0, 0.5555702, 0.53663963, 0.25881904, 0.80313796, -14.877119, -0.07867402, 26.27345) +shape = SubResource("BoxShape3D_mugq5") + +[node name="@CollisionShape3D@72" type="CollisionShape3D" parent="." unique_id=974642962] +transform = Transform3D(-0.21520017, 0.9659258, -0.14379215, -0.55557024, 0, 0.8314696, 0.80313796, 0.25881904, 0.53663963, -15.055638, 0.6110744, 26.939697) +shape = SubResource("BoxShape3D_4qt3f") + +[node name="@CollisionShape3D@73" type="CollisionShape3D" parent="." unique_id=543018953] +transform = Transform3D(-0.2538459, 0.9659258, -0.05049309, -0.19509032, 0, 0.9807852, 0.94736576, 0.25881904, 0.18844278, -15.152252, 1.5122743, 27.300266) +shape = SubResource("BoxShape3D_udic0") + +[node name="@CollisionShape3D@74" type="CollisionShape3D" parent="." unique_id=1242297986] +transform = Transform3D(0.18844278, -0.25881904, 0.94736576, -0.98078525, 0, 0.19509032, -0.05049309, -0.9659258, -0.2538459, 16.402958, -0.4519632, -23.64387) +shape = SubResource("BoxShape3D_pjrmw") + +[node name="@CollisionShape3D@75" type="CollisionShape3D" parent="." unique_id=1321828353] +transform = Transform3D(0.53663963, -0.25881904, 0.80313796, -0.8314696, 0, 0.5555702, -0.14379215, -0.9659258, -0.21520017, 17.27345, -0.07867402, -23.877117) +shape = SubResource("BoxShape3D_tdpwr") + +[node name="@CollisionShape3D@76" type="CollisionShape3D" parent="." unique_id=1333865188] +transform = Transform3D(0.80313796, -0.25881904, 0.53663963, -0.55557024, 0, 0.8314696, -0.21520017, -0.9659258, -0.14379215, 17.939697, 0.6110744, -24.055637) +shape = SubResource("BoxShape3D_enj3q") + +[node name="@CollisionShape3D@77" type="CollisionShape3D" parent="." unique_id=1689467937] +transform = Transform3D(0.94736576, -0.25881904, 0.18844278, -0.19509032, 0, 0.9807852, -0.2538459, -0.9659258, -0.05049309, 18.300266, 1.5122743, -24.152252) +shape = SubResource("BoxShape3D_yf3tl") + +[node name="@CollisionShape3D@78" type="CollisionShape3D" parent="." unique_id=2072893659] +transform = Transform3D(0.13794969, -0.70710677, 0.6935199, -0.98078525, 0, 0.19509032, -0.13794969, -0.70710677, -0.6935199, 15.759088, -0.4519632, -24.759089) +shape = SubResource("BoxShape3D_kvlkb") + +[node name="@CollisionShape3D@79" type="CollisionShape3D" parent="." unique_id=1302372101] +transform = Transform3D(0.39284748, -0.70710677, 0.5879378, -0.8314696, 0, 0.55557024, -0.39284748, -0.70710677, -0.5879378, 16.396334, -0.07867402, -25.396334) +shape = SubResource("BoxShape3D_3cai2") + +[node name="@CollisionShape3D@80" type="CollisionShape3D" parent="." unique_id=1292809499] +transform = Transform3D(0.5879378, -0.70710677, 0.39284748, -0.55557024, 0, 0.83146954, -0.5879378, -0.70710677, -0.39284748, 16.884058, 0.6110744, -25.884058) +shape = SubResource("BoxShape3D_7iouc") + +[node name="@CollisionShape3D@81" type="CollisionShape3D" parent="." unique_id=47547132] +transform = Transform3D(0.6935199, -0.70710677, 0.13794969, -0.19509032, 0, 0.9807852, -0.6935199, -0.70710677, -0.13794969, 17.148014, 1.5122743, -26.148014) +shape = SubResource("BoxShape3D_5oqd1") + +[node name="@CollisionShape3D@82" type="CollisionShape3D" parent="." unique_id=513013002] +transform = Transform3D(0.05049309, -0.9659258, 0.2538459, -0.98078525, 0, 0.19509032, -0.18844278, -0.25881904, -0.94736576, 14.643871, -0.4519632, -25.402958) +shape = SubResource("BoxShape3D_swp73") + +[node name="@CollisionShape3D@83" type="CollisionShape3D" parent="." unique_id=19999408] +transform = Transform3D(0.14379215, -0.9659258, 0.21520017, -0.8314696, 0, 0.5555702, -0.53663963, -0.25881904, -0.80313796, 14.877119, -0.07867402, -26.27345) +shape = SubResource("BoxShape3D_b6xk2") + +[node name="@CollisionShape3D@84" type="CollisionShape3D" parent="." unique_id=1921442664] +transform = Transform3D(0.21520017, -0.9659258, 0.14379215, -0.55557024, 0, 0.8314696, -0.80313796, -0.25881904, -0.53663963, 15.055638, 0.6110744, -26.939697) +shape = SubResource("BoxShape3D_5xe0h") + +[node name="@CollisionShape3D@85" type="CollisionShape3D" parent="." unique_id=1628748732] +transform = Transform3D(0.2538459, -0.9659258, 0.05049309, -0.19509032, 0, 0.9807852, -0.94736576, -0.25881904, -0.18844278, 15.152252, 1.5122743, -27.300266) +shape = SubResource("BoxShape3D_osk2n") + +[node name="@CollisionShape3D@86" type="CollisionShape3D" parent="." unique_id=995200700] +transform = Transform3D(0.18844278, -0.25881904, -0.94736576, -0.98078525, 0, -0.19509032, 0.05049309, 0.9659258, -0.2538459, 16.402958, -0.4519632, 23.64387) +shape = SubResource("BoxShape3D_fuaob") + +[node name="@CollisionShape3D@87" type="CollisionShape3D" parent="." unique_id=1965408435] +transform = Transform3D(0.53663963, -0.25881904, -0.80313796, -0.8314696, 0, -0.5555702, 0.14379215, 0.9659258, -0.21520017, 17.27345, -0.07867402, 23.877117) +shape = SubResource("BoxShape3D_d6hm7") + +[node name="@CollisionShape3D@88" type="CollisionShape3D" parent="." unique_id=1167752072] +transform = Transform3D(0.80313796, -0.25881904, -0.53663963, -0.55557024, 0, -0.8314696, 0.21520017, 0.9659258, -0.14379215, 17.939697, 0.6110744, 24.055637) +shape = SubResource("BoxShape3D_2fmod") + +[node name="@CollisionShape3D@89" type="CollisionShape3D" parent="." unique_id=340159751] +transform = Transform3D(0.94736576, -0.25881904, -0.18844278, -0.19509032, 0, -0.9807852, 0.2538459, 0.9659258, -0.05049309, 18.300266, 1.5122743, 24.152252) +shape = SubResource("BoxShape3D_2enp2") + +[node name="@CollisionShape3D@90" type="CollisionShape3D" parent="." unique_id=230990520] +transform = Transform3D(0.13794969, -0.70710677, -0.6935199, -0.98078525, 0, -0.19509032, 0.13794969, 0.70710677, -0.6935199, 15.759088, -0.4519632, 24.759089) +shape = SubResource("BoxShape3D_42xtq") + +[node name="@CollisionShape3D@91" type="CollisionShape3D" parent="." unique_id=1201647351] +transform = Transform3D(0.39284748, -0.70710677, -0.5879378, -0.8314696, 0, -0.55557024, 0.39284748, 0.70710677, -0.5879378, 16.396334, -0.07867402, 25.396334) +shape = SubResource("BoxShape3D_e3v61") + +[node name="@CollisionShape3D@92" type="CollisionShape3D" parent="." unique_id=1801079984] +transform = Transform3D(0.5879378, -0.70710677, -0.39284748, -0.55557024, 0, -0.83146954, 0.5879378, 0.70710677, -0.39284748, 16.884058, 0.6110744, 25.884058) +shape = SubResource("BoxShape3D_v3uum") + +[node name="@CollisionShape3D@93" type="CollisionShape3D" parent="." unique_id=1017650037] +transform = Transform3D(0.6935199, -0.70710677, -0.13794969, -0.19509032, 0, -0.9807852, 0.6935199, 0.70710677, -0.13794969, 17.148014, 1.5122743, 26.148014) +shape = SubResource("BoxShape3D_wwyla") + +[node name="@CollisionShape3D@94" type="CollisionShape3D" parent="." unique_id=681376551] +transform = Transform3D(0.05049309, -0.9659258, -0.2538459, -0.98078525, 0, -0.19509032, 0.18844278, 0.25881904, -0.94736576, 14.643871, -0.4519632, 25.402958) +shape = SubResource("BoxShape3D_8esv4") + +[node name="@CollisionShape3D@95" type="CollisionShape3D" parent="." unique_id=1044309673] +transform = Transform3D(0.14379215, -0.9659258, -0.21520017, -0.8314696, 0, -0.5555702, 0.53663963, 0.25881904, -0.80313796, 14.877119, -0.07867402, 26.27345) +shape = SubResource("BoxShape3D_xj6mm") + +[node name="@CollisionShape3D@96" type="CollisionShape3D" parent="." unique_id=1942470118] +transform = Transform3D(0.21520017, -0.9659258, -0.14379215, -0.55557024, 0, -0.8314696, 0.80313796, 0.25881904, -0.53663963, 15.055638, 0.6110744, 26.939697) +shape = SubResource("BoxShape3D_f48a8") + +[node name="@CollisionShape3D@97" type="CollisionShape3D" parent="." unique_id=1823265201] +transform = Transform3D(0.2538459, -0.9659258, -0.05049309, -0.19509032, 0, -0.9807852, 0.94736576, 0.25881904, -0.18844278, 15.152252, 1.5122743, 27.300266) +shape = SubResource("BoxShape3D_0icua") + +[node name="@CollisionShape3D@98" type="CollisionShape3D" parent="." unique_id=1840297144] +transform = Transform3D(-0.19509032, 0, 0.98078525, 0.98078525, 0, 0.19509032, 0, 1, 0, -16.487726, 18.451963, 0) +shape = SubResource("BoxShape3D_mpjij") + +[node name="@CollisionShape3D@99" type="CollisionShape3D" parent="." unique_id=1935988837] +transform = Transform3D(-0.55557024, 0, 0.8314696, 0.8314696, 0, 0.55557024, 0, 1, 0, -17.388926, 18.078674, 0) +shape = SubResource("BoxShape3D_3o3ku") + +[node name="@CollisionShape3D@100" type="CollisionShape3D" parent="." unique_id=1097212039] +transform = Transform3D(-0.8314696, 0, 0.55557024, 0.55557024, 0, 0.8314696, 0, 1, 0, -18.078674, 17.388926, 0) +shape = SubResource("BoxShape3D_641kh") + +[node name="@CollisionShape3D@101" type="CollisionShape3D" parent="." unique_id=1423709423] +transform = Transform3D(-0.98078525, 0, 0.19509032, 0.19509032, 0, 0.98078525, 0, 1, 0, -18.451963, 16.487726, 0) +shape = SubResource("BoxShape3D_20q5p") + +[node name="@CollisionShape3D@102" type="CollisionShape3D" parent="." unique_id=137088972] +transform = Transform3D(0, 1, 0, 0.98078525, 0, -0.19509032, -0.19509032, 0, -0.98078525, 0, 18.451963, -25.487726) +shape = SubResource("BoxShape3D_kriro") + +[node name="@CollisionShape3D@103" type="CollisionShape3D" parent="." unique_id=692129515] +transform = Transform3D(0, 1, 0, 0.8314696, 0, -0.55557024, -0.55557024, 0, -0.8314696, 0, 18.078674, -26.388926) +shape = SubResource("BoxShape3D_ib3tv") + +[node name="@CollisionShape3D@104" type="CollisionShape3D" parent="." unique_id=2122794337] +transform = Transform3D(0, 1, 0, 0.55557024, 0, -0.8314696, -0.8314696, 0, -0.55557024, 0, 17.388926, -27.078674) +shape = SubResource("BoxShape3D_1nqsd") + +[node name="@CollisionShape3D@105" type="CollisionShape3D" parent="." unique_id=157125395] +transform = Transform3D(0, 1, 0, 0.19509032, 0, -0.98078525, -0.98078525, 0, -0.19509032, 0, 16.487726, -27.451963) +shape = SubResource("BoxShape3D_107cs") + +[node name="@CollisionShape3D@106" type="CollisionShape3D" parent="." unique_id=1459493071] +transform = Transform3D(0.19509032, 0, 0.98078525, 0.98078525, 0, -0.19509032, 0, 1, 0, 16.487726, 18.451963, 0) +shape = SubResource("BoxShape3D_ahi0o") + +[node name="@CollisionShape3D@107" type="CollisionShape3D" parent="." unique_id=1816036188] +transform = Transform3D(0.55557024, 0, 0.8314696, 0.8314696, 0, -0.55557024, 0, 1, 0, 17.388926, 18.078674, 0) +shape = SubResource("BoxShape3D_1k4q3") + +[node name="@CollisionShape3D@108" type="CollisionShape3D" parent="." unique_id=693684678] +transform = Transform3D(0.8314696, 0, 0.55557024, 0.55557024, 0, -0.8314696, 0, 1, 0, 18.078674, 17.388926, 0) +shape = SubResource("BoxShape3D_88ku5") + +[node name="@CollisionShape3D@109" type="CollisionShape3D" parent="." unique_id=1066056580] +transform = Transform3D(0.98078525, 0, 0.19509032, 0.19509032, 0, -0.98078525, 0, 1, 0, 18.451963, 16.487726, 0) +shape = SubResource("BoxShape3D_s2t7r") + +[node name="@CollisionShape3D@110" type="CollisionShape3D" parent="." unique_id=1524837144] +transform = Transform3D(0, 1, 0, 0.98078525, 0, 0.19509032, 0.19509032, 0, -0.98078525, 0, 18.451963, 25.487726) +shape = SubResource("BoxShape3D_n13mt") + +[node name="@CollisionShape3D@111" type="CollisionShape3D" parent="." unique_id=1360874482] +transform = Transform3D(0, 1, 0, 0.8314696, 0, 0.55557024, 0.55557024, 0, -0.8314696, 0, 18.078674, 26.388926) +shape = SubResource("BoxShape3D_q8ag5") + +[node name="@CollisionShape3D@112" type="CollisionShape3D" parent="." unique_id=653346313] +transform = Transform3D(0, 1, 0, 0.55557024, 0, 0.8314696, 0.8314696, 0, -0.55557024, 0, 17.388926, 27.078674) +shape = SubResource("BoxShape3D_iv4sd") + +[node name="@CollisionShape3D@113" type="CollisionShape3D" parent="." unique_id=443639237] +transform = Transform3D(0, 1, 0, 0.19509032, 0, 0.98078525, 0.98078525, 0, -0.19509032, 0, 16.487726, 27.451963) +shape = SubResource("BoxShape3D_uow8i") + +[node name="@CollisionShape3D@114" type="CollisionShape3D" parent="." unique_id=461130254] +transform = Transform3D(-0.18844278, 0.25881904, -0.94736576, 0.98078525, 0, -0.19509032, -0.05049309, -0.9659258, -0.2538459, -16.402958, 18.451963, -23.64387) +shape = SubResource("BoxShape3D_35mjm") + +[node name="@CollisionShape3D@115" type="CollisionShape3D" parent="." unique_id=495929450] +transform = Transform3D(-0.53663963, 0.25881904, -0.80313796, 0.8314696, 0, -0.5555702, -0.14379215, -0.9659258, -0.21520017, -17.27345, 18.078674, -23.877117) +shape = SubResource("BoxShape3D_i3lf3") + +[node name="@CollisionShape3D@116" type="CollisionShape3D" parent="." unique_id=53495663] +transform = Transform3D(-0.80313796, 0.25881904, -0.53663963, 0.55557024, 0, -0.8314696, -0.21520017, -0.9659258, -0.14379215, -17.939697, 17.388926, -24.055637) +shape = SubResource("BoxShape3D_q03ke") + +[node name="@CollisionShape3D@117" type="CollisionShape3D" parent="." unique_id=464390013] +transform = Transform3D(-0.94736576, 0.25881904, -0.18844278, 0.19509032, 0, -0.9807852, -0.2538459, -0.9659258, -0.05049309, -18.300266, 16.487726, -24.152252) +shape = SubResource("BoxShape3D_3vu3k") + +[node name="@CollisionShape3D@118" type="CollisionShape3D" parent="." unique_id=1220816422] +transform = Transform3D(-0.13794969, 0.70710677, -0.6935199, 0.98078525, 0, -0.19509032, -0.13794969, -0.70710677, -0.6935199, -15.759088, 18.451963, -24.759089) +shape = SubResource("BoxShape3D_kptx0") + +[node name="@CollisionShape3D@119" type="CollisionShape3D" parent="." unique_id=1862916581] +transform = Transform3D(-0.39284748, 0.70710677, -0.5879378, 0.8314696, 0, -0.55557024, -0.39284748, -0.70710677, -0.5879378, -16.396334, 18.078674, -25.396334) +shape = SubResource("BoxShape3D_gvr22") + +[node name="@CollisionShape3D@120" type="CollisionShape3D" parent="." unique_id=1540735633] +transform = Transform3D(-0.5879378, 0.70710677, -0.39284748, 0.55557024, 0, -0.83146954, -0.5879378, -0.70710677, -0.39284748, -16.884058, 17.388926, -25.884058) +shape = SubResource("BoxShape3D_whaal") + +[node name="@CollisionShape3D@121" type="CollisionShape3D" parent="." unique_id=2028645730] +transform = Transform3D(-0.6935199, 0.70710677, -0.13794969, 0.19509032, 0, -0.9807852, -0.6935199, -0.70710677, -0.13794969, -17.148014, 16.487726, -26.148014) +shape = SubResource("BoxShape3D_33rb5") + +[node name="@CollisionShape3D@122" type="CollisionShape3D" parent="." unique_id=236312366] +transform = Transform3D(-0.05049309, 0.9659258, -0.2538459, 0.98078525, 0, -0.19509032, -0.18844278, -0.25881904, -0.94736576, -14.643871, 18.451963, -25.402958) +shape = SubResource("BoxShape3D_25pe1") + +[node name="@CollisionShape3D@123" type="CollisionShape3D" parent="." unique_id=1066190126] +transform = Transform3D(-0.14379215, 0.9659258, -0.21520017, 0.8314696, 0, -0.5555702, -0.53663963, -0.25881904, -0.80313796, -14.877119, 18.078674, -26.27345) +shape = SubResource("BoxShape3D_1ruhc") + +[node name="@CollisionShape3D@124" type="CollisionShape3D" parent="." unique_id=479278558] +transform = Transform3D(-0.21520017, 0.9659258, -0.14379215, 0.55557024, 0, -0.8314696, -0.80313796, -0.25881904, -0.53663963, -15.055638, 17.388926, -26.939697) +shape = SubResource("BoxShape3D_ts1pb") + +[node name="@CollisionShape3D@125" type="CollisionShape3D" parent="." unique_id=1048829062] +transform = Transform3D(-0.2538459, 0.9659258, -0.05049309, 0.19509032, 0, -0.9807852, -0.94736576, -0.25881904, -0.18844278, -15.152252, 16.487726, -27.300266) +shape = SubResource("BoxShape3D_5awia") + +[node name="@CollisionShape3D@126" type="CollisionShape3D" parent="." unique_id=405907219] +transform = Transform3D(-0.18844278, 0.25881904, 0.94736576, 0.98078525, 0, 0.19509032, 0.05049309, 0.9659258, -0.2538459, -16.402958, 18.451963, 23.64387) +shape = SubResource("BoxShape3D_uk0em") + +[node name="@CollisionShape3D@127" type="CollisionShape3D" parent="." unique_id=1591228932] +transform = Transform3D(-0.53663963, 0.25881904, 0.80313796, 0.8314696, 0, 0.5555702, 0.14379215, 0.9659258, -0.21520017, -17.27345, 18.078674, 23.877117) +shape = SubResource("BoxShape3D_im3u6") + +[node name="@CollisionShape3D@128" type="CollisionShape3D" parent="." unique_id=152008946] +transform = Transform3D(-0.80313796, 0.25881904, 0.53663963, 0.55557024, 0, 0.8314696, 0.21520017, 0.9659258, -0.14379215, -17.939697, 17.388926, 24.055637) +shape = SubResource("BoxShape3D_s8i4w") + +[node name="@CollisionShape3D@129" type="CollisionShape3D" parent="." unique_id=2076194981] +transform = Transform3D(-0.94736576, 0.25881904, 0.18844278, 0.19509032, 0, 0.9807852, 0.2538459, 0.9659258, -0.05049309, -18.300266, 16.487726, 24.152252) +shape = SubResource("BoxShape3D_1gpcx") + +[node name="@CollisionShape3D@130" type="CollisionShape3D" parent="." unique_id=1359030196] +transform = Transform3D(-0.13794969, 0.70710677, 0.6935199, 0.98078525, 0, 0.19509032, 0.13794969, 0.70710677, -0.6935199, -15.759088, 18.451963, 24.759089) +shape = SubResource("BoxShape3D_vmlye") + +[node name="@CollisionShape3D@131" type="CollisionShape3D" parent="." unique_id=1635444417] +transform = Transform3D(-0.39284748, 0.70710677, 0.5879378, 0.8314696, 0, 0.55557024, 0.39284748, 0.70710677, -0.5879378, -16.396334, 18.078674, 25.396334) +shape = SubResource("BoxShape3D_kjj1g") + +[node name="@CollisionShape3D@132" type="CollisionShape3D" parent="." unique_id=2051933643] +transform = Transform3D(-0.5879378, 0.70710677, 0.39284748, 0.55557024, 0, 0.83146954, 0.5879378, 0.70710677, -0.39284748, -16.884058, 17.388926, 25.884058) +shape = SubResource("BoxShape3D_ueypq") + +[node name="@CollisionShape3D@133" type="CollisionShape3D" parent="." unique_id=17596613] +transform = Transform3D(-0.6935199, 0.70710677, 0.13794969, 0.19509032, 0, 0.9807852, 0.6935199, 0.70710677, -0.13794969, -17.148014, 16.487726, 26.148014) +shape = SubResource("BoxShape3D_wuyqe") + +[node name="@CollisionShape3D@134" type="CollisionShape3D" parent="." unique_id=148938798] +transform = Transform3D(-0.05049309, 0.9659258, 0.2538459, 0.98078525, 0, 0.19509032, 0.18844278, 0.25881904, -0.94736576, -14.643871, 18.451963, 25.402958) +shape = SubResource("BoxShape3D_6hw3y") + +[node name="@CollisionShape3D@135" type="CollisionShape3D" parent="." unique_id=109791403] +transform = Transform3D(-0.14379215, 0.9659258, 0.21520017, 0.8314696, 0, 0.5555702, 0.53663963, 0.25881904, -0.80313796, -14.877119, 18.078674, 26.27345) +shape = SubResource("BoxShape3D_b0ijk") + +[node name="@CollisionShape3D@136" type="CollisionShape3D" parent="." unique_id=936317824] +transform = Transform3D(-0.21520017, 0.9659258, 0.14379215, 0.55557024, 0, 0.8314696, 0.80313796, 0.25881904, -0.53663963, -15.055638, 17.388926, 26.939697) +shape = SubResource("BoxShape3D_waln6") + +[node name="@CollisionShape3D@137" type="CollisionShape3D" parent="." unique_id=1602425529] +transform = Transform3D(-0.2538459, 0.9659258, 0.05049309, 0.19509032, 0, 0.9807852, 0.94736576, 0.25881904, -0.18844278, -15.152252, 16.487726, 27.300266) +shape = SubResource("BoxShape3D_5c8ba") + +[node name="@CollisionShape3D@138" type="CollisionShape3D" parent="." unique_id=2067426416] +transform = Transform3D(0.18844278, -0.25881904, -0.94736576, 0.98078525, 0, 0.19509032, -0.05049309, -0.9659258, 0.2538459, 16.402958, 18.451963, -23.64387) +shape = SubResource("BoxShape3D_401pd") + +[node name="@CollisionShape3D@139" type="CollisionShape3D" parent="." unique_id=2043597586] +transform = Transform3D(0.53663963, -0.25881904, -0.80313796, 0.8314696, 0, 0.5555702, -0.14379215, -0.9659258, 0.21520017, 17.27345, 18.078674, -23.877117) +shape = SubResource("BoxShape3D_fxg41") + +[node name="@CollisionShape3D@140" type="CollisionShape3D" parent="." unique_id=199624648] +transform = Transform3D(0.80313796, -0.25881904, -0.53663963, 0.55557024, 0, 0.8314696, -0.21520017, -0.9659258, 0.14379215, 17.939697, 17.388926, -24.055637) +shape = SubResource("BoxShape3D_foten") + +[node name="@CollisionShape3D@141" type="CollisionShape3D" parent="." unique_id=309152729] +transform = Transform3D(0.94736576, -0.25881904, -0.18844278, 0.19509032, 0, 0.9807852, -0.2538459, -0.9659258, 0.05049309, 18.300266, 16.487726, -24.152252) +shape = SubResource("BoxShape3D_6a4mw") + +[node name="@CollisionShape3D@142" type="CollisionShape3D" parent="." unique_id=520799326] +transform = Transform3D(0.13794969, -0.70710677, -0.6935199, 0.98078525, 0, 0.19509032, -0.13794969, -0.70710677, 0.6935199, 15.759088, 18.451963, -24.759089) +shape = SubResource("BoxShape3D_3i2q1") + +[node name="@CollisionShape3D@143" type="CollisionShape3D" parent="." unique_id=1625470585] +transform = Transform3D(0.39284748, -0.70710677, -0.5879378, 0.8314696, 0, 0.55557024, -0.39284748, -0.70710677, 0.5879378, 16.396334, 18.078674, -25.396334) +shape = SubResource("BoxShape3D_tusg2") + +[node name="@CollisionShape3D@144" type="CollisionShape3D" parent="." unique_id=1971098565] +transform = Transform3D(0.5879378, -0.70710677, -0.39284748, 0.55557024, 0, 0.83146954, -0.5879378, -0.70710677, 0.39284748, 16.884058, 17.388926, -25.884058) +shape = SubResource("BoxShape3D_g5byq") + +[node name="@CollisionShape3D@145" type="CollisionShape3D" parent="." unique_id=1895471112] +transform = Transform3D(0.6935199, -0.70710677, -0.13794969, 0.19509032, 0, 0.9807852, -0.6935199, -0.70710677, 0.13794969, 17.148014, 16.487726, -26.148014) +shape = SubResource("BoxShape3D_fueej") + +[node name="@CollisionShape3D@146" type="CollisionShape3D" parent="." unique_id=1806663148] +transform = Transform3D(0.05049309, -0.9659258, -0.2538459, 0.98078525, 0, 0.19509032, -0.18844278, -0.25881904, 0.94736576, 14.643871, 18.451963, -25.402958) +shape = SubResource("BoxShape3D_5ecxb") + +[node name="@CollisionShape3D@147" type="CollisionShape3D" parent="." unique_id=232365021] +transform = Transform3D(0.14379215, -0.9659258, -0.21520017, 0.8314696, 0, 0.5555702, -0.53663963, -0.25881904, 0.80313796, 14.877119, 18.078674, -26.27345) +shape = SubResource("BoxShape3D_b40lu") + +[node name="@CollisionShape3D@148" type="CollisionShape3D" parent="." unique_id=312739217] +transform = Transform3D(0.21520017, -0.9659258, -0.14379215, 0.55557024, 0, 0.8314696, -0.80313796, -0.25881904, 0.53663963, 15.055638, 17.388926, -26.939697) +shape = SubResource("BoxShape3D_25tb4") + +[node name="@CollisionShape3D@149" type="CollisionShape3D" parent="." unique_id=671240918] +transform = Transform3D(0.2538459, -0.9659258, -0.05049309, 0.19509032, 0, 0.9807852, -0.94736576, -0.25881904, 0.18844278, 15.152252, 16.487726, -27.300266) +shape = SubResource("BoxShape3D_le7h5") + +[node name="@CollisionShape3D@150" type="CollisionShape3D" parent="." unique_id=1532368589] +transform = Transform3D(0.18844278, -0.25881904, 0.94736576, 0.98078525, 0, -0.19509032, 0.05049309, 0.9659258, 0.2538459, 16.402958, 18.451963, 23.64387) +shape = SubResource("BoxShape3D_pblft") + +[node name="@CollisionShape3D@151" type="CollisionShape3D" parent="." unique_id=1551843745] +transform = Transform3D(0.53663963, -0.25881904, 0.80313796, 0.8314696, 0, -0.5555702, 0.14379215, 0.9659258, 0.21520017, 17.27345, 18.078674, 23.877117) +shape = SubResource("BoxShape3D_82tww") + +[node name="@CollisionShape3D@152" type="CollisionShape3D" parent="." unique_id=1289686546] +transform = Transform3D(0.80313796, -0.25881904, 0.53663963, 0.55557024, 0, -0.8314696, 0.21520017, 0.9659258, 0.14379215, 17.939697, 17.388926, 24.055637) +shape = SubResource("BoxShape3D_tn4j4") + +[node name="@CollisionShape3D@153" type="CollisionShape3D" parent="." unique_id=1087455241] +transform = Transform3D(0.94736576, -0.25881904, 0.18844278, 0.19509032, 0, -0.9807852, 0.2538459, 0.9659258, 0.05049309, 18.300266, 16.487726, 24.152252) +shape = SubResource("BoxShape3D_rtwoo") + +[node name="@CollisionShape3D@154" type="CollisionShape3D" parent="." unique_id=1963017669] +transform = Transform3D(0.13794969, -0.70710677, 0.6935199, 0.98078525, 0, -0.19509032, 0.13794969, 0.70710677, 0.6935199, 15.759088, 18.451963, 24.759089) +shape = SubResource("BoxShape3D_tj1wf") + +[node name="@CollisionShape3D@155" type="CollisionShape3D" parent="." unique_id=141245646] +transform = Transform3D(0.39284748, -0.70710677, 0.5879378, 0.8314696, 0, -0.55557024, 0.39284748, 0.70710677, 0.5879378, 16.396334, 18.078674, 25.396334) +shape = SubResource("BoxShape3D_7yu5e") + +[node name="@CollisionShape3D@156" type="CollisionShape3D" parent="." unique_id=1298620761] +transform = Transform3D(0.5879378, -0.70710677, 0.39284748, 0.55557024, 0, -0.83146954, 0.5879378, 0.70710677, 0.39284748, 16.884058, 17.388926, 25.884058) +shape = SubResource("BoxShape3D_hqjkw") + +[node name="@CollisionShape3D@157" type="CollisionShape3D" parent="." unique_id=1952456070] +transform = Transform3D(0.6935199, -0.70710677, 0.13794969, 0.19509032, 0, -0.9807852, 0.6935199, 0.70710677, 0.13794969, 17.148014, 16.487726, 26.148014) +shape = SubResource("BoxShape3D_tsi20") + +[node name="@CollisionShape3D@158" type="CollisionShape3D" parent="." unique_id=1523105927] +transform = Transform3D(0.05049309, -0.9659258, 0.2538459, 0.98078525, 0, -0.19509032, 0.18844278, 0.25881904, 0.94736576, 14.643871, 18.451963, 25.402958) +shape = SubResource("BoxShape3D_gisjl") + +[node name="@CollisionShape3D@159" type="CollisionShape3D" parent="." unique_id=1841695705] +transform = Transform3D(0.14379215, -0.9659258, 0.21520017, 0.8314696, 0, -0.5555702, 0.53663963, 0.25881904, 0.80313796, 14.877119, 18.078674, 26.27345) +shape = SubResource("BoxShape3D_ampv8") + +[node name="@CollisionShape3D@160" type="CollisionShape3D" parent="." unique_id=1617391047] +transform = Transform3D(0.21520017, -0.9659258, 0.14379215, 0.55557024, 0, -0.8314696, 0.80313796, 0.25881904, 0.53663963, 15.055638, 17.388926, 26.939697) +shape = SubResource("BoxShape3D_lbqtw") + +[node name="@CollisionShape3D@161" type="CollisionShape3D" parent="." unique_id=1911759795] +transform = Transform3D(0.2538459, -0.9659258, 0.05049309, 0.19509032, 0, -0.9807852, 0.94736576, 0.25881904, 0.18844278, 15.152252, 16.487726, 27.300266) +shape = SubResource("BoxShape3D_iexkr") + +[node name="@CollisionShape3D@162" type="CollisionShape3D" parent="." unique_id=1448183512] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10.375, 8.5, -27.5) +shape = SubResource("BoxShape3D_ljcpa") + +[node name="@CollisionShape3D@163" type="CollisionShape3D" parent="." unique_id=647923769] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.375, 8.5, -27.5) +shape = SubResource("BoxShape3D_lsdkb") + +[node name="@CollisionShape3D@164" type="CollisionShape3D" parent="." unique_id=1490170059] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 9.75, -27.5) +shape = SubResource("BoxShape3D_ticj2") + +[node name="@CollisionShape3D@165" type="CollisionShape3D" parent="." unique_id=1784303999] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, -27.5) +shape = SubResource("BoxShape3D_wsnrg") + +[node name="@CollisionShape3D@166" type="CollisionShape3D" parent="." unique_id=2087588075] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10.375, 8.5, 27.5) +shape = SubResource("BoxShape3D_lwe1w") + +[node name="@CollisionShape3D@167" type="CollisionShape3D" parent="." unique_id=137815321] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10.375, 8.5, 27.5) +shape = SubResource("BoxShape3D_8dh5e") + +[node name="@CollisionShape3D@168" type="CollisionShape3D" parent="." unique_id=813640100] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 9.75, 27.5) +shape = SubResource("BoxShape3D_fmsj5") + +[node name="@CollisionShape3D@169" type="CollisionShape3D" parent="." unique_id=1795985456] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 27.5) +shape = SubResource("BoxShape3D_8qsh8") diff --git a/Game/scenes/arena_01_elevated.tscn b/Game/scenes/arena_01_elevated.tscn index 7780a84c..201c4230 100644 --- a/Game/scenes/arena_01_elevated.tscn +++ b/Game/scenes/arena_01_elevated.tscn @@ -8,13 +8,13 @@ goal_mode = 1 [node name="GoalTeam0" parent="." index="5"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6.0, 18) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 9.0, 27) [node name="GoalTeam1" parent="." index="6"] -transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 6.0, -18) +transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 9.0, -27) [node name="Spawn1" parent="SpawnsTeam0" index="0"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.0, 2.8, 13.5) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.0, 2.8, 20.25) [node name="Spawn1" parent="SpawnsTeam1" index="0"] -transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, -4.0, 2.8, -13.5) +transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, -6.0, 2.8, -20.25) diff --git a/Game/scenes/arena_02.tscn b/Game/scenes/arena_02.tscn index 481693e4..f0312e12 100644 --- a/Game/scenes/arena_02.tscn +++ b/Game/scenes/arena_02.tscn @@ -32,7 +32,7 @@ gradient = SubResource("Gradient_dust") [sub_resource type="ParticleProcessMaterial" id="ParticleProcessMaterial_dust"] emission_shape = 3 -emission_box_extents = Vector3(26, 11, 28) +emission_box_extents = Vector3(39, 16.5, 42) direction = Vector3(0, 1, 0) spread = 180.0 initial_velocity_min = 0.1 @@ -68,48 +68,48 @@ light_color = Color(0.55, 0.35, 0.65, 1) light_energy = 0.45 [node name="NebulaDust" type="GPUParticles3D" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 5, 0) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 7.5, 0) amount = 500 lifetime = 22.0 preprocess = 8.0 randomness = 1.0 -visibility_aabb = AABB(-30, -14, -32, 60, 28, 64) +visibility_aabb = AABB(-45, -21, -48, 90, 42, 96) process_material = SubResource("ParticleProcessMaterial_dust") draw_pass_1 = SubResource("QuadMesh_dust") [node name="Decoration" type="Node3D" parent="."] [node name="NebulaStationA" parent="Decoration" instance=ExtResource("8_station")] -transform = Transform3D(1.8, 0, 0, 0, 1.8, 0, 0, 0, 1.8, 28, 5, -6) +transform = Transform3D(1.8, 0, 0, 0, 1.8, 0, 0, 0, 1.8, 42, 7.5, -9) rotation = Vector3(0, -0.436332, 0) [node name="NebulaDebrisA" parent="Decoration" instance=ExtResource("9_debris")] -transform = Transform3D(1.2, 0, 0, 0, 1.2, 0, 0, 0, 1.2, -22, 9, 11) +transform = Transform3D(1.2, 0, 0, 0, 1.2, 0, 0, 0, 1.2, -33, 13.5, 16.5) rotation = Vector3(0.261799, 0.698132, 0.087266) [node name="NebulaDebrisB" parent="Decoration" instance=ExtResource("9_debris")] -transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 34, 3, 15) +transform = Transform3D(0.8, 0, 0, 0, 0.8, 0, 0, 0, 0.8, 51, 4.5, 22.5) rotation = Vector3(-0.174533, 1.919862, 0.349066) [node name="NebulaDebrisC" parent="Decoration" instance=ExtResource("9_debris")] -transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, -30, 11, -21) +transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, -45, 16.5, -31.5) rotation = Vector3(0.087266, -1.047198, -0.261799) [node name="NebulaStationB" parent="Decoration" instance=ExtResource("8_station")] -transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, -32, 7, 9) +transform = Transform3D(1.5, 0, 0, 0, 1.5, 0, 0, 0, 1.5, -48, 10.5, 13.5) rotation = Vector3(0.05, 1.134464, -0.02) [node name="NebulaStationC" parent="Decoration" instance=ExtResource("8_station")] -transform = Transform3D(1.3, 0, 0, 0, 1.3, 0, 0, 0, 1.3, 9, 8, 42) +transform = Transform3D(1.3, 0, 0, 0, 1.3, 0, 0, 0, 1.3, 13.5, 12, 63) rotation = Vector3(-0.03, 2.740167, 0.06) [node name="NebulaDebrisD" parent="Decoration" instance=ExtResource("9_debris")] -transform = Transform3D(1.0, 0, 0, 0, 1.0, 0, 0, 0, 1.0, 13, 15, -35) +transform = Transform3D(1.0, 0, 0, 0, 1.0, 0, 0, 0, 1.0, 19.5, 22.5, -52.5) rotation = Vector3(0.4, 1.3, -0.2) [node name="NebulaDebrisE" parent="Decoration" instance=ExtResource("9_debris")] -transform = Transform3D(0.9, 0, 0, 0, 0.9, 0, 0, 0, 0.9, -11, 4, 33) +transform = Transform3D(0.9, 0, 0, 0, 0.9, 0, 0, 0, 0.9, -16.5, 6, 49.5) rotation = Vector3(-0.3, -0.9, 0.15) [node name="NebulaPlanet" parent="Decoration" instance=ExtResource("11_planet")] -transform = Transform3D(30, 0, 0, 0, 30, 0, 0, 0, 30, -55, 38, -80) +transform = Transform3D(30, 0, 0, 0, 30, 0, 0, 0, 30, -82.5, 57, -120) diff --git a/Game/scenes/arena_02_elevated.tscn b/Game/scenes/arena_02_elevated.tscn index f7391f23..2d866f6b 100644 --- a/Game/scenes/arena_02_elevated.tscn +++ b/Game/scenes/arena_02_elevated.tscn @@ -8,13 +8,13 @@ goal_mode = 1 [node name="GoalTeam0" parent="." index="5"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6.0, 18) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 9.0, 27) [node name="GoalTeam1" parent="." index="6"] -transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 6.0, -18) +transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 9.0, -27) [node name="Spawn1" parent="SpawnsTeam0" index="0"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.0, 2.8, 13.5) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.0, 2.8, 20.25) [node name="Spawn1" parent="SpawnsTeam1" index="0"] -transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, -4.0, 2.8, -13.5) +transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, -6.0, 2.8, -20.25) diff --git a/Game/scenes/arena_03_elevated.tscn b/Game/scenes/arena_03_elevated.tscn index 5a5e949b..a434a666 100644 --- a/Game/scenes/arena_03_elevated.tscn +++ b/Game/scenes/arena_03_elevated.tscn @@ -8,13 +8,13 @@ goal_mode = 1 [node name="GoalTeam0" parent="." index="5"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6.0, 18) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 9.0, 27) [node name="GoalTeam1" parent="." index="6"] -transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 6.0, -18) +transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 9.0, -27) [node name="Spawn1" parent="SpawnsTeam0" index="0"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.0, 2.8, 13.5) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.0, 2.8, 20.25) [node name="Spawn1" parent="SpawnsTeam1" index="0"] -transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, -4.0, 2.8, -13.5) +transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, -6.0, 2.8, -20.25) diff --git a/Game/scenes/arena_base.tscn b/Game/scenes/arena_base.tscn index 2aaedba0..c9a99b5e 100644 --- a/Game/scenes/arena_base.tscn +++ b/Game/scenes/arena_base.tscn @@ -53,16 +53,16 @@ shadow_enabled = false environment = SubResource("Environment_base") [node name="ReflectionProbe" type="ReflectionProbe" parent="."] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 6, 0) -size = Vector3(26, 14, 40) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 9, 0) +size = Vector3(38, 20, 58) box_projection = true update_mode = 0 [node name="GoalTeam0" parent="." instance=ExtResource("6_p57ef")] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.79, 18) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.79, 27) [node name="GoalTeam1" parent="." instance=ExtResource("6_p57ef")] -transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0.79, -18) +transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 0.79, -27) team = 1 [node name="BallSpawn" type="Marker3D" parent="."] @@ -71,9 +71,33 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0) [node name="SpawnsTeam0" type="Node3D" parent="."] [node name="Spawn1" type="Marker3D" parent="SpawnsTeam0"] -transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.8, 13.5) +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -9, 2.8, 20.25) + +[node name="Spawn2" type="Marker3D" parent="SpawnsTeam0"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -4.5, 2.8, 20.25) + +[node name="Spawn3" type="Marker3D" parent="SpawnsTeam0"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2.8, 20.25) + +[node name="Spawn4" type="Marker3D" parent="SpawnsTeam0"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4.5, 2.8, 20.25) + +[node name="Spawn5" type="Marker3D" parent="SpawnsTeam0"] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 9, 2.8, 20.25) [node name="SpawnsTeam1" type="Node3D" parent="."] [node name="Spawn1" type="Marker3D" parent="SpawnsTeam1"] -transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 2.8, -13.5) +transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, -9, 2.8, -20.25) + +[node name="Spawn2" type="Marker3D" parent="SpawnsTeam1"] +transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, -4.5, 2.8, -20.25) + +[node name="Spawn3" type="Marker3D" parent="SpawnsTeam1"] +transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 0, 2.8, -20.25) + +[node name="Spawn4" type="Marker3D" parent="SpawnsTeam1"] +transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 4.5, 2.8, -20.25) + +[node name="Spawn5" type="Marker3D" parent="SpawnsTeam1"] +transform = Transform3D(-1, 0, 0, 0, 1, 0, 0, 0, -1, 9, 2.8, -20.25) diff --git a/Game/scripts/arena_boundary.gd b/Game/scripts/arena_boundary.gd index 10f2a104..9e8176b9 100644 --- a/Game/scripts/arena_boundary.gd +++ b/Game/scripts/arena_boundary.gd @@ -5,9 +5,9 @@ extends StaticBody3D # instances objects/arena_boundary.tscn so all arenas share one size; code # that needs field dimensions derives them from these constants rather than # restating numbers. -const INNER_HALF_X := 12.0 -const INNER_HALF_Z := 18.0 -const INNER_HEIGHT := 12.0 +const INNER_HALF_X := 18.0 +const INNER_HALF_Z := 27.0 +const INNER_HEIGHT := 18.0 # Goal-centre distance from arena centre. Flush with the end walls (see # arena_01.tscn's goal transforms), so there is no floating gap between the # goal and the wall for a ball to ramp across before reaching the sensor. @@ -45,14 +45,30 @@ const BASE_RADIUS := 2.0 # The end-wall fillets stop short of the goal mouth so floor-level shots # roll flat into the goal sensor (3.5 m wide) instead of ramping over it. const GOAL_MOUTH_HALF_WIDTH := 2.5 -# The aperture the visual shell leaves for the goal itself, and the opaque -# bulkhead surrounding it. Mirrors objects/goal.tscn's 3.5 x 1.5 sensor with a -# little clearance, so no sliver of panel shows through the goal frame. The -# surround has to be opaque hull: backed by the translucent field panel +# The real navigable hole in the wall's collision (see +# _build_end_wall_colliders) — must track objects/goal.tscn's BoxShape3D +# (3.5 x 1.5, i.e. half-width 1.75, height 1.5) exactly. Anything wider than +# the scoring sensor lets the ball cross the wall opening without entering +# the sensor and failing to score; this is collision-authoritative, do not +# widen it for cosmetic reasons — see GOAL_VISUAL_APERTURE_* below for that. +# Half-width matches the sensor exactly; height is a few cm off in FLOOR mode +# (the sensor is vertically offset by the goal node's own y=0.79 placement, +# while the hole itself is measured from the floor at y=0 — see +# _goal_surround_bounds), which is immaterial at the ball's radius but means +# "exact match" isn't literally true. +const GOAL_APERTURE_HALF_WIDTH := 1.75 +const GOAL_APERTURE_HEIGHT := 1.5 +# The (larger) aperture the visual shell/opaque bulkhead actually cuts — +# deliberately wider than the true collision hole above, so goal.gd's bezel/ +# rim frame (built starting exactly at the sensor's own half-extents) has +# clearance to be seen against the hull's cut edge instead of sitting flush +# with it. Cosmetic only: collision still uses the exact GOAL_APERTURE_* +# pair above, so this can't reopen the "ball crosses without scoring" bug. +const GOAL_VISUAL_APERTURE_HALF_WIDTH := GOAL_APERTURE_HALF_WIDTH + 0.1 +const GOAL_VISUAL_APERTURE_HEIGHT := GOAL_APERTURE_HEIGHT + 0.15 +# The surround has to be opaque hull: backed by the translucent field panel # instead, the goal's recess and net showed straight through the wall beside # the mouth and read as a second, duplicated net. -const GOAL_APERTURE_HALF_WIDTH := 1.85 -const GOAL_APERTURE_HEIGHT := 1.65 # ELEVATED only — in FLOOR mode the surround spans the deck to the fillet # tangent, so its height is BASE_RADIUS and needs no constant. const GOAL_SURROUND_HALF_HEIGHT := 1.6 @@ -102,12 +118,28 @@ var _field_material: ShaderMaterial # pattern so the viewport lookup isn't repeated every frame. var _camera: Camera3D +# Group every generated collider is tagged with. A CollisionShape3D only +# registers a shape with a CollisionObject3D that is its DIRECT parent — an +# earlier version of this code grouped generated colliders under an +# intermediate Node3D container for identification, which silently made +# every one of them inert (no shape ever reached the StaticBody3D). They must +# be direct children of `self`; the group tag is how bake_colliders() +# identifies (and clears, for idempotent re-baking) its own prior output +# without an intermediate node. +const GENERATED_COLLIDER_GROUP := "_arena_generated_collider" + func _ready() -> void: add_to_group("arena_boundary") - _build_corner_colliders() - _build_fillet_colliders(BASE_FILLET) - _build_fillet_colliders(CEILING_FILLET) + # goal_mode affects the generated geometry itself (see _fillet_runs' + # `split` and _build_end_wall_colliders' hole placement), but it's an + # instance-level override each arena_0X_elevated.tscn applies to the + # shared arena_boundary.tscn's Boundary node — so a bake done in FLOOR + # mode (the shared .tscn's default) must not be silently reused by an + # ELEVATED instance. Only skip regenerating when the existing bake was + # actually made in the current goal_mode. + if get_meta("baked_goal_mode", -1) != goal_mode: + bake_colliders() # Visuals are pure decoration and training spawns many headless instances # that never render one, so skip the mesh build there entirely. Collision # is unaffected either way. @@ -117,6 +149,29 @@ func _ready() -> void: _build_visual_shell() +# Builds every generated collider (corner curves, base/ceiling fillets, end- +# wall goal holes) as direct children of this ArenaBoundary (required for +# them to register with the StaticBody3D at all) and records the goal_mode +# they were built for. Idempotent: clears any of its own prior output first +# (identified via GENERATED_COLLIDER_GROUP), so calling this repeatedly — a +# stale bake whose goal_mode doesn't match (see _ready), or re-running +# tools/bake_arena_boundary.gd on an already-baked scene — replaces rather +# than duplicates. _ready() calls this itself for any scene that hasn't been +# baked yet, so behaviour is identical either way; baking only skips redoing +# this work on every subsequent load, which matters most for the many +# parallel headless training envs that would otherwise pay it on every +# episode reset. +func bake_colliders() -> void: + for child in get_children(): + if child.is_in_group(GENERATED_COLLIDER_GROUP): + child.free() + _build_corner_colliders() + _build_fillet_colliders(BASE_FILLET) + _build_fillet_colliders(CEILING_FILLET) + _build_end_wall_colliders() + set_meta("baked_goal_mode", goal_mode) + + # Wall+ceiling-only proximity force field ("artificial gravity" grav-plating, # weaker than the floor's plain default gravity, which this deliberately # leaves untouched). Ship and Ball each call this with their own @@ -248,8 +303,10 @@ func _fillet_runs(rise: float) -> Array[Dictionary]: # --- collision --------------------------------------------------------------- -# These build the tangent-box collider rings only. Their geometry is what -# trained policies in Game/bots/ were fitted against, so it must not change. +# Builds the tangent-box collider rings and each end wall's real goal hole. +# Geometry is free to evolve now that bots are retrained from scratch — just +# re-run tools/bake_arena_boundary.gd afterward so the baked scene (see +# bake_colliders) reflects the change. # Vertical quarter-cylinder curves across the four wall-wall corners. @@ -332,9 +389,65 @@ func _add_curve_collider( box.size = Vector3(SURFACE_THICKNESS, run_length, face_width) collision.shape = box collision.transform = Transform3D(segment_basis, origin) + collision.add_to_group(GENERATED_COLLIDER_GROUP) add_child(collision) +# A plain axis-aligned box collider centred on `center`. Used for the flat +# end-wall panels below, which aren't tangent to a curve so don't need +# _add_curve_collider's outward/along framing. +func _add_box_collider(center: Vector3, size: Vector3) -> void: + var collision := CollisionShape3D.new() + var box := BoxShape3D.new() + box.size = size + collision.shape = box + collision.transform = Transform3D(Basis.IDENTITY, center) + collision.add_to_group(GENERATED_COLLIDER_GROUP) + add_child(collision) + + +# One rectangular end-wall panel spanning x in [x0, x1] and y in [y0, y1] at +# the given wall_z, SURFACE_THICKNESS deep. No-ops for a degenerate (zero or +# negative area) range, which happens whenever the goal hole's aperture +# extends to the wall's own boundary (e.g. FLOOR mode's aperture bottom sits +# at the wall's own y0). +func _add_end_wall_panel(wall_z: float, x0: float, x1: float, y0: float, y1: float) -> void: + if x1 <= x0 or y1 <= y0: + return + _add_box_collider( + Vector3((x0 + x1) / 2.0, (y0 + y1) / 2.0, wall_z), + Vector3(x1 - x0, y1 - y0, SURFACE_THICKNESS) + ) + + +# Real navigable hole in each end wall, sized to the goal's actual scoring +# aperture (GOAL_APERTURE_HALF_WIDTH/HEIGHT, which now track +# objects/goal.tscn's sensor — see that constant's comment) instead of the +# previous single solid box that let the ball trigger the goal sensor but +# never actually fly through the wall. _goal_surround_bounds() already knows +# the aperture's vertical placement for both FLOOR (floor-level) and ELEVATED +# (raised) goal modes, so this works unmodified for either. Left/right panels +# carry the full wall height; top/bottom panels close off the remainder of +# the aperture band above/below the hole. In FLOOR mode the bottom panel +# (y -1..0) is a harmless duplicate — FloorShape already occupies that +# region — rather than a true no-op: _add_end_wall_panel still emits it, +# since aperture_bottom (0) is above y_bottom (-1). Left in rather than +# special-cased since it costs one extra collider and can't create a gap. +func _build_end_wall_colliders() -> void: + var half_width := INNER_HALF_X + 1.0 + var y_bottom := -1.0 + var y_top := INNER_HEIGHT + var bounds := _goal_surround_bounds(GOAL_APERTURE_HEIGHT) + var aperture_bottom: float = bounds.z + var aperture_top: float = bounds.w + for sz in [-1.0, 1.0]: + var wall_z: float = sz * (INNER_HALF_Z + 0.5) + _add_end_wall_panel(wall_z, -half_width, -GOAL_APERTURE_HALF_WIDTH, y_bottom, y_top) + _add_end_wall_panel(wall_z, GOAL_APERTURE_HALF_WIDTH, half_width, y_bottom, y_top) + _add_end_wall_panel(wall_z, -GOAL_APERTURE_HALF_WIDTH, GOAL_APERTURE_HALF_WIDTH, aperture_top, y_top) + _add_end_wall_panel(wall_z, -GOAL_APERTURE_HALF_WIDTH, GOAL_APERTURE_HALF_WIDTH, y_bottom, aperture_bottom) + + # --- visual shell ------------------------------------------------------------ # One mesh covering the inner surface of the play volume exactly once. Every # piece is cut to meet its neighbours edge-on, so no two translucent surfaces @@ -444,21 +557,27 @@ func _add_goal_aprons(st: SurfaceTool) -> void: # panel, the recess and net behind it showed through the wall and the net read # as duplicated either side of the frame. func _add_goal_surrounds(st: SurfaceTool) -> void: - var bounds := _goal_surround_bounds() + var bounds := _goal_surround_bounds(GOAL_VISUAL_APERTURE_HEIGHT) for side in [-1.0, 1.0]: _add_aperture_panel(st, Vector3(0, 0, side * INNER_HALF_Z), Vector3(-side, 0, 0), Vector3.UP, Vector3(0, 0, -side), GOAL_MOUTH_HALF_WIDTH, bounds.x, bounds.y, - GOAL_APERTURE_HALF_WIDTH, bounds.z, bounds.w) + GOAL_VISUAL_APERTURE_HALF_WIDTH, bounds.z, bounds.w) # (surround bottom, surround top, aperture bottom, aperture top) on the end # wall. In FLOOR mode the surround spans deck to fillet tangent with the goal # sitting on the deck; in ELEVATED it is a band centred on the raised goal. -func _goal_surround_bounds() -> Vector4: +# `aperture_height` is the caller's choice of GOAL_APERTURE_HEIGHT (the true, +# collision-matching size — see _build_end_wall_colliders) or +# GOAL_VISUAL_APERTURE_HEIGHT (the cosmetically-widened cut — see +# _add_goal_surrounds); it only affects the returned aperture bottom/top +# (z/w), not the surround bottom/top (x/y), which are independent of it in +# both modes. +func _goal_surround_bounds(aperture_height: float) -> Vector4: if goal_mode == GoalMode.FLOOR: - return Vector4(0.0, BASE_RADIUS, 0.0, GOAL_APERTURE_HEIGHT) - var half := GOAL_APERTURE_HEIGHT / 2.0 + return Vector4(0.0, BASE_RADIUS, 0.0, aperture_height) + var half := aperture_height / 2.0 return Vector4( GOAL_CENTER_Y - GOAL_SURROUND_HALF_HEIGHT, GOAL_CENTER_Y + GOAL_SURROUND_HALF_HEIGHT, @@ -485,7 +604,7 @@ func _add_wall_panels(st: SurfaceTool) -> void: var y0 := BASE_RADIUS var y1 := INNER_HEIGHT - BASE_RADIUS var elevated := goal_mode == GoalMode.ELEVATED - var bounds := _goal_surround_bounds() + var bounds := _goal_surround_bounds(GOAL_VISUAL_APERTURE_HEIGHT) for side in [-1.0, 1.0]: _add_aperture_panel(st, Vector3(side * INNER_HALF_X, 0, 0), Vector3(0, 0, side), Vector3.UP, diff --git a/Game/shaders/nebula_dust.gdshader b/Game/shaders/nebula_dust.gdshader index 912ec271..51569f0d 100644 --- a/Game/shaders/nebula_dust.gdshader +++ b/Game/shaders/nebula_dust.gdshader @@ -11,8 +11,8 @@ uniform float soft_fade_distance : hint_range(0.0, 5.0) = 1.0; // see ArenaBoundary.INNER_HALF_X/INNER_HALF_Z/INNER_HEIGHT. Dust is fully // hidden inside that box and fades in over arena_clear_distance beyond it, // so it reads as drifting around the station rather than through the pitch. -uniform vec3 arena_half_extents = vec3(12.0, 6.0, 18.0); -uniform vec3 arena_centre = vec3(0.0, 6.0, 0.0); +uniform vec3 arena_half_extents = vec3(18.0, 9.0, 27.0); +uniform vec3 arena_centre = vec3(0.0, 9.0, 0.0); uniform float arena_clear_distance : hint_range(0.0, 10.0) = 2.0; varying float v_flicker; diff --git a/Game/tools/bake_arena_boundary.gd b/Game/tools/bake_arena_boundary.gd new file mode 100644 index 00000000..cd12b41d --- /dev/null +++ b/Game/tools/bake_arena_boundary.gd @@ -0,0 +1,47 @@ +extends SceneTree + +# One-off bake: runs ArenaBoundary's collider generation once and commits the +# result into objects/arena_boundary.tscn, so every arena load (and every +# parallel headless training env) skips regenerating ~170 CollisionShape3D +# nodes at runtime — ArenaBoundary._ready() already skips this itself once a +# bake matching the current goal_mode exists (see bake_colliders). +# +# Safe to re-run any time a geometry constant changes (arena size, corner/ +# fillet radii, goal aperture, segment counts, etc.) — bake_colliders() clears +# its own prior output first, so this replaces rather than duplicates: +# godot --headless --path Game --script res://tools/bake_arena_boundary.gd + +const ARENA_BOUNDARY_PATH := "res://objects/arena_boundary.tscn" + + +func _initialize() -> void: + var packed: PackedScene = load(ARENA_BOUNDARY_PATH) + var instance := packed.instantiate() + instance.bake_colliders() + # PackedScene.pack() only serializes nodes whose `owner` is set to the + # scene root — newly created nodes have no owner by default, so without + # this, pack() silently produces a scene with none of the just-built + # colliders in it. + _set_owner_recursive(instance, instance) + + var rebaked := PackedScene.new() + var pack_result := rebaked.pack(instance) + if pack_result != OK: + push_error("bake_arena_boundary: pack() failed with error %d" % pack_result) + quit(1) + return + + var save_result := ResourceSaver.save(rebaked, ARENA_BOUNDARY_PATH) + if save_result != OK: + push_error("bake_arena_boundary: save() failed with error %d" % save_result) + quit(1) + return + + print("bake_arena_boundary: baked colliders into %s" % ARENA_BOUNDARY_PATH) + quit() + + +func _set_owner_recursive(node: Node, scene_root: Node) -> void: + for child in node.get_children(): + child.owner = scene_root + _set_owner_recursive(child, scene_root)