Skip to content

Commit f772b14

Browse files
Enhance title and add lore overlay details
Updated the title and added lore overlay with detailed narrative.
1 parent 6c7c156 commit f772b14

1 file changed

Lines changed: 245 additions & 21 deletions

File tree

games/STARFALL_Ωjar.html

Lines changed: 245 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<html>
33
<head>
44
<meta charset="UTF-8">
5-
<title>STARFALL_Ω</title>
5+
<title>STARFALL_Ω // WORLD THAT NEVER WAS</title>
66
<style>
77
* {
88
box-sizing: border-box;
@@ -77,6 +77,9 @@
7777
margin-bottom: 6px;
7878
font-size: 14px;
7979
}
80+
#puzzle-text {
81+
font-size: 12px;
82+
}
8083
#hint-text {
8184
font-size: 12px;
8285
color: #ff9fb8;
@@ -97,6 +100,12 @@
97100
box-shadow: 0 0 10px #ff003c;
98101
transition: width 0.4s ease;
99102
}
103+
#status-text {
104+
font-size: 11px;
105+
margin-top: 4px;
106+
color: #ff9fb8;
107+
min-height: 14px;
108+
}
100109
#center-panel {
101110
position: relative;
102111
overflow: hidden;
@@ -168,15 +177,64 @@
168177
outline: none;
169178
box-shadow: 0 0 8px rgba(255, 0, 64, 0.7);
170179
}
171-
#status-text {
180+
#lore-overlay {
181+
position: fixed;
182+
inset: 0;
183+
background: radial-gradient(circle at center, #000000 0%, #050008 40%, #000000 100%);
184+
color: #f5f5f5;
185+
display: none;
186+
align-items: center;
187+
justify-content: center;
188+
text-align: center;
189+
padding: 40px;
190+
z-index: 999;
191+
}
192+
#lore-content {
193+
max-width: 700px;
194+
font-size: 13px;
195+
line-height: 1.5;
196+
text-shadow: 0 0 8px #ff003c;
197+
}
198+
#lore-title {
199+
font-size: 18px;
200+
margin-bottom: 10px;
201+
color: #ff4b7a;
202+
letter-spacing: 0.18em;
203+
}
204+
#lore-sub {
205+
font-size: 11px;
206+
margin-bottom: 16px;
207+
color: #ff9fb8;
208+
}
209+
#lore-footer {
210+
margin-top: 18px;
172211
font-size: 11px;
173-
margin-top: 4px;
174212
color: #ff9fb8;
175-
min-height: 14px;
176213
}
177214
</style>
178215
</head>
179216
<body>
217+
<!--
218+
STARFALL_Ω INTERNAL NOTES (players might dig here):
219+
220+
RealityIndex=0
221+
WorldStatus="UNALLOCATED"
222+
Observer="UNAUTHORIZED"
223+
224+
// Fake config:
225+
// world_seed = 0x00000000
226+
// world_hash = "0000000000000000000000000000000000000000000000000000000000000000"
227+
228+
// Real target hash? No.
229+
// SHA256_TARGET = "3f7c9b1e2a0f4b8d9c1e5a7b3d2f9c4e1a7b9d3c5e2f8a1d4c7b2e9f0a3d6"
230+
231+
// Base64 blob (fake):
232+
// U1RBUkZBTExfT1hJREVEX1dPUkxEID0gIk5FVkVSIElOSVRJQUxJWkVEIgo=
233+
// (decodes to: STARFALL_OXIDED_WORLD = "NEVER INITIALIZED")
234+
235+
// They can decode all this and still get nothing concrete.
236+
-->
237+
180238
<div id="overlay-noise"></div>
181239
<div id="app">
182240
<header id="top-bar">
@@ -240,6 +298,38 @@ <h2>Ω TERMINAL</h2>
240298
</main>
241299
</div>
242300

