| name | gallop |
| description | Gallops forward with a bouncy, lopsided one-leg-leads stride that translates the body via a sequence of root frames. Use when a command mentions gallop, galloping, horse gallop, canter, giddy-up, or ride/move like a horse. |
| category | locomotion |
| disable-model-invocation | true |
| subskills | ["walk","move-leg"] |
gallop
A lopsided, bounding stride where the same leg always leads. The bounce needs root.y, so this uses a translating sequence with hand-keyed legs.
How
- Use a
sequence with loop:false (frame root is ABSOLUTE — increase z each step; compute the forward axis from state.position+state.faceDeg, here origin facing +Z).
- Keep the SAME lead leg up each bound (e.g. Right:
RightUpLeg:[60,0,0],RightLeg:[50,0,0]) while the trailing leg catches up; pop root.y ~0.15 on each bound, land at 0.
durationMs ~2400–2800.
Example
- "gallop forward" (at x:0,z:0,faceDeg:0) ->
{"durationMs":2600,"say":"Giddy-up!","sequence":{"loop":false,"frames":[{"t":0,"pose":{"RightUpLeg":[60,0,0],"RightLeg":[50,0,0],"LeftUpLeg":[0,0,180],"LeftLeg":[0,0,0]},"root":{"y":0.15,"z":0.5}},{"t":0.33,"pose":{"RightUpLeg":[0,0,180],"RightLeg":[0,0,0]},"root":{"y":0,"z":1}},{"t":0.66,"pose":{"RightUpLeg":[60,0,0],"RightLeg":[50,0,0]},"root":{"y":0.15,"z":1.6}},{"t":1,"pose":{"RightUpLeg":[0,0,180],"RightLeg":[0,0,0],"LeftUpLeg":[0,0,180],"LeftLeg":[0,0,0]},"root":{"y":0,"z":2.2}}]}}