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>
23 lines
964 B
HTML
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>
|