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
+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