# Quake / PlatPhorm Arena Full Context ## Purpose Quake is the canonical PlatPhormNews browser FPS arena. It owns human play, bot practice, active room discovery, match previews, local settings, real/degraded game stats, game event streams, signed webhook intake, and Quake-specific MCP/API operations. Quake is not Trace, MCP, Docs, Claws, Evals, BrowserOps, Sandbox, WebhookLab, AgentUI, Base, Monitor, Atlas, Sheets, or Decks. Those services are integrations. ## Current Counts - Active players: 0 - Live rooms: 0 - Visible servers: 0 - Recorded matches: 0 - Total frags from records: 0 - Bot profiles: 10 - Map catalog entries: 5 - Playable maps: 3 - Degraded maps: 2 - Game modes: 4 - Active weapons: 7 - Persistence mode: degraded-local - Database: degraded - Redis/session store: degraded Counts are exact for the current backend state. Empty state is valid and not replaced with synthetic activity. ## Game UX - First-run pointer-lock overlay explains movement, aim, fire, weapon switching, fullscreen, scoreboard, sprint, and jump. - Enter Arena creates a browser session. - Practice With Bots starts local AI practice. - Browse Servers shows only active browser sessions or protected registered servers, refreshes from /api/v1/servers so copied invite rooms can appear without a hard reload, and fetches public-safe roster details from /api/v1/servers/{id}. - Settings persist non-sensitive local preferences: desktop sensitivity, mobile aim sensitivity, volume, sound, arena hum, crosshair, FOV, FPS visibility, particle density, screen shake, player name, and bot count. - Mobile/tablet uses closeable touch controls, direct weapon-slot buttons with ammo labels, room/player/latency status, and invite copying while remaining honest about degraded multiplayer capability. - Multiplayer player state updates are throttled and deduplicated before POSTing to the session event endpoint. - FPS is local/browser-measured only: No global FPS value is advertised as live; users see their measured local FPS in-game. ## Game Catalog Playable status: - Public play: active - Local bot matches: active - Multiplayer: active when public browser sessions exist; empty server list means no visible live rooms - Durable persistence: degraded unless DATABASE_URL or Redis/KV platform storage is configured Maps: - q3dm17: Q3DM17 / The Longest Yard; status=active; playable=true; spawns=9; pickups=17; botWaypoints=20 - forge: The Forge; status=active; playable=true; spawns=11; pickups=17; botWaypoints=22 - iceworld: ICEWORLD / Frozen Crossing; status=active; playable=true; spawns=12; pickups=19; botWaypoints=28 - q3dm6: Q3DM6 / The Camping Grounds; status=degraded; playable=false; spawns=0; pickups=0; botWaypoints=0; degradedReason=Q3DM6 is listed for map/mode discovery only; no playable geometry, pickups, or bot waypoints are shipped in Phase 2. - q3tourney2: Q3TOURNEY2 / The Proving Grounds; status=degraded; playable=false; spawns=0; pickups=0; botWaypoints=0; degradedReason=Q3TOURNEY2 is listed for map/mode discovery only; no playable geometry, pickups, or bot waypoints are shipped in Phase 2. Modes: - ffa: Free For All; status=active; playable=true; playerModel=session - duel: Duel; status=local; playable=true; playerModel=session; degradedReason=Server-authoritative duel ranking is not enabled until protected match recording is backed by durable persistence. - tdm: Team Deathmatch; status=degraded; playable=false; playerModel=future-server-authoritative; degradedReason=Team spawn, team score, and server-authoritative team validation are not complete in Phase 2. - ctf: Capture The Flag; status=local; playable=true; playerModel=session; degradedReason=Shared-room CTF synchronization is still browser-local until server-authoritative objective state ships. Weapons: - gauntlet: Gauntlet; behavior=melee; damage=50; fireRateMs=400; ammo=none; status=active - machinegun: Machine Gun; behavior=hitscan; damage=7; fireRateMs=100; ammo=bullets; status=active - shotgun: Shotgun; behavior=hitscan; damage=10; fireRateMs=1000; ammo=shells; status=active - rocketlauncher: Rocket Launcher; behavior=projectile; damage=100; fireRateMs=800; ammo=rockets; status=active - railgun: Railgun; behavior=hitscan; damage=80; fireRateMs=1500; ammo=slugs; status=active - lightning: Lightning Gun; behavior=beam; damage=8; fireRateMs=50; ammo=cells; status=active - plasmagun: Plasma Gun; behavior=projectile; damage=20; fireRateMs=100; ammo=plasma; status=active ## Public API Public reads include health, server list, match list, leaderboard, stats, maps, modes, weapons, game manifest/config, local player schema, performance status, model scaffold status, bots, events, API docs, discovery files, and MCP metadata/introspection. Protected mutations require PLATPHORM_API_KEY via Authorization Bearer or X-PlatPhorm-API-Key. Protected actions include server registration, heartbeats, deregistration, official/local-degraded match recording, protected event operations, and report generation. ## MCP Tools - list_servers: List real active Quake browser sessions and protected registered servers. Returns empty/degraded state when no live rooms exist. - get_server: Get one server or session by id with real roster when available. - register_server: Protected server registration. Requires PLATPHORM_API_KEY via MCP request headers in production clients. - update_server: Protected server status or heartbeat update. - deregister_server: Protected server deregistration. - list_matches: List protected recorded match history. Does not synthesize fake matches. - get_match: Get one match record by id. - create_match: Create a protected match draft with a browser play URL. - join_match: Return the browser join URL for a match. - record_match: Protected match result recording. Results are official only when durable persistence is configured. - get_leaderboard: Get leaderboard entries derived from real recorded matches. - get_global_stats: Get global Quake stats derived from active sessions and recorded matches. - list_maps: List playable and honestly degraded Quake map catalog entries. - get_map: Get one map catalog entry, including playable/degraded state. - list_modes: List Quake modes with playable/local/degraded truth labels. - list_weapons: List shipped weapon behavior, ammo, damage, and telemetry metadata. - get_game_manifest: Return the public Quake game manifest and exact capability counts. - get_performance_status: Return public performance capability state and client-measured FPS policy. - validate_game_routes: Return the public route inventory used for sitemap/dead-link validation. - validate_playable_arena: Report playable maps, local bot support, and degraded map/mode truth state. - get_health: Return the public Quake health summary payload. - get_info: Return public Quake service identity, auth policy, and discovery links. - list_bots: List local AI bot profiles available for browser practice. - start_bot_practice: Start a local bot practice session and return the play URL. - record_practice_result: Record local-only practice result state. - list_game_events: List public-safe Quake event outbox entries. - receive_game_webhook: Receive a game webhook event into protected event state. - get_route_compliance: Return Quake route compliance and degraded capability summary. - get_discovery_compliance: Return discovery file and sitemap compliance state. - create_docs_report: Return a docs report payload for docs.platphormnews.com. External publishing is degraded unless invoked by a protected platform job. - create_sheet_report: Return a Sheets-ready structured report payload. External sheet creation is degraded unless invoked by a protected platform job. - create_deck_summary: Return a Decks-ready executive summary payload. External deck creation is degraded unless invoked by a protected platform job. ## MCP Resources - quake://servers - quake://server/{id} - quake://matches - quake://match/{id} - quake://leaderboard - quake://stats - quake://maps - quake://map/{id} - quake://modes - quake://weapons - quake://game-manifest - quake://performance - quake://faq - quake://bots - quake://events - quake://settings - quake://openapi - quake://llms - quake://trust-policy ## MCP Prompts - recommend_quake_server: Quake prompt: recommend quake server - explain_quake_mode: Quake prompt: explain quake mode - explain_quake_weapon: Quake prompt: explain quake weapon - summarize_match: Quake prompt: summarize match - generate_bot_tuning_notes: Quake prompt: generate bot tuning notes - create_game_testing_plan: Quake prompt: create game testing plan - create_quake_report: Quake prompt: create quake report - human_machine_quake_handoff: Quake prompt: human machine quake handoff ## Discovery - OpenAPI JSON: /api/docs - OpenAPI YAML: /openapi.yaml - OpenAPI JSON route: /openapi.json - LLM summary: /llms.txt - LLM index: /llms-index.json - RSS: /rss.xml - Atom: /feed.xml - Sitemap: /sitemap.xml - Main sitemap: /sitemap-main.xml - Sitemap index: /sitemap-index.xml - Trust: /.well-known/trust.json - Agents: /.well-known/agents.json - MCP: /.well-known/mcp.json - Games directory: https://games.platphormnews.com ## Degraded Persistence Policy When canonical database persistence is unavailable, Quake still plays locally and supports browser sessions and bot practice. Official server registry, match history, and leaderboard records are marked local/degraded or empty. PLATPHORM_API_KEY is never stored in browser persistence, traces, discovery files, screenshots, RSS, sitemap, or public UI.