4ee4cf343b
2 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
74cbd71ad3 |
Materials, and the floor-cache bug that would have eaten the promotion
Two things, one of them a real bug. THE BUG: bakeTiles baked to a single global 'floor:tiles' and early-returned if that key existed. Textures outlive a scene, so the first venue you played baked the floor for every venue after it — you would survive a week at The Royal, get promoted, walk into Voltage and still be standing on the pub's carpet. It only shows on promotion, which is exactly the moment the venue ladder is supposed to pay off, and never in a dev route because those reload the page. The baked texture is now keyed per venue; verified by switching venues inside one session and watching the concrete arrive. MATERIALS: FloorLayout.materials names a generated plate per tile kind and the baker stamps it TINTED to the palette colour. The plate carries grain, the palette keeps hue — an untinted photo-real plate blows straight past the brightness band the whole room was tuned in, and darkness is the mechanic. Plates are 16x16, the game's own tile, because at that size "carpet" is structured noise, which is also what pub carpet looks like from head height. Ten of them: carpet, concrete, deck, parquet, looTile, paving, plaster, brick, timber, steel. No plate named, or art not landed, falls back to flat colour exactly as before. Wave 2 filler for the two spaces the review found genuinely empty — The Royal's central carpet (four props across ~500 tiles) and ROOM's east hall (~23% of its interior with no lights and three props) — plus the kit every real room has and no game room does: fire extinguishers, exit signs, CCTV, bins, a notice board, ceiling fans. Voltage gets the same pass; being the reference room is how it quietly missed the last one. The invariant caught a duplicate prop id I introduced while placing these, which is what it is for. Also relaxed one ROOM assertion that keyed on array order: it checked that the FIRST sodium light stands over the loading dock, which broke the moment the east hall legitimately burned the same colour. It now checks that one of them does. Gate: lint clean, tsc clean, 821 tests passing. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |
||
|
|
4caa901df2 |
Four venues, four rooms: the ladder stops being one map with different numbers
The venue ladder has always listed four venues in data/venues.ts, but they shared ONE floor map and differed only by difficulty knobs — so a promotion you survived a whole week for looked exactly like the room you had just left. - venueMap.ts grows a FloorLayout contract (map + props + lights + posts + probes + palette) and the newGrid() primitives every room is painted with. Voltage stays IN venueMap rather than moving to layouts/, so the new rooms can import primitives from it without closing an import cycle. - Three new rooms in src/scenes/floor/layouts/: The Royal (horseshoe public bar, pool room, pokies corner, trough + two cubicles, a beer garden that is plainly the nicest room in the pub, and a DJ "corner" that is a folding table because this pub never built a booth), Elevate (open-air rooftop — most of the grid is sky, the DJ is on an unwalled plinth, you arrive by lift), ROOM (concrete warehouse, pillars you path around, central booth, loading-dock smoking area, twelve lights in the whole venue). - Nothing about a room is a module singleton any more. FloorView, sweep and FloorDemoScene take the layout; the door picks its street plate by venue id. - FloorDemoScene's six hardcoded station spots (TAPS_SPOT, DECKS_SPOT, ...) were Voltage's tile coordinates. At four venues a hardcoded (47,3) puts the bar shift inside The Royal's pool room, so each layout now names its own stations and the scene reads them from there. - tests/floor/layoutInvariants.ts is an executable rulebook: perimeter holds, every walkable tile reachable from the entry, anchors on walkable ground, posts not sealed (a post on a sealed tile freezes the player for the night — that has shipped twice), probes reachable, props on-grid. Proved against Voltage BEFORE the new rooms were authored against it. Dev route #floor:<venueId> boots the floor straight into one room, because otherwise seeing ROOM means surviving three weeks of the ladder. Gate: lint clean, build clean, 821 tests passing (was 784). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> |