| name | strafe-left |
| description | Side-steps to the left while still facing forward, translating the body sideways via a sequence of root frames (faceDeg unchanged). Use when a command mentions strafe left, side-step left, sidestep left, step to the left, shuffle left, or move left without turning. |
| category | locomotion |
| disable-model-invocation | true |
| subskills | ["walk"] |
strafe-left
Step sideways to its LEFT without turning to face that way. Because the body must keep its heading, this uses a sequence that translates root sideways while OMITTING faceDeg (so the facing holds).
How
- The left of the current facing is the direction
faceDeg-90: dx=sin((face-90)deg), dz=cos((face-90)deg). At face 0 that is -X, so root.x DECREASES.
- Use
loop:false (frame root is ABSOLUTE — make x step more negative each frame). Do NOT set faceDeg, so the body keeps looking forward.
- Side-step legs: lead with the left leg out (
LeftUpLeg:[0,0,150]), then bring the right to meet it (back to rest).
durationMs ~2000–2600.
Example
- "strafe left" (at x:0,z:0,faceDeg:0) ->
{"durationMs":2200,"say":"Sliding left.","sequence":{"loop":false,"frames":[{"t":0,"pose":{"LeftUpLeg":[0,0,150]},"root":{"x":-0.4}},{"t":0.33,"pose":{"LeftUpLeg":[0,0,180]},"root":{"x":-0.8}},{"t":0.66,"pose":{"LeftUpLeg":[0,0,150]},"root":{"x":-1.2}},{"t":1,"pose":{"LeftUpLeg":[0,0,180],"RightUpLeg":[0,0,180]},"root":{"x":-1.6}}]}}