Rename in-app IP references and rewrite README for end users

Apply the ship/vessel and terminology rename mappings throughout the
live app (index.html, css/style.css, js/*.js) and reference docs, per
Ship_IP_Changes.md and Theme_Terminology_IP_Changes.md, including:
- Ship/theme names and generic terminology (Starfleet, LCARS, Warp
  Core, TARDIS, etc.) in both code strings and visible UI text, while
  leaving internal code identifiers (theme keys, CSS classes, preset
  IDs) untouched.
- Made "Species 8675309" canonical and fixed the dotted T.A.R.D.I.X.
  acronym on the Whataverse theme.
- Replaced the per-preset era/pulseShape franchise tag in the preset
  list with the existing safe universe category name, since those
  codes are also used functionally by the audio and observation
  engines and weren't covered by either mapping document.

Also rewrite README.md to lead with end-user ambience usage (how to
run it, universe/vessel overview, mixer channels, sleep timer,
observation mode, hotkeys) with the developer/build notes moved into
a collapsed section.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01Jt872nc9Fi2WMaJhAKGyDq
This commit is contained in:
Claude
2026-09-04 21:16:11 +00:00
co-authored by Claude Sonnet 5
parent 9dc48e94d9
commit 977d348c4f
15 changed files with 1130 additions and 956 deletions
+91 -24
View File
@@ -1,19 +1,86 @@
# SciFi-XZBT Modular Architecture & Repackaging
# SciFi Ambient Display
## Directory Overview
A browser-based sci-fi ambience generator. It layers procedurally synthesized starship drones, warp/worp core pulses, life-support hiss, and background telemetry chirps into a continuous soundscape, paired with a matching on-screen console and an optional full-screen "observation deck" visualizer. Good for background noise while working, relaxing, or falling asleep.
## Getting Started
The simplest way to use it: open `dist/SciFiAmbientDisplay_v4.html` in any modern browser (double-click it — no install, no server, no internet connection required). It's a single self-contained file with everything bundled in.
If you'd rather run it from the source files instead, open `index.html` the same way, or serve the folder with any static file server.
Click anywhere (or hit the Play button) to start audio — browsers require a user interaction before sound can play.
## Choosing a Vessel
Use the dropdown in the header to pick a universe, then choose a specific vessel/location preset from the sidebar. Each universe has its own visual theme and soundboard:
- **Starflight Command** — clean flagship bridges, engineering decks, and crew quarters
- **The Whataverse** — time-machine consoles across several eras, from clanking Victorian brass to a coral-organic control room
- **Industrial Space** — grimy tugs, mining ships, and utility shuttles
- **Bioships** — living, breathing vessels with organic pulses and membranes
- **Retro Future** — atomic-age and 70s/80s-style spacecraft
- **Military Space** — combat bridges and tactical operations centers
- **Deep Space** — long-haul liners, generation ships, and research vessels
- **Outlaw / Frontier** — lived-in salvage ships and independent freighters
- **Space Stations** — orbital platforms and rotating habitats
- **Comedy / Adventure** — lighter, quirkier takes on the genre
Every preset changes both the ambient soundscape and the console's look and feel.
## Shaping the Sound
The mixer has four independent channels, each with its own volume:
1. **Hull Drone** — the low, steady rumble of the ship itself
2. **Worp Core** — the rhythmic reactor/engine pulse
3. **Life Support** — airflow and ventilation hiss
4. **Telemetry** — sparse background computer chirps and beeps
Mute everything instantly with the header mute button, or use the master volume control. The soundboard (bottom right) adds one-off sound effects specific to the current universe — chimes, alerts, door sounds, and the like — layered on top of the ambient mix.
## Sleep Timer
Set the ambience to automatically fade out and stop after 15, 30, or 60 minutes — handy for falling asleep to. Choose "OFF" to run continuously.
## Observation Mode
Click the observation button to switch to a full-screen, passive display: a slow-moving starfield/warp view framed by the current ship's viewport, with an activity slider to control how much visual motion happens. It's designed to be left running on a second monitor or TV as ambient scenery, or projected in a room. Click the background (or press Escape) to return to the controls.
## Keyboard Shortcuts
| Key | Action |
| --- | --- |
| Space | Play / pause |
| M | Mute / unmute |
| ↑ / + | Volume up |
| ↓ / | Volume down |
| 19 | Set volume to 10%90% |
| 0 | Set volume to 100% |
| W | Trigger the universe's primary event (e.g. warp jump) |
| R | Trigger an alert |
| F | Toggle the observation viewport frame (in Observation Mode) |
| P | Toggle support pillars (in Observation Mode) |
| Esc | Exit Observation Mode / stop active alerts |
---
## For Developers
<details>
<summary>Project structure and build notes</summary>
```text
SciFi-XZBT/
├── index.html # Clean entry point (368 lines)
├── index.html # Entry point
├── css/
│ └── style.css # LCARS styling, CRT effects, theme colors (2,317 lines)
│ └── style.css # Styling, CRT effects, theme colors
├── js/
│ ├── audio.js # Web Audio synthesis, oscillators, sound engines (2,258 lines)
│ ├── config.js # Starship presets, Universe registry & palettes (1,039 lines)
│ ├── visualizer.js # Audio spectrum & Warp Core canvas rendering (643 lines)
│ ├── observation-bezels.js # Procedural SVG Viewport bezels (TOS, Voyager, TNG, etc.) (271 lines)
│ ├── observation-engine.js # Full observation mode canvas and simulation engine (2,784 lines)
│ └── app.js # DOM bindings, hotkeys, UI controllers & loop (3,962 lines)
│ ├── audio.js # Web Audio synthesis, oscillators, sound engines
│ ├── config.js # Vessel presets, universe registry & palettes
│ ├── visualizer.js # Audio spectrum & Worp Core canvas rendering
│ ├── observation-bezels.js # Procedural SVG viewport bezels
│ ├── observation-engine.js # Observation mode canvas and simulation engine
│ └── app.js # DOM bindings, hotkeys, UI controllers & main loop
├── dist/
│ └── SciFiAmbientDisplay_v4.html # Standalone, single-file offline build
└── tools/
@@ -21,20 +88,20 @@ SciFi-XZBT/
└── extract.ps1 # Original extraction script for reference
```
---
### Working on the source
## Development Workflow
- Edit the specific CSS or JS files directly.
- Audio/synthesizer logic lives in `js/audio.js`.
- Viewscreen bezels and framing are in `js/observation-bezels.js`.
- Observation-mode canvases and simulation are in `js/observation-engine.js`.
- Presets and the sound matrix live in `js/config.js`.
1. **Developing Modularly**:
- Edit the specific CSS or JS files directly.
- For audio or synthesizer logic, focus exclusively on `js/audio.js`.
- For viewscreen bezels and framing, edit `js/observation-bezels.js`.
- For observation celestial mechanics and canvases, edit `js/observation-engine.js`.
- For presets and sound matrix tables, edit `js/config.js`.
### Repackaging to a single file
2. **Repackaging to Single-File**:
Run the packaging script from PowerShell:
```powershell
powershell -ExecutionPolicy Bypass -File .\tools\package.ps1
```
This immediately produces `dist\SciFiAmbientDisplay_v4.html`, combining all CSS and JS back into a self-contained, double-clickable offline file.
```powershell
powershell -ExecutionPolicy Bypass -File .\tools\package.ps1
```
This produces `dist\SciFiAmbientDisplay_v4.html`, combining all CSS and JS back into a self-contained, double-clickable offline file.
</details>
+72
View File
@@ -0,0 +1,72 @@
| # | Theme | Current element | IP / vessel | Specific influence to preserve | Suggested alternate |
| -: | --------------------- | ------------------------------------------ | ---------------------------------- | ----------------------------------------------------------------------------------------- | -------------------------------------------------- |
| 1 | Starfleet / Trek | Enterprise-D: Main Bridge | Star Trek: TNG / Enterprise-D | Comfortable flagship bridge, optimistic exploration, polished telemetry, quiet confidence | **Interprise-G: Main Bridge** |
| 2 | Starfleet / Trek | Enterprise-D: Main Engineering | Star Trek: TNG / Enterprise-D | Large central reactor, rhythmic power pulse, sophisticated engineering space | **Interprise-G: Main Engineering** |
| 3 | Starfleet / Trek | Enterprise-D: Crew Quarters | Star Trek: TNG / Enterprise-D | Quiet residential compartment, distant propulsion, civilized long-duration travel | **Interprise-G: Crew Quarters** |
| 4 | Starfleet / Trek | USS Voyager: Bridge | Star Trek: Voyager / Voyager | Smaller advanced explorer, crisp systems, efficient command environment | **USS Wayfarer: Bridge** |
| 5 | Starfleet / Trek | USS Voyager: Class-9 Warp Core | Star Trek: Voyager / Voyager | Fast advanced reactor pulse, compact high-output engineering | **USS Wayfarer: Class-N Worp Core** |
| 6 | Starfleet / Trek | USS Defiant: Tactical Bridge | Star Trek: DS9 / Defiant | Compact aggressive warship, dense tactical systems, powerful propulsion | **USS Defiance: Tactical Bridge** |
| 7 | Starfleet / Trek | Deep Space 9: Ops Center | Star Trek: DS9 / Deep Space 9 | Huge alien-built station, heavy infrastructure, commerce and docking | **Deep Space 8: Ops Center** |
| 8 | Starfleet / Trek | Enterprise NCC-1701: Bridge | Star Trek / Enterprise NCC-1701 | 1960s retro-future bridge, relays, oscillators, tactile controls | **Interprise NCC-1701.5: Bridge** |
| 9 | Starfleet / Trek | Enterprise NCC-1701: Engineering | Star Trek / Enterprise NCC-1701 | Retro electromechanical power plant, motor whine, rhythmic machinery | **Interprise NCC-1701.5: Engineering** |
| 10 | Starfleet / Trek | Enterprise NX-01: Command Bridge | Star Trek: Enterprise / NX-01 | Early deep-space vessel, submarine feel, exposed machinery | **Interprise NS-01: Command Bridge** |
| 11 | Temporal / Whoniverse | 1963 Classic Console | Doctor Who / TARDIS | Early-1960s temporal machine, primitive relays, repetitive travel rhythm | **1962 Classic Console** |
| 12 | Temporal / Whoniverse | Victorian Secondary Console | Doctor Who / TARDIS | Wood, brass, clockwork, impossible machinery | **Edwardian Secondary Console** |
| 13 | Temporal / Whoniverse | Coral Living TARDIS | Doctor Who / TARDIS | Organic-industrial machine, heartbeat quality, pumps and exposed mechanisms | **Coral Living TARDIX** |
| 14 | Temporal / Whoniverse | Copper Workshop | Doctor Who / TARDIS | Hyperactive workshop, copper, brass, gyroscopes and improvised controls | **Bronze Workshop** |
| 15 | Temporal / Whoniverse | Cold Machine | Doctor Who / TARDIS | Dark, intellectual, industrial temporal machinery | **Cool Machine** |
| 16 | Temporal / Whoniverse | Singing Crystal Console | Doctor Who / TARDIS | Crystalline resonances, kinetic mineral machinery | **Humming Crystal Console** |
| 17 | Temporal / Whoniverse | Infinite White | Doctor Who / TARDIS | Vast luminous interior, cathedral-scale reverb, pristine machinery | **Endless White** |
| 18 | Industrial Space | USCSS Nostromo: Ore Refinery Bridge | Alien / Nostromo | Corporate industrial tug, neglected machinery, pipes and primitive computers | **USCSS Nostramo: Ore Refinery Bridge** |
| 19 | Industrial Space | Serenity: Firefly-Class Cargo Hold | Firefly / Serenity | Warm worn cargo ship, frontier practicality, lived-in machinery | **Serenety: Firewing-Class Cargo Hold** |
| 20 | Industrial Space | Red Dwarf: Main Drive Corridor | Red Dwarf / Red Dwarf | Absurdly huge aging mining ship, ancient mundane machinery | **Red Dwarve: Main Drive Corridor** |
| 21 | Industrial Space | Starbug 1: Cockpit Environment | Red Dwarf / Starbug | Tiny utility shuttle, buzzing propulsion, cramped controls | **Starbug Z: Cockpit Environment** |
| 22 | Industrial Space | The Raza: Dark Matter Bridge | Dark Matter / Raza | Dark military-grade ship, quiet tactical tension | **The Rasa: Dark Matter Bridge** |
| 23 | Industrial Space | Rocinante: Combat Ops & Epstein Drive | The Expanse / Rocinante | Hard-science combat ship, high-G fusion propulsion, cooling and defense telemetry | **Rocinanta: Combat Ops & Epsilon Drive** |
| 24 | Industrial Space | Eagle Transporter: Command Module | Space: 1999 / Eagle | Modular 1970s lunar transport, nuclear-era futurism | **Hawk Transporter: Command Module** |
| 25 | Industrial Space | Valley Forge: Agro-Dome Forest Hub | Silent Running / Valley Forge | Ecological preservation ship, greenhouse dome, lonely maintenance machinery | **Valley Foundry: Agro-Dome Forest Hub** |
| 26 | Bioships | Moya: Leviathan Central Nexus | Farscape / Moya | Peaceful living spacecraft, heartbeat propulsion, circulating fluids | **Meya: Leviathon Central Nexus** |
| 27 | Bioships | Talyn: Gunship Neural Bridge | Farscape / Talyn | Aggressive young living warship, biological weapon integration | **Talym: Gunship Neural Bridge** |
| 28 | Bioships | The Lexx: Primary Organ Bridge | Lexx / Lexx | Colossal insectoid vessel, digestive machinery, grotesque organic scale | **The Lexxi: Primary Organ Bridge** |
| 29 | Bioships | Vorlon Cruiser: Sentient Core | Babylon 5 / Vorlon cruiser | Ancient sentient organic ship, crystalline resonance, mystical technology | **Vorlan Cruiser: Sentient Core** |
| 30 | Bioships | Wraith Hive Ship: Throne Chamber | Stargate Atlantis / Wraith hive | Predatory grown capital ship, humid chitinous environment | **Wraithe Hive Ship: Throne Chamber** |
| 31 | Bioships | Species 8472: Fluidic Bioship | Star Trek: Voyager / Species 8472 | Alien biological spacecraft, organic weapons, nonstandard environment | **Species 8471: Fluid Bioship** |
| 32 | Retro Future | Jupiter 2: Upper Deck Astrogator | Lost in Space / Jupiter 2 | Bright 1960s saucer, analog astrogation, atomic-age optimism | **Jupiter Duece: Upper Deck Astrogator** |
| 33 | Retro Future | The Liberator: Zen Flight Bridge | Blake's 7 / Liberator | Mysterious advanced vessel, crystalline controls, intelligent systems | **The Liberation: Zen Flight Bridge** |
| 34 | Retro Future | USS Cygnus: Victorian Engine Hall | The Black Hole / Cygnus | Gothic megaship, monumental iron machinery and pistons | **USS Cygnis: Victorian Engine Hall** |
| 35 | Retro Future | USS Palomino: Deep Research Pod | The Black Hole / Palomino | Small scientific ship, compact cockpit, straightforward systems | **USS Palomina: Deep Research Pod** |
| 36 | Retro Future | Discovery One: Habitation Centrifuge | 2001 / Discovery One | Hard-science spacecraft, rotating gravity, minimalist quiet systems | **Discovery Zero: Habitation Centrifuge** |
| 37 | Retro Future | Dark Star: Bomb Bay & Quarters | Dark Star / Dark Star | Dilapidated mission ship, unreliable electronics, absurd danger | **Dim Star: Bomb Bay & Quarters** |
| 38 | Retro Future | Gunstar: Tactical Combat Cockpit | The Last Starfighter / Gunstar | Arcade-era combat craft, rapid weapon charging, bright tactical systems | **Gunstarr: Tactical Combat Cockpit** |
| 39 | Retro Future | The Searcher: 25th Century Flagship | Buck Rogers / Searcher | Sleek late-70s flagship, clean fusion systems, polished electronics | **The Seeker: 25th Century Flagship** |
| 40 | Military Space | USS Sulaco: Conestoga Hangar Deck | Aliens / Sulaco | Automated military transport, enormous hangars, hydraulics, austere naval feel | **USS Solaco: Conestega Hangar Deck** |
| 41 | Military Space | Battlestar Galactica: CIC | Battlestar Galactica / Galactica | Huge armored carrier, analog naval command center, combat vibration | **Battlestar Galactic: Combat Information Center** |
| 42 | Military Space | White Star: Minbari/Vorlon Hybrid Bridge | Babylon 5 / White Star | Agile advanced warship combining organic and engineered technologies | **Pale Star: Minbara/Vorlan Hybrid Bridge** |
| 43 | Military Space | EAS Agamemnon: Omega Destroyer Bridge | Babylon 5 / Agamemnon | Rotating-section human destroyer, military industrialism, heavy weapons | **EAS Agamemnon II: Omega Destroyer Bridge** |
| 44 | Military Space | Andromeda Ascendant: Command Deck | Andromeda / Andromeda Ascendant | AI-controlled advanced warship, sleek command environment | **Andromeda Ascending: Command Deck** |
| 45 | Military Space | Excalibur: Victory-Class Heavy Combat Core | Crusade / Excalibur | Hybrid exploration warship, enormous main weapon, gravitic machinery | **Excaliber: Triumph-Class Heavy Combat Core** |
| 46 | Military Space | Colonial Viper Mk II | Battlestar Galactica / Viper | Small high-G space fighter, aggressive thrusters and compact radar | **Colonial Adder Mk II** |
| 47 | Deep Space | Avalon: Interstellar Cruise Concourse | Passengers / Avalon | Luxury century-scale liner, elegant automation, huge public spaces | **Avalin: Interstellar Cruise Concourse** |
| 48 | Deep Space | Nightflyer: Telepathic Corridor | Nightflyers / Nightflyer | Isolated research vessel, psychological horror, haunted corridors | **Nightflier: Telepathic Corridor** |
| 49 | Deep Space | Ascension: Generation Ship Promenade | Ascension / Ascension | Mid-century generation ship, centrifugal gravity, enclosed society | **Ascention: Generation Ship Promenade** |
| 50 | Deep Space | Ark One: Evacuation Ark Bridge | The Ark / Ark One | Emergency colony ship, stressed recycling and survival systems | **Ark Zero: Evacuation Ark Bridge** |
| 51 | Deep Space | Icarus II: Solar Shield Core | Sunshine / Icarus II | Solar mission spacecraft, extreme thermal stress, giant heat shield | **Icarus I: Solar Shield Core** |
| 52 | Deep Space | Event Horizon: Gravity Singularity Core | Event Horizon / Event Horizon | Experimental gravity drive, massive mechanical core, cosmic horror | **Event Boundary: Gravity Singularity Core** |
| 53 | Deep Space | Lewis & Clark: Rescue Cutter Bridge | Event Horizon / Lewis and Clark | Compact professional rescue ship, practical life support and communications | **Lewis & Clarke: Rescue Cutter Bridge** |
| 54 | Outlaw / Frontier | The Betty: Salvage Freighter Mess | Alien Resurrection / Betty | Dirty pirate/salvage ship, exposed machinery, lived-in communal interior | **The Betsy: Salvage Freighter Mess** |
| 55 | Outlaw / Frontier | Bebop: Living Quarters & Hangar | Cowboy Bebop / Bebop | Converted working vessel used as home and hangar, retro electronics | **BeBoppa: Living Quarters & Hangar** |
| 56 | Outlaw / Frontier | Outlaw Star: Grappler Bridge | Outlaw Star / Outlaw Star | Independent combat vessel, manipulator combat, energetic anime controls | **Outlaw Sun: Grapple Bridge** |
| 57 | Outlaw / Frontier | Scorpio: Wanderer Salvage Vessel | Blake's 7 / Scorpio | Aging salvage vessel, unreliable systems, fugitive transport | **Scorpius: Wanderer Salvage Vessel** |
| 58 | Outlaw / Frontier | The Marauder: Havoc Shuttle Bridge | Star Wars: Bad Batch / Marauder | Modified military shuttle, mercenary use, improvised upgrades | **The Raider: Havoc Shuttle Bridge** |
| 59 | Outlaw / Frontier | The Milano: M-Ship Cockpit Lounge | Guardians of the Galaxy / Milano | Colorful personal spacecraft, music culture, lounge-like cockpit | **The Milan: M-Ship Cockpit Lounge** |
| 60 | Space Stations | Babylon 5: Core Control & Zocalo | Babylon 5 / Babylon 5 | Huge rotating diplomatic/commercial station, traffic and centrifugal gravity | **Babylon 4: Core Control & Zocolo** |
| 61 | Space Stations | Moonbase Alpha: Main Mission Control | Space: 1999 / Moonbase Alpha | 1970s lunar installation, clean mission control, nuclear infrastructure | **Moonbase Beta: Main Mission Control** |
| 62 | Space Stations | Sevastopol Station: Habitation Deck | Alien: Isolation / Sevastopol | Decaying commercial orbital station, failing systems, retro-industrial horror | **Sebastopol Station: Habitation Deck** |
| 63 | Space Stations | Tycho Station: Asteroid Construction Bay | The Expanse / Tycho | Rotating shipyard, welding, gantries, realistic industrial space operations | **Tyco Station: Asteroid Construction Bay** |
| 64 | Space Stations | Ceres Station: Sub-Crustal Tunnels | The Expanse / Ceres | Converted asteroid habitat, spin gravity, dense industrial tunnels | **Ceres Minor Station: Sub-Crustal Tunnels** |
| 65 | Space Stations | Gateway Station: Quarantine Transfer Deck | Aliens / Gateway | Orbital transfer facility, quarantine, docking infrastructure | **Gatehouse Station: Quarantine Transfer Deck** |
| 66 | Comedy / Adventure | USS Orville: Command Bridge | The Orville / Orville | Bright optimistic exploration ship with light comedic tone | **USS Norval: Command Bridge** |
| 67 | Comedy / Adventure | NSEA Protector: Beryllium Engine Room | Galaxy Quest / Protector | Cheerful heroic TV-style ship, oversized exotic reactor | **NSEA Protractor: Beryllium Orb Engine Room** |
| 68 | Comedy / Adventure | Heart of Gold: Improbability Bridge | Hitchhiker's Guide / Heart of Gold | Cheerful absurdity, reality-bending propulsion, whimsical automation | **Heart of Silver: Unlikelihood Bridge** |
| 69 | Comedy / Adventure | HMS Camden Lock: Flight Deck & Mess | Hyperdrive / Camden Lock | Mundane bureaucracy in space, mediocre ship, ordinary crew life | **HMS Camden Key: Flight Deck & Mess** |
| 70 | Comedy / Adventure | Spaceball One: Mega-Warship Bridge | Spaceballs / Spaceball One | Ridiculously oversized authoritarian warship and absurd propulsion | **Spaceorb One: Mega-Warship Bridge** |
+35
View File
@@ -0,0 +1,35 @@
| Current | Suggested alternate |
| ---------------------------- | ------------------------------- |
| Starfleet | **Starflight** |
| Federation | **Confederation** |
| LCARS | **LCARD** |
| Whoniverse | **Whataverse** |
| TARDIS | **TARDIX** |
| Type 40 | **Type 4D** |
| Cloister Bell | **Cloister Chime** |
| Sonic Screwdriver | **Acoustic Screwdriver** |
| Warp Core | **Worp Core** |
| Transporter | **Translocator** |
| Replicator | **Fabricator** |
| Turbolift | **Turbochute** |
| Sickbay | **Medbay** |
| Comm Badge | **Com Badge** |
| Weyland-Yutani | **Weylan-Yutaro** |
| Epstein Drive | **Epsilon Drive** |
| DRADIS | **DRADAR** |
| Death Blossom | **Death Bloom** |
| HAL 9000 | **HAL 9999** |
| Infinite Improbability Drive | **Infinite Unlikelihood Drive** |
| Omega-13 | **Omega-12+1** |
| Ludicrous Speed | **Ridiculous Speed** |
| Beryllium Sphere | **Beryllium Orb** |
| Grappler | **Grapple System** |
| Repulsorlift | **Repeller Lift** |
| Zocalo | **Zocolo** |
| Belter | **Beltworker** |
| Commlock | **Comlock** |
| Minbari | **Minbara** |
| Vorlon | **Vorlan** |
| Species 8472 | **Species 8675309** |
| Leviathan | **Leviathon** |
| Space: 1999 | **Space: 9999** |
+5 -5
View File
@@ -5,8 +5,8 @@ Guidance for AI coding agents working in this repository.
## What this project is
A browser-only, zero-dependency **sci-fi ambient audio + visual display**. It
synthesizes starship room tone (hull drone, warp core, life support, telemetry,
alerts) with the Web Audio API and renders LCARS-styled UI, an audio
synthesizes starship room tone (hull drone, worp core, life support, telemetry,
alerts) with the Web Audio API and renders LCARD-styled UI, an audio
visualizer, and a procedural "observation" viewscreen on HTML canvas.
It runs by opening `index.html` in a browser. There is **no build step, no
@@ -29,10 +29,10 @@ tags without checking the dependencies.
| File | Owns | ~Lines |
| --- | --- | --- |
| `index.html` | DOM skeleton, script/link tags | 370 |
| `css/style.css` | LCARS themes, CRT effects, palettes | 2,300 |
| `js/audio.js` | `AudioManager` + all synth classes (hull, warp, life support, telemetry, alert, Whoniverse, expanded sci-fi) | 2,250 |
| `css/style.css` | LCARD themes, CRT effects, palettes | 2,300 |
| `js/audio.js` | `AudioManager` + all synth classes (hull, warp, life support, telemetry, alert, Whataverse, expanded sci-fi) | 2,250 |
| `js/config.js` | `StarshipPresets`, `UniverseRegistry` — data only, no behavior | 1,040 |
| `js/visualizer.js` | `StarshipVisualizer` — spectrum + warp core canvas | 640 |
| `js/visualizer.js` | `StarshipVisualizer` — spectrum + worp core canvas | 640 |
| `js/observation-bezels.js` | `ObservationBezels` — procedural SVG viewport frames per era | 270 |
| `js/observation-engine.js` | `ObservationEngine` — celestial simulation and canvas rendering | 2,780 |
| `js/app.js` | DOM bindings, hotkeys, UI controllers, main loop | 3,960 |
+15 -15
View File
@@ -1,12 +1,12 @@
/**
* Authentic LCARS & Multi-Era Star Trek Styling
* Authentic LCARD & Multi-Era Star Trek Styling
* Includes TNG 24th Century, TOS Retro 23rd Century, and NX-01 Industrial themes.
*/
@import url('https://fonts.googleapis.com/css2?family=Antonio:wght@400;600;700&family=Share+Tech+Mono&display=swap');
:root {
/* TNG 24th Century LCARS Palette */
/* TNG 24th Century LCARD Palette */
--lcars-orange: #ff9900;
--lcars-tangerine: #ff6600;
--lcars-amber: #cc6600;
@@ -29,7 +29,7 @@
--warning-accent: var(--lcars-red);
}
/* Voyager Era Palette */
/* Wayfarer Era Palette */
body.theme-lcars-voyager {
--primary-accent: #3399cc;
--secondary-accent: #9999ff;
@@ -37,7 +37,7 @@ body.theme-lcars-voyager {
--warning-accent: #cc3333;
}
/* Defiant Combat Palette */
/* Defiance Combat Palette */
body.theme-lcars-defiant {
--primary-accent: #cc5500;
--secondary-accent: #aa3300;
@@ -676,7 +676,7 @@ input[type="range"]::-webkit-slider-thumb {
box-shadow: 0 0 6px rgba(255, 153, 0, 0.5);
}
/* Right Sidebar - Warp Core & Diagnostic Monitor */
/* Right Sidebar - Worp Core & Diagnostic Monitor */
.right-column {
display: flex;
flex-direction: column;
@@ -812,7 +812,7 @@ input[type="range"]::-webkit-slider-thumb {
/**
* Whoniverse (Doctor Who TARDIS) Aesthetic Stylesheet & Universe Switcher Dropdown
* Whataverse (Doctor Who TARDIX) Aesthetic Stylesheet & Universe Switcher Dropdown
*/
/* Universe Switcher Dropdown */
@@ -876,7 +876,7 @@ input[type="range"]::-webkit-slider-thumb {
}
/* ==========================================================================
WHONIVERSE (TARDIS CONSOLE) THEME
WHATAVERSE (TARDIX CONSOLE) THEME
========================================================================== */
body.theme-whoniverse-tardis {
@@ -902,7 +902,7 @@ body.theme-whoniverse-tardis {
radial-gradient(circle at 10% 90%, rgba(0, 229, 255, 0.05) 0%, transparent 40%);
}
/* Header Styling for TARDIS Police Box */
/* Header Styling for TARDIX Police Box */
body.theme-whoniverse-tardis .lcars-elbow-left {
background: linear-gradient(135deg, #004a8b, #002244);
color: #ffffff;
@@ -928,7 +928,7 @@ body.theme-whoniverse-tardis .lcars-pill-end {
border-radius: 4px;
}
/* TARDIS Roundel Buttons & Cards */
/* TARDIX Roundel Buttons & Cards */
body.theme-whoniverse-tardis .sidebar-heading {
background: linear-gradient(90deg, #003b6f, #001f3f);
color: var(--tardis-cyan);
@@ -956,7 +956,7 @@ body.theme-whoniverse-tardis .preset-btn.active {
box-shadow: 0 0 15px rgba(0, 229, 255, 0.5);
}
/* Master Play Button for TARDIS */
/* Master Play Button for TARDIX */
body.theme-whoniverse-tardis .btn-lcars-large {
background: linear-gradient(135deg, #00e5ff, #0088cc);
color: #000000;
@@ -985,7 +985,7 @@ body.theme-whoniverse-tardis .btn-chirp:hover {
box-shadow: 0 0 12px var(--tardis-cyan);
}
/* Cloister Bell Active Siren */
/* Cloister Chime Active Siren */
body.theme-whoniverse-tardis .btn-lcars-pill.active-alert {
background-color: #ff3300 !important;
color: #ffffff !important;
@@ -997,7 +997,7 @@ body.theme-whoniverse-tardis .btn-lcars-pill.active-alert {
100% { box-shadow: 0 0 25px #ff3300; }
}
/* TARDIS Footer */
/* TARDIX Footer */
body.theme-whoniverse-tardis .lcars-footer {
background: linear-gradient(90deg, #001f3f, #003b6f);
color: var(--tardis-cyan);
@@ -1012,7 +1012,7 @@ body.theme-whoniverse-tardis .lcars-footer {
*/
/* ==========================================================================
1. INDUSTRIAL SPACE (Weyland-Yutani, Firefly, Expanse, Mining Grit)
1. INDUSTRIAL SPACE (Weylan-Yutaro, Firefly, Expanse, Mining Grit)
========================================================================== */
body.theme-industrial {
--primary-accent: #ffaa00;
@@ -1060,7 +1060,7 @@ body.theme-industrial .preset-btn.active {
}
/* ==========================================================================
2. BIOSHIPS (Living Starships, Moya, Lexx, Species 8472)
2. BIOSHIPS (Living Starships, Moya, Lexx, Species 8675309)
========================================================================== */
body.theme-bioships {
--primary-accent: #10b981;
@@ -1518,7 +1518,7 @@ body.theme-comedy .preset-btn.active {
100% { opacity: 0.85; }
}
/* Layer 4: Holographic LCARS HUD */
/* Layer 4: Holographic LCARD HUD */
.observation-chrome {
position: absolute;
inset: 0;
+11 -11
View File
@@ -24,7 +24,7 @@
<header class="lcars-header">
<div class="universe-selector-container" id="universe-selector-container">
<div class="lcars-elbow-left" id="header-universe-btn" title="Click to Change Sci-Fi Universe">
<span id="header-universe-label">STARFLEET</span> <span style="font-size: 0.8rem; margin-left: 4px;"></span>
<span id="header-universe-label">STARFLIGHT</span> <span style="font-size: 0.8rem; margin-left: 4px;"></span>
</div>
<div class="universe-dropdown-menu" id="universe-dropdown">
<!-- Injected dynamically from UniverseRegistry -->
@@ -32,12 +32,12 @@
</div>
<div class="lcars-top-bar">
<span id="header-ship-name">USS ENTERPRISE // MAIN BRIDGE</span>
<span id="header-ship-name">USS INTERPRISE-G // MAIN BRIDGE</span>
<div class="header-volume-dock">
<button class="btn-header-mute" id="btn-header-mute" title="Toggle Mute (M)">MUTE</button>
<span class="header-vol-val" id="header-vol-val">75%</span>
</div>
<span id="header-matrix-label">STARFLEET SOUND MATRIX v2.5</span>
<span id="header-matrix-label">STARFLIGHT SOUND MATRIX v2.5</span>
</div>
<div class="lcars-pill-end"></div>
</header>
@@ -60,8 +60,8 @@
<div class="panel-card">
<div class="panel-header">
<div>
<div class="panel-title" id="current-preset-title">ENTERPRISE-D: MAIN BRIDGE</div>
<div class="panel-sub" id="current-preset-desc">Warm, low-frequency 50Hz hull tone with gentle ventilation and soft LCARS computer chirps.</div>
<div class="panel-title" id="current-preset-title">INTERPRISE-G: MAIN BRIDGE</div>
<div class="panel-sub" id="current-preset-desc">Warm, low-frequency 50Hz hull tone with gentle ventilation and soft LCARD computer chirps.</div>
</div>
<div class="diagnostic-stats" style="width: 220px;">
<div class="stat-box">
@@ -191,10 +191,10 @@
</div>
</div>
<!-- Channel 2: Warp Core Pulse -->
<!-- Channel 2: Worp Core Pulse -->
<div class="channel-strip">
<div class="channel-header">
<span>2. WARP CORE</span>
<span>2. WORP CORE</span>
<span id="val-warp-vol">35%</span>
</div>
<div class="control-row">
@@ -247,7 +247,7 @@
</section>
<!-- Right Sidebar: Warp Core Intermix Chamber & LCARS Soundboard -->
<!-- Right Sidebar: Worp Core Intermix Chamber & LCARD Soundboard -->
<aside class="right-column">
<!-- Core / Rotor Visualizer Card -->
@@ -278,7 +278,7 @@
<!-- Tactical Soundboard & Console Keypad -->
<div class="panel-card">
<div class="panel-header">
<span class="panel-title" id="soundboard-title">LCARS KEYPAD</span>
<span class="panel-title" id="soundboard-title">LCARD KEYPAD</span>
</div>
<div class="telemetry-triggers" id="soundboard-container">
<!-- Dynamically populated per universe -->
@@ -309,7 +309,7 @@
<!-- Layer 3: Emergency Alert Environmental Lighting Wash -->
<div class="observation-alert-wash" id="observation-alert-wash"></div>
<!-- Layer 4: Holographic LCARS HUD & Audio Waveform Sill -->
<!-- Layer 4: Holographic LCARD HUD & Audio Waveform Sill -->
<div class="observation-chrome">
<div class="observation-ticker" id="observation-ticker">
<span class="observation-ticker-label">SYS</span>
@@ -349,7 +349,7 @@
<div class="observation-return" id="observation-return-pill">CLICK BACKGROUND TO RETURN</div>
</section>
<!-- LCARS Footer Status -->
<!-- LCARD Footer Status -->
<footer class="lcars-footer">
<span id="footer-status-label">SYSTEM STATUS: NORMAL</span>
<span><a href="https://www.labyricorn.com/" target="_blank" rel="noopener noreferrer" style="color:inherit;text-decoration:none;">VIBE ENGINEERED BY LABYRICORN STUDIOS</a></span>
+38 -38
View File
@@ -1,6 +1,6 @@
/**
* Main Application Controller - 10 Sci-Fi Universes Architecture
* Coordinates Starfleet, Whoniverse, Industrial, Bioships, Retro Future, Military,
* Coordinates Starflight, Whataverse, Industrial, Bioships, Retro Future, Military,
* Deep Space, Outlaw, Space Stations, and Comedy universes.
*/
@@ -12,7 +12,7 @@ document.addEventListener('DOMContentLoaded', () => {
const lifeSupport = new LifeSupportSynth(audioManager);
const telemetry = new TelemetrySynth(audioManager);
const alerts = new AlertSynth(audioManager);
const whoniverseAudio = new WhoniverseAudioSynth(audioManager);
const whoniverseAudio = new WhataverseAudioSynth(audioManager);
const expandedAudio = new ExpandedSciFiAudioSynth(audioManager);
const engineTransitions = new EngineTransitionSynth(audioManager);
window.expandedAudio = expandedAudio;
@@ -141,13 +141,13 @@ document.addEventListener('DOMContentLoaded', () => {
sidebar: 'STARSHIP PRESETS',
visTitle: 'INTERMIX CASCADE',
visLabel: 'INTERMIX CHAMBER // ACTIVE',
soundboard: 'LCARS KEYPAD'
soundboard: 'LCARD KEYPAD'
},
'whoniverse': {
sidebar: 'TARDIS CONSOLES',
sidebar: 'TARDIX CONSOLES',
visTitle: 'CENTRAL TIME ROTOR COLUMN',
visLabel: 'VORTEX ROTOR // OPERATIONAL',
soundboard: 'TARDIS CONSOLE CONTROLS'
soundboard: 'TARDIX CONSOLE CONTROLS'
},
'industrial': {
sidebar: 'INDUSTRIAL FREIGHTERS',
@@ -156,7 +156,7 @@ document.addEventListener('DOMContentLoaded', () => {
soundboard: 'INDUSTRIAL INSTRUMENTATION'
},
'bioships': {
sidebar: 'SENTIENT LEVIATHANS',
sidebar: 'SENTIENT LEVIATHONS',
visTitle: 'ORGANIC BIO-HEART SAC',
visLabel: 'VASCULAR NEXUS // PULSING',
soundboard: 'NEURAL LINK SENSORS'
@@ -272,7 +272,7 @@ document.addEventListener('DOMContentLoaded', () => {
btn.innerHTML = `
<span>${preset.name}</span>
<span class="ship-era-tag">${(preset.era || 'SHIP').toUpperCase()} // ${preset.warp.pulseShape.toUpperCase()} CORE</span>
<span class="ship-era-tag">${(universe.name || 'SHIP').toUpperCase()}</span>
`;
btn.addEventListener('click', () => {
@@ -298,11 +298,11 @@ document.addEventListener('DOMContentLoaded', () => {
}
// Phase 2 audio_gaps.md rows #25-#45
if (presetId === 'bio-vorlon') expandedAudio.startVorlonSong(); // #26
if (presetId === 'bio-vorlon') expandedAudio.startVorlanSong(); // #26
if (presetId === 'bio-wraith') expandedAudio.startHullRegen(); // #28
if (presetId === 'deep-event-horizon' || presetId === 'deep-icarus-ii') expandedAudio.startHullStrainMoans(); // #30
// Phase 3 (audio_gaps.md #46-#54)
if (presetId === 'sta-babylon-5') expandedAudio.startZocaloChatter(); // #46
if (presetId === 'sta-babylon-5') expandedAudio.startZocoloChatter(); // #46
if (presetId === 'ind-nostromo') expandedAudio.startTeletypeChatter(); // #51
if (presetId === 'ret-jupiter-2') expandedAudio.startHeterodyneDrone(); // #54
if (presetId === 'deep-icarus-ii') expandedAudio.startIcarusBeacon(); // #31
@@ -351,7 +351,7 @@ document.addEventListener('DOMContentLoaded', () => {
startPresetAmbience(presetId);
if (activeUniverseId === 'whoniverse') whoniverseAudio.synthesizeDematSwitch();
else if (activeUniverseId === 'industrial') expandedAudio.synthesizeDockingClamp();
else telemetry.synthesizeLCARSSingleChirp();
else telemetry.synthesizeLCARDSingleChirp();
}
if (observationActive && typeof refreshObservation === 'function') {
@@ -412,7 +412,7 @@ document.addEventListener('DOMContentLoaded', () => {
// Acoustic chime / chirp feedback
if (activeUniverseId === 'whoniverse') whoniverseAudio.synthesizeTelepathicChime();
else if (activeUniverseId === 'bioships') expandedAudio.synthesizeStarburst();
else telemetry.synthesizeLCARSDoubleChirp();
else telemetry.synthesizeLCARDDoubleChirp();
// Start engine sounds with smooth spool-up ramp
hullDrone.start(ENGINE_TRANSITION_SECS);
@@ -449,7 +449,7 @@ document.addEventListener('DOMContentLoaded', () => {
engineTransitions.playShutdown(engineProfile, ENGINE_TRANSITION_SECS);
if (activeUniverseId === 'whoniverse') whoniverseAudio.synthesizeLeverClunk();
else telemetry.synthesizeLCARSDoubleChirp();
else telemetry.synthesizeLCARDDoubleChirp();
// Stop engine sounds with smooth spool-down fade
hullDrone.stop(ENGINE_TRANSITION_SECS);
@@ -702,7 +702,7 @@ document.addEventListener('DOMContentLoaded', () => {
visualizer.spawnWarpPulses();
break;
default:
telemetry.synthesizeLCARSSingleChirp();
telemetry.synthesizeLCARDSingleChirp();
break;
}
}
@@ -728,13 +728,13 @@ document.addEventListener('DOMContentLoaded', () => {
break;
case 'btn-chirp-single':
case 'btn-switch-pop':
telemetry.synthesizeLCARSSingleChirp();
telemetry.synthesizeLCARDSingleChirp();
break;
case 'btn-chirp-double':
telemetry.synthesizeLCARSDoubleChirp();
telemetry.synthesizeLCARDDoubleChirp();
break;
case 'btn-chirp-ack':
telemetry.synthesizeLCARSSequence();
telemetry.synthesizeLCARDSequence();
break;
case 'btn-chirp-sweep':
telemetry.synthesizeSensorSweep();
@@ -743,7 +743,7 @@ document.addEventListener('DOMContentLoaded', () => {
telemetry.synthesizeDoorChime();
break;
// Whoniverse
// Whataverse
case 'btn-sonic':
whoniverseAudio.synthesizeSonicScrewdriver();
break;
@@ -751,7 +751,7 @@ document.addEventListener('DOMContentLoaded', () => {
whoniverseAudio.synthesizeLeverClunk();
break;
case 'btn-tardis-door':
whoniverseAudio.synthesizeTardisDoor();
whoniverseAudio.synthesizeTARDIXDoor();
break;
case 'btn-fast-return':
whoniverseAudio.synthesizeFastReturn();
@@ -777,7 +777,7 @@ document.addEventListener('DOMContentLoaded', () => {
expandedAudio.synthesizeMagBootLatch();
break;
case 'btn-commlock':
expandedAudio.synthesizeCommlockTone();
expandedAudio.synthesizeComlockTone();
break;
case 'btn-sevas-spark':
expandedAudio.synthesizeSevastopolSpark();
@@ -840,7 +840,7 @@ document.addEventListener('DOMContentLoaded', () => {
expandedAudio.synthesizeDockingClamp();
break;
case 'btn-dradis-ping':
expandedAudio.synthesizeDradisPing();
expandedAudio.synthesizeDRADARPing();
break;
case 'btn-hal-chime':
expandedAudio.synthesizeHalChime();
@@ -851,10 +851,10 @@ document.addEventListener('DOMContentLoaded', () => {
expandedAudio.synthesizeCardassianDoor();
break;
case 'btn-turbolift':
expandedAudio.synthesizeTurboliftWhoosh();
expandedAudio.synthesizeTurbochuteWhoosh();
break;
case 'btn-replicator':
expandedAudio.synthesizeReplicatorShimmer();
expandedAudio.synthesizeFabricatorShimmer();
break;
case 'btn-scanner-activate':
whoniverseAudio.synthesizeScannerActivate();
@@ -863,7 +863,7 @@ document.addEventListener('DOMContentLoaded', () => {
whoniverseAudio.synthesizeTypeClatter();
break;
case 'btn-vorlon-song':
expandedAudio.synthesizeVorlonSingingSwell();
expandedAudio.synthesizeVorlanSingingSwell();
break;
case 'btn-neural-bond':
expandedAudio.synthesizeNeuralBondSwell();
@@ -872,7 +872,7 @@ document.addEventListener('DOMContentLoaded', () => {
expandedAudio.synthesizeHullRegenBurst();
break;
case 'btn-belter-telemetry':
expandedAudio.synthesizeBelterTelemetryJitter();
expandedAudio.synthesizeBeltworkerTelemetryJitter();
break;
case 'btn-hull-strain':
expandedAudio.synthesizeHullStrainMoan();
@@ -925,7 +925,7 @@ document.addEventListener('DOMContentLoaded', () => {
// Phase 3 (audio_gaps.md #48-#53)
case 'btn-transporter':
expandedAudio.synthesizeTransporterCycle();
expandedAudio.synthesizeTranslocatorCycle();
break;
case 'btn-breech-clank':
expandedAudio.synthesizeBreechClank();
@@ -940,8 +940,8 @@ document.addEventListener('DOMContentLoaded', () => {
expandedAudio.synthesizeTeletypeChatterPhrase();
break;
case 'btn-zocalo-chatter':
if (expandedAudio.zocaloChatterActive) expandedAudio.stopZocaloChatter();
else expandedAudio.startZocaloChatter();
if (expandedAudio.zocaloChatterActive) expandedAudio.stopZocoloChatter();
else expandedAudio.startZocoloChatter();
break;
case 'btn-hetero-drone':
if (expandedAudio.heterodyneDroneActive) expandedAudio.stopHeterodyneDrone();
@@ -949,7 +949,7 @@ document.addEventListener('DOMContentLoaded', () => {
break;
default:
telemetry.synthesizeLCARSSingleChirp();
telemetry.synthesizeLCARDSingleChirp();
break;
}
}
@@ -1857,7 +1857,7 @@ document.addEventListener('DOMContentLoaded', () => {
</g>`;
}
function generateStarfleetActivity(power) {
function generateStarflightActivity(power) {
const effect = obsPick(['contact','vector','data','ring','diagnostic','streak']);
if (effect === 'contact') {
const x = obsInt(420,1180), y = obsInt(230,690);
@@ -1905,7 +1905,7 @@ document.addEventListener('DOMContentLoaded', () => {
return spawnObservationTransient(obsExpandingRing(obsInt(420,1180),obsInt(250,680),'var(--primary-accent)',obsInt(45,90)), 3200);
}
function generateWhoniverseActivity(power) {
function generateWhataverseActivity(power) {
const effect = obsPick(['echo','glyphs','coordinate','warp','rings']);
if (effect === 'echo') {
const x=obsInt(430,1170), y=obsInt(270,650);
@@ -2412,8 +2412,8 @@ document.addEventListener('DOMContentLoaded', () => {
if (observationActivity > .82 && Math.random() < (observationActivity - .7)) count++;
const generator = {
starfleet: generateStarfleetActivity,
whoniverse: generateWhoniverseActivity,
starfleet: generateStarflightActivity,
whoniverse: generateWhataverseActivity,
industrial: generateIndustrialActivity,
bioships: generateBioshipActivity,
retrofuture: generateRetroActivity,
@@ -2422,7 +2422,7 @@ document.addEventListener('DOMContentLoaded', () => {
outlaw: generateOutlawActivity,
spacestations: generateStationActivity,
comedy: generateComedyActivity
}[activeUniverseId] || generateStarfleetActivity;
}[activeUniverseId] || generateStarflightActivity;
for (let i = 0; i < count; i++) {
window.setTimeout(() => generator(observationActivity), i * obsInt(120,380));
@@ -3068,7 +3068,7 @@ document.addEventListener('DOMContentLoaded', () => {
</svg>`;
}
function renderObservationStarfleet() {
function renderObservationStarflight() {
const starsA = makeStars(115, 1750, 900, '#dbeafe', 2);
const starsB = makeStars(55, 1750, 900, '#93c5fd', 220);
return svgFrame(`
@@ -3121,7 +3121,7 @@ document.addEventListener('DOMContentLoaded', () => {
`);
}
function renderObservationWhoniverse() {
function renderObservationWhataverse() {
return svgFrame(`
<rect width="1600" height="900" fill="#020817"/>
<circle cx="800" cy="455" r="420" fill="url(#obsGlow)" opacity=".5"/>
@@ -4060,8 +4060,8 @@ document.addEventListener('DOMContentLoaded', () => {
function getObservationSvg(universeId) {
switch (universeId) {
case 'starfleet': return renderObservationStarfleet();
case 'whoniverse': return renderObservationWhoniverse();
case 'starfleet': return renderObservationStarflight();
case 'whoniverse': return renderObservationWhataverse();
case 'industrial': return renderObservationIndustrial();
case 'bioships': return renderObservationBioships();
case 'retrofuture': return renderObservationRetro();
@@ -4070,7 +4070,7 @@ document.addEventListener('DOMContentLoaded', () => {
case 'outlaw': return renderObservationOutlaw();
case 'spacestations': return renderObservationStations();
case 'comedy': return renderObservationComedy();
default: return renderObservationStarfleet();
default: return renderObservationStarflight();
}
}
+100 -100
View File
@@ -365,8 +365,8 @@ window.HullDroneSynth = HullDroneSynth;
/**
* Warp Core & Reactor Pulse Synthesizer
* Generates the iconic pulsating magnetic intermix thrum of Star Trek warp cores.
* Worp Core & Reactor Pulse Synthesizer
* Generates the iconic pulsating magnetic intermix thrum of Star Trek worp cores.
*/
class WarpCoreSynth {
@@ -379,7 +379,7 @@ class WarpCoreSynth {
// Pulse parameters
this.params = {
volume: 0.8,
bpm: 48, // Pulse rate (TNG is ~46-52 BPM, Voyager is ~68-75 BPM)
bpm: 48, // Pulse rate (TNG is ~46-52 BPM, Wayfarer is ~68-75 BPM)
carrierFreq: 58, // Fundamental carrier pitch (Hz)
modFreqRatio: 2.0, // FM modulation frequency multiplier
modIndex: 40, // FM modulation depth
@@ -515,7 +515,7 @@ class WarpCoreSynth {
this.filterNode.frequency.exponentialRampToValueAtTime(this.params.filterCutoff * 0.7, now + pulseDuration * 0.95);
} else if (this.params.pulseShape === 'voyager') {
// Faster, sharper, higher-resonance Class 9 warp core
// Faster, sharper, higher-resonance Class 9 worp core
const peakTime = now + pulseDuration * 0.2;
this.pulseGain.gain.cancelScheduledValues(now);
this.pulseGain.gain.setValueAtTime(0.25, now);
@@ -535,7 +535,7 @@ class WarpCoreSynth {
this.pulseGain.gain.linearRampToValueAtTime(0.4, now + pulseDuration);
} else if (this.params.pulseShape === 'defiant') {
// Defiant: tight, aggressive pulse with rapid decay
// Defiance: tight, aggressive pulse with rapid decay
const peakTime = now + pulseDuration * 0.15;
this.pulseGain.gain.cancelScheduledValues(now);
this.pulseGain.gain.setValueAtTime(0.3, now);
@@ -654,7 +654,7 @@ class LifeSupportSynth {
this.params = {
volume: 0.5,
noiseType: 'pink', // 'pink' (warm TNG), 'white' (crisp Voyager), 'brown' (heavy NX-01)
noiseType: 'pink', // 'pink' (warm TNG), 'white' (crisp Wayfarer), 'brown' (heavy NX-01)
highpassFreq: 180, // Cuts extreme sub rumble to isolate air movement
lowpassFreq: 1800, // Gentle top-end rolloff
airflowModSpeed: 0.15, // Subtle breathing movement of the environmental airflow
@@ -796,7 +796,7 @@ window.LifeSupportSynth = LifeSupportSynth;
/**
* Procedural Starship Telemetry, LCARS Chirps, Beeps & Console Synthesizer
* Procedural Starship Telemetry, LCARD Chirps, Beeps & Console Synthesizer
* 100% synthesized programmatically via Web Audio API oscillators, FM synthesis, and envelopes.
* Zero stored audio samples.
*/
@@ -815,7 +815,7 @@ class TelemetrySynth {
reverbMix: 0.25
};
// Musical pitch frequencies for authentic LCARS musical intervals (major/minor pentatonic & perfect 4ths/5ths)
// Musical pitch frequencies for authentic LCARD musical intervals (major/minor pentatonic & perfect 4ths/5ths)
this.lcarsPitches = [
880, 987.77, 1046.50, 1174.66, 1318.51, 1396.91, 1567.98, 1760, 1975.53, 2093.00, 2349.32, 2637.02
];
@@ -827,10 +827,10 @@ class TelemetrySynth {
}
/**
* Lazily creates the telemetry gain node so soundboard one-shots (LCARS
* Lazily creates the telemetry gain node so soundboard one-shots (LCARD
* chirps, era-specific one-shots) work standalone even before the ambient
* bed has been engaged via start(). Mirrors the init() self-heal pattern
* used by ExpandedSciFiAudioSynth and WhoniverseAudioSynth. start() below
* used by ExpandedSciFiAudioSynth and WhataverseAudioSynth. start() below
* still unconditionally rebuilds the node on every engage so a fresh
* preset's volume takes effect immediately; this only fills the gap
* before that has ever happened.
@@ -901,18 +901,18 @@ class TelemetrySynth {
this.synthesizeBioshipOrganicTelemetry_();
break;
case 'belter':
this.synthesizeBelterJuryRiggedTelemetry_();
this.synthesizeBeltworkerJuryRiggedTelemetry_();
break;
case 'tos':
Math.random() > 0.4 ? this.synthesizeTOSWarble() : this.synthesizeTOSRelayClick();
break;
case 'ds9':
Math.random() > 0.5 ? this.synthesizeCardassianSensor() : this.synthesizeLCARSSingleChirp();
Math.random() > 0.5 ? this.synthesizeCardassianSensor() : this.synthesizeLCARDSingleChirp();
break;
case 'voyager': {
const r = Math.random();
if (r < 0.12) this.synthesizeCommBadge();
else if (r < 0.55) this.synthesizeLCARSDoubleChirp();
else if (r < 0.55) this.synthesizeLCARDDoubleChirp();
else this.synthesizeSensorSweep();
break;
}
@@ -923,9 +923,9 @@ class TelemetrySynth {
default: {
const r = Math.random();
if (r < 0.10) this.synthesizeCommBadge();
else if (r < 0.45) this.synthesizeLCARSSingleChirp();
else if (r < 0.72) this.synthesizeLCARSDoubleChirp();
else if (r < 0.88) this.synthesizeLCARSSequence();
else if (r < 0.45) this.synthesizeLCARDSingleChirp();
else if (r < 0.72) this.synthesizeLCARDDoubleChirp();
else if (r < 0.88) this.synthesizeLCARDSequence();
else this.synthesizeSensorSweep();
break;
}
@@ -943,7 +943,7 @@ class TelemetrySynth {
}
/**
* Star Trek Comm Badge Confirmation Chirp
* Star Trek Com Badge Confirmation Chirp
*/
synthesizeCommBadge() {
this.init();
@@ -971,9 +971,9 @@ class TelemetrySynth {
}
/**
* TNG/Voyager Single LCARS Touch Tone (Soft sine with gentle attack and rapid exponential decay)
* TNG/Wayfarer Single LCARD Touch Tone (Soft sine with gentle attack and rapid exponential decay)
*/
synthesizeLCARSSingleChirp(pitch = null) {
synthesizeLCARDSingleChirp(pitch = null) {
this.init();
const ctx = this.am.ctx;
if (!ctx || !this.gainNode) return;
@@ -1007,9 +1007,9 @@ class TelemetrySynth {
}
/**
* TNG LCARS Double Chirp (Iconic standard confirmation tone)
* TNG LCARD Double Chirp (Iconic standard confirmation tone)
*/
synthesizeLCARSDoubleChirp() {
synthesizeLCARDDoubleChirp() {
this.init();
const ctx = this.am.ctx;
if (!ctx) return;
@@ -1017,16 +1017,16 @@ class TelemetrySynth {
const p1 = this.lcarsPitches[idx];
const p2 = this.lcarsPitches[idx + 2]; // Minor third or fourth higher
this.synthesizeLCARSSingleChirp(p1);
this.synthesizeLCARDSingleChirp(p1);
setTimeout(() => {
this.synthesizeLCARSSingleChirp(p2);
this.synthesizeLCARDSingleChirp(p2);
}, 65);
}
/**
* TNG LCARS Multi-Tone Data Acknowledgment Sequence
* TNG LCARD Multi-Tone Data Acknowledgment Sequence
*/
synthesizeLCARSSequence() {
synthesizeLCARDSequence() {
this.init();
const ctx = this.am.ctx;
if (!ctx) return;
@@ -1038,13 +1038,13 @@ class TelemetrySynth {
notes.forEach((freq, i) => {
setTimeout(() => {
this.synthesizeLCARSSingleChirp(freq);
this.synthesizeLCARDSingleChirp(freq);
}, i * 75);
});
}
/**
* High-tech Sensor Sweep Tone (Voyager/TNG Long-Range Sensor telemetry)
* High-tech Sensor Sweep Tone (Wayfarer/TNG Long-Range Sensor telemetry)
*/
synthesizeSensorSweep() {
this.init();
@@ -1291,8 +1291,8 @@ class TelemetrySynth {
}
/**
* Whoniverse Mechanical Telemetry Engine (audio_gaps.md #25, Phase 3 era)
* The TARDIS console never chirps like Starfleet gear: each tick emits a
* Whataverse Mechanical Telemetry Engine (audio_gaps.md #25, Phase 3 era)
* The TARDIX console never chirps like Starflight gear: each tick emits a
* 0.25-0.6 s cluster of mechanical foley - dual-filtered toggle snaps,
* low 60-120 Hz spring-lever clicks and damped rotary selector pings
* (no electronic beeps). All transients scheduled on absolute ctx time so
@@ -1486,14 +1486,14 @@ class TelemetrySynth {
}
/**
* Belter Jury-Rigged Telemetry Engine (audio_gaps.md #29, Phase 3 era)
* Beltworker Jury-Rigged Telemetry Engine (audio_gaps.md #29, Phase 3 era)
* Rattling relays, worn copper contactors and erratic voltage on Ceres /
* Tycho / Rocinante hardware: jittered square pulses with randomized
* micro-dropouts, contact-bounce double clicks, harsh metallic ticks and
* unstable clock pings. One 3-6 event volley on absolute ctx time, with an
* occasional late sub-cluster to mimic an unsteady clock.
*/
synthesizeBelterJuryRiggedTelemetry_() {
synthesizeBeltworkerJuryRiggedTelemetry_() {
this.init();
const ctx = this.am.ctx;
if (!ctx || !this.gainNode) return;
@@ -1892,12 +1892,12 @@ window.AlertSynth = AlertSynth;
/**
* Procedural Doctor Who & TARDIS Sound Synthesizer
* Procedural Doctor Who & TARDIX Sound Synthesizer
* 100% synthesized programmatically via Web Audio API.
* Includes Dematerialization Wheeze-Groan, Cloister Bell, Sonic Screwdriver, and TARDIS Console Foley.
* Includes Dematerialization Wheeze-Groan, Cloister Chime, Acoustic Screwdriver, and TARDIX Console Foley.
*/
class WhoniverseAudioSynth {
class WhataverseAudioSynth {
constructor(audioManager) {
this.am = audioManager;
this.gainNode = null;
@@ -1914,7 +1914,7 @@ class WhoniverseAudioSynth {
}
/**
* Procedural TARDIS Materialization / Dematerialization ("Wheeze-Groan")
* Procedural TARDIX Materialization / Dematerialization ("Wheeze-Groan")
* Modeled after Brian Hodgson's 1963 BBC Radiophonic technique:
* Dragging keys on piano bass strings -> reverse playback -> slow tape speed -> feedback loop.
*/
@@ -2009,7 +2009,7 @@ class WhoniverseAudioSynth {
}
/**
* Procedural Cloister Bell (Deep, ominous bronze cathedral bell)
* Procedural Cloister Chime (Deep, ominous bronze cathedral bell)
*/
triggerCloisterBell() {
this.init();
@@ -2019,7 +2019,7 @@ class WhoniverseAudioSynth {
const ringLoop = () => {
if (!this.activeCloister) return;
this.synthesizeCloisterStrike();
this.cloisterTimer = setTimeout(ringLoop, 3200); // Canonical cloister bell repetition rate
this.cloisterTimer = setTimeout(ringLoop, 3200); // Canonical cloister chime repetition rate
};
ringLoop();
@@ -2071,7 +2071,7 @@ class WhoniverseAudioSynth {
}
/**
* Procedural Sonic Screwdriver (High-frequency modulated sweep & vibrato warble)
* Procedural Acoustic Screwdriver (High-frequency modulated sweep & vibrato warble)
*/
synthesizeSonicScrewdriver(durationSeconds = 1.2) {
this.init();
@@ -2156,7 +2156,7 @@ class WhoniverseAudioSynth {
}
/**
* TARDIS Demat Switch / Relay Solenoid
* TARDIX Demat Switch / Relay Solenoid
*/
synthesizeDematSwitch() {
this.init();
@@ -2213,7 +2213,7 @@ class WhoniverseAudioSynth {
}
/**
* TARDIS Lever-Throw Clunk (Tactile mechanical switch)
* TARDIX Lever-Throw Clunk (Tactile mechanical switch)
* Hard square transient click coupled to a dull highpass noise thump
*/
synthesizeLeverClunk() {
@@ -2259,10 +2259,10 @@ class WhoniverseAudioSynth {
}
/**
* TARDIS Police Box Exterior Door Open / Close (Wood creak + mortise latch)
* TARDIX Police Box Exterior Door Open / Close (Wood creak + mortise latch)
* Modulated bandpass friction noise layered over a sharp metallic dual-click transient
*/
synthesizeTardisDoor() {
synthesizeTARDIXDoor() {
this.init();
const ctx = this.am.ctx;
if (!ctx || !this.gainNode) return;
@@ -2312,7 +2312,7 @@ class WhoniverseAudioSynth {
}
/**
* Scanner / Monitor Screen Activation (Whoniverse, audio_gaps.md #24)
* Scanner / Monitor Screen Activation (Whataverse, audio_gaps.md #24)
* Rapid upward sine sweep (200 Hz -> 1600 Hz over 120 ms) terminating in a
* CRT flyback whine. The 15.6 kHz spec tail is compromised to ~10.6 kHz:
* near/above Nyquist on low-rate contexts and ear-fatiguing at audible levels.
@@ -2368,7 +2368,7 @@ class WhoniverseAudioSynth {
}
/**
* Console "Type" Input Clatter Cluster (Whoniverse, audio_gaps.md #25)
* Console "Type" Input Clatter Cluster (Whataverse, audio_gaps.md #25)
* Rhythmic mechanical clatter of toggle switches, spring-loaded buttons and
* tumbler relays: clustered wooden/plastic clicks and solenoid snaps rather
* than tonal beeps. Produces a single 0.3-0.6 s cluster of 3-7 transients.
@@ -2441,7 +2441,7 @@ class WhoniverseAudioSynth {
}
/**
* Stops all automated Whoniverse ambient loops. Phase 3 moved console
* Stops all automated Whataverse ambient loops. Phase 3 moved console
* "type" telemetry (audio_gaps.md #25) into TelemetrySynth era 'who'
* routing, which is stopped via telemetry.stop() / FULL STOP. Hook
* retained because js/app.js calls it at three ambience switch points.
@@ -2450,13 +2450,13 @@ class WhoniverseAudioSynth {
}
}
window.WhoniverseAudioSynth = WhoniverseAudioSynth;
window.WhataverseAudioSynth = WhataverseAudioSynth;
/**
* Procedural Audio Synthesizers for Expanded Sci-Fi Universes
* Generates Epstein drives, Bio-ship neural pulses, DRADIS sonar, Singularity drives,
* Retro analog tone glides, and Ludicrous speed reality shifts via Web Audio API.
* Generates Epsilon Drives, Bio-ship neural pulses, DRADAR sonar, Singularity drives,
* Retro analog tone glides, and Ridiculous Speed reality shifts via Web Audio API.
*/
class ExpandedSciFiAudioSynth {
@@ -2477,7 +2477,7 @@ class ExpandedSciFiAudioSynth {
}
/**
* Epstein Drive Fusion Torch Burn (The Expanse / Industrial Space)
* Epsilon Drive Fusion Torch Burn (The Expanse / Industrial Space)
* Tremendous raw fusion thrust with high-pressure magnetic plasma acceleration
*/
synthesizeEpsteinBurn() {
@@ -2576,10 +2576,10 @@ class ExpandedSciFiAudioSynth {
}
/**
* Battlestar Galactica DRADIS Sonar Ping (Military Space)
* Battlestar Galactica DRADAR Sonar Ping (Military Space)
* The iconic tactical combat contact echo
*/
synthesizeDradisPing() {
synthesizeDRADARPing() {
this.init();
const ctx = this.am.ctx;
if (!ctx) return;
@@ -2680,7 +2680,7 @@ class ExpandedSciFiAudioSynth {
}
/**
* HAL 9000 Logic Confirmation Chime (Discovery One)
* HAL 9999 Logic Confirmation Chime (Discovery One)
*/
synthesizeHalChime() {
this.init();
@@ -2915,7 +2915,7 @@ class ExpandedSciFiAudioSynth {
}
/**
* Ludicrous Speed Accelerator (Spaceball One / Comedy)
* Ridiculous Speed Accelerator (Spaceball One / Comedy)
*/
synthesizeLudicrousSpeed() {
this.init();
@@ -2943,7 +2943,7 @@ class ExpandedSciFiAudioSynth {
}
/**
* Infinite Improbability Reality-Warp Flip (Heart of Gold)
* Infinite Unlikelihood Reality-Warp Flip (Heart of Gold)
*/
synthesizeImprobabilityFlip() {
this.init();
@@ -3031,7 +3031,7 @@ class ExpandedSciFiAudioSynth {
}
/**
* Star Trek Comm Badge Confirmation Chirp
* Star Trek Com Badge Confirmation Chirp
* Iconic bright two-tone pulse in rapid sequence (784 Hz to 1397 Hz)
*/
synthesizeCommBadge() {
@@ -3076,7 +3076,7 @@ class ExpandedSciFiAudioSynth {
}
/**
* Starfleet Pneumatic Door Swish (Four Era Variants)
* Starflight Pneumatic Door Swish (Four Era Variants)
* Bandpass-filtered white noise burst shaped per era
*/
synthesizeDoorSwish(era = 'tng') {
@@ -3140,7 +3140,7 @@ class ExpandedSciFiAudioSynth {
}
/**
* Starfleet Bosun's Pipe Whistle (TOS Command Announce)
* Starflight Bosun's Pipe Whistle (TOS Command Announce)
* Two-tone sine glide (1800 Hz -> 2400 Hz -> 1850 Hz) with gentle tremolo
*/
synthesizeBosunWhistle() {
@@ -3184,7 +3184,7 @@ class ExpandedSciFiAudioSynth {
}
/**
* Starfleet Sickbay Medical Monitor ECG Ping
* Starflight Medbay Medical Monitor ECG Ping
* Calm, periodic rhythmic vital signs pulse (1080 Hz sine, 40 ms decay)
*/
synthesizeMedicalMonitor() {
@@ -3251,10 +3251,10 @@ class ExpandedSciFiAudioSynth {
}
/**
* Moonbase Alpha Commlock Calling Tone (Space: 1999)
* Moonbase Alpha Comlock Calling Tone (Space: 9999)
* Dual square wave pulse sequence (1100 Hz / 1500 Hz)
*/
synthesizeCommlockTone() {
synthesizeComlockTone() {
this.init();
const ctx = this.am.ctx;
if (!ctx || !this.gainNode) return;
@@ -3589,7 +3589,7 @@ class ExpandedSciFiAudioSynth {
}
/**
* Ludicrous Speed Plaid Alarm (Spaceball One)
* Ridiculous Speed Plaid Alarm (Spaceball One)
* Two-tone alternating square wave siren (440 Hz / 880 Hz)
*/
synthesizePlaidAlarm() {
@@ -3706,7 +3706,7 @@ class ExpandedSciFiAudioSynth {
}
/**
* Grappler Arm Servo Motor Whine (Outlaw Star / Bebop)
* Grapple System Arm Servo Motor Whine (Outlaw Star / Bebop)
* Swept triangle wave (220 Hz -> 680 Hz) through resonant bandpass filter
*/
synthesizeGrapplerServo() {
@@ -3945,11 +3945,11 @@ class ExpandedSciFiAudioSynth {
}
/**
* Turbolift Pass Whoosh (Star Trek TNG/VOY, audio_gaps.md #22)
* Turbochute Pass Whoosh (Star Trek TNG/VOY, audio_gaps.md #22)
* Bandpass-filtered white noise pitch sweep (180 -> 450 Hz and back) with
* resonant boost and soft stereo panning drift past the listener.
*/
synthesizeTurboliftWhoosh() {
synthesizeTurbochuteWhoosh() {
this.init();
const ctx = this.am.ctx;
if (!ctx || !this.gainNode) return;
@@ -3995,11 +3995,11 @@ class ExpandedSciFiAudioSynth {
}
/**
* Replicator Materialization Shimmer (Star Trek TNG/VOY, audio_gaps.md #23)
* Fabricator Materialization Shimmer (Star Trek TNG/VOY, audio_gaps.md #23)
* High-frequency white-noise shimmer (2.5-8 kHz) amplitude-modulated by a
* fast 30 Hz sine LFO with a soft ramp decay.
*/
synthesizeReplicatorShimmer() {
synthesizeFabricatorShimmer() {
this.init();
const ctx = this.am.ctx;
if (!ctx || !this.gainNode) return;
@@ -4053,12 +4053,12 @@ class ExpandedSciFiAudioSynth {
}
/**
* Vorlon Crystal "Singing" Resonance (Bioships, audio_gaps.md #26)
* Vorlan Crystal "Singing" Resonance (Bioships, audio_gaps.md #26)
* Ethereal telepathic crystal harmonics: dual detuned sines (528/532 Hz)
* through a narrow bandpass with a slow 0.2 Hz undulating tremolo.
* One 8.5 s swell phrasing.
*/
synthesizeVorlonSingingSwell() {
synthesizeVorlanSingingSwell() {
this.init();
const ctx = this.am.ctx;
if (!ctx || !this.gainNode) return;
@@ -4107,11 +4107,11 @@ class ExpandedSciFiAudioSynth {
}
/**
* Ambient Loop: Vorlon singing resonance while the Vorlon cruiser is engaged
* Ambient Loop: Vorlan singing resonance while the Vorlan cruiser is engaged
*/
startVorlonSong(minIntervalMs = 11000, maxIntervalMs = 18000) {
startVorlanSong(minIntervalMs = 11000, maxIntervalMs = 18000) {
this._scheduleLoop('vorlonSong', minIntervalMs, maxIntervalMs, () => {
this.synthesizeVorlonSingingSwell();
this.synthesizeVorlanSingingSwell();
});
}
@@ -4234,12 +4234,12 @@ class ExpandedSciFiAudioSynth {
}
/**
* Belter Jury-Rigged Telemetry Jitter (Space Stations, audio_gaps.md #29)
* Beltworker Jury-Rigged Telemetry Jitter (Space Stations, audio_gaps.md #29)
* Rattle of loose relays, worn copper contactors and erratic voltage drops:
* noisy square relay pulses with micro-dropouts, contact-bounce double
* clicks and harsh metallic ticks on a jittered clock. One ~1.1 s cluster.
*/
synthesizeBelterTelemetryJitter() {
synthesizeBeltworkerTelemetryJitter() {
this.init();
const ctx = this.am.ctx;
if (!ctx || !this.gainNode) return;
@@ -4498,7 +4498,7 @@ class ExpandedSciFiAudioSynth {
}
/**
* Beryllium Sphere Resonant Thrum (Comedy, audio_gaps.md #33)
* Beryllium Orb Resonant Thrum (Comedy, audio_gaps.md #33)
* Deep glassy crystalline reactor hum: dual pure sines (65 + 195 Hz third
* harmonic) with slow beating detune and a subtle comb-filter ring.
* One ~10 s swell phrasing.
@@ -4550,7 +4550,7 @@ class ExpandedSciFiAudioSynth {
}
/**
* Ambient Loop: Beryllium sphere thrum while the NSEA Protector is engaged
* Ambient Loop: Beryllium Orb thrum while the NSEA Protector is engaged
*/
startBerylliumThrum(minIntervalMs = 9000, maxIntervalMs = 16000) {
this._scheduleLoop('berylliumThrum', minIntervalMs, maxIntervalMs, () => {
@@ -4559,7 +4559,7 @@ class ExpandedSciFiAudioSynth {
}
/**
* Omega-13 Temporal Capacitor Whine (Comedy, audio_gaps.md #34)
* Omega-12+1 Temporal Capacitor Whine (Comedy, audio_gaps.md #34)
* Tremendous temporal capacitor power buildup: deep 40 Hz sub-bass swelling
* exponentially to 3200 Hz over 3 seconds, culminating in a wide
* white-noise discharge pop.
@@ -4608,7 +4608,7 @@ class ExpandedSciFiAudioSynth {
}
/**
* Repulsorlift Engine Drone (Outlaw, audio_gaps.md #35)
* Repeller Lift Engine Drone (Outlaw, audio_gaps.md #35)
* Quintessential anti-gravity vehicle wash: dual detuned sines (68/72 Hz)
* through an asymmetric overdrive waveshaper, lowpass-filtered at 280 Hz.
* One ~10 s wash phrasing.
@@ -4659,7 +4659,7 @@ class ExpandedSciFiAudioSynth {
}
/**
* Ambient Loop: Repulsorlift wash while the Marauder is engaged
* Ambient Loop: Repeller Lift wash while the Marauder is engaged
*/
startRepulsorliftDrone(intervalMs = 13000) {
this._scheduleLoop('repulsorliftDrone', intervalMs, intervalMs, () => {
@@ -5068,7 +5068,7 @@ class ExpandedSciFiAudioSynth {
}
/**
* HAL 9000 Breathing Loop (Retro Future, audio_gaps.md #43)
* HAL 9999 Breathing Loop (Retro Future, audio_gaps.md #43)
* Eerie slow respiration of a quiet, observant ship computer: rhythmic
* bandpass-filtered pink noise (450-1100 Hz) with a gentle 3.5 s
* inhalation/exhalation envelope. One breath.
@@ -5114,7 +5114,7 @@ class ExpandedSciFiAudioSynth {
}
/**
* Death Blossom Energy Surge Ramp (Retro Future, audio_gaps.md #44)
* Death Bloom Energy Surge Ramp (Retro Future, audio_gaps.md #44)
* Fearsome gunstar overdrive: cascaded sawtooth exponential ramp
* (200 Hz -> 8000 Hz over 2.5 s) with rising overdrive, cutting off
* abruptly at full bloom.
@@ -5260,13 +5260,13 @@ class ExpandedSciFiAudioSynth {
}
/**
* Transporter Dematerialization / Rematerialization Cycle (audio_gaps.md #48)
* Translocator Dematerialization / Rematerialization Cycle (audio_gaps.md #48)
* The classic shimmering beam-up wash: an additive array of 5 detuned sines
* (330-990 Hz over a 660 Hz base) each interlocked with its own 5-11 Hz AM
* LFO, plus a high bandpass noise shimmer gated by a 30 Hz LFO, all under a
* slow rise / mid dip / release master envelope. ~3.0 s.
*/
synthesizeTransporterCycle() {
synthesizeTranslocatorCycle() {
this.init();
const ctx = this.am.ctx;
if (!ctx || !this.gainNode) return;
@@ -5830,18 +5830,18 @@ class ExpandedSciFiAudioSynth {
}
/**
* Zocalo Commerce-Plaza Chatter Bed (audio_gaps.md #46)
* Zocolo Commerce-Plaza Chatter Bed (audio_gaps.md #46)
* A persistent crowd-murmur bed for Babylon 5: looped pink noise through
* four parallel formant bandpasses (300 Hz - 3 kHz) whose centers drift at
* 0.03-0.11 Hz, plus an accent layer of vowelish murmur blips scheduled on
* the loop registry. Re-start fades any previous bed out first.
*/
startZocaloChatter() {
startZocoloChatter() {
this.init();
const ctx = this.am.ctx;
if (!ctx || !this.gainNode) return;
this.stopZocaloChatter();
this.stopZocoloChatter();
const now = ctx.currentTime;
const bedBuf = this.am.createNoiseBuffer('pink', 8);
@@ -5888,7 +5888,7 @@ class ExpandedSciFiAudioSynth {
// Crowd accents: murmur blips layered over the wash
this._scheduleLoop('zocaloAccents', 2400, 6800, () => {
this.synthesizeZocaloAccent_();
this.synthesizeZocoloAccent_();
});
this.zocaloChatterActive = true;
@@ -5896,7 +5896,7 @@ class ExpandedSciFiAudioSynth {
this.zocaloChatterSources = sources;
}
stopZocaloChatter() {
stopZocoloChatter() {
this.zocaloChatterActive = false;
this._stopLoop('zocaloAccents');
const gain = this.zocaloChatterGain;
@@ -5917,7 +5917,7 @@ class ExpandedSciFiAudioSynth {
* One crowd "voice" blip for the zocalo bed: a short formant-filtered noise
* impulse with a slight pitch glide, sometimes doubled. Self-releasing.
*/
synthesizeZocaloAccent_() {
synthesizeZocoloAccent_() {
const ctx = this.am.ctx;
if (!ctx || !this.gainNode) return;
@@ -5953,7 +5953,7 @@ class ExpandedSciFiAudioSynth {
stopAllLoops() {
this.stopMedicalMonitor();
this.stopStationSparks();
this.stopZocaloChatter();
this.stopZocoloChatter();
this.stopHeterodyneDrone();
Object.keys(this.loopTimers).forEach((key) => {
this._stopLoop(key);
@@ -6088,11 +6088,11 @@ class EngineTransitionSynth {
switch (profileKey) {
case 'intrepid': this._startupIntrepid(now, s); break;
case 'defiant': this._startupDefiant(now, s); break;
case 'defiant': this._startupDefiance(now, s); break;
case 'cardassian': this._startupCardassian(now, s); break;
case 'tos': this._startupTOS(now, s); break;
case 'nx': this._startupNX(now, s); break;
case 'tardis': this._startupTardis(now, s); break;
case 'tardis': this._startupTARDIX(now, s); break;
case 'industrial': this._startupIndustrial(now, s); break;
case 'bioship': this._startupBioship(now, s); break;
case 'retrofuture': this._startupRetrofuture(now, s); break;
@@ -6117,11 +6117,11 @@ class EngineTransitionSynth {
switch (profileKey) {
case 'intrepid': this._shutdownIntrepid(now, s); break;
case 'defiant': this._shutdownDefiant(now, s); break;
case 'defiant': this._shutdownDefiance(now, s); break;
case 'cardassian': this._shutdownCardassian(now, s); break;
case 'tos': this._shutdownTOS(now, s); break;
case 'nx': this._shutdownNX(now, s); break;
case 'tardis': this._shutdownTardis(now, s); break;
case 'tardis': this._shutdownTARDIX(now, s); break;
case 'industrial': this._shutdownIndustrial(now, s); break;
case 'bioship': this._shutdownBioship(now, s); break;
case 'retrofuture': this._shutdownRetrofuture(now, s); break;
@@ -6156,7 +6156,7 @@ class EngineTransitionSynth {
this._tone({ type: 'sine', startFreq: 75, endFreq: 24, startTime: now + 1.7 * s, duration: 0.75 * s, peakVol: 0.35 });
}
// 2. VOYAGER INTREPID CLASS
// 2. WAYFARER INTREPID CLASS
_startupIntrepid(now, s) {
this._click(now, 450, 0.025, 0.35);
this._click(now + 0.08 * s, 680, 0.025, 0.35);
@@ -6175,8 +6175,8 @@ class EngineTransitionSynth {
this._tone({ type: 'sine', startFreq: 140, endFreq: 30, startTime: now + 1.7 * s, duration: 0.8 * s, peakVol: 0.25 });
}
// 3. DEFIANT ESCORT
_startupDefiant(now, s) {
// 3. DEFIANCE ESCORT
_startupDefiance(now, s) {
this._click(now, 90, 0.06, 0.6, 'square');
this._tone({ type: 'sawtooth', startFreq: 50, endFreq: 120, startTime: now + 0.05 * s, duration: 0.6 * s, peakVol: 0.4, filterType: 'lowpass', filterFreq: 300 });
this._sub(now + 0.65 * s, 35, 95, 1.1 * s, 0.7);
@@ -6184,7 +6184,7 @@ class EngineTransitionSynth {
this._chime(now + 1.8 * s, [660, 880], 0.08 * s, 0.4 * s, 0.35);
this._sub(now + 1.8 * s, 95, 68, 0.7 * s, 0.5);
}
_shutdownDefiant(now, s) {
_shutdownDefiance(now, s) {
this._click(now, 110, 0.05, 0.6);
this._sub(now, 90, 35, 0.6 * s, 0.65);
this._tone({ type: 'sawtooth', startFreq: 720, endFreq: 60, startTime: now + 0.6 * s, duration: 1.2 * s, peakVol: 0.3, filterType: 'lowpass', filterFreq: 450 });
@@ -6240,14 +6240,14 @@ class EngineTransitionSynth {
this._tone({ type: 'sine', startFreq: 40, endFreq: 18, startTime: now + 1.7 * s, duration: 0.8 * s, peakVol: 0.3 });
}
// 7. TARDIS DIMENSIONAL
_startupTardis(now, s) {
// 7. TARDIX DIMENSIONAL
_startupTARDIX(now, s) {
this._click(now, 80, 0.06, 0.55);
this._tone({ type: 'sawtooth', startFreq: 140, endFreq: 680, startTime: now + 0.5 * s, duration: 1.3 * s, peakVol: 0.32, filterType: 'bandpass', filterFreq: 550, filterQ: 3.0 });
this._tone({ type: 'sine', startFreq: 70, endFreq: 220, startTime: now + 0.6 * s, duration: 1.2 * s, peakVol: 0.35 });
this._chime(now + 1.8 * s, [1046, 1318, 1567], 0.06 * s, 0.45 * s, 0.3);
}
_shutdownTardis(now, s) {
_shutdownTARDIX(now, s) {
this._click(now, 90, 0.05, 0.5);
this._tone({ type: 'sawtooth', startFreq: 620, endFreq: 75, startTime: now + 0.5 * s, duration: 1.3 * s, peakVol: 0.28, filterType: 'bandpass', filterFreq: 350, filterQ: 2.0 });
this._chime(now + 0.8 * s, [440], 0.1, 0.7 * s, 0.3);
+126 -126
View File
@@ -2,11 +2,11 @@ const StarshipPresets = {
// === TNG GALAXY CLASS ===
'tng-bridge': {
id: 'tng-bridge',
name: 'Enterprise-D: Main Bridge',
name: 'Interprise-G: Main Bridge',
era: 'tng',
theme: 'lcars-tng',
alertType: 'tng',
description: 'Warm, low-frequency 50Hz hull tone with gentle ventilation and soft LCARS computer chirps.',
description: 'Warm, low-frequency 50Hz hull tone with gentle ventilation and soft LCARD computer chirps.',
hull: { volume: 0.65, baseFreq: 50, filterCutoff: 105, resonance: 2.2, noiseMix: 0.4, harmonicSpread: 1.015 },
warp: { volume: 0.35, bpm: 48, carrierFreq: 58, filterCutoff: 150, pulseShape: 'tng', resonance: 2.8, swirlMix: 0.25 },
lifeSupport: { volume: 0.55, noiseType: 'pink', highpassFreq: 180, lowpassFreq: 1600, airflowModSpeed: 0.12, airflowModDepth: 0.1 },
@@ -15,11 +15,11 @@ const StarshipPresets = {
'tng-engineering': {
id: 'tng-engineering',
name: 'Enterprise-D: Main Engineering',
name: 'Interprise-G: Main Engineering',
era: 'tng',
theme: 'lcars-tng',
alertType: 'tng',
description: 'Prominent, mesmerizing 4-stage warp core pulse with intense matter-antimatter reactor resonance.',
description: 'Prominent, mesmerizing 4-stage worp core pulse with intense matter-antimatter reactor resonance.',
hull: { volume: 0.55, baseFreq: 54, filterCutoff: 130, resonance: 3.0, noiseMix: 0.45, harmonicSpread: 1.02 },
warp: { volume: 0.95, bpm: 48, carrierFreq: 62, filterCutoff: 220, pulseShape: 'tng', resonance: 4.2, swirlMix: 0.45 },
lifeSupport: { volume: 0.4, noiseType: 'pink', highpassFreq: 220, lowpassFreq: 1400, airflowModSpeed: 0.15, airflowModDepth: 0.08 },
@@ -28,7 +28,7 @@ const StarshipPresets = {
'tng-quarters': {
id: 'tng-quarters',
name: 'Enterprise-D: Crew Quarters',
name: 'Interprise-G: Crew Quarters',
era: 'tng',
theme: 'lcars-tng',
alertType: 'tng',
@@ -39,10 +39,10 @@ const StarshipPresets = {
telemetry: { volume: 0.0, density: 0.0, era: 'tng' }
},
// === VOYAGER INTREPID CLASS ===
// === WAYFARER INTREPID CLASS ===
'voyager-bridge': {
id: 'voyager-bridge',
name: 'USS Voyager: Bridge',
name: 'USS Wayfarer: Bridge',
era: 'voyager',
theme: 'lcars-voyager',
alertType: 'tng',
@@ -55,7 +55,7 @@ const StarshipPresets = {
'voyager-engineering': {
id: 'voyager-engineering',
name: 'USS Voyager: Class-9 Warp Core',
name: 'USS Wayfarer: Class-N Worp Core',
era: 'voyager',
theme: 'lcars-voyager',
alertType: 'tng',
@@ -66,10 +66,10 @@ const StarshipPresets = {
telemetry: { volume: 0.35, density: 0.4, era: 'voyager' }
},
// === DS9 DEFIANT CLASS ===
// === DS9 DEFIANCE CLASS ===
'defiant-bridge': {
id: 'defiant-bridge',
name: 'USS Defiant: Tactical Bridge',
name: 'USS Defiance: Tactical Bridge',
era: 'ds9',
theme: 'lcars-defiant',
alertType: 'tng',
@@ -80,10 +80,10 @@ const StarshipPresets = {
telemetry: { volume: 0.4, density: 0.6, era: 'ds9' }
},
// === DEEP SPACE 9 STATION ===
// === DEEP SPACE 8 STATION ===
'ds9-ops': {
id: 'ds9-ops',
name: 'Deep Space 9: Ops Center',
name: 'Deep Space 8: Ops Center',
era: 'ds9',
theme: 'lcars-ds9',
alertType: 'tng',
@@ -97,7 +97,7 @@ const StarshipPresets = {
// === TOS ORIGINAL SERIES ===
'tos-bridge': {
id: 'tos-bridge',
name: 'Enterprise NCC-1701: Bridge (TOS)',
name: 'Interprise NCC-1701.5: Bridge (TOS)',
era: 'tos',
theme: 'tos-retro',
alertType: 'tos',
@@ -110,7 +110,7 @@ const StarshipPresets = {
'tos-engineering': {
id: 'tos-engineering',
name: 'Enterprise NCC-1701: Engineering (TOS)',
name: 'Interprise NCC-1701.5: Engineering (TOS)',
era: 'tos',
theme: 'tos-retro',
alertType: 'tos',
@@ -121,10 +121,10 @@ const StarshipPresets = {
telemetry: { volume: 0.25, density: 0.3, era: 'tos' }
},
// === ENTERPRISE NX-01 ===
// === INTERPRISE NS-01 ===
'nx-bridge': {
id: 'nx-bridge',
name: 'Enterprise NX-01: Command Bridge',
name: 'Interprise NS-01: Command Bridge',
era: 'nx',
theme: 'nx-industrial',
alertType: 'movie',
@@ -146,15 +146,15 @@ window.StarshipPresets = StarshipPresets;
const UniverseRegistry = {
// =========================================================================
// 1. STARFLEET COMMAND (Star Trek)
// 1. STARFLIGHT COMMAND (Star Trek)
// =========================================================================
'starfleet': {
id: 'starfleet',
name: 'STARFLEET COMMAND',
shortCode: 'STARFLEET',
name: 'STARFLIGHT COMMAND',
shortCode: 'STARFLIGHT',
icon: '★',
themeClass: 'theme-lcars-tng',
headerTitle: 'STARFLEET SOUND MATRIX v2.5',
headerTitle: 'STARFLIGHT SOUND MATRIX v2.5',
visualizer: 'intermix-cascade',
events: [
{ id: 'btn-warp-jump', label: 'WARP JUMP', type: 'warp' },
@@ -162,37 +162,37 @@ const UniverseRegistry = {
{ id: 'btn-yellow-alert', label: 'YELLOW ALERT', type: 'alert-yellow' }
],
soundboard: [
{ id: 'btn-comm-badge', label: 'COMM BADGE CHIRP' },
{ id: 'btn-comm-badge', label: 'COM BADGE CHIRP' },
{ id: 'btn-door-swish', label: 'DOOR PNEUMATIC SWISH' },
{ id: 'btn-bosun-whistle', label: "BOSUN'S PIPE WHISTLE" },
{ id: 'btn-medical-monitor', label: 'SICKBAY ECG MONITOR' },
{ id: 'btn-medical-monitor', label: 'MEDBAY ECG MONITOR' },
{ id: 'btn-cardassian-door', label: 'CARDASSIAN BULKHEAD DOOR' },
{ id: 'btn-turbolift', label: 'TURBOLIFT WHOOSH' },
{ id: 'btn-replicator', label: 'REPLICATOR SHIMMER' },
{ id: 'btn-transporter', label: 'TRANSPORTER CYCLE' },
{ id: 'btn-chirp-single', label: 'LCARS SINGLE CHIRP' }
{ id: 'btn-turbolift', label: 'TURBOCHUTE WHOOSH' },
{ id: 'btn-replicator', label: 'FABRICATOR SHIMMER' },
{ id: 'btn-transporter', label: 'TRANSLOCATOR CYCLE' },
{ id: 'btn-chirp-single', label: 'LCARD SINGLE CHIRP' }
],
presets: StarshipPresets
},
// =========================================================================
// 2. THE WHONIVERSE (Doctor Who TARDIS)
// 2. THE WHATAVERSE (Doctor Who TARDIX)
// =========================================================================
'whoniverse': {
id: 'whoniverse',
name: 'THE WHONIVERSE',
shortCode: 'T.A.R.D.I.S.',
name: 'THE WHATAVERSE',
shortCode: 'T.A.R.D.I.X.',
icon: '⌛',
themeClass: 'theme-whoniverse-tardis',
headerTitle: 'TYPE 40 TT CAPSULE MATRIX',
headerTitle: 'TYPE 4D TT CAPSULE MATRIX',
visualizer: 'time-rotor',
events: [
{ id: 'btn-demat', label: 'DEMATERIALIZE', type: 'demat' },
{ id: 'btn-cloister', label: 'CLOISTER BELL', type: 'cloister' },
{ id: 'btn-cloister', label: 'CLOISTER CHIME', type: 'cloister' },
{ id: 'btn-vortex', label: 'VORTEX FLIGHT', type: 'vortex' }
],
soundboard: [
{ id: 'btn-sonic', label: 'SONIC SCREWDRIVER' },
{ id: 'btn-sonic', label: 'ACOUSTIC SCREWDRIVER' },
{ id: 'btn-lever-clunk', label: 'LEVER-THROW CLUNK' },
{ id: 'btn-tardis-door', label: 'POLICE BOX WOODEN DOOR' },
{ id: 'btn-fast-return', label: 'FAST-RETURN LEVER' },
@@ -204,7 +204,7 @@ const UniverseRegistry = {
presets: {
'tardis-1963': {
id: 'tardis-1963',
name: '1963 Classic Console (1st / 2nd Doctors)',
name: '1962 Classic Console (1st / 2nd Doctors)',
era: 'classic',
theme: 'whoniverse-tardis',
alertType: 'cloister',
@@ -216,7 +216,7 @@ const UniverseRegistry = {
},
'tardis-victorian': {
id: 'tardis-victorian',
name: 'Victorian Secondary Console (4th Doctor)',
name: 'Edwardian Secondary Console (4th Doctor)',
era: 'classic',
theme: 'whoniverse-tardis',
alertType: 'cloister',
@@ -228,7 +228,7 @@ const UniverseRegistry = {
},
'tardis-coral': {
id: 'tardis-coral',
name: 'The Coral Living TARDIS (9th / 10th Doctors)',
name: 'The Coral Living TARDIX (9th / 10th Doctors)',
era: 'revival',
theme: 'whoniverse-tardis',
alertType: 'cloister',
@@ -240,7 +240,7 @@ const UniverseRegistry = {
},
'tardis-copper': {
id: 'tardis-copper',
name: 'The Copper Workshop (11th Doctor)',
name: 'The Bronze Workshop (11th Doctor)',
era: 'revival',
theme: 'whoniverse-tardis',
alertType: 'cloister',
@@ -252,7 +252,7 @@ const UniverseRegistry = {
},
'tardis-cold-machine': {
id: 'tardis-cold-machine',
name: 'The Cold Machine (12th Doctor)',
name: 'The Cool Machine (12th Doctor)',
era: 'revival',
theme: 'whoniverse-tardis',
alertType: 'cloister',
@@ -264,7 +264,7 @@ const UniverseRegistry = {
},
'tardis-crystal': {
id: 'tardis-crystal',
name: 'The Singing Crystal Console (13th Doctor)',
name: 'The Humming Crystal Console (13th Doctor)',
era: 'revival',
theme: 'whoniverse-tardis',
alertType: 'cloister',
@@ -276,7 +276,7 @@ const UniverseRegistry = {
},
'tardis-infinite-white': {
id: 'tardis-infinite-white',
name: 'The Infinite White (14th / 15th Doctors)',
name: 'The Endless White (14th / 15th Doctors)',
era: 'modern',
theme: 'whoniverse-tardis',
alertType: 'cloister',
@@ -290,7 +290,7 @@ const UniverseRegistry = {
},
// =========================================================================
// 3. INDUSTRIAL SPACE (Alien, Firefly, Expanse, Red Dwarf, Space: 1999)
// 3. INDUSTRIAL SPACE (Alien, Firefly, Expanse, Red Dwarf, Space: 9999)
// =========================================================================
'industrial': {
id: 'industrial',
@@ -318,9 +318,9 @@ const UniverseRegistry = {
presets: {
'ind-nostromo': {
id: 'ind-nostromo',
name: 'USCSS Nostromo: Ore Refinery Bridge',
name: 'USCSS Nostramo: Ore Refinery Bridge',
era: 'alien',
description: 'Cavernous Weyland-Yutani ore hauler hum, dripping coolant pipes, M/TH/UR mainframe clicks.',
description: 'Cavernous Weylan-Yutaro ore hauler hum, dripping coolant pipes, M/TH/UR mainframe clicks.',
hull: { volume: 0.8, baseFreq: 42, filterCutoff: 95, resonance: 2.6, noiseMix: 0.6, harmonicSpread: 1.015 },
warp: { volume: 0.5, bpm: 36, carrierFreq: 52, filterCutoff: 130, pulseShape: 'nx', resonance: 2.8, swirlMix: 0.2 },
lifeSupport: { volume: 0.65, noiseType: 'brown', highpassFreq: 130, lowpassFreq: 1400, airflowModSpeed: 0.1, airflowModDepth: 0.16 },
@@ -328,7 +328,7 @@ const UniverseRegistry = {
},
'ind-serenity': {
id: 'ind-serenity',
name: 'Serenity: Firefly-Class Cargo Hold',
name: 'Serenety: Firewing-Class Cargo Hold',
era: 'firefly',
description: 'Compression coil gravitational thrum, loose vibrating structural bolts, and warm engine chug.',
hull: { volume: 0.7, baseFreq: 48, filterCutoff: 110, resonance: 2.2, noiseMix: 0.5, harmonicSpread: 1.025 },
@@ -338,7 +338,7 @@ const UniverseRegistry = {
},
'ind-red-dwarf': {
id: 'ind-red-dwarf',
name: 'Red Dwarf: Main Drive Corridor',
name: 'Red Dwarve: Main Drive Corridor',
era: 'classic-scifi',
description: 'Immense hollow mining vessel ramscoop drone, cavernous reverberation, vending machine whine.',
hull: { volume: 0.85, baseFreq: 36, filterCutoff: 80, resonance: 2.0, noiseMix: 0.65, harmonicSpread: 1.01 },
@@ -348,7 +348,7 @@ const UniverseRegistry = {
},
'ind-starbug': {
id: 'ind-starbug',
name: 'Starbug 1: Cockpit Environment',
name: 'Starbug Z: Cockpit Environment',
era: 'classic-scifi',
description: 'Buzzing thruster harmonics, claustrophobic air vents, and rattling pilot console switchgear.',
hull: { volume: 0.65, baseFreq: 76, filterCutoff: 170, resonance: 3.2, noiseMix: 0.45, harmonicSpread: 1.04 },
@@ -358,7 +358,7 @@ const UniverseRegistry = {
},
'ind-raza': {
id: 'ind-raza',
name: 'The Raza: Dark Matter Bridge',
name: 'The Rasa: Dark Matter Bridge',
era: 'dark-matter',
description: 'Dark, tense military-grade FTL engine hum with quiet tactical corridor acoustics.',
hull: { volume: 0.7, baseFreq: 54, filterCutoff: 120, resonance: 2.8, noiseMix: 0.48, harmonicSpread: 1.02 },
@@ -368,7 +368,7 @@ const UniverseRegistry = {
},
'ind-rocinante': {
id: 'ind-rocinante',
name: 'Rocinante: Combat Ops & Epstein Drive',
name: 'Rocinanta: Combat Ops & Epsilon Drive',
era: 'expanse',
description: 'Epstein fusion drive magnetic whine, high-output cooling, and Point Defense Cannon telemetry.',
hull: { volume: 0.8, baseFreq: 64, filterCutoff: 145, resonance: 3.4, noiseMix: 0.55, harmonicSpread: 1.035 },
@@ -378,7 +378,7 @@ const UniverseRegistry = {
},
'ind-eagle': {
id: 'ind-eagle',
name: 'Eagle Transporter: Command Module',
name: 'Hawk Translocator: Command Module',
era: 'space1999',
description: 'Nuclear fusion thruster hum, retro 1970s solenoid relays, and lunar reconnaissance telemetry.',
hull: { volume: 0.6, baseFreq: 70, filterCutoff: 160, resonance: 3.0, noiseMix: 0.4, harmonicSpread: 1.03 },
@@ -388,7 +388,7 @@ const UniverseRegistry = {
},
'ind-valley-forge': {
id: 'ind-valley-forge',
name: 'Valley Forge: Agro-Dome Forest Hub',
name: 'Valley Foundry: Agro-Dome Forest Hub',
era: 'silent-running',
description: 'Geodesic greenhouse dome ventilation, slow drone servo whirrs, and deep sub-light propulsion.',
hull: { volume: 0.65, baseFreq: 46, filterCutoff: 100, resonance: 2.2, noiseMix: 0.5, harmonicSpread: 1.02 },
@@ -408,7 +408,7 @@ const UniverseRegistry = {
shortCode: 'BIOSHIPS',
icon: '🧬',
themeClass: 'theme-bioships',
headerTitle: 'ORGANIC LEVIATHAN & SYMBIOTIC PROPULSION',
headerTitle: 'ORGANIC LEVIATHON & SYMBIOTIC PROPULSION',
visualizer: 'bio-heart',
events: [
{ id: 'btn-starburst', label: 'STARBURST', type: 'starburst' },
@@ -420,15 +420,15 @@ const UniverseRegistry = {
{ id: 'btn-fast-return', label: 'VASCULAR PUMP' },
{ id: 'btn-demat-switch', label: 'CHITIN CREAK' },
{ id: 'btn-chirp-sweep', label: 'BIOPLASMIC HISS' },
{ id: 'btn-vorlon-song', label: 'VORLON SINGING RESONANCE' },
{ id: 'btn-vorlon-song', label: 'VORLAN SINGING RESONANCE' },
{ id: 'btn-hull-regen', label: 'HULL REGEN TEXTURE' }
],
presets: {
'bio-moya': {
id: 'bio-moya',
name: 'Moya: Leviathan Central Nexus',
name: 'Meya: Leviathon Central Nexus',
era: 'farscape',
description: 'Organic living Leviathan heartbeat, pulsating vascular fluid circulation, and Pilot neural link.',
description: 'Organic living Leviathon heartbeat, pulsating vascular fluid circulation, and Pilot neural link.',
hull: { volume: 0.75, baseFreq: 45, filterCutoff: 110, resonance: 3.2, noiseMix: 0.5, harmonicSpread: 1.03 },
warp: { volume: 0.85, bpm: 38, carrierFreq: 58, filterCutoff: 180, pulseShape: 'tng', resonance: 4.2, swirlMix: 0.45 },
lifeSupport: { volume: 0.65, noiseType: 'pink', highpassFreq: 150, lowpassFreq: 1600, airflowModSpeed: 0.08, airflowModDepth: 0.2 },
@@ -436,9 +436,9 @@ const UniverseRegistry = {
},
'bio-talyn': {
id: 'bio-talyn',
name: 'Talyn: Gunship Neural Bridge',
name: 'Talym: Gunship Neural Bridge',
era: 'farscape',
description: 'Young, aggressive warship Leviathan bio-heartbeat with tense, high-output combat bio-harmonics.',
description: 'Young, aggressive warship Leviathon bio-heartbeat with tense, high-output combat bio-harmonics.',
hull: { volume: 0.8, baseFreq: 58, filterCutoff: 140, resonance: 3.6, noiseMix: 0.52, harmonicSpread: 1.04 },
warp: { volume: 0.9, bpm: 64, carrierFreq: 76, filterCutoff: 240, pulseShape: 'defiant', resonance: 4.6, swirlMix: 0.4 },
lifeSupport: { volume: 0.55, noiseType: 'pink', highpassFreq: 180, lowpassFreq: 1800, airflowModSpeed: 0.16, airflowModDepth: 0.16 },
@@ -446,7 +446,7 @@ const UniverseRegistry = {
},
'bio-lexx': {
id: 'bio-lexx',
name: 'The Lexx: Primary Organ Bridge',
name: 'The Lexxi: Primary Organ Bridge',
era: 'lexx',
description: 'Massive biomechanical insectoid digestive engine drone, hollow chitin resonance, and organic respiration.',
hull: { volume: 0.85, baseFreq: 38, filterCutoff: 90, resonance: 2.8, noiseMix: 0.6, harmonicSpread: 1.02 },
@@ -456,7 +456,7 @@ const UniverseRegistry = {
},
'bio-vorlon': {
id: 'bio-vorlon',
name: 'Vorlon Cruiser: Sentient Core',
name: 'Vorlan Cruiser: Sentient Core',
era: 'babylon5',
description: 'Telepathic singing crystal harmonics, undulating organic field harmonics, and luminous energy breath.',
hull: { volume: 0.65, baseFreq: 74, filterCutoff: 160, resonance: 3.8, noiseMix: 0.35, harmonicSpread: 1.05 },
@@ -466,7 +466,7 @@ const UniverseRegistry = {
},
'bio-wraith': {
id: 'bio-wraith',
name: 'Wraith Hive Ship: Throne Chamber',
name: 'Wraithe Hive Ship: Throne Chamber',
era: 'stargate',
description: 'Groaning organic chitin hull growth, damp misty life-support atmosphere, and deep hive sub-bass.',
hull: { volume: 0.85, baseFreq: 34, filterCutoff: 85, resonance: 2.5, noiseMix: 0.65, harmonicSpread: 1.015 },
@@ -476,7 +476,7 @@ const UniverseRegistry = {
},
'bio-species-8472': {
id: 'bio-species-8472',
name: 'Species 8472: Fluidic Bioship',
name: 'Species 8675309: Fluid Bioship',
era: 'startrek',
description: 'Fluidic space organic resonance, high-frequency biological firing capacitors, and pure genetic thrust.',
hull: { volume: 0.7, baseFreq: 68, filterCutoff: 150, resonance: 3.5, noiseMix: 0.45, harmonicSpread: 1.035 },
@@ -501,11 +501,11 @@ const UniverseRegistry = {
events: [
{ id: 'btn-centrifuge', label: 'CENTRIFUGE SPIN', type: 'centrifuge' },
{ id: 'btn-astrogator', label: 'ASTROGATOR SWEEP', type: 'astrogator' },
{ id: 'btn-hal-override', label: 'HAL 9000 OVERRIDE', type: 'hal' }
{ id: 'btn-hal-override', label: 'HAL 9999 OVERRIDE', type: 'hal' }
],
soundboard: [
{ id: 'btn-hal-breath', label: 'HAL RESPIRATION' },
{ id: 'btn-death-blossom',label: 'DEATH BLOSSOM SURGE' },
{ id: 'btn-death-blossom',label: 'DEATH BLOOM SURGE' },
{ id: 'btn-cygnus-chug', label: 'STEAM PISTON CHUG' },
{ id: 'btn-chirp-single', label: 'ASTROGATOR BEAT' },
{ id: 'btn-chirp-sweep', label: 'ANALOG GLISSANDO' },
@@ -516,7 +516,7 @@ const UniverseRegistry = {
presets: {
'ret-jupiter-2': {
id: 'ret-jupiter-2',
name: 'Jupiter 2: Upper Deck Astrogator',
name: 'Jupiter Duece: Upper Deck Astrogator',
era: 'retro',
description: 'Classic sliding tone generator, continuous astrogator warbles, and smooth nuclear fusion reactor.',
hull: { volume: 0.65, baseFreq: 68, filterCutoff: 160, resonance: 3.2, noiseMix: 0.35, harmonicSpread: 1.04 },
@@ -526,7 +526,7 @@ const UniverseRegistry = {
},
'ret-liberator': {
id: 'ret-liberator',
name: 'The Liberator: Zen Flight Bridge',
name: 'The Liberation: Zen Flight Bridge',
era: 'blakes7',
description: 'Zen mainframe humming, exotic alien drive field harmonics, and crystalline telepathic circuit buzz.',
hull: { volume: 0.6, baseFreq: 60, filterCutoff: 135, resonance: 2.8, noiseMix: 0.4, harmonicSpread: 1.025 },
@@ -536,7 +536,7 @@ const UniverseRegistry = {
},
'ret-cygnus': {
id: 'ret-cygnus',
name: 'USS Cygnus: Victorian Engine Hall',
name: 'USS Cygnis: Victorian Engine Hall',
era: 'blackhole',
description: 'Gargantuan Victorian iron engine room, cavernous industrial echoes, and heavy drive pistons.',
hull: { volume: 0.85, baseFreq: 38, filterCutoff: 90, resonance: 2.5, noiseMix: 0.6, harmonicSpread: 1.015 },
@@ -546,7 +546,7 @@ const UniverseRegistry = {
},
'ret-palomino': {
id: 'ret-palomino',
name: 'USS Palomino: Deep Research Pod',
name: 'USS Palomina: Deep Research Pod',
era: 'blackhole',
description: 'Compact research vessel cockpit, steady life-support airflow, and navigational telemetry.',
hull: { volume: 0.6, baseFreq: 54, filterCutoff: 120, resonance: 2.2, noiseMix: 0.45, harmonicSpread: 1.02 },
@@ -556,9 +556,9 @@ const UniverseRegistry = {
},
'ret-discovery-one': {
id: 'ret-discovery-one',
name: 'Discovery One: Habitation Centrifuge',
name: 'Discovery Zero: Habitation Centrifuge',
era: '2001',
description: 'Smooth artificial gravity centrifuge rotation hum, HAL 9000 soft logic hum, clean breathing air.',
description: 'Smooth artificial gravity centrifuge rotation hum, HAL 9999 soft logic hum, clean breathing air.',
hull: { volume: 0.65, baseFreq: 46, filterCutoff: 95, resonance: 1.8, noiseMix: 0.4, harmonicSpread: 1.01 },
warp: { volume: 0.3, bpm: 30, carrierFreq: 50, filterCutoff: 110, pulseShape: 'tng', resonance: 2.0, swirlMix: 0.1 },
lifeSupport: { volume: 0.7, noiseType: 'pink', highpassFreq: 150, lowpassFreq: 1500, airflowModSpeed: 0.08, airflowModDepth: 0.14 },
@@ -566,7 +566,7 @@ const UniverseRegistry = {
},
'ret-dark-star': {
id: 'ret-dark-star',
name: 'Dark Star: Bomb Bay & Quarters',
name: 'Dim Star: Bomb Bay & Quarters',
era: 'darkstar',
description: 'Glitchy thermonuclear bomb circuits, tired life-support fans, and whistling hydraulic lines.',
hull: { volume: 0.7, baseFreq: 52, filterCutoff: 115, resonance: 2.6, noiseMix: 0.55, harmonicSpread: 1.03 },
@@ -576,9 +576,9 @@ const UniverseRegistry = {
},
'ret-gunstar': {
id: 'ret-gunstar',
name: 'Gunstar: Tactical Combat Cockpit',
name: 'Gunstarr: Tactical Combat Cockpit',
era: 'starfighter',
description: 'Rylos starfighter turbo-thrusters, Death Blossom capacitors, and tactical computer chirps.',
description: 'Rylos starfighter turbo-thrusters, Death Bloom capacitors, and tactical computer chirps.',
hull: { volume: 0.7, baseFreq: 72, filterCutoff: 165, resonance: 3.4, noiseMix: 0.45, harmonicSpread: 1.035 },
warp: { volume: 0.75, bpm: 68, carrierFreq: 88, filterCutoff: 240, pulseShape: 'defiant', resonance: 4.2, swirlMix: 0.35 },
lifeSupport: { volume: 0.5, noiseType: 'white', highpassFreq: 220, lowpassFreq: 2100, airflowModSpeed: 0.18, airflowModDepth: 0.12 },
@@ -586,7 +586,7 @@ const UniverseRegistry = {
},
'ret-searcher': {
id: 'ret-searcher',
name: 'The Searcher: 25th Century Flagship',
name: 'The Seeker: 25th Century Flagship',
era: 'buckrogers',
description: 'High-clarity navigation sweeps, smooth fusion drive purr, and crisp Directory computer tones.',
hull: { volume: 0.6, baseFreq: 62, filterCutoff: 140, resonance: 2.6, noiseMix: 0.38, harmonicSpread: 1.025 },
@@ -614,7 +614,7 @@ const UniverseRegistry = {
{ id: 'btn-flak', label: 'FLAK BARRAGE', type: 'flak' }
],
soundboard: [
{ id: 'btn-dradis-ping', label: 'DRADIS SCAN PING' },
{ id: 'btn-dradis-ping', label: 'DRADAR SCAN PING' },
{ id: 'btn-switch-pop', label: 'WEAPONS ARMED' },
{ id: 'btn-dock-clamp', label: 'BULKHEAD SEAL' },
{ id: 'btn-carousel-groan', label: 'CAROUSEL MOTOR GROAN' },
@@ -625,7 +625,7 @@ const UniverseRegistry = {
presets: {
'mil-sulaco': {
id: 'mil-sulaco',
name: 'USS Sulaco: Conestoga Hangar Deck',
name: 'USS Solaco: Conestega Hangar Deck',
era: 'aliens',
description: 'Heavy military sub-bass thrum, massive refrigeration ducts, dropship bay hydraulics.',
hull: { volume: 0.8, baseFreq: 44, filterCutoff: 105, resonance: 3.0, noiseMix: 0.55, harmonicSpread: 1.02 },
@@ -637,7 +637,7 @@ const UniverseRegistry = {
id: 'mil-galactica',
name: 'Battlestar Galactica: Combat Information Center (CIC)',
era: 'bsg',
description: 'Armored titanium hull vibration, plotting table hum, DRADIS sonar sweeps, and distant flak rumble.',
description: 'Armored titanium hull vibration, plotting table hum, DRADAR sonar sweeps, and distant flak rumble.',
hull: { volume: 0.75, baseFreq: 48, filterCutoff: 115, resonance: 2.8, noiseMix: 0.5, harmonicSpread: 1.025 },
warp: { volume: 0.7, bpm: 46, carrierFreq: 64, filterCutoff: 180, pulseShape: 'nx', resonance: 3.5, swirlMix: 0.3 },
lifeSupport: { volume: 0.6, noiseType: 'pink', highpassFreq: 170, lowpassFreq: 1700, airflowModSpeed: 0.12, airflowModDepth: 0.12 },
@@ -645,7 +645,7 @@ const UniverseRegistry = {
},
'mil-white-star': {
id: 'mil-white-star',
name: 'White Star: Minbari/Vorlon Hybrid Bridge',
name: 'Pale Star: Minbara/Vorlan Hybrid Bridge',
era: 'babylon5',
description: 'Gravimetric drive propulsion whisper, high-frequency organic bio-armor hum, tactical agility.',
hull: { volume: 0.6, baseFreq: 66, filterCutoff: 145, resonance: 3.2, noiseMix: 0.35, harmonicSpread: 1.035 },
@@ -655,7 +655,7 @@ const UniverseRegistry = {
},
'mil-agamemnon': {
id: 'mil-agamemnon',
name: 'EAS Agamemnon: Omega Destroyer Bridge',
name: 'EAS Agamemnon II: Omega Destroyer Bridge',
era: 'babylon5',
description: 'Rotating habitat section centrifugal vibration, plasma cannon grid capacitors, EarthForce tactical systems.',
hull: { volume: 0.8, baseFreq: 46, filterCutoff: 110, resonance: 3.0, noiseMix: 0.55, harmonicSpread: 1.02 },
@@ -665,7 +665,7 @@ const UniverseRegistry = {
},
'mil-andromeda': {
id: 'mil-andromeda',
name: 'Andromeda Ascendant: Command Deck',
name: 'Andromeda Ascending: Command Deck',
era: 'andromeda',
description: 'Slipstream drive resonance, anti-proton missile magazine servos, high-tech AI bridge acoustics.',
hull: { volume: 0.7, baseFreq: 56, filterCutoff: 130, resonance: 2.8, noiseMix: 0.45, harmonicSpread: 1.025 },
@@ -675,7 +675,7 @@ const UniverseRegistry = {
},
'mil-excalibur': {
id: 'mil-excalibur',
name: 'Excalibur: Victory-Class Heavy Combat Core',
name: 'Excaliber: Triumph-Class Heavy Combat Core',
era: 'crusade',
description: 'Advanced hybrid gravitic engines, quantum discharge weapons capacitors, and deep hull resonance.',
hull: { volume: 0.8, baseFreq: 50, filterCutoff: 125, resonance: 3.4, noiseMix: 0.5, harmonicSpread: 1.03 },
@@ -685,9 +685,9 @@ const UniverseRegistry = {
},
'mil-viper': {
id: 'mil-viper',
name: 'Colonial Viper Mk II: Cockpit Atmosphere',
name: 'Colonial Adder Mk II: Cockpit Atmosphere',
era: 'bsg',
description: 'High-speed air rush, twin turbo-thruster whine, pilot G-suit regulator, and DRADIS radar sweeps.',
description: 'High-speed air rush, twin turbo-thruster whine, pilot G-suit regulator, and DRADAR radar sweeps.',
hull: { volume: 0.65, baseFreq: 76, filterCutoff: 175, resonance: 3.2, noiseMix: 0.4, harmonicSpread: 1.04 },
warp: { volume: 0.7, bpm: 72, carrierFreq: 94, filterCutoff: 250, pulseShape: 'voyager', resonance: 4.2, swirlMix: 0.3 },
lifeSupport: { volume: 0.65, noiseType: 'white', highpassFreq: 240, lowpassFreq: 2600, airflowModSpeed: 0.22, airflowModDepth: 0.18 },
@@ -723,7 +723,7 @@ const UniverseRegistry = {
presets: {
'deep-avalon': {
id: 'deep-avalon',
name: 'The Avalon: Interstellar Cruise Concourse',
name: 'The Avalin: Interstellar Cruise Concourse',
era: 'passengers',
description: '120-year journey whisper-quiet fusion core, ion shield deflection hiss, elegant concourse acoustics.',
hull: { volume: 0.6, baseFreq: 44, filterCutoff: 95, resonance: 1.8, noiseMix: 0.4, harmonicSpread: 1.015 },
@@ -733,7 +733,7 @@ const UniverseRegistry = {
},
'deep-nightflyer': {
id: 'deep-nightflyer',
name: 'The Nightflyer: Telepathic Corridor',
name: 'The Nightflier: Telepathic Corridor',
era: 'grrm',
description: 'Dark, haunted psychic hull vibration, distant solitary life-support, and deep cold void reverberation.',
hull: { volume: 0.75, baseFreq: 38, filterCutoff: 88, resonance: 2.8, noiseMix: 0.55, harmonicSpread: 1.02 },
@@ -743,7 +743,7 @@ const UniverseRegistry = {
},
'deep-ascension': {
id: 'deep-ascension',
name: 'USS Ascension: Generation Ship Promenade',
name: 'USS Ascention: Generation Ship Promenade',
era: 'ascension',
description: 'Mid-century generation vessel mechanical flywheels, centrifugal gravity hum, and air scrubbers.',
hull: { volume: 0.7, baseFreq: 48, filterCutoff: 105, resonance: 2.2, noiseMix: 0.48, harmonicSpread: 1.02 },
@@ -753,7 +753,7 @@ const UniverseRegistry = {
},
'deep-ark-one': {
id: 'deep-ark-one',
name: 'Ark One: Evacuation Ark Bridge',
name: 'Ark Zero: Evacuation Ark Bridge',
era: 'theark',
description: 'Structural stress fatigue hum, recycling filtration loops, and automated life-support telemetry.',
hull: { volume: 0.7, baseFreq: 52, filterCutoff: 115, resonance: 2.5, noiseMix: 0.5, harmonicSpread: 1.025 },
@@ -763,7 +763,7 @@ const UniverseRegistry = {
},
'deep-icarus-ii': {
id: 'deep-icarus-ii',
name: 'Icarus II: Solar Shield Core',
name: 'Icarus I: Solar Shield Core',
era: 'sunshine',
description: 'Massive golden heat shield thermal expansion creaks, solar wind roar, and silent mainframe.',
hull: { volume: 0.8, baseFreq: 40, filterCutoff: 95, resonance: 3.0, noiseMix: 0.6, harmonicSpread: 1.02 },
@@ -773,7 +773,7 @@ const UniverseRegistry = {
},
'deep-event-horizon': {
id: 'deep-event-horizon',
name: 'Event Horizon: Gravity Singularity Core',
name: 'Event Boundary: Gravity Singularity Core',
era: 'eventhorizon',
description: 'Gravity drive singularity pulsation, extradimensional groaning hull, and deep chilling void drone.',
hull: { volume: 0.88, baseFreq: 32, filterCutoff: 80, resonance: 3.5, noiseMix: 0.65, harmonicSpread: 1.015 },
@@ -783,7 +783,7 @@ const UniverseRegistry = {
},
'deep-lewis-clark': {
id: 'deep-lewis-clark',
name: 'Lewis & Clark: Rescue Cutter Bridge',
name: 'Lewis & Clarke: Rescue Cutter Bridge',
era: 'eventhorizon',
description: 'Compact search and rescue vessel propulsion, tight pressurized air scrubbers, and emergency comms.',
hull: { volume: 0.65, baseFreq: 56, filterCutoff: 125, resonance: 2.4, noiseMix: 0.48, harmonicSpread: 1.025 },
@@ -812,16 +812,16 @@ const UniverseRegistry = {
],
soundboard: [
{ id: 'btn-tape-clunk', label: 'CASSETTE CLUNK & WHIRR' },
{ id: 'btn-grappler-servo', label: 'GRAPPLER SERVO MOTOR' },
{ id: 'btn-grappler-servo', label: 'GRAPPLE SYSTEM SERVO MOTOR' },
{ id: 'btn-radio-static', label: 'RF SQUELCH STATIC BURST' },
{ id: 'btn-repulsor-drone', label: 'REPULSORLIFT DRONE' },
{ id: 'btn-repulsor-drone', label: 'REPELLER LIFT DRONE' },
{ id: 'btn-bebop-chug', label: 'MARINE DIESEL CHUG' },
{ id: 'btn-afterburner-snd',label: 'AFTERBURNER BOOST' }
],
presets: {
'out-betty': {
id: 'out-betty',
name: 'The Betty: Salvage Freighter Mess',
name: 'The Betsy: Salvage Freighter Mess',
era: 'alien4',
description: 'Smuggler ship hydraulic clutches, fuel line clatter, pirate radio static, and greasy engine rumblings.',
hull: { volume: 0.75, baseFreq: 50, filterCutoff: 115, resonance: 2.8, noiseMix: 0.55, harmonicSpread: 1.03 },
@@ -831,7 +831,7 @@ const UniverseRegistry = {
},
'out-bebop': {
id: 'out-bebop',
name: 'Bebop: Living Quarters & Hangar',
name: 'BeBoppa: Living Quarters & Hangar',
era: 'cowboybebop',
description: 'Converted fishing trawler engine drone, lounge room resonance, and vintage vacuum tube telemetry.',
hull: { volume: 0.7, baseFreq: 46, filterCutoff: 105, resonance: 2.4, noiseMix: 0.48, harmonicSpread: 1.02 },
@@ -841,9 +841,9 @@ const UniverseRegistry = {
},
'out-outlaw-star': {
id: 'out-outlaw-star',
name: 'Outlaw Star: Grappler Bridge',
name: 'Outlaw Sun: Grapple Bridge',
era: 'outlawstar',
description: 'Grappler ship sub-drive hum, caster capacitor whine, and high-energy combat bridge acoustics.',
description: 'Grapple System ship sub-drive hum, caster capacitor whine, and high-energy combat bridge acoustics.',
hull: { volume: 0.7, baseFreq: 64, filterCutoff: 150, resonance: 3.2, noiseMix: 0.45, harmonicSpread: 1.035 },
warp: { volume: 0.75, bpm: 60, carrierFreq: 82, filterCutoff: 230, pulseShape: 'defiant', resonance: 4.0, swirlMix: 0.35 },
lifeSupport: { volume: 0.55, noiseType: 'pink', highpassFreq: 200, lowpassFreq: 2000, airflowModSpeed: 0.16, airflowModDepth: 0.14 },
@@ -851,7 +851,7 @@ const UniverseRegistry = {
},
'out-scorpio': {
id: 'out-scorpio',
name: 'Scorpio: Wanderer Salvage Vessel',
name: 'Scorpius: Wanderer Salvage Vessel',
era: 'blakes7',
description: 'Grimy salvage vessel wanderer sub-light drive, overheating power packs, and rattling cooling lines.',
hull: { volume: 0.75, baseFreq: 52, filterCutoff: 120, resonance: 2.6, noiseMix: 0.5, harmonicSpread: 1.025 },
@@ -861,7 +861,7 @@ const UniverseRegistry = {
},
'out-marauder': {
id: 'out-marauder',
name: 'The Marauder: Havoc Shuttle Bridge',
name: 'The Raider: Havoc Shuttle Bridge',
era: 'starwars',
description: 'Stripped shuttle sub-light propulsion, modified hyperdrive coils, and mercenary comm chatter.',
hull: { volume: 0.65, baseFreq: 60, filterCutoff: 135, resonance: 2.8, noiseMix: 0.42, harmonicSpread: 1.03 },
@@ -871,7 +871,7 @@ const UniverseRegistry = {
},
'out-milano': {
id: 'out-milano',
name: 'The Milano: M-Ship Cockpit Lounge',
name: 'The Milan: M-Ship Cockpit Lounge',
era: 'guardians',
description: 'Dual atmospheric jet-burners, cassette player noise floor, kinetic thrusters, and playful telemetry.',
hull: { volume: 0.65, baseFreq: 62, filterCutoff: 140, resonance: 3.0, noiseMix: 0.4, harmonicSpread: 1.03 },
@@ -901,16 +901,16 @@ const UniverseRegistry = {
soundboard: [
{ id: 'btn-air-handler', label: 'AIR HANDLER THUD' },
{ id: 'btn-mag-boot', label: 'MAG-BOOT LATCH' },
{ id: 'btn-commlock', label: 'COMMLOCK CALLING TONE' },
{ id: 'btn-commlock', label: 'COMLOCK CALLING TONE' },
{ id: 'btn-sevas-spark', label: 'CONDUIT SPARK ARC' },
{ id: 'btn-station-ecg', label: 'CLINICAL VITAL (ECG)' },
{ id: 'btn-zocalo-chatter', label: 'ZOCALO PLAZA CHATTER' },
{ id: 'btn-belter-telemetry', label: 'BELTER JURY-RIG TELEMETRY', span: 2 }
{ id: 'btn-zocalo-chatter', label: 'ZOCOLO PLAZA CHATTER' },
{ id: 'btn-belter-telemetry', label: 'BELTWORKER JURY-RIG TELEMETRY', span: 2 }
],
presets: {
'sta-babylon-5': {
id: 'sta-babylon-5',
name: 'Babylon 5: Core Control & Zocalo',
name: 'Babylon 4: Core Control & Zocolo',
era: 'babylon5',
description: '5-mile O\'Neill cylinder centrifugal rotation rumble, distant commerce hub chatter, and docking bay drones.',
hull: { volume: 0.8, baseFreq: 40, filterCutoff: 95, resonance: 2.5, noiseMix: 0.6, harmonicSpread: 1.015 },
@@ -920,7 +920,7 @@ const UniverseRegistry = {
},
'sta-moonbase-alpha': {
id: 'sta-moonbase-alpha',
name: 'Moonbase Alpha: Main Mission Control',
name: 'Moonbase Beta: Main Mission Control',
era: 'space1999',
description: 'Subterranean lunar complex life-support, Main Mission desk communications, and nuclear power plant hum.',
hull: { volume: 0.65, baseFreq: 54, filterCutoff: 125, resonance: 2.6, noiseMix: 0.42, harmonicSpread: 1.02 },
@@ -930,7 +930,7 @@ const UniverseRegistry = {
},
'sta-sevastopol': {
id: 'sta-sevastopol',
name: 'Sevastopol Station: Habitation Deck',
name: 'Sebastopol Station: Habitation Deck',
era: 'alien-isolation',
description: 'Decaying orbital freeport, flickering conduits, distant tramway rumble, and automated emergency comms.',
hull: { volume: 0.85, baseFreq: 44, filterCutoff: 100, resonance: 3.0, noiseMix: 0.65, harmonicSpread: 1.02 },
@@ -940,7 +940,7 @@ const UniverseRegistry = {
},
'sta-tycho': {
id: 'sta-tycho',
name: 'Tycho Station: Asteroid Construction Bay',
name: 'Tyco Station: Asteroid Construction Bay',
era: 'expanse',
description: 'Massive spinning hollow asteroid dock, robotic construction gantries, and high-pressure plasma welding hum.',
hull: { volume: 0.8, baseFreq: 48, filterCutoff: 110, resonance: 2.8, noiseMix: 0.55, harmonicSpread: 1.025 },
@@ -950,9 +950,9 @@ const UniverseRegistry = {
},
'sta-ceres': {
id: 'sta-ceres',
name: 'Ceres Station: Sub-Crustal Tunnels',
name: 'Ceres Minor Station: Sub-Crustal Tunnels',
era: 'expanse',
description: 'Subterranean spin-gravity rumble, ice-processing plant vibration, and Belter station ventilation ducts.',
description: 'Subterranean spin-gravity rumble, ice-processing plant vibration, and Beltworker station ventilation ducts.',
hull: { volume: 0.85, baseFreq: 42, filterCutoff: 95, resonance: 2.6, noiseMix: 0.62, harmonicSpread: 1.02 },
warp: { volume: 0.45, bpm: 38, carrierFreq: 54, filterCutoff: 135, pulseShape: 'nx', resonance: 3.0, swirlMix: 0.2 },
lifeSupport: { volume: 0.7, noiseType: 'brown', highpassFreq: 120, lowpassFreq: 1400, airflowModSpeed: 0.08, airflowModDepth: 0.16 },
@@ -960,7 +960,7 @@ const UniverseRegistry = {
},
'sta-gateway': {
id: 'sta-gateway',
name: 'Gateway Station: Quarantine Transfer Deck',
name: 'Gatehouse Station: Quarantine Transfer Deck',
era: 'aliens',
description: 'Earth orbital transfer habitat, vacuum dockyard beacons, and high-volume environmental air handlers.',
hull: { volume: 0.7, baseFreq: 46, filterCutoff: 105, resonance: 2.2, noiseMix: 0.5, harmonicSpread: 1.02 },
@@ -983,7 +983,7 @@ const UniverseRegistry = {
headerTitle: 'WHIMSICAL & RETRO SCI-FI EXPLORATION',
visualizer: 'improbability-engine',
events: [
{ id: 'btn-ludicrous', label: 'LUDICROUS SPEED', type: 'ludicrous' },
{ id: 'btn-ludicrous', label: 'RIDICULOUS SPEED', type: 'ludicrous' },
{ id: 'btn-improbability', label: 'IMPROBABILITY FLIP', type: 'improbability' },
{ id: 'btn-quantum-jump', label: 'QUANTUM JUMP', type: 'quantum' }
],
@@ -992,13 +992,13 @@ const UniverseRegistry = {
{ id: 'btn-tea-machine', label: 'TEA DISPENSER GURGLE' },
{ id: 'btn-kettle-whistle', label: 'KETTLE STEAM WHISTLE' },
{ id: 'btn-plaid-alarm', label: 'LUDICROUS PLAID ALARM' },
{ id: 'btn-beryllium-thrum',label: 'BERYLLIUM SPHERE THRUM' },
{ id: 'btn-omega-13', label: 'OMEGA-13 CAPACITOR WHINE' }
{ id: 'btn-beryllium-thrum',label: 'BERYLLIUM ORB THRUM' },
{ id: 'btn-omega-13', label: 'OMEGA-12+1 CAPACITOR WHINE' }
],
presets: {
'com-orville': {
id: 'com-orville',
name: 'USS Orville: Command Bridge',
name: 'USS Norval: Command Bridge',
era: 'orville',
description: 'Clean, uplifting quantum drive hum, gentle ventilation, and cheerful synthesizer console chirps.',
hull: { volume: 0.6, baseFreq: 58, filterCutoff: 130, resonance: 2.4, noiseMix: 0.35, harmonicSpread: 1.025 },
@@ -1008,9 +1008,9 @@ const UniverseRegistry = {
},
'com-protector': {
id: 'com-protector',
name: 'NSEA Protector: Beryllium Engine Room',
name: 'NSEA Protractor: Beryllium Orb Engine Room',
era: 'galaxyquest',
description: 'Beryllium sphere reactor thrum, Omega-13 capacitor charge, and earnest digital bridge beeps.',
description: 'Beryllium Orb reactor thrum, Omega-12+1 capacitor charge, and earnest digital bridge beeps.',
hull: { volume: 0.7, baseFreq: 64, filterCutoff: 145, resonance: 3.2, noiseMix: 0.45, harmonicSpread: 1.035 },
warp: { volume: 0.8, bpm: 56, carrierFreq: 82, filterCutoff: 230, pulseShape: 'defiant', resonance: 4.2, swirlMix: 0.35 },
lifeSupport: { volume: 0.55, noiseType: 'pink', highpassFreq: 220, lowpassFreq: 2100, airflowModSpeed: 0.14, airflowModDepth: 0.12 },
@@ -1018,9 +1018,9 @@ const UniverseRegistry = {
},
'com-heart-of-gold': {
id: 'com-heart-of-gold',
name: 'Heart of Gold: Improbability Bridge',
name: 'Heart of Silver: Unlikelihood Bridge',
era: 'hitchhikers',
description: 'Infinite Improbability Drive reality-bending swooshes, smugly cheerful doors, and Eddie the computer.',
description: 'Infinite Unlikelihood Drive reality-bending swooshes, smugly cheerful doors, and Eddie the computer.',
hull: { volume: 0.6, baseFreq: 52, filterCutoff: 120, resonance: 2.5, noiseMix: 0.4, harmonicSpread: 1.02 },
warp: { volume: 0.7, bpm: 60, carrierFreq: 70, filterCutoff: 210, pulseShape: 'voyager', resonance: 3.8, swirlMix: 0.4 },
lifeSupport: { volume: 0.65, noiseType: 'white', highpassFreq: 180, lowpassFreq: 2400, airflowModSpeed: 0.15, airflowModDepth: 0.14 },
@@ -1028,7 +1028,7 @@ const UniverseRegistry = {
},
'com-camden-lock': {
id: 'com-camden-lock',
name: 'HMS Camden Lock: Flight Deck & Mess',
name: 'HMS Camden Key: Flight Deck & Mess',
era: 'hyperdrive',
description: 'British sub-light engine chug, electric kettle bubbling, and galactic council bureaucracy tones.',
hull: { volume: 0.65, baseFreq: 48, filterCutoff: 105, resonance: 2.2, noiseMix: 0.48, harmonicSpread: 1.02 },
@@ -1038,9 +1038,9 @@ const UniverseRegistry = {
},
'com-spaceball-one': {
id: 'com-spaceball-one',
name: 'Spaceball One: Mega-Warship Bridge',
name: 'Spaceorb One: Mega-Warship Bridge',
era: 'spaceballs',
description: 'Absurdly huge mega-engine roar, ludicrous speed accelerator whine, and helmet intercom static.',
description: 'Absurdly huge mega-engine roar, ridiculous speed accelerator whine, and helmet intercom static.',
hull: { volume: 0.85, baseFreq: 64, filterCutoff: 150, resonance: 3.5, noiseMix: 0.55, harmonicSpread: 1.04 },
warp: { volume: 0.9, bpm: 66, carrierFreq: 86, filterCutoff: 260, pulseShape: 'defiant', resonance: 4.4, swirlMix: 0.4 },
lifeSupport: { volume: 0.6, noiseType: 'pink', highpassFreq: 220, lowpassFreq: 2200, airflowModSpeed: 0.16, airflowModDepth: 0.15 },
@@ -1054,23 +1054,23 @@ window.UniverseRegistry = UniverseRegistry;
// Canonical Engine Startup & Shutdown Profile Matrix (15 Archetypes mapped to 70 Presets)
const PresetEngineProfiles = {
// Starfleet TNG
// Starflight TNG
'tng-bridge': 'galaxy',
'tng-engineering': 'galaxy',
'tng-quarters': 'galaxy',
// Starfleet Voyager
// Starflight Wayfarer
'voyager-bridge': 'intrepid',
'voyager-engineering': 'intrepid',
// Starfleet Defiant
// Starflight Defiance
'defiant-bridge': 'defiant',
// Starfleet Cardassian / Bajoran
// Starflight Cardassian / Bajoran
'ds9-ops': 'cardassian',
// Starfleet TOS
// Starflight TOS
'tos-bridge': 'tos',
'tos-engineering': 'tos',
// Starfleet NX
// Starflight NX
'nx-bridge': 'nx',
// Whoniverse TARDIS
// Whataverse TARDIX
'tardis-1963': 'tardis',
'tardis-victorian': 'tardis',
'tardis-coral': 'tardis',
@@ -1165,7 +1165,7 @@ window.getEngineProfileForPreset = getEngineProfileForPreset;
/**
* LCARS Audio Visualizer & Warp Core Intermix Chamber Display
* Renders real-time audio spectrum, waveform oscilloscope, and pulsing warp core animation.
* LCARD Audio Visualizer & Worp Core Intermix Chamber Display
* Renders real-time audio spectrum, waveform oscilloscope, and pulsing worp core animation.
*/
+14 -14
View File
@@ -34,13 +34,13 @@ window.ObservationBezels = {
<rect x="1040" y="195" width="30" height="515" fill="#171310" stroke="#dc2626" stroke-width="2.5" opacity="0.9"/>
` : ''}
<text x="800" y="865" text-anchor="middle" fill="#f59e0b" font-family="'Share Tech Mono', monospace" font-size="16" letter-spacing="4">U.S.S. ENTERPRISE NCC-1701 // BRIDGE VIEWSCREEN</text>
<text x="800" y="865" text-anchor="middle" fill="#f59e0b" font-family="'Share Tech Mono', monospace" font-size="16" letter-spacing="4">U.S.S. INTERPRISE NCC-1701.5 // BRIDGE VIEWSCREEN</text>
</svg>
`;
}
if (era === 'voyager') {
// Voyager Intrepid Class - sleeker rounded modern arch, cyan accent
// Wayfarer Intrepid Class - sleeker rounded modern arch, cyan accent
return `
<svg viewBox="0 0 1600 900" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg">
<defs>
@@ -62,14 +62,14 @@ window.ObservationBezels = {
<g transform="translate(500, 838)">
<rect x="0" y="0" width="600" height="20" rx="10" fill="#22d3ee" opacity="0.85"/>
<text x="300" y="15" text-anchor="middle" fill="#000" font-family="'Antonio', sans-serif" font-weight="700" font-size="12" letter-spacing="3">USS VOYAGER // BRIDGE VIEWPORT</text>
<text x="300" y="15" text-anchor="middle" fill="#000" font-family="'Antonio', sans-serif" font-weight="700" font-size="12" letter-spacing="3">USS WAYFARER // BRIDGE VIEWPORT</text>
</g>
</svg>
`;
}
if (era === 'ds9') {
// Defiant Class / DS9 Ops - angular, aggressive warship framing
// Defiance Class / DS9 Ops - angular, aggressive warship framing
return `
<svg viewBox="0 0 1600 900" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg">
<defs>
@@ -83,13 +83,13 @@ window.ObservationBezels = {
<path d="M0,900 H1600 V840 L1300,730 H300 L0,840 Z" fill="url(#defMetal)" stroke="#f97316" stroke-width="3"/>
<path d="M0,0 V900 H150 L190,730 V170 L150,0 Z" fill="url(#defMetal)" stroke="#f97316" stroke-width="3"/>
<path d="M1600,0 V900 H1450 L1410,730 V170 L1450,0 Z" fill="url(#defMetal)" stroke="#f97316" stroke-width="3"/>
<text x="800" y="865" text-anchor="middle" fill="#f97316" font-family="'Share Tech Mono', monospace" font-size="16" letter-spacing="4">USS DEFIANT // TACTICAL BRIDGE VIEWPORT</text>
<text x="800" y="865" text-anchor="middle" fill="#f97316" font-family="'Share Tech Mono', monospace" font-size="16" letter-spacing="4">USS DEFIANCE // TACTICAL BRIDGE VIEWPORT</text>
</svg>
`;
}
if (era === 'nx') {
// Enterprise NX-01 - early, industrial, submarine-like bulkhead
// Interprise NS-01 - early, industrial, submarine-like bulkhead
return `
<svg viewBox="0 0 1600 900" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg">
<defs>
@@ -103,7 +103,7 @@ window.ObservationBezels = {
<path d="M0,900 H1600 V790 L1420,725 H180 L0,790 Z" fill="url(#nxMetal)" stroke="#a16207" stroke-width="3"/>
<path d="M0,0 V900 H120 L150,725 V175 L120,0 Z" fill="url(#nxMetal)" stroke="#a16207" stroke-width="3"/>
<path d="M1600,0 V900 H1480 L1450,725 V175 L1480,0 Z" fill="url(#nxMetal)" stroke="#a16207" stroke-width="3"/>
<text x="800" y="865" text-anchor="middle" fill="#a16207" font-family="'Share Tech Mono', monospace" font-size="16" letter-spacing="4">ENTERPRISE NX-01 // COMMAND BRIDGE VIEWPORT</text>
<text x="800" y="865" text-anchor="middle" fill="#a16207" font-family="'Share Tech Mono', monospace" font-size="16" letter-spacing="4">INTERPRISE NS-01 // COMMAND BRIDGE VIEWPORT</text>
</svg>
`;
}
@@ -144,7 +144,7 @@ window.ObservationBezels = {
}
if (universeId === 'whoniverse') {
// Gallifreyan Observatory Roundel Viewing Portal / TARDIS Frame
// Gallifreyan Observatory Roundel Viewing Portal / TARDIX Frame
// Console era (classic/revival/modern) tints the rings and label.
let era = 'revival';
const wUniverse = (typeof UniverseRegistry !== 'undefined') ? UniverseRegistry['whoniverse'] : null;
@@ -152,10 +152,10 @@ window.ObservationBezels = {
if (preset && preset.era) era = preset.era;
let ringA = '#d4af37', ringB = '#00e5ff', dash = '16 12', labelColor = '#d4af37';
let label = 'T.A.R.D.I.S. TEMPORAL VORTEX OBSERVATION PORTAL';
let label = 'T.A.R.D.I.X. TEMPORAL VORTEX OBSERVATION PORTAL';
if (era === 'classic') {
ringA = '#b45309'; ringB = '#f5deb3'; dash = '22 10'; labelColor = '#f5deb3';
label = 'TYPE 40 CLASSIC CONSOLE // TEMPORAL VIEWPORT';
label = 'TYPE 4D CLASSIC CONSOLE // TEMPORAL VIEWPORT';
} else if (era === 'modern') {
ringA = '#e2e8f0'; ringB = '#94a3b8'; dash = '4 6'; labelColor = '#e2e8f0';
label = 'INFINITE WHITE // TEMPORAL OBSERVATION PORTAL';
@@ -195,7 +195,7 @@ window.ObservationBezels = {
if (universeId === 'bioships' || universeId === 'retrofuture' || universeId === 'military' || universeId === 'comedy') {
// These four universes previously had no case here at all and silently fell through
// to the Starfleet default below, which hardcodes "USS ENTERPRISE" into the plaque --
// to the Starflight default below, which hardcodes "USS INTERPRISE-G" into the plaque --
// showing the wrong ship name in every one of these themes' Observation view.
// Fix: reuse the same bulkhead shape (it already themes correctly via the CSS
// accent variables set per universe), but pull the REAL ship/deck name for the
@@ -233,7 +233,7 @@ window.ObservationBezels = {
`;
}
// Default: Iconic Starfleet Ten Forward / Galaxy-Class Observation Lounge
// Default: Iconic Starflight Ten Forward / Galaxy-Class Observation Lounge
return `
<svg viewBox="0 0 1600 900" preserveAspectRatio="none" xmlns="http://www.w3.org/2000/svg">
<defs>
@@ -259,10 +259,10 @@ window.ObservationBezels = {
<path d="M1090,95 L1065,95 L1055,765 L1100,765 Z" fill="#151922" stroke="var(--tertiary-accent, #99ccff)" stroke-width="2.5" opacity="0.95"/>
` : ''}
<!-- Authentic LCARS Display Bar along lower sill -->
<!-- Authentic LCARD Display Bar along lower sill -->
<g transform="translate(480, 830)">
<rect x="0" y="0" width="640" height="24" rx="12" fill="var(--primary-accent, #ff9900)" opacity="0.85"/>
<text x="320" y="17" text-anchor="middle" fill="#000" font-family="'Antonio', sans-serif" font-weight="700" font-size="14" letter-spacing="3">USS ENTERPRISE // OBSERVATION LOUNGE // DECK 10 FORWARD</text>
<text x="320" y="17" text-anchor="middle" fill="#000" font-family="'Antonio', sans-serif" font-weight="700" font-size="14" letter-spacing="3">USS INTERPRISE-G // OBSERVATION LOUNGE // DECK 10 FORWARD</text>
</g>
</svg>
`;
+8 -8
View File
@@ -647,7 +647,7 @@ class ObservationEngine {
}
} else if (this.activeUniverse === 'whoniverse') {
shipType = 'tardis';
label = 'TYPE 40 TIME CAPSULE // DRIFT';
label = 'TYPE 4D TIME CAPSULE // DRIFT';
trailColor = '#00e5ff';
} else if (this.activeUniverse === 'industrial' || this.activeUniverse === 'outlaw') {
shipType = 'freighter';
@@ -1342,7 +1342,7 @@ class ObservationEngine {
}
}
// Shared "computer console" callout: LCARS corner brackets sized to the object, a leader
// Shared "computer console" callout: LCARD corner brackets sized to the object, a leader
// line, and a small mono-font tag -- the same drawing technique already used for ship
// traffic reticles (renderTargetReticles), extended here to any discrete Deep Space object.
// Idles with a slow breathing pulse and flashes briefly on a per-object interval, like a
@@ -1531,7 +1531,7 @@ class ObservationEngine {
ctx.scale(ship.scale, ship.scale);
if (ship.type === 'shuttle') {
// Sleek Starfleet Shuttlecraft
// Sleek Starflight Shuttlecraft
// Hull
ctx.fillStyle = '#e2e8f0';
ctx.beginPath();
@@ -1575,7 +1575,7 @@ class ObservationEngine {
ctx.arc(5, 14, 2, 0, Math.PI * 2);
ctx.fill();
} else if (ship.type === 'cruiser') {
// Starfleet Capital Cruiser Silhouette
// Starflight Capital Cruiser Silhouette
ctx.fillStyle = '#cbd5e1';
// Primary Saucer
ctx.beginPath();
@@ -1616,7 +1616,7 @@ class ObservationEngine {
ctx.arc(-2, 19.5, 2.5, 0, Math.PI * 2);
ctx.fill();
} else if (ship.type === 'tardis') {
// Whoniverse TARDIS tumbling in vortex
// Whataverse TARDIX tumbling in vortex
ctx.rotate(this.time * 1.5);
ctx.fillStyle = '#1e3a8a';
ctx.fillRect(-12, -18, 24, 36);
@@ -1737,7 +1737,7 @@ class ObservationEngine {
const x = ship.x;
const y = ship.y;
// Draw LCARS corner reticle brackets
// Draw LCARD corner reticle brackets
const bLen = 8;
// Top-left
ctx.beginPath();
@@ -2660,12 +2660,12 @@ class ObservationEngine {
'ALL DECKS REPORTING NOMINAL',
'SUBSPACE ARRAY HOLDING STEADY LOCK',
'STRUCTURAL INTEGRITY FIELD: 100%',
'REPLICATOR SYSTEMS ON STANDBY',
'FABRICATOR SYSTEMS ON STANDBY',
'SENSOR SWEEP: NO ANOMALIES DETECTED'
],
whoniverse: [
'TEMPORAL GRACE PERIOD: ACTIVE',
'CLOISTER BELL: SILENT',
'CLOISTER CHIME: SILENT',
'CHAMELEON CIRCUIT: STUCK (AS USUAL)',
'VORTEX MANIFOLD WITHIN TOLERANCE',
'ARTRON ENERGY LEVELS STABLE'
+26 -26
View File
@@ -17,7 +17,7 @@ class StarshipVisualizer {
this.coreLoad = 0.6;
this.lastFrameTime = null;
// Hook into warp core pulse callback
// Hook into worp core pulse callback
if (this.warpSynth) {
this.warpSynth.onPulse = (phase, duration) => {
this.pulseEnergy = 1.0;
@@ -203,7 +203,7 @@ class StarshipVisualizer {
else if (i < 28) col = '#38bdf8';
else col = '#ffffff';
} else {
// Starfleet / Classic LCARS
// Starflight / Classic LCARD
if (i < 8) col = '#ff6600';
else if (i < 20) col = '#ff9933';
else if (i < 28) col = '#cc99cc';
@@ -305,7 +305,7 @@ class StarshipVisualizer {
}
/**
* Renders the canonical TARDIS Central Time Rotor
* Renders the canonical TARDIX Central Time Rotor
* A glass cylinder containing an interior mechanical column physically rising and falling
* in sync with the pulse cycle, illuminated with glowing Gallifreyan cyan/emerald light.
*/
@@ -321,7 +321,7 @@ class StarshipVisualizer {
const centerX = w / 2;
const columnWidth = Math.min(84, w * 0.45);
// 1. TARDIS Console Plinth & Ceiling Collar (Victorian Brass / Gallifreyan Bronze)
// 1. TARDIX Console Plinth & Ceiling Collar (Victorian Brass / Gallifreyan Bronze)
const collarGrad = ctx.createLinearGradient(centerX - columnWidth / 2, 0, centerX + columnWidth / 2, 0);
collarGrad.addColorStop(0, '#593e10');
collarGrad.addColorStop(0.3, '#d4af37');
@@ -471,7 +471,7 @@ class StarshipVisualizer {
}
/**
* Living Leviathan Bio-Heart (Moya, Lexx, Species 8472)
* Living Leviathon Bio-Heart (Moya, Lexx, Species 8675309)
* Pulsing vascular heart sac with bioluminescent emerald/violet energy and neural veins
*/
renderBioHeart() {
@@ -523,8 +523,8 @@ class StarshipVisualizer {
* Retro Oscilloscope & Analog Astrogator (Jupiter 2, Discovery One)
* 1950s/60s green phosphor CRT screen with glowing Lissajous audio wave rings
*/
renderRetroOscilloscope() {
if (!this.warpCoreCanvas || !this.warpCoreCtx) return;
renderRetroOscilloscope() {
if (!this.warpCoreCanvas || !this.warpCoreCtx) return;
const ctx = this.warpCoreCtx;
const w = this.warpCoreCanvas.width / window.devicePixelRatio;
const h = this.warpCoreCanvas.height / window.devicePixelRatio;
@@ -553,12 +553,12 @@ class StarshipVisualizer {
ctx.lineTo(centerX, centerY + crtRadius);
ctx.stroke();
// Draw a neutral trace before audio initialization, replacing the previous theme.
const analyser = this.am.analyser;
const bufferLength = analyser ? analyser.fftSize : 128;
const dataArray = new Uint8Array(bufferLength);
if (analyser) analyser.getByteTimeDomainData(dataArray);
else dataArray.fill(128);
// Draw a neutral trace before audio initialization, replacing the previous theme.
const analyser = this.am.analyser;
const bufferLength = analyser ? analyser.fftSize : 128;
const dataArray = new Uint8Array(bufferLength);
if (analyser) analyser.getByteTimeDomainData(dataArray);
else dataArray.fill(128);
ctx.strokeStyle = '#86efac';
ctx.shadowColor = '#22c55e';
@@ -570,23 +570,23 @@ class StarshipVisualizer {
for (let i = 0; i < points; i++) {
const idx = Math.floor((i / points) * (bufferLength / 2));
const v = (dataArray[idx] / 128.0) - 1.0;
const angle = (i / points) * Math.PI * 2 + this.coreTime;
const angle = (i / points) * Math.PI * 2 + this.coreTime;
const r = (crtRadius * 0.65) + (v * 28 * (0.8 + this.pulseEnergy));
const x = centerX + Math.cos(angle) * r;
const y = centerY + Math.sin(angle) * r;
if (i === 0) ctx.moveTo(x, y);
else ctx.lineTo(x, y);
}
ctx.closePath();
ctx.stroke();
// A sweep marker makes rotation legible even when the audio trace is silent.
const sweepRadius = (crtRadius * 0.65) + ((dataArray[0] / 128.0) - 1.0) * 28 * (0.8 + this.pulseEnergy);
ctx.fillStyle = '#d1fae5';
ctx.beginPath();
ctx.arc(centerX + Math.cos(this.coreTime) * sweepRadius,
centerY + Math.sin(this.coreTime) * sweepRadius, 2.5, 0, Math.PI * 2);
ctx.fill();
ctx.shadowBlur = 0;
ctx.closePath();
ctx.stroke();
// A sweep marker makes rotation legible even when the audio trace is silent.
const sweepRadius = (crtRadius * 0.65) + ((dataArray[0] / 128.0) - 1.0) * 28 * (0.8 + this.pulseEnergy);
ctx.fillStyle = '#d1fae5';
ctx.beginPath();
ctx.arc(centerX + Math.cos(this.coreTime) * sweepRadius,
centerY + Math.sin(this.coreTime) * sweepRadius, 2.5, 0, Math.PI * 2);
ctx.fill();
ctx.shadowBlur = 0;
}
/**
@@ -655,8 +655,8 @@ function hexToRgba(hex, alpha = 1) {
* - 60fps DPI-Aware Deep Celestial Canvas (Parallax 3D Starfield & Warp Tunnel)
* - Relativistic Warp Flight vs. Orbital Cruise Impulse Modes
* - Procedural Celestial Bodies (Class-M Planet with Atmospheric Glow, Time Vortex, Gas Giants)
* - Living Traffic & Encounters (Shuttles, Cruisers, Decloaking Klingon BOP, TARDIS, Freighters)
* - Viewport Window Framing Architecture per Universe (Starfleet, Industrial, Station, Whoniverse, Military)
* - Living Traffic & Encounters (Shuttles, Cruisers, Decloaking Klingon BOP, TARDIX, Freighters)
* - Viewport Window Framing Architecture per Universe (Starflight, Industrial, Station, Whataverse, Military)
* - Emergency Alert Synchronization (Red/Yellow Alert Klaxon Strobes & Shield Grids)
* - Subspace Audio Harmonics Waveform Sill
* - Auto-Hiding Interactive Glass Control Dock
+465 -465
View File
File diff suppressed because it is too large Load Diff
+106 -106
View File
@@ -16,10 +16,10 @@ events rather than running continuously.
| Element | Method | Description | Where used |
| --- | --- | --- | --- |
| **LCARS Single Chirp** | `synthesizeLCARSSingleChirp(pitch?)` | Soft sine touch tone, ~90 ms, gentle 8 ms attack into exponential decay, with a subtle 2% downward pitch glide and a 3.2 kHz lowpass to kill the click. Accepts an optional pitch, which makes it the building block for the other LCARS elements. | TNG auto-scheduler (45%), DS9 (50%), soundboard `btn-chirp-single` / `btn-switch-pop`, preset-change confirmation while playing, **default fallback** for any unmapped soundboard or event id |
| **LCARS Double Chirp** | `synthesizeLCARSDoubleChirp()` | Two single chirps 65 ms apart, second pitch two steps up the LCARS scale (minor third / fourth). The iconic "acknowledged" tone. | TNG auto-scheduler (30%), Voyager (60%), soundboard `btn-chirp-double`, **engage/play confirmation** for non-Whoniverse, non-bioship universes |
| **LCARS Acknowledgment Sequence** | `synthesizeLCARSSequence()` | Three chirps at 75 ms spacing drawn from overlapping windows of the LCARS scale — reads as a short data-accept run rather than a single button press. | TNG auto-scheduler (15%), soundboard `btn-chirp-ack` |
| **Sensor Sweep** | `synthesizeSensorSweep()` | 380 ms sine glide from 12002000 Hz, ramping either up ×1.6 or down ×0.65 at random. Longer and more "scanning" than the chirps. | TNG auto-scheduler (10%), Voyager (40%), soundboard `btn-chirp-sweep`, layered under `btn-scanner` |
| **LCARD Single Chirp** | `synthesizeLCARDSingleChirp(pitch?)` | Soft sine touch tone, ~90 ms, gentle 8 ms attack into exponential decay, with a subtle 2% downward pitch glide and a 3.2 kHz lowpass to kill the click. Accepts an optional pitch, which makes it the building block for the other LCARD elements. | TNG auto-scheduler (45%), DS9 (50%), soundboard `btn-chirp-single` / `btn-switch-pop`, preset-change confirmation while playing, **default fallback** for any unmapped soundboard or event id |
| **LCARD Double Chirp** | `synthesizeLCARDDoubleChirp()` | Two single chirps 65 ms apart, second pitch two steps up the LCARD scale (minor third / fourth). The iconic "acknowledged" tone. | TNG auto-scheduler (30%), Wayfarer (60%), soundboard `btn-chirp-double`, **engage/play confirmation** for non-Whataverse, non-bioship universes |
| **LCARD Acknowledgment Sequence** | `synthesizeLCARDSequence()` | Three chirps at 75 ms spacing drawn from overlapping windows of the LCARD scale — reads as a short data-accept run rather than a single button press. | TNG auto-scheduler (15%), soundboard `btn-chirp-ack` |
| **Sensor Sweep** | `synthesizeSensorSweep()` | 380 ms sine glide from 12002000 Hz, ramping either up ×1.6 or down ×0.65 at random. Longer and more "scanning" than the chirps. | TNG auto-scheduler (10%), Wayfarer (40%), soundboard `btn-chirp-sweep`, layered under `btn-scanner` |
| **TOS Computer Warble** | `synthesizeTOSWarble()` | 450 ms of detuned triangle + sawtooth (fundamental and its fifth) under a 1422 Hz vibrato LFO, through a Q=3.5 bandpass at 1.2× the fundamental. Vintage 1960s analog computer voice. | TOS auto-scheduler (60%) |
| **TOS Relay Click** | `synthesizeTOSRelayClick()` | 25 ms square wave falling 1400 → 300 Hz. A mechanical solenoid snap, not a tone. | TOS auto-scheduler (40%) |
| **Cardassian Sensor Tone** | `synthesizeCardassianSensor()` | 550 ms pair of sines a tritone apart (×1.414) for deliberate metallic dissonance, base 420620 Hz. Cavernous, alien, unresolved. | DS9 auto-scheduler (50%) |
@@ -27,8 +27,8 @@ events rather than running continuously.
| **NX Indicator Beep** | `synthesizeNXIndicatorBeep()` | 80 ms 950 Hz sine with a flat sustain plateau and a fast tail. Plain and utilitarian; no glide, no scale membership. | NX auto-scheduler (50%) |
| **TNG Door Chime** | `synthesizeDoorChime()` | Two overlapping sines, A5 (880 Hz) then D6 (1174.66 Hz) at +160 ms, each with a long 450700 ms decay. The "come in" chime. | Soundboard `btn-chirp-door` only — **never** fired by the auto-scheduler |
The table above is the original five-era Starfleet vocabulary. Phase 3 added
three more eras — `who`, `bioship`, `belter` — but they don't fit this table's
The table above is the original five-era Starflight vocabulary. Phase 3 added
three more eras — `who`, `bioship`, `beltworker` — but they don't fit this table's
shape: each fires a **multi-event generator** (a whole 0.251.4 s phrase of
staggered transients per tick) rather than picking one discrete element. They
are catalogued in [Phase 3 telemetry eras](#phase-3-telemetry-eras) below.
@@ -59,20 +59,20 @@ an era or a new element.
| Era | Elements and weights |
| --- | --- |
| `tng` (also the default) | Single Chirp 45% · Double Chirp 30% · Acknowledgment Sequence 15% · Sensor Sweep 10% |
| `voyager` | Double Chirp 60% · Sensor Sweep 40% |
| `wayfarer` | Double Chirp 60% · Sensor Sweep 40% |
| `tos` | Computer Warble 60% · Relay Click 40% |
| `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| `nx` | Hydraulic Relay 50% · Indicator Beep 50% |
| `who` (Phase 3) | Dedicated mechanical-telemetry generator — see [Phase 3 telemetry eras](#phase-3-telemetry-eras) |
| `bioship` (Phase 3) | Dedicated organic-telemetry generator — see [Phase 3 telemetry eras](#phase-3-telemetry-eras) |
| `belter` (Phase 3) | Dedicated jury-rigged-telemetry generator — see [Phase 3 telemetry eras](#phase-3-telemetry-eras) |
| `beltworker` (Phase 3) | Dedicated jury-rigged-telemetry generator — see [Phase 3 telemetry eras](#phase-3-telemetry-eras) |
Note the era is a **telemetry** property, not a universe property: it is set
per preset in `js/config.js` (`telemetry.era`) and is independent of the
universe that governs the visuals. Originally every preset in every universe
used one of the five Trek eras, so non-Trek themes played Trek telemetry.
Phase 3 gave three universes their own dedicated eras instead (Whoniverse →
`who`, Bioships → `bioship`, and Ceres/Tycho/Rocinante → `belter`) — the
Phase 3 gave three universes their own dedicated eras instead (Whataverse →
`who`, Bioships → `bioship`, and Ceres/Tycho/Rocinante → `beltworker`) — the
remaining universes still borrow Trek telemetry. See
[Preset → telemetry era reference](#preset--telemetry-era-reference) for the
full, corrected per-preset mapping.
@@ -111,14 +111,14 @@ either be reachable through the era router or dispatch the event itself.
Two fixed scales are the source of all pitched telemetry. Reuse them rather
than inventing loose frequencies — they are what makes the layer sound coherent.
- **`lcarsPitches`** — 12 entries, 880 Hz → 2637 Hz, a pentatonic-flavored set
built on perfect fourths and fifths. Used by every LCARS element.
- **`lcardPitches`** — 12 entries, 880 Hz → 2637 Hz, a pentatonic-flavored set
built on perfect fourths and fifths. Used by every LCARD element.
- **`tosFrequencies`** — 9 entries, 440 Hz → 2217 Hz, wider and more angular,
matching the era's less "designed" sound.
Unpitched elements (relay clicks, sweeps, the Cardassian tone) generate their
own frequencies and intentionally sit outside both scales. The three Phase 3
eras below are unpitched entirely — none of them touch `lcarsPitches` or
eras below are unpitched entirely — none of them touch `lcardPitches` or
`tosFrequencies`, on purpose: they are meant to sound like mechanisms, not
computers.
@@ -137,9 +137,9 @@ call.
| Era | Method (TelemetrySynth) | Universe(s) | Acoustic output |
| --- | --- | --- | --- |
| `who` | `synthesizeWhoMechanicalTelemetry_()` | Whoniverse (all 7 `tardis-*` presets) | 25 transients per tick, drawn at random from: dual-filtered toggle snaps (2045 ms noise pulses through paired bandpass filters), 60120 Hz spring-lever square clicks collapsing in pitch, and damped sine rotary-selector clunks. No electronic beeps. |
| `who` | `synthesizeWhoMechanicalTelemetry_()` | Whataverse (all 7 `tardix-*` presets) | 25 transients per tick, drawn at random from: dual-filtered toggle snaps (2045 ms noise pulses through paired bandpass filters), 60120 Hz spring-lever square clicks collapsing in pitch, and damped sine rotary-selector clunks. No electronic beeps. |
| `bioship` | `synthesizeBioshipOrganicTelemetry_()` | Bioships (all 6 `bio-*` presets) | 24 events per phrase: asymmetric 3090 Hz vascular-surge sine thumps (sometimes with a lub-dub echo beat), high-Q bandpass chitin-snap noise ticks, bandpass-filtered wet bioplasmic fluid pops, and AM-stepped membrane-flutter noise between 300700 Hz. |
| `belter` | `synthesizeBelterJuryRiggedTelemetry_()` | `sta-tycho`, `sta-ceres` (Space Stations) and `ind-rocinante` (Industrial) | 36 events per volley: jittered square relay pulses with randomized micro-dropouts, contact-bounce double/triple clicks, metallic bandpass ticks, and unstable "dying oscillator" clock pings — plus an occasional late catch-up sub-volley mimicking a station clock that skips then recovers. |
| `beltworker` | `synthesizeBeltworkerJuryRiggedTelemetry_()` | `sta-tycho`, `sta-ceres` (Space Stations) and `ind-rocinante` (Industrial) | 36 events per volley: jittered square relay pulses with randomized micro-dropouts, contact-bounce double/triple clicks, metallic bandpass ticks, and unstable "dying oscillator" clock pings — plus an occasional late catch-up sub-volley mimicking a station clock that skips then recovers. |
These three eras are documented in full, with source-material context, in
[`sound_reference.md`](sound_reference.md) under each universe's "Phase 3
@@ -170,13 +170,13 @@ individual elements should never touch master volume or the destination.
## Related but not telemetry
Short event sounds for non-Starfleet universes live in sibling classes and are
Short event sounds for non-Starflight universes live in sibling classes and are
routed by `handleSoundboardTrigger()` in `js/app.js`. Check these before adding
a new telemetry element — the sound you want may already exist:
- **`WhoniverseAudioSynth`** — sonic screwdriver, fast return, demat switch,
- **`WhataverseAudioSynth`** — acoustic screwdriver, fast return, demat switch,
telepathic chime, cloister strike.
- **`ExpandedSciFiAudioSynth`** — DRADIS ping, HAL chime, Geiger burst, docking
- **`ExpandedSciFiAudioSynth`** — DRADAR ping, HAL chime, Geiger burst, docking
clamp, improbability flip, cheerful door, and the various drive effects.
- **`AlertSynth`** — red/yellow alert cycles and the warp jump swell. Alerts are
a separate layer with its own trigger path, not telemetry. **They are not
@@ -209,7 +209,7 @@ no existing element has. In that case:
characterful to fire unattended.
4. If it is manual-only, add a soundboard case in `handleSoundboardTrigger()`
and a button in `index.html`.
5. Reuse `lcarsPitches` / `tosFrequencies` if the element is pitched and belongs
5. Reuse `lcardPitches` / `tosFrequencies` if the element is pitched and belongs
to those eras.
6. Keep the duration under ~600 ms. This is an ambient layer; anything longer
reads as a foreground event and belongs in `AlertSynth` instead.
@@ -225,7 +225,7 @@ five Star Trek eras, so non-Trek universes played Trek telemetry: a
retrofuture profile could chatter in TOS warbles, and a living-ship profile
could ring with the Cardassian sensor tone. Phase 3 broke that pattern for
three universes — see [Phase 3 telemetry eras](#phase-3-telemetry-eras) above —
so Whoniverse, Bioships, and three `belter` presets (Tycho, Ceres, Rocinante)
so Whataverse, Bioships, and three `beltworker` presets (Tycho, Ceres, Rocinante)
now have their own vocabulary instead. Everything else below still borrows
Trek telemetry; if you hear a sound that seems foreign to the theme you are
on, this table is where to look it up.
@@ -233,146 +233,146 @@ on, this table is where to look it up.
| Era | Elements fired |
| --- | --- |
| `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| `voyager` | Double Chirp 60% · Sensor Sweep 40% |
| `wayfarer` | Double Chirp 60% · Sensor Sweep 40% |
| `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| `who` | `who`-era mechanical telemetry (see above) |
| `bioship` | `bioship`-era organic telemetry (see above) |
| `belter` | `belter`-era jury-rigged telemetry (see above) |
| `beltworker` | `beltworker`-era jury-rigged telemetry (see above) |
### Starfleet Command (10 presets — ds9 ×2 · nx ×1 · tng ×3 · tos ×2 · voyager ×2)
### Starflight Command (10 presets — ds9 ×2 · nx ×1 · tng ×3 · tos ×2 · wayfarer ×2)
| Preset | Era | Elements heard |
| --- | --- | --- |
| Enterprise-D: Main Bridge | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| Enterprise-D: Main Engineering | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| Enterprise-D: Crew Quarters | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| USS Voyager: Bridge | `voyager` | Double Chirp 60% · Sensor Sweep 40% |
| USS Voyager: Class-9 Warp Core | `voyager` | Double Chirp 60% · Sensor Sweep 40% |
| USS Defiant: Tactical Bridge | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| Deep Space 9: Ops Center | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| Enterprise NCC-1701: Bridge (TOS) | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| Enterprise NCC-1701: Engineering (TOS) | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| Enterprise NX-01: Command Bridge | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Interprise-G: Main Bridge | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| Interprise-G: Main Engineering | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| Interprise-G: Crew Quarters | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| USS Wayfarer: Bridge | `wayfarer` | Double Chirp 60% · Sensor Sweep 40% |
| USS Wayfarer: Class-N Worp Core | `wayfarer` | Double Chirp 60% · Sensor Sweep 40% |
| USS Defiance: Tactical Bridge | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| Deep Space 8: Ops Center | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| Interprise NCC-1701.5: Bridge (TOS) | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| Interprise NCC-1701.5: Engineering (TOS) | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| Interprise NS-01: Command Bridge | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
### The Whoniverse (7 presets — who ×7, all Phase 3)
### The Whataverse (7 presets — who ×7, all Phase 3)
| Preset | Era | Elements heard |
| --- | --- | --- |
| 1963 Classic Console (1st / 2nd Doctors) | `who` | `who`-era mechanical telemetry (25 transients/tick) |
| Victorian Secondary Console (4th Doctor) | `who` | `who`-era mechanical telemetry (25 transients/tick) |
| The Coral Living TARDIS (9th / 10th Doctors) | `who` | `who`-era mechanical telemetry (25 transients/tick) |
| The Copper Workshop (11th Doctor) | `who` | `who`-era mechanical telemetry (25 transients/tick) |
| The Cold Machine (12th Doctor) | `who` | `who`-era mechanical telemetry (25 transients/tick) |
| The Singing Crystal Console (13th Doctor) | `who` | `who`-era mechanical telemetry (25 transients/tick) |
| The Infinite White (14th / 15th Doctors) | `who` | `who`-era mechanical telemetry (25 transients/tick) |
| 1962 Classic Console (1st / 2nd Doctors) | `who` | `who`-era mechanical telemetry (25 transients/tick) |
| Edwardian Secondary Console (4th Doctor) | `who` | `who`-era mechanical telemetry (25 transients/tick) |
| The Coral Living TARDIX (9th / 10th Doctors) | `who` | `who`-era mechanical telemetry (25 transients/tick) |
| The Bronze Workshop (11th Doctor) | `who` | `who`-era mechanical telemetry (25 transients/tick) |
| The Cool Machine (12th Doctor) | `who` | `who`-era mechanical telemetry (25 transients/tick) |
| The Humming Crystal Console (13th Doctor) | `who` | `who`-era mechanical telemetry (25 transients/tick) |
| The Endless White (14th / 15th Doctors) | `who` | `who`-era mechanical telemetry (25 transients/tick) |
### Industrial (8 presets — belter ×1 · ds9 ×1 · nx ×3 · tos ×3, 1 Phase 3)
### Industrial (8 presets — beltworker ×1 · ds9 ×1 · nx ×3 · tos ×3, 1 Phase 3)
| Preset | Era | Elements heard |
| --- | --- | --- |
| USCSS Nostromo: Ore Refinery Bridge | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Serenity: Firefly-Class Cargo Hold | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| Red Dwarf: Main Drive Corridor | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Starbug 1: Cockpit Environment | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| The Raza: Dark Matter Bridge | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| Rocinante: Combat Ops & Epstein Drive | `belter` | `belter`-era jury-rigged telemetry (36 events/volley) |
| Eagle Transporter: Command Module | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| Valley Forge: Agro-Dome Forest Hub | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| USCSS Nostramo: Ore Refinery Bridge | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Serenety: Firewing-Class Cargo Hold | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| Red Dwarve: Main Drive Corridor | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Starbug Z: Cockpit Environment | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| The Rasa: Dark Matter Bridge | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| Rocinanta: Combat Ops & Epsilon Drive | `beltworker` | `beltworker`-era jury-rigged telemetry (36 events/volley) |
| Hawk Translocator: Command Module | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| Valley Foundry: Agro-Dome Forest Hub | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
### Bioships (6 presets — bioship ×6, all Phase 3)
| Preset | Era | Elements heard |
| --- | --- | --- |
| Moya: Leviathan Central Nexus | `bioship` | `bioship`-era organic telemetry (24 events/phrase) |
| Talyn: Gunship Neural Bridge | `bioship` | `bioship`-era organic telemetry (24 events/phrase) |
| The Lexx: Primary Organ Bridge | `bioship` | `bioship`-era organic telemetry (24 events/phrase) |
| Vorlon Cruiser: Sentient Core | `bioship` | `bioship`-era organic telemetry (24 events/phrase) |
| Wraith Hive Ship: Throne Chamber | `bioship` | `bioship`-era organic telemetry (24 events/phrase) |
| Species 8472: Fluidic Bioship | `bioship` | `bioship`-era organic telemetry (24 events/phrase) |
| Meya: Leviathon Central Nexus | `bioship` | `bioship`-era organic telemetry (24 events/phrase) |
| Talym: Gunship Neural Bridge | `bioship` | `bioship`-era organic telemetry (24 events/phrase) |
| The Lexxi: Primary Organ Bridge | `bioship` | `bioship`-era organic telemetry (24 events/phrase) |
| Vorlan Cruiser: Sentient Core | `bioship` | `bioship`-era organic telemetry (24 events/phrase) |
| Wraithe Hive Ship: Throne Chamber | `bioship` | `bioship`-era organic telemetry (24 events/phrase) |
| Species 8675309: Fluid Bioship | `bioship` | `bioship`-era organic telemetry (24 events/phrase) |
### Retrofuture (8 presets — nx ×2 · tng ×2 · tos ×3 · voyager ×1)
### Retrofuture (8 presets — nx ×2 · tng ×2 · tos ×3 · wayfarer ×1)
| Preset | Era | Elements heard |
| --- | --- | --- |
| Jupiter 2: Upper Deck Astrogator | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| The Liberator: Zen Flight Bridge | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| USS Cygnus: Victorian Engine Hall | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| USS Palomino: Deep Research Pod | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Discovery One: Habitation Centrifuge | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| Dark Star: Bomb Bay & Quarters | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| Gunstar: Tactical Combat Cockpit | `voyager` | Double Chirp 60% · Sensor Sweep 40% |
| The Searcher: 25th Century Flagship | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| Jupiter Duece: Upper Deck Astrogator | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| The Liberation: Zen Flight Bridge | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| USS Cygnis: Victorian Engine Hall | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| USS Palomina: Deep Research Pod | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Discovery Zero: Habitation Centrifuge | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| Dim Star: Bomb Bay & Quarters | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| Gunstarr: Tactical Combat Cockpit | `wayfarer` | Double Chirp 60% · Sensor Sweep 40% |
| The Seeker: 25th Century Flagship | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
### Military (7 presets — ds9 ×3 · nx ×1 · tng ×1 · voyager ×2)
### Military (7 presets — ds9 ×3 · nx ×1 · tng ×1 · wayfarer ×2)
| Preset | Era | Elements heard |
| --- | --- | --- |
| USS Sulaco: Conestoga Hangar Deck | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| USS Solaco: Conestega Hangar Deck | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Battlestar Galactica: Combat Information Center (CIC) | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| White Star: Minbari/Vorlon Hybrid Bridge | `voyager` | Double Chirp 60% · Sensor Sweep 40% |
| EAS Agamemnon: Omega Destroyer Bridge | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| Andromeda Ascendant: Command Deck | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| Excalibur: Victory-Class Heavy Combat Core | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| Colonial Viper Mk II: Cockpit Atmosphere | `voyager` | Double Chirp 60% · Sensor Sweep 40% |
| Pale Star: Minbara/Vorlan Hybrid Bridge | `wayfarer` | Double Chirp 60% · Sensor Sweep 40% |
| EAS Agamemnon II: Omega Destroyer Bridge | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| Andromeda Ascending: Command Deck | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| Excaliber: Triumph-Class Heavy Combat Core | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| Colonial Adder Mk II: Cockpit Atmosphere | `wayfarer` | Double Chirp 60% · Sensor Sweep 40% |
### Deep Space (7 presets — ds9 ×2 · nx ×2 · tng ×2 · voyager ×1)
### Deep Space (7 presets — ds9 ×2 · nx ×2 · tng ×2 · wayfarer ×1)
| Preset | Era | Elements heard |
| --- | --- | --- |
| The Avalon: Interstellar Cruise Concourse | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| The Nightflyer: Telepathic Corridor | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| USS Ascension: Generation Ship Promenade | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Ark One: Evacuation Ark Bridge | `voyager` | Double Chirp 60% · Sensor Sweep 40% |
| Icarus II: Solar Shield Core | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| Event Horizon: Gravity Singularity Core | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Lewis & Clark: Rescue Cutter Bridge | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| The Avalin: Interstellar Cruise Concourse | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| The Nightflier: Telepathic Corridor | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| USS Ascention: Generation Ship Promenade | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Ark Zero: Evacuation Ark Bridge | `wayfarer` | Double Chirp 60% · Sensor Sweep 40% |
| Icarus I: Solar Shield Core | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| Event Boundary: Gravity Singularity Core | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Lewis & Clarke: Rescue Cutter Bridge | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
### Outlaw (6 presets — ds9 ×1 · nx ×1 · tos ×2 · voyager ×2)
### Outlaw (6 presets — ds9 ×1 · nx ×1 · tos ×2 · wayfarer ×2)
| Preset | Era | Elements heard |
| --- | --- | --- |
| The Betty: Salvage Freighter Mess | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Bebop: Living Quarters & Hangar | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| Outlaw Star: Grappler Bridge | `voyager` | Double Chirp 60% · Sensor Sweep 40% |
| Scorpio: Wanderer Salvage Vessel | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| The Marauder: Havoc Shuttle Bridge | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| The Milano: M-Ship Cockpit Lounge | `voyager` | Double Chirp 60% · Sensor Sweep 40% |
| The Betsy: Salvage Freighter Mess | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| BeBoppa: Living Quarters & Hangar | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| Outlaw Sun: Grapple Bridge | `wayfarer` | Double Chirp 60% · Sensor Sweep 40% |
| Scorpius: Wanderer Salvage Vessel | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| The Raider: Havoc Shuttle Bridge | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| The Milan: M-Ship Cockpit Lounge | `wayfarer` | Double Chirp 60% · Sensor Sweep 40% |
### Space Stations (6 presets — belter ×2 · ds9 ×1 · nx ×1 · tng ×1 · tos ×1, 2 Phase 3)
### Space Stations (6 presets — beltworker ×2 · ds9 ×1 · nx ×1 · tng ×1 · tos ×1, 2 Phase 3)
| Preset | Era | Elements heard |
| --- | --- | --- |
| Babylon 5: Core Control & Zocalo | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| Moonbase Alpha: Main Mission Control | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| Sevastopol Station: Habitation Deck | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Tycho Station: Asteroid Construction Bay | `belter` | `belter`-era jury-rigged telemetry (36 events/volley) |
| Ceres Station: Sub-Crustal Tunnels | `belter` | `belter`-era jury-rigged telemetry (36 events/volley) |
| Gateway Station: Quarantine Transfer Deck | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| Babylon 4: Core Control & Zocolo | `ds9` | Cardassian Sensor 50% · Single Chirp 50% |
| Moonbase Beta: Main Mission Control | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| Sebastopol Station: Habitation Deck | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Tyco Station: Asteroid Construction Bay | `beltworker` | `beltworker`-era jury-rigged telemetry (36 events/volley) |
| Ceres Minor Station: Sub-Crustal Tunnels | `beltworker` | `beltworker`-era jury-rigged telemetry (36 events/volley) |
| Gatehouse Station: Quarantine Transfer Deck | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
### Comedy (5 presets — nx ×1 · tng ×2 · tos ×1 · voyager ×1)
### Comedy (5 presets — nx ×1 · tng ×2 · tos ×1 · wayfarer ×1)
| Preset | Era | Elements heard |
| --- | --- | --- |
| USS Orville: Command Bridge | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| NSEA Protector: Beryllium Engine Room | `voyager` | Double Chirp 60% · Sensor Sweep 40% |
| Heart of Gold: Improbability Bridge | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| HMS Camden Lock: Flight Deck & Mess | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Spaceball One: Mega-Warship Bridge | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
| USS Norval: Command Bridge | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| NSEA Protractor: Beryllium Orb Engine Room | `wayfarer` | Double Chirp 60% · Sensor Sweep 40% |
| Heart of Silver: Unlikelihood Bridge | `tng` | Single Chirp 45% · Double Chirp 30% · Ack Sequence 15% · Sensor Sweep 10% |
| HMS Camden Key: Flight Deck & Mess | `nx` | NX Hydraulic Relay 50% · NX Indicator Beep 50% |
| Spaceorb One: Mega-Warship Bridge | `tos` | TOS Computer Warble 60% · TOS Relay Click 40% |
### Notes on the spread
- **Starfleet** is the only universe where the era always matches the fiction.
- **Whoniverse** and **Bioships** no longer borrow Trek eras at all as of
- **Starflight** is the only universe where the era always matches the fiction.
- **Whataverse** and **Bioships** no longer borrow Trek eras at all as of
Phase 3 — every preset in both universes runs its own dedicated era
(`who`, `bioship`).
- **Space Stations** and **Industrial** are mixed: Tycho, Ceres (Space
Stations) and Rocinante (Industrial) run the Phase 3 `belter` era; the rest
Stations) and Rocinante (Industrial) run the Phase 3 `beltworker` era; the rest
of both universes still borrow Trek eras.
- **Retrofuture** leans on `tos` (3 of 8), which is at least era-plausible for
mid-century-styled ships, but `Discovery One` and `The Searcher` are on full
TNG LCARS. Untouched by Phase 3's telemetry-era work.
TNG LCARD. Untouched by Phase 3's telemetry-era work.
- **Comedy**, **Outlaw**, **Deep Space**, and **Military** are entirely
Trek-era telemetry, also untouched by Phase 3.
@@ -383,9 +383,9 @@ Two consequences worth keeping in mind when editing:
but not visible.
2. Any era value outside the eight above falls through the `switch` in
`playRandomTelemetrySound()` to the `tng` default. A typo does not fail
loudly — it just produces LCARS chirps.
loudly — it just produces LCARD chirps.
If a universe should stop borrowing Trek telemetry, the fix is a new era
vocabulary (new elements plus a new `case` in the era router) — exactly what
Phase 3 did for `who`, `bioship`, and `belter` — not a change to preset
Phase 3 did for `who`, `bioship`, and `beltworker` — not a change to preset
assignments alone; the router has nothing else to offer them otherwise.
+18 -18
View File
@@ -27,7 +27,7 @@ rect). Its observation display is entirely bespoke SVG art.
### Layer declarations
| Layer | starfleet | whoniverse | deepspace | spacestations | others |
| Layer | starflight | whataverse | deepspace | spacestations | others |
| --- | :-: | :-: | :-: | :-: | :-: |
| `celestial` | ● | ● | | | |
| `starfield` | ● | | ● | | |
@@ -58,16 +58,16 @@ constellations → shootingStars → traffic/events → reticles.
| Element | Where drawn | Description | Where used |
| --- | --- | --- | --- |
| **Time Vortex** | `renderCelestialObjects()` | 14 nested ellipses receding on a z-cycle, alternating cyan and gold strokes, counter-rotating by ring parity. Deliberately drawn on pure black with no starfield. | `whoniverse` |
| **Class-M Planet** | `renderCelestialObjects()` | Large body with a Rayleigh-scattering atmosphere halo, a radial terminator gradient, and a bright rim arc on the lit limb. | `starfleet` |
| **Orbiting Moon** | `renderCelestialObjects()` | Small grey disc on a squashed ellipse (×1.7 / ×0.6) around the Class-M planet, with an offset shadow disc. | `starfleet` |
| **Time Vortex** | `renderCelestialObjects()` | 14 nested ellipses receding on a z-cycle, alternating cyan and gold strokes, counter-rotating by ring parity. Deliberately drawn on pure black with no starfield. | `whataverse` |
| **Class-M Planet** | `renderCelestialObjects()` | Large body with a Rayleigh-scattering atmosphere halo, a radial terminator gradient, and a bright rim arc on the lit limb. | `starflight` |
| **Orbiting Moon** | `renderCelestialObjects()` | Small grey disc on a squashed ellipse (×1.7 / ×0.6) around the Class-M planet, with an offset shadow disc. | `starflight` |
| **Deep-Space Planet** | `regenerateDeepSpaceField()` / `renderDeepSpaceField()` | 24 per session from 6 distinct world palettes (gas giant, ice world, ion-storm giant, seismic rocky, biosignature rocky, frozen dormant). 50% chance of rings, 02 moons each, independent slow drift. | `deepspace` |
| **Nebula Cloud** | `renderDeepSpaceField()` | 35 soft morphing blobs, radius 220620 px, alpha 0.0350.09, each with its own drift, pulse and morph seed. | `deepspace` |
| **Dust Lane** | `renderDeepSpaceField()` | 47 thin angled streaks, 260620 px long, for texture distinct from the soft blobs. | `deepspace` |
| **Derelict Silhouette** | `renderDeepSpaceField()` | 70% chance of 12 segmented megastructure hulks with a blinking beacon and a `DERELICT // NO SIGNAL` callout. | `deepspace` |
| **Anomaly** | `renderDeepSpaceField()` | 12 per session, kind `lensing` or `radiation`, each gated behind its own random `minActivity` threshold of 0.150.55. | `deepspace` |
| **Computer Callout** | `drawComputerCallout()` | Shared annotation primitive: scanning bracket, periodic ping ring, leader line and label. Attached to every planet, derelict and anomaly. | `deepspace` |
| **Generic Nebulae** | `renderNebulae()` | 4 ambient morphing blobs with a per-universe palette (`getNebulaPalette()` covers whoniverse, industrial, bioships and a default). | *dormant — no universe declares it* |
| **Generic Nebulae** | `renderNebulae()` | 4 ambient morphing blobs with a per-universe palette (`getNebulaPalette()` covers whataverse, industrial, bioships and a default). | *dormant — no universe declares it* |
### Station panorama elements
@@ -94,14 +94,14 @@ everything clumping into one bearing.
| Element | Method | Description | Where used |
| --- | --- | --- | --- |
| **Parallax Starfield** | `renderStarfield()` | 3D projected star volume with per-universe profile (count, size range, color set, warp-streak flag). Starfleet gets a bespoke calm 150-star cool profile; everything else falls back to `DEFAULT_STARFIELD_PROFILE` (340 stars, 10 colors). | `starfleet`, `deepspace` |
| **Parallax Starfield** | `renderStarfield()` | 3D projected star volume with per-universe profile (count, size range, color set, warp-streak flag). Starflight gets a bespoke calm 150-star cool profile; everything else falls back to `DEFAULT_STARFIELD_PROFILE` (340 stars, 10 colors). | `starflight`, `deepspace` |
| **Warp Streaks** | `renderStarfield()` + `render()` | In `warp` flight mode stars elongate and the frame clears to a translucent fill instead of solid, producing a motion-blur trail. Station view never smears. | starfield universes |
| **Shooting Star** | `spawnShootingStar()` / `updateShootingStars()` / `renderShootingStars()` | Occasional fast streak with a fading tail. | `deepspace`, `spacestations` |
| **Constellation Lines** | `regenerateConstellation()` / `renderConstellations()` | Faint synthetic point set with connecting lines that fade in, hold, and fade out. Independent of the main starfield. | `deepspace` |
| **Traffic Vessel** | `spawnTraffic()` / `drawShipVessel()` | A ship crossing the frame on a linear path over 1226 s, with an engine particle trail. 12% chance each of a warp-flash entry and/or warp-jump exit. | `spacestations` (and any universe declaring `traffic`) |
| **Comet** | `spawnEvent('comet')` | 5 s drifting event with lateral velocity. | `deepspace`, `spacestations`, cinematics |
| **Warp Flash** | `spawnEvent('warp-flash')` | 1.4 s stationary flash, also used as the arrival marker for warp-entry traffic. | `deepspace`, `spacestations`, cinematics |
| **Target Reticle** | `renderTargetReticles()` | LCARS corner brackets around each traffic vessel with a leader line and text tag. | `spacestations` |
| **Target Reticle** | `renderTargetReticles()` | LCARD corner brackets around each traffic vessel with a leader line and text tag. | `spacestations` |
### Traffic vessel types
@@ -110,10 +110,10 @@ from the active universe:
| Type | Label pattern | Universe |
| --- | --- | --- |
| `shuttle` | `SHUTTLE // TYPE-9` | default / starfleet |
| `cruiser` | `USS GIBRALTAR // NCC-#####` | starfleet, military |
| `runabout` | `RUNABOUT YANGTZE // NCC-72452` | starfleet |
| `tardis` | `TYPE 40 TIME CAPSULE // DRIFT` | whoniverse |
| `shuttle` | `SHUTTLE // TYPE-9` | default / starflight |
| `cruiser` | `USS GIBRALTAR // NCC-#####` | starflight, military |
| `runabout` | `RUNABOUT YANGTZE // NCC-72452` | starflight |
| `tardix` | `TYPE 4D TIME CAPSULE // DRIFT` | whataverse |
| `freighter` | `HEAVY HAULER // CLASS IV` | industrial, outlaw |
| `fighterwing` | `VIPER WING // FLIGHT n` | military |
| `bioshippod` | `SPAWN POD // DRIFTING` | bioships |
@@ -140,8 +140,8 @@ Per-theme casts:
| Theme | Entities |
| --- | --- |
| `starfleet` | 2 flights (scout arrival, shuttle cruise), 2 orbits (sensor blip, diamond marker) |
| `whoniverse` | 3 orbiting glyphs (◎ ∆ ∞), 2 floating vortex fragments |
| `starflight` | 2 flights (scout arrival, shuttle cruise), 2 orbits (sensor blip, diamond marker) |
| `whataverse` | 3 orbiting glyphs (◎ ∆ ∞), 2 floating vortex fragments |
| `industrial` | 4 camera-feed-clipped groups: bay drone, 3 embers, airlock tell-tale, corridor lamp — each parented to a clip path matching one feed's picture area |
| `bioships` | 3 flowing particles, 1 orbiting node, 1 breathing membrane |
| `retrofuture` | 2 vector-outline ships, 1 orbiting scope blip, 1 Lissajous figure |
@@ -173,8 +173,8 @@ Each universe has its own six-effect vocabulary:
| Universe | Effect vocabulary |
| --- | --- |
| `starfleet` | contact, vector, data, ring, diagnostic, streak |
| `whoniverse` | echo, glyphs, coordinate, warp, rings |
| `starflight` | contact, vector, data, ring, diagnostic, streak |
| `whataverse` | echo, glyphs, coordinate, warp, rings |
| `industrial` | signal, dropout, vapour, motion, gain, warning |
| `bioships` | neural, spores, ripple, tendril, organ, metric |
| `retrofuture` | blip, scope, counter, vector, bloom, reel |
@@ -205,7 +205,7 @@ concurrent effect can spawn, staggered 120380 ms apart.
| Element | Where | Description | Where used |
| --- | --- | --- | --- |
| **Viewport Bezel** | `ObservationBezels.getViewportFrameSvg()` | Procedural SVG window frame, keyed by universe and — for starfleet — by the active preset's *era*, so TOS gets a hexagonal amber bridge bezel and TNG/Voyager get their own. | all except `spacestations`, which has its own native station window in the stage art |
| **Viewport Bezel** | `ObservationBezels.getViewportFrameSvg()` | Procedural SVG window frame, keyed by universe and — for starflight — by the active preset's *era*, so TOS gets a hexagonal amber bridge bezel and TNG/Wayfarer get their own. | all except `spacestations`, which has its own native station window in the stage art |
| **Support Pillars** | inside each bezel | Optional vertical struts across the viewport. **Default off.** | bezel universes |
| **Glass Sheen** | `.observation-glass-sheen` | Static specular sheen over the viewport. | all |
| **Scanlines** | `.observation-scanlines` + `updateScanlineBreathing()` | CRT scanline overlay whose opacity breathes with audio energy (base 0.14). | all |
@@ -225,9 +225,9 @@ initially, then 90180 s after each one completes.
| Sequence | Steps | Universes |
| --- | --- | --- |
| **First Contact** | comet → unknown vessel + emphasis flyby → hailing frequencies → warp flash | starfleet, deepspace, spacestations |
| **First Contact** | comet → unknown vessel + emphasis flyby → hailing frequencies → warp flash | starflight, deepspace, spacestations |
| **Hull Breach** | warp pulse + stress caption → red alert → damage control → stabilized + alert off | military, outlaw, industrial |
| **Temporal Anomaly** | flux detected → random warp flash → vortex stabilizing | whoniverse |
| **Temporal Anomaly** | flux detected → random warp flash → vortex stabilizing | whataverse |
| **Bio Resonance** | resonant pulse → comet → dissipating | bioships |
| **Close Flyby** | one emphasized flyby (×1.6 scale, ×0.55 duration) | **every** universe |