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

+14
View File
@@ -302,6 +302,20 @@ public partial class MenuSpike : Node3D
await TouchPress(1, Center(_menu.RecalibrateButton));
Check("touch: Recalibrate called once", stub.Calls == 1, $"(calls={stub.Calls})");
// 7b) Player-page toggles: spectator and smooth turn fire with the new state.
bool? spectator = null, smooth = null;
_menu.SpectatorToggled += on => spectator = on;
_menu.SmoothTurnToggled += on => smooth = on;
await TouchPress(1, TabCenter(0));
await TouchPress(1, Center(_menu.SpectatorButton));
await TouchPress(1, Center(_menu.TurnModeButton));
await Frame(3);
Check("touch: spectator toggled on", spectator == true, $"({spectator})");
Check("touch: smooth turn toggled on", smooth == true, $"({smooth})");
await TouchPress(1, Center(_menu.SpectatorButton));
await Frame(3);
Check("touch: spectator toggled back off", spectator == false, $"({spectator})");
// 8) Header Close via touch.
await TouchPress(1, Center(_menu.HeaderCloseButton));
Check("touch: Close fired once", _close == 1, $"(count={_close})");