<<silently>>\n\n<<set $lastHumanLocation = "HumanCafeteria">>\n<<set $emailsRemaining = $emailsRemaining - 1>>\n<<set $workDoneThisTime = $workDoneThisTime + 1>>\n<<set $stepsSinceWorked = 0>>\n\n<<if $toFlyModeTimerRunning eq 0>>\n <<if $flyModeCount eq 0>>\n <<if $workDoneThisTime gte $FIRST_WORK_REQUIREMENT>>\n <<display "Timer Addon">>\n <<set_timer_mode "display">>\n <<set_timer_param "FlyTransition">>\n <<set $toFlyModeTimerRunning = 1>>\n <<start_timer 1>>\n <<endif>>\n <<endif>>\n <<if $flyModeCount eq 1>>\n <<if $workDoneThisTime gte $SECOND_WORK_REQUIREMENT>>\n <<display "Timer Addon">>\n <<set_timer_mode "display">>\n <<set_timer_param "FlyTransition">>\n <<set $toFlyModeTimerRunning = 1>>\n <<start_timer 1>>\n <<endif>>\n <<endif>>\n <<if $flyModeCount gte 2>>\n <<if $workDoneThisTime gte $THIRD_WORK_REQUIREMENT>>\n <<display "Timer Addon">>\n <<set_timer_mode "display">>\n <<set_timer_param "FlyTransition">>\n <<set $toFlyModeTimerRunning = 1>>\n <<start_timer 1>>\n <<endif>>\n <<endif>>\n<<endif>>\n<<endsilently>>\n<<if Math.random() < 0.5>>\n<<set $question = \neither(\n"asks you to list all the salient differences between product A and product B",\n"makes a formal request to see the records your company holds on them",\n"asks whether you know anything about how to connect two routers together to extend their wifi coverage, something which has nothing to do with your office",\n"talks about a product that your company does make, but which you have no connection with",\n"tells you about a theory they have concerning microwave radiation",\n"asks you to send them an information sheet about a product you have never heard of",\n"asks whether there are any jobs going in your office",\n"asks you out on a date",\n"attempts to start a conversation with you about immigration reform",\n"gives you their sales pitch for a product made by a competing company"\n) >>\n\nYou open an email and <<print either("brace yourself","take a deep breathe","pray for inner strength","grind your teeth")>>. In it, <<print either("a customer","a client","someone","some customer")>> <<print $question>>.\n\nYou type in, "<<cyclinglink $pointlessCallAnswer "I don't know" "that's not my area" "I'll get back to you" "I'm forwarding your mail to a colleague" "why are you emailing me?" "what do you want from me?" "don't you have anything better to do?" "I think you've got the wrong address" "please don't email this address again">>", and [[send it|HumanCafeteria]].\n<<else>>\n<<set $question = \neither(\n"asks for help with the computer system your office deals with",\n"requests information on your latest products",\n"talks about how their computer isn't working anymore",\n"asks you some very specific questions about the system your office supports",\n"asks for a replacement manual to be sent to them",\n"gives you a remarkably detailed account of their daily use of the system your office supports, then asks a complicated question you don't know the answer to",\n"inquires about your office's policy on returning software after the warantee has expired",\n"tells you an involved story about a problem they're having with your company's software",\n"asks you why they shouldn't move their business to a competitor's system",\n"asks about upgrade options for an antiquated version of your company's software"\n) >>\nYou open the first email and <<print either("brace yourself","take a deep breathe","pray for inner strength","grind your teeth")>>. In it, <<print either("a customer","a client","someone","some customer")>> <<print $question>>.\n\nYou type in a message to <<cyclinglink $normalCallAnswer "tell them you'll get back to them" "say you'll have an appropriate colleague get in touch" "ask whether they've tried the general purpose support email address" "get them out of the way" "give them the standard response" "do your best to assist them">> and then [[send it|HumanCafeteria]].\n<<endif>>
<<set $workDoneThisTime = 0>>\n<<set $toHumanModeTimerRunning = 0>>\n\n<<stopvideo>>\n<<stopallsound>>\n\n<<playsound "Fly-_Human.mp3">>\n\n<<timedgoto $lastHumanLocation $ZERO>>\n\n<<display "Timer Addon">>\n<<set_timer_mode "display">>\n<<set_timer_param $FLY_TRANSITION>>\n<<set $timerDuration = 5 + (5 - $flyModeCount) * 6 + (Math.random() * (5 - $flyModeCount) * 6)>>\n\n<<if $flyModeCount eq 1>>\n<<set $timerDuration = 25>>\n<<endif>>\n<<if $flyModeCount eq 2>>\n<<set $timerDuration = 20>>\n<<endif>>\n<<if $flyModeCount eq 3>>\n<<set $timerDuration = 15>>\n<<endif>>\n<<if $flyModeCount eq 4>>\n<<set $timerDuration = 10>>\n<<endif>>\n<<if $flyModeCount eq 5>>\n<<set $timerDuration = 5>>\n<<endif>>\n\n<<start_timer $timerDuration>>\n\n<<set $toFlyModeTimerRunning = 1>>
<<silently>>\n\n<<set $lastHumanLocation = "HumanOffice">>\n<<set $stepsSinceWorked = 0>>\n<<set $callsremaining = $callsremaining - 1>>\n<<set $workDoneThisTime = $workDoneThisTime + 1>>\n\n<<if $toFlyModeTimerRunning eq 0>>\n <<if $flyModeCount eq 0>>\n <<if $workDoneThisTime gte $FIRST_WORK_REQUIREMENT>>\n <<display "Timer Addon">>\n <<set_timer_mode "display">>\n <<set_timer_param $FLY_TRANSITION>>\n <<set $toFlyModeTimerRunning = 1>>\n <<set $timerDuration = Math.random() * 10 + 5>>\n <<start_timer $timerDuration>>\n <<endif>>\n <<endif>>\n <<if $flyModeCount eq 1>>\n <<if $workDoneThisTime gte $SECOND_WORK_REQUIREMENT>>\n <<display "Timer Addon">>\n <<set_timer_mode "display">>\n <<set_timer_param $FLY_TRANSITION>>\n <<set $toFlyModeTimerRunning = 1>>\n <<set $timerDuration = Math.random() * 10 + 5>>\n <<start_timer $timerDuration>>\n <<endif>>\n <<endif>>\n <<if $flyModeCount gte 2>>\n <<if $workDoneThisTime gte $THIRD_WORK_REQUIREMENT>>\n <<display "Timer Addon">>\n <<set_timer_mode "display">>\n <<set_timer_param $FLY_TRANSITION>>\n <<set $toFlyModeTimerRunning = 1>>\n <<set $timerDuration = Math.random() * 10 + 5>>\n <<start_timer $timerDuration>>\n <<endif>>\n <<endif>>\n<<endif>>\n<<endsilently>>\n<<if Math.random() < 0.5>>\n<<set $question = \neither(\n"asks you to list all the salient differences between product A and product B",\n"makes a formal request to see the records your company holds on them",\n"asks whether you know anything about how to connect two routers together to extend their wifi coverage, something which has nothing to do with your office",\n"talks about a product that your company does make, but which you have no connection with",\n"begins to tell you about a theory they have concerning microwave radiation",\n"asks you to send them an information sheet about a product you have never heard of",\n"asks whether there are any jobs going in your office",\n"asks you out on a date",\n"attempts to start a conversation with you about immigration reform",\n"starts into their sales pitch for a product made by a competing company"\n) >>\n\nYou pick up the phone and <<print either("brace yourself","take a deep breathe","pray for inner strength","grind your teeth","close your eyes")>> before answering with the standard greeting. <<print either("The voice on the end of the line","The caller","Your caller","The customer")>> <<print either("plaintively","aggressively","boredly","slowly","urgently")>> <<print $question>>.\n\nYou reply, "<<cyclinglink $pointlessCallAnswer "I don't know" "that's not my area" "please hold" "I'm transferring you to a colleague" "why are you calling me?" "what do you want from me?" "don't you have anything better to do?" "I think you've got the wrong number" "please don't call this number again">>", and [[end the call|HumanOffice]].\n<<else>>\n<<set $question = \neither(\n"asks for help with the computer system your office deals with",\n"requests information on your latest products",\n"talks about how their computer isn't working anymore",\n"asks you some very specific questions about the system your office supports",\n"asks for a replacement manual to be sent to them",\n"gives you a remarkably detailed account of their daily use of the system your office supports, then asks a complicated question you don't know the answer to",\n"inquires about your office's policy on returning software after the warantee has expired",\n"tells you an involved story about a problem they're having with your company's software",\n"asks you why they shouldn't move their business to a competitor's system",\n"asks about upgrade options for an antiquated version of your company's software"\n) >>\nYou pick up the phone and <<print either("brace yourself","take a deep breathe","pray for inner strength","grind your teeth","close your eyes")>> before answering with the standard greeting. <<print either("The voice on the end of the line","The caller","Your caller","The customer")>> <<print either("plaintively","aggressively","boredly","slowly","urgently")>> <<print $question>>.\n\nYou <<cyclinglink $normalCallAnswer "tell them you'll get back to them" "ask for their information and say you'll have an appropriate colleague get in touch" "ask whether they've tried the general purpose call-centre" "mute them for a while as they talk" "give them the standard response as dictated by the call center's computer system" "try to talk to them for as long as you can bear it" "do your best to assist them">> and then [[end the call|HumanOffice]].\n<<endif>>
You sit alone at a free table and <<cyclinglink $humanCafeActivity "eat a garden salad" "eat an egg and mayonnaise sandwich" "eat an asparagus sandwich" "eat a generic vegetarian sandwich" "drink some coffee" "kill some time" "watch everyone else eating" "try to clear your head">>. <<print either("Never satisfied","Inevitably","Irritatingly","Always ready to spoil a quiet moment","Ever present")>>, your cellphone <<cyclinglink $cellphoneSound "beeps" "trills" "chimes" "makes a sci-fi sound" "plays a power metal chord" "shrieks">> to remind you that you have <<print $emailsRemaining>> emails left to <<if $stepsSinceWorked gt 2>>@@font-size:150%;[[answer|HumanEmail]]@@<<else>>[[answer|HumanEmail]]<<endif>>.\n<<if Math.random() < 0.5>>\n<<display "CafeteriaFlavour">>\n<<endif>>\nAcross the floor are the full-height windows that make it the <<print either("best space","one bearable place","only genuinely enjoyable room","sole naturally-lit room you have access to")>> in the office building. <<print either("You often like to","It's nice to","You're always drawn to wander over to")>> [[look out those windows|HumanWindow]] <<print either("and just lose yourself","and just space out","and try to relax","and think about anything other than work")>>. <<print either("Ever present, of course, is the fact that","Of course, you can't shake the feeling","Technically, though,","You sadly realize that")>> you should [[go back to the office|HumanOffice]] and <<print either("get some work done","answer some more calls","keep chasing your quota for the day")>>.\n\n<<if $lastFlyLocation eq "FlyCafeteria">><<if Math.random() < 0.9>><<display "FlyCafeteriaFlavour">><<endif>><<endif>>\n\n<<silently>>\n<<if state.history.length gt 1>>\n<<if state.history[1].passage.title eq "HumanEmail">>\n<<else>>\n<<stopvideo>>\n<<playvideo nArPZE8EV1Y 0 loop>>\n<<endif>>\n<<endif>>\n\n<<if state.history.length gt 1>>\n<<if state.history[1].passage.title eq "HumanOffice">>\n<<fadeoutsound "HumanOffice.mp3" >>\n<<fadeinsound "HumanCafeteria.mp3" >>\n<<endif>>\n<<endif>>\n\n<<if state.history.length gt 1>>\n<<if state.history[1].passage.title eq "HumanWindow">>\n<<stopsound "ZenWindowFinal.mp3">>\n<<playsound "HumanCafeteria.mp3">>\n<<endif>>\n<<endif>>\n\n<<if state.history.length gt 1>>\n<<if state.history[1].passage.title eq "HumanWindow">>\n<<if $flyModeCount lte 5>>\n<<display "Timer Addon">>\n<<set_timer_mode "display">>\n<<set_timer_param $FLY_TRANSITION>>\n<<set $timerDuration = 5 + (5 - $flyModeCount) * 10 + (Math.random() * (5 - $flyModeCount) * 10)>>\n\n<<if $flyModeCount eq 1>>\n<<set $timerDuration = 25>>\n<<endif>>\n<<if $flyModeCount eq 2>>\n<<set $timerDuration = 20>>\n<<endif>>\n<<if $flyModeCount eq 3>>\n<<set $timerDuration = 15>>\n<<endif>>\n<<if $flyModeCount eq 4>>\n<<set $timerDuration = 10>>\n<<endif>>\n<<if $flyModeCount eq 5>>\n<<set $timerDuration = 5>>\n<<endif>>\n\n<<start_timer $timerDuration>>\n<<endif>>\n<<endif>>\n<<endif>>\n\n<<set $lastHumanLocation = "HumanCafeteria">>\n<<set $stepsSinceWorked = $stepsSinceWorked + 1>>\n\n<<if Math.random() < 0.25>>\n<<set $emailsRemaining = $emailsRemaining + Math.floor(Math.random() * 3)>>\n<<endif>>\n<<endsilently>>
/*\n \nTwineTubular\nA twine macro for making YouTube powered background images\nHacked mercilessly into twine by Jonathan Prior\nhttp://jonathanprior.com\n \nHOW TO USE\n \n<<playvideo RWgg5-kUSho 0>>\n \nargument 1 is the ID of the YT video\nargument 2 is the time you want to start the video at in seconds\nargument 3 should be "loop" if you want the video to loop\nargument 4 should be "sound" if you want sound from the video\n \nso for a video that skips ahead to 20 seconds and loops:\n \n<<playvideo RWgg5-kUSho 20 loop>>\n \nfor the same video as above, but with sound:\n \n<<playvideo RWgg5-kUSho 20 loop sound>>\n \nfor the same video as above, with sound but not looping:\n \n<<playvideo RWgg5-kUSho 20 noloop sound>>\n \nThe video plays automatically throughout the passage you include it in.\n \nTo stop the video, in the next passage, use the <<stopvideo>> macro\n \n*/\n \nwindow._tubular = undefined;\nwindow.jquery_url = 'https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/';\n \nvar s = document.createElement('script');\ns.src = jquery_url + 'jquery.min.js';\ns.onload = function f(){\n if (jQuery) {\n jQuery.noConflict();\n }\n}\ndocument.getElementsByTagName("head")[0].appendChild(s);\n \nif (!document.getElementById("ytjs")) {\n var tag = document.createElement('script');\n tag.src = "https://www.youtube.com/iframe_api";\n tag.id = "ytjs";\n var firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n} else {\n try {\n window.onYouTubeIframeAPIReady();\n } catch(e) {\n void(0);\n }\n}\n \nmacros["playvideo"]={\n handler: function(place, macroName, params, parser) {\n /* jQuery tubular plugin\n |* by Sean McCambridge\n |* http://www.seanmccambridge.com/tubular\n |* version: 1.0\n |* updated: October 1, 2012\n |* since 2010\n |* licensed under the MIT License\n |* Enjoy.\n |*\n |* Thanks,\n |* Sean */\n \n ;(function ($, window) {\n \n // test for feature support and return if failure\n \n // defaults\n var defaults = {\n ratio: 16/9, // usually either 4/3 or 16/9 -- tweak as needed\n videoId: 'ZCAnLxRvNNc', // toy robot in space is a good default, no?\n mute: true,\n repeat: true,\n width: $(window).width(),\n wrapperZIndex: 99,\n playButtonClass: 'tubular-play',\n pauseButtonClass: 'tubular-pause',\n muteButtonClass: 'tubular-mute',\n volumeUpClass: 'tubular-volume-up',\n volumeDownClass: 'tubular-volume-down',\n increaseVolumeBy: 10,\n start: 0\n };\n \n // methods\n \n var tubular = function(node, options) { // should be called on the wrapper div\n var options = $.extend({}, defaults, options),\n $body = $('body') // cache body node\n $node = $(node); // cache wrapper node\n \n // build container\n var tubularContainer = '<div id="tubular-container" style="overflow: hidden; position: fixed; z-index: -99; width: 100%; height: 100%; top: 0; left: 0"><div id="tubular-player" style="position: fixed"></div></div><div id="tubular-shield" style="width: 100%; height: 100%; z-index: -97; position: fixed; left: 0; top: 0;"></div>';\n \n // set up css prereq's, inject tubular container and set up wrapper defaults\n //$('html,body').css({'width': '100%', 'height': '100%'});\n $body.prepend(tubularContainer);\n $node.css({position: 'relative', 'z-index': options.wrapperZIndex});\n \n // set up iframe player, use global scope so YT api can talk\n window.player;\n window.onYouTubeIframeAPIReady = function() {\n player = new YT.Player('tubular-player', {\n width: options.width,\n height: Math.ceil(options.width / options.ratio),\n videoId: options.videoId,\n playerVars: {\n controls: 0,\n showinfo: 0,\n modestbranding: 1,\n rel: 0,\n wmode: 'transparent'\n },\n events: {\n 'onReady': onPlayerReady,\n 'onStateChange': onPlayerStateChange\n }\n });\n }\n \n window.onPlayerReady = function(e) {\n resize();\n if (options.mute) e.target.mute();\n e.target.seekTo(options.start);\n e.target.playVideo();\n }\n \n window.onPlayerStateChange = function(state) {\n if (state.data === 0 && options.repeat) { // video ended and repeat option is set true\n player.seekTo(options.start); // restart\n }\n }\n \n // resize handler updates width, height and offset of player after resize/init\n var resize = function() {\n var width = $(window).width(),\n pWidth, // player width, to be defined\n height = $(window).height(),\n pHeight, // player height, tbd\n $tubularPlayer = $('#tubular-player');\n \n // when screen aspect ratio differs from video, video must center and underlay one dimension\n \n if (width / options.ratio < height) { // if new video height < window height (gap underneath)\n pWidth = Math.ceil(height * options.ratio); // get new player width\n $tubularPlayer.width(pWidth).height(height).css({left: (width - pWidth) / 2, top: 0}); // player width is greater, offset left; reset top\n } else { // new video width < window width (gap to right)\n pHeight = Math.ceil(width / options.ratio); // get new player height\n $tubularPlayer.width(width).height(pHeight).css({left: 0, top: (height - pHeight) / 2}); // player height is greater, offset top; reset left\n }\n \n }\n \n // events\n $(window).on('resize.tubular', function() {\n resize();\n })\n \n $('body').on('click','.' + options.playButtonClass, function(e) { // play button\n e.preventDefault();\n player.playVideo();\n }).on('click', '.' + options.pauseButtonClass, function(e) { // pause button\n e.preventDefault();\n player.pauseVideo();\n }).on('click', '.' + options.muteButtonClass, function(e) { // mute button\n e.preventDefault();\n (player.isMuted()) ? player.unMute() : player.mute();\n }).on('click', '.' + options.volumeDownClass, function(e) { // volume down button\n e.preventDefault();\n var currentVolume = player.getVolume();\n if (currentVolume < options.increaseVolumeBy) currentVolume = options.increaseVolumeBy;\n player.setVolume(currentVolume - options.increaseVolumeBy);\n }).on('click', '.' + options.volumeUpClass, function(e) { // volume up button\n e.preventDefault();\n if (player.isMuted()) player.unMute(); // if mute is on, unmute\n var currentVolume = player.getVolume();\n if (currentVolume > 100 - options.increaseVolumeBy) currentVolume = 100 - options.increaseVolumeBy;\n player.setVolume(currentVolume + options.increaseVolumeBy);\n });\n \n if (!document.getElementById("ytjs") == false) {\n window.onYouTubeIframeAPIReady();\n }\n }\n \n // load yt iframe js api\n \n \n // create plugin\n window._tubular = window._tubular || tubular;\n \n })(jQuery, window);\n window._tubular(jQuery("body"), {videoId: params[0], start: params[1], repeat: (params[2] == "loop"), mute: (params[3] !== "sound")});\n }\n}\n \nmacros["stopvideo"] = {\n handler: function(place, macroName, params, parser) {\n jQuery("#tubular-container").remove();\n jQuery("#tubular-shield").remove();\n }\n}
window.flyLanguage = function() \n{ \n s = arguments[0];\n a = s.split("");\n p = arguments[1];\n for (i = 0; i < a.length; i++)\n {\n if (Math.random() < p && a[i] != " ")\n {\n if (Math.random() < 0.5)\n {\n a[i] = ".";\n }\n else\n {\n a[i] = ",";\n }\n }\n }\n return a.join("");\n}
\n\n\n\n\n\n\n@@font-size:500%;margin-top:200px;DROSOPHILIA@@\n\nA Twine game for the Global Game Jam 2014\nby [[Pippin Barr|http://www.pippinbarr.com/]], [[Gordon Calleja|http://twitter.com/gordoncalleja]], and [[Sidsel Hermansen|http://twitter.com/SsLHrmnsN]]\n\nBest, as with all things, with headphones.\nDrosophilia uses YouTube videos and music files, sorry if that gets messed up through bandwidth issues.\n\n[[Start.|HumanOffice]]\n\n<<playsound "TitleFinal.mp3">>\n\n<<set $callsremaining = 100>>\n<<set $emailsRemaining = 24>>\n<<set $workDoneThisTime = 0>>\n\n<<set $stepsSinceWorked = 0>>\n\n<<set $flyModeCount = 0>>\n\n<<set $toFlyModeTimerRunning = 0>>\n<<set $toHumanModeTimerRunning = 0>>\n\n<<set $lastHumanLocation = "HumanOffice">>\n<<set $lastFlyLocation = "FlyOffice">>\n\n<<set $ZERO = 0>>\n<<set $WINDOW_DURATION = 10>>\n<<set $FIRST_WORK_REQUIREMENT = 1>>\n<<set $SECOND_WORK_REQUIREMENT = 1>>\n<<set $THIRD_WORK_REQUIREMENT = 1>>\n<<set $FLY_DYING_DURATION = 10>>\n\n<<set $FLY_TRANSITION = "FlyTransition">>\n<<set $HUMAN_TRANSITION = "HumanTransition">>\n<<set $FLY_DYING = "FlyDying">>\n<<set $deskDecor = "temp">>
(function () {\n "use strict";\n version.extensions['soundMacros'] = {\n major: 1,\n minor: 1,\n revision: 2\n };\n var p = macros['playsound'] = {\n soundtracks: {},\n handler: function (a, b, c, d) {\n var loop = function (m) {\n if (m.loop == undefined) {\n m.loopfn = function () {\n this.play();\n };\n m.addEventListener('ended', m.loopfn, 0);\n } else m.loop = true;\n m.play();\n };\n var s = eval(d.fullArgs());\n if (s) {\n s = s.toString();\n var m = this.soundtracks[s.slice(0, s.lastIndexOf("."))];\n if (m) {\n if (b == "playsound") {\n m.play();\n } else if (b == "loopsound") {\n loop(m);\n } else if (b == "pausesound") {\n m.pause();\n } else if (b == "unloopsound") {\n if (m.loop != undefined) {\n m.loop = false;\n } else if (m.loopfn) {\n m.removeEventListener('ended', m.loopfn);\n delete m.loopfn;\n }\n } else if (b == "stopsound") {\n m.pause();\n m.currentTime = 0;\n } else if (b == "fadeoutsound" || b == "fadeinsound") {\n if (m.interval) clearInterval(m.interval);\n if (b == "fadeinsound") {\n if (m.currentTime>0) return;\n m.volume = 0;\n loop(m);\n } else {\n if (!m.currentTime) return;\n m.play();\n }\n var v = m.volume;\n m.interval = setInterval(function () {\n v = Math.min(1, Math.max(0, v + 0.002 * (b == "fadeinsound" ? 1 : -1)));\n m.volume = Math.easeInOut(v);\n if (v == 0 || v == 1) clearInterval(m.interval);\n if (v == 0) {\n m.pause();\n m.currentTime = 0;\n m.volume = 1;\n }\n }, 10);\n }\n }\n }\n }\n }\n macros['fadeinsound'] = p;\n macros['fadeoutsound'] = p;\n macros['unloopsound'] = p;\n macros['loopsound'] = p;\n macros['pausesound'] = p;\n macros['stopsound'] = p;\n macros['stopallsound'] = {\n handler: function () {\n var s = macros.playsound.soundtracks;\n for (var j in s) {\n if (s.hasOwnProperty(j)) {\n s[j].pause();\n if (s[j].currentTime) {\n s[j].currentTime = 0;\n }\n }\n }\n }\n }\n var div = document.getElementById("storeArea").firstChild;\n var fe = ["ogg", "mp3", "wav", "webm"];\n while (div) {\n var b = String.fromCharCode(92);\n var q = '"';\n var re = "['" + q + "]([^" + q + "']*?)" + b + ".(ogg|mp3|wav|webm)['" + q + "]";\n k(new RegExp(re, "gi"));\n div = div.nextSibling;\n }\n\n function k(c, e) {\n do {\n var d = c.exec(div.innerHTML);\n if (d) {\n var a = new Audio();\n if (a.canPlayType) {\n for (var i = -1; i < fe.length; i += 1) {\n if (i >= 0) d[2] = fe[i];\n if (a.canPlayType("audio/" + d[2])) break;\n }\n if (i < fe.length) {\n a.setAttribute("src", d[1] + "." + d[2]);\n a.interval = null;\n macros.playsound.soundtracks[d[1]] = a;\n } else console.log("Browser can't play '" + d[1] + "'");\n }\n }\n } while (d);\n }\n}());
<<if Math.random() < 0.33>><html><br /></html><<print either(\n"Ida is having an urgently whispered conversation with Sidsel across their desks.",\n"Someone's abandoned cellphone cries on and on like a lost child.",\n"Your desk is so tidy it's depressing.",\n"You think you can hear Lorde's Royals piping tinnily from someone's cheap earphones.",\n"The red glare of everyone's quota displays are contributing to a general sweatshop aesthetic.",\n"Sometimes you wish you could just demand silence.",\n"You don't even have a dirty coffee cup to defuse the asceticism of your desk area.",\n"You don't even really know what time it is. You never do in this room.",\n"You pause to marvel at the concept of the telephone, people insistently ringing bells in other people's houses and places of work.",\n"You look around at your co-workers. Who are all these people, anyway?"\n)>><html><br /></html><<endif>>
<<set $flyModeCount = $flyModeCount + 1>>\n\n<<set $toFlyModeTimerRunning = 0>>\n\n<<display "Timer Addon">>\n<<set_timer_mode "display">>\n\n<<if $flyModeCount lte 5>>\n<<set_timer_param $HUMAN_TRANSITION>>\n<<set $flyDuration = 5 + ($flyModeCount-1) * 6 + (Math.random() * ($flyModeCount-1) * 6)>>\n\n<<if $flyModeCount eq 1>>\n<<set $flyDuration = 5>>\n<<endif>>\n<<if $flyModeCount eq 2>>\n<<set $flyDuration = 15>>\n<<endif>>\n<<if $flyModeCount eq 3>>\n<<set $flyDuration = 20>>\n<<endif>>\n<<if $flyModeCount eq 4>>\n<<set $flyModeDuration = 25>>\n<<endif>>\n<<if $flyModeCount eq 5>>\n<<set $flyDuration = 30>>\n<<endif>>\n\n<<start_timer $flyDuration>>\n<<else>>\n<<set_timer_param $FLY_DYING>>\n<<set $flyDuration = Math.random() * 60 + 20>>\n\n<<set $flyDuration = 35>>\n\n<<start_timer $flyDuration>>\n<<endif>>\n\n<<set $toHumanModeTimerRunning = 1>>\n\n<<stopvideo>>\n\n<<stopallsound>>\n<<playsound "Human-_Fly.mp3">>\n<<timedgoto $lastFlyLocation $ZERO>>
window.either = function() { return arguments[~~(Math.random()*arguments.length)];}
.revision-span-in {\n opacity: 0;\n}\n.revision-span:not(.revision-span-out) {\n transition: 1s; -webkit-transition: 1s;\n}\n.revision-span-out {\n position:absolute;\n opacity: 0;\n}
#timer_text\n{\n display: none;\n color: #000000; /* Jonah */\n color: #BBBBBB; /* Sugarcane */\n font-weight: bold;\n font-size: 28px;\n margin: 10px 0 20px 0;\n}\n\n#timer_canvas\n{\n display: none;\n width: 150px;\n height: 150px;\n}
version.extensions.cyclinglinkMacro = {\nmajor:3,minor:3,revision:0\n};\n\nmacros.cyclinglink = \n{\n handler:function(a,b,c) \n { \n var rl="cyclingLink";\n\n function toggleText(w) \n {\n w.classList.remove("cyclingLinkInit");\n w.classList.toggle(rl+"Enabled");\n w.classList.toggle(rl+"Disabled");\n w.style.display=((w.style.display=="none")?"inline":"none")\n }\n\n switch(c[c.length-1]) \n {\n case"end":\n var end=true;\n c.pop();\n break;\n\n case"out":\n var out=true;\n c.pop();\n break\n }\n\n var v="";\n if (c.length&&c[0][0]=="$") \n {\n v=c[0].slice(1);\n c.shift()\n }\n\n var h=state.history[0].variables;\n\n if (out && state.history[0].variables[v] === "") \n {\n return\n }\n\n var l = Wikifier.createInternalLink(a,null);\n l.className="internalLink cyclingLink";\n l.setAttribute("data-cycle",0);\n\n for (var i=0; i < c.length; i++) \n {\n var on = (i == Math.max(c.indexOf(state.history[0].variables[v]),0));\n var d = insertElement(null,"span",null,"cyclingLinkInit cyclingLink"+((on)?"En":"Dis")+"abled");\n\n if (on) \n {\n state.history[0].variables[v] = c[i];\n l.setAttribute("data-cycle",i)\n }\n else \n {\n d.style.display="none"\n }\n \n insertText(d,c[i]);\n\n if (on&&end&&i==c.length-1) \n {\n l.parentNode.replaceChild(d,l)\n }\n else \n {\n l.appendChild(d)\n }\n }\n\n l.onclick = function() \n {\n var t = this.childNodes;\n var u = this.getAttribute("data-cycle")-0;\n var m = t.length;\n toggleText(t[u]);\n u=(u+1);\n\n if (!(out && u==m)) \n {\n u %= m;\n if (v) \n {\n state.history[0].variables[v] = c[u];\n }\n }\n else \n {\n state.history[0].variables[v] = ""\n }\n\n if ((end||out) && u == m - (end?1:0)) \n {\n if(end) \n {\n var n=this.removeChild(t[u]);\n n.className=rl+"End";\n n.style.display="inline";\n this.parentNode.replaceChild(n,this)\n }\n else \n {\n this.parentNode.removeChild(this);\n return\n }\n return\n }\n\n toggleText(t[u]);\n this.setAttribute("data-cycle",u)\n }\n }\n};
<<if $flyModeCount lte 5>>\nIt's pe,cef,l ,nd,r th, d.sk, . w,rld ,f s.mpl, sh.p,s. Y,. w.nd,r why y,. h,v.n,t sp.nt m.r, t,me d.wn h,r. in th, p.st ,nd th,n f.g,r. ,t's pr,b,bl. j,st , l,ttl. t,, .nc,nv.nt,.n.l f,r .n ,ff,c. .nv,ronm,nt. F.r n,w, th,.gh, .t,s pl,,s.nt j,st t, s,t h.r..\n\n,t s.me p,,nt y,..ll h,ve t, g. [[b.,k t. w,rk|FlyOffice]], b,t m.yb, n.t j,st y.t...\n<<else>>\n<<if $flyModeCount eq 6>>\n,... ,,,,..,, ,,.,, .,, ..,., . .,,., ,, ...,,, ,,.,,.. ,,. ..,,,. ,,, ,,. .,,..,, ,,.,,, .., ,,.. ,.,, ,,.. ,. .., .... ,,, .,,, ,..,,. ,.., ,,,.,,,. ,,.. , ,,,,. .,, .,,,,,...,.,.. ,,. ., ,..,,. .,,,,...,,,. .., .,,, ,,,..., .,,. ,,,,..,, ,,,, ., ,,. ..,..\n\n,. ,... ,,,.. .,.... ,,.. ,, .. [[,.,. ,. .,,,|FlyOffice]], .,. ,.,,, ... ,,,. ,.,...\n<<endif>>\n<<endif>>\n\n<<set $stepsSinceWorked = $stepsSinceWorked + 1>>\n<<set $lastFlyLocation = "FlyOffice">>\n\n<<stopvideo>>\n<<playvideo Djxyc9Qax2w 0 loop>>
History.prototype.display=function(d,b,a){var c=tale.get(d);this.history.unshift({passage:c,variables:clone(this.history[0].variables)});\nthis.history[0].hash=this.save();var e=c.render();if(a!="offscreen"){removeChildren(document.getElementById("passages"));\ndocument.getElementById("passages").appendChild(e);if(a!="quietly"){fade(e,{fade:"in"});}}if((a=="quietly")||(a=="offscreen")){e.style.visibility="visible";\n}if(a!="offscreen"){document.title=tale.title;window.scroll(0,0);\n}return e;};
#passages { width: 600px; }\n#passages { border-left: 0; }\n#passages { padding left: 0; }\n\n#passages { color: #FFFFFF; !important }\n#passages { font-weight: normal; }\n#passages { font-family: "courier new"; !important }\n#passages { font-size: 150%; !important }\n\n.passage a { color: #FFFFDF; !important }\n\n.passage a { text-decoration: underline; !important }\n\n.passage a:hover { color: #FFFFFF; !important }\n\n#sidebar { display: none; }\n\n#passages[data-tags~=inverse] {\n color: black; !important\n}\n\n.passage[data-tags~=inverse] { color: black; !important }\n\n.passage[data-tags~=inverse] a { color: #000044; !important }\n\n.passage[data-tags~=inverse] a:hover { color: #000000; !important }\n\nbody[data-tags~=whitebg] { background-color: white; !important }
Drosophilia
<<stopvideo>>\n<<playvideo WfYVUKRLOLE 0 loop>>\n\n<<timedgoto "FlyCafeteria" $WINDOW_DURATION>>\n\n<<set $lastFlyLocation = "FlyCafeteria">>\n<<set $stepsSinceWorked = $stepsSinceWorked + 1>>\n<<set $WINDOW_DURATION = $WINDOW_DURATION + 10>>
<<if $flyModeCount lte 5>>\nTh, p.tpl,nt l,,k. l,k. . tre, f,.m th.s ,.gle, t,wer.ng ,ver y,. som,h.w. Yo, fe.l ,. th,.gh y,u c,n t.ke sh,.ter b,ne,th ,ts br,ad l,.ves a,d .vo,d th, str,.ses .f th. w,.kpl,c. f,r j,.t , w,.le. M.,nw,.le, th, r,st .f th, [[c,fet,r,.|FlyCafeteria]] c.n,.nues t, h,m ,.th l.f,.\n<<else>>\n<<if $flyModeCount eq 6>>\n,.. ,..,,,. .,,,. ,.,, , ,... ,,,. .,.. ,,.,,, ,..,..,. ,,.. ,.. ,...,,,. ,,. ,.., ,. ,.,,.. ,.. ,.. ,,.. ,..,.,. ,.,..., ,.,. ,..,, ,,.,, ,.., ,..,. ,.., ,,.,.. ,. .,. ,..,,.,.,, ,.. ,,.. . ,..,,. ,...,.,.,, ,,. .,,, ,, ,.. [[,..,...,,|FlyCafeteria]] .,..,,,., ,. ,.. ,,.. ..,,.\n<<endif>>\n<<endif>>\n\n<<set $stepsSinceWorked = $stepsSinceWorked + 1>>\n<<set $lastFlyLocation = "FlyCafeteria">>\n\n<<stopvideo>>\n<<playvideo 3W9KgoEiD7w 0 loop>>
(function(){version.extensions.replaceMacrosCombined={major:1,minor:1,revision:2};var nullobj={handler:function(){}};function showVer(n,notrans){if(!n){return\n}n.innerHTML="";new Wikifier(n,n.tweecode);n.setAttribute("data-enabled","true");n.style.display="inline";n.classList.remove("revision-span-out");\nif(!notrans){n.classList.add("revision-span-in");if(n.timeout){clearTimeout(n.timeout)}n.timeout=setTimeout(function(){n.classList.remove("revision-span-in");\nn=null},1)}}function hideVer(n,notrans){if(!n){return}n.setAttribute("data-enabled","false");n.classList.remove("revision-span-in");\nif(n.timeout){clearTimeout(n.timeout)}if(!notrans){n.classList.add("revision-span-out");n.timeout=setTimeout(function(){if(n.getAttribute("data-enabled")=="false"){n.classList.remove("revision-span-out");\nn.style.display="none";n.innerHTML=""}n=null},1000)}else{n.style.display="none";n.innerHTML="";n=null}}function tagcontents(b,starttags,desttags,endtags,k){var l=0,c="",tg,a,i;\nfunction tagfound(i,e){for(var j=0;j<e.length;j++){if(a.indexOf("<<"+e[j],i)==i){return e[j]}}}a=b.source.slice(k);for(i=0;\ni<a.length;i++){if(tg=tagfound(i,starttags)){l++}else{if((tg=tagfound(i,desttags))&&l==0){b.nextMatch=k+i+tg.length+4;return[c,tg]\n}else{if(tg=tagfound(i,endtags)){l--;if(l<0){return null}}}}c+=a.charAt(i)}return null}var begintags=[];var endtags=[];function revisionSpanHandler(g,e,f,b){var k=b.source.indexOf(">>",b.matchStart)+2,vsns=[],vtype=e,flen=f.length,becomes,c,cn,m,h,vsn;\nfunction mkspan(vtype){h=insertElement(m,"span",null,"revision-span "+vtype);h.setAttribute("data-enabled",false);h.style.display="none";\nh.tweecode="";return h}if(this.shorthand&&flen){while(f.length>0){vsns.push([f.shift(),(this.flavour=="insert"?"gains":"becomes")])\n}}else{if(this.flavour=="insert"||(this.flavour=="continue"&&this.trigger=="time")){vsns.push(["","becomes"])}}if(this.flavour=="continue"&&flen){b.nextMatch=k+b.source.slice(k).length;\nvsns.push([b.source.slice(k),vtype])}else{becomes=["becomes","gains"];c=tagcontents(b,begintags,becomes.concat(endtags),endtags,k);\nif(c&&endtags.indexOf(c[1])==-1){while(c){vsns.push(c);c=tagcontents(b,begintags,becomes,endtags,b.nextMatch)}c=tagcontents(b,begintags,["end"+e],endtags,b.nextMatch)\n}if(!c){throwError(g,"can't find matching end"+e);return}vsns.push(c);if(this.flavour=="continue"){k=b.nextMatch;b.nextMatch=k+b.source.slice(k).length;\nvsns.push([b.source.slice(k),""])}}if(this.flavour=="remove"){vsns.push(["","becomes"])}cn=0;m=insertElement(g,"span",null,e);\nm.setAttribute("data-flavour",this.flavour);h=mkspan("initial");vsn=vsns.shift();h.tweecode=vsn[0];showVer(h,true);while(vsns.length>0){if(vsn){vtype=vsn[1]\n}vsn=vsns.shift();h=mkspan(vtype);h.tweecode=vsn[0]}if(typeof this.setup=="function"){this.setup(m,g,f)}}function quantity(m){return(m.children.length-1)+(m.getAttribute("data-flavour")=="remove")\n}function revisionSetup(m,g,f){m.className+=" "+f[0].replace(" ","_")}function keySetup(m,g,f){var fl=this.flavour,key=f[0];\nm.setEventListener("keydown",function l(e){var done=!revise("revise",m);if(done){m.removeEventListener("keydown",l)}})}function timeSetup(m,g,f){function cssTimeUnit(s){if(typeof s=="string"){if(s.slice(-2).toLowerCase()=="ms"){return Number(s.slice(0,-2))||0\n}else{if(s.slice(-1).toLowerCase()=="s"){return Number(s.slice(0,-1))*1000||0}}}throwError(g,s+" isn't a CSS time unit");\nreturn 0}var fl=this.flavour;var tm=cssTimeUnit(f[0]);setTimeout(function timefn(){var done=!revise("revise",m);if(!done){setTimeout(timefn,tm)\n}},tm)}function hoverSetup(m){var fn,noMouseEnter=(document.head.onmouseenter!==null);m.onmouseenter=function(){revise("revise",this)\n};m.onmouseleave=function(){revise("revert",this)};if(noMouseEnter){fn=function(n){return function(e){if(!event.relatedTarget||(event.relatedTarget!=this&&!(this.compareDocumentPosition(event.relatedTarget)&Node.DOCUMENT_POSITION_CONTAINED_BY))){this[n]()\n}}};m.onmouseover=fn("onmouseenter");m.onmouseout=fn("onmouseleave")}m=null}function mouseSetup(m){var fl=this.flavour,evt=(document.head.onmouseenter===null?"onmouseenter":"onmouseover");\nm[evt]=function(){var done=!revise("revise",this);if(done){this[evt]=null}};m=null}function linkSetup(m,g,f){var fl=this.flavour,l=Wikifier.createInternalLink(),p=m.parentNode;\nl.className="internalLink replaceLink";p.insertBefore(l,m);l.insertBefore(m,null);l.onclick=function(){var p,done=false;if(m&&m.parentNode==this){done=!revise("revise",m);\nscrollWindowTo(m)}if(done){this.parentNode.insertBefore(m,this);this.parentNode.removeChild(this)}};l=null}function visitedSetup(m,g,f){var i,done,shv=state.history[0].variables,os="once seen",d=(m.firstChild&&(this.flavour=="insert"?m.firstChild.nextSibling:m.firstChild).tweecode);\nshv[os]=shv[os]||{};if(d&&!shv[os].hasOwnProperty(d)){shv[os][d]=1}else{for(i=shv[os][d];i>0&&!done;i--){done=!revise("revise",m,true)\n}if(shv[os].hasOwnProperty(d)){shv[os][d]+=1}}}[{name:"insert",flavour:"insert",trigger:"link",setup:linkSetup},{name:"timedinsert",flavour:"insert",trigger:"time",setup:timeSetup},{name:"insertion",flavour:"insert",trigger:"revisemacro",setup:revisionSetup},{name:"later",flavour:"insert",trigger:"visited",setup:visitedSetup},{name:"keyinsert",flavour:"insert",trigger:"key",setup:keySetup},{name:"replace",flavour:"replace",trigger:"link",setup:linkSetup},{name:"timedreplace",flavour:"replace",trigger:"time",setup:timeSetup},{name:"mousereplace",flavour:"replace",trigger:"mouse",setup:mouseSetup},{name:"hoverreplace",flavour:"replace",trigger:"hover",setup:hoverSetup},{name:"revision",flavour:"replace",trigger:"revisemacro",setup:revisionSetup},{name:"keyreplace",flavour:"replace",trigger:"key",setup:keySetup},{name:"timedremove",flavour:"remove",trigger:"time",setup:timeSetup},{name:"mouseremove",flavour:"remove",trigger:"mouse",setup:mouseSetup},{name:"hoverremove",flavour:"remove",trigger:"hover",setup:hoverSetup},{name:"removal",flavour:"remove",trigger:"revisemacro",setup:revisionSetup},{name:"once",flavour:"remove",trigger:"visited",setup:visitedSetup},{name:"keyremove",flavour:"remove",trigger:"key",setup:keySetup},{name:"continue",flavour:"continue",trigger:"link",setup:linkSetup},{name:"timedcontinue",flavour:"continue",trigger:"time",setup:timeSetup},{name:"mousecontinue",flavour:"continue",trigger:"mouse",setup:mouseSetup},{name:"keycontinue",flavour:"continue",trigger:"key",setup:keySetup},{name:"cycle",flavour:"cycle",trigger:"revisemacro",setup:revisionSetup},{name:"mousecycle",flavour:"cycle",trigger:"mouse",setup:mouseSetup},{name:"timedcycle",flavour:"cycle",trigger:"time",setup:timeSetup},{name:"keycycle",flavour:"replace",trigger:"key",setup:keySetup}].forEach(function(e){e.handler=revisionSpanHandler;\ne.shorthand=(["link","mouse","hover"].indexOf(e.trigger)>-1);macros[e.name]=e;macros["end"+e.name]=nullobj;begintags.push(e.name);\nendtags.push("end"+e.name)});function insideDepartingSpan(elem){var r=elem.parentNode;while(!r.classList.contains("passage")){if(r.classList.contains("revision-span-out")){return true\n}r=r.parentNode}}function reviseAll(rt,rname){var rall=document.querySelectorAll(".passage ."+rname),ret=false;for(var i=0;\ni<rall.length;i++){if(!insideDepartingSpan(rall[i])){ret=revise(rt,rall[i])||ret}}return ret}function revise(rt,r,notrans){var ind2,curr,next,ind=-1,rev=(rt=="revert"),rnd=(rt.indexOf("random")>-1),fl=r.getAttribute("data-flavour"),rc=r.childNodes,cyc=(fl=="cycle"),rcl=rc.length-1;\nfunction doToGainerSpans(n,fn){for(var k=n-1;k>=0;k--){if(rc[k+1].classList.contains("gains")){fn(rc[k],notrans)}else{break\n}}}for(var k=0;k<=rcl;k++){if(rc[k].getAttribute("data-enabled")=="true"){ind=k}}if(rev){ind-=1}curr=(ind>=0?rc[ind]:(cyc?rc[rcl]:null));\nind2=ind;if(rnd){ind2=(ind+(Math.floor(Math.random()*rcl)))%rcl}next=((ind2<rcl)?rc[ind2+1]:(cyc?rc[0]:null));var docurr=(rev?showVer:hideVer);\nvar donext=(rev?hideVer:showVer);var currfn=function(){if(!(next&&next.classList.contains("gains"))||rnd){docurr(curr,notrans);\ndoToGainerSpans(ind,docurr,notrans)}};var nextfn=function(){donext(next,notrans);if(rnd){doToGainerSpans(ind2+1,donext,notrans)\n}};if(!rev){currfn();nextfn()}else{nextfn();currfn()}return(cyc?true:(rev?(ind>0):(ind2<rcl-1)))}macros.revert=macros.revise=macros.randomise=macros.randomize={handler:function(a,b,c){var l,rev,rname;\nfunction disableLink(l){l.style.display="none"}function enableLink(l){l.style.display="inline"}function updateLink(l){if(l.className.indexOf("random")>-1){enableLink(l);\nreturn}var rall=document.querySelectorAll(".passage ."+rname),cannext,canprev,i,ind,r,fl;for(i=0;i<rall.length;i++){r=rall[i],fl=r.getAttribute("data-flavour");\nif(insideDepartingSpan(r)){continue}if(fl=="cycle"){cannext=canprev=true}else{if(r.firstChild.getAttribute("data-enabled")==!1+""){canprev=true\n}if(r.lastChild.getAttribute("data-enabled")==!1+""){cannext=true}}}var can=(l.classList.contains("revert")?canprev:cannext);\n(can?enableLink:disableLink)(l)}function toggleText(w){w.classList.toggle(rl+"Enabled");w.classList.toggle(rl+"Disabled");\nw.style.display=((w.style.display=="none")?"inline":"none")}var rl="reviseLink";if(c.length<2){throwError(a,b+" macro needs 2 parameters");\nreturn}rname=c.shift().replace(" ","_");l=Wikifier.createInternalLink(a,null);l.className="internalLink "+rl+" "+rl+"_"+rname+" "+b;\nvar v="";var end=false;var out=false;if(c.length>1&&c[0][0]=="$"){v=c[0].slice(1);c.shift()}switch(c[c.length-1]){case"end":end=true;\nc.pop();break;case"out":out=true;c.pop();break}var h=state.history[0].variables;for(var i=0;i<c.length;i++){var on=(i==Math.max(c.indexOf(h[v]),0));\nvar d=insertElement(null,"span",null,rl+((on)?"En":"Dis")+"abled");if(on){h[v]=c[i];l.setAttribute("data-cycle",i)}else{d.style.display="none"\n}insertText(d,c[i]);l.appendChild(d)}l.onclick=function(){reviseAll(b,rname);var t=this.childNodes,u=this.getAttribute("data-cycle")-0,m=t.length,n,lall,i;\nif((end||out)&&u==m-(end?2:1)){if(end){n=this.removeChild(t[u+1]);n.className=rl+"End";n.style.display="inline";this.parentNode.replaceChild(n,this)\n}else{this.parentNode.removeChild(this);return}}else{toggleText(t[u]);u=(u+1)%m;if(v){h[v]=c[u]}toggleText(t[u]);this.setAttribute("data-cycle",u)\n}lall=document.getElementsByClassName(rl+"_"+rname);for(i=0;i<lall.length;i++){updateLink(lall[i])}};l=null}};macros.mouserevise=macros.hoverrevise={handler:function(a,b,c,d){var endtags=["end"+b],evt=(window.onmouseenter===null?"onmouseenter":"onmouseover"),t=tagcontents(d,[b],endtags,endtags,d.source.indexOf(">>",d.matchStart)+2);\nif(t){var rname=c[0].replace(" ","_"),h=insertElement(a,"span",null,"hoverrevise hoverrevise_"+rname),f=function(){var done=!reviseAll("revise",rname);\nif(b!="hoverrevise"&&done){this[evt]=null}};new Wikifier(h,t[0]);if(b=="hoverrevise"){h.onmouseover=f;h.onmouseout=function(){reviseAll("revert",rname)\n}}else{h[evt]=f}h=null}}};macros.instantrevise={handler:function(a,b,c,d){reviseAll("revise",c[0].replace(" ","_"))}};macros.endmouserevise=nullobj;\nmacros.endhoverrevise=nullobj}());
--Let the player undo moves? (on / off)\n--In Sugarcane, this enables the browser's back button.\n--In Jonah, this lets the player click links in previous\n--passages.\n\nUndo: off\n\n--Let the player use bookmarks? (on / off)\n--This enables the Bookmark links in Jonah and Sugarcane\n--(If the player can't undo, bookmarks are always disabled.)\n\nBookmark: off\n\n--Obfuscate the story's HTML source to prevent possible\n--spoilers? (swap / off)\n\nObfuscate: off\n\n--String of letter pairs to use for swap-style obfuscation\n\nObfuscateKey: giwspvakmzehnyqxurdocbltfj\n\n--Include the jQuery script library? (on / off)\n--Individual scripts may force this on by\n--containing the text 'requires jQuery'.\n\njQuery: on\n\n--Include the Modernizr script library? (on / off)\n--Individual scripts/stylesheets may force this on by\n--containing the text 'requires Modernizr'.\n\nModernizr: on\n
<<stopallsound>>\n<<stopvideo>>\n<<playvideo RY_xWLsDQS4 0 loop>>\n<<playsound "DeathFinal.mp3">>\n\n<<timedgoto "FlyDead" $FLY_DYING_DURATION>>
<<if $flyModeCount lte 3>>An en.rmous glowing <<print either("led","red")>> panel towers above your desk .nd <<print either("reminds","inf,rms","instruc,s","blares at")>> you that you <<print either("st,ll","")>> have <<if $callsremaining eq 0>>0<<else>><<print $callsremaining>><<endif>> <<if $callsremaining eq 1>>call<<else>>c.lls<<endif>> remaining in today's quota. <<print either("A sm,ll","An emb.rrassing","A vaguely rev.lting","A cringe-,nducing")>> company-provided sticker depicts a teddy be.r, but the words ben,ath it are blurry and illegible. Your one authorized piece of desk dec.r, <<print flyLanguage($deskDecor,0.1)>>, is positioned next to your oversized computer monit.r.\n\n<<print either("The","Your")>> pho,e is <<print either("constantly","eternally","always","")>> ringing, sounding as though it's unde,water. <<print either("They pay you to","It's your job to","Technically you should","You should probably","You should")>> <<replace "answer it">>an,wer it, but you can't seem to lift the receiver no matter how hard you try<<endreplace>>. <<if Math.random() lt 0.9>>You could al,o just <<replace "go to the cafeteria">>go to the cafeteria by [[slipping through the door|FlyCafeteria]] beh,nd a coworker<<endreplace>>.\n<<else>>Yo, could al,o just <<replace "go to the cafeteria">>go t. ,he cafeteria, but you ,an't s,em to op,n the large, he.vy d,or<<endreplace>>.\n<<endif>>\n<<else>><<if $flyModeCount lte 5>>An en.rmo,. glowing <<print either("led","red")>> p,nel towe.s above yo,r desk .nd <<print either("r,minds","i.f,rms","in,truc,s","bl,res at")>> yo, t,at you <<print either("st,ll","")>> ha,e <<if $callsremaining eq 0>>0<<else>><<print $callsremaining>><<endif>> <<if $callsremaining eq 1>>ca,l<<else>>c.lls<<endif>> remai,ing in tod.y's q,ota. <<print either("A sm,l,","An emb.rras.,ng","A va,,ely rev.lting","A c.,nge-,nduc,ng")>> co,pan.,provid,d sti,k.r depi,ts . teddy be.r, but t,e words b,n,ath it a.e bl,.ry and i,le.ible. Yo,r one auth,ri,ed pi.ce of d,sk dec.r, <<print flyLanguage($deskDecor,0.5)>>, is po,it,on,d next to yo,. oversi,ed com,.ter mo,it.r.\n\n<<print either("The","Your")>> p.o,e ,s <<print either("con,.antly","ete,.al,y",",.ways","")>> ri,.ing, s.un,.ng as th,ugh it's u,de,water. <<print either("T,ey pa, yo. to","It', you, j.b to","Tec,.ic,lly y.u shoul.","Y,. should prob,.ly","Y.u shou,d")>> <<replace "an,.er it">>an,we. it, b,t you c,.'t s.em to ,.ft the ,..eiver n. mat,.r how ha.d you t,y<<endreplace>>. <<if Math.random() lt 0.9>>Yo, c,.ld al,o just <<replace "go .o the caf,.eria">>go to the c,.,teria .y [[sl.,,ing th,.ugh the do.r|FlyCafeteria]] beh,n, a cowo.,e.<<endreplace>>.\n<<else>>\nYou ,.uld al,o jus. <<replace "go ,. the ,,.eteria">>go t. ,.e caf,.,ria, b,t y,. can't ,.,m to op.n the lar,., he.vy d..r<<endreplace>>.\n<<endif>>\n\nB.,ng [[und,rneath th, d.sk|FlyDesk]] s,,ms st,.ngely a,,eal.ng ,..ht n.w, t...\n<<else>>\n<<if $flyModeCount eq 6>>\n., ,..,.,,. ,.,..,, <<print either(",..",".,,")>> ,,.,, .,,,.. .,.., ,.,. ,.., .., <<print either(".,,.,,.",",..,...",",.,.,,,,.",",.,.,, ,.")>> .., .,,. .,, <<print either(",..,,.","")>> ..,, ,. .,,,, ,.,,,.,, ,. .,,.,., ,.,,,. <<print either(". ,...,",",. ,.,.,,...,.,",", ,.,,.,, ,.,.,.,,,",". ,.,,.,.,,.,,,,.")>> .,,,.,.,.,.,,,. ,.,,,.. ,.,,,,.. . ,.,,,,. ...,, ,., ,,. ,..., ,,.,,., .. ,., ..,.,. ,., ,,...,,,.. ,.,. ,.. ,.,,,,.,., ,..., ,. ,,., ,...,, .,,.,. ,.,.,.., ., ,.,,.,.,,. ,.,, ,. .,,. ,..,,.,,., ,.,,..,.,.,,....\n\n<<print either(",..",",.,,")>> ,..,, ,. <<print either(",.,,.,..,,","..,,.,.,.",",.,.,,","")>> .,,.,.,, ,.,.,.,. ., ,.,,., ,.., .,,.,.,,.. <<print either(",,,,. .,, ., ,.",",.., ,.., ,.. ,.",",..,.,..,,, ,... ,,,,..",",,. ,.,,.. ,.,,,.,,",",.. ,.,,,.")>> <<replace ",.,.., ,.">>.,,.,. ,., ,,. .,, ,,.., .... ,. ,.., ,., ,..,.,,. .. ,.,,., ,.,, ,,.. ,., ,,.<<endreplace>>. <<if Math.random() lt 0.5>>,., ,,.,. .,,. ,.,, <<replace "., .. ,., ..,,.,.,,">>,. .. ,,. ,,.,...., ., [[.,.,,,., ,.,.,.. .,, ,...|FlyCafeteria]] ,..,., , ,.,,.,..<<endreplace>>.\n<<else>>\n,., ,,.,. .,,. ,.,, <<replace "., .. ,., ..,,.,.,,">>,. .. ,,. ,,.,...., ., [[.,.,,,., ,.,.,.. .,, ,...|FlyCafeteria]] ,..,., , ,.,,.,..<<endreplace>>.\n<<endif>>\n\n,.,,. [[,..,.,,.,, .,, ,.,.|FlyDesk]] .,,,. ,.,..,... ,,,,...., ,..,. ..,, ,...\n<<endif>>\n<<endif>>\n<<endif>>\n\n\n<<silently>>\n<<set $lastFlyLocation = "FlyOffice">>\n<<set $stepsSinceWorked = $stepsSinceWorked + 1>>\n\n<<stopvideo>>\n<<playvideo EK70oOnahJU 0 loop>>\n\n<<fadeoutsound "FlyCafeteria.mp3" >>\n<<fadeinsound "FlyOffice.mp3" >>\n<<endsilently>>
Wikifier.formatters.push({name:"char",match:".",handler:function(a){insertElement(a.output,"span",null,"char "+(a.matchText===" " ? "space" : a.matchText),a.matchText);\n}});Wikifier.formatters.forEach(function(e){if(e.name=="emdash"){e.handler=function(a){var b=insertElement(a.output,"span",null,"char",String.fromCharCode(8212));\n};}else{if(e.name=="prettyLink"){e.handler=function(a){var b=new RegExp(e.lookahead,"mg");\nb.lastIndex=a.matchStart;var c=b.exec(a.source);if(c&&c.index==a.matchStart&&c[2]){var d=Wikifier.createInternalLink(a.output,c[1]);\nsetPageElement(d,null,c[1]);a.nextMatch+=c[1].length+2;}else{if(c&&c.index==a.matchStart&&c[3]){var f;\nif(tale.has(c[4])){f=Wikifier.createInternalLink(a.output,c[4]);}else{f=Wikifier.createExternalLink(a.output,c[4]);\n}setPageElement(f,null,c[1]);a.nextMatch=c.index+c[0].length;}}};}}});
(function(){ var render2 = Passage.prototype.render; Passage.prototype.render = function () { var b = render2.call(this); var t = this.tags.join(" "); document.body.setAttribute("data-tags", t); b.setAttribute("data-tags",t); return b; }; if(state) { var tgs = state.history[0].passage.tags.join(" "); var fc = $('passages').firstChild; fc.setAttribute("data-tags",tgs); }}());\n\nif(state) (function(){ var it = setInterval(function(){ var fd = $('passages').firstChild; if (fd!=fc) { clearInterval(it); fd.setAttribute("data-tags",tgs); } },0); }());
<<stop_timer>>\n<<stopvideo>>\n<<playvideo 4iPyZw8OjfU 0 loop>>\n\n<<stopallsound>>\n<<playsound "FlyWindowEnd.mp3">>\n\n<<set $gotoTime = 30>>\n<<timedgoto "FreedomEnding" $gotoTime>>
<<stopvideo>>\n\n<<set $timeToGoTo = 10>>\n<<timedgoto "DeadEnding" $timeToGoTo>>
<<if Math.random() < 0.33>><html><br /></html><<print either(\n"Two of your female co-workers are discussing the Bechdel test, gesticulating wildly and laughing about some new Hollywood blockbuster.",\n"The hum of the cafeteria is both comforting and soul-destroying.",\n"All around you, people are happy not to be working for a few minutes.",\n"The clink of cups and cutlery is almost pleasant if you just try to fight through the soul crushing specter of work.",\n"A fly zips past your ear with a busy buzz.",\n"Some guy from accounts is sitting on his own in a corner, muttering.",\n"It always amazes you how many people in the company you have absolutely no familiarity with, but here they all are, again.",\n"You try not to fixate too much on people's chewing mouths.",\n"The selection of food today is the same as it always is: mediocre, but really not too bad, all things considered.",\n"Nearby, someone breaks into malicious-sounding laughter."\n)>><html><br /></html><<endif>>
<<silently>>\n\n<<set $TimerAddon = \nfunction()\n{\n var div_timer_container = document.createElement('div');\n div_timer_container.setAttribute('id', 'timer');\n\n var div_timer_canvas = document.createElement('canvas');\n div_timer_canvas.setAttribute('id', 'timer_canvas');\n div_timer_canvas.setAttribute('width', '150');\n div_timer_canvas.setAttribute('height', '150');\n div_timer_canvas.width = div_timer_canvas.width;\n div_timer_container.appendChild(div_timer_canvas);\n \n var div_timer_text = document.createElement('span');\n div_timer_text.setAttribute('id', 'timer_text');\n div_timer_text.innerHTML = "Hurry Up!";\n div_timer_container.appendChild(div_timer_text);\n\n var Timer_Active = false;\n var Timer_Paused = false;\n var Timer_Mode = 'none';\n var Timer_Param = "";\n var Timer_Max = 0;\n var Timer_Now = 0;\n \n var div_jonah_floater = document.getElementById('floater');\n if(div_jonah_floater) div_jonah_floater.appendChild(div_timer_container);\n\n var div_sugarcane_menu = document.getElementById('sidebar');\n if(div_sugarcane_menu) div_sugarcane_menu.appendChild(div_timer_container);\n\n function StartTimer(val)\n {\n Timer_Active = true;\n Timer_Paused = false;\n Timer_Max = val;\n Timer_Now = val;\n div_timer_text.style.display = 'block';\n div_timer_canvas.style.display = 'block';\n }\n\n function StopTimer()\n {\n Timer_Active = false;\n div_timer_text.style.display = 'none';\n div_timer_canvas.style.display = 'none';\n }\n\n function PauseTimer()\n {\n Timer_Paused = true;\n }\n\n function ResumeTimer()\n {\n Timer_Paused = false;\n }\n\n function SetTimerText(text)\n {\n div_timer_text.innerHTML = text;\n }\n\n function SetTimerMode(mode)\n {\n if(mode == 'display')\n {\n Timer_Mode = 'display';\n }\n else if(mode == 'restart')\n {\n Timer_Mode = 'restart';\n }\n else Timer_Mode = 'none';\n }\n\n function SetTimerParam(param)\n {\n Timer_Param = param;\n }\n\n function OnTimerEnd()\n {\n StopTimer();\n if(Timer_Mode == 'restart')\n {\n state.restart();\n if(Timer_Param) alert(Timer_Param);\n window.location.reload(true);\n \n } \n else if(Timer_Mode == 'display')\n {\n state.display(Timer_Param);\n }\n }\n\n function OnTimerTick()\n {\n if(Timer_Active && !Timer_Paused)\n {\n Timer_Now = Timer_Now - 0.1;\n\n if(Timer_Now <= 0) Timer_Now = 0;\n \n var context = div_timer_canvas.getContext("2d");\n div_timer_canvas.width = div_timer_canvas.width;\n\n var x = div_timer_canvas.width / 2;\n var y = div_timer_canvas.height / 2;\n var radius = 65;\n var startAngle = 1.5 * Math.PI;\n \n var endAngle = (1.5 + (2 / Timer_Max * Timer_Now)) * Math.PI;\n var counterClockwise = false;\n\n context.beginPath();\n context.arc(x, y, radius, startAngle, endAngle, counterClockwise);\n context.lineWidth = 15;\n if(div_jonah_floater) context.strokeStyle = "black";\n if(div_sugarcane_menu) context.strokeStyle = "#BBBBBB";\n context.stroke();\n\n context.font = 'bold 30px sans-serif';\n if(div_jonah_floater) context.fillStyle = "black";\n if(div_sugarcane_menu) context.fillStyle = "#BBBBBB";\n context.fillText(Timer_Now.toFixed(1), 55, 85);\n\n if(Timer_Now <= 0) OnTimerEnd();\n }\n }\n\n setInterval(function(){ OnTimerTick(); }, 100); \n\n macros['start_timer'] =\n {\n handler: function(obj, fnc, val, d)\n {\n d = d.fullArgs();\n d = d.slice(d.lastIndexOf(".")+1,d.length);\n if (isNaN(parseInt(d)))\n {\n theTime = parseInt(state.history[0].variables[d]);\n }\n else\n {\n theTime = parseInt(d);\n }\n StartTimer(theTime);\n }\n }\n\n macros['stop_timer'] =\n {\n handler: function(obj, fnc, val)\n {\n StopTimer();\n }\n }\n\n macros['pause_timer'] =\n {\n handler: function(obj, fnc, val)\n {\n PauseTimer();\n }\n }\n\n macros['resume_timer'] =\n {\n handler: function(obj, fnc, val)\n {\n ResumeTimer();\n }\n }\n\n macros['set_timer_text'] =\n {\n handler: function(obj, fnc, val)\n {\n SetTimerText(val);\n }\n }\n\n macros['set_timer_mode'] =\n {\n handler: function(obj, fnc, val)\n {\n SetTimerMode(val);\n }\n }\n\n macros['set_timer_param'] =\n {\n handler: function(obj, fnc, val, d)\n {\n d = d.fullArgs();\n d = d.slice(d.lastIndexOf(".")+1,d.length);\n dest = state.history[0].variables[d];\n //throwError("val : " + val);\n //throwError("dest : " + dest);\n //throwError(dest);\n SetTimerParam("" + dest);\n }\n }\n\n}\n>>\n<<print $TimerAddon()>>\n\n<<endsilently>>
version.extensions.timedgotoMacro = \n{\n major:1,minor:2,revision:0\n};\nmacros["goto"]=macros.timedgoto = {\n timer:null,handler:function(a,b,c,d) {\n function cssTimeUnit(s) {\n if(typeof s=="string") {\n if (s.slice(-2).toLowerCase()=="ms") {\n return +(s.slice(0,-2))||0\n }\n else {\n if (s.slice(-1).toLowerCase()=="s") {\n return +(s.slice(0,-1))*1000||0\n }\n }\n } throwError(a,s+" isn't a CSS time unit");\n return 0\n }\n\n var t,d,m,s;\n \n t2=c[c.length-1];\n //tn = c[c.length-1].replace("$","");\n //t = state.history[0].variables[tn];\n d=d.fullArgs();\n tn=c[c.length-1];\n tn=tn.replace("$","");\n t=state.history[0].variables[tn];\n\n m=0;\n if (b!="goto") {\n d=d.slice(0,d.indexOf("state.history[0].variables."+tn),d.length);\n m = 1000*parseInt(t);\n //throwError(a,m+" is what m is...");\n //throwError(a,d+" is what d is...");\n //var testName = d[1].replace("$", ""); // Need to get rid of the $\n //var testValue = state.history[0].variables[testName];\n //m=cssTimeUnit(t)\n //m = 1000\n //m = testValue\n }\n d=eval(Wikifier.parse(d));\n if (d+""&&state&&state.init) {\n if (macros["goto"].timer) {\n clearTimeout(macros["goto"].timer)\n }\n s=state.history[0].passage.title;\n macros["goto"].timer=setTimeout(function() { \n if(state.history[0].passage.title==s) { \n state.display(d,a)\n }\n },m)\n }\n }\n};
<<stopvideo>>\n\n<<set $freedomTheEndTime = 10>>\n<<timedgoto "FreedomTheEnd" $freedomTheEndTime>>
(function(){\nvar bs = String.fromCharCode(92);\nif ("\s\s".length>1) {\n eval(scripts[i].text.replace(new RegExp(bs+"/"+bs+"/","g"),"").replace(new RegExp(bs+bs+"s","g"),bs));\n}\nelse {\nWikifier.parse = function (b) {\n function alter(from,to) {\n //var g = "(?=(?:[^\s"'\s\s\s\s]*(?:\s\s\s\s.|'(?:[^'\s\s\s\s]*\s\s\s\s.)*[^'\s\s\s\s]*'|\s"(?:[^\s"\s\s\s\s]*\s\s\s\s.)*[^\s"\s\s\s\s]*\s"))*[^'\s"]*$)";\n //return b.replace(new RegExp(from+g,"gi"),to);\n }\n b = alter("\s\s$","state.history[0].variables.");\n b = alter("\s\sbeq\s\sb", " == ");\n b = alter("\s\sbneq\s\sb", " != ");\n b = alter("\s\sbgt\s\sb", " > ");\n b = alter("\s\sbeq\s\sb", " == ");\n b = alter("\s\sbneq\s\sb", " != ");\n b = alter("\s\sbgt\s\sb", " > ");\n b = alter("\s\sbgte\s\sb", " >= ");\n b = alter("\s\sblt\s\sb", " < ");\n b = alter("\s\sblte\s\sb", " <= ");\n b = alter("\s\sband\s\sb", " && ");\n b = alter("\s\sbor\s\sb", " || ");\n b = alter("\s\sbnot\s\sb", " ! ");\n return b\n};\n}\n}());
<<stop_timer>>\n\n<<fadeoutsound "HumanCafeteria.mp3">>\n<<playsound "ZenWindowFinal.mp3">>\n\n<<stopvideo>>\n<<playvideo g29QvYJisDo 0 loop>>\n\n<<timedgoto "HumanCafeteria" $WINDOW_DURATION>>\n\n<<set $lastHumanLocation = "HumanCafeteria">>\n<<set $stepsSinceWorked = $stepsSinceWorked + 1>>\n<<set $WINDOW_DURATION = $WINDOW_DURATION + 10>>
<<print either(\n"A fly walks jerkily along the metal surface of the table next to yours.",\n"A fly has taken a deep interest in what looks like some cookie crumbs a couple of tables over.",\n"You can see a fly making the rounds of the cafeteria, moving in long, looping curves.",\n"A fly is bumbling around the windows, dashing itself repeatedly against the glass.",\n"You can hear a fly moving in and out of audible range incessantly.",\n"You hear a fly zip past your left ear at top speed and can't help flinching a little.",\n"A fly hovers for a few moments around your hands before losing interest and moving away.",\n"You see a fly land on one of the decorative potplants for a while then take off again.",\n"You can hear that there is a fly somewhere around you, but you can't see it.",\n"A fly briefly lands on the back of your neck before moving on busily."\n)>><html><br /></html>
\n\n\n\n\n\n<<cyclinglink "This is the end." "Thi, is th. end." ",h,s i, t,e ,n,." ",,.. ., ,,. ,.,.">>\n\n\n\n\n\nYou've been playing [[Drosophilia|http://www.pippinbarr.com/games/drosophilia/]], by [[Pippin Barr|http://www.pippinbarr.com/]], [[Gordon Calleja|http://www.twitter.com/gordoncalleja]], and [[Sidsel Hermansen|http://www.twitter.com/sslhrmnsn]].\n\n<<fadeoutsound "DeathFinal.mp3">>\n<<playsound "TitleFinal.mp3">>
\n\n\n\n\n\n<<cyclinglink "This is the end." "Thi, is th. end." ",h,s i, t,e ,n,." ",,.. ., ,,. ,.,.">>\n\n\n\n\n\nYou've been playing [[Drosophilia|http://www.pippinbarr.com/games/drosophilia/]], by [[Pippin Barr|http://www.pippinbarr.com/]], [[Gordon Calleja|http://www.twitter.com/gordoncalleja]], and [[Sidsel Hermansen|http://www.twitter.com/sslhrmnsn]].\n
String.prototype.unDash = function()\n{\n var s = this.split("-");\n if(s.length > 1)\n for(var t=1; t < s.length; t++)\n s[t] = s[t].substr(0,1).toUpperCase() + s[t].substr(1);\n return s.join("");\n};
Pippin Barr\nGordon Calleja\nSidsel Hermanssen
The glowing <<print either("led","red")>> panel above your desk <<print either("reminds","informs","instructs","blares at")>> you that you <<print either("still","")>> have <<if $callsremaining eq 0>>0<<else>><<print $callsremaining>><<endif>> <<if $callsremaining eq 1>>call<<else>>calls<<endif>> remaining in today's quota. <<print either("A small","An embarrassing","A vaguely revolting","A cringe-inducing")>> company-provided sticker depicts a teddy bear and the words "no time like the present!" Your one authorized piece of desk decor, <<cyclinglink $deskDecor "a Buzz Lightyear figurine" "a photo of your fiancee" "a photo of your fiance" "a photo of your boyfriend" "a photo of your girlfriend" "a photo of your husband" "a photo of your wife" "a Totoro figure" "an autographed baseball" "a Santa hat from last year's Christmas party" "a Johnny Cash plushy" "a copy of The Female Eunuch">>, is positioned next to your computer monitor.\n<<display "OfficeFlavour">>\n<<print either("The","Your")>> phone is <<print either("constantly","eternally","always","")>> ringing. <<print either("They pay you to","It's your job to","Technically you should","Probably better")>> <<if $stepsSinceWorked gt 2>>@@font-size:150%;[[answer it|HumanCall]]@@<<else>>[[answer it|HumanCall]]<<endif>>. Although you could also <<print either("go to","sneak off to","take a quick break at","see what's happening in","drop in at")>> the [[cafeteria|HumanCafeteria]].\n\n<<if $lastFlyLocation eq "FlyOffice">><<if Math.random() < 0.9>><<display "FlyOfficeFlavour">><<endif>><<endif>>\n\n<<if state.history.length gt 1>>\n<<if state.history[1].passage.title eq "HumanCall">>\n<<else>>\n<<stopvideo>>\n<<playvideo a_7HWX0kaog 0 loop>>\n<<endif>>\n<<endif>>\n\n<<fadeoutsound "TitleFinal.mp3" >>\n<<fadeoutsound "HumanCafeteria.mp3" >>\n<<fadeinsound "HumanOffice.mp3" >>\n\n<<set $lastHumanLocation = "HumanOffice">>\n<<set $stepsSinceWorked = $stepsSinceWorked + 1>>\n\n<<if $toFlyModeTimerRunning eq 0>>\n<<display "Timer Addon">>\n<<set_timer_mode "display">>\n<<set_timer_param $FLY_TRANSITION>>\n<<set $toFlyModeTimerRunning = 1>>\n<<set $timerDuration = 5 + (5 - $flyModeCount) * 6 + (Math.random() * (5 - $flyModeCount) * 6)>>\n\n<<set $timerDuration = 35>>\n\n<<start_timer $timerDuration>>\n<<endif>>
<<print either(\n"You notice a fly walking along the cable connecting your monitor to your computer.",\n"A fly lingers irritatingly around your face before buzzing off elsewhere.",\n"A fly has landed on the 5 key of your telephone.",\n"A fly zips past your ear, leaving you with an unpleasant tingling sensation for a few seconds.",\n"You can see a fly making its lunatic corkscrews and loops above your co-workers' heads.",\n"A fly is sitting on the top of your monitor, appearing to stare at you.",\n"You can hear a fly moving in and out of audible range incessantly.",\n"Your eye is drawn briefly to a fly crawling across the surface of some highly generic corporate art hung near your desk.",\n"A fly is walking around on your desk as if it owns the place.",\n"You can hear that there is a fly somewhere around you, but you can't see it.",\n"A fly briefly lands on the back of your neck before moving on busily."\n)>><html><br /></html>
<<if $flyModeCount lte 3>>\nY,u sit alone ,t a free ta.le and <<cyclinglink $flyCafeActivity "ea, some candy" "fea.t on a candied b.nana ch,p" "eat s.me sugar" "e.t some o, a chocolate b,r" "drink s.me sw,et coffee" "wa.t" "wat,. everyone els, eat.ng" "try t. clear y.u, head">>. Y.u se,m to hav, mispl.ced yo,r c.llph.ne. Acr,s. the fl,,r are .he full,.eight w,.dows t.at ma,. it t.e <<print either("b,.t sp.ce","one b,.,able plac.","on,. genuinely enjo.able","so,e natu,.lly-lit roo. yo, h.ve access t.")>> in the o,.ice buil.ing. <<print either(",ou oft.. like t,","It's ni,e to",",.u're always dra,n to go ,er to")>> [[look ,.t th.se wind.ws|FlyWindow]] <<print either("a,, just lo.e yoursel,","a,. just s,.ce out","and t.y to relax",",.d think about anyth,.g ot.er th.n w,.k")>>. \n\n<<print either(".,er pres,.t, of ,..rse, is th. fa,. that","Of cou,.e, you c.n't shake the f,eling","Tec.nically, though,","Yo. sadly real,ze th.t")>> <<if Math.random() lt 0.9>>yo, sho.ld probab,y just <<replace "g. back to ,he .ffice">>g. bac, t. the .ffice [[a,.ngside a cowo,ker|FlyOffice]] hea,ing thr,.gh the do.r now<<endreplace>> a,. <<print either("ge, s.me work d.ne","answ,r some m.re c,lls","k..p chas,ng y,.r quota f,r the ,ay")>>.\n<<else>>\ny,. should pr,bably j,.t <<replace "g. back .. the of,ice">>go ,.ck to th, offic,, but you ,an't s,em to op,n the large, he.vy d,or<<endreplace>>. \n<<endif>>\n<<else>>\n<<if $flyModeCount lte 5>>\nY,, sit a,.ne ,t a f,,e ta.l, a,d <<cyclinglink $flyCafeActivity ",a, some c,,dy" "f,a.t ,. a candi,. b.na,. c,,p" ",.t s.me sug.r" "e.t s,.e o, a chocolate ,,r" "d,.nk s.me sw,,t coffe," ",a.t" ",at,. eve,.one els, ,at.ng" ",.y t. cl,.. y.u, h,.d">>. Y.. s,,m t. h.v, m,.pl.ced y.,r c.llph.n,. A,.,s. t.e fl,,r are .he ,.ll,.eight w,.do,s t.at ma,. ,. t.e <<print either(",,.t sp.ce",",.e b,.,.,,e p,ac.","on,. g,.,,nely enjo.ab,e","so,e n,.u,.lly-,.t roo. yo, h.ve ac,.,s t.")>> in t,. o,.ice b,.l.ing. <<print either(",ou ,.t.. lik, t,","I,.s ,i,e to",",.u're a.,,ys dra,n t. ,o ,er ,o")>> [[.,ok ,.t th.se ,.nd.ws|FlyWindow]] <<print either("a,, j,st ,..e you.,el,","a,. ,.st s,.ce o.t",",.d t.y to ,..ax",",.d t,.n. a,.ut an.,h,.g ot.er ,..n w,.k")>>. A p,tpl.nt ,lso c,tch.s y.,. ey,s f,, s,me r,.son ,.d y,. th,nk ab,,t [[t,k.ng a cl,s.r l,,k|FlyPlant]].\n\n<<print either(".,er .,es,.t, of ,..rs,, is th. fa,. ,.at",",f c.u,.e, y,. c.n't .,,ke t.e f,e,..g","Tec.nic,.ly, t,.ugh,","Yo. sadly re,l,ze th.t")>> <<if Math.random() lt 0.9>>yo, sho.ld pro,..,y ,.st <<replace "g. b,ck to ,he .f,.ce">>g. bac, t. the .f,.ce [[a,.ngside a cowo,ker|FlyOffice]] hea,ing ,.r,.gh .,e do.r n.w<<endreplace>> .,. <<print either("ge, s.,e work d.,.",",.sw,r .,me m.re c,,..","k..p c,..,ng y,.r q,..a f,r t,. ,,y")>>.\n<<else>>\ny,. s,..ld pr,,..ly j,., <<replace "g. b,.k .. th, .,,ice">>,. ,.ck ,. th, o.,,ic,, but ,ou ,an't s,.m to op,n t,. .,,ge, he.,. d,,r<<endreplace>>.\n<<endif>>\n<<else>>\n<<if $flyModeCount eq 6>>\n.,, ,., ,,... ,, , .,,, ,..., ,,. <<cyclinglink $flyCafeActivity ",., ,.,, .,,,." ",,.., ,. , ,.,,.,. ..,.,. ,,,." ",., ..,. .,..," ",.. ,,., ., , ,..,.,,,. ,,," ",,... ,.,. .,,,. ,.,,.," ",,.." ",,.,. ,.,,.,., ,.,, ,.,.,." ",., ,. ,.,.. ..,, ,,..">>. ,.. .,,. ,. ,.., ,,.,...., ..,, ..,,...,,. ,,.,.. ,.. ,.,,. ,., .,. ,.,.,.,..,., ,,.,.,. ,.,. .,,. ,. ,.. <<print either(",,.. ,...,",",.. .,.,.,,. ,,,..",".,,. .,.,,,... ,.,,.,,,.",".,,, .,.,,.,...,,.. ,...,.,, ..,. .,,.,. ,.")>> ,. .,. ,,..,, .,.,.,... <<print either(",,. ,.,.. ,.., ,,",".,., ,.,, ,.",",..,.. ,.,,,. ,..,. ,. ,. ,,. ,.")>> [[.,., ,., ,..., ,.,...,|FlyFreedom]] <<print either(",,, .,,. ,.., .,,.,,.,",".,. ,.,. ,,.,. ..,",",.. ,.. ,. ,..,.",",.. ,,... ,,.,. .,.,,,.. ,..., ,... ,,..")>>. , ,,,...,. ,,.. .,,.... ,.,. ,,,. .,, .,,, .,.,... ,., .,. ,,,.. ,,,,. [[,,..,. , .,,,.. .,,,|FlyPlant]].\n\n<<print either(".,,. .,.,,.,, ,. ,...,,, ,. ,.. ,.,. ,..,",",, ..,,.,, .,. ,..,. .,,., ,., .,,,...",",...,..,.,., .,.,..,",".,. ,,,., .,,.,,. ,...")>> <<if Math.random() lt 0.75>>,., .,,.,. ,..,..,. ,.,. <<replace ".. ,,., ,. ,., .,,.,.">>,. .,,, .. ,.. .,,.,. [[,,.,,.,., , ,,,.,.,,|FlyOffice]] ,..,.,, ,.,,.., .,, ,,.. ,..<<endreplace>> .,. <<print either(",., ,.,, ,.... ,.,.",",.,.,. .,., ,.,. .,,..","..., .,..,,. ,,.. ,,... ,,. .,. ,,.")>>.\n<<else>>\n,,. ,,..,, .,,,..., .,., <<replace ",. .,., .. ,., .,,,..">>,. ,.,. ,. .,, ,.,,,.,, ,., ,,. ,,.,, ,,.. .. ,,,. .,. .,,.., ,..,. ,,,,<<endreplace>>.\n<<endif>>\n<<endif>>\n<<endif>>\n<<endif>>\n\n<<stopvideo>>\n<<playvideo 7dWNgGdEPos 0 loop>>\n\n<<fadeinsound "FlyCafeteria.mp3" >>\n<<fadeoutsound "FlyOffice.mp3" >>\n\n<<set $lastFlyLocation = "FlyCafeteria">>\n<<set $stepsSinceWorked = $stepsSinceWorked + 1>>