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 an 8,192-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 128 x 64 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.