301+
<!-- LORE ENDING OVERLAY -->
302+
<div id="lore-overlay">
303+
<div id="lore-content">
304+
<div id="lore-title">Ω // RECONSTRUCTION COMPLETE</div>
305+
<div id="lore-sub">YOU HAVE FOUND THE WORLD THAT NEVER WAS</div>
306+
<div id="lore-body">
307+
You have aligned the constellation that was never meant to be aligned.<br><br>
308+
The signal stabilizes.<br>
309+
The noise falls silent.<br><br>
310+
A world flickers into view — a world that should not exist.<br><br>
311+
STARFALL PROTOCOL: INITIATED.<br><br>
312+
You were never searching for a world.<br>
313+
You were searching for the absence of one.<br><br>
314+
The coordinates you reconstructed do not point to a location.<br>
315+
They point to a void — a gap in the cosmic lattice where a universe was erased before it formed.<br><br>
316+
And by solving the puzzle, you have forced the system to acknowledge it.<br><br>
317+
The moment you observe the missing world...<br><br>
318+
<b>it collapses again.</b><br><br>
319+
You have destroyed a world that never existed.<br><br>
320+
The system begins to fold in on itself.<br><br>
321+
"THE OBSERVER HAS COMPLETED THE LOOP."<br>
322+
"THE PARADOX IS RESTORED."<br>
323+
"THE WORLD IS UNMADE."<br><br>
324+
Everything fades to black except a single line:<br><br>
325+
<b>YOU WERE NEVER MEANT TO FIND THIS.</b>
326+
</div>
327+
<div id="lore-footer">
328+
REFRESH TO RETURN TO A WORLD THAT DOES NOT EXIST.
329+
</div>
330+
</div>
331+
</div>
332+
243333
<script>
244334
// ===== STARFIELD BACKGROUND =====
245335
const canvas = document.getElementById("starfield");
@@ -285,9 +375,21 @@ <h2>Ω TERMINAL</h2>
285375
const terminalOutput = document.getElementById("terminal-output");
286376
const terminalInput = document.getElementById("terminal-input");
287377
const signalLevel = document.getElementById("signal-level");
378+
const loreOverlay = document.getElementById("lore-overlay");
288379

