#What you'll learn
- How to set up a character in one click with templates, and give every new box sensible gameplay values.
- How box "tracks" work across frames, so copying and interpolating saves you redrawing.
- How to attach weapons and effects to sockets and test them.
- How to plan attacks with frame data and the collision preview.
- How to keep a project clean with Checks, and hand it on to Pixxula and Pixxizi.
#Before you start
- You should know the basics from the Pixxeta Beginner guide: opening an animation, drawing boxes, pivots and Export.
- Have a character animation with at least an idle and an attack, or use Try the sample knight.
- Frames can be up to 480 × 480 pixels each.
#How-tos
#How to start from a character template
- In Box layers, open Character template and pick one: Platformer hero, Fighting-game fighter, Run-and-gun shooter, Top-down character, Boss / large enemy, Projectile / spell, Breakable prop or Rideable mount.
- Click Apply. You get the layers and sockets that kind of character usually needs, for example the fighter's Head, Torso and Legs hurtboxes plus Push, Strike and Parry.
- Click each layer's gear to set its defaults (damage, knockback, priority, hitstop). Every new box on that layer starts with them, so you only type the exceptions.
#How to work with box tracks
- A box keeps the same id when you copy it with → Next frame, → Rest of animation, Copy boxes or Ctrl+C / Ctrl+V. Boxes with the same id across frames form a track: one row in the timeline, one shape in your engine.
- Duplicate (Ctrl+D) makes a new box with a new id, a separate track.
- Use copies when it's the same box moving (a sword swing), and duplicates when it's a new box (a second hit).
#How to interpolate a moving box
- Place the box on the first key frame, copy it forward, and go to the last key frame.
- Move and resize the box there.
- Under Frame → Interpolate, enter the two key frame numbers and click Interpolate.
- Every frame in between gets a gliding box (and gliding sockets). Fix any frame by hand afterwards; it stays a key.
#How to attach weapons and effects
- Add sockets (hand_r, hand_l, muzzle, head, feet, mount, vfx_origin, shield, back, or your own name).
- Place each socket on every frame where it exists, and drag its aim dot to set the angle (hold Shift to snap to 15°).
- In Collision preview → Attach to a socket, pick the socket and load a weapon or effect with Image… or Library. Play the animation to check it follows.
- Checks warns when a socket disappears partway through an animation.
#How to design an attack with frame data
- Draw the hitboxes on the active frames only.
- Open Animations & frame data: Startup counts frames before the first hitbox, Active the frames with hitboxes, Recovery the frames after the last one, each in frames and milliseconds, plus the highest Damage.
- Change frame timing under Frame → Duration (ms) and watch the numbers update.
- Type on hit and on block advantages you designed; they're exported with the data.
- Add hit_active events at the start and end of the active window, and cancel_window where the move can be cancelled.
#How to test with the collision preview
- Tick Dummy target, then drag it or type its size to match a typical opponent's hurtbox.
- Play with ¼× or ½×, or step with , and .. The dummy turns red and shows HIT while a hitbox overlaps it.
- Untick this anim to play every frame instead of looping the current animation.
#How to plan events for your game code
- Add events where your game needs to react: footstep (with a surface), spawn_projectile (id, speed, angle, socket), play_sound (sound, volume), camera_shake (strength, ms), invuln_on / invuln_off, vfx (id, socket), hitstop (frames), cancel_window (into), or custom.
- Edit each value; your code receives the event name and its values when the frame plays.
- For play_sound, click ♪ to pick a sound from your library, for example one made in Pixxibu.
#How to clean up with Checks
- Open Checks before every export.
- Fix each line: missing hurtboxes on attack frames, boxes outside the frame, tiny boxes, hitboxes without damage, overlapping hitboxes, sound events without a sound, sockets that vanish mid-animation.
- Click a line to jump to the frame and select the box.
#Workflows
#A full move set for a platformer hero
- Apply Platformer hero, then Auto boxes → Padded on Body for All frames.
- Auto pivots → Feet for all frames, so the character stands on the same spot.
- Draw attack hitboxes on active frames, interpolate the swing, add events.
- ⇋ Left-facing copies, then Checks, then Export for your engine.
#Pixxava → Pixxeta → Pixxula → Pixxizi
- Send a character sheet from Pixxava and accept Auto boxes from rig.
- Add attacks, sockets and events, then Send to App → Pixxula: the gameplay data stays attached while frames are packed.
- Send to App → Pixxizi to package it with your other assets for your engine.
- Track the whole chain as a Flow run so each person knows when their step is ready.
#Hand off to a programmer
- Export Generic JSON (or your engine's format) plus CSV for the frame data table.
- Share the zip; the CSV opens in any spreadsheet for balancing.
#Tips and shortcuts
- Tools: V select · R box · C circle · K capsule · P polygon · O pivot · S socket · H pan.
- Space play/pause · , / . step · 0 fit · scroll to zoom.
- Arrows nudge 1 pixel, Shift + arrows 8 pixels · Ctrl+D duplicate · Delete remove · Esc deselect.
- Ctrl+Z undo · Ctrl+Shift+Z or Ctrl+Y redo · Ctrl+S export.
- Onion skin (the half-moon button) shows neighbouring frames and their boxes.
#Troubleshooting
- Interpolate says there's nothing to do: the key frames don't share the same box id. Copy, don't duplicate.
- Frame data shows no startup: the animation has no boxes on a Hitbox layer. Check the layer's type in Box layers.
- The attached weapon jumps around: the socket isn't placed on some frames, or its angle flips. Place it on every frame.
- New boxes have the wrong damage: change the layer's defaults with its gear button; existing boxes keep their values.
- Auto boxes on Body parts made nothing: the figure is too small or the frame is empty. Use Padded instead.