Player Preview Animation Profile
Purpose
Player preview animation profiles describe the clips, actions, timeline cues, effect overlays, and per-layer sprite overrides used by the character paperdoll preview and animation workbench. The default authored profile is assets/character/preview_animation_profile.json, referenced in code as the asset-relative path character/preview_animation_profile.json.
Use this profile when an authored player action needs to appear in preview, be reviewed as a fixture, or produce paperdoll snapshot images.
Steps
- Edit the root manifest or split fragment through the animation workbench when possible.
- Add or update clips with matching frame and timer counts.
- Add action metadata, typed cues, effects, and layer overrides for the authored action.
- Use scenario proof before exporting fixtures.
- Generate paperdoll snapshots or fixture exports for review.
- Run bake or validation checks before handing the profile to runtime.
Split Profile Files
The root profile file is a manifest with version: 1 and a fragments list. The editor save path writes split fragments beside the manifest in a directory named after the manifest stem. For the default profile, that means:
assets/character/preview_animation_profile.jsonassets/character/preview_animation_profile/core.jsonassets/character/preview_animation_profile/combat.jsonassets/character/preview_animation_profile/tools.jsonassets/character/preview_animation_profile/gathering.jsonassets/character/preview_animation_profile/interact.jsonassets/character/preview_animation_profile/movement.jsonassets/character/preview_animation_profile/fishing.jsonassets/character/preview_animation_profile/reaction.json
Fragments may contain clips, actions, action_effects, and layer_overrides. Empty buckets are omitted from the manifest, and stale fragment files are removed when a save no longer produces that bucket.
Bucket assignment is descriptor-driven. Actions prefer their category; otherwise clips, effects, and overrides are assigned from the key. The current bucket slugs are core, combat, tools, gathering, interact, movement, fishing, and reaction.
Clips
Each clip is keyed by key and displayed with name. It selects a paperdoll page, then maps animation frames to timers. frames and timers must have the same length.
Important clip fields:
root_motion: optional per-frame movement; when present, it must match the number of frames.facing_override: forcesdown,up,left, orright.side_onlyandside_fallback_facing: allow side-authored clips to stand in for left/right views.body_rowsandtool_rows: override facing row selection for body and tool sheets.looped: marks clips that should repeat in preview.tool_name_tokenandtool_pages: connect action clips to tool sheets;tool_pagesrequires a tool token.
Actions And Cues
Actions connect clips to gameplay-facing metadata. Every action needs a key and label; optional fields include category, required_equipment, gameplay_mode, stamina_cost, mana_cost, cooldown_ms, lockout_ms, interrupt_policy, completion_follow_up, and events.
Valid categories are combat, tools, gathering, interact, movement, fishing, and reaction. Valid equipment tokens include hands, farm_tool, pickaxe, axe, hammer, bug_net, fishing_rod, bow, polearm, and one_hand. Valid gameplay modes are exploration, bow_combat, polearm_combat, and one_hand_combat.
Each event has a step and can use a legacy event string or typed cues. Typed cues are preferred:
vfx:effect_keyand optionalimage_path.sfx: audiocue.camera: cameracue.hitbox: hitboxkey.projectile:projectile_keyand optionaleffect_image_path.
Known legacy events include gameplay_window_open, gameplay_window_close, projectile_spawn, hit_frame, and recovery_frame.
Effects And Layer Overrides
action_effects add visual overlays for a keyed action or clip. Each effect has a key, optional facing, optional image_path, and at least one step. Steps can set frame_id, atlas, offset, flip_x, flip_y, sorting, and rotation_degrees.
layer_overrides replace or hide a paperdoll layer for a keyed action or clip. Each override has a key, optional facing, optional asset_page, a layer, and at least one step. Supported layers are body, tool, tool_a, and tool_b. Steps can set hidden, atlas, offset, sorting, flip_x, and flip_y.
Facing lookup prefers an exact facing match, then side for left/right clips, then the generic empty-facing entry.
Scenario Proof And Fixture Export
The animation workbench builds scenario proof from the selected source row and its runtime comparison. Use it before exporting fixtures so the authored clip, expected timeline labels, and observed runtime snapshots agree.
Fixture export produces an AnimationFixtureExport JSON payload with:
fixture_idsource_keyandsource_label- proof
steps - exported
frames runtime_snapshots- pack gate references such as
pack_export:replay_fixture,engine_health:animation_fixture, andscenario_proof:<source_key>
The workbench previews the JSON and uses assets/fixtures/animation/<fixture_id>.json as the default fixture destination.
Review Image Generation
Use aether-paperdoll-snapshot when reviewers need PNG sheets or GIFs instead of an in-editor preview. The packaged command name is aether-paperdoll-snapshot; from the repo, run it through Cargo:
cargo run --bin aether-paperdoll-snapshot -- --clip bow_shoot_up --facing down --step 0 --layer all --out target/paperdoll-animation-export/review/bow_shoot_up_down.png --scale 4
Batch export generates review sheets and GIFs under target/paperdoll-animation-export unless another output directory is supplied:
cargo run --bin aether-paperdoll-snapshot -- --export-all --family classic --out-dir target/paperdoll-animation-export/classic --scale 4
cargo run --bin aether-paperdoll-snapshot -- --export-all --family farmer --out-dir target/paperdoll-animation-export/farmer --scale 4
The snapshot CLI supports classic and farmer families, facings down, up, left, and right, layers all, base, outfit, tool-a, tool-b, effect, and farmer tracks such as 01body, 14head, farmer_tools, farmer_bow, fishing_right_left, and slash_effects. Tool and offhand variants can be forced with --tool-token, --tool-variant, --offhand-token, and --offhand-variant.
Expected Outputs
A valid profile save keeps the root manifest and split fragments synchronized, provides playable clip/action rows in the workbench, produces scenario proof for fixture export, and generates PNG sheets or GIFs under target/paperdoll-animation-export when snapshot export is requested.
Common Mistakes
- Editing a split fragment without keeping the root manifest in sync.
- Giving a clip mismatched
framesandtimers. - Adding
root_motionwith a different length than the clip frame list. - Using unsupported equipment, category, gameplay mode, facing, or layer tokens.
- Adding effects or layer overrides without at least one step.
Validation Checklist
Before handing a profile to runtime or review:
- Save through the workbench so the root manifest and split fragments stay in sync.
- Confirm every clip has
key,name, at least one frame, and matchingframes/timers. - Confirm
root_motion, if present, has one entry per frame. - Confirm action categories, equipment tokens, gameplay modes, facing tokens, and layer names use supported values.
- Keep
lockout_msless than or equal tocooldown_mswhen both are set. - Give every effect and layer override at least one step.
- Keep atlas cell sizes positive and effect rotations finite.
- Use typed cues for new authoring, and make sure cue payloads are not blank.
Recovery Paths
When preview fails, first save through the workbench to rewrite the root and fragments, then fix the first validation error in the clip/action/effect bucket. If review images look wrong, export a single frame with explicit --clip, --facing, --step, and --layer arguments before running --export-all. If a fixture proof no longer matches runtime, regenerate scenario proof from the current profile and update the fixture export.