The site half of muchq/MoonBase#1554 (a brainstorm, not a spec). The hub half lives there; this tracks what /games would render. Nothing here is ordered, and every item is independent.
What exists
- The world is a hand-written WebGL2 ray tracer:
useThoughtsGame.ts drives shaders.ts over one canvas, a flat ground plane bounded by GAME_CONFIG, spheres/cubes/pyramids for players, a minimap, and an AudioSystem behind the sound toggle.
- The lobby hands the same renderer hub updates through
HubWorldLink → WorldSync, which dispatches on the LobbyUpdate member (worldState, playerJoined, playerMoved, …) and drops members it does not know. So a new hub event is harmless until the site handles it.
- Room chat is
RoomChat in the lobby panel.
Per-room geometry
A room could pick its surface: the current grid; the grid with infinitely tall glass walls at the boundary; a torus you cruise around on; the inner wall of a sphere. That is a shader change per geometry (the ray tracer's ground intersection and the boundary clamp), plus the minimap projection and the movement model, since "forward" on a torus is not "forward" on a plane. The hub carries the room's geometry once it has one (MoonBase side); until then, a client-side choice is enough to see whether any of these are fun.
deja on the walls
Blocked on muchq/MoonBase#1150 (deja does not exist yet) and the hub-side tape event in muchq/MoonBase#1554. Shared world state: the hub emits one LobbyEvent per deja event, with seq, context chips, both predictors' top guesses, the actual token, and the verdict, and picks the splat point from seq so everyone sees the same thing. Late joiners get the last N in worldState.
Site work once that lands:
WorldSync learns the new member and keeps a bounded ring of tape events in GameState.
- The walls (whatever the room's geometry) render the predictions high up and large; an arriving request zooms in and splats against the boundary at the hub's point; the actual token appears beside the prediction so the gap reads at a glance. Verdict colors as on the deja page: green top guess, amber top-5, red anomaly, violet novel.
- No SSE subscription from the browser. The hub is the only reader of deja.
Polish
- WebGL touches and more detail in the world.
- Soundscape options beyond the current arpeggio: per-room ambience, and a sound when a request splats.
Plaza chat as art
In the plaza (the unroomed world), chat could be thrown onto a jumbotron or a factory wall instead of, or as well as, the panel. Open question whether anonymous visitors should get chat at all; if they do, an artsier rendering is an option: randomly swap occasional characters for glyphs from other alphabets so plaza chat reads as ambient texture rather than a message board. Rooms keep RoomChat as it is.
The site half of muchq/MoonBase#1554 (a brainstorm, not a spec). The hub half lives there; this tracks what
/gameswould render. Nothing here is ordered, and every item is independent.What exists
useThoughtsGame.tsdrivesshaders.tsover one canvas, a flat ground plane bounded byGAME_CONFIG, spheres/cubes/pyramids for players, a minimap, and anAudioSystembehind the sound toggle.HubWorldLink→WorldSync, which dispatches on theLobbyUpdatemember (worldState,playerJoined,playerMoved, …) and drops members it does not know. So a new hub event is harmless until the site handles it.RoomChatin the lobby panel.Per-room geometry
A room could pick its surface: the current grid; the grid with infinitely tall glass walls at the boundary; a torus you cruise around on; the inner wall of a sphere. That is a shader change per geometry (the ray tracer's ground intersection and the boundary clamp), plus the minimap projection and the movement model, since "forward" on a torus is not "forward" on a plane. The hub carries the room's geometry once it has one (MoonBase side); until then, a client-side choice is enough to see whether any of these are fun.
deja on the walls
Blocked on muchq/MoonBase#1150 (deja does not exist yet) and the hub-side tape event in muchq/MoonBase#1554. Shared world state: the hub emits one
LobbyEventper deja event, withseq, context chips, both predictors' top guesses, the actual token, and the verdict, and picks the splat point fromseqso everyone sees the same thing. Late joiners get the last N inworldState.Site work once that lands:
WorldSynclearns the new member and keeps a bounded ring of tape events inGameState.Polish
Plaza chat as art
In the plaza (the unroomed world), chat could be thrown onto a jumbotron or a factory wall instead of, or as well as, the panel. Open question whether anonymous visitors should get chat at all; if they do, an artsier rendering is an option: randomly swap occasional characters for glyphs from other alphabets so plaza chat reads as ambient texture rather than a message board. Rooms keep
RoomChatas it is.