# Equipment Icon Quality Audit Generated by `scripts/audit-equipment-icon-quality.mjs` from the current catalog, PNG headers, and runtime source. ## Result - Status: **PASS** - Catalog contract: 23/23 items - Complete 128/32 pairs: 23/23 - Fully valid catalog rows: 23/23 - 128px payload: 393,307 B (384.1 KiB) across 23 PNG files - 32px payload: 40,270 B (39.3 KiB) across 23 PNG files - Browser visual QA baseline: `1920x1080` CSS viewport at 100% zoom ## Asset Coverage - 128px missing: none - 32px missing: none - 128px uncataloged/extra: none - 32px uncataloged/extra: none - Required PNG format: exact square dimensions, 8-bit RGBA (PNG color type 6), non-empty file. ## Boot Loading Contract | check | result | contract | | --- | --- | --- | | 128px source glob | PASS | `equipment-icons/128/*.png` is imported eagerly | | 32px source glob | PASS | `equipment-icons/32/*.png` is imported eagerly | | full texture preload | PASS | 128px files load as `item-${id}` | | micro texture preload | PASS | 32px files load as `item-${id}-micro` | | catalog-derived texture key | PASS | file stem becomes the stable item texture id | | procedural fallback guard | PASS | procedural full icon is created only when the loaded texture key is absent | | procedural fallback coverage | PASS | 23/23 catalog ids have a base-key fallback | The authored 128px files are the normal `item-${id}` textures and the authored 32px files are the `item-${id}-micro` textures. The existing procedural 64px drawing path is retained only as a **loaded-base-texture-missing fallback**: its guard leaves a successfully loaded authored base texture untouched. Micro textures are static assets, so their completeness is enforced by this audit rather than by the procedural fallback. ## Camp Render Usage - Micro render sites: 4 - Full render sites: 2 | tier | source location | method | key expression | requested display size | | --- | --- | --- | --- | --- | | micro | `src/game/scenes/CampScene.ts:16367` | `renderSortieEquipmentIcons` | `item-${item.id}-micro` | `iconSize` | | micro | `src/game/scenes/CampScene.ts:21970` | `renderEquipmentCompareRow` | `item-${entry.item.id}-micro` | `22px` | | micro | `src/game/scenes/CampScene.ts:22012` | `renderEquipmentEffectSummary` | `item-${entry.item.id}-micro` | `20px` | | micro | `src/game/scenes/CampScene.ts:22158` | `renderEquipmentInventoryBox` | `item-${entry.item.id}-micro` | `21px` | | full | `src/game/scenes/CampScene.ts:22341` | `renderEquipmentCard` | `item-${item.id}` | `30px` | | full | `src/game/scenes/CampScene.ts:23078` | `renderEquipmentSwapComparisonCard` | `item-${item.id}` | `40px` | Micro textures are used for compact sortie, inventory, and equipped-item rows. Full textures are used for larger equipment cards and the compare/confirm panel. ## Full Catalog Inventory | item id | slot | rank | 128px PNG | bytes | 32px PNG | bytes | pair | concerns | | --- | --- | --- | --- | ---: | --- | ---: | --- | --- | | `green-dragon-glaive` | weapon | treasure | 128x128 RGBA8 | 9,893 | 32x32 RGBA8 | 1,252 | yes | none | | `iron-spear` | weapon | common | 128x128 RGBA8 | 6,364 | 32x32 RGBA8 | 830 | yes | none | | `leader-axe` | weapon | common | 128x128 RGBA8 | 12,684 | 32x32 RGBA8 | 1,487 | yes | none | | `serpent-spear` | weapon | treasure | 128x128 RGBA8 | 6,832 | 32x32 RGBA8 | 952 | yes | none | | `short-bow` | weapon | common | 128x128 RGBA8 | 12,987 | 32x32 RGBA8 | 1,543 | yes | none | | `sky-piercer-halberd` | weapon | treasure | 128x128 RGBA8 | 11,490 | 32x32 RGBA8 | 1,473 | yes | none | | `training-sword` | weapon | common | 128x128 RGBA8 | 8,933 | 32x32 RGBA8 | 1,260 | yes | none | | `twin-oath-blades` | weapon | treasure | 128x128 RGBA8 | 15,345 | 32x32 RGBA8 | 1,852 | yes | none | | `western-cavalry-spear` | weapon | common | 128x128 RGBA8 | 7,505 | 32x32 RGBA8 | 883 | yes | none | | `white-feather-fan` | weapon | treasure | 128x128 RGBA8 | 24,987 | 32x32 RGBA8 | 2,422 | yes | none | | `yellow-turban-saber` | weapon | common | 128x128 RGBA8 | 12,895 | 32x32 RGBA8 | 1,568 | yes | none | | `cloth-armor` | armor | common | 128x128 RGBA8 | 23,329 | 32x32 RGBA8 | 2,185 | yes | none | | `lamellar-armor` | armor | common | 128x128 RGBA8 | 21,179 | 32x32 RGBA8 | 1,970 | yes | none | | `oath-robe` | armor | treasure | 128x128 RGBA8 | 23,579 | 32x32 RGBA8 | 2,207 | yes | none | | `rebel-vest` | armor | common | 128x128 RGBA8 | 20,584 | 32x32 RGBA8 | 1,768 | yes | none | | `reinforced-lamellar` | armor | treasure | 128x128 RGBA8 | 20,788 | 32x32 RGBA8 | 1,920 | yes | none | | `bravery-token` | accessory | treasure | 128x128 RGBA8 | 26,569 | 32x32 RGBA8 | 2,418 | yes | none | | `grain-pouch` | accessory | common | 128x128 RGBA8 | 25,980 | 32x32 RGBA8 | 2,336 | yes | none | | `mountain-guide-scroll` | accessory | treasure | 128x128 RGBA8 | 24,057 | 32x32 RGBA8 | 2,290 | yes | none | | `peach-charm` | accessory | treasure | 128x128 RGBA8 | 15,997 | 32x32 RGBA8 | 1,592 | yes | none | | `war-manual` | accessory | treasure | 128x128 RGBA8 | 21,080 | 32x32 RGBA8 | 1,978 | yes | none | | `wind-quiver` | accessory | treasure | 128x128 RGBA8 | 20,471 | 32x32 RGBA8 | 2,084 | yes | none | | `yellow-scarf-charm` | accessory | common | 128x128 RGBA8 | 19,779 | 32x32 RGBA8 | 2,000 | yes | none | ## Findings - All 23 catalog items have valid, paired 128px and 32px RGBA8 PNG assets. - File stems map to stable Boot texture keys for both full and micro tiers. - Camp compact rows use micro textures while larger cards and comparison panels use full textures. - Procedural icons remain a load-failure fallback for base item keys, not the normal rendered asset path.