Commit Graph

34 Commits

Author SHA1 Message Date
Josh Creek e62d844c1d fix(render): drop SDFGI, add fill lights and enable debanding
SDFGI ran with default cascades in a volume that was almost entirely
transparent, so its low-resolution probes had little solid geometry to
capture and contributed blotching across large flat surfaces. With the
boundary now an opaque deck plus an unshaded additive field, it earns
nothing, and the existing ReflectionProbe and ambient carry the lighting.

Each arena also gains a shadowless fill light opposite its key light so the
deck is not lit from a single direction, and passes its own tint through to
the boundary's containment field so the three arenas read differently.

use_debanding was absent. Glow runs at hdr_scale 2.0 with adjustment_contrast
above 1.0, which amplifies 8-bit quantisation on exactly the kind of smooth
gradients the new shell is made of.

The remaining project.godot churn is Godot's own key reordering on save.
2026-08-04 13:36:30 +01:00
Josh Creek df3e168b31 feat(arena): add elevated-goal arena variants
Each of the three arenas gains an ELEVATED sibling scene that inherits the
base arena and overrides the boundary's goal_mode, the two goal transforms
and the ship spawns, so the goal sits at mid-wall height instead of flush
with the deck. Registered in ArenaRegistry alongside the floor-level arenas,
plus a training_elevated scene for self-play on them.

TrainingMode reads the arena's goal_mode once in _start() and widens the
ball-placement height range to match the goal's real position; on FLOOR
arenas the bound is a no-op, so floor-level training is unchanged. It is read
in _start() rather than _ready() because TrainingMode has no _ready()
override and GameMode._ready() is what discovers the arena first.

Policies trained against floor-level goals are not expected to score on an
elevated one, so the two are kept as separate arenas rather than a variant of
the same entry.
2026-08-04 13:36:19 +01:00
Josh Creek 6f5ce488a9 feat: lit particle shader for nebula dust weather effect
Replace NebulaDust's flat unshaded glow material with a custom
ShaderMaterial: a fake per-pixel puff normal on the billboarded quad
feeds a light() override so motes catch the directional light and a
nebula-core color bias, alpha gets a depth-texture soft-particle fade
so motes no longer hard-clip through boundary/decoration geometry,
and a per-particle hash adds subtle sparkle.
2026-08-04 07:42:34 +01:00
Josh Creek 50c2014361 feat: enable SDFGI/reflection probes and fresnel glass boundary
Adds sdfgi_enabled and a ReflectionProbe to all three arenas' Environment
setup so surfaces get real bounce lighting/reflections instead of flat
ambient. Converts arena_boundary.tscn's shared glass field material from
unshaded to a shaded, rim-lit material so it reads as glass (dim face-on,
highlighted at grazing angles) rather than a flat tinted overlay.
2026-08-03 21:29:59 +01:00
Josh Creek 3fdf270aa9 feat: add post-processing pass and video settings menu
Enable glow/bloom, color adjustments, and MSAA+FXAA across all three
arenas so emissive ship/station accents actually bleed light and edges
read cleanly. Expose the player-facing knobs (anti-aliasing mode, glow
intensity, brightness) through a new Settings screen off the main menu,
persisted via a VideoSettings autoload that scales each arena's own
tuned Environment values on load rather than overwriting them.
2026-08-03 19:53:56 +01:00
Josh Creek 171cd4a840 feat: add Nebula and Asteroid Field arenas
Introduce arena_02 (Nebula) and arena_03 (Asteroid Field) alongside
arena_01, listed in a new ArenaRegistry (scripts/arena_registry.gd) as
the single source of truth for available arenas. Free Play lets the
player pick an arena from the main menu; Match/Spectate each pick one
at random per session; Training keeps its own fixed arena_01.

