Walk cycle
Make a looping walk clip and wire it into a Punchy! Moves pack: four directions, a sprint, a swing that follows your speed, a sway, a run stop and a turn in place.
-
Blockbench
-
Punchy! Studio
This page has not been translated into Korean yet, so it is shown in English. Read in English
On this page
This recipe takes you from an empty pack to a walk that plays in game. You make one looping clip, wire it to the four walking directions and the sprint, then let its strength follow your speed, put a sway and a sprint lean on top, and finish with a run stop and a turn in place. It is for anyone who has made a first clip (see How to create custom animations) and wants their player to walk with it.
The settings in the worked example come from the example pack provided by Crafto, Fluid & Foolish, the Punchy! Moves animation pack used for every demo on this wiki.
Before you start
- Punchy! Moves, from Modrinth or CurseForge (Getting started has the steps).
- A resource pack with a
pack.mcmeta, anassets/punchy_moves/animations/folder and acompat/folder beside it. How to create custom animations shows how to make the pack, and Punchy! Studio’s New Pack makes one for you. - Blockbench with the Punchy! Moves rig (The Blockbench rig), or Punchy! Studio, from Modrinth or CurseForge, to make the clip.
- Clip names that start with
my_are placeholders for your own clips. The clips namednormal_forward,nf_add,sprint_add,sidestep_left,sidestep_right,stop_running,step_left,step_right,step_add_leftandstep_add_rightare from the example pack provided by Crafto, so those examples work as they stand only with that pack on.
How the game builds a walk
Knowing what the game does makes every key below easier to place.
- Standing. The
idleclip plays while you stand still and fades out as you start to move. - Directions. The
forward,backward,leftandrightclips follow the movement keys you hold, and one eases into the next, so a direction never snaps when a key changes. - One clock. All the direction clips share one clock. It moves with the distance you walk, not with time: one cycle for every
stride_blocks_per_cycleblocks, and never more thanmax_cycles_per_secondcycles a second. Each clip is read at the same fraction of its own length, so clips of different lengths stay in step. - Strength. The clips do not change size with your speed, unless you set
amplitude_reference_speed. Then their strength follows your speed. - Sprint. As a sprint builds, the walk’s forward share moves to the clip in
directions.sprint.forward. - On top. An
addclip on a direction, and thesprint_overlayclip, are added over the walk instead of blended with it.
Make the walk loop
A walk loop is one full cycle: a left step and a right step. The normal_forward clip of the example pack provided by Crafto is 0.6667 seconds long and keys the legs, the arms, the head and the waist. The clip’s length does not set the pace of the walk, the clock above does.
In Blockbench
You will make a clip called my_walk that swings the legs and arms, and export it into your pack.
- In the Animate tab, press the + button (Add Animation).
- Set Name to
my_walk, Loop Mode to Loop and Snapping to 20, so 0.4 s and 0.8 s are steps of the timeline. Press Confirm. Then set Animation Length to 0.8 with the slider in the toolbar of the Animations panel (click the number, type 0.8 and press Enter). - Select
right_legin the outliner. With the playhead at 0, add a rotation key with the + beside Rotation in the timeline and rotate the leg to about 30 degrees on X. - Move the playhead to 0.4 s and key the leg at -30. Move it to 0.8 s and key 30 again, so the loop closes where it started.
- Select
left_legand key the opposite swing: -30 at 0, 30 at 0.4 and -30 at 0.8. - Select
right_armand key -25, 25 and -25 at the same three times. Thenleft_armwith 25, -25 and 25. Each arm swings against the leg on its own side. - Press play under the viewport to check the loop.
- Choose Animation > Export Animations, leave
my_walkticked (untick any other animation you do not want in the file) and press Confirm. Save the file asmy_walk.animation.jsoninassets/punchy_moves/animations/of your pack.
Video coming soon
To see a finished walk, import the animation file from the example pack provided by Crafto and play its walking clip.

