How firebirdrender/commodorepet_tank works
TANK! is a networked multiplayer tank battle. Players use the browser lobby to create or join a room, wait for an opponent, then enter the WASM game, which exchanges inputs and match state over WebSocket. The server manages rooms and connections, runs deterministic game simulation, and can launch bot opponents; clients render and control the game. README capabilities include lobby events, spectators, and bot modes. Wiring for some unsampled modules is based on documented responsibilities and filenames, so uncertain call links are omitted.
Main entry points: ws_handler.go WebSocket handler · game.go Game client · app.js Lobby UI · room_api.go Room API
Components 24
Lobby and rooms
- Lobby UI
web/app.js - Room API
server/room_api.go - Room hub
server/hub.go - Room state
server/room.go - Room events
server/room_api.go
Server runtime
- HTTP entry
cmd/server/main.go - WebSocket handler
server/ws_handler.go - Input validation
server/input_guard.go - Rejoin tokens
server/token_store.go - Match runtime
server/match.go - State deltas
server/delta.go - Bot manager
server/bot_manager.go
Game simulation
- Deterministic engine
engine/game.go - Board and entities
engine/board.go
Game clients and bots
- Browser game
cmd/client/main.go - Game client
client/game.go - Client networking
client/network.go - Rendering and input
client/renderer.go - Audio and effects
client/audio.go - Reference bot
cmd/bot-go/main.go - Bot strategy
cmd/bot-go/ai.go - Bot protocol SDK
bot-sdk-go/client.go
Other components
- Player
- Bot subprocess
Connections 26
- Player → Lobby UI: uses lobby
- Lobby UI → Room API: creates or joins
- Room API → Room hub: manages rooms
- Room API → Room state: updates seats
- Lobby UI → Room events: subscribes events
- Room events → Lobby UI: notifies status
- HTTP entry → Room API: registers routes
- HTTP entry → WebSocket handler: serves WebSocket
- WebSocket handler → Rejoin tokens: checks tokens
- WebSocket handler → Room hub: looks up room
- WebSocket handler → Input validation: validates input
- WebSocket handler → Match runtime: starts match
- Match runtime → Deterministic engine: advances simulation
- Deterministic engine → Board and entities: updates state
- Match runtime → State deltas: encodes updates
- Browser game → Game client: starts game
- Game client → Client networking: exchanges state
- Game client → Rendering and input: renders and reads controls
- Game client → Audio and effects: plays effects
- Client networking → WebSocket handler: WebSocket messages
- Bot manager → Room state: reserves bot seat
- Bot manager → Bot subprocess: spawns process
- Bot subprocess → Reference bot: runs executable
- Reference bot → Bot protocol SDK: uses protocol client
- Reference bot → Bot strategy: decides actions
- Bot protocol SDK → WebSocket handler: WebSocket messages