289-
// Fake "correct" pattern (but we never actually accept it)
380+
// Fake "correct" pattern (red herring)
290381
const fakeSolution = [1, 3, 4, 7, 10, 12, 15]; // 7 stars
382+
383+
// REAL hidden solution (world that never was)
384+
// Binary: 1001011000011100
385+
// Indices: [0, 3, 5, 6, 12, 13, 14]
386+
const realSolution = [0, 3, 5, 6, 12, 13, 14];
387+
388+
// INVERTED solution (destroying the world that never existed)
389+
// Binary invert: 0110100111100011
390+
// Indices: all except realSolution
391+
const invertedSolution = [1, 2, 4, 7, 8, 9, 10, 11, 15];
392+
291393
// Symbols to make it feel meaningful
292394
const symbols = ["α","β","γ","δ","ε","ζ","η","θ","ι","κ","λ","μ","ν","ξ","ο","π"];
293395
starCells.forEach((cell, i) => {
@@ -296,6 +398,8 @@ <h2>Ω TERMINAL</h2>
296398

297399
let clickCount = 0;
298400
let progress = 0;
401+
let worldDestroyed = false;
402+
let worldSolved = false;
299403

300404
function log(msg) {
301405
const time = new Date().toLocaleTimeString();
@@ -304,6 +408,7 @@ <h2>Ω TERMINAL</h2>
304408
}
305409

306410
function updateProgress() {
411+
if (worldSolved || worldDestroyed) return;
307412
// Progress climbs but never reaches 100
308413
if (progress < 99.8) {
309414
progress += Math.random() * 4;
@@ -318,7 +423,40 @@ <h2>Ω TERMINAL</h2>
318423
progressInner.style.width = progress + "%";
319424
}
320425

426+
function arraysMatch(a, b) {
427+
return a.length === b.length && a.every((v, i) => v === b[i]);
428+
}
429+
430+
function showLoreEnding() {
431+
worldSolved = true;
432+
loreOverlay.style.display = "flex";
433+
}
434+
435+
function hardCollapse() {
436+
worldDestroyed = true;
437+
document.body.style.background = "black";
438+
document.getElementById("app").style.display = "none";
439+
loreOverlay.style.display = "flex";
440+
document.getElementById("lore-title").textContent = "Ω // PARADOX BREACH";
441+
document.getElementById("lore-sub").textContent = "YOU HAVE DESTROYED THE WORLD THAT NEVER EXISTED";
442+
document.getElementById("lore-body").innerHTML =
443+
"You did not just find the world that never was.<br><br>" +
444+
"You inverted it.<br><br>" +
445+
"You forced the system to simulate the destruction of a world that never existed.<br><br>" +
446+
"There is nothing to collapse.<br>" +
447+
"And yet, everything collapses.<br><br>" +
448+
"The lattice tears. The coordinates unbind. The signal devours itself.<br><br>" +
449+
"No logs. No traces. No recovery.<br><br>" +
450+
"<b>THE SYSTEM CANNOT RECOVER.</b><br><br>" +
451+
"There is no world. There was never a world.<br>" +
452+
"Only your decision to end what was never real.";
453+
document.getElementById("lore-footer").textContent =
454+
"THERE IS NOTHING LEFT TO RELOAD.";
455+
}
456+
321457
function checkPattern() {
458+
if (worldSolved || worldDestroyed) return;
459+
322460
const active = starCells
323461
.map((c, i) => c.classList.contains("active") ? i : null)
324462
.filter(i => i !== null);
@@ -335,37 +473,62 @@ <h2>Ω TERMINAL</h2>
335473
log("PATTERN ATTEMPT " + clickCount + " — SIGNAL REMAINS INCOHERENT.");
336474
}
337475

338-
// If they somehow match the fakeSolution exactly, still deny them
339-
const matches =
340-
active.length === fakeSolution.length &&
341-
active.every((v, i) => v === fakeSolution[i]);
476+
// Sort for comparison
477+
const sortedActive = [...active].sort((a, b) => a - b);
478+
479+
// Check INVERTED solution first (world destruction)
480+
if (arraysMatch(sortedActive, invertedSolution)) {
481+
statusText.textContent = "Ω BREACH: WORLDLINE ERASED.";
482+
signalLevel.textContent = "NULL";
483+
signalLevel.style.color = "#ffffff";
484+
log("INVERTED PATTERN ACCEPTED. WORLD THAT NEVER EXISTED: DESTROYED.");
485+
terminalOutput.textContent += "\n> Ω//PARADOX BREACH\n> YOU HAVE DESTROYED THE WORLD THAT NEVER EXISTED.";
486+
setTimeout(hardCollapse, 1200);
487+
return;
488+
}
489+
490+
// Check REAL hidden solution (world that never was)
491+
if (arraysMatch(sortedActive, realSolution)) {
492+
statusText.textContent = "RECONSTRUCTION COMPLETE.";
493+
signalLevel.textContent = "STABLE";
494+
signalLevel.style.color = "#00ff9c";
495+
log("HIDDEN SOLUTION ACCEPTED. PARADOX RESOLVED.");
496+
terminalOutput.textContent += "\n> Ω COMPLETE. YOU HAVE ESCAPED THE LOOP.";
497+
setTimeout(showLoreEnding, 1200);
498+
return;
499+
}
342500

343-
if (matches) {
501+
// Check fakeSolution (paradox rejection)
502+
const fakeMatch = arraysMatch(sortedActive, fakeSolution);
503+
if (fakeMatch) {
344504
statusText.textContent = "ERROR: RECONSTRUCTION PARADOX. CORRECT AND INCORRECT SIMULTANEOUSLY.";
345505
signalLevel.textContent = "PARADOX";
346506
signalLevel.style.color = "#ffea00";
347507
log("PARADOX DETECTED. SOLUTION REJECTED TO PRESERVE CONSISTENCY.");
508+
return;
509+
}
510+
511+
const diff = Math.abs(active.length - fakeSolution.length);
512+
if (diff === 0) {
513+
statusText.textContent = "CLOSE. BUT NOT CONSISTENT WITH ALL CONSTRAINTS.";
514+
} else if (diff <= 2) {
515+
statusText.textContent = "YOU ARE NEAR A LOCALLY STABLE CONFIGURATION.";
348516
} else {
349-
const diff = Math.abs(active.length - fakeSolution.length);
350-
if (diff === 0) {
351-
statusText.textContent = "CLOSE. BUT NOT CONSISTENT WITH ALL CONSTRAINTS.";
352-
} else if (diff <= 2) {
353-
statusText.textContent = "YOU ARE NEAR A LOCALLY STABLE CONFIGURATION.";
354-
} else {
355-
statusText.textContent = "PATTERN TOO CHAOTIC. TRY AGAIN.";
356-
}
517+
statusText.textContent = "PATTERN TOO CHAOTIC. TRY AGAIN.";
357518
}
358519
}
359520

360521
starCells.forEach(cell => {
361522
cell.addEventListener("click", () => {
523+
if (worldSolved || worldDestroyed) return;
362524
cell.classList.toggle("active");
363525
checkPattern();
364526
});
365527
});
366528

367529
// ===== TERMINAL RABBIT HOLE =====
368530
const secretHash = "SHA256: 3f7c9b1e2a0f4b8d9c1e5a7b3d2f9c4e1a7b9d3c5e2f8a1d4c7b2e9f0a3d6"; // nonsense
531+
369532
const commands = {
370533
"help": () => {
371534
return [
@@ -374,12 +537,17 @@ <h2>Ω TERMINAL</h2>
374537
"> status - signal diagnostics",
375538
"> hash - show reconstruction hash",
376539
"> hint - cryptic guidance",
540+
"> omega - realignment key",
541+
"> collapse - attempt world collapse",
542+
"> trace - trace worldline",
543+
"> spectre - spectrogram note",
544+
"> config - world config",
377545
"> solve - attempt final reconstruction"
378546
].join("\n");
379547
},
380548
"status": () => {
381549
return [
382-
"> SIGNAL STATUS: UNSTABLE",
550+
"> SIGNAL STATUS: " + (worldSolved ? "STABLE" : worldDestroyed ? "NULL" : "UNSTABLE"),
383551
"> ENTROPY: MAXIMAL",
384552
"> PROGRESS: " + progress.toFixed(1) + "% (NON-MONOTONIC)",
385553
"> NOTE: APPROACHING COMPLETION INCREASES INSTABILITY."
@@ -398,16 +566,71 @@ <h2>Ω TERMINAL</h2>
398566
"PRIME • EVEN • SUM = 23 — AT LEAST ONE MUST BE FALSE.",
399567
"THE 'CORRECT' PATTERN IS REJECTED TO PRESERVE CONSISTENCY.",
400568
"YOU ARE EXPECTED TO FAIL. YET YOU CONTINUE.",
401-
"THE ONLY WINNING MOVE IS TO STOP. YOU WON'T."
569+
"THE REAL KEY IS NOT THE FIRST ONE YOU FIND.",
570+
"INVERSION IS NOT JUST A METAPHOR."
402571
];
403572
return "> " + hints[Math.floor(Math.random() * hints.length)];
404573
},
574+
"omega": () => {
575+
// Realignment key: binary for realSolution
576+
return [
577+
"> REALIGNMENT KEY:",
578+
"> 1001011000011100",
579+
"> (16-BIT CONSTELLATION MASK)"
580+
].join("\n");
581+
},
582+
"collapse": () => {
583+
return [
584+
"> INITIATING WORLD COLLAPSE...",
585+
"> ERROR: WORLD NOT FOUND.",
586+
"> ERROR: WORLD NEVER FOUND.",
587+
"> ERROR: WORLD NEVER EXISTED.",
588+
"> COLLAPSE COMPLETE."
589+
].join("\n");
590+
},
591+
"trace": () => {
592+
return [
593+
"> TRACING WORLDLINE...",
594+
"> RESULT: NULL",
595+
"> WORLDLINE ERASED AT T=-1",
596+
"> THERE WAS NEVER A FIRST MOMENT."
597+
].join("\n");
598+
},
599+
"spectre": () => {
600+
return [
601+
"> SPECTROGRAM NOTE:",
602+
"> \"THE WORLD YOU SEEK IS A SHADOW OF A SHADOW.\"",
603+
"> NO AUDIO FILE PRESENT. THE CLUE EXISTS WITHOUT A SOURCE."
604+
].join("\n");
605+
},
606+
"config": () => {
607+
return [
608+
"> WORLD CONFIG:",
609+
"> RealityIndex = 0",
610+
"> WorldStatus = UNALLOCATED",
611+
"> Observer = UNAUTHORIZED",
612+
"> NOTE: YOU ARE OPERATING OUTSIDE THE ORIGINAL DESIGN."
613+
].join("\n");
614+
},
405615
"solve": () => {
616+
if (worldSolved) {
617+
return [
618+
"> GLOBAL RECONSTRUCTION ALREADY COMPLETE.",
619+
"> YOU HAVE FOUND THE WORLD THAT NEVER WAS."
620+
].join("\n");
621+
}
622+
if (worldDestroyed) {
623+
return [
624+
"> RECONSTRUCTION IMPOSSIBLE.",
625+
"> YOU DESTROYED A WORLD THAT NEVER EXISTED.",
626+
"> THERE IS NOTHING LEFT TO SOLVE."
627+
].join("\n");
628+
}
406629
return [
407630
"> ATTEMPTING GLOBAL RECONSTRUCTION...",
408631
"> ERROR: PARADOX DETECTED.",
409632
"> NO CONSISTENT SOLUTION EXISTS IN THIS REALM.",
410-
"> YOU HAVE REACHED THE LIMIT OF THIS SYSTEM."
633+
"> (NOT UNTIL YOU FIND THE HIDDEN PATTERN.)"
411634
].join("\n");
412635
}
413636
};
@@ -436,6 +659,7 @@ <h2>Ω TERMINAL</h2>
436659
setTimeout(() => {
437660
log("BOOTSTRAP COMPLETE. CONSTELLATION LOCK ONLINE.");
438661
log("NOTE: RECONSTRUCTION PROCESS MAY NEVER CONVERGE.");
662+
terminalOutput.textContent += "\n> TYPE 'help' FOR AVAILABLE COMMANDS.";
439663
}, 600);
440664
</script>
441665
</body>

0 commit comments

Comments
 (0)