In Punchy! Studio
You will make a clip called my_walk that swings the legs and arms. Studio keeps it in your pack, and you export the pack once the walk is wired in.
- Join a world and press F6 to open Punchy! Studio. Pick Third Person with the switch between the menus and the workspace tabs.
- Choose File > Packs (Ctrl+O). Open your pack, or choose New Pack to make one.
- Choose File > New Clip (Ctrl+N). Type the Name
my_walk, set the Length to 0.8, tick Loop and press Create. - In the outliner, select Right Leg and press E for rotation. With the playhead at 0, type 30 in the rotation’s X field of the Transform panel. Typing a value keys it at the playhead.
- Move the playhead to 0.4 s, which is frame 8 at the 20 frames a second a new clip steps by (press Right to step one frame), and type -30. Move it to 0.8 s, frame 16, and type 30 again, so the loop closes where it started.
- Select Left Leg and key the opposite swing: -30 at 0, 30 at 0.4 and -30 at 0.8.
- Select Right Arm and key -25, 25 and -25 at the same three times. Then Left Arm with 25, -25 and 25. Each arm swings against the leg on its own side.
- Press Space to play the loop, and again to pause it.
Video coming soon
To see a finished walk, copy the example pack provided by Crafto in with File > Packs, select normal_forward in the outliner and play it. See How to create custom animations for the steps.
Two things keep a walk loop easy to blend:
- Close the loop. The last key repeats the first, as in the steps above.
- Keep the feet in step across clips. Every direction clip is read at the same fraction of its length at the same moment. If you also animate sidesteps, put the same foot forward at the same fraction of the clip in each of them, or the legs of the two clips pull against each other while the directions blend.
Wire it in
The clip says how the body moves. A compat file says when it plays. This one plays my_walk in all four directions and for the sprint.
{
"format_version": 2,
"defaults": {
"animations": {
"walking": {
"directions": {
"forward": "my_walk",
"backward": { "clip": "my_walk", "reverse": true },
"left": "my_walk",
"right": "my_walk",
"sprint": { "forward": "my_walk" }
}
}
}
}
}
The backward walk is the forward clip played backward at the same pace (reverse), so you animate one clip instead of two. Left and right use the same clip until you animate sidesteps. The sprint has a forward clip of its own, even if it is the same clip, because the walk’s forward share moves to it as a sprint builds.
In Blockbench
Blockbench exports the clip, and you write the compat file as a text file in the pack.
- In your pack, open
assets/punchy_moves/compat/. Make the folder if it is not there. It sits next to theanimationsfolder. - Make a text file in it called
my_walk.json(any name that ends in.jsonworks) and paste the JSON above. - In the game, open Options, then Resource Packs, move your pack to the right-hand list and press Done. If the pack was already on, press F3+T to reload.
- Join a world and press F5 to look at your player in third person.
- Walk forward, backward and to each side, then sprint.
In Punchy! Studio
Studio edits compat files in its Bindings workspace and tells you, while you type, whether the game would read the file.
- Open the Bindings tab (Ctrl+B). The outliner, titled Compat Files, lists each file and every object in it.
- Select the pack’s compat file. To add another file, press New Compat File, type a File name and press Create.
- Choose File > Raw JSON, or press the Raw JSON button above the sheet. Replace the text with the JSON above. If the file already holds other actions, keep them and paste only the
walkingobject intodefaults.animations. - Watch the line under the text. It says Punchy reads this. when the game would read the file. Press Apply. The Verdict panel of the sheet then says The game reads it.
- Press Ctrl+E. In Export Punchy Moves Pack, keep Turn the pack on and reload ticked and press Export.
- Close the editor with F6, press F5 to look at your player in third person, then walk in every direction and sprint.
Video coming soon
Your player now cycles the clip while it moves. After later edits, press F3+T to reload.
Let the swing follow your speed
With only the directions set, the walk does not grow with your speed: a walk and a sprint both play at the size the clip was animated (below about 0.11 blocks per tick, a very slow step also fades toward the idle clip). amplitude_reference_speed is the speed, in blocks per tick, at which the walk plays at full strength. Once it is above 0, the direction clips of the walk and the run (forward, backward, the sidesteps and the sprint’s forward) play as strong as your speed measured against it, up to max_amplitude. Slow steps are small, and a sprint swings wider than the clip was animated.
{
"format_version": 2,
"defaults": {
"animations": {
"walking": {
"directions": {
"forward": "my_walk",
"backward": { "clip": "my_walk", "reverse": true },
"left": "my_walk",
"right": "my_walk",
"sprint": { "forward": "my_walk" }
},
"amplitude_reference_speed": 0.215,
"max_amplitude": 1.2
}
}
}
}
The bindings in the example pack provided by Crafto use 0.215, about the game’s walking speed. A walk at that speed plays at full strength, a walk at half that speed plays at half strength, and a sprint reaches the cap of 1.2, which is 20 percent wider than the clip was animated. The strength changes smoothly, and the idle clip and any add or sprint_overlay clip keep their own weight.
While you use an item that slows you, such as drawing a bow or eating, the reference speed is scaled down by that slowdown, to no less than a tenth of itself, so the slowed walk keeps a full stride.
Video coming soon
Put a sway on top with add
A direction in its object form can carry an add clip. It plays with the direction’s clip, on the same clock and with the same weight, and is added on top of the walk. If the direction is reversed, the add clip runs backward with it. Use it for a sway or an accent made as a change from the walk pose.
The example pack provided by Crafto walks forward on normal_forward with nf_add on top, and walks backward on the same two clips played backward:
{
"format_version": 2,
"defaults": {
"animations": {
"walking": {
"directions": {
"forward": { "clip": "normal_forward", "add": "nf_add" },
"backward": { "clip": "normal_forward", "reverse": true, "add": "nf_add" },
"left": { "clip": "sidestep_left" },
"right": { "clip": "sidestep_right" }
}
}
}
}
}
nf_add is a loop of the same length as normal_forward, with small head, arm and waist offsets of a few degrees. Key an add clip the same way: small changes from zero, not a pose of its own.
Lean into the sprint
The sprint takes the same object form as the other directions, so directions.sprint.forward can carry add and reverse too. The sprint_overlay is a second way to dress the sprint: a clip added on top of the walk while you sprint, on the walk’s own clock and as strong as the sprint is.
Giving a sprint_overlay changes how the walk blends. As the sprint builds, the sidestep and backward parts of the walk move into the forward run, so a full sprint plays one forward cycle with the overlay on top. Without it nothing changes.
The example pack provided by Crafto uses the same forward clip for the walk and the sprint, lets the amplitude make the sprint wider, and puts sprint_add on top:
{
"format_version": 2,
"defaults": {
"animations": {
"walking": {
"directions": {
"forward": { "clip": "normal_forward", "add": "nf_add" },
"sprint": { "forward": { "clip": "normal_forward", "add": "nf_add" } }
},
"amplitude_reference_speed": 0.215,
"max_amplitude": 1.2,
"sprint_overlay": "sprint_add"
}
}
}
}
sprint_add is a single held pose, not a loop of motion: it tilts the waist 8 degrees on X, lowers the waist half a pixel, moves it a little forward and turns the arms 5 degrees on Y, one each way. It is read from the sprint_overlay key as a clip name, so write it as text, not as an object. For a sprint that changes after a moment, with a first loop and a second, see Sprinting. A staged sprint does not read add or reverse.
Stop and turn on the spot
Two more moments belong to a walk: how it ends, and what the body does when you stand still and look around.
The run stop
When you stop sprinting on the ground, the game can play a stop clip. to_idle plays when you then stand still and to_walk when you keep moving. If you give only one of them, the game uses it for both. By default the clip blends over the pose and back into the walk. With additive set to true (without quotes), the clip is added on top of what plays underneath instead, so key it as small changes from zero. The stop_running clip of the example pack provided by Crafto starts with every bone at 0. Arms held with both hands get none of it.
{
"format_version": 2,
"defaults": {
"animations": {
"run_stop": {
"to_idle": "stop_running",
"to_walk": "stop_running",
"additive": true
}
}
}
}
The same keys also work as stop inside walking.directions.sprint. Both places set the same switch.
Turning in place
When you stand still on the ground and look around, your head follows the view and your body stays put. turn_in_place turns the body with a step clip once you have looked far enough. It is off until enabled is true. left and right go together, and each step clip needs tracks for left_leg and right_leg and a length above 0, or the feature stays off.
While you keep looking around, the body turns once your view is minimum_turn_degrees or more off the body. If you hold your view still, away from the body, for look_idle_seconds, the body turns anyway.
Each step can have a companion clip. left_overlay and right_overlay play with the step, on the step’s clock and at its strength, and are added on top of it on the legs, arms, body and head. They need no leg tracks of their own. The bindings in the example pack provided by Crafto set both:
{
"format_version": 2,
"defaults": {
"animations": {
"turn_in_place": {
"enabled": true,
"left": "step_left",
"right": "step_right",
"minimum_turn_degrees": 60,
"look_idle_seconds": 0.25,
"fade_out_seconds": 0.12,
"left_overlay": "step_add_left",
"right_overlay": "step_add_right"
}
}
}
}
Video coming soon
The whole walk from the example pack
This is the walking part of the bindings in the example pack provided by Crafto, in one file, with the stride numbers written out. Put it in a pack that has those clips, or swap the names for yours.
{
"format_version": 2,
"defaults": {
"animations": {
"walking": {
"stride_blocks_per_cycle": 1.67,
"sprint_stride_blocks_per_cycle": 1.67,
"crouch_stride_blocks_per_cycle": 1.15,
"max_cycles_per_second": 1.25,
"sprint_max_cycles_per_second": 1.5833334,
"crouch_max_cycles_per_second": 0.75,
"directions": {
"forward": { "clip": "normal_forward", "add": "nf_add" },
"backward": { "clip": "normal_forward", "reverse": true, "add": "nf_add" },
"left": { "clip": "sidestep_left" },
"right": { "clip": "sidestep_right" },
"sprint": { "forward": { "clip": "normal_forward", "add": "nf_add" } }
},
"amplitude_reference_speed": 0.215,
"max_amplitude": 1.2,
"sprint_overlay": "sprint_add"
},
"run_stop": {
"to_idle": "stop_running",
"to_walk": "stop_running",
"additive": true
},
"turn_in_place": {
"enabled": true,
"left": "step_left",
"right": "step_right",
"minimum_turn_degrees": 60,
"look_idle_seconds": 0.25,
"fade_out_seconds": 0.12,
"left_overlay": "step_add_left",
"right_overlay": "step_add_right"
}
}
}
}
Reference
The keys of walking this recipe uses. The stride numbers, the displacement limits and the sprint stages are on Compat files.
| Key | Type | Default | What it does | Example |
|---|---|---|---|---|
directions | object | forward, backward, left, right and sprint. A direction is a clip name, an object such as { "clip": "my_, or a list of candidates that play by their when and weight expressions. A direction with no clip plays nothing. | ||
stride_ | number | 1.67 | Blocks you travel for one cycle of the walk clips. Never below 0.05. sprint_ (1.67) and crouch_ (1.15) are the same while sprinting and crouching. | |
max_ | number | 1.25 | The most cycles a second the clips run. sprint_ (1.58) and crouch_ (0.75) are the same while sprinting and crouching. | |
amplitude_ | number | 0 (off) | The speed, in blocks per tick, at which the walk plays at full strength. A finite number above 0 turns it on. 0 or less, or left out, leaves it off, and the walk does not change size with speed. While you use an item that slows you, the value is scaled down by that slowdown, to no less than a tenth. | 0.215 |
max_ | number | 1.2 | The most the walk's strength can reach under amplitude_. A negative value counts as 0, which flattens the walk. It does nothing while amplitude_ is off. | 1.2 |
sprint_ | clip name | none | A clip added on top of the walk while you sprint, on the walk's own clock and as strong as the sprint. It must be text: an object is ignored. Giving it also moves the sidestep and backward parts of the walk into the forward run as the sprint builds. | sprint_add |
The object form of a direction, which each candidate in a list also takes. It works on forward, backward, left and right, on directions.sprint.forward and on the directions of crawling.
| Key | Type | Default | What it does | Example |
|---|---|---|---|---|
clipRequired | clip name | The clip to play. | ||
reverse | boolean | false | true plays the clip backward on the walk's clock, at the same pace. Write it without quotes. | true |
add | clip name | none | An extra clip that plays with this one: same clock (backward too when reverse is set) and the same weight, added on top of the walk. A name no animation file defines plays nothing, and the main clip still plays. | nf_add |
The stop clip. It is the run_stop action in defaults.animations, and the same keys work as walking.directions.sprint.stop.
| Key | Type | Default | What it does | Example |
|---|---|---|---|---|
to_idle | clip name | Plays when you stop sprinting and then stand still. | ||
to_walk | clip name | Plays when you stop sprinting and keep moving. | ||
additive | boolean | false | true adds the stop clip on top of what plays underneath instead of blending over it and back into the walk. Write it without quotes. | true |
minimum_ | number | 0.08 | The speed at which a sprint counts as running for the stop clip. A sprint that has built up to half strength counts too. Never below 0.01. |
The turn on the spot.
| Key | Type | Default | What it does |
|---|---|---|---|
enabled | boolean | false | Switches the feature on. It must be true or false. |
left | clip name | The clip for a turn to the left. It goes with right: giving only one drops the file. It must be a clip name, not an object. | |
right | clip name | The clip for a turn to the right. | |
left_ | clip name | none | A companion clip for the left step, added on top of it on the legs, arms, body and head. It needs no leg tracks. Text only: an empty value or an object drops the file. |
right_ | clip name | none | The same for the right step. |
minimum_ | number | 60 | How far, in degrees, your view must be from your body before the body turns while you keep looking around. Kept between 2 and 90. |
look_ | number | 2 | Seconds you can hold your view still, away from the body, before the body turns anyway. Kept between 0 and 10. |
fade_ | number | 0.12 | How long the body takes to blend back to normal when you move. Kept between 0.05 and 0.4. |
Things that go wrong
- The walk does not play, or only part of it. Check the names first. A clip name that no animation file defines plays nothing, and the game does not say so. A wrong
addname only loses the sway, and the main clip still plays. See Why a clip does not play. walkingsits in an item group. Body actions,walkingamong them, are read fromdefaultsonly. Under an item group oritemsthey change nothing.walkingis a list. It must be an object. A list drops the whole file, and the game’s log has a line that starts withCould not load animation compat.- The legs stop when you sprint. The walk’s forward share moves to
directions.sprint.forwardas a sprint builds. With no clip there, the legs lose that share. Give the sprint a forward clip, even the same one as the walk. - The sprint overlay does nothing. It must be a clip name in text. An object is ignored.
- The swing does not change with speed.
amplitude_reference_speedmust be above 0. At 0, or left out, the walk keeps the clip’s own size. - The walk goes flat.
max_amplitudeat 0, or below, makes the strength 0 whileamplitude_reference_speedis on. - The legs look wrong when you change direction. The direction clips share one clock and blend for a moment as you switch, so put the same foot forward at the same fraction of every clip.
- The pace does not change when you change the stride. At an ordinary walk the cap sets the pace. Change
max_cycles_per_second(or the sprint’s and the crouch’s). - The turn on the spot never starts. It is off until
enabledistrue, both step clips need tracks for both legs, and it works only while you stand still on the ground. - The run stop does not play. It plays when you stop a sprint on the ground, once the sprint has got going: you reached
minimum_speed(0.08 blocks per tick unless you set it) or the sprint had built up to half strength. - Nothing changed after an edit. Press F3+T to reload.
Related pages
- Compat files is the reference for
walking, the sprint stages, the walking candidates and the expressions a candidate reads. - Camera and features lists the same keys beside the rest of what Moves animates.
- How to create custom animations makes a clip from nothing and wires it to other moments.
- Animation files is the reference for the clip files, bones and loops.
- Punchy! Studio for Moves edits compat files in the Bindings workspace.
- Other recipes: emote, item sequence, riding and swimming.
Last checked against the mod on 30 October 2026.