{ (set: $switches to (datamap: "drunk", 0, "with_woman", 0, "disconnect", 0, "stuff_packed", 0, "access", 0, "slept", 0, "eaten", 0, "visited_graveyard", 0, "took_money", 0, "visited_vr", 0, "looked_at_sky", 0, "swam", 0, "walked", 0, "ready_to_die", 0 ) ) (set: $switches_initiated to 1) (set: $player_karma to 0) (set: $nested_passages to 0) (set: $number_of_reminders to 3) (set: $reminders to "reminders") (set: $actions_vrcafe to (datamap: "buy_session", 1)) (set: $actions_diner to (datamap: "eat", 1)) (set: $actions_bar to (datamap: "call_colleague", 1)) (set: $actions_AR to (datamap: "allow", 1)) (set: $actions_appartment to (datamap: "pack", 0, "sit", 1)) <script> if (typeof currentTrack == 'undefined'){ currentTrack = 0; } if (typeof audioTrack01 == 'undefined'){ var audioTrack01 = document.createElement('audio'); audioTrack01.setAttribute('src', 'media/Track01_City.mp3'); if (soundMuted % 2 == 1){ audioTrack01.setAttribute('preload', 'none'); } else { audioTrack01.setAttribute('preload', 'auto'); } audioTrack01.setAttribute('loop', 'TRUE'); audioTrack01.volume = 0; } if (typeof audioTrack02 == 'undefined'){ var audioTrack02 = document.createElement('audio'); audioTrack02.setAttribute('src', 'media/Track02_Graveyard.mp3'); audioTrack02.setAttribute('preload', 'auto'); if (soundMuted % 2 == 1){ audioTrack02.setAttribute('preload', 'none'); } else { audioTrack02.setAttribute('preload', 'auto'); } audioTrack02.volume = 0; } if (typeof audioTrack03 == 'undefined'){ var audioTrack03 = document.createElement('audio'); audioTrack03.setAttribute('src', 'media/Track03_Forest.mp3'); audioTrack03.setAttribute('loop', 'TRUE'); if (soundMuted % 2 == 1){ audioTrack03.setAttribute('preload', 'none'); } else { audioTrack03.setAttribute('preload', 'auto'); } audioTrack03.volume = 0; } if (typeof audioTrack04 == 'undefined'){ var audioTrack04 = document.createElement('audio'); audioTrack04.setAttribute('src', 'media/Track04_Lake.mp3'); if (soundMuted % 2 == 1){ audioTrack04.setAttribute('preload', 'none'); } else { audioTrack04.setAttribute('preload', 'auto'); } audioTrack04.setAttribute('loop', 'TRUE'); audioTrack04.volume = 0; } if (typeof audioTrack05 == 'undefined'){ var audioTrack05 = document.createElement('audio'); audioTrack05.setAttribute('src', 'media/Track05_Underwater.mp3'); if (soundMuted % 2 == 1){ audioTrack05.setAttribute('preload', 'none'); } else { audioTrack05.setAttribute('preload', 'auto'); } audioTrack05.setAttribute('loop', 'TRUE'); audioTrack05.volume = 0; } if (typeof audioTrack06 == 'undefined'){ var audioTrack06 = document.createElement('audio'); audioTrack06.setAttribute('src', 'media/Track06_Connect.mp3'); if (soundMuted % 2 == 1){ audioTrack06.setAttribute('preload', 'none'); } else { audioTrack06.setAttribute('preload', 'auto'); } audioTrack06.volume = 0; } </script> }{ <script> $('body').removeClass().addClass('VR'); $('tw-passage').removeClass().addClass('VR'); </script> (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] <script> if (currentTrack != 3 && soundMuted % 2 != 1){ audioTrack03.play(); currentTrack = 3; time = 0; for (i = 0; i < 10; i++) { time += 200; setTimeout(function() { if (audioTrack03.volume <= 0.9){ audioTrack03.volume += 0.1; } if (audioTrack01.volume > 0.1){ audioTrack01.volume -= 0.1; } else { if (!audioTrack01.paused){ audioTrack01.pause(); } } }, time); } } </script> |description_container>[<span class="header_halfspace"><p>Sarah takes a deep breath and stretches out her arms. The weightlessness of her virtual body deeply satisfies her. It is superior to its real-life counterpart in every way imaginable. Sleepiness and exhaustion belong to the past, illness is of no concern, she can eat and drink whatever she wants, and as much as she wants, without gaining weight, and without the need to visit a toilet. There is no need to shave for only the top of her skull is covered by hair. All physical imperfections are corrected and her breasts are slightly bigger.</p><p>The most important advantage of all is that aging does not occur. Sarah will stay 37 and can even revert to a younger aged body if she desires. Notwithstanding, the physical advantages are mere trivialities for Sarah. For more important reasons, this virtual world renders yesterday's reality bleak and grim.</p></span>] |choice_container>[ <span>[[Continue->Intro 2]]</span> ] }{ (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] (set: $passage to "Sleep") (set: $switches's slept to 1) |description_container>[<span class="header_whitespace"><p>Sarah is exhausted yet has trouble falling asleep. Vivid images appear before her eyes as she stares at the ceiling. She recalls the posters on the wall at AfterLife, with slogans like, “Death doesn't need to be the end” and “Paradise awaits”. She sees the image of the building that houses hundreds of pillars containing preserved human brains, all hooked up to New Eden servers. Then a flock of [[SpyBirds->Spybirds]] that follow her on the streets, and crime scenes she used to visit when she still had a job(if: $switches's drunk is 0)[ as a forensic analyst].</p><p>The next morning Sarah wakes up not feeling refreshed at all. Her mind and body don't know whether it's day or night, whether she's awake or still sleeping, whether today might be yesterday. (if: $switches's drunk is 1)[Sarah is hungover and hungry, but she needs her last bit of money to visit Harper in New Eden.]</p></span>] |feedback_container>[<span></span>] |choice_container>[ <span>[[Sarah walks into the living room->Appartment]]</span> ] |choice_container_extra>[] }{ <script> $('body').removeClass().addClass('VR'); $('tw-passage').removeClass().addClass('VR'); </script> (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] <script> if (currentTrack != 1 && soundMuted % 2 != 1){ if (audioTrack06.canplay) { audioTrack06.currentTime = 0; } } if (currentTrack != 6 && soundMuted % 2 != 1){ audioTrack06.play(); currentTrack = 6; time = 0; for (i = 0; i < 10; i++) { time += 200; setTimeout(function() { if (audioTrack06.volume <= 0.9){ audioTrack06.volume += 0.1; } if (audioTrack05.volume > 0.1){ audioTrack05.volume -= 0.1; } else { if (!audioTrack05.paused){ audioTrack05.pause(); } } if (audioTrack01.volume > 0.1){ audioTrack01.volume -= 0.1; } else { if (!audioTrack01.paused){ audioTrack01.pause(); } } if (audioTrack03.volume > 0.1){ audioTrack03.volume -= 0.1; } else { if (!audioTrack03.paused){ audioTrack03.pause(); } } }, time); } } </script> (set: $passage to "VR Exploration") (set: $switches's visited_vr to 1) (if: $switches's visited_vr is 1 and $switches's access is 1)[ (set: $switches's ready_to_die to 1) ] (set: $actions_vrcafe's buy_session to 0) (set: $number_of_reminders to it - 1) (if: $number_of_reminders < 2)[(set: $reminders to "reminder")] |description_container>[<div id="d_container"><span class="header_whitespace colored"><p>Searching for server</p></span></div>] |choice_container>[<div id="c_container"></div>] <script> setTimeout(function(){ document.getElementById("d_container").innerHTML = "<span class='header_whitespace colored'><p>Searching for server.</p></span>" }, 1000); setTimeout(function(){ document.getElementById("d_container").innerHTML = "<span class='header_whitespace colored'><p>Searching for server..</p></span>" }, 2000); setTimeout(function(){ document.getElementById("d_container").innerHTML = "<span class='header_whitespace colored'><p>Searching for server...<br />Connecting to 1778:0DB3:A1C0:FE01:6E35:2FF2:7DF4:B2C1</p></span>" }, 3000); setTimeout(function(){ document.getElementById("d_container").innerHTML = "<span class='header_whitespace colored'><p>Searching for server...<br />Connecting to 1778:0DB3:A1C0:FE01:6E35:2FF2:7DF4:B2C1.</p></span>" }, 3800); setTimeout(function(){ document.getElementById("d_container").innerHTML = "<span class='header_whitespace colored'><p>Searching for server...<br />Connecting to 1778:0DB3:A1C0:FE01:6E35:2FF2:7DF4:B2C1..</p></span>" }, 4500); setTimeout(function(){ document.getElementById("d_container").innerHTML = "<span class='header_whitespace colored'><p>Searching for server...<br />Connecting to 1778:0DB3:A1C0:FE01:6E35:2FF2:7DF4:B2C1...<br />Connection established</p></span>" }, 5200); setTimeout(function(){ document.getElementById("d_container").innerHTML = "<span class='header_whitespace colored'><p>Searching for server...<br />Connecting to 1778:0DB3:A1C0:FE01:6E35:2FF2:7DF4:B2C1...<br />Connection established<br />Syncing avatar</p></span>" }, 6500); setTimeout(function(){ document.getElementById("d_container").innerHTML = "<span class='header_whitespace colored'><p>Searching for server...<br />Connecting to 1778:0DB3:A1C0:FE01:6E35:2FF2:7DF4:B2C1...<br />Connection established<br />Syncing avatar.</p></span>" }, 6800); setTimeout(function(){ document.getElementById("d_container").innerHTML = "<span class='header_whitespace colored'><p>Searching for server...<br />Connecting to 1778:0DB3:A1C0:FE01:6E35:2FF2:7DF4:B2C1...<br />Connection established<br />Syncing avatar..</p></span>" }, 7500); setTimeout(function(){ document.getElementById("d_container").innerHTML = "<span class='header_whitespace colored'><p>Searching for server...<br />Connecting to 1778:0DB3:A1C0:FE01:6E35:2FF2:7DF4:B2C1...<br />Connection established<br />Syncing avatar... Sync succesful</p></span>" }, 8100); setTimeout(function(){ document.getElementById("d_container").innerHTML = "<span class='header_whitespace colored fade_out'><p>Searching for server...<br />Connecting to 1778:0DB3:A1C0:FE01:6E35:2FF2:7DF4:B2C1...<br />Connection established<br />Syncing avatar... Sync succesful</p></span>" }, 9500); setTimeout(function(){ document.getElementById("d_container").innerHTML = "<span class='header_whitespace colored fade_in' style='text-align:center;width:75%;margin-top:250px'><h1>Welcome to New Eden</h1></span>" }, 11000); setTimeout(function(){ document.getElementById("d_container").innerHTML = "<span class='header_whitespace colored fade_out' style='text-align:center;width:75%;margin-top:250px'><h1>Welcome to New Eden</h1></span>" }, 13000); setTimeout(function(){ if (soundMuted % 2 != 1){ audioTrack03.play(); currentTrack = 3; time = 0; for (i = 0; i < 10; i++) { time += 200; setTimeout(function() { if (audioTrack03.volume <= 0.9){ audioTrack03.volume += 0.1; } }, time); } } }, 15000); </script> |overlay_d_container>[<span class='header_halfspace fade_in late_fade'><p>Dust particles dance calmly in the sunbeams surrounding Sarah, shining through the saturated green leaves of the tall trees. She wants to discover [[hidden societies->Blocked Society]], wants to get lost in a maze of dark paths, to overstimulate her senses and to share these feelings with like-minded people. There is no goal to be reached, no purpose beyond experiencing the pure sense of wonder Sarah felt so often during childhood.</p></span>] |overlay_c_container>[(if: $switches's looked_at_sky is 0)[ <span class='fade_in late_fade'>(link: 'Sarah looks at the sky')[(set: $switches's looked_at_sky to 1)(replace: ?overlay_d_container)[(display: 'Sky')]]</span>] <span class='fade_in late_fade'>[[Sarah goes for a swim in the lake nearby->Swim]]</span> <span class='fade_in late_fade'>[[Sarah walks the trail in front of her->Trail]]</span> ] }{ <script> $('body').removeClass().addClass('VR'); $('tw-passage').removeClass().addClass('VR'); </script> <script> if (currentTrack != 4 && soundMuted % 2 != 1){ audioTrack04.play(); currentTrack = 4; time = 0; for (i = 0; i < 10; i++) { time += 200; setTimeout(function() { if (audioTrack04.volume <= 0.9){ audioTrack04.volume += 0.1; } if (audioTrack01.volume > 0.1){ audioTrack01.volume -= 0.1; } else { if (!audioTrack01.paused){ audioTrack01.pause(); } } }, time); } } </script> |description_container>[<span class="header_whitespace"><p>The familiar smell of flowers and the sound of rippling water signal to Sarah that she is now connected and can start making the mental transition to this new environment. She opens her eyes to the view of a beach naturally lit by bright sunlight. Everything looks so very real. The air she's breathing has an unmatched freshness. The sun touches her forever perfect skin. There are no more physical or financial restrictions, no more violence in the world she needs to deal with. This time she's here to stay, for thirty years from this day.</p><p>Sarah feels free.</p></span>] |choice_container>[ <span>[[End->Credits]]</span> ] |choice_container_extra>[] }{ <script> $('body').removeClass('VR'); $('tw-passage').removeClass('VR'); </script> <script> if (currentTrack != 1 && soundMuted % 2 != 1){ audioTrack01.play(); currentTrack = 1; time = 0; for (i = 0; i < 10; i++) { time += 200; setTimeout(function() { if (audioTrack01.volume <= 0.9){ audioTrack01.volume += 0.1; } if (audioTrack04.volume > 0.1){ audioTrack04.volume -= 0.1; } else { if (!audioTrack04.paused){ audioTrack04.pause(); } } }, time); } } </script> |description_container>[<span class="header_whitespace"><p>Sarah swallows the sleeping tablets four at a time until the pack is empty. She's unable to cry yet she feels an intense sadness flowing in waves, up and down, inside her body. She used to believe that giving up was no valid strategy, that fighting for a cause, no matter how small, could make a change worthy of pursuit. Escaping was an act for the weak. However, throughout the years it became clear to her that in these conditions mankind was unable to overcome its weaknesses and that the only chance for a better life existed in migration to a world where humanity could flourish in ways previously impossible.</p><p>(if: $switches's visited_graveyard is 0)[Last to occupy Sarah's mind are the memories of her parents. She regrets not having visited their graves in ages, then closes her eyes. ](else:)[Sarah closes her eyes and feels no regret. ]Her consciousness sinks deeper and deeper into a dark abyss while thoughts die and sounds fade away.</p></span>] |choice_container>[ <span>[[A few hours pass.->VR End Scene]]</span> ] |choice_container_extra>[] }{ (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] |description_container>[<span class="header_halfspace"><p>Sarah comes here often. Her food printer has been broken for three months and she doesn't have enough money to get it fixed. (if: $switches's drunk is 1)[She's hungry but has spent her last money on drinks and is therefore unable to buy a meal.](else:)[She doesn't allow herself to spend more than €1500 on dinner and has been relying on cheap meals ever since.]</p><p>The charming little diner is located under the railway bridge and is owned by a man who must be in his 70's. He still serves the customers himself, a rarity these days. Occasionally he bursts into anti-technology rants, shouting about how digital communication alienates people from one another while his face displays a mixture of rage and sadness. Sarah feels it's not technology to blame, but mankind itself, although she never argues with the owner and simply nods while his words float around her ears, without being actively registered by her brain.</p>] |feedback_container>[<span></span>] |choice_container>[ (if: $actions_diner's eat is 1)[ (link: "<span>Meal #1 - Cost: €1500 - Health Index: 20</span>")[(replace: ?feedback_container)[(set: $switches's eaten to 1)(set: $actions_diner's eat to 0)<span>That was hardly a proper meal, but Sarah's been used to it.</span> ] ] ](else:)[ <span class="option_disabled">Meal #1 - Cost: €1500 - Health Index: 20</span> ] <span class="option_disabled">Meal #2 - Cost: €2250 - Health Index: 40</span> <span class="option_disabled">Meal #3 - Cost: €3000 - Health Index: 60</span> <span class="option_disabled">Meal #4 - Cost: €3750 - Health Index: 80</span> <span class="option_disabled">Meal #5 - Cost: €4500 - Health Index: 100</span> <span>[[Sarah leaves the diner->Wander]]</span> ] }{ (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] (set: $passage to "AR") (if: $switches's slept is 0)[ (set: $day to "tomorrow") ](else:)[ (set: $day to "today") ] (if: (history:) contains $passage)[ ](else:)[ (set: $actions_appartment's pack to 1) ] |description_container>[<span class="header_whitespace"><p>A red notification draws Sarah's attention to her bathroom door. It displays the following $reminders:</p><ul>(if: $switches's access is 0)[<li>|remind_access>[Allow AfterLife access to New Eden profile]](if: $switches's stuff_packed is 0)[|remind_pack>[<li>Pack stuff for collectors, due $day 2 PM]](if: $switches's visited_vr is 0)[<li>Meet with Harper in New Eden $day](if: $number_of_reminders is 0)[<li>No reminders left]</ul></span>] |choice_container>[<span>[[Sarah opens her New Eden profile page->Profile]]</span> (if: $switches's stuff_packed is 0)[ (link: "<span>Sarah packs her stuff</span>")[ (if: $switches's eaten is 1)[ (set: $switches's stuff_packed to 1) (set: $number_of_reminders to it - 1) (if: $number_of_reminders < 2)[(set: $reminders to "reminder")] (replace: ?remind_pack)[] <span>Sarah starts to pack her personal belongings into the empty boxes. All of her stuff will be collected $day by the local thrift store.</span> ](else:)[ <span>Sarah hasn't eaten and feels too weak to pack her stuff</span> ] ] ] <span>[[Sarah walks back into the living room->Appartment]]</span> ] |choice_container_extra>[] }{ <script> $('body').removeClass().addClass('VR'); $('tw-passage').removeClass().addClass('VR'); </script> (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] <script> if (currentTrack != 3 && soundMuted % 2 != 1){ audioTrack03.play(); currentTrack = 3; time = 0; for (i = 0; i < 10; i++) { time += 200; setTimeout(function() { if (audioTrack03.volume <= 0.9){ audioTrack03.volume += 0.1; } if (audioTrack01.volume > 0.1){ audioTrack01.volume -= 0.1; } else { if (!audioTrack01.paused){ audioTrack01.pause(); } } }, time); } } </script> |description_container>[<span class="header_whitespace"><p>Sarah's real-world body will die tomorrow. She had contemplated the decision for months but feels confident and optimistic about it now. She prefers to call it 'migration' rather than 'euthanasia' or 'suicide', though many people argue otherwise.</p><p>Sarah's time for this session is up. She is abruptly [[disconnected->The Mind's Eye]].</p>] }{ <script> $('body').removeClass('VR'); $('tw-passage').removeClass('VR'); </script> (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] <script> if (currentTrack != 1 && soundMuted % 2 != 1){ audioTrack01.play(); currentTrack = 1; time = 0; for (i = 0; i < 10; i++) { time += 200; setTimeout(function() { if (audioTrack01.volume <= 0.9){ audioTrack01.volume += 0.1; } if (audioTrack03.volume > 0.1){ audioTrack03.volume -= 0.1; } else { if (!audioTrack03.paused){ audioTrack03.pause(); } } }, time); } } </script> |description_container>[<span class="fs_image"><img src="media/VRCafe.jpg" alt="The Mind's Eye image" /></span>] |choice_container>[ <div class="fs_image mindseye"> (if: $switches's slept is 1 and $actions_vrcafe's buy_session is 1 and $switches's took_money is 1)[ <span class="choice_overlay">[[Sarah buys a one hour session->VR Exploration]]</span> ] (elseif: (history:) contains "The Mind's Eye")[ <span class="choice_overlay">Sarah can't visit New Eden right now</span> ] <span class="choice_overlay">[[Sarah leaves the The Mind's Eye->Street 1]]</span> </div> ] }{ (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] |description_container>[<span class="fs_image"><img src="media/Street.jpg" alt="Streets illustration" /></span>] |feedback_container>[<span></span>] |choice_container>[ <div class="fs_image"> (if: (history:) contains $passage and $switches's visited_vr is 0)[<span class="choice_overlay">[[Sarah visits the The Mind's Eye->The Mind's Eye]]</span>] <span class="choice_overlay">[[Sarah walks home->Appartment]]</span> <span class="choice_overlay">[[Sarah wanders through the city centre->Wander]]</span> </div> ] |choice_container_extra>[] }{ (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] <script> if (currentTrack != 2 && soundMuted % 2 != 1){ audioTrack02.play(); currentTrack = 2; time = 0; for (i = 0; i < 10; i++) { time += 200; setTimeout(function() { if (audioTrack02.volume <= 0.9){ audioTrack02.volume += 0.1; } if (audioTrack01.volume > 0.1){ audioTrack01.volume -= 0.1; } else { if (!audioTrack01.paused){ audioTrack01.pause(); } } }, time); } } </script> (set: $switches's visited_graveyard to 1) |description_container>[<span class="header_whitespace"><p>Sarah walks to her parents' graves. She feels peaceful in this calm environment. Her father died when she was young, and her mom at age 60, five years ago. She became ill and couldn't afford synthetic organs. Sarah offered her life savings to her but saw the offer rejected. Sarah once wished to be buried next to her parents but ended up spending nearly all her money at AfterLife. Sometimes she feels sad about the complete lack of family in her life, but then tries not to get caught up in self-pity.</p></span>] |feedback_container>[<span></span>] |choice_container>[ <span>[[Sarah leaves the graveyard->Wander]]</span> ] |choice_container_extra>[] }{ (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] |description_container>[ (if: $switches's stuff_packed is 0)[ <span class="fs_image"><img src="media/AppartmentFull.jpg" alt="Appartment illustration" /> ](else:)[ <span class="fs_image"><img src="media/AppartmentEmpty.jpg" alt="Empty appartment illustration" /> ] </span> ] |choice_container>[ <div class="fs_image"> (if: $switches's ready_to_die is 1)[ (set: $actions_appartment's sit to 0) <span class="choice_overlay higher">[[Sarah waits for the thrift shop collectors->Wait]]</span> ] (if: $actions_appartment's sit is 1)[ <span class="choice_overlay higher">[[Sarah sits down for a minute->Sit]]</span> ] (if: $switches's slept is 1 and $switches's took_money is 0)[ (link: "<span class='choice_overlay higher'>Sarah takes the money she saved for her last visit to The Mind's Eye</span>")[ (set: $switches's took_money to 1) ] ] (if: $number_of_reminders > 0)[ <span class="choice_overlay higher">[[Sarah looks at the $reminders displayed on the bathroom door->AR]]</span> ] (if: $actions_appartment's pack is 1 and $switches's stuff_packed is 0)[ (link: "<span class='choice_overlay higher'>Sarah packs her stuff</span>")[(if: $switches's eaten is 1)[(set: $switches's stuff_packed to 1) (set: $number_of_reminders to it - 1) (if: $number_of_reminders < 2)[(set: $reminders to "reminder")] (replace: ?description_container)[<span class="fs_image"><img src="media/AppartmentEmpty.jpg" alt="Empty appartment illustration" /></span>] ](else:)[ <span class='choice_overlay higher'>Sarah hasn't eaten and feels too weak to pack her stuff</span> ] ] ] (if: $switches's slept is 0)[ <span class="choice_overlay higher">[[Sarah goes to sleep->Sleep]]</span> ] (if: $switches's ready_to_die is 0)[ <span class="choice_overlay higher">[[Sarah leaves her appartment->Street 1]]</span> ] </div> ] }{ (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] <script> if (currentTrack != 1 && soundMuted % 2 != 1){ audioTrack01.play(); currentTrack = 1; time = 0; for (i = 0; i < 10; i++) { time += 200; setTimeout(function() { if (audioTrack01.volume <= 0.9){ audioTrack01.volume += 0.1; } if (audioTrack02.volume > 0.1){ audioTrack02.volume -= 0.1; } else { if (!audioTrack02.paused){ audioTrack02.pause(); } } }, time); } } </script> |description_container>[<span class="header_whitespace"><p>Sarah rarely goes for walks. The constant heat and high levels of humidity make it hard for her to breathe outside. Sarah remembers the days when the streets were crowded with people. Cities were much more alive back then. The few people who pass by nowadays do so with little regard for the outside world. They're ghosts with no fundamental connection to this reality, which many deem a failure yet do not dare to give up.</p></span>] |choice_container>[ <span>Sarah passes a [[bar->Bar]], [[diner->Diner]] and the city's [[graveyard->Graveyard]], before she walks back [[home->Appartment]].</span> ] }{ (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] |description_container>[<span class="header_whitespace"><p>Sarah hasn't seen a bar since her discovery of virtual life some eighteen months ago. The space's occupied by the rare kind of people who prefer real contact over digital communication. Most of them look like they're older than fifty. A humanoid robot is sitting at one of the tables. An odd place for a robot to be. Sarah wonders if he's been abandoned and in search of a new partner. (if: $actions_bar's call_colleague is 1 and $switches's eaten is 0)[Sarah sits down at a table in the corner. She wants to call her former colleague, Zoe, for a drink, but can't allow herself to spend money on alcohol as she's still got to eat.](elseif: $actions_bar's call_colleague is 1 and $switches's eaten is 1)[Sarah wants to call her former colleague, Zoe, but doesn't have the money to buy her a drink and feels ashamed to let Zoe pay.(set: $actions_bar's call_colleague to 0)]</p></span>] |feedback_container>[<span></span>] |choice_container>[(if: $actions_bar's call_colleague is 1)[(link: "<span>Sarah calls Zoe</span>")[(set: $actions_bar's call_colleague to 0)(set: $switches's drunk to 1)(set: $actions_diner's eat to 0)(replace: ?feedback_container)[<span>Sarah waits for thirty minutes before Zoe drops by. Sarah got fired half a year ago. She had been a forensic analyst for 15 years, but her nightly adventures in VR made her sloppier by the day. Sarah remembers how she used to be revolted by violence. In her early twenties she made it her personal mission to have it removed from society as much as possible within her power. Somewhere along the way her idea of society became blurred to the point where she lost the ability to tell who the hell she was actually serving. Each day the concept got more abstract, and her connection to it weaker and weaker, slowly slipping through her fingers.<p>Zoe and Sarah hug and for a moment Sarah doesn't want to let her go. Zoe's the only friend she has left and she can't even remember the last time she saw her.<br />'Are you on a diet? You must've lost like who knows how many pounds. Do you eat enough? Sorry for the interrogation. It's good to see you. You never call. How're you doing?' says Zoe, excited.<br />Sarah looks down. She has no idea how to answer that question before deciding to say, 'Just fine. How about a beer?'</p><p>Sarah and Zoe recollect memories for an hour and a half and Sarah manages to carefully avoid talking about the current situation. She spends her last bit of money on drinks, but she doesn't care. They say goodbye, give eachother one more hug, and Sarah notices there is something about real-body contact that lacks presence in virtual form, although she can't pinpoint it.</p></span>]]]<span>[[Sarah leaves the bar->Wander]]</span>] |choice_container_extra>[] }{ <script> $('body').removeClass().addClass('VR'); $('tw-passage').removeClass().addClass('VR'); </script> (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] <script> if (currentTrack != 5 && soundMuted % 2 != 1){ audioTrack05.play(); currentTrack = 5; time = 0; for (i = 0; i < 10; i++) { time += 200; setTimeout(function() { if (audioTrack05.volume <= 0.9){ audioTrack05.volume += 0.1; } if (audioTrack03.volume > 0.1){ audioTrack03.volume -= 0.1; } else { if (!audioTrack03.paused){ audioTrack03.pause(); } } }, time); } } </script> (set: $passage to "Swim") (set: $switches's swam to 1) |description_container>[<span class="header_whitespace"><p>Sarah walks up to the small lake ahead, takes off her clothes and dives into the water. She's one of the few people aware that an entire network of underwater tunnels exist under the island's surface. Her skin is softly touched by the blades of light-emitting grass that changes color based on Sarah's position. Sometimes Sarah wonders whether the island is just a projection of her own imagination, a place as liquid as her mind, but she can never tell for sure. The people inhabiting this world are certainly real.</p></span>] |choice_container>[ <span>[[Sarah gets out of the water->Community]]</span> ] }<span class="header_quarterspace"><p>Sarah looks up and observes the city, floating above the tree deck, where most people live. It looks much more developed and futuristic then contemporary real-life cities. Plants, flowers and trees are everywhere. It's a lot cleaner, too, and completely self-sustaining. The city and island don't need a government or any other controlling entity, apart from the open source community, that maintains the software that's built on blockchain technology. Infinite resources make money redundant and as a result criminality has no soil to grow in. Environmental issues are non-existent, lack of housing is not an issue. People are only competitors when they choose to be so within the boundaries of games, but no one is a financial or physical threat to anyone's survival. Wars do not occur because the required conditions are absent. People can surrender to their darkest fantasies in simulated environments, and others who behave in anti-social ways risk being blocked by the people they harrass.</p></span> (if: $passage is 'Community')[(replace: ?choice_container)[]]{ <script> $('body').removeClass().addClass('VR'); $('tw-passage').removeClass().addClass('VR'); </script> (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] (set: $passage to "Walk path") (set: $switches's walked to 1) |description_container>[<span class="header_halfspace"><p>She has hardly seen any living animals in the forest, but she knows they are there. Occasionally she would spot blueish gazelle-like creatures in the distance who'd stare at her in a frozen position before disappearing. Things on the island can change in the blink of an eye. Glimmering pink rocks within her field of view disappear the second she looks in another direction. Trails she'd walked before would another day lead to an entirely different place. Sometimes Sarah wonders whether the forest is just a projection of her own imagination, a place as liquid as her mind, yet it still seems to be produced by a larger consciousness due to the fact that she met other people who were not computer controlled, of that she is certain. She felt a connection with them she believes is impossible to have with artificial life, caused by the expression of micro-emotions too complex for algorithms to emulate.</p></span>] |feedback_container>[<span></span>] |choice_container>[ (if: $switches's swam is 0)[ <span>[[Sarah continues down the trail->Community]]</span> ](else:)[ <span>[[Sarah returns to the community->Community]]</span> ] ] |choice_container_extra>[] }{ <script> $('body').removeClass().addClass('VR'); $('tw-passage').removeClass().addClass('VR'); </script> (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] <script> if (currentTrack != 3 && soundMuted % 2 != 1){ audioTrack03.play(); currentTrack = 3; time = 0; for (i = 0; i < 10; i++) { time += 200; setTimeout(function() { if (audioTrack03.volume <= 0.9){ audioTrack03.volume += 0.1; } if (audioTrack05.volume > 0.1){ audioTrack05.volume -= 0.1; } else { if (!audioTrack05.paused){ audioTrack05.pause(); } } if (audioTrack01.volume > 0.1){ audioTrack01.volume -= 0.1; } else { if (!audioTrack01.paused){ audioTrack01.pause(); } } }, time); } } </script> (set: $passage to "Community") |description_container>[<span class="header_halfspace"><p>Sarah always finds her way to the forest community she's part of. Hundreds of similar autonomous communities exist on the island. Sarah's immediately greeted and hugged by her partner, Harper, who died of Talija at age 29 and has led a purely digital life for three years already.<br /> 'Everything set to go?' Harper asks.<br /> 'As good as,' replies Sarah.<br /> 'Can't believe it's finally happening. We'll celebrate your transition as soon as you arrive. We can finally be together. <em>Really</em> together, I mean. I assure you there won't be a single moment where you'll look back,' says Harper, looking thrilled. Harper and Sarah continue to talk through the details of Sarah's forthcoming death.</p></span>] |feedback_container>[<span></span>] |choice_container>[ (if: $switches's looked_at_sky is 0)[<span>(link: "Sarah looks at the sky")[ (set: $switches's looked_at_sky to 1) (replace: ?description_container)[(display: 'Sky')] (replace: ?feedback_container)[<span style="margin-bottom: 20px">[[Sarah doesn't want to leave but knows she will return soon. She disconnects.->The Mind's Eye]]</span>] ]</span>] (if: $switches's looked_at_sky is 1)[<span>[[Sarah doesn't want to leave but knows she will return soon. She disconnects.->The Mind's Eye]]</span>]] }{ <script> $('body').removeClass().addClass('VR'); $('tw-passage').removeClass().addClass('VR'); </script> (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] |description_container>[<span class="header_whitespace"><p>Sarah once stumbled upon a group of people who were blocked and thereby socially excluded from their previous community for reasons they would not reveal. It was apparent to Sarah that perfect conditions could not solve all of humanity's urges for negative behaviour. This flaw, potentially dangerous to the preservation of this world, had yet to be eliminated.</p></span>] |feedback_container>[<span></span>] |choice_container>[ <span>(link: "Sarah looks at the sky")[(set: $switches's looked_at_sky to 1)(replace: ?description_container)[(display: "Sky")]]</span> <span>[[Sarah goes for a swim in the lake nearby->Swim]]</span> <span>[[Sarah walks the trail in front of her->Trail]]</span> ] |choice_container_extra>[] }{ <script> $('body').removeClass('VR'); $('tw-passage').removeClass('VR'); soundMuted = 0; </script> |description_container>[<span><img src="media/YRLogo.png" width="100%" style="margin-top: 8em" alt="Yesterday's Reality" class="logo" /><p>This is a short interactive science fiction story that you can play directly in your web browser. The story might take a little while to load, depending on the speed of your internet connection. There is sound (set: $myVar to "(click to mute)")<tw-link class='cyclingLink' data-cycling-texts='["(click to mute)", "(unmute)"]' onclick='soundMuted++;clickCyclingLink(this, "$myVar");'>$myVar</tw-link>. Headphones are recommended. Modern browser (with proper HTML5/CSS3 support) with Javascript enabled is required. Comments, feedback or technical issues can be mailed to <a href="mailto:walter@madroutine.com">walter@madroutine.com</a>. A version with higher quality sound and high DPI support (e.g. Retina screens) can be downloaded from <a href="http://walterjohan.itch.io/">Itch.io</a>.</p><p>This game deals with the topic of suicide. Please do not play it if you are not comfortable with that. </p></span>] |choice_container>[ <span>[[Start->Intro 1]]</span> ] }{ (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] (set: $actions_appartment's sit to 0) |description_container>[<span class="header_whitespace"><p>Sarah's covered in sweat. She sits down on the couch for a minute, two minutes, without much going on in terms of physical or mental activity. (if: $switches's eaten is 0)[Her head is void of thoughts, her body void of energy.](else:)[Her head is void of thoughts, her body void of energy, despite the meal she just had.] She looks through her window and sees a bird sitting on the window frame outside. God knows who's looking at her right now.</p></span>] |feedback_container>[<span></span>] |choice_container>[ <span>[[Sarah gets back up->Appartment]]</span> ] |choice_container_extra>[] }{ (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] |description_container>[<span class="header_whitespace"><p>(if: $switches's stuff_packed is 1)[The doorbell rings. Two men carry Sarah's stuff out of the room and into the elevator. She wasn't particularly attached to her belongings anyway.](else:)[The doorbell rings. The two collectors shake their heads disapprovingly when they see Sarah hasn't packed her stuff. They only take her bed and couch and leave the rest behind. Sarah feels bad about it. It was her last chance to do something good and she blew it.]</p><p>She fills a glass of water, grabs a pack of sleeping pills out of a drawer in the kitchen and sits down in the middle of her now empty appartment. It's 3 PM. In 45 minutes Harper will call an ambulance from within New Eden. They will arrive too late to save Sarah, but soon enough to protect her brain from decay.</p></span>] |feedback_container>[<span></span>] |choice_container>[ <span>[[Sarah swallows the sleeping pills->Death Scene]]</span> ] |choice_container_extra>[] }{ <script> $('body').removeClass('VR'); $('tw-passage').removeClass('VR'); </script> (set: $switches_initiated to 0) |description_container>[<span><img src="media/YRLogo.png" width="100%" style="margin-top: 5em" alt="Yesterday's Reality" class="logo" /><p>Text, images and sound by <strong>Walter Johan</strong></p><p>Script editing by <strong>Aisling Marks</strong></p><p>Thanks to <strong>Tobias Mathijsen</strong>, <strong>Shahin Jalali</strong>, <strong>Aisling Marks</strong> and <strong>Nicky Heijmen</strong></p><p>Many thanks to the developers of the open source software used in this production:</p> <ul> <li><a href="http://www.twinery.org">Twine</a> (storytelling engine) <li><a href="http://www.blender.org">Blender</a> (3D modeling) <li><a href="http://www.krita.org">Krita</a> (sketches) <li><a href="http://www.libreoffice.org">LibreOffice</a> (script) </ul> </span>] |choice_container>[ <span>[[Play again->Intro 1]]</span> <span><a href="http://www.walterjohan.com/">Back to walterjohan.com</a></span> ] |choice_container_extra>[] }{ (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] |description_container>[<span class="header_halfspace"><p>Sarah opens her profile page on her [[AmbiLenses->Ambilenses]] display. It reads:</p><h2 class="colored">Rachel Dumonte</h2><ul class="colored"><li>Real name: Sarah Mitchell<li>Profile created: 12 November 2032<li>Karmascore: 457<li>Time spent in New Eden: 542 hours<li>Favourite island: Mitheru</ul></span>] |feedback_container>[<span class="colored"><p style="margin-top: 0">(if: $switches's access is 0)[Permission request: allow AfterLife access to your profile</p></span>]] |choice_container>[ (if: $switches's access is 0)[ (link: "<span>Allow access</span>")[(replace: ?feedback_container)[<span class="colored"><p>Access allowed. Avatar and Karmascore successfully transfered.</p></span>](set: $switches's access to 1)(set: $number_of_reminders to it - 1)(if: $number_of_reminders < 2)[(set: $reminders to "reminder")](if: $switches's visited_vr is 1 and $switches's access is 1)[(set: $switches's ready_to_die to 1)]] ] <span>[[Sarah closes her profile page->AR]]</span> ] |choice_container_extra>[] }{ (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] |description_container>[<span class="header_whitespace"><p>Pair of lenses for rendering augmented reality directly in front of the eyes. Model `C300.` Released in `2026.`</p></span>] |choice_container>[ <span>[[Back->Profile]]</span> ] }{ (if: $switches_initiated is not 1)[ (display: "InitiateSwitches") ] |description_container>[<span class="header_whitespace"><p>Type-3 SpyBirds owned by the government. Indistinguishable from real birds. Equipped with Z-Ion power cell for 96 hours of operation, 2KW HoverEngine and a 15-stop dynamic range camera with an ISO of over 4 million (+75dB), `0.0003` lux. There are five models resembling different bird types.</p></span>] |choice_container>[ <span>[[Back->Sleep]]</span> ] }