Files
CosmicClash/TODO.md
T
Josh Creek 4507b6dc1b feat: add main-menu difficulty picker for Match mode
Replace the raw checkpoint dropdown with curated Easy/Medium/Hard presets
that drive GameSettings' bot model/reaction_ticks/action_noise overrides.
Move raw-checkpoint testing and Spectate mode into a dev-only section
hidden via OS.is_debug_build() so they disappear from release exports.
2026-08-03 19:11:13 +01:00

3.1 KiB

TODO

Deferred work, in rough priority order. The current architecture (ShipAction/ShipController seam, Arena/GameMode split, code-driven spawning, group-tagged ball/goals) was chosen specifically so these bolt on without rework.

AI opponent (reinforcement learning)

The training pipeline is built — see TRAINING.md (self-play PPO via the vendored godot_rl_agents bridge, JSON policy export, in-game GDScript inference, eval ladder). Remaining:

  • Promote a first tier: curric-s6-unmask copied into Game/bots/promoted/easy.json as the shipped "easy" bot (see TRAINING.md's "Promoted bots" section) — match.tscn/spectate.tscn now default there instead of run05.json.
  • Long training runs on the Linux/3090 box to produce actually-good bots; promote further checkpoints into Game/bots/promoted/ as medium/hard tiers once they clear easy.json in evaluate.py.
  • Staged curriculum (score → defend → avoid draws → full mechanics) via train.py's --opponent-mode/--draw-penalty/--attack-goal-bias/--vertical-ramp/--pitch-roll-ramp flags — see TRAINING.md's "Curriculum training" section. --opponent-mode=frozen is a single-fixed-model slice of the league idea below, not the full sampled pool.
  • Frozen-opponent league: train the live policy against a pool of past exported checkpoints, sampled per-episode (today's --opponent-mode=frozen only supports one fixed model per run) to prevent self-play strategy collapse on long runs.
  • Richer state setter / curriculum: aerial states, wall plays, rebound scenarios as skill grows (beyond the score/defend/draw staging already in place).
  • Main-menu difficulty picker: Easy/Medium/Hard presets in main_menu.gd set bot_model_path/bot_reaction_ticks/bot_action_noise via GameSettings. Raw-checkpoint testing and Spectate mode moved into a DevSection hidden outside debug builds. All three tiers currently reuse promoted/easy.json with different handicaps until medium/hard checkpoints are promoted.

Multiplayer (long term)

  • RemoteShipController extends ShipController — feeds replicated ShipActions from a network peer into the local ship simulation.
  • Networked GameMode subclass: per-peer ship spawning (MultiplayerSpawner or custom), authoritative server for ball/score.
  • C# backend / online servers per README roadmap (not started).
  • Possible v0.2 split-screen: spawn one ship_camera_rig + viewport per local player (camera is already outside the ship scene to allow this).

General

  • GameSettings autoload (scripts/game_settings.gd) added for exactly the cross-scene case this item anticipated — passing menu selections (bot/difficulty, spectate matchup) into match/spectate modes. Still the only autoload; keep it that way unless another cross-scene need shows up.
  • More arenas: arena_01.tscn is the template — an arena is a setting (sky, lighting, decoration) + two team-tagged goals on the standard goal lines + spawn markers + an instance of the shared objects/arena_boundary.tscn, with no rules or state. All arenas share the standard play volume defined by ArenaBoundary's constants.