<!DOCTYPE html>
<html lang=”en”>
<head>
<meta charset=”UTF-8″>
<meta name=”viewport” content=”width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no”>
<title>YOYODYNE PROPULSHUN SISTEMS</title>
<style>
@import url(‘https://fonts.googleapis.com/css2?family=VT323&display=swap’);
:root {
/* Industrial Amber CRT theme for Yoyodyne */
–term-main: #ff9d00;
–term-dim: #8b5a00;
–term-bg: #140800;
–term-alert: #ffcc00;
–term-danger: #ff3300;
–term-alien: #cc33ff; /* 8th dimension purple */
–font-main: ‘VT323’, monospace;
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
user-select: none;
-webkit-tap-highlight-color: transparent;
}
body {
background-color: #000;
color: var(–term-main);
font-family: var(–font-main);
height: 100vh;
width: 100vw;
overflow: hidden;
display: flex;
flex-direction: column;
}
/* Scanline & CRT Effects */
.crt-overlay {
position: absolute;
top: 0; left: 0; right: 0; bottom: 0;
background: linear-gradient(rgba(18, 16, 16, 0) 50%, rgba(0, 0, 0, 0.3) 50%);
background-size: 100% 4px;
pointer-events: none;
z-index: 100;
opacity: 0.9;
}
.crt-vignette {
position: absolute;
top: 0; left: 0; right: 0; bottom: 0;
box-shadow: inset 0 0 60px rgba(0,0,0,0.95);
pointer-events: none;
z-index: 90;
}
/* Split Screen Layout */
.interface-container {
display: flex;
flex-direction: column;
height: 100%;
width: 100%;
padding: 4px;
gap: 4px;
}
@media (orientation: landscape) {
.interface-container {
flex-direction: row;
}
}
.monitor {
flex: 1;
position: relative;
background-color: var(–term-bg);
border: 3px solid var(–term-dim);
border-radius: 12px;
overflow: hidden;
display: flex;
flex-direction: column;
padding: 10px;
box-shadow: inset 0 0 15px rgba(255, 157, 0, 0.1), 0 0 10px rgba(255, 157, 0, 0.2);
}
.monitor-header {
font-size: 1.3rem;
border-bottom: 2px solid var(–term-dim);
padding-bottom: 5px;
margin-bottom: 10px;
display: flex;
justify-content: space-between;
text-transform: uppercase;
letter-spacing: 1px;
text-shadow: 0 0 6px var(–term-main);
flex-shrink: 0;
animation: text-jitter 4s infinite;
}
.screen-content {
flex: 1;
overflow-y: auto;
font-size: 1.3rem;
line-height: 1.2;
text-shadow: 0 0 5px rgba(255, 157, 0, 0.7);
display: flex;
flex-direction: column;
padding-right: 5px;
}
/* Custom Scrollbar */
.screen-content::-webkit-scrollbar {
width: 8px;
}
.screen-content::-webkit-scrollbar-track {
background: rgba(20, 8, 0, 0.8);
border-left: 1px solid var(–term-dim);
}
.screen-content::-webkit-scrollbar-thumb {
background: var(–term-dim);
}
.terminal-line {
margin-bottom: 6px;
word-wrap: break-word;
}
.cursor {
display: inline-block;
width: 12px;
height: 1.1em;
background-color: var(–term-main);
vertical-align: bottom;
animation: blink 1s step-end infinite;
}
@keyframes blink {
0%, 100% { opacity: 1; }
50% { opacity: 0; }
}
/* Controls Area */
#monitor-2 .screen-content {
justify-content: flex-start;
}
.status-panel {
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 2px dashed var(–term-dim);
flex-shrink: 0;
}
.controls-grid {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 10px;
padding-bottom: 10px;
}
@media (max-width: 400px) {
.controls-grid {
grid-template-columns: 1fr;
}
}
.btn {
background-color: rgba(255, 157, 0, 0.05);
color: var(–term-main);
border: 2px solid var(–term-main);
font-family: var(–font-main);
font-size: 1.2rem;
padding: 12px 6px;
text-transform: uppercase;
cursor: pointer;
text-shadow: 0 0 5px var(–term-main);
transition: all 0.1s;
text-align: center;
font-weight: bold;
}
.btn:active {
background-color: var(–term-main);
color: var(–term-bg);
box-shadow: 0 0 15px var(–term-main);
}
.btn:disabled {
opacity: 0.3;
cursor: not-allowed;
border-color: var(–term-dim);
color: var(–term-dim);
text-shadow: none;
background-color: transparent;
}
/* Special Button Colors */
.btn.alert {
color: var(–term-alert);
border-color: var(–term-alert);
text-shadow: 0 0 5px var(–term-alert);
}
.btn.alert:active { background-color: var(–term-alert); color: var(–term-bg); }
.btn.danger {
color: var(–term-danger);
border-color: var(–term-danger);
text-shadow: 0 0 5px var(–term-danger);
}
.btn.danger:active { background-color: var(–term-danger); color: var(–term-bg); }
.btn.alien {
color: var(–term-alien);
border-color: var(–term-alien);
text-shadow: 0 0 5px var(–term-alien);
}
.btn.alien:active { background-color: var(–term-alien); color: var(–term-bg); }
/* Text Colors */
.text-alert { color: var(–term-alert); text-shadow: 0 0 6px var(–term-alert); }
.text-danger { color: var(–term-danger); text-shadow: 0 0 6px var(–term-danger); }
.text-alien { color: var(–term-alien); text-shadow: 0 0 6px var(–term-alien); }
.text-muted { color: var(–term-dim); }
/* Flicker & Jitter Animations */
.flicker {
animation: crt-flicker 0.2s infinite;
}
@keyframes crt-flicker {
0% { opacity: 0.95; }
50% { opacity: 0.88; }
100% { opacity: 0.95; }
}
@keyframes text-jitter {
0% { transform: translateX(0); }
1% { transform: translateX(-1px); }
2% { transform: translateX(1px); }
3% { transform: translateX(0); }
100% { transform: translateX(0); }
}
.jitter {
animation: text-jitter 2s infinite random;
}
/* Highlight Auto Run */
.auto-active {
box-shadow: inset 0 0 15px var(–term-danger);
}
</style>
</head>
<body>
<div class=”interface-container flicker”>
<!– Monitor 1: Main Output –>
<div class=”monitor” id=”monitor-1″>
<div class=”crt-overlay”></div>
<div class=”crt-vignette”></div>
<div class=”monitor-header”>
<span>YOYODYNE PROPULSHUN</span>
<span>GROVER’S MILL, NJ</span>
</div>
<div class=”screen-content” id=”output-screen”>
<!– Terminal lines will be injected here –>
</div>
</div>
<!– Monitor 2: Interaction / Override –>
<div class=”monitor” id=”monitor-2″>
<div class=”crt-overlay”></div>
<div class=”crt-vignette”></div>
<div class=”monitor-header”>
<span>EIGHTH DEE-MENSION</span>
<span>DATA-COM</span>
</div>
<div class=”screen-content” id=”control-screen”>
<div class=”status-panel”>
<div id=”status-readout” class=”terminal-line”>
<span class=”text-muted”>WAITING FOR COM-MAND…</span>
</div>
</div>
<div class=”controls-grid” id=”controls-grid”>
<!– Added SYS-FLUSH and AUTO-RUN buttons –>
<button class=”btn alien” id=”auto-btn” onclick=”toggleAutoCycle()”>AUTO-RUN [OFF]</button>
<button class=”btn” onclick=”sysFlush()”>SYS-FLUSH</button>
<button class=”btn” onclick=”executeCommand(‘status’)”>VE-HICLE STATUS</button>
<button class=”btn” onclick=”executeCommand(‘manifest’)”>ROSTER OF JOHNS</button>
<button class=”btn” onclick=”executeCommand(‘sensors’)”>MONKEY BOY RADAR</button>
<button class=”btn alien” onclick=”executeCommand(‘comms’)”>PLANET 10 LINK</button>
<button class=”btn alert” onclick=”executeCommand(‘medical’)”>BIO-METRICS</button>
<button class=”btn alert” onclick=”executeCommand(‘inventory’)”>IN-VENTORY</button>
<button class=”btn alien” onclick=”executeCommand(‘overthruster’)”>OVER-THRUSTER</button>
<button class=”btn danger” onclick=”executeCommand(‘objective’)”>MISHUN GOALS</button>
<button class=”btn danger” onclick=”executeCommand(‘whorfin’)”>WHORFIN COM</button>
<button class=”btn danger” onclick=”executeCommand(‘destruct’)”>DE-STRUCT</button>
</div>
</div>
</div>
</div>
<script>
const outputScreen = document.getElementById(‘output-screen’);
const statusReadout = document.getElementById(‘status-readout’);
const buttons = document.querySelectorAll(‘.btn’);
const autoBtn = document.getElementById(‘auto-btn’);
let isTyping = false;
let isAutoCycling = false;
const bootSequence = [
“YOYODYNE PROPULSHUN SISTEMS”,
“COPY-RIGHT 1938”,
“————————–“,
“INITIATING MAIN-FRAME…”,
“CHECKING OVER-THRUSTER COILS… NEGATORY.”,
“LOCATING LORD WHORFIN… POSITIVE.”,
“HONEY BAKED HAMS SECURED.”,
“LAUGH A-WHILE YOU CAN, MONKEY BOYS…”,
“READY FOR IN-PUT.”
];
// Database of randomized Lectroid responses
const dataBanks = {
status: {
colors: [“”, “text-alert”, “text-danger”],
statusTexts: [“CHECKING TRUK SISTEMS…”, “KICKING THE TIRES…”, “READING GAUGES…”],
responses: [
[
“VE-HICLE STATUS: BOMBER / SPACE-CRAFT”,
“THERMIONIC GENERATOR: ON-LINE”,
“SHOCK TOWERS: ACTIVATED”,
“TRUK ARMOR: WELDED GOOD”,
“RADAR IN-VISIBLE: YES”,
“WARNING: LEFT TIRE NEEDS AIR.”
],
[
“WARNING: ELECTRICAL FIRE IN SECTOR 4.”,
“THERMIONIC GENERATOR IS OVER-HEATING.”,
“JOHN YAYA, GET THE EXTINGUISHER!”,
“I SAID GET THE EXTINGUISHER, NOT THE MUSTARD!”,
“FIRE SUPPRESSED. BARELY.”
],
[
“SCANNING IN-TERIOR…”,
“SMELL OF BURNING HAIR IN CABIN.”,
“AIR CON-DITIONING BROKEN.”,
“JOHN BIGBOOTÉ IS SWEATING PRO-FUSELY.”,
“DO NOT ROLL DOWN THE WINDOWS IN SPACE.”
]
]
},
manifest: {
colors: [“”, “text-alert”, “text-muted”],
statusTexts: [“LOADING JOHNS…”, “COUNTING HEADS…”, “WHERE IS EVERYONE…”],
responses: [
[
“JOHN WHORFIN – SUPREEM COMMANDER”,
“JOHN BIGBOOTÉ – HED OF DEE-VELOPMENT (IT IS PRO-NOUNCED BOO-TAY!)”,
“JOHN YAYA – VEHICLE MAIN-TENENCE”,
“JOHN SMALLBERRIES – SE-CURITY”,
“JOHN O’CONNOR – RAW MEAT RE-QUISITION”
],
[
“DISCIPLINARY RE-PORT:”,
“JOHN SMALLBERRIES CAUGHT EATING PASTRY.”,
“PUNISHMENT: 40,000 VOLTS TO THE CRANIUM.”,
“HE SAID IT TASTED LIKE CARDBOARD ANYWAY.”
],
[
“ROLL CALL IN PRO-GRESS…”,
“WHERE IS JOHN GANT?”,
“I SAID, WHERE IS JOHN GANT?”,
“HE OWES ME TEN DOLLARS.”,
“MARK JOHN GANT AS MISSING IN ACK-SHUN.”
]
]
},
sensors: {
colors: [“text-alert”, “text-alien”, “text-danger”],
statusTexts: [“SWEEPING FOR MONKEY BOYS…”, “LOOKING OUT THE WINDOW…”, “PINGING RADAR…”],
responses: [
[
“SCANNING NEW JERSEY SEC-TOR…”,
“DETECTING BANZAI INSTITUTE FREQUENCIES.”,
“WARNING: HONG KONG CAVALIERS APPROACHING.”,
“PERFECT TOMMY SCANNED. HAIR IS IMMACULATE.”,
“ACTIVATE DEFENSE SHIELDS! HIDE THE TRUK!”
],
[
“ANOMALY DE-TECTED IN FIELD.”,
“BIOLOGICAL FORM AP-PROACHING.”,
“ANALYSIS: IT IS ONLY A COW.”,
“DE-STROY IT ANYWAY. COWS CANNOT BE TRUSTED.”
],
[
“INTER-CEPTING EARTH BROAD-CAST.”,
“PRESIDENT WIDMARK ON TEE-VEE.”,
“DECLARATION OF WAR IMMINENT.”,
“HE LOOKS STUPID. HIS TIE IS CROOKED.”,
“IGNORE TEE-VEE. FOCUS ON MISHUN.”
]
]
},
comms: {
colors: [“text-alien”, “text-alert”, “text-danger”],
statusTexts: [“ATTEMPTING TRANS-DIMENSIONAL TETHER…”, “DIALING PLANET 10…”, “TURNING THE CRANK…”],
responses: [
[
“CALLING PLANET 10…”,
“EIGHTH DEE-MENSION INTERFERENCE DETECTED.”,
“SIGNAL BLOCKED BY BLACK LECTROID CRUIZER.”,
“CURSE YOU, JOHN PARKER!”,
“WE WILL RE-TURN TO OUR HOME WORLD SOON.”
],
[
“ESTABLISHING COM-LINK…”,
“JOHN EMILIO IS ON THE LINE.”,
“HE SAYS HELLO.”,
“HE SAYS IT IS RAINING ON PLANET 10.”,
“END TRANS-MISSION.”
],
[
“INITIATING MODEM HAND-SHAKE…”,
“BZZZZZZZZZT.”,
“KRRRRRRCHHHHHH.”,
“EEEEE-AWWWWW EEEEE-AWWWWW.”,
“CON-NECTION FAILED. TOO MUCH STATIC.”
]
]
},
medical: {
colors: [“text-alert”, “text-danger”, “text-alien”],
statusTexts: [“SCANNING BIO-LOGY…”, “CHECKING PULSE…”, “MEASURING VOLTAGE…”],
responses: [
[
“SPECIES: LECTROID (RED)”,
“DISGUISE: HUMAN (FLAWED, UGLY)”,
“CURRENT FORM: DE-GRADING.”,
“REQUIRE MORE ELECTRICAL STIMULASHUN.”,
“PRESCRIPTION: HIGH VOLTAGE SHOCKS.”
],
[
“WARNING: NUTRITIONAL DE-FICIT.”,
“CRAVING FOR HONEY BAKED HAM EXCEEDING SAFE LIMITS.”,
“SALIVATION LEVELS CRITICAL.”,
“PROCEED IMMEDIATELY TO GROCERY STORE.”
],
[
“BIO-METRIC A-LARM!”,
“INTERNAL VOLTAGE DANGEROUSLY LOW.”,
“LICK A BATTERY IMMEDIATELY.”,
“DO NOT EAT THE TWINKIES. THEY ARE POISON.”
]
]
},
inventory: {
colors: [“”, “text-alert”, “text-cyan”],
statusTexts: [“COUNTING BOXES…”, “OPENING THE FRIDGE…”, “CHECKING SUPPLY CLOSET…”],
responses: [
[
“IN-VENTORY RE-PORT:”,
“BUBBLE WRAP: 400 ROLLS.”,
“RAW MEAT: 5 POUNDS.”,
“THERMIONIC VALVES: 12.”,
“EARTH CURRENCY: $42.50.”
],
[
“CRITICAL SHORTAGE A-LERT!”,
“HONEY BAKED HAMS: 0.”,
“THIS IS AN OUT-RAGE.”,
“JOHN YAYA, GO PROCURE MORE HAMS.”,
“USE FORCE IF NECESSARY.”
],
[
“IN-VENTORY RE-PORT:”,
“SHOCK THERAPY CABLES: 4 SETS.”,
“SPARE TIRES: 0.”,
“DICTABIRD FOOD: 1 BAG.”,
“WE HAVE EV-ERYTHING WE NEED TO CONQUER.”
]
]
},
overthruster: {
colors: [“text-danger”, “text-alien”, “text-alert”],
statusTexts: [“LOCATING OVER-THRUSTER…”, “SCANNING 8TH DIMENSION…”, “DOING MATH…”],
responses: [
[
“OS-CILLATION OVER-THRUSTER”,
“DIMENSIONAL PENETRATION RATE: 0%”,
“ERROR: DEVICE NOT FOUND IN GROVER’S MILL.”,
“LAST KNOWN LO-CATION: BUCKAROO BANZAI’S JET CAR.”,
“WE MUST BUST THROUGH THE MOUNTAIN!”
],
[
“CALCULATING DIMENSIONAL E-QUATION…”,
“X + Y = 8TH DEE-MENSION.”,
“CARRY THE 1…”,
“ERROR: NOT ENOUGH FINGERS TO COM-PUTE.”,
“GET THE OVER-THRUSTER BEFORE I BUST YOUR HEAD!”
],
[
“SECURITY A-LERT!”,
“THE DICTABIRD HAS BEEN STOLEN!”,
“IT HAS THE OVER-THRUSTER FORMULA!”,
“THIS IS UN-ACCEPTABLE!”,
“FIND THE BIRD, FIND THE MONKEY BOYS!”
]
]
},
objective: {
colors: [“text-danger”, “text-alert”, “text-alien”],
statusTexts: [“ACCESSING MAIN DI-RECTIVE…”, “READING THE MANUAL…”, “WHAT ARE WE DOING…”],
responses: [
[
“MISHUN PRO-FILE:”,
“WHERE ARE WE GOING? PLANET 10!”,
“WHEN ARE WE GOING? REAL SOON!”,
“OBJECTIVE: DE-STROY THE BLACK LECTROIDS.”,
“TAKE BACK OUR HOME WORLD!”
],
[
“RE-MINDER TO ALL JOHNS:”,
“WE ARE SUPERIOR OVER THE MONKEY BOYS.”,
“THEY ARE WEAK AND HAVE NO CARAPACE.”,
“CRUSH THEM BENEATH OUR BOOTS.”,
“AND STEAL THEIR OVER-THRUSTER.”
],
[
“DEE-MENSIONAL TRAVEL PROTOCOL:”,
“1. ACTIVATE OVER-THRUSTER.”,
“2. ACCELERATE TO MACH 1.2.”,
“3. DRIVE INTO SOLID MATTER.”,
“4. HOPE WE DO NOT EXPLODE.”
]
]
},
whorfin: {
colors: [“text-danger”, “text-alert”, “text-danger”],
statusTexts: [“OPENING PA SYSTEM…”, “LORD WHORFIN IS SPEAKING…”, “ALL HAIL…”],
responses: [
[
“HISTORY IS-A MADE AT NIGHT!”,
“CHARACTER IS WHAT YOU ARE IN THE DARK!”,
“SEALED WITH A CURSE AS SHARP AS A KNIFE!”,
“VIVA LORD WHORFIN!”
],
[
“SHUT UP!”,
“BIGBOOTÉ, YOU ARE THE WEAKEST INDIVIDUAL I EVER KNOW!”,
“WHY IS THE TRUK NOT FIXED?”,
“I WILL ELECTRO-CUTE YOU MYSELF!”
],
[
“LAUGH A-WHILE YOU CAN, MONKEY BOYS.”,
“PLANET 10 WILL BE OURS A-GAIN.”,
“NO MORE NEW JERSEY.”,
“NO MORE GROVER’S MILL.”,
“ONLY GLORY!”
]
]
},
destruct: {
colors: [“text-danger”, “text-alert”, “text-danger”],
statusTexts: [“<span class=’text-danger’>DE-STRUCT INITIATED</span>”, “WARMING UP EXPLOSIVES…”, “GOODBYE CRUEL WORLD…”],
responses: [
[
“INITIATING THERMAL OVER-LOAD…”,
“T-MINUS 10 SECONDS TO EX-PLOSION.”,
“WAIT. WE NEED THIS TRUK.”,
“CANCEL CANCEL CANCEL.”,
“THERMAL OVER-LOAD A-BORTED.”,
“BACK TO WORK, JOHNS!”
],
[
“DE-STRUCT SE-QUENCE FAILED.”,
“BUTTON IS STICKY.”,
“JOHN BIGBOOTÉ SPILLED COFFEE ON THE CON-SOLE.”,
“I TOLD HIM TO USE A LID.”,
“WE SURVIVE ANOTHER DAY.”
],
[
“COUNT-DOWN PRO-CEEDING…”,
“3…”,
“2…”,
“1…”,
“JUST KIDDING.”,
“WE ARE TOO SMART TO DIE TODAY.”
]
]
}
};
const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
function toggleButtons(state) {
buttons.forEach(btn => {
// Ensure the Auto-Run and Flush buttons are never disabled so the user can break out
if (btn.id !== ‘auto-btn’) {
btn.disabled = !state;
}
});
}
function createLine(colorClass = “”) {
const line = document.createElement(‘div’);
// Randomly add jitter class to some lines for that Lectroid broken-tech feel
if(Math.random() > 0.6) colorClass += ” jitter”;
line.className = `terminal-line ${colorClass}`;
outputScreen.appendChild(line);
outputScreen.scrollTop = outputScreen.scrollHeight;
return line;
}
async function typeString(text, element, speed = 25) {
let currentHTML = element.innerHTML.replace(‘<span class=”cursor”></span>’, ”);
for (let i = 0; i < text.length; i++) {
currentHTML += text.charAt(i);
element.innerHTML = currentHTML + ‘<span class=”cursor”></span>’;
outputScreen.scrollTop = outputScreen.scrollHeight;
await sleep(speed + (Math.random() * 20));
}
element.innerHTML = currentHTML;
}
async function runSequence(sequence, speed = 25, delayBetween = 180, colorClass = “”) {
for (let str of sequence) {
const line = createLine(colorClass);
line.innerHTML = ‘<span class=”cursor”></span>’;
await typeString(“> ” + str, line, speed);
await sleep(delayBetween);
}
const finalLine = createLine();
finalLine.innerHTML = ‘> <span class=”cursor”></span>’;
outputScreen.scrollTop = outputScreen.scrollHeight;
}
function clearTerminal() {
outputScreen.innerHTML = ”;
}
function sysFlush() {
if(isTyping && !isAutoCycling) return; // allow flushing if auto-cycling is doing its thing
clearTerminal();
statusReadout.innerHTML = “<span class=’text-muted’>SCREEN FLUSHED.</span>”;
}
// Auto Cycle Logic
async function toggleAutoCycle() {
isAutoCycling = !isAutoCycling;
if (isAutoCycling) {
autoBtn.innerHTML = “AUTO-RUN [ON]”;
autoBtn.classList.remove(“alien”);
autoBtn.classList.add(“danger”, “flicker”, “auto-active”);
// If the system isn’t currently typing a manual command, start the loop
if (!isTyping) {
runAutoCycleLoop();
}
} else {
autoBtn.innerHTML = “AUTO-RUN [OFF]”;
autoBtn.classList.add(“alien”);
autoBtn.classList.remove(“danger”, “flicker”, “auto-active”);
}
}
async function runAutoCycleLoop() {
const keys = Object.keys(dataBanks);
while (isAutoCycling) {
// Wait politely if the user initiated a manual command
while (isTyping && isAutoCycling) {
await sleep(200);
}
if (!isAutoCycling) break;
// Pick a random command
const randomKey = keys[Math.floor(Math.random() * keys.length)];
await executeCommand(randomKey);
// Wait 3 to 6 seconds before running the next command
// (Done in small chunks so we can break out immediately if turned off)
let waitTime = 3000 + Math.random() * 3000;
let elapsed = 0;
while (elapsed < waitTime && isAutoCycling) {
await sleep(100);
elapsed += 100;
}
}
}
// Main command router
async function executeCommand(commandKey) {
if (isTyping) return;
isTyping = true;
toggleButtons(false);
const dataBank = dataBanks[commandKey];
// Pick a random response for this command
const randomIndex = Math.floor(Math.random() * dataBank.responses.length);
const lines = dataBank.responses[randomIndex];
const color = dataBank.colors[randomIndex];
const statusText = dataBank.statusTexts[randomIndex];
statusReadout.innerHTML = statusText;
clearTerminal();
// Unpredictable terminal speeds
let speed = color.includes(‘danger’) ? 35 : 20 + Math.random() * 15;
let delay = color.includes(‘danger’) ? 300 : 150 + Math.random() * 100;
await runSequence(lines, speed, delay, color);
// Generate a random end status
const endStatuses = [
“<span class=’text-muted’>A-WAITING IN-PUT</span>”,
“<span class=’text-alien’>PRO-CESS COM-PLETE</span>”,
“<span class=’text-alert’>STAND-BY…</span>”
];
statusReadout.innerHTML = endStatuses[Math.floor(Math.random() * endStatuses.length)];
isTyping = false;
toggleButtons(true);
}
// Boot
window.onload = async () => {
isTyping = true;
toggleButtons(false);
await sleep(600);
await runSequence(bootSequence, 25, 120);
statusReadout.innerHTML = “<span class=’text-muted’>A-WAITING COM-MAND…</span>”;
isTyping = false;
toggleButtons(true);
};
</script>
</body>
</html>
