[gd_scene format=3 uid="uid://mapdevtest01"]
[ext_resource type="Script" path="res://scenes/maps/map_dc_level.gd" id="map_dc_level"]
[ext_resource type="PackedScene" uid="uid://teleporter01" path="res://scenes/teleporter/teleporter.tscn" id="teleporter"]
[ext_resource type="Script" path="res://scenes/maps/wall_run_range.gd" id="wall_run_range"]
[sub_resource type="BoxShape3D" id="BoxShape3D_ground"]
size = Vector3(100, 0.2, 100)
[sub_resource type="BoxShape3D" id="BoxShape3D_plat1"]
size = Vector3(8, 0.5, 8)
[sub_resource type="BoxShape3D" id="BoxShape3D_plat2"]
size = Vector3(6, 0.5, 6)
[sub_resource type="BoxShape3D" id="BoxShape3D_plat3"]
size = Vector3(10, 0.5, 5)
[sub_resource type="BoxShape3D" id="BoxShape3D_ramp"]
size = Vector3(4, 0.3, 12)
[sub_resource type="BoxShape3D" id="BoxShape3D_northhub"]
size = Vector3(30, 0.4, 30)
[sub_resource type="BoxShape3D" id="BoxShape3D_northbridge"]
size = Vector3(8, 0.4, 16)
[sub_resource type="BoxShape3D" id="BoxShape3D_wall1"]
size = Vector3(0.5, 4, 6)
[node name="MapDevTest" type="Node3D"]
script = ExtResource("map_dc_level")
level_import = false
[node name="DCLevel" type="DCLevel" parent="." unique_id=1093847261]
[node name="Ground" type="StaticBody3D" parent="." unique_id=1126974908]
collision_layer = 3
[node name="GroundShape" type="CollisionShape3D" parent="Ground" unique_id=1706837898]
shape = SubResource("BoxShape3D_ground")
[node name="GroundMesh" type="CSGBox3D" parent="Ground" unique_id=835176061]
size = Vector3(100, 0.2, 100)
[node name="Platform1" type="StaticBody3D" parent="." unique_id=1679127614]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -10, 3, -5)
collision_layer = 3
[node name="Shape" type="CollisionShape3D" parent="Platform1" unique_id=941703578]
shape = SubResource("BoxShape3D_plat1")
[node name="Mesh" type="CSGBox3D" parent="Platform1" unique_id=1492092330]
size = Vector3(8, 0.5, 8)
[node name="Platform2" type="StaticBody3D" parent="." unique_id=1211920345]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 10, 6, 5)
collision_layer = 3
[node name="Shape" type="CollisionShape3D" parent="Platform2" unique_id=2067688902]
shape = SubResource("BoxShape3D_plat2")
[node name="Mesh" type="CSGBox3D" parent="Platform2" unique_id=1139640422]
size = Vector3(6, 0.5, 6)
[node name="Platform3" type="StaticBody3D" parent="." unique_id=1654660155]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 10, -12)
collision_layer = 3
[node name="Shape" type="CollisionShape3D" parent="Platform3" unique_id=1153654252]
shape = SubResource("BoxShape3D_plat3")
[node name="Mesh" type="CSGBox3D" parent="Platform3" unique_id=68886081]
size = Vector3(10, 0.5, 5)
[node name="Ramp" type="StaticBody3D" parent="." unique_id=597799137]
transform = Transform3D(1, 0, 0, 0, 0.9658855, -0.2589693, 0, 0.2589693, 0.9658855, 0, 1.5, 8)
collision_layer = 3
[node name="Shape" type="CollisionShape3D" parent="Ramp" unique_id=1450397502]
shape = SubResource("BoxShape3D_ramp")
[node name="Mesh" type="CSGBox3D" parent="Ramp" unique_id=686016197]
size = Vector3(4, 0.3, 12)
[node name="Wall1" type="StaticBody3D" parent="." unique_id=365438093]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -8, 2, 10)
collision_layer = 3
[node name="Shape" type="CollisionShape3D" parent="Wall1" unique_id=855375174]
shape = SubResource("BoxShape3D_wall1")
[node name="Mesh" type="CSGBox3D" parent="Wall1" unique_id=105336436]
size = Vector3(0.5, 4, 6)
[node name="SpawnPoint1" type="Marker3D" parent="." unique_id=813633365 groups=["spawn_points"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 1, -5)
[node name="SpawnPoint2" type="Marker3D" parent="." unique_id=253694381 groups=["spawn_points"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 1, -5)
[node name="SpawnPoint3" type="Marker3D" parent="." unique_id=176456132 groups=["spawn_points"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -5, 1, 5)
[node name="SpawnPoint4" type="Marker3D" parent="." unique_id=1811834430 groups=["spawn_points"]]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 5, 1, 5)
[node name="TeleporterToDCTerrain" parent="." unique_id=850486032 instance=ExtResource("teleporter")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 40, 0, 0)
destination = Vector3(0, 20, 0)
target_map = "res://scenes/maps/map_dc_terrain.tscn"
label_text = "DC Terrain"
[node name="TeleporterToDCLevel" parent="." instance=ExtResource("teleporter")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -40, 0, 0)
destination = Vector3(0, 3, 0)
target_map = "res://scenes/maps/map_dc_level.tscn"
label_text = "DC Level"
[node name="TeleporterToDCWorld" parent="." instance=ExtResource("teleporter")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -40)
destination = Vector3(0, 25, 0)
target_map = "res://scenes/maps/map_dc_world.tscn"
label_text = "DC World"
[node name="TeleporterToDCErosion" parent="." instance=ExtResource("teleporter")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 40)
destination = Vector3(0, 5200, 0)
target_map = "res://scenes/maps/map_dc_erosion.tscn"
label_text = "DC Erosion"
; FLAT TESTBED. A diagonal, because the four cardinals at +/-40 are the DC ring
; and the NorthHub faces are taken (its SOUTH face is a known-bad spot -- a pad
; there fires as you walk up NorthBridge). (30,30) is clear ground: Platform2 is
; at (10,6,5), Ramp at (0,1.5,8), Wall1 at (-8,2,10).
;
; destination is the SPAWN, not decoration: change_map() moves every player to it
; AFTER add_child, overriding whatever the map computed. map_flat's surface is at
; y=0, so this matches its own spawn markers at y=2.
;
; Walking through here PERSISTS map_flat as the room's world -- change_map writes
; world:settings:current_map (game.gd:617). That is how a soak room gets pointed
; at the cheap map, with no admin-cli step.
; MEASURED PLACEMENT, not an eyeballed gap. The eight existing teleporters in
; this map sit at (-40,0,0) (-12,.2,-75) (0,0,-40) (0,0,40) (0,.2,-87)
; (12,.2,-75) (30,0,30) (40,0,0), and their closest pair is 16.97 m apart.
; (-30, 0, 30) is 31.6 m from its nearest neighbour — TeleporterToDCLevel and
; TeleporterToDCErosion — so it is clear by a wider margin than the map's own
; tightest existing spacing, and it mirrors TeleporterToFlat across +X.
;
; destination (2600, 5, 0) is map_mountain's arrival: 600 m clear of the
; mountain's declared 4000 m box, ON the slab, facing the whole asset. NOT the
; origin — that graph is a cone with its peak at the centre, so (0,y,0) is two
; kilometres inside the mountain.
[node name="TeleporterToMountain" parent="." instance=ExtResource("teleporter")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, 30)
target_map = "res://scenes/maps/map_mountain.tscn"
label_text = "Mountain"
[node name="TeleporterToFlat" parent="." instance=ExtResource("teleporter")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0, 30)
destination = Vector3(0, 2, 0)
target_map = "res://scenes/maps/map_flat.tscn"
label_text = "Flat Testbed"
[node name="NorthHub" type="StaticBody3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -75)
collision_layer = 3
[node name="Shape" type="CollisionShape3D" parent="NorthHub"]
shape = SubResource("BoxShape3D_northhub")
[node name="Mesh" type="CSGBox3D" parent="NorthHub"]
size = Vector3(30, 0.4, 30)
[node name="NorthBridge" type="StaticBody3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -55)
collision_layer = 3
[node name="Shape" type="CollisionShape3D" parent="NorthBridge"]
shape = SubResource("BoxShape3D_northbridge")
[node name="Mesh" type="CSGBox3D" parent="NorthBridge"]
size = Vector3(8, 0.4, 16)
[node name="HubLabel" type="Label3D" parent="NorthHub"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 8, 0)
billboard = 1
text = "North Hub"
font_size = 64
outline_size = 10
modulate = Color(0.6, 0.85, 1, 1)
[node name="TeleporterToGen" parent="." instance=ExtResource("teleporter")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.2, -87)
destination = Vector3(0, 5, 0)
target_map = "res://scenes/maps/map_gen.tscn"
label_text = "Generated (Quake)"
; NorthHub EAST point. The hub is 30x30 centred at (0,0,-75); TeleporterToGen sits
; 12 out on the north point, so east is (+12, -75) by the same offset.
;
; destination is NOT decoration and NOT the map's business: game.gd change_map()
; moves every player to it AFTER add_child, so it overrides whatever the map's
; own _place_player() computed. It therefore has to BE the spawn --
; SPAWN_XZ (53760, 38400) at SPAWN_SURFACE_Y 165.0 + SPAWN_CLEARANCE 3.0 -- and
; it has to sit inside the baked block, or you arrive on the clamped flat edge.
[node name="TeleporterToHeightmap" parent="." instance=ExtResource("teleporter")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 12, 0.2, -75)
destination = Vector3(53760, 168, 38400)
target_map = "res://scenes/maps/map_heightmap.tscn"
label_text = "Heightmap"
; NorthHub WEST point. NOT the south one: the hub spans z -90..-60 and
; NorthBridge meets it at -63, so a pad there fires as you walk up the bridge.
; The displaced-mesh map above is the same field with no erosion and no voxels;
; this is the same field through dc-terrain WITH the erosion filter, so the two
; sit side by side and the difference between them is the thing being judged.
[node name="TeleporterToDCDiffusion" parent="." instance=ExtResource("teleporter")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12, 0.2, -75)
destination = Vector3(53760, -612, 38400)
target_map = "res://scenes/maps/map_dc_diffusion.tscn"
label_text = "DC Diffusion"
; MEASURED PLACEMENT. (-30, 0, -30) mirrors TeleporterToMountain across X and is
; 31.6 m from its nearest pads (-40,0,0) and (0,0,-40) — clear of gate_map_wiring's
; 6 m MIN_SEPARATION by the same margin the Mountain pad has.
; No destination: lands on map_geiss_world's own SpawnPoint via change_map — the Geiss
; field draped on random-height terraces with wall caves (2026-10-06; was map_geiss, the
; Geiss field alone). That map moves SpawnPoint to the real top surface over (0, 16) and
; its TeleporterToHome to (6, 16), so the arrival is 6 m clear of the home pad's 1 m
; hitbox and does not bounce straight back.
[node name="TeleporterToGeiss" parent="." instance=ExtResource("teleporter")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0, -30)
target_map = "res://scenes/maps/map_geiss_world.tscn"
label_text = "Geiss"
[node name="WallRunRange" type="Node3D" parent="."]
script = ExtResource("wall_run_range")