Character Paperdoll Assets
Purpose
Character paperdoll assets provide the layered sprite sheets used by the player preview, dialogue bust validation, animation snapshots, and runtime paperdoll rendering. There are two supported families:
- Classic assets under
assets/character. - Farmer assets under
assets/character_farmer.
Only png and json files under those roots are part of the character asset inventory.
Steps
- Choose the asset family: classic assets under
assets/characteror farmer assets underassets/character_farmer. - Name the file with the correct token shape for that family.
- Keep the page family and layer token aligned with the action or body part the asset should render on.
- Update the farmer manifest or runtime asset inventory path when the asset must be packaged.
- Use player-preview validation or paperdoll snapshot export to confirm the layer appears in the intended frame.
Classic Filename Tokens
Classic paperdoll sheets use this filename shape:
char_<type>_<page>_<layer>_<name>_<variant>.png
Example:
char_a_p1_1out_pfpn_v01.png
Token meanings:
char: character sprite-sheet asset.a: character type.p1: page family.1out: visual layer.pfpn: asset name token.v01: palette or variant token.
Classic layer tokens are 0bot, 0bas, 1out, 2clo, 3fac, 4har, 5hat, 6tla, and 7tlb. Keep matching paperdoll parts on the same page family unless a profile override explicitly targets another page.
Farmer Filename Tokens
Farmer sheets use this filename shape:
fbas_<layer>_<name>_<variant>[_e].png
The parser expects the fbas prefix, a known farmer layer token, a name token, a variant token, and optional _e. The _e suffix marks an exclusive variant, used mostly for hair and headwear hide behavior.
Farmer layer tokens are:
00undr01body02sock03fot104lwr105shrt06lwr207fot208lwr309hand10outr11neck12face13hair14head15over
The farmer manifest at assets/character_farmer/farmer_sprite_manifest.json gives each selectable variant an id, label, slot, layer, name_token, variant_token, asset_path, optional palette_token, exclusive, icon, and compatibility block.
Page Families
Classic pages are grouped by action family:
p1: walk and run.p2: farming, mining, and woodcutting.p3: fishing.p4: miscellaneous actions.
Additional page families support alternate stances and combat sets, including p1po, p12h, pBOW1 through pBOW3, pONE1 through pONE3, and pPOL1 through pPOL3.
Some bow and tool pages need different front/behind ordering depending on facing and frame. Treat the guide images in assets/character/guides as the visual authority when authoring or reviewing those sheets.
Draw Order
Classic draw order is defined by the runtime layer list, not by sorting filenames alphabetically:
0bot -> 0bas -> 1out -> 2clo -> cloak overlay -> 3fac -> 4har -> 5hat -> 6tla -> 7tlb
Per-frame sorting offsets from animation effects and layer overrides can move a rendered piece within that plan.
Farmer draw order follows FarmerLayerCode::ALL, from 00undr through 15over. Farmer body parts render first, then farmer tools and effects are layered later by the render plan.
Hide Rules
Hide behavior is part of the asset contract:
- Classic hood tokens
hdplandhddnare hidden unless a cloak layer is selected. - Farmer
_evariants are exclusive. Exclusive headwear hides hair; exclusive hair hides itself when headwear is present. - Equipment loadouts can add paired layers and remove layers through their
paired_layersandhides_layersrules. - Animation layer overrides can hide
body,tool,tool_a, ortool_bfor individual action steps.
If an asset looks missing in preview, first check whether a hide rule or action override is removing it for the selected frame.
Discovery Modes
Editor and development builds use live scan mode. Live scan walks assets/character and assets/character_farmer, filters to png and json, parses classic and farmer filenames, and refreshes on dependency signature changes.
Non-development runtime uses manifest mode. The manifest is assets/character_asset_inventory.json, schema version 1. Manifest paths are normalized, filtered to the known roots and extensions, sorted, and deduplicated before they are used.
When adding new runtime-visible assets, make sure the manifest is regenerated or updated as part of the content bake. When iterating in the editor, the live scan can see new files before the runtime manifest does.
Validation Preview Paths
Preview-path validation resolves the exact asset paths needed for the selected character state:
- Action effects from the animation profile.
- Every classic
LayerCode::ALLpaperdoll layer. - Tool layers, strict-matched to the selected page family.
- Bow, quiver, selected tool, and arrow variants shown in the character selector.
- Farmer selections from the farmer manifest.
Dialogue bust validation checks page-1 preview assets and reports missing selections or empty resolved layers. Farmer selection validation reports missing layer, name, or variant combinations, and the editor warns when selected hair is hidden by headwear.
For visual review images, use the same snapshot CLI documented in Player Preview Animation Profile:
cargo run --bin aether-paperdoll-snapshot -- --clip walk --facing down --step 0 --layer all --out target/paperdoll-animation-export/review/walk_down.png --scale 4
cargo run --bin aether-paperdoll-snapshot -- --export-all --family farmer --out-dir target/paperdoll-animation-export/farmer --scale 4
Expected Outputs
A valid asset appears in live editor scan, resolves through preview-path validation, participates in the correct draw order and hide rules, and is included in the runtime manifest or generated package when runtime needs it. Snapshot export should produce review PNGs for the relevant family, facing, layer, and action frame.
Common Mistakes
- Mixing page families within a single classic outfit set.
- Adding a new file that live scan can see but the runtime manifest does not include.
- Treating farmer
_eas part of the variant token instead of the exclusivity suffix. - Assuming filename order is draw order.
- Forgetting that tool pages can render in front of or behind the body depending on action and facing.
Recovery Paths
If an asset is visible in editor but missing in runtime, regenerate or update the character asset inventory and rerun the relevant bake/export path. If a layer is absent in a snapshot, check token parsing first, then hide rules, exclusive farmer variants, selected equipment hide rules, and animation layer overrides. If draw order is wrong, fix the layer token or override metadata rather than renaming files alphabetically.