diff --git a/src/games/mastervega/VegaGnnScreen.js b/src/games/mastervega/VegaGnnScreen.js index f1124a7..347a6f6 100644 --- a/src/games/mastervega/VegaGnnScreen.js +++ b/src/games/mastervega/VegaGnnScreen.js @@ -583,11 +583,20 @@ export function openGnnScreen(scene, rules, state, art, opts = {}) { const storyEvents = usingHistory ? (state.gnn?.history ?? []) : pending; const storyPages = storyEvents.map((ev) => ({ kind: 'story', desc: Gnn.describeGnnStory(rules, state, ev) })); - const rankingPages = Gnn.RANKING_METRICS.map((metric) => ({ kind: 'ranking', metric })); - // Always-accessible: present every time GNN opens, independent of - // whether there's a pending story — same footing as the ranking pages. - const relationsPage = { kind: 'relations' }; - const pages = [...storyPages, ...rankingPages, relationsPage]; + // A spying/sabotage notification is a targeted alert, not a newscast — + // skip the ranking/relations pages so it reads as "here's what just + // happened," not "here's what just happened, now flip through five + // unrelated charts" (Brian's ask). Only suppresses on a FRESH pending + // notification; reopening GNN on demand with nothing pending + // (usingHistory) always gets the full experience back — that reopen IS + // the escape hatch for a player who does want the charts. + const isEspionageAlert = !usingHistory + && storyPages.some((p) => p.desc.kind === 'espionage' || p.desc.kind === 'espionageResult'); + const rankingPages = isEspionageAlert ? [] : Gnn.RANKING_METRICS.map((metric) => ({ kind: 'ranking', metric })); + // Always-accessible otherwise: present every time GNN opens, independent + // of whether there's a pending story — same footing as the ranking pages. + const relationsPage = isEspionageAlert ? null : { kind: 'relations' }; + const pages = [...storyPages, ...rankingPages, ...(relationsPage ? [relationsPage] : [])]; const root = scene.add.container(0, 0).setDepth(D.gnn); root.add(scene.add.rectangle(0, 0, GAME_WIDTH, GAME_HEIGHT, 0x030509, 0.99)