table_baroque, chair_modernist, desk_scifi (furniture, with mask sidecars) and lion_statue (props, non-tintable) enter client/assets/models/ under the category-first convention, byte- identical to the spike sources (MD5-verified; spikes/ untouched, vw_beetle excluded per the Q-067 deferral). Postprocess verified already-applied by Blender node-graph inspection (mat_primary, roughness=1.0/specular=0.0 shader inputs — the convenience properties read stale defaults, the graph is authoritative), so not re-run. All four registered in manifest.json at 'planned' with footprint_tiles [1,1] (a flagged judgment call — normalized spike geometry erases real-world scale; the brief ruling goes to araminta in review). In-engine proof: clean headless import + ResourceLoader load + instantiate for all four. Discovery documented in conventions.md §2 + glb-gen SKILL.md: Godot externalizes the GLB's embedded texture as a <model>_Image_0.png sidecar referenced by binary UID — it must be committed or loading breaks with an undiscoverable dependency error. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
58 lines
3.0 KiB
JSON
58 lines
3.0 KiB
JSON
{
|
|
"_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]
|
|
}
|
|
}
|
|
}
|