mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-10 16:04:04 +00:00
3.3 KiB
3.3 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-unmaskcopied intoGame/bots/promoted/easy.jsonas the shipped "easy" bot (see TRAINING.md's "Promoted bots" section) —match.tscn/spectate.tscnnow default there instead ofrun05.json. - Long training runs on the Linux/3090 box to produce actually-good bots; promote further checkpoints into
Game/bots/promoted/asmedium/hardtiers once they cleareasy.jsoninevaluate.py. - Staged curriculum (score → defend → avoid draws → full mechanics) via
train.py's--opponent-mode/--draw-penalty/--attack-goal-bias/--allow-vertical/--allow-pitch-rollflags — see TRAINING.md's "Curriculum training" section.--opponent-mode=frozenis 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=frozenonly 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 (Match already takes
bot_model_path/bot_reaction_ticks/bot_action_noiseexports). - Optional: exported headless Linux build for faster parallel training instances (train.py currently runs the project from source, which is fine but re-parses scripts per instance).
Match mode polish
- Kickoff countdown (3-2-1) before play starts and after each goal, instead of instant reset.
- HUD scoreboard widget consuming the existing
score_changedsignal. - Results screen on timer expiry (winner, final score) instead of dumping straight back to the main menu.
- Overtime / golden-goal rule on a draw.
Multiplayer (long term)
RemoteShipController extends ShipController— feeds replicatedShipActions from a network peer into the local ship simulation.- Networked
GameModesubclass: 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
- No autoloads yet by design — add a singleton only when cross-scene state is actually needed (e.g. passing match settings/results between menu, match, and results screens).
- More arenas:
arena_01.tscnis 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 sharedobjects/arena_boundary.tscn, with no rules or state. All arenas share the standard play volume defined byArenaBoundary's constants.