feat(observer): add observer mode and disconnect recovery
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user