Theory simulator:
- Add 2D side-wall jump physics with yaw sweep for worst-case margin
- Generate sidewall theory cases (flat/ascend/descend, wall_offset 0/1)
- Add momentum-capabilities.json with band compression and max_reach
- Extend models, capabilities, canonical, and renderers for sidewall
Full-coverage parkour test suite (tools/test-parkour.py):
- Derive test matrix from momentum-capabilities.json
- Build linear/neo/ceiling courses via RCON with 7-block clear margin
- Use /goto for pathfinding, parse A* and PathMgr log output
- Stop-at-first-failure per (family, subfamily, dy, ceil, wo) group
- Hierarchical --filter (e.g. linear/flat, ceiling/headhitter/ceil2.5)
- Exclude sidewall from default matrix (identical max_reach to linear)
Pathing execution fixes:
- Align parkour contracts and timing budgets with live test results
- Fix jump-entry yaw snapping for grounded handoffs
- Template helper and sprint jump template refinements
Made-with: Cursor
- Add MoveDiagonalAscend and MoveDiagonalDescend for "corner" moves:
step diagonally around a wall edge while ascending/descending 1 block.
Requires at least one intermediate cardinal direction to be passable.
- Fix pitch calculation: look toward target's eye level (same height
delta as feet delta) instead of subtracting eye height, which caused
the player to stare at the ground during flat walks.
- Add Yaw/Pitch smoothing via SmoothYaw/SmoothPitch in TemplateHelper.
Max 35 deg/tick for yaw, 25 deg/tick for pitch. Prevents instant
camera snaps between path segments while still being responsive
enough for sprint-jumps and tight maneuvers.
- Apply smoothing to all five action templates (Walk, Ascend, Descend,
Climb, SprintJump).
Made-with: Cursor
- WalkTemplate: remove OnClimbable jump/sprint logic that caused the
player to jump when walking past vine blocks during flat traversal
- TemplateHelper: add CalculatePitch() for computing the look angle
toward a 3D target relative to eye height
- All templates (Walk, Ascend, Descend, Climb, SprintJump): set
physics.Pitch each tick so the player visually looks toward the
current path target direction
- McClient: sync playerPitch and set _yaw/_pitch after pathfinding
ticks so rotation is included in position update packets sent to
the server
Made-with: Cursor
Phase 2.2: MoveParkour for sprint-jump across 1-2 block gaps (distance 2-3)
and ascending parkour (distance 2, +1Y). Registered in BuildDefaultMoves
with CalculationContext.AllowParkour gating.
Phase 3.1-3.2: Template execution engine replacing the waypoint queue system.
- IActionTemplate interface with per-tick state machine pattern
- Templates: Walk, Ascend, Descend, Climb, Fall, SprintJump
- ActionTemplateFactory maps MoveType to the correct template
- PathExecutor drives sequential template execution with logging
- PathSegmentManager handles replanning on failure (up to 5 retries)
- McClient integration: MoveToAStar now creates PathSegmentManager,
UpdatePathfindingInput delegates to it, CancelMovement/ClientIsMoving
updated for both old and new systems.
Tested on 1.21.11: straight walk, zigzag maze, stair ascent,
1-gap and 2-gap sprint jumps all pass.
Made-with: Cursor