You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Extend the authoritative atrinik/content@main model/catalog and Classic runtime target with bounded model-driven appearance manifests, validation, packaging, and the human/non-humanoid reference assets needed by the first Classic vertical slice.
This repository owns authored bodies, overlays, masks, palettes, anchors, clips, identities, licensing, and attribution. Rendering and the Classic wire contract remain in atrinik/classic.
Authored contract
Add one versioned surface—integrated with tools/content_catalog and the authoritative schema rather than a second parser—that can represent:
stable appearance-family IDs and declared presentation backend/capabilities;
normalized clips/poses mapped to ordered direction/frame resources and timing;
optional visual slots and compatible component IDs;
per-frame origin, pixel-snapped anchor/attachment, component bounds, and front/behind ordering;
explicit tint masks/channels and finite palette/swatches;
fallback face/animation identity;
aliases/migrations and exact Classic target projection; and
source, author, license, transformation, notice, distribution, and admission facts for every member.
Validate missing/duplicate/ambiguous IDs, wrong families/slots/frames, incomplete direction or pose coverage, unsafe paths/dimensions, invalid anchors/pivots/order cycles, excess components/masks/palettes, unknown references, nondeterminism, and absent/conflicting provenance. Unknown or unlicensed visual members fail closed.
Reference content
Produce human-created final assets under the policy tracked by #77:
one existing human appearance family with a neutral base body;
head, torso, and main-hand component slots;
one helmet, one armour/clothing layer, and one held weapon;
every direction/frame needed by existing idle, movement, and attack animation states;
one authored tint mask and two explicit palettes;
a deterministic two-handed/conflict fixture;
one deliberately incomplete component for fallback tests; and
one non-humanoid family declaring no equipment slots and using authored full-frame clips/current animation fallback.
Extracting a layer from inherited art is a transformation and requires exact provenance, attribution, license compatibility, and human review. Generated visual assets are not accepted as final shipped art. Temporary design drop-ins, if used, remain clearly marked, excluded from release, and tracked to replacement.
Runtime output
Extend python3 tools/build_runtime.py --target classic deterministically; keep all generated output isolated under build/.
Preserve existing PNG, bmaps, animations, and atrinik.0 behavior for unconverted and fallback models.
Permit a partial appearance catalog: registering one family must not require manifests, empty slot sets, rebuilt art, or identity changes for any unconverted family. Classic packages contain legacy and appearance-enabled resources side by side.
Emit a bounded manifest/catalog and immutable members suitable for the Classic client/server staging decision made by the design issue.
Use stable names/content identities; never serialize filesystem enumeration or release-local numeric face IDs as durable appearance IDs.
Coordinate generic face/animation/spriteset identity with #61. Do not encode Classic packet layout, client cache layout, GPU pages, or archive offsets into authored semantics.
Acceptance criteria
The authoritative schema/catalog contains the reference appearance families, clips, slots, components, anchors/orders, masks/palettes, fallbacks, and exact typed references with stable IDs.
Golden composed frames cover every reference direction and idle/move/attack frame, both palettes, front/behind ordering, the two-handed conflict, and the incomplete-component atomic fallback.
The non-humanoid fixture validates with zero clothing slots and retains complete modern clip/legacy fallback behavior.
Shuffled enumeration, clean/incremental builds, Linux/Windows paths, and repeated Classic target builds produce identical logical output and digests.
Negative fixtures reject all missing, duplicate, ambiguous, incompatible, cyclic, oversized, malformed, unsafe, and unlicensed cases with stable source-located diagnostics.
Every new or extracted final visual has exact human authorship/upstream source, transformations, license, attribution, notice, and release admission recorded; temporary generated drop-ins cannot enter the Classic target.
Existing unconverted faces/animations and current Classic collection remain byte/semantically usable as the fallback path.
A package containing only the opted-in reference family renders a deterministic mixed scene while representative unregistered families remain on their existing resources with no placeholder appearance records.
python3 tools/validate.py, an isolated python3 tools/build_runtime.py --target classic, and git diff --check pass.
Non-goals
Implementing the Classic client compositor or wire protocol.
Converting every player model, item, NPC, or monster in this first issue.
Guessing clothing layers, masks, or palettes from inventory icons.
Committing generated runtime output to authored source.
Parent: atrinik/classic#224
Blocked by the contract frozen in atrinik/classic#225.
Outcome
Extend the authoritative
atrinik/content@mainmodel/catalog and Classic runtime target with bounded model-driven appearance manifests, validation, packaging, and the human/non-humanoid reference assets needed by the first Classic vertical slice.This repository owns authored bodies, overlays, masks, palettes, anchors, clips, identities, licensing, and attribution. Rendering and the Classic wire contract remain in
atrinik/classic.Authored contract
Add one versioned surface—integrated with
tools/content_catalogand the authoritative schema rather than a second parser—that can represent:Validate missing/duplicate/ambiguous IDs, wrong families/slots/frames, incomplete direction or pose coverage, unsafe paths/dimensions, invalid anchors/pivots/order cycles, excess components/masks/palettes, unknown references, nondeterminism, and absent/conflicting provenance. Unknown or unlicensed visual members fail closed.
Reference content
Produce human-created final assets under the policy tracked by #77:
Extracting a layer from inherited art is a transformation and requires exact provenance, attribution, license compatibility, and human review. Generated visual assets are not accepted as final shipped art. Temporary design drop-ins, if used, remain clearly marked, excluded from release, and tracked to replacement.
Runtime output
python3 tools/build_runtime.py --target classicdeterministically; keep all generated output isolated underbuild/.bmaps,animations, andatrinik.0behavior for unconverted and fallback models.Acceptance criteria
python3 tools/validate.py, an isolatedpython3 tools/build_runtime.py --target classic, andgit diff --checkpass.Non-goals