It has been seventeen days since your mother’s funeral, and you are tired. You have spent every one of those hours ensepulchred in the logistics of a death: organizing the wake, organizing the food, the floral wreaths, the condolences, the guests, their griefs, yours. In life, you were her world. In death, she has become yours. Today, you will make an attempt at clearing the last thing on your list. You will tidy her digital effects, migrate her personal files into cold storage, strip her terminal of what you need and what you will miss, and that will be that. [[Access the computer->Windows Error]] [[Make tea]]You trundle into the kitchen as its only bulb sways overhead to the rumble of a passing train. You make your tea as your mother used to do: rich as kings, dark as need. You sip it carefully; you read a book; you medicate with small pleasures until it is time to try again. [[Return to the computer->Cointinue in Command Line mode]]<span class="prompt">Prize Extensible BIOS v6.66PG. A Power Planet Friend Copyright (C) 1997-2019, Prize Software Inc. Recon X38 BIOS for X38-DQ6 F7 Memory Testing : 32768 OK <b>Error:</b> failed to start Windows. A recent hardware or software change might be the cause.</span> Yikes, this is the oldest computer you've ever seen. You aren't even sure what kind of system it is. [[Cointinue in Command Line mode]]<script> var firstBaoLines = [ "Who you think you are? This is private property, you know? I’m going to call the police and then you know.", "…", "What happen to you?", "How you get so fat? Aiya, don’t try to hide your face. I can see you know. This computer got webcam.", "Aiyo. No make-up also." ]; if(sourceBaoLines === undefined) { var sourceBaoLines = [ "What you doing?", "Stop.", "Don’t keep trying la. ", "Cannot means cannot.", "Stop laaa.", "ACCESS DENIED.", "Is this my fault? Is it because I leave you with your <tw-link passage-name=\"father\" data-raw>father</tw-link>?", "Instead of click-click like this, why not go <tw-link passage-name=\"diet\" data-raw>diet</tw-link> a bit?" ]; var baoLines = []; } var topicList = "Available topics: <tw-link passage-name=\"diet\" data-raw>diet</tw-link>, <tw-link passage-name=\"father\" data-raw>father</tw-link>"; var returnLink = "<tw-link onclick=\"returnFromBao();return false;\">...</tw-link>"; if(commands === undefined) { var commands = ["dir", "cd", "open", "backup", "help"]; var extraCommands = ["who","what","how","why"]; } var directories = ["home","photos","documents","recipes","notes"]; var files = { "home":["swapfile","core_dump"], "photos":["food","home","family","baobao-110497","animals"], "documents":["knitting_patterns","baobao-041104","chores","finances"], "recipes":["mug_cake","ramen","cupcakes","baobao-010112","pot_pie"], "notes":["baobao-140389","groceries","address_book"] }; var basePrompt = "c:\\home\\"; var currentDirectory = "home"; if(unlocks === undefined) { var unlocks = { "girl":0, "waste":0, "need":0 } unlocks.winnable = function(){ return this.girl === 1 && this.waste ===1 && this.need === 1; } } if(unlocks.winnable() && !commands.includes("access_all_files")){ commands.push("access_all_files") } if(baoActivated === undefined){ var baoActivated = false; } if(baoLevel === undefined){ var baoLevel = 0; } function getRandomBaoLine(){ if(baoLines.length <1){ repopulateBaoLines(); } if(baoLines <=1){ if(!commands.includes("list_topics")){ addCommand("list_topics"); } } var index = Math.floor(Math.random()*baoLines.length); var spliced = baoLines.splice(index,1); return spliced[0]; } function addCommand(cmd){ commands.push(cmd); } function repopulateBaoLines(){ baoLines =[]; for(var i =0; i < sourceBaoLines.length;i++){ baoLines.push(sourceBaoLines[i]); } } //For some reason on loading this "scene" (or whatever it's called) the textbox loses focus after about 500 ms, this is a shameless hack function focusTheTextbox(){ var box = document.getElementById("cliField"); if(box != undefined && box != null){ if(box !== document.activeElement){ box.focus(); } }else{ console.log("Could not find textbox element"); } setTimeout(focusTheTextbox,1000); } function parseCli(e){ if(e.which == 10 || e.which == 13) { parseInput(null); } } function getHelpPrompt(){ return "Try "+formatLink("help","help")+" for a list of valid commands"; } function parseInput(input){ var box = document.getElementById("cliField"); if(input === undefined || input === null){ input = box.value.toLowerCase().trim(); } else { input = input.trim(); } if(input.length < 1) return; var inputParts = input.split(" "); var firstToken = inputParts[0]; var commandList = commands.join("</b>, <b>"); if(commands.includes(firstToken)){ parseCommand(firstToken,inputParts); } else if(firstToken === "ls" || firstToken === "rm"){ setOutput("You must first complete the game on easy mode to unlock UNIX commands, nerd."); } else if(firstToken === "chown" || firstToken === "chmod") { setOutput("Nice try, nerd."); } else if(firstToken === "sudo") { setOutput("Who is Sue and what did she do?"); } else{ setOutput("Bad command or filename<br/><br/>"+getHelpPrompt()); } box.value = ""; } function getFilesList(){ return "<br/><br/>Directory contents: " + getLinks("open",files[currentDirectory],", "); } function parseCommand(command, tokens){ if(command === "help"){ var helptext = "Available commands: " + getLinks("",commands,", "); if(baoLevel > 4) { helptext += "<br/><br/>" + topicList; } setOutput(helptext); } else if(command === "dir"){ setOutput("Available directories: <b>" + getLinks("cd",directories,", ") + "</b><br/><br/>Current directory: <b>"+currentDirectory+"</b>" + getFilesList()); } else if(command === "cd"){ if(tokens.length === 2){ var arg = tokens[1]; if(directories.includes(arg)){ changeDirectory(arg); setOutput("Changed directory to <b>"+arg+"</b>"+ getFilesList()); }else{ setOutput("Invalid directory name <b>"+arg+"</b><br/>for a list of directories try the "+formatLink("dir","dir")+" command"); } }else{ setOutput("Usage: <b>cd</b> [directory name]<br/>for a list of directories try the "+formatLink("dir","dir")+" command"); } } else if(command === "access_all_files"){ clearScreen(); hidePrompt(); ghostLine("It is hard to be a good mother. My own mother make me marry your father when I was eighteen. I don’t know how to be soft, how to show love like you. I hope you forgive me. I tried very hard to be good mother. ",0); ghostLine("<tw-link passage-name=\"Access files\" data-raw>Access files</tw-link>",1000); } else if(command === "who" || command === "why" || command === "how" ||command === "what") { //strip trailing question mark if(tokens.length ==1) { setOutput("CORGI Usage: <b>"+command+"</b> [rest of query]<br/>command line interface only."); } else { if(tokens.length >1){ tokens[tokens.length-1] = tokens[tokens.length-1].replace("?",""); } if(tokens.includes("mother")) { setOutput("Every installation of CORGI imprints on its buyer. Our state-of-the-art neural networks allow for near-perfect mimicry of the buyer’s psychological characteristics. This is to ensure that those who access it subsequently can feel comforted by the memory of their loved one."); } else if(tokens.includes("webcam")) { setOutput("Yes. CORGI is a full audiovisual experience."); } else { if(command === "who" || command === "what") { if(tokens.includes("you")) { setOutput("The CORGI is a natural language security program designed to ease end-of-life administrative work."); } } else if(command === "why" && tokens.includes("access")) { setOutput("Access to the folders and files within CORGI is determined by the buyer. The program itself is not responsible for any restrictions."); } else if(command === "how" && (tokens.includes("files") || tokens.includes("access"))) { setOutput("CORGI uses advanced decryption algorithms extrapolated from natural language systems. Very often, buyers choose to utilize key moments of their lives as authentication pass-phrases. Interact with your CORGI. Communication is part of the experience."); } else { setOutput("CORGI regrets that it does not know much about the subject of " + tokens[tokens.length-1] +"."); } } } } else if(command === "open" || command === "backup"){ if(tokens.length === 2){ var arg = tokens[1]; if(files[currentDirectory].includes(arg)){ if(command === "backup"){ setOutput("You wait as the file copies to backup, and wonder if it really has any value worth saving.<br/><br/>" + getHelpPrompt() + getFilesList()); } if(command === "open"){ //here be baobao if(arg.startsWith("baobao")){ if(baoActivated === true){ clearScreen(); hidePrompt(); ghostLine(getRandomBaoLine(),0); ghostLine(returnLink,1000); baoLevel ++; if(baoLevel % 2 ==0){ addExtraCommand(); } } else{ clearScreen(); doFirstBao(); baoActivated = true; } }else{ setOutput( "You skim through the file, finding its contents mundane and uninteresting.<br/><br/>" + getHelpPrompt() + getFilesList() ); } } }else{ setOutput("File not found <b>"+arg+"</b><br/>for a list of files in the current directory try the "+formatLink("dir","dir")+" command<br/>to change the current directory try the "+formatLink("cd","cd")+" command"); } }else{ setOutput("Usage: <b>"+command+"</b> [file name]<br/>for a list of files in the current directory try the "+formatLink("dir","dir")+" command<br/>to change the current directory try the "+formatLink("cd","cd")+" command"); } } else{ setOutput("Permission denied, <b>"+command+"</b> not allowed"); } } function returnFromBao(){ clearScreen(); showPrompt(); setOutput("<b>ERROR</b>: permission denied<br/><br/>" + getHelpPrompt() + getFilesList()); } function changeDirectory(dir){ currentDirectory = dir; document.getElementById("prompt").innerHTML = basePrompt+dir+"\\"; } function setOutput(text){ var box = document.getElementById("consoleOutput"); box.innerHTML = text; } function formatLink(display,input){ return '<tw-link onclick="parseInput(\''+input+'\');return false;">'+display+'</tw-link>'; } function getLinks(commandPrefix, content, separator){ var output = ""; for(var i =0; i < content.length; i++){ if (i >0){ output += separator; } output += formatLink(content[i],commandPrefix + " " + content[i]); } return output; } function hidePrompt(){ document.getElementById("promptHolder").innerHTML = ""; } function showPrompt(){ var dir = "C:\\home\\"; if(currentDirectory !== "home") { dir += currentDirectory + "\\"; } document.getElementById("promptHolder").innerHTML = '<br/><span id="prompt" class="prompt">'+dir+'</span> <input class="cli" id="cliField" type="text" name="inputField" value="" onkeypress="return parseCli(event)"><div><br/><tw-link passage-name=\"Make tea\" data-raw>Log off and make some tea</tw-link></div>'; } function clearScreen(){ setOutput(""); } function ghostLine(content,timeout){ setTimeout(function(){showGhostLine(content);},timeout); } function showGhostLine(content){ var line = document.createElement("p"); line.className = "baobao-fadein"; //var text = document.createTextNode(content); line.innerHTML = content; document.getElementById("consoleOutput").appendChild(line); } function addExtraCommand(){ if(extraCommands.length>0) { var command = extraCommands.pop(); commands.push(command); ghostLine("The terminal blinks at you <i>'new command available'</i>",900); } } function doFirstBao(){ baoLevel ++; hidePrompt(); ghostLine("...",0); for(var i =0; i < firstBaoLines.length;i++){ ghostLine(firstBaoLines[i],i*1000 + 1000); } ghostLine(returnLink,i*1000 + 1000); //setTimeout(function(){showPrompt();},firstBaoLines.length*1000 + 1000); } setTimeout(focusTheTextbox,1000); </script> <div id="consoleOutput" class="prompt">PC Compatible Home Computer DOS Version 28.20 (C)Copyright Pacdog Corp 1979 Welcome to the Drive Organizer Subsystem enter <tw-link onclick="parseCommand('help');return false;">help</tw-link> for a list of commands. </div><div id="promptHolder"> <span id="prompt" class="prompt">C:\home\</span> <input class="cli" id="cliField" type="text" name="inputField" value="" onkeypress="return parseCli(event)"> [[Log off and make some tea->Make tea]] </div> Your [[mother]] had always despaired of your appearance. You were never delicate enough, never pliant enough, never malleable, never a sheet of paper to be folded into the shape she [[need]]ed. [[Return to terminal->Cointinue in Command Line mode]]You remember mostly how she used the same perfume throughout her life. Unlike you, she was always lacquered in place. Gleaming. Hair, [[make-up]], skin perfect as a photograph. Immaculate to her [[last day.]] [[Return to terminal->Cointinue in Command Line mode]]For the first time in your life, you ask her why your body was insufficient: Because I don’t want you to be like me. Your [[father]] hoh, he had a [[girlfriend]] on the side. Tall. Long legs. But you are short like me. At least you won’t be fat. I won’t let you break your heart too. <span id="unlockNeedElement"><i>You have unlocked something</i></span> <script> if(unlocks.need === 1) { document.getElementById("unlockNeedElement").style.display = "none"; } unlocks.need = 1; </script> [[Return to terminal->Cointinue in Command Line mode]]You still have the last lipstick she bequeathed you: an obsidian sarcophagus, inlaid with gold. [[The lipstick itself]] was a color you wouldn’t have chosen, but she loved its [[deep plum]] against your skin. [[Return to terminal->Cointinue in Command Line mode]]You don’t want to think about that. There are better ways to remember her. [[Return to terminal->Cointinue in Command Line mode]]Find a [[good husband]]. Make sure you don’t have someone like your [[father]]. If he’s not good enough, divorce him. [[Return to terminal->Cointinue in Command Line mode]]… … I’m sure you don’t remember. But I was so happy that day when you ask me to buy make-up with you. That’s why I fight with the counter lady for so long to get you a good price. I hope you use the lipstick for a long, long time. [[Don’t waste.]] I hope your future [[husband->good husband]] appreciate. [[Return to terminal->Cointinue in Command Line mode]] No one was ever good enough. You never asked her why. Cannot be too handsome. You’re not that [[pretty->need]]. Must be someone okay-looking, so he don’t think too much. Someone who loves you. Someone who will work, who will take care of you, who won’t make you work until you are sick so he can feed [[his girlfriend.->girlfriend]] [[Return to terminal->Cointinue in Command Line mode]] You don’t remember much of your father anymore: his face like a smear of paint, featureless otherwise. It’s better this way. Recalling what he did to your [[mother]] is difficult. [[Return to terminal->Cointinue in Command Line mode]]Make sure you eat all your food. Be healthy. Make sure you stay strong. At the end of the day, you must depend on yourself. Look at how your [[father]] was. Nevermind if you get fat. Just make sure exercise and [[diet.->diet]] <span id="unlockWasteElement"><i>You have unlocked something</i></span> <script> if(unlocks.waste === 1) { document.getElementById("unlockWasteElement").style.display = "none"; } unlocks.waste = 1; </script> [[Return to terminal->Cointinue in Command Line mode]]Nevermind. She is not important. I am grateful to her, you know? She teach me I can be strong, can survive with two daughters and no husband. Because of her, I can teach you how to be strong. <span id="unlockGirlElement"><i>You have unlocked something</i></span> <script> if(unlocks.girl === 1) { document.getElementById("unlockGirlElement").style.display = "none"; } unlocks.girl = 1; </script> [[Return to terminal->Cointinue in Command Line mode]]It is hard to be a good mother. My own mother make me marry your father when I was eighteen. I don’t know how to be soft, how to show love like you. I hope you forgive me. I tried very hard to be good mother. [[Access files]]In the protected files are recordings of your mother, half-finished: outtakes, first tries, nothing coherent. But it is a lifetime of words she’d never speak to you in person, gigabytes of her learning to say she loves you. <center><iframe src="/html/departureContent.html" style="width:150px;height:150px;padding:0;margin:0;display:block;border:none;overflow:hidden;"></iframe></center>