Nebula gets an RL-style visual treatment: a near-invisible glass
boundary material shared by all arenas, a baked equirect nebula sky
texture, a drifting-dust particle system, and a Blender-modeled
station/debris/planet decoration set. GameMode gains a
_get_arena_scene_path() hook so modes can instantiate their arena in
code instead of hardcoding it in the scene.
2026-08-03 19:11:13 +01:00
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
Josh Creek 09ea8d6fbc feat(*): Style the results screen and dock the heading tape under the scoreboard 2026-07-28 19:32:40 +01:00
Josh Creek a9b7b450d5 feat(*): Redesign HUD scoreboard as a single timer/score/team banner 2026-07-28 19:24:40 +01:00
Josh Creek 93f90ca6de feat(*): Add 3-2-1 kickoff countdown before play and after goals 2026-07-28 19:11:36 +01:00
Josh Creek 580222c139 feat(*): Promote curric-s6-unmask as the shipped "easy" bot 2026-07-24 09:18:53 +01:00
Josh Creek 3457d4ca84 feat(*): Add rounded arena boundaries and reward shaping to curb corner-camping 2026-07-20 08:20:33 +01:00
Josh Creek 240e362f2f feat(*): Add bot selection, score HUD, and winner reveal to matches, replace HUD text with aircraft-style flight instruments, and fix camera judder 2026-07-20 07:12:09 +01:00
Josh Creek 4e2d406aa2 chore(*): Remove run03 artifacts trained against the floor-taxed reward 2026-07-19 15:35:55 +01:00
Josh Creek 7777280062 feat(*): Exempt the floor from the wall-contact penalty, add a tilt penalty for non-upright flight, and double velocity-to-ball shaping 2026-07-19 15:34:34 +01:00
Josh Creek 772f98b7fe feat(*): Fix exported-policy action order to gymnasium's sorted-key layout, add wall-contact penalty and stronger ball-touch reward, and wire Spectate to run01 vs run02 2026-07-19 13:21:14 +01:00
Josh Creek 07217c3517 feat(*): Add bot-vs-bot Spectate mode with main-menu entry, entropy-control flags (--ent-coef, --reset-std) for resumed training runs, and a Linux/3090 remote-training guide (TRAINING_LINUX.md) 2026-07-19 10:10:32 +01:00
Josh Creek 379ef9910e feat(*): Replace the test terrain arena with an enclosed standard-size space-platform arena (shared ArenaBoundary floor/walls/ceiling scene, starfield sky, ball CCD) and derive TrainingMode placement bounds from it, dropping the out-of-bounds reward guard 2026-07-18 20:18:03 +01:00
Josh Creek 85f96eb15e feat(*): Add self-play RL training pipeline with PPO trainer, in-game GDScript policy inference, and bot opponent support in Match mode 2026-07-18 19:32:51 +01:00
Josh Creek 328831df1f refactor(*): Restructure game into reusable Arena/GameMode architecture with controller-driven ships, adding Free Play and Match modes 2026-07-18 15:34:11 +01:00
Josh Creek c3329b3280 feat(*): Add goal 2025-07-20 20:51:24 +01:00
Josh Creek 8650995c18 chore(*): Remove redundant files 2025-07-16 23:05:32 +01:00
Josh Creek 35a23f79e3 refactor(*): Make hud more performant and maintainable 2025-07-16 19:19:58 +01:00
Josh Creek cba9a51b5f feat(*): Add much better ship controls 2025-07-13 21:01:57 +01:00
Josh Creek 5ad381cf2f feat(*): Add hud with timer 2025-07-13 18:36:48 +01:00
Josh Creek bdd0244873 fix(*): Ensure that movement vaguely works in the new area and looks vaguely at the ball 2025-07-12 20:34:03 +01:00
Josh Creek 927bbd0be7 feat(*): Add new match scene, new player scene and main menu 2025-07-12 19:20:16 +01:00
Josh Creek b7d52b7509 feat(*): Add basic 2 player splitscreen 2024-03-21 20:12:53 +00:00
Josh Creek 688b1f14e9 fix(*): Fix ball model scaling 2024-02-23 19:01:37 +00:00
Josh Creek ed01bd4846 feat(*): Add environment and colours 2024-02-23 18:58:50 +00:00
Josh Creek b2eebc9d25 feat(*): Add metallic gold model for ball from Blender 2024-02-23 18:48:26 +00:00
Josh Creek ddfd8efb71 feat(*): Add the ability to score a goal 2024-02-23 18:26:23 +00:00
Josh Creek 0fd3098f14 feat(*): Split out vehicle object 2024-02-23 18:12:59 +00:00
Josh Creek a5bcedd5b2 feat(#1): Create a match scene with a ball and a vehicle 2024-02-21 18:07:09 +00:00