Body step 2.4: landing, movable ground, playground fixes

- legs brake landings at 4.5 g; vertical support is a rate-limited servo
  (no launch when stepping onto a mantled ledge)
- ground control pushes back on movable ground (seesaw tips under the player)
- playground hinges use absolute paths (joint paths resolve from the joint)
- big props grabbable via surface query; Reset props keeps playground pieces
- spike: landing, seesaw, playground joints/grab, person-like wall climb

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
FoxyzandClaude Opus 5.5 committed 2026-10-02 10:10:38 +03:00
1 parent b5f598aae9
commit 0b8f2131c1
6 files changed
+208 -42

No files matched your search

+23
View File
@@ -155,3 +155,26 @@ Rules added:
- Measure "blocked" where the body is blocked.
- Hysteresis plus a free-space check before re-enabling any collider.
- In the Box3D wrapper, physics materials must be set before AddChild.
## Step 2.4 — playtest polish (2026-10-02)
Owner, after 2.3: "Climbing actually feels very solid now. Mantling is almost effortless … There wasn't anything I
wasn't able to climb." Fixed from the same session:
- **Landing sink.** Support capped at 2× body weight leaves 1 g of braking, so a 1 m drop (4.4 m/s) took ~0.4 m to
stop and the body sank out from under the view. `LegStrength` is now 4.5× (real legs brake landings at 3–5 g).
The vertical support is now a rate-limited velocity servo, `MaxRiseSpeed` 1.2 m/s: full strength to brake, but the
legs raise the body no faster than that. Legs can push but not pull, so a hard push toward a higher stance (just
mantled onto a ledge) overshot into a 0.67 m jump. Spike: landing keeps the pelvis at standing height, eye within
12 cm.
- **Body weight on movable ground.** The feet aren't physical, so standing on a seesaw/plank/crate never pushed it.
Ground control now applies the opposite of its support + carry force to a `RigidBody3D` under the ground ray, at the
hit point. Box3D ray results also carry a null `collider`, so it uses `collider_id`. Spike: a seesaw tips 17°.
- **Playground hinges.** `Joint3D.NodeA/NodeB` resolve relative to the JOINT node. `GetPathTo` from the parent
pointed at nonexistent children, so the seesaw and swing board were never hinged. Absolute paths now.
- **Big props weren't grabbable.** Prop grabbing measured distance to the prop ORIGIN, far from the hand on a 2–3 m
plank. `PropGrabber.BodyUnderPalm` queries the surface (a prop first, else static world).
- **Reset props removed every "prop".** `PropShop.Respawn` now frees only its own children; the playground resets
in place.
- The climbing spike now climbs like a person: hand moves are sequential (never release the second hand before the
first re-grips), and pulls are relative to the body/room.