In-game overlay
What it renders
Every marker layer the overlay paints, what data it comes from, and the visual style.
| Layer | Source | Visual |
|---|---|---|
| Self | state.team.members[0] from the relay | Green circle with white ring |
| Team | rest of state.team.members | Blue circle, dimmed when offline |
| Events | state.mapMarkers.markers (cargo / heli / chinook) | Orange circle with pulse ring |
| Deaths | MapNote rows with category: 'death' (auto-created by the detector) | Red cross, fades over 30 min |
| Tags | other MapNote rows | Triangle, colour from the tag's category |
| Train tunnels | /api/overlay/poi filtered monuments | Cyan diamond |
| Other POIs | same endpoint | Cyan square outline |
Live updates
The overlay holds one WebSocket against the relay at wss://.../v1?token=<jwt>. As events flow on the relay (team move, event appeared, death, etc), the overlay re-renders the canvas. Network latency is typically <100ms.
Coordinate system
The overlay normalises Rust+ world coordinates to its viewport using the server's map size (worldSize). Re-renders are device-pixel-ratio aware so the dots stay crisp on hi-dpi displays.
What it does NOT render
- Smart Switch / Smart Alarm icons — v1 keeps the overlay event-focused; device state lives in the dashboard.
- Vending machine markers — same reason.
- A full minimap base — the overlay is markers-on-blank-canvas by default. v2 will optionally pull the relay's normalised map tile.