2.0 KiB
2.0 KiB
M51 UI Asset Scaling Contract
This contract separates authored UI materials by their runtime scaling job. An image is not marked stretchable merely because it has transparent padding.
| Asset family | Runtime treatment | Fixed elements | Variable area | Do not do |
|---|---|---|---|---|
| Primary/secondary action plate | Nine-patch, horizontal first | corners, seal/icon mount, outline thickness | clean paper center and horizontal spacing | scale the whole bitmap vertically; put text in the bitmap |
| Commission/task board | Nine-patch or layered frame + paper | posts, corner fittings, wood grain edges | blank parchment center in both axes | tile decorative center; let content touch fittings |
| Recruit card frame | Layered frame + portrait + text; nine-patch only for frame | frame corners, portrait aspect, name/value baseline | paper inset and card width within min/max | stretch the character or use a full-frame bitmap as a list icon |
| Semantic seals/icons | Preserve aspect ratio; fixed logical box | silhouette, stroke weight, internal mark | none | nine-patch, non-uniform scaling or color-only state |
| Character sprites/equipment art | Preserve aspect ratio; authored anchor/pivot | silhouette, anatomy, weapon relation | none | crop, squash or use as a UI background |
| Full-screen world background | Aspect-preserving cover with declared safe rect | focal subjects and horizon relationship | decorative edges / revealed world space | nested 16:9 canvas, non-uniform scale or opaque UI poster |
Verification matrix
Stretchable materials are captured at their minimum, reference and wide sizes. Non-stretchable assets are captured at at least 0.75x, 1x and 1.5x while checking aspect ratio, silhouette and anchor. Every capture is a normal render.
The gate checks corner shape, border thickness, texture repetition, content safe area, text bounds, icon aspect, focal crop and the smallest legal touch target. A green test or imported PNG is not sufficient evidence.