Body step 2.1: climbing, mantling, crawling, legs, playground, 144 Hz

- Step rule + lower-body collider: no walking onto tables, steps <= 0.35 m
- Structural hand strength: two-hand mantle/pull-up works, one hand can't
- Arms aim from the physical shoulder horizontally, keep True Body pose vertically
- Crawl pose, crawl carry, 35 deg slope limit, ground feed-forward ignores
  play-space corrections (fixes a runaway feedback loop)
- Grab static world (climbing), procedural visual legs
- Playground sandbox; menu strength slider, spectator (old drag) and turn toggles
- Physics 144 Hz with interpolation; legacy chase-body spikes pin 90 Hz
- RagdollSpike: 27 phases incl. mantle, pull-up, crawl, ledge drop, ramps

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
FoxyzandClaude Opus 5.5 committed 2026-10-02 07:56:08 +03:00
1 parent d83273dd2f
commit 2aff2b61da
26 files changed
+1243 -70

No files matched your search

+24 -13
View File
@@ -92,7 +92,22 @@ TERMINOLOGY (owner-corrected — use precisely):
collision exceptions), so grabbing works unchanged. Hand ghosts at > 10 cm lag. Rebuilds on recalibration. Full
design + measured findings: `research/ragdoll-player-step2.md` (incl. the light-link oscillation rule).
Regression `scenes/ragdoll_spike.tscn` "RAGDOLL: overall PASS" (stand, reach, swings, stick + room-scale wall,
bar blocked/crouch under, lean over table, crate push, 12 kg close vs far, teleport + snap turn, random soak).
bar blocked/crouch under, lean over table, crate push, 12 kg close vs far, teleport + snap turn, random soak,
knee-high box + table block walking, 0.25 m step up, two-hand mantle onto 0.9 m vs one hand fails, pull-up on a
grabbed bar two vs one hand, crawl through a 0.6 m tunnel, walk off a 1 m ledge, 18° ramp up / 40° ramp stops).
**Step 2.1 (owner playtest fixes, same day)** — see `research/ragdoll-player-step2.md` "Step 2.1": step rule
(MaxStepHeight 0.35 + back-edge ray) and a lower-body `Legs` collider (blocks knee-high things, tucks when
crawling/mantling, shape DISABLED not layer-cleared), STRUCTURAL hand strength (40 → 400 N with the axial share of
the error), arm aim from the physical shoulder horizontally / True Body pose vertically, crawl pose in
`TrueBodySolver` (trunk tips to 83° keeping the hips ≥ 0.15 m), crawl carry, MaxSlope 35°, `Climbing` (hand on
static or arms lifting) = the only state that drags the view vertically, ground feed-forward that ignores play-space
corrections (a runaway at 7 m/s otherwise), `ProceduralLegs` visuals, static-world grabs (climbing), menu strength
slider / spectator / snap-smooth toggles, 144 Hz + physics interpolation (XR origin, TrueBody, PlayerRig excluded).
- **Playground.cs** — the body sandbox around the table (east climbing/mantling, west physics toys, south
crawl/duck/door); dynamic pieces are "prop"s reset by the menu's Reset props. `tools/playground_shots.tscn` renders
overview PNGs (`godot-mono --path . tools/playground_shots.tscn -- <dir>`).
- **AnchorMoveMode.cs** is now SPECTATOR-only (`AnchorMoveMode.Enabled`, menu → Player → Spectator), where the
ragdoll is cleared; leaving rebuilds it at the current pose.
- **LEGACY (not in main.tscn since step 2; kept for their spikes): PhysicsHands / PhysicsTorso / PhysicsArms / BodyRig.**
- **PhysicsHands.cs** — physical palm bodies chasing the controller poses: 0.4 kg boxes (flat slab,
thumb-side face), gravity off, CCD, **layer 4 (player hands)/mask 1|4** — NOT colliding with the
@@ -372,11 +387,10 @@ Floor StaticBody mask 1|3|4|5 (collision_mask 29).
## 5. Known issues / open questions
- **Ragdoll player (step 2) — unvalidated in-headset.** Known gaps (details in
`research/ragdoll-player-step2.md`): no legs yet; shoulder has no cone limit; grabs are props only (no
climbing on static geometry); strength values are human-scale guesses; physics still at the headset rate
(144 Hz not switched); legacy anchor-grab movement now fights gravity (the body falls, the view follows), so
it only pulls you along the ground; teleport markers still work (the body is carried).
- **Ragdoll player (step 2.1) — owner playtested step 2 ("feels amazing for the most part"); 2.1 fixes are
unvalidated in-headset.** Remaining gaps: shoulder has no cone limit (fork addition); strength values are
human-scale guesses (menu slider); stick-crawling is a comfort concession (Nimso pulls with hands only); legs are
visual only. Legacy spikes (arm/grab/body/collapse) pin 90 Hz because the chase bodies were tuned there.
- **Body Stage 1 chest collapse — ROOT-CAUSED + FIXED (2026-10-01), awaiting owner re-playtest.**
The first in-headset session NaN'd the chest ("head detaching from the body"). Cause was
@@ -522,13 +536,10 @@ Floor StaticBody mask 1|3|4|5 (collision_mask 29).
## 7. Next steps (in order)
0. **Owner playtest of body step 2 (the ragdoll player)** — stand, reach, push props, grab/hold (strength is now
human-scale: heavy things only close to the body), walk with the left stick into walls/the table, snap turn
with the right, crouch. Read the log after ("PlayerRagdoll: ... snapped" = a safety reset). Tuning knobs:
`PlayerRagdoll` strength/gain constants, `PlayerRig.MoveSpeed/SmoothTurn`. Step 1 (calibration, True Body)
was validated by the owner ("seems normal"); `TrueBody.ShowDebug` is off now that the ragdoll is the visual.
Next body steps: procedural legs, 144 Hz (needs physics interpolation + origin moves in physics ticks),
climbing (weld to static), one global strength scalar.
0. **Owner playtest of body step 2.1 + the playground** — mantle the ledges (both hands on top, press down, lean
in), climb the wall holds / pull-up bar / monkey bars (grip = grab static), crawl the tunnel, walk ramps/stairs,
planks/seesaw/swing board, strength slider, spectator mode, smooth turn. Read the log after. Next body work
after feedback: shoulder cone limit (fork), Nimso flight-phase gait, NPC on the same ragdoll.
1. **Owner re-playtest of the body (chest fix + Stage 2 arms)** — the Stage-1 collapse is
fixed (`collapse_spike` 49/49); feel is unvalidated in-headset. Read the log after.
2. **Locomotion decision** — owner report 2026-10-01: two-hand anchor turning broken (not