Contract: src/core/worlds.ts (three pocket worlds above the booth walls, portal/entry/exit anchors, stamp count) + additive world/stamp bus events. Briefs: SIDEB overview + WORLDS / MACHINES / SOCIAL(ambience) / AUDIO lanes, rescoped around the already-shipped SOCIAL_RESET (emotes, reset ritual, avatars) and first-five-minutes (heartbeat, beacons, flythrough) phases. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
56 lines
3.1 KiB
Markdown
56 lines
3.1 KiB
Markdown
# SIDE B — Lane W: the three pockets (worldgen)
|
||
|
||
Read `docs/briefs/SIDEB.md` first. You own **`src/worldgen/worlds/**`** (new)
|
||
plus small additive edits in `src/worldgen/buildBooth.ts` (portal dressing +
|
||
calling your builders). Do not move any existing anchor or LAYOUT position.
|
||
|
||
## W1. Portal dressing at the crate (buildBooth additive)
|
||
|
||
The three portal discs (`WORLD_DEFS[k].portalDisc`, r=12, already built by
|
||
buildCrate) get: a 1-voxel `led_*` ring inlay on the crate floor around
|
||
`portalStand` (accent-coloured: acid=led_green, dub=led_amber, disco=led_blue —
|
||
approximate accents with existing led blocks), and a small marquee of 2–3
|
||
accent led voxels on the disc rim. Subtle — the crate stays dim; the rings are
|
||
the "these three are special" tell.
|
||
|
||
## W2. Three pocket rooms (src/worldgen/worlds/)
|
||
|
||
One module per world + an index that exposes `buildWorlds(w: IVoxelWorld)`
|
||
called once from buildBooth (after everything else; same seed discipline —
|
||
use `mulberry32`, never Math.random). Each pocket: fully enclosed shell at
|
||
`pocketMin..pocketMax` (outer skin `matte_black` so undersides read as shadow
|
||
from the booth; NO light leaks — every interior emissive fully enclosed),
|
||
floor/walls/ceiling themed inside, interior height ~14.
|
||
|
||
- **ACID WAREHOUSE** (x 20..84): raw concrete feel — `steel_grey`/`brushed_alu`
|
||
floor slab variants, breeze-block wall rhythm from `ply_edge`, pillars,
|
||
`led_green` cable runs snaking wall→floor→three knob pedestals (Lane M places
|
||
machines AT `entry`-relative positions listed in their brief — you build the
|
||
pedestals: three 3×3×3 `matte_black` plinths at z 44 / 52 / 60 along x=52,
|
||
1-voxel green pip on each). A strobe rail of `strobe_dot` on the ceiling.
|
||
- **DUB CHAMBER** (x 192..256): deep space — `vinyl_black` walls with sparse
|
||
`led_amber` embers, a central chasm (floor drops 4 at x 210..238) crossed by
|
||
a 3-wide wobbling **spring-tank bridge** footprint: you lay the STATIC deck
|
||
(`chrome` 3×24 along z at x 224); Lane M overlays the moving collider. A big
|
||
horn-speaker cone of stacked `speaker_mesh` rings on the far wall.
|
||
- **DISCO LOFT** (x 364..428): warm parquet — `plywood`/`ply_edge` herringbone
|
||
floor with a 4×4 grid of 5×5 **dance tiles** (flush, alternating
|
||
`label_cream`/`rubber` borders, centre voxel `led_*` per tile — Lane M lights
|
||
them; you place the tile grid centred on [396, 143, 52..76]), a mirrorball of
|
||
`chrome`+`glass` voxels hanging centre-ceiling, `led_red`/`led_blue` wall
|
||
wash strips.
|
||
|
||
Exit pads: 3×3 `rca_gold` pad flush at each `exitPad`, one accent led pip.
|
||
|
||
## W3. Budgets & proof
|
||
|
||
Deterministic (two builds byte-identical); booth build < 900 ms total; chunk
|
||
meshes < 700; zero visibility from inside the booth (fly the cine camera
|
||
around the booth at night — no glow leaks) AND from the first-visit
|
||
flythrough path (commit caac3da rides the cine override high over the booth —
|
||
run it and confirm the pocket shells read as, at most, faint black slabs in
|
||
the dark). Update `worldgenDemo` validation
|
||
with pocket assertions (shell sealed, entry/exit air, pedestals present).
|
||
Handoff: `docs/SIDEB_W_handoff.md`. Dev port: use launch config
|
||
`turncraft-laneC-verify` (5212).
|