From db1f4da0687bb97d018f9ddf50467016bb91545e Mon Sep 17 00:00:00 2001 From: VinPropane Date: Sun, 12 Apr 2026 18:18:43 -0400 Subject: [PATCH] NEON-29: Aim walk ledge probes at click when nav column descends Column steering follows path tangents on the violet deck while the authoritative goal sits on the lower floor; velocity-aligned support rays kept hitting deck in the tangent direction and suppressed ledge gravity. Use want_goal_h for probe offsets when vertical routing + column steer + on floor + goal surface below feet. --- client/scripts/player.gd | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/client/scripts/player.gd b/client/scripts/player.gd index c369bfb..adac43c 100644 --- a/client/scripts/player.gd +++ b/client/scripts/player.gd @@ -944,10 +944,23 @@ func _physics_process(delta: float) -> void: else: _set_horizontal_velocity_toward(_auth_walk_goal, want_goal_h) - # Prefer actual horizontal velocity so probes match nav/path steering, not only click bearing. + # Prefer [param velocity] XZ so probes match [code]move_and_slide[/code] / path steering (NEON-16). + # Exception: with **column** path steering toward a **lower** click, velocity often hugs the baked + # path tangent on TerracePlatformB (violet) while [param want_goal_h] points at the floor — rays + # along velocity keep hitting deck ahead → false “support” and no ledge gravity until XZ closes + # (violet → gold → floor). Use click bearing for probes in that case only. var walk_move_dir_xz := Vector2(velocity.x, velocity.z) if walk_move_dir_xz.length_squared() < 1e-10: walk_move_dir_xz = Vector2(want_goal_h.x, want_goal_h.z) + elif ( + needs_vertical_routing + and _walk_nav_column_steering + and is_on_floor() + and _auth_walk_goal.y < feet_y - DESCEND_GOAL_Y_MARGIN + ): + var wh2 := Vector2(want_goal_h.x, want_goal_h.z) + if wh2.length_squared() > 1e-10: + walk_move_dir_xz = wh2 _apply_walk_air_gravity(delta, walk_move_dir_xz) floor_snap_length = _walk_floor_snap_length(feet_y, want_goal_h, walk_move_dir_xz)