Files
jpmschweitzerandClaude Fable 5 2f87c1a65f data(assets): promote the four spike GLBs — first production environment assets (T-1204)
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>
2026-07-26 12:55:28 +02:00

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]
}
}
}