[gd_scene load_steps=10 format=3] ; ============================================================================= ; test_range.tscn — Greybox Test Map ; ============================================================================= ; A simple open-area test map for validating movement, shooting, and networking. ; ; Layout: ; - 80×80 open area with flat grey floor ; - Low platform (center, 1 unit high, gold) ; - Medium platform (east, 2 units high, gold) ; - High platform (north-west, 3 units high, red) ; - Ramp from ground to low platform (yellow) ; - Enclosure/room (east) with doorway for indoor testing (blue-grey walls) ; - Spawn point (Marker3D) with group 'spawn_points' ; - DirectionalLight3D + WorldEnvironment ; ; Total geometry: ~132 tris (well under 500 budget) ; ============================================================================= [sub_resource type="Environment" id="1"] background_mode = 0 tonemap_mode = 0 glow_enabled = false ambient_light_color = Color(0.25, 0.25, 0.3, 1.0) ambient_light_energy = 0.4 ambient_light_sky_contribution = 0.0 [sub_resource type="StandardMaterial3D" id="2"] albedo_color = Color(0.35, 0.35, 0.35, 1.0) resource_name = "grey_floor" [sub_resource type="StandardMaterial3D" id="3"] albedo_color = Color(0.8, 0.6, 0.2, 1.0) resource_name = "gold_platform" [sub_resource type="StandardMaterial3D" id="4"] albedo_color = Color(0.5, 0.5, 0.6, 1.0) resource_name = "bluegrey_wall" [sub_resource type="StandardMaterial3D" id="5"] albedo_color = Color(0.9, 0.2, 0.2, 1.0) resource_name = "red_high" [sub_resource type="StandardMaterial3D" id="6"] albedo_color = Color(0.3, 0.4, 0.3, 1.0) resource_name = "green_floor" [sub_resource type="StandardMaterial3D" id="7"] albedo_color = Color(0.7, 0.7, 0.3, 1.0) resource_name = "yellow_ramp" ; === Root Node === [node name="TestRange" type="Node3D"] ; === Lighting === [node name="WorldEnvironment" type="WorldEnvironment" parent="."] environment = SubResource("1") [node name="SunLight" type="DirectionalLight3D" parent="."] transform = Transform3D(0.866, 0, -0.5, -0.354, 0.707, -0.612, 0.354, 0.707, 0.612, 0, 8, 0) light_energy = 1.5 light_indirect_energy = 0.8 light_color = Color(1.0, 0.95, 0.9, 1.0) shadow_enabled = true directional_shadow_max_distance = 60.0 directional_shadow_split_1 = 0.1 directional_shadow_split_2 = 0.3 directional_shadow_split_3 = 0.6 directional_shadow_blend_splits = true ; === Spawn Points === [node name="SpawnPoint" type="Marker3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0.5, 0) groups = ["spawn_points"] ; === CT Spawn Points (Counter-Terrorist) === [node name="CTSpawn_01" type="Marker3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0.5, -10) groups = ["spawn_points_ct"] [node name="CTSpawn_02" type="Marker3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -25, 0.5, -15) groups = ["spawn_points_ct"] ; === T Spawn Points (Terrorist) === [node name="TSpawn_01" type="Marker3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 25, 0.5, 25) groups = ["spawn_points_t"] [node name="TSpawn_02" type="Marker3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0.5, 20) groups = ["spawn_points_t"] ; ============================================================================= ; Bomb Sites ; ============================================================================= ; BombsiteA — south-west area, 8×4m zone ; BombsiteB — north-east area, 8×4m zone ; Each has a CollisionShape3D (BoxShape3D) for overlap detection ; and a Marker3D child named "PlantPosition" marking the plant location. ; --- Bombsite A --- [sub_resource type="BoxShape3D" id="8"] size = Vector3(8, 4, 4) [node name="BombsiteA" type="Area3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 1.0, -5) collision_layer = 0 collision_mask = 0 groups = ["bomb_sites"] [node name="CollisionShape3D" type="CollisionShape3D" parent="BombsiteA"] shape = SubResource("8") [node name="PlantPosition" type="Marker3D" parent="BombsiteA"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2, 0, -1) ; --- Bombsite B --- [sub_resource type="BoxShape3D" id="9"] size = Vector3(8, 4, 4) [node name="BombsiteB" type="Area3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15, 1.0, 20) collision_layer = 0 collision_mask = 0 groups = ["bomb_sites"] [node name="PlantPosition" type="Marker3D" parent="BombsiteB"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 2) [node name="CollisionShape3D" type="CollisionShape3D" parent="BombsiteB"] shape = SubResource("9") ; === Open Area Floor (80×80) === [node name="Floor" type="CSGBox3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.25, 0) size = Vector3(80, 0.5, 80) material = SubResource("2") use_collision = true ; === Low Platform (center, 1 unit high) === ; 8×8 platform, top at y=2, bottom at y=0, centered at origin [node name="LowPlatform" type="CSGBox3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1.0, 0) size = Vector3(8, 2, 8) material = SubResource("3") use_collision = true ; === Medium Platform (east, 2 units high) === ; 6×6 platform, top at y=3, bottom at y=1 — jump-up from low platform height [node name="MediumPlatform" type="CSGBox3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15, 2.0, 10) size = Vector3(6, 2, 6) material = SubResource("3") use_collision = true ; === High Platform (north-west, 3 units high) === ; 3×3 small platform, top at y=4 — requires sprint-jump to reach [node name="HighPlatform" type="CSGBox3D" parent="."] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -20, 3.0, -15) size = Vector3(3, 2, 3) material = SubResource("5") use_collision = true ; === Ramp (south of center, leads ground → low platform top) === ; Tilted ~20° around X axis, 6 units long along Z. ; South end near ground, north end meets low platform top (y=2). [node name="Ramp" type="CSGBox3D" parent="."] transform = Transform3D(1, 0, 0, 0, 0.940, -0.342, 0, 0.342, 0.940, 0, 1.0, 5) size = Vector3(6, 0.2, 6) material = SubResource("7") use_collision = true ; ============================================================================= ; Enclosure — Indoor Testing Room ; ============================================================================= ; 12×12 interior room, 4 units tall, with a 2-unit doorway on the south face. ; Centered at (30, 0, 30). [node name="Enclosure" type="Node3D" parent="."] [node name="RoomFloor" type="CSGBox3D" parent="Enclosure"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 0.25, 30) size = Vector3(12, 0.5, 12) material = SubResource("6") use_collision = true ; North wall (z = 24) [node name="Wall_N" type="CSGBox3D" parent="Enclosure"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 30, 2.0, 24.25) size = Vector3(12, 4, 0.5) material = SubResource("4") use_collision = true ; South wall left segment (doorway gap from x=29 to x=31) [node name="Wall_S_Left" type="CSGBox3D" parent="Enclosure"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 26.5, 2.0, 35.75) size = Vector3(5, 4, 0.5) material = SubResource("4") use_collision = true ; South wall right segment [node name="Wall_S_Right" type="CSGBox3D" parent="Enclosure"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 33.5, 2.0, 35.75) size = Vector3(5, 4, 0.5) material = SubResource("4") use_collision = true ; West wall (x = 24) [node name="Wall_W" type="CSGBox3D" parent="Enclosure"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 24.25, 2.0, 30) size = Vector3(0.5, 4, 12) material = SubResource("4") use_collision = true ; East wall (x = 36) [node name="Wall_E" type="CSGBox3D" parent="Enclosure"] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 35.75, 2.0, 30) size = Vector3(0.5, 4, 12) material = SubResource("4") use_collision = true