- **Visual Feedback**: Introduce VegaBombardScreen.js — a two-stage popup for
bombard/invasion results featuring JIT-loaded videos (per planet type or
invading species) and animated stat bars showing population, factory, and
building losses.
- **Expanded Consequences**: Factory and building destruction now scale with
the population kill ratio. On colony wipeout, weapon Mark gates planetary
ruin/ruination (toxic/radiated/dead/asteroids) via a weighted probability table.
- **AI & Tactics**: Ursaal now queue troop transports alongside warships for
invasion fleets. Added `bombardHoldFireChance` trait (0–1) to let species
defer bombing when invasion troops are staged, preserving intact colonies
without creating fortress-world stalemates.
- **Battle Logic Fixes**: Correct `prepareBattleAt` and `pendingBattlesFor` to
properly handle stars with multiple colonies, ignore transport-only fleets,
and suppress pending battles when planetary defenses are depleted.
- **UI/Reporting**: Wire player-initiated and AI-initiated attacks into the
new popup queue. Add `bombard` and `invasionFailed` to notable turn report
events with detailed outcome descriptions.
- **Testing & Tooling**: Add comprehensive verification tests for planet
destruction distribution, building damage rates, hold-fire chances, and
battle edge cases. Expose `window.game` for devtools debugging.
- Replace □/■ glyphs with channel-specific icons inside the lock toggle boxes
- Introduce `allocation.png` (5 frames) and register it in the artwork config
- Add hover tooltips explaining each channel's production role and MOO1-style
overflow behavior
- Expose slider `zone` for tooltip attachment and adjust icon/layout positioning
- Update sprite documentation and include minor audio asset update
Introduce a full-screen, click-advanced ceremony (VegaCouncilSession.js)
that replays runCouncil()'s result delegate-by-delegate instead of hiding
the tally behind the turn-report. Three fixed stages — Roster, Voting,
and Verdict — with a persistent 2:3 portrait anchor video, green-screen
ticker, live scoreboard with animated bars, and sting-then-loop audio.
Key changes:
- VegaLogic.js: expose per-voter `voters` breakdown and `pendingSession`
flag so the UI can replay the session before the victory check.
- MasterOfVegaGame.js: consume `pendingSession` in `runToHumanTurn()`
before `state.over`, ensuring a decisive council still gets its ceremony.
- VegaTurnReport.js: remove `council` from NOTABLE_TYPES (ceremony handles
it); keep `councilRefused` as a distinct war-declaration row.
- assetManifest.js / Sounds.js: register video + sting/loop audio cues.
- VegaScreens.js: add `D.council` depth value.
- verifyMasterOfVega.js: assert voter breakdown consistency and pending
session lifecycle.
Introduce GNN, a galaxy-wide news broadcast feature that reports major
events to the player via a full-screen takeover UI with anchor desk
video, story pages, MOO1-style animated rankings, and a diplomatic
relations reference.
Key changes:
- VegaGnn.js: headless event classification, anchor copywriting, and
ranking logic (Phaser-free, testable in Node)
- VegaGnnScreen.js: full-screen UI with looping anchor video,
green-screen ticker terminal, story renderers (diplomacy/tech/
territory/espionage), animated bar-chart rankings, and relations page
- HUD: new GNN button with unread bullet cue; auto-opens after turns
when stories are pending, on-demand via button
- VegaLogic.js: new `lastColony` event (reduced to single world),
`attacker` field on elimination events, `gnn` state with history
buffer, export empireFleetPower for multi-empire rankings
- VegaColoniesScreen.js: export and generalize createAdvisorTerminal
for reuse by GNN's ticker
- mastervega-rules.json: flag ~16 headline-worthy techs with
gnnHeadline (research-sourced only, not espionage-stolen)
- Assets: eager-load GNN anchor video, sting/loop audio, and populate
all 10 species colony advisor videos in mastervega-artwork.json
- verifyMasterOfVega.js: comprehensive 7b test section covering
classification, consumption, describeGnnStory, anchorLine, attacker
threading, ranking metrics, relationsRows, serialization, and AI soak
- Add full-screen intro video (mov-intro.mp4) that plays once on fresh game
entry, with skip prompt on first keypress and immediate skip on second
- Include intro soundtrack (intro-theme.mp3) and updated menu title image
- Skip video on Load-slot resume to avoid interrupting returning players
- Add orange highlight to Colony/Allocation Focus pills when their setting
disagrees with the advisor's recommendation (recommendColonyFocus/
recommendAllocationFocus)
- Introduce Colony Focus: a per-colony autopilot that auto-queues one
building/ship per turn when the queue is empty. Supports seven modes
(manual, improvement, research, fleet, growth, trade, defense) with
cost-aware affordability checks matching AI behaviour.
- Add Allocation Focus: one-time slider presets (default, research,
growth, production, military) that bulk-overwrite channel allocations.
- Refactor colony view flyout into a shared drawer supporting queue,
colony focus, and allocation focus modes with in-place swapping.
- Replace "Built here" text with hoverable building icon row and
tooltips on the colony screen.
- Add per-species audience music tracks and diplomacy music ducking when
seeking/planning an audience.
- Add sound effects for star selection, zoom in/out, and colony view
opening.
- Back-fill `focus: 'manual'` on old saves for forwards compatibility.
- Add verification tests exercising each focus mode in isolation.
Replace the turn-report "New Turn" popup row with a cinematic vignette that
plays the moment the player plants a colony: the soundtrack ducks, the world's
1920×1080 backdrop fills the screen, a 960×544 clip of this world being settled
plays in a framed window, and the founding numbers are read out underneath.
Key changes:
- Add `colonyVideos` block (15 clips, one per colonisable planet type) to
artwork JSON; clips are fetched just-in-time via ensureColonyVideo() when a
colony ship reaches a settleable world, keeping the set (~19 MB) out of the
eager manifest
- Add `vega-colony-cue` audio to the eager manifest for the founding soundtrack
- Remove `colonised` from NOTABLE_TYPES and TYPE_LABEL so the event is no longer
announced twice (once in the vignette, once in the turn report)
- Add `sourceWidth()` guard in VegaArt.js to fix a Phaser Video placeholder
width bug exposed by the non-square 960×544 colony clips (2.5× scale issue)
- Apply `sourceWidth()` to portrait and commander video scaling paths as well
- Add depth entry `intro: 78` to VegaScreens.js for the vignette overlay
- Add section 6b to the verifier: checks manifest exclusion, key conventions,
sourceWidth() behavior, turn-report classification, and colony stats
See build-plan trap #23 for the full sourceWidth() explanation.
Introduces Master of Vega, a turn-based 4X strategy game built on MOO1 rules with MOO2 conveniences. The implementation features a fully headless, deterministic engine (VegaLogic) with zero Phaser dependencies, enabling complete Node-based verification (809 checks) and reproducible galaxy generation via mulberry32 RNG.
Key features:
- Preset ship hulls with an auto-refitting Mark system and provably monotonic knapsack loadouts.
- Tactical grid combat with banked damage resolution to eliminate first-strike bias.
- Galactic Council diplomacy, stalemate-breaking, and invasion forecasting.
- Drop-in artwork compatibility with procedural stand-ins for all spritesheets.
- Hireable leaders (admin/captain) and colony building queues.
Architecture splits cleanly into headless modules (GalaxyGen, Logic, AI, Combat, Diplomacy, Ships, Leaders) and a render tier (StarMap, SystemView, CombatView, Screens, Nebula, Art, Fx). A comprehensive build plan documents 19 architectural traps discovered and resolved during development.
Registers the game in the registry, asset manifest, preload scene, and soundtrack service. Includes tools/verifyMasterOfVega.js for automated rule validation, art verification, economy balancing, and AI self-play soaking.