mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-10 16:04:04 +00:00
401d882ff0
assets/textures/planet_surface.png was byte-identical to and unused in favor of assets/models/nebula_planet_planet_surface.png, the sidecar Godot's glTF importer actually extracted from nebula_planet.glb and uses at runtime. Deleted the orphan (+ its .import) and stopped gen_planet_surface.py from writing it. Also measured nebula_dust.gdshader's per-fragment depth-texture sample cost (~0.07ms/frame at 500 particles, within noise) -- negligible, so no budgeting concern for further particle work.
3.6 KiB
3.6 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:
- 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. - 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).
Presentation / AAA polish
The largest gap between this and a AAA-feeling product is presentation, not code. Sequenced after the above for pragmatic reasons, but this is the highest impact per hour.
- Audio — there is none. Zero sound files, zero
AudioStreamPlayernodes, no bus layout. Needs: engine hum pitched to throttle, turbo whoosh, ball impacts scaled by collision impulse, wall scrapes, goal explosion, crowd bed, UI clicks, countdown beeps, music. Can be driven offShip's existing telemetry signals. - SSAO/SSIL in the arena Environments — cheapest single perceived-quality win available; grounds the ships against the deck and gives the fillets and goal recesses real depth.
- VFX on anything that moves:
EngineGlowL/Rare static meshes that don't respond to throttle. No thruster plume, turbo flame, ball trail, impact sparks or goal burst.arena_02is the only scene with any particles at all. - Impact feedback — screen shake, hit-stop, flash, controller rumble on ball contact.
- Camera feel in
ship_camera.gd— fixed distance/height/FOV today. Speed-based FOV widening, turbo kick, impact shake. - Goal celebration sequence: today it's a
print()and a label scale-pop. Wants an explosion, team-tinted screen flash, camera cut, slow-mo, title card.HUDController'sResultOverlayanimation is a reasonable template. - Local lighting / LightmapGI bake — two directional lights and low ambient, no local lights anywhere.
arena_deck.gdshader'shull_filluniform is explicitly a "stand-in for bounce light", i.e. the shader is compensating for lighting that isn't there. The arena is fully static, so a bake is viable; retirehull_fillafterwards. - Dress
arena_03— itsDecorationnode is empty, whilearena_02has stations, debris, a planet and volumetric dust. - Custom font + a real
Themeresource for the HUD. The procedural instruments are well-engineered, butThemeDB.fallback_fontat 10-13 px reads as a debug overlay. - Post-processing beyond glow: DoF, motion blur, vignette, chromatic aberration on turbo.
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).