[gd_scene load_steps=6 format=3 uid="uid://mapflat01"]
[ext_resource type="Script" path="res://scenes/maps/map_flat.gd" id="1"]
[ext_resource type="PackedScene" uid="uid://teleporter01" path="res://scenes/teleporter/teleporter.tscn" id="teleporter"]
[sub_resource type="PlaneMesh" id="PlaneMesh_surface"]
size = Vector2(4096, 4096)
[sub_resource type="BoxShape3D" id="BoxShape3D_slab"]
size = Vector3(4096, 2, 4096)
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_surface"]
albedo_color = Color(0.32, 0.34, 0.36, 1)
roughness = 0.9
[node name="MapFlat" type="Node3D"]
script = ExtResource("1")
level_import = false
; collision_layer = 3 matches every other ground in the project (map_test.tscn):
; bit 1 world + bit 2 grapple. map_core ORs in bit 2 regardless; setting it here
; keeps the scene honest about what it is rather than relying on that.
; ⛔ THIS MAP MUST NOT OWN A WorldEnvironment, AND THAT IS NOT A STYLE CHOICE.
;
; game.gd:637 DETACHES game.gd's Sky3D from the tree the moment a map has its
; own WorldEnvironment. sky_debug_panel is handed that node ONCE (game.gd:291)
; and never re-acquires it, so the Atmosphere sliders then drive a detached node.
; Measured, from a real session on this map:
;
; _on_slider_changed (sky_debug_panel.gd:638)
; -> @current_time_setter (Sky3D.gd:136)
; -> _update_celestial_coords (TimeOfDay.gd:412)
; -> update_moon_coords (SkyDome.gd:497)
; -> get_global_transform() -> ERROR: Condition "!is_inside_tree()" is true
;
; and on leaving: "[Game] Re-attached game.gd Sky3D". Two attempts at putting a
; sky in this map both produced exactly that, on this map only.
;
; The opening time is seeded as map-scoped STATE instead -- see map_flat.gd.
[node name="Ground" type="StaticBody3D" parent="."]
collision_layer = 3
[node name="Collision" type="CollisionShape3D" parent="Ground"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
shape = SubResource("BoxShape3D_slab")
[node name="Surface" type="MeshInstance3D" parent="Ground"]
mesh = SubResource("PlaneMesh_surface")
surface_material_override/0 = SubResource("StandardMaterial3D_surface")
; Spread far enough apart that two peers spawn visibly separated, and high enough
; that a spawn never starts inside the slab.
; RETURN PAD. Placed 10 m out, NOT at the arrival point: TeleporterToFlat in
; map_test lands the player at (0,2,0) here, and a return pad sitting on that spot
; would re-fire the instant they arrive and bounce them straight back.
;
; destination (0,5,0) matches map_dc_terrain's TeleporterToHome and is clear of
; map_test's own TeleporterToFlat at (30,0,30) -- landing on that would be the
; same loop in the other direction.
[node name="TeleporterToHome" parent="." instance=ExtResource("teleporter")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 0, 0)
destination = Vector3(0, 5, 0)
target_map = "res://scenes/maps/map_test.tscn"
label_text = "Return Home"
[node name="SpawnPoint1" type="Marker3D" parent="." groups=["spawn_points"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 0)
[node name="SpawnPoint2" type="Marker3D" parent="." groups=["spawn_points"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 20, 2, 0)
[node name="SpawnPoint3" type="Marker3D" parent="." groups=["spawn_points"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 2, 20)
[node name="SpawnPoint4" type="Marker3D" parent="." groups=["spawn_points"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 2, -20)
[node name="DCLevel" type="DCLevel" parent="."]