From 3c3251fa7acb3c8d03195209002ce82ae81b1e74 Mon Sep 17 00:00:00 2001 From: Shawn Date: Wed, 1 Jul 2026 20:15:34 -0400 Subject: [PATCH] =?UTF-8?q?feat:=20add=20t=5Fp1=5Fgreybox=20=E2=80=94=20gr?= =?UTF-8?q?eybox=20test=20map=20scene?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Creates test_range.tscn under client/assets/maps/test_range/ as a simple open-area test map for validating movement, shooting, and networking. Layout: - 80×80 open area with grey floor (CSGBox3D, 12 tris) - Low platform (center, 1 unit high, gold) - Medium platform (east, 2 units high, gold) - High platform (north-west, 3 units high, red) - Ramp (south, tilted ~20°, leads ground to low platform top) - Enclosure/room (east, 12×12 interior, 4-unit walls, south doorway) - SpawnPoint (Marker3D) with group 'spawn_points' - DirectionalLight3D (sun) + WorldEnvironment - All geometry uses Solid-color StandardMaterial3D placeholders - Collision enabled on all CSGBox3D shapes - ~132 tris total (well under 500 budget) --- client/assets/maps/test_range/test_range.tscn | 181 ++++++++++++++++++ 1 file changed, 181 insertions(+) create mode 100644 client/assets/maps/test_range/test_range.tscn diff --git a/client/assets/maps/test_range/test_range.tscn b/client/assets/maps/test_range/test_range.tscn new file mode 100644 index 0000000..b1b62ad --- /dev/null +++ b/client/assets/maps/test_range/test_range.tscn @@ -0,0 +1,181 @@ +[gd_scene load_steps=8 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 Point === + +[node name="SpawnPoint" type="Marker3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -30, 0.5, 0) +groups = ["spawn_points"] + + +; === 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