Files
maze32/docs/OBSERVER_UI.md
T

1.9 KiB

Observer browser mode

Milestone 009 adds a password-free observer role to the same local browser application. The role is still authenticated by its temporary session token, but joining it does not request a player name or consume either player slot. At most four observer sessions are connected at once.

Projection and authorization

An observer renders only the server's observer view projection. That projection contains all maze cells, remaining objects, both player positions, inventories, effects, exit state, phase, and result. The browser does not simulate movements or infer updates. Each player status also reflects the server-owned WebSocket connection state. A complete projection establishes the server-approved static geometry on join, restoration, and match start. Subsequent bounded projections replace all dynamic player and object state while reusing only that authoritative geometry, avoiding a 1,024-cell retransmission after every move.

The observer screen contains no movement, start, or drop-key control. This is only presentation-level defense: the gateway also rejects and logs observer start, move, and drop_key attempts before they reach authoritative mutation. Disconnecting an observer changes only lobby presence and never pauses the game.

Viewport and navigation

At 1024 x 768 CSS pixels and above, the complete 32 x 32 default map is initially scaled to fit the available stage. The observer can zoom with the labelled buttons or mouse wheel and pan with pointer dragging. Zoom is bounded between 0.25 and 6 times the eight-pixel base cell size; the Вся карта control restores the calculated fit and centered position.

When either viewport dimension is below the supported minimum, the map and controls are hidden and the Russian message Нужен экран побольше explains the 1024 x 768 requirement. All assets remain local and use the shared retro-arcade visual language.