{ "$comment": "COMMS — the characters of the ship speaking to the player (OAC first). Three comm types: 'ack' pauses the action and holds the box open (muted looping video + text + voice) until the player clicks ACKNOWLEDGE; 'visual' shows the box (video plays once + text + voice) and fades out when the voice ends; 'audio' is voice only — no box, no pause. Comms are EVENTS: each one binds a trigger (when) + a sender (who) + text + a speech clip (what). Trigger vocabulary: 'newGame' is live (the fresh-run welcome); the reservedTriggers list below is the proposed event set to discuss and assign comms to (researchComplete, researchNew, questNew, questComplete, discovery, landing, jump, buildComplete) — none of them fire yet. Assets are loaded ON DEMAND by the hub (js/comms/CommsHub.js) when a comm is due — never in a scene's preload, so the initial load stays lean.", "enabled": true, "audio": { "$comment": "The comm's voice plays at its OWN volume (volume) — the manager's master is left untouched (in v4 `sound.setVolume` IS the master, so ducking it would quiet the voice too). While the voice talks, the other playing sounds (the game music) are ducked PER-SOUND by musicDuck (a fraction of each one's own volume) and restored exactly when the voice ends.", "volume": 1.0, "musicDuck": 0.3 }, "characters": { "$comment": "The senders. label = the box's header; role = the small line beside it; video = the character clip (left panel of the box, ALWAYS played muted — the voice is the speech clip, never the video).", "oac": { "label": "O.A.C.", "role": "ONBOARD A.I. COMPUTER", "video": "assets/videos/characters/oac.mp4" } }, "comms": [ { "$comment": "The fresh-run welcome: OAC introduces the ship. type 'ack' — the action pauses and the box holds (video loops silently) until ACKNOWLEDGE. delayMs beats the opening toast so the signal is clean.", "id": "oac-intro", "from": "oac", "type": "ack", "trigger": "newGame", "text": "So you want to explore the galaxy do you?... Welcome to your ship... she's not much but she's got room to grow. I'm O.A.C. your Onboard A I Computer, and I'm here to help you get around.", "audio": "assets/speech/oac/intro-01.mp3", "once": true, "delayMs": 1400 } ], "reservedTriggers": [ "researchComplete", "researchNew", "questNew", "questComplete", "discovery", "landing", "jump", "buildComplete" ], "box": { "$comment": "The wide comm box, docked just below the mineral bar (its right edge sticks to the bar's right edge; topPad px of padding below the bar). Left: the sender's clip in a bracketed feed panel (muted, contain-fit). Right: the comm text decoding in, and — for 'ack' only — the ACKNOWLEDGE button below it. The height grows to the content; long comms just get taller.", "width": 560, "topPad": 12, "pad": 14, "headerGap": 8, "videoSize": 150, "videoGap": 14, "text": { "fontSize": 13, "lineHeight": 18, "letterSpacing": 0.4 }, "button": { "label": "ACKNOWLEDGE", "gap": 10, "fontSize": 11, "paddingX": 16, "paddingY": 7, "letterSpacing": 2 }, "animation": { "inMs": 260, "outMs": 420, "visualHoldMs": 350, "$comment": "visualHoldMs = the beat the box holds after the voice ends (visual comms) before it fades." }, "colors": { "panel": "#0a1120", "panelAlpha": 0.94, "border": "#22405f", "borderAlpha": 0.9, "notch": 10, "neon": "#00e5ff", "ink": "#eaf6ff", "dim": "#7d92c4", "faint": "#3d4c74", "amber": "#ffc94d" } } }