Skip to content

lobby: site half of muchq/MoonBase#1554 — room geometry, deja on the walls, plaza chat as art #326

Description

@aaylward

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions