fix(doom): build door-sector floor flats so the player no longer falls through an opening door (takes effect on next E1M1 geometry rebuild)
---
fix(doom): rebuild scene.json (level + 29 monster-AI + HUD/weapon + sky); drop leaked avatar/camera entities; entrypoint adapts to player.avatar entity-ref
---
feat(doom): reintroduce multiplayer co-op on the fixed MP engine â owner-gated monster AI + Sync state + per-peer visual/self-damage, claim-on-shoot damage routing, synced projectiles, replicated fire-pose (engine now instantiates the scene host-authoritatively, so no manual reconcile)
---
feat(doom): host-authoritative co-op hit routing â publish landed shots on the avatar body, monster-owner applies damage+splash (no claimOwnership)
---
fix(doom): build modules use asset.create overwrite, not computed asset.resolve
Replaces the publish-rejected 'if vfs.exists then asset.resolve(name)'
reuse branches in build_level + build_things with asset.create(name,
{ ..., overwrite = true }), which re-authors in place keeping the guid
stable. No computed asset.resolve remains, so the world is publishable.
---
fix(doom): build_things materials via asset.create not Material.Create
Material.Create's typed textures field ({ [string]: string }) flagged the
ref-object texture binding as a publish-blocking type error. Switch the
four doom_billboard material creations to asset.create("material", ...,
{ shader, textures = { base_color_texture = <texName> }, ..., overwrite })
â the canonical path Material.Create wraps anyway â binding the texture by
its name string.