--- name: rig title: Rig a character for animation description: Split a character onto named layers — head, torso, arms, legs — so it can be animated by moving cels instead of redrawing pixels. Use before animating anything, or when limbs are baked into one layer. --- # Rig a character for animation Pixels baked into a single layer cannot be animated without redrawing them. Rig first; separating a finished sprite later is more work than building it split. ## The standard rig Bottom to top, so nearer parts draw over farther ones: ``` arm-near ← camera-side arm leg-near head torso arm-far ← partly hidden by the torso; this is what sells depth leg-far shadow ← ground contact, if the style has one ``` Add `weapon`, `cape`, `hair-front`, `hair-back` as the design needs. Keep names stable — every later call refers to them by name. Two limbs with the same name — `arm-near` inside two different groups, say — make later calls ambiguous: passing just the name fails, naming every match, until you pass a `group/child` path (e.g. `torso/arm-near`) instead. ## Building it fresh One batch, one undo step: ``` layer batch=[ {op:"create", name:"shadow"}, {op:"create", name:"leg-far"}, {op:"create", name:"arm-far"}, {op:"create", name:"torso"}, {op:"create", name:"head"}, {op:"create", name:"leg-near"}, {op:"create", name:"arm-near"}, ] ``` Then draw each part on its own layer from the start. ## Splitting an existing sprite When the art is already baked into one layer: 1. `sprite_info` to see what you have, and `look op="ascii"` to find exact part boundaries. Guessing at coordinates here is how limbs get clipped. 2. Create the rig layers (above). 3. For each part, in one `draw` call per target layer: ``` draw layer="head" ops=[{ kind:"blit", from:{x:12,y:4,width:8,height:8}, to:{x:12,y:4} }] ``` `blit` copies from the source layer; `skipTransparent` keeps the copy clean. 4. Clear the copied region from the original layer, or rename the original to `flat-original` and hide it. **Prefer hiding** — if a boundary was wrong you want the original still there. 5. `look op="preview"` with the original hidden. The sprite should look unchanged. If a limb lost pixels, the boundary was wrong. ## Overlap matters A limb needs a pixel or two of overlap with the torso, or a gap appears the moment it rotates. Copy generously and let the stacking order hide the excess. ## Then `aseprite:animate`. ## Related `rules://06-layers-and-rigging`, `rules://03-silhouette-and-form`, `rules://31-anatomy-and-pose` for where the joints really are.