User feedback after iteration-4: legs SHOULD cycle through +1/0/-1
(substrate-style — leg renders forward, under body, then behind body).
But feet must NOT Y-flip when leg.scl_y goes negative, and must NOT
collapse when leg.scl_y=0. They should follow leg-end position only.
Three changes:
1. walk_fwd_lower keyframes restored to substrate-style (leg.scl_y
sign-flip on both halves: leg_l +1↔-1, leg_r -1↔+1). foot.pos
animations REMOVED — cascade through leg.world.scl now correctly
moves foot to leg-end position automatically (foot.local.pos
stays at rest 25 in y).
2. foot.rest.scl: [1, -1] → [1, 1] (no Y-flip in rest, natural
sprite orientation). inherit_scale=false → foot.world.scl stays
at foot.local.scl=[1,1] regardless of leg.scl_y. Foot sprite
never flips, never collapses.
3. Procedural extended: writes foot.local.rot = -leg.local.rot so
foot.world.rot = body.world.rot (feet stay body-oriented even
when legs rotate to walk-direction).
Speed slowed further from 0.5 → 0.4 (user: still too fast at 0.5).
User manual-test feedback after iteration-3 hip-stable + leg-rotation
fixes:
1. Animation too fast for actual map traversal → play walk_fwd_lower
and walk_upper with speed=0.5 (effective 1.6s cycle, was 0.8s).
2. Second half visually broken → was substrate's sign-flip trick where
leg.scl_y goes +1 (opposite of rest -1) and foot.pos.y flips
negative. Cascade foot.world.scl_y = +1 * -1 = -1 → foot rendered
Y-flipped. User: 'die füße ... darf hier die skalierung nicht negativ
werden'.
New cycle: each half extends ONE leg (scl_y=-1 matching rest) while
the other stays at scl_y=0 (collapsed/invisible). foot.world.scl_y
never goes negative — only [0, +1]. Alternating-leg gait. Substrate
first-half preserved verbatim; second-half mirrors with role swap.
Add lower_control virtual bone (reparents legs for independent orientation).
Update look_at fields: body uses "soft" target with slerp=6, head uses
"aim" target with instant snap and ±60° clamp. Rename walk.anim.json to
walk_fwd_lower.anim.json and add walk_back_lower, walk_left_lower,
walk_right_lower anims ported from substrate. Port HandleAnimationLower:
signed-angle sector selection (±45°/±135°) drives 4-directional walk anim
choice; wedge clamp sets lower_control rotation. Separate aim/soft look
targets both track raw mouse for now.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>