| name | skater-jump |
| description | Performs repeated speed-skater lateral bounds side to side with the trail leg sweeping behind, keeping facing, via a sequence with root.y arcs and root.x. Use when a command mentions skater jumps, skater bounds, speed skater hops, or lateral skating leaps. |
| category | locomotion |
| disable-model-invocation | true |
| subskills | ["move-leg","shift-weight","balance-and-posture"] |
skater-jump
Bound side to side onto alternating legs, the trailing leg sweeping behind each landing. Translate root while OMITTING faceDeg so the heading holds.
Composes: move-leg + shift-weight + balance-and-posture
How
- Use a
sequence with loop:false. Frame root is ABSOLUTE; compute the travel axis from state.position+state.faceDeg (0=+Z, 90=+X). The example assumes origin facing +Z.
- Alternate bounds: push off, fly (
root.y~0.25), land on the far leg with the trail leg crossing behind; do NOT set faceDeg.
durationMs ~2000.
Example
- "do skater jumps" ->
{"durationMs":2000,"say":"Skater jumps!","sequence":{"loop":false,"frames":[{"t":0,"pose":{"RightUpLeg":[40,0,0],"RightLeg":[70,0,0],"LeftUpLeg":[30,0,0],"Spine":[0,0,-8]},"root":{"y":-0.15,"x":0}},{"t":0.25,"pose":{"Spine":[0,0,-8]},"root":{"y":0.25,"x":0.6}},{"t":0.5,"pose":{"LeftUpLeg":[40,0,0],"LeftLeg":[70,0,0],"RightUpLeg":[30,0,0],"Spine":[0,0,8]},"root":{"y":0,"x":1.1}},{"t":0.75,"pose":{"Spine":[0,0,8]},"root":{"y":0.25,"x":0.5}},{"t":1,"pose":{"RightUpLeg":[0,0,180],"LeftUpLeg":[0,0,180],"RightLeg":[0,0,0],"LeftLeg":[0,0,0],"Spine":[0,0,0]},"root":{"y":0,"x":0}}]}}
Limits & posture
Keep ≥1 foot grounded except at a jump's airborne apex; stay inside human joint ranges and keep weight over the support — see balance-and-posture.