BLOBBO/demos/lane-i.html
Claude 324d7d4568 Lane I: asset runtime — manifest, registry, slot hooks, IndexedDB overrides
Custom GLBs drop into 14 named slots without code changes; an empty manifest
produces today's game by construction (the fallback builders are the original
code moved into a closure, and an empty registry returns the caller's own
object by identity).

- src/assets/{slots,manifest,idb,registry,blobBody}.ts — schema + validation,
  GLTF cache with per-instance material cloning, fit nodes, IndexedDB override
  layer, paintability report.
- Slot hooks in createBlob, parts, cannon, greybox, puddles, ghost. Mesh-only:
  no collider, physics or logic line is touched. Animated sub-parts (plate cap,
  belt chevrons, fan blades, cannon pivot) stay procedural so a custom model
  cannot stop them moving.
- public/assets/ — the build had NO asset copy step at all, so every asset URL
  would have 404'd in production. public/ is vite's default publicDir, so this
  needs no vite.config change.
- Tests: 63 headless checks + a farm-GLB audit that fires PaintSkin's own
  raycast against the fitted body.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-19 11:37:08 +10:00

23 lines
964 B
HTML

<!doctype html>
<html lang="en">
<head><meta charset="utf-8" /><title>BLOBBO lane i demo — asset slots</title>
<style>
html,body{margin:0;height:100%;overflow:hidden;background:#bfe3ff;font-family:system-ui,sans-serif}
#app{width:100%;height:100%}
#legend{position:fixed;bottom:10px;right:10px;padding:10px 12px;border-radius:8px;
background:rgba(20,24,40,.72);color:#eaf2ff;font-size:13px;line-height:1.5;pointer-events:none;max-width:320px}
#legend b{color:#FFD60A}
</style></head>
<body>
<div id="app"></div>
<div id="legend">
<b>BLOBBO — Lane I: asset slots</b><br>
Left column: empty manifest (today's game).<br>
Right column: the same code with a test manifest pointing at the farm GLBs.<br>
The panel top-left reports every slot's load status, the paintability check
for the blob body, and a scripted splat's coverage before/after.
</div>
<script type="module" src="/src/demo/lane-i.ts"></script>
</body>
</html>