22bd43857c
2 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
22bd43857c |
Review pass: the room-specific bugs a shared FloorView was hiding
Three independent reviewers checked each new venue against its brief. No blockers, all three rooms genuinely distinct — but two of the findings were mine, in the file the layout authors were told not to touch. FloorView was still drawing two things at Voltage's coordinates: - The scan beams pivoted on a hardcoded (38,23) — Voltage's mirror ball. In The Royal that swept two beams across the empty middle of the pub, twenty-five tiles from that venue's dance floor. Now derived from the layout's own discoball, and a venue without one gets no beams, because the beams ARE the ball's light. - The resident DJ stood at a hardcoded (55.5, 22.5) — Voltage's booth, which in The Royal is the middle of the bistro. Now placed from the venue's own gear and stepped clear of `posts.decks`, so a player on a DJ shift is never standing inside him. The beat-bob had the same constant baked into it. Elevate's staffDj prop is dropped as a consequence: with a resident DJ derived per venue it would have made two DJs on the plinth, and three once the player took the shift. New invariant: a staff prop may not stand on a post tile. Elevate's bartender was on the exact tile the bar shift teleports the player to, so the shift would have been played from inside her. Caught by the rule, then fixed. `mirror` and `graffiti` kinds added. Elevate was standing BOTH its mirrors up as `poster3` (the author raised it as a contract request and stubbed it honestly), which would have hung the same torn gig poster in a marble bathroom and called it a mirror. ROOM's toilets get the graffiti its brief always asked for. The Royal: TAB screens moved onto the wall they belong on rather than floating mid-carpet, the trough given its own fluoro (the one fixture that room is known for was rendering unlit), the beer garden's dark middle band lit — 288 tiles on two lights left the gate everyone walks through in the dark — the out-of-order sign moved off the tile the queue stands on, and two comments corrected to describe what the code actually does. Also hardened the farm client: `_req` raised SystemExit, which is a BaseException, so `except Exception` in the batch's worker threads did not catch it and one stray 401 during a poll killed a 43-asset run after a single asset. It now raises a normal error and retries transient 401/429/5xx with backoff. Gate: lint clean, tsc clean, floor suite 271 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> |