Add game mode categories, character creation, on-foot ship/hub mode, RAM currency, and in-ship navigation

Bundles several sessions' worth of previously uncommitted work: map
categories with Domination/Conquest/King of the Hill mode stubs and a
server-list mode filter; a procedurally-drawn character-creation screen
replacing the old callsign-only PROFILE overlay; the on-foot groundwork
(walkable station hub, ship interior, character controller) plus the RAM
currency backend; and today's addition, an in-ship Helldivers-2-style
navigation table that QUICK PLAY's queue/connect flow and the Belters/
Military hub travel now live behind, with hub-and-ship return paths and a
context-aware pause menu usable both in-match and inside the ship.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-19 12:30:22 -04:00
parent be5c41f82f
commit d3bed34c6c
124 changed files with 3347 additions and 159 deletions
+22
View File
@@ -106,6 +106,28 @@ add them to a database that already has a `players` table from before this
change. Run `docker compose down -v` once to pick them up on an existing local
dev database.
## RAM (in-game currency)
See `overview/onfoot.md` for the full design — this is just the backend
piece. `Player.ram_kb` is a single `BigInteger` balance, always stored and
transmitted as kilobytes (the smallest denomination); the Godot client
(`spacewar/autoload/currency.gd`) formats it up into KB/MB/GB/TB for
display, 1000 per step. 100% separate from real-money monetization
(`overview/money.md`) — this is purely an in-game economy.
`POST /matches/report` now also credits RAM to every reported player:
`ram_payout_participation_kb` just for being in the match, plus
`ram_payout_per_kill_kb` per kill, plus `ram_payout_win_bonus_kb` if they
won (all three tunable in `app/config.py`, currently 50/15/200 — placeholder
numbers, not balanced against anything). `GET /stats/{callsign}` returns the
running total as `ram_kb`.
There is no spend endpoint yet — nothing in the game can spend RAM until the
ship interior/hubs from `overview/onfoot.md` exist. `Player.ram_kb` is a new
column on an existing table, same no-migrations caveat as above — covered by
the same `docker compose down -v` if you're picking this up on an existing
local dev database.
## Client integration
The Godot client is wired up (`spacewar/autoload/matchmaking_client.gd`):