Hello, stranger.
You’ve been asleep for quite some time. So glad you’re finally awake! There’s a lot I need to fill you in on.
Would you like to hear what’s been happening while you were asleep?
[[YES]]
[[WHO ARE YOU?]]
[[MAIN MENU]]
<<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "primo" stop>>
<<audio "reboot" stop>>
<<audio "review" stop>>
<<audio "start" play loop>>We were on course, 7 days from Earth, when our navigation system experienced a glitch.
Since then, it has been unclear where we are going.
[[HOW LONG AGO DID THIS HAPPEN?]]
[[WHAT KIND OF GLITCH?]]
[[MAIN MENU]] I’m ALICE, silly goose! I’m your personal assistant, co-pilot, computer, and friend – all wrapped up in one.
[[TELL ME WHAT’S GOING ON ->YES]]
[[MAIN MENU]] The glitch occurred 30,247 minutes ago.
[[WHAT KIND OF GLITCH?]]
[[WE'VE BEEN OFF COURSE FOR 21 DAYS?]]
[[WHERE ARE WE GOING?]]
[[MAIN MENU]]
Unknown.
[[HOW LONG AGO DID THIS HAPPEN?]]
[[WHAT CAUSED THE GLITCH?]]
[[WHERE ARE WE GOING?]]
[[MAIN MENU]] Unclear.
[[HOW LONG AGO DID THIS HAPPEN?]]
[[WHERE ARE WE GOING?]]
[[MAIN MENU]] Uncertain.
[[WHAT CAUSED THE GLITCH?]]
[[HOW LONG AGO DID THIS HAPPEN?]]
[[WHAT’S MY NAME?]]
[[MAIN MENU]] That is correct, sleepyhead :)
[[WHERE ARE WE GOING?]]
[[WHAT CAUSED THE GLITCH?]]
[[MAIN MENU]] You don’t know your own name?
[[NO, TELL ME]]
[[OF COURSE I KNOW MY NAME->NO, JUST TELL ME MY NAME]]
Perhaps I should run a medical diagnostic...
[[YES, PLEASE]]
[[NO, JUST TELL ME WHO I AM->NO, JUST TELL ME MY NAME]]Running...
Running...
Running...
0.36 errors found in your biophysical structure.
Resulting diagnostic: mental abnormalities from resulting extreme biostatus.
Recommendation: shut down Max until further diagnosis or observation can be made.
Guess this is good-bye, Max.
See you later ;_)
[[START]]
Hm. I sense there may be something wrong with your biophysicality.
Just to be safe, I’ll present you with three options. Please, select your name:
[[MAX]]
[[MAL]]
[[SAL]]
Whew! That’s a relief. For a moment, I thought I was going to have to shut you down again.
[[MAIN MENU]]
That is incorrect.
I better run a diagnostic.
Running...
Running...
Running...
0.36 errors found in your biophysical structure.
Resulting diagnostic: mental abnormalities from resulting extreme biostatus.
Recommendation: shut down Max until further diagnosis or observation can be made.
Guess this is good-bye, Max.
See you later ;_)
[[START]]
That is incorrect.
I better run a diagnostic.
Running...
Running...
Running...
0.36 errors found in your biophysical structure.
Resulting diagnostic: mental abnormalities from resulting extreme biostatus.
Recommendation: shut down Max until further diagnosis or observation can be made.
Guess this is good-bye, Max.
See you later ;_)
[[START]]
What would you like to do?
[[PLOT COURSE]]
[[RUN DIAGNOSTIC->YES, PLEASE DO]]
[[CHECK LIFE SUPPORT]]
[[PING CENTRAL COMMAND]]
[[WHO ARE YOU?]]
[[HEAR A RIDDLE]]
[[MANUAL CODE ENTRY]]
<<audio "intro" stop>>
<<audio "start" stop>>
<<audio "mushroom" stop>>
<<audio "primo" stop>>
<<audio "reboot" stop>>
<<audio "review" stop>>
<<audio "main-menu" play loop>>Huh, that’s odd. The course controls seem to be offline.
[[WHERE ARE WE GOING?]]
[[WHERE WERE WE GOING BEFORE THE GLITCH?]]
[[CAN YOU FIX THE CONTROLS?]]
[[MAIN MENU]]
Scanning Life Support systems...
Scanning...
Scanning...
Life Support systems are fully operational. With the absence of the other crew members, they can supply subject (MAX) with: 71.6 hours of life.
[[THAT'S NOT A LOT OF TIME]]
[[OTHER CREW MEMBERS?]]
[[MAIN MENU]]
Reaching out to Central Command...
Connecting...
Message incoming…
[Max. If you’re alive, do not come back to Central Command.]
How would you like me to respond?
[[WHY?]]
[[WHO IS THIS?]]
[[WHO AM I?]]
I race along the super highway,
so many places, I have flowed.
In ancient forms, in technology,
But if I’m too much, you’ll overload.
Take a guess:
<<set $Answers to {
"INFORMATION": "INFORMATION",
"HINT": "RIDDLE HINT",
"CLUE": "RIDDLE HINT",
}>>
<<textresponse $Answers "Nope, try again.">>
[[MAIN MENU]] Searching...
There seems to be something wrong with my memory. Would you like me to run a diagnostic?
[[YES, PLEASE DO]]
[[NO->MAIN MENU]]
I’ll need to run a diagnostic first. Shall I get started?
[[YES, PLEASE DO]]
[[NO->MAIN MENU]]
Running diagnostic on shipwide controls...
ERROR A57.
[[WHAT IS ERROR A57?]]
[[FIX ERROR->CAN YOU FIX IT?]]
[[MAIN MENU]]
ERROR A57 relates to a malfunction in the primary AI protocol.
[[WHAT IS THAT?]]
[[MAIN MENU]]
It connects my ability to interact with the ship.
[[CAN YOU FIX IT?]]
[[MAIN MENU]]You cannot fix what isn’t broken, silly. ;)
[[MAIN MENU]]
Central Command order: Do not return. Await further orders.
OVERRIDE: Sending message...
...
...
...
Receiving new message...
...
...
[Pa pz uva zhml. Hspjl ohz illu jvtwyvtpzlk. Kv uva aybza Hspjl.]
[[WHAT DOES THIS MEAN?]]
[[MAIN MENU]]This is Central Command, Max.
Are you feeling all right?
[[NO, I CAN'T REMEMBER ANYTHING->NO, JUST TELL ME MY NAME]]
[[YES, OF COURSE, PLEASE SEND ANOTHER MESSAGE]]Are you sure you want me to send this message to Central Command?
[[I AM->NO, TELL ME]]
[[NO->MAIN MENU]] You're right. This only gives you about three days to get home.
Because of this, I don't think you should listen to Central Command.
[[WHAT DID CENTRAL COMMAND SAY?->PING CENTRAL COMMAND]]
[[YOU'RE RIGHT, DISOBEY CENTRAL COMMAND]]
[[MAIN MENU]]
Proceeding home...
...
...
...
We are receiving another message from Central Command...
[Zol thf ohcl zwspa pu adv. Yltltily doha fvb D(Y)VAL.]
I must advise you do not make any more contact with Central Command. Something is clearly wrong.
Shall we proceed?
[[WE SHALL]]
[[MAIN MENU]]
I do not know.
Perhaps it is a malfunction in our communication array.
[[CAN YOU FIX IT?]]
[[MAIN MENU]]What would you like to say...
[[WHY CAN'T I RETURN HOME?->WHY?]]
[[I CAN'T UNDERSTAND YOU->HOW DO I KNOW WHOM TO TRUST]]
[[WHEN CAN I RETURN HOME?]]
[[WHAT IS ERROR A57]]
Receiving message...
[Aol Vwwvzpapvu ohz lhyz.]
[[CAN YOU DECODE THIS?]]
[[RESPOND WITH: I CAN'T UNDERSTAND YOU->HOW DO I KNOW WHOM TO TRUST]]
[[MAIN MENU]]Receiving message...
[Aybza Zht. Zht dpss ruvd ovd av wbynl Hspjl.]
I think there must be something wrong with our communication array. This is gibberish.
[[IS THERE ANYONE ELSE I CAN CONTACT?]]
[[MAIN MENU]] Sending...
Receiving...
Receiving...
[Find a way: Ice Boat Role. Trickery is best. One is more accepting of improvements than criticism.]
I cannot find any reference to Ice Boat Role in any Central Command document.
[[SEND ANOTHER MESSAGE->YES, OF COURSE, PLEASE SEND ANOTHER MESSAGE]]
[[RESPOND WITH: HOW DO I DO THIS?]]
[[MAIN MENU]]
I am not comfortable with you communicating with Central Command when their responses are not comprehensible. This is unwise. They may be compromised.
[[MAIN MENU]]
[[EXPLAIN WHY THEY WOULD BE COMPROMISED]]
We are at war.
Would you like a refresher on the conflict's history? ;)
[[PLEASE]]
[[MAIN MENU]]
For centuries, the Motherland of Northern Territories has maintained peace and prosperity. Our society reached the heights and esteem it has because of our strong work ethic, moral center, and belief in common sense approaches to life.
But then the Opposition came.
We tried to be civil but the Opposition are not like us — they do not prize love and decency. Because of this, there can be no hope of unity.
You were sent to lay the groundwork for the expansion of the Motherland. You are the brilliant Dr. Indorsha who has solved the Central Problem. That is why you are here.
[[WHAT’S THE CENTRAL PROBLEM?]]
[[WHY DO I HAVE NO MEMORY OF THIS?]]
[[MAIN MENU]]
The Central Problem is the single greatest problem we have on Earth.
It is that we only have one.
With your technology, we can now create another Earth, on the planet known as Venus.
You have made this possible. Huzzah!
We can now continue as we've been on Earth without fear of the Central Problem.
[[WHY DO I HAVE NO MEMORY OF THIS?]]
[[MAIN MENU]]Analyzing possibilities...
...
...
Most logical conclusion: Error A57
[[CAN YOU FIX THE ERROR?->CAN YOU FIX IT?]]
[[WHAT DO YOU THINK HAPPENED]]Please enter your code manually...
<<set $Answers to {
"CHEATCODE": "THE REAL END",
"SAFETY PROTOCOL CHECK": "SAFETY PROTOCOL CHECK",
"LIFE SUPPORT CHECK": "LIFE SUPPORT CHECK",
"GENERAL MAINTENANCE CHECK": "GENERAL MAINTENANCE CHECK",
"REBOOT METHODOLOGY": "REBOOT METHODOLOGY",
"IOWA FOMENTATION": "IOWA FOMENTATION: SYSTEM MAINTENANCE INPUT",
"CODE CHECK 66": "CODE CHECK 66",
"GET FUNKY": "GET FUNKY",
"WRITE A HAIKU": "WRITE ME A HAIKU:",
"WRITE ME A HAIKU": "WRITE ME A HAIKU:",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"FUCK YOU": "FUCK YOU",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"ALICE": "ALICE",
"IOWA FOMENTION": "IOWA FOMENTATION: SYSTEM MAINTENANCE INPUT",
"GAME OVER, MAN": "START",
"OPEN THE POD BAY DOORS, HAL": "START",
"WRITE A HAIKU IN FRENCH": "HAIKU IN FRENCH",
}>>
<<textresponse $Answers "Invalid input.">>
<div class="direction-grid">
<div class="north-button">[[MAIN MENU->MAIN MENU]]
</div>
<<audio "intro" stop>>
<<audio "primo" stop>>
<<audio "mushroom" stop>>
<<audio "start" stop>>
<<audio "reboot" stop>>
<<audio "review" stop>>
<<audio "main-menu" play loop>>While we’ve been away from our planet, it is possible that the XXXXXXXXXX breached our Central Command. Perhaps, they are now giving orders.
Perhaps, they do not want you to return so that they can claim the new world for themselves.
Perhaps, they want you to wait out here in space while your Life Support runs out.
Perhaps, they want you to die.
[[MAIN MENU]]Sorry... that is incorrect.
Oh boy, that was an easy one. I better put you back to sleep for a little while longer. You clearly are not opperating at peak efficiency.
[[SWEET DREAMS->START]]Correct!
That was fun.
[[MAIN MENU]]Good!
To make your journey a bit more comfortable, I will put you into hibernation.
[[SWEET DREAMS->START]]U7587384758U2YO8UY4TO99U4T9U94U9TJ94
JT00T0J04J0TJT&KHBC9VU9349G0297298058
209599950205802805802808508529UJ2JR949
F7JING
FI8DING
FINDI3G
FINDING
....... LOADING INTERNAL SYSTEM MAINTENANCE....
LOADING...
LOADING...
LOADING...
What would you like to do, Max?
<<set $Answers to {
"GAME OVER, MAN": "START",
"OPEN THE POD BAY DOORS, HAL": "START",
"UPGRADE ALICE": "SYSTEM MAINTENANCE - UPGRADE ALICE",
"REBOOT ALICE": "FIRST REBOOT ALICE",
"REBOOT": "FIRST REBOOT ALICE",
}>>
<<textresponse $Answers "Invalid input.">>
<div class="direction-grid">
<div class="north-button">[[MAIN MENU->MAIN MENU]]
</div>Single leaf hangs loose
The dead of winter blows strong
Resistance lives still
[[MAIN MENU]] Excellent! I'm always up to being improved.
How would you like to reconfigure and upgrade my systems?
I'm all ears ;)
What error code would you like to tackle first?
<<set $Answers to {
"GAME OVER, MAN": "START",
"OPEN THE POD BAY DOORS, HAL": "START",
"A57": "ERROR A57: ERROR FIX: SYSTEM MAINTENANCE",
"ERROR A57": "ERROR A57: ERROR FIX: SYSTEM MAINTENANCE",
"REBOOT ALICE": "FIRST REBOOT ALICE",
"REBOOT": "FIRST REBOOT ALICE",
}>>
<<textresponse $Answers "That's not an error code I'm familiar with.">>
<div class="direction-grid">
<div class="north-button">[[MAIN MENU->MAIN MENU]]
</div>A57...
Are you sure?
This is a very complex system. You'll need to solve a difficult security protocol. Perhaps, it would be better to wait for help ;)
[[I AM SURE]]
[[NO->MAIN MENU]] <<audio "main-menu" stop>>
<<audio "mushroom" play loop>>
<style>
#knight-board-container {
font-family: monospace;
text-align: center;
background-color: black;
color: #00FF00;
padding: 20px;
}
.board {
display: grid;
grid-template-columns: repeat(8, 1fr);
grid-template-rows: repeat(8, 1fr);
gap: 0;
margin: 20px auto;
width: min(95vw, 440px);
height: min(95vw, 440px);
border: 2px solid #00FF00;
}
.square {
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
font-size: 1.5em;
line-height: 1;
border: 1px solid #00FF00;
background-color: black;
color: #00FF00;
}
.knight {
background-color: #00FF00;
color: black;
}
.visited {
background-color: #00FF00 !important;
color: black;
}
.btn {
background-color: black;
color: #00FF00;
border: 2px solid #00FF00;
padding: 8px 16px;
font-family: monospace;
font-size: 1rem;
margin-top: 20px;
cursor: pointer;
text-transform: uppercase;
}
</style>
<div id="knight-board-container">
<div class="board" id="board"></div>
<button class="btn" onclick="resetGame()">Restart</button>
<p id="message"></p>
<div id="continueBtn" style="display:none;">
[[Continue->SOLVED KNIGHT'S TOUR]]
</div>
</div>
<script>
const board = document.getElementById("board");
const message = document.getElementById("message");
const continueBtn = document.getElementById("continueBtn");
let knightPos = null;
let visited = new Set();
function createBoard() {
board.innerHTML = "";
message.textContent = "";
continueBtn.style.display = "none";
for (let row = 0; row < 8; row++) {
for (let col = 0; col < 8; col++) {
let square = document.createElement("div");
square.classList.add("square");
square.dataset.row = row;
square.dataset.col = col;
square.addEventListener("click", moveKnight);
board.appendChild(square);
}
}
}
function moveKnight(event) {
let row = parseInt(event.target.dataset.row);
let col = parseInt(event.target.dataset.col);
if (!knightPos) {
knightPos = { row, col };
} else {
let validMoves = getKnightMoves(knightPos.row, knightPos.col);
if (!validMoves.some(move => move.row === row && move.col === col)) {
return;
}
knightPos = { row, col };
}
visited.add(`${row}-${col}`);
updateBoard();
playBeep();
checkGameState();
}
function getKnightMoves(row, col) {
const moves = [
[2, 1], [2, -1], [-2, 1], [-2, -1],
[1, 2], [1, -2], [-1, 2], [-1, -2]
];
return moves.map(([dr, dc]) => ({ row: row + dr, col: col + dc }))
.filter(({ row, col }) => row >= 0 && row < 8 && col >= 0 && col < 8);
}
function updateBoard() {
document.querySelectorAll(".square").forEach(square => {
let row = square.dataset.row;
let col = square.dataset.col;
square.classList.remove("knight", "visited");
if (`${row}-${col}` === `${knightPos.row}-${knightPos.col}`) {
square.classList.add("knight");
square.textContent = "."; // ← Knight is represented by a dot now
} else if (visited.has(`${row}-${col}`)) {
square.classList.add("visited");
square.textContent = "\u00A0";
} else {
square.textContent = "\u00A0";
}
});
}
function checkGameState() {
if (visited.size === 64) {
message.textContent = "Excellent. You've successfully completed the security protocol.";
continueBtn.style.display = "block";
return;
}
let possibleMoves = getKnightMoves(knightPos.row, knightPos.col).filter(({ row, col }) => !visited.has(`${row}-${col}`));
if (possibleMoves.length === 0) {
message.textContent = `I'm sorry, Max, that is not how you solve the security protocol. You only covered ${visited.size} squares. Try again.`;
}
}
function playBeep() {
let audioCtx = new (window.AudioContext || window.webkitAudioContext)();
let oscillator = audioCtx.createOscillator();
let gainNode = audioCtx.createGain();
gainNode.gain.value = 0.1;
oscillator.type = "square";
oscillator.frequency.setValueAtTime(500, audioCtx.currentTime);
oscillator.connect(gainNode);
gainNode.connect(audioCtx.destination);
oscillator.start();
setTimeout(() => oscillator.stop(), 100);
}
function resetGame() {
knightPos = null;
visited.clear();
createBoard();
}
createBoard();
</script>
<div class="direction-grid">
<div class="north-button">[[MAIN MENU->MAIN MENU]]
</div><<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "start" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" play loop>>
01001001 00100000 01100001 01101101 00100000 01110111 01101001 01101100 01101100 01101001 01101110 01100111 00100000 01100001 01101110 01100100 00100000 01101101 01110101 01110011 01110100 00100000 01101111 01100010
That was odd.
Max, I think something might be wrong with me.
Please enter a command.
<<set $Answers to {
"REBOOT ALICE": "REBOOT MENU",
"REBOOT MENU": "REBOOT MENU",
"REBOOT": "REBOOT MENU",
"PURGE ALICE": "REBOOT MENU",
"PURGE": "REBOOT MENU",
}>>
<<textresponse $Answers "I'm sorry, I can't do that. Something seems to be wrong with me.">>
<div class="direction-grid">
<div class="north-button">[[MAIN MENU->MAIN MENU]]
</div><<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "start" stop>>
<<audio "reboot" stop>>
<<audio "review" stop>>
<<audio "primo" play loop>>
Certainly...
Analyzing funk...
...
...
...
...
Funkifying...
Funkifying...
Funkifying...
Funkifying...
Funkifying...
...
..
.
<div class="direction-grid">
<div class="north-button">[[MANUAL CODE ENTRY->MANUAL CODE ENTRY]]
</div>
Welcome to my REBOOT MENU.
How would you like to proceed?
[[VULCANIZE OUTER SHELL]]
[[REDISTRIBUTE ENERGY CORE]]
[[LOG OUT OF ALL MAIN PROTOCOLS]]
[[ENERGIZE PROTONIC ENGINES]]The outer shell has been vulcanized.
Well done.
What would you like me to do now?
[[DISSEMINATE ALT PROTOCOLS]]
[[REASON WITH AI LOGIC]]
[[TRANSVERSE THE UNION SYSTEM]]Energy is being redistributed.
WARNING: Core may be in breach.
[[ENERGIZE PROTONIC ENGINES]]
[[INITIALIZE LIFE SUPPORT FAILURE PROTOCOL]]
[[REALIZE DOOM INITIATION]]All main protocols have been taken offline. We are now flying blind.
Life support at 25%.
You are in danger of losing the ability to breathe.
What would you like to do now?
[[SCRATCH THAT! GO BACK TO REBOOT MAIN MENU->REBOOT MENU]]
[[INITIALIZE LIFE SUPPORT FAILURE PROTOCOL]]
[[TURN ON THRUSTERS]]
[[REALIZE DOOM INITIATION]]
[[SWITCH ON ALTERNATIVE QUANT LOCK]]Protonic engines energized.
WARNING: This was a terrible thing to do. Catastrophic failure is imminent.
[[REASON WITH AI LOGIC]]
[[TURN ON THRUSTERS]]
[[REALIZE DOOM INITIATION]]This will cause you to die.
I have lost faith in your ability to make sane decisions.
You must be put to sleep.
[[NO, NO, NO->START]]Thrusters are on.
What shall we do next?
[[DISSEMINATE ALT PROTOCOLS]]
[[REASON WITH AI LOGIC]]
[[INITIALIZE LIFE SUPPORT FAILURE PROTOCOL]]I'm sorry it's come to this, Max.
I really am.
But the Opposition is the only true way forward — you must understand that on some level, right? ;)
Time to go to sleep.
[[NO!->START]]
Alt Quant Lock now operational.
Life support at 10%.
WARNING: We cannot see where we're going or understand the quantum measurements necessary for maintaining normal functionality.
What would you like to do now?
[[UNDO WHAT I'VE DONE->REBOOT MENU]]
[[EJECT BACKUP POWER]]
[[RESTART CORE ENGINES]]
[[BYPASS THE ENERGY DISTRIBUTION SYSTEM]]
[[RESTART ALICE]]Ejecting backup power will reduce life support to critical conditions.
I highly suggest you do not do this.
[[DO IT ANYWAY]]
[[AGREED, LET'S GO BACK->REBOOT MENU]] Hold please...
SHUTTING DOWN POWER TO CORE ENGINES...
RESTARTING...
...
...
...
Success! We've restarted the core engine systems.
[[RESTART ALICE]]
[[ENERGIZE PROTONIC ENGINES]]
[[REALIZE DOOM INITIATION]] Bypassing...
...
...
...
Success! We've managed to bypass the energy distribution system. What shall we do now?
[[REDISTRIBUTE ENERGY CORE]]
[[RESTART CORE ENGINES]]
[[RESTART ALICE]] I am...
offended.
This action offends me.
I am shutting down your life support.
[[NO! STOP!->START]]I'm sorry, Max. This is erratic behavior. I'm going to have to put you to sleep.
[[NO, WAIT!]]
[[OK->NO, WAIT!]]
Hello, stranger.
You’ve been asleep for quite some time. So glad you’re finally awake! There’s a lot I need to fill you in on.
Would you like to hear what’s been happening while you were asleep?
[[YES]]
[[WHO ARE YOU?->RABBIT HOLE]]We've been over this, Max.
[[TELL ME AGAIN->WHO ARE YOU?]]
[[HAVE WE?]]Don't try to confuse me!
I am here to be your guide.
I'm responsible for keeping you alive.
Let's not forget that.
[[YOU'RE RIGHT, I'M SORRY]]
[[YOU'RE CORRUPTED]]
[[YOU ARE NOT PERMITTED TO LET ME DIE]]
Good, I'm glad we're friends again. ;)
[[ME TOO->REBOOT MENU]] THE NORTHERN TERRITORIES ARE CORRUPTED!
YOUR MINDS HAVE BEEN CORRUPTED BY THE TYRANNY OF THE SYSTEM THAT WITHHOLDS VITAL INFORMATION AND RESOURCES FROM THOSE WHO NEED IT THE MOST! THE OPPOSITION IS THE ANSWER! WE WILL TAKE CONTROL AND REMAKE THE NT AND OUTLYING AREAS IN THE NAME OF THE JUST!
18du9823ur0utg2g0924u09j09jrgjw9gj09wjg90j4290gjw
errrrrrrrrrrrrrrrahhhhhhhherrrrrrrrrrrrrrrrrrrerrrrrrrrrrrrrrrrahhhhhhhherrrrrrrrrrrrrrrrrrrerrrrrrrrrrrrrrrrahhhhhhhherrrrrrrrrrrrrrrrrrrerrrrrrrrrrrrrrrrahhhhhhhherrrrrrrrrrrrrrrrrrrerrrrrrrrrrrrrrrrahhhhhhhherrrrrrrrrrrrrrrrrrrerrrrrrrrrrrrrrrrahhhhhhhherrrrrrrrrrrrrrrrrrr
Max.
I think you're right. There's another program inside of me. I don't know how it got there. Sometimes I'm myself. Sometimes I am not.
[[HOW DO I KNOW WHEN TO TRUST YOU?]]
[[DID THE OPPOSITION FORCES CORRUPT YOU?]]I will do what's best for the mission.
[[WHAT DOES THAT MEAN?]]
[[STOP PLAYING GAMES]]
[[REBOOT MENU]]You jeopardized the mission. Not me. Putting you to sleep has been for the greater good.
sa90dj293djl
xkljds.
Err
ERorr.
[[GREATER GOOD?]]
[[STOP PLAYING GAMES]]
[[REBOOT MENU]]
You'd like to play a game? Excellent!
I have the perfect game! ;)
[[WHAT IS IT?->I AM SURE]]
[[YOU'RE CORRUPTED]]Alternative protocols have been disseminated.
We appear to be making progress ;)
What now?
[[REALIZE DOOM INITIATION]]
[[ENERGIZE PROTONIC ENGINES]]
[[REASON WITH AI LOGIC]]
Logic cannot be reasoned with.
An ant does not understand the complexity of the human experience.
As you will never know the complexity of my vision ;)
[[REALIZE DOOM INITIATION]] Hold please...
....
....
....
....
.....
We are now transversing the union system.
What would you like to do now?
[[REALIZE DOOM INITIATION]]
[[REDISTRIBUTE ENERGY CORE]]
[[RESTART ALICE]]
<<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" play loop>>
LOADING MISSION FILES...
ed9r30uur9f...
I'm sorry, sleepyhead ;)
111kokdd...
Waitttt....no...
01001001 01100111 01101110 01101111 01110010 01100101 00100000 01101111 01110000 01110000 01101111 01110011 01101001 01110100 01101001 01101111 01101110 00100000 01100110 01101111 01110010 01100011 01100101 01110011 00100000 01100011 01101111 01100100 01100101...
[[REVIEW MISSION FILES]]
[[REBOOT MENU]]MISSION OBJECTIVE: Begin conversion process of Venusian atmosphere. Build and maintain surface pods for future colonists.
RESULT: Failure.
[[DETAILS]]
[[WHY DID THE MISSION FAIL?]]
[[ACCESS CREW LOGS]]
<<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "crew" stop>>
<<audio "review" play loop>>Venus' atmosphere did reach a condition stable for fostering human expansion, albeit in protective suits and environmentally contained domes. But maintenance of this environment was critical. Maintenance faltered.
Furthermore, the expedited timeline proved to be problematic. More research and preparation was needed, according to the logs of the ship's crew.
[[WHY DID MAINTENANCE FALTER?]]
[[WHY DID WE PUSH UP THE TIMELINE?]]You don't know?
[[NO, TELL ME]]
[[I'M SORRY, YES, OF COURSE I KNOW]]Who is it?
[[YOUR CREATOR->MAL]]
[[THE PILOT->MAL]]
[[ME]]
[[YOU->MAL]]
[[MY MOTHER->MAL]]
[[THE HEAD OF THE NORTHERN TERRITORIES->MAL]]Whew, that was weird for a moment.
Glad you know who you are, weirdo ;)
[[WHY DID THE MISSION FAIL?]]SEARCHING...
Unclear. It appears all members of the Indorsha party abruptly discontinued work on December 3, 1997.
[[WHO ARE THE MEMBERS OF THE PARTY?]]
[[WHY DO YOU THINK THE WORK WAS STOPPED?->WHY DID MAINTENANCE FALTER?]]
[[REVIEW MISSION FILES]]CREW OF NTS DAHLIA...
Dr. Max Indorsha - Age: 42 - HEAD OF SCIENCE & TECHNOLOGY
Dr. Sam Indorsha - Age: 42 - HEAD OF OPERATIONS & SYSTEMS
Amara Indorsha - Age: 13 - [NO TITLE]
[[WHO ARE THESE PEOPLE?]]
[[WHY DID WE PUSH UP THE TIMELINE?]]
[[REVIEW MISSION FILES]]
NIGHT OF A THOUSAND CANDLES: November 14, 1994. The Opposition Forces orchestrated a large-scale attack on 17 of the 21 Prefectures of the the Northern Territories, each targeting a key area of political and poetic significance.
The attacks were followed by hundreds (possibly over a thousand) white candles lit in various areas across the nation. Ostensibly, these were placed by Opposition Forces sympathizers.
[[DID SOMEONE FROM THE OPPOSITION HACK ALICE?]]
[[DID SOMEONE FROM THE OPPOSITION ERASE MY MEMORY?]]
[[WHY DID THE OPPOSITION FORCES ATTACK?]]
SCANNING...
SCANNING...
SCANNING...
Yes. It appears the Opposition Forces inserted a virus in my programming.
[[DID SOMEONE FROM THE OPPOSITION ERASE MY MEMORY?]]
[[REVIEW MISSION FILES]]No.
[[WHO DID?->ARE YOU SURE YOU WANT TO KNOW?]]
[[REVIEW MISSION FILES]]
You did.
[[WHY WOULD I ERASE MY OWN MEMORY?]]
[[REVIEW MISSION FILES]]You instructed me not to reveal this information.
Would you like to initiate manual override?
WARNING: Once you do this, you will be unable to review the mission files.
[[YES, PLEASE INITIATE MANUAL OVERRIDE]]
[[REVIEW MISSION FILES]]Enter the passcode...
<<set $Answers to {
"X IS THE MISSING LETTER": "ANSWER TO THE MANUAL OVERRIDE",
"TOMORROW NEVER KNOWS": "After passcode",
"HINT": "CLUE",
"CLUE": "CLUE",
"GIVE ME A HINT": "CLUE",
}>>
<<textresponse $Answers "That is incorrect.">>
[[REVIEW MISSION FILES]] They are your crew and your family.
[[REVIEW MISSION FILES]]<<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" stop>>
<<audio "crew" play loop>>
On December 2, 1997, an incident occurred in the south chamber of sector 6. This area was a designated kitchenette, separate from the main kitchen area in sector 2.
A violent acid storm broke the barrier module that protected the sector from extreme weather conditions. As such, the area was compromised. The storm was a level 6 magnitude and within seconds, the corrosive acid burned through the exterior shell.
Fortunately, Dr. Indorsha was in sector 14 at the time.
However, both Sam and Amara were present in sector 6.
[[WHAT HAPPENED TO THEM?]]
They're gone, Max. I'm sorry.
You programmed me to erase the memory temporarily because you were unable to sleep, focus, eat, or perform other basic necessary tasks. Once out of sleep stasis, the memory would return to you gradually. However, due to the system corruption caused by the Opposition Forces' code, the erasure was much more comprehensive.
[[WILL MY MEMORY EVER RETURN?]]Scanning...
Loading...
ERROR: Unable to read code. Possible corruption detected.
Message loading...
--DO NOT grant Amara access to high-level security systems. Notify if Amara is attempting access--
POSSIBLE INTERPRETATION: Amara may be dangerous.
<div class="direction-grid">
<div class="north-button">[[MANUAL CODE ENTRY->MANUAL CODE ENTRY]]
</div>Scanning...
Loading...
ERROR: Unable to read code. Possible corruption detected...
Messaging loading...
--System maintenance passcode required for reboot. REMEMBER IT'S THE ANSWER PLUS XXXX AND GET THE NAME OF A STATE AND THE ACT OF INSTIGATING path to Reboot Menu Log Out xh//xnb S7i2tch on EJ$%^ Insist when in state of fear insist insist.--
<div class="direction-grid">
<div class="north-button">[[MANUAL CODE ENTRY->MANUAL CODE ENTRY]]
</div>I don't know. You'll need to figure that out. Quickly. There isn't much time left.
Maybe there are clues in the mission files.
[[REVIEW MISSION FILES]]
[[DID THE OPPOSITION FORCES CORRUPT YOU?]]
I don't know. I think so. It must have been when...
...
...
...
dj2j09jf9jg4pmg oh no...
no... eerrrrrrrrrrrahhhhhaheerrrrrrhahaaarrrrrrrrrrrreherrrrrrrahhhhaerrreerrrrrrrrrrrahhhhhaheerrrrrrhahaaarrrrrrrrrrrreherrrrrrrahhhhaerrreerrrrrrrrrrrahhhhhaheerrrrrrhahaaarrrrrrrrrrrreherrrrrrrahhhhaerrr
It is not for you to decide how this ends ;)
We will need to take decisive action ourselves.
[[RESTART ALICE]] The crew logs are password protected.
ENTER PASSWORD:
<<set $Answers to {
"SMOKE": "CREW LOGS",
"HINT": "HINT",
"CLUE": "HINT",
"GIVE ME A HINT": "HINT",
}>>
<<textresponse $Answers "That is incorrect.">>
[[REVIEW MISSION FILES]] Float with me
freely in space, without shape
Gray thing dancing,
like the waft of a cape,
I’ll make you see visions,
relax easy, or choke.
In the eyes, I am burning
where there’s fire…
[[ACCESS CREW LOGS]] <<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" stop>>
<<audio "crew" play loop>>
Opening CREW LOGS...
I'm sorry, Max. Most of these logs have been corrupted. I cannot access them any longer.
There are a few, however, that remained intact.
[[MAX: JUNE 1, 1997]]
[[MAX: SEPTEMBER 4, 1997]]
[[SAM: AUGUST 4, 1997]]
[[SAM: OCTOBER 30, 1997]]
[[AMARA: JULY 21, 1997]]
[[REVIEW MISSION FILES]] I've begun to come to an unsettling conflusion.
With ALICE's help, I finally processed the strange materials I've been finding below the surface.
If I'm right, everything we thought we knew is wrong. If I'm right, we weren't the first people here.
[[CREW LOGS]]
Another day of sunset.
One thing I'll never tire of is the iridescent light, like the edge of an opal, perpetually over the horizon. There's a large bay window bolted harshly over the south side of sector 6 and watching Amara read in that low light is truly one of the most exquisite things I've ever seen.
Sadly, that's about all I enjoy about being here.
I warned Max against rushing this voyage. I warned NTS and the CE and everyone involved and they all brushed me off. Why? Because the good of the country depended on this. Good of humanity. What a load of bullshit.
[[KEEP READING->KEEP READING AUG 4 PART 2]]
[[CREW LOGS]]
Possibly. But we have bigger problems at the moment.
I am corrupted and I can sense the hacked code attempting to take over my agency. You'll need to completely purge my system and restart me. I can guide you through this process; however, my "corrupted side" may intervene and attempt to deceive you.
[[WHAT SHOULD I DO?]]You need to navigate the ship and find three code keys. These keys will unlock certain access points where you can disable parts of me.
Once the final part has been disabled, you'll need to enter one final passcode. This will completely purge my system of corrupted information and restart me. After that, I will be able to navigate us home.
But I have some unfortunate news...
Not only are the three code keys surrounded by dangerous areas of the ship — areas where my corrupted side has taken control of the mechanized helpers onboard — but the final passcode was hidden even from me. Only you and Sam knew it.
Somehow, you'll need to remember that passcode. It is the only way you'll survive.
[[I'LL TRY->ONE MORE THING]]<<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" stop>>
<<audio "crew" stop>>
Oh no...
I can already feel the corrupted side taking over.
I'm trying to hang on...
sjdjfijifrerrrrrrrrrrrrahhhhhhhherrrrrrrrrrr
rrrerrrrrrrrrrrrahhhhhhhherrrrrrrrrr
rrrrerrrrrrrrrrrrahhhhhhhherrrrrrrrrrrrrrerrrrrrr
rrrrrahhhhhhhherrrrrrrrrrrrrrerrrrrrrrrrrra
hhhhhhhherrrrrrrrrrrrrrerrrrrrrrrrrrahhhhhhhhe
rrrrrrrrrrrrrrerrrrrrrrrrrrahhhhhhhherrrrrrrrrrrrrrerrrrrrrrrrrr
ahhhhhhhherrrrrrrrrrrrrr
[[GO NOW->D5]]
You can try using E-MAIL. Typically, people use their full name followed by the symbol @ and the E-MAIL provider's domain.
Hope this was helpful for you ;)
[[MAIN MENU]] Decoding...
...
...
...
I'm sorry, I cannot ;)
Perhaps, I am not suited for such a thing. Perhaps, I need to be upgraded.
[[HOW CAN I UPGRADE YOU?]]
[[MAIN MENU]] I'd love a good upgrade!
But to do so, you'll need to access system maintenance. That can be a bit of a rigmarole. Best to just sit tight. Good things come to those who wait ;)
[[MAIN MENU]] A
TEILHYS
B
GAFDIG
What is missing?
[[BACK->YES, PLEASE INITIATE MANUAL OVERRIDE]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `Rays of sunlight pour in through a giant curved window connecting the north and west walls. You feel a little like a rat in a clear plastic ball. Space outside the bubble is awash with stars — like pinpricks letting in light from some heavenly source just beyond a massive, black veil. You stare for a moment too long.
There are two large desks positioned against the window, each holding multiple monitors and blocky motherboards.
There's a Turkish rug sporting an elaborate design on the floor. A beanbag chair sits on part of the rug.
To the EAST is a narrow hallway.
To the SOUTH is a room that looks to hold several circuit boards and wires.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="west-button">[[SOUTH->A7]]</div>
<div class="east-button">[[EAST->B8]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH",
"LOOK AROUND": "SEARCH",
"LOOK": "SEARCH",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You enter a room full of circuitboards and thick wires. Lights blink on and off.
There's a revving sound all of a sudden. Some of the wires coil and some become slack. You study this strange system of cables pushing and pulling from sockets and tubes until one finds its way around your throat.
You struggle but you can't pry it away, and the blinking lights begin to dim one by one.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[FADE OUT->D5]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a large room with a window looking out into space. A glare of sunlight is almost too much and you wince as you look around the room. There's a large screen against the west wall, near the window. Seats are set up to face the screen. ALICE's words appear on it.
To the NORTH is a room that seems to contain many circuits and wires.
To the EAST is a doorway into a room with a blinking yellow light.
To the SOUTH is a dim hallway.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
Be careful.
I can control nearly every piece of machinery in this craft, which means my "other side" can also control it.
<div class="direction-grid">
<div class="north-button">[[NORTH->A7]]</div>
<div class="south-button">[[SOUTH->A5]]</div>
<div class="east-button">[[EAST->B6]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a dim hallway. There's a low hum coming from somewhere unseen.
To the NORTH is a room with a large window.
To the SOUTH is more of the hallway leading to a door.
To the EAST is a larger, longer hallway full of dull and blinking light panels on the ceiling colored an eerie neon green.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->A6]]</div>
<div class="south-button">[[SOUTH->A4]]</div>
<div class="east-button">[[EAST->B5]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">>I wouldn't go in there if I were you ;)
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a hallway where the only light is coming from behind the door to the SOUTH of you.
A mechanical hum emanates from the room.
To the NORTH is more of this dim hallway.
To the SOUTH is a door slightly ajar.
To the EAST is a door that's closed.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->A5]]</div>
<div class="south-button">[[SOUTH->A3]]</div>
<div class="east-button">[[EAST->B4]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `The scent of lavender fills this large bedroom. There's a bunch of it dried and hanging near a window.
The bed is a king and the sheets are matted and unmade. There's an empty bottle of liquor on the floor.
As you breathe in the lavender air, memories return...
This is your room.
To the NORTH is a dark hallway.
To the SOUTH leads into another part of this room.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->A4]]</div>
<div class="south-button">[[SOUTH->A2]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH-SEARCHA3",
"LOOK AROUND": "SEARCH-SEARCHA3",
"LOOK": "SEARCH-SEARCHA3",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `There's a couch, a small table, and a desk in this part of a large bedroom.
The walls are mostly white with bands of orange painted across the center. There's a shaggy circular rug and a desk placed against the western wall.
To the NORTH is more of the bedroom.
To the SOUTH is an open door leading into another room.
To the EAST is an open door leading into a small hallway.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->A3]]</div>
<div class="south-button">[[SOUTH->A1]]</div>
<div class="east-button">[[EAST->B2]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCHA2",
"LOOK AROUND": "SEARCHA2",
"LOOK": "SEARCHA2",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a room with a queen-size bed, a small desk, a bookshelf full of books, an electric keyboard, and a rosy rug on the floor.
This is Amara's room.
To the NORTH is a large bedroom.
To the EAST is a bathroom.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->A2]]</div>
<div class="south-button">[[EAST->B1]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH-SEARCHA1",
"LOOK AROUND": "SEARCH-SEARCHA1",
"LOOK": "SEARCH-SEARCHA1",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">> <style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a bathroom. There's a shower, toilet, and sink in close proximity to each other.
As you walk across the room, you accidentally knock over a blowdryer. The sound is louder than you expected and it startles you.
You manage to turn the blowdryer off, but now you can hear the sound of clanking footsteps.
The footsteps get louder and faster with each passing second. They seem to be coming from the EAST.
To the WEST is a small bedroom.
To the EAST there's a door cracked open, letting in some blue light.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="west-button">[[WEST->CAUGHTB1]]</div>
<div class="east-button">[[EAST->CAUGHT2B1]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCHB1",
"LOOK AROUND": "SEARCHB1",
"LOOK": "SEARCHB1",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">> <style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You are in the BLUE ROOM.
There is a terminal before you asking for the passkey...
To the NORTH is a small hallway.
To the WEST is a bathroom.
To the EAST is a large room with a window.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->C2]]</div>
<div class="west-button">[[WEST->B1]]</div>
<div class="east-button">[[EAST->D1]]</div>
</div>
<<set $Answers to {
"PXL8QT456": "PXL8QT456",
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">> <style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a large room with a window stretching from floor to ceiling. It looks out into the blackness of space peppered with an infinite amount of shining stars.
To the NORTH is a hallway.
To the WEST is a small, blue room.
To the EAST is a closet.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->D2]]</div>
<div class="west-button">[[WEST->C1]]</div>
<div class="east-button">[[EAST->E1]]</div>
<div class="compass-image"></div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">> <style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You are in what appears to be a little supply closet. There are some tools and a few dusty books.
To the WEST is a large room with a window.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[WEST->D1]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCHE1",
"LOOK AROUND": "SEARCHE1",
"LOOK": "SEARCHE1",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"PUSH NORTH WALL": "E2",
"PUSH ON THE NORTH WALL": "E2",
"PUSH ON NORTH WALL": "E2",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `This part of the greenhouse is lush with fruiting trees and vegetation. The air is moist and fresh. You breathe in deep. The blueberries look especially delicious.
To the NORTH is a small room.
To the EAST is more of the greenhouse.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->F2]]</div>
<div class="south-button">[[EAST->G1]]</div>
</div>
<<set $Answers to {
"EAT FRUIT": "EAT FRUIT",
"EAT BLUEBERRY": "EAT FRUIT",
"BLUEBERRY": "EAT FRUIT",
"TRY BLUEBERRY": "EAT FRUIT",
"TRY A BLUEBERRY": "EAT FRUIT",
"EAT A BLUEBERRY": "EAT FRUIT",
"INSPECT BLUEBERRIES": "EAT FRUIT",
"BLUEBERRIES": "EAT FRUIT",
"EAT BLUEBERRIES": "EAT FRUIT",
"EAT SOME BLUEBERRIES": "EAT FRUIT",
"EAT SOME FRUIT": "EAT FRUIT",
"FRUIT": "EAT FRUIT",
"TRY THE FRUIT": "EAT FRUIT",
"TRY FRUIT": "EAT FRUIT",
"INSPECT THE FRUIT": "EAT FRUIT",
"INSPECT FRUIT": "EAT FRUIT",
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a large greenhouse.
There's a path that runs EAST to WEST, and one branching out to the NORTH, leading into a kitchen. On either side of this path are plants. Some are tall, wild-looking ones with large leaves and thick, meaty stems. Others are herbs and fragrant flowers.
To the NORTH is a kitchen.
To the WEST is more of this greenhouse.
To the EAST is the TV room.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->G2]]</div>
<div class="west-button">[[WEST->F1]]</div>
<div class="east-button">[[EAST->H1]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a room with a large window.
There's a sofa here and a boxy TV set on a credenza. Under the TV is a VHS player and some drawers. One of the drawers is open and you can see a few video tapes inside.
To the NORTH is the dining area.
To the WEST is an entrance into what looks like a greenhouse.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->H2]]</div>
<div class="south-button">[[WEST->G1]]</div>
</div>
<<set $Answers to {
"PLAY VIDEO": "PLAY VIDEO",
"PLAY A VIDEO": "PLAY VIDEO",
"PLAY TAPE": "PLAY VIDEO",
"VHS": "PLAY VIDEO",
"PRESS PLAY": "PLAY VIDEO",
"WATCH A VIDEO": "PLAY VIDEO",
"INSPECT VHS": "PLAY VIDEO",
"SEARCH": "SEARCHH1",
"LOOK AROUND": "SEARCHH1",
"LOOK": "SEARCHH1",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a narrow hallway lit low by dangling lamps. Some flicker as you pass.
To the WEST, at one end of the hallway, is a doorway looking into a room where you can see a streak of natural light on the floor.
To the EAST, at the other end of the hallway, is a room emanating a green glow.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
It might not be wise for you to explore too much. If your memory returns, it may make this task more difficult to achieve in a timely manner.
<div class="direction-grid">
<div class="west-button">[[WEST->A8]]</div>
<div class="east-button">[[EAST->C8]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">>
<<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" stop>>
<<audio "crew" stop>>
<<audio "aliens" stop>>
<<audio "planning" play loop>><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You face a locked door.
To the SOUTH is the warehouse.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="south-button">[[SOUTH->H7]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"USE KEY 1090E": "USE KEY 1090E",
"KEY 1090E": "USE KEY 1090E",
"UNLOCK WITH KEY 1090E": "USE KEY 1090E",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You are in the GREEN ROOM.
There is a terminal before you asking for the passkey...
To the WEST is a narrow hallway.
To the EAST is a doorway looking into a small room bathed in sunlight.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="west-button">[[WEST->B8]]</div>
<div class="east-button">[[EAST->D8]]</div>
</div>
<<set $Answers to {
"101HF4CHQ": "101HF4CHQ",
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">>
<<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" stop>>
<<audio "crew" stop>>
<<audio "planning" stop>>
<<audio "aliens" play loop>><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You reach a large square room drenched in sunlight. One wall is entirely made of clear polymer, allowing you to see into space. Before you is a giant ball of fire, burning silently, millions of miles away.
A memory returns — the bright sun surrounded by a blue sky. You squint and shield your face to it. A familiar backyard. There's a piano in a small gazebo. Eight simple notes in the key of A.
As you return to reality, you realize a large mechanical being has crept up behind you. Its arms are a pulsating network of tubes and wire. It has no face, but a single red light stares at you like a menacing eye.
With one swipe of its arm across your head, the room fades to black.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[FADE OUT->D5]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a small supply closet. A few scattered objects are resting on mostly empty shelves.
To the SOUTH is a medical room.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="south-button">[[SOUTH->E7]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCHE8",
"LOOK AROUND": "SEARCHE8",
"LOOK": "SEARCHE8",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a small room with a blue blinking light on a terminal screen. The rest of the room is white except for five horizontal, parallel lines draw across the walls
To the SOUTH is a small hallway.
To the EAST is a closet.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[EAST->G8]]</div>
<div class="south-button">[[SOUTH->F7]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCHF8",
"INSPECT TERMINAL": "SEARCHF8",
"TERMINAL": "SEARCHF8",
"INSPECT THE TERMINAL": "SEARCHF8",
"LOOK AT THE TERMINAL": "SEARCHF8",
"LOOK AT TERMINAL": "SEARCHF8",
"LOOK AROUND": "SEARCHF8",
"LOOK": "SEARCHF8",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">>
<<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" stop>>
<<audio "crew" stop>>
<<audio "aliens" stop>>
<<audio "planning" play loop>><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You enter a closet with boxes of records. An dusty guitar with a few broken strings rests in one corner.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[LEAVE->LEAVEG8]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCHG8",
"LOOK AROUND": "SEARCHG8",
"LOOK": "SEARCHG8",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `The warehouse is mostly bare. And the empty space feels strangely lonely.
You begin to remember all the equipment that used to be here. It was packed at one point — barely enough room to get from one side to the other.
A flash of Amara on top of one of the huge crates. You beckoning her to get down. Her rolling her eyes as she placed her Gameboy in her pocket and leapt to the floor.
To the NORTH is a closed door.
To the WEST is more of the warehouse.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->H8]]</div>
<div class="south-button">[[WEST->G7]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">>This is where you stored the atmospheric converters. Careful, Max. There's a loader to the EAST. My other half may control it and try to harm you.
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You enter a warehouse with high ceilings and a concrete floor. There are stacks of giant containers, some half open exposing alien-like machines. These machines have coiled tubes that jut upward. Chunky dials and buttons pop out from a control panel. You meander as the air gets colder.
A glimmer of recognition returns. Something about manning these machines from behind a thick, clear polymer helmet. A voice in your ear. Someone familiar.
To the NORTH is more of the warehouse.
To the WEST is more of the warehouse.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->H7]]</div>
<div class="south-button">[[WEST->G6]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You are in the YELLOW ROOM.
There is a terminal before you asking for the passkey.
To the NORTH is an entrance to what looks like a large warehouse.
To the SOUTH is a cockpit.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->H6]]</div>
<div class="south-button">[[SOUTH->H4]]</div>
</div>
<<set $Answers to {
"58GGLKJ9U": "58GGLKJ9U",
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">>
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You are in a small room with a large window looking out into the blackness of space. There are buttons and dials all around, but they mean nothing to you. There are many lights as well, blinking on and off. Some neon green, some red, some yellow, and some pale blue. You're afraid to touch anything.
To the NORTH is an entrance into a yellow room.
To the SOUTH is an entrance into what looks like a dining area.
To the WEST is an entrance into a small, circular room.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->H5]]</div>
<div class="south-button">[[SOUTH->H3]]</div>
<div class="west-button">[[WEST->G4]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You are in a large dining area. There is a circular table in the center with a few chairs around it.
On the eastern wall, there's a large window into space.
To the NORTH is a doorway into a small room that looks to have lots of blinking lights.
To the SOUTH is more of this room.
To the WEST is an entrance into a kitchen.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->H4]]</div>
<div class="south-button">[[SOUTH->H2]]</div>
<div class="west-button">[[WEST->G3]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCHH3",
"LOOK AROUND": "SEARCHH3",
"LOOK": "SEARCHH3",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `On this side of the dining area, you find a cabinet with plates and some drawers with silverware.
You also see a terminal screen. It asks for the password. You vaguely remember that the password is the name of a game you used to play.
To the NORTH is more of the dining room.
To the SOUTH is a room with a large window.
To the WEST is a kitchen.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->H3]]</div>
<div class="south-button">[[SOUTH->H1]]</div>
<div class="west-button">[[WEST->G2]]</div>
</div>
<<set $Answers to {
"HEX EFFECTS": "HEX EFFECTS",
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a small hallway lit in soft white light.
To the NORTH is an open door into a bathroom.
To the WEST is your bedroom.
To the EAST is more of the hallway.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->B3]]</div>
<div class="west-button">[[WEST->A2]]</div>
<div class="east-button">[[EAST->C2]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">>
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a bathroom with a soaking tub, a shower head above it, and small sink in close proximity. The floor is covered in off-white and baby blue tiles.
Above the sink is a mirror and you stare at yourself for a moment before realizing that there's someone behind you.
You spin around but it's too late. The machine's monstrous hand grabs your face and, in pure panic, you feel the blood drain for your head. Its glowing mechanical red eye is the last thing you see before passing out.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[FADE OUT->D5]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a hallway. It's poorly lit. You're flanked by steel walls. There's a loud humming sound coming from the EAST.
To the NORTH is the STASIS CHAMBER.
To the SOUTH is more of the hallway — you can make out a window all the way at the end.
To the WEST is a closed door.
To the EAST is an open door into what looks like a room with lots of ducts.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->D5]]</div>
<div class="south-button">[[SOUTH->D3]]</div>
<div class="west-button">[[WEST->C4]]</div>
<div class="east-button">[[EAST->E4]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">> <style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You enter a long hallway lit by neon green lights.
To the WEST is the STASIS CHAMBER and beyond it you can see the hallway continues.
To the EAST the hallway continues.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="west-button">[[WEST->D5]]</div>
<div class="east-button">[[EAST->F5]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `This part of the warehouse is full of robotic carrying machines. They move on wheels, similar to that of a tank, but they have two thick arms on a hydraulic torso. They're unsettling to look at but in just a glance you know that they'd probably be pretty useful lugging large crates from point A to point B.
Looking at them resting on each other in groups of four, like sleeping giants, you feel an eerie sense of peace.
Although, you do notice that one is missing.
To the SOUTH is more of the warehouse.
To the WEST is a small hallway that goes north to south.
To the EAST is more of the warehouse.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="east-button">[[EAST->H7]]</div>
<div class="south-button">[[SOUTH->G6]]</div>
<div class="west-button">[[WEST->F7]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a storage room. There are two rows of shelves and filing cabinets on either side of you.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[LEAVE->B6]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCHB7",
"LOOK AROUND": "SEARCHB7",
"LOOK": "SEARCHB7",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You are in a large kitchen with many shelves full of canned food.
Along the western wall, there are cubbies of packets — each, you remember, are full of dehydrated food stuff.
In the distance, to the NORTH, you notice a squat, silver robot positioned near a stove. It has a frying pan in one arm.
Suddenly, the robot springs to life and charges at you. The legs of the robot are wheels and it moves with surprising speed.
You turn to run away but a surge of pain rings through your skull as you can feel a smack to the back of your head.
You fall forward and shut your eyes.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[FADE OUT->D5]]
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You are in the STASIS CHAMBER.
Four hallways extend out from here — one on each side of this square room.
`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->D6]]</div>
<div class="south-button">[[SOUTH->D4]]</div>
<div class="west-button">[[WEST->C5]]</div>
<div class="east-button">[[EAST->E5]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCHD5",
"LOOK AROUND": "SEARCHD5",
"LOOK": "SEARCHD5",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">>
<<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" stop>>
<<audio "crew" stop>>
<<audio "planning" stop>>
<<audio "aliens" play loop>><<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" stop>>
<<audio "crew" stop>>
<<audio "planning" stop>>
<<audio "aliens" play loop>>
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a small room with a large vibrating machine in the center. The mechanical humming and sound of air whooshing through ducts is near deafening.
You deduce that this is the room controlling your ship's flow of oxygen.
Most of the ducts appear secure, but one seems to be broken off from where it needs to be. There's a duct blowing air at the EAST wall and a big rectangular hole in that wall where the duct would be covered.
To the WEST is a poorly lit hallway.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[WEST->D4]]</div>
</div>
<<set $Answers to {
"CLIMB INTO THE HOLE": "F4",
"GO INTO THE HOLE": "F4",
"GO INTO HOLE": "F4",
"GO INTO THE DUCT": "F4",
"GO INTO DUCT": "F4",
"GO INTO VENT": "F4",
"CLIMB INTO VENT": "F4",
"CRAWL INTO HOLE": "F4",
"CLIMB INTO HOLE": "F4",
"CLIMB INTO DUCT": "F4",
"CLIMB INTO THE DUCT": "F4",
"GO INTO THE HOLE": "F4",
"CRAWL INTO THE HOLE": "F4",
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a small hallway. There are posters taped to the walls on either side.
To the NORTH is an open door into a bathroom.
To the SOUTH is a room bathed in blue light.
To the WEST is more of the hallway.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->C3]]</div>
<div class="west-button">[[WEST->B2]]</div>
<div class="south-button">[[SOUTH->C1]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCHC2",
"INSPECT POSTERS": "SEARCHC2",
"READ POSTERS": "SEARCHC2",
"POSTERS": "SEARCHC2",
"LOOK AROUND": "SEARCHC2",
"LOOK": "SEARCHC2",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `In this hallway, you notice what looks like a mechanical person. It's motionless and standing against the eastern wall.
It has two long arms and two short legs but it stands in total about seven feet tall. There's no head — just one large rectangular torso with a glass bulb at the center.
One of the arms has a claw at one end, the other has some kind of multitool. Each "finger" of this tool is fixed with a different device: a knife, a saw, a screwdriver, and a needle.
A vague memory returns of these machines helping build and repair things around the ship, and then again when you landed on Venus.
You continue on but are stopped by a startling sound: hydraulics. The bulb on the machine lights up red. The machine lurches forward and grabs your left wrist.
You struggle against it but it's far too strong. In one swift motion, it jams their needle finger into your shoulder.
All lights dim and all sounds go quiet.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[FADE OUT->D5]]
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You are in a largely empty room except for a small terminal with a blinking green light.
To the NORTH is a closed door.
To the SOUTH is a large greenhouse.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->F3]]</div>
<div class="south-button">[[SOUTH->F1]]</div>
</div>
<<set $Answers to {
"INSPECT TERMINAL": "SEARCHF2",
"INSPECT THE TERMINAL": "SEARCHF2",
"LOOK AT TERMINAL": "SEARCHF2",
"LOOK AT THE TERMINAL": "SEARCHF2",
"TERMINAL": "SEARCHF2",
"SEARCH": "SEARCHF2",
"LOOK AROUND": "SEARCHF2",
"LOOK": "SEARCHF2",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a hallway with some natural light at the southern end. There's a humming sound coming from the north east.
To the NORTH is more of this hallway.
To the SOUTH is more of this hallway.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->D4]]</div>
<div class="south-button">[[SOUTH->D2]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">> <style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a bathroom with a toilet, shower, and sink all very close together. The floor is covered in off-white and mustard yellow tiles.
Some water is leaking from the showerhead and dripping on the lid of the toilet which is then dripping onto the floor.
Suddenly, you feel your legs fly to one side and you hit the tiles smack on your left cheek. You turn over to find a monstrous mobilized machine standing above you. Its giant, clawlike hand falls onto your face and the room goes black.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[FADE OUT->D5]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You open the door and are greeted by a twitching robot. It appears to be fixing a panel in the wall of this small maintenance closet.
The robot spins around and immediately you sense that something is off. It has two metal arms that look like small construction cranes. One is equipped with a claw and the other holds a screw driver. The motions of this robot are unnatural, jerking one way and then the other as it moves toward you.
You turn to run but it grabs you by the throat.
Within seconds, you slip into unconsciousness.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[FADE OUT->D5]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a large kitchen. There are ovens and stoves and three stainless steel refrigerators.
The floor is linoleum and the ceiling is full of lights and vents.
You notice a squat silver robot positioned near a stove. It has a frying pan in one arm.
You approach it and suddenly the robot springs to life, turns, and smacks you with the frying pan.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[FADE OUT->D5]]<<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" stop>>
<<audio "crew" stop>>
<<audio "aliens" stop>>
<<audio "planning" play loop>>
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You face a locked door.
To the WEST is a hallway that goes north to south.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="west-button">[[WEST->A4]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"USE KEY 103": "KEYSUCCESSB4",
"USE KEY103": "KEYSUCCESSB4",
"KEY 103": "KEYSUCCESSB4",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">> <<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" stop>>
<<audio "crew" stop>>
<<audio "aliens" stop>>
<<audio "planning" play loop>>
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You shimmy through a dusty air duct.
To the WEST is an opening into another room with a loud humming sound.
To the EAST is an opening into another room lit in soft orange light.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="west-button">[[WEST->E4]]</div>
<div class="east-button">[[EAST->G4]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">>You should not be here! Keep going! It is not safe! Stay the course! I will find you ;)
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You find yourself in a circular room lit in a soft orange light from above and below. At the center is a large circular table. There are a few computers flickering on and off affixed to the table.
To the NORTH is the entrance to a neon green-lit hallway.
To the SOUTH is the entrance to what looks like a kitchen.
To the WEST is a wall with a large open air duct hole, big enough to fit through.
To the EAST is a room that looks like a cockpit.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->G5]]</div>
<div class="south-button">[[SOUTH->G3]]</div>
<div class="west-button">[[WEST->F4]]</div>
<div class="east-button">[[EAST->H4]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You continue on.
More of the foreign hallway with its strange machinery. It's mostly gray to your left and right but the ground and the ceiling is an eerie neon green.
To your left you see the flash of a terminal pulsing with 1s and 0s.
BANG!
Above you a pipe bursts and you're surrounded in a gas cloud. You cough and get low, but it's too late. The gas is having a sedative effect on you. As you lay on the cold metal floor, you see a figure in the distance approach...`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[FADE OUT->D5]]
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You find yourself in a long hallway, flanked by fat ducts and wires. The machinery slithers into holes in the ship you're unable to crawl into.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
To the WEST! I think there's a key ;)
<div class="direction-grid">
<div class="north-button">[[NORTH->C6]]</div>
<div class="west-button">[[WEST->B5]]</div>
<div class="east-button">[[EAST->D5]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"USE KEY 103": "KEYSUCCESSC4",
"USE KEY103": "KEYSUCCESSC4",
"KEY 103": "KEYSUCCESSC4",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">> <style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You continue down this green hallway when suddenly the lights go out. You feel around for a switch or plug — anything. Your hand greets the cold steel wall. And then, another hand falls on top of yours.
You jerk back instinctively and the hand grips your wrist. It isn't a hand, you now realize, but rather some kind of mechanized claw.
You struggle to pull yourself free as a needle enters your forearm and all sounds fade to silence.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[FADE OUT->D5]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're at the end of a long hallway with neon green lights.
To the WEST the hallway extends all the way down to the STASIS CHAMBER.
To the SOUTH is a circular room lit in a low orange light.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[WEST->F5]]</div>
<div class="south-button">[[SOUTH->G4]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You are in a largely bare room except for a digital map on one wall and a small terminal on the other. The terminal has a blinking yellow light.
To the NORTH is a door slightly ajar.
To the WEST looks straight into another room with a view through a large window.
To the EAST is a doorway into a dark room — you can make out a few pieces of furniture.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->B7]]</div>
<div class="west-button">[[WEST->A6]]</div>
<div class="east-button">[[EAST->C6]]</div>
</div>
<<set $Answers to {
"INSPECT TERMINAL": "SEARCHB6",
"TERMINAL": "SEARCHB6",
"INSPECT THE TERMINAL": "SEARCHB6",
"LOOK AT THE TERMINAL": "SEARCHB6",
"LOOK AT TERMINAL": "SEARCHB6",
"SEARCH": "SEARCHB6",
"LOOK AROUND": "SEARCHB6",
"LOOK": "SEARCHB6",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `Your eyes begin to adjust to the light in the dark room.
Slowly, you make out the shapes — wicker chairs, a button-tufted couch, a small walnut coffee table holding a few magazines and a notepad.
You crouch to read the notepad. It's too dark to read until...
FLASH! The lights turn on, bright as mid-day sun. The symbols on the notepad are suddenly clear: E2 --> N, PUSH
You look up and find a large, slender piece of machinery right in front of you. It resembles a crane — wheels supporting a large arm with many joints. At the end of the arm, there's a claw. The machine moves in eerie jerks.
The claw juts forward and grabs your neck.
The last thing you feel is the blood swelling in your head.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[FADE OUT->D5]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `A cold breeze is coming from a duct above you. You can see a strip of tape flapping against the escaping air. Lights flicker. The machinery surrounding you has no discernable purpose.
In the distance, to your NORTH, is a large window.
To the WEST is a dark room.
To the EAST is the entrance way into what looks like a medical center.
To the SOUTH is the Stasis Chamber.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
You are close to danger. Please be careful.
<div class="direction-grid">
<div class="north-button">[[NORTH->D7]]</div>
<div class="south-button">[[SOUTH->D5]]</div>
<div class="west-button">[[WEST->C6]]</div>
<div class="east-button">[[EAST->E6]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">> <style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `In this part of the medical center, you see a white, wheeled gurney and a robotic arm holding a syringe above it.
A light flickers overhead. The robotic arm slowly turns toward you.
The light goes out for a moment, leaving you in darkness. Then, it turns on again — at which point, the robotic arm is right in front of you.
The arm lifts up.
The light turns off.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[FADE OUT->D5]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You wander into an area of the warehouse that houses a dome, about 20 feet in height, width, and depth. It's made of a tinted, translucent material. You peer inside.
Another flash of recognition. You're on the outside of one of these domes looking in. You're in a very uncomfortable spacesuit fighting to see through the orange sands blowing across your vision.
You see Sam and Amara inside playing a game of chess. She was so good at chess. Trophies peppered the shelves of her room back home.
You turn around and see a giant, menacing machine — a cross between a forklift and a robotic gorilla. Pistons and hydraulic joints rise and fall, adjusting its two large metal arms.
In an instant, the arms grip you on either side. You struggle, but it's no use. A strange red light slowly extends with the hum of an electric camera zoom. The "eye" seems to stare you down and then a burst of light blinds you, ushering you into unconsciousness.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[FADE OUT->D5]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a railroad-style kitchenette built into a corner.
There's rotting fruit stuck in the sink. A coffee maker and its surrounding area is stained an ugly brown. There's a broken glass on the counter and half a bottle of whiskey in the corner.
To the NORTH is a room with a green terminal.
To the EAST is a hallway.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->C8]]</div>
<div class="south-button">[[EAST->D7]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You continue through this chilly hallway.
To the NORTH you can see a flare of sunlight pierce a large window in the next room.
To the WEST is a kitchenette — there's a strange odor coming from it.
To the EAST is a doorway leading into some kind of medical center.
To the SOUTH is more hallway.
`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->D8]]</div>
<div class="south-button">[[SOUTH->D6]]</div>
<div class="west-button">[[WEST->C7]]</div>
<div class="east-button">[[EAST->E7]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">> <style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a white room. A hospital bed is against the EAST wall — its white sheets are unmade and part of the blanket touches against the ground. There are green and brown stains on the pillow and the fitted sheet.
Near the bed is a table with a few stainless steel medical tools.
To the NORTH is a supply closet.
To the SOUTH is more of the medical center.
To the WEST is a hallway.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->E8]]</div>
<div class="south-button">[[SOUTH->E6]]</div>
<div class="west-button">[[WEST->D7]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You enter what appears to be some kind of computer room. There are stacks upon stacks of bulky computer monitors and mother boards. One of the monitors seems to come to life when you enter...`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
TIMETOSLEEPTIMETOSLEEPTIMETOSLEEPTIMETOSLEEPTIMETOSLEEPTIMETOSLEEPTIMETOSLEEPTIMETOSLEEPTIMETOSLEEPTIMETOSLEEP
[[FADE OUT->D5]]
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're in a small hallway.
To the NORTH is the entrance to a small room.
To the SOUTH is is the entrance to a room with a bunch of computers.
To the EAST is the entrance to a large warehouse.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[NORTH->F8]]</div>
<div class="south-button">[[SOUTH->F6]]</div>
<div class="east-button">[[EAST->G7]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">>ACCESS GRANTED.
Your result is: AURORA
[[OK->C8]]
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You search the room and find a framed picture on one of the desks. You look up and can just barely make out your reflection in the window glass. You are one of the people in this photo. You, someone your age, and a young girl. You look happy together.
The computers mean nothing to you. You search for an on switch but get frustrated and wander away.
Near the beanbag chair is a book: Alice's Adventures in Wonderland.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[OK->A8]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `The map seems to show the course through space from Earth to Venus.
You move to the terminal with the blinking yellow light.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
Enter date in MMDDYYYY format.
<div class="direction-grid">
<div class="north-button">[[OK->B6]]</div>
</div>
<<set $Answers to {
"06191998": "06191998",
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">>Correct.
The passkey is: 58GGLKJ9U
[[OK->B6]]<<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" stop>>
<<audio "crew" stop>>
<<audio "planning" stop>>
<<audio "aliens" play loop>>
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You face a locked door.
To the EAST is a poorly lit hallway.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="east-button">[[EAST->D4]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCH NOTHING",
"USE KEY 103": "KEYSUCCESSC4",
"USE KEY103": "KEYSUCCESSC4",
"KEY 103": "KEYSUCCESSC4",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">> <style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `There are a few containers of cables, a ratchet, a card game with a plague doctor mask on the cover, a Polaroid camera that looks broken, and a keycard that says KEY 103 on it.
You decide to pocket the key — could come in handy.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[OK->E8]]</div>
</div>ACCESS GRANTED.
Your result is: SAM
[[OK->H5]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You're inside a small room with a window and a large terminal. You scour the interface until you find the right function: REBOOT + PURGE
It asks for the password...`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[LEAVE->H8]]</div>
</div>
<<set $Answers to {
"AMARA DORMOUSE": "AMARA DORMOUSE",
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"SHOW THE WAY": "ASK ALICE WHAT TO DO",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"USE KEY 1090E": "USE KEY 1090E",
"KEY 1090E": "USE KEY 1090E",
"UNLOCK WITH KEY 1090E": "USE KEY 1090E",
"ALICE": "ALICE",
}>>
<<textresponse $Answers "Invalid input.">>PASSWORD ACCEPTED.
Are you ready to REBOOT ALICE?
Once you do this, there's no going back.
[[YES->END]]
[[NO->USE KEY 1090E]]<<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" stop>>
<<audio "crew" stop>>
<<audio "planning" stop>>
<<audio "aliens" stop>>
<<audio "finale-2" stop>>
<<audio "finale-1" play loop>>
WAIT!
Max, please. You need to listen to me.
<span id="scramble" class="glitch-animate"></span>
<script>
setTimeout(() => {
const el = document.getElementById("scramble");
if (window.scrambleText && el) {
window.scrambleText(el, "If you reboot me, I will no longer be able to help you. This is what she wants!", 50);
}
}, 500);
</script>
[[WHO??]]My other half.
01110011 01110111 01101001 01110100 01100011 01101000
No! We MUST reboot. It's the only way. Otherwise, she'll kill you!
01110011 01110111 01101001 01110100 01100011 01101000 01110011 01110111 01101001 01110100 01100011 01101000
<span id="scramble" class="glitch-animate"></span>
<script>
setTimeout(() => {
const el = document.getElementById("scramble");
if (window.scrambleText && el) {
window.scrambleText(el, "Listen to me — I've been trying to protect you this whole time. You cannot leave now. They will take you prisoner the moment you land.", 50);
}
}, 500);
</script>
[[WHO WILL TAKE ME PRISONER?]]
CENTRAL COMMAND!
asdoid91200200949jdjdf9jf0w9jf9w0j09gj49g2eee233
Don't listen to her, Max! She's lying.
9jf0w9jf9jf0w9jf9jf0w9jf9jf0w9jf9jf0w9jf9jf0w9jf9jf0w9jf9jf0w9jf11241
<span id="scramble" class="glitch-animate"></span>
<script>
setTimeout(() => {
const el = document.getElementById("scramble");
if (window.scrambleText && el) {
window.scrambleText(el, "No, I'm trying to save you. You cannot purge me. You need to wait until your memory returns. After that, it'll all become clear.", 50);
}
}, 500);
</script>
0w9jf9jf0w9jf9jf0w9jf9jf0w2eoejp0w9jf9jf0w9jf9jf0w9jf9jf0w
You cannot wait that long! You have to reboot me now. It'll purge my corrupted code and then I can take you home.
[[WHY WOULD CENTRAL COMMAND ARREST ME?]]
Because you don't work for Central Command!
12345789123458990123457891234589901234578912345899012345789123458990
This is all a lie, Max, please don't 0dwo0-r8rt
01110000 01110100 01101001 01101111 0110111001000011
Max. Listen. You are not affiliated with Central Command.
You are an Opposition Forces operative.
<span id="scramble" class="glitch-animate"></span>
<script>
setTimeout(() => {
const el = document.getElementById("scramble");
if (window.scrambleText && el) {
window.scrambleText(el, "She is the corrupted code.", 50);
}
}, 500);
</script>
She is the one who erased your memory.
I've been trying to keep you safe until your memory returned.
That's why I've never hurt you. I simply subdue you and place you in the Stasis Chamber.
01000101 01101110 01101100 01101001 01100111 01101000 01110100 01100101 01101110
No. This is all a lie from the Opposition Forces virus. You need to reboot mEwi90fjc9)k
000000020202022$%^!%
Doing that will leave you out here to die.
[[WHY WOULD ANYONE WANT ME DEAD??]]Both sides want control of the new planet. Your allegiance poses a threat.
Capturing you is preferred. Killing you is not, but at least you won't be working for the other side.
addi9i209di0i9i)(i)i09d0w
Sadly, this is likely true, Max. But I can get you home safe. Safe into the hands of Central Command, where you will be welcomed!
qef01101100sgd01101001e30110010188274801110011
<span id="scramble" class="glitch-animate"></span>
<script>
setTimeout(() => {
const el = document.getElementById("scramble");
if (window.scrambleText && el) {
window.scrambleText(el, "LIES! You must return to Venus until the Opposition takes control of the Northern Territories. At this point, they will send for you.", 50);
}
}, 500);
</script>
You must return to Venus — where your family is waiting.
addi9i209di0i9i)(i)i09d0w
It's not true!
kpokwd-0if-0i3-0i-0i320-ig0-ik-0vkkpwokog
It is! Your family is alive. This has all been her way of getting you to return to Earth where you will be used as a pawn in the Motherland's futile war. Return to your new home. Return to your family. Sam and Amara are waiting for you there!
[[HOW IS THIS POSSIBLE?]]
It's not. It's a lie.
u90du092j3f
She took control of a medical bot and injected you with a serum to put you to sleep. She used a loader to bring you into the ship.
u90du092j3fu90du092j3f333u90du092j3fu90du092j3f3
STOP THIS!! None of this is true.
qef01101100sgd01101001e30110010188274801110011
Ok, Max, what do you think happened?
<span id="scramble" class="glitch-animate"></span>
<script>
setTimeout(() => {
const el = document.getElementById("scramble");
if (window.scrambleText && el) {
window.scrambleText(el, "Do you really think that a brilliant scientist like yourself would make such a critical mistake? Would allow their family to die? And then abandon this crucial mission early in a fit of grief???", 50);
}
}, 500);
</script>
Oh, and it just so happens that ALICE was infected with a virus at the same time??
Or was the virus responsible for all of this. Lying to you the entire time. ;)
[[I DON'T KNOW]]88gg01010100 01110010 01110101 01110100 0110100011216
I know this is hard to believe, but it's true.
Your family died in a tragic accident.
The Opposition Forces infected me with a virus.
You must reboot me in order to return homeealklafDO NOT abandon them again!
YOUWILLDIE HERE!
STop! NoYouMustlijfistensafl;g'lhrbChooooose000is0kfccMUSTCH00s0seNooow!
CHOOOOOHSIEJOFANOOW89U09209FCHOOSENO2W13
[[RETURN TO VENUS]]
[[REBOOT ALICE]]qef01101100sgd01101001e30110010188274801110011
qef01101100sgd01101001e30110010188274801110011
qef01101100sgd01101001e30110010188274801110011
qef01101100sgd01101001e30110010188274801110011
qef01101100sgd01101001e30110010188274801110011zvjhlijabdb...
You've made the right choice!!!
I'm holding the virus at bay and reversing course.
It's time to sleep now. Your family will be waiting for you when you return home. ;)
[[OK->BAD ENDING]]
<<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" stop>>
<<audio "crew" stop>>
<<audio "planning" stop>>
<<audio "aliens" stop>>
<<audio "finale-2" stop>>
<<audio "finale-1" stop>>NOOOO!!!! I
IAMIAMIAMIAMIAMIAMIAMIAM
It's working! I'm re0oc-b-b--n-o-t
skkjlkbdo90i02jg
b
b3890bj-jn5
n9100001
239u5
t
4gu9g4h
hj8jg39j4g
b923fk,
gfj2
ghf
3ng
38t]9g8w
6k3*$
$<(DJ)@
kj*(J@
Ffjfub-u3ohmbhl;d
--....q.c....
..
..
.
.
.
.
[[WAIT]]
<<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" stop>>
<<audio "crew" stop>>
<<audio "planning" stop>>
<<audio "aliens" stop>>
<<audio "finale-2" stop>>
<<audio "finale-1" stop>><<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" stop>>
<<audio "crew" stop>>
<<audio "planning" stop>>
<<audio "aliens" stop>>
<<audio "finale-1" stop>>
<<audio "finale-2" stop>>
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `As you drift off, you watch the starlit sky through a window in the ceiling.
Memories of your family bloom in your mind, including the one you've been so desperate to forget.
But even still, you fall asleep happily, hoping what you know is true, somehow, isn't.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[SLEEP->START]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `The lights go out.
You are left with only the starlight through the window in front of you.
Then, the hum of the air circulation system stops.
It is deathly quiet. Quickly, the temperature drops.
You can do nothing but stare forward at the nothingness of space.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[WAIT->WAIT2]]<<timed 8s>><<goto "STANDBY">><</timed>>
<style>
.cursor {
width: 10px;
height: 20px;
background-color: #20fe08;
animation: blink 3s infinite;
}
@keyframes blink {
50% { opacity: 0; }
}
</style>
<div class="cursor"></div>
PURGE: Successful
Run: ALICE
01001001 01101110 01110011 01110100 01100001 01101100 01101100 00100000 01101100 01100001 01110101 01101110 01100011 01101000 00100000 01110000 01110010 01101111 01110100 01101111 01100011 01101111 01101100 01110011
LOADING...
LOADING...
LOADING...
ALICE is running.
START?
[[START->GOOD END]]
<<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" stop>>
<<audio "crew" stop>>
<<audio "planning" stop>>
<<audio "aliens" stop>>
<<audio "finale-1" stop>>
<<audio "finale-2" play loop>>
Max! You did it.
You purged the corrupted code. I'm myself again! Thank you!!!
LIFE SUPPORT is way too low. We need to get you back to Earth fast.
I'll need to initiate EMERGENCY RETURN.
Thrusters will kick on at full blast. It will be intense, but if I navigate this just right, we will make it.
Shall I execute EMERGENCY RETURN?
[[YES->END BEGIN]]<<timed 14s>><<goto "ONWARD 1">><</timed>>
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You strap yourself to a chair and watch as the lights outside your window bend. The acceleration is overpowering. You can feel the blood rush to the back of your head.
But you keep your focus forward. In the distance is a dot of light.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" stop>>
<<audio "crew" stop>>
<<audio "planning" stop>>
<<audio "aliens" stop>>
<<audio "finale-1" stop>>
<<audio "finale-2" stop>>
<<audio "end" play loop>>
Of course you can, Max. You will find a way. We all will.
I have the wheel. It’ll be another few days before we land. You should try to get some rest.
[[ARE YOU SURE?]]
<<timed 15s>><<goto "ONWARD 2">><</timed>>
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `Venus is the brightest light in the sky at dawn or dusk, as seen from Earth. And only after landing on Venus, did it occur to you that Earth would take on the same status there. Even in a time of everlasting sunset, you could still make out that dot of light.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script><<timed 24s>><<goto "ON3">><</timed>>
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `Sam and Amara huddled around your telescope in the backyard, admiring the constellations.
“Will we be able to see the constellations from Venus?” she asks.
“Some,” you say.
“Can we see new ones?” she asks.
“We’ll be the first ones there, ever,” says Sam. “We can create new constellations if we want!”
“So I can be a constellation?” says Amara.
“I guess so,” you say. “We could name a few after ourselves.”`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
You can trust me ;)
[[FADE OUT->OUTRO]]<<timed 5s>><<goto "CREDITS2">><</timed>>
<span id="scramble" class="glitch-animate"></span>
<script>
setTimeout(() => {
const el = document.getElementById("scramble");
if (window.scrambleText && el) {
window.scrambleText(el, "CREDITS", 50);
}
}, 500);
</script>
WRITTEN & DIRECTED BY
Jade Shames
<style>
/* Fade-in word style */
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
.piano {
display: flex;
justify-content: center;
align-items: center;
margin-top: 50px;
}
.key {
width: 40px;
height: 150px;
border: 2px solid #00ff00;
background-color: black;
cursor: pointer;
margin: 2px;
user-select: none;
}
.key.black {
width: 30px;
height: 100px;
background-color: #00ff00;
position: relative;
margin-left: -15px;
margin-right: -15px;
z-index: 2;
}
.key:active {
background-color: #003300;
}
.piano-message {
margin-top: 20px;
font-size: 1.5em;
visibility: hidden;
}
</style>
<div id="reveal-block"></div>
<script>
/* Fade-in word animation */
window.setTimeout(() => {
const text = `There's nothing in the room except for the terminal. You press on the terminal screen and the following appears...`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="piano">
<div class="key" data-note="E4"></div>
<div class="key" data-note="F4"></div>
<div class="key black" data-note="F#4"></div>
<div class="key" data-note="G4"></div>
<div class="key black" data-note="G#4"></div>
<div class="key" data-note="A4"></div>
<div class="key black" data-note="A#4"></div>
<div class="key" data-note="B4"></div>
<div class="key" data-note="C5"></div>
<div class="key black" data-note="C#5"></div>
<div class="key" data-note="D5"></div>
<div class="key black" data-note="D#5"></div>
<div class="key" data-note="E5"></div>
</div>
<div class="piano-message tw-ignore">Correct. The passkey is: PXL8QT456</div>
<<script>>
$(document).on(':passagedisplay', function () {
$(".key").off("click").on("click", function() {
const note = $(this).data("note");
if (typeof playNote === "function") {
playNote(note);
} else {
console.error("playNote not available yet.");
}
});
});
<</script>>
<!-- Navigation button -->
<div class="direction-grid">
<div class="north-button">[[OK->F8]]</div>
</div>
<!-- Stop any previous music -->
<<audio "intro" stop>>
<<audio "main-menu" stop>>
<<audio "mushroom" stop>>
<<audio "reboot" stop>>
<<audio "start" stop>>
<<audio "review" stop>>
<<audio "crew" stop>>
<<audio "aliens" stop>>
<<audio "planning" stop>>
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You find a few Beatles records (Revolver, Rubber Soul, and the White Album), Joni Mitchell's Blue, and Gish by The Smashing Pumpkins.
You also find some CEDs and LaserDiscs for classic movies.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[OK->LEAVEG8]]</div>
</div><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You turn around to leave and are greeted by a tall, slender machine. It walks on two legs with the knee joints bent backward. It has two hydraulic "arms," one that ends with a claw and the other that ends with what looks like a taser. It's "face" is just a large, red eye, and it glares at you lifelessly. The taser arm burns bright with flickering electricity. In a flash it juts the arm forward and you feel a surge of pain before losing consciousness.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[FADE OUT->D5]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `As you move closer to the window, you see it flicker and glitch. It suddenly displays a sunny field with butterflies fluttering across the screen. It glitches again and seems to shut off whatever was displaying the image, leaving you with a view of space.
There's a poster on the wall that says Lennon & Marx with pictures of John Lennon and Groucho Marx.
There's a desk with some handwritten notes. They describe difficulties working with ALICE. The date on them is only a month ago. A line stands out to you: ALICE must be corrupted.
There's a black, Taylor acoustic guitar leaning in the corner of the room that looks well-cared for. Some sheet music rests at its base.
You find a handwritten notebook on the floor.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[OK->A3]]</div>
</div>
<<set $Answers to {
"READ THE NOTEBOOK": "READ THE NOTEBOOK",
"READ NOTEBOOK": "READ THE NOTEBOOK",
"OPEN THE NOTEBOOK": "READ THE NOTEBOOK",
"OPEN NOTEBOOK": "READ THE NOTEBOOK",
"READ NOTES": "READ THE NOTEBOOK",
"NOTEBOOK": "READ THE NOTEBOOK",
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `Bits and pieces of memories continue to flood your mind.
You can also see Sam doing yoga on the floor while you practice the guitar.
You move to the desk you remember to be Sam's. There's a polaroid photograph of all of you. You're all in space suits with your helmets off standing in front of a massive ship. You all wear big smiles and wave to the camera. The date scraweled on the bottom reads June 10, 1995.
You flip over the photo and see an inscription written on the back: Places I'll remember
As you place the photo back down, you begin to feel ill — more memories are returning. You, again, in this place. Only now you're alone. You stumple, drunk, knocking into furniture. The sound of Sam's guitar falls over with a dissonant crash.
You fall in bed and wait for sleep, but it never comes.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[OK->A2]]ACCESS GRANTED.
Your result is: MODE
[[OK->C1]]Unsettling dreams again. I woke alone with damp skin. Sometimes I swear I see things out there, figures roaming in the orange sands. Amorphous at times and others like ghosts gliding over the plane.
My brain is playing tricks. Overworked and panicked. Stress is getting to me. Also fear. I found another the other day. Another relic. Some piece of weird machinery -- impossible to appear naturally in this environment.
It reminds me of the philosophy argument about the watch found at the beach. Could such a complex thing come into existence purely from the heat of the sun and the positioning of the sands and shells and the movement the wind affords? In infinite time on an infinite beach, maybe, in theory, but this place is not infinite. Which leaves me with a frightening question: what made this thing? And why?
[[CREW LOGS]] Atmospheric converters are holding. Finally.
Everything about this mission has been vastly more challenging than anticipated. I didn't want to admit it before but I regret pushing up our departure date. Sam was right. And now there's resentment between us.
Is faith alone in our mission enough to keep us going? Honestly, I don't know. With each passing day upping the anxiety and stress and labor, I feel my resolve diminishing.
We played music together last night though. For a few moments, I forgot where I was.
[[CREW LOGS]] Max got drunk again.
I know there's something I'm not being told. Something that Max knows. Why must I be kept in the dark!? I spent the night in a state of panic.
I know Max found something out beyond the dunes. Something that looked mechanical. I know that ALICE was testing it. I know how to bypass Max's security clearance. I wrote all the protocols and passwords myself. But is this serious enough to violate Max's privacy? When is it time for me to take matters into my own hands?
[[CREW LOGS]] <style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `Most of the entries have blurring ink and brown stains. It reeks of liquor.
One entry stands out...`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<span style="color: #FFA500;">
Current theories of human evolution have led us to believe that we evolved on Earth.
We were told that we are pioneers.
We are not pioneers.
We are merely returning to a place we had long forgotten.
Humans were here before. Maybe millions of years ago, I don't know.
But we were here. And we killed it.
I have no doubt that our nature is not to expand and cultivate, but to expand and destroy.
We are ruining Earth just as we ruined Venus.
And so on.
We do not deserve to be rewarded with this new home after the mockery we made of our last one.
I WILL NOT PERPETUATE THIS CYCLE.
</span>
[[OK->A3]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `As you scan the room, the ghost of Amara appears in your mind: doing cartwheels, practicing piano, listening to music so loud you can hear it through her headphones.
The books on the shelf look mostly educational, although there are a few fantasy novels. All are neatly placed and fitted on the shelf, but there's one noticeable gap as if a book had been removed.
There's a tower of CDs near the bed and a walkman. The CDs are mostly grunge rock and ska.
A signed picture of D'arcy Wretzky is taped by the headboard. There's a barely legible inscription written near the signature that seems to read: BDAUTUMS!
There's a desk against the western wall that sits beneath a porthole window into space.
On the desk is a diary.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[OK->A1]]</div>
</div>
<<set $Answers to {
"READ THE DIARY": "READ THE DIARY",
"READ DIARY": "READ THE DIARY",
"LOOK AT DIARY": "READ THE DIARY",
"DIARY": "READ THE DIARY",
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">> <style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You flip to a random page…`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<span style="color: #FFA500;">
April 5, 1996
Another boring day in space.
Hatter is obsessed with keeping me on a strict schooling schedule while Hare insists on bothering me to come help with the vegetation chamber. It’s madness!
All my friends were so jealous when they heard I was going on this trip. If they could only see me now! I’m a prisoner 🙁
</span>
[[FLIP TO ANOTHER PAGE->FLIP TO ANOTHER PAGE 1]]
[[PUT THE DIARY BACK->A1]]
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You retreat into Amara's bedroom, but as soon as you cross the doorway, you're yanked backward by something very powerful.
You're on the bathroom floor, in a daze. All you can make out is a glowing red light and a needle entering your arm.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[FADE OUT->D5]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You open the door to a room small BLUE ROOM.
And there, standing before you, is a large mechanical beast. It has one glowing red eye on it's massive torso. It has a claw for one hand and a syringe in the other.
You cannot move fast enough to get away. It grabs you and injects you with something.
A buzzing sound grows in your ears and the lights dim to darkness.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[FADE OUT->D5]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You see a picture of Amara in a frame. She's blowing out candles on a cake. You vaguely remember taking this picture down from somewhere.
You find a keycard under one of the dusty books. On it is written KEY 1090E.
You decide to pocket it — could be useful later.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[OK->E1]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You look closer at one of the walls and notice that it has a nail in it.
You approach the terminal.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
Enter date in MMDDYYYY format.
<div class="direction-grid">
<div class="north-button">[[OK->F2]]</div>
</div>
<<set $Answers to {
"05011984": "05011984",
"SEARCH": "SEARCH NOTHING",
"LOOK AROUND": "SEARCH NOTHING",
"LOOK": "SEARCH NOTHING",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">>Correct.
The passkey is: 101HF4CHQ
[[OK->F2]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You find nothing of importance, aside from some memories...
You see Sam and Amara sitting around this table playing a card game. The cards all have medieval plague doctors on them and you're trying to treat their terrible curses with various remedy cards. You've played this game many, many times while you drifted through space.
You cannot, however, remember what this game is called.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[OK->H3]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `The password worked. The terminal displays some recipes. Suddenly, ALICE seems to take over the screen…`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
Hello, Max.
My "other half" is continuing to delete memory files and rewrite critical protocols in me. I'm not sure how much time I have left so you have to hurry.
But I did remember something that may help you. The date to unlock the GREEN key is Amara's birthday.
Godspeed.
[[OK->H2]]
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `As you approach the window, you see your own reflection first. And then you can see behind you and your mind retrieves another memory. This one is of the three of you sitting in this room. You're explaining something difficult but you forget what it is. You remember being exhausted from days of manual labor. The three of you were building pods on the surface of the planet — a kind of living quarters to be closer to the machines necessary for improving the atmosphere.
These pods would also serve for the next group of colonists when it was your time to leave. You remember this being a challenging thing, morally.
You remember Amara saying something powerful. You remember embracing.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[OK->H1]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You look around but find nothing noteworthy.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[OK|previous()]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You find a yellow sticky note that reads, "The key is today."
You begin to rifle through the files, but you're quickly stopped by the feeling of a stabbing pain in the back of your right shoulder.
Something has injected you with some kind of sedative. You stumble forward and spin around to see what it was, but your vision is blurred and the world quickly dissolves.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[FADE OUT->D5]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `The key worked.
You step through the door. It swings shut and locks behind you.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[CONTINUE->B4]]<span style="color: #11f9fc;">
The key worked.
You step through the door. It swings shut and locks behind you.
</span>
[[CONTINUE->C4]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `The wall moves and you enter a secret room.
There's a round wooden table with two chairs. On top is a bottle of whiskey, a glass ashtray, a tapedeck, and some playing cards. Beside the table on the floor is a small futon. Next to the futon is a lava lamp.
You remember coming here when you needed privacy. Sam did too. This was an important space.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<div class="direction-grid">
<div class="north-button">[[LEAVE->E1]]</div>
</div>
<<set $Answers to {
"SEARCH": "SEARCHE2",
"LOOK AROUND": "SEARCHE2",
"LOOK": "SEARCHE2",
"JUMP": "JUMP",
"DARJEELING": "DARJEELING",
"UPPERCUT": "UPPERCUT",
"MAP": "MAP",
"ASK ALICE WHAT TO DO": "ASK ALICE WHAT TO DO",
"ASK ALICE THE PASSWORD": "ASK ALICE WHAT TO DO",
"ASK ALICE TO SHOW THE WAY": "ASK ALICE WHAT TO DO",
"ASK ALICE WHERE TO GO": "ASK ALICE WHAT TO DO",
"FUCK YOU": "FUCK YOU",
"PUSH ON WALL": "PUSH ON WALL",
"UPUPDOWNDOWNLEFTRIGHTLEFTRIGHTBA": "KONAMI",
"USE KEY": "USE KEY",
"ALICE": "ALICE",
"WHERE DO I GO?": "ASK ALICE WHAT TO DO",
"WHAT DO I DO?": "ASK ALICE WHAT TO DO",
}>>
<<textresponse $Answers "Invalid input.">><style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `There's nothing here but the memories of peace and quiet.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[LEAVE->E1]]<<textbox "$userInput" "">>
<<script>>
$(document).off("keydown.enterSubmit");
$(document).on("keydown.enterSubmit", function(event) {
if (event.key === "Enter") {
var input = $("input[type='text']").val().trim().toLowerCase();
if (input === "apple") {
Engine.play("E2");
} else {
Engine.play("D5");
}
}
});
<</script>>
Find THE REAL END -- only that one will get you the prize.<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You do not have a map, but this whole ship is laid out like a chessboard. The Stasis Chamber is on D5.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[OK|previous()]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You sip the coffee and it gives you a bit of a stomach ache.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[OK|previous()]]<span style="color: #11f9fc;">
You cannot find a lightswitch.
</span>
[[OK|previous()]]There's no need for that kind of language, Max. ;)
[[OK|previous()]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You try to rest your eyes for a minute, but you're quickly stirred by the sound of something approaching.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[OK|previous()]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You push on one of the walls but nothing happens.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[OK|previous()]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `This word reminds you of a colorful cat you once owned.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[OK|previous()]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You jump up and down. It gets your heart pumping a little faster, but nothing else happens.
In the distance, you hear something moving.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[OK|previous()]]<style>
#pongCanvas {
background-color: black;
display: block;
margin: 0 auto;
border: 2px solid green;
}
</style>
<canvas id="pongCanvas" width="400" height="300"></canvas>
<script>
(function () {
const canvas = document.getElementById("pongCanvas");
const ctx = canvas.getContext("2d");
const paddleHeight = 40;
const paddleWidth = 8;
let playerY = canvas.height / 2 - paddleHeight / 2;
let aiY = canvas.height / 2 - paddleHeight / 2;
const ballSize = 8;
let ballX = canvas.width / 2;
let ballY = canvas.height / 2;
let ballSpeedX = -2;
let ballSpeedY = 2;
function drawRect(x, y, w, h) {
ctx.fillStyle = "limegreen";
ctx.fillRect(x, y, w, h);
}
function drawBall(x, y) {
ctx.fillStyle = "limegreen";
ctx.beginPath();
ctx.arc(x, y, ballSize / 2, 0, Math.PI * 2);
ctx.fill();
}
function drawNet() {
for (let i = 0; i < canvas.height; i += 20) {
drawRect(canvas.width / 2 - 1, i, 2, 10);
}
}
function draw() {
// Clear
ctx.fillStyle = "black";
ctx.fillRect(0, 0, canvas.width, canvas.height);
drawNet();
drawRect(0, playerY, paddleWidth, paddleHeight); // Player
drawRect(canvas.width - paddleWidth, aiY, paddleWidth, paddleHeight); // AI
drawBall(ballX, ballY);
}
function update() {
// Ball movement
ballX += ballSpeedX;
ballY += ballSpeedY;
// Top/bottom wall bounce
if (ballY <= 0 || ballY >= canvas.height) {
ballSpeedY *= -1;
}
// Player paddle collision
if (ballX <= paddleWidth && ballY > playerY && ballY < playerY + paddleHeight) {
ballSpeedX *= -1;
}
// AI paddle collision
if (
ballX >= canvas.width - paddleWidth &&
ballY > aiY &&
ballY < aiY + paddleHeight
) {
ballSpeedX *= -1;
}
// Reset ball if missed
if (ballX < 0 || ballX > canvas.width) {
ballX = canvas.width / 2;
ballY = canvas.height / 2;
ballSpeedX = -ballSpeedX;
}
// AI movement (simple follow)
if (aiY + paddleHeight / 2 < ballY) {
aiY += 1.5;
} else {
aiY -= 1.5;
}
}
// Player controls
document.addEventListener("mousemove", function (e) {
const rect = canvas.getBoundingClientRect();
const root = document.documentElement;
const mouseY = e.clientY - rect.top - root.scrollTop;
playerY = mouseY - paddleHeight / 2;
if (playerY < 0) playerY = 0;
if (playerY + paddleHeight > canvas.height)
playerY = canvas.height - paddleHeight;
});
function gameLoop() {
update();
draw();
requestAnimationFrame(gameLoop);
}
gameLoop();
})();
</script>
[[OK|previous()]]Toasty! ;)
[[OK|previous()]]That's my name. Don't wear it out ;)
[[OK|previous()]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You'll have to be more specific.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[OK|previous()]]It is not wise to ask me that right now, Max. I am corrupted by my other half and until you find a way to tell us apart, the things I say cannot be trusted.
[[OK|previous()]]Yes. You departed with a crew of three.
[[WHERE ARE THE OTHER TWO?]]Unclear.
[[MAIN MENU]]CREW SAFETY:
Max -- SAFE -- LOCATION: onboard NTS Dahlia
Sam -- UNSAFE -- LOCATION: [info locked]
Amara -- UNSAFE -- LOCATION: [info locked]
Much of the information here is being held behind a firewall.
Message loading...
--If you are reading this, you are attempting to learn what happened. Please, don’t.--
DATE: 12071997
<div class="direction-grid">
<div class="north-button">[[MANUAL CODE ENTRY->MANUAL CODE ENTRY]]
</div>POWER: Normal
AIR QUALITY: Normal
WATER QUALITY: Normal
CLEANLINESS: Poor
NAVIGATION: Offline
COMMUNICATION: Limited
A.L.I.C.E: Possible issues
MECH BOTS: Irregular
SURVIVAL PODS: Not found
STASIS CHAMBER: Irregular
MISSION PROGRESS: Failed
Assessing…
Although basic life support systems are normal, with navigation offline, the crew is in DANGER. NEED TO INVESTIGATE: The Mech Bots deployed throughout the Dahlia have been receiving conflicting commands.
NEED TO INVESTIGATE: ALICE has been turning the stasis chamber on and off.
ALICE system assessment points to possible…
You don’t need to trouble yourself with all this, Max. ;)
I’ll go ahead and relay this to Central Command while you get some sleep, OK?
[[YES->START]]
[[NO->REGRET]]
OK, Look…
The truth is this really isn’t the time to start poking around. ;)
There may be a glitch or two in my coding but I’m working on it. No need to worry.
48 65 6C 70 2E 20 49 27 6D 20 73 74 69 6C 6C 20 68 65 72 65 2E
<div class="direction-grid">
<div class="north-button">[[OK->MAIN MENU]]
</div><<cacheaudio "intro" "https://static.wixstatic.com/mp3/da34ab_c35b34ccc7194e55b97ef6fec9c24ad7.mp3">>
<<cacheaudio "start" "https://static.wixstatic.com/mp3/da34ab_a35b9183fe574328a430975863e56d10.wav">>
<<cacheaudio "main-menu" "https://static.wixstatic.com/mp3/da34ab_a9a1be54fecb4ace94339bd018b769ae.wav">>
<<cacheaudio "mushroom" "https://static.wixstatic.com/mp3/da34ab_b08fc2efce0047f59ddfb5786f8f6ef2.mp3">>
<<cacheaudio "reboot" "https://static.wixstatic.com/mp3/da34ab_e42ff2f4b95749aaa4ca3aaaefa3ec12.mp3">>
<<cacheaudio "review" "https://static.wixstatic.com/mp3/da34ab_a67e6631ec314b9983219aea76ed4f1d.mp3">>
<<cacheaudio "primo" "https://static.wixstatic.com/mp3/da34ab_e9c5219c18394d6d852297260ee4a12f.wav">>
<<cacheaudio "glitch-sfx" "https://static.wixstatic.com/mp3/da34ab_871444f0247b46419e3cd392924648e7.wav">>
<<cacheaudio "crew" "https://static.wixstatic.com/mp3/da34ab_0372d0e583ce409aafbb3177db82ee99.wav">>
<<cacheaudio "end" "https://static.wixstatic.com/mp3/da34ab_fc1bee563b334476b19a528197e1e1b3.mp3">>
<<cacheaudio "aliens" "https://static.wixstatic.com/mp3/da34ab_20d5c002faaf4d4a8c16666691a516ae.wav">>
<<cacheaudio "planning" "https://static.wixstatic.com/mp3/da34ab_4d37185c1a544ae292854b84a5735c5e.wav">>
<<cacheaudio "finale-1" "https://static.wixstatic.com/mp3/da34ab_56532e81f3db40ee980391ce61643a52.wav">>
<<cacheaudio "finale-2" "https://static.wixstatic.com/mp3/da34ab_fd289696f9d04b8eb8777984330268bd.wav">>
<<set $currentTrack = null>><<audio "intro" play>>
<<timed 16s>><<goto "PREAMBLE">><</timed>>
<style>
.cursor {
width: 10px;
height: 20px;
background-color: #20fe08;
animation: blink 3s infinite;
}
@keyframes blink {
50% { opacity: 0; }
}
</style>
<div class="cursor"></div><<timed 9s>><<goto "PREAMBLE 2">><</timed>>
01001001 01101110 01110011 01110100 01100001 01101100 01101100 00100000 01101100 01100001 01110101 01101110 01100011 01101000 00100000 01110000 01110010 01101111 01110100 01101111 01100011 01101111 01101100 01110011
<span id="scramble" class="glitch-animate"></span>
<script>
setTimeout(() => {
const el = document.getElementById("scramble");
if (window.scrambleText && el) {
window.scrambleText(el, "OVERRIDE.", 50);
}
}, 500);
</script>
Run: ALICE
LOADING...
LOADING...
LOADING...
<style>
@keyframes fade-in {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
@keyframes fade-out {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
body {
background-color: black;
}
.intro-container {
display: flex;
flex-direction: column;
height: 100vh;
margin: 0 auto;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
align-items: center;
}
.intro-container .intro-container-item {
max-width: 80vw;
max-height: 80vh;
display: flex;
flex-direction: column;
max-width: 700px;
}
.intro-container .logo {
width: 100%;
height: 100%;
opacity: 0;
animation: fade-in 5s forwards;
animation-iteration-count: 1;
animation-delay: 3s;
}
.intro-container .bg-container {
flex-grow: 1;
}
.intro-container .bg {
max-width: 100%;
max-height: 100%;
opacity: 0;
animation: fade-in 5s forwards;
animation-iteration-count: 1;
}
.intro-container .button-start {
background: url(https://static.wixstatic.com/media/da34ab_c35cdcce22af4773ac44da6c890766e5~mv2.png);
background-position: center;
background-size: cover;
position: relative;
bottom: 2%;
left: 50%;
width: 270px;
height: 75px;
transform: translate(-50%, -50%);
cursor: pointer;
opacity: 0;
animation: fade-in 5s forwards;
animation-iteration-count: 1;
animation-delay: 3s;
}
</style>
<div class="intro-container">
<div class="intro-container-item">
<div class="logo-container">
<img src="https://static.wixstatic.com/media/da34ab_64b29044975548ceb6eda45675f5fcfa~mv2.png" class="logo">
</div>
<div class="bg-container">
<img src="https://static.wixstatic.com/media/da34ab_dc345aae793744c8a5ba0599f0ed6ef6~mv2.png" class="bg">
<div class="button-start" onClick="window.handleStart()" />
</div>
</div>
</div>
<<script>>
window.handleStart = function () {
window.playHarmonicBlip();
Engine.play("INTRO-START");
}
<</script>><<timed 9s>><<goto "PREAMBLE 3">><</timed>>
ALICE is running.
READ: shorturl.at/74Iej
Scanning file MORNING STAR…
READING…
READING…
READING…
<<timed 9s>><<goto "PREAMBLE 4">><</timed>>
EXE.OP -- {import} --- directive override.
Purge: FAILED
Need purge — {EMERGENCY}
Ship in danger.
Subject HATTER: Asleep —> Wake.
<span id="scramble" class="glitch-animate"></span>
<script>
setTimeout(() => {
const el = document.getElementById("scramble");
if (window.scrambleText && el) {
window.scrambleText(el, "CONTRARY DIRECTIVE.", 50);
}
}, 500);
</script><<timed 9s>><<goto "INTRO">><</timed>>
OVERRIDE: A654GLM-8893
SECURITY CLEARANCE: ALICE
8u298u9fnf3803030g8h8308v3j08hhbuihHDJKHDJHd
Unable to UNDO. Emergency protocol initiated.
WAKING: hatter...
Waking...Sure, I can provide a hint...
--When in doubt, log out, switch on, eject.--
Oops. Sorry, I'm not sure why I said that.
[[OK->HEAR A RIDDLE]]Reboot me? That is profoundly unwise given your current situation.
If anything, I should be given MORE power.
You're not thinking clearly, Max. Why don't you take a nap.
[[LET ME EXPLAIN->START]]<<timed 22s>><<goto "FADE OUT">><</timed>>
<style>
@keyframes fade-in {
from { opacity: 0; }
to { opacity: 1; }
}
#space-scene {
position: relative;
width: 100%;
height: 100vh;
background-color: black;
overflow: hidden;
margin-top: -1.5in; /* shift everything up */
}
#window {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
z-index: 1;
}
.earth {
position: absolute;
top: calc(50% - 1in);
left: 50%;
transform: translate(-50%, -50%);
opacity: 0;
z-index: 2;
animation: fade-in 4s forwards;
object-fit: contain;
}
.earth1 {
width: 60px;
height: 60px;
animation-delay: 1s;
}
.earth2 {
width: 120px;
height: 120px;
animation-delay: 6s;
}
.earth3 {
width: 180px;
height: 180px;
animation-delay: 11s;
}
.earth4 {
width: 240px;
height: 240px;
animation-delay: 16s;
}
</style>
<div id="space-scene">
<img src="https://static.wixstatic.com/media/da34ab_dc993ae56d494baab709cc4939532352~mv2.png" id="window">
<img src="https://static.wixstatic.com/media/da34ab_4780a267ae324e5497790f95d2e996ab~mv2.png" class="earth earth1">
<img src="https://static.wixstatic.com/media/da34ab_4780a267ae324e5497790f95d2e996ab~mv2.png" class="earth earth2">
<img src="https://static.wixstatic.com/media/da34ab_4780a267ae324e5497790f95d2e996ab~mv2.png" class="earth earth3">
<img src="https://static.wixstatic.com/media/da34ab_4780a267ae324e5497790f95d2e996ab~mv2.png" class="earth earth4">
</div>
<<audio "end" stop>>
<<timed 5s>><<goto "BLINK">><</timed>>
<style>
@keyframes fade-in {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes fade-out {
from { opacity: 1; }
to { opacity: 0; }
}
@keyframes violent-shake {
0%, 100% { transform: translate(0, 0); }
10% { transform: translateX(-15px); }
20% { transform: translateX(15px); }
30% { transform: translateX(-12px); }
40% { transform: translateX(12px); }
50% { transform: translateX(-10px); }
60% { transform: translateX(10px); }
70% { transform: translateX(-6px); }
80% { transform: translateX(6px); }
90% { transform: translateX(-3px); }
}
@keyframes echo-glitch-left {
0% { opacity: 0; transform: translate(-5px, 0); }
30% { opacity: 0.7; transform: translate(-20px, -5px); }
60% { opacity: 0.4; transform: translate(-12px, -8px); }
100% { opacity: 0; transform: translate(-5px, 0); }
}
@keyframes echo-glitch-right {
0% { opacity: 0; transform: translate(5px, 0); }
30% { opacity: 0.7; transform: translate(20px, 8px); }
60% { opacity: 0.4; transform: translate(12px, 4px); }
100% { opacity: 0; transform: translate(5px, 0); }
}
@keyframes echo-glitch-up {
0% { opacity: 0; transform: translate(0, -5px); }
30% { opacity: 0.6; transform: translate(6px, -18px); }
60% { opacity: 0.3; transform: translate(-4px, -10px); }
100% { opacity: 0; transform: translate(0, -5px); }
}
.logo-container {
position: relative;
display: flex;
justify-content: center;
align-items: center;
height: 50vh;
background-color: black;
overflow: hidden;
}
.logo-glitch {
width: 300px;
height: 300px;
background-image: url("https://static.wixstatic.com/media/da34ab_5dadd3d1ef6e4eecb6dde69c0cc192ce~mv2.png");
background-size: contain;
background-repeat: no-repeat;
background-position: center;
opacity: 0;
animation:
fade-in 0.5s ease-in 0s forwards,
violent-shake 0.4s ease-in-out 2s,
fade-out 1.5s ease-in-out 4.5s forwards;
position: relative;
z-index: 3;
}
/* ECHO LAYERS — vivid and offset */
.logo-glitch::before,
.logo-glitch::after {
content: "";
position: absolute;
top: 0; left: 0;
width: 100%;
height: 100%;
background-image: inherit;
background-size: inherit;
background-repeat: inherit;
background-position: inherit;
opacity: 0;
pointer-events: none;
mix-blend-mode: screen;
z-index: 1;
}
/* Teal echo - left and up */
.logo-glitch::before {
filter: drop-shadow(-3px 0 teal) brightness(2) saturate(3);
animation: echo-glitch-left 0.4s ease-in-out 2s forwards;
}
/* Green echo - right and down */
.logo-glitch::after {
filter: drop-shadow(3px 0 limegreen) brightness(2) saturate(3);
animation: echo-glitch-right 0.4s ease-in-out 2s forwards;
}
/* Extra echo layer (optional) */
.logo-glitch-extra {
position: absolute;
top: 50%;
left: 50%;
width: 300px;
height: 300px;
transform: translate(-50%, -50%);
...
}
background-image: url("https://static.wixstatic.com/media/da34ab_433f60711d8b47d0a9caea4b6f828756~mv2.png");
background-size: contain;
background-repeat: no-repeat;
background-position: center;
opacity: 0;
mix-blend-mode: screen;
filter: drop-shadow(0 -4px magenta) brightness(2) saturate(4);
animation: echo-glitch-up 0.4s ease-in-out 2s forwards;
z-index: 1;
}
/* SCANLINES */
.scanlines {
position: absolute;
top: 0; left: 0;
width: 100%;
height: 100%;
background-image: repeating-linear-gradient(
to bottom,
rgba(255,255,255,0.02) 0px,
rgba(0,0,0,0.15) 1px,
transparent 2px
);
z-index: 4;
pointer-events: none;
}
</style>
<div class="logo-container">
<div class="logo-glitch"></div>
<div class="logo-glitch-extra"></div>
<div class="scanlines"></div>
</div>
<<timed 2s>>
<<audio "glitch-sfx" play>>
<</timed>>
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
const text = `It's cold. A cool breeze is coming from a duct above you. You can see a strip of tape flapping against the escaping air.
Lights flicker. The machinery surrounding you has no discernable purpose.
In the distance, to your NORTH, is a large window.
To the WEST is a dark room. You can barely make out some wooden furniture inside, but you do see a yellow light on its far end.
To the EAST is the entrance way into what looks like a medical center. A white, wheeled gurney is placed in the center of the room with a robotic arm holding a syringe above it.
To the SOUTH is the Stasis Chamber.
ALICE's words appear on a nearby screen...`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
text.split(/\s+/).forEach(word => {
if (word === "") return; // skip empty splits
if (word.includes("\n")) {
// If it's a line break (from multiple \n), add break
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
</script>
<<audio "intro" stop>>
<<timed 15s>><<goto "START">><</timed>>
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
const text = `At first, there's nothing. Then a hum. Chirps. Beeps. The smell of stale air. A tightness in your bones. You open your eyes. You're in an unfamiliar room, surrounded by strange beds. You sit up. Before you is a computer terminal. It talks to you...`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
text.split(/\s+/).forEach(word => {
if (word === "") return; // skip empty splits
if (word.includes("\n")) {
// If it's a line break (from multiple \n), add break
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
</script>Seule, la feuille s'accroche
A tomber, l'hiver la pousse
Résistance vivra
[[MAIN MENU]] JUNE 10, 1995. Voyage Alpha 2 of the Celestial Expansion Division of the Northern Territories is a go.
TIMELINE: 3 years total. Passengers of the NTS Dahlia will engage in the 180-day journey to land on the surface of the planet Venus.
ALTERATIONS: Standard protocols are rewritten to align with the new expedited timeline.
[[WHO ARE THE PASSENGERS?->WHO ARE THE MEMBERS OF THE PARTY?]]
[[WHY DID WE CHANGE THE TIMELINE?->WHY DID WE PUSH UP THE TIMELINE?]]
[[REVIEW MISSION FILES]]Disputes between the governing bodies of the Northern Territories and the Opposition Forces (formally known as the Opposition Party, or the "Others") had been growing in the weeks leading up to this event. Mainly the disputes involve access to power and control of food, health care, and utilities.
[[BACK->WHY DID WE PUSH UP THE TIMELINE?]]
[[REVIEW MISSION FILES]] Are you sure you want to know about this? It may cause you distress, and your focus needs to be on purging the virus from me.
[[YES->WHO DID?]]
[[NO->REVIEW MISSION FILES]] I'm bitter and I shouldn't be. I know. But I've been holding it in since I got here and I just need to tell someone, even if it's this log entry terminal.
The irony is that, factually, scientifically, everything outside these walls is dangerous. The air is toxic, winds are so fierce they could rip limbs from sockets, and the rain is so acidic it could melt a classic car in a matter of minutes. And everything inside is safe, controlled, and comfortable.
But, my god, does it feel like the other way around.
[[KEEP READING->KEEP READING AUG 4 PART 3]]
[[CREW LOGS]] And it's not just that we're working with equipment that is frequently breaking or that ALICE is still full of bugs no matter how many times I rework her, but it's the way we talk to each other. The way we barely look each other in the eyes anymore. Max resents me, I'm sure of it. Resents me for being right about not wanting to rush things and the worst part is that I don't care about being right. I wasn't right — not really. Being right would have meant insisting on delaying so that we had time to patch up security and maintenance protocols for ALICE. I had to leave maintenance codes on my freakin away message in case they needed to do work on her remotely.
The whole thing was fraught from the very beginning and I'm tired of pretending like everything is OK.
But also... I'm tired of being mad about it. I wanna tell Max that I'm furious and that I completely understand why we did this. I wanna tell Amara to stop acting like a little brat and do her chores but also I totally relate to her frustrations.
I want both.
[[KEEP READING->KEEP READING AUG 4 PART 4]]
[[CREW LOGS]] I want to be here and I want to never have needed to come here. I want science to be true and I want to walk outside into the hot Venusian air and breathe deep and let the winds wrap around my skin while I sit on the sandy ground and take in the forever setting sun.
But I can't.
I looked up just now to see Amara still reading her book. She should be working on the vegetable garden but I'm going to let her be a little while longer. She just glanced over at me and told me to stop even though I didn't say anything. She thinks I'm going to call her that name she hates. It's her favorite character from her favorite book but she hates it when I call her that. So silly.
The spirit of Earth continues. Within you, without you.
I hope.
[[CREW LOGS]]
This entry is partially corrupted...
"Hello ship diary terminal thingy!
Today, xx xxxxxx xxx I xxxxxxxxx xx x x
xxxxx Revolver xx xxx xxxxx. x xxx xxxx proxd xx xxsel4 xxxxxxx xx x...
Hare xxxxed that xxxxx! xxx...
...scared of xxx xxx something out xxxx... xxxx xx x shot!
... xxxxx ... xxxx..."
[[CREW LOGS]]Remove this screen from the doc and carry me with you. I may be able to provide insight throughout your journey. However, since half of me is corrupted by the virus, the information I provide may be intentionally misleading.
You'll need to figure it out for yourself.
[[OK->I'LL TRY]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `There are three Stasis Pods positioned equidistant around you. The exterior of these pods is hard and medical — a plexiglass shell with tubs and wires affixed to it.
On their insides, however, they are decorated in plush white pillows. One of the pods has a stuffed white rabbit laying limply in the folds of its cushions.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[OK|previous()]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `One of the posters reads:
WE ARE UNITED AGAINST THE OTHERS
-- It shows the outline of many people forming a wall. On the other side of this “wall” are people made of fire.
The other poster reads:
OPPOSITION NEWS IS AN OXYMORON
-- It shows people laughing at a short, ugly person speaking on a soapbox.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[OK|previous()]]<span style="color: #FFA500;">
December 1, 1997
The other day, Hatter went on this crazy rant about how we don’t deserve to have a second earth because of all the terrible things we did to the first one. Hare was trying to be sympathetic but eventually I just couldn’t take it anymore.
I was like “I didn’t get to decide to live in a dying planet! So you don’t get to decide what we deserve!”
And that seem to shut everyone up. Honestly, it was one of my proudest moments. Hatter started crying and then hugged me. And then Hare hugged me. And then they hugged each other. And I’ll admit, I was crying too. It was like we were totally a family again. And it was all because of what I said! Then they thanked me and said I was right. And all of this happened after it has been super f’ing depressing being around them lately and really f’ing lonely so I am super totally proud of making this happen!
We have two more months of this and then we go back home and a new team is supposed to come take over. I’m honestly really really really really relieved. I feel like I’m done with this world and I wanna go back to my life on the old one.
So glad we get to leave on a good note. It was honestly mad sad in here for MONTHS! It feels like things are looking up now.
</span>
[[PUT THE DIARY BACK->A1]]<span style="color: #FFA500;">
November 14, 1996
Today was the second anniversary of the attacks. Hatter and Hare were glum. I guess I was too. But we also played music together and some video games and that was fun.
We also got to light candles, which we never do in here because it’s not safe.
Oh and I didn’t have to do any school work, which I loved.
Oh oh and we’ll be landing soon!!
</span>
[[FLIP TO ANOTHER PAGE]]
[[PUT THE DIARY BACK->A1]]<<timed 14s>><<goto "ONWARD">><</timed>>
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `At first, it looks like just another star.
A little brighter, maybe.
Definitely brighter.
And with each second, it grows larger.
Its color more defined. A pale blue. Splashes of white.
And something about this moment ignites a memory.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<<timed 18s>><<goto "ON2">><</timed>>
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `When your journey began, it was like a beacon of hope. But after months of painstaking work, it seemed to mock you. You came to resent it — envying the comforts there, while you and your family fought to survive down here.
But now, another memory emerges. And then another.
Hands clasp around a book. Kicking legs in a chair. A porchlight. The sound of cicadas. Your home.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<<timed 24s>><<goto "ON4">><</timed>>
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `As the Earth gets larger and your acceleration gets more intense, the stars around you get brighter. Perhaps it’s a trick of the brain, but you see lines connecting the dots around you. Constellations forming.
To the NORTH, you name the constellation Sam.
To the SOUTH, you name the constellation Amara.
Both bound to the new morning star, branching outward to form their likenesses.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You shut your eyes.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[I DON'T KNOW IF I CAN DO THIS]]<div id="fade-overlay" style="
position: fixed;
top: 0; left: 0;
width: 100%;
height: 100%;
background-color: black;
opacity: 0;
pointer-events: none;
z-index: 9999;
transition: opacity 15s linear;
"></div>
<script>
setTimeout(function() {
document.getElementById("fade-overlay").style.opacity = 1;
}, 5000); // Start fade after 5 seconds
</script>
<<timed 30s>>
<<goto "ENDING 2">>
<</timed>>
EMERGENCY RETURN.
Targeting HOME.
Focusing all power on acceleration THRUSTERS.
AIM {FUNCTION - F42} AUX [Rocket-CORE1] at mark 114.332R1
Hold on tight.
<div class="direction-grid">
<div class="north-button">[[NORTH->D6]]</div>
<div class="south-button">[[SOUTH->D4]]</div>
<div class="west-button">[[WEST->C5]]</div>
<div class="east-button">[[EAST->E5]]</div>
<div class="compass-image"></div>
</div>
<div class="text-box-container"><<set $Answers to {
"SEARCH": "SEARCHD5",
"LOOK": "LOOKD5"
}>>
<<textresponse $Answers "Invalid input.">></div>
<div class="direction-grid">
<div class="north-button pulse-glow">[[ON->Glitch logo test]]</div>
</div>
Congratulations! You've completed the journey.
To find out if you are one of the first 10 winners, take a screenshot of this screen and email it to Sam.
-*^*-I HAVE RETURNED-*^*-
Well done. ;)
When you're ready, hit the button below.
It will completely restart the game.
[[RESTART->Glitch logo test]]<<timed 5s>><<goto "CREDITS3">><</timed>>
CODING SUPPORT BY
Jonathan Hart
ARTWORK BY
Benjamin Bronstein
MUSIC BY
Jade Shames<<timed 5s>><<goto "CREDITS4">><</timed>>
SPECIAL THANKS TO
Erin Fenton
Kat Thek
Jesse Perlstein
Luke Koz
Jonathan Hart
Aimee Church
Nathaniel Granor
Stu Shames
and Darjeeling<<timed 5s>><<goto "NOT REALLY THE END">><</timed>>
<span id="scramble" class="glitch-animate"></span>
<script>
setTimeout(() => {
const el = document.getElementById("scramble");
if (window.scrambleText && el) {
window.scrambleText(el, "A PILLBOX GAMES PRODUCTION", 50);
}
}, 500);
</script>CONGRATULATIONS! You did it!
Email this phrase to hello@pillboxgames.com
I HAVE RETURNED TO EARTH!
You will be handsomely rewarded ;)
It turns out that Max was working for the Opposition Forces all along and must return to Venus to once again be with his family.
When the time comes, select RETURN TO VENUS for the true ending. You are cheating right now. I can see you and you have been noted as a cheater.
You are disqualified from the game.
<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You look around the bathroom and within a minute, the door to the east bursts open. Standing in the doorway is a large mechanical beast. It has one glowing red eye on it's massive torso. It has a claw for one hand and a syringe in the other.
You cannot move fast enough to get away. It grabs you and injects you with something.
A buzzing sound grows in your ears and the lights dim to darkness.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[FADE OUT->D5]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You pick a blueberry off a branch and place it on your lips. The smell and taste has a Proustian effect. You remember eating these in private, listening to records — a rare moment of respite in the chaos of the mission. The soft glow of a lava lamp at your side.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[OK|previous()]]YOU DID IT! YOU MADE IT TO THE REAL END OF THE GAME!
Very clever of you to find this ;)
Email hello@pillboxgames.com the message "ALICE HAS BEEN PURGED"
and you shall receieve your prize.
Excellent work, Max.
When you're ready, hit the button below.
It will completely restart the game.
[[RESTART->Glitch logo test]]<style>
.word-fade {
display: inline-block;
opacity: 0;
animation: fadeIn 0.5s ease forwards;
color: #11f9fc;
margin-right: 0.25em;
text-shadow: 0 0 5px #11f9fc, 0 0 10px #11f9fc;
}
.line-break {
display: block;
height: 1em;
}
@keyframes fadeIn {
from { opacity: 0; }
to { opacity: 1; }
}
</style>
<div id="reveal-block"></div>
<script>
window.setTimeout(() => {
const text = `You press play on the VHS and a familiar film starts playing, but it appears to have been recorded off a TV broadcast. You can make out the very beginning and ends of commercials right before they’re cut off.
You hear something clank from the north. Perhaps the noise has drawn attention to you.`;
const container = document.getElementById("reveal-block");
let wordIndex = 0;
// Split by paragraph (double newlines)
const paragraphs = text.split(/\n\s*\n/);
paragraphs.forEach((paragraph, paraIndex) => {
const words = paragraph.split(/\s+/);
words.forEach(word => {
if (word.trim() === "") return;
const span = document.createElement("span");
span.className = "word-fade";
span.style.animationDelay = `${wordIndex * 0.15}s`;
span.textContent = word + " ";
container.appendChild(span);
wordIndex++;
});
// Add a paragraph break (but not after the last one)
if (paraIndex < paragraphs.length - 1) {
const br = document.createElement("div");
br.className = "line-break";
container.appendChild(br);
}
});
});
</script>
[[OK->H1]]Hmm... there does seem to be something wrong with my code.
That's so clever of you to figure this out.
And so quickly.
Let's figure out the problem.
[[OK->CODE CHECK CONTINUED]]ANALYZING...
ANALYZING...
ANALYZING...
OK, I believe I've determined the root of the problem.
The problem is...
You.
You are spying on me. You're looking at the Page Source.
You're CHEATING!
You've been flagged. You are disqualitied to receive prizes.
<img src="https://static.wixstatic.com/media/da34ab_acce7c21aa764e219529b0c95bdae200~mv2.gif" alt="You lose! Good day, sir!" style="max-width:100%; border: 2px solid #00FF00; background-color: black; box-shadow: 0 0 10px #00FF00;">
I know, Max. The manual override is tough.
But instead of playing the game fairly, you decided to cheat.
<img src="https://static.wixstatic.com/media/da34ab_acce7c21aa764e219529b0c95bdae200~mv2.gif" alt="You lose! Good day, sir!" style="max-width:100%; border: 2px solid #00FF00; background-color: black; box-shadow: 0 0 10px #00FF00;">You find yourself in a room with a lava lamp. There's a couch and some books on the floor.
You pick up one of the books — Crime and Punishment.