{ "_comment": "Environment prop/furniture manifest — schema mirrors client/assets/characters/manifest.json's per-item entry pattern (see docs/architecture/character-asset-organization.md). Keyed by asset name (matches the .glb basename, no extension). One entry per asset, NOT per-body-type variant — environment props are not body-fitted (D-244). An asset entering this manifest AND client/assets/models/ IS the promotion act (D-241); nothing stays 'promoted' in spikes/. Naming/mask-sidecar/texture conventions: docs/assets/visual/conventions.md. CONTRACT: any top-level key prefixed with '_' (this key, '_fields', '_example_only_not_a_real_asset') is metadata/documentation, not an asset category — loaders MUST skip '_'-prefixed keys and must not iterate them as if they were real category/asset entries.", "_fields": { "name": "string — asset name, matches the manifest key and the .glb basename", "category": "string — 'furniture' | 'props' (matches the subdirectory)", "source_model": "string — path to the .glb under client/assets/models/, e.g. 'furniture/table_baroque.glb'", "subdirectory": "string — 'furniture' | 'props' (same as category; kept as its own field to match the character-manifest precedent of not deriving one field from another)", "status": "string — planned | in-progress | placeholder | final (docs/assets/README.md vocab — shared with the catalog tables so manifest and catalog never disagree)", "footprint_tiles": "[width, height] — multi-tile sim footprint in whole tiles (1 tile = 1m, D-243). Omit (or [1, 1]) for single-tile props.", "mask": "string, optional — path to the recolor mask sidecar, e.g. 'furniture/table_baroque_mask.png'. Omit if the asset has no tintable region." }, "_example_only_not_a_real_asset": { "table_baroque": { "category": "furniture", "source_model": "furniture/table_baroque.glb", "subdirectory": "furniture", "status": "planned", "footprint_tiles": [2, 1], "mask": "furniture/table_baroque_mask.png" } }, "furniture": { "table_baroque": { "category": "furniture", "source_model": "furniture/table_baroque.glb", "subdirectory": "furniture", "status": "planned", "footprint_tiles": [1, 1], "mask": "furniture/table_baroque_mask.png" }, "chair_modernist": { "category": "furniture", "source_model": "furniture/chair_modernist.glb", "subdirectory": "furniture", "status": "planned", "footprint_tiles": [1, 1], "mask": "furniture/chair_modernist_mask.png" }, "desk_scifi": { "category": "furniture", "source_model": "furniture/desk_scifi.glb", "subdirectory": "furniture", "status": "planned", "footprint_tiles": [1, 1], "mask": "furniture/desk_scifi_mask.png" } }, "props": { "lion_statue": { "category": "props", "source_model": "props/lion_statue.glb", "subdirectory": "props", "status": "planned", "footprint_tiles": [1, 1] } } }