fix(vagrant): walk anim — slow to 0.5x, no leg.scl_y sign flip

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.
This commit is contained in:
Axel Meyer
2026-05-18 22:13:56 +02:00
parent 77f3e726ae
commit bf5fe12e4c
2 changed files with 8 additions and 6 deletions

View File

@@ -9,16 +9,16 @@
"foot_l": {"pos": [0, 0]}, "foot_r": {"pos": [0, 0]}
},
{ "t": 0.2,
"leg_l": {"scl": [-1, -1]}, "leg_r": {"scl": [ 1, 1]},
"foot_l": {"pos": [-0.044, 25.47]}, "foot_r": {"pos": [0.249, 25.85]}
"leg_l": {"scl": [-1, -1]}, "leg_r": {"scl": [ 1, 0]},
"foot_l": {"pos": [0, 25]}, "foot_r": {"pos": [0, 0]}
},
{ "t": 0.4,
"leg_l": {"scl": [-1, 0]}, "leg_r": {"scl": [ 1, 0]},
"foot_l": {"pos": [0, 0]}, "foot_r": {"pos": [0, 0]}
},
{ "t": 0.6,
"leg_l": {"scl": [-1, 1]}, "leg_r": {"scl": [ 1, -1]},
"foot_l": {"pos": [ 0.044, -25.47]}, "foot_r": {"pos": [-0.249, -25.85]}
"leg_l": {"scl": [-1, 0]}, "leg_r": {"scl": [ 1, -1]},
"foot_l": {"pos": [0, 0]}, "foot_r": {"pos": [0, 25]}
},
{ "t": 0.8,
"leg_l": {"scl": [-1, 0]}, "leg_r": {"scl": [ 1, 0]},

View File

@@ -113,9 +113,11 @@ local function update_lower_anim(moving, move_x, move_y)
end
puppet.stop(state.player, "idle_lower")
puppet.stop(state.player, "idle")
puppet.play(state.player, anim_id, { loop = true })
-- Slow walk to ~0.5x substrate speed (user preference: too fast for
-- actual map traversal at substrate's 0.8s/cycle).
puppet.play(state.player, anim_id, { loop = true, speed = 0.5 })
if not puppet.is_playing(state.player, "walk_upper") then
puppet.play(state.player, "walk_upper", { loop = true })
puppet.play(state.player, "walk_upper", { loop = true, speed = 0.5 })
end
state.walk_anim_current = anim_id
if CI_FRAME_PERF and ci_last_state ~= "walk" then