NEON-29: Widen TerracePlatformA approach treads past capsule width.
Tread run was 0.45 m vs 0.8 m capsule diameter, causing straddle stuck on stairs and blocked motion toward edges when exiting. Use 1.0 m depth (NS/WE boxes), recenter PAS_* transforms flush to the lip. Tighten NavigationAgent path/target desired distance 0.35 to 0.22.pull/41/head
parent
3a7658f55f
commit
44984780d4
|
|
@ -33,7 +33,7 @@ Elevated walkables use **distinct albedo tints** in `scenes/main.tscn` so screen
|
||||||
| `ObstacleB` | `occluder` | Default gray | 3 × 3 | (−10, 5) | Second occluder (wider angle from spawn) |
|
| `ObstacleB` | `occluder` | Default gray | 3 × 3 | (−10, 5) | Second occluder (wider angle from spawn) |
|
||||||
| `ObstacleC` | `occluder` | Default gray | 2 × 4 | (5, −12) | Tall occluder, south quadrant |
|
| `ObstacleC` | `occluder` | Default gray | 2 × 4 | (5, −12) | Tall occluder, south quadrant |
|
||||||
| `ObstacleD` | `occluder` | Default gray | 3 × 2 | (−8, −16) | Far-south occluder |
|
| `ObstacleD` | `occluder` | Default gray | 3 × 2 | (−8, −16) | Far-south occluder |
|
||||||
| `TerracePlatformA` | `walkable` | **Teal** | 10 × 10, h=0.3 m | (13, −14) | Large SE pad; **three darker-teal approach treads per cardinal** (`TerracePlatformA_Approach` / `PAS_*`) bridge the lip for nav + physics |
|
| `TerracePlatformA` | `walkable` | **Teal** | 10 × 10, h=0.3 m | (13, −14) | Large SE pad; **three darker-teal approach treads per cardinal** (`TerracePlatformA_Approach` / `PAS_*`) — **1.0 m run** along the climb axis (~0.104 m rise each), wider than the **0.8 m** capsule diameter so the body is not wider than each tread |
|
||||||
| `TerraceStepB` | `walkable` | **Gold** | 6 × 3, h=0.3 m | (−15, 8.5) | NW approach step; bridges floor → TerracePlatformB |
|
| `TerraceStepB` | `walkable` | **Gold** | 6 × 3, h=0.3 m | (−15, 8.5) | NW approach step; bridges floor → TerracePlatformB |
|
||||||
| `TerracePlatformB` | `walkable` | **Violet** | 6 × 6, h=0.6 m | (−15, 13) | Upper NW terrace; reached via TerraceStepB |
|
| `TerracePlatformB` | `walkable` | **Violet** | 6 × 6, h=0.6 m | (−15, 13) | Upper NW terrace; reached via TerraceStepB |
|
||||||
| `TerracePlatformC` | `walkable` | **Green** | 8 × 8, h=0.3 m | (14, 14) | NE pad; single-step ascent from floor |
|
| `TerracePlatformC` | `walkable` | **Green** | 8 × 8, h=0.3 m | (14, 14) | NE pad; single-step ascent from floor |
|
||||||
|
|
|
||||||
|
|
@ -139,16 +139,16 @@ size = Vector3(8, 0.3, 8)
|
||||||
albedo_color = Color(0.1, 0.48, 0.45, 1)
|
albedo_color = Color(0.1, 0.48, 0.45, 1)
|
||||||
|
|
||||||
[sub_resource type="BoxMesh" id="BoxMesh_pa_stair_ns"]
|
[sub_resource type="BoxMesh" id="BoxMesh_pa_stair_ns"]
|
||||||
size = Vector3(9.2, 0.104, 0.45)
|
size = Vector3(9.2, 0.104, 1.0)
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_pa_stair_ns"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_pa_stair_ns"]
|
||||||
size = Vector3(9.2, 0.104, 0.45)
|
size = Vector3(9.2, 0.104, 1.0)
|
||||||
|
|
||||||
[sub_resource type="BoxMesh" id="BoxMesh_pa_stair_we"]
|
[sub_resource type="BoxMesh" id="BoxMesh_pa_stair_we"]
|
||||||
size = Vector3(0.45, 0.104, 9.2)
|
size = Vector3(1.0, 0.104, 9.2)
|
||||||
|
|
||||||
[sub_resource type="BoxShape3D" id="BoxShape3D_pa_stair_we"]
|
[sub_resource type="BoxShape3D" id="BoxShape3D_pa_stair_we"]
|
||||||
size = Vector3(0.45, 0.104, 9.2)
|
size = Vector3(1.0, 0.104, 9.2)
|
||||||
|
|
||||||
[node name="Main" type="Node3D" unique_id=1358372723]
|
[node name="Main" type="Node3D" unique_id=1358372723]
|
||||||
script = ExtResource("1_main")
|
script = ExtResource("1_main")
|
||||||
|
|
@ -285,7 +285,7 @@ shape = SubResource("BoxShape3D_terrace_a")
|
||||||
|
|
||||||
[node name="PAS_S1" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100001 groups=["walkable"]]
|
[node name="PAS_S1" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100001 groups=["walkable"]]
|
||||||
collision_mask = 3
|
collision_mask = 3
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13, 0.052, -20.125)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13, 0.052, -20.4)
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_S1" unique_id=3100011]
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_S1" unique_id=3100011]
|
||||||
mesh = SubResource("BoxMesh_pa_stair_ns")
|
mesh = SubResource("BoxMesh_pa_stair_ns")
|
||||||
|
|
@ -296,7 +296,7 @@ shape = SubResource("BoxShape3D_pa_stair_ns")
|
||||||
|
|
||||||
[node name="PAS_S2" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100002 groups=["walkable"]]
|
[node name="PAS_S2" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100002 groups=["walkable"]]
|
||||||
collision_mask = 3
|
collision_mask = 3
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13, 0.156, -19.675)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13, 0.156, -19.95)
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_S2" unique_id=3100021]
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_S2" unique_id=3100021]
|
||||||
mesh = SubResource("BoxMesh_pa_stair_ns")
|
mesh = SubResource("BoxMesh_pa_stair_ns")
|
||||||
|
|
@ -307,7 +307,7 @@ shape = SubResource("BoxShape3D_pa_stair_ns")
|
||||||
|
|
||||||
[node name="PAS_S3" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100003 groups=["walkable"]]
|
[node name="PAS_S3" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100003 groups=["walkable"]]
|
||||||
collision_mask = 3
|
collision_mask = 3
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13, 0.26, -19.225)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13, 0.26, -19.5)
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_S3" unique_id=3100031]
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_S3" unique_id=3100031]
|
||||||
mesh = SubResource("BoxMesh_pa_stair_ns")
|
mesh = SubResource("BoxMesh_pa_stair_ns")
|
||||||
|
|
@ -318,7 +318,7 @@ shape = SubResource("BoxShape3D_pa_stair_ns")
|
||||||
|
|
||||||
[node name="PAS_N1" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100004 groups=["walkable"]]
|
[node name="PAS_N1" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100004 groups=["walkable"]]
|
||||||
collision_mask = 3
|
collision_mask = 3
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13, 0.052, -7.875)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13, 0.052, -6.5)
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_N1" unique_id=3100041]
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_N1" unique_id=3100041]
|
||||||
mesh = SubResource("BoxMesh_pa_stair_ns")
|
mesh = SubResource("BoxMesh_pa_stair_ns")
|
||||||
|
|
@ -329,7 +329,7 @@ shape = SubResource("BoxShape3D_pa_stair_ns")
|
||||||
|
|
||||||
[node name="PAS_N2" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100005 groups=["walkable"]]
|
[node name="PAS_N2" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100005 groups=["walkable"]]
|
||||||
collision_mask = 3
|
collision_mask = 3
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13, 0.156, -8.325)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13, 0.156, -7.5)
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_N2" unique_id=3100051]
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_N2" unique_id=3100051]
|
||||||
mesh = SubResource("BoxMesh_pa_stair_ns")
|
mesh = SubResource("BoxMesh_pa_stair_ns")
|
||||||
|
|
@ -340,7 +340,7 @@ shape = SubResource("BoxShape3D_pa_stair_ns")
|
||||||
|
|
||||||
[node name="PAS_N3" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100006 groups=["walkable"]]
|
[node name="PAS_N3" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100006 groups=["walkable"]]
|
||||||
collision_mask = 3
|
collision_mask = 3
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13, 0.26, -8.775)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 13, 0.26, -8.5)
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_N3" unique_id=3100061]
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_N3" unique_id=3100061]
|
||||||
mesh = SubResource("BoxMesh_pa_stair_ns")
|
mesh = SubResource("BoxMesh_pa_stair_ns")
|
||||||
|
|
@ -351,7 +351,7 @@ shape = SubResource("BoxShape3D_pa_stair_ns")
|
||||||
|
|
||||||
[node name="PAS_W1" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100007 groups=["walkable"]]
|
[node name="PAS_W1" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100007 groups=["walkable"]]
|
||||||
collision_mask = 3
|
collision_mask = 3
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.875, 0.052, -14)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6.5, 0.052, -14)
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_W1" unique_id=3100071]
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_W1" unique_id=3100071]
|
||||||
mesh = SubResource("BoxMesh_pa_stair_we")
|
mesh = SubResource("BoxMesh_pa_stair_we")
|
||||||
|
|
@ -362,7 +362,7 @@ shape = SubResource("BoxShape3D_pa_stair_we")
|
||||||
|
|
||||||
[node name="PAS_W2" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100008 groups=["walkable"]]
|
[node name="PAS_W2" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100008 groups=["walkable"]]
|
||||||
collision_mask = 3
|
collision_mask = 3
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.325, 0.156, -14)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.5, 0.156, -14)
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_W2" unique_id=3100081]
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_W2" unique_id=3100081]
|
||||||
mesh = SubResource("BoxMesh_pa_stair_we")
|
mesh = SubResource("BoxMesh_pa_stair_we")
|
||||||
|
|
@ -373,7 +373,7 @@ shape = SubResource("BoxShape3D_pa_stair_we")
|
||||||
|
|
||||||
[node name="PAS_W3" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100009 groups=["walkable"]]
|
[node name="PAS_W3" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100009 groups=["walkable"]]
|
||||||
collision_mask = 3
|
collision_mask = 3
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 7.775, 0.26, -14)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 8.5, 0.26, -14)
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_W3" unique_id=3100091]
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_W3" unique_id=3100091]
|
||||||
mesh = SubResource("BoxMesh_pa_stair_we")
|
mesh = SubResource("BoxMesh_pa_stair_we")
|
||||||
|
|
@ -384,7 +384,7 @@ shape = SubResource("BoxShape3D_pa_stair_we")
|
||||||
|
|
||||||
[node name="PAS_E1" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100010 groups=["walkable"]]
|
[node name="PAS_E1" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100010 groups=["walkable"]]
|
||||||
collision_mask = 3
|
collision_mask = 3
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 19.125, 0.052, -14)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 15.5, 0.052, -14)
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_E1" unique_id=3100101]
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_E1" unique_id=3100101]
|
||||||
mesh = SubResource("BoxMesh_pa_stair_we")
|
mesh = SubResource("BoxMesh_pa_stair_we")
|
||||||
|
|
@ -395,7 +395,7 @@ shape = SubResource("BoxShape3D_pa_stair_we")
|
||||||
|
|
||||||
[node name="PAS_E2" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100013 groups=["walkable"]]
|
[node name="PAS_E2" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100013 groups=["walkable"]]
|
||||||
collision_mask = 3
|
collision_mask = 3
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18.675, 0.156, -14)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 16.5, 0.156, -14)
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_E2" unique_id=3100111]
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_E2" unique_id=3100111]
|
||||||
mesh = SubResource("BoxMesh_pa_stair_we")
|
mesh = SubResource("BoxMesh_pa_stair_we")
|
||||||
|
|
@ -406,7 +406,7 @@ shape = SubResource("BoxShape3D_pa_stair_we")
|
||||||
|
|
||||||
[node name="PAS_E3" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100014 groups=["walkable"]]
|
[node name="PAS_E3" type="StaticBody3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach" unique_id=3100014 groups=["walkable"]]
|
||||||
collision_mask = 3
|
collision_mask = 3
|
||||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 18.225, 0.26, -14)
|
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 17.5, 0.26, -14)
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_E3" unique_id=3100121]
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/NavigationRegion3D/TerracePlatformA_Approach/PAS_E3" unique_id=3100121]
|
||||||
mesh = SubResource("BoxMesh_pa_stair_we")
|
mesh = SubResource("BoxMesh_pa_stair_we")
|
||||||
|
|
@ -480,8 +480,8 @@ script = ExtResource("2_player")
|
||||||
shape = SubResource("CapsuleShape3D_player")
|
shape = SubResource("CapsuleShape3D_player")
|
||||||
|
|
||||||
[node name="NavigationAgent3D" type="NavigationAgent3D" parent="World/Player" unique_id=8880002]
|
[node name="NavigationAgent3D" type="NavigationAgent3D" parent="World/Player" unique_id=8880002]
|
||||||
path_desired_distance = 0.35
|
path_desired_distance = 0.22
|
||||||
target_desired_distance = 0.35
|
target_desired_distance = 0.22
|
||||||
radius = 0.4
|
radius = 0.4
|
||||||
|
|
||||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/Player" unique_id=2027034386]
|
[node name="MeshInstance3D" type="MeshInstance3D" parent="World/Player" unique_id=2027034386]
|
||||||
|
|
|
||||||
|
|
@ -113,7 +113,7 @@ No new automated GDScript tests are added for this story — there is no new GDS
|
||||||
- **Lip stuck (floor→platform / platform→floor):** QA screenshots for this were on **`TerracePlatformA`** (10 × 10 large SE pad, **0.3 m** single step — not the NW **Terrace B** step/platform pair). Step assist required **`vel_h.dot(want) ≤ 0.52`**, so a **head-on** push into the vertical face (dot ≈ 1) **never** triggered the lift. **Removed** that gate. For **platform→floor**, **`floor_block_on_wall = false`** only when the nav goal is **below** the feet **and** **`is_on_wall()`** or a **wall-ish slide normal** exists, so open deck walking stays stable.
|
- **Lip stuck (floor→platform / platform→floor):** QA screenshots for this were on **`TerracePlatformA`** (10 × 10 large SE pad, **0.3 m** single step — not the NW **Terrace B** step/platform pair). Step assist required **`vel_h.dot(want) ≤ 0.52`**, so a **head-on** push into the vertical face (dot ≈ 1) **never** triggered the lift. **Removed** that gate. For **platform→floor**, **`floor_block_on_wall = false`** only when the nav goal is **below** the feet **and** **`is_on_wall()`** or a **wall-ish slide normal** exists, so open deck walking stays stable.
|
||||||
- **Teal pad still stuck (follow-up):** Step assist used **slide normals only**; Jolt often exposes the lip via **`is_on_wall()`** / **`get_wall_normal()`** instead — re-added a **directional** wall check (`wnh.dot(want) < -0.02`). Descend relax now also triggers on **shallow floor normal** (`get_floor_normal().dot(UP) < 0.992`) and slightly wider vertical-ish slide band. **`TerracePlatformA`** root **Y = 0.012 m** breaks **coplanarity** with the main floor without the larger gap that hurt **TerraceStepB** approach.
|
- **Teal pad still stuck (follow-up):** Step assist used **slide normals only**; Jolt often exposes the lip via **`is_on_wall()`** / **`get_wall_normal()`** instead — re-added a **directional** wall check (`wnh.dot(want) < -0.02`). Descend relax now also triggers on **shallow floor normal** (`get_floor_normal().dot(UP) < 0.992`) and slightly wider vertical-ish slide band. **`TerracePlatformA`** root **Y = 0.012 m** breaks **coplanarity** with the main floor without the larger gap that hurt **TerraceStepB** approach.
|
||||||
- **Teal cardinal / tread shake (rollback):** Aggressive tweaks (**0.16** lift, **1**-tick cooldown, **`descending_stall`** toggling **`floor_block_on_wall`**, **seam-based** step-assist clear, **walk-stall nav replan**) caused **oscillation** on the small approach treads. **Reverted** to **`WALK_STEP_ASSIST_DELTA = 0.11`**, **`WALK_STEP_ASSIST_COOLDOWN_TICKS = 8`**, **no** stall replan, **no** `descending_stall` branch, **no** seam-based assist clear — only the original clear (clean floor without wall, or airborne with no slides). **Climb** wallish snap cap applies only when **`goal.y > feet_y + 0.12`** so shallow tread-to-tread motion is not capped to assist snap every frame.
|
- **Teal cardinal / tread shake (rollback):** Aggressive tweaks (**0.16** lift, **1**-tick cooldown, **`descending_stall`** toggling **`floor_block_on_wall`**, **seam-based** step-assist clear, **walk-stall nav replan**) caused **oscillation** on the small approach treads. **Reverted** to **`WALK_STEP_ASSIST_DELTA = 0.11`**, **`WALK_STEP_ASSIST_COOLDOWN_TICKS = 8`**, **no** stall replan, **no** `descending_stall` branch, **no** seam-based assist clear — only the original clear (clean floor without wall, or airborne with no slides). **Climb** wallish snap cap applies only when **`goal.y > feet_y + 0.12`** so shallow tread-to-tread motion is not capped to assist snap every frame.
|
||||||
- **Teal pad — geometry wins:** Script-only mitigations still failed in practice; **`TerracePlatformA_Approach`** adds **twelve** `walkable` **`StaticBody3D`** treads (three per cardinal) with **~0.104 m** rise each, **darker teal** albedo, flush to the platform lip — nav + `CharacterBody3D` use **sloped contact** instead of fighting a **single vertical face**.
|
- **Teal pad — geometry wins:** Script-only mitigations still failed in practice; **`TerracePlatformA_Approach`** adds **twelve** `walkable` **`StaticBody3D`** treads (three per cardinal) with **~0.104 m** rise each, **darker teal** albedo, flush to the platform lip — nav + `CharacterBody3D` use **sloped contact** instead of fighting a **single vertical face**. **Follow-up:** tread **run** was **0.45 m** along the climb axis while the capsule **diameter is 0.8 m** — the body was wider than each tread, causing straddle / stuck motion when **entering** and blocking horizontal progress toward the lip when **exiting**. Treads widened to **1.0 m** run with positions re-centered; **`NavigationAgent3D`** `path_desired_distance` / `target_desired_distance` tightened **0.35 → 0.22** so path corners are not released while still far from the stair entry.
|
||||||
|
|
||||||
## Open questions / risks
|
## Open questions / risks
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue