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:
@@ -2,7 +2,7 @@ import enum
|
||||
import uuid
|
||||
from datetime import datetime
|
||||
|
||||
from sqlalchemy import DateTime, Float, ForeignKey, Integer, String
|
||||
from sqlalchemy import BigInteger, DateTime, Float, ForeignKey, Integer, String
|
||||
from sqlalchemy import Enum as SAEnum
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
||||
|
||||
@@ -38,6 +38,13 @@ class Player(Base):
|
||||
kills: Mapped[int] = mapped_column(Integer, default=0)
|
||||
deaths: Mapped[int] = mapped_column(Integer, default=0)
|
||||
hours_played: Mapped[float] = mapped_column(Float, default=0.0)
|
||||
# In-game currency, see overview/onfoot.md -- named RAM, stored as a
|
||||
# single integer count of kilobytes (the smallest denomination); the
|
||||
# client formats it up into KB/MB/GB/TB (1000 per step, not 1024) for
|
||||
# display. BigInteger since a long-lived player's total is expected to
|
||||
# climb well past 32-bit Integer's ~2.1 billion ceiling (2.1 billion KB
|
||||
# is only ~2.1 TB).
|
||||
ram_kb: Mapped[int] = mapped_column(BigInteger, default=0)
|
||||
created_at: Mapped[datetime] = mapped_column(DateTime, default=datetime.utcnow)
|
||||
|
||||
|
||||
@@ -57,6 +64,16 @@ class GameServer(Base):
|
||||
# once that probe answers.
|
||||
player_count: Mapped[int] = mapped_column(Integer, default=0)
|
||||
max_players: Mapped[int] = mapped_column(Integer, default=50)
|
||||
# The actual in-match GameMode id (e.g. "team_deathmatch") and map
|
||||
# display name (e.g. "Sector Alpha") this server is running -- distinct
|
||||
# from `mode` above, which is only the matchmaking queue mode ("casual").
|
||||
# Plain strings, not a Mode-style enum: the set of GameMode ids lives in
|
||||
# the Godot client (spacewar/world/game_modes/, world.gd's MAPS), which
|
||||
# this API has no reason to duplicate/validate against. Reported by the
|
||||
# hosting server on every register/heartbeat call (see
|
||||
# spacewar/autoload/network_manager.gd's host_server()).
|
||||
game_mode: Mapped[str] = mapped_column(String(64), default="team_deathmatch")
|
||||
map_name: Mapped[str] = mapped_column(String(64), default="Sector Alpha")
|
||||
|
||||
|
||||
class Match(Base):
|
||||
|
||||
Reference in New Issue
Block a user