Privacy
Language: Português (Portugal)

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.

This page has not been translated into European Portuguese 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, an assets/punchy_moves/animations/ folder and a compat/ 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 named normal_forward, nf_add, sprint_add, sidestep_left, sidestep_right, stop_running, step_left, step_right, step_add_left and step_add_right are 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 idle clip plays while you stand still and fades out as you start to move.
  • Directions. The forward, backward, left and right clips 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_cycle blocks, and never more than max_cycles_per_second cycles 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 add clip on a direction, and the sprint_overlay clip, 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.

Tool

In Blockbench

You will make a clip called my_walk that swings the legs and arms, and export it into your pack.

  1. In the Animate tab, press the + button (Add Animation).
  2. 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).
  3. Select right_leg in 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.
  4. 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.
  5. Select left_leg and key the opposite swing: -30 at 0, 30 at 0.4 and -30 at 0.8.
  6. 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.
  7. Press play under the viewport to check the loop.
  8. Choose Animation > Export Animations, leave my_walk ticked (untick any other animation you do not want in the file) and press Confirm. Save the file as my_walk.animation.json in assets/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.

Importing the clips of the example pack provided by Crafto and playing a walking loop.

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.

  1. Join a world and press F6 to open Punchy! Studio. Pick Third Person with the switch between the menus and the workspace tabs.
  2. Choose File > Packs (Ctrl+O). Open your pack, or choose New Pack to make one.
  3. Choose File > New Clip (Ctrl+N). Type the Name my_walk, set the Length to 0.8, tick Loop and press Create.
  4. 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.
  5. 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.
  6. Select Left Leg and key the opposite swing: -30 at 0, 30 at 0.4 and -30 at 0.8.
  7. 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.
  8. 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.

Tool

In Blockbench

Blockbench exports the clip, and you write the compat file as a text file in the pack.

  1. In your pack, open assets/punchy_moves/compat/. Make the folder if it is not there. It sits next to the animations folder.
  2. Make a text file in it called my_walk.json (any name that ends in .json works) and paste the JSON above.
  3. 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.
  4. Join a world and press F5 to look at your player in third person.
  5. 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.

  1. Open the Bindings tab (Ctrl+B). The outliner, titled Compat Files, lists each file and every object in it.
  2. Select the pack’s compat file. To add another file, press New Compat File, type a File name and press Create.
  3. 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 walking object into defaults.animations.
  4. 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.
  5. Press Ctrl+E. In Export Punchy Moves Pack, keep Turn the pack on and reload ticked and press Export.
  6. 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

The first wiring at work.

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.

Keys of walking
KeyTypeDefaultWhat it doesExample
directionsobjectforward, backward, left, right and sprint. A direction is a clip name, an object such as { "clip": "my_walk" }, or a list of candidates that play by their when and weight expressions. A direction with no clip plays nothing.
stride_blocks_per_cyclenumber1.67Blocks you travel for one cycle of the walk clips. Never below 0.05. sprint_stride_blocks_per_cycle (1.67) and crouch_stride_blocks_per_cycle (1.15) are the same while sprinting and crouching.
max_cycles_per_secondnumber1.25The most cycles a second the clips run. sprint_max_cycles_per_second (1.58) and crouch_max_cycles_per_second (0.75) are the same while sprinting and crouching.
amplitude_reference_speednumber0 (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_amplitudenumber1.2The most the walk's strength can reach under amplitude_reference_speed. A negative value counts as 0, which flattens the walk. It does nothing while amplitude_reference_speed is off.1.2
sprint_overlayclip namenoneA 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.

Keys of a direction
KeyTypeDefaultWhat it doesExample
clipRequiredclip nameThe clip to play.
reversebooleanfalsetrue plays the clip backward on the walk's clock, at the same pace. Write it without quotes.true
addclip namenoneAn 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.

Keys of run_stop
KeyTypeDefaultWhat it doesExample
to_idleclip namePlays when you stop sprinting and then stand still.
to_walkclip namePlays when you stop sprinting and keep moving.
additivebooleanfalsetrue 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_speednumber0.08The 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.

Keys of turn_in_place
KeyTypeDefaultWhat it does
enabledbooleanfalseSwitches the feature on. It must be true or false.
leftclip nameThe 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.
rightclip nameThe clip for a turn to the right.
left_overlayclip namenoneA 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_overlayclip namenoneThe same for the right step.
minimum_turn_degreesnumber60How 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_idle_secondsnumber2Seconds you can hold your view still, away from the body, before the body turns anyway. Kept between 0 and 10.
fade_out_secondsnumber0.12How 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 add name only loses the sway, and the main clip still plays. See Why a clip does not play.
  • walking sits in an item group. Body actions, walking among them, are read from defaults only. Under an item group or items they change nothing.
  • walking is a list. It must be an object. A list drops the whole file, and the game’s log has a line that starts with Could not load animation compat.
  • The legs stop when you sprint. The walk’s forward share moves to directions.sprint.forward as 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_speed must be above 0. At 0, or left out, the walk keeps the clip’s own size.
  • The walk goes flat. max_amplitude at 0, or below, makes the strength 0 while amplitude_reference_speed is 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 enabled is true, 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.

Last checked against the mod on 30 October 2026.