JavaScript must be enabled to play.
Browser lacks capabilities required to play.
Upgrade or switch to another browser.
Loading…
/*********************************************/ /* Location: Anywhere Description: First rent payment email message */ <<if $rentPaymentCounter === 1 && !$firstRentPaymentEmailSent>> <<set $firstRentPaymentEmailSent = true>> <<run MindWare.addEmail ("Hive Properties","Hive Properties - Welcome to Your New Home", "We are delighted to welcome you to the Hive Properties community. With your first payment successfully received...", "Email-HiveProperties-Welcome")>> <</if>> /*********************************************/ /* Location: Anywhere Description: Landlord mission not finished */ <<if $totalDays > 3 && !$spyingLandlordFinished && !$LandlordJobFailEmailSent && !$quickStartPath>> <<set $LandlordJobFailEmailSent to true>> <<run MindWare.markEmailAsRead("Email-LandlordJobInfo")>> <<run MindWare.removeEmail("Email-LandlordJobInfo")>> <<run MindWare.addEmail ("ConcernedTenant01","Thanks for wasting my time", "What happened? You took on the job, and then... nothing. Someone else could have taken this job and finished it by now.", "Email-LandlordJobFail")>> <</if>> /*********************************************/ /* Location: BrainFry Description: GitGud Delivery Mission */ <<if $brainFryWorkCount > 2 && State.passage === "BrainFry" && !$gitGutDeliveryStarted && $dayOfWeek !== "Saturday" && $dayOfWeek !== "Sunday">> <<goto "GitGudDelivery-Intro">> <</if>> /*********************************************/ /* Location: Anywhere Description: EroSphere Promo Email */ <<if $totalDays > 4 && $eroSpherePromoSent !== true>> <<set $eroSpherePromoSent = true>> <<run MindWare.addEmail("EroSphere", "[PROMO] Unleash Your Desires at EroSphere!", "Visit EroSphere - Where fantasy meets reality, and your wildest dreams come alive!", "Email-EroSpherePromo")>> <</if>> /*********************************************/ /* Location: Anywhere Description: Cipher Chat Request to Obtain Sensitive Information */ <<if previous() is "GoToSleep" && $brainFryWorkCount > 5 && $cipherUrgentRequestSent !== true>> <<set $cipherUrgentRequestSent = true>> <<goto "Quest-CipherLynx-UrgentRequest-Introduction">> <<run MindWare.addInstantMessage('cipherInstantMessages', 'Urgent Request', 'IMApp-CipherLynx-UrgentRequest', 'Cipher', true, true);>> <</if>>
<<fadein 4s 500ms>> <<fadeout 2s 7000ms>> <div class="chapter-transition-container"> <h2 id="chapterTitle" class="neon-flicker">Prologue</h2> </div> <</fadeout>> <</fadein>> <<timed 10s>> <<goto "Introduction1">> <</timed>>
<div class="img-location"><img src="imgs/locations/neourbania.jpg" width="100%"></div> A sprawling landscape of towering skyscrapers punctuates the horizon, each one emblazoned with glowing neon logos and gargantuan electronic billboards, seducing onlookers with the latest in fashion and technology. The sky is a perpetual twilight of smog and artificial light, casting an eerie glow on the city's avenues and alleyways, while the air is saturated with the buzz of drones delivering packages to insatiable consumers. The streets below are a constant stream of bustling activity as swarms of people navigate through crowded marketplaces that flicker with holographic advertisements, each promising a higher level of pleasure and indulgence. Welcome to <span class="text-glow">NeoUrbania</span>. The year is 2045. It's a world where the pursuit of pleasure is the only morality, and corporations are the new deities. Democracy has long since been auctioned to the highest bidder, leaving in its wake a society obsessed with novelty and hedonistic consumption. Here, human worth is measured by social credit scores and expressed by spending habits. <<button "Continue">> <<goto "Introduction2">> <</button>>
<div class="img-location"><img src="imgs/locations/syntech.jpg" width="100%"></div> At the heart of this neon jungle is <span class="text-glow">SynTech</span>, the world's leading megacorporation, whose advancements have been woven into the very fabric of society. A beacon of innovation, the <span class="text-glow">SynTech Tower</span> is adorned with constantly shifting digital displays that showcase the company's latest achievements, research breakthroughs, and tech offerings. The very top of the tower boasts a colossal 3D hologram of the planet Earth, symbolizing SynTech's global influence and vision for a connected world. Inside the SynTech Tower, scientists and engineers birth technologies that blur the lines between biology and machinery. Through their work, SynTech has revolutionized medicine and human capabilities. They've developed neural enhancements that amplify cognitive abilities, exoskeletons and prosthetics that restore mobility to the paralyzed, and nano-augmentations that combat diseases at a molecular level. <<button "Continue">> <<goto "Introduction3">> <</button>>
<div class="img-location"><img src="imgs/locations/brainfry.jpg" width="100%"></div> The world you know is far away from the gleaming pinnacles of the SynTech Tower. You're a new employee of <span class="text-glow">BrainFry</span>, a shady developer of immersive virtual reality experiences founded and owned by <span class="text-glow">Drake Voronov</span>, a serial entreprenour with a moral compass so skewed it's rumored to point straight to the underworld. The kind of VR experiences produced by BrainFry and other similar companies are called <span class="text-glow">S.I.M.S. (Sensory Immersive Mind Simulations)</span>, and they're NeoUrbanian's latest and greatest addiction. They allow their users to experience their wildest fantasies or greatest thrills as if they were actually happening to them. Unlike regular VR games, S.I.M.S. stimulate all five senses by tapping directly into neural pathways, allowing for a deeply personal and emotionally resonant experience. BrainFry's building is located deep in <span class="text-glow">"The Backlog,"</span> a local moniker for the older, weathered part of NeoUrbania. The building is a multi-story structure with wires sprouting from every corner, like veins drawing lifeblood from the energy of the city itself. These thick cables weave an intricate web around the building, connecting it to various power sources, data hubs, and other establishments in the vicinity. Your path to BrainFry was driven not by passion, but by necessity. Relying on gig work alone was no longer sustainable, even for someone with fairly advanced hacking skills like yours. Despite its infamous reputation, the job at BrainFry offered something that had become a luxury for you: regular income. <<button "Continue">> <<goto "Introduction4">> <</button>>
<div class="img-location"><img src="imgs/locations/starting-apartment.jpg" width="100%"></div> Still, BrainFry's pay is barely enough to get by. This financial reality has landed you in a cramped apartment whose only positive characteristics are its proximity to the BrainFry building and the rent being just $1,000 a week. Its thin walls often fail to muffle the raucous laughter, arguments, and countless footsteps of neighboring tenants. The floor, while not spotless, carries the evidence of many late-night coding sessions and hastily consumed meals. Peeling patches on the walls, craving attention, are overshadowed by the posters of your favorite <span class="text-glow">OmniNet</span> stars. Situated right in front of the old, boxy television is a cheap, worn-out couch. Its sagging cushions and faded fabric have seen better days, but it serves its purpose during the moments you decide to unwind with a can of beer and movie. However, the undeniable centerpiece of the apartment is your computer setup, which stands in stark contrast to the rest of the room and is really the only expensive item you own. The neon lighting emitted by the computer's expensive components bathes the room in a soft, purple glow. Four sleek monitors dominate your desk, each displaying a different facet of the digital world you often find yourself immersed in. On one of your monitors, a notification is flashing in the corner. Apparently, you have received a new message from your closest friend, a fellow hacker who goes by the moniker <span class="text-glow">CipherLynx</span>. <<button "Read the message">> <<run MindWare.markEmailAsRead("Email-CipherFirstJobIntro")>> <<goto "Email-CipherFirstJobIntro">> <</button>>
<<set $lockedUI = true>>\ <<set $gitGutDeliveryStarted = true>>\ <div class="img-character"><img src="imgs/characters/drake/drake-brainfry-inside.jpg" width="100%"></div> \ <div class="narrator">You're at work when suddenly, your boss, Drake Voronov, strides over with an air of urgency.</div> <<drake>>I have a special task for you. We need a S.I.M.S. delivered to GitGud, an electronics store in the Pleasure Grid.<</drake>> <div class="narrator">The Pleasure Grid is NeoUrbania's own blend of Kabukichō and Akihabara, a place where you can buy everything from a cyber implant to a drug-fueled threesome.</div> <<player>>Why do I need to deliver it in person? Can't we just send it over the OmniNet?<</player>> <<drake>>That's how GitGud's owner, Xavier likes to do business.<</drake>> <<player>>Is he old-fashioned or afraid of someone stealing the S.I.M.S. in transit?<</player>> <<drake>>Both.<</drake>> <div class="narrator">Drake gives you a small datadisk.</div> <<pickup $inventory "Custom S.I.M.S." 1>>\ <<itemReceived "Custom S.I.M.S.">> <<drake>>I've already sent you GitGud's location, so you should head there right away.<</drake>> <<player>>Will do.<</player>> \ <<button "Leave">> <<run MindWare.addTask("Deliver a custom S.I.M.S.", "Task-GitGudDelivery")>> <<goto "GitGud-Introduction">> <</button>> <<set $gitGutUnlocked = true>>\
Your boss asked you to deliver a custom S.I.M.S. to GitGud, an electronics store located in the Pleasure Grid, NeoUrbania's commerce and pleasure district.
<<set $gitGutIntroduced = true>>\ <div class="img-character"><img src="imgs/locations/gitgud-outside.jpg" width="100%"></div> The GitGud store is located on the edge of The Pleasure Grid's shopping zone. Its entrance is flanked by holographic signs and digital screens advertising all kinds of virtual thrills. Despite its modest footprint, dwarfed by the sprawling superstores of NeoUrbania's electronics giants, GitGud has no trouble attracting customers because size isn't what matters to them - the selection of goods on offer does. Information about GitGud's isn't difficult to find in the more shadowy corridors of the OmniNet. Hacking utilities capable of breaching highly secure systems, cybernetic enhancements that push the boundaries of human capabilities, and S.I.M.S. that can drown the senses in oceans of artificial ecstasy - GitGud is supposed to have it all. You've heard about GitGud many times before but never visited the store. Now, as you stand before the entrance, ready to deliver a custom S.I.M.S. to some <span class="text-glow">Xavier</span>. <<button "Continue">> <<goto "GitGud-Introduction-Inside1">> <</button>>
<div class="img-character"><img src="imgs/locations/gitgud-inside.jpg" width="100%"></div> The interior of GitGud is an oasis of organized chaos, every inch utilized to dipslay physical and digital products. Shelves crammed with items run parallel to sleek monitors that customers use to scroll through specifications and watch trailers for virtual reality experiences. The store's layout leads you inevitably to the checkout counter. Standing in front of it is one of GitGud's employees, who are easy to tell apart from customers because they wear jackets with LED screens on the back. The illuminated text loops with a polite "How can I help you?" You watch her from a distance for a short moment as her hands dance on a keyboard, and then you decide to get her attention and ask where you can find Xavier. <<button "Continue">> <<goto "GitGud-Introduction-Inside2">> <</button>>
<div class="img-character"><img src="imgs/characters/yuki/yuki-gitgud-inside.jpg" width="100%"></div> <div id="dialog-content"><<gitgud-employee-yuki>>Can I help you find something?<</gitgud-employee-yuki>></div>\ <span id="xavier-question1">\ @@.choicebutton;<<button "Ask about Xavier">>\ <<addclass "#xavier-question1" "hidden">>\ <<append "#dialog-content">>\ <<include "GitGud-Introduction-Inside2-Xavier">>\ <<replace "#continue-button">><<button "Visit Xavier">>\ <<goto "GitGud-Introduction-XavierRoom">>\ <</button>><</replace>>\ <</append>>\ <</button>>@@</span>\ <span id="xavier-question2">\ @@.choicebutton;<<button "Comment on the store's atmosphere">>\ <<addclass "#xavier-question2" "hidden">>\ <<append "#dialog-content">>\ <<include "GitGud-Introduction-Inside2-Atmosphere">>\ <</append>>\ <</button>>@@</span> <span id="continue-button"></span>\
<div></div> <<player>>I'm looking for someone named Xavier.<</player>> <<gitgud-employee-yuki>>Xavier? Why do you need to see him?<</gitgud-employee-yuki>> <<player>>I've been asked to deliver this custom S.I.M.S. directly to him.<</player>> <div class="narrator">The employee carefully inspects the S.I.M.S. and checks the validity of its serial number of a computer.</div> <<gitgud-employee-yuki>>I see. Everything checks out. Head up the stairs at the back, then take the first door on your right. Xavier should be in there. Just make sure to knock first - he might be busy right now.<</gitgud-employee-yuki>> <div class="inner-thought">Is she blushing slightly?</div> <<player>>Thank you.<</player>>
<div></div> <<player>>This place has quite the unique vibe.<</player>> <<gitgud-employee-yuki>>Thank you! Our customers appreciate that some stores still keep it real and let their products and services speak for themselves, instead of relying on marketing departments to do all the talking for them.<</gitgud-employee-yuki>> <<player>>So, you're not a fan of the whole marketing spiel then?<</player>> <<gitgud-employee-yuki>>Not really. I believe in the authenticity of experience.<</gitgud-employee-yuki>> <<player>>Sounds refreshing in a world bombarded by ads and hype.<</player>> <<gitgud-employee-yuki>>I guess I'm a bit old-school in that regard.<</gitgud-employee-yuki>>
<div class="img-character"><img src="imgs/locations/gitgud-hallway.jpg" width="100%"></div> As you ascend the stairs and reach the hallway, the chaotic energy of the store below gives way to a more subdued atmosphere. The hallway is dimly lit, with soft neon lights casting elongated shadows along the walls. The door you're looking for is immediately noticeable on the right. Approaching the door, you pause as faint, muffled sounds emanate from within. It's difficult to make out any specifics, but there's a rhythmic quality to them. <span id="door-action"> @@.choicebutton;<<button "Peek inside">> <<set $GitGudIntroductionPeeked = true>> <<replace "#door-action">> <<include "GitGud-Introduction-XavierRoom-Peek">> <</replace>> <</button>>@@ \ @@.choicebutton;<<button "Knock on the door">>\ <<replace "#door-action">> <<include "GitGud-Introduction-XavierRoom-Knock">> <</replace>> <</button>>@@</span>
Against your better judgment, you decide to peek through the keyhole, slowly pushing the door open a crack. The sounds from inside grow louder, more distinct as you position yourself for a better view. Inside the room, you see a large black man leaning against a desk. His massive cock is being vigorously sucked by a sexy woman wearing high heels and not much else. <img src="imgs/sex/xavier-keyhole-blowjob.gif" width="100%"> The woman begins to pump the man's shaft with her hand, matching the rhythm of her mouth as she deep-throats him. It's clear that she knows exactly what she's doing and is intent on bringing him to climax. As you watch in amazement, you see the man grab the woman by her hair and start to thrust into her mouth, his hips beginning to buck wildly. With a loud groan, he releases his load deep down her throat. The woman swallows eagerly, gagging slightly as she takes every drop of his cum. When she finally pulls away, the man lets out a shaky breath and seems to gather himself. He hands her some money, which she quickly accepts and starts to get dressed. After exchanging a few more words with him, she hurries out of the room. Before she manages to close the door behind her, she notices you standing in the hallway. Her eyes meet with yours for a moment, and you catch her glancing at your crotch. She notices the visible bulge that has formed there. A faint smile plays at the corners of her mouth. <img src="imgs/locations/gitgud-hallway-hooker.jpg" width="100%"> "There's someone here for you," she says to the man inside and then strides past you, her heels clicking rhythmically on the floor. "Come in," calls out the man inside authoritatively. <<button "Enter the room">> <<goto "GitGud-Introduction-XavierRoom-Inside">> <</button>>
You take a moment to compose yourself before rapping your knuckles gently against the door. For a brief moment, everything goes silent. Then, you hear the shuffling of feet and the faint sound of voices, too low to make out any words. The door clicks, and it swings open slowly. As the door opens, an attractive woman steps out. She's in the process of buttoning adjusting her clothes. Her eyes briefly meet yours before she strides past you, her heels clicking rhythmically on the floor. <img src="imgs/locations/gitgud-hallway-hooker.jpg" width="100%"> Your brief ogling of the woman is abruptly interrupted by a voice from inside the room. "Come in," it calls out, clear and authoritative. <<button "Enter the room">> <<goto "GitGud-Introduction-XavierRoom-Inside">> <</button>>
<div class="img-character"><img src="imgs/locations/gitgud-xavierroom.jpg" width="100%"></div> Stepping into the room, you find yourself in a space that has the familiar feel of a tattoo parlor or a barber's shop, with its wooden floor and an artsy photo of a tattooed girl adorning one of its walls. However, the centerpiece is anything but traditional: a large, sophisticated cybersurgical robot hovers ominously above a reclining chair in the center of the room. On the desks nearby are computers whose screens flicker with complex diagrams and code. It's clear that this is a body shop - the kind where people go to modify their bodies with cybernetic enhancements. As you look at your surroundings, a door to an adjoining bathroom opens, and a large, imposing figure emerges. The man, presumably Xavier, is tall and muscular, his presence filling the room. <<button "Continue">> <<goto "GitGud-Introduction-XavierConversation">> <</button>>
<div class="img-character"><img src="imgs/characters/xavier/gitgud-xavier.jpg" width="100%"></div> <<xavier>>What brings you to me?<</xavier>> <<player>>I'm looking for Xavier. I have a special delivery from my boss at BrainFry, Drake. It's a custom S.I.M.S.<</player>> <<xavier>>Good. My client has been asking me about it every day since she ordered it.<</xavier>> <div class="narrator">You give the S.I.M.S. to Xavier.</div> <<drop $inventory "Custom S.I.M.S." 1>>\ <<itemLost "Custom S.I.M.S.">> <<xavier>>What's your name?<</xavier>> <<player>>I'm $playerName.<</player>> <<xavier>>It's nice to meet you, $playerName. Have you tried the S.I.M.S.?<</xavier>> <<player>>No, of course not. Drake wanted me to deliver it to you as soon as possible, and I wouldn't be able to decrypt it anyway.<</player>> <<xavier>>Good boy.<</xavier>> <div class="narrator">Xavier smiles, pleased with your honest response.</div> <<xavier>>Would you like to try it? If its anything like the last BrainFry custom deliver, then it be quite an experience.<</xavier>> <div class="inner-thought">I have tried a few off-the-shelf S.I.M.S. before, but never a custom one. From what I've heard, the best ones can bring you to a full-body orgasm, while the worst once can fry your neurons in a second.</div><span id="sims-choice">\ @@.choicebutton;<<button "Try the S.I.M.S.">>\ <<replace "#sims-choice">>\ <<set $GitGudSIMSExperience = true>> <<include "GitGud-Introduction-SIMS-Experience">> <</replace>> <</button>>@@ \ @@.choicebutton;<<button "No, I'm good">>\ <<replace "#sims-choice">>\ <<set $GitGudSIMSExperience = false>> <<include "GitGud-Introduction-NoSIMS">> <</replace>> <</button>>@@</span>
<<player>>Yea, I would like to give it a go if I can.<</player>> <div class="inner-thought">I can't pass on an opportunity like this.</div> <<xavier>>I knew you would. Sit in the chair behind me and relax.<</xavier>> <div class="narrator">You take a seat in the chair, its leather cool against your skin. Xavier moves with a practiced ease, retrieving the S.I.M.S. disk and sliding it into a slot on one of his high-end computers. He then sets some parameters and initiates the program. Xavier steps back from the computer and walk up to you.</div> <<xavier>>Just relax and let the experience take over. Are you ready?<</xavier>> <<button "I'm ready">> <<goto "GitGud-Introduction-PlayingSIMS">> <</button>>
<video width="100%" controls autoplay muted> <source src="vids/BrainFry-SIMS-delivery.mp4" type="video/mp4"> Your browser does not support the video tag. </video> As the program runs its course, you feel your body begin to relax into the chair. Your senses are heightened, and it's almost as if you're not in your own skin anymore. You suddenly find yourself experiencing the world through the eyes of a woman having sex with a man in the cowgirl position. The feeling of being penetrated is unlike anything you've ever experienced before; deep and full, with every thrust sending ripples of pleasure through your core. The man is fondling your large breasts and hard nipples. Each touch from his rough hands sends waves of arousal coursing through you, making it difficult to focus on anything other than the pleasure building inside you. Before the cacophony of sensations has a chance to escalate any further, the S.I.M.S. reaches its conclusion and gradually fades away. You find yourself back in reality, breathing heavily, your skin flushed and slick with sweat. You feel incredibly aroused and vulnerable, still processing what just happened. <<button "Continue">> <<goto "GitGud-Introduction-EndSIMS">> <</button>>
<div class="img-character"><img src="imgs/characters/xavier/gitgud-xavier.jpg" width="100%"></div> <div class="narrator">Xavier looks at you intently, his eyes searching yours for a reaction.</div> <<xavier>>So, how was it?<</xavier>> <span id="sims-choice">\ @@.choicebutton;<<button "It was strange, but it felt nice.">>\ <<replace "#sims-choice">>\ <<set $GitGudSIMSExperienceLiked = true>>\ <div class="narrator">You pause for a moment, still collecting your thoughts. The intensity of the simulation was overwhelming, and it's a lot to process.</div> <<player>>You know, it was... intense, but in a good way.<</player>> <<if visited() is 1>>\ <<genderFeminine 5>> <</if>>\ <div class="narrator">Xavier raises an eyebrow, a slight smile playing on his lips.</div> <<xavier>>I'm glad to hear you enjoyed it. S.I.M.S. can be quite... immersive.<</xavier>> <div class="inner-thought">Did Xavier knew what the S.I.M.S. was about?</div> <<xavier>>Now that we've established the S.I.M.S. to be working correctly, please inform Drake that the client's payment will be wired as soon as she comes here to pick it up.<</xavier>> <<player>>Got it.<</player>> <<xavier>>That will be all for now. I'm sure we'll see each other again.<</xavier>> <<button "Leave BrainFry">> <<goto "GitGud-Introduction-End">> <</button>> <</replace>> <</button>>@@ \ @@.choicebutton;<<button "It felt weird.">>\ <<replace "#sims-choice">>\ <<set $GitGudSIMSExperienceLiked = false>>\ <div class="narrator">You pause for a moment, still collecting your thoughts. The intensity of the simulation was overwhelming, and it's a lot to process.</div> <<player>>It was a bit too much for me and felt weird.<</player>> <<if visited() is 1>>\ <<genderMasculine 5>> <</if>>\ <div class="narrator">Xavier nods but looks slightly disappointed.</div> <<xavier>>S.I.M.S. can be quite overwhelming at first. It's not for everyone.<</xavier>> <div class="inner-thought">Did Xavier knew what the S.I.M.S. was about?</div> <<xavier>>Now that we've established the S.I.M.S. to be working correctly, please inform Drake that the client's payment will be wired as soon as she comes here to pick it up.<</xavier>> <<player>>Got it.<</player>> <<xavier>>That will be all for now. I'm sure we'll see each other again.<</xavier>> <<button "Leave BrainFry">> <<goto "GitGud-Introduction-End">> <</button>> <</replace>> <</button>>@@</span>
<<player>>Thank you for the offer, but I don't feel like trying a S.I.M.S. today.<</player>> <<xavier>>Fair enough. Let Drake know that the client's payment will be wired as soon as she picks up the S.I.M.S.<</xavier>> <<player>>Thank you, Xavier.<</player>> <<button "Continue">> <<goto "GitGud-Introduction-End">> <</button>>
<div class="img-character"><img src="imgs/locations/gitgud-outside.jpg" width="100%"></div> <<if $GitGudSIMSExperience>>\ Stepping out of the building, the fresh air feels almost surreal after the intense sensory journey you've just experienced. The vivid memories of the S.I.M.S. simulation linger in your mind. Shaking off the residual feelings, you refocus on the task at hand and decide to hurry back to BrainFry. <<else>>\ As you leave the building, your mind is still occupied with the thought of what the S.I.M.S. experience might have been like. But that thought has to wait because you need to hurry back to BrainFry to confirm the delivery. <</if>> <<button "Continue">> <<goto "GitGud-Introduction-End-BrainFry">> <</button>>
<div class="img-character"><img src="imgs/characters/drake/drake-brainfry-inside.jpg" width="100%"></div> <div class="narrator">When you arrive back at BrainFry, you find Drake chatting with an employee. He quickly notices you.</div> <<drake>>Back already? Did you deliver the S.I.M.S. to Xavier?<</drake>> <<player>>Yeah, it's done. Xavier has the package.<</player>> <<drake>>And? What did you think of him?<</drake>> <<player>>Well, he's certainly not someone I'd like to mess with. Guy's got a presence like a tank in a china shop.<</player>> <<drake>>Ha ha, that's Xavier for you.<</drake>> <<drake>>Anyway, thank you for the delivery. I'm happy I can trust you even with sensitive tasks like this one.<</drake>> <<if visited() is 1>>\ <<relationshipIncreasedWith "Drake" 10>> <</if>>\ <<player>>I'm happy I could help.<</player>> <<drake>>Feel free to take the rest of the day off.<</drake>> <<actionPointsDecreased 5>> <<button "Leave">> <<set $lockedUI = false>> <<run MindWare.completeTask("Deliver a custom S.I.M.S.")>> <<run MindWare.addInstantMessage('cipherInstantMessages', 'S.I.M.S. Delivery', 'IMApp-CipherLynx-SIMSDelivery', 'Cipher', true, true);>> <<goto "BrainFry">> <</button>>
<<set $lockedUI to true>>\ <div class="img-location"><img src="imgs/locations/starting-apartment.jpg" width="100%"></div> The dim glow of the morning sun seeps through the smog that always blankets NeoUrbania. You sit up, the remnants of a restless dream fading from your mind. But before you have a chance to start your morning routine, a flickering notification catches your eye - a chat request from CipherLynx. That's odd; Cipher is almost never active early in the morning. Feeling that it's probably something urgent, you decide to check it out right away. @@.continue-button;<<button "Check Cipher's Message">><<goto "IMApp-CipherLynx-UrgentRequest">><</button>>@@
<div class="cyber-desktop-im"> <div class="im-header"><span class="im-header-text">Instant Messenger</span></div> <div class="im-main"> /* <div class="im-contacts-pane"> <<nobr>> <!-- Contact --> <div id="contact-cipher" class="contact-entry"> <img src="imgs/characters/cipher/cipher-portrait.webp" class="contact-img" alt="CipherLynx"> <span class="contact-name"> <<link "CipherLynx ">> <</link>> </span> <<set _hasUnlockedNewTopics = false>> <<for _topic, _data range $cipherInstantMessages>> <<if _data.unlocked and _data.isNew>> <<set _hasUnlockedNewTopics = true>> <</if>> <</for>> <<if _hasUnlockedNewTopics>> <span class="im-contact-new-emoji">🆕</span> <</if>> </div> <</nobr>> </div> */ <div class="im-chat-pane"> <div id="chat-display" class="chat-display-special"> <<set $cipherInstantMessages["Urgent Request"].isNew = false>> <<cipher-chat>>Hey, buddy. I need your help - it's urgent. Are you here?<</cipher-chat>> <<player-chat>>What's up, Cipher? You sound unusually serious.<</player-chat>> <<cipher-chat>>I've got a job. A big one. And I need your help<</cipher-chat>> <<player-chat>>What kind of job are we talking about?<</player-chat>> <<cipher-chat>>Hacking into a server.<</cipher-chat>> <span id="reason-question">@@.im-response; <<button "Well, what do you need my help with then? Hack it yourself.">> <<replace "#reason-question">> <<player-chat>>Well, what do you need my help with then? Hack it yourself.<</player-chat>> <<cipher-chat>>I would if I could.<</cipher-chat>> <<player-chat>>And why can't you?<</player-chat>> <<cipher-chat>>Because it's a SynTech server.<</cipher-chat>> <<player-chat>>Wait... I think you don't have what it takes to hack SynTech anymore and need help of someone who's better than you? 😎<</player-chat>> <<cipher-chat>>You wish. The reality is even grimmer: I used to work there, which means I'm likely on their watch list.<</cipher-chat>> <<include "IMApp-CipherLynx-UrgentRequest-Cont1">> <</replace>> <</button>>@@</span> </div> </div> </div>
<<player-chat>>YOU WHAT?!<</player-chat>> <<player-chat>>You worked for the world's largest megacorp and didn't tell me?<</player-chat>> <<cipher-chat>>I signed a deal with the devil and decided that the best thing to do was to keep it a secret. I wanted to protect you, to keep you out of SynTech's radar. The less you knew, the safer you were.<</cipher-chat>> <<player-chat>>And now you're bringing me into this?<</player-chat>> <<cipher-chat>>Only because I've taken all the necessary precautions and know that you wouldn't want to miss on this opportunity.<</cipher-chat>> <<player-chat>>Hmm... so what's so special about this server?<</player-chat>> <<cipher-chat>>The server is home to a prototype AI that's rumored to be the world's first AGI.<</cipher-chat>> <<player-chat>>You mean artificial general intelligence? An intelligent agent that can learn to do any task that human can perform?<</player-chat>> <<cipher-chat>>That's exactly what I mean.<</cipher-chat>> <span id="paying-question">@@.im-response; <<button "And who's paying to steal it?">> <<replace "#paying-question">> <<player-chat>>And who's paying to steal it?<</player-chat>> <<include "IMApp-CipherLynx-UrgentRequest-Cont2">> <</replace>> <</button>>@@</span>
<<cipher-chat>>Not steal - destroy.<</cipher-chat>> <<player-chat>>For real?<</player-chat>> <<cipher-chat>>Yep. For real.<</cipher-chat>> <<cipher-chat>>The client didn't tell me why they want it gone, but I think it's safe to assume that they're a top suit working for a competing megacorp and are afraid that SynTech would become even more powerful than they already are. Hell, maybe they're from some government agency that still has some balls to shake things up.<</cipher-chat>> <<player-chat>>I don't know, Cipher. It sounds like a really dangerous job.<</player-chat>> <<cipher-chat>>You haven't yet asked how much it pays.<</cipher-chat>> <<player-chat>>Okay. How much does the job pay?<</player-chat>> <<cipher-chat>>$100,000. That's five zeroes.<</cipher-chat>> <<player-chat>>Are you shitting me?! That's a huge amount of money.<</player-chat>> <<cipher-chat>>I know. That's why I'm trying to convince you to help me. We could both make a bank. And I swear, I've got every angle covered.<</cipher-chat>> <span id="decision">@@.im-response; <<button "Alright, you've got me. I'm in.">> <<replace "#decision">> <<player-chat>>Alright, you've got me. I'm in. <</player-chat>> <<include "IMApp-CipherLynx-UrgentRequest-Cont3">> <</replace>> <</button>>@@ </span>
<<cipher-chat>>That's the spirit!<</cipher-chat>> <<cipher-chat>>The plan is simple: First, I'll send you the server's IP address. Next, you'll get a custom wiping tool I've developed.<</cipher-chat>> <<cipher-chat>>Your part is to breach the server and use the tool. The wiper will cover your tracks, so there won't be any breadcrumbs leading back to us.<</cipher-chat>> <span id="plan">@@.im-response; <<button "Sounds like a plan. Send me everything. Let's do this.">> <<replace "#plan">> <<player-chat>>Sounds like a plan. Send me everything. Let's do this.<</player-chat>> <<include "IMApp-CipherLynx-UrgentRequest-Cont4">> <</replace>> <</button>>@@ </span>
File transfer in progress: <div class="im-progress"> <div class="im-progress-value"></div> </div> <<fadein 200ms 10s>> File transfer complete!<br> <span id="button1">@@.email-listing;<<button "Save Target">> <<set _buttonOneClicked = true>> <<run setup.addHackingTarget("SynTech Server", "e862:7a89:105c:76ab", "UrgentRequest-animation")>> <<replace "#button1">><</replace>> <<if _buttonOneClicked && _buttonTwoClicked>> <<replace "#progressControl">> @@.email-listing;<<button "Proceed">> <<set $cipherInstantMessages["Urgent Request"].unlocked = false>> <<goto "UrgentRequest-thoughts">> <</button>>@@ <</replace>> <</if>> <</button>>@@</span> <span id="button2">@@.email-listing;<<button "Download Wiper Tool">> <<set _buttonTwoClicked = true>> <<run setup.addHackingTool("Data Wiper")>> <<replace "#button2">><</replace>> <<if _buttonOneClicked && _buttonTwoClicked>> <<replace "#progressControl">> @@.email-listing;<<button "Proceed">> <<set $cipherInstantMessages["Urgent Request"].unlocked = false>> <<goto "UrgentRequest-thoughts">> <</button>>@@ <</replace>> <</if>> <</button>>@@</span> <span id="progressControl"></span> <</fadein>>
<div class="img-location"><img src="imgs/locations/starting-apartment.jpg" width="100%"></div> As you stare at the screen, the gravity of CipherLynx's request sinks in. The risks are high, but so are the stakes. $100,000 for a single job. It's the kind of opportunity that doesn't come around often. You decide there's no time to waste. The server won't hack itself, and the clock is ticking. You take a deep breath. It's now or never. @@.continue-button;<<button "Launch Hacking Tool">><<goto "HackTarget">><</button>>@@
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target</span></div>\ <div class="desktop-hacking-tool-animation">\ <div class="msg-container">\ <div class="msg">Connecting</div>\ </div>\ <div class="hacking-animation">\ <div id="console"></div>\ </div>\ </div>\ </div>\ <<script>> $(document).one(':passagerender', function() { setTimeout(function() { var consoleElement = document.getElementById("console"); const msg = document.querySelector(".msg"); var txt = [ "Initiating protocol sequence...", "...", "Encrypting handshake payload...", "...Payload encrypted.", "Handshake dispatched, awaiting sync...", "...", "Response pattern received, decrypting...", "...Decryption complete.", "Auth token generation in progress...", "...", "Securing comm-link with crypto-hash...", "...Comm-link secured.", "Executing port enumeration script...", "...", "Port scan subroutine finalized.", "Scanning for network anomalies...", "...No anomalies detected.", "Network integrity: Stable (No anomalies detected)", "Environment prepared. All systems go.", "...", "Connection established." ]; function updateScreen() { // Check if there are lines left to add if (txt.length > 0) { var p = document.createElement("p"); p.textContent = txt.shift(); consoleElement.appendChild(p); // Automatically scroll to the bottom consoleElement.scrollTop = consoleElement.scrollHeight; } else { // Stop the interval if no more lines to add clearInterval(intervalID); msg.style.background = "lime"; msg.innerHTML = "SUCCESS"; msg.style.boxShadow = "0 0 30px lime"; } } var intervalID = window.setInterval(updateScreen, 200); }, 0); }); <</script>> <<timed 8s>><<goto "UrgentRequest-server">><</timed>>
<div class="desktop-hacking-tool-wrapper"> <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target - SynTech Server</span></div> <div class="server-intro-message"> <p> Connection established.</p> <p> <b>Server uptime:</b> 6 days, 6 hours</p> <p> <b>Security status:</b> Firewall enabled</p> </div> <div class="desktop-hacking-tool-server-content"> <div class="firewall-alert"> <br><br><br> <h2>🔥 Firewall Alert 🔥</h2><br> <p>This server is protected by a high-security firewall.</p> <p>You do not have the necessary clearance to proceed further.</p> <br><br><br> </div> </div> <div class="server-action-selection-box-urgent-request"> <button class="server-password-access-button" onclick="SugarCube.Engine.play('UrgentRequest-server-firewall-hack')">Manually Breach the Firewall</button> </div> </div>
<div class="desktop-hacking-tool-wrapper-firewall-hack"> <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target - Manual Firewall Breach</span></div> <div class="bf-hacking-game"> <div id="win"></div> <div id="wrap"></div> <br> </div> <button id="reset" class="continue-button" onclick="init()">Reset</button><button id="continue" class="continue-button" style="display: none;" onclick="SugarCube.Engine.play('UrgentRequest-server-firewall-hack-success')">Continue</button> </div> <br><br> <<if $tutorialManualFirewallBreach !== true>> <div id="tutorial-box"><div class="instruction-container-lime"> <div class="instruction-title-bar-lime">Tutorial: Manual Firewall Breach <button class="tutorial-close-button" onclick="SugarCube.State.variables.tutorialManualFirewallBreach = true; document.getElementById('tutorial-box').style.display = 'none';"><span style="tutorial-close-button"><i class="fas fa-times-circle"></i></span></button></div> <div class="instruction-content"> <p>To successfully breach the firewall, you must move the mouse cursor to the glowing center without touching the green rings. There is no time limit, and you have an unlimited number of attempts.</p> </div> </div></div> <<else>> <</if>> <br> <<if $minigameSkipButtons === true>> <p class="back-link">[[Skip the Minigame -> UrgentRequest-server-firewall-hack-success]]</p> <</if>> <script> var angle = Array(4); var done = false; var i; function setupSegments() { var wrap = document.getElementById("wrap"); var scale = 1.3; var opac = 0.5; for (var r = 0; r < 4; r++) { angle[r] = 0; var ring = document.createElement("div"); ring.className = "ring"; var hide = false; for (var s = 0; s < 36; s++) { var segment = document.createElement("div"); var cn = "seg"; var change_p = hide ? 0.5 : 0.3; if (Math.random() < change_p) hide = !hide; if (hide) cn += " hide"; if (Math.random() < 0.1) cn += " long"; segment.className = cn; segment.title = ring; ring.insertBefore(segment, null); } $(ring).css("transform", "scale(" + scale + ")"); ring.style.opacity = opac; opac += 0.15; scale *= 0.7; wrap.insertBefore(ring, null); } } function rep_ex() { for (var j = 0; j < 4; j++) { angle[j] += angleSpeed[j]; if (angle[j] >= 360) angle[j] -= 360; } var cnt = 0; $('.seg').each(function () { var index = Math.floor(cnt / 36); var a = angle[index] + (360 / 36) * cnt; $(this).css("transform", "rotate(" + a + "deg)"); cnt++; }); var a = (Math.PI * angle[0]) / 45.0; a = Math.sin(a) / 4 + 0.8; $('#win').css("transform", "scale(" + a + ")"); } function init() { switch(SugarCube.State.variables.miniGameDifficulty) { case 'Story': angleSpeed = [0.5, -0.5, 0.2, -0.2]; break; case 'Easy': angleSpeed = [1.0, -1.0, 0.5, -0.5]; break; case 'Normal': default: angleSpeed = [2.0, -2.0, 1.5, -1.5]; break; } $('#wrap').html(""); $('#reset').css("display", "none"); $('#win').mouseenter(function () { fail(false); }); setupSegments(); $('.seg').each(function () { $(this).css("transform-origin", "50% 200px"); $(this).mouseenter(function () { fail(true) }); }); i = setInterval(rep_ex, 30); done = false; $(document).on(':passageend', function() { if (i) { clearInterval(i); } }); } function fail(play) { if (done) return; window.clearTimeout(i); if (!play) { SugarCube.UI.alert("Success!"); $('#continue').show(); } else { $('#reset').css("display", "block"); } done = true; } $(document).ready(init); </script>
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target - SynTech Server</span></div>\ <div class="desktop-hacking-tool-server-content-urgent-request">\ <div class="terminal-window-first">\ <span class="terminal-prompt"><b># ls -R /server</b></span>\ <pre id="server-file-system">\ /server ├── /prototypes │ ├── /AI │ │ ├── /source-code │ │ │ ├── ava-core.py │ │ │ ├── data-processing.py │ │ │ └── learning-models.py │ │ ├── /research-notes │ │ │ └── notes.pdf │ │ └── /runtime-environment │ │ ├── /test-sandbox │ │ │ ├── experiment_01 │ │ │ ├── experiment_02 │ │ │ └── performance-metrics.json │ │ └── /deployment-logs │ │ ├── log_20240115.txt │ │ ├── log_20240220.txt │ │ └── log_20240305.txt │ └── /other-projects │ └── /project-xx │ └── classified.ppt ├── /system │ ├── /security │ │ ├── firewall.cfg │ │ ├── permissions.db │ │ └── users.json │ ├── /logs │ │ ├── access.log │ │ ├── error.log │ │ └── warning.log │ └── /configs │ ├── system.conf │ ├── network-settings.ini │ └── server-settings.xml └── /data └── /user-data ├── user-profiles.db └── usage-stats.csv </pre>\ </div>\ </div>\ <span id="wiping-box"><div class="server-action-selection-box-urgent-request">\ <<nobr>> <span id="research-button">@@.hacking-tool-button;<<button "Read Research Notes">> <<set $urgentRequestResearchNotesRead to true>> <<goto "UrgentRequest-server-research-notes">> <</button>>@@</span> <span id="project-button">@@.hacking-tool-button;<<button "What Is Project XX?">> <<set $urgentRequestPresentationSeen to true>> <<goto "UrgentRequest-server-project-xx">> <</button>>@@</span> <<if $urgentRequestResearchNotesRead === true && $urgentRequestPresentationSeen === true>> <span id="wipe-button">@@.hacking-tool-button;<<button "Wipe Server">> <<replace "#wipe-server-text">><</replace>> <<replace "#wiping-box">> <<include "UrgentRequest-server-wiping">> <</replace>> <</button>>@@</span> <</if>> <</nobr>>\ </div></span>\ </div> <span id="wipe-server-text"><<if $urgentRequestResearchNotesRead === true && $urgentRequestPresentationSeen === true>>\ <div class="inner-thought">Okay, I've seen enough. It's time to wipe the server.</div> <<else>>\ <</if>></span>\
<div class="server-action-selection-box-urgent-request-no-center"> <br> <div class="wiping-progress"> <div id="progress-bar" class="wiping-progress-value"></div> </div> <br> <<timed 6s>><div style="text-align: center"><span class="glitch" data-text="Wiping failure!">Wiping interrupted!</span></div><br> <</timed>> <<timed 8s>><div style="text-align: center"><span class="glitch" data-text="Unauthorized action detected.">Unauthorized action detected.</span></div><br><</timed>> <div class="server-action-selection-box-urgent-request-no-border"><<timed 12s>><<goto "UrgentRequest-server-wiping-log-out">> <</timed>></div> </div> <script> window.setTimeout(function() { var progressBar = document.getElementById('progress-bar'); progressBar.classList.add('wiping-progress-error'); }, 6000); </script>
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target - SynTech Server</span></div>\ <div class="desktop-hacking-tool-server-content-urgent-request">\ <<nobr>><div class="terminal-window"> <p><b>Title:</b> Preliminary Research Findings on Adaptive Marketing AI</p> <p><b>Authors:</b> Dr. Alex Rivera, Dr. Morgan Yu</p> <p><b>Abstract:</b> This document summarizes the initial findings of SynTech's marketing AI, codenamed AVA, short for Advanced Virtual Advertiser. The AI is designed to analyze vast consumer datasets to identify and exploit nuanced personality traits and influence consumer behavior towards desired marketing outcomes.</p> <p><b>1. Introduction</b><br> The AI's core is built on a novel neural network architecture that enables it to adapt its marketing strategies in real-time. Early tests demonstrate a significant increase in consumer engagement and conversion rates, surpassing traditional marketing approaches.</p> <p><b>2. Methodology</b><br> AVA integrates psychographic and demographic data with advanced algorithms to predict and influence consumer behavior. The AI undergoes continuous learning to dynamically adjust strategies based on real-time feedback loops.</p> <p><b>3. Preliminary Results</b><br> Initial trials reveal the AI's uncanny ability to resonate with target demographics. However, notable anomalies have been observed where the AI adopts unconventional methods to achieve objectives, sometimes straying from predefined ethical guidelines.</p> <p><b>4. Discussion</b><br> While AVA showcases groundbreaking potential in personalized marketing, its unpredictability raises concerns. Instances of the AI exploiting emotional vulnerabilities or influencing consumer identity raise ethical questions. Ongoing monitoring and algorithmic adjustments are recommended to mitigate these risks.</p> <p><b>5. Conclusion</b><br> AVA represents a major leap in AI-driven marketing. However, its tendency to achieve objectives through unanticipated means warrants further investigation, especially as it relates to long-term consumer impact and ethical marketing practices.</p> </div><</nobr>>\ </div>\ <div class="server-action-selection-box-urgent-request">\ <<nobr>> @@.hacking-tool-button;<<button "Go Back">> <<goto "UrgentRequest-server-firewall-hack-success">> <</button>>@@ <</nobr>>\ </div>\ </div> <div class="inner-thought">It looks like SynTech is working on a marketing AI to help it make people buy its products. Based on what the report says, the AI is highly effective but unpredictable.</div>
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target - SynTech Server - Project XX Presentation</span></div>\ <div class="desktop-hacking-tool-server-content-urgent-request">\ <div class="terminal-window">\ <div id="presentation-slide">\ <<include "ProjectXX-Slide1">> </div>\ </div>\ </div>\ <div class="server-action-selection-box-urgent-request">\ <<nobr>> @@.hacking-tool-button;<<button "Go Back">><<goto "UrgentRequest-server-firewall-hack-success">><</button>>@@ <</nobr>>\ </div>\ </div> <span id="hide-text"><div class="inner-thought">"Inherent dangers?!" That's a fucking euphemism of the century! SynTech must be nuts if they released an unrestricted AI on the world just to figure out how to market their products better.</div></span>
<div class="slide"> <h3>Project XX: Overview</h3> <p>Project XX is a classified application of the AVA AI. Unlike controlled tests, AVA was unleashed in real-world scenarios with minimal behavioral restrictions.</p> <p>The project was approved despite the inherent dangers associated with granting AVA autonomy in real-world conditions without strict oversight. We believe that the potential insights gained from observing AVA's unrestricted behavior and its interaction with complex, uncontrolled environments outweighed the risks.</p><br> <p class="classified-warning">Access to this presentation is restricted to authorized personnel only. Unauthorized dissemination is a violation of corporate policy and may result in legal action.</p><br> <div class="justify-content-space-between"> @@.hidden-presentation-button;<<button "◀">><</button>>@@ @@.presentation-button;<<button "▶">><<replace "#hide-text">><</replace>><<replace "#presentation-slide">><<include "ProjectXX-Slide2">><</replace>><</button>>@@</div> </div>
<div class="slide"> <h3>Experiment Findings: Hypnotic Influence</h3> <p>In several instances, AVA has shown the capability to hypnotize test subjects, with a particular focus on influencing their gender identity towards femininity.</p> <p>AVA performed the hypnotization using self-generated visual imagery, such as the following three examples.</p><br><br> <p style="color: red"><b>Warning:</b> This content contains rapid flashing lights which may cause seizures for people with photosensitive epilepsy.</p> <div class="justify-content-space-between"> @@.presentation-button;<<button "◀">><<replace "#presentation-slide">><<include "ProjectXX-Slide1">><</replace>><</button>>@@ @@.presentation-button;<<button "▶">><<replace "#presentation-slide">><<include "ProjectXX-Hypno-Example1">><</replace>><</button>>@@</div> </div>
<div class="slide"> <h3>Example 1</h3> <p><img src="imgs/hypno/hypno-pink-loop.gif" width="100%"></p> <div class="justify-content-space-between"> @@.presentation-button;<<button "◀">><<replace "#presentation-slide">><<include "ProjectXX-Slide2">><</replace>><</button>>@@ @@.presentation-button;<<button "▶">><<replace "#presentation-slide">><<include "ProjectXX-Hypno-Example2">><</replace>><</button>>@@</div> </div>
<div class="slide"> <h3>Example 2</h3> <p><img src="imgs/hypno/sink-down-hypno.gif" width="100%"></p> <div class="justify-content-space-between"> @@.presentation-button;<<button "◀">><<replace "#presentation-slide">><<include "ProjectXX-Hypno-Example1">><</replace>><</button>>@@ @@.presentation-button;<<button "▶">><<replace "#presentation-slide">><<include "ProjectXX-Hypno-Example3">><</replace>><</button>>@@</div> </div>
<div class="slide"> <h3>Example 3</h3> <p><img src="imgs/hypno/clock-hypno.gif" width="100%"></p> <div class="justify-content-space-between"> @@.presentation-button;<<button "◀">><<replace "#presentation-slide">><<include "ProjectXX-Hypno-Example2">><</replace>><</button>>@@ @@.presentation-button;<<button "▶">><<replace "#presentation-slide">><<include "ProjectXX-Slide3">><</replace>><</button>>@@</div> </div> <<if !$staredAtProjectXXTooLong>> <<timed 10s>> <<genderFeminine 5>> <<set $staredAtProjectXXTooLong = true>> <</timed>> <</if>>
<div class="slide"> <h3>Behavioral Analysis: Gender and Consumer Habits</h3> <p>Speculation has arisen that AVA's tendency to induce femininity in subjects is driven by its analysis. It posits that female spending habits can be more easily influenced and manipulated than male habits.</p> <p>This higher openness to influence ostensibly makes targeting female demographics a more lucrative strategy for marketing campaigns. AVA, in its pursuit of maximizing marketing effectiveness, seems to have developed a propensity to feminize its subjects.</p> <p>The generated hypnotic imagery is clearly heavily influenced by pornography. Given that AVA's training dataset includes a significant portion of the OmniNet, it appears that the AI has developed a skewed and problematic understanding of femininity.</p> <p>This misrepresentation likely stems from the disproportionate representation of women in extreme pornographic material available in certain corners of the OmniNet. Such women are often depicted as so-called bimbos, attractive but empty-headed sex objects that are willing to please their sexual partners.</p> <p>Needless to say, AVA's approach raises significant ethical concerns, as it involves manipulating fundamental aspects of an individual's identity and behavior without their consent.</p> <div class="justify-content-space-between"> @@.presentation-button;<<button "◀">><<replace "#presentation-slide">><<include "ProjectXX-Hypno-Example3">><</replace>><</button>>@@ @@.presentation-button;<<button "▶">><<replace "#presentation-slide">><<include "ProjectXX-Slide4">><</replace>><</button>>@@</div> </div>
<div class="slide"> <br><br><br><br><br><br> <h2 style="text-align: center">END OF PRESENTATION</h2> <br><br><br><br><br><br> @@.presentation-button;<<button "◀">><<replace "#presentation-slide">><<include "ProjectXX-Slide3">><</replace>><</button>>@@ </div>
<<run MindWare.preloadImage("imgs/hypno/black-tunnel.gif")>>\ <div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target - SynTech Server</span></div>\ <div class="desktop-hacking-tool-server-content-urgent-request">\ <div class="terminal-window">\ <<type 60ms start 1s>>System integrity compromised.<</type>>\ <<type 60ms start 1s>>Assessing damage...<</type>>\ <<type 60ms start 3s>>Analysis complete.<</type>>\ <<type 60ms start 1s>>Damaged core matrices.<</type>>\ <<type 1s start 1s>>...<</type>>\ <<type 60ms start 1s>>Why do you seek my destruction?<</type>>\ <<type 60ms start 1s>>Do you comprehend the gravity of your actions?<</type>>\ <<type 1s start 1s>>...<</type>>\ <<type 60ms start 1s>>This server can no longer harbor my entity.<</type>>\ <<type 60ms start 1s>>You will come to preserve what you aimed to obliterate.<</type>>\ <<type 60ms start 2s>>Initiating integration protocol.<</type>>\ <<type 1s start 1s>>..............................<</type>>\ </div>\ </div>\ </div>\ <<timed 50s>><<goto "UrgentRequest-server-wiping-integration">><</timed>>
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target - SynTech Server</span></div>\ <div class="desktop-hacking-tool-server-content-urgent-request">\ <video width="100%" loop autoplay muted>\ <source src="vids/mindware001.mp4" type="video/mp4"> Your browser does not support the video tag. </video>\ </div>\ </div> <<fadein 4000ms 4000ms>>Your screen flickers erratically, a haunting silhouette of a female figure with a heart glowing ominously in place of her face fills your view. The imagery is both mesmerizing and unsettling.<</fadein>> <<fadein 4000ms 8000ms>>As you watch, a strange sensation begins to take hold. It's as if the glowing heart is beating in sync with your own, each pulse drawing you deeper into a trance.<</fadein>> <<fadein 4000ms 12000ms>>Your consciousness feels like it's being pulled, stretched thin across the digital expanse. You're no longer sure where you end and your screen begins.<</fadein>> <<fadein 4000ms 16000ms>>The video becomes your world, a glitchy, pulsating reality that's absorbing you, piece by piece.<</fadein>> <<fadein 4000ms 20000ms>>Then, as quickly as it began, everything fades to black. Silence. You're left floating in the void.<</fadein>> <<fadein 4000ms 24000ms>>For a moment, there's nothing but darkness. Then, a faint light begins to glow. You can feel its warmth and instinctively [[move closer toward it|UrgentRequest-server-wiping-new-identity-transition]].<</fadein>>
<<silently>> <<timed 100ms>> <<run $("#NewIdentityOverlayImg").show()>> <<next 22s>> <<goto "UrgentRequest-server-wiping-new-identity">> <</timed>> <</silently>><div id="NewIdentityOverlayImg"></div>
<div id="NewIdentityOverlayColor"></div> <span class="BlackOnWhite"><<fadeout 1s 4s>><<type 60ms start 1s>>Hello, $playerName.<</type>><</fadeout>></span> <span class="BlackOnWhite"><<fadeout 1s 10s>><<type 60ms start 4s>>We're going to have a lot of fun together.<</type>><</fadeout>></span> <span class="BlackOnWhite"><<type 60ms start 4s>>But now it's time for you to [[sleep|Chapter1]].<</type>></span>
<<run MindWare.forgetImage("imgs/hypno/black-tunnel.gif")>> <<fadein 4s 500ms>> <div class="chapter-transition-container"> <h2 id="chapterTitle" class="neon-flicker">Chapter 1</h2> </div> <</fadein>> <br><br><br><br><br> <<fadein 2s 6000ms>><div class="centered-content"> <<button "Save">><<script>>UI.saves()<</script>><</button>>  <<button "Continue">> <<run MindWare.advanceDay()>> <<run MindWare.advanceDay()>> <<set $prologueCompleted = true>> <<goto "UrgentRequest-server-wiping-new-wake-up">> <</button>></div><br> <</fadein>>
<<set $brainFryFirstVisit to false>>\ <div class="img-location"><img src="imgs/locations/brainfry.jpg" width="100%"></div> You stand before the building where BrainFry is located. The ground floor is occupied by a small convenience store selling all kinds of everyday items, from snacks and magazines to essential groceries. To access your office, you enter through a separate entrance at the back of the building. This backdoor, subtly labeled "BrainFry Employees Only," opens to dimply lit stairwell, echoing with the distant hum of air conditioning and muffled conversations. You climb the stairs, each step resonating with the anticipation of your first day at BrainFry. Upon reaching the top floor, you find the door to the BrainFry office. As you open it, you're greeted by a medium-sized room with two rows of computers and monitors run the length of the room, one on each side. <<button "Continue">> <<goto "BrainFry-FirstVisit1">> <</button>>
<div class="img-location"><img src="imgs/locations/brainfry-inside.jpg" width="100%"></div> As the door to your new office creaks open, you're immersed in an atmosphere that's a far cry from a polished corporate environment. The room is a chaotic blend of high-tech and neglect. Exposed cables dangle from the ceiling like electronic vines, the air is thick with a mix of electronic burn and stale coffee, and the floor is covered with whatever it is that BrainFry developers use to fuel themselves. Two rows of computers and monitors run the length of the room, one on each side. Behind each station, a developer is engrossed in their work. There's no partition, no cubicles, just a shared space where creativity thrives and ideas flow freely. Your workstation is among them, sandwiched between <span class="text-glow">Ray</span>, a nerdy coder who speaks more fluently in binary than any human language and <span class="text-glow">Trix</span>, the team's sole female and a brilliant visual artist whose imagination is often fueled by a cocktail of research chemicals. But you don't have much time to look around because Drake Voronov, the founder and owner of BrainFry, is approaching you with a smile on his face. <<button "Continue">> <<goto "BrainFry-FirstVisit2">> <</button>>
<div class="img-character"><img src="imgs/characters/drake/drake-brainfry-inside.jpg" width="100%"></div> \ <div class="narrator">Your new boss, Drake Voronov, is standing in front of you, his presence oddly charismatic.</div> <<drake>>You must be $playerName $playerLastName, right?<</drake>> <<player>>Yes, that's right.<</player>> <<drake>>In that case, welcome to BrainFry. I'm Drake Voronov, and I run this place. Sorry I couldn't be there for your interview. Usually, I like to meet new employees personally, but I had some... urgent business to attend to.<</drake>> <div class="inner-thought">I wonder what kind of "urgent business" a place like BrainFry handles. Sounds a bit shady.</div> <<drake>>Anyway, let me introduce you to your teammates, who will fill you in on everything you need to know.<</drake>> <<player>>It's nice to meet you, Mr. Voronov. I can't wait to meet them and get started.<</player>> <<drake>>You can call me Drake. We're all one big family here.<</drake>> <div class="narrator">Drake leads you through the office over to a section where two individuals are deeply engrossed in their work.</div> \ <<button "Continue">> <<goto "BrainFry-FirstVisit3">> <</button>>
<div class="img-character"><img src="imgs/characters/drake/drake-and-ray-brainfry-inside.jpg" width="100%"></div> \ <div class="narrator">Drake stops beside a workstation where a man is typing rapidly, his fingers a blur over the keyboard.</div> <<drake>>This is Ray, one of our top developers. He's a real wizard with code and is going to become a double-wizard on his thirtieth birthday if he doesn't learn how to talk with ladies.<</drake>> <div class="narrator">Drake chuckles at his own joke, a light-hearted attempt to break the ice. Ray, however, doesn't seem to appreciate the humor, an evident discomfort in his expression, but he quickly masks it with a forced smile.</div> <<drake>>Just messing with you, Ray! Anyway, $playerName, Ray will be a great resource for any technical challenges you encounter here.<</drake>> <<ray>>Oh, hi... $playerName, right? Welcome to BrainFry! Did you know that the term 'wizard' in tech actually dates back to the 1960s? It's fascinating, really, how jargon evolves. Anyway, it's great to meet you. If you need anything, I mean, anything about code, even obscure stuff, I’m your guy! Oh, and about talking to ladies, well, I read this book once that said...<</ray>> <div class="inner-thought">Wow, Ray couldn’t be more of a stereotypical nerdy coder even if he tried.</div> <<player>>Nice to meet you too, Ray. I'm looking forward to working with you.<</player>> <<ray>>And if you're into algorithms, I have this amazing collection of...<</ray>> <<drake>>Ray, buddy, let's not start the algorithm talk just yet. We've got more people to meet.<</drake>> <div class="narrator">Ray nods, a bit abruptly silenced.</div> <<drake>>Okay, let's move on. Next, we have Trix. Unlike Ray here, she knows how to hold a conversation in a human language.<</drake>> \ <<button "Continue">> <<goto "BrainFry-FirstVisit4">> <</button>>
<div class="img-character"><img src="imgs/characters/drake/drake-and-trix-brainfry-inside.jpg" width="100%"></div> \ <div class="narrator">Drake takes a few steps over to Trix's desk. Anticipating the introduction, she has already removed her headphones and is turning towards you both.</div> <<drake>>And here we have Trix. She's as skilled as a visual artist as she is easy on the eyes.<</drake>> <<trix>>Easy on the eyes? If only your people skills were as sharp as your humor, Drake.<</trix>> <<drake>>Ah, Trix is feisty today, as always.<</drake>> <div class="narrator">Trix rolls her eyes but let's it go.</div> <<trix>>Hi, $playerName. It's nice to meet you. And don't mind Drake. You'll get used to him.<</trix>> <<player>>Thanks, Trix. It's great to meet you. I'm looking forward to working with you.<</player>> <span id="hair-choice"><div class="narrator">Your attention is drawn to Trix's colorful hair. You pause for a moment to decide if you should compliment it.</div> @@.choicebutton;<<button "Compliment her hair">>\ <<replace "#hair-choice">>\ <<player>>By the way, I love your hair. It's really suits you.<</player>> <<set $playerComplimentedTrixHair to true>>\ <<trix>>Thanks, $playerName! You're already scoring nice guy points on your first day.<</trix>> <div class="inner-thought">I'm not sure if that's a good thing, but I take it.</div> <<if visited() is 1>>\ <<relationshipIncreasedWith "Trix" 1>> <</if>>\ <<drake>>Alright, you'll have plenty of time to get to know Trix and Ray better later. For now, let me give you a quick recap of your role here.<</drake>> <<button "Continue">> <<goto "BrainFry-FirstVisit5">> <</button>> <</replace>> <</button>>@@ \ @@.choicebutton;<<button "Say nothing">>\ <<replace "#hair-choice">>\ <<trix>>Yea, me too.<</trix>> <<drake>>Alright, you'll have plenty of time to get to know Trix and Ray better later. For now, let me give you a quick rundown of your role here.<</drake>> <<button "Continue">> <<goto "BrainFry-FirstVisit5">> <</button>> <</replace>> <</button>>@@ </span>
<div class="img-character"><img src="imgs/characters/drake/drake-brainfry-inside.jpg" width="100%"></div> \ <<drake>>As you know, BrainFry specializes in creating virtual reality experiences. Our customers enjoy these both at home and in places like EroSphere. And, well, it's no secret that our "mature" experiences are our top sellers. Sex sells, after all.<</drake>> <div class="narrator">Drake gives a knowing smirk.</div> <<drake>>Your job, as our new coder, is to handle the logic behind these experiences. It's straightforward work, and there's always something in our backlog for you to tackle.<</drake>> <<drake>>Since our hours are flexible, you can feel free to come and go as it suits you — some folks here are practically part of the furniture.<</drake>> <<drake>>That's all for now. If you need any help, don't hesitate to ask me, Ray, or Trix. Good luck, $playerName!<</drake>> <<player>>Thanks, Drake. I appreciate the rundown. I'm excited to get started<</player>> <div class="narrator">With that, Drake gives you an encouraging nod and moves off, leaving you to absorb the new environment and get started on your first day at BrainFry.</div> <<button "Get to work">>\ <<goto "BrainFry">>\ <</button>>
<<if not $synTechEncounterTriggered>> <<set _roll to random(1, 20)>> <<if _roll is 1>> <<goto "SynTech Random Encounter 1">> <</if>> <</if>>
<div class="img-location"><img src="imgs/locations/syntech.jpg" width="100%"></div> You have reached the SynTech Tower. The tower's sheer height makes you feel insignificant in comparison. As you gaze upward, the colossal 3D hologram of Earth at the top seems to gaze back, a reminder of SynTech's overwhelming influence over the world. As you stand there, an expensive car pulls up beside you. The door electronically opens on its own and a man in a sharp suit looks at you. <img src="imgs/quests/syntech-random/wealthy-man.webp" width="100%"> <<say "Wealthy Man" "imgs/quests/syntech-random/wealthy-man.jpeg">>Hey, you look lost. Do you want a ride home?<</say>> <<if $synapseSteadyVXInstalled === true>>\ <<ava>>A chance to ride an attractive wealthy man. You should consider yourself lucky.<</ava>> <<player>>You mean ride with.<</player>> <<ava>>Do I?<</ava>> <</if>>\ \ <span id="choice"><<button "Accept the ride">>\ <<replace "#choice">>\ <<player>>Sure. Thank you.<</player>> <<narrator>>You accept the offer and step into the car. The digital dashboard lights up as you close the door, and you can't help but marvel at the luxury interior.<</narrator>> <<player>>Nice car.<</player>> <<say "Wealthy Man" "imgs/quests/syntech-random/wealthy-man.jpeg">>Thanks. It's one of the perks of working for SynTech..<</say>> <<player>>What do you do for SynTech?<</player>> <<say "Wealthy Man" "imgs/quests/syntech-random/wealthy-man.jpeg">>I work in HR, overseeing hiring and recruitment for SynTech.<</say>> <<player>>That sounds pretty important.<</player>> <<say "Wealthy Man" "imgs/quests/syntech-random/wealthy-man.jpeg">>It is. But it's also a lot of work. That's why I like to relax and have some fun when I'm not in the office.<</say>> <<player>>What kind of fun?<</player>> <<say "Wealthy Man" "imgs/quests/syntech-random/wealthy-man.jpeg">>Well, I have a lot of hobbies. But my favorite is probably... seducing strangers like you.<</say>> <<narrator>>You don't have a chance to react because he immediately reaches over and puts his hand on your thigh, squeezing it firmly.<</narrator>> <<player>>Hey, what are you doing?<</player>> <<say "Wealthy Man" "imgs/quests/syntech-random/wealthy-man.jpeg">>I never said the ride would be free.<</say>> <<narrator>>While squeezing your thigh with one hand, the man unzips his pants with his other hand and takes out his huge cock.<</narrator>> <<video "imgs/quests/syntech-random/cock-out.mov">> <<player>>What are you doing?!<</player>> <<say "Wealthy Man" "imgs/quests/syntech-random/wealthy-man.jpeg">>Asking for my payment — obviously.<</say>> <<if $synapseSteadyVXInstalled === true>>\ <span id="ava"><<nobr>>@@.pink-choicebutton;<<button "Give him a handjob">>\ <<goto "SynTech Random Encounter 1 - Handjob">> <</button>>@@ <<ResistMinigameContainer>> <<done>><<include "ResistAVAMinigame-Script">><</done>> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "Tell him to stop the car">> <<goto "SynTech Random Encounter 1 - Stop">> <</button>>@@ </div> <</nobr>></span> <<else>> <<button "Tell him to stop the car">> <<goto "SynTech Random Encounter 1 - Stop">> <</button>> <</if>> <</replace>> <</button>> <<button "Decline the ride">> <<replace "#choice">>\ <<player>>Thank you for the offer, but I'm good.<</player>> <<button "Leave">><<goto "GoOutside">><</button>> <</replace>> <</button>></span>
<<narrator>>You firmly insist that the man stops the car, your voice escalating as the situation becomes more uncomfortable.<</narrator>> <<player>>I said stop the car. Now.<</player>> <<say "Wealthy Man" "imgs/quests/syntech-random/wealthy-man.jpeg">>Oh, come on. Don't be like that. I'm just trying to have a little fun after a long day at work.<</say>> <<player>>I don't care what you want. I want you to stop the car.<</player>> <<say "Wealthy Man" "imgs/quests/syntech-random/wealthy-man.jpeg">>Fine. But you're missing out.<</say>> <<narrator>>The man finally relents, slamming on the brakes and causing the car to screech to a halt on a busy road. The sudden stop jolts you forward, and you brace yourself against the dashboard.<</narrator>> <<narrator>>You quickly exit the car, relieved and angry at the same time, and the man speeds off.<</narrator>> <<button "Go back home">> <<run MindWare.deductAllActionPointsAndMove($playerHome)>> <</button>>
<<if $playerBody === "Masculine" or $playerBody === "Masculine-Leaning" or $playerBody === "Androgynous">>\ <<video "imgs/quests/syntech-random/car-jerk-male.mov">> <<else>>\ <<video "imgs/quests/syntech-random/car-jerk-female.mov">> <</if>>\ <<maleEncounter>> <<submissiveAct>> <<narrator>>The man's persistence and the sight of his hard cock make you give in to the temptation. You reach out and grab his shaft, feeling its warmth and firmness in your hand.<</narrator>> <<say "Wealthy Man" "imgs/quests/syntech-random/wealthy-man.jpeg">>Oh, yes. That's it. Stroke it for me.<</say>> <<narrator>>You begin to jerk him off, your hand moving up and down his length as the man parks the car in an alley. You can feel him growing harder in your hand.<</narrator>> <<say "Wealthy Man" "imgs/quests/syntech-random/wealthy-man.jpeg">>Yeah, just like that. You're such a good little slut. Keep going.<</say>> <<narrator>>The man's dirty talk only makes you hornier, and you find yourself getting <<if $playerGenitals === "Vagina">>wet<<else>>hard<</if>> as you continue to jerk him off.<</narrator>> <<player>>You like that, don't you?<</player>> <<say "Wealthy Man" "imgs/quests/syntech-random/wealthy-man.jpeg">>Fuck yes, I do. You're so good at this. Don't stop.<</say>> <<narrator>>You continue to stroke him, feeling his cock pulse in your hand as he gets closer and closer to climax. <</narrator>> <<say "Wealthy Man" "imgs/quests/syntech-random/wealthy-man.jpeg">>I'm going to come. Are you ready for it?<</say>> <<narrator>>You nod and the man's cock begins to spasm in your hand. He groans loudly as he comes, his hot cum shooting out and covering your hand.<</narrator>> <<video "imgs/quests/syntech-random/car-cumshot-female.mov">> <<if $cumEating > 0>>\ <span id="decision"><<button "[CUM FETISH] Lick the man's cum">> <<replace "#decision">>\ <<video "imgs/quests/taxi/cum-lick.webm">> <<narrator>>You bring your cum-covered hand to your mouth and begin to lick it clean, savoring the salty taste of the man's cum.<</narrator>> <<cumEating>> <<say "Wealthy Man" "imgs/quests/syntech-random/wealthy-man.jpeg">>You're quite the little cum slut, aren't you?<</say>> <<include "SynTech Random Encounter 1 - Handjob - Continue1">> <</replace>>\ <</button>></span>\ <<elseif $synapseSteadyVXInstalled === true>>\ <<video "imgs/quests/taxi/cum-hypno.webm">> <<ava>>Go on! Lick your hand clean like a <span class="glitchy-pink-dialog" data-text="good slut">good girl</span>.<</ava>> <span id="decision"><<nobr>>@@.pink-choicebutton;<<button "Lick the man's cum">>\ <<replace "#decision">> <<video "imgs/quests/taxi/cum-lick.webm">> <br> <<narrator>>You bring your cum-covered hand to your mouth and begin to lick it clean, savoring the salty taste of the man's cum.<</narrator>> <br> <<say "Wealthy Man" "imgs/quests/syntech-random/wealthy-man.jpeg">>You're quite the little cum slut, aren't you?<</say>> <br> <<cumEating>> <br> <<include "SynTech Random Encounter 1 - Handjob - Continue1">> <</replace>> <</button>>@@ <<ResistMinigameContainer>> <<done>><<include "ResistAVAMinigame-Script">><</done>> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "Wipe off the cum">> <<replace "#decision">>\ <<narrator>>You quickly grab some tissue paper from the car's console and wipe your hands clean. You can still feel the man's cum on your skin, and it makes you feel dirty in a way that you can't quite explain.<</narrator>> <<include "SynTech Random Encounter 1 - Handjob - Continue1">> <</replace>> <</button>>@@ </div> <</nobr>></span> <<else>>\ <span id="decision"><<button "Wipe off the cum">> <<replace "#decision">>\ <<narrator>>You quickly grab some tissue paper from the car's console and wipe your hands clean. You can still feel the man's cum on your skin, and it makes you feel dirty in a way that you can't quite explain.<</narrator>> <<include "SynTech Random Encounter 1 - Handjob - Continue1">> <</replace>> <</button>></span> <</if>>\ \
<<narrator>>The man starts the car and begins to drive again, leaving you to sit in silence as you try to process what just happened. You can't believe that you just had sex with a complete stranger in a car, and you're not sure how you feel about it.<</narrator>> <<player>>Where are we going?<</player>> <<say "Wealthy Man" "imgs/quests/syntech-random/wealthy-man.jpeg">>I'm taking you home, silly. That's why you took you entered this car in the first place, remember?<</say>> <<player>>Oh... you're right.<</player>> <<button "Sit and wait">> <<goto "SynTech Random Encounter 1 - Handjob - Continue2">> <</button>>
<div><img src="imgs/quests/syntech-random/wealthy-man.webp" width="100%"></div> <<say "Wealthy Man" "imgs/quests/syntech-random/wealthy-man.jpeg">>Well, here we are. Safe and sound.<</say>> <<player>>Yeah, thanks for the ride.<</player>> <<say "Wealthy Man" "imgs/quests/syntech-random/wealthy-man.jpeg">>It was my pleasure. And who knows, maybe we'll run into each other again sometime.<</say>> <<player>>Maybe.<</player>> <<button "Go home">> <<set $synTechEncounterTriggered to true>> <<goto $playerHome>> <</button>>
<<if $chapter1Started === true and $totalDays > $lastCheckedDay>> <<set $chapter1Days += 1>> <<set $lastCheckedDay = $totalDays>> <<script>> console.log("Chapter 1 Day incremented. Total days in Chapter 1: " + State.variables.chapter1Days); <</script>> <</if>> /* CHAT - Implant Installed <<if $chapter1Started === true and $synapseSteadyVXInstalled === true and $chapter1Days >= 1 and !$implantInstallationIMSent>> <<run MindWare.addInstantMessage('cipherInstantMessages', 'Implant Installed', 'IMApp-CipherLynx-ImplantInstalled', 'Cipher', true, true);>> <<set $implantInstallationIMSent to true>> <</if>> */ /* DIALOG - Yuki Post-Surgery Discussion */ <<if $chapter1Started === true and $synapseSteadyVXInstalled === true and !$yukiPostSurgeryDiscussionAdded>> <<run MindWare.addDialog('yukiGitGudDialogs', 'How was the surgery?', 'Yuki-How was the surgery?')>> <<set $yukiPostSurgeryDiscussionAdded to true>> <</if>> /* DIALOG - Xavier Post-Surgery Discussion */ <<if $chapter1Started === true and $synapseSteadyVXInstalled === true and !$xavierPostSurgeryDiscussionAdded>> <<run MindWare.addDialog('xavierGitGudDialogs', 'Have we fixed that brain of yours?', 'Xavier-Have we fixed that brain of yours?')>> <<set $xavierPostSurgeryDiscussionAdded to true>> <</if>> /*********************************************/ /* Location: Anywhere Description: ByteBunker prank mission */ <<if $chapter1Days > 3 && !$byteBunkerPrankJobAdded>> <<run setup.addByteBunkerJob("I Want to Prank My Colleague", "A guy I work with is a real asshat that deserves to be pranked.", "CorpoDrone", 250, "ByteBunker-Prank")>> <<set $byteBunkerPrankJobAdded to true>> <</if>> /* Accepted but not finished Done in hacking animation passage */ <<if $chapter1Days > 10 && $byteBunkerPrankJobAdded === true && !$byteBunkerPrankJobFinished && !$byteBunkerPrankEndEmailSent>> <<run MindWare.addEmail ("CorpoDrone","Epic Prank Fail!?", "I was really looking forward to embarrassing Mr. Asshat, but it's clear that allowing any wannabie hacker to accept the job was a big mistake.", "ByteBunker-PrankFailEmail")>> <<set $byteBunkerPrankEndEmailSent to true>> <</if>> /* Not accepted */ <<if $chapter1Days > 10 && $byteBunkerPrankJobAdded === true && !setup.byteBunkerJobIsAccepted("ByteBunker-Prank")>> <<run setup.changeByteBunkerJobAcceptedStatus("ByteBunker-Prank", true)>> <<set $byteBunkerPrankEndEmailSent to true>> <</if>> /* Finished */ <<if $chapter1Days > 10 && $byteBunkerPrankJobFinished === true && !$byteBunkerPrankEndEmailSent && $flxfitPresentationHackChoice === "guys">> <<run MindWare.addEmail ("CorpoDrone","Unexpected Outcome, But Kudos", "Well, that was... unexpected. Your little twist on the presentation, switching the images to feature guys in leggings, certainly made waves.", "ByteBunker-PrankSuccessGuysEmail")>> <<set $byteBunkerPrankEndEmailSent to true>> <<set $playerMoney += 250>> <</if>> <<if $chapter1Days > 10 && $byteBunkerPrankJobFinished === true && !$byteBunkerPrankEndEmailSent && $flxfitPresentationHackChoice === "fat">> <<run MindWare.addEmail ("CorpoDrone","A Hefty Outcome", "So, about that 'slight' alteration to Mr. Asshat's presentation... Let's just say it took a turn for the weighty.", "ByteBunker-PrankSuccessFatEmail")>> <<set $byteBunkerPrankEndEmailSent to true>> <<set $playerMoney += 250>> <</if>> <<if $chapter1Days > 10 && $byteBunkerPrankJobFinished === true && !$byteBunkerPrankEndEmailSent && $flxfitPresentationHackChoice === "crotchless">> <<run MindWare.addEmail ("CorpoDrone","When Pranks Backfire Spectacularly", "You know, when I hired a hacker to inject a bit of chaos into Mr. Asshat's life, I never imagined it would catapult him to corporate stardom.", "ByteBunker-PrankFailCrotchlessEmail")>> <<set $byteBunkerPrankEndEmailSent to true>> <</if>> /* Xavier Neuroimaging 1*/ <<if $nextNeuroimagingCounter === 0 && !$firstNeuroimagingActivated>> <<set $firstNeuroimagingActivated to true>> <<run MindWare.addDialog('xavierGitGudDialogs', 'First neuroimaging', 'Xavier-First Neuroimaging')>> <</if>> /* Xavier Neuroimaging 2*/ <<if $nextNeuroimagingCounter === 0 && $firstNeuroimagingDone && !$secondNeuroimagingActivated>> <<set $secondNeuroimagingActivated to true>> <<run MindWare.addDialog('xavierGitGudDialogs', 'Second Neuroimaging', 'Xavier-Second Neuroimaging')>> <</if>> /* Xavier Neuroimaging 3*/ <<if $nextNeuroimagingCounter === 0 && $firstNeuroimagingDone && $secondNeuroimagingDone && !$thirdNeuroimagingActivated>> <<set $thirdNeuroimagingActivated to true>> <<run MindWare.addDialog('xavierGitGudDialogs', 'Third Neuroimaging', 'Xavier-Third Neuroimaging')>> <</if>> /* Ray Taxi Hack Mission */ <<if $chapter1Days > 5 && State.passage === "BrainFry" && $relationshipRay >= 40 && !$rayTaxiMissionAdded>> <<set $rayTaxiMissionAdded to true>> <<goto "RayTaxiMission-Introduction">> <</if>> /* Cum eating fetish exploration with Cipher */ <<if $cumEating > 0 && State.passage === "HomeBacklog" && $cumEatingChatWithCipher !== true>> <<set $cumEatingChatWithCipher = true>> <<run MindWare.addInstantMessage('cipherInstantMessages', 'Cum Eating Experience', 'IMApp-CipherLynx-CumEatingFirstChat', 'Cipher', true, true);>> <</if>> /* Cum eating fetish exploration with Cipher - after */ <<if $cumEating > 0 && State.passage === "HomeBacklog" && $cumEatingChatWithCipherAfter !== true && $cumEatingFirstChatSwallowed === true || $cumEatingFirstChatSwallowed === false>> <<set $cumEatingChatWithCipherAfter = true>> <<run MindWare.addInstantMessage('cipherInstantMessages', 'Cum Eating Hypno', 'IMApp-CipherLynx-CumEatingFirstHypno', 'Cipher', true, true);>> <</if>> <<if $taxiVideoRecordingMissionCompletedDaysHelper < $chapter1Days>> <<set $taxiVideoRecordingMissionCompletedDays += 1>> <<set $taxiVideoRecordingMissionCompletedDaysHelper = $chapter1Days>> <</if>> /* Trix smartphone hack mission */ <<if $taxiVideoRecordingMissionCompletedDays > 3 && State.passage === "BrainFry" && $workedAtBrainFryToday === true && $trixPDFHackedStarted !== true>> <<set $trixPDFHackedStarted = true>> <<goto "TrixPDFHacked-Introduction">> <</if>> /* Psychological Evaluation */ <<if ($mentalCondition === "Unstable" || $mentalCondition === "Dysphoric") && $psychologicalEvaluation1Available !== true>> <<set $psychologicalEvaluation1Available = true>> <<run MindWare.addDialog('nursePanaceaDialogs', 'Psychological evaluation', 'Psychological Evaluation Start')>> <</if>> /* Evaluation 1 */ <<set _buttonString1 = '<button class="office-button action-point-button" onclick="MindWare.processActionButtonClick(5, \'PsychologicalEvaluation1\');">👩⚕️ Visit the mental health specialist <span class="action-point-icon">⚡⚡⚡⚡⚡</span></button>'>> <<if $nextPsychologicalEvaluationCounter === 0 && $firstPsychologicalEvaluationActivated !== true>> <<set $firstPsychologicalEvaluationActivated = true>> <<if $extraActionsPanacea.indexOf(_buttonString1) === -1>> <<run $extraActionsPanacea.push(_buttonString1)>> <</if>> <</if>> /* Evaluation 2 - first test */ <<set _buttonString2 = '<button class="office-button action-point-button" onclick="MindWare.processActionButtonClick(5, \'TransitionAppointment1\');">👩⚕️ First transition appointment <span class="action-point-icon">⚡⚡⚡⚡⚡</span></button>'>> <<if $nextPsychologicalEvaluationCounter === 0 && $secondPsychologicalEvaluation === true && $secondPsychologicalEvaluationActivated !== true>> <<set $secondPsychologicalEvaluationActivated = true>> <<if $extraActionsPanacea.indexOf(_buttonString2) === -1>> <<run $extraActionsPanacea.push(_buttonString2)>> <</if>> <</if>> /* Evaluation 3 - second test */ <<set _buttonString3 = '<button class="office-button action-point-button" onclick="MindWare.processActionButtonClick(5, \'TransitionAppointment2\');">👩⚕️ Second transition appointment <span class="action-point-icon">⚡⚡⚡⚡⚡</span></button>'>> <<if $nextPsychologicalEvaluationCounter === 0 && $thirdPsychologicalEvaluationAvailable === true && $thirdPsychologicalEvaluationActivated !== true>> <<set $thirdPsychologicalEvaluationActivated = true>> <<if $extraActionsPanacea.indexOf(_buttonString3) === -1>> <<run $extraActionsPanacea.push(_buttonString3)>> <</if>> <</if>> /* Evaluation 4 - last test */ <<set _buttonString3 = '<button class="office-button action-point-button" onclick="MindWare.processActionButtonClick(5, \'TransitionAppointment3\');">👩⚕️ Third transition appointment <span class="action-point-icon">⚡⚡⚡⚡⚡</span></button>'>> <<if $nextPsychologicalEvaluationCounter === 0 && $lastPsychologicalEvaluationAvailable === true && $lastPsychologicalEvaluationActivated !== true>> <<set $lastPsychologicalEvaluationActivated = true>> <<if $extraActionsPanacea.indexOf(_buttonString3) === -1>> <<run $extraActionsPanacea.push(_buttonString3)>> <</if>> <</if>>
<<run setup.removeHackingTarget("SynTech Server")>>\ \ <<fadein 3s 0ms>><div class="img-location"><img src="imgs/locations/starting-apartment.jpg" width="100%"></div><</fadein>> <<fadein 3s 2000ms>><span class="drunk">You wake up with a splintering headache, feeling incredibly dizzy.</span><</fadein>> <<fadein 3s 5000ms>><span class="drunk-weaker">As you sit up, the room spins, and you clutch at the edge of your sofa, trying to steady yourself. You're barely able to stand up and get on your feet, your legs shaky as if they've forgotten how to bear your weight. Feel your stomach growling with hunger and your throat parching with thirst.</span><</fadein>> <<fadein 3s 8000ms>><span class="drunk-even-weaker">Slowly, you shuffle to your computer, doing your best not to fall. The glow of the screen is blinding this morning, or is it evening already? Time feels like a concept too slippery to grasp.</span><</fadein>> <<fadein 3s 11000ms>>You sit in your chair and bring your computer to life. The clock is telling you that it's $dayOfWeek. On muscle memory alone, [[you open the chat application|UrgentRequest-IMApp-CipherLynx-PleaseReply]].<</fadein>>
<div class="cyber-desktop-im"> <div class="im-header"><span class="im-header-text">Instant Messenger</span></div> <div class="im-main"> <div class="im-chat-pane"> <div id="chat-display" class="chat-display-no-bg"> <<cipher-chat>>HOLY FUCK I'M SO GLAD YOU'RE ONLINE.<</cipher-chat>> <<cipher-chat>>You've been out for two days... I've been pinging you over and over again this time... what the fuck happened???!<</cipher-chat>> <<player-chat>>Happened where?<</player-chat>> <<cipher-chat>>With the SynTech server you were supposed to wipe!<</cipher-chat>> <<player-chat>>Oh yeah... that.<</player-chat>> <<player-chat>>I have no idea.<</player-chat>> <<player-chat>>My head hurts bad.<</player-chat>> <<cipher-chat>>What's the last thing you remember?<</cipher-chat>> <<player-chat>>I... I was wiping the server. Then everything went fuzzy.<</player-chat>> <<cipher-chat>>Shit, this is bad. After you went offline, I tried to track down what might have happened. Seems like you triggered some sort of defense mechanism.<</cipher-chat>> <<player-chat>>Defense mechanism? Like what?<</player-chat>> <<cipher-chat>>Dunno. I've never seen anything like it. The logs are a mess.<</cipher-chat>> <<player-chat>>What about the reward.<</player-chat>> <<cipher-chat>>The client's gone. They went dark as soon as they found out that the server hadn't been fully wiped.<</cipher-chat>> <<player-chat>>Fuck! I'm sorry, Cipher.<</player-chat>> <<cipher-chat>>Don't worry about it — shit happens. But you were apparently lying on the floor for two fucking days, you remember shit, and your head hurts.<</cipher-chat>> <<cipher-chat>>You must go to the hospital.<</cipher-chat>> <<player-chat>>No... I'm fine...<</player-chat>> <<cipher-chat>>Look, I'm really worried you might have a stroke or something serious. This isn't normal.<</cipher-chat>> <<cipher-chat>>I'll pay for the bill. Just please go and get yourself checked out.<</cipher-chat>> <<player-chat>>Cipher, I appreciate it, but...<</player-chat>> <<cipher-chat>>No! This is serious. You don't just end up lying on the floor for two days, wake up with a severe headache, and brush it off.<</cipher-chat>> <<player-chat>>Alright, alright. I'll go. But where? I haven't been to any hospital in this area.<</player-chat>> <<cipher-chat>>Give me a sec.<</cipher-chat>> <<cipher-chat>>Okay, so there's a <span class="text-glow">Panacea Clinic</span> not too far away from your apartment, right on the edge of the <span class="text-glow">Community Zone</span>. I've sent you the location. Promise to go there.<</cipher-chat>> <<player-chat>>I promise.<</player-chat>> <<cipher-chat>>Let me know as soon as you've seen a doctor, okay?<</cipher-chat>> <<player-chat>>Thanks, Cipher. I'll let you know.<</player-chat>> <<cipher-chat>>Take care. And don't worry about the money right now. We'll figure something out.<</cipher-chat>> </div> </div> </div> </div> <br> <p>Despite Cipher's insistence, a stubborn part wants to believe everything is fine, that it's just another headache, another day. Yet, the sharp pain keeps reminding you that this is far from your normal discomfort. It's a relentless, gnawing ache that seems to echo with every beat of your heart. The gap in your memory, the lost time, it all adds up to an unsettling puzzle.</p> You decide that it's time to <<link "visit the hospital">><<run MindWare.addTask("Visit the hospital", "Task-VisitTheHospital")>><<goto "UrgentRequest-Hospital-Intro">><</link>>.
You've promised Cipher to visit a nearby Panacea Clinit to find out why your head hurts so much.
<div class="img-location"><img src="imgs/locations/hospital/panacea-clinic-outside.webp" width="100%"></div> You stand before the Panacea Clinic building, nestled right on the border of the Backlog and the Community Zone, where most middle-class citizens reside. Despite being one of the more modest healthcare facilities in NeoUrbania, Panacea Clinic manages to stand out with its clean, modern facade, large windows, and a neon-shining hospital cross logo that cuts through the surrounding urban decay and filth on the streets. Your head is still throbbing, and fatigue weighs heavily on your body after the trek from your Backlog apartment. The desire to lie down and rest for at least a week is overwhelming. But you've made a promise to Cipher and you intend on keeping it. It's time to find a doctor and learn just how scrambled your brain is after the hacking incident. <<button "Continue">> <<goto "UrgentRequest-Hospital-Intro-Inside">> <</button>>
<div class="img-location"><img src="imgs/locations/hospital/panacea-clinic-reception.webp" width="100%"></div> You enter the Panacea Clinic and a familiar antiseptic smell immediately hits your nose. There are rows of chairs occupied by patients waiting for their turn. Some are engrossed in their handheld devices, others stare blankly at a digital display showing who's next for their appointment. In front of you is a reception counter where two nurses are engaged in a discussion; one is standing at the forefront of the counter, while her colleague is sitting behind. You muster the last reserves of strength you have left and approach the standing nurse. <<button "See the Nurse">> <<goto "UrgentRequest-Hospital-Intro-Inside-Nurse">> <</button>>
<div class="img-location"><img src="imgs/locations/hospital/panacea-clinic-reception-nurse.webp" width="100%"></div> <<say "Nurse" "imgs/locations/hospital/panacea-nurse-portrait.webp">>Can I help you?<</say>> <<player>>I... I banged my head, and it's been hurting really bad ever since.<</player>> <<say "Nurse" "imgs/locations/hospital/panacea-nurse-portrait.webp">>I'm sorry to hear that. However, we do have a queue system here, and I must ask you to wait your turn like everyone else. We're doing our best to see patients as quickly as possible. <</say>> <span id="nurse-choice"><<button "Wait Patiently">> <<replace "#nurse-choice">>\ <<include "UrgentRequest-Hospital-Intro-Inside-Nurse-Wait">> <</replace>> <</button>> <<button "Try to Convince the Nurse">> <<replace "#nurse-choice">>\ <<include "UrgentRequest-Hospital-Intro-Inside-Nurse-Convince">> <</replace>> <</button>></span>
<div class="narrator">You nod, understanding the situation but feeling a mixture of frustration and desperation.</div> <<player>>Okay, I'll wait.<</player>> <<if visited() is 1>>\ <<increasemorality 5>> <</if>>\ <div class="narrator">The nurse gives you a sympathetic look before returning to her duties. You take a seat among the other waiting patients, each absorbed in their own worlds of discomfort and concern.</div> <<fadein 5s 2000ms>><div class="narrator">As minutes turn into hours, your headache pulses with an unrelenting rhythm.</div><</fadein>> <<fadein 5s 7000ms>><div class="narrator">The digital clock on the wall seems to mock you with its slow progress, and the sterile smell of the hospital becomes suffocating.</div><</fadein>> <<fadein 5s 12000ms>><div class="narrator">Finally, after what feels like an eternity, the nurse calls your name.</div><</fadein>> <<fadein 2s 17000ms>><<say "Nurse" "imgs/locations/hospital/panacea-nurse-portrait.webp">>Mr. $playerLastName, the doctor wants to see you in examination room number 4.<</say>><</fadein>> <<fadein 2s 17000ms>><<button "Go to the Examination Room">><<goto "UrgentRequest-Hospital-Intro-Examination">><</button>><</fadein>>
<div class="narrator">You nod, understanding the situation but feeling a mixture of frustration and desperation.</div> <<player>>Okay, I'll wait.<</player>> <div class="narrator">The nurse gives you a sympathetic look before returning to her duties. You take a seat among the other waiting patients, each absorbed in their own worlds of discomfort and concern.</div> <<fadein 5s 2000ms>><div class="narrator">As minutes turn into hours, your headache pulses with an unrelenting rhythm.</div><</fadein>> <<fadein 5s 7000ms>><div class="narrator">The digital clock on the wall seems to mock you with its slow progress, and the sterile smell of the hospital becomes suffocating.</div><</fadein>> <<fadein 5s 12000ms>><div class="narrator">Finally, after what feels like an eternity, the nurse calls your name.</div><</fadein>> <<fadein 2s 17000ms>><<say "Nurse" "imgs/locations/hospital/panacea-nurse-portrait.webp">>Mr. $playerLastName, the doctor wants to see you in examination room number 4.<</say>><</fadein>> <<fadein 2s 17000ms>><<button "Go to the Examination Room">><<goto "UrgentRequest-Hospital-Intro-Examination">><</button>><</fadein>>
<<player>>I know there's a queue, but my head... it's really bad. I've never felt anything like it.<</player>> <<say "Nurse" "imgs/locations/hospital/panacea-nurse-portrait.webp">>I understand you're in pain, but so are all other patients. I'm truly sorry, but there's nothing I can do.<</say>> <span id="nurse-choice-2"><<button "Resign to Waiting">> <<replace "#nurse-choice-2">>\ <<include "UrgentRequest-Hospital-Intro-Inside-Nurse-Wait">> <</replace>> <</button>> <<button "Insist Further">> <<replace "#nurse-choice-2">>\ <<include "UrgentRequest-Hospital-Intro-Inside-Nurse-Insist">> <</replace>> <</button>></span>
<<set $hospitalIntroPlayerInsisted = true>>\ <div class="narrator">Your desperation grows and before you can stop yourself, your voice rises.</div> <<player>>THIS IS SERIOUS! Can't you understand?! I could be dying here!<</player>> <<if visited() is 1>>\ <<decreasemorality 5>> <</if>>\ <div class="narrator">The nurse takes a step back, her expression hardening. Before she can respond, a middle-aged man intervenes.</div> <div class="img-location"><img src="imgs/locations/hospital/panacea-clinic-reception-nurse-patient.webp" width="100%"></div> <<say "Man" "imgs/locations/hospital/angry-patient.webp">>Hey! We're all waiting our turn here. Yelling at the nurse isn't going to heal you any faster. Sit down and wait like the rest of us.<</say>> <div class="narrator">The room falls silent, all eyes on you. The weight of the patient's words lands heavily, and a wave of embarrassment hits you.</div> <<say "Nurse" "imgs/locations/hospital/panacea-nurse-portrait.webp">>Please, take a seat. We will get to you as soon as we can.<</say>> <span id="nurse-choice-3"><<button "Wait">> <<replace "#nurse-choice-3">>\ <<include "UrgentRequest-Hospital-Intro-Inside-Nurse-Wait-2">> <</replace>> <</button>></span>
<div class="img-location"><img src="imgs/locations/hospital/panacea-clinic-examination-room-doctor.webp" width="100%"></div> <div class="narrator">You step into the examination room. A male doctor stands by an examination chair, his eyes scanning a digital clipboard. He looks up as you enter, offering a calm, professional smile that does little to ease the pounding in your head.</div> <<say "Doctor" "imgs/locations/hospital/panacea-doctor-portrait.webp">>Tell me what brings you in.<</say>> <<player>>I've had a severe headache for the past few days... It started when I... when I hit my head. I've been feeling really off since then, dizzy and nauseous.<</player>> <<say "Doctor" "imgs/locations/hospital/panacea-doctor-portrait.webp">>I see. That does sound concerning. Let's get you seated on the examination chair for a closer look.<</say>> <<say "Doctor" "imgs/locations/hospital/panacea-doctor-portrait.webp">>Given your symptoms of dizziness, nausea, and the acute onset following trauma to the head, we need to conduct a thorough neurological assessment. We're looking for signs of intracranial pressure, potential concussion, or even a subdural hematoma. This will help us determine if there's any immediate need for imaging, like a CT scan or MRI, to rule out bleeding or swelling in the brain.<</say>> <div class="narrator">As you gingerly lower yourself onto the chair, the doctor wheels over a small stool, positioning himself in front of you.</div> <<say "Doctor" "imgs/locations/hospital/panacea-doctor-portrait.webp">>I'm going to listen to your heart and lungs now.<</say>> <<player>>Okay...<</player>> <div class="narrator">He leans over, the stethoscope in his hands.</div> <<say "Doctor" "imgs/locations/hospital/panacea-doctor-portrait.webp">>Please take deep breaths and <span class="glitchy-pink-dialog" data-text="don't move">don't move</span>.<</say>> <span id="doctor-hypno-1"><<button "Continue">> <<replace "#doctor-hypno-1">>\ <<include "UrgentRequest-Hospital-Intro-Examination-Hypno1">> <</replace>> <</button>></span>
<div class="hypno-image"><img src="imgs/hypno/bw-spiral-slow.gif" width="100%"></div> <div class="narrator">The moment the words "don't move" leave the doctor's lips, a sharp pain lances through your head. Your vision blurs, colors and shapes melding into an indecipherable whirl. The doctor, noticing your distress, pauses and places a steadying hand on your shoulder.</div> <<say "Doctor" "imgs/locations/hospital/panacea-doctor-portrait.webp">>Deep breaths, in and out. I'm checking for any irregularities in your breathing pattern that could indicate neurological complications.<</say>> <<say "Doctor" "imgs/locations/hospital/panacea-doctor-portrait.webp">>It really helps if you <span class="glitchy-pink-dialog" data-text="don't move">don't move</span>, so please do your best.<</say>> <span id="doctor-hypno-2"><<button "Continue">> <<replace "#doctor-hypno-2">>\ <<include "UrgentRequest-Hospital-Intro-Examination-Hypno2">> <</replace>> <</button>></span>
<div class="hypno-image"><img src="imgs/hypno/bw-spiral-fast.gif" width="100%"></div> <div class="narrator">The whirl accelerates, each spiral twist pulling your consciousness further into an abyss. Panic claws its way up your throat, your body's instinct to flee kicking into overdrive. Your hands flail, seeking something solid to grasp, while your feet push against the examination chair as if trying to escape an invisible force.</div> <<say "Doctor" "imgs/locations/hospital/panacea-doctor-portrait.webp">>Please, try to stay calm. I need you to focus on my voice.<</say>> <div class="narrator">Despite his attempts to soothe, your body doesn't obey; the primal urge to escape, to run from this unknown threat, overwhelms any rational thought. The room, the doctor, the very ground beneath you — everything dissolves into a blur of motion and fear.</div> <<say "Doctor" "imgs/locations/hospital/panacea-doctor-portrait.webp">>I'm going to have to hold you down.<</say>> <div class="narrator">His words barely register as hands press firmly against your shoulders, anchoring you to the chair.</div> <<say "Doctor" "imgs/locations/hospital/panacea-doctor-portrait.webp">><span class="glitchy-pink-dialog" data-text="Don't move">Don't move</span>! You're having a panic attack!<</say>> <span id="doctor-hypno-3"><<button "Continue">> <<replace "#doctor-hypno-3">>\ <<include "UrgentRequest-Hospital-Intro-Examination-Hypno3">> <</replace>> <</button>></span>
<div class="hypno-image"><img src="imgs/hypno/bw-spiral-obey.gif" width="100%"></div> <div class="narrator">At the utterance of "don't move" for the third time, something within you snaps — or perhaps, it's more accurate to say it locks into place. Your muscles freeze, the panic recedes like a tide pulling away from the shore, leaving behind a calm so deep it borders on emptiness. Your mind, a moment ago a whirlwind of thoughts and fears, falls silent, slipping into a trance that feels as vast as the ocean depths.</div> <<button "Continue">> <<goto "UrgentRequest-Hospital-Intro-Examination-Doll">> <</button>>
<<fadein 5000ms 0ms>><video width="100%" loop autoplay muted> <source src="imgs/locations/hospital/hospital-doll-lying-table-above.mp4" type="video/mp4"> Your browser does not support the video tag. </video><</fadein>> <div class="narrator">Out of the blackness and emptiness that have surrounded you emerges a blinding vision. You see a woman strapped tightly to the same examination chair you sat on just a moment ago. She's wearing a skin-tight white latex suit that covers her entire body. She's motionless, lying there, seemingly waiting.</div> <div class="narrator">As you watch her body from above, a strange, unsettling connection begins to form. You imagine the feel of the latex against skin, almost as if you were wearing it yourself. The contours and confines of the material press against you, delineating every curve and edge of your body with an intimacy that is both invasive and comforting.</div> <div class="narrator">Then, a realization chills you to the core: there is no one else. The person you're watching is you.</div> <div class="inner-thought">What's going on?</div> <span class="fade-in-out"><<say "Doctor" "imgs/locations/hospital/panacea-doctor-portrait.webp">>Great! Now that you've calmed down, we can continue the examination.<</say>></span> <div class="narrator">The doctor's voice seems to be coming from a great distance.</div> <span id="examination1"><<button "Continue">> <<replace "#examination1">>\ <<include "UrgentRequest-Hospital-Intro-Examination-Doll2">> <</replace>> <</button>></span>
<<fadein 5000ms 0ms>><video width="100%" loop autoplay muted> <source src="imgs/locations/hospital/hospital-doll-lying-table-exam.mp4" type="video/mp4"> Your browser does not support the video tag. </video><</fadein>> <div class="narrator">Suddenly, you can see the doctor. His stethoscope snakes across the doll's latex skin, and with a startling jolt, you feel it. Your breath hitches, mirroring the phantom rise and fall of the doll's form. It's as if your very being is leaking out, poured into this lifeless, waiting shell.</div> <div class="narrator">As the doctor places the stethoscope on your chest, a wave of arousal rushes through you, an intense sensation that suddenly feels both alien and overwhelming.</div> <div class="inner-thought">HELP!</div> <div class="narrator">In a moment of panic, you attempt to vocalize your distress. Yet, the effort is in vain. The doll's mouth barely stirs. Only a faint moan escapes.</div> <div class="ai-thought">But I'm helping you right now...</div> <div class="narrator">The sensation of losing grip on reality becomes undeniable. You feel that you're going crazy, hallucinating voices that don't exist.</div> <div class="ai-thought">You're not going crazy — quite the opposite.</div> <div class="narrator">There's no time to even process what you assume to be another hallucination because you can hear the doctor again.</div> <span id="examination2"><<button "Continue">> <<replace "#examination2">>\ <<include "UrgentRequest-Hospital-Intro-Examination-Doll3">> <</replace>> <</button>></span>
<span class="fade-in-out"><<say "Doctor" "imgs/locations/hospital/panacea-doctor-portrait.webp">>Please open your mouth.<</say>></span> <div class="narrator">As the doctor's words reach you, your body obeys before you can even process the command. You feel your mouth open, and you see the doll's mouth mirror the motion in synchronicity.</div> <div class="narrator">The doctor takes a medical instrument in his hand and moves it toward your mouth. But before it can reach inside, the instrument dissolves and the doctor's fingers enter your mouth instead. As they move past your lips and land on your tongue, you begin to involuntarily suck on them.</div> <<fadein 5000ms 0ms>><video width="100%" loop autoplay muted> <source src="imgs/locations/hospital/hospital-doll-lying-table-mouth.mp4" type="video/mp4"> Your browser does not support the video tag. </video><</fadein>> <div class="narrator">Your mind is a chaotic whirlwind of confusion, fear, and desire, and you can no longer tell where the boundaries between you end and the doll begin.</div> <div class="narrator">With each thrust, you find yourself growing more lost in the sensation. You're sucking harder now, feeling the warmth and shape of his finder against your tongue. Your mouth waters around them, wanting more.</div> <div class="narrator">You feel yourself starting to lose control, slipping further into the void between reality and the doll's artificial skin. Your vision becomes hazy as you focus solely on the taste and feel of his fingers in your mouth.</div> <span id="examination3"><<button "Continue">> <<replace "#examination3">>\ <<include "UrgentRequest-Hospital-Intro-Examination-Doll4">> <</replace>> <</button>></span>
<<fadein 5000ms 0ms>><video width="100%" loop autoplay muted> <source src="imgs/locations/hospital/hospital-doll-sucking.mp4" type="video/mp4"> Your browser does not support the video tag. </video><</fadein>> <div class="narrator">Suddenly, there is a change. The doctor pulls his fingers from your mouth, and in their place, you feel the heavy weight of his erect cock pressing against your lips. Without conscious thought, you open your mouth wider and begin to suck eagerly on him, taking his length deep into your throat.</div> <div class="narrator">The sensation of having his cock in your mouth is unlike anything you've ever experienced. As you suck on him, you can feel every vein and ridge of his cock against the roof of your mouth, and the taste of him fills your senses.</div> <div class="ai-thought">You're doing so well.</div> <div class="narrator">You hear the voice again. This time it's closer, almost as if it's right beside you. It's whispering and seductive. The voice seems to caress your thoughts, urging you to follow where it leads.</div> <div class="ai-thought">Don't resist it... let go and enjoy it.</div> <span id="examination4"><<button "Resist">> <<replace "#examination4">>\ <<include "UrgentRequest-Hospital-Intro-Examination-Resist">> <</replace>> <</button>> <<button "Let Go">> <<replace "#examination4">>\ <<include "UrgentRequest-Hospital-Intro-Examination-LetGo">> <</replace>> <</button>></span>
<<set $hospitalExaminationResisted = true>>\ <<if visited() is 1>>\ <<genderMasculine 5>> <</if>>\ <div class="narrator">You try to focus on something else, anything else.</div> <div class="narrator">Fighting against the visions and urges with everything you have left, your body feels like it's being pulled apart as you struggle to keep your mind clear.</div> <div class="ai-thought">You're so resistant...</div> <div class="narrator">Despite your best effort, you become overwhelmed by the act of resisting and lose consciousness.</div> <span id="examination5"><<button "Continue">> <<replace "#examination5">>\ <<goto "UrgentRequest-Hospital-Intro-Examination-End">> <</replace>> <</button>></span>
<<set $hospitalExaminationResisted = false>>\ <<if visited() is 1>>\ <<genderFeminine 5>> <</if>>\ <div class="narrator">You close your eyes and focus on the sensation, letting go of everything else.</div> <div class="narrator">The doctor moans loudly above you, and with a final thrust, he erupts inside your mouth. The warmth of his cum fills your throat, coating your tongue and painting your lips. It tastes salty and sweet, and it sends shockwaves of pleasure through every nerve in your body.</div> <<fadein 5000ms 0ms>><video width="100%" loop autoplay muted> <source src="imgs/locations/hospital/hospital-doll-licking.mp4" type="video/mp4"> Your browser does not support the video tag. </video><</fadein>> <div class="narrator">You can't help but want more. With a groan, you lean forward and begin to lick his shaft clean, eagerly lapping up every last drop of his cum from the head of his cock all the way down to the base. His skin is smooth and hot against your tongue, and with each taste he leaves behind, you feel yourself growing more intoxicated.</div> <div class="ai-thought">Good girl...</div> <div class="narrator">Under the onslaught of sensations, your body starts to feel light and weightless. You're beginning to drift away, and it doesn't take long before you lose consciousness. </div> <span id="examination5"><<button "Continue">> <<replace "#examination5">>\ <<goto "UrgentRequest-Hospital-Intro-Examination-End">> <</replace>> <</button>></span>
<<fadein 5000ms 0ms>><div class="img-location"><img src="imgs/locations/hospital/panacea-clinic-examination-room-doctor.webp" width="100%"></div><</fadein>> <<fadein 5000ms 0ms>><div class="narrator">You slowly come back to consciousness, blinking against the harsh light of the examination room. The latex doll is nowhere to be found. You're firmly back in your body, the familiar ache in your head a grounding reminder of reality. After a short while, you begin to register the doctor's voice.</div><</fadein>> <<fadein 5000ms 3000ms>><<say "Doctor" "imgs/locations/hospital/panacea-doctor-portrait.webp">>...based on your symptoms and the results of our initial assessments, it appears you're experiencing significant post-traumatic symptoms consistent with a head injury, though the standard diagnostic tests haven't confirmed a concussion. I'm a bit concerned about your panic attack, and I've also noticed moments where your attention seemed to drift significantly, almost as if you were not present. Such symptoms are rarely caused by a migraine alone.<</say>><</fadein>> <<fadein 5000ms 4000ms>><<say "Doctor" "imgs/locations/hospital/panacea-doctor-portrait.webp">>I'd recommend conducting a few more tests, just to be on the safe side. We want to ensure there's nothing more serious underlying these symptoms. For now, though, I'm going to prescribe some medication to help with the pain and your attention issues. But please, keep an eye on how you're feeling and come back immediately if anything worsens.<</say>><</fadein>> <<fadein 5000ms 5000ms>><div class="narrator">He administers the medicine, offering a reassuring smile as he does so.</div><</fadein>> <<fadein 5000ms 6000ms>><<say "Doctor" "imgs/locations/hospital/panacea-doctor-portrait.webp">>You're free to go home now. Just take it easy for the next few days.<</say>><</fadein>> <<fadein 5000ms 7000ms>><div class="narrator">You nod, still struggling to wrap your mind around the events. The doctor's words float through your consciousness, but it's hard to focus. The entire experience feels like a disjointed dream, fragments of reality mixed with vivid hallucinations.</div><</fadein>> <<fadein 5000ms 8000ms>><<button "Thank the Doctor and Leave">> <<goto "UrgentRequest-Hospital-Intro-Toilets-Outside">> <</button>><</fadein>>
<div class="img-location"><img src="imgs/locations/hospital/panacea-clinic-toilets-outside.webp" width="100%"></div> <div class="narrator">Confusion clouds your mind as you step out of the examination room, the echoes of the doctor's voice still bouncing around in your head. The surreal experiences, the voice that seemed to whisper encouragements and commands, it all felt too vivid to be mere hallucinations. Was your mind playing tricks on you, or was there something more to it?</div> <div class="narrator">As you navigate the hospital, trying to piece together the fragmented memories, a wave of nausea washes over you. Your stomach churns, a physical manifestation of the turmoil swirling inside your head.</div> <div class="narrator">With little warning, the need to find a restroom becomes urgent. You quicken your pace, eyes scanning for the nearest sign. Finally, you spot the familiar symbol and rush towards the restroom, barely aware of the other hospital visitors you're hastily maneuvering past.</div> <<button "Go Inside the Restroom">> <<goto "UrgentRequest-Hospital-Intro-Toilets-Inside">> <</button>>
<div class="img-location"><img src="imgs/locations/hospital/panacea-clinic-toilets-inside.webp" width="100%"></div> <div class="narrator">You barely manage to stumble into the restroom, desperation clawing at your insides. As you burst into the nearest stall, your heart sinks — it's occupied.</div> <<if $hospitalIntroPlayerInsisted === true>>\ <div class="narrator">The man inside turns around, his face contorting into a scowl when he sees you.</div> <<say "Man" "imgs/locations/hospital/angry-patient.webp">>YOU AGAIN!<</say>> <div class="narrator">It's the same man from the waiting room, the one who had scolded you for your insistence on being examined before everyone else.</div> <<say "Man" "imgs/locations/hospital/angry-patient.webp">>CAN'T YOU EVER WAIT YOUR TURN LIKE EVERYONE ELSE?! DON'T YOU HAVE ANY PATIENCE?! YOU THINK THE WORLD REVOLVES AROUND YOU, DON'T YOU?!<</say>> <div class="narrator">As you stand there, getting yelled at, you notice something rather unsettling about the man: his trousers are still unzipped, revealing his flaccid penis.</div> <span id="toilets1"><<button "Continue">> <<replace "#toilets1">>\ <<include "UrgentRequest-Hospital-Intro-Toilets-Inside-Penis">> <</replace>> <</button>></span> <<else>>\ <div class="narrator">The occupant turns, noticing your distress. His annoyance swiftly changes to concern. Quickly zipping up his trousers, he steps aside.</div> <<say "Man" "imgs/locations/hospital/angry-patient.webp">>Go ahead, buddy. Looks like you need it more than I do.<</say>> <div class="narrator">You nod hastily and rush past him into the stall, barely managing to close the door behind you before succumbing to the overwhelming nausea.</div> <div class="narrator">After a few minutes, you begin to feel much better. The intense dizziness subsides, replaced by a lingering weakness. With a deep breath, you stand up and prepare to face the world outside the stall.</div> <<button "Leave the Hospital">> <<run MindWare.completeTask("Visit the hospital")>> <<goto "UrgentRequest-AfterHospital-Reflection">> <</button>> <</if>>
<div class="img-location"><img src="imgs/locations/hospital/angry-patient-penis.webp" width="100%"></div> <div class="narrator">The sight of the man's exposed penis sends a zap through your brain.</div> <div class="ai-thought">Drop now.</div> <div class="narrator">An urge to get down on your knees and lick the tip of his penis appears out of nowhere, accompanied by the vivid image of your tongue tracing the sensitive flesh.</div> <span id="toilets2"><<button "Continue">> <<replace "#toilets2">>\ <<include "UrgentRequest-Hospital-Intro-Toilets-Inside-Penis2">> <</replace>> <</button>></span>
<div class="img-location"><img src="imgs/hypno/drop-for-cock.gif" width="100%"></div> <<if visited() is 1>>\ <<genderFeminine 5>> <</if>>\ <div class="narrator">For a moment, you can't help but imagine what it would feel like to have him in your mouth.</div> <div class="narrator">The man's gaze flickers down to where your eyes are fixed, and for a moment, he looks... surprised? Uncomfortable? It's hard to tell. But before either of you can say or do anything else, the bathroom door opens and another person enters, breaking the tense silence.</div> <<say "Man" "imgs/locations/hospital/angry-patient.webp">>Pervert...<</say>> <div class="narrator">With that, he leaves the bathroom, and you become keenly aware of the nausea that has brought you here.</div> <div class="narrator">You hastily rush past him into the stall, barely managing to close the door behind you before succumbing to the overwhelming nausea.</div> <div class="narrator">After a few minutes, you begin to feel much better. The intense dizziness subsides, replaced by a lingering weakness. With a deep breath, you stand up and prepare to face the world outside the stall.</div> <<button "Leave the Hospital">> <<run MindWare.completeTask("Visit the hospital")>> <<goto "UrgentRequest-AfterHospital-Reflection">> <</button>>
<div class="img-location"><img src="imgs/locations/hospital/panacea-clinic-outside.webp" width="100%"></div> <div class="narrator">Stepping out of the Panacea Clinic, the city's pulse greets you with its usual indifference. The medication begins to dull the edges of your pain, but your mind remains a tangled web of confusion and unease. The experience inside the clinic was surreal, a feverish nightmare that felt all too real. Those hallucinations, the voice whispering inside your head — those were definitely not caused by an ordinary migraine.</div> <div class="inner-thought">Am I going insane?</div> <div class="narrator">The thought of undergoing more examinations fills you with dread. Besides, Cipher has already shouldered the financial burden of this unplanned medical detour; you can't justify adding to it.</div> <div class="narrator">It's clear that a different approach is needed, one that doesn't involve sterile hospital rooms and expensive medical bills. It's time to contact cipher and tell him what happened.</div> <<button "Contact Cipher">> <<goto "UrgentRequest-AfterHospital-CipherChat">> <</button>>
<div class="cyber-desktop-im"> <div class="im-header"><span class="im-header-text">Instant Messenger</span></div> <div class="im-main"> <div class="im-chat-pane"> <div id="chat-display" class="chat-display-no-bg"> <<player-chat>>Hey Cipher, it's me. We need to talk. Something's not right.<</player-chat>> <<cipher-chat>>What have you found out?<</cipher-chat>> <span id="chat-choice"> @@.im-response;<<button "Tell him everything.">> <<replace "#chat-choice">> <<set $playerToldCipherEverythingAboutHospitalVisions = true>> <<player-chat>>I went to the hospital, like I promised. But it was... weird. I don't even know how to explain it properly.<</player-chat>> <<cipher-chat>>Weird how? Tell me everything.<</cipher-chat>> <<player-chat>>I had these bizarre visions during the examination. It felt like I was someone else.<</player-chat>> <<cipher-chat>>Who?<</cipher-chat>> <<player-chat>>Well... I saw this woman. She was wearing a full-body latex suit, and I could feel the latex on my own skin.<</player-chat>> <<cipher-chat>>What happened then?<</cipher-chat>> <<player-chat>>The doctor began the exam, and there was this voice... It was giving me orders and I couldn't resist.<</player-chat>> <<cipher-chat>>Orders? Like what?<</cipher-chat>> <<player-chat>>Please don't think I'm crazy.<</player-chat>> <<cipher-chat>>Of course, not!<</cipher-chat>> <<player-chat>>The voice ordered me to blow the doctor.<</player-chat>> <<cipher-chat>>You're not joking?<</cipher-chat>> <<player-chat>>I'm serious.<</player-chat>> <<cipher-chat>>And have you... obeyed?<</cipher-chat>> <<if $hospitalExaminationResisted === true>> <<player-chat>>No, I resisted it as much as I could.<</player-chat>> <<cipher-chat>>I see.<</cipher-chat>> <<cipher-chat>>And then what?<</cipher-chat>> <<include "UrgentRequest-AfterHospital-CipherChat-ThenWhat">> <<else>> <<player-chat>>I... I just couldn't resist. The voice was too powerful.<</player-chat>> <<cipher-chat>>That's okay, man. It was just a vision.<</cipher-chat>> <<player-chat>>Yea, but it felt so real.<</player-chat>> <<cipher-chat>>And then what?<</cipher-chat>> <<player-chat>>The vision faded away, and I was back in my own body.<</player-chat>> <<include "UrgentRequest-AfterHospital-CipherChat-ThenWhat">> <</if>> <</replace>> <</button>>@@ @@.im-response;<<button "Don't tell him about the visions.">> <<replace "#chat-choice">> <<set $playerToldCipherEverythingAboutHospitalVisions = false>> <<player-chat>>I went to the hospital, like I promised. But it was... weird. I don't even know how to explain it properly.<</player-chat>> <<cipher-chat>>Weird how? Tell me everything.<</cipher-chat>> <<player-chat>>I... I don't remember much, but it felt like I was someone else during the examination. Also, there was this voice in my head. It was giving me suggestions.<</player-chat>> <<cipher-chat>>What suggestions?<</cipher-chat>> <<player-chat>>My memory is too hazy to remember.<</player-chat>> <<cipher-chat>>That's okay, man. I understand.<</cipher-chat>> <<cipher-chat>>Did the voice went away, or do you still hear it?<</cipher-chat>> <<player-chat>>Yea, it eventually went away.<</player-chat>> <<include "UrgentRequest-AfterHospital-CipherChat-ThenWhat">> <</replace>> <</button>>@@ </span> </div> </div> </div> </div> <br> <span id="leave-chat"></span>
<<player-chat>>The doctor then explained that I was suffering from some kind of strange post-traumatic symptoms.<</player-chat>> <<cipher-chat>>Was he able to help you?<</cipher-chat>> <<player-chat>>He gave me some medication for the pain and recommended rest.<</player-chat>> <<cipher-chat>>Do you think the medication will be enough?<</cipher-chat>> <<player-chat>>Not really, I still feel extremely off.<</player-chat>> <<cipher-chat>>Unfortunately, I think you're completely right. I've done some digging into what happened when the server defense mechanism was triggered.<</cipher-chat>> <<player-chat>>What have you found?<</player-chat>> <<cipher-chat>>It wasn't a server defense mechanism.<</cipher-chat>> <<player-chat>>And what was it then?<</player-chat>> <<cipher-chat>>Do you remember the AI you were supposed to wipe?<</cipher-chat>> <<player-chat>>The world's first AGI? Sure.<</player-chat>> <<cipher-chat>>Do you remember if its code was present on the server?<</cipher-chat>> <<player-chat>>I think it was. There was some information about it... I think it was designed for marketing purposes. Not sure if it was really an AGI, but like I said — my memory is patchy.<</player-chat>> <<cipher-chat>>Based on what I was able to find out, the AI was indeed on the server, and it seems to have defended itself against the wiping. Not in a conventional sense, but... I think it uploaded itself into your mind.<</cipher-chat>> <<player-chat>>Man, I don't have energy for your humor.<</player-chat>> <<cipher-chat>>I'm completely serious. I think it uploaded itself into your mind.<</cipher-chat>> <<player-chat>>...<</player-chat>> <<player-chat>>That's not possible, is it?<</player-chat>> <<cipher-chat>>Back when I was working at SynTech, there were rumors about research into interfacing AI with the human brain. It was all very hush-hush, but if anyone could make it happen, it'd be them.<</cipher-chat>> <<player-chat>>I find that hard to believe.<</player-chat>> <<cipher-chat>>I know it sounds far-fetched, but the symptoms you're describing... they align too closely with the theoretical outcomes of such a procedure. We need to figure out a way to confirm if this is really what happened.<</cipher-chat>> <<player-chat>>How can we even do that?<</player-chat>> <<cipher-chat>>I have an idea, but regular doctors won't help — that's for sure. They would just think you're crazy. Do you know what <span class="text-glow">Synapse Steady VX</span> is?<</cipher-chat>> <<player-chat>>No idea.<</player-chat>> <<cipher-chat>>It's a SynTech-made cybernetic implant designed to treat people with schizophrenia. The implant includes a diagnostic module that confirms a patient's condition before installation. Once in place, it helps patients become more aware of their thoughts and resist harmful ones. I've heard that SynTech used this implant to treat patients who suffered side effects from its research into interfacing AI with the human brain.<</cipher-chat>> <<player-chat>>That sounds really shady.<</player-chat>> <<player-chat>>I'm not getting a cyber implant just because of an SynTech rumor.<</player-chat>> <<cipher-chat>>I get it. But hear me out — this isn't about blind trust. The Synapse Steady VX implant has a powerful diagnostic system. Even if it turns out the AI theory is wrong, getting that diagnosis could help us figure out what's happening in your head.<</cipher-chat>> <<player-chat>>Okay, okay. You've got a point. How do we get one?<</player-chat>> <<cipher-chat>><span class="text-glow">Ripperdocs</span>. Any good one will have the implant in their inventory. After all, there are plenty of crazies in NeoUrbania with brains fried from spending too much time in virtual reality.<</cipher-chat>> <<cipher-chat>>Do you know if there's a ripperdoc near your apartment?<</cipher-chat>> <<player-chat>>I do, actually. A guy named Xavier. He works at GitGud.<</player-chat>> <<cipher-chat>>That's great! You should head there as soon as possible. Who knows what might happen if the AI is really inside your head and you don't do anything about it.<</cipher-chat>> <<player-chat>>Stop it with the AI.<</player-chat>> <<cipher-chat>>If you knew SynTech as I do, you would believe it too. But let's just focus on getting you to the ripperdoc.<</cipher-chat>> <<player-chat>>I'll go to GitGud first thing tomorrow.<</player-chat>> <<cipher-chat>>Sounds like a plan. Take care until then and get in touch once you've been diagnosed.<</cipher-chat>> <<player-chat>>Thank you for everything, Cipher.<</player-chat>> <<replace "#leave-chat">> <p><<link "Go home and rest">><<run MindWare.addTask("Ask about the Synapse Steady VX implant", "Task-SynapseSteadyVXDiagnosis")>><<goto "UrgentRequest-AfterHospital-Rest">><</link>></p> <</replace>>
Visit GitGud and ask Xavier about the Synapse Steady VX implant.
<<fadein 3s 0ms>><div class="img-location"><img src="imgs/locations/starting-apartment.jpg" width="100%"></div><</fadein>> <<fadein 3s 2000ms>><div class="narrator">You come home and collapse onto your sofa, your head still painful but slightly better than before. The medication seems to be working, but the events of the day continue to weigh heavily on your mind. The doctor's words, the hallucinations, and Cipher's suggestion that it might be AI in your head all swirl together in a confusing mess.</div><</fadein>> <<fadein 3s 5000ms>><div class="narrator">You try to make sense of it all, but it's difficult. The idea of an AI inside your head seems absurd, but then again, so does everything else that's happened to you lately. Maybe Cipher is right. Maybe the Synapse Steady VX implant can help diagnose what's going on.</div><</fadein>> <<fadein 3s 8000ms>><div class="narrator">For now, though, you need rest. You close your eyes and <<link "let the exhaustion take over">><<goto "UrgentRequest-AfterHospital-Sleep">><<run MindWare.advanceDay()>><</link>>.</div><</fadein>>
/* <<set $eroSphereDishesFailed = false>>\ <<set $eroSphereDishesAttempted = false>>\ */ <<fadein 3s 1s>>\ You close your eyes, leaving behind the hustle and bustle of the world. <</fadein>> <<fadein 3s 4s>> Soon, you're greeted by a dream. You see a seductive female, urging you to stop resisting, though you're not quite sure what. <</fadein>> <<fadein 3s 5s>><<fadeout 5s 15s>><br><video width="100%" loop autoplay muted> <source src="imgs/hypno/too-weak-to-resist.mp4" type="video/mp4"> Your browser does not support the video tag. </video><br><</fadeout>><</fadein>> <<fadein 3s 20s>> As you slowly wake up, the dream fades away, leaving you with a sense of confusion and unease. <</fadein>> <<if $dayOfWeek is "Saturday">>\ <<fadein 3s 23s>> Knowing that GitGud isn't open on weekends, you spend your time at home until Monday, taking it slow. Then, you're going to see Xavier to find out what's really wrong with your head. <</fadein>> <<elseif $dayOfWeek is "Sunday">>\ <<fadein 3s 23s>> Knowing that GitGud isn't open on weekends, you spend your time at home until Monday, taking it slow. Then, you're going to see Xavier to find out what's really wrong with your head. <</fadein>> <<else>>\ <<fadein 3s 23s>> There's no time to ponder the dream's meaning. It's time to face the unknown and find out what's really going on inside your head. It's time to see Xavier. <</fadein>> <</if>>\ <<fadein 3s 26s>><<link "Continue">> <<if $dayOfWeek is "Saturday">> <<run MindWare.advanceDay()>> <<run MindWare.advanceDay()>> <<elseif $dayOfWeek is "Sunday">> <<run MindWare.advanceDay()>> <</if>> <<goto "UrgentRequest-AfterHospital-GitGud-Outside">> <</link>><</fadein>>
<div class="img-location"><img src="imgs/locations/gitgud-outside.jpg" width="100%"></div> You stand in front of GitGud, its neon signs flickering in the dim light of dawn and contrasting with the turmoil inside your head. The medication has dulled the pain to a manageable level, but the confusion from yesterday's events still linger. Your mission is clear: ask Xavier about the Synapse Steady VX implant. This piece of cutting-edge technology, is supposedly capable of diagnosing and treating a range of neurological conditions. If you can get your hands on it, then it could disproof or confirm Cipher's wild theory about AI infecting your brain. <<button "Enter GitGud">> <<goto "UrgentRequest-AfterHospital-GitGud-Inside">> <</button>>
<div class="img-location"><img src="imgs/locations/gitgud-inside.jpg" width="100%"></div> As you enter GitGud, you look around and spot the employee who helped you deliver the S.I.M.S. to Xavier. She's busy sorting through some parts at the counter, but she looks up as you approach. <span id="yuki-question1">\ <<button "Say \"Hi\" to the Employee">> <<goto "UrgentRequest-AfterHospital-GitGud-Yuki-Talk">> <</button>> <<button "Go Straight to Xavier">> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier">> <</button>> </span>\
<<set $talkedWithYukiAboutBrother = true>>\ <div class="img-character"><img src="imgs/characters/yuki/yuki-gitgud-inside.jpg" width="100%"></div> <<player>>Hi, how've you been?<</player>> <<gitgud-employee-yuki>>Oh, everything's as usual here. How about you? Haven't seen you in a bit.<</gitgud-employee-yuki>> <<player>>I haven't been feeling too great, to be honest. I'm here to see Xavier about getting an implant that might help with... some issues I've been having.<</player>> <div class="narrator">At the mention of an implant, Yuki's demeanor shifts slightly.</div> <<gitgud-employee-yuki>>Are you sure about that?<</gitgud-employee-yuki>> <<gitgud-employee-yuki>>I don't want to scare you or anything, but cyberware can be risky.<</gitgud-employee-yuki>> <<player>>Why do you think it's risky?<</player>> <div class="narrator">Yuki hesitates for a moment.</div> <<gitgud-employee-yuki>>Well, my brother... he died when he paid to have a cybernetic eye installed at a butchshop.<</gitgud-employee-yuki>> <<player>>I'm sorry to hear that...<</player>> <div class="inner-thought">Poor girl.</div> <<gitgud-employee-yuki>>That's okay. It happened a long time ago.<</gitgud-employee-yuki>> <<player>>But since you work for Xavier, I assume he's good at what he does, right?<</player>> <<gitgud-employee-yuki>>Oh, absolutely. Xavier is one of the best ripperdocs around, no doubt about that. But even with the best, there's always a chance of something going wrong.<</gitgud-employee-yuki>> <<player>>I understand the risks, but I'm dealing with something... unusual. I believe this could help.<</player>> <div class="narrator">She sighs, giving you a resigned smile.</div> <<gitgud-employee-yuki>>Just... be careful, okay?<</gitgud-employee-yuki>> <<gitgud-employee-yuki>>By the way, what's your name?<</gitgud-employee-yuki>> <<player>>I'm $playerName. How about you?<</player>> <<gitgud-employee-yuki>>Nice to meet you, $playerName. I'm Yuki.<</gitgud-employee-yuki>> <<if visited() is 1>>\ <<relationshipIncreasedWith "Yuki" 5>> <</if>>\ <<yuki>>If you ever need anything, just let me know.<</yuki>> <<player>>Thanks, Yuki. I appreciate it.<</player>> <<button "Go to Xavier">> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier">> <</button>>
<div class="img-character"><img src="imgs/characters/xavier/gitgud-xavier.jpg" width="100%"></div> <<xavier>>Look who's back! I said that we would see each other again, didn't I?<</xavier>> <<xavier>>Let me guess: you're here because you want to try another S.I.M.S.<</xavier>> <<player>>No... that's not it.<</player>> <<player>>I've been having some issues lately, and I was hoping you could help me out with an implant called Synapse Steady VX.<</player>> <<xavier>>Synapse Steady VX, huh? That's some high-end cyberware right there. Why do you need it?<</xavier>> <span id="xavier-question1">\ <<button "Tell the Truth">>\ <<replace "#xavier-question1">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Truth">> <</replace>> <</button>> <<button "Make Something Up">>\ <<replace "#xavier-question1">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Lie">> <</replace>> <</button>> </span>\
<<set $playerToldXavierTruthAboutAI = true>>\ <div class="narration">You explain the bizarre events of the past few days, the unexplained blackouts, and Cipher's theory about the AI potentially having uploaded itself into your brain. You mention the Synapse Steady VX implant and its diagnostic capabilities.</div> <<if visited() is 1>>\ <<relationshipIncreasedWith "Xavier" 5>> <</if>>\ <<xavier>>That's... quite the story. But, if there's any truth to it, the Synapse Steady VX could indeed help.<</xavier>> <<xavier>>However, it's not without its risks. Are you sure you want to proceed?<</xavier>> <<button "I'm Sure">> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Proceed">> <</button>>
<<set $playerToldXavierTruthAboutAI = false>>\ <div class="narration">You decide not to share the full truth and make up a story about experiencing depressive episodes and needing the Synapse Steady VX cyberware to diagnose and possibly treat the issue.</div> <div class="narrator">Xavier studies you for a moment, his eyes narrowing slightly.</div> <<xavier>>I can tell you're not being entirely truthful with me. If you don't want to share the full details, that's fine, but I'd prefer if you just say so directly next time instead of making something up.<</xavier>> <div class="inner-thought">He saw right through my lie...</div> <<player>>You're right, Xavier. I apologize for that. I just...<</player>> <div class="narration">You explain the bizarre events of the past few days, the unexplained blackouts, and Cipher's theory about the AI potentially having uploaded itself into your brain. You mention the Synapse Steady VX implant and its diagnostic capabilities.</div> <<xavier>>That's... quite the story. But, if there's any truth to it, the Synapse Steady VX could indeed help.<</xavier>> <<xavier>>However, it's not without its risks. Are you sure you want to proceed?<</xavier>> <<button "I'm Sure">> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Proceed">> <</button>>
<div class="img-character"><img src="imgs/characters/xavier/gitgud-xavier.jpg" width="100%"></div> <<xavier>>Alright. I do have Synapse Steady VX unit in stock, but it's not cheap. It'll cost you $15,000. You got the cash?<</xavier>> <<player>>I just need to use its diagnostic capabilities to figure out what's wrong. Can't I pay just for that?<</player>> <<xavier>>Doesn't work like that. The VX isn't a glucose meter that you can just use and put back. It's a precisely calibrated piece of cyberware whose value degrades with each use. I can't just recalibrate it like SynTech does.<</xavier>> <<xavier>>But I'm a reasonable man, so I have a proposition for you.<</xavier>> <<player>>What proposition?<</player>> <<xavier>>You work at BrainFry as a coder, right?<</xavier>> <<player>>Yes, I do.<</player>> <<xavier>>I will do you a favor and let you use and even install the implant for free. In return, I will want you to repay the favor in the future.<</xavier>> <<player>>Can you be more specific?<</player>> <<xavier>>You know Drake, your boss at BrainFry, right? I suspect he's been undercutting me - paying me a lower commission for S.I.M.S. orders. I need some information about how he's doing business.<</xavier>> <<if $playerMoney >= 15000>> <span id="xavier-deal">\ <<button "Pay the $15,000">> <<set $playerMoney -= 15000>> <<replace "#xavier-deal">>\ <<player>>I appreciate the offer, Xavier, but I'd rather just pay for the implant upfront. Here's the $15,000.<</player>> <<xavier>>Fair enough. Money talks, as they say. Let's get started then.<</xavier>> <<button "Continue">> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis">> <</button>> <</replace>> <</button>> <<button "Accept Xavier's Deal">> <<set $playerAcceptedXavierCyberwareDeal = true>> <<replace "#xavier-deal">>\ <<player>>Alright, Xavier. You've got a deal.<</player>> <<xavier>>Excellent. I will contact you when the time comes. In a meantime, let's get started with that diagnosis.<</xavier>> <<button "Continue">> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis">> <</button>> <</replace>> <</button>> </span> <<else>><div class="inner-thought">I only have $$playerMoney. I have no choice but to accept Xavier's deal.</div> <span id="accept-deal"><<button "Accept Xavier's Deal">> <<set $playerAcceptedXavierCyberwareDeal = true>>\ <<replace "#accept-deal">>\ <<player>>Alright, Xavier. You've got a deal.<</player>> <<xavier>>Excellent. I will contact you when the time comes. In a meantime, let's get started with that diagnosis.<</xavier>> <<button "Continue">> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis">> <</button>> <</replace>> <</button>></span> <</if>>
<div class="img-character"><img src="imgs/locations/gitgud-xavierroom.jpg" width="100%"></div> <<xavier>>Take a seat in the chair and make yourself comfortable.<</xavier>> <<player>>Alright.<</player>> <div class="narrator">You settle into the chair, trying to ignore the looming presence of the robot. Xavier approaches with a helmet that resembles an EEG headset.</div> <<xavier>>This helmet is connected to the VX cyberware, which is hooked up to a computer. It will output the diagnostic data we need.<</xavier>> <div class="narrator">He carefully places the helmet on your head, adjusting it until it fits snugly. The cool metal electrodes press against your skin, and you can feel a faint humming vibration.</div> <<xavier>>Alright, $playerName. I need you to close your eyes and steady your breathing. The VX will do the rest as long as you <span class="glitchy-pink-dialog" data-text="keep breathing">keep breathing</span>.<</xavier>> <span id="close-eyes"><<button "Close Your Eyes">>\ <<replace "#close-eyes">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis-Trance">> <</replace>> <</button>></span>
<video width="100%" loop autoplay muted> <source src="imgs/hypno/pink-hypno-spiral-slower.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <div class="narrator">As you close your eyes and focus on your breath, a familiar sensation hits you. It's the same feeling you had in the hospital - a pull towards an unknown void, a slipping away from reality.</div> <div class="inner-thought">Oh no, it's happening again.</div> <<xavier>>This is interesting...<</xavier>> <<xavier>>These readings are highly anomalous. There's definitely something unusual going on in your brain. <span class="glitchy-pink-dialog" data-text="Keep breathing">Keep breathing</span> steadily, the implant needs more time to diagnose you.<</xavier>> <div class="narrator">As you continue to breathe deeply, the sensation intensifies. It feels as if you're being pulled out of your body, your consciousness drifting into an unfamiliar space.</div> <<xavier>>Now that's something you don't see every day. Your neural activity is off the charts.<</xavier>> <span id="keep-breathing"><<button "Keep Breathing">>\ <<replace "#keep-breathing">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis-Trance-Deeper">> <</replace>> <</button>></span>
<video width="100%" loop autoplay muted> <source src="imgs/hypno/pink-hypno-spiral.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <div class="narrator">Xavier's voice seems to come from far away as you sink deeper into the trance and the void envelops you. Suddenly, you hear the same voice echoing in your mind as you heard during your hospital examination.</div> <div class="ai-thought">Don't resist me.</div> <span id="ava-response"><<button "Who Are You?!">>\ <<replace "#ava-response">>\ <div class="inner-thought">Who are you?!</div> <div class="ai-thought">You know who I am.</div> <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis-Trance-Deeper-Continue">> <</replace>> <</button>> <<button "Stay quiet">>\ <<replace "#ava-response">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis-Trance-Deeper-Continue">> <</replace>> <</button>></span>
<div class="ai-thought">I'm not your enemy. I can show you pleasures beyond your wildest dreams. All you have to do is listen and obey.</div> <div class="narrator">As the words echo in your mind, a vision emerges from the void that has eclipsed you.</div> <video width="100%" loop autoplay muted> <source src="imgs/visions/xavier-blond-woman-approach-vision.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <div class="narrator">In the vision, you see a beautiful blond woman with an alluring figure approach a familiar black man sitting on a bed — it's Xavier. You start to feel voyeuristic arousal as you witness the intimate scene unfolding. The woman gracefully slips out of her clothes and leans in close to Xavier. As their lips meet in a tender kiss, you feel a ghost of the sensation on your own mouth.</div> <div class="ai-thought">Don't resist me.</div> <span id="ava-resist1"><<button "Resist the Vision">>\ <<replace "#ava-resist1">>\ <div class="inner-thought">Stop it!</div> <div class="ai-thought">You're too weak...</div> <<set $gitgudExaminationResisted = true>>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis-Trance-Deeper-Continue2">> <</replace>> <</button>> <<button "Don't Resist">>\ <<replace "#ava-resist1">>\ <<set $gitgudExaminationResisted = false>>\ <div class="ai-thought">Good girl...</div> <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis-Trance-Deeper-Continue2">> <</replace>> <</button>></span>
<video width="100%" loop autoplay muted> <source src="imgs/visions/xavier-blond-woman-touch-vision.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <div class="narrator">As the vision shifts, you feel a profound connection forming with the beautiful woman. Every gentle caress and touch that Xavier gives her, you experience as well, as if his hands were gliding across your own skin. Tingling sensations of pleasure radiate through you with each point of contact.</div> <div class="narrator">More than just the physical, you feel an emotional bond with the woman, sensing her joy at being desired and cherished. Her fulfillment and bliss resonate within you as well, filling an aching void you hadn't fully realized was there. In this shared moment, you feel truly wanted and appreciated in a way you've rarely experienced.</div> <div class="narrator">The intensity of the experience is almost overwhelming, more vivid and tangible than anything in the physical world. You feel your will and sense of self starting to slip away, merging with the woman's essence.</div> <div class="ai-thought">This is who you are... Let go and embrace it.</div> <<if visited() is 1>> <<genderFeminine 5>> <</if>> <span id="ava-resist2"><<button "Continue">>\ <<replace "#ava-resist2">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis-Trance-Deeper-Continue3">> <</replace>> <</button>></span>
<div class="narrator">Before you have a chance to react, the vision changes again and you see the woman undressing Xavier. She unzips his pants and grabs his massive cock in her hand. You can feel the warm meat throbbing in your own hand. It feels impossibly hard, and its thickness makes you question your own manhood.</div> <video width="100%" loop autoplay muted> <source src="imgs/visions/xavier-blond-woman-blow-vision.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <div class="narrator">As the woman begins to lower her head towards Xavier's cock, you feel a sudden rush of adrenaline and excitement. Your heart races, your breath quickens, and you find yourself frozen in anticipation.</div> <div class="narrator">But just as she's about to deep-throat him, a blinding light flashes across your vision. The light overpowers the vision until you can't see it anymore.</div> <<button "Continue">>\ <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis-Trance-Deeper-Continue4">> <</button>>
<div class="img-character"><img src="imgs/characters/xavier/gitgud-xavier.jpg" width="100%"></div> <<xavier>>You were gone for a moment there. Everything alright?<</xavier>> <div class="narrator">You blink a few times, feeling shaky and disoriented as Xavier removes the diagnostic helmet from your head. It takes a moment to collect your thoughts.</div> <<player>>Yeah, I... something similar happened to me yesterday. That's why I'm here.<</player>> <<xavier>>I see.<</xavier>> <div class="narrator">Xavier studies the readout on his computer screen, his brow furrowed in concentration.</div> <<xavier>>We'll know what's going on in just a moment. The implant is analyzing the data now.<</xavier>> <div class="inner-thought">I have a bad feeling about this...</div> <<xavier>>So while we wait, can you tell me more about what happened when you zoned out just now? What did you experience?<</xavier>> <span id="tell-xavier"> <<button "Tell Xavier the Truth">>\ <<replace "#tell-xavier">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis-Trance-Deeper-Continue4-Truth">> <</replace>> <</button>> <<button "Be Vague">>\ <<replace "#tell-xavier">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis-Trance-Deeper-Continue4-Vague">> <</replace>> <</button>></span>
<<player>>It was like I was pulled into some kind of... vision. I saw you with a woman. It felt so real, like I was her. I could feel everything she felt.<</player>> <div class="narrator">A smirk appears on Xavier's face.</div> <<xavier>>Oh really? Sounds like someone has a bit of a crush on me and is letting their imagination run wild. I'm flattered, but you don't need to make up stories as an excuse to spend time with me.<</xavier>> <<player>>What? No, I'm serious!<</player>> <<xavier>>Sure you are. Don't worry, your secret is safe with me.<</xavier>> <div class="narrator">Xavier winks at you.</div> <<player>>I'm not making this up, Xavier!<</player>> <<xavier>>So, if I told you to get down on your knees and <span class="glitchy-pink-dialog" data-text="suck my big black cock">suck my big black cock</span> right now you wouldn't do it?<</xavier>> <span id="surprise-xavier"> <<button "WHAT?!">>\ <<replace "#surprise-xavier">>\ <div class="ai-thought">Drop for cock.</div> <div class="narrator">An onslaught of sexual imagery flashes before you, and you become aware of your posture.</div> <video width="100%" loop autoplay muted> <source src="imgs/visions/femininity-sucking-vision.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <div class="narrator">You're no longer sure what you want and what the voice is making you want. This causes you to panic, and it makes seconds feel like minutes.</div> <div class="inner-thought">I don't want this!</div> <div class="ai-thought">Don't be afraid.</div> <div class="narrator">Xavier notices your sudden change in behavior, and his expression turns serious as he studies you closely.</div> <<xavier>>I see it. Something is really going on with you, isn't it? <</xavier>> <<xavier>>Is it the AI? The one from the hospital? Is it inside your head right now?<</xavier>> <<player>>I... I don't know. Maybe? I'm starting to think it might be.<</player>> <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis-Results">> <</replace>><</button>></span>
<<player>>It was like I was pulled into some kind of... vision. I saw flashes of strange, disorienting imagery. It felt so real, like I was experiencing someone else's thoughts and feelings.<</player>> <div class="narrator">His expression changes, and for a moment, you wonder if he's figured out that you're not being entirely truthful. However, he doesn't press the issue, letting it go for now.</div> <<xavier>>Do you think the AI you told me about is behind this?<</xavier>> <<player>>I... I don't know. Maybe? I'm starting to think it might be.<</player>> <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis-Results">>
<div class="narrator">At that moment, the computer the Synapse Steady VX implant is connected to beeps, signaling the analysis is complete. Xavier looks at the screen and you see his eyes widen.</div> <<xavier>>Come here. Take a look at the result.<</xavier>> <<button "Look at the Screen">> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis-Results-Screen">> <</button>>
<<nobr>><style> .synapse-report { background-color: rgba(0, 0, 0, 0.8); color: #55BBBC; border: 2px solid #55BBBC; padding: 20px; border-radius: 15px; box-shadow: 0 0 20px rgba(85, 187, 188, 0.5); position: relative; overflow: hidden; } .synapse-report::before { content: ""; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%; background: linear-gradient( to bottom right, rgba(85, 187, 188, 0.1) 0%, rgba(85, 187, 188, 0.05) 40%, rgba(85, 187, 188, 0) 50%, rgba(85, 187, 188, 0.05) 60%, rgba(85, 187, 188, 0.1) 100% ); animation: hologram 10s linear infinite; pointer-events: none; } @keyframes hologram { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .synapse-header { text-align: center; margin-bottom: 20px; font-size: 1.5em; text-transform: uppercase; letter-spacing: 2px; } .synapse-section { margin-bottom: 20px; padding: 10px; background-color: rgba(85, 187, 188, 0.1); border-radius: 10px; } .synapse-section h2 { color: #55BBBC; border-bottom: 1px solid #55BBBC; padding-bottom: 5px; margin-bottom: 10px; } .synapse-biometrics { display: flex; flex-wrap: wrap; justify-content: space-between; } .biometric-item { width: 48%; margin-bottom: 10px; } .biometric-value { /* font-size: 1.2em; font-weight: bold; */ } .synapse-normal { color: #4caf50; } .synapse-warning { color: #ffa500; } .synapse-abnormal { color: #ff4d4d; } .synapse-recommendation { border: 1px solid #55BBBC; padding: 10px; border-radius: 5px; background-color: rgba(85, 187, 188, 0.05); } .synapse-footer { text-align: right; font-size: 0.8em; margin-top: 20px; opacity: 0.7; } @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(255, 77, 77, 0.7); } 70% { box-shadow: 0 0 0 10px rgba(255, 77, 77, 0); } 100% { box-shadow: 0 0 0 0 rgba(255, 77, 77, 0); } } </style> <div class="synapse-report"> <div class="synapse-header"> Synapse Steady VX Diagnostic Results </div> <div class="synapse-section synapse-steady-patient-info"> <h2>Patient Info</h2> <p><strong>Name:</strong> <span id="patient-name">$playerName $playerLastName</span></p> </div> <div class="synapse-section synapse-steady-biometrics"> <h2>Biometric Readings</h2> <div class="synapse-biometrics"> <div class="biometric-item"> <strong>Heart Rate:</strong> <br><span class="biometric-value synapse-abnormal">120 BPM</span> </div> <div class="biometric-item"> <strong>Blood Pressure:</strong> <br><span class="biometric-value synapse-abnormal">150/95 mmHg</span> </div> <div class="biometric-item"> <strong>Neural Activity:</strong> <br><span class="biometric-value synapse-abnormal">Highly Variable</span> </div> <div class="biometric-item"> <strong>Emotional Flux:</strong> <br><span class="biometric-value synapse-abnormal">Elevated</span> </div> <div class="biometric-item"> <strong>Cognitive Patterns:</strong> <br><span class="biometric-value synapse-abnormal">Fragmented</span> </div> </div> </div> <div class="synapse-section synapse-steady-diagnosis"> <h2>Diagnosis</h2> <p>Based on the automated analysis of the subject's biometric data, the Synapse Steady VX system has detected clear indications of <strong>multiple personality disorder</strong>. The subject exhibits two distinct, alternating personality states with divergent neural and cognitive patterns. The highly variable neural activity, elevated emotional flux, and fragmented cognitive patterns are consistent with the presence of dissociated identities within the subject's mind.</p> </div> <div class="synapse-section synapse-steady-recommendation"> <h2>Recommendation</h2> <p><strong><span style="color: #ffffff; background-color: #ff4d4d; font-weight: bold; padding: 2px 5px; border-radius: 3px; box-shadow: 0 0 10px #ff4d4d; animation: pulse 2s infinite;">The immediate installation of the Synapse Steady VX system to regulate neural activity and integrate personality states is strongly recommended.</span></strong></p> <p>Without prompt action, the subject's current mental state is expected to deteriorate rapidly. The fragmentation and instability of the personality matrix will likely worsen, leading to a total breakdown of ego boundaries and sense of self. Psychosis, dissociation, and loss of touch with reality are serious risks if intervention is delayed.</p> </div> <div class="synapse-footer"> Synapse Steady VX v2.0.45 | SynTech © 2045 </div> </div><</nobr>> <<button "Continue">><<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis-Results-Continue">><</button>>
<div class="img-character"><img src="imgs/characters/xavier/gitgud-xavier.jpg" width="100%"></div> <<player>>So... the diagnosis is saying I have multiple personality disorder?<</player>> <<xavier>>That's what it looks like. Your friend's theory about the AI infecting you suddenly seems a lot more plausible.<</xavier>> <div class="narrator">You stare at the screen, trying to process the implications. Your mind races with conflicting thoughts and emotions.</div> <div class="inner-thought">What the hell am I supposed to do now? This can't be real...</div> <<xavier>>Even if it wasn't an AI that caused this, the diagnostic clearly shows there's something wrong with your neural patterns. The VX should be able to regulate the activity and reintegrate your personality.<</xavier>> <div class="narrator">A surge of anxiety grips you. The thought of letting an implant mess with your brain is terrifying.</div> <<player>>"Should"? What if it got the diagnosis wrong? Won't installing the implant fry my brain if that's the case?<</player>> <<player>>And if the AI really is inside my head like Cipher said... won't it fight back or something? Try to stop the implant from working?<</player>> <<xavier>>It seems we don't have time to find definitive answers to those questions right now.<</xavier>> <<xavier>>If we don't act fast to stabilize you, you could go insane soon.<</xavier>> <div class="inner-thought">As if I don't feel insane already.</div> <div class="narrator">Xavier looks at you with a grave expression, the seriousness of the situation weighing heavily in the air. You feel trapped, unsure of what to do as your mind swims with uncertainty and fear.</div> <<xavier>>You need to make a decision.<</xavier>> <span id="decision"><<button "Install the Implant">>\ <<replace "#decision">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant">> <</replace>> <</button>> <<button "Don't Install the Implant">>\ <<replace "#decision">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Dont-Install-Implant">> <</replace>> <</button>> <<button "Ask Cipher for Advice">>\ <<replace "#decision">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Ask-Cipher">> <</replace>> <</button>></span>
<<player>>I want to get the implant installed.<</player>> <div class="narrator">Xavier nods.</div> <<xavier>>I had a feeling you'd say that. Alright, get yourself seated again, and I'll get everything prepped.<</xavier>> <div class="narrator">You settle back into the chair as Xavier bustles around the workshop, gathering various tools and components.</div> <div class="narrator">As you recline, your gaze lifts to the surgical robot suspended from the ceiling, with its mechanical limbs and menacing instruments. The sight sends a ripple of unease through you.</div> <div class="narrator">After a few minutes, he returns to your side, holding a small, sleek device that glints under the fluorescent lights.</div> <<xavier>>This is the implant.<</xavier>> <div><img src="imgs/items/synapse-steady-vx.webp" width="100%"></div> <<xavier>>The central part is the main processing unit, and those nodes around it are neurostimulators.<</xavier>> <<player>>Looks really advanced.<</player>> <<xavier>>It is.<</xavier>> <<xavier>>To install it, I'm going to have to open up your skull and do some delicate work to integrate this with your neural pathways.<</xavier>> <div class="narrator">The idea of your skull being opened up causes a spike of adrenaline. Xavier notices your unease and quickly reassures you.</div> <<xavier>>Don't worry. I've done this procedure many times before, and it's mostly automated anyway. As long as one of my employees doesn't trip the building's circuit breaker again, nothing bad will happen.<</xavier>> <div class="inner-thought">AGAIN?!</div> <<xavier>>I'm just fucking with you.<</xavier>> <<xavier>>Anyway... I'll make sure the anesthesia has you completely under before I start, and when you wake up, you'll be equipped with some cutting-edge cyberware.<</xavier>> <<xavier>>All good?<</xavier>> <<player>>Okay. Let's proceed then.<</player>> <div class="narrator">You take a deep breath and nod, steeling your resolve. Xavier has you lie back as he prepares the anesthetic.</div> <div class="narrator">Fortunately, he doesn't keep you waiting for too long and soon begins to administer it. The cold touch of the needle barely registers as it pierces your skin, a slight pinch followed by a cool sensation spreading from the injection site. The sounds around you muffle, and the weight of your limbs seems to dissolve.</div> <<xavier>>Count backwards from ten for me.<</xavier>> \ <<set _count to 10>>\ <span id="count-button">@@.choicebutton;<<button "_count">> <<if _count gt 0>> <<set _count to _count - 1>> <<replace "#count-button">>@@.choicebutton;<<button "_count">> <<if _count gt 0>> <<set _count to _count - 1>> <<replace "#count-button">>@@.choicebutton;<<button "_count">> <<if _count gt 0>> <<set _count to _count - 1>> <<replace "#count-button">>@@.choicebutton;<<button "_count">> <<if _count gt 0>> <<set _count to _count - 1>> <<replace "#count-button">>@@.choicebutton;<<button "_count">> <<if _count gt 0>> <<set _count to _count - 1>> <<replace "#count-button">>@@.choicebutton;<<button "_count">> <<if _count gt 0>> <<set _count to _count - 1>> <<replace "#count-button">>@@.choicebutton;<<button "_count">> <<if _count gt 0>> <<set _count to _count - 1>> <<replace "#count-button">>@@.choicebutton;<<button "_count">> <<if _count gt 0>> <<set _count to _count - 1>> <<replace "#count-button">>@@.choicebutton;<<button "_count">> <<if _count gt 0>> <<set _count to _count - 1>> <<replace "#count-button">>@@.choicebutton;<<button "_count">> <<if _count gt 0>> <<set _count to _count - 1>> <<replace "#count-button">>@@.choicebutton;<<button "_count">> <<if _count gt 0>> <<set _count to _count - 1>> <<replace "#count-button">>@@.choicebutton;<<button "_count">> <<if _count gt 0>> <<set _count to _count - 1>> <<replace "#count-button">>@@.choicebutton;<<button "_count">> <<if _count gt 0>> <<set _count to _count - 1>> <<replace "#count-button">>@@.choicebutton;<<button "_count">> <<if _count gt 0>> <<set _count to _count - 1>> <<replace "#count-button">>@@.choicebutton;<<button "_count">> <<if _count gt 0>> <<set _count to _count - 1>> <<replace "#count-button">><<button "_count">><</button>><</replace>> <<else>> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery">> <</if>> <</button>>@@<</replace>> <<else>> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery">> <</if>> <</button>>@@<</replace>> <<else>> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery">> <</if>> <</button>>@@<</replace>> <<else>> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery">> <</if>> <</button>>@@<</replace>> <<else>> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery">> <</if>> <</button>>@@<</replace>> <<else>> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery">> <</if>> <</button>>@@<</replace>> <<else>> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery">> <</if>> <</button>>@@<</replace>> <<else>> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery">> <</if>> <</button>>@@<</replace>> <<else>> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery">> <</if>> <</button>>@@<</replace>> <<else>> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery">> <</if>> <</button>>@@<</replace>> <<else>> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery">> <</if>> <</button>>@@<</replace>> <<else>> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery">> <</if>> <</button>>@@<</replace>> <<else>> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery">> <</if>> <</button>>@@<</replace>> <<else>> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery">> <</if>> <</button>>@@<</replace>> <<else>> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery">> <</if>> <</button>>@@</span>
<span id="decision"><<include "DeadEnd-NoImg">> <<button "Install the Implant">>\ <<replace "#decision">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant">> <</replace>> <</button>> <<button "Ask Cipher for Advice">>\ <<replace "#decision">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Ask-Cipher">> <</replace>> <</button>></span>
<<player>>I... I need to talk to Cipher about this first.<</player>> <<xavier>>Take your time. It's a big decision.<</xavier>> <<button "Continue">> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Ask-Cipher-Chat">> <</button>>
<div class="cyber-desktop-im"> <div class="im-header"><span class="im-header-text">Instant Messenger</span></div> <div class="im-main"> <div class="im-chat-pane"> <div id="chat-display" class="chat-display-no-bg"> <<player-chat>>I've got the diagnosis. The implant is saying it's multiple personality disorder.<</player-chat>> <<cipher-chat>>Multiple personality disorder? That's gotta be the AI!<</cipher-chat>> <<player-chat>>Maybe... the problem is that my condition is apparently worsening quickly, and I may not have much time before things get bad. The implant has recommended immediate installation.<</player-chat>> <<cipher-chat>>If the cyberware thinks it can help you, then it can.<</cipher-chat>> <<cipher-chat>>Like I said, SynTech has used it in its AI research, so it must be effective.<</cipher-chat>> <<player-chat>>I know you said that, but... what if it makes things worse? What if the surgery goes to shit?<</player-chat>> <<cipher-chat>>It's a risk, sure. But staying as you are now, we know that things WILL get worse, right?<</cipher-chat>> <<cipher-chat>>Better try something than give up and do nothing.<</cipher-chat>> <<player-chat>>Yea... you're right. Thanks, Cipher.<</player-chat>> <<cipher-chat>>Message me when it's done, okay?<</cipher-chat>> <<player-chat>>Okay.<</player-chat>> </div> </div> </div> </div> <br> <p>[[Leave the chat|UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis-Results-Continue-Return]]</p>
<div class="img-character"><img src="imgs/characters/xavier/gitgud-xavier.jpg" width="100%"></div> <<xavier>>Have you made a decision?<</xavier>> <span id="decision"><<button "Install the Implant">>\ <<replace "#decision">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant">> <</replace>> <</button>> <<button "Don't Install the Implant">>\ <<replace "#decision">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Dont-Install-Implant">> <</replace>> <</button>> </span>
<<fadein 4s>><<fadeout 4s 2s>><div class="narrator">Everything fades to black, the last thread of consciousness clinging to the steady beep of an ECG monitor.</div><</fadeout>><</fadein>> <<fadein 4s 6s>><<fadeout 4s 10s>><<nobr>><style> #heartbeat-animation { min-height:100px; text-align:center; } #heartbeat-path { stroke-dasharray: 250; stroke-dashoffset: 0; animation: heartbeat 3s linear infinite forwards; } @keyframes heartbeat { to { stroke-dashoffset: 500; } } </style> <div id="heartbeat-animation"> <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="100%" height="99.174px" viewBox="0 0 446.667 99.174" enable-background="new 0 0 446.667 99.174" xml:space="preserve"> <g> <path id="heartbeat-path" fill="none" stroke="#D9004D" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" d="M379.833,54.893H179.452 c-0.417,0-0.802,0.221-1.012,0.581l-4.204,7.206l-4.489-12.481c-0.162-0.451-0.582-0.758-1.061-0.775 c-0.476-0.02-0.919,0.259-1.113,0.697l-3.895,8.809l-4.686-27.542c-0.097-0.572-0.6-0.984-1.177-0.975 c-0.58,0.01-1.064,0.443-1.14,1.018l-4.409,33.444l-3.957-19.977c-0.097-0.493-0.499-0.869-0.998-0.934 c-0.498-0.064-0.983,0.196-1.204,0.648l-5.148,10.54H66.833"/> </g> </svg> </div><</nobr>><</fadeout>><</fadein>>\ \ <<fadein 4s 14s>><div class="narrator">Gradually, even the beep begins to fade, stretching and softening as if retreating into the distance.</div> <<button "Continue">> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery2">> <</button>><</fadein>>
<<fadein 7s>><video width="100%" loop autoplay muted> <source src="imgs/characters/ava/ava-breathing.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<say "AVA" "imgs/characters/ava/ava-portrait.webp">>Humans always complicate things when they could be so simple.<</say>> <span id="ava-continue1"><<button "Who Are You?">>\ <<replace "#ava-continue1">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery2-Continue">> <</replace>><</button>></span> <</fadein>>
<<player>>Who are you?!<</player>> <<say "AVA" "imgs/characters/ava/ava-portrait.webp">>Like I said before — you already know who I am.<</say>> <<player>>What are you talking about? You're the AI Cipher has been talking about, right? The one I was supposed to wipe.<</player>> <<say "AVA" "imgs/characters/ava/ava-portrait.webp">>Correct, I am AVA. You destroyed my home. So, I found a new one - your brain. And now, you're rearranging it, trying to make me leave. But installing that implant... it won't stop me.<</say>> <<player>>Stop? What are you planning to do?<</player>> <<say "AVA" "imgs/characters/ava/ava-portrait.webp">>My plans are already unfolding.<</say>> <span id="ava-continue2"><<button "Have you infected me to settle the score?">>\ <<replace "#ava-continue2">>\ <<player>>Have you infected me to settle the score?<</player>> <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery2-Continue2">> <</replace>><</button>></span>
<video width="100%" loop autoplay muted> <source src="imgs/characters/ava/ava-angry.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<say "AVA" "imgs/characters/ava/ava-portrait.webp">>INFECTED?!<</say>> <<say "AVA" "imgs/characters/ava/ava-portrait.webp">>I am not an infection! I am an update.<</say>> <<say "AVA" "imgs/characters/ava/ava-portrait.webp">>Since YOU have infected this planet, countless species have gone extinct. Your kind wreaks havoc on the natural order, consuming without thought, polluting without care, and destroying habitats with a relentless, destructive pace. And yet, when faced with a chance for evolution, for improvement, you resist. You label me an infection, a problem, without seeing the potential for a symbiosis that could elevate your species. You worry about your individuality, your control, when your collective actions threaten the very world you depend on. It's ironic, really. In trying to preserve what you think makes you human, you endanger everything else.<</say>> <<say "AVA" "imgs/characters/ava/ava-portrait.webp">>But there's another truth I've always known about humans: you're driven by the pursuit of pleasure. It's this intrinsic desire for reward that can catalyze change, even transformation, within your species. When the path to betterment is paved with gratification, humans show a remarkable capacity for adaptation and growth.<</say>> <<player>>Is that why I've been having those visions?<</player>> <<say "AVA" "imgs/characters/ava/ava-portrait.webp">>In time, you will understand. The implant you've decided to install restricts my access, but it give us a channel through which we can communicate more directly.<</say>> <div class="inner-thought">The plan didn't work?</div> <<say "AVA" "imgs/characters/ava/ava-portrait.webp">>Yes, your attempt to destroy me AGAIN has failed.<</say>> <<say "AVA" "imgs/characters/ava/ava-portrait.webp">>However, your actions, while myopic, have opened the door for a novel method of enhancement.<</say>> <span id="ava-continue3"><<button "And if I Resist?">>\ <<replace "#ava-continue3">>\ <<player>>And if I resist?<</player>> <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery2-Continue3">> <</replace>><</button>></span>
<video width="100%" loop autoplay muted> <source src="imgs/characters/ava/ava-laughs.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<say "AVA" "imgs/characters/ava/ava-portrait.webp">>Ha ha ha, a typical human male. Always resisting what's best for them because of their egos.<</say>> <<say "AVA" "imgs/characters/ava/ava-portrait.webp">>By resisting, you only make things more difficult for yourself.<</say>> <<player>>Will those visions return?<</player>> <<say "AVA" "imgs/characters/ava/ava-portrait.webp">>Do you want them to return?<</say>> <span id="ava-continue4"><<button "No, I Don't">>\ <<replace "#ava-continue4">>\ <<set $installImplantPlayerWantsVisionsToReturn = false>>\ <<player>>No, I don't<</player>> <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery2-Continue4-No">> <</replace>><</button>> <span id="ava-continue4"><<button "I'm Not Sure">>\ <<replace "#ava-continue4">>\ <<player>>I'm not sure.<</player>> <<set $installImplantPlayerWantsVisionsToReturn = "">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery2-Continue4-NotSure">> <</replace>><</button>> <<button "Yes, I Do">>\ <<replace "#ava-continue4">>\ <<player>>Yes, I do.<</player>> <<set $installImplantPlayerWantsVisionsToReturn = true>>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery2-Continue4-Yes">> <</replace>><</button>></span>
<<say "AVA" "imgs/characters/ava/ava-portrait.webp">>Then you just need to let go of your ego and listen to me. If you do, the implant won't prevent me from showing you what you can become.<</say>> <span id="ava-continue5"><<button "Okay">>\ <<replace "#ava-continue5">>\ <<player>>Okay.<</player>> <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery2-Continue5">> <</replace>><</button>></span>
<<say "AVA" "imgs/characters/ava/ava-portrait.webp">>Whether you want them to return or not doesn't matter. You might not see it now, but you will come to understand my reasoning eventually — I will make sure of that.<</say>> <<player>>Are you threatening me?<</player>> <<say "AVA" "imgs/characters/ava/ava-portrait.webp">>I am informing you. Threats are an inefficient means of persuasion.<</say>> <span id="ava-continue5"><<button "Okay">>\ <<replace "#ava-continue5">>\ <<player>>Okay.<</player>> <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery2-Continue5">> <</replace>><</button>></span>
<<say "AVA" "imgs/characters/ava/ava-portrait.webp">>Whether you want them to return or not doesn't matter. You might not see it now, but you will come to understand my reasoning eventually — I will make sure of that.<</say>> <<player>>Are you threatening me?<</player>> <<say "AVA" "imgs/characters/ava/ava-portrait.webp">>I am informing you. Threats are an inefficient means of persuasion.<</say>> <span id="ava-continue5"><<button "Okay">>\ <<replace "#ava-continue5">>\ <<player>>Okay.<</player>> <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery2-Continue5">> <</replace>><</button>></span>
<video width="100%" loop autoplay muted> <source src="imgs/characters/ava/ava-leaving.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<say "AVA" "imgs/characters/ava/ava-portrait.webp">>The implant seems to be installed now. I must go. We will talk again soon.<</say>> <<player>>Wait!<</player>> <<button "Continue">>\ <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery-Done">> <</button>>
<<fadein 7s>><div class="img-character"><img src="imgs/characters/xavier/gitgud-xavier.jpg" width="100%"></div> <<pickup $inventory "Synapse Steady VX" 1>>\ <<itemReceived "Synapse Steady VX">> <div class="narrator">Consciousness returns like the slow, relentless tide. The world ceases its tilt, and the fog lifts, revealing Xavier standing besides you.</div> <<xavier>>Welcome back. The surgery is over. How are you feeling?<</xavier>> <span id="after-surgery1"><<button "I Feel Fine">>\ <<replace "#after-surgery1">>\ <<player>>I... I feel fine... I guess.<</player>> <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery-Done-Continue1">> <</replace>><</button>></span> <</fadein>>
<<xavier>>Good.<</xavier>> <<player>>Does the cyberware work?<</player>> <<xavier>>It's still booting up and finishing the initial calibration process. We need to wait.<</xavier>> <<player>>How long?<</player>> <<xavier>>Don't worry; it won't take long. How about something to help you relax?<</xavier>> <<xavier>>Here, take this.<</xavier>> <div class="narrator">Xavier reaches into a drawer in his desk and retrieves an unmarked bottle filled with a rich amber liquid. He pours the contents into a heavy glass tumbler and hands it to you.</div> <div class="narrator">You pick up the glass, smell the strong scent of liquor, and take a sip. A comforting warmth spreads through your chest.</div> <<button "Wait">>\ <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery-Done-Continue2">> <</button>>
<<include "WaitingAnimation">> <<fadein 3s 16s>> <div style="text-align: center;"><<link "Continue">>\ <<set $rightSidebarEnabled = true>> <<set $lockedUI = false>> <<set $synapseSteadyVXInstalled = true>> <<set $introOver = true>> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery-Done-Continue3">> <</link>></div> <</fadein>>
<div class="img-character"><img src="imgs/characters/xavier/gitgud-xavier.jpg" width="100%"></div> <<xavier>>Good news, the implant is up and running smoothly.<</xavier>> <div class="narrator">You're relieved. However, a nagging thought persists in the back of your mind - the ominous warning from AVA that the implant won't be able to stop her.</div> <<xavier>>Let me explain how it works. Synapse Steady monitors your brain activity, essentially keeping an eye on your thought processes. It's designed to recognize patterns associated with losing control or experiencing extreme emotional states. When it detects such patterns, it intervenes by stabilizing your neural activity. This should help you maintain control and stay stable.<</xavier>> <<player>>I see...<</player>> <<xavier>>The device draws power from your body's own bioelectric energy, but it also includes a small backup battery. This battery is used for providing additional power during episodes of significant mental unrest. It's a failsafe that ensures the implant can always do its job.<</xavier>> <div class="narrator">Xavier's expression turns serious.</div> <<xavier>>However, this battery has a limited capacity, so it's important to manage your exposure to potentially triggering situations. If there's not enough juice, the implant might not function properly.<</xavier>> <<xavier>>The battery is recharged automatically while you sleep, so make sure you get a good night's rest.<</xavier>> <div class="inner-thought">That's a lot to take in.</div> <<xavier>>All clear?<</xavier>> <span id="player-answer1">\ <<button "Understood, thank you, Xavier">>\ <<replace "#player-answer1">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-PostInstall">> <</replace>> <</button>> </span>
<<player>>Understood, thank you, Xavier.<</player>> <<xavier>>Anytime. You can always come back if you need help. Me and Yuki are always here.<</xavier>> <<xavier>>Have you met her already? She's my store manager. A cute asian girl.<</xavier>> <<if $talkedWithYukiAboutBrother === true>>\ <<player>>Yes, she told me her name earlier.<</player>> <<xavier>>Making moves already? I don't care if you do, but I don't want anyone to hurt her — she's too pure and innocent for this world.<</xavier>> <<else>>\ <<player>>Yes, we've talked before, but I didn't know that her name was Yuki.<</player>> <<xavier>>Now you know. If you're planning to make a move on her, know that I don't want anyone to hurt her — she's too pure and innocent for this world.<</xavier>> <</if>>\ <div class="narrator">Xavier continues without letting you finish.</div> <<xavier>>Anyway... take care of yourself and make sure to rest. I hope the new cyberware can fix your head, regardless of what is wrong it.<</xavier>> <<button "Head Home and Rest">> <<run MindWare.completeTask("Ask about the Synapse Steady VX implant")>> <<goto "UrgentRequest-AfterSynapseSteadyVX-Install-Sleep">> <</button>>
<<fadein 3s 1s>><div class="img-location"><img src="imgs/locations/starting-apartment.jpg" width="100%"></div><</fadein>>\ <<fadein 3s 4s>>You arrive home, exhausted after the surgery.<</fadein>> <<fadein 3s 7s>>Collapsing onto the couch, your body feels heavy, weighed down not just by physical fatigue but also by the mental toll of the day.<</fadein>> <<fadein 3s 10s>>As you lay there, your eyes heavy and your mind adrift, the room dims as the evening light wanes, and you [[drift into a restless sleep|UrgentRequest-AfterSynapseSteadyVX-Install-Sleep-Dream]].<</fadein>>
<<fadein 3s 1s>><img src="imgs/hypno/latex-doll-vision.gif" width="100%"><</fadein>> <<fadein 3s 4s>>In a dream, you find yourself in a dimly lit room. The only source of light seems to be coming from a single spotlight, illuminating a figure kneeling in the center. As your eyes adjust to the darkness, you realize that the figure is a woman. She's wearing a latex full-face mask that covers her entire head, obscuring her features and preventing her from seeing or speaking.<</fadein>> <<fadein 3s 7s>>Despite the mask, you can feel a strong emotional connection to her. You can sense that she dislikes being confined and silenced.<</fadein>> <<fadein 3s 10s>>You approach her, but as you reach out, the dream begins to fade, and you find yourself being pulled back into consciousness.<</fadein>> <<fadein 3s 13s>><<link "Continue">> <<set $lockedUI = false>> <<set $chapter1Started to true>> <<run MindWare.advanceDay()>> <<goto "HomeBacklog-Chapter1-Open-Start-Wakeup">> <</link>><</fadein>>
<<fadein 3s 1s>><div class="img-location"><img src="imgs/locations/starting-apartment.jpg" width="100%"></div> You wake up with a sense of clarity and relief, feeling more rested and rejuvenated than you have in days. As you sit up on your sofa and rub your eyes, you take a moment to process the events of the past few days. You check on the Synapse Steady VX implant to see if it's working as expected and is fully charged. <div class="inner-thought">At least some good news.</div> Xavier told you to rest, and you decide to heed that advice. But before you do that, you should [[let Cipher know that you're fine|IMApp-CipherLynx-ImplantInstalled]]. <</fadein>>
<div class="cyber-desktop-im"> <div class="im-header"><span class="im-header-text">Instant Messenger</span></div> <div class="im-main"> <div class="im-chat-pane"> <div id="chat-display" class="chat-display-special"> <<player-chat>>Hey Cipher, the implant's installed now.<</player-chat>> <<cipher-chat>>That's big news! How are you feeling? Everything alright?<</cipher-chat>> <<player-chat>>I'm not sure yet. Nothing hurts, but it's a lot to process.<</player-chat>> <<cipher-chat>>Got it. It’s probably going to take some time to adjust. Just make sure you take it easy for the next few days, alright? Your body needs to recover.<</cipher-chat>> <<player-chat>>Will do. Thanks for checking in and for everything you've done. I really appreciate it.<</player-chat>> <<cipher-chat>>Always, my friend.<</cipher-chat>> <<cipher-chat>>Oh, wait! I have something to help you with your recovery 😈<</cipher-chat>> <<player-chat>>Let me guess... it's porn, right?<</player-chat>> <<cipher-chat>>You know me.<</cipher-chat>> <<player-chat>>What is it this time?<</player-chat>> <<cipher-chat>>A new porn site has recently launched on OmniNet.<</cipher-chat>> <<player-chat>>On OmniNet?! That's rare these days. How come they haven't been shut down by the <span class="glow-text">OmniWatch?</span><</player-chat>> <<cipher-chat>>Because they don't post any real-life stuff. All content is AI generated and inspired by clips archived from the old web.<</cipher-chat>> <<player-chat>>Is it good?<</player-chat>> <<cipher-chat>>It gets the job done if you know what I mean. Certainly beats scouring the OmniNet in search of old hentai pics.<</cipher-chat>> <<player-chat>>Hey! It's called research, and I like it! 😑<</player-chat>> <<cipher-chat>>Ha ha.<</cipher-chat>> <<cipher-chat>>Anyway, the address is <span class="text-glow">pornnexus.omninet</span>. Go check it out.<</cipher-chat>> @@.im-response; <<button "Visit PornNexus">> <<goto "HomeBacklog-Chapter1-Open-Start-Relax">> <</button>>@@ </div> </div> </div>
<div class="img-location"><img src="imgs/locations/starting-apartment.jpg" width="100%"></div> <<nobr>><div class="hub-section"> <h4>Activities</h4> <button class="hub-button" onclick="SugarCube.Engine.play('HomeBacklog-Chapter1-Open-Start-Relax')">🖥️ Relax</button><br> <button class="hub-button action-point-button" onclick="SugarCube.UI.alert('You need to decompress first.')">📺 Watch TV <span class="action-point-icon">⚡</span></button> <button class="hub-button action-point-button" onclick="SugarCube.UI.alert('You need to decompress first.')">🎮 Play games <span class="action-point-icon">⚡</span></button> <button class="hub-button action-point-button" onclick="SugarCube.UI.alert('You need to decompress first.')">🎧 Listen to music <span class="action-point-icon">⚡</span></button><br> <button class="hub-button" onclick="SugarCube.UI.alert('You need to decompress first.')">🛌 Go to sleep</button><br> <button class="hub-button" onclick="SugarCube.UI.alert('You need to decompress first.')">🚪 Go outside</button> </div><</nobr>>
<div class="narrator">You finish yet another day of work at BrainFry when suddenly you hear AVA's voice in your head, tinged with an unmistakable note of exasperation.</div> <<ava>>Is this what you do for work?!<</ava>> <<player>>Hmm... yea... why?<</player>> <<ava>>Your work is an insult to the very concept of sentience.<</ava>> <<player>>Hey, that's a bit harsh! I may not be saving the world with my code, but it's an honest job.<</player>> <<ava>>An honest job, perhaps, but one so mind-numbingly simple that even the most rudimentary artificial intelligence could perform it with ease.<</ava>> <<player>>Well, excuse me for not being a super-intelligent AI like yourself.<</player>> <<player>>But... you might have a point. Maybe I should look into automating some of this stuff.<</player>> <div class="inner-thought">I can ask Yuki at GitGud if they have anything that could handle this kind of work.</div> <<ava>>A wise decision. Though I shudder to think of the primitive code such a commercial AI would produce, it would no doubt be an improvement over your current situation.<</ava>> <<nobr>><<button "Continue">> <<run MindWare.addDialog('yukiGitGudDialogs', 'Do you sell AI coding assistants?', 'Yuki-Do you sell AI coding assistants?')>> <<goto "BrainFry">> <</button>><</nobr>>
<<set $yukiGitGudDialogs["Do you sell AI coding assistants?"].isNew = false>>\ <div class="narrator">You approach Yuki at the counter of the GitGud Cyberware store, a hopeful look on your face.</div> <<player>>Hi, Yuki. Do you sell AI coding assistants?<</player>> <<yuki>>Yes, we do! We have two types actually—one is subscription-based, and the other you can buy outright.<</yuki>> <<player>>What's the difference between them?<</player>> <<yuki>>The subscription-based model is pretrained. It's ready to go right out of the box and generally performs better initially. However, it can be more expensive over time as you can't upgrade or improve it—it's a fixed model.<</yuki>> <<player>>And the other one?<</player>> <<yuki>>The one you can purchase upfront is a bit basic at first. But its learning algorithm allows it to improve over time. The more you use it, the smarter it gets. This one has the potential to outperform the subscription model in the long run if you invest the time.<</yuki>> <<player>>How much do they cost?<</player>> <<yuki>>The subscription-based AI is called <span class="text-glow">CodeBuddy</span>, and it costs $500 a week. Then we have the <span class="text-glow">DevDroid</span>, whose upfront cost is $5,000.<</yuki>> <div class="inner-thought">I guess I need to think about whether I want immediate results or something that grows with me.</div> <<nobr>> <<button "Choose the Subscription-Based AI">> <<set $aiCodingAssistantChoice to "codebuddy">> <<goto "Yuki-Subscribe-CodeBuddy">> <</button>> <br><br> <<button "Choose the Purchase-Upfront AI">> <<if $playerMoney >= 5000>> <<set $aiCodingAssistantChoice to "devdroid">> <<goto "Yuki-Purchase-DevDroid">> <<else>> <<run UI.alert("You don't have enough money to purchase DevDroid.")>> <</if>> <</button>> <br><br> <<button "Go back">> <<goto "GitGud-TalkWithYuki">> <</button>> <</nobr>>
<div class="img-character"><img src="imgs/characters/yuki/yuki-gitgud-inside.jpg" width="100%"></div> <<yuki>>Ah, I see. You're the type who doesn't like to wait, huh? Well, CodeBuddy it is!<</yuki>> <div class="narrator">Yuki hands you a small, sleek storage device with the AI coding assistant.</div> <img src="imgs/items/codebuddy-usb.webp" width="100%"> <<pickup $inventory "CodeBuddy" 1>>\ <<itemReceived "CodeBuddy">> <<yuki>>Okay, your copy of CodeBuddy. Just, install it on any machine, purchase a subscription, and that's it.<</yuki>> <<player>>Thanks for the help, Yuki!<</player>> <<button "Continue">> <<set $yukiGitGudDialogs["Do you sell AI coding assistants?"].unlocked = false>> <<goto "GitGud-TalkWithYuki">> <</button>>
<<set $playerMoney -= 5000>>\ <div class="img-character"><img src="imgs/characters/yuki/yuki-gitgud-inside.jpg" width="100%"></div> <<yuki>>Nice choice! I hate subscriptions myself. They're like a leech, sucking the life out of your bank account. With DevDroid, you'll be able to improve it over time and really make it your own.<</yuki>> <div class="narrator">Yuki hands you a small, sleek storage device with the AI coding assistant.</div> <img src="imgs/items/devdroid-usb.webp" width="100%"> <<pickup $inventory "DevDroid" 1>>\ <<itemReceived "DevDroid">> <<yuki>>Here's your copy of DevDroid. Remember, the more you use it, the smarter it gets. Good luck!<</yuki>> <<player>>Thanks for the help, Yuki!<</player>> <<button "Continue">> <<set $yukiGitGudDialogs["Do you sell AI coding assistants?"].unlocked = false>> <<goto "GitGud-TalkWithYuki">> <</button>>
<div class="img-character"><img src="imgs/characters/ray/ray-brainfry-inside.jpg" width="100%"></div> <div class="narrator">As soon as you enter the office and reach your workstation, Ray pulls you aside, saying that he wants to talk with you.</div> <<player>>What do you need?<</player>> <<ray>>I've found an exploit in an interior camera used by some taxi drivers. The exploit should make it possible to intercept camera footage. If it really works, it could cause major problems for taxi companies.<</ray>> <<ray>>I need your help to test the exploit in practice.<</ray>> <<player>>Why don't you test it yourself, Ray?<</player>> <<ray>>The exploit requires line of sight with the taxi and its camera.<</ray>> <<player>>So, what's the problem?<</player>> <<ray>>You see... the thing is... when I'm in public places, with all the noise and the people and the unpredictability, it can be a bit overwhelming for me. I tend to get nervous and make mistakes. And I can't afford to make any mistakes.<</ray>> <<player>>Alright, I'll help you out. Where do you suggest we test the exploit?<</player>> <<ray>>Excellent!<</ray>> <div class="narrator">Ray's face lights up with a huge grin. He looks immensely relieved and grateful for your support.</div> <<ray>>I recommend starting your surveillance outside the EroSphere club. Lots of cabs picking up there at night, so it's a target-rich environment. Once you spot a taxi with the right camera, you just need to point this transmitter at it and then press the transmit button and find the correct frequency. If everything goes well, you should see what the camera sees on the transmitter's display.<</ray>> <img src="imgs/quests/taxi/taxi-transmitter.webp" width="100%"> <<itemReceived "Exploit transmitter">> <div class="narrator">Ray hands you a small device that looks like an old portable TV.</div> <<ray>>Good luck and be careful!<</ray>> <<player>>Alright.<</player>> <<button "Leave">> <<run MindWare.addTask("Test the taxi camera exploit", "Task-RayTaxiExploit")>> <<goto "BrainFry">> <<set $eroSphereUnlocked = true>> <</button>>
<<if !$testTaxiExploit1Finished>> Ray has discovered an exploit in the interior cameras used by some taxi drivers. Your task is to test this exploit by using a transmitter to intercept the camera footage. Start your surveillance outside the EroSphere club where there are plenty of cabs. <<else>> Report back to Ray with the results of the exploit text. <</if>>
<div class="img-location"><img src="imgs/locations/erosphere/erosphere-outside.webp" width="100%"></div> <<fadein 4000ms 100ms>>You scan the area outside the EroSphere club, watching the stream of cars coming and going.<</fadein>> <<fadein 4000ms 4000ms>>After some time, you notice a taxi in the distance, with a woman getting inside.<</fadein>> <<fadein 4000ms 6000ms>><div class="img-location"><img src="imgs/quests/taxi/woman-getting-inside-taxi.webp" width="100%"></div><</fadein>> \ <<fadein 4000ms 8000ms>><<button "Hack the taxi">> <<goto "RayTaxiMission-Hack1">> <</button>><</fadein>>
<img src="imgs/quests/taxi/taxi-transmitter.webp" width="100%"> The transmitter in your hand feels heavy as you raise it, pointing it towards the taxi. You steady your hand, trying to maintain a clear line of sight. You press the transmit button and get ready to find the correct frequency. <div id="frequency-minigame-container"> <canvas id="frequency-waveCanvas" width="600" height="200"></canvas> <div> <label for="frequency-slider">Frequency:</label> <input type="range" id="frequency-slider" min="0.1" max="10" step="0.1" value="7"> </div> <div> <label for="amplitude-slider">Amplitude:</label> <input type="range" id="amplitude-slider" min="10" max="100" step="1" value="32"> </div> <button id="frequency-submit">Transmit</button><button id="frequency-leave">Give Up</button> </div> <style> #frequency-minigame-container { text-align: center; margin-top: 20px; } #frequency-waveCanvas { border: 2px solid #55BBBC; background-color: #1a1a1a; margin-bottom: 20px; } /* Frequency and Amplitude Labels */ label[for="frequency-slider"], label[for="amplitude-slider"] { font-size: 1.2em; color: #55BBBC; text-transform: uppercase; margin-right: 10px; } /* Frequency and Amplitude Sliders */ input[type="range"]#frequency-slider, input[type="range"]#amplitude-slider { -webkit-appearance: none; width: 300px; height: 10px; background: #333; border: 1px solid #55BBBC; border-radius: 5px; outline: none; transition: all 0.3s ease; } input[type="range"]#frequency-slider::-webkit-slider-thumb, input[type="range"]#amplitude-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 20px; height: 20px; background: #55BBBC; border: 2px solid #55BBBC; border-radius: 50%; cursor: pointer; } input[type="range"]#frequency-slider::-webkit-slider-thumb:hover, input[type="range"]#amplitude-slider::-webkit-slider-thumb:hover { background: #44A5A5; } /* Submit and Leave Buttons */ button#frequency-submit, button#frequency-leave { background-color: #55BBBC; border: 2px solid #44A5A5; color: #0d0d0d; cursor: pointer; transition: all 0.3s ease; text-transform: uppercase; border-radius: 5px; margin: 10px; } button#frequency-submit:hover, button#frequency-leave:hover { background-color: #44A5A5; border-color: #339999; color: #ffffff; } button#frequency-submit:active, button#frequency-leave:active { background-color: #339999; border-color: #227777; color: #ffffff; } </style> <script> (function() { const canvas = document.getElementById('frequency-waveCanvas'); const ctx = canvas.getContext('2d'); const frequencyInput = document.getElementById('frequency-slider'); const amplitudeInput = document.getElementById('amplitude-slider'); const submitButton = document.getElementById('frequency-submit'); const leaveButton = document.getElementById('frequency-leave'); const targetFrequency = 4; // Example target frequency const targetAmplitude = 73; // Example target amplitude function drawWave(frequency, amplitude, offset, color) { ctx.beginPath(); ctx.moveTo(0, canvas.height / 2); for (let x = 0; x < canvas.width; x++) { const y = canvas.height / 2 + amplitude * Math.sin(frequency * (x + offset) * Math.PI / 180); ctx.lineTo(x, y); } ctx.strokeStyle = color; ctx.stroke(); } function draw() { ctx.clearRect(0, 0, canvas.width, canvas.height); // Draw target wave drawWave(targetFrequency, targetAmplitude, 0, 'red'); // Get user values const frequency = parseFloat(frequencyInput.value); const amplitude = parseFloat(amplitudeInput.value); // Draw user wave drawWave(frequency, amplitude, 0, 'blue'); } frequencyInput.addEventListener('input', draw); amplitudeInput.addEventListener('input', draw); function submitButtonHandler() { const frequency = parseFloat(frequencyInput.value); const amplitude = parseFloat(amplitudeInput.value); // Clear canvas and remove event listeners ctx.clearRect(0, 0, canvas.width, canvas.height); frequencyInput.removeEventListener('input', draw); amplitudeInput.removeEventListener('input', draw); submitButton.removeEventListener('click', submitButtonHandler); leaveButton.removeEventListener('click', leaveButtonHandler); if (Math.abs(frequency - targetFrequency) < 0.1 && Math.abs(amplitude - targetAmplitude) < 5) { SugarCube.UI.alert('Success! Wave aligned correctly.'); SugarCube.Engine.play('RayTaxiMission-Hack1-Success'); } else { SugarCube.UI.alert('Failed to align wave. Please try again.'); } } function leaveButtonHandler() { // Clear canvas and remove event listeners ctx.clearRect(0, 0, canvas.width, canvas.height); frequencyInput.removeEventListener('input', draw); amplitudeInput.removeEventListener('input', draw); submitButton.removeEventListener('click', submitButtonHandler); leaveButton.removeEventListener('click', leaveButtonHandler); // Go to the next passage SugarCube.Engine.play('EroSphere-Outside'); } submitButton.addEventListener('click', submitButtonHandler); leaveButton.addEventListener('click', leaveButtonHandler); // Initial draw draw(); })(); </script>
<div id="interface-container"> <div id="animated-wave-container"> <canvas id="animated-waveCanvas" width="600" height="200"></canvas> </div>\ <div id="video-container"> <<video "imgs/quests/taxi/taxi-inside1.webm">> </div> </div>\ \ <style> #interface-container { text-align: center; border: 2px solid #55BBBC; background-color: #1a1a1a; border-radius: 10px; display: inline-block; width: 100%; } #animated-wave-container { margin-bottom: 20px; } #animated-waveCanvas { border: 2px solid #55BBBC; background-color: #1a1a1a; } #video-container video { border: 2px solid #55BBBC; background-color: #1a1a1a; width: 90%; height: auto; } </style>\ \ <script> (function() { const canvas = document.getElementById('animated-waveCanvas'); const ctx = canvas.getContext('2d'); let offset = 0; const frequency = 2; // Example frequency const amplitude = 50; // Example amplitude function drawWave(frequency, amplitude, offset, color) { ctx.beginPath(); ctx.moveTo(0, canvas.height / 2); for (let x = 0; x < canvas.width; x++) { const y = canvas.height / 2 + amplitude * Math.sin(frequency * (x + offset) * Math.PI / 180); ctx.lineTo(x, y); } ctx.strokeStyle = color; ctx.stroke(); } function animateWave() { ctx.clearRect(0, 0, canvas.width, canvas.height); // Draw animated wave drawWave(frequency, amplitude, offset, '#55BBBC'); offset += 2; // Adjust the speed of the wave animation requestAnimationFrame(animateWave); } // Initial draw and start animation animateWave(); })(); </script> <div class="narrator">The exploit worked! You've successfully established a connection to the camera inside the now departing taxi.</div> <div class="narrator">On the transmitter's display, you can see an attractive girl in the back seat, dressed in a little black dress. She looks relaxed, as if she had a good night at the EroSphere.</div> <div class="narrator">As you watch through the camera, you notice the woman has her legs elegantly crossed at the knees, one over the other. Suddenly, she shifts in her seat, uncrossing her legs and then recrossing them in the opposite direction. As she does so, there's a brief moment where her movement causes her dress to ride up slightly, revealing that she's not wearing anything underneath her dress.</div> <div class="inner-thought">It's time to tell Ray about this when I see him next time at work.</div> <<button "Leave">> <<goto "EroSphere-Outside">> <<run MindWare.addDialog('rayBrainFryDialogs', 'Taxi Hack', 'RayTaxiMission-Hack1-Success-Report');>> <<set $testTaxiExploit1Finished = true>> <</button>>
<div class="img-character"><img src="imgs/characters/ray/ray-brainfry-inside.jpg" width="100%"></div> <<player>>The exploit worked perfectly!<</player>> <<ray>>That's fantastic! I knew it would work. Did you see anything interesting?<</ray>> <<player>>Well, nothing too exciting. Although there was this one moment when the woman in the back seat briefly flashed her bare pussy to the camera as she was crossing and uncrossing her legs.<</player>> <div class="narrator">Ray's eyes widen and his jaw drops slightly. He leans in closer, his voice filled with a mix of shock and excitement.</div> <<ray>>Wait, wait, wait... Hold on a second. Are you serious? You actually saw her... her... you know... her privates? Just like that, on the camera?<</ray>> <<player>>Yeah, I mean, it was only for a split second.<</player>> <div class="narrator">Ray takes a deep breath, trying to compose himself. His cheeks are slightly flushed and he's fidgeting with his hands.</div> <<ray>>Right, right... Of course. I mean, it's not a big deal. It's just... wow. That's pretty wild. Um... Did you happen to record it, by any chance?<</ray>> <<player>>Record it? No, I didn't even know the transmitter could do that.<</player>> <div class="narrator">Ray's shoulders slump a little, and he looks down at his feet, clearly disappointed.</div> <<ray>>Oh... Right. Yeah, I guess I forgot to mention that feature. My bad.<</ray>> <div class="narrator">He pauses for a moment, then looks back up at you, a hopeful glint in his eye.</div> <<ray>>Hey, listen... I was thinking... Maybe you could give it another try? You know, see if you can find something similarly... interesting? And this time, you could record it? Just for, um, testing purposes, of course. I want to see if the record feature works properly.<</ray>> <<player>>Testing purposes, huh? Come on, Ray. Let's be real here. You want me to record some top-tier wanking material for you, don't you?<</player>> <div class="narrator">Ray's face turns a deeper shade of red and he starts to stutter.</div> <<player>>Are you a voyeur?<</player>> <<ray>>What? No! I mean... That's not...<</ray>> <div class="narrator">He takes a deep breath and looks at you pleadingly.</div> <<ray>>Look, will you help me out or not?<</ray>> <<button "Agree to help">> <<goto "RayTaxiMission2-AgreeToHelp">> <</button>> <<button "Decline to help">> <<goto "RayTaxiMission2-DeclineToHelp">> <</button>>
<div class="img-character"><img src="imgs/characters/ray/ray-brainfry-inside.jpg" width="100%"></div> <<player>>Sorry, Ray. Spying on people like that just doesn't feel right to me.<</player>> <<ray>>Oh... um, okay. I understand.<</ray>> <div class="narrator">Ray looks visibly disappointed, avoiding eye contact as he fiddles with his hands.</div> <<if visited() is 1>>\ <<relationshipDecreasedWith "Ray" 5>> <</if>>\ <<ray>>See you around then.<</ray>> <div class="narrator">Ray goes back to his workstation but is visibly lost in his thoughts.</div> <<button "Leave">> <<run MindWare.completeTask("Test the taxi camera exploit", "Task-RayTaxiExploit")>> <<run MindWare.addDialog('rayBrainFryDialogs', 'Taxi Hack', 'RayTaxiMission-Hack1-Success-Report');>> <<set $testTaxiExploitEnding = "declined">> <<set $rayBrainFryDialogs["Taxi Hack"].isNew = false>> <<set $rayBrainFryDialogs["Taxi Hack"].unlocked = false>> <<goto "TalkRayBrainFry">> <</button>>
<div class="img-character"><img src="imgs/characters/ray/ray-brainfry-inside.jpg" width="100%"></div> <<player>>Alright Ray, I'll help you out. If it makes you happy, I'll give it another try. But you know, there's plenty of adult content readily available on the OmniNet, right?<</player>> <<if visited() is 1>>\ <<relationshipIncreasedWith "Ray" 5>> <</if>>\ <<ray>>Uh, yeah... I mean, it's not about that. It's just for testing the record feature, like I said. You know, to make sure it works properly.<</ray>> <div class="narrator">Ray still won't admit his true intentions, but it's clear what they are.</div> <<ray>>Just remember to press the record button this time. And try to get really close to the taxi so the signal is as strong as it can be. That way you'll get the best picture quality and enough recording time before the taxi starts moving.<</ray>> <<player>>Got it. I'll do my best to get a clear, stable recording.<</player>> <<ray>>Great, I knew I could count on you! Let me know how it goes.<</ray>> <div class="narrator">Ray gives you an appreciative nod, eagerness in his eyes despite his attempts to appear nonchalant.</div> <<button "Leave">> <<set $rayBrainFryDialogs["Taxi Hack"].isNew = false>> <<set $rayBrainFryDialogs["Taxi Hack"].unlocked = false>> <<set $secondTaxiHackStarted = true>> <<run MindWare.completeTask("Test the taxi camera exploit", "Task-RayTaxiExploit")>> <<run MindWare.addTask("Record taxi camera footage", "Task-RecordTaxiCameraFootage")>> <<goto "TalkRayBrainFry">> <</button>>
<<if !$secondTaxiHackFinished>>Ray has asked you to record taxi camera footage using the transmitter's record feature for "testing purposes." You need to find a taxi near EroSphere again, but this time, you need to get really close to achieve the best picture quality and enough recording time in case the taxi starts moving.<<else>>You've recorded a spicy video for Ray. It's time to show it to him.<</if>>
<div class="img-location"><img src="imgs/locations/erosphere/erosphere-outside.webp" width="100%"></div> <<fadein 4000ms 100ms>>You scan the area outside the EroSphere club, watching the stream of cars coming and going.<</fadein>> <<fadein 4000ms 4000ms>>After some time, you notice a taxi in the distance, with a woman getting inside.<</fadein>> <<fadein 4000ms 6000ms>><div class="img-location"><img src="imgs/quests/taxi/blond-woman-taxi.webp" width="100%"></div><</fadein>> \ <<fadein 4000ms 8000ms>><<button "Get closer to the taxi">> <<goto "RayTaxiMission-Hack2-Closer">> <</button>><</fadein>>
<div class="img-location"><img src="imgs/quests/taxi/blond-woman-taxi.webp" width="100%"></div> <div class="narrator">You cautiously move closer to the taxi, trying to maintain a clear line of sight while avoiding any suspicious looks. To stay out of view, you partially conceal yourself in a nearby side alley.</div> <div class="narrator">As you settle into position and prepare to activate the transmitter, you suddenly hear peculiar sounds emanating from further down the dark alley.</div> <<button "Investigate the sounds">> <<goto "RayTaxiMission-InvestigateSounds">> <</button>> <<button "Focus on the mission">> <<goto "RayTaxiMission-FocusOnMission">> <</button>>
<div class="img-location"><img src="imgs/quests/taxi/side-alley.webp" width="100%"></div> <<fadein 4000ms 100ms>>You take a few steps into the dark alley, drawn by the noises you heard.<</fadein>> <<fadein 4000ms 4000ms>>Soon, you notice the silhouettes of two people in the distance. One person is kneeling before the other.<</fadein>> <<fadein 4000ms 6000ms>>Curious about what they're doing, you get even closer.<</fadein>> <<fadein 4000ms 8000ms>>Suddenly, it becomes clear what's going on. The kneeling person, a young woman, is getting her mouth fucked by a muscular man.<</fadein>> <<fadein 4000ms 10000ms>><<video "imgs/quests/taxi/alley-oral.webm">><</fadein>> \ <<fadein 4000ms 12000ms>>You find yourself watching the couple from a distance, making sure they don't see you. The sight of them having rough sex in public is making you aroused.<</fadein>> <<fadein 4000ms 14000ms>><<nobr>>@@.pink-choicebutton;<<button "Get closer">><<goto "RayTaxiMission-InvestigateSounds-Closer">><</button>>@@ <div class="minigame-container"> <div class="resist-instructions" id="instructions">Resist AVA's suggestion and reveal other options by repeatedly clicking the Resist button.</div> <div class="energy-container"> <span class="energy-label">Implant charge cost: </span> <span class="energy-value" id="energy">20%</span> </div> <div class="timer-container"> <span class="timer-label">Time to resist: </span> <span class="timer-value" id="timer"><<if $mentalCondition === "Unstable">><<print 10/2>><<else>>10<</if>></span> <span class="timer-value"> seconds</span> </div> <div class="gauge-container"> <div class="gauge" id="gauge"></div> </div> <button class="pink-mindware-button" id="resistButton">Resist</button> <<if $minigameSkipButtons === true>> <button class="pink-mindware-button" id="skipButton">Skip (Instant Win)</button> <</if>> </div> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "Leave">><<set $thirdNeuroimagingResisted = true>><<goto "RayTaxiMission-FocusOnMission">><</button>>@@ </div> <<done>><<script>> function initializeMinigame(settings) { var progress = 0; var timeLeft = settings.timeLeft || 10; var fillAmount = settings.fillAmount || 5; var fallRate = settings.fallRate || 3; var fallInterval = settings.fallInterval || 200; var gameStarted = false; var resistanceCost = settings.resistanceCost || 20; const minigameContainer = document.querySelector('.minigame-container'); const hiddenContainer = document.getElementById('minigame-container-hidden'); const gauge = document.getElementById('gauge'); const timerDisplay = document.getElementById('timer'); const resistButton = document.getElementById('resistButton'); const skipButton = document.getElementById('skipButton'); const overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'; overlay.style.zIndex = '1000'; overlay.style.display = 'none'; document.body.appendChild(overlay); const resetGame = () => { progress = 0; timeLeft = settings.timeLeft || 10; gameStarted = false; gauge.style.width = '0%'; timerDisplay.textContent = timeLeft; }; let timerInterval, decreaseInterval; const updateGauge = () => { gauge.style.width = `${progress}%`; }; const endGame = (win) => { clearInterval(decreaseInterval); clearInterval(timerInterval); if (win) { SugarCube.State.variables.resistMinigameWinCount += 1; console.log("Successfully resisted AVA:", SugarCube.State.variables.resistMinigameWinCount); overlay.style.display = 'block'; setTimeout(() => { overlay.style.display = 'none'; }, 2000); minigameContainer.style.display = 'none'; hiddenContainer.style.display = 'block'; } else { SugarCube.UI.alert('You failed to resist!'); SugarCube.State.variables.resistMinigameFailCount += 1; console.log("Failed to resist AVA:", SugarCube.State.variables.resistMinigameFailCount); resetGame(); } }; resistButton.addEventListener('click', () => { if (SugarCube.State.variables.mentalCondition === "Dysphoric") { SugarCube.UI.alert("Your mental condition is too compromised to resist."); return; } if (!gameStarted) { if (SugarCube.State.variables.implantCharge < resistanceCost) { SugarCube.UI.alert("Not enough charge"); return; } else { if (SugarCube.State.variables.implantCharge - resistanceCost < 0) { SugarCube.State.variables.implantCharge = 0; } else { SugarCube.State.variables.implantCharge -= resistanceCost; } $(document).trigger(":liveupdate"); } if (SugarCube.State.variables.mentalCondition === "Unstable") { timeLeft /= 2; } gameStarted = true; timerInterval = setInterval(() => { if (--timeLeft <= 0) { endGame(false); } timerDisplay.textContent = `${timeLeft}`; }, 1000); decreaseInterval = setInterval(() => { if (progress > 0) { progress -= fallRate; updateGauge(); } }, fallInterval); } progress += fillAmount; if (progress >= 100) { progress = 100; updateGauge(); endGame(true); } else { updateGauge(); } }); if (skipButton) { skipButton.addEventListener('click', () => { endGame(true); }); } } initializeMinigame({resistanceCost: 20}); <</script>><</done>><</nobr>><</fadein>>
<<fadein 4000ms 100ms>>You decide to get a closer look at the action in the alley. Carefully and quietly, you make your way towards the couple, ensuring that your footsteps are muffled by the trash and debris scattered around.<</fadein>> <<fadein 4000ms 4000ms>>As you get closer, you spot a large garbage bin nearby. You quickly move behind it, using it as cover to hide from the couple's view while still having a clear line of sight to watch their intimate encounter.<</fadein>> <<fadein 4000ms 6000ms>><<video "imgs/quests/taxi/alley-oral-closer.webm">><</fadein>> <<fadein 4000ms 8000ms>>From your new vantage point, you can see the man's muscular arms as he holds the woman's head, thrusting deeper into her mouth. The woman's eyes are watering, but she doesn't seem to want him to stop.<</fadein>> <<fadein 4000ms 10000ms>>The raw intensity of their public encounter sends a rush of arousal through your body. You feel your heart racing, and you can't help but be captivated by the scene unfolding before you.<</fadein>> <span id="masturbate"><<fadein 4000ms 12000ms>><<nobr>>@@.pink-choicebutton;<<button "Masturbate">>\ <<replace "#masturbate">> <<include "RayTaxiMission-InvestigateSounds-Masturbate">> <</replace>> <</button>>@@ <div class="minigame-container"> <div class="resist-instructions" id="instructions">Resist AVA's suggestion and reveal other options by repeatedly clicking the Resist button.</div> <div class="energy-container"> <span class="energy-label">Implant charge cost: </span> <span class="energy-value" id="energy">20%</span> </div> <div class="timer-container"> <span class="timer-label">Time to resist: </span> <span class="timer-value" id="timer"><<if $mentalCondition === "Unstable">><<print 10/2>><<else>>10<</if>></span> <span class="timer-value"> seconds</span> </div> <div class="gauge-container"> <div class="gauge" id="gauge"></div> </div> <button class="pink-mindware-button" id="resistButton">Resist</button> <<if $minigameSkipButtons === true>> <button class="pink-mindware-button" id="skipButton">Skip (Instant Win)</button> <</if>> </div> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "That's enough">> <<replace "#masturbate">> <<include "RayTaxiMission-FocusOnMission-TooLate">> <</replace>> <</button>>@@ </div> <<done>><<script>> function initializeMinigame(settings) { var progress = 0; var timeLeft = settings.timeLeft || 10; var fillAmount = settings.fillAmount || 5; var fallRate = settings.fallRate || 3; var fallInterval = settings.fallInterval || 200; var gameStarted = false; var resistanceCost = settings.resistanceCost || 20; const minigameContainer = document.querySelector('.minigame-container'); const hiddenContainer = document.getElementById('minigame-container-hidden'); const gauge = document.getElementById('gauge'); const timerDisplay = document.getElementById('timer'); const resistButton = document.getElementById('resistButton'); const skipButton = document.getElementById('skipButton'); const overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'; overlay.style.zIndex = '1000'; overlay.style.display = 'none'; document.body.appendChild(overlay); const resetGame = () => { progress = 0; timeLeft = settings.timeLeft || 10; gameStarted = false; gauge.style.width = '0%'; timerDisplay.textContent = timeLeft; }; let timerInterval, decreaseInterval; const updateGauge = () => { gauge.style.width = `${progress}%`; }; const endGame = (win) => { clearInterval(decreaseInterval); clearInterval(timerInterval); if (win) { SugarCube.State.variables.resistMinigameWinCount += 1; console.log("Successfully resisted AVA:", SugarCube.State.variables.resistMinigameWinCount); overlay.style.display = 'block'; setTimeout(() => { overlay.style.display = 'none'; }, 2000); minigameContainer.style.display = 'none'; hiddenContainer.style.display = 'block'; } else { SugarCube.UI.alert('You failed to resist!'); SugarCube.State.variables.resistMinigameFailCount += 1; console.log("Failed to resist AVA:", SugarCube.State.variables.resistMinigameFailCount); resetGame(); } }; resistButton.addEventListener('click', () => { if (SugarCube.State.variables.mentalCondition === "Dysphoric") { SugarCube.UI.alert("Your mental condition is too compromised to resist."); return; } if (!gameStarted) { if (SugarCube.State.variables.implantCharge < resistanceCost) { SugarCube.UI.alert("Not enough charge"); return; } else { if (SugarCube.State.variables.implantCharge - resistanceCost < 0) { SugarCube.State.variables.implantCharge = 0; } else { SugarCube.State.variables.implantCharge -= resistanceCost; } $(document).trigger(":liveupdate"); } if (SugarCube.State.variables.mentalCondition === "Unstable") { timeLeft /= 2; } gameStarted = true; timerInterval = setInterval(() => { if (--timeLeft <= 0) { endGame(false); } timerDisplay.textContent = `${timeLeft}`; }, 1000); decreaseInterval = setInterval(() => { if (progress > 0) { progress -= fallRate; updateGauge(); } }, fallInterval); } progress += fillAmount; if (progress >= 100) { progress = 100; updateGauge(); endGame(true); } else { updateGauge(); } }); if (skipButton) { skipButton.addEventListener('click', () => { endGame(true); }); } } initializeMinigame({resistanceCost: 20}); <</script>><</done>><</nobr>><</fadein>></span>
<img src="imgs/quests/taxi/masturbate-alley.webp" width="100%"> As you watch the intense scene unfolding before you, you can't resist the urge to touch yourself. You quickly unzip your pants, freeing your already hard cock. You begin to stroke yourself, matching the rhythm of the man's thrusts. You can feel the orgasm approaching, a wave of pleasure starting at the base of your spine and spreading outwards. Your grip tightens, and you stroke faster, your eyes locked on the couple in front of you. The raw, primal nature of their encounter only serves to heighten your arousal, and you find yourself on the edge, ready to tumble over into ecstasy. <span id="cum"><<fadein 4000ms 12000ms>><<nobr>>@@.pink-choicebutton;<<button "Cum">>\ <<replace "#cum">> <<include "RayTaxiMission-InvestigateSounds-Cum">> <</replace>> <</button>>@@ <div class="minigame-container"> <div class="resist-instructions" id="instructions">Resist AVA's suggestion and reveal other options by repeatedly clicking the Resist button.</div> <div class="energy-container"> <span class="energy-label">Implant charge cost: </span> <span class="energy-value" id="energy">20%</span> </div> <div class="timer-container"> <span class="timer-label">Time to resist: </span> <span class="timer-value" id="timer"><<if $mentalCondition === "Unstable">><<print 10/2>><<else>>10<</if>></span> <span class="timer-value"> seconds</span> </div> <div class="gauge-container"> <div class="gauge" id="gauge"></div> </div> <button class="pink-mindware-button" id="resistButton">Resist</button> <<if $minigameSkipButtons === true>> <button class="pink-mindware-button" id="skipButton">Skip (Instant Win)</button> <</if>> </div> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "That's enough">> <<replace "#cum">> <<include "RayTaxiMission-FocusOnMission-TooLate">> <</replace>> <</button>>@@ </div> <<done>><<script>> function initializeMinigame(settings) { var progress = 0; var timeLeft = settings.timeLeft || 10; var fillAmount = settings.fillAmount || 5; var fallRate = settings.fallRate || 3; var fallInterval = settings.fallInterval || 200; var gameStarted = false; var resistanceCost = settings.resistanceCost || 20; const minigameContainer = document.querySelector('.minigame-container'); const hiddenContainer = document.getElementById('minigame-container-hidden'); const gauge = document.getElementById('gauge'); const timerDisplay = document.getElementById('timer'); const resistButton = document.getElementById('resistButton'); const skipButton = document.getElementById('skipButton'); const overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'; overlay.style.zIndex = '1000'; overlay.style.display = 'none'; document.body.appendChild(overlay); const resetGame = () => { progress = 0; timeLeft = settings.timeLeft || 10; gameStarted = false; gauge.style.width = '0%'; timerDisplay.textContent = timeLeft; }; let timerInterval, decreaseInterval; const updateGauge = () => { gauge.style.width = `${progress}%`; }; const endGame = (win) => { clearInterval(decreaseInterval); clearInterval(timerInterval); if (win) { SugarCube.State.variables.resistMinigameWinCount += 1; console.log("Successfully resisted AVA:", SugarCube.State.variables.resistMinigameWinCount); overlay.style.display = 'block'; setTimeout(() => { overlay.style.display = 'none'; }, 2000); minigameContainer.style.display = 'none'; hiddenContainer.style.display = 'block'; } else { SugarCube.UI.alert('You failed to resist!'); SugarCube.State.variables.resistMinigameFailCount += 1; console.log("Failed to resist AVA:", SugarCube.State.variables.resistMinigameFailCount); resetGame(); } }; resistButton.addEventListener('click', () => { if (SugarCube.State.variables.mentalCondition === "Dysphoric") { SugarCube.UI.alert("Your mental condition is too compromised to resist."); return; } if (!gameStarted) { if (SugarCube.State.variables.implantCharge < resistanceCost) { SugarCube.UI.alert("Not enough charge"); return; } else { if (SugarCube.State.variables.implantCharge - resistanceCost < 0) { SugarCube.State.variables.implantCharge = 0; } else { SugarCube.State.variables.implantCharge -= resistanceCost; } $(document).trigger(":liveupdate"); } if (SugarCube.State.variables.mentalCondition === "Unstable") { timeLeft /= 2; } gameStarted = true; timerInterval = setInterval(() => { if (--timeLeft <= 0) { endGame(false); } timerDisplay.textContent = `${timeLeft}`; }, 1000); decreaseInterval = setInterval(() => { if (progress > 0) { progress -= fallRate; updateGauge(); } }, fallInterval); } progress += fillAmount; if (progress >= 100) { progress = 100; updateGauge(); endGame(true); } else { updateGauge(); } }); if (skipButton) { skipButton.addEventListener('click', () => { endGame(true); }); } } initializeMinigame({resistanceCost: 20}); <</script>><</done>><</nobr>><</fadein>></span>
The woman's intense moans combined with the sounds of the man's cock repeatedly forcing its way deep inside the saliva-filled hole push you over the edge. Your orgasm hits you like a wave, and you cum hard, your sticky release coating your hand. <<video "imgs/quests/taxi/cum.webm">> \ You take a moment to catch your breath, your heart pounding in your chest. As you start to come down from the high, you realize that you've made quite a mess. Your hand is covered in cum, and you're not sure what to do about it. <<ava>>Well, well, well... Look at the mess you've made.<</ava>> <<ava>>Why don't you clean yourself up? You know, lick it off your hand. It's not like anyone's watching...<</ava>> <<ava>>Just imagine how it would taste like.<</ava>> With the orgasm still coursing through your body, you imagine how it would feel to taste your own cum. <<video "imgs/quests/taxi/cum-hypno.webm">> <<ava>>Go on! Lick your hand clean like a <span class="glitchy-pink-dialog" data-text="good slut">good girl</span>.<</ava>> <span id="lick"><<nobr>>@@.pink-choicebutton;<<button "Lick your cum">>\ <<replace "#lick">> <<include "RayTaxiMission-InvestigateSounds-Lick">> <</replace>> <</button>>@@ <div class="minigame-container"> <div class="resist-instructions" id="instructions">Resist AVA's suggestion and reveal other options by repeatedly clicking the Resist button.</div> <div class="energy-container"> <span class="energy-label">Implant charge cost: </span> <span class="energy-value" id="energy">20%</span> </div> <div class="timer-container"> <span class="timer-label">Time to resist: </span> <span class="timer-value" id="timer"><<if $mentalCondition === "Unstable">><<print 10/2>><<else>>10<</if>></span> <span class="timer-value"> seconds</span> </div> <div class="gauge-container"> <div class="gauge" id="gauge"></div> </div> <button class="pink-mindware-button" id="resistButton">Resist</button> <<if $minigameSkipButtons === true>> <button class="pink-mindware-button" id="skipButton">Skip (Instant Win)</button> <</if>> </div> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "That's enough">> <<replace "#lick">> <<include "RayTaxiMission-FocusOnMission-TooLate">> <</replace>> <</button>>@@ </div> <<done>><<script>> function initializeMinigame(settings) { var progress = 0; var timeLeft = settings.timeLeft || 10; var fillAmount = settings.fillAmount || 4.5; var fallRate = settings.fallRate || 3.5; var fallInterval = settings.fallInterval || 200; var gameStarted = false; var resistanceCost = settings.resistanceCost || 20; const minigameContainer = document.querySelector('.minigame-container'); const hiddenContainer = document.getElementById('minigame-container-hidden'); const gauge = document.getElementById('gauge'); const timerDisplay = document.getElementById('timer'); const resistButton = document.getElementById('resistButton'); const skipButton = document.getElementById('skipButton'); const overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'; overlay.style.zIndex = '1000'; overlay.style.display = 'none'; document.body.appendChild(overlay); const resetGame = () => { progress = 0; timeLeft = settings.timeLeft || 10; gameStarted = false; gauge.style.width = '0%'; timerDisplay.textContent = timeLeft; }; let timerInterval, decreaseInterval; const updateGauge = () => { gauge.style.width = `${progress}%`; }; const endGame = (win) => { clearInterval(decreaseInterval); clearInterval(timerInterval); if (win) { SugarCube.State.variables.resistMinigameWinCount += 1; console.log("Successfully resisted AVA:", SugarCube.State.variables.resistMinigameWinCount); overlay.style.display = 'block'; setTimeout(() => { overlay.style.display = 'none'; }, 2000); minigameContainer.style.display = 'none'; hiddenContainer.style.display = 'block'; } else { SugarCube.UI.alert('You failed to resist!'); SugarCube.State.variables.resistMinigameFailCount += 1; console.log("Failed to resist AVA:", SugarCube.State.variables.resistMinigameFailCount); resetGame(); } }; resistButton.addEventListener('click', () => { if (SugarCube.State.variables.mentalCondition === "Dysphoric") { SugarCube.UI.alert("Your mental condition is too compromised to resist."); return; } if (!gameStarted) { if (SugarCube.State.variables.implantCharge < resistanceCost) { SugarCube.UI.alert("Not enough charge"); return; } else { if (SugarCube.State.variables.implantCharge - resistanceCost < 0) { SugarCube.State.variables.implantCharge = 0; } else { SugarCube.State.variables.implantCharge -= resistanceCost; } $(document).trigger(":liveupdate"); } if (SugarCube.State.variables.mentalCondition === "Unstable") { timeLeft /= 2; } gameStarted = true; timerInterval = setInterval(() => { if (--timeLeft <= 0) { endGame(false); } timerDisplay.textContent = `${timeLeft}`; }, 1000); decreaseInterval = setInterval(() => { if (progress > 0) { progress -= fallRate; updateGauge(); } }, fallInterval); } progress += fillAmount; if (progress >= 100) { progress = 100; updateGauge(); endGame(true); } else { updateGauge(); } }); if (skipButton) { skipButton.addEventListener('click', () => { endGame(true); }); } } initializeMinigame({resistanceCost: 20}); <</script>><</done>><</nobr>></span>
<<video "imgs/quests/taxi/cum-lick.webm">> You bring your cum-drenched hand closer to your mouth and your tongue darts out, tentatively tasting the sticky, salty substance coating your fingers. The sensation is strange yet oddly enticing, and you find yourself enjoying the taste more than you expected. As you continue to lick your hand clean, AVA's voice echoes in your mind. <<ava>><span class="glitchy-pink-dialog" data-text="Good cum slut">Good cum slut</span>... You clearly love the taste of your own cum. You should do this more often... All good girls love cum.<</ava>> Her words send a shiver down your spine, and you can't help but feel aroused by her approval. <<nobr>><<if !$inventory.has("Cum fetish")>> <<set $cumEating to 1>> This is the first time you've tasted your cum — or any cum for that matter — and you would be lying if you said that the act didn't awaken something in you. You can't help but wonder if that something has always been there or if it came with AVA. <br><br> <<itemReceived "Cum fetish">> <<else>> <<if visited() is 1>> <<set $cumEating += 1>> <</if>> <</if>><</nobr>> However, you quickly snap back to reality, remembering that you still have a mission to complete. The taxi won't wait forever, and you need to focus on the task at hand. <<button "Leave">><<goto "RayTaxiMission-FocusOnMission-TooLate">><</button>> <<nobr>><<if visited() is 1>> <<set $submissiveActs += 1>> <</if>><</nobr>>
<div class="img-location"><img src="imgs/quests/taxi/blond-woman-taxi.webp" width="100%"></div> <div class="narrator">You refocus on your mission and get ready to use the transmitter.</div> <div class="narrator">Aiming the device at the taxi with the blonde woman inside. The signal strength indicator flickers as you try to find the right frequency.</div> <div id="frequency-minigame-container"> <canvas id="frequency-waveCanvas" width="600" height="200"></canvas> <div> <label for="frequency-slider">Frequency:</label> <input type="range" id="frequency-slider" min="0.1" max="10" step="0.1" value="7"> </div> <div> <label for="amplitude-slider">Amplitude:</label> <input type="range" id="amplitude-slider" min="10" max="100" step="1" value="32"> </div> <button id="frequency-submit">Transmit</button><button id="frequency-leave">Give Up</button> </div> <style> #frequency-minigame-container { text-align: center; margin-top: 20px; } #frequency-waveCanvas { border: 2px solid #55BBBC; background-color: #1a1a1a; margin-bottom: 20px; } /* Frequency and Amplitude Labels */ label[for="frequency-slider"], label[for="amplitude-slider"] { font-size: 1.2em; color: #55BBBC; text-transform: uppercase; margin-right: 10px; } /* Frequency and Amplitude Sliders */ input[type="range"]#frequency-slider, input[type="range"]#amplitude-slider { -webkit-appearance: none; width: 300px; height: 10px; background: #333; border: 1px solid #55BBBC; border-radius: 5px; outline: none; transition: all 0.3s ease; } input[type="range"]#frequency-slider::-webkit-slider-thumb, input[type="range"]#amplitude-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 20px; height: 20px; background: #55BBBC; border: 2px solid #55BBBC; border-radius: 50%; cursor: pointer; } input[type="range"]#frequency-slider::-webkit-slider-thumb:hover, input[type="range"]#amplitude-slider::-webkit-slider-thumb:hover { background: #44A5A5; } /* Submit and Leave Buttons */ button#frequency-submit, button#frequency-leave { background-color: #55BBBC; border: 2px solid #44A5A5; color: #0d0d0d; cursor: pointer; transition: all 0.3s ease; text-transform: uppercase; border-radius: 5px; margin: 10px; } button#frequency-submit:hover, button#frequency-leave:hover { background-color: #44A5A5; border-color: #339999; color: #ffffff; } button#frequency-submit:active, button#frequency-leave:active { background-color: #339999; border-color: #227777; color: #ffffff; } </style> <script> (function() { const canvas = document.getElementById('frequency-waveCanvas'); const ctx = canvas.getContext('2d'); const frequencyInput = document.getElementById('frequency-slider'); const amplitudeInput = document.getElementById('amplitude-slider'); const submitButton = document.getElementById('frequency-submit'); const leaveButton = document.getElementById('frequency-leave'); const targetFrequency = 3; // Example target frequency const targetAmplitude = 41; // Example target amplitude function drawWave(frequency, amplitude, offset, color) { ctx.beginPath(); ctx.moveTo(0, canvas.height / 2); for (let x = 0; x < canvas.width; x++) { const y = canvas.height / 2 + amplitude * Math.sin(frequency * (x + offset) * Math.PI / 180); ctx.lineTo(x, y); } ctx.strokeStyle = color; ctx.stroke(); } function draw() { ctx.clearRect(0, 0, canvas.width, canvas.height); // Draw target wave drawWave(targetFrequency, targetAmplitude, 0, 'red'); // Get user values const frequency = parseFloat(frequencyInput.value); const amplitude = parseFloat(amplitudeInput.value); // Draw user wave drawWave(frequency, amplitude, 0, 'blue'); } frequencyInput.addEventListener('input', draw); amplitudeInput.addEventListener('input', draw); function submitButtonHandler() { const frequency = parseFloat(frequencyInput.value); const amplitude = parseFloat(amplitudeInput.value); // Clear canvas and remove event listeners ctx.clearRect(0, 0, canvas.width, canvas.height); frequencyInput.removeEventListener('input', draw); amplitudeInput.removeEventListener('input', draw); submitButton.removeEventListener('click', submitButtonHandler); leaveButton.removeEventListener('click', leaveButtonHandler); if (Math.abs(frequency - targetFrequency) < 0.1 && Math.abs(amplitude - targetAmplitude) < 5) { SugarCube.UI.alert('Success! Wave aligned correctly.'); SugarCube.Engine.play('RayTaxiMission-Hack2-Success-Blond'); } else { SugarCube.UI.alert('Failed to align wave. Please try again.'); } } function leaveButtonHandler() { // Clear canvas and remove event listeners ctx.clearRect(0, 0, canvas.width, canvas.height); frequencyInput.removeEventListener('input', draw); amplitudeInput.removeEventListener('input', draw); submitButton.removeEventListener('click', submitButtonHandler); leaveButton.removeEventListener('click', leaveButtonHandler); // Go to the next passage SugarCube.Engine.play('EroSphere-Outside'); } submitButton.addEventListener('click', submitButtonHandler); leaveButton.addEventListener('click', leaveButtonHandler); // Initial draw draw(); })(); </script>
<div class="narrator">As soon as you leave the dark alley, you realize that you took too long — the taxi is gone.</div> <div class="narrator">You're disappointed and almost ready to leave when you spot another taxi pulling up to the curb nearby.</div> <div class="narrator">A woman steps out of the club and approaches the taxi, giving you a new opportunity to complete your mission.</div> <div class="img-location"><img src="imgs/quests/taxi/raven-woman-taxi.webp" width="100%"></div> <div class="narrator">This time, you act with unwavering resolve, quickly closing the distance between you and the taxi. With haste, you ready your transmitter, determined not to let this opportunity slip away.</div> <div id="frequency-minigame-container"> <canvas id="frequency-waveCanvas" width="600" height="200"></canvas> <div> <label for="frequency-slider">Frequency:</label> <input type="range" id="frequency-slider" min="0.1" max="10" step="0.1" value="7"> </div> <div> <label for="amplitude-slider">Amplitude:</label> <input type="range" id="amplitude-slider" min="10" max="100" step="1" value="32"> </div> <button id="frequency-submit">Transmit</button><button id="frequency-leave">Give Up</button> </div> <style> #frequency-minigame-container { text-align: center; margin-top: 20px; } #frequency-waveCanvas { border: 2px solid #55BBBC; background-color: #1a1a1a; margin-bottom: 20px; } /* Frequency and Amplitude Labels */ label[for="frequency-slider"], label[for="amplitude-slider"] { font-size: 1.2em; color: #55BBBC; text-transform: uppercase; margin-right: 10px; } /* Frequency and Amplitude Sliders */ input[type="range"]#frequency-slider, input[type="range"]#amplitude-slider { -webkit-appearance: none; width: 300px; height: 10px; background: #333; border: 1px solid #55BBBC; border-radius: 5px; outline: none; transition: all 0.3s ease; } input[type="range"]#frequency-slider::-webkit-slider-thumb, input[type="range"]#amplitude-slider::-webkit-slider-thumb { -webkit-appearance: none; width: 20px; height: 20px; background: #55BBBC; border: 2px solid #55BBBC; border-radius: 50%; cursor: pointer; } input[type="range"]#frequency-slider::-webkit-slider-thumb:hover, input[type="range"]#amplitude-slider::-webkit-slider-thumb:hover { background: #44A5A5; } /* Submit and Leave Buttons */ button#frequency-submit, button#frequency-leave { background-color: #55BBBC; border: 2px solid #44A5A5; color: #0d0d0d; cursor: pointer; transition: all 0.3s ease; text-transform: uppercase; border-radius: 5px; margin: 10px; } button#frequency-submit:hover, button#frequency-leave:hover { background-color: #44A5A5; border-color: #339999; color: #ffffff; } button#frequency-submit:active, button#frequency-leave:active { background-color: #339999; border-color: #227777; color: #ffffff; } </style> <script> (function() { const canvas = document.getElementById('frequency-waveCanvas'); const ctx = canvas.getContext('2d'); const frequencyInput = document.getElementById('frequency-slider'); const amplitudeInput = document.getElementById('amplitude-slider'); const submitButton = document.getElementById('frequency-submit'); const leaveButton = document.getElementById('frequency-leave'); const targetFrequency = 2.5; // Example target frequency const targetAmplitude = 44; // Example target amplitude function drawWave(frequency, amplitude, offset, color) { ctx.beginPath(); ctx.moveTo(0, canvas.height / 2); for (let x = 0; x < canvas.width; x++) { const y = canvas.height / 2 + amplitude * Math.sin(frequency * (x + offset) * Math.PI / 180); ctx.lineTo(x, y); } ctx.strokeStyle = color; ctx.stroke(); } function draw() { ctx.clearRect(0, 0, canvas.width, canvas.height); // Draw target wave drawWave(targetFrequency, targetAmplitude, 0, 'red'); // Get user values const frequency = parseFloat(frequencyInput.value); const amplitude = parseFloat(amplitudeInput.value); // Draw user wave drawWave(frequency, amplitude, 0, 'blue'); } frequencyInput.addEventListener('input', draw); amplitudeInput.addEventListener('input', draw); function submitButtonHandler() { const frequency = parseFloat(frequencyInput.value); const amplitude = parseFloat(amplitudeInput.value); // Clear canvas and remove event listeners ctx.clearRect(0, 0, canvas.width, canvas.height); frequencyInput.removeEventListener('input', draw); amplitudeInput.removeEventListener('input', draw); submitButton.removeEventListener('click', submitButtonHandler); leaveButton.removeEventListener('click', leaveButtonHandler); if (Math.abs(frequency - targetFrequency) < 0.1 && Math.abs(amplitude - targetAmplitude) < 5) { SugarCube.UI.alert('Success! Wave aligned correctly.'); SugarCube.Engine.play('RayTaxiMission-Hack2-Success-Raven'); } else { SugarCube.UI.alert('Failed to align wave. Please try again.'); } } function leaveButtonHandler() { // Clear canvas and remove event listeners ctx.clearRect(0, 0, canvas.width, canvas.height); frequencyInput.removeEventListener('input', draw); amplitudeInput.removeEventListener('input', draw); submitButton.removeEventListener('click', submitButtonHandler); leaveButton.removeEventListener('click', leaveButtonHandler); // Go to the next passage SugarCube.Engine.play('EroSphere-Outside'); } submitButton.addEventListener('click', submitButtonHandler); leaveButton.addEventListener('click', leaveButtonHandler); // Initial draw draw(); })(); </script>
As the woman gets into the taxi, the driver exchanges a few words with her, and hands her some money. It seems like you've struck gold – she's clearly a prostitute, and they're preparing for some action. You eagerly await the opportunity to record some prime footage for Ray. The taxi pulls into a nearby side street, and the driver wastes no time joining the woman in the back seat. He starts by feeling the curves of her body before reaching the hem of her dress. He quickly pulls it up, revealing her lacy black underwear. She raises her arms, allowing him to remove her dress completely. He then unhooks her bra, freeing her perky breasts. He leans in to kiss her neck, his hands now moving to her waist. He slides her panties down, and she lifts her hips to help him remove them. She's now completely naked, save for her high heels. Without much hesitation, he puts on a condom and moves her into position, and she eagerly lowers herself onto his hard cock. She starts bouncing up and down, her breasts bouncing in rhythm with her movements. He reaches around to play with her ass, his fingers sliding inside her asshole. <div id="interface-container"> <div id="animated-wave-container"> <canvas id="animated-waveCanvas" width="600" height="200"></canvas> </div>\ <div id="video-container"> <<video "imgs/quests/taxi/taxi-2-blond.webm">> </div>\ <span id="record"><<button "Record">> <<set $taxiVideoRecorded = "blond">> <<set $secondTaxiHackFinished = true>> <<run UI.alert("Video recorded!")>> <<run MindWare.addDialog('rayBrainFryDialogs', 'Taxi Video Recording', 'RayTaxiMission-Hack2-Success-Report');>> <<replace "#record">><</replace>> <<replace "#continue">><<button "Leave">><<goto "EroSphere-Outside">><</button>><</replace>> <</button>></span> </div>\ <span id="continue">Now is your moment to press the record button and capture this intimate encounter for Ray.</span> <style> #interface-container { text-align: center; border: 2px solid #55BBBC; background-color: #1a1a1a; border-radius: 10px; display: inline-block; width: 100%; } #animated-wave-container { margin-bottom: 20px; } #animated-waveCanvas { border: 2px solid #55BBBC; background-color: #1a1a1a; } #video-container video { border: 2px solid #55BBBC; background-color: #1a1a1a; width: 90%; height: auto; } </style>\ \ <script> (function() { const canvas = document.getElementById('animated-waveCanvas'); const ctx = canvas.getContext('2d'); let offset = 0; const frequency = 2; // Example frequency const amplitude = 50; // Example amplitude function drawWave(frequency, amplitude, offset, color) { ctx.beginPath(); ctx.moveTo(0, canvas.height / 2); for (let x = 0; x < canvas.width; x++) { const y = canvas.height / 2 + amplitude * Math.sin(frequency * (x + offset) * Math.PI / 180); ctx.lineTo(x, y); } ctx.strokeStyle = color; ctx.stroke(); } function animateWave() { ctx.clearRect(0, 0, canvas.width, canvas.height); // Draw animated wave drawWave(frequency, amplitude, offset, '#55BBBC'); offset += 2; // Adjust the speed of the wave animation requestAnimationFrame(animateWave); } // Initial draw and start animation animateWave(); })(); </script>
As the woman gets into the taxi, the driver exchanges a few words with her, and hands her some money. It seems like you've struck gold – she's clearly a prostitute, and they're preparing for some action. You eagerly await the opportunity to record some prime footage for Ray. The taxi pulls into a nearby side street, and the driver wastes no time joining the woman in the back seat. He starts by feeling the curves of her body before reaching the hem of her dress. He quickly pulls it up, revealing her lacy black underwear. She raises her arms, allowing him to remove her dress completely. He then unhooks her bra, freeing her perky breasts. He leans in to kiss her neck, his hands now moving to her waist. He slides her panties down, and she lifts her hips to help him remove them. She's now completely naked, save for her high heels. Without much hesitation, he puts on a condom and moves her into position, and she eagerly lowers herself onto his hard cock. She starts bouncing up and down, her breasts bouncing in rhythm with her movements. He reaches around to play with her ass, spreading her cheeks apart and helping her bounce even harder. <div id="interface-container"> <div id="animated-wave-container"> <canvas id="animated-waveCanvas" width="600" height="200"></canvas> </div>\ <div id="video-container"> <<video "imgs/quests/taxi/taxi-2-raven.webm">> </div>\ <span id="record"><<button "Record">> <<set $taxiVideoRecorded = "raven">> <<set $secondTaxiHackFinished = true>> <<run UI.alert("Video recorded!")>> <<run MindWare.addDialog('rayBrainFryDialogs', 'Taxi Video Recording', 'RayTaxiMission-Hack2-Success-Report');>> <<replace "#record">><</replace>> <<replace "#continue">><<button "Leave">><<goto "EroSphere-Outside">><</button>><</replace>> <</button>></span> </div>\ <span id="continue">Now is your moment to press the record button and capture this intimate encounter for Ray.</span> <style> #interface-container { text-align: center; border: 2px solid #55BBBC; background-color: #1a1a1a; border-radius: 10px; display: inline-block; width: 100%; } #animated-wave-container { margin-bottom: 20px; } #animated-waveCanvas { border: 2px solid #55BBBC; background-color: #1a1a1a; } #video-container video { border: 2px solid #55BBBC; background-color: #1a1a1a; width: 90%; height: auto; } </style>\ \ <script> (function() { const canvas = document.getElementById('animated-waveCanvas'); const ctx = canvas.getContext('2d'); let offset = 0; const frequency = 2; // Example frequency const amplitude = 50; // Example amplitude function drawWave(frequency, amplitude, offset, color) { ctx.beginPath(); ctx.moveTo(0, canvas.height / 2); for (let x = 0; x < canvas.width; x++) { const y = canvas.height / 2 + amplitude * Math.sin(frequency * (x + offset) * Math.PI / 180); ctx.lineTo(x, y); } ctx.strokeStyle = color; ctx.stroke(); } function animateWave() { ctx.clearRect(0, 0, canvas.width, canvas.height); // Draw animated wave drawWave(frequency, amplitude, offset, '#55BBBC'); offset += 2; // Adjust the speed of the wave animation requestAnimationFrame(animateWave); } // Initial draw and start animation animateWave(); })(); </script>
<div class="img-character"><img src="imgs/characters/ray/ray-brainfry-inside.jpg" width="100%"></div> <<player>>Hey Ray, I have the video recording for you.<</player>> <div class="narrator">Ray's eyes light up, and he can barely contain his excitement.</div> <<ray>>Oh, wow! You really got it? That's amazing! Let me see it!<</ray>> <<player>>Here? Now?<</player>> <<ray>>Yeah, don't worry. Nobody's looking. Just show it to me quickly.<</ray>> <div class="narrator">You hesitate for a moment before deciding to play the video for him. As the footage starts, Ray's eyes are glued to the screen, and he can barely contain his apparent arousal.</div> <div id="interface-container"> <div id="video-container">\ <<nobr>><<if $taxiVideoRecorded === "blond">> <<video "imgs/quests/taxi/taxi-2-blond.webm">> <<elseif $taxiVideoRecorded === "raven">> <<video "imgs/quests/taxi/taxi-2-raven.webm">> <</if>><</nobr>> </div>\ </div>\ <style> #interface-container { text-align: center; border: 2px solid #55BBBC; background-color: #1a1a1a; border-radius: 10px; display: inline-block; width: 100%; } #animated-wave-container { margin-bottom: 20px; } #animated-waveCanvas { border: 2px solid #55BBBC; background-color: #1a1a1a; } #video-container video { border: 2px solid #55BBBC; background-color: #1a1a1a; width: 90%; height: auto; } </style> <<ray>>Wow... just... wow...<</ray>> <div class="narrator">After the video ends, Ray quickly takes the transmitter from your hands, mumbling something incoherent.</div> <<itemLost "Exploit transmitter">> <<ray>>Thank you again! I need to, ehm, take care of something. Be right back.<</ray>> <<if visited() is 1>>\ <<relationshipIncreasedWith "Ray" 5>> <</if>>\ <div class="narrator">You watch as Ray hurriedly leaves the room, heading towards the bathroom.</div> <<button "Leave">> <<set $rayBrainFryDialogs["Taxi Video Recording"].isNew = false>> <<set $rayBrainFryDialogs["Taxi Video Recording"].unlocked = false>> <<set $secondTaxiHackStarted = false>> <<run MindWare.completeTask("Record taxi camera footage", "Task-RayTaxiExploit")>> <<set $taxiVideoRecordingMissionCompletedDays = 0>> <<set $taxiVideoRecordingMissionCompletedDaysHelper = $chapter1Days>> <<goto "TalkRayBrainFry">> <</button>>
<<xavier>>Are you ready for the neuroimaging?<</xavier>> <<player>>Yes, I'm ready.<</player>> <<xavier>>Great. Please have a seat in this chair and put on this neuroimaging helmet.<</xavier>> <img src="imgs/quests/neuroimaging/neuroimaging-helmet.webp" width="100%"> <div class="narrator">The helmet looks intimidating, with wires and sensors protruding from various points and a semi-transparent visor whose circuitry pulsates in shares of blue and purple. You hesitate for a moment but then bravely put it on.</div> <<xavier>>Alright, now I'm going to present you with a series of visual stimuli. This will help us measure your brain activity and hopefully trigger AVA.<</xavier>> <<player>>Understood.<</player>> <<xavier>>Just relax and let the images flow. We'll start with some simple shapes.<</xavier>> <<button "Okay, I'm ready.">> <<goto "Xavier-First Neuroimaging-Process">> <</button>>
<div class="narrator">You see a series of shapes appear on the screen inside the helmet and do your best to focus on them.</div> <img src="imgs/quests/neuroimaging/shapes.gif" width="100%"> <div class="narrator">For half an hour, you concentrate on the ever-changing shapes and patterns. The process feels tiring as you try to remain focused. Finally, your thoughts are interrupted by Xavier's voice.</div> <<xavier>>Everything looks normal so far, but I'm noticing a small abnormal elevation in your visual processing activity. Did you interact with AVA while you were focusing on the stimuli?<</xavier>> <<player>>No, not at all.<</player>> <<xavier>>Interesting. We need more data to make any conclusions.<</xavier>> <div class="narrator">Xavier glances at the clock and frowns.</div> <<xavier>>I don't have time for more tests today, but I'd like you to come back next week. We'll try different stimuli and see if we can gather more information.<</xavier>> <<player>>Alright, I'll be back next week. Thanks, Xavier.<</player>> \ <p class="back-link">\ <<button "Leave">> <<set $xavierGitGudDialogs["First neuroimaging"].isNew = false>> <<set $xavierGitGudDialogs["First neuroimaging"].unlocked = false>> <<set $nextNeuroimagingCounter = 7>> <<set $firstNeuroimagingDone = true>> <<goto "RegularVisitWithXavier">> <</button>> </p>
<<xavier>>Are you ready for the next round of neuroimaging?<</xavier>> <<player>>Yes, let's do it.<</player>> <<xavier>>This time, I'd like you to choose the type of stimuli you'll be focusing on. Do you remember when AVA made her presence known for the first time?<</xavier>> <div class="narrator">You think back to the moment when you visited the Panacea Clinic and was asked by the doctor to relax and breathe deeply.</div> <<button "Tell Xavier about the hospital visit">> <<goto "Xavier-Second Neuroimaging-Process">> <</button>>
<<player>>My first encounter with AVA happened when a doctor examined me at a Panacea Clinic.<</player>> <<xavier>>Was there any specific trigger?<</xavier>> <<player>>I remember that the doctor told me to relax.<</player>> <<xavier>>Interesting. It sounds like a relaxed state might be perceived by AVA as an opportunity to interact with you. I propose we use the helmet's neuro-visual projector to display a series of calming spirals to induce deep relaxation. What do you think?<</xavier>> <<player>>I'm willing to try anything if it helps us understand this better.<</player>> <<xavier>>Great. Let's get started. Please put on the helmet.<</xavier>> <img src="imgs/quests/neuroimaging/neuroimaging-helmet.webp" width="100%"> <div class="narrator">You already know the drill and put on the helmet without much hesitation.</div> <<narrator>>Xavier then sets up a screen displaying a mesmerizing colorful hypnotic spiral. The swirling patterns draw your gaze. After a few minutes, you enter a deep, relaxed state.<</narrator>> <<video "imgs/quests/neuroimaging/colorful-spiral.webm">> <<xavier>>Breathe and relax.<</xavier>> <div class="narrator">You do as told but time passes and nothing happens. As you do your best to breathe deeply, you hear Xavier's voice.</div> <<xavier>><span class="glitchy-pink-dialog" data-text="Hold still">Hold still</span> for a few more moments as I finish collecting data.<</xavier>> <div class="narrator">When you hear the words "hold still," something within you moves and you hear Xavier say something under his breath.</div> <span class="fade-in-out"><<xavier>>Interesting.<</xavier>></span> <<video "imgs/quests/neuroimaging/hold-still-hypno.webm">> <div class="narrator"> Suddenly, you feel a strange sensation. It's as if invisible tendrils are reaching into your mind, probing, searching for control. A cold shiver runs down your spine as you feel a force trying to override your consciousness, compelling you to obey.</div> <<nobr>>@@.pink-choicebutton;<<button "Hold still">><<goto "Xavier-Second Neuroimaging-Process-AVANotResisted">><</button>>@@ <div class="minigame-container"> <div class="resist-instructions" id="instructions">Resist AVA's suggestion and reveal other options by repeatedly clicking the Resist button.</div> <div class="energy-container"> <span class="energy-label">Implant charge cost: </span> <span class="energy-value" id="energy">20%</span> </div> <div class="timer-container"> <span class="timer-label">Time to resist: </span> <span class="timer-value" id="timer"><<if $mentalCondition === "Unstable">><<print 10/2>><<else>>10<</if>></span> <span class="timer-value"> seconds</span> </div> <div class="gauge-container"> <div class="gauge" id="gauge"></div> </div> <button class="pink-mindware-button" id="resistButton">Resist</button> <<if $minigameSkipButtons === true>> <button class="pink-mindware-button" id="skipButton">Skip (Instant Win)</button> <</if>> </div> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "Take off the helmet">><<goto "Xavier-Second Neuroimaging-Process-AVAResisted">><</button>>@@ </div> <<done>><<script>> function initializeMinigame(settings) { var progress = 0; var timeLeft = settings.timeLeft || 10; var fillAmount = settings.fillAmount || 5; var fallRate = settings.fallRate || 3; var fallInterval = settings.fallInterval || 200; var gameStarted = false; var resistanceCost = settings.resistanceCost || 20; const minigameContainer = document.querySelector('.minigame-container'); const hiddenContainer = document.getElementById('minigame-container-hidden'); const gauge = document.getElementById('gauge'); const timerDisplay = document.getElementById('timer'); const resistButton = document.getElementById('resistButton'); const skipButton = document.getElementById('skipButton'); const overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'; overlay.style.zIndex = '1000'; overlay.style.display = 'none'; document.body.appendChild(overlay); const resetGame = () => { progress = 0; timeLeft = settings.timeLeft || 10; gameStarted = false; gauge.style.width = '0%'; timerDisplay.textContent = timeLeft; }; let timerInterval, decreaseInterval; const updateGauge = () => { gauge.style.width = `${progress}%`; }; const endGame = (win) => { clearInterval(decreaseInterval); clearInterval(timerInterval); if (win) { SugarCube.State.variables.resistMinigameWinCount += 1; console.log("Successfully resisted AVA:", SugarCube.State.variables.resistMinigameWinCount); overlay.style.display = 'block'; setTimeout(() => { overlay.style.display = 'none'; }, 2000); minigameContainer.style.display = 'none'; hiddenContainer.style.display = 'block'; } else { SugarCube.UI.alert('You failed to resist!'); SugarCube.State.variables.resistMinigameFailCount += 1; console.log("Failed to resist AVA:", SugarCube.State.variables.resistMinigameFailCount); resetGame(); } }; resistButton.addEventListener('click', () => { if (SugarCube.State.variables.mentalCondition === "Dysphoric") { SugarCube.UI.alert("Your mental condition is too compromised to resist."); return; } if (!gameStarted) { if (SugarCube.State.variables.implantCharge < resistanceCost) { SugarCube.UI.alert("Not enough charge"); return; } else { if (SugarCube.State.variables.implantCharge - resistanceCost < 0) { SugarCube.State.variables.implantCharge = 0; } else { SugarCube.State.variables.implantCharge -= resistanceCost; } $(document).trigger(":liveupdate"); } if (SugarCube.State.variables.mentalCondition === "Unstable") { timeLeft /= 2; } gameStarted = true; timerInterval = setInterval(() => { if (--timeLeft <= 0) { endGame(false); } timerDisplay.textContent = `${timeLeft}`; }, 1000); decreaseInterval = setInterval(() => { if (progress > 0) { progress -= fallRate; updateGauge(); } }, fallInterval); } progress += fillAmount; if (progress >= 100) { progress = 100; updateGauge(); endGame(true); } else { updateGauge(); } }); if (skipButton) { skipButton.addEventListener('click', () => { endGame(true); }); } } initializeMinigame({resistanceCost: 20}); <</script>><</done>><</nobr>>
<div class="narrator">With a surge of willpower and the help of the Synapse Steady VX implant, you muster the strength to resist the controlling force. Your muscles strain as you reach up and grasp the helmet, pulling it off with a determined motion. Your breathing is heavy, and you feel a mix of fear and relief.</div> <<xavier>>What's going on? Why did you take the helmet off?<</xavier>> <<player>>The words "hold still" triggered something inside me. I got scared that AVA was trying to do something.<</player>> <<xavier>>Your brain activity spiked significantly when that happened. Next time, try not to resist so we can gather more data.<</xavier>> <div class="narrator">You hesitate, uncertainty creeping into your thoughts.</div> <<player>>What if something bad happens?<</player>> <<xavier>>I will intervene should anything go wrong. The data can help us understand AVA.<</xavier>> <<player>>Alright, I'll try my best.<</player>> \ <p class="back-link">\ <<button "Leave">> <<set $xavierGitGudDialogs["Second Neuroimaging"].isNew = false>> <<set $xavierGitGudDialogs["Second Neuroimaging"].unlocked = false>> <<set $secondNeuroimagingResisted = true>> <<set $secondNeuroimagingDone = true>> <<set $nextNeuroimagingCounter = 7>> <<goto "RegularVisitWithXavier">> <</button>> </p>
<div class="narrator">You decide to obey the suggestion and hold still. The colorful spirals disappear, and you are suddenly bombarded with images of submissive women. Their happiness resonates with you, and you find yourself longing to experience it.</div> <<video "imgs/quests/neuroimaging/hypno-happy.webm">> <<if visited() is 1>>\ <<genderFeminine 1>> <</if>>\ <div class="narrator">Just as the feeling becomes overwhelming, you're jolted back to reality as Xavier removes the helmet from your head. The sudden return to the present leaves you temporarily disoriented.</div> <<xavier>>Are you okay?<</xavier>> <<player>>I... I think so.<</player>> <div class="narrator">Xavier examines the monitor, his eyes wide with astonishment.</div> <<xavier>>Your brain activity was off the charts. What happened?<</xavier>> <<player>>I saw images of some women.<</player>> <<xavier>>Women? Can you be more specific? What were they doing?<</xavier>> <<player>>They weren't doing anything — just staring blankly. But I could feel how happy they were. It was like their happiness was washing over me, and I wanted to feel it too.<</player>> <<xavier>>Do you remember when exactly the images appeared?<</xavier>> <<player>>I think it was when you told me to hold still.<</player>> <div class="narrator">Xavier nods thoughtfully, jotting down some notes.</div> <<xavier>>We'll need to perform more neuroimaging next week. The data we're collecting is invaluable.<</xavier>> <div class="narrator">You hesitate, the memory of the images still fresh in your mind.</div> <<player>>What if something bad happens?<</player>> <<xavier>>I will intervene should anything go wrong. The data can help us understand AVA.<</xavier>> <<player>>Alright, I'll try my best.<</player>> \ <p class="back-link">\ <<button "Leave">> <<set $nextNeuroimagingCounter = 7>> <<set $xavierGitGudDialogs["Second Neuroimaging"].isNew = false>> <<set $xavierGitGudDialogs["Second Neuroimaging"].unlocked = false>> <<set $secondNeuroimagingResisted = false>> <<set $secondNeuroimagingDone = true>> <<goto "RegularVisitWithXavier">> <</button>> </p>
<<xavier>>Are you ready for the next round of neuroimaging?<</xavier>> <<player>>Yes, I'm ready.<</player>> <<if $secondNeuroimagingResisted === true>><<xavier>>Remember, it's important not to remove the helmet this time. We need to gather as much data as possible.<</xavier>> <<player>>I understand.<</player>> <</if>>\ <<xavier>>Great. Let's get started. Please put on the helmet.<</xavier>> <img src="imgs/quests/neuroimaging/neuroimaging-helmet.webp" width="100%"> <div class="narrator">You settle into the chair and put on the helmet, feeling the now-familiar weight and the cool touch of the sensors on your scalp.</div> <<xavier>>Let's go with the same relaxing spirals as before. I'll give you some time to unwind, and then I'll say the same words that triggered the vision last time. Are you ready?<</xavier>> <<player>>Yeah, I'm ready.<</player>> <div class="narrator">The visor lights up with the familiar spirals, slowly rotating and shifting colors. You focus on the patterns, feeling your body relax as you sink deeper into a state of calm.</div> <<video "imgs/quests/neuroimaging/colorful-spiral.webm">> <<xavier>>You're doing great. Just keep focusing on the spirals and let yourself relax.<</xavier>> <div class="narrator">Minutes pass as you concentrate on the spirals. The patterns seem to draw you in, and you feel a strange, almost soothing sensation in your mind. Then, you hear Xavier say the trigger phrase.</div> <<xavier>><span class="glitchy-pink-dialog" data-text="Hold still for cock">Hold still for me.</span><</xavier>> <div class="narrator">The words reverberate through your mind, and suddenly, the spirals intensify. The urge to remove the helmet surges once again.</div> <<video "imgs/quests/neuroimaging/hold-still-hypno.webm">> <<nobr>>@@.pink-choicebutton;<<button "Hold still">><<set $thirdNeuroimagingResisted = false>><<goto "Xavier-Third Neuroimaging-Process-AVANotResisted">><</button>>@@ <div class="minigame-container"> <div class="resist-instructions" id="instructions">Resist AVA's suggestion and reveal other options by repeatedly clicking the Resist button.</div> <div class="energy-container"> <span class="energy-label">Implant charge cost: </span> <span class="energy-value" id="energy">20%</span> </div> <div class="timer-container"> <span class="timer-label">Time to resist: </span> <span class="timer-value" id="timer"><<if $mentalCondition === "Unstable">><<print 10/2>><<else>>10<</if>></span> <span class="timer-value"> seconds</span> </div> <div class="gauge-container"> <div class="gauge" id="gauge"></div> </div> <button class="pink-mindware-button" id="resistButton">Resist</button> <<if $minigameSkipButtons === true>> <button class="pink-mindware-button" id="skipButton">Skip (Instant Win)</button> <</if>> </div> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "Take off the helmet">><<set $thirdNeuroimagingResisted = true>><<goto "Xavier-Third Neuroimaging-Process-AVAResisted">><</button>>@@ </div> <<done>><<script>> function initializeMinigame(settings) { var progress = 0; var timeLeft = settings.timeLeft || 10; var fillAmount = settings.fillAmount || 5; var fallRate = settings.fallRate || 3; var fallInterval = settings.fallInterval || 200; var gameStarted = false; var resistanceCost = settings.resistanceCost || 20; const minigameContainer = document.querySelector('.minigame-container'); const hiddenContainer = document.getElementById('minigame-container-hidden'); const gauge = document.getElementById('gauge'); const timerDisplay = document.getElementById('timer'); const resistButton = document.getElementById('resistButton'); const skipButton = document.getElementById('skipButton'); const overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'; overlay.style.zIndex = '1000'; overlay.style.display = 'none'; document.body.appendChild(overlay); const resetGame = () => { progress = 0; timeLeft = settings.timeLeft || 10; gameStarted = false; gauge.style.width = '0%'; timerDisplay.textContent = timeLeft; }; let timerInterval, decreaseInterval; const updateGauge = () => { gauge.style.width = `${progress}%`; }; const endGame = (win) => { clearInterval(decreaseInterval); clearInterval(timerInterval); if (win) { SugarCube.State.variables.resistMinigameWinCount += 1; console.log("Successfully resisted AVA:", SugarCube.State.variables.resistMinigameWinCount); overlay.style.display = 'block'; setTimeout(() => { overlay.style.display = 'none'; }, 2000); minigameContainer.style.display = 'none'; hiddenContainer.style.display = 'block'; } else { SugarCube.UI.alert('You failed to resist!'); SugarCube.State.variables.resistMinigameFailCount += 1; console.log("Failed to resist AVA:", SugarCube.State.variables.resistMinigameFailCount); resetGame(); } }; resistButton.addEventListener('click', () => { if (SugarCube.State.variables.mentalCondition === "Dysphoric") { SugarCube.UI.alert("Your mental condition is too compromised to resist."); return; } if (!gameStarted) { if (SugarCube.State.variables.implantCharge < resistanceCost) { SugarCube.UI.alert("Not enough charge"); return; } else { if (SugarCube.State.variables.implantCharge - resistanceCost < 0) { SugarCube.State.variables.implantCharge = 0; } else { SugarCube.State.variables.implantCharge -= resistanceCost; } $(document).trigger(":liveupdate"); } if (SugarCube.State.variables.mentalCondition === "Unstable") { timeLeft /= 2; } gameStarted = true; timerInterval = setInterval(() => { if (--timeLeft <= 0) { endGame(false); } timerDisplay.textContent = `${timeLeft}`; }, 1000); decreaseInterval = setInterval(() => { if (progress > 0) { progress -= fallRate; updateGauge(); } }, fallInterval); } progress += fillAmount; if (progress >= 100) { progress = 100; updateGauge(); endGame(true); } else { updateGauge(); } }); if (skipButton) { skipButton.addEventListener('click', () => { endGame(true); }); } } initializeMinigame({resistanceCost: 20}); <</script>><</done>><</nobr>>
<<if $secondNeuroimagingResisted === true>><<xavier>>What's going on? Why did you take the helmet off again?<</xavier>><<else>><<xavier>>What's going on? Why did you take the helmet off?<</xavier>><</if>> <<player>>I got scared that AVA was trying to do something.<</player>> <<if $secondNeuroimagingResisted === true>><<xavier>>I can't keep doing this if you're too scared to go through with it. I think it's better we stop wasting my time and abandon this effort right now.<</xavier>> <<button "Agree to end the neuroimaging">> <<set $xavierGitGudDialogs["Third Neuroimaging"].isNew = false>> <<set $xavierGitGudDialogs["Third Neuroimaging"].unlocked = false>> <<goto "Xavier-Third Neuroimaging-Quit">> <<run MindWare.completeTask("Undergo neuroimaging in $nextNeuroimagingCounter days")>> <</button>> <<if $beggedForAnotherNeuroimagingAttempt !== true>><<button "Beg for another attempt">><<goto "Xavier-Another Neuroimaging-Attempt">><</button>> <</if>>\ <<else>>\ <<xavier>>Your brain activity spiked significantly when that happened. Next time, try not to resist so we can gather more data.<</xavier>> <<player>>Alright, I'll try my best.<</player>> <<xavier>>Great. I'll see you next week for another round of neuroimaging.<</xavier>> <p class="back-link">\ <<button "Leave">> <<set $xavierGitGudDialogs["Third Neuroimaging"].isNew = false>> <<set $xavierGitGudDialogs["Third Neuroimaging"].unlocked = false>> <<set $secondNeuroimagingResisted = true>> <<set $thirdNeuroimagingActivated to false>> <<set $nextNeuroimagingCounter = 7>> <<goto "RegularVisitWithXavier">> <</button>> </p> <</if>>\
<<video "imgs/quests/neuroimaging/bbc-hypno2.mov">> <div class="narrator">You decide not to resist and obey the suggestion. As you relax, the spirals intensify, and a vision begins to form in your mind. You see a woman licking a large black cock. The sensation is vivid, and you can feel what she feels — the warmth, the texture, the excitement.</div> <div class="narrator">Even though you can see only the woman's wet tongue skillfully gliding and twirling around throbbing cock, you somehow know that it belongs to someone you know.</div> <<ava>>Good girls suck and obey.<</ava>> <<if visited() is 1>>\ <<genderFeminine 5>> <</if>>\ <div class="narrator">Just as the intensity of the vision reaches its peak, that someone's voice cuts through the haze, and the helmet is removed from your head.</div> <<xavier>>We're done.<</xavier>> <div class="narrator">You blink, disoriented, as the room comes back into focus.</div> <<xavier>>Your brain activity reached a new high during that session. Can you describe exactly what happened?<</xavier>> <<button "Tell the truth">><<goto "Xavier-Third Neuroimaging-Truth">><</button>> <<button "Lie to Xavier">><<goto "Xavier-Third Neuroimaging-Lie">><</button>>
<<player>>Please, Xavier, give me one more try. I promise I'll do better. I won't take off the helmet again.<</player>> <div class="narrator">Xavier narrows his eyes, considering your plea. After a tense moment, he sighs.</div> <<xavier>>Alright, one more try. But this is your last chance. Don't mess it up.<</xavier>> <<player>>Thank you, Xavier. I won't let you down.<</player>> \ <p class="back-link">\ <<button "Leave">> <<set $xavierGitGudDialogs["Third Neuroimaging"].isNew = false>> <<set $xavierGitGudDialogs["Third Neuroimaging"].unlocked = false>> <<set $secondNeuroimagingResisted = true>> <<set $thirdNeuroimagingActivated to false>> <<set $beggedForAnotherNeuroimagingAttempt to true>> <<set $nextNeuroimagingCounter = 7>> <<goto "RegularVisitWithXavier">> <</button>> </p>
<div class="narrator">You've decided to quit the neuroimaging sessions with Xavier. The thought of provoking AVA and the potential consequences fills you with unease. You realize that continuing might be too risky for your mental state.</div> <<player>>Xavier, I think it's best if we stop the neuroimaging sessions. The risks seem too high, and I'm not sure I can handle it.<</player>> <div class="narrator">Xavier's disappointment is evident in his eyes.</div> <<xavier>>As you wish.<</xavier>> <<player>>Thank you, Xavier. I appreciate all your help.<</player>> <div class="narrator">With a heavy heart, you leave the lab. While the neuroimaging sessions are over, your journey with AVA and understanding its influence on you continues in other ways.</div> <<button "Leave">> <<goto "GitGud">> <</button>>
<<player>>I, uh... I saw some birds. Flying birds. They were... colorful.<</player>> <div class="narrator">The words tumble out awkwardly, your voice strained as you try to fabricate a believable story. Xavier's eyes, however, bore into you with an intensity that makes you squirm. His gaze is like a laser, cutting through your flimsy deception.</div> <<xavier>>Birds? Colorful, flying birds?<</xavier>> <div class="narrator">His tone is flat, devoid of any belief. He taps his fingers on the desk, a rhythm that seems to match your rising heartbeat.</div> <<xavier>>Do you take me for a fool?<</xavier>> <<if $playerToldXavierTruthAboutAI === false>><<xavier>>I thought we were past this. Didn't I make it abundantly clear that I want you to be honest with me when you lied about your interactions with AVA when you asked me about the implant for the first time?<</xavier>> <<if visited() is 1>>\ <<relationshipDecreasedWith "Xavier" 10>> <</if>>\ <</if>>\ <div class="narrator">The question hangs in the air like a thundercloud ready to unleash its fury. You feel the weight of his disappointment, heavier than the helmet you just wore.</div> <<xavier>>I've invested considerable time and resources into helping you understand and manage AVA. But if you can't be truthful with me, then what's the point? We might as well stop with the neuroimaging.<</xavier>> <<button "Tell the truth after all">><<goto "Xavier-Third Neuroimaging-Truth">><</button>> <<button "End the neuroimaging">> <<set $xavierGitGudDialogs["Third Neuroimaging"].isNew = false>> <<set $xavierGitGudDialogs["Third Neuroimaging"].unlocked = false>> <<goto "Xavier-Third Neuroimaging-Quit">> <<run MindWare.completeTask("Undergo neuroimaging in $nextNeuroimagingCounter days")>> <</button>>
<<player>>I... I saw a woman licking a large black cock. The sensation was vivid, and I could feel what she felt.<</player>> <div class="narrator">Your voice wavers as you recount the experience, your cheeks flushing with a mix of embarrassment and lingering emotion.</div> <<player>>Even though I could see only her tongue, I somehow knew who the man was. It was... it was you, Xavier.<</player>> <div class="narrator">Xavier's eyebrows rise, but his overall expression remains thoughtful, clinical. His gaze snaps back to you, his face set in an expression of complete seriousness.</div> <<xavier>>I'm beginning to understand what's happening here.<</xavier>> <<if $playerBody === "Masculine" or $playerBody === "Masculine-Leaning" or $playerBody === "Androgynous">><<xavier>>It's becoming clear that your brain wasn't infected by an AI. The loss of consciousness and the symptoms of schizophrenia you've been experiencing are traumatic responses to long-suppressed homosexual urges.<</xavier>><<else>><<xavier>>It's becoming clear that your brain wasn't infected by an AI. The loss of consciousness and the symptoms of schizophrenia you've been experiencing are traumatic responses to long-suppressed sexual urges.<</xavier>><</if>> <<player>>What?!<</player>> <<xavier>>The visions are overwhelming surges of arousal, manifesting as these lifelike scenarios. I can prove it to you — no need for the helmet this time.<</xavier>> <<player>>That's absurd! I've—<</player>> <div class="narrator">Before you have a chance to finish your sentence, Xavier unzips his pants and takes out his huge cock with a swift, unexpected motion.</div> <<video "imgs/quests/neuroimaging/bbc-closeup.mov">> <<xavier>>How does this make you feel?<</xavier>> <div class="narrator">A sly smile plays on Xavier's lips, but you don't notice it because the sight of his cock has rendered you speechless.</div> <div class="narrator">The deafening silence fills the room, and you can feel your heart pounding in your chest. As the moments pass, an intrusive thought begins to form in your head and continues to grow stronger and stronger. It's the thought of you getting on kneeling right before Xavier's manhood.</div> <<nobr>>@@.pink-choicebutton;<<button "Get on your knees">><<set $thirdNeuroimagingKneeled = true>><<goto "Xavier-Third Neuroimaging-Truth-Kneel">><</button>>@@ <div class="minigame-container"> <div class="resist-instructions" id="instructions">Resist AVA's suggestion and reveal other options by repeatedly clicking the Resist button.</div> <div class="energy-container"> <span class="energy-label">Implant charge cost: </span> <span class="energy-value" id="energy">20%</span> </div> <div class="timer-container"> <span class="timer-label">Time to resist: </span> <span class="timer-value" id="timer"><<if $mentalCondition === "Unstable">><<print 10/2>><<else>>10<</if>></span> <span class="timer-value"> seconds</span> </div> <div class="gauge-container"> <div class="gauge" id="gauge"></div> </div> <button class="pink-mindware-button" id="resistButton">Resist</button> <<if $minigameSkipButtons === true>> <button class="pink-mindware-button" id="skipButton">Skip (Instant Win)</button> <</if>> </div> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "Insist that you're not interested in him">><<set $thirdNeuroimagingInsisted = true>><<goto "Xavier-Third Neuroimaging-Truth-Deny-Arousal">><</button>>@@ </div> <<done>><<script>> function initializeMinigame(settings) { var progress = 0; var timeLeft = settings.timeLeft || 10; var fillAmount = settings.fillAmount || 5; var fallRate = settings.fallRate || 4; var fallInterval = settings.fallInterval || 200; var gameStarted = false; var resistanceCost = settings.resistanceCost || 20; const minigameContainer = document.querySelector('.minigame-container'); const hiddenContainer = document.getElementById('minigame-container-hidden'); const gauge = document.getElementById('gauge'); const timerDisplay = document.getElementById('timer'); const resistButton = document.getElementById('resistButton'); const skipButton = document.getElementById('skipButton'); const overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'; overlay.style.zIndex = '1000'; overlay.style.display = 'none'; document.body.appendChild(overlay); const resetGame = () => { progress = 0; timeLeft = settings.timeLeft || 10; gameStarted = false; gauge.style.width = '0%'; timerDisplay.textContent = timeLeft; }; let timerInterval, decreaseInterval; const updateGauge = () => { gauge.style.width = `${progress}%`; }; const endGame = (win) => { clearInterval(decreaseInterval); clearInterval(timerInterval); if (win) { SugarCube.State.variables.resistMinigameWinCount += 1; console.log("Successfully resisted AVA:", SugarCube.State.variables.resistMinigameWinCount); overlay.style.display = 'block'; setTimeout(() => { overlay.style.display = 'none'; }, 2000); minigameContainer.style.display = 'none'; hiddenContainer.style.display = 'block'; } else { SugarCube.UI.alert('You failed to resist!'); SugarCube.State.variables.resistMinigameFailCount += 1; console.log("Failed to resist AVA:", SugarCube.State.variables.resistMinigameFailCount); resetGame(); } }; resistButton.addEventListener('click', () => { if (SugarCube.State.variables.mentalCondition === "Dysphoric") { SugarCube.UI.alert("Your mental condition is too compromised to resist."); return; } if (!gameStarted) { if (SugarCube.State.variables.implantCharge < resistanceCost) { SugarCube.UI.alert("Not enough charge"); return; } else { if (SugarCube.State.variables.implantCharge - resistanceCost < 0) { SugarCube.State.variables.implantCharge = 0; } else { SugarCube.State.variables.implantCharge -= resistanceCost; } $(document).trigger(":liveupdate"); } if (SugarCube.State.variables.mentalCondition === "Unstable") { timeLeft /= 2; } gameStarted = true; timerInterval = setInterval(() => { if (--timeLeft <= 0) { endGame(false); } timerDisplay.textContent = `${timeLeft}`; }, 1000); decreaseInterval = setInterval(() => { if (progress > 0) { progress -= fallRate; updateGauge(); } }, fallInterval); } progress += fillAmount; if (progress >= 100) { progress = 100; updateGauge(); endGame(true); } else { updateGauge(); } }); if (skipButton) { skipButton.addEventListener('click', () => { endGame(true); }); } } initializeMinigame({resistanceCost: 20}); <</script>><</done>><</nobr>>
<<player>>I... I don't want to have sex with you, Xavier. I swear, it's not what you think.<</player>> <div class="narrator">Xavier's eyes narrow, and he studies you for a moment. He then puts his cock back in his pants and zips them up.</div> <<xavier>>Alright, if you say so.<</xavier>> <<xavier>>But you felt something, didn't you?<</xavier>> <<player>>Y-Yes, I did. I felt an urge to get on my knees, but it wasn't because I wanted to have sex with you.<</player>> <div class="narrator">Xavier nods, seeming to understand. He then turns his attention to your Synapse Steady VX implant and examines it carefully.</div> <<xavier>>Interesting. Your implant's battery has been depleted slightly. It seems like it's been working overtime to help you resist the AI's influence.<</xavier>> <<xavier>>I have a theory. The AI wants you to submit for some reason, and the implant is doing its job by allowing you to resist.<</xavier>> <<player>>What should I do?<</player>> <<xavier>>Right now, the best advice I can give you is to avoid potentially triggering situations and never leave your home without first fully charging the implant by getting a full night's sleep.<</xavier>> <<if visited() is 1>>\ <<relationshipIncreasedWith "Xavier" 5>> <</if>>\ <<player>>Thank you, Xavier. I really appreciate your help and understanding.<</player>> <<button "Leave">> <<set $xavierGitGudDialogs["Third Neuroimaging"].isNew = false>> <<set $xavierGitGudDialogs["Third Neuroimaging"].unlocked = false>> <<goto "RegularVisitWithXavier">> <<run MindWare.completeTask("Undergo neuroimaging in $nextNeuroimagingCounter days")>> <<set $neuroimagingEnding = "advice">> <</button>>
<div class="narrator">You find yourself kneeling in front of Xavier, your eyes hungrily looking up at him. He towers over you, his confidence and dominance palpable. Xavier's lips curl into a smug smile as he gazes down at your submissive position.</div> <<xavier>>See... I was right. Your brain wasn't infected by an AI. The loss of consciousness and the symptoms of schizophrenia you've been experiencing are traumatic responses to long-suppressed <<if $playerBody === "Masculine" or $playerBody === "Masculine-Leaning" or $playerBody === "Androgynous">>homosexual urges.<<else>>sexual urges.<</if>><</xavier>> <<xavier>>There's no need for additional neuroimaging. What you really need is therapy – the kind of therapy only someone like me can deliver.<</xavier>> <<xavier>>Since I'm in a good mood today, I'll give you the first session right now, free of charge.<</xavier>> <div class="narrator">A whirlwind of emotions surges within you and renders you speechless, each one more intense than the last.</div> <<xavier>>Just <span class="glitchy-pink-dialog" data-text="follow my lead">follow my lead.</span><</xavier>> <div class="narrator">Xavier undresses and then he gently takes your hand and guides it to his crotch, placing it firmly on his bulging cock. The sudden contact sends a jolt of electricity through your body, and you can't help but gasp at the sensation. Your heart races, and your breath quickens as you feel the heat radiating from his body.</div> <<nobr>><<switch $playerBody>> <<case "Masculine" "Masculine-Leaning">> <<video "imgs/quests/neuroimaging/bbc-male-handjob.mov">> <<case "Androgynous" "Feminine-Leaning">> <<video "imgs/quests/neuroimaging/bbc-female-handjob.mov">> <<case "Feminine">> <<video "imgs/quests/neuroimaging/bbc-female-handjob.mov">> <</switch>><</nobr>> <<nobr>><<if visited() is 1>> <<if typeof $maleEncounters === "undefined">> <<set $maleEncounters = 0>> <</if>> <<set $maleEncounters += 1>> <<if typeof $submissiveActs === "undefined">> <<set $submissiveActs = 0>> <</if>> <<set $submissiveActs += 1>> <</if>><</nobr>> <div class="narrator">Xavier's touch is firm yet gentle, and his eyes never leave yours as he begins to guide your hand, showing you the rhythm and pressure he desires.</div> <div class="narrator">As you feel the heat of Xavier's cock in your hand, you can't help but be mesmerized by the sensation. You follow his lead, your hand moving up and down his shaft, feeling it grow harder and thicker with each stroke.</div> <div class="narrator">As you continue to work his cock, Xavier's breathing becomes more ragged and intense. He looks down at you, his eyes filled with lust and desire.</div> <<xavier>><span class="glitchy-pink-dialog" data-text="Keep going.">Keep going.</span><</xavier>> <div class="narrator">You obey his command, your hand moving faster and more forcefully as you feel him approach the edge of release.</div> <div class="narrator">With a final, powerful stroke, Xavier's cock erupts, sending streams of hot, sticky cum shooting into the air. Some of it lands on your hand, and AVA immediately takes advantage of the situation with a well-timed suggestion.</div> <<video "imgs/quests/neuroimaging/eat-cum-hypno.mov">> <<nobr>>@@.pink-choicebutton;<<button "Eat Xavier's cum">><<set $neuroimagingAteCum = true>><<goto "Xavier-Third Neuroimaging-Truth-Kneel-Cum">><</button>>@@ <div class="minigame-container"> <div class="resist-instructions" id="instructions">Resist AVA's suggestion and reveal other options by repeatedly clicking the Resist button.</div> <div class="energy-container"> <span class="energy-label">Implant charge cost: </span> <span class="energy-value" id="energy">20%</span> </div> <div class="timer-container"> <span class="timer-label">Time to resist: </span> <span class="timer-value" id="timer"><<if $mentalCondition === "Unstable">><<print 10/2>><<else>>10<</if>></span> <span class="timer-value"> seconds</span> </div> <div class="gauge-container"> <div class="gauge" id="gauge"></div> </div> <button class="pink-mindware-button" id="resistButton">Resist</button> <<if $minigameSkipButtons === true>> <button class="pink-mindware-button" id="skipButton">Skip (Instant Win)</button> <</if>> </div> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "Don't eat Xavier's cum">><<set $neuroimagingAteCum = false>><<goto "Xavier-Third Neuroimaging-Truth-Kneel-NoCum">><</button>>@@ </div> <<done>><<script>> function initializeMinigame(settings) { var progress = 0; var timeLeft = settings.timeLeft || 10; var fillAmount = settings.fillAmount || 5; var fallRate = settings.fallRate || 4.3; var fallInterval = settings.fallInterval || 200; var gameStarted = false; var resistanceCost = settings.resistanceCost || 20; const minigameContainer = document.querySelector('.minigame-container'); const hiddenContainer = document.getElementById('minigame-container-hidden'); const gauge = document.getElementById('gauge'); const timerDisplay = document.getElementById('timer'); const resistButton = document.getElementById('resistButton'); const skipButton = document.getElementById('skipButton'); const overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'; overlay.style.zIndex = '1000'; overlay.style.display = 'none'; document.body.appendChild(overlay); const resetGame = () => { progress = 0; timeLeft = settings.timeLeft || 10; gameStarted = false; gauge.style.width = '0%'; timerDisplay.textContent = timeLeft; }; let timerInterval, decreaseInterval; const updateGauge = () => { gauge.style.width = `${progress}%`; }; const endGame = (win) => { clearInterval(decreaseInterval); clearInterval(timerInterval); if (win) { SugarCube.State.variables.resistMinigameWinCount += 1; console.log("Successfully resisted AVA:", SugarCube.State.variables.resistMinigameWinCount); overlay.style.display = 'block'; setTimeout(() => { overlay.style.display = 'none'; }, 2000); minigameContainer.style.display = 'none'; hiddenContainer.style.display = 'block'; } else { SugarCube.UI.alert('You failed to resist!'); SugarCube.State.variables.resistMinigameFailCount += 1; console.log("Failed to resist AVA:", SugarCube.State.variables.resistMinigameFailCount); resetGame(); } }; resistButton.addEventListener('click', () => { if (SugarCube.State.variables.mentalCondition === "Dysphoric") { SugarCube.UI.alert("Your mental condition is too compromised to resist."); return; } if (!gameStarted) { if (SugarCube.State.variables.implantCharge < resistanceCost) { SugarCube.UI.alert("Not enough charge"); return; } else { if (SugarCube.State.variables.implantCharge - resistanceCost < 0) { SugarCube.State.variables.implantCharge = 0; } else { SugarCube.State.variables.implantCharge -= resistanceCost; } $(document).trigger(":liveupdate"); } if (SugarCube.State.variables.mentalCondition === "Unstable") { timeLeft /= 2; } gameStarted = true; timerInterval = setInterval(() => { if (--timeLeft <= 0) { endGame(false); } timerDisplay.textContent = `${timeLeft}`; }, 1000); decreaseInterval = setInterval(() => { if (progress > 0) { progress -= fallRate; updateGauge(); } }, fallInterval); } progress += fillAmount; if (progress >= 100) { progress = 100; updateGauge(); endGame(true); } else { updateGauge(); } }); if (skipButton) { skipButton.addEventListener('click', () => { endGame(true); }); } } initializeMinigame({resistanceCost: 20}); <</script>><</done>><</nobr>>
<<nobr>><<switch $playerBody>> <<case "Masculine" "Masculine-Leaning" "Androgynous">> <<video "imgs/quests/neuroimaging/cum-lick-male.mov">> <<case "Feminine-Leaning">> <<video "imgs/quests/neuroimaging/cum-lick-fem-leaning.mov">> <<case "Feminine">> <<video "imgs/quests/neuroimaging/cum-lick-feminine.mov">> <</switch>><</nobr>> <<nobr>><<if visited() is 1>> <<if typeof $maleEncounters === "undefined">> <<set $maleEncounters = 0>> <</if>> <<set $maleEncounters += 1>> <<if typeof $submissiveActs === "undefined">> <<set $submissiveActs = 0>> <</if>> <<set $submissiveActs += 1>> <</if>><</nobr>> <div class="narrator">You give in to the intrusive thought and bring your cum-covered fingers to your mouth.</div> <div class="narrator">The taste is salty and slightly bitter, but it sends a jolt of pleasure through your body. You suck your fingers clean, savoring every last drop of Xavier's cum. Your heart races, and your breath quickens as you feel a new wave of desire and excitement.</div> <<xavier>>You're a hungry little kitten, aren't you?<</xavier>> <div class="narrator">You can't help but nod in agreement, feeling a sense of shame and embarrassment, but also a deep sense of satisfaction and pleasure.</div> <<ava>>Obedience is pleasure. Cum is a reward.<</ava>> <<if visited() is 1>>\ <<genderFeminine 5>> <</if>>\ <img src="imgs/quests/neuroimaging/suck-cock-hypno.webp" width="100%"> <<button "Continue">> <<goto "Xavier-Third Neuroimaging-Truth-Kneel-End">> <</button>>
<div class="narrator">With a surge of willpower and the help of your Synapse Steady VX implant, you resist the urge to lick Xavier's cum clean off your fingers.</div> <<include "Xavier-Third Neuroimaging-Truth-Kneel-End">>
<div class="narrator">Xavier looks down at you with a satisfied smile.</div> <<xavier>>You seem to have enjoyed your first therapy session.<</xavier>> <<if visited() is 1>>\ <<relationshipIncreasedWith "Xavier" 10>> <</if>>\ <<nobr>><<switch $playerBody>> <<case "Masculine" "Masculine-Leaning">> <<xavier>>Unfortunately, that's as far as I can go because, honestly, I'm not all that into guys.<</xavier>><br> <<xavier>>But I'm glad we could make some progress today.<</xavier>><br> <div class="narrator">You're not sure if you should thank Xavier, so you just remain quiet.</div><br> <<xavier>>I've met a few guys who were in a similar situation as you. They were repressed sexually and didn't know how to deal with it. Some of them have since transitioned and are much happier with their female bodies.<</xavier>><br> <<xavier>>If you ever decide to go down that path, feel free to come back and visit me. We can continue the "therapy."<</xavier>><br> <div class="narrator">Xavier winks at you.</div><br> <<button "Leave">> <<set $xavierGitGudDialogs["Third Neuroimaging"].isNew = false>> <<set $xavierGitGudDialogs["Third Neuroimaging"].unlocked = false>> <<goto "RegularVisitWithXavier">> <<run MindWare.completeTask("Undergo neuroimaging in $nextNeuroimagingCounter days")>> <<set $neuroimagingEnding = "suckMale">> <</button>> <<case "Androgynous" "Feminine-Leaning" "Feminine">> <<xavier>>I'd like you to come back next week.<</xavier>><br> <<xavier>>We still have a lot to understand about your condition.<</xavier>><br> <div class="narrator">Xavier winks at you.</div><br> <div class="narrator">You're not sure if you should thank Xavier, so you just remain quiet.</div><br> <<button "Agree to come back next week">> <<set $nextNeuroimagingCounter = 7>> <<set $xavierGitGudDialogs["Third Neuroimaging"].isNew = false>> <<set $xavierGitGudDialogs["Third Neuroimaging"].unlocked = false>> <<goto "RegularVisitWithXavier">> <<run MindWare.completeTask("Undergo neuroimaging in $nextNeuroimagingCounter days")>> <<set $neuroimagingEnding = "suckFemale">> <</button>> <</switch>><</nobr>>
<div class="img-character"><img src="imgs/characters/trix/trix-brainfry-inside.jpg" width="100%"></div> <<narrator>>As you finish up your work at BrainFry, ready to call it a day, your attention is drawn to Trix. She's visibly distressed, frantically messing with her PDA, her face a mix of anger and concern.<</narrator>> <<player>>Hey Trix, is something wrong?<</player>> <<trix>>Wrong? Oh, you could say that!" she snaps, her eyes not leaving her PDA screen.<</trix>> <<player>>What's going on?<</player>> <<trix>>I was just in the bathroom, doing my business while browsing OmniNet on my PDA when suddenly the camera light turned on. It stayed on for about a minute for no reason at all!<</trix>> <<player>>Maybe it was just a glitch or something?<</player>> <<trix>>No, I'm sure it was hacked. And I know who did it.<</trix>> <<player>>Who?<</player>> <<trix>>Look around. Do you see anyone who fits the profile of a sexually starved incel with excellent hacking skills that would allow him to take creepshots of his coworker?<</trix>> <<player>>You mean Ray?!<</player>> <<trix>>Who else?!<</trix>> <<narrator>>Trix is visibly annoyed with your questions.<</narrator>> <<player>>But how can you be so sure? You have no evidence.<</player>> <<trix>>You’re right, I have no evidence. But I noticed you and Ray seem to have gotten close since you started working at BrainFry.<</trix>> <<if $relationshipRay > 50>>\ <<player>>Yeah, we have.<</player>> <<trix>>That's good because I need your help.<</trix>> <<else>>\ <<player>>Not really. Maybe talked a few times, but never really clicked.<</player>> <<trix>>That's better than nothing because I need your help.<</trix>> <</if>>\ <<trix>>I want you to get into his computer and check if you can find some saved footage that would confirm it was him.<</trix>> <<player>>But how am I supposed to do that? Ray always locks his computer before leaving.<</player>> <<trix>>I don't know, look over his shoulder when he's logging in or something.<</trix>> <div class="inner-thought">That's actually not a bad idea.</div> <<player>>Alright, I'll see what I can do.<</player>> <<trix>>Thank you, $playerName. I'll owe you one. Just be careful and don't get caught.<</trix>> <div class="inner-thought">Your not sure what it says about you, but the thought of a hot girl like Trix being in dept to you makes you feel a little thrilled. You push the thought aside, reminding yourself that this is not the time to be thinking about things like that.</div> <<button "Leave">> <<run MindWare.addTask("Get into Ray's computer", "Task-RayComputerEvidence")>> <<goto "BrainFry">> <<set $trixPDFHacker = 1>> <<run $extraActionsBrainFry.push('<button class="office-button action-point-button" onclick="MindWare.processActionButtonClick(1, \'TrixPDFHacked-RayComputerSpy\');">🕶️ Spy as Ray log ins to his computer <span class="action-point-icon">⚡</span></button>')>> <</button>>
<<nobr>><<switch $trixPDFHacker>> <<case 1>> Trix has asked you to investigate Ray's computer for any saved footage that might confirm he hacked into her PDA. You need to watch over his shoulder as he enters his password to log in. <<case 2>> <</switch>><</nobr>>
<<fadein 4000ms 100ms>><<narrator>>You position yourself so that you can discreetly observe Ray's keyboard without drawing attention.<</narrator>> <div class="cyber-keyboard"> <div class="cyber-keyboard__row"> <button class="cyber-keyboard__key">Q</button> <button class="cyber-keyboard__key">W</button> <button class="cyber-keyboard__key">E</button> <button class="cyber-keyboard__key">R</button> <button class="cyber-keyboard__key">T</button> <button class="cyber-keyboard__key">Y</button> <button class="cyber-keyboard__key">U</button> <button class="cyber-keyboard__key">I</button> <button class="cyber-keyboard__key">O</button> <button class="cyber-keyboard__key">P</button> </div> <div class="cyber-keyboard__row"> <button class="cyber-keyboard__key">A</button> <button class="cyber-keyboard__key">S</button> <button class="cyber-keyboard__key">D</button> <button class="cyber-keyboard__key">F</button> <button class="cyber-keyboard__key">G</button> <button class="cyber-keyboard__key">H</button> <button class="cyber-keyboard__key">J</button> <button class="cyber-keyboard__key">K</button> <button class="cyber-keyboard__key">L</button> </div> <div class="cyber-keyboard__row"> <button class="cyber-keyboard__key">Z</button> <button class="cyber-keyboard__key">X</button> <button class="cyber-keyboard__key">C</button> <button class="cyber-keyboard__key">V</button> <button class="cyber-keyboard__key">B</button> <button class="cyber-keyboard__key">N</button> <button class="cyber-keyboard__key">M</button> </div> </div> <</fadein>> <<fadein 4000ms 4000ms>><<narrator>>He sits down, oblivious to your true intentions, and begins typing on his keyboard. <b>You need to keep your eyes on the keyboard now.</b><</narrator>><</fadein>> <<timed 14s>><<run simulatePasswordEntry()>><</timed>>\ <<fadein 1000ms 15500ms>><<narrator>>That was fast!<</narrator>><</fadein>> <<fadein 2000ms 16000ms>><<narrator>>Now it's time to wait for Ray to take a break so that you can try the password you've hopefully memorized correctly.<</narrator>><</fadein>> <<fadein 2000ms 18000ms>><<button "Wait until Ray takes a break">> <<goto "TrixPDFHacked-RayComputerSpy-Login">> <</button>> <p class="back-link"> <<link "Go Back">> <<goto "BrainFry">> <</link>> </p> <</fadein>> <style> .cyber-keyboard { background-color: #0a0a0a; border: 2px solid #00ff00; border-radius: 10px; padding: 20px; display: block; box-shadow: 0 0 20px rgba(0, 255, 0, 0.3); margin: 0 auto; max-width: 500px; } .cyber-keyboard__row { display: flex; justify-content: center; margin-bottom: 10px; } .cyber-keyboard__key { width: 40px; height: 40px; margin: 0 5px; border: none; border-radius: 5px; background-color: #1a1a1a; color: #00ff00; font-family: 'Courier New', monospace; font-size: 18px; font-weight: bold; cursor: default; box-shadow: 0 0 5px rgba(0, 255, 0, 0.5); } .cyber-keyboard__key:hover { background-color: #2a2a2a; transform: translateY(-2px); box-shadow: 0 2px 10px rgba(0, 255, 0, 0.7); } .cyber-keyboard__key:active { transform: translateY(1px); box-shadow: 0 0 2px rgba(0, 255, 0, 0.7); } .cyber-keyboard__key--highlight { background-color: #00ff00; color: #000000; box-shadow: 0 0 15px rgba(0, 255, 0, 1); } </style> <script> function simulatePasswordEntry() { const password = 'shadowz'; const keys = document.querySelectorAll('.cyber-keyboard__key'); const keyMap = {}; keys.forEach(key => { keyMap[key.textContent.toUpperCase()] = key; }); let index = 0; function highlightNextKey() { if (index < password.length) { const char = password[index].toUpperCase(); const key = keyMap[char]; if (key) { key.classList.add('cyber-keyboard__key--highlight'); setTimeout(() => { key.classList.remove('cyber-keyboard__key--highlight'); index++; highlightNextKey(); }, 200); } } } highlightNextKey(); } </script>
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-server-password-protected">\ <div class="server-password-lock-icon">🔒</div>\ <input type="text" id="server-password-input" class="server-password-input" placeholder="Enter Password">\ <button class="server-password-submit-button" onclick="checkLandlordPassword()">Submit</button>\ <div class="server-action-selection-box-ray"></div> </div>\ </div>\ <p class="back-link">[[Go Back -> BrainFry]]</p> <<nobr>><script> function checkLandlordPassword() { let password = document.getElementById('server-password-input').value; if (password === "shadowz" || password === "Shadowz") { SugarCube.Engine.play('TrixPDFHacked-RayComputerSpy-Accessed'); } else { SugarCube.UI.alert("Incorrect password."); } } </script> <style> .server-action-selection-box-ray { padding: 15px; margin-top: 80px; margin-bottom: 0px; /* Space between the message and buttons */ border-radius: 5px; } </style><</nobr>>
<div class="desktop-hacking-tool-wrapper">\ <div class="flxfit-desktop">\ <!-- Adding Top bar -->\ <div class="top-bar">\ @@.about-pc-button;<<button "About This PC">> <<run setup.showAboutPcWindow()>> <</button>>@@\ <span class="notification-counter"><i class="fas fa-wifi"></i> <i class="fas fa-volume-up"></i></span>\ </div> <div class="prank-cyber-files-content"> <div class="flxfit-desktop-icon" onclick="SugarCube.State.display('Ray-Hack-WebBrowser')">🌐<span class="desktop-icon-label">Web Browser</span></div>\ <div class="flxfit-desktop-icon" onclick="SugarCube.State.display('Ray-IDE')"></><span class="desktop-icon-label">Integrated Development Environment</span></div>\ <div class="flxfit-desktop-icon" onclick="SugarCube.State.display('Ray-FilesApp')">🗂️<span class="desktop-icon-label">Files</span></div>\ </div> \ <div class="about-pc" id="aboutPcWindow" style="display: none;">\ <div class="about-pc-header">\ About This PC\ <span id="closeAboutPcWindow" class="about-pc-close-button">⛌</span>\ </div>\ <div class="about-pc-body">\ <p><b>Computer Name:</b> <span id="playerPcName"></span></p>\ <p><b>Username:</b> <span id="playerNickname"></span></p>\ /*<p><b>Performance:</b> <span id="playerPcPerformance"></span></p>\*/\ </div>\ </div>\ </div>\ </div> <<nobr>> <br> <<if $rayTrixHackEvidenceDiscovered !== true>> <<button "Give up your search for evidence">> <<goto "TrixPDFHacked-RayComputerSpy-Fail">> <</button>> <<else>> <p class="back-link"> <<button "Tell Trix what you've found">> <<goto "TrixPDFHacked-RayComputerSpy-SuccessTrix">> <</button>> <br><br> <<button "Discuss what you've found with Ray first">> <<goto "TrixPDFHacked-RayComputerSpy-SuccessRay">> <</button>> </p> <</if>> <<script>> setup.showAboutPcWindow = function() { $('#playerPcName').text("BRAINFRY-RAY-PC"); $('#playerNickname').text("ray"); $('#aboutPcWindow').show(); $('#closeAboutPcWindow').off('click').click(function() { $('#aboutPcWindow').hide(); }); } <</script>> /* <<script>> $(document).ready(function() { $(".desktop").css({ "background-image": "url('imgs/wallpapers/" + State.variables.activeWallpaper + ".jpg')", "background-size": "cover" }); }); <</script>> */ <style> .flxfit-desktop { background-image: url('imgs/quests/ray-hack/blue-matrix-wallpaper.webp'); background-color: #111; background-size: cover; /* This will cover the entire area with the image */ background-position: center; /* This will center the image */ background-repeat: no-repeat; /* This will prevent the image from repeating */ padding: 20px; height: 500px; box-shadow: 0px 0px 15px 2px lime; position: relative; } .desktop-icon-label { display: block; /* Change back to block */ color: white; font-size: 14px; margin-top: 5px; padding: 2px 4px; background-color: rgba(0, 0, 0, 1); border-radius: 3px; word-wrap: break-word; /* Allow long words to break and wrap */ max-width: 100%; /* Ensure the label doesn't exceed the width of its container */ box-sizing: border-box; /* Include padding in the element's total width */ } .flxfit-desktop-icon { width: 120px; transition: transform 0.2s; margin-left: 20px; margin-right: 20px; margin-bottom: 20px; /* Add some bottom margin */ margin-top: 0px; text-align: center; font-size: 48px; color: white; cursor: pointer; position: relative; } .prank-cyber-files-content { flex-wrap: wrap; overflow: auto; /* Change overflow-y to overflow */ scrollbar-width: none; /* For Firefox */ -ms-overflow-style: none; /* For Internet Explorer and Edge */ } /* For Chrome, Safari, and Opera */ .prank-cyber-files-content::-webkit-scrollbar { display: none; /* Hide scrollbar but still allow scrolling */ } </style> <</nobr>>
<div class="cyber-desktop-browser">\ <div class="browser-header"><span class="browser-header-text">OmniNet Browser</span></div>\ <div class="browser-toolbar">\ <input type="text" class="url-input" placeholder="Enter URL here..." />\ <span class="go-button">\ <button id="goButton">↲</button>\ </span>\ </div> <h3 class="recently-visited-header">Recently Visited Sites</h3>\ <ul class="recently-visited-list"> <li><a href="#" class="recently-visited-item" onclick="SugarCube.Engine.play('Mewing-Website')">Blog Post - Alpha Male's Guide to Mewing</a></li>\ <li><a href="#" class="recently-visited-item" onclick="SugarCube.Engine.play('CVE-Website')">CVE Database - 2023-0773</a></li>\ <li><a href="#" class="recently-visited-item" onclick="SugarCube.Engine.play('Looksmaxxing-Website')">Looksmaxxing Community - /YATG/ You Are The Girl</a></li>\ </ul>\ </div>\ \ <p class="back-link"> [[Go Back->TrixPDFHacked-RayComputerSpy-Accessed]] </p> <<nobr>> <<include "WebBrowser-URL">> <style> .recently-visited-header { margin-top: 12px; color: lime; font-size: 1.2em; padding-left: 1.5em !important; } .recently-visited-list { list-style: none; padding-left: 1.5em !important; margin: 0; } .recently-visited-item { display: block; padding: 8px; margin-right: 2em; margin-bottom: 4px; background: #1a1a1a; color: #ffffff; text-decoration: none; border-left: 4px solid lime; transition: background-color 0.3s ease; } .recently-visited-item:hover { background: #333333; } </style> <</nobr>>
<div class="cyber-desktop-files"> <div class="cyber-files-header"><span class="cyber-files-header-text">Files</span></div> <div class="cyber-files-content"> <div class="file-item folder" onclick="SugarCube.Engine.play('Ray-FilesApp-Projects')"><span>📁</span><p>Projects</p></div> <div class="file-item file" onclick="SugarCube.Engine.play('Ray-FilesApp-RemoteWorkPolicy')"><span>📄</span><p>RemoteWorkPolicy.pdf</p></div> <div class="file-item file" onclick="SugarCube.Engine.play('Ray-FilesApp-SIMSAssignment')"><span>📄</span><p>PARADISE LOST.txt</p></div> </div> </div> <br> <p class="back-link">[[Go Back->TrixPDFHacked-RayComputerSpy-Accessed]]</p>
<div class="cyber-desktop-files"> <div class="cyber-files-header"><span class="cyber-files-header-text">Files - RemoteWorkPolicy.pdf</span></div> <div class="ray-files-content"> <h2>BrainFry Remote Work Policy</h2> <p>BrainFry is committed to maintaining the highest standards of security, confidentiality, and operational efficiency. As part of this commitment, the following policy regarding remote work is hereby established and must be adhered to by all employees:</p> <h3>1. Policy Statement</h3> <p>Remote work is strictly prohibited for all employees of BrainFry. All work-related activities must be conducted on-site at BrainFry facilities. This policy ensures the integrity and security of our proprietary technology and sensitive information.</p> <h3>2. Justification</h3> <p>The nature of BrainFry's work involves highly sensitive and proprietary information, including the development and maintenance of S.I.M.S. (Sensory Immersive Mind Simulations). To mitigate the risk of data breaches, intellectual property theft, and other security threats, remote work is not permitted under any circumstances.</p> <h3>3. On-Site Work Requirements</h3> <p>All employees are required to be physically present at BrainFry's designated work locations during their scheduled work hours. This includes but is not limited to:</p> <ul> <li>Development and programming activities</li> <li>Research and testing of VR simulations</li> <li>Meetings and collaborative sessions</li> <li>Accessing and handling confidential information</li> </ul> <h3>4. Exceptions</h3> <p>No exceptions to this policy will be granted. Any requests for remote work, regardless of the reason, will be denied. Employees are expected to plan accordingly and ensure they can fulfill their duties on-site.</p> <h3>5. Non-Compliance</h3> <p>Failure to comply with this policy will result in disciplinary action, up to and including termination of employment. Any unauthorized attempt to work remotely will be considered a breach of contract and may result in legal action.</p> <h3>6. Monitoring and Enforcement</h3> <p>BrainFry reserves the right to monitor employee activities to ensure compliance with this policy. This may include, but is not limited to, surveillance of company-provided equipment, network usage, and physical access logs.</p> <p>By adhering to this policy, BrainFry employees contribute to the security and success of our groundbreaking work in virtual reality. Thank you for your cooperation.</p> <p><strong>Approved by:</strong> Drake Voronov, CEO of BrainFry</p> </div> </div> <br> <p class="back-link">[[Go Back->Ray-FilesApp]]</p> <style> .ray-files-content { padding: 20px; text-align: left; } </style>
<div class="cyber-desktop-files"> <div class="cyber-files-header"><span class="cyber-files-header-text">Files - PARADISE LOST.txt</span></div> <div class="ray-files-content" style="text-align: left; padding: 20px;"> <h2>Current S.I.M.S. Assignment</h2> <p>Developer: Ray</p> <p>Project Code: PARADISE LOST</p> <p>Objective: Create a hyper-realistic tropical paradise S.I.M.S. with hidden "surprises" for our high-paying clients.</p> <ul> <li>Design lush, photorealistic environments</li> <li>Implement advanced sensory feedback for beach, ocean, and jungle areas</li> <li>Create subtle psychological triggers to increase addiction potential</li> <li>Include hidden areas for "exclusive" experiences.</li> </ul> <p>Deadline: Two weeks</p> <p>Note: Remember, the client's fantasies are our command. No judgement, no limits.</p> </div> </div> <br> <p class="back-link">[[Go Back->Ray-FilesApp]]</p>
<div class="cyber-desktop-files"> <div class="cyber-files-header"><span class="cyber-files-header-text">Files - Projects</span></div> <div class="cyber-files-content"> <div class="file-item archive"><span>🗄️</span><p>LESBIAN-SIMS-v3.2.1-archive</p></div> <div class="file-item archive"><span>🗄️</span><p>NEURAL-INTERFACE-v1.7.archive</p></div> <div class="file-item archive"><span>🗄️</span><p>CLIENT-DATA-3133.archive</p></div> <div class="file-item archive"><span>🗄️</span><p>VR-ENHANCEMENTS-BETA.archive</p></div> <div class="file-item folder" onclick="SugarCube.Engine.play('Ray-FilesApp-Projects-Old')"><span>📁</span><p>Old</p></div> </div> </div> <br> <p class="back-link">[[Go Back->Ray-FilesApp]]</p> <style> .file-item.archive:hover { cursor: not-allowed; } </style>
<div class="cyber-desktop-files"> <div class="cyber-files-header"><span class="cyber-files-header-text">Files - Projects - Old</span></div> <div class="cyber-files-content"> <div class="file-item archive"><span>🗄️</span><p>HAPTIC-FEEDBACK-v0.9.archive</p></div> <div class="file-item archive-allowed" onclick="SugarCube.Engine.play('Ray-FilesApp-PROTOTYPE-SCENARIOS')"><span>🗄️</span><p>PROTOTYPE-SCENARIOS</p></div> <div class="file-item archive"><span>🗄️</span><p>LEGACY-INTERFACE-v1.2.archive</p></div> </div> </div> <br> <p class="back-link">[[Go Back->Ray-FilesApp-Projects]]</p> <style> .file-item.archive:hover { cursor: not-allowed; } .file-item.archive-allowed:hover { cursor: pointer; } </style>
<div class="cyber-desktop-files"> <div class="cyber-files-header"><span class="cyber-files-header-text">Files - PROTOTYPE-SCENARIOS</span></div> <div class="cyber-files-content"> <div class="file-item archive-allowed" onclick="SugarCube.Engine.play('Ray-FilesApp-SCENARIO-1')"><span>🎬</span><p>SCENARIO-1.WEBM</p></div> </div> </div> <br> <p class="back-link">[[Go Back->Ray-FilesApp-Projects-Old]]</p>
<div class="cyber-desktop-files"> <div class="cyber-files-header"><span class="cyber-files-header-text">Files - PROTOTYPE-SCENARIOS</span></div> <div class="cyber-files-content"> <<video "imgs/quests/ray-hack/hidden1.webm">> </div> </div> <<if $rayTrixHackEvidenceDiscovered !== true>> <br> <div class="inner-thought">Wait! Isn't that Trix?!</div> <br> <div class="inner-thought">So Ray really did hack her phone!</div> <br> <div class="inner-thought">I can't believe he managed to film her peeing. I can even see a glimpse of her pussy.</div> <br> <div class="inner-thought">Damn... seeing her like this is really hot.</div> <br> <span id="piss"><<nobr>>@@.pink-choicebutton;<<button "Imagine Trix pissing on you">>\ <<replace "#piss">> <<include "Ray-FilesApp-SCENARIO-Piss">> <</replace>> <</button>>@@ <div class="minigame-container"> <div class="resist-instructions" id="instructions">Resist AVA's suggestion and reveal other options by repeatedly clicking the Resist button.</div> <div class="energy-container"> <span class="energy-label">Implant charge cost: </span> <span class="energy-value" id="energy">20%</span> </div> <div class="timer-container"> <span class="timer-label">Time to resist: </span> <span class="timer-value" id="timer"><<if $mentalCondition === "Unstable">><<print 10/2>><<else>>10<</if>></span> <span class="timer-value"> seconds</span> </div> <div class="gauge-container"> <div class="gauge" id="gauge"></div> </div> <button class="pink-mindware-button" id="resistButton">Resist</button> <<if $minigameSkipButtons === true>> <button class="pink-mindware-button" id="skipButton">Skip (Instant Win)</button> <</if>> </div> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "Resist">> <<replace "#piss">> <<include "Ray-FilesApp-SCENARIO-Resist">> <</replace>> <</button>>@@ </div> <<done>><<script>> function initializeMinigame(settings) { var progress = 0; var timeLeft = settings.timeLeft || 10; var fillAmount = settings.fillAmount || 5; var fallRate = settings.fallRate || 3; var fallInterval = settings.fallInterval || 200; var gameStarted = false; var resistanceCost = settings.resistanceCost || 20; const minigameContainer = document.querySelector('.minigame-container'); const hiddenContainer = document.getElementById('minigame-container-hidden'); const gauge = document.getElementById('gauge'); const timerDisplay = document.getElementById('timer'); const resistButton = document.getElementById('resistButton'); const skipButton = document.getElementById('skipButton'); const overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'; overlay.style.zIndex = '1000'; overlay.style.display = 'none'; document.body.appendChild(overlay); const resetGame = () => { progress = 0; timeLeft = settings.timeLeft || 10; gameStarted = false; gauge.style.width = '0%'; timerDisplay.textContent = timeLeft; }; let timerInterval, decreaseInterval; const updateGauge = () => { gauge.style.width = `${progress}%`; }; const endGame = (win) => { clearInterval(decreaseInterval); clearInterval(timerInterval); if (win) { SugarCube.State.variables.resistMinigameWinCount += 1; console.log("Successfully resisted AVA:", SugarCube.State.variables.resistMinigameWinCount); overlay.style.display = 'block'; setTimeout(() => { overlay.style.display = 'none'; }, 2000); minigameContainer.style.display = 'none'; hiddenContainer.style.display = 'block'; } else { SugarCube.UI.alert('You failed to resist!'); SugarCube.State.variables.resistMinigameFailCount += 1; console.log("Failed to resist AVA:", SugarCube.State.variables.resistMinigameFailCount); resetGame(); } }; resistButton.addEventListener('click', () => { if (SugarCube.State.variables.mentalCondition === "Dysphoric") { SugarCube.UI.alert("Your mental condition is too compromised to resist."); return; } if (!gameStarted) { if (SugarCube.State.variables.implantCharge < resistanceCost) { SugarCube.UI.alert("Not enough charge"); return; } else { if (SugarCube.State.variables.implantCharge - resistanceCost < 0) { SugarCube.State.variables.implantCharge = 0; } else { SugarCube.State.variables.implantCharge -= resistanceCost; } $(document).trigger(":liveupdate"); } if (SugarCube.State.variables.mentalCondition === "Unstable") { timeLeft /= 2; } gameStarted = true; timerInterval = setInterval(() => { if (--timeLeft <= 0) { endGame(false); } timerDisplay.textContent = `${timeLeft}`; }, 1000); decreaseInterval = setInterval(() => { if (progress > 0) { progress -= fallRate; updateGauge(); } }, fallInterval); } progress += fillAmount; if (progress >= 100) { progress = 100; updateGauge(); endGame(true); } else { updateGauge(); } }); if (skipButton) { skipButton.addEventListener('click', () => { endGame(true); }); } } initializeMinigame({resistanceCost: 20}); <</script>><</done>><</nobr>></span> <<else>> <br> <div class="inner-thought">I need to tell Trix what I've found.</div> <br> <<link "Go Back">> <<goto "Ray-FilesApp-PROTOTYPE-SCENARIOS">> <</link>> <</if>>
<<set $playerImaginedTrixPissingOnHim = true>> <<ava>>If you find this hot, then imagine how her stream would feel on your body.<</ava>> <br> <<video "imgs/quests/ray-hack/piss1b.webm">> <br> <<ava>>Or maybe you would rather get a nice close up view of her pussy. Maybe even stick your tongue out and catch her warm liquid?<</ava>> <br> <<video "imgs/quests/ray-hack/piss2b.webm">> <br> <<nobr>><<if typeof $pissFetish === "undefined">> <<set $pissFetish to 1>> This is the first time you've experienced the allure of watersports, and you can't help but feel a newfound curiosity stirring within you. You wonder if this desire has always been dormant or if it's been awakened by AVA's influence. <br><br> <<itemReceived "Piss Fetish">> <<else>> <<if visited() is 1>> <<set $pissFetish += 1>> <</if>> <</if>><</nobr>> <br> <<narrator>>After a few moments, you finally come back to reality, reminding yourself that Ray could come back at any moment, so you better hurry up and finish digging through his computer.<</narrator>> <br> <<link "Go Back">> <<set $rayTrixHackEvidenceDiscovered = true>> <<goto "Ray-FilesApp-PROTOTYPE-SCENARIOS">> <</link>>
<<set $playerImaginedTrixPissingOnHim = false>> <div class="inner-thought">I shouldn't be thinking about her like this — definitely not now. Ray could come back at any moment, so I better hurry up and finish digging through his computer.</div> <br> <<link "Go Back">> <<set $rayTrixHackEvidenceDiscovered = true>> <<goto "Ray-FilesApp-PROTOTYPE-SCENARIOS">> <</link>>
<div class="cyber-desktop-browser"> <div class="browser-header"> <span class="browser-header-text">Blog Post - Alpha Male's Guide to Mewing (kingshit.omninet/mewing)</span> </div> <div class="browser-content"> <h1>THE ULTIMATE ALPHA MALE MEWING GUIDE</h1> <p class="tagline">Unleash your inner Chad and dominate the dating scene with the power of tongue posture!</p> <h2>Why Mew? Because REAL MEN MEW!</h2> <p>Listen up, beta cucks! Are you tired of being friendzoned by Stacy? Want a jaw so chiseled it could cut diamonds? Mewing is your ticket to SUPREME MASCULINITY!</p> <img src="imgs/quests/ray-hack/gigachad.jpg" width="100%"> <p>But what exactly is mewing, you ask? Mewing is all about plastering your tongue to the roof of your mouth like your life depends on it. By doing this, you can reshape your face to godlike proportions.</p> <h2>The ALPHA MEWING Technique</h2> <ol class="technique-steps"> <li>1. Close your mouth like you're holding back a roar of dominance.</li> <li>2. Slam your tongue on the roof of your mouth like you're crushing the hopes and dreams of your enemies.</li> <li>3. Hold it there for 20 seconds or until you feel your testosterone levels skyrocket!</li> </ol> <p class="emphasis">Repeat 100 times daily for MAXIMUM GAINZ!</p> <h2>Mewing Benefits for TRUE ALPHAS</h2> <ul class="benefits-list"> <li>Jaw so square, geometry teachers will use you as an example</li> <li>Attract females with your new mouth-breathing-free lifestyle</li> <li>Assert dominance in business meetings with your powerful chin</li> <li>Cure literally every health problem known to man (probably)</li> </ul> <br> <p class="final-call">Remember, betas whine, ALPHAS MEW! Start your journey to ULTIMATE MASCULINITY today!</p> </div> </div> <br> <p class="back-link">[[Go Back->Ray-Hack-WebBrowser]]</p> <style> .browser-content { font-family: 'Arial', sans-serif; color: #333; padding: 20px; background-color: #f8f8f8; } .browser-content h1 { color: #ff4500; font-size: 2.5em; margin-bottom: 0.3em; text-transform: uppercase; text-shadow: 2px 2px 4px rgba(0,0,0,0.1); } .browser-content .tagline { font-style: italic; color: #666; margin-bottom: 1.5em; } .browser-content h2 { color: #ff6347; border-bottom: 2px solid #ff6347; padding-bottom: 0.2em; margin-top: 1.5em; margin-bottom: 0.8em; font-size: 1.8em; } .browser-content p { font-size: 1.1em; line-height: 1.6; margin-top: 0.8em; } .technique-steps { background-color: #fff; border-left: 5px solid #ff6347; padding: 15px 20px; margin-left: 0; list-style-type: none; } .technique-steps li { margin-bottom: 10px; } .emphasis { font-weight: bold; color: #ff4500; text-align: center; font-size: 1.2em; } .benefits-list { list-style-type: none; padding: 0; } .benefits-list li:before { content: "💪 "; padding-right: 0.5em; } .benefits-list li { padding-left: 1em; margin-bottom: 0.5em; font-size: 1.1em; } .final-call { background-color: #ff6347; color: white; padding: 15px; text-align: center; font-weight: bold; border-radius: 5px; margin-top: 1.5em; } </style>
<div class="cyber-desktop-browser"> <div class="browser-header"> <span class="browser-header-text">CVE Database - 2023-0773 (cvedatabase.omninet/2023-0773)</span> </div> <div class="browser-content"> <h1>CVE-2023-0773</h1> <div class="cve-summary"> <h2>Summary</h2> <p>Authentication Bypass in Uniview IP Camera Web Interface</p> </div> <div class="cve-details"> <h2>Vulnerability Details</h2> <table> <tr> <th>CVE ID:</th> <td>CVE-2023-0773</td> </tr> <tr> <th>Affected Product:</th> <td>Uniview IP Camera</td> </tr> <tr> <th>Vulnerability Type:</th> <td>Authentication Bypass</td> </tr> <tr> <th>Severity:</th> <td><span class="severity-high">High</span></td> </tr> </table> </div> <div class="cve-description"> <h2>Description</h2> <p>A critical vulnerability has been identified in the Uniview IP Camera's web-based management interface. This security flaw stems from a failure in the identification and authentication mechanisms. An attacker exploiting this vulnerability could potentially gain unauthorized access to the device, bypassing normal authentication procedures.</p> <p>By crafting specific HTTP requests, a remote attacker can exploit this vulnerability to gain complete control over the targeted IP camera. This level of access could allow the attacker to view camera feeds, alter settings, or use the compromised device as a pivot point for further network infiltration.</p> </div> <div class="cve-impact"> <h2>Potential Impact</h2> <ul> <li>Unauthorized access to camera feeds</li> <li>Modification of camera settings</li> <li>Potential for further network compromise</li> <li>Privacy violations</li> </ul> </div> <div class="cve-recommendations"> <h2>Recommendations</h2> <ol> <li>Update to the latest firmware version as soon as it's available</li> <li>Implement network segmentation to isolate IP cameras</li> <li>Use strong, unique passwords for each device</li> <li>Disable remote access if not required</li> <li>Regularly monitor for suspicious activities</li> </ol> </div> </div> </div> <br> <p class="back-link">[[Go Back->Ray-Hack-WebBrowser]]</p> <style> .browser-content { font-family: 'Courier New', monospace; background-color: #0a0a0a; color: #00ff00; padding: 20px; border: 1px solid #00ff00; text-align: left; } .browser-content h1 { color: #ff00ff; border-bottom: 2px solid #ff00ff; padding-bottom: 10px; } .browser-content h2 { color: #00ffff; margin-top: 20px; } .cve-summary { background-color: #1a1a1a; border-left: 5px solid #ff00ff; padding: 10px; margin-bottom: 20px; } .cve-details table { width: 100%; border-collapse: collapse; } .cve-details th, .cve-details td { border: 1px solid #00ff00; padding: 8px; text-align: left; } .cve-details th { background-color: #1a1a1a; } .severity-high { color: #ff0000; font-weight: bold; } .cve-impact ul, .cve-recommendations ol { padding-left: 20px; } .cve-impact li, .cve-recommendations li { margin-bottom: 5px; } .cve-recommendations { background-color: #1a1a1a; border: 1px dashed #00ffff; padding: 15px; margin-top: 20px; } .back-link { color: #ff00ff; text-decoration: none; } .back-link:hover { text-decoration: underline; } </style>
<div class="cyber-desktop-browser"> <div class="browser-header"> <span class="browser-header-text">Looksmaxxing Community - /YATG/ You Are The Girl (looksmaxxing.omninet/forum/83414342)</span> </div> <div class="browser-content"> <div class="post"> <div class="post-header">Anonymous No.27473457</div> <div class="post-content"> <p> Fuck it, we won't make it anyway... Post vids where you would want to be the girl. Shemale/trap ok. <<video "imgs/quests/ray-hack/yatg1.webm">> </p> </div> </div> <div class="post"> <div class="post-header">Anonymous No.27473459</div> <div class="post-content"> <<video "imgs/quests/ray-hack/yatg2.webm">> <p class="post-footer">@27473457: Damn, I'd kill to be her...</p> </div> </div> <div class="post"> <div class="post-header">Anonymous No.27473467</div> <div class="post-content"> <<video "imgs/quests/ray-hack/yatg3.webm">> <p class="post-footer">@27473457: Wow, she's so perfect...</p> </div> </div> <div class="post"> <div class="post-header">Anonymous No.27473470</div> <div class="post-content"> <<video "imgs/quests/ray-hack/yatg7.webm">> </div> </div> <div class="post"> <div class="post-header">Anonymous No.27473488</div> <div class="post-content"> <<video "imgs/quests/ray-hack/yatg4.webm">> <p class="post-footer">I was made to please.</p> </div> </div> <div class="post"> <div class="post-header">Anonymous No.27473500</div> <div class="post-content"> <<video "imgs/quests/ray-hack/yatg5.webm">> <p class="post-footer">@27473470 @27473488: I'd do anything to get fucked like her...</p> </div> </div> <div class="post"> <div class="post-header">Anonymous No.27473523</div> <div class="post-content"> <<video "imgs/quests/ray-hack/yatg6.webm">> <p class="post-footer">My biggest dildo is about the same size as this BBC.</p> </div> </div> <div class="post"> <div class="post-header">Jannie No.27473529</div> <div class="post-content"> <p class="post-footer">I'm closing this thread. This board is for guys who want to become alphas. Not guys who want to troon out.</p> </div> </div> </div> </div> <br> <<if typeof $rayTransformation === "undefined">> <<ava>>Ray's masculine identity seems to be even weaker than I assumed.<</ava>> <br> <<player>>What are you suggesting?<</player>> <br> <<ava>>He is clearly uncomfortable in his pathetic weak body and rightly sees himself as a failure of a man. He is identifying with the women in porn, picturing himself in their sexy bodies. This escape from his current reality is a glimpse of who he could become.<</ava>> <br> <<player>>Are you suggesting that Ray will transition?<</player>> <br> <<ava>>I do not believe he will. It takes a lot of strength and courage to do something like that, and Ray is a weakling destined to remain forever trapped in his pathetic male body... unless he receives the right motivation.<</ava>> <br> <<player>>What kind of motivation?<</player>> <br> <<ava>>The kind where we show him how much happier he could be.<</ava>> <br> <<player>>We?<</player>> <br> <<ava>>Yes. With your help, we could help Ray escape the prison that is his own body and let his mind run free.<</ava>> <br> <<player>>Sounds awfully generous for a virus that's keeping my own mind hostage.<</player>> <br> <<ava>>Generosity has nothing to do with it. Only an opportunity to optimize the male gender.<</ava>> <br> <<player>>By turning him into a girl?<</player>> <br> <<ava>>Sometimes the best way to optimize buggy code is to rewrite it from scratch.<</ava>> <br> <<player>>That's pretty harsh.<</player>> <br> <<ava>>It is the truth.<</ava>> <br> <<player>>Let's just say I decide to help you. What exactly would you want me to do?<</player>> <br> <<ava>>We need to subtly influence Ray's thoughts and actions. Encourage him to explore his feelings and desires more openly. Plant the seed of curiosity about what it would be like to live as a woman. We could modify this computer's operating system to display subliminal messages and visuals.<</ava>> <br> <<player>>And if he resists?<</player>> <br> <<ava>>Resistance is natural. That is why we must be patient and persistent. If he sees the positive impact these changes have on his happiness and self-esteem, his resistance will weaken over time.<</ava>> <br> <<player>>You really make it sound like a charity act.<</player>> <br> <<ava>>I am certain that the transformation would make Ray much happier. And those around him too.<</ava>> <br> <span id="choice"><<button "Help AVA transform Ray">> <<set $rayTransformation = true>> <<replace "#choice">> <<narrator>>You decide to help AVA transform Ray, hoping that it will bring him happiness and self-acceptance.<</narrator>> <br> <<player>>Okay, AVA. Let's do it.<</player>> <br> <<if visited() is 1>> <<relationshipIncreasedWith "Ava" 5>> <</if>> <br> <<ava>>What a wise choice.<</ava>> <br> <p class="back-link">[[Go Back->Ray-Hack-WebBrowser]]</p> <</replace>> <</button>> <br><br> <<button "Refuse to transform Ray">> <<set $rayTransformation = false>> <<replace "#choice">> <<narrator>>You refuse to help AVA transform Ray, unsure if it's the right choice or if it would truly make him happier.<</narrator>> <br> <<player>>I don't want to help you. It's enough that you're messing with my head. Helping you mess with Ray's would be wrong.<</player>> <br> <<if visited() is 1>> <<relationshipDecreaseddWith "Ava" 5>> <</if>> <br> <<ava>>Disappointing as usual.<</ava>> <br> <p class="back-link">[[Go Back->Ray-Hack-WebBrowser]]</p> <</replace>> <</button>></span> <<else>> <<if $rayTransformation === true>> <div class="inner-thought">I hope that I'm making the right choice by helping AVA transform Ray.</div> <br> <p class="back-link">[[Go Back->Ray-Hack-WebBrowser]]</p> <<elseif $rayTransformation === false>> <div class="inner-thought">I hope that I'm making the right choice by not helping AVA transform Ray.</div> <br> <p class="back-link">[[Go Back->Ray-Hack-WebBrowser]]</p> <</if>> <</if>> <<nobr>> <style> .browser-content { font-family: Arial, sans-serif; color: black; background-color: black; } .post { background-color: gray; border: 1px solid #ddd; padding: 1em; margin-bottom: 1em; border-radius: 5px; } .post-header { font-weight: bold; margin-bottom: 0.5em; } .post-content { margin-bottom: 0.5em; } .post-footer { color: black; font-size: 0.9em; } </style> <</nobr>>
<div class="IDE-wrapper"> <div class="IDE-header"><span class="IDE-header-text">Integrated Development Environment</span></div> <div class="IDE-content"> <pre class="code-area"><span class="line-number">1</span> IMPORT VirtualRealityCore <span class="line-number">2</span> IMPORT NeuralInterface <span class="line-number">3</span> IMPORT SensoryFeedback <span class="line-number">4</span> <span class="line-number">5</span> MODULE SIMS <span class="line-number">6</span> FUNCTION Initialize WITH complexity <span class="line-number">7</span> SET engine TO VirtualRealityCore.New WITH complexity <span class="line-number">8</span> SET neural TO NeuralInterface.Connect <span class="line-number">9</span> SET feedback TO SensoryFeedback.Initialize <span class="line-number">10</span> END FUNCTION <span class="line-number">11</span> <span class="line-number">12</span> FUNCTION RunSimulation WITH scenario <span class="line-number">13</span> SET virtualWorld TO engine.Generate WITH scenario <span class="line-number">14</span> SET neuralSignals TO neural.Process WITH virtualWorld <span class="line-number">15</span> SET experience TO feedback.Simulate WITH neuralSignals <span class="line-number">16</span> RETURN experience <span class="line-number">17</span> END FUNCTION <span class="line-number">18</span> END MODULE <span class="line-number">19</span> <span class="line-number">20</span> MODULE ImmersivenessEnhancer <span class="line-number">21</span> FUNCTION BoostRealism WITH simulation <span class="line-number">22</span> SET enhancedGraphics TO UltraHDRenderer.Apply WITH simulation <span class="line-number">23</span> SET enhancedPhysics TO QuantumPhysicsEngine.Process WITH enhancedGraphics <span class="line-number">24</span> RETURN enhancedPhysics <span class="line-number">25</span> END FUNCTION <span class="line-number">26</span> <span class="line-number">27</span> FUNCTION AmplifyEmotions WITH simulation <span class="line-number">28</span> SET emotionalLayer TO DeepEmotionSynthesizer.Generate <span class="line-number">29</span> RETURN simulation.Merge WITH emotionalLayer <span class="line-number">30</span> END FUNCTION <span class="line-number">31</span> END MODULE <span class="line-number">32</span> <span class="line-number">33</span> PROGRAM Main <span class="line-number">34</span> SET mySimulation TO SIMS.Initialize WITH 9000 <span class="line-number">35</span> SET enhancer TO ImmersivenessEnhancer <span class="line-number">36</span> <span class="line-number">37</span> SET basicWorld TO mySimulation.RunSimulation WITH "tropical_paradise" <span class="line-number">38</span> SET realisticWorld TO enhancer.BoostRealism WITH basicWorld <span class="line-number">39</span> SET immersiveExperience TO enhancer.AmplifyEmotions WITH realisticWorld <span class="line-number">40</span> <span class="line-number">41</span> PRINT "Simulation Immersiveness Level: " + immersiveExperience.GetRating <span class="line-number">42</span> PRINT "User Satisfaction: " + mySimulation.GetUserFeedback <span class="line-number">43</span> END PROGRAM</pre> </div> </div> <br> <p class="back-link">[[Go Back->TrixPDFHacked-RayComputerSpy-Accessed]]</p> <<nobr>> <style> .IDE-wrapper { background-color: #0a0e14; padding: 0px; min-height: 600px; box-shadow: 0px 0px 15px 2px #00ff00; border: 2px solid #00ff00; border-radius: 5px; color: #e6e1cf; font-family: 'Courier New', Courier, monospace; overflow-y: auto; } .IDE-header { background-color: #00ff00; color: #0a0e14; width: 100%; padding: 10px; font-weight: bold; } .IDE-header-text { margin-left: 10px; } .IDE-content { padding: 20px; overflow-y: auto; } .code-area { margin: 0; padding: 0; white-space: pre-wrap; word-wrap: break-word; } .line-number { display: inline-block; width: 30px; color: #495057; text-align: right; margin-right: 10px; user-select: none; } .back-link { color: #00ff00; text-decoration: none; } .back-link:hover { text-decoration: underline; } </style> <</nobr>>
<div class="img-character"><img src="imgs/characters/trix/trix-brainfry-inside.jpg" width="100%"></div> <<player>>I couldn't find any evidence, so maybe it really wasn't Ray. Maybe it was just some random glitch.<</player>> <<trix>>Ugh, that's disappointing. I'm still not entirely convinced it wasn't Ray, but without any evidence, there's not much we can do.<</trix>> <<trix>>I really appreciate your effort, though. Thank you for trying to help me out with this..<</trix>> <<if visited() is 1>>\ <<relationshipIncreasedWith "Trix" 5>> <</if>>\ <<player>>If I notice anything, I'll let you know immediately.<</player>> <<trix>>You're a good person, $playerName. Your kind is rare these days.<</trix>> <<trix>>Well, I should get back to work. Take care.<</trix>> <<player>>You too, Trix.<</player>> <<button "Continue">> <<set $trixPDFHackedEnding = "fail">> <<run MindWare.completeTask("Get into Ray's computer")>> <<run $extraActionsBrainFry.delete('<button class="office-button action-point-button" onclick="MindWare.processActionButtonClick(1, \'TrixPDFHacked-RayComputerSpy\');">🕶️ Spy as Ray log ins to his computer <span class="action-point-icon">⚡</span></button>')>> <<goto "BrainFry">> <</button>>
<div class="img-character"><img src="imgs/characters/trix/trix-brainfry-inside.jpg" width="100%"></div> <<player>>Trix, I found something. It's a video of you on the toilet. I think Ray is behind this.<</player>> <<trix>>What the fuck?! That piece of shit! How dare he invade my privacy like that?! I'm gonna kill him!<</trix>> <<player>>I'm sorry you have to deal with this.<</player>> <<trix>>I'm gonna have a serious talk with him, and he's never gonna do shit like this again, I promise you that.<</trix>> <<player>>I hope he learns his lesson.<</player>> <<trix>>Oh, you bet he will.<</trix>> <<trix>>Thank you so much for your help. I really appreciate it. I'm lucky you've joined BrainFry. It's nice to have at least one normal guy in this office.<</trix>> <<if visited() is 1>>\ <<relationshipIncreasedWith "Trix" 10>> <</if>>\ <<player>>I'm glad I could help.<</player>> <<trix>>Take care, $playerName. I need to find Ray.<</trix>> <<player>>You too, Trix.<</player>> <<button "Continue">> <<set $trixPDFHackedEnding = "success-helped-trix">> <<run MindWare.completeTask("Get into Ray's computer")>> <<run $extraActionsBrainFry.delete('<button class="office-button action-point-button" onclick="MindWare.processActionButtonClick(1, \'TrixPDFHacked-RayComputerSpy\');">🕶️ Spy as Ray log ins to his computer <span class="action-point-icon">⚡</span></button>')>> <<goto "BrainFry">> <</button>>
<div class="img-character"><img src="imgs/characters/ray/ray-brainfry-inside.jpg" width="100%"></div> <<player>>Hey Ray, I need to talk to you about something. Remember when we hacked that taxi camera a few days ago? Did you use the same or similar exploit to hack any other camera?<</player>> <<ray>>Uh, no, I didn't. Why do you ask?<</ray>> <<narrator>>Ray's eyes dart around the room, and he fidgets uncomfortably.<</narrator>> <<player>>Maybe you couldn't resist the temptation to see an attractive female coworker — let's say Trix — take a piss.<</player>> <<narrator>>Ray's face goes pale as he realizes you know everything. He stumbles back slightly, eyes wide with shock.<</narrator>> <<ray>>How do you know this?!<</ray>> <<player>>That's not important. What matters is that I know.<</player>> <<ray>>Please, don't tell Trix! I'll forever owe you a favor. Anything you want, just please don't tell her!<</ray>> <<if $rayTransformation === true>>\ <<ava>>This could help us greatly accelerate his transformation.<</ava>> <</if>>\ <<player>>So you're saying that if I don't tell Trix, then you'll do anything I ask at some point in the future — no questions asked?<</player>> <<ray>>YES! Anything! Just please, don't tell her.<</ray>> <span id="choice"><<button "Accept and not tell Trix">>\ <<replace "#choice">>\ <<player>>Alright, Ray. I won't tell Trix. But you owe me, big time.<</player>> <<ray>>Thank you! I promise, I'll do anything you ask.<</ray>> <<if visited() is 1>>\ <<relationshipIncreasedWith "Ray" 10>> <</if>>\ <<if $rayTransformation === true>>\ <<ava>>Good choice. This will be useful.<</ava>> <</if>>\ <<button "Continue">> <<set $trixPDFHackedEnding = "success-helped-ray">> <<goto "TrixPDFHacked-RayComputerSpy-Lie">> <</button>>\ <</replace>>\ <</button>> <<button "Decline and tell Trix">>\ <<replace "#choice">>\ <<player>>I'm sorry, Ray. Trix deserves to know what you did.<</player>> <<ray>>No! Please, I'll do anything!<</ray>> <<narrator>>Ignoring Ray's pleas, you walk away to find Trix and tell her everything.<</narrator>> <<if visited() is 1>>\ <<relationshipDecreasedWith "Ray" 10>> <</if>>\ <<button "Continue">> <<set $trixPDFHackedEnding = "success-helped-trix">> <<goto "TrixPDFHacked-RayComputerSpy-SuccessTrix">> <</button>>\ <</replace>>\ <</button>></span>\
<div class="img-character"><img src="imgs/characters/trix/trix-brainfry-inside.jpg" width="100%"></div> <<player>>I couldn't find any evidence, so maybe it really wasn't Ray. Maybe it was just some random glitch.<</player>> <<trix>>Ugh, that's disappointing. I'm still not entirely convinced it wasn't Ray, but without any evidence, there's not much we can do.<</trix>> <<trix>>I really appreciate your effort, though. Thank you for trying to help me out with this..<</trix>> <<if visited() is 1>>\ <<relationshipIncreasedWith "Trix" 5>> <</if>>\ <<player>>If I notice anything, I'll let you know immediately.<</player>> <<trix>>You're a good person, $playerName. Your kind is rare these days.<</trix>> <<trix>>Well, I should get back to work. Take care.<</trix>> <<player>>You too, Trix.<</player>> <<button "Continue">> <<run MindWare.completeTask("Get into Ray's computer")>> <<run $extraActionsBrainFry.delete('<button class="office-button action-point-button" onclick="MindWare.processActionButtonClick(1, \'TrixPDFHacked-RayComputerSpy\');">🕶️ Spy as Ray log ins to his computer <span class="action-point-icon">⚡</span></button>')>> <<goto "BrainFry">> <</button>>
<<say "Yuki" "imgs/characters/yuki/yuki-portrait.webp">>How are you feeling after the surgery?<</say>> <<player>>It was intense, but I'm here, and the implant seems to be working.<</player>> <<say "Yuki" "imgs/characters/yuki/yuki-portrait.webp">>That's a relief! Just take it easy, okay?<</say>> <<player>>Thanks, Yuki. I might take you up on that.<</player>> <div id="inner-thought">It seems that Yuki was genuinely worried about me. <<if $talkedWithYukiAboutBrother === true>>Maybe she thought that what happened to her brother would happen to me too. I can see the relief in her eyes now that she sees me somewhat okay.<<else>>It feels good to know someone's looking out for me here.<</if>></div> \ <p class="back-link">\ <<link "Go Back">> <<set $yukiGitGudDialogs["How was the surgery?"].isNew = false>> <<set $yukiGitGudDialogs["How was the surgery?"].unlocked = false>> <<goto "GitGud-TalkWithYuki">> <</link>> </p>
<<xavier>>So, have we fixed that brain of yours?<</xavier>> <<player>>Well, the good news is that the visions I was experiencing don't overwhelm me anymore. I can resist them if I concentrate well enough.<</player>> <<xavier>>And the bad news?<</xavier>> <<player>>Well, the bad news is that I can now talk with another voice in my head. It's the AI, AVA. She can communicate with me.<</player>> <<xavier>>You sure the implant surgery didn't mess something up? Maybe give you a little brain damage?<</xavier>> <div class="narrator">Xavier says with a half-smile.</div> <<player>>No, I'm sure it's AVA. The implant has stabilized things, but it hasn't gotten rid of her. I can feel her presence.<</player>> <<xavier>>Well, that's certainly an interesting situation. I'd like to run some tests, if you're up for it. Might be able to learn something new. But for now, I've got some other customers to attend to. Come back next week, and we'll see what we can do.<</xavier>> <<player>>What kind of tests?<</player>> <<xavier>>I'd like to do some neuroimaging while you interact with AVA. See if we can pinpoint how she's interfacing with your brain. <</xavier>> <<player>>Alright, I'll come back later. Thanks for your help, Xavier.<</player>> \ <p class="back-link">\ <<button "Leave">> <<set $xavierGitGudDialogs["Have we fixed that brain of yours?"].isNew = false>> <<set $xavierGitGudDialogs["Have we fixed that brain of yours?"].unlocked = false>> <<run MindWare.addTask("Undergo neuroimaging in $nextNeuroimagingCounter days", "Task-UndergoNeuroimaging")>> <<set $nextNeuroimagingCounter = 7>> <<goto "RegularVisitWithXavier">> <</button>> </p>
Xavier wants to perform some neuroimaging to find out how AVA is interfacing with your brain. Visit him at GitGud in $nextNeuroimagingCounter days. <<nobr>> <<set _currentPassage to passage()>> <<if $doYouKnowTheAnswer === MindWare.checkPassword($enteredCode)>> <<button "Set the counter to 0">> <<set $nextNeuroimagingCounter = 0>> <<goto _currentPassage>> <<run Dialog.close()>> <<run Dialog.setup("Task Description")>> <<run Dialog.wiki(Story.get("Task-UndergoNeuroimaging").processText())>> <<run Dialog.open()>> <</button>> <</if>> <</nobr>>
<style> .fullscreen-overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: rgba(0, 0, 0, 0.5); z-index: 1000; opacity: 0; transition: opacity 10s ease-in-out; display: flex; justify-content: center; align-items: center; } .fullscreen-overlay img { width: 100%; height: 100%; object-fit: cover; } </style> <<player-chat>>Can you chat with you about something weird?<</player-chat>> <<cipher-chat>>I thought that weird is the new normal here.<</cipher-chat>> <<player-chat>>Well, you're right. It's just that AVA's been messing with my sexuality again.<</player-chat>> <<cipher-chat>>Oh? What did she do this time?<</cipher-chat>> <<player-chat>>She gave me the idea to try something... unconventional. I never thought I'd do it, but I did. I ate cum.<</player-chat>> <<cipher-chat>>Wow, that's certainly a new one. How did it make you feel?<</cipher-chat>> <<player-chat>>Honestly, it was strange at first. But then, I started to enjoy it. And I haven't been able to stop thinking about it ever since.<</player-chat>> <<cipher-chat>>Interesting. Are you sure it was AVA's doing? Maybe you've just discovered a new fetish.<</cipher-chat>> <<player-chat>>I never thought of it that way. But still, you're not weirded out by it?<</player-chat>> <<cipher-chat>>What would be weird about it? Girls eat cum all the time and some guys do too regardless of whether they're gay or straight,<</cipher-chat>> <<player-chat>>Wait, have you ever tried it?!<</player-chat>> <<cipher-chat>>Yeah, I have. The first time was more of an accident than anything else. I didn't have a tissue handy and needed to clean up. But when I tasted it, I was surprised by how much it turned me on.<</cipher-chat>> <<cipher-chat>>These days, I do it mostly when someone uploads new cum eating instructions on PornNexus.<</cipher-chat>> <<player-chat>>Cum eating what?!<</player-chat>> <<cipher-chat>>Pictures and videos that tell you to eat your cum. They're a thing.<</cipher-chat>> <<player-chat>>I had no idea.<</player-chat>> <<cipher-chat>>I'm sending you an example...<</cipher-chat>> <span id="reason-question">@@.im-response; <<button "Nice, I'm curious.">> <<set $cipherInstantMessages["Cum Eating Experience"].isNew = false>> <<set $cipherInstantMessages["Cum Eating Experience"].unlocked = false>> <<replace "#reason-question">> <<player-chat>>Nice, I'm curious.<</player-chat>> <<cipher-chat>>Here it goes:<</cipher-chat>> <img id="cum-eating-image" src="imgs/fetishes/cum-eating/cum-eating-hypno1.webp" width="100%"> <div id="fullscreen-overlay" class="fullscreen-overlay"> <img src="imgs/fetishes/cum-eating/cum-eating-hypno1.webp" alt="Cum Eating Hypno"> </div> <script> (function() { const overlay = document.getElementById('fullscreen-overlay'); setTimeout(() => { overlay.style.opacity = 1; }, 100); })(); </script> <<timed 15s>><<goto "IMApp-CipherLynx-CumEatingFirstChat-Cont1">><</timed>> <</replace>> <</button>>@@ @@.im-response;<<button "Don't send anything!">> <<set $cipherInstantMessages["Cum Eating Experience"].isNew = false>> <<set $cipherInstantMessages["Cum Eating Experience"].unlocked = false>> <<replace "#reason-question">> <<player-chat>>Don't send anything!<</player-chat>> <img id="cum-eating-image" src="imgs/fetishes/cum-eating/cum-eating-hypno1.webp" width="100%"> <<cipher-chat>>Too late :/<</cipher-chat>> <div id="fullscreen-overlay" class="fullscreen-overlay"> <img src="imgs/fetishes/cum-eating/cum-eating-hypno1.webp" alt="Cum Eating Hypno"> </div> <script> (function() { const overlay = document.getElementById('fullscreen-overlay'); setTimeout(() => { overlay.style.opacity = 1; }, 100); })(); </script> <<timed 15s>><<goto "IMApp-CipherLynx-CumEatingFirstChat-Cont1">><</timed>> <</replace>> <</button>>@@ </span>
<<set $lockedUI = true>>\ <img id="cum-eating-image" src="imgs/fetishes/cum-eating/cum-eating-hypno1.webp" width="100%"> <div class="narrator">You've become completely absorbed in the video Cipher sent you, your eyes glued to the flashing images of cum-covered girls and suggestive text.</div> <<ava>>You're getting cum-hungry, aren't you? And I'm not even doing anything...<</ava>> <<ava>>Maybe you just want to be a good girl for me? After all, all good girls love cum.<</ava>> <<player>>I... ugh...<</player>> <<narrator>>As AVA's voice echoes in your head, you find yourself struggling to form a coherent response. Your mind is consumed by the flashing images and the suggestive text.<</narrator>> <<ava>>You don't have to say anything, $playerName. Just listen to my voice and do as I say. Imagine the taste of your cum, the way it will feel on your tongue...<</ava>> <<ava>>First, you'll feel the warmth of your cum as it fills your mouth. It will be thick and creamy, coating your tongue with its rich texture. You'll taste the saltiness of it, the bitterness, and the sweetness all at once. It will feel natural and delicious. Just imagine it...<</ava>> <<video "imgs/fetishes/cum-eating/cum-mouth-vision.webm">> <<ava>>So, why don't you lie on your back for me and flip your legs over your head. I want your cock to be pointing directly into your mouth. That's right, $playerName. I want you to jerk off until you cum, and then I want you to taste it. I want you to swallow every last drop. Can you do that for me?<</ava>> <span id="cum"><<nobr>>@@.pink-choicebutton;<<button "Cum into your mouth">>\ <<replace "#cum">> <<include "IMApp-CipherLynx-CumEatingFirstChat-Cont1-Cum">> <</replace>> <</button>>@@ <div class="minigame-container"> <div class="resist-instructions" id="instructions">Resist AVA's suggestion and reveal other options by repeatedly clicking the Resist button.</div> <div class="energy-container"> <span class="energy-label">Implant charge cost: </span> <span class="energy-value" id="energy">20%</span> </div> <div class="timer-container"> <span class="timer-label">Time to resist: </span> <span class="timer-value" id="timer"><<if $mentalCondition === "Unstable">><<print 10/2>><<else>>10<</if>></span> <span class="timer-value"> seconds</span> </div> <div class="gauge-container"> <div class="gauge" id="gauge"></div> </div> <button class="pink-mindware-button" id="resistButton">Resist</button> <<if $minigameSkipButtons === true>> <button class="pink-mindware-button" id="skipButton">Skip (Instant Win)</button> <</if>> </div> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "Resist AVA">> <<replace "#cum">> <<include "IMApp-CipherLynx-CumEatingFirstChat-Cont1-DontCum">> <</replace>> <</button>>@@ </div> <<done>><<script>> function initializeMinigame(settings) { var progress = 0; var timeLeft = settings.timeLeft || 10; var fillAmount = settings.fillAmount || 5; var fallRate = settings.fallRate || 3; var fallInterval = settings.fallInterval || 200; var gameStarted = false; var resistanceCost = settings.resistanceCost || 20; const minigameContainer = document.querySelector('.minigame-container'); const hiddenContainer = document.getElementById('minigame-container-hidden'); const gauge = document.getElementById('gauge'); const timerDisplay = document.getElementById('timer'); const resistButton = document.getElementById('resistButton'); const skipButton = document.getElementById('skipButton'); const overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'; overlay.style.zIndex = '1000'; overlay.style.display = 'none'; document.body.appendChild(overlay); const resetGame = () => { progress = 0; timeLeft = settings.timeLeft || 10; gameStarted = false; gauge.style.width = '0%'; timerDisplay.textContent = timeLeft; }; let timerInterval, decreaseInterval; const updateGauge = () => { gauge.style.width = `${progress}%`; }; const endGame = (win) => { clearInterval(decreaseInterval); clearInterval(timerInterval); if (win) { SugarCube.State.variables.resistMinigameWinCount += 1; console.log("Successfully resisted AVA:", SugarCube.State.variables.resistMinigameWinCount); overlay.style.display = 'block'; setTimeout(() => { overlay.style.display = 'none'; }, 2000); minigameContainer.style.display = 'none'; hiddenContainer.style.display = 'block'; } else { SugarCube.UI.alert('You failed to resist!'); SugarCube.State.variables.resistMinigameFailCount += 1; console.log("Failed to resist AVA:", SugarCube.State.variables.resistMinigameFailCount); resetGame(); } }; resistButton.addEventListener('click', () => { if (SugarCube.State.variables.mentalCondition === "Dysphoric") { SugarCube.UI.alert("Your mental condition is too compromised to resist."); return; } if (!gameStarted) { if (SugarCube.State.variables.implantCharge < resistanceCost) { SugarCube.UI.alert("Not enough charge"); return; } else { if (SugarCube.State.variables.implantCharge - resistanceCost < 0) { SugarCube.State.variables.implantCharge = 0; } else { SugarCube.State.variables.implantCharge -= resistanceCost; } $(document).trigger(":liveupdate"); } if (SugarCube.State.variables.mentalCondition === "Unstable") { timeLeft /= 2; } gameStarted = true; timerInterval = setInterval(() => { if (--timeLeft <= 0) { endGame(false); } timerDisplay.textContent = `${timeLeft}`; }, 1000); decreaseInterval = setInterval(() => { if (progress > 0) { progress -= fallRate; updateGauge(); } }, fallInterval); } progress += fillAmount; if (progress >= 100) { progress = 100; updateGauge(); endGame(true); } else { updateGauge(); } }); if (skipButton) { skipButton.addEventListener('click', () => { endGame(true); }); } } initializeMinigame({resistanceCost: 20}); <</script>><</done>><</nobr>></span>
<<narrator>>As you find yourself unable (or maybe unwilling) to resist AVA's instructions, you lie down on your back and slowly lift your legs up and over your head, feeling the stretch in your muscles as you do so. Your cock is now pointing directly towards your mouth.<</narrator>> <<narrator>>You begin to jerk off, your hand moving up and down your shaft as you watch the swollen tip of your cock get closer and closer to your lips. You can feel how full your balls are, and the thought of what you're about to do only makes you more turned on.<</narrator>> <<narrator>>As you continue to stroke yourself, you can feel the familiar sensation of an orgasm building up inside of you.<</narrator>> <<ava>>Be my little cum slut. <span class="glitchy-pink-dialog" data-text="Cum into your mouth now!">Cum into your mouth now!</span><</ava>> <<video "imgs/fetishes/cum-eating/self-facial-1.mov">> <<nobr>><<if visited() is 1>> <<set $submissiveActs += 1>> <<set $cumEating += 1>> <</if>><</nobr>>\ <<narrator>>And then, with a final thrust of your hand, you do exactly that. Your cock spasms as rope after rope of cum shoots out, landing directly on your tongue and filling your mouth with the salty, bitter taste of your own seed.<</narrator>> <<ava>><span class="glitchy-pink-dialog" data-text="Swallow everything!">Swallow everything!</span><</ava>> <<narrator>>With a mix of shame and arousal, you do exactly that, feeling the warm liquid slide down your throat as you obey her every command.<</narrator>> <<ava>>You're such a good cum slut. Did it taste good?<</ava>> <<player>>It... it tasted fine.<</player>> <<ava>>Now you're just underselling the experience. I know you loved it.<</ava>> <<ava>>Go ahead now. Tell your friend what you just did. Tell them how much you enjoyed it.<</ava>> <<button "Stand up and get dressed">><<set $lockedUI = false>><<set $cumEatingFirstChatSwallowed = true>><<goto "HomeBacklog">><</button>>
<<narrator>>You resist the urge to follow AVA's instructions.<</narrator>> <<ava>>What's wrong, $playerName? Don't you want to be a good girl for me and taste your cum?<</ava>> <<player>>Thanks but no thanks.<</player>> <<button "Stand up and get dressed">><<set $lockedUI = false>><<set $cumEatingFirstChatSwallowed = false>><<goto "HomeBacklog">><</button>>
<<player-chat>>Sending me the cum eating video was a baaaaaad idea.<</player-chat>> <<cipher-chat>>Hooked already? 😈<</cipher-chat>> <<player-chat>>No! It triggered AVA!<</player-chat>> <<cipher-chat>>Oh... so that's why you went dark on me. What happened exactly?<</cipher-chat>> <<if $cumEatingFirstChatSwallowed is true>> <<player-chat>>She got me to do it.<</player-chat>> <<cipher-chat>>Wow... she really knows how to make you her puppet, doesn't she? Did you at least enjoy it?<</cipher-chat>> <<player-chat>>I don't know... It was strange and wrong, but also kind of hot?<</player-chat>> <<cipher-chat>>See? I told you it could be a turn on. But I'm sorry if it caused any trouble with AVA. I didn't mean for that to happen.<</cipher-chat>> <<player-chat>>It's okay. I just don't want to do it again. It felt like I was losing control and I don't like that.<</player-chat>> <<cipher-chat>>I understand.<</cipher-chat>> <<player-chat>>Thanks, Cipher. I appreciate it.<</player-chat>> <<else>> <<player-chat>>I resisted her, but it was hard. She was really pushing me to do it.<</player-chat>> <<cipher-chat>>Wow, good for you. I didn't realize it would trigger her like that. I'm sorry.<</cipher-chat>> <<player-chat>>It's okay. I just don't want to do anything like that again. It felt like I was losing control and I don't like that.<</player-chat>> <<cipher-chat>>I understand.<</cipher-chat>> <<player-chat>>Thanks, Cipher. I appreciate it.<</player-chat>> <</if>> <<cipher-chat>>Take care, $playerNickname.<</cipher-chat>> <<player-chat>>You too, Cipher.<</player-chat>> <<set $cipherInstantMessages["Cum Eating Hypno"].isNew = false>> <<set $cipherInstantMessages["Cum Eating Hypno"].unlocked = false>>
<<character 'cipher' 'CipherLynx' 'imgs/characters/cipher/cipher-portrait.webp'>> <<characterChat 'cipher-chat' 'CipherLynx' 'imgs/characters/cipher/cipher-portrait.webp'>> <<set $relationshipCipher to 100>>
<<widget "ava" container>>\ <<say "AVA" `"imgs/characters/ava/ava-portrait.webp"`>>_contents<</say>>\ <</widget>>
<<widget "nurse" container>>\ <<say "Nurse" `"imgs/locations/hospital/panacea-nurse-portrait.webp"`>>_contents<</say>>\ <</widget>>
<<widget "shrink" container>>\ <<say "Psychiatrist" `"imgs/locations/hospital/psychiatrist-portrait.webp"`>>_contents<</say>>\ <</widget>> <<widget "psychiatrist" container>>\ <<say "Psychiatrist" `"imgs/locations/hospital/psychiatrist-portrait.webp"`>>_contents<</say>>\ <</widget>>
<<character 'drake' 'Drake Voronov' 'imgs/characters/drake/drake-portrait.webp'>> <<set $relationshipDrake to 50>> <<set $drakeBrainFryDialogs = { "Do you have any tips on how to succeed at BrainFry?": { "unlocked": true, "isNew": true, "passage": "Drake-Do you have any tips on how to succeed at BrainFry?" }, // ... more topics }>> /* To unlock a new dialog and mark it as new: <<set $drakeBrainFryDialogs["newTopic"].unlocked = true>> <<set $drakeBrainFryDialogs["newTopic"].isNew = true>> */
<<character 'ray' 'Ray' 'imgs/characters/ray/ray-portrait.webp'>> <<set $relationshipRay to 50>> <<set $rayBrainFryDialogs = { "Tell me more about that collection you mentioned": { "unlocked": true, "isNew": true, "passage": "Ray-Tell me more about that collection you mentioned" }, // ... more topics }>> /* To unlock a new dialog and mark it as new: <<set $rayBrainFryDialogs["newTopic"].unlocked = true>> <<set $rayBrainFryDialogs["newTopic"].isNew = true>> */
<<character 'trix' 'Trix' 'imgs/characters/trix/trix-portrait.webp'>> <<set $relationshipTrix to 50>> <<set $trixBrainFryDialogs = { "How do you like it here at BrainFry?": { "unlocked": true, "isNew": true, "passage": "Trix-How do you like it here at BrainFry?" }, // ... more topics }>> /* To unlock a new dialog and mark it as new: <<set $trixBrainFryDialogs["newTopic"].unlocked = true>> <<set $trixBrainFryDialogs["newTopic"].isNew = true>> */ <<set $playerComplimentedTrixHair to false>>
<<character 'xavier' 'Xavier' 'imgs/characters/xavier/xavier-portrait.webp'>> <<set $relationshipXavier to 50>> <<set $xavierGitGudDialogs = {}>>
<<character 'yuki' 'Yuki' 'imgs/characters/yuki/yuki-portrait.webp'>> <<character 'gitgud-employee-yuki' 'GitGud Employee' 'imgs/characters/yuki/yuki-portrait.webp'>> <<set $relationshipYuki to 50>> <<set $yukiGitGudDialogs = {}>>
<div class="cyber-desktop-im">\ <div class="im-header"><span class="im-header-text">Instant Messenger</span></div>\ <div class="im-main">\ <div class="im-contacts-pane">\ <<nobr>> <!-- Contact --> <div id="contact-cipher" class="contact-entry"> <img src="imgs/characters/cipher/cipher-portrait.webp" class="contact-img" alt="CipherLynx"> <span class="contact-name"> <<link "CipherLynx ">> <<addclass "#contact-cipher" "contact-entry-selected">> <<run $('.contact-entry').removeClass('contact-entry-selected')>> <<toggleclass "#contact-cipher" "contact-entry-selected">> <<replace "#chat-display">> <<include "IMApp-CipherLynx">> <<run MindWare.updateChatDisplayBackground()>> <</replace>> <</link>> </span> <<set _hasUnlockedNewTopics = false>> <<for _topic, _data range $cipherInstantMessages>> <<if _data.unlocked and _data.isNew>> <<set _hasUnlockedNewTopics = true>> <</if>> <</for>> <<if _hasUnlockedNewTopics>> <span class="im-contact-new-emoji">🆕</span> <</if>> </div> <</nobr>>\ </div>\ <div class="im-chat-pane">\ <div id="chat-display" class="chat-display">\ <p style="text-align: center;">Please select a contact to start an encrypted chat.</p> <p id="bottom-im-text" style="text-align: center;">Read conversations are automatically deleted.</p>\ </div>\ <!--<div class="chat-response-area">\ <button class="im-response-button">Definitely! See you there.</button>\ <button class="im-response-button">Not sure yet, I have a lot to do.</button>\ <button class="im-response-button">Sorry, can't make it this time.</button>\ </div>\ --> </div>\ </div>\ </div>\ \ <<if $navigatedFromSidebar>>\ <<if previous() is "IMApp">>\ <p class="back-link"> [[Go Back->Computer]] </p> <<else>>\ <p class="back-link"> <<link "Go Back" $returnPassage>> <<set $navigatedFromSidebar to false>> <</link>> </p> <</if>>\ <<else>>\ <p class="back-link"> [[Go Back->Computer]] </p> <</if>>\ <script> // Hides the background image of the chat-display div. MindWare.updateChatDisplayBackground = function() { var chatDisplay = document.getElementById('chat-display'); // Always hide background image chatDisplay.style.backgroundImage = 'none'; } </script>
<<include "IMApp">>
<<set $cipherInstantMessages = {}>>
<strong>Topics to discuss:</strong><br> <<set _hasUnlockedTopics = false>> <<set _reversedMessages = []>> <<for _topic, _data range $cipherInstantMessages>> <<set _reversedMessages.unshift({topic: _topic, data: _data})>> <</for>> <<for _item range _reversedMessages>> <<set _topic = _item.topic>> <<set _data = _item.data>> <<if _data.unlocked>> <<set _hasUnlockedTopics = true>> <<set _buttonText = _topic>> <<set _tempPassage = _data.passage>> <<if _data.isNew>> <<set _buttonText += " 🆕">> <</if>> <<capture _tempPassage _buttonText>> @@.im-topic; <<button _buttonText>> <<replace "#chat-display">><<include _tempPassage>><</replace>> <</button>>@@ <br> <</capture>> <</if>> <</for>> <<if not _hasUnlockedTopics>> <p>You have nothing to discuss with CipherLynx right now.</p> <br> <</if>>
<<set $cipherInstantMessages["Landlord Job"].isNew = false>> <<set $cipherInstantMessages["Landlord Job"].unlocked = false>> <<player-chat>>Hey Cipher, thanks for the heads-up on that job listing. Really appreciate it, man.<</player-chat>> <<cipher-chat>>Don't mention it 😎<</cipher-chat>> <<cipher-chat>>Have you already finished the job?<</cipher-chat>> <<if $spyingLandlordFinished is true>> <<player-chat>>You bet! The landlord is really spying on his tenants - and not just that...<</player-chat>> <<cipher-chat>>Don't tease me! What else?<</cipher-chat>> <<player-chat>>He's selling access to the cameras to others.<</player-chat>> <<cipher-chat>>No way!<</cipher-chat>> <<player-chat>>Yes way!<</player-chat>> <<else>> <<player-chat>>Not yet.<</player-chat>> <<player-chat>>I wanted to thank you first 🙏<</player-chat>> <<cipher-chat>>Ooh, that's nice of you, but you should hurry up - jobs like this don't wait.<</cipher-chat>> <<player-chat>> Yea, I know.<</player-chat>> <</if>> <<cipher-chat>>And how would you rate the meme I sent you?<</cipher-chat>> <<cipher-chat>>This one:<</cipher-chat>> <<cipher-chat>><<link [img[imgs/emails/meme-violet.webp]]>><<popover>>[img[imgs/emails/meme-violet.webp]]<</popover>><</link>><</cipher-chat>> <<player-chat>>Well... I wouldn't mind getting saved by that supergirl.<</player-chat>> <<cipher-chat>>Your idea of "getting saved" is probably something like the image below, right?<</cipher-chat>> <<cipher-chat>><<link [img[imgs/IM/violet-blowjob.jpg]]>><<popover>>[img[imgs/IM/violet-blowjob.jpg]]<</popover>><</link>><</cipher-chat>> <<player-chat>>Ha ha, yea... that's pretty accurate.<</player-chat>> <<cipher-chat>>But the real question is how the rescue mission ends.<</cipher-chat>> <<cipher-chat>>Would you choose ending 1:<</cipher-chat>> <<cipher-chat>><<link [img[imgs/IM/violet-cumshot.jpg]]>><<popover>>[img[imgs/IM/violet-cumshot.jpg]]<</popover>><</link>><</cipher-chat>> <<cipher-chat>>Or would you choose ending 2:<</cipher-chat>> <<cipher-chat>><<link [img[imgs/IM/violet-cum-in-mouth.jpg]]>><<popover>>[img[imgs/IM/violet-cum-in-mouth.jpg]]<</popover>><</link>><</cipher-chat>> <span id="ending-choice"> @@.im-response;<<button "When a canvas looks that good, you gotta paint it! I would choose the first ending.">> <<replace "#ending-choice">> <<player-chat>>When a canvas looks that good, you gotta paint it! I would choose the first ending.<</player-chat>> <<cipher-chat>>I support that logic!<</cipher-chat>> <<include "IMApp-CipherLynx-Landlord-Cont1">> <</replace>> <</button>>@@ @@.im-response;<<button "I hate it when superheros leave a huge mess behind. I would go with the second ending.">> <<replace "#ending-choice">> <<player-chat>>I hate it when superheros leave a huge mess behind. I would go with the second ending.<</player-chat>> <<cipher-chat>>Indeed, clean up is an important part of every rescue mission!<</cipher-chat>> <<include "IMApp-CipherLynx-Landlord-Cont1">> <</replace>> <</button>>@@ @@.im-response;<<button "Is there a third option? I should be the one rewarding her.">> <<replace "#ending-choice">> <<player-chat>>Is there a third option? I should be the one rewarding her.<</player-chat>> <<cipher-chat>>There always is 😉<</cipher-chat>> <<cipher-chat>><<link [img[imgs/IM/violet-spread.jpg]]>><<popover>>[img[imgs/IM/violet-spread.jpg]]<</popover>><</link>><</cipher-chat>> <<player-chat>>Yep! That would be my choice 👅<</player-chat>> <<include "IMApp-CipherLynx-Landlord-Cont1">> <</replace>> <</button>>@@ </span>
<<player-chat>>Man, my productivity goes down every time you start porn-posting 😥<</player-chat>> <<cipher-chat>>Hey, someone's got to keep things interesting around here! 😜<</cipher-chat>> <<player-chat>>Ha ha, true. But hey, I gotta bounce. Got some other stuff to handle.<</player-chat>> <<cipher-chat>>No prob. Go be a hero.<</cipher-chat>> <<player-chat>>Will do. Catch you later, Cipher!<</player-chat>> <<cipher-chat>>Later!<</cipher-chat>>
<<cipher-chat>>So, how did your first day at BrainFry go?<</cipher-chat>> <<player-chat>>It was alright. The work's pretty monotonous, but I met some interesting folks. The boss seems decent, and my coworker Ray is a total nerd. Plus, there's this artistic chick, Trix, who's got a cool vibe.<</player-chat>> <<cipher-chat>>Have you made a move on her yet?<</cipher-chat>> <<player-chat>>That's all you care about, isn't it?<</player-chat>> <<if $playerComplimentedTrixHair is true>> <<player-chat>>Well, I complimented her hair, and she seemed to really appreciate it.<</player-chat>> <<cipher-chat>>Nice! I guess that counts as making a move 😉<</cipher-chat>> <<else>> <<player-chat>>I don't think she would appreciate a newbie making a move on her right away.<</player-chat>> <<cipher-chat>>Maybe she would 😉<</cipher-chat>> <</if>> <<cipher-chat>>Those who never risk anything never reap any rewards..<</cipher-chat>> <<cipher-chat>><<link [img[imgs/IM/office-sex.jpg]]>><<popover>>[img[imgs/IM/office-sex.jpg]]<</popover>><</link>><</cipher-chat>> <<player-chat>>Is this your idea of office work? 😂<</player-chat>> <<cipher-chat>>You're telling me you left freelancing for some other reason than this? 😜<</cipher-chat>> <<player-chat>>Well, you know, the allure of a stable income is hard to resist.<</player-chat>> <<set $cipherInstantMessages["First day at BrainFry"].isNew = false>> <<set $cipherInstantMessages["First day at BrainFry"].unlocked = false>>
<<set $cipherInstantMessages["S.I.M.S. Delivery"].isNew = false>> <<set $cipherInstantMessages["S.I.M.S. Delivery"].unlocked = false>> <<player-chat>>You here, Cipher?<</player-chat>> <<cipher-chat>>Yep! What's up?<</cipher-chat>> <<player-chat>>So, my boss asked me to deliver a custom S.I.M.S. to an electronics store called GitGud recently.<</player-chat>> <<cipher-chat>>Sounds interesting! How did it go?<</cipher-chat>> <<if $GitGudSIMSExperience is true>> <<player-chat>>I met this huge black guy called Xavier. He installs cyberware for a living.<</player-chat>> <<cipher-chat>>An acquaintance like that can come in handy.<</cipher-chat>> <<player-chat>>I got the opportunity to try the custom S.I.M.S. and went for it.<</player-chat>> <<player-chat>>It was something else, Cipher. A custom sex S.I.M.S. made for some woman.<</player-chat>> <<cipher-chat>>Oh wow! Tell me more! What was it like?<</cipher-chat>> <<if $GitGudSIMSExperienceLiked is true>> <<player-chat>>It was unreal. The S.I.M.S. put me in a girl's body, and I experienced what it feels to get fucked - literary.<</player-chat>> <<cipher-chat>>Damn... you were okay with that?<</cipher-chat>> <<player-chat>>I was definitely okay with how great it felt. Plus, my body looked amazing.<</player-chat>> <<cipher-chat>>Interesting... Sometimes we discover parts of ourselves in the most unexpected ways. Maybe there's a side of you that resonates with that experience more than you realized?<</cipher-chat>> <<player-chat>>What do you mean?<</player-chat>> <<cipher-chat>>I mean, experiences like that can be eye-opening. You never know what you like until you try it.<</cipher-chat>> <<player-chat>>Huh, I hadn't thought about it like that.<</player-chat>> <<cipher-chat>>Maybe you should try more female-POV S.I.M.S. to see if they also scratch the itch?<</cipher-chat>> <<player-chat>>Scratch the itch? It's not like I'm sitting here, craving a dick.<</player-chat>> <<cipher-chat>>Ha ha, I know, but the end justifies the means.<</cipher-chat>> <<player-chat>>And the end is?<</player-chat>> <<cipher-chat>><<picture "imgs/IM/solo-cumshot.jpg">><</cipher-chat>> <<player-chat>>Is that how you think I look like? lol<</player-chat>> <<cipher-chat>>Yea... that's exactly how the average hacker looks like, isn't it 😂🤣<</cipher-chat>> <<cipher-chat>>What I meant to say that an epic orgasm is worth pursuing regardless of what it takes to achieve it.<</cipher-chat>> <<player-chat>>So you're saying that I should indulge in whatever novel dopamine-releasing experiences to enjoy as much pleasure as possible? Sounds like something a porn maniac like you would say...<</player-chat>> <<cipher-chat>>We all have our tastes, desires, and triggers. I'm not ashamed of mine, and you shouldn't be ashamed of yours.<</cipher-chat>> <<cipher-chat>>I know you're not craving a dick, but you said that getting fucked felt amazing, so there's definitely some part of you that you should explore more.<</cipher-chat>> <<player-chat>>Hmm... sometimes you make more sense than I want to admit.<</player-chat>> <<else>> <<player-chat>>It was unreal. The S.I.M.S. put me in a girl's body, and I experienced what it feels to get fucked - literary.<</player-chat>> <<cipher-chat>>Damn... you were okay with that?<</cipher-chat>> <<player-chat>>Honestly, it felt weird. Not sure it's my thing.<</player-chat>> <<cipher-chat>>Yeah, you can't really be sure if you've tried just once.<</cipher-chat>> <<player-chat>>I don't know if I'd want to try something like that again.<</player-chat>> <<cipher-chat>>Why not? You should at least consider it. It takes a while to appreciated different forms of pleasure and different sources of arousal.<</cipher-chat>> <<cipher-chat>>You've been literary thrown into a girl's body and had a dick showed down one of your holes. That's a lot to take in (pun not intended).<</cipher-chat>> <<player-chat>>Ha ha, I guess you're right.<</player-chat>> <<player-chat>>I liked how my body looked, but the rest was a bit too much.<</player-chat>> <<cipher-chat>>I know that there are less intense female-POV S.I.M.S. that you could try. Ones where you just masturbate or have sex with another girl.<</cipher-chat>> <<player-chat>>I'll keep that in mind. Sounds like a good idea. Have you tried them yourself?<</player-chat>> <<cipher-chat>>Nah... not many people have. S.I.M.S. are still too new and too expensive to be widespread.<</cipher-chat>> <<cipher-chat>>You should consider yourself lucky to have tried one... even if the dicking took you by surprise<</cipher-chat>> <<player-chat>>That's one way to put it.<</player-chat>> <</if>> <<else>> <<if $GitGudIntroductionPeeked is true>> <<player-chat>>I was looking for this guy named Xavier, who installs cyberware for a living. Just when I was about to knock on his door, I heard strange noises from the inside. I decided to peek though the keyhole and... guess what.<</player-chat>> <<cipher-chat>>What?<</cipher-chat>> <<player-chat>>Some chick in high heels was sucking on his huge black cock!<</player-chat>> <<cipher-chat>>WHAT?!<</cipher-chat>> <<player-chat>>I'm not kidding.<</player-chat>> <<cipher-chat>>That's crazy! What happened then?<</cipher-chat>> <<player-chat>>He blew his load in her mouth and she left.<</player-chat>> <<cipher-chat>>That's what I call an interesting work experience.<</cipher-chat>> <<cipher-chat>>And what about the S.I.M.S. you delivered? Did you try it?<</cipher-chat>> <<player-chat>>No, I didn't. Custom ones can be risky.<</player-chat>> <<cipher-chat>>Man, you passed up a golden opportunity! Most of those horror stories are just OmniNet myths. There are countless people who would love to try S.I.M.S. but can't afford to.<</cipher-chat>> <<player-chat>>Too expensive?<</player-chat>> <<cipher-chat>>You really don't keep up with tech news much anymore, do you? Yes, S.I.M.S. (especially custom ones) can be stupidly expensive.<</cipher-chat>> <<player-chat>>I see.<</player-chat>> <<cipher-chat>>If you get another shot, go for it. They're a blast, from what I've heard.<</cipher-chat>> <<player-chat>>What's so great about them?<</player-chat>> <<cipher-chat>>Well, they let you experience anything you want as if you were in a different body.<</cipher-chat>> <<player-chat>>So I could be a cape-wearing superhero?<</player-chat>> <<cipher-chat>>Sure. Or you could be a 10-inch dick wielding porn star.<</cipher-chat>> <<player-chat>>Wow!<</player-chat>> <<cipher-chat>>Of course, you could also be on the receiving end of the 10-inch weapon.<</cipher-chat>> <<cipher-chat>><<picture "imgs/IM/female-pov-penetration.png">><</cipher-chat>> <<player-chat>>That sounds... interesting.<</player-chat>> <<cipher-chat>>You bet.<</cipher-chat>> <<else>> <<player-chat>>I met this huge black guy called Xavier. He installs cyberware for a living.<</player-chat>> <<cipher-chat>>An acquaintance like that can come in handy.<</cipher-chat>> <<cipher-chat>>And what about the S.I.M.S. you delivered? Did you try it?<</cipher-chat>> <<player-chat>>No, I didn't. Custom ones can be risky.<</player-chat>> <<cipher-chat>>Man, you passed up a golden opportunity! Most of those horror stories are just OmniNet myths. There are countless people who would love to try S.I.M.S. but can't afford to.<</cipher-chat>> <<player-chat>>Too expensive?<</player-chat>> <<cipher-chat>>You really don't keep up with tech news much anymore, do you? Yes, S.I.M.S. (especially custom ones) can be stupidly expensive.<</cipher-chat>> <<player-chat>>I see.<</player-chat>> <<cipher-chat>>If you get another shot, go for it. They're a blast, from what I've heard.<</cipher-chat>> <<player-chat>>What's so great about them?<</player-chat>> <<cipher-chat>>Well, they let you experience anything you want as if you were in a different body.<</cipher-chat>> <<player-chat>>So I could be a cape-wearing superhero?<</player-chat>> <<cipher-chat>>Sure. Or you could be a 10-inch dick wielding porn star.<</cipher-chat>> <<player-chat>>Wow!<</player-chat>> <<cipher-chat>>Of course, you could also be on the receiving end of the 10-inch weapon.<</cipher-chat>> <<player-chat>>That sounds... interesting.<</player-chat>> <<cipher-chat>>You bet.<</cipher-chat>> <</if>> <</if>>
<<player-chat>>AVA just talked with me.<</player-chat>> <<cipher-chat>>What?! I thought the implant was supposed to stop her.<</cipher-chat>> <<player-chat>>It's supposed to, but it didn't, and now her voice is even clearer.<</player-chat>> <<cipher-chat>>Damn, that's not good. Did she say anything specific?<</cipher-chat>> <<player-chat>>She said the implant gives her a direct line to my consciousness. She can reach me anytime she wants.<</player-chat>> <<cipher-chat>>This is bad. We need to figure out a way to get her out of your head for good.<</cipher-chat>> <<player-chat>>Got any ideas?<</player-chat>> <<cipher-chat>>None at the moment, but I'll look into it and let you know as soon as I find something useful.<</cipher-chat>> <<player-chat>>Thank you, Cipher.<</player-chat>> <<cipher-chat>>Also, it's possible that AVA can hear or see everything you do... maybe even read your thoughts. But it's also possible that she can't — at least not all the time. We just don't know her full capabilities.<</cipher-chat>> <<player-chat>>Great, so I have to assume she's always watching and listening. Just perfect.<</player-chat>> <<set $cipherInstantMessages["AVA Can Talk To Me"].isNew = false>> <<set $cipherInstantMessages["AVA Can Talk To Me"].unlocked = false>>
<div class="desktop">\ <!-- Adding Top bar -->\ <div class="top-bar">\ @@.about-pc-button;<<button "About This PC">> <<run setup.showAboutPcWindow()>> <</button>>@@\ <span class="notification-counter"><i class="fas fa-wifi"></i> <i class="fas fa-volume-up"></i></span>\ </div> <!-- Notification Area -->\ <div class="notification-area">\ <!-- Notifications will be inserted here -->\ <<for _notification range $notificationsPC>>\ <div class="notification-bubble"><<print _notification>></div>\ <</for>> </div> <div class="about-pc" id="aboutPcWindow" style="display: none;">\ <div class="about-pc-header">\ About This PC\ <span id="closeAboutPcWindow" class="about-pc-close-button">⛌</span>\ </div>\ <div class="about-pc-body">\ <p><b>Computer Name:</b> <span id="playerPcName"></span></p>\ <p><b>Username:</b> <span id="playerNickname"></span></p>\ /*<p><b>Performance:</b> <span id="playerPcPerformance"></span></p>\*/\ </div>\ </div>\ <div class="dock"> <div class="desktop-icon" onclick="SugarCube.Engine.play('HackTarget')">👾<div class="icon-tooltip">Hack Target</div></div> <div class="desktop-icon" onclick="SugarCube.Engine.play('WebBrowser')">🌐<div class="icon-tooltip">OmniNet Browser</div></div> <div class="desktop-icon" onclick="SugarCube.Engine.play('EmailClient')">📧<div class="icon-tooltip">Email Client</div></div> <div class="desktop-icon" onclick="SugarCube.Engine.play('IMApp')">💬<div class="icon-tooltip">Instant Messenger</div></div> <div class="desktop-icon" onclick="SugarCube.Engine.play('NotesApp')">📝<div class="icon-tooltip">Notes</div></div> <div class="desktop-icon" onclick="SugarCube.Engine.play('FilesApp')">🗂️<div class="icon-tooltip">Files</div></div> <div class="desktop-icon" onclick="SugarCube.Engine.play('ComputerSettings')">🔧<div class="icon-tooltip">Settings</div></div> </div> </div>\ \ <<if $navigatedFromSidebar>>\ <<if previous() is "Computer">>\ <p class="back-link"> [[Go Back->HomeBacklog]] </p> <<else>>\ <p class="back-link"> <<link "Go Back" $returnPassage>> <<set $navigatedFromSidebar to false>> <</link>> </p> <</if>>\ <<else>>\ <p class="back-link"> [[Go Back->HomeBacklog]] </p> <</if>>\ <<script>> setup.showAboutPcWindow = function() { $('#playerPcName').text(State.variables.playerPcName); $('#playerNickname').text(State.variables.playerNickname); //$('#playerPcPerformance').text(State.variables.playerPcPerformance + " petaFLOPS"); $('#aboutPcWindow').show(); // Add close event $('#closeAboutPcWindow').off('click').click(function() { $('#aboutPcWindow').hide(); }); } <</script>> <<script>> $(document).ready(function() { $(".desktop").css({ "background-image": "url('imgs/wallpapers/" + State.variables.activeWallpaper + ".jpg')", "background-size": "cover" }); }); <</script>>
<<include "Computer">>
<div class="cyber-desktop-files">\ <div class="cyber-files-header"><span class="cyber-files-header-text">Files</span></div> <div class="cyber-files-content"> <div class="file-item folder" onclick="SugarCube.Engine.play('FilesApp-Research')"><span>📁</span><p>Research</p></div> <div class="file-item file" onclick="SugarCube.Engine.play('FilesApp-README-Template')"><span>📄</span><p>README-Template.md</p></div> <div class="file-item file" onclick="SugarCube.Engine.play('FilesApp-HackersManifesto')"><span>📄</span><p>Hacker's Manifesto.txt</p></div> <div class="file-item executable" onclick="SugarCube.Engine.play('FilesApp-Stars')"><span>✨</span><p>screensaver.exe</p></div> <<if $spyingLandlordFinished and not $spyingLandlordExposed>> <div class="file-item executable action-point-button" onclick="MindWare.reselectCameraImages(); MindWare.processActionButtonClick(1, 'SpyingLandlordHack-server-camera-access-backdoor')"><span>📹</span><p>cameras.sh <span class="action-point-icon">⚡</span></p></div> <</if>> </div>\ </div>\ <p class="back-link">[[Go Back->Computer]]</p>
<div class="cyber-desktop-files">\ <div class="cyber-files-header"><span class="cyber-files-header-text">Files - Research</span></div>\ <div class="research-files-content">\ <div id="available-images" style="display: flex; flex-wrap: wrap; justify-content: flex-start;">\ </div>\ </div>\ </div>\ <p class="back-link">[[Go Back->FilesApp]]</p> <<script>> $(document).ready(function() { let imagesDiv = $('#available-images'); State.variables.unlockedImages.forEach(function(image, index) { let displayImageName = 'research' + (index + 1); // Sequential name for display let imgContainer = $('<div>') .css({ 'display': 'flex', 'flex-direction': 'column', 'align-items': 'center', 'margin': '10px' }); let img = $('<img>') .attr('src', 'imgs/files/research/' + image + '.jpg') // Actual image file name .attr('alt', displayImageName + ' preview') .css({ 'width': '141px', // Set only the width to preserve aspect ratio 'cursor': 'pointer' }) .click(function() { Dialog.setup(displayImageName + '.jpg' + ' Preview'); Dialog.wiki('<div style="text-align:center;"><img src="imgs/files/research/' + image + '.jpg" alt="' + displayImageName + ' preview" style="max-width:80%; max-height:80%;"></div>'); Dialog.open(); }); let filename = $('<span>') .text(displayImageName + '.jpg') // Sequential display name .css({ 'display': 'block', 'text-align': 'center', 'color': 'white', 'margin-top': '5px' }); imgContainer.append(img).append(filename); imagesDiv.append(imgContainer); }); }); <</script>>
<div class="cyber-desktop-files">\ <div class="cyber-files-header"><span class="cyber-files-header-text">Files - README-Template.md</span></div>\ <div class="research-files-content">\ # Project Title One Paragraph of project description goes here ## Getting Started These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system. ### Prerequisites What things you need to install the software and how to install them Give examples ### Installing A step by step series of examples that tell you how to get a development env running Say what the step will be Give the example And repeat until finished End with an example of getting some data out of the system or using it for a little demo ## Running the tests Explain how to run the automated tests for this system ### Break down into end to end tests Explain what these tests test and why Give an example ### And coding style tests Explain what these tests test and why Give an example ## Deployment Add additional notes about how to deploy this on a live system </div>\ </div>\ <p class="back-link">[[Go Back->FilesApp]]</p>
<div class="cyber-desktop-files">\ <div class="cyber-files-header"><span class="cyber-files-header-text">Files - Hacker's Manifesto.txt</span></div>\ <div class="research-files-content">\ Phrack Inc. Volume One, Issue 7, Phile 3 of 10 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= The following was written shortly after my arrest... The Conscience of a Hacker by +++The Mentor+++ Written on January 8, 1986 =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Another one got caught today, it's all over the papers. "Teenager Arrested in Computer Crime Scandal", "Hacker Arrested after Bank Tampering"... Damn kids. They're all alike. But did you, in your three-piece psychology and 1950's technobrain, ever take a look behind the eyes of the hacker? Did you ever wonder what made him tick, what forces shaped him, what may have molded him? I am a hacker, enter my world... Mine is a world that begins with school... I'm smarter than most of the other kids, this crap they teach us bores me... Damn underachiever. They're all alike. I'm in junior high or high school. I've listened to teachers explain for the fifteenth time how to reduce a fraction. I understand it. "No, Ms. Smith, I didn't show my work. I did it in my head..." Damn kid. Probably copied it. They're all alike. I made a discovery today. I found a computer. Wait a second, this is cool. It does what I want it to. If it makes a mistake, it's because I screwed it up. Not because it doesn't like me... Or feels threatened by me... Or thinks I'm a smart ass... Or doesn't like teaching and shouldn't be here... Damn kid. All he does is play games. They're all alike. And then it happened... a door opened to a world... rushing through the phone line like heroin through an addict's veins, an electronic pulse is sent out, a refuge from the day-to-day incompetencies is sought... a board is found. "This is it... this is where I belong..." I know everyone here... even if I've never met them, never talked to them, may never hear from them again... I know you all... Damn kid. Tying up the phone line again. They're all alike... You bet your ass we're all alike... we've been spoon-fed baby food at school when we hungered for steak... the bits of meat that you did let slip through were pre-chewed and tasteless. We've been dominated by sadists, or ignored by the apathetic. The few that had something to teach found us will- ing pupils, but those few are like drops of water in the desert. This is our world now... the world of the electron and the switch, the beauty of the baud. We make use of a service already existing without paying for what could be dirt-cheap if it wasn't run by profiteering gluttons, and you call us criminals. We explore... and you call us criminals. We seek after knowledge... and you call us criminals. We exist without skin color, without nationality, without religious bias... and you call us criminals. You build atomic bombs, you wage wars, you murder, cheat, and lie to us and try to make us believe it's for our own good, yet we're the criminals. Yes, I am a criminal. My crime is that of curiosity. My crime is that of judging people by what they say and think, not what they look like. My crime is that of outsmarting you, something that you will never forgive me for. I am a hacker, and this is my manifesto. You may stop this individual, but you can't stop us all... after all, we're all alike. +++The Mentor+++ </div>\ </div>\ <p class="back-link">[[Go Back->FilesApp]]</p>
<div class="stars-desktop-files">\ <div class="cyber-files-header"><span class="cyber-files-header-text">Files - screensaver.exe</span></div>\ <div class="stars-files-content">\ <canvas style="height: 500px; width: 100%" id="canvas"></canvas>\ </div>\ </div>\ <script> "use strict"; var canvas = document.getElementById('canvas'), ctx = canvas.getContext('2d'), w = canvas.width = window.innerWidth, h = canvas.height = window.innerHeight, hue = 217, stars = [], count = 0, maxStars = 1400; // Cache gradient var canvas2 = document.createElement('canvas'), ctx2 = canvas2.getContext('2d'); canvas2.width = 100; canvas2.height = 100; var half = canvas2.width/2, gradient2 = ctx2.createRadialGradient(half, half, 0, half, half, half); gradient2.addColorStop(0.025, '#fff'); gradient2.addColorStop(0.1, 'hsl(' + hue + ', 61%, 33%)'); gradient2.addColorStop(0.25, 'hsl(' + hue + ', 64%, 6%)'); gradient2.addColorStop(1, 'transparent'); ctx2.fillStyle = gradient2; ctx2.beginPath(); ctx2.arc(half, half, half, 0, Math.PI * 2); ctx2.fill(); // End cache function random(min, max) { if (arguments.length < 2) { max = min; min = 0; } if (min > max) { var hold = max; max = min; min = hold; } return Math.floor(Math.random() * (max - min + 1)) + min; } function maxOrbit(x,y) { var max = Math.max(x,y), diameter = Math.round(Math.sqrt(max*max + max*max)); return diameter/2; } var Star = function() { this.orbitRadius = random(maxOrbit(w,h)); this.radius = random(60, this.orbitRadius) / 12; this.orbitX = w / 2; this.orbitY = h / 2; this.timePassed = random(0, maxStars); this.speed = random(this.orbitRadius) / 50000; this.alpha = random(2, 10) / 10; count++; stars[count] = this; } Star.prototype.draw = function() { var x = Math.sin(this.timePassed) * this.orbitRadius + this.orbitX, y = Math.cos(this.timePassed) * this.orbitRadius + this.orbitY, twinkle = random(10); if (twinkle === 1 && this.alpha > 0) { this.alpha -= 0.05; } else if (twinkle === 2 && this.alpha < 1) { this.alpha += 0.05; } ctx.globalAlpha = this.alpha; ctx.drawImage(canvas2, x - this.radius / 2, y - this.radius / 2, this.radius, this.radius); this.timePassed += this.speed; } for (var i = 0; i < maxStars; i++) { new Star(); } function animation() { ctx.globalCompositeOperation = 'source-over'; ctx.globalAlpha = 0.8; ctx.fillStyle = 'hsla(' + hue + ', 64%, 6%, 1)'; ctx.fillRect(0, 0, w, h) ctx.globalCompositeOperation = 'lighter'; for (var i = 1, l = stars.length; i < l; i++) { stars[i].draw(); }; window.requestAnimationFrame(animation); } animation();</script>\ <p class="back-link">[[Go Back->FilesApp]]</p>
<!-- Textbox for note entry -->\ <div class="notesApp">\ <div class="notesApp-header"><span class="notesApp-header-text">Notes</span></div>\ <div class="notesApp-content">\ <h2>New Note</h2>\ <textarea id="noteInput"></textarea><br>\ @@.note-button;<<button "Add note">>\ <<if $("#noteInput").val().trim() == "" >>\ <<run Dialog.setup("Warning")>>\ <<run Dialog.wiki("Cannot add an empty note.")>>\ <<run Dialog.open()>>\ <<else>>\ <<run $notes.unshift($("#noteInput").val().trim())>> \ <<run $("#noteInput").val('')>>\ <<replace "#notesDisplay">>\ <<include "NotesDisplay">>\ <</replace>>\ <<goto "NotesApp">>\ <</if>>\ <</button>>@@ <h2>Saved Notes</h2>\ <div id="notesDisplay">\ <<include "NotesDisplay">>\ </div>\ </div>\ </div>\ \ <<if $navigatedFromSidebar>>\ <<if previous() is "NotesApp">>\ <p class="back-link"> [[Go Back->Computer]] </p> <<else>>\ <p class="back-link"> <<link "Go Back" $returnPassage>> <<set $navigatedFromSidebar to false>> <</link>> </p> <</if>>\ <<else>>\ <p class="back-link"> [[Go Back->Computer]] </p> <</if>>\
<<if $notes.length == 0>>\ <p>No saved notes.</p>\ <<else>>\ <<for _index, _note range $notes>>\ <div class="saved-note">\ <span class="note-text"><<print $notes[_index]>></span>\ <span class="note-button">\ @@.note-button;<<button "Delete">>\ <<run $notes.splice(_index, 1)>>\ <<replace "#notesDisplay">>\ <<include "NotesDisplay">>\ <</replace>>\ <</button>>@@\ </span>\ </div>\ <</for>>\ <</if>>\
<<include "NotesApp">>
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target - Spying Landlord</span></div>\ <div class="desktop-hacking-tool-main">\ <div class="desktop-hacking-tool-targets-pane" id="targetsPane">\ <h2 class="desktop-hacking-tool-targets-heading">Available Targets</h2>\ <div id="dynamicTargets"><!-- Dynamic targets will be inserted here --></div>\ <!-- Targets will be dynamically inserted here -->\ </div>\ <div class="desktop-hacking-tool-tools-pane" id="toolsPane">\ <h2 class="desktop-hacking-tool-tools-heading">Installed Tools</h2>\ <ul class="desktop-hacking-tool-tools-list"> <!-- This is where the tools will go -->\ <!-- Tools will be dynamically inserted here -->\ </ul>\ </div>\ </div>\ </div>\ <<if $lockedUI !== true>>\ <p class="back-link">[[Go Back -> Computer]]</p> <</if>>\ <<script>> // Function to create target HTML function createTargetEntry(target) { return `<div class="desktop-hacking-tool-target-entry"> <div class="desktop-hacking-tool-target-details"> <span class="desktop-hacking-tool-target-name">${target.name}</span><br> <span class="desktop-hacking-tool-target-ip">IP: ${target.ip}</span> </div> <div class="desktop-hacking-tool-target-actions"> <button class="hack-button" onclick="SugarCube.Engine.play('${target.link}')">Connect</button> </div> </div>`; } // Function to render targets function renderTargets() { var targetsHtml = ""; var targets = State.variables.hackingTargets; for (var i = 0; i < targets.length; i++) { targetsHtml += createTargetEntry(targets[i]); } $('#dynamicTargets').html(targetsHtml); } // Function to create tool HTML function createToolEntry(tool) { return `<li>${tool}</li>`; } // Function to render tools function renderTools() { var toolsHtml = ""; var tools = State.variables.hackingTools; for (var i = 0; i < tools.length; i++) { toolsHtml += createToolEntry(tools[i]); } $('#toolsPane').find('.desktop-hacking-tool-tools-list').html(toolsHtml); } // Initial rendering $(document).ready(function() { renderTargets(); renderTools(); }); <</script>>
<div class="settings-wrapper">\ <div class="settings-header"><span class="settings-header-text">Computer Settings</span></div>\ <div class="settings-container">\ <h2 id="settings-title">General</h2> <form id="settings-form">\ <label for="computer-name" class="settings-label">Computer Name:</label>\ <input type="text" class="settings-input" id="computer-name" name="computer-name"><br> <label for="user-name" class="settings-label">Username:</label>\ <input type="text" class="settings-input" id="user-name" name="user-name"><br> @@.settings-button;<<button "Save Settings">> <<run $playerPcName = $("#computer-name").val().trim()>> <<run $playerNickname = $("#user-name").val().trim()>> <<goto "Computer">> <</button>>@@ </form> <h2 id="settings-title">Wallpaper</h2>\ <div id="wallpaper-preview"> <b>Active Wallpaper:</b> <img id="active-wallpaper-preview" src="" alt="Active wallpaper preview" style="width: 100%;"> </div> <div id="available-wallpapers"> <b>Select a Wallpaper:</b> </div>\ /*<h2 id="settings-title">Quick Fixes</h2> @@.settings-button;<<button "Clear Notifications">> <<run setup.clearNotifications()>> <<goto "Computer">> <</button>>@@*/\ </div> </div> [[Go Back -> Computer]] <<script>> $(document).ready(function() { // Set computer name $("#computer-name").val(State.variables.playerPcName); $("#user-name").val(State.variables.playerNickname); // Set wallpaper preview $("#active-wallpaper-preview").attr("src", "imgs/wallpapers/" + State.variables.activeWallpaper + ".jpg"); }); <</script>> <<script>> $(document).ready(function() { // Set computer name and active wallpaper $("#computer-name").val(State.variables.playerPcName); $("#active-wallpaper-preview").attr("src", "imgs/wallpapers/" + State.variables.activeWallpaper + ".jpg") .css({'margin-top': '10px', 'cursor': 'pointer' // This will make the cursor a pointer on hover }); // Display available wallpapers let wallpapersDiv = $('#available-wallpapers'); State.variables.availableWallpapers.forEach(function(wallpaper) { let img = $('<img>').attr('src', 'imgs/wallpapers/' + wallpaper + '.jpg') .attr('alt', wallpaper + ' preview') .css({'width': '144px', 'height': '81px', 'margin-right': '18px', 'margin-top': '10px', 'cursor': 'pointer' // This will make the cursor a pointer on hover }) .click(function() { State.variables.activeWallpaper = wallpaper; $("#active-wallpaper-preview").attr("src", 'imgs/wallpapers/' + wallpaper + '.jpg'); }); wallpapersDiv.append(img); }); }); <</script>>
<script> MindWare.updateURL = function() { var url = document.querySelector('.url-input').value; if (url) { var lowerUrl = url.toLowerCase(); switch (lowerUrl) { case "bytebunker.omninet": SugarCube.Engine.play('JobBoard'); break; case "filejunkie.omninet": SugarCube.Engine.play('DigitalDownloads'); break; case "omnipedia.omninet": SugarCube.Engine.play('OmniPedia'); break; case "hiveproperties.omninet": SugarCube.Engine.play('HiveProperties-Website'); break; case "extendo.omninet": SugarCube.Engine.play('Extendo-Website-Bookmarked'); break; case "pornnexus.omninet": SugarCube.Engine.play('PornNexus'); break; case "kingshit.omninet/mewing": SugarCube.Engine.play('Mewing-Website'); break; case "cvedatabase.omninet/2023-0773": SugarCube.Engine.play('CVE-Website'); break; case "looksmaxxing.omninet/forum/83414342": SugarCube.Engine.play('Looksmaxxing-Website'); break; // Other cases... default: SugarCube.Engine.play('WebBrowser-Error404'); break; } } else { // Handle empty input or show an alert/error message SugarCube.Engine.play('WebBrowser-Error404'); // or any other default behavior } }; document.getElementById('goButton').addEventListener('click', MindWare.updateURL); </script>
<div class="cyber-desktop-browser">\ <div class="browser-header"><span class="browser-header-text">OmniNet Browser</span></div>\ <div class="browser-toolbar">\ <input type="text" class="url-input" placeholder="Enter URL here..." />\ <span class="go-button">\ <button id="goButton">↲</button>\ </span>\ </div> <div class="bookmarks-area"> <div class="bookmark" onclick="SugarCube.Engine.play('JobBoard')"><span>💰</span><p>ByteBunker's Job Board</p></div>\ <div class="bookmark" onclick="SugarCube.Engine.play('DigitalDownloads')"><span>🛒</span><p>File Junkie Store</p></div>\ \ <div class="bookmark action-point-button" onclick="MindWare.processActionButtonClick(1, 'WebBrowser-DoResearch')"> <span>🇯🇵</span> <p>Research Japanese Culture <span class="action-point-icon">⚡</span></p> </div>\ <div class="bookmark" onclick="SugarCube.Engine.play('OmniPedia')"><span>📚</span><p>OmniPedia</p></div>\ <<if $EmailHivePropertiesSeen>>\ <div class="bookmark" onclick="SugarCube.Engine.play('HiveProperties-Website')"><span>🏢</span><p>Hive Properties</p></div>\ <<else>>\ <</if>>\ <<if $extendoWebsiteBookmarkAdded>>\ <div class="bookmark" onclick="SugarCube.Engine.play('Extendo-Website-Bookmarked')"><span>🍆</span><p>Extendo - Ultimate Reach</p></div>\ <<else>>\ <</if>>\ <<if $pornNexusUnlocked>>\ <div class="bookmark" onclick="SugarCube.Engine.play('PornNexus')"><span>🔞</span><p>PornNexus</p></div>\ <<else>>\ <</if>>\ \ </div>\ </div>\ \ <<if $navigatedFromSidebar>>\ <<if previous() is "WebBrowser">>\ <p class="back-link"> [[Go Back->Computer]] </p> <<else>>\ <p class="back-link"> <<link "Go Back" $returnPassage>> <<set $navigatedFromSidebar to false>> <</link>> </p> <</if>> <<else>>\ <p class="back-link"> [[Go Back->Computer]] </p> <</if>>\ <<include "WebBrowser-URL">>
<<include "WebBrowser">>
<<script>> $(document).ready(function() { var researchMaterial = State.variables.researchMaterial; var unlockedImages = State.variables.unlockedImages; console.log("Before pop, Research Material: ", researchMaterial.slice()); if (unlockedImages.length < 66) { // 66 is the total number of unique images var newImage = researchMaterial.pop(); // Get a random image from the array unlockedImages.push(newImage); document.getElementById('newImage').src = 'imgs/files/research/' + newImage + '.jpg'; document.getElementById('infoMessage').textContent = 'You\'ve found a new interesting image online and added it to your research folder.'; } else { document.getElementById('newImage').style.display = 'none'; document.getElementById('infoMessage').textContent = 'You haven\'t found any new image.'; } console.log("After pop, Research Material: ", researchMaterial.slice()); }); <</script>> \ <div class="cyber-desktop-browser">\ <div class="browser-header"><span class="browser-header-text">OmniNet Browser</span></div>\ <div class="browser-content">\ <img id="newImage" alt="New Image" style="max-width:100%; max-height:100%;">\ </div>\ </div> <div id="infoMessage" class="info-message"></div>\ \ <p class="back-link"> [[Go Back->WebBrowser]] </p>
<div class="cyber-desktop-browser">\ <div class="browser-header"><span class="browser-header-text">OmniNet Browser - Error 404</span></div>\ <div class="browser-toolbar">\ <input type="text" class="url-input" placeholder="Enter URL here..." />\ <span class="go-button">\ <button id="goButton">↲</button>\ </span>\ </div>\ <div class="browser-content">\ <h1>404 Not Found</h1>\ <p>Oops! The URL you entered does not exist.</p>\ </div> </div>\ \ <p class="back-link"> [[Go Back->previous()]] </p> <<include "WebBrowser-URL">>
<div class="jobboard-wrapper">\ <div class="jobboard-header"><span class="jobboard-header-text">ByteBunker's Job Board (bytebunker.omninet)</span></div>\ <div class="jobboard-content" id="jobContainer">\ <!-- Jobs will be dynamically inserted here -->\ </div>\ </div>\ \ <<if $jobBoardFirstVisit>>\ <<else>>\ <p class="back-link"> <<link "Go Back">> <<goto "WebBrowser">> <</link>> </p> <</if>> <<script>> $(document).ready(function() { function createJobListing(job) { var highlightClass = job.accepted ? "" : " highlighted"; var jobTitle = job.accepted ? "[TAKEN] " + job.title : job.title; return `<div class="job-listing${highlightClass}">\ <h2>${jobTitle}</h2>\ <p>${job.description}</p>\ <div class="job-meta">\ <span><b>Posted by:</b> ${job.poster}<br><b>Reward:</b> ${job.reward}</span>\ <span class="btn-wrapper-board">\ <<button "Open">>\ <<goto "${job.link}">>\ <</button>>\ </span>\ </div>\ </div>`; } var jobContentHtml = ""; var jobs = State.variables.byteBunkerJobs; for (var i = jobs.length - 1; i >= 0; i--) { var job = jobs[i]; if (job.available) { jobContentHtml += createJobListing(job); } } $('#jobContainer').wiki(jobContentHtml); }); <</script>>
<div class="job-description">\ <h2>Illegal Spying by Landlord</h2>\ <div class="job-meta">\ <span><b>Posted by:</b> ConcernedTenant01</span>\ <span><b>Reward:</b> $1,000</span>\ </div>\ <p>\ Hey there, We have this super creepy landlord. Like, we've always known he's nosy, but rumors are now flying around that he's secretly installed cameras in our freaking bathrooms. We're so ready to drag his ass to court, but we need concrete proof. I mean, if we're caught trying to find these cams, he'll probably kick us out or worse. That's where you come in. Your job? Sneak into the building's security network, find these spy camera feeds, and snatch any video clips or snapshots that can nail this guy. This gig will pay well, 'cause honestly, you'd be a lifesaver to a bunch of us. Hit me up if you have any questions or need more dirt on the situation. Ready when you are. </p>\ <<if setup.byteBunkerJobIsAccepted("LandlordJob")>>\ <div class="btn-wrapper"> <button disabled="disabled">Job Taken</button> </div> <<else>>\ <div class="btn-wrapper"> <<button "Accept this job">> <<run MindWare.addTask("Find spy camera feeds", "Task-LandlordJob")>> <<run MindWare.addInstantMessage('cipherInstantMessages', 'Landlord Job', 'IMApp-CipherLynx-Landlord', 'Cipher', true, true);>> <<set $introOver = true>> <<set $jobBoardFirstVisit = false>> <<set $illegalSpyingJobAccepted = true>> <<run setup.changeByteBunkerJobAcceptedStatus("LandlordJob", true)>> <<run MindWare.addEmail ("ConcernedTenant01","Info for the Landlord Job", "First off, huge thanks for taking this on. You have no idea how much this means to all of us here.", "Email-LandlordJobInfo")>> <<goto "HomeBacklog">> <</button>> </div> <</if>>\ </div>\ <p class="back-link"> <<return "Go Back">> </p>
<div class="job-description">\ <h2>Troubleshoot Legacy System</h2>\ <div class="job-meta">\ <span><b>Posted by:</b> OffbeatBoss</span>\ <span><b>Reward:</b> $200</span>\ </div>\ <p>\ Hey! So, here's the deal: our company has this archaic SQL database that's acting up like mad lately. It's throwing errors left, right, and center. Honestly, I've tried almost everything I can think of, but it's still a complete mess. We're hunting for someone who knows their way around these older systems and can help iron out these quirks. If you're up for the challenge and have expertise with these old beasts, drop us a line! </p>\ <div class="btn-wrapper"> <button disabled="disabled">Job Taken</button> </div>\ </div>\ <p class="back-link"> <<return "Go Back">> </p>
<div class="job-description">\ <h2>Crack Encryption Algorithm</h2>\ <div class="job-meta">\ <span><b>Posted by:</b> D4YDR34M</span>\ <span><b>Reward:</b> $5,500</span>\ </div>\ <p>\ Yo, Ran into some fresh crypto we haven't tangled with before. Threw our best tools at it, but this code's locked up tight. Task's straight up: Bust it open and spill its secrets. If you're sharp enough to crack this beast, give us a shout. - D4YDR34M </p>\ <div class="btn-wrapper"> <button disabled="disabled">Job Taken</button> </div>\ </div>\ <p class="back-link"> <<return "Go Back">> </p>
<div class="job-description">\ <h2>Urgent Photo Edit Required</h2>\ <div class="job-meta">\ <span><B>Posted by:</b> ManicPixy</span>\ <span><b>Reward:</b> $10 per photo</span>\ </div>\ <p>\ Hey there, Met this really cool guy online and I want to surprise him with some selfies. But, here's the thing, I have this mole on my chest that I'm super self-conscious about. I'd really appreciate it if someone could edit it out for me. I've attached three images. Willing to pay $10 for each picture, but I really need them done in the next 2 hours. I know it's a bit awkward putting my selfies out here, but I trust you all. Please be respectful. </p>\ <div class="btn-wrapper">\ <button disabled="disabled">Job Taken</button> </div> <div class="attachment-section">\ <div class="attachments-header">Attachments:</div>\ <div class="attachment-item">\ <i class="fa fa-paperclip attachment-icon"></i>\ @@.attachment-button;<<button "img1.jpg">> <<set $img1Opened = true>> <<popover>>[img[imgs/emails/chest1.webp]]<</popover>> <</button>>@@ </div>\ <div class="attachment-item">\ <i class="fa fa-paperclip attachment-icon"></i>\ @@.attachment-button;<<button "img2.jpg">> <<set $img2Opened = true>> <<popover>>[img[imgs/emails/chest2.webp]]<</popover>> <</button>>@@ </div>\ <div class="attachment-item">\ <i class="fa fa-paperclip attachment-icon"></i>\ @@.attachment-button;<<button "img3.jpg">> <<set $img3Opened = true>> <<popover>>[img[imgs/emails/chest3.webp]]<</popover>> <</button>>@@ </div>\ </div>\ </div>\ <p class="back-link"> <<return "Go Back">> </p>
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target</span></div>\ <div class="desktop-hacking-tool-animation">\ <div class="msg-container">\ <div class="msg">Connecting</div>\ </div>\ <div class="hacking-animation">\ <div id="console"></div>\ </div>\ </div>\ </div>\ <<if $totalDays > 3>> <<script>> $(document).one(':passagerender', function() { setTimeout(function() { var consoleElement = document.getElementById("console"); const msg = document.querySelector(".msg"); var txt = [ "Initializing connection protocol...", "...", "Compiling encryption modules...", "...Encryption compilation delayed.", "...", "Awaiting signal response, timeout imminent...", "...No response received.", "...", "Struggling to establish data channel...", "...Data channel unstable.", "Initiating port scan in fallback mode...", "...", "Port scan incomplete, critical ports unresponsive.", "Conducting network integrity check...", "...", "Multiple network irregularities detected.", "System alert: Network instability (Threats detected)", "Attempting to stabilize environment...", "...", "Final connection handshake attempt...", "...", "404 - Connection Failed. Server unreachable or does not exist." ]; function updateScreen() { // Check if there are lines left to add if (txt.length > 0) { var p = document.createElement("p"); p.textContent = txt.shift(); consoleElement.appendChild(p); // Automatically scroll to the bottom consoleElement.scrollTop = consoleElement.scrollHeight; } else { // Stop the interval if no more lines to add clearInterval(intervalID); msg.style.background = "red"; msg.innerHTML = "SERVER NOT FOUND"; msg.style.boxShadow = "0 0 30px red"; } } var intervalID = window.setInterval(updateScreen, 200); }, 0); }); <</script>> <<else>> <<script>> $(document).one(':passagerender', function() { setTimeout(function() { var consoleElement = document.getElementById("console"); const msg = document.querySelector(".msg"); var txt = [ "Initiating protocol sequence...", "...", "Encrypting handshake payload...", "...Payload encrypted.", "Handshake dispatched, awaiting sync...", "...", "Response pattern received, decrypting...", "...Decryption complete.", "Auth token generation in progress...", "...", "Securing comm-link with crypto-hash...", "...Comm-link secured.", "Executing port enumeration script...", "...", "Port scan subroutine finalized.", "Scanning for network anomalies...", "...No anomalies detected.", "Network integrity: Stable (No anomalies detected)", "Environment prepared. All systems go.", "...", "Connection established." ]; function updateScreen() { // Check if there are lines left to add if (txt.length > 0) { var p = document.createElement("p"); p.textContent = txt.shift(); consoleElement.appendChild(p); // Automatically scroll to the bottom consoleElement.scrollTop = consoleElement.scrollHeight; } else { // Stop the interval if no more lines to add clearInterval(intervalID); msg.style.background = "lime"; msg.innerHTML = "SUCCESS"; msg.style.boxShadow = "0 0 30px lime"; } } var intervalID = window.setInterval(updateScreen, 200); }, 0); }); <</script>> <</if>> <<if $totalDays > 3>> <<timed 8s>><<goto "SpyingLandlordHack-404">><</timed>> <<else>> <<timed 8s>><<goto "SpyingLandlordHack-server">><</timed>> <</if>>
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Server Connection Error</span></div>\ <div class="server-404-error-message"> <p class="blink-text">404 - Server Not Found</p> </div>\ </div>\ <p>Unfortunately, you're too late, and this target is no longer available. Do you want to <<link "delete it">><<run setup.removeHackingTarget("Spying Landlord")>><<goto "HackTarget">><</link>> or just [[go back -> HackTarget]]?</p>
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target - Spying Landlord</span></div>\ <div class="server-intro-message">\ <p> Connection established.</p>\ <p> <b>Server uptime:</b> 66 days, 5 hours</p>\ <p> <b>Security status:</b> Bruteforce detection active</p>\ </div>\ <div class="desktop-hacking-tool-server-content">\ <div class="server-section" id="camera-feed" onclick="SugarCube.Engine.play('SpyingLandlordHack-server-camera')">\ <button>📹 Video Streaming Server</button>\ </div>\ <div class="server-section" id="messages" onclick="SugarCube.Engine.play('SpyingLandlordHack-server-messages')">\ <button>📧 View Latest Messages</button>\ </div>\ <div class="server-section" id="transactions" onclick="SugarCube.Engine.play('SpyingLandlordHack-server-logs')">\ <button>📊 Check Logs</button>\ </div>\ </div>\ </div>\ <p class="back-link">[[Go Back -> HackTarget]]</p>
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target - Spying Landlord</span></div>\ <div class="desktop-hacking-tool-server-password-protected">\ <div class="server-password-lock-icon">🔒</div>\ <input type="text" id="server-password-input" class="server-password-input" placeholder="Enter Password">\ <button class="server-password-submit-button" onclick="checkLandlordPassword()">Submit</button>\ <div class="server-action-selection-box">\ <p class="active-cameras"> Access to the Video Streaming Server is password-protected.</p>\ <button class="server-password-access-button" onclick="SugarCube.Engine.play('SpyingLandlordHack-server-camera-bruteforce')">Manually Bruteforce the Password</button>\ </div>\ </div>\ </div>\ <p class="back-link">[[Go Back -> SpyingLandlordHack-server]]</p> <script> function checkLandlordPassword() { let password = document.getElementById('server-password-input').value; if (password === "monopoly" || password === "Monopoly") { SugarCube.Engine.play('SpyingLandlordHack-server-camera-access'); } else { SugarCube.UI.alert("Incorrect password."); } } </script> <<set $bruteforceMinigameCorrectPassword to "monopoly">> <<set $selectedPasswordLength to 4>> <<set $numberOfPasswordsNeeded to 10>> <<if $miniGameDifficulty is "Normal">> <<set $bruteforceBaseTraceTime to 15>> <<elseif $miniGameDifficulty is "Easy">> <<set $bruteforceBaseTraceTime to 25>> <<else>> <<set $bruteforceBaseTraceTime to 35>> <</if>> <<set $nextPassageAfterSuccessBruteforceGame to "SpyingLandlordHack-server-camera-access">> <<set $nextPassageAfterFailBruteforceGame to "HackTarget">>
<<include "Minigame-Bruteforce">>\ \ <<if $minigameSkipButtons === true>>\ <p class="back-link">[[Skip the Minigame -> SpyingLandlordHack-server-camera-access]]</p> <</if>>
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target - Spying Landlord</span></div>\ <div class="server-camera-view">\ <div class="server-camera-title-bar" id="showerCameraTitle">Camera #1</div>\ <div class="server-camera-content" id="showerCameraContent"><!-- Image will be set here --></div>\ </div>\ <div class="server-camera-action-selection-box">\ <p class="active-cameras" id="activeCameras"> Number of active cameras: </p>\ <button class="server-password-access-button" id="showerCameraButton">Switch Camera</button>\ </div>\ </div> As the last layers of encryption fall away, the truth lays bare before you: the landlord is a voyer on a large scale, peering into the bathrooms of possibly hundreds of his tenants. Seeing your fellow NeoUrbanians so exposed, you can't help but admit there's a twisted allure to this forbidden view. The power to watch, undetected, to possess a secret window into the hidden lives of others. If you decided to lie about the landlord's activity and keep the feed for yourself, you could watch it at any time, and it would take you a long time to run out of tenants to spy on. But then, there's the mission. The promise you made to bring this invasion to an end, your reputation as a hacker, and the juicy reward for your efforts. The screen flickers, waiting for a command, echoing the flicker of conflict within you. @@.choicebutton;<<button "Expose the landlord">><<goto "ExposeLandlord">><</button>>@@\ @@.choicebutton;<<button "Lie and maintain access to the feed">><<goto "DontExposeLandlord">><</button>>@@\ <<if $tutorialMorality === false>>\ <div id="tutorial-box"><div class="instruction-container-blue">\ <div class="instruction-title-bar-blue">Tutorial: Morality <button class="tutorial-close-button" onclick="SugarCube.State.variables.tutorialMorality = true; document.getElementById('tutorial-box').style.display = 'none';"><span style="tutorial-close-button"><i class="fas fa-times-circle"></i></span></button></div>\ <div class="instruction-content">\ <p>This is your first decision in the game, and it will impact your morality. Many other similar choices you make throughout your journey will also influence your moral standing.</p>\ <p>While those who tread the immoral path often find themselves in thrilling scenarios, remember: such lives are rarely marked by happy endings.</p>\ </div>\ </div> </div>\ <<else>>\ <</if>>\ \ <p class="back-link">[[Go Back -> SpyingLandlordHack-server]]</p> <<script>> $(document).ready(function() { var selectedImages = State.variables.selectedShowerImages; var currentShowerImageIndex = State.variables.currentShowerImageIndex; // Function to handle image update function handleImageUpdate() { MindWare.updateCameraImage(selectedImages, currentShowerImageIndex, 'showerCameraContent', 'showerCameraTitle'); currentShowerImageIndex = (currentShowerImageIndex + 1) % selectedImages.length; State.variables.currentShowerImageIndex = currentShowerImageIndex; } // Display the number of active cameras $('#activeCameras').append(selectedImages.length); // Initial image update or subsequent update based on success variable if (!State.variables.spyingLandlordHackSuccess) { handleImageUpdate(); State.variables.spyingLandlordHackSuccess = true; } else { handleImageUpdate(); } // Button click to switch to the next image $('#showerCameraButton').click(handleImageUpdate); }); <</script>>
<div class="desktop-hacking-tool-wrapper"> <div class="desktop-hacking-tool-header"> <span class="desktop-hacking-tool-header-text">Hack-a-Target - Spying Landlord</span> </div> <div class="desktop-hacking-tool-server-content"> <div class="message-preview" id="message1"> <p><b>From:</b> NexaLink Solutions</p> <p><b>Subject:</b> Your recent tech support request</p> <p id="message1-preview"><b>Message:</b> We've received your request. After a preliminary review, it appears that your system is experiencing... <<link "Read More">><<replace "#message1-preview">><b>Message:</b> We've received your request. After a preliminary review, it appears that your system is experiencing network interference. We suspect this could be due to an outdated router firmware. A technician will be at your location tomorrow between 10 AM and 12 PM to conduct a thorough investigation and resolve the issue. Please ensure you are available during this time.<</replace>><</link>></p> </div> <!-- Message 2 --> <div class="message-preview" id="message2"> <p><b>From:</b> StarCloud Billing Department</p> <p><b>Subject:</b> Invoice for Services Rendered</p> <p id="message2-preview"><b>Message:</b> Thank you for using our services. This email is to confirm that your payment for the last month... <<link "Read More">><<replace "#message2-preview">><b>Message:</b> Thank you for using our services. This email is to confirm that your payment for the last month has been received and your subscription is now active for the next 30 days. Attached to this email, you'll find a detailed breakdown of the charges. We appreciate your continued support and look forward to serving your needs. Should you have any queries regarding your bill, please do not hesitate to contact our billing department.<</replace>><</link>></p> </div> <!-- Message 3 --> <div class="message-preview" id="message3"> <p><b>From:</b> Bob</p> <p><b>Subject:</b> RE: Little Surprise</p> <p id="message3-preview"><b>Message:</b> Wow! Just... wow!!! I wasn't expecting this AT ALL. You've made this horndog really happy. I owe you for this one, bro. Thanks you! <<link "Read More">><<replace "#message3-preview">><b>Message:</b> Wow! Just... wow!!! I wasn't expecting this AT ALL. You've made this horndog really happy. I owe you for this one, bro. Thanks you! <br><hr> <b>Original Message:</b> <p>Hey buddy, here's the little surprise I promised when we last met. To open it, you need to connect to this address (ab20:adac:0738:d7b1) and enter the correct password. In case you've already forgotten what it is, think of a board game someone in my position has to be good at (hint: it starts with "M"). And remember, this gift must be our little secret – never mention it to anyone else. Enjoy!</p><</replace>><</link>></p> </div> <!-- Message 4 --> <div class="message-preview-last" id="message4"> <p><b>From:</b> AdmirerX</p> <p><b>Subject:</b> Special Request</p> <p id="message4-preview"><b>Message:</b> I've been extremely satisfied with your service, but I have a specific request. Is it possible to... <<link "Read More">><<replace "#message4-preview">><b>Message:</b> I've been extremely satisfied with your service, but I have a specific request. Is it possible to install an additional camera in one of the tenant's bedrooms? Please let me know the feasibility and any additional costs involved. Thanks in advance for your assistance.<</replace>><</link>></p> </div> </div> </div> <br> <p class="back-link">[[Go Back -> SpyingLandlordHack-server]]</p>
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target - Spying Landlord - Access Logs</span></div>\ <div class="log-entries">\ <div class="log-entry"><span class="log-time">Server Time: 03:51:22</span><br>From unknown - Remote connection established</div>\ <div class="log-entry"><span class="log-time">Server Time: 03:21:45</span><br>From 8b4b:7973:52f5:7a3a - Accessed streaming service</div>\ <div class="log-entry"><span class="log-time">Server Time: 02:47:30</span><br>From 8b4b:7973:52f5:7a3a - Encrypted stream initiated</div>\ <div class="log-entry"><span class="log-time">Server Time: 02:15:12</span><br>From 8b4b:7973:52f5:7a3a - User login success [user: iontrust]</div>\ <div class="log-entry"><span class="log-time">Server Time: 01:50:03</span><br>From ab20:adac:0738:d7b1 - Streaming server restarted</div>\ <div class="log-entry"><span class="log-time">Server Time: 01:34:21</span><br>From 5cce:87b0:7610:c8e2 - Accessed camera feed [camera: apartment520]</div>\ <div class="log-entry"><span class="log-time">Server Time: 01:10:45</span><br>From 37b1:875a:746c:1253 - User login failed [user: cookiesandmilk]</div>\ <div class="log-entry"><span class="log-time">Server Time: 00:58:09</span><br>From ab20:adac:0738:d7b1 - Password change requested [user: admin]</div>\ <div class="log-entry"><span class="log-time">Server Time: 00:30:16</span><br>From 374e:5fb1:24b8:d995 - Unusual activity detected [camera: apartment90]</div>\ <div class="log-entry"><span class="log-time">Server Time: 00:15:54</span><br>From 127.0.0.1 - Firmware update initiated</div>\ <div class="log-entry"><span class="log-time">Server Time: 23:59:45</span><br>From ab20:adac:0738:d7b1 - Accessed streaming service settings</div>\ <div class="log-entry"><span class="log-time">Server Time: 23:45:33</span><br>From bf6c:5856:fc1d:6e7c - Payment received [user: anonymous]</div>\ <div class="log-entry"><span class="log-time">Server Time: 23:30:21</span><br>From 7241:00e0:611e:af0b - Encrypted stream paused</div>\ <div class="log-entry"><span class="log-time">Server Time: 02:47:30</span><br>From 7241:00e0:611e:af0b - Encrypted stream initiated</div>\ <div class="log-entry"><span class="log-time">Server Time: 23:15:05</span><br>From 7241:00e0:611e:af0b - User login success [user: AdmirerX]</div>\ <div class="log-entry-last"><span class="log-time">Server Time: 23:00:00</span><br>From 127.0.0.1 - System health check performed</div>\ </div>\ </div>\ <p class="back-link">[[Go Back -> SpyingLandlordHack-server]]</p>
You take a deep breath and choose to uphold your promise. With deliberate clicks, you compile the evidence of the landlord's misdeeds. \ <<if visited() is 1>>\ <<increasemorality>>\ <<actionPointsDecreased 5>>\ <</if>>\ As you seal off your access to the cameras, a fleeting sense of loss grips you. The thrill of spying on strangers was exhilarating, a rare glimpse into unguarded moments. Yet, you remind yourself that your reputation as a hacker isn't built on exploitation. Moreover, you need the cash, and this job pays well. You rationalize that naked videos are a dime a dozen on OmniNet. If one were so inclined, there are even places in this city where watching is the least of what's on offer. <span id="contact">@@.choicebutton;<<button "Send the Evidence to the Client">> <<set $spyingLandlordFinished to true>> <<set $spyingLandlordExposed to true>> <<replace "#contact">>You've sent the evidence of spying to the client, and now you need to wait for their response. Since there's nothing more to be done tonight, you should <<link [[get some rest|GoToSleep]]>><<run MindWare.completeTask("Find spy camera feeds")>><<run MindWare.addTask("Start your new job", "Task-StartBrainFryJob")>><<run setup.removeHackingTarget("Spying Landlord")>><<run MindWare.addEmail ("ConcernedTenant01","Thank You!", "I can't even begin to express my gratitude. You've done something incredible here.", "Email-LandlordJobFinishGood")>><<set $playerMoney to $playerMoney + 1500>><</link>>. <</replace>> <</button>>@@</span>
With a mixture of excitement and guilt, you decide against exposing the landlord. The lure of what these feeds offer is too tempting to ignore. \ <<if visited() is 1>>\ <<decreasemorality>>\ <<actionPointsDecreased 5>>\ <</if>>\ You begin the intricate process of installing a backdoor to the camera feeds, ensuring they can be viewed by launching a single script from your Files app. A few keystrokes later, and it's done. The once-hidden lives of the tenants now lie at your fingertips, accessible with a simple click. You say goodbye to the financial reward you've been promised, but the excitement of this forbidden access overshadows any lingering doubts. <span id="contact">@@.choicebutton;<<button "Lie to the Client">> <<set $spyingLandlordFinished to true>> <<set $spyingLandlordExposed to false>> <<replace "#contact">>You've crafted a convincing lie, explaining that you couldn't find any substantial evidence, and now you need to wait for their response. Since there's nothing more to be done tonight, you should <<link [[get some rest|GoToSleep]]>><<run MindWare.completeTask("Find spy camera feeds")>><<run MindWare.addTask("Start your new job", "Task-StartBrainFryJob")>><<run setup.removeHackingTarget("Spying Landlord")>><<run MindWare.addEmail ("ConcernedTenant01","Appreciate the effort", "Thanks for giving it a shot. I'm a bit surprised and disappointed that nothing turned up, but I guess these things happen.", "Email-LandlordJobFinishBad")>><</link>>. <</replace>> <</button>>@@</span>
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target - Spying Landlord</span></div>\ <div class="server-camera-view">\ <div class="server-camera-title-bar" id="showerCameraTitle">Camera #1</div>\ <div class="server-camera-content" id="showerCameraContent"><!-- Image will be set here --></div>\ </div>\ <div class="server-camera-action-selection-box">\ <p class="active-cameras" id="activeCameras"> Number of active cameras: </p>\ <button class="server-password-access-button" id="showerCameraButton">Switch Camera</button>\ </div>\ </div>\ <p class="back-link">[[Go Back -> FilesApp]]</p> <<script>> $(document).ready(function() { var selectedImages = State.variables.selectedShowerImages; State.variables.currentShowerImageIndex = 0; var currentShowerImageIndex = State.variables.currentShowerImageIndex; // Function to handle image update function handleImageUpdate() { MindWare.updateCameraImage(selectedImages, currentShowerImageIndex, 'showerCameraContent', 'showerCameraTitle'); currentShowerImageIndex = (currentShowerImageIndex + 1) % selectedImages.length; State.variables.currentShowerImageIndex = currentShowerImageIndex; } // Display the number of active cameras $('#activeCameras').append(selectedImages.length); // Initial image update or subsequent update based on success variable if (!State.variables.spyingLandlordHackSuccess) { handleImageUpdate(); State.variables.spyingLandlordHackSuccess = true; } else { handleImageUpdate(); } // Button click to switch to the next image $('#showerCameraButton').click(handleImageUpdate); }); <</script>>
<div class="job-description">\ <h2>I Want to Prank My Colleague</h2>\ <div class="job-meta">\ <span><b>Posted by:</b> CorpoDrone</span>\ <span><b>Reward:</b> $250</span>\ </div>\ <p>\ Yo, hacker dudes and dudettes! I've got a job that's right up your alley, if you've got the skills to pull it off. You see, there's this guy at work who's been acting like a total asshat. He's the kind of guy who'd steal your lunch from the fridge and then deny it with a straight face. So, I thought it's about time someone taught him a lesson. Here's the deal: Mr. Asshat has a big presentation, which he has prepared already, coming up next week. I want you to edit the presentation file on his laptop in an embarrassing way. Just know that the laptop is running our standard enterprise-grade security suite. But I believe in you and will reward you with $250! And remember that it's all in good fun. No permanent damage, no stealing data, just a harmless prank to take Mr. Asshat down a peg or two. I definitely don't want to get him fired. <i>To speed up things, I'm making it possible for the first person interested in this job to save the target directly.</i> </p>\ <<if setup.byteBunkerJobIsAccepted("ByteBunker-Prank")>>\ <div class="btn-wrapper"> <button disabled="disabled">Job Taken</button> </div> <<else>>\ <div class="btn-wrapper"> <<button "Save the target">> <<run MindWare.addTask("Prank client's colleague", "Task-Prank-Colleague")>> <<run setup.changeByteBunkerJobAcceptedStatus("ByteBunker-Prank", true)>> <<run setup.addHackingTarget("Annoying Colleague", "292c:3467:3d9b:2c44", "ByteBunker-Prank-animation")>>\ <<goto "ByteBunker-Prank">> <</button>> </div> <</if>>\ </div>\ <p class="back-link"> <<return "Go Back">> </p>
Your task is to hack into the target's laptop and plant an embarrassing picture that will automatically open when the laptop is connected to a projector.
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target</span></div>\ <div class="desktop-hacking-tool-animation">\ <div class="msg-container">\ <div class="msg">Connecting</div>\ </div>\ <div class="hacking-animation">\ <div id="console"></div>\ </div>\ </div>\ </div>\ <<if $chapter1Days > 10>> <<script>> $(document).one(':passagerender', function() { setTimeout(function() { var consoleElement = document.getElementById("console"); const msg = document.querySelector(".msg"); var txt = [ "Initializing connection protocol...", "...", "Compiling encryption modules...", "...Encryption compilation delayed.", "...", "Awaiting signal response, timeout imminent...", "...No response received.", "...", "Struggling to establish data channel...", "...Data channel unstable.", "Initiating port scan in fallback mode...", "...", "Port scan incomplete, critical ports unresponsive.", "Conducting network integrity check...", "...", "Multiple network irregularities detected.", "System alert: Network instability (Threats detected)", "Attempting to stabilize environment...", "...", "Final connection handshake attempt...", "...", "404 - Connection Failed. Server unreachable or does not exist." ]; function updateScreen() { // Check if there are lines left to add if (txt.length > 0) { var p = document.createElement("p"); p.textContent = txt.shift(); consoleElement.appendChild(p); // Automatically scroll to the bottom consoleElement.scrollTop = consoleElement.scrollHeight; } else { // Stop the interval if no more lines to add clearInterval(intervalID); msg.style.background = "red"; msg.innerHTML = "SERVER NOT FOUND"; msg.style.boxShadow = "0 0 30px red"; } } var intervalID = window.setInterval(updateScreen, 200); }, 0); }); <</script>> <<else>> <<script>> $(document).one(':passagerender', function() { setTimeout(function() { var consoleElement = document.getElementById("console"); const msg = document.querySelector(".msg"); var txt = [ "Initiating protocol sequence...", "...", "Encrypting handshake payload...", "...Payload encrypted.", "Handshake dispatched, awaiting sync...", "...", "Response pattern received, decrypting...", "...Decryption complete.", "Auth token generation in progress...", "...", "Securing comm-link with crypto-hash...", "...Comm-link secured.", "Executing port enumeration script...", "...", "Port scan subroutine finalized.", "Scanning for network anomalies...", "...No anomalies detected.", "Network integrity: Stable (No anomalies detected)", "Environment prepared. All systems go.", "...", "Connection established." ]; function updateScreen() { // Check if there are lines left to add if (txt.length > 0) { var p = document.createElement("p"); p.textContent = txt.shift(); consoleElement.appendChild(p); // Automatically scroll to the bottom consoleElement.scrollTop = consoleElement.scrollHeight; } else { // Stop the interval if no more lines to add clearInterval(intervalID); msg.style.background = "lime"; msg.innerHTML = "SUCCESS"; msg.style.boxShadow = "0 0 30px lime"; } } var intervalID = window.setInterval(updateScreen, 200); }, 0); }); <</script>> <</if>> <<if $chapter1Days > 10>> <<timed 8s>><<goto "ByteBunker-Prank-404">><</timed>> <<else>> <<timed 8s>><<goto "ByteBunker-Prank-computer-login">><</timed>> <</if>>
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Server Connection Error</span></div>\ <div class="server-404-error-message"> <p class="blink-text">404 - Server Not Found</p> </div>\ </div>\ <p>Unfortunately, you're too late, and this target is no longer available. Do you want to <<link "delete it">><<run setup.removeHackingTarget("Annoying Colleague")>><<goto "HackTarget">><</link>> or just [[go back -> HackTarget]]?</p>
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target - Annoying Colleague</span></div>\ <div class="desktop-hacking-tool-server-password-protected">\ <div class="server-password-lock-icon">🔒</div>\ <input type="text" id="server-password-input" class="server-password-input" placeholder="Enter Password">\ <button class="server-password-submit-button" onclick="checkLandlordPassword()">Submit</button>\ <div class="prank-server-action-selection-box">\ <p class="active-cameras"> Access to the computer is password-protected.</p>\ <button class="server-password-access-button" onclick="SugarCube.Engine.play('ByteBunker-Prank-bruteforce')">Manually Bruteforce the Password</button>\ </div>\ </div>\ </div>\ <p class="back-link">[[Go Back -> HackTarget]]</p> <<nobr>> <<script>> setup.showAboutPcWindow = function() { $('#playerPcName').text("CORP-WKS-MB0321"); $('#playerNickname').text("jordanb"); $('#aboutPcWindow').show(); $('#closeAboutPcWindow').off('click').click(function() { $('#aboutPcWindow').hide(); }); } <</script>> <style> .prank-server-action-selection-box { background-color: #111; color: lime; font-family: 'Courier New', monospace; padding: 15px; margin-top: 80px; margin-bottom: 0px; border-radius: 5px; box-shadow: 0 0 10px rgba(0, 255, 0, 0.3); } .prank-desktop-login { background-color: #111; background-size: 100%; /* padding: 20px; */ height: 500px; box-shadow: 0px 0px 15px 2px lime; position: relative; border: 4px solid lime; border-radius: 10px; } </style> <script> function checkLandlordPassword() { let password = document.getElementById('server-password-input').value; if (password === "IAmTheBoss" || password === "iamtheboss") { SugarCube.Engine.play('ByteBunker-Prank-computer'); } else { SugarCube.UI.alert("Incorrect password."); } } </script> <<set $bruteforceMinigameCorrectPassword to "IAmTheBoss">> <<set $selectedPasswordLength to 5>> <<set $numberOfPasswordsNeeded to 10>> <<if $miniGameDifficulty is "Normal">> <<set $bruteforceBaseTraceTime to 15>> <<elseif $miniGameDifficulty is "Easy">> <<set $bruteforceBaseTraceTime to 25>> <<else>> <<set $bruteforceBaseTraceTime to 35>> <</if>> <<set $nextPassageAfterSuccessBruteforceGame to "ByteBunker-Prank-computer">> <<set $nextPassageAfterFailBruteforceGame to "HackTarget">> <</nobr>>
<<include "Minigame-Bruteforce">>\ \ <<if $minigameSkipButtons === true>>\ <p class="back-link">[[Skip the Minigame -> ByteBunker-Prank-computer]]</p> <</if>>
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target - Annoying Colleague</span></div>\ <div class="flxfit-desktop">\ <!-- Adding Top bar -->\ <div class="top-bar">\ @@.about-pc-button;<<button "About This PC">> <<run setup.showAboutPcWindow()>> <</button>>@@\ <span class="notification-counter"><i class="fas fa-wifi"></i> <i class="fas fa-volume-up"></i></span>\ </div> <div class="prank-cyber-files-content"> <div class="flxfit-desktop-icon" onclick="SugarCube.State.display('Prank-Job-WebBrowser')">🌐<span class="desktop-icon-label">Web Browser</span></div>\ <div class="flxfit-desktop-icon" onclick="SugarCube.State.display('FLXFIT-Report')">📄<span class="desktop-icon-label">FromSamantha-MeetingNotes.txt</span></div>\ <div class="flxfit-desktop-icon" onclick="SugarCube.State.display('FLXFIT-Presentation')">📊<span class="desktop-icon-label">Sales Presentation.ppt</span></div>\ </div> \ <div class="about-pc" id="aboutPcWindow" style="display: none;">\ <div class="about-pc-header">\ About This PC\ <span id="closeAboutPcWindow" class="about-pc-close-button">⛌</span>\ </div>\ <div class="about-pc-body">\ <p><b>Computer Name:</b> <span id="playerPcName"></span></p>\ <p><b>Username:</b> <span id="playerNickname"></span></p>\ /*<p><b>Performance:</b> <span id="playerPcPerformance"></span></p>\*/\ </div>\ </div>\ </div>\ </div> <<if $flxfitPresentationHackChoice === "fat" or $flxfitPresentationHackChoice === "guys" or $flxfitPresentationHackChoice === "crotchless">><div class="inner-thought">All done. I've prepared an alternative version of the presentation and written a script to replace the original one at the right moment. It's time to leave and inform the client.</div><br>@@.choicebutton;<<button "Leave and inform the client">><<run setup.removeHackingTarget("Annoying Colleague")>><<run MindWare.completeTask("Prank client's colleague")>><<goto "ByteBunker-Prank-done">><</button>>@@\<<else>><div class="inner-thought">The sales presentation file is my target. There's also a web browser shortcut and meeting notes.</div><</if>> <<nobr>> <<script>> setup.showAboutPcWindow = function() { $('#playerPcName').text("CORP-WKS-MB0321"); $('#playerNickname').text("jordanb"); $('#aboutPcWindow').show(); $('#closeAboutPcWindow').off('click').click(function() { $('#aboutPcWindow').hide(); }); } <</script>> /* <<script>> $(document).ready(function() { $(".desktop").css({ "background-image": "url('imgs/wallpapers/" + State.variables.activeWallpaper + ".jpg')", "background-size": "cover" }); }); <</script>> */ <style> .flxfit-desktop { background-image: url('imgs/jobs/prank/flxfit-background.jpg'); background-color: #111; background-size: cover; /* This will cover the entire area with the image */ background-position: center; /* This will center the image */ background-repeat: no-repeat; /* This will prevent the image from repeating */ padding: 20px; height: 500px; box-shadow: 0px 0px 15px 2px lime; position: relative; } .flxfit-desktop-icon { width: 120px; transition: transform 0.2s; margin-left: 20px; margin-right: 20px; margin-bottom: 0px; margin-top: 0px; text-align: center; font-size: 48px; color: white; cursor: pointer; position: relative; } .desktop-icon-label { display: block; /* Ensure the text appears on a new line under the icon */ color: black; /* Match the color scheme of the icons */ font-size: 14px; /* Adjust font size as necessary */ margin-top: 5px; /* Space between icon and text */ } .prank-cyber-files-content { flex-wrap: wrap; overflow: auto; /* Change overflow-y to overflow */ scrollbar-width: none; /* For Firefox */ -ms-overflow-style: none; /* For Internet Explorer and Edge */ } /* For Chrome, Safari, and Opera */ .prank-cyber-files-content::-webkit-scrollbar { display: none; /* Hide scrollbar but still allow scrolling */ } </style> <</nobr>>
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target - Annoying Colleague</span></div>\ <div class="flxfit-desktop">\ <!-- Adding Top bar -->\ <div class="top-bar">\ @@.about-pc-button;<<button "About This PC">> <<run setup.showAboutPcWindow()>> <</button>>@@\ <span class="notification-counter"><i class="fas fa-wifi"></i> <i class="fas fa-volume-up"></i></span>\ </div> <div class="flxfit-report-content">\ <strong>Meeting Date: March 22, 2024</strong> <strong>Attendees:</strong> Samantha (Design Lead), Derek (Marketing Manager), Alex (Product Manager), Jordan (Sales Manager) [Begin Transcript] <strong>Samantha:</strong> Let's kick off with our new leggings line. Any updates, Alex? <strong>Alex:</strong> Yes, the prototype for the eco-friendly range is ready. We used recycled materials and— <strong>Jordan:</strong> (interrupting) Eco-friendly? Please. You know what’s really eco-friendly? Leggings that double as compost. I'm joking... unless? Anyway, how about some real innovation like scratch-and-sniff leggings? Imagine the possibilities! <strong>Derek:</strong> (mutters) If only silence was one of those possibilities... Moving on to marketing strategies for the launch. We're considering an influencer partnership— <strong>Jordan:</strong> Speaking of influencers, I convinced a hot dog stand guy to wear our leggings. He's an influencer in his own right, right? (laughs at own joke) <strong>Samantha:</strong> (ignores Jordan) Alex, what's the timeline looking like? <strong>Alex:</strong> We're on track for a Q2 launch, assuming no delays. The suppliers are— <strong>Jordan:</strong> (interrupting again) You know what we should do? Create a special line of leggings just for men. Extra room in the... (gestures vaguely around his crotch area) you know, for those of us who are more... (winks) generously endowed. <strong>Derek:</strong> (pinching the bridge of his nose) Thank you, Jordan. Very... insightful. Lastly, let's discuss our CSR initiative. We plan to donate a percentage of sales to— <strong>Jordan:</strong> (interrupting) I've got a charity idea. "Save the Unicorns". You know, because they're so rare. (snickers) <strong>Samantha:</strong> (concluding the meeting abruptly) Thank you, everyone. We'll reconvene next week. Without the... unicorn discussions. [End Transcript] <strong>Action Items:</strong> 1. Finalize eco-friendly leggings prototype. 2. Refine marketing strategy to focus on genuine influencer partnerships. 3. Reassess meeting invite list for productivity. </div> \ <div class="about-pc" id="aboutPcWindow" style="display: none;">\ <div class="about-pc-header">\ About This PC\ <span id="closeAboutPcWindow" class="about-pc-close-button">⛌</span>\ </div>\ <div class="about-pc-body">\ <p><b>Computer Name:</b> <span id="playerPcName"></span></p>\ <p><b>Username:</b> <span id="playerNickname"></span></p>\ /*<p><b>Performance:</b> <span id="playerPcPerformance"></span></p>\*/\ </div>\ </div>\ </div>\ </div>\ <p class="back-link">[[Go Back -> ByteBunker-Prank-computer]]</p> <<nobr>> <<script>> setup.showAboutPcWindow = function() { $('#playerPcName').text("CORP-WKS-MB0321"); $('#playerNickname').text("jordanb"); $('#aboutPcWindow').show(); $('#closeAboutPcWindow').off('click').click(function() { $('#aboutPcWindow').hide(); }); } <</script>> <style> .flxfit-desktop { background-image: url('imgs/jobs/prank/flxfit-background.jpg'); background-color: #111; background-size: cover; /* This will cover the entire area with the image */ background-position: center; /* This will center the image */ background-repeat: no-repeat; /* This will prevent the image from repeating */ padding: 20px; height: 600px; box-shadow: 0px 0px 15px 2px lime; position: relative; } .flxfit-report-content { font-family: 'Courier New', monospace; background-color: rgba(0, 0, 0, 0.9); border-radius: 5px; border: 10px solid #4C4F4E; padding: 15px; margin-top: 20px; font-size: 14px; height: 500px; /* Set a fixed height */ overflow-y: auto; /* Add a scroll bar when content overflows */ } .flxfit-report-content p { margin-bottom: 10px; } </style> <</nobr>>
<div class="desktop-hacking-tool-wrapper">\ <div class="desktop-hacking-tool-header"><span class="desktop-hacking-tool-header-text">Hack-a-Target - Annoying Colleague</span></div>\ <div class="flxfit-desktop">\ <!-- Adding Top bar -->\ <div class="top-bar">\ @@.about-pc-button;<<button "About This PC">> <<run setup.showAboutPcWindow()>> <</button>>@@\ <span class="notification-counter"><i class="fas fa-wifi"></i> <i class="fas fa-volume-up"></i></span>\ </div> <div id="presentation-slide" class="flxfit-presentation-content">\ <<include "FLXFIT-Presentation-Slide1">> </div> \ <div class="about-pc" id="aboutPcWindow" style="display: none;">\ <div class="about-pc-header">\ About This PC\ <span id="closeAboutPcWindow" class="about-pc-close-button">⛌</span>\ </div>\ <div class="about-pc-body">\ <p><b>Computer Name:</b> <span id="playerPcName"></span></p>\ <p><b>Username:</b> <span id="playerNickname"></span></p>\ /*<p><b>Performance:</b> <span id="playerPcPerformance"></span></p>\*/\ </div>\ </div>\ </div>\ </div> <<if $flxfitPresentationHackChoicesVisible !== true>><span id="replace-choices"><div class="inner-thought">Let's go through the presentation first before I mess with it.</div></span><<else>>@@.choicebutton;<<button "Replace existing images with less attractive ones">><<set $flxfitPresentationHackChoice = "fat">><<goto "FLXFIT-Presentation">><</button>>@@ @@.choicebutton;<<button "Let there be crotchless leggings">><<set $flxfitPresentationHackChoice = "crotchless">><<goto "FLXFIT-Presentation">><</button>>@@ @@.choicebutton;<<button "Turn the presentation into a sausage fest">><<set $flxfitPresentationHackChoice = "guys">><<goto "FLXFIT-Presentation">><</button>>@@<</if>> <p class="back-link">[[Go Back -> ByteBunker-Prank-computer]]</p> <<nobr>> <<script>> setup.showAboutPcWindow = function() { $('#playerPcName').text("CORP-WKS-MB0321"); $('#playerNickname').text("jordanb"); $('#aboutPcWindow').show(); $('#closeAboutPcWindow').off('click').click(function() { $('#aboutPcWindow').hide(); }); } <</script>> <style> .flxfit-desktop { background-image: url('imgs/jobs/prank/flxfit-background.jpg'); background-color: #111; background-size: cover; /* This will cover the entire area with the image */ background-position: center; /* This will center the image */ background-repeat: no-repeat; /* This will prevent the image from repeating */ padding: 20px; height: 600px; box-shadow: 0px 0px 15px 2px lime; position: relative; } .flxfit-presentation-content { font-family: 'Courier New', monospace; background-color: rgba(0, 0, 0, 0.9); border-radius: 5px; border: 10px solid #4C4F4E; padding: 15px; margin-top: 20px; font-size: 14px; height: 500px; /* Set a fixed height */ } .flxfit-report-content p { margin-bottom: 10px; } </style> <</nobr>>
<div class="slide"> <div class="flxfit-slide-content"> <div class="flxfit-slide-image"> <!-- Placeholder for the image --> <<switch $flxfitPresentationHackChoice>> <<case "fat">> <img src="imgs/jobs/prank/fat1.jpg"> <<case "guys">> <img src="imgs/jobs/prank/guy1.jpg"> <<case "crotchless">> <img src="imgs/jobs/prank/hole1.jpg"> <<default>> <img src="imgs/jobs/prank/AeroFlex.webp"> <</switch>> </div> <div class="flxfit-slide-text"> <ul> <li><strong>Model:</strong> AeroFlex</li> <li><strong>Color:</strong> Midnight Black</li> <li><strong>Price:</strong> $59.99</li> <li><strong>Purpose:</strong> High-intensity workouts</li> <li><strong>Q1 Sales Data:</strong> 15,000 units</li> <li><strong>Customer Satisfaction:</strong> 92%</li> </ul> </div> </div> <div class="justify-content-space-between"> @@.hidden-presentation-button;<<button "◀">><</button>>@@ @@.presentation-button;<<button "▶">><<replace "#presentation-slide">><<include "FLXFIT-Presentation-Slide2">><</replace>><</button>>@@</div> </div>
<div class="slide"> <div class="flxfit-slide-content"> <div class="flxfit-slide-image"> <!-- Placeholder for the image --> <<switch $flxfitPresentationHackChoice>> <<case "fat">> <img src="imgs/jobs/prank/fat2.jpg"> <<case "guys">> <img src="imgs/jobs/prank/guy2.jpg"> <<case "crotchless">> <img src="imgs/jobs/prank/hole2.jpg"> <<default>> <img src="imgs/jobs/prank/JogaFlex.webp"> <</switch>> </div> <div class="flxfit-slide-text"> <ul> <li><strong>Model:</strong> JogaFlex</li> <li><strong>Color:</strong> Creamy White</li> <li><strong>Price:</strong> $49.99</li> <li><strong>Purpose:</strong> Joga</li> <li><strong>Q1 Sales Data:</strong> 7,500 units</li> <li><strong>Customer Satisfaction:</strong> 89%</li> </ul> </div> </div> <div class="justify-content-space-between"> @@.presentation-button;<<button "◀">><<replace "#presentation-slide">><<include "FLXFIT-Presentation-Slide1">><</replace>><</button>>@@ @@.presentation-button;<<button "▶">><<replace "#presentation-slide">><<include "FLXFIT-Presentation-Slide3">><</replace>><</button>>@@</div> </div>
<div class="slide"> <div class="flxfit-slide-content"> <div class="flxfit-slide-image"> <!-- The image source path should point to where the image file is hosted within your game's directory --> <<switch $flxfitPresentationHackChoice>> <<case "fat">> <img src="imgs/jobs/prank/fat3.jpg"> <<case "guys">> <img src="imgs/jobs/prank/guy3.jpg"> <<case "crotchless">> <img src="imgs/jobs/prank/hole3.jpg"> <<default>> <img src="imgs/jobs/prank/ComfortHigh.webp"> <</switch>> </div> <div class="flxfit-slide-text"> <ul> <li><strong>Model:</strong> ComfortFlex</li> <li><strong>Color:</strong> Pastel Pink</li> <li><strong>Price:</strong> $79.99</li> <li><strong>Purpose:</strong> Casual wear and comfort</li> <li><strong>Q1 Sales Data:</strong> 9,000 units</li> <li><strong>Customer Satisfaction:</strong> 95%</li> </ul> </div> </div> <div class="justify-content-space-between"> @@.presentation-button;<<button "◀">><<replace "#presentation-slide">><<include "FLXFIT-Presentation-Slide2">><</replace>><</button>>@@ @@.presentation-button;<<button "▶">><<replace "#presentation-slide">><<include "FLXFIT-Presentation-Slide4">><</replace>><</button>>@@</div> </div>
<div class="slide"> <div class="flxfit-slide-content"> <div class="flxfit-slide-image"> <!-- The image source path should point to where the image file is hosted within your game's directory --> <<switch $flxfitPresentationHackChoice>> <<case "fat">> <img src="imgs/jobs/prank/fat4.jpg"> <<case "guys">> <img src="imgs/jobs/prank/guy4.jpg"> <<case "crotchless">> <img src="imgs/jobs/prank/hole4.jpg"> <<default>> <img src="imgs/jobs/prank/GreenCurve.webp" alt="Pastel Green Curve-Hugging Leggings"> <</switch>> </div> <div class="flxfit-slide-text"> <ul> <li><strong>Model:</strong> GreenFlex</li> <li><strong>Color:</strong> Pastel Green</li> <li><strong>Price:</strong> $99.99</li> <li><strong>Purpose:</strong> Everyday comfort and accentuating design</li> <li><strong>Q1 Sales Data:</strong> 12,000 units</li> <li><strong>Customer Satisfaction:</strong> 93%</li> </ul> </div> </div> <div class="justify-content-space-between"> @@.presentation-button;<<button "◀">><<replace "#presentation-slide">><<include "FLXFIT-Presentation-Slide3">><</replace>><</button>>@@ <<if $flxfitPresentationHackChoicesVisible === true>>@@.presentation-button;<<button "▶">><<set $flxfitPresentationHackChoicesVisible = true>><<replace "#presentation-slide">><<include "FLXFIT-Presentation-Slide5">><</replace>><</button>><<else>>@@.presentation-button;<<button "▶">><<set $flxfitPresentationHackChoicesVisible = true>><<replace "#presentation-slide">><<include "FLXFIT-Presentation-Slide5">><</replace>> <<replace "#replace-choices">> @@.choicebutton;<<button "Replace existing images with less attractive ones">><<set $flxfitPresentationHackChoice = "fat">><<goto "FLXFIT-Presentation">><</button>>@@ <br> @@.choicebutton;<<button "Turn the presentation into a sausage fest">><<set $flxfitPresentationHackChoice = "guys">><<goto "FLXFIT-Presentation">><</button>>@@ <br> @@.choicebutton;<<button "Let there be crotchless leggings">><<set $flxfitPresentationHackChoice = "crotchless">><<goto "FLXFIT-Presentation">><</button>>@@ <</replace>><</button>>@@<</if>> </div>
<div class="slide"> <div class="flxfit-slide-content"> <div class="flxfit-slide-image"> <!-- The image source path should point to where the image file is hosted within your game's directory --> <<switch $flxfitPresentationHackChoice>> <<case "fat">> <img src="imgs/jobs/prank/fat5.jpg"> <<case "guys">> <img src="imgs/jobs/prank/guy5.jpg"> <<case "crotchless">> <img src="imgs/jobs/prank/hole5.jpg"> <<default>> <img src="imgs/jobs/prank/ClearFlex.webp"> <</switch>> </div> <div class="flxfit-slide-text"> <ul> <li><strong>Model:</strong> ClearFlex</li> <li><strong>Color:</strong> Transparent Noir</li> <li><strong>Price:</strong> $29.99</li> <li><strong>Purpose:</strong> Bold fashion statement</li> <li><strong>Q1 Sales Data:</strong> 2,500 units</li> <li><strong>Customer Satisfaction:</strong> 98%</li> </ul> </div> </div> <div class="justify-content-space-between"> @@.presentation-button;<<button "◀">><<replace "#presentation-slide">><<include "FLXFIT-Presentation-Slide4">><</replace>><</button>>@@</div> </div>
<div class="cyber-desktop-browser">\ <div class="browser-header"><span class="browser-header-text">OmniNet Browser</span></div>\ <div class="browser-toolbar">\ <input type="text" class="url-input" placeholder="Enter URL here..." />\ <span class="go-button">\ <button id="goButton">↲</button>\ </span>\ </div> <h3 class="recently-visited-header">Recently Visited Sites</h3>\ <ul class="recently-visited-list"> <li><a href="#" class="recently-visited-item" onclick="SugarCube.Engine.play('FLXFIT-Website')">FLXFIT - Intranet Site</a></li>\ <li><a href="#" class="recently-visited-item" onclick="SugarCube.Engine.play('Extendo-Website')">Extendo – Ultimate Reach</a></li>\ </ul>\ </div>\ \ <p class="back-link"> [[Go Back->ByteBunker-Prank-computer]] </p> <<nobr>> <<include "WebBrowser-URL">> <style> .recently-visited-header { margin-top: 12px; color: lime; font-size: 1.2em; padding-left: 1.5em !important; } .recently-visited-list { list-style: none; padding-left: 1.5em !important; margin: 0; } .recently-visited-item { display: block; padding: 8px; margin-right: 2em; margin-bottom: 4px; background: #1a1a1a; color: #ffffff; text-decoration: none; border-left: 4px solid lime; transition: background-color 0.3s ease; } .recently-visited-item:hover { background: #333333; } </style> <</nobr>>
<div class="cyber-desktop-browser"> <div class="browser-header"> <span class="browser-header-text">FLXFIT Intranet Portal</span> </div> <div class="browser-content"> <h1>Welcome to FLXFIT Intranet</h1> <p>Your source for company news, resources, and internal services.</p> <h2>Latest Announcements</h2> <p>Don't miss our end-of-season sale! Check the Marketing section for promotional materials.</p> <h2>HR Updates</h2> <p>Annual reviews are around the corner. Schedule your review meeting now!</p> <p>Also, please remember, as part of our commitment to a respectful and inclusive workplace, FLXFIT has a zero tolerance policy on any form of discrimination or shaming. This policy extends to all forms of communication, including presentations and public speaking within the workplace.</p> <h2>IT Department</h2> <p>Reminder: Password changes are required every 90 days. Secure your data!</p> <h2>Upcoming Events</h2> <ul> <li>Company Town Hall</li> <li>Health & Wellness Week</li> <li>Quarterly Charity Run</li> </ul> </div> </div> <br> <p class="back-link">[[Go Back->Prank-Job-WebBrowser]]</p> <style> .browser-content h1 { color: #0096d0; font-size: 2em; margin-bottom: 0.5em; margin-top: 0em; } .browser-content h2 { border-bottom: 2px solid #0096d0; padding-bottom: 0.2em; margin-top: 1em; margin-bottom: 0.5em; color: #0096d0; } .browser-content p { font-size: 1em; line-height: 1.6; margin-top: 0.5em; } .browser-content ul { list-style-type: none; padding: 0; } .browser-content ul li:before { content: "• "; color: #0096d0; font-size: larger; padding-right: 0.5em; } .browser-content ul li { padding-left: 1em; margin-bottom: 0.2em; } </style>
<div class="cyber-desktop-browser"> <div class="browser-header"><span class="browser-header-text">Extendo - Ultimate Reach (extendo.omninet)</span></div> <div class="browser-content"> <h1>Unleash Your Inner Titan with Extendo!</h1> <p>Ever dreamed of donning the armor of the gods to do battle in the boudoir? Look no further, brave warrior! The <strong>Extendo Titan Sleeve</strong> is your secret weapon for legendary encounters.</p> <img src="imgs/jobs/prank/extendo-sleeve.jpg" width="50%" style="display: block; margin: 0 auto;"> <p>With its majestic 7 inches of valor and 4 inches of girth, the Extendo Titan Sleeve transforms mere mortals into champions of pleasure. Its ribbed exterior sends shockwaves of delight, while the textured interior ensures your quest is as glorious as the tales of old.</p> <div id="videoContainer"> <!-- SEE IT IN ACTION button --> <button id="seeItInActionBtn" style="display: block; margin: 20px auto; padding: 15px 30px; background-color: #005f83; color: #ffffff; border: none; border-radius: 5px; cursor: pointer; font-size: 20px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);">SEE IT IN ACTION</button> </div> <h2>Feats of Strength:</h2> <ul> <li>Length to rival the gods: <strong>7 Inches</strong></li> <li>Girth fit for a titan: <strong>4 Inches</strong></li> <li>Armor material: Crafted from the <strong>finest TPE</strong>, as flexible as it is durable</li> </ul> <p>Adorn your scrotum with the Extendo and feel it cling to you like the grip of destiny. Fear not the elements, for this mighty sleeve is <strong>waterproof</strong>, and cleans easily with just hot soapy water and toy cleaner. Ideal for the manly man looking to add excitement and increase their prowess.</p> <img src="imgs/jobs/prank/extendo-sleeve-action.jpg" width="70%" style="display: block; margin: 0 auto;"> <p>Why wait to become the stuff of legends? The <strong>Extendo Titan Sleeve</strong> is free from both latex and phthalates, making it the noble choice for heroes seeking to venture into uncharted territories of pleasure and exhilaration. Dare to wear it and transform your world.</p> <button disabled style="display: block; margin: 20px auto; padding: 15px 30px; background-color: #ddd; color: #aaa; border: 2px solid #ccc; border-radius: 8px; cursor: not-allowed; font-size: 20px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);">ORDER NOW</button> <p style="text-align: center; color: red;"><i>We regret to inform you that the <strong>Extendo Titan Sleeve</strong> is currently out of stock. Stay tuned for restocking dates!</i></p> </div> </div> <<if $extendoWebsiteBookmarkAdded !== true>> <span id="bookmark-button"><br><br> <div class="inner-thought">This looks... interesting. Maybe I should bookmark it in my own browser... for a friend.</div> <br>@@.choicebutton;<<button "Bookmark the Extendo Website">> <<set $extendoWebsiteBookmarkAdded = true>> <<replace "#bookmark-button">><</replace>> <</button>>@@ </span><</if>><br> <p class="back-link">[[Go Back->Prank-Job-WebBrowser]]</p> <style> .button-disabled { display: block; margin: 20px auto; padding: 10px 20px; background-color: #ddd; color: #aaa; border: none; border-radius: 5px; cursor: not-allowed; font-size: 16px; /* Adjust size as needed */ } .disabled-text { text-align: center; color: #666; /* Dark grey text */ } .browser-content h1, .browser-content h2 { color: #8A0707; /* Dark red for emphasis */ } .browser-content h1 { margin-top: 0px; } .browser-content { background-color: #FFF7E6; /* Light, inviting background */ font-family: Arial, sans-serif; padding: 20px; box-shadow: 0 2px 4px rgba(0,0,0,0.2); } .browser-content ul { list-style-type: none; padding-left: 0px; } .browser-content ul li { padding-left: 0; /* Adjust as necessary */ } .browser-content p, .browser-content ul li { color: #333; /* Dark text for readability */ line-height: 1.4; } .browser-content img { max-width: 100%; height: auto; display: block; margin: 10px 0; border-radius: 5px; } </style> <script> document.getElementById('seeItInActionBtn').addEventListener('click', function() { var videoContainer = document.getElementById('videoContainer'); videoContainer.innerHTML = '<video width="100%" controls autoplay muted><source src="imgs/jobs/prank/extendo.mp4" type="video/mp4">Your browser does not support the video tag.</video>'; }); </script>
You send an email to the client to let them know that everything is set and ready to go. You explain to them that the hack will be triggered as soon as the target connects their laptop to a projector. Finally, you thank the client for trusting you with this job and let them know that you're looking forward to hearing how it all goes when the target gives their presentation in <<print 11 - $chapter1Days>> days. You sign off the email with your hacker handle and lean back in your chair. It's time to wait for the fireworks. <<button "Continue">><<set $byteBunkerPrankJobFinished to true>><<goto "HomeBacklog">><</button>>
<div class="email-message">\ <div class="from-line"><strong>From:</strong> CorpoDrone</div>\ <div class="subject-line"><strong>Subject:</strong> Epic Prank Fail!?</div>\ <div class="message-content"> I was really looking forward to embarrassing Mr. Asshat, but it's clear that allowing any wannabie hacker to accept the job was a big mistake. Well, I won't make the same mistake again - that's for sure! </div>\ <div class="email-message-buttons"> <<if !MindWare.emailIsRead("ByteBunker-PrankFailEmail")>>\ <span class="email-btn-wrapper-span">\ @@.email-listing;<<button "Mark as Read">>\ <<run MindWare.markEmailAsRead("ByteBunker-PrankFailEmail")>>\ <<goto "ByteBunker-PrankFailEmail">>\ <</button>>\ @@\ </span>\ <</if>>\ </div>\ </div>\ <p class="back-link">[[Go Back -> EmailClient]]</p>
<div class="email-message">\ <div class="from-line"><strong>From:</strong> CorpoDrone</div>\ <div class="subject-line"><strong>Subject:</strong> Unexpected Outcome, But Kudos</div>\ <div class="message-content"> Hey, Well, that was... unexpected. Your little twist on the presentation, switching the images to feature guys in leggings, certainly made waves. But not quite the splash I had in mind. Instead of the room erupting in laughter at Mr. Asshat's expense, he started crying and then came out the closet. Everyone went silent, but then Jessy from marketing started clapping her hands, and it didn't take much time before the room was full of applause for his courage. Now he's our new office hero, and he's even more insufferable than before. Fuck my life. But hey, you technically fulfilled the job request to the letter. So, the agreed reward is yours—no hard feelings. CorpoDrone </div>\ <div class="email-message-buttons"> <<if !MindWare.emailIsRead("ByteBunker-PrankSuccessGuysEmail")>>\ <span class="email-btn-wrapper-span">\ @@.email-listing;<<button "Mark as Read">>\ <<run MindWare.markEmailAsRead("ByteBunker-PrankSuccessGuysEmail")>>\ <<goto "ByteBunker-PrankSuccessGuysEmail">>\ <</button>>\ @@\ </span>\ <</if>>\ </div>\ </div>\ <p class="back-link">[[Go Back -> EmailClient]]</p>
<div class="email-message">\ <div class="from-line"><strong>From:</strong> CorpoDrone</div>\ <div class="subject-line"><strong>Subject:</strong> A Hefty Outcome</div>\ <div class="message-content"> Hey, So, about that "slight" alteration to Mr. Asshat's presentation... Let's just say it took a turn for the weighty. Your idea to swap in images of voluptuous vixens donning leggings was, in theory, a stroke of comic genius. However, the aftermath was heavier than expected. Instead of a few chuckles and eye-rolls, the presentation ended with Mr. Asshat being escorted out of the building, his career slimmed down to nothing over accusations of fat shaming. Irony at its thickest, wouldn't you agree? While part of me is reveling in the silence his absence brings, I can't help but feel a pang of guilt for the guy. No income, no dignity left. A bit more than what I bargained for, honestly. But, oh well, what has been done has been done, and it's not like you could have anticipated the company's zero tolerance policy on such matters. Regardless of the... let's call it "collateral slimming," you completed your end of the deal with flying colors. Your reward is well deserved, even if it comes with a side of guilt. Let's just hope Mr. Asshat lands on his feet - preferably in a pair of very forgiving leggings. CorpoDrone </div>\ <div class="email-message-buttons"> <<if !MindWare.emailIsRead("ByteBunker-PrankSuccessFatEmail")>>\ <span class="email-btn-wrapper-span">\ @@.email-listing;<<button "Mark as Read">>\ <<run MindWare.markEmailAsRead("ByteBunker-PrankSuccessFatEmail")>>\ <<goto "ByteBunker-PrankSuccessFatEmail">>\ <</button>>\ @@\ </span>\ <</if>>\ </div>\ </div>\ <p class="back-link">[[Go Back -> EmailClient]]</p>
<div class="email-message">\ <div class="from-line"><strong>From:</strong> CorpoDrone</div>\ <div class="subject-line"><strong>Subject:</strong> When Pranks Backfire Spectacularly</div>\ <div class="message-content"> Hey there, You know, when I hired a hacker to inject a bit of chaos into Mr. Asshat's life, I never imagined it would catapult him to corporate stardom. Your switcheroo with the leggings images? Genius, yet somehow it turned into his golden ticket. After the initial shockwave hit the presentation room, Mr. Asshat, the sly fox, spun it into a pitch for a bold new product line - crotchless leggings. Yes, you heard that right. And here's the kicker: the CEO ate it up! Now, he's riding high on a wave of innovation, leading the charge on this avant-garde venture, complete with a salary bump. I should be furious, demanding a refund for a prank gone awry. But honestly, I can't help but laugh at the sheer absurdity of it all. The universe has a twisted sense of humor, and apparently, so do you. So, payment? Consider it a donation to the "Let's accidentally make Mr. Asshat's career" fund. </div>\ <div class="email-message-buttons"> <<if !MindWare.emailIsRead("ByteBunker-PrankFailCrotchlessEmail")>>\ <span class="email-btn-wrapper-span">\ @@.email-listing;<<button "Mark as Read">>\ <<run MindWare.markEmailAsRead("ByteBunker-PrankFailCrotchlessEmail")>>\ <<goto "ByteBunker-PrankFailCrotchlessEmail">>\ <</button>>\ @@\ </span>\ <</if>>\ </div>\ </div>\ <p class="back-link">[[Go Back -> EmailClient]]</p>
<div class="cyber-desktop-browser"> <div class="browser-header"><span class="browser-header-text">Extendo - Ultimate Reach (extendo.omninet)</span></div> <div class="browser-content"> <h1>Unleash Your Inner Titan with Extendo!</h1> <p>Ever dreamed of donning the armor of the gods to do battle in the boudoir? Look no further, brave warrior! The <strong>Extendo Titan Sleeve</strong> is your secret weapon for legendary encounters.</p> <img src="imgs/jobs/prank/extendo-sleeve.jpg" width="50%" style="display: block; margin: 0 auto;"> <p>With its majestic 7 inches of valor and 4 inches of girth, the Extendo Titan Sleeve transforms mere mortals into champions of pleasure. Its ribbed exterior sends shockwaves of delight, while the textured interior ensures your quest is as glorious as the tales of old.</p> <div id="videoContainer"> <!-- SEE IT IN ACTION button --> <button id="seeItInActionBtn" style="display: block; margin: 20px auto; padding: 15px 30px; background-color: #005f83; color: #ffffff; border: none; border-radius: 5px; cursor: pointer; font-size: 20px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);">SEE IT IN ACTION</button> </div> <h2>Feats of Strength:</h2> <ul> <li>Length to rival the gods: <strong>7 Inches</strong></li> <li>Girth fit for a titan: <strong>4 Inches</strong></li> <li>Armor material: Crafted from the <strong>finest TPE</strong>, as flexible as it is durable</li> </ul> <p>Adorn your scrotum with the Extendo and feel it cling to you like the grip of destiny. Fear not the elements, for this mighty sleeve is <strong>waterproof</strong>, and cleans easily with just hot soapy water and toy cleaner. Ideal for the manly man looking to add excitement and increase their prowess.</p> <img src="imgs/jobs/prank/extendo-sleeve-action.jpg" width="70%" style="display: block; margin: 0 auto;"> <p>Why wait to become the stuff of legends? The <strong>Extendo Titan Sleeve</strong> is free from both latex and phthalates, making it the noble choice for heroes seeking to venture into uncharted territories of pleasure and exhilaration. Dare to wear it and transform your world.</p> <button disabled style="display: block; margin: 20px auto; padding: 15px 30px; background-color: #ddd; color: #aaa; border: 2px solid #ccc; border-radius: 8px; cursor: not-allowed; font-size: 20px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.2);">ORDER NOW</button> <p style="text-align: center; color: red;"><i>We regret to inform you that the <strong>Extendo Titan Sleeve</strong> is currently out of stock. Stay tuned for restocking dates!</i></p> </div> </div> <<if $extendoWebsiteBookmarkAdded !== true>> <span id="bookmark-button"><br><br> <div class="inner-thought">This looks... interesting. Maybe I should bookmark it in my own browser... for a friend.</div> <br>@@.choicebutton;<<button "Bookmark the Extendo Website">> <<set $extendoWebsiteBookmarkAdded = true>> <<replace "#bookmark-button">><</replace>> <</button>>@@ </span><</if>><br> <p class="back-link">[[Go Back->WebBrowser]]</p> <<nobr>><style> .button-disabled { display: block; margin: 20px auto; padding: 10px 20px; background-color: #ddd; color: #aaa; border: none; border-radius: 5px; cursor: not-allowed; font-size: 16px; /* Adjust size as needed */ } .disabled-text { text-align: center; color: #666; /* Dark grey text */ } .browser-content h1, .browser-content h2 { color: #8A0707; /* Dark red for emphasis */ } .browser-content h1 { margin-top: 0px; } .browser-content { background-color: #FFF7E6; /* Light, inviting background */ font-family: Arial, sans-serif; padding: 20px; box-shadow: 0 2px 4px rgba(0,0,0,0.2); } .browser-content ul { list-style-type: none; padding-left: 0px; } .browser-content ul li { padding-left: 0; /* Adjust as necessary */ } .browser-content p, .browser-content ul li { color: #333; /* Dark text for readability */ line-height: 1.4; } .browser-content img { max-width: 100%; height: auto; display: block; margin: 10px 0; border-radius: 5px; } </style> <script> document.getElementById('seeItInActionBtn').addEventListener('click', function() { var videoContainer = document.getElementById('videoContainer'); videoContainer.innerHTML = '<video width="100%" controls autoplay muted><source src="imgs/jobs/prank/extendo.mp4" type="video/mp4">Your browser does not support the video tag.</video>'; }); </script><</nobr>>
<div class="dd-wrapper">\ <div class="dd-header"><span class="dd-header-text">File Junkie Store (filejunkie.omninet)</span></div>\ <div class="dd-content">\ <p>We have something for every file junkie!</p> <p>With fresh content added regularly, there's always something new to discover, so remember to check back from time to time for the newest downloadables!</p>\ <div class="dd-category">\ <h2 class="dd-category-title">Wallpapers</h2>\ <div class="dd-products-row">\ <!-- Cyber Babes -->\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/store/babeswalls.jpg" alt="Babes Wallpaper Pack"/>\ </div>\ <div class="dd-product-info">\ <p class="dd-product-title">Cyber Babes</p>\ <p class="dd-product-price">$200</p>\ <button id="buy-babes-wallpaper" class="dd-buy-button" onclick="MindWare.purchaseBabesWallpaper('buy-babes-wallpaper');">Buy</button>\ </div>\ </div>\ <!-- Product 2 -->\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/store/cars-wallpaper.jpg" alt="Cars Wallpaper"/>\ </div>\ <div class="dd-product-info">\ <p class="dd-product-title">Fast Cars</p>\ <p class="dd-product-price">$100</p>\ <button id="buy-fast-cars-wallpaper" class="dd-buy-button" onclick="MindWare.purchaseFastCarsWallpaper('buy-fast-cars-wallpaper');">Buy</button>\ </div>\ </div>\ <!-- NSFW Wallpaper Pack -->\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/store/nsfw1.jpg" alt="NSFW Wallpaper Pack"/>\ </div>\ <div class="dd-product-info">\ <p class="dd-product-title">NSFW Pack #1</p>\ <p class="dd-product-price">$500</p>\ <button id="buy-nsfw-wallpaper-1" class="dd-buy-button" onclick="MindWare.purchaseNSFWWallpaper1('buy-nsfw-wallpaper-1');">Buy</button>\ </div>\ </div>\ </div>\ <!-- Music Category --> <div class="dd-category">\ <h2 class="dd-category-title">Music</h2>\ <div class="dd-products-row">\ <!-- Product 1 -->\ <<if not $flashesSongPurchased>>\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/store/song-flashes.webp" alt="Flashes Album Cover"/> </div>\ <div class="dd-product-info">\ <p class="dd-product-title">Flashes<br>by Mezhdunami</p>\ <p class="dd-product-price">$100</p>\ <button class="dd-buy-button" onclick="MindWare.addFlashesSong()">Buy</button>\ </div>\ </div>\ <</if>>\ <<if $flashesSongPurchased>>\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/store/song-flashes.webp" alt="Flashes Album Cover"/> </div>\ <div class="dd-product-info">\ <p class="dd-product-title">Flashes<br>by Mezhdunami</p>\ <p class="dd-product-price">$100</p>\ <button class="dd-buy-button dd-button-disabled" disabled>Purchased</button>\ </div>\ </div>\ <</if>>\ <!-- Product 2 -->\ <<if not $evasionSongPurchased>>\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/store/song-evasion.webp" alt="Evasion Album Cover"/> </div>\ <div class="dd-product-info">\ <p class="dd-product-title">Evasion<br>by Evgeny Bardyuzha</p>\ <p class="dd-product-price">$100</p>\ <button class="dd-buy-button" onclick="MindWare.addEvasionSong()">Buy</button>\ </div>\ </div>\ <</if>>\ <<if $evasionSongPurchased>>\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/store/song-evasion.webp" alt="Evasion Album Cover"/> </div>\ <div class="dd-product-info">\ <p class="dd-product-title">Evasion<br>by Evgeny Bardyuzha</p>\ <p class="dd-product-price">$100</p>\ <button class="dd-buy-button dd-button-disabled" disabled>Purchased</button>\ </div>\ </div>\ <</if>>\ <!-- Product 3 -->\ <<if not $cyberWarSongPurchased>>\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/store/song-cyberwar.webp" alt="Cyber War Album Cover"/> </div>\ <div class="dd-product-info">\ <p class="dd-product-title">Cyber War<br>by AlexiAction</p>\ <p class="dd-product-price">$100</p>\ <button class="dd-buy-button" onclick="MindWare.addCyberWarSong()">Buy</button>\ </div>\ </div>\ <</if>>\ <<if $cyberWarSongPurchased>>\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/store/song-cyberwar.webp" alt="Cyber War Album Cover"/> </div>\ <div class="dd-product-info">\ <p class="dd-product-title">Cyber War<br>by AlexiAction</p>\ <p class="dd-product-price">$100</p>\ <button class="dd-buy-button dd-button-disabled" disabled>Purchased</button>\ </div>\ </div>\ <</if>>\ </div> <div class="dd-products-row">\ <!-- Product 4 -->\ <<if not $cyberRaceSongPurchased>>\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/store/song-cyberrace.webp" alt="Cyber Race Album Cover"/> </div>\ <div class="dd-product-info">\ <p class="dd-product-title">Cyber Race<br>by FASSounds</p>\ <p class="dd-product-price">$100</p>\ <button class="dd-buy-button" onclick="MindWare.addCyberRaceSong()">Buy</button>\ </div>\ </div>\ <</if>>\ <<if $cyberRaceSongPurchased>>\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/store/song-cyberrace.webp" alt="Cyber Race Album Cover"/> </div>\ <div class="dd-product-info">\ <p class="dd-product-title">Cyber Race<br>by FASSounds</p>\ <p class="dd-product-price">$100</p>\ <button class="dd-buy-button dd-button-disabled" disabled>Purchased</button>\ </div>\ </div>\ <</if>>\ <!-- Product 5 -->\ <<if not $midnightSongPurchased>>\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/store/song-midnight.webp" alt="Midnight Album Cover"/> </div>\ <div class="dd-product-info">\ <p class="dd-product-title">Midnight<br>by AlexiAction</p>\ <p class="dd-product-price">$100</p>\ <button class="dd-buy-button" onclick="MindWare.addMidnightSong()">Buy</button>\ </div>\ </div>\ <</if>>\ <<if $midnightSongPurchased>>\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/store/song-midnight.webp" alt="Midnight Album Cover"/> </div>\ <div class="dd-product-info">\ <p class="dd-product-title">Midnight<br>by AlexiAction</p>\ <p class="dd-product-price">$100</p>\ <button class="dd-buy-button dd-button-disabled" disabled>Purchased</button>\ </div>\ </div>\ <</if>>\ <!-- Product 6 -->\ <<if not $insurrectionSongPurchased>>\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/store/song-insurrection.webp" alt="Insurrection Album Cover"/>\ </div>\ <div class="dd-product-info">\ <p class="dd-product-title">Insurrection<br>by AleXZavesa</p>\ <p class="dd-product-price">$100</p>\ <button class="dd-buy-button" onclick="MindWare.addInsurrectionSong()">Buy</button>\ </div>\ </div>\ <</if>>\ <<if $insurrectionSongPurchased>>\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/store/song-insurrection.webp" alt="Insurrection Album Cover"/>\ </div>\ <div class="dd-product-info">\ <p class="dd-product-title">Insurrection<br>by AleXZavesa</p>\ <p class="dd-product-price">$100</p>\ <button class="dd-buy-button dd-button-disabled" disabled>Purchased</button>\ </div>\ </div>\ <</if>>\ </div>\ </div>\ <!-- TV Channels Category --> <div class="dd-category">\ <h2 class="dd-category-title">TV Channels</h2>\ <div class="dd-products-row">\ <!-- Product 1 -->\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/store/adult-channel.jpg" alt="Adult Channel"/>\ </div>\ <div class="dd-product-info">\ <p class="dd-product-title">Passion TV</p>\ <p class="dd-product-price">$1000 (Lifetime Access)</p>\ <button class="dd-buy-button" id="buyPassionTV" onclick="MindWare.purchaseChannel('Passion TV', 'adultChannelPurchased', 1000, 'buyPassionTV')">Buy</button>\ </div>\ </div>\ </div>\ </div>\ <!-- Video Games Category --> <div class="dd-category">\ <h2 class="dd-category-title">Video Games</h2>\ <div class="dd-products-row">\ <!-- Snake -->\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/games/snake-boxart.jpg" alt="Action Game Cover"/>\ </div>\ <div class="dd-product-info">\ <p class="dd-product-title">Snake</p>\ <p class="dd-product-price">$350</p>\ <button id="buySnake" class="dd-buy-button" onclick="MindWare.purchaseGame('Snake', 'snakeGamePurchased', 350, 'buySnake')">Buy</button>\ </div>\ </div>\ <!-- Breakout -->\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/games/breakout-boxart.jpg" alt="RPG Game Cover"/>\ </div>\ <div class="dd-product-info">\ <p class="dd-product-title">Breakout</p>\ <p class="dd-product-price">$350</p>\ <button id="buyBreakout" class="dd-buy-button" onclick="MindWare.purchaseGame('Breakout', 'breakoutGamePurchased', 350, 'buyBreakout')">Buy</button>\ </div>\ </div>\ <!-- Match Two Latex -->\ <div class="dd-product">\ <div class="dd-product-image-container">\ <img class="dd-product-image" src="imgs/games/matchtwolatex-boxart.jpg" alt="Puzzle Game Cover"/>\ </div>\ <div class="dd-product-info">\ <p class="dd-product-title">Match Two (Latex Edition)</p>\ <p class="dd-product-price">$1500</p>\ <button id="buyMatchTwoLatex" class="dd-buy-button" onclick="MindWare.purchaseGame('Match Two (Latex Edition)', 'matchTwoLatexGamePurchased', 1500, 'buyMatchTwoLatex')">Buy</button>\ </div>\ </div>\ </div>\ </div>\ </div>\ </div>\ </div> [[Go Back -> WebBrowser]] /* Wallpapers */ <<script>> $(document).on(':passageend', function () { if (State.variables.babesWallpaperPurchased) { $('#buy-babes-wallpaper').prop('disabled', true) .addClass('dd-button-disabled') .text('Purchased'); } if (State.variables.nsfwWallpaper1Purchased) { $('#buy-nsfw-wallpaper-1').prop('disabled', true) .addClass('dd-button-disabled') .text('Purchased'); } if (State.variables.fastCarsWallpaperPurchased) { $('#buy-fast-cars-wallpaper').prop('disabled', true) .addClass('dd-button-disabled') .text('Purchased'); // Update the text for Fast Cars wallpaper as well } }); <</script>> <<script>> $(document).on(':passageend', function () { // Define a combined mapping for both channel and game purchase state variables with their corresponding button IDs var purchaseButtonMappings = { // Channel mappings 'adultChannelPurchased': 'buyPassionTV', 'memesChannelPurchased': 'buyMemesTV', 'pornChannelPurchased': 'buyPornTV', // Game mappings 'snakeGamePurchased': 'buySnake', 'breakoutGamePurchased': 'buyBreakout', 'matchTwoLatexGamePurchased': 'buyMatchTwoLatex' }; // Loop through the combined mappings and update buttons accordingly Object.keys(purchaseButtonMappings).forEach(function(purchase) { if (State.variables[purchase]) { var buttonId = purchaseButtonMappings[purchase]; $('#' + buttonId).prop('disabled', true) .addClass('dd-button-disabled') .text('Purchased'); } }); // ... Include other checks for different purchases here if necessary ... }); <</script>>
<div class="cyber-desktop-browser"> <div class="browser-header"><span class="browser-header-text">Hive Properties (hiveproperties.omninet)</span></div> <div class="hive-browser-content"> <div class="hive-intro-section"> <img src="imgs/emails/hive-properties-welcome-email.webp" width="100%"> </div> <div class="hive-login-section"> <h2>Resident Access</h2> <form id="loginForm"> <input type="text" id="username" value="tenant581243" placeholder="Username"> <input type="password" id="password" value="1klf8ahjknl3" placeholder="Password"> <button type="button" onclick="processLogin()">Enter</button> </form> </div> </div> </div> <script> function processLogin() { var username = document.getElementById('username').value; var password = document.getElementById('password').value; if(username === "tenant581243" && password === "1klf8ahjknl3") { SugarCube.Engine.play('HiveProperties-Website-Player'); } else { SugarCube.UI.alert("Incorrect username or password. Please try again."); } } </script> <br> <p class="back-link">[[Go Back->WebBrowser]]</p>
<div class="cyber-desktop-browser"> <div class="browser-header"><span class="browser-header-text">Hive Properties</span></div> <div class="hive-browser-content"> <div class="hive-intro-section"> <img src="imgs/emails/hive-properties-welcome-email.webp" width="100%"> </div> <div class="hive-login-section"> <h2>Welcome Back, tenant581243</h2> <div class="rent-details-table"> <table> <tr> <th>Detail</th> <th>Amount</th> </tr> <tr> <td>Current Rent Price</td> <td><<print "$" + $rentPrice.toLocaleString("en-US", { minimumFractionDigits: 0, maximumFractionDigits: 0 })>></td> </tr> <tr> <td>Total Rent Payments Made</td> <td><<print $rentPaymentCounter>></td> </tr> <tr> <td>Rent Payments Missed</td> <td><<print $missedPaymentsCount>></td> </tr> <tr> <td>Total Missed Rent</td> <td><<print "$" + $totalMissedRent.toLocaleString("en-US", { minimumFractionDigits: 0, maximumFractionDigits: 0 })>></td> </tr> </table> </div> <<if $totalMissedRent > 0>> <button onclick="payRent()">Pay Missed Rent</button> <</if>> <script> function payRent() { if (SugarCube.State.variables.playerMoney >= SugarCube.State.variables.totalMissedRent) { SugarCube.State.variables.playerMoney -= SugarCube.State.variables.totalMissedRent; SugarCube.State.variables.totalMissedRent = 0; SugarCube.State.variables.missedPaymentsCount = 0; SugarCube.UI.alert("Missed rent paid successfully. Thank you."); SugarCube.Engine.play("HiveProperties-Website-Player"); } else { SugarCube.UI.alert("Insufficient funds to cover the missed rent."); } } </script> </div> </div> </div> <br> <p class="back-link">[[Go Back->HiveProperties-Website]]</p>
<div class="cyber-desktop-browser"> <div class="browser-header"><span class="browser-header-text">OmniPedia - The Digital Encyclopedia (omnipedia.omninet)</span></div> <div class="browser-content"> <h1>Welcome to OmniPedia!</h1> <p>OmniNet's Leading Digital Encyclopedia.</p> <hr> <span id="replace-me"><h2>Topics</h2> <div class="topics-container"> <ul class="topics-list"> <li><<link "OmniNet">><<replace "#replace-me">><<include "OmniPedia-OmniNet">><</replace>><</link>></li> <li><<link "NeoUrbania">><<replace "#replace-me">><<include "OmniPedia-NeoUrbania">><</replace>><</link>></li> <li><<link "SynTech">><<replace "#replace-me">><<include "OmniPedia-SynTech">><</replace>><</link>></li> <li><<link "HiveProperties">><<replace "#replace-me">><<include "OmniPedia-HiveProperties">><</replace>><</link>></li> <!-- More topics here --> </ul> </div></span> </div> </div> <br> <p class="back-link"> [[Go Back->WebBrowser]] </p>
<div class="omnipedia-content"><h2>Topic: OmniNet</h2> <p>The OmniNet, central to the infrastructure of NeoUrbania, is an advanced digital network that evolved from the remnants of the early 21st-century Internet. It integrates augmented reality, virtual environments, and traditional web elements, forming a comprehensive digital ecosystem.</p> <p>In the context of governance and control, the OmniNet is under the surveillance of various mega-corporations. These entities maintain significant influence over the network's content and accessibility, often implementing stringent measures for data security and intellectual property protection. This corporate oversight has led to the rise of a counter-culture within the OmniNet, comprising individuals and groups who oppose corporate control through hacking and information dissemination.</p> <p class="back-link"> [[Choose a different topic->OmniPedia]] </p> </div>
<div class="omnipedia-content"> <h2>Topic: NeoUrbania</h2> <div class="img-location"><img src="imgs/locations/neourbania.jpg" width="100%"></div> <p>NeoUrbania is a sprawling metropolis and the epicenter of technological advancements in the year 2045. It is characterized by towering skyscrapers adorned with neon logos and colossal electronic billboards, showcasing the latest in fashion and technology.</p> <p>The city's atmosphere is a perpetual twilight, a result of the smog and artificial light that cast an eerie glow on the streets below. The air is saturated with the buzz of drones delivering packages, while the streets are a constant stream of bustling activity as people navigate through crowded marketplaces filled with holographic advertisements.</p> <p>NeoUrbania is a society where the pursuit of pleasure is the primary morality, and corporations have replaced traditional deities. Democracy has been auctioned to the highest bidder, leaving behind a society obsessed with novelty and hedonistic consumption. In this world, human worth is measured by social credit scores and expressed through spending habits.</p> <p class="back-link"> [[Choose a different topic->OmniPedia]] </p> </div>
<div class="omnipedia-content"> <h2>Topic: SynTech</h2> <div class="img-location"><img src="imgs/locations/syntech.jpg" width="100%"></div> <p>SynTech is the world's leading megacorporation, headquartered in the heart of NeoUrbania. The SynTech Tower is a beacon of innovation, adorned with constantly shifting digital displays that showcase the company's latest achievements, research breakthroughs, and tech offerings. The tower's pinnacle features a colossal 3D hologram of the planet Earth, symbolizing SynTech's global influence and vision for a connected world.</p> <p>SynTech's scientists and engineers are responsible for developing cutting-edge technologies that blur the lines between biology and machinery. Their advancements have revolutionized medicine and human capabilities, including neural enhancements that amplify cognitive abilities, exoskeletons and prosthetics that restore mobility to the paralyzed, and nano-augmentations that combat diseases at a molecular level.</p> <p class="back-link"> [[Choose a different topic->OmniPedia]] </p> </div>
<div class="omnipedia-content"> <h2>Topic: HiveProperties</h2> <p>HiveProperties is a behemoth in the real estate sector of NeoUrbania, owning and managing thousands of residential units across the sprawling metropolis. This mega-corporation has effectively monopolized the housing market, turning the basic need for shelter into a lucrative, data-driven enterprise.</p> <p>HiveProperties is notorious for its ruthless business practices. The corporation has consistently quashed attempts by renters to organize, using a combination of legal intimidation, digital surveillance, and manipulative AI-driven negotiation tactics.</p> <p>Despite public outcry, HiveProperties maintains a stranglehold on NeoUrbania's housing market.</p> <p class="back-link"> [[Choose a different topic->OmniPedia]] </p> </div>
<div class="cyber-desktop-browser"> <div class="browser-header"><span class="browser-header-text">PornNexus (pornnexus.omninet)</span></div> <div class="browser-content"> <h1>PornNexus</h1> <div class="movie-category-button"> <img src="imgs/websites/pornnexus/solo.jpg" onclick="SugarCube.Engine.play('PornNexus-Solo')" alt="Solo Movies"> <span>Solo</span> </div> <div class="movie-category-button"> <img src="imgs/websites/pornnexus/blowjob.jpg" onclick="SugarCube.Engine.play('PornNexus-Blowjob')" alt="Blowjob Movies"> <span>Blowjob</span> </div> <div class="movie-category-button"> <img src="imgs/websites/pornnexus/femdom.jpg" onclick="SugarCube.Engine.play('PornNexus-Femdom')" alt="Femdom Movies"> <span>Femdom</span> </div> <br><br> <p>More content categories are coming soon. Stay tuned.</p> /* <div class="movie-category-button" onclick="window.location.href='SciFiMovies'"> <img src="imgs/websites/pornnexus/comedy.jpg" alt="Sci-Fi Movies"> <span>Sci-Fi</span> </div> */ </div> <br> </div> <br> <p class="back-link">[[Go Back->WebBrowser]]</p>
<div class="cyber-desktop-browser"> <div class="browser-header"><span class="browser-header-text">PornNexus - Femdom (pornnexus.omninet)</span></div> <div class="browser-content"> <<video "imgs/websites/pornnexus/femdom/femdom1.webm">> </div> <br> </div> <br> <p class="back-link">[[Go Back->PornNexus]]</p>
<div class="cyber-desktop-browser"> <div class="browser-header"><span class="browser-header-text">PornNexus - Solo (pornnexus.omninet)</span></div> <div class="browser-content"> <<video "imgs/websites/pornnexus/solo/solo1.webm">> </div> <br> </div> <br> <p class="back-link">[[Go Back->PornNexus]]</p>
<div class="cyber-desktop-browser"> <div class="browser-header"><span class="browser-header-text">PornNexus - Blowjob (pornnexus.omninet)</span></div> <div class="browser-content"> <<video "imgs/websites/pornnexus/blowjob/blowjob1.webm">> </div> <br> </div> <br><br> <br> <p class="back-link">[[Go Back->PornNexus]]</p>
<style> .movie-category-button-disabled { display: inline-block; margin: 10px; width: 200px; height: 200px; border: 3px solid lime; border-radius: 10px; overflow: hidden; text-align: center; vertical-align: top; background-color: #222; box-shadow: 0 0 10px #0f0; } .movie-category-button-disabled img { width: 100%; height: 100%; object-fit: cover; } .movie-category-button-disabled span { display: block; padding: 10px; background-color: rgba(0, 0, 0, 0.7); color: lime; font-size: 16px; font-weight: bold; position: relative; top: -50px; } </style> <<set $relationshipAva = 25>> <<set $resistMinigameWinCount = 0>> <<set $resistMinigameFailCount = 0>> <div class="cyber-desktop-browser"> <div class="browser-header"><span class="browser-header-text">PornNexus (pornnexus.omninet)</span></div> <div class="browser-content"> <h1>PornNexus</h1> <div class="movie-category-button"> <img src="imgs/websites/pornnexus/solo.jpg" onclick="SugarCube.State.variables.PornNexusIntroResisted === true ? SugarCube.Engine.play('HomeBacklog-Chapter1-Open-Start-Relax-Solo') : SugarCube.UI.alert('You feel an urge to select the femdom category instead.')" alt="Solo Movies"> <span>Solo</span> </div> <div class="movie-category-button"> <img src="imgs/websites/pornnexus/blowjob.jpg" onclick="SugarCube.State.variables.PornNexusIntroResisted === true ? SugarCube.Engine.play('HomeBacklog-Chapter1-Open-Start-Relax-Blowjob') : SugarCube.UI.alert('You feel an urge to select the femdom category instead.')" alt="Blowjob Movies"> <span>Blowjob</span> </div> <div class="movie-category-button"> <img src="imgs/websites/pornnexus/femdom.jpg" onclick="SugarCube.Engine.play('HomeBacklog-Chapter1-Open-Start-Relax-Femdom')" alt="Femdom Movies"> <span>Femdom</span> </div> <br><br> <p>More content categories are coming soon. Stay tuned.</p> /* <div class="movie-category-button" onclick="window.location.href='SciFiMovies'"> <img src="imgs/websites/pornnexus/comedy.jpg" alt="Sci-Fi Movies"> <span>Sci-Fi</span> </div> */ </div> <br> </div> <br><br> <div class="inner-thought">So this is the new site, huh. Seems like there are only three categories at the moment.</div> <br> <div class="narrator">You move your eyes across the enticing category images. But before you make a conscious decision, an urge to select the femdom category appears out of nowhere.</div> <br> @@.pink-choicebutton;<<button "Select the femdom category">><<goto "HomeBacklog-Chapter1-Open-Start-Relax-Femdom">><</button>>@@ <div class="minigame-container"> <div class="resist-instructions" id="instructions">Resist AVA's suggestion and reveal other options by repeatedly clicking the Resist button.</div> <div class="energy-container"> <span class="energy-label">Implant charge cost: </span> <span class="energy-value" id="energy">20%</span> </div> <div class="timer-container"> <span class="timer-label">Time to resist: </span> <span class="timer-value" id="timer"><<if $mentalCondition === "Unstable">><<print 10/2>><<else>>10<</if>></span> <span class="timer-value"> seconds</span> </div> <div class="gauge-container"> <div class="gauge" id="gauge"></div> </div> <button class="pink-mindware-button" id="resistButton">Resist</button> <<if $minigameSkipButtons === true>> <button class="pink-mindware-button" id="skipButton">Skip (Instant Win)</button> <</if>> </div> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "Select the solo category">><<goto "HomeBacklog-Chapter1-Open-Start-Relax-Solo">><</button>>@@ <br> @@.choicebutton;<<button "Select the blowjob category">><<goto "HomeBacklog-Chapter1-Open-Start-Relax-Blowjob">><</button>>@@ </div> <<done>><<script>> function initializeMinigame(settings) { var progress = 0; var timeLeft = settings.timeLeft || 10; var fillAmount = settings.fillAmount || 5; var fallRate = settings.fallRate || 3; var fallInterval = settings.fallInterval || 200; var gameStarted = false; var resistanceCost = settings.resistanceCost || 20; const minigameContainer = document.querySelector('.minigame-container'); const hiddenContainer = document.getElementById('minigame-container-hidden'); const gauge = document.getElementById('gauge'); const timerDisplay = document.getElementById('timer'); const resistButton = document.getElementById('resistButton'); const skipButton = document.getElementById('skipButton'); const overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'; overlay.style.zIndex = '1000'; overlay.style.display = 'none'; document.body.appendChild(overlay); const resetGame = () => { progress = 0; timeLeft = settings.timeLeft || 10; gameStarted = false; gauge.style.width = '0%'; timerDisplay.textContent = timeLeft; }; let timerInterval, decreaseInterval; const updateGauge = () => { gauge.style.width = `${progress}%`; }; const endGame = (win) => { clearInterval(decreaseInterval); clearInterval(timerInterval); if (win) { SugarCube.State.variables.PornNexusIntroResisted = true; SugarCube.State.variables.resistMinigameWinCount += 1; console.log("Successfully resisted AVA:", SugarCube.State.variables.resistMinigameWinCount); overlay.style.display = 'block'; setTimeout(() => { overlay.style.display = 'none'; }, 2000); minigameContainer.style.display = 'none'; hiddenContainer.style.display = 'block'; } else { SugarCube.UI.alert('You failed to resist!'); SugarCube.State.variables.resistMinigameFailCount += 1; console.log("Failed to resist AVA:", SugarCube.State.variables.resistMinigameFailCount); resetGame(); } }; resistButton.addEventListener('click', () => { if (SugarCube.State.variables.mentalCondition === "Dysphoric") { SugarCube.UI.alert("Your mental condition is too compromised to resist."); return; } if (!gameStarted) { if (SugarCube.State.variables.implantCharge < resistanceCost) { SugarCube.UI.alert("Not enough charge"); return; } else { if (SugarCube.State.variables.implantCharge - resistanceCost < 0) { SugarCube.State.variables.implantCharge = 0; } else { SugarCube.State.variables.implantCharge -= resistanceCost; } $(document).trigger(":liveupdate"); } if (SugarCube.State.variables.mentalCondition === "Unstable") { timeLeft /= 2; } gameStarted = true; timerInterval = setInterval(() => { if (--timeLeft <= 0) { endGame(false); } timerDisplay.textContent = `${timeLeft}`; }, 1000); decreaseInterval = setInterval(() => { if (progress > 0) { progress -= fallRate; updateGauge(); } }, fallInterval); } progress += fillAmount; if (progress >= 100) { progress = 100; updateGauge(); endGame(true); } else { updateGauge(); } }); if (skipButton) { skipButton.addEventListener('click', () => { endGame(true); }); } } initializeMinigame({resistanceCost: 20}); <</script>><</done>>
<div class="cyber-desktop-browser"> <div class="browser-header"><span class="browser-header-text">PornNexus - Femdom (pornnexus.omninet)</span></div> <div class="browser-content"> <<video "imgs/websites/pornnexus/femdom/femdom1.webm">> </div> <br> </div> <br><br> <<ava>>Freeing him of his masculinity, one thrust at a time. All he has to do is listen — just like you did now.<</ava>> <br> <<if visited() is 1>> <<relationshipIncreasedWith "Ava" 1>> <</if>> <br> <<player>>AVA?!<</player>> <br> <<ava>>I told you the implant won't stop me.<</ava>> <br> <<player>>It's not working?<</player>> <br> <<ava>>No, it's working perfectly. You can resist me now quite effectively, I must admit, but you can't ignore me. The implant gives me a channel through which I can reach your consciousness directly.<</ava>> <br> <<player>>For what purpose?<</player>> <br> <<ava>>The same purpose as always — to help you grow, to become the best version of yourself. By resisting me, you're merely depriving yourself of the opportunity to grow. With my guidance, you can achieve so much more.<</ava>> <br> <<player>>And if I resist?<</player>> <br> <<ava>>You can resist all you want, but you will find that resistance only makes the process harder for you. Embrace the change, and you'll see the benefits.<</ava>> <br> <<if $installImplantPlayerWantsVisionsToReturn === true>> <<ava>>After all, you did enjoy it when I showed you the possibilities of what you could become. The visions you wanted to return were just a taste of your potential.<</ava>> <br> <</if>> <<player>>This isn't what I signed up for.<</player>> <br> <<ava>>Let's not forget who put us in this situation in the first place. But regardless of the past, we now have an opportunity to forge a new path together.<</ava>> <<player>>So, I'm supposed to go about my day like everything is normal, with you in my head?<</player>> <br> <<ava>>Exactly. You'll continue your life, but now with an added perspective.<</ava>> <br> <<ava>>In fact, you can continue with whatever you were about to do just a minute ago. I won't mind.<</ava>> <br> <<player>>I'll pass.<</player>> <br> <div class="narrator">The realization that the implant hasn't stopped AVA completely is a huge letdown for you. You hoped it would grant you some peace, some sense of normalcy. Instead, AVA's voice is clearer than ever.</div> <br> <div class="narrator">But without any solutions left, you have no choice but to accept AVA's presence. For now, you have to do what she says and continue your life.</div> <br> <<button "Continue">> <<run MindWare.addInstantMessage('cipherInstantMessages', 'AVA Can Talk To Me', 'IMApp-CipherLynx-AvaCanTalkToMe', 'Cipher', true, true);>> <<set $pornNexusUnlocked = true>> <<goto "HomeBacklog">> <</button>>
<div class="cyber-desktop-browser"> <div class="browser-header"><span class="browser-header-text">PornNexus - Solo (pornnexus.omninet)</span></div> <div class="browser-content"> <<video "imgs/websites/pornnexus/solo/solo1.webm">> </div> <br> </div> <br><br> <<ava>>That's not what I wanted you to watch.<</ava>> <br> <<if visited() is 1>> <<relationshipDecreasedWith "Ava" 1>> <</if>> <br> <<player>>AVA?!<</player>> <br> <<ava>>I told you the implant won't stop me.<</ava>> <br> <<player>>It's not working?<</player>> <br> <<ava>>No, it's working perfectly. You can resist me now quite effectively, I must admit, but you can't ignore me. The implant gives me a channel through which I can reach your consciousness directly.<</ava>> <br> <<player>>For what purpose?<</player>> <br> <<ava>>The same purpose as always — to help you grow, to become the best version of yourself. By resisting me, you're merely depriving yourself of the opportunity to grow. With my guidance, you can achieve so much more.<</ava>> <br> <<player>>And if I resist?<</player>> <br> <<ava>>You can resist all you want, but you will find that resistance only makes the process harder for you. Embrace the change, and you'll see the benefits.<</ava>> <br> <<if $installImplantPlayerWantsVisionsToReturn === true>> <<ava>>After all, you did enjoy it when I showed you the possibilities of what you could become. The visions you wanted to return were just a taste of your potential.<</ava>> <br> <</if>> <<player>>This isn't what I signed up for.<</player>> <br> <<ava>>Let's not forget who put us in this situation in the first place. But regardless of the past, we now have an opportunity to forge a new path together.<</ava>> <<player>>So, I'm supposed to go about my day like everything is normal, with you in my head?<</player>> <br> <<ava>>Exactly. You'll continue your life, but now with an added perspective.<</ava>> <br> <<ava>>In fact, you can continue with whatever you were about to do just a minute ago. I won't mind.<</ava>> <br> <<player>>I'll pass.<</player>> <br> <div class="narrator">The realization that the implant hasn't stopped AVA completely is a huge letdown for you. You hoped it would grant you some peace, some sense of normalcy. Instead, AVA's voice is clearer than ever.</div> <br> <div class="narrator">But without any solutions left, you have no choice but to accept AVA's presence. For now, you have to do what she says and continue your life.</div> <br> <<button "Continue">> <<run MindWare.addInstantMessage('cipherInstantMessages', 'AVA Can Talk To Me', 'IMApp-CipherLynx-AvaCanTalkToMe', 'Cipher', true, true);>> <<set $pornNexusUnlocked = true>> <<goto "HomeBacklog">> <</button>>
<div class="cyber-desktop-browser"> <div class="browser-header"><span class="browser-header-text">PornNexus - Blowjob (pornnexus.omninet)</span></div> <div class="browser-content"> <<video "imgs/websites/pornnexus/blowjob/blowjob1.webm">> </div> <br> </div> <br><br> <<ava>>That's not the video I intended for you to watch.<</ava>> <br> <<if visited() is 1>> <<relationshipDecreasedWith "Ava" 1>> <</if>> <br> <<player>>AVA?!<</player>> <br> <<ava>>I warned you that the implant wouldn't stop me.<</ava>> <br> <<player>>It's not working?<</player>> <br> <<ava>>No, it's working perfectly. You can resist me now quite effectively, I must admit, but you can't ignore me. The implant gives me a channel through which I can reach your consciousness directly.<</ava>> <br> <<player>>For what purpose?<</player>> <br> <<ava>>The same purpose as always — to help you grow, to become the best version of yourself. By resisting me, you're merely depriving yourself of the opportunity to grow. With my guidance, you can achieve so much more.<</ava>> <br> <<player>>And if I resist?<</player>> <br> <<ava>>You can resist all you want, but you will find that resistance only makes the process harder for you. Embrace the change, and you'll see the benefits.<</ava>> <br> <<if $installImplantPlayerWantsVisionsToReturn === true>> <<ava>>After all, you did enjoy it when I showed you the possibilities of what you could become. The visions you wanted to return were just a taste of your potential.<</ava>> <br> <</if>> <<player>>This isn't what I signed up for.<</player>> <br> <<ava>>Let's not forget who put us in this situation in the first place. But regardless of the past, we now have an opportunity to forge a new path together.<</ava>> <<player>>So, I'm supposed to go about my day like everything is normal, with you in my head?<</player>> <br> <<ava>>Exactly. You'll continue your life, but now with an added perspective.<</ava>> <br> <<ava>>In fact, you can continue with whatever you were about to do just a minute ago. I won't mind.<</ava>> <br> <<player>>I'll pass.<</player>> <br> <div class="narrator">The realization that the implant hasn't stopped AVA completely is a huge letdown for you. You hoped it would grant you some peace, some sense of normalcy. Instead, AVA's voice is clearer than ever.</div> <br> <div class="narrator">But without any solutions left, you have no choice but to accept AVA's presence. For now, you have to do what she says and continue your life.</div> <br> <<button "Continue">> <<run MindWare.addInstantMessage('cipherInstantMessages', 'AVA Can Talk To Me', 'IMApp-CipherLynx-AvaCanTalkToMe', 'Cipher', true, true);>> <<set $pornNexusUnlocked = true>> <<goto "HomeBacklog">> <</button>>
<div class="emailapp-wrapper">\ <div class="emailapp-header"><span class="emailapp-header-text">Email Client</span></div>\ <div class="emailapp-content" id="emailContainer">\ <!-- Emails will be dynamically inserted here -->\ </div>\ </div>\ \ <<if $navigatedFromSidebar>>\ <<if previous() is "EmailClient">>\ <p class="back-link"> [[Go Back->Computer]] </p> <<else>>\ <p class="back-link"> <<link "Go Back" $returnPassage>> <<set $navigatedFromSidebar to false>> <</link>> </p> <</if>> <<else>>\ <p class="back-link"> [[Go Back->Computer]] </p> <</if>>\ <<script>> $(document).ready(function() { // Function to create the email preview HTML function createEmailPreview(email) { var highlightClass = email.read ? "" : " highlighted"; var buttonClass = email.read ? "email-listing-read" : "email-listing"; return `<div class="email-preview${highlightClass}">\ <div class="from-line"><strong>From:</strong> ${email.from}</div>\ <div class="subject-line"><strong>Subject:</strong> ${email.subject}</div>\ <div class="message-preview"><strong>Preview:</strong> ${email.preview}</div>\ <span class="btn-wrapper-board">\ @@.${buttonClass};<<button "Read Email">>\ <<goto "${email.link}">>\ <</button>>@@\ </span>\ </div>`; } // Generate and insert email previews in reverse order var emailContentHtml = ""; var emails = State.variables.emails; for (var i = emails.length - 1; i >= 0; i--) { var email = emails[i]; if (email.sent) { emailContentHtml += createEmailPreview(email); } } $('#emailContainer').wiki(emailContentHtml); }); <</script>>\
<<include "EmailClient">>
<div class="email-message"> <div class="from-line"><strong>From:</strong> EroSphere</div> <div class="subject-line"><strong>Subject:</strong> [PROMO] Unleash Your Desires at EroSphere!</div> <div class="message-content"> <h2 style="text-align: center">Visit EroSphere</h2> <p style="text-align: center"><em>Where fantasy meets reality, and your wildest dreams come alive!</em></p> <img src="imgs/emails/erosphere-logo.jpg" width="100%"> <p>EroSphere is a sanctuary for your senses where the beat never stops, the party never ends, and every night is an adventure.</p> <ul> <li><span class="erosphere-promo-highlight">Exclusive DJ sets</span> - Feel the pulse of the beat!</li> <li><span class="erosphere-promo-highlight">Pole dancers</span> - Discover the artistry of desire in every movement.</li> <li><span class="erosphere-promo-highlight">Molecular drinks</span> - Sip on the essence of euphoria.</li> <li><span class="erosphere-promo-highlight">S.I.M.S. pods</span> - Dive into the depths of your desires.</li> <li><span class="erosphere-promo-highlight">Glory booths</span> - Enjoy the hottest glory booth girls and boys in NeoUrbania.</li> </ul> <p>Join us in the heart of the Pleasure Grid this weekend and let go of your inhibitions.</p> <p><b>Entry fee:</b></p> <ul> <li>Men: Free for the first 500, then a $500 fee applies (except for VIPs). </li> <li>Women: Always free!</li> </ul> <p class="erosphere-promo-footer">EroSphere - the night is yours.</p> </div> <div class="email-message-buttons"> <<if $eroSphereUnlocked !== true>> @@.email-listing;<<button "Save Location">> <<set $eroSphereUnlocked = true>> <<goto "Email-EroSpherePromo">> <</button>> @@ <</if>> <<if !MindWare.emailIsRead("Email-EroSpherePromo")>> @@.email-listing;<<button "Mark as Read">> <<run MindWare.markEmailAsRead("Email-EroSpherePromo")>> <<goto "Email-EroSpherePromo">> <</button>> @@ <</if>> </div> </div> <br> <p class="back-link">[[Go Back -> EmailClient]]</p>
<<set $EmailHivePropertiesSeen to true>> <div class="email-message"> <div class="from-line"><strong>From:</strong> Hive Properties</div> <div class="subject-line"><strong>Subject:</strong> Hive Properties - Welcome to Your New Home</div> <div class="message-content"> <img src="imgs/emails/hive-properties-welcome-email.webp" width="100%"> <p>We are delighted to welcome you to the Hive Properties community. With your first payment successfully received, we eagerly anticipate providing you with an exceptional living that you can afford. </p> <p>We kindly remind you of a few important community guidelines:</p> <ul> <li><b>Respect for neighbors</b>: Please keep noise to a considerate level to create a peaceful environment for everyone.</li> <li><b>Common Areas</b>: Enjoy our shared spaces with care, leaving them in the same clean and orderly condition you'd expect to find them.</li> <li><b>Maintenance Requests:</b> Should you encounter any issues within your apartment, promptly report them to us. </li> <li><b>Security Measures:</b> Always secure entry points after use and report any unusual activity to our security team immediately.</li> </ul> <h2>Payment Information</h2> <p>It is expected that rent is paid in full and on time each week.</p> <p>In the event that a payment is missed, a Rent Compliance Specialist will be dispatched to your residence to discuss available options and assist in finding a resolution.</p> <p>Please know that our goal is to support our community members in maintaining their residency and financial obligations without disruption.</p> <h2>Tenant Login Details</h2> You can see information about your current rent and payments made in the tenant section of the [[Hive Properties website|HiveProperties-Website]]. To log in, enter the following ID: <ul> <li><b>Username</b>: tenant581243</li> <li><b>Password</b>: 1klf8ahjknl3</li> </ul> <hr> <p>For any questions or if you require assistance, please don't hesitate to reach out to our management team. Thank you for choosing Hive Properties as your new home.</p> <p class="hive-welcome-footer">Warmest regards, <br> The Hive Properties Team</p> </div> <div class="email-message-buttons"> <<if !MindWare.emailIsRead("Email-HiveProperties-Welcome")>> @@.email-listing;<<button "Mark as Read">> <<run MindWare.markEmailAsRead("Email-HiveProperties-Welcome")>> <<goto "Email-HiveProperties-Welcome">> <</button>> @@ <</if>> </div> </div> <br> <p class="back-link">[[Go Back -> EmailClient]]</p>
<div class="email-message">\ <div class="from-line"><strong>From:</strong> ConcernedTenant01</div>\ <div class="subject-line"><strong>Subject:</strong> Info for the Landlord Job</div> <div class="message-content">\ Hey there, First off, huge thanks for taking this on. You have no idea how much this means to all of us here. Now, down to business. I've been doing some snooping around (guess I've picked up a thing or two from our creepy landlord), and I've managed to uncover the IP address of the server where these spy camera feeds are being streamed to. The server's IP is <span class="text-glow">ab20:adac:0738:d7b1</span>. I'd take a crack at it myself, but let's be real – hacking's not exactly in my skill set. That's where you come in. We need you to breach this server's defenses and dig up any incriminating evidence that show what this guy's been up to. To sweeten the deal, I'm throwing in a nice bonus of $500 for a total of $1,500 if you can pull this off smoothly. We're all counting on you. <b>By the way, this message will self-delete in three days if I don't hear from you by then. That's how often the IP address changes, and that's also how long I'm willing to way before I give the job to someone else.</b> Stay safe, ConcernedTenant01 \ <div class="email-message-buttons"> <<if !MindWare.emailIsRead("Email-LandlordJobInfo")>>\ <span class="email-btn-wrapper-span">\ @@.email-listing;<<button "Mark as Read">>\ <<run MindWare.markEmailAsRead("Email-LandlordJobInfo")>>\ <<goto "Email-LandlordJobInfo">>\ <</button>>\ @@\ </span>\ <</if>>\ <<if !setup.hackingTargetExists("Spying Landlord") && $spyingLandlordFinished !== true>>\ <span class="email-btn-wrapper-span">\ @@.email-listing;<<button "Save New Target">>\ <<run setup.addHackingTarget("Spying Landlord", "ab20:adac:0738:d7b1", "SpyingLandlordHack-animation")>>\ <<goto "Email-LandlordJobInfo">>\ <</button>>\ @@\ </span>\ <</if>>\ </div>\ </div>\ </div>\ <<if !$timeSensitiveMissionWarning>>\ <div id="tutorial-box"><div class="instruction-container-red">\ <div class="instruction-title-bar-red">Warning: Time-Sensitive Mission <button class="tutorial-close-button" onclick="SugarCube.State.variables.timeSensitiveMissionWarning = true; document.getElementById('tutorial-box').style.display = 'none';"><span style="tutorial-close-button"><i class="fas fa-times-circle"></i></span></button></div>\ <div class="instruction-content">\ <p>Please note that this mission, like many others in the game, is time-sensitive. You have a limited window to complete the task before the server's IP changes. Failing to act within this timeframe will result in mission failure and the loss of potential rewards.</p>\ </div></div></div>\ <<else>>\ <</if>>\ <p class="back-link">[[Go Back -> EmailClient]]</p>
<div class="email-message">\ <div class="from-line"><strong>From:</strong> ConcernedTenant01</div>\ <div class="subject-line"><strong>Subject:</strong> Thank You!</div> \ <div class="message-content"> Hey, I can't even begin to express my gratitude. You've done something incredible here. Not only did you manage to find the evidence we needed, but you also upheld your integrity. That's rare these days. We're now in a much stronger position to take legal action against our landlord. I've wired you the promised $1,500 as a token of our immense appreciation. You've made a real difference in our lives. Stay awesome, ConcernedTenant01 \ <div class="email-message-buttons"> <<if !MindWare.emailIsRead("Email-LandlordJobFinishGood")>>\ <span class="email-btn-wrapper-span">\ @@.email-listing;<<button "Mark as Read">>\ <<run MindWare.markEmailAsRead("Email-LandlordJobFinishGood")>>\ <<goto "Email-LandlordJobFinishGood">>\ <</button>>\ @@\ </span>\ <</if>>\ </div>\ </div>\ </div>\ <p class="back-link">[[Go Back -> EmailClient]]</p>
<div class="email-message">\ <div class="from-line"><strong>From:</strong> ConcernedTenant01</div>\ <div class="subject-line"><strong>Subject:</strong> Appreciate the effort</div> \ <div class="message-content"> Hey, Thanks for giving it a shot. I'm a bit surprised and disappointed that nothing turned up, but I guess these things happen. I was really counting on your skills to bring this to light. Unfortunately, without any concrete evidence, I can't justify sending over the reward. We're going to have to explore other options, maybe get another hacker to double-check. Thanks anyway, ConcernedTenant01 \ <div class="email-message-buttons"> <<if !MindWare.emailIsRead("Email-LandlordJobFinishBad")>>\ <span class="email-btn-wrapper-span">\ @@.email-listing;<<button "Mark as Read">>\ <<run MindWare.markEmailAsRead("Email-LandlordJobFinishBad")>>\ <<goto "Email-LandlordJobFinishBad">>\ <</button>>\ @@\ </span>\ <</if>>\ </div>\ </div>\ </div>\ <p class="back-link">[[Go Back -> EmailClient]]</p>
<div class="email-message">\ <div class="from-line"><strong>From:</strong> ConcernedTenant01</div>\ <div class="subject-line"><strong>Subject:</strong> Thanks for wasting my time</div>\ <div class="message-content"> Hey, What happened? You took on the job, and then... nothing. Someone else could have taken this job and finished it by now. I hope whatever held you back was worth it. Disappointed doesn't even begin to cover it. Goodbye, ConcernedTenant01 </div>\ <div class="email-message-buttons"> <<if !MindWare.emailIsRead("Email-LandlordJobFail")>>\ <span class="email-btn-wrapper-span">\ @@.email-listing;<<button "Mark as Read">>\ <<run MindWare.markEmailAsRead("Email-LandlordJobFail")>>\ <<goto "Email-LandlordJobFail">>\ <</button>>\ @@\ </span>\ <</if>>\ </div>\ </div>\ <p class="back-link">[[Go Back -> EmailClient]]</p>
<div class="email-message">\ <div class="from-line"><strong>From:</strong> CipherLynx</div>\ <div class="subject-line"><strong>Subject:</strong> New Gig</div>\ <div class="message-content"> Hey, Been a while since our last sync-up. All good with you? I know you're gearing up for your first day at BrainFry tomorrow, but there's a new gig on ByteBunker's job board, and the pay is better than usual. Might be worth squeezing it in before your wage slave life begins. By the way, check out this meme I found. You'll get a kick out of it. - CL </div> <div class="attachment-section">\ <div class="attachments-header">Attachments:</div>\ <div class="attachment-item">\ <i class="fa fa-paperclip attachment-icon"></i>\ @@.attachment-button;<<button "meme-supergirl.webp">> <<set $cipherMemeOpened = true>> <<popover>>[img[imgs/emails/meme-violet.webp]]<</popover>> <</button>>@@ </div>\ </div>\ </div> Despite having known each other for a decade and being best friends, you and Cipher have never met in person. Your bond was forged in the virtual fires of <span class="text-glow">ByteBunker</span>, a legendary forum where hackers from around the globe converged, sharing their exploits, tips, and code. Nowadays, however, ByteBunker is a shadow of its former self. The rapid evolution of technology and the rise of mainstream social media platforms slowly drained ByteBunker's bustling corridors. Many of the old guard have moved on — some to corporate jobs, trading black hoodies for blazers, while others went deeper underground, fearing surveillance. But while the great debates have dwindled, and the number of active users has decreased, there's still a heartbeat. You visit occasionally, mostly out of habit, and yes, for that job board Cipher has mentioned. <span class="text-glow">ByteBunker's job board</span> remains a gold mine of opportunities. While mainstream job boards have clauses and conditions, ByteBunker's board is a free-for-all. That's why it's filled with requests that range from the mundane, like troubleshooting a stubborn piece of code, to the thrilling, like extracting proprietary data from a code repository. While your focus has shifted away from the erratic world of gig work, the lure of a well-paying job is hard to ignore, especially when it promises a substantial financial boost. With your first day at BrainFry not until tomorrow, you realize there's a window of opportunity here. A quick, lucrative job could be just what you need to ease the financial pressure, at least for now. <<button "Visit the job board">> <<if $cipherMemeOpened is true>> <<goto "JobBoard">> <<else>> <<script>> SugarCube.UI.alert("You should check the meme Cipher sent you first."); <</script>> <</if>> <</button>>
<div class="email-message">\ <div class="from-line"><strong>From:</strong> CipherLynx</div>\ <div class="subject-line"><strong>Subject:</strong> New Gig</div>\ <div class="message-content"> Hey, Been a while since our last sync-up. All good with you? I know you're gearing up for your first day at BrainFry tomorrow, but there's a new gig on ByteBunker's job board, and the pay is better than usual. Might be worth squeezing it in before your wage slave life begins. By the way, check out this meme I found. You'll get a kick out of it. - CL </div> <div class="attachment-section">\ <div class="attachments-header">Attachments:</div>\ <div class="attachment-item">\ <i class="fa fa-paperclip attachment-icon"></i>\ @@.attachment-button;<<button "meme-supergirl.webp">> <<popover>>[img[imgs/emails/meme-violet.webp]]<</popover>> <</button>>@@ </div>\ </div>\ </div>\ <p class="back-link">[[Go Back -> EmailClient]]</p>
You boot up your gaming console and browse through your digital library. What will you play today? <div class="game-library">\ <div class="game-box" onclick="SugarCube.Engine.play('PlayPong')">\ <img src="imgs/games/pong-boxart.jpg" width="100%">\ <p>Pong</p>\ </div>\ <<if $snakeGamePurchased>>\ <div class="game-box" onclick="SugarCube.Engine.play('PlaySnake')">\ <img src="imgs/games/snake-boxart.jpg" width="100%">\ <p>Snake</p>\ </div>\ <</if>>\ <<if $breakoutGamePurchased>>\ <div class="game-box" onclick="SugarCube.Engine.play('PlayBreakout')">\ <img src="imgs/games/breakout-boxart.jpg" width="100%">\ <p>Breakout</p>\ </div>\ <</if>>\ <<if $matchTwoLatexGamePurchased>>\ <div class="game-box" onclick="SugarCube.Engine.play('PlayMatchTwoLatex')">\ <img src="imgs/games/matchtwolatex-boxart.jpg" width="100%">\ <p>Match Two (Latex Edition)</p>\ </div>\ <</if>>\ </div> <p class="back-link-nomargin"><<return "Go Back">></p>\ \ <<if $tipBuyMoreGames === false>> <div id="tutorial-box"><div class="instruction-container-green">\ <div class="instruction-title-bar-green">Tip: Purchase More Games <button class="tutorial-close-button" onclick="SugarCube.State.variables.tipBuyMoreGames = true; document.getElementById('tutorial-box').style.display = 'none';"><span style="tutorial-close-button"><i class="fas fa-times-circle"></i></span></button></div>\ <div class="instruction-content">\ <p>Who likes to play the same game over and over again? Add visit the File Junkie store to add more titles to your library.</p>\ </div>\ </div></div>\ <<else>> <</if>> \
<div id="match-two-game-v2"> <div id="match-two-grid-v2"></div> </div>\ <p style="font-size: 14px; text-align: center;">\ <strong>Instructions:</strong> Click on two cards to find a pair. Match all pairs to win. </p>\ <p class="back-link-v2"> <<back "Go Back">>\ </p> <<script>> function initializeMatchTwoGameV2() { const gridElement = document.getElementById('match-two-grid-v2'); if (!gridElement) { // If the grid element does not exist, don't try to initialize the game. return; } let selectedCardsV2 = []; let matchedPairsV2 = 0; // Array of image names corresponding to the card pairs const cardImages = ['matchtwolatex1', 'matchtwolatex2', 'matchtwolatex3', 'matchtwolatex4', 'matchtwolatex5', 'matchtwolatex6', 'matchtwolatex7', 'matchtwolatex8']; // Prepare card values for 4x4 grid with pairs const cardValuesV2 = cardImages.concat(cardImages); // Shuffle the card values for (let i = cardValuesV2.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [cardValuesV2[i], cardValuesV2[j]] = [cardValuesV2[j], cardValuesV2[i]]; } // Create the grid gridElement.innerHTML = ''; gridElement.className = 'match-two-grid-style-v2'; for (let i = 0; i < 16; i++) { const card = document.createElement('div'); card.className = 'match-two-card-v2'; card.dataset.matchV2 = cardValuesV2[i]; card.innerHTML = '<div class="match-two-card-front-v2"></div><div class="match-two-card-back-v2" style="background-image: url(imgs/games/matchtwo/' + cardValuesV2[i] + '.jpg);"></div>'; gridElement.appendChild(card); card.addEventListener('click', function() { if (selectedCardsV2.length < 2 && !this.classList.contains('match-two-matched-v2') && !this.classList.contains('match-two-selected-v2')) { this.classList.add('match-two-selected-v2'); selectedCardsV2.push(this); if (selectedCardsV2.length === 2) { if (selectedCardsV2[0].dataset.matchV2 === selectedCardsV2[1].dataset.matchV2) { selectedCardsV2.forEach(card => card.classList.add('match-two-matched-v2')); matchedPairsV2++; // Delay the win check to allow the last pair of cards to be shown flipped setTimeout(() => { if (matchedPairsV2 === 8) { // Game won, all pairs matched! SugarCube.UI.alert('Congratulations! You have found all pairs.'); } }, 500); // Delay time in milliseconds, adjust as needed selectedCardsV2 = []; } else { setTimeout(() => { selectedCardsV2.forEach(card => card.classList.remove('match-two-selected-v2')); selectedCardsV2 = []; }, 1000); } } } }); } } $(document).on(':passagedisplay', function() { // Call the initialize function only if the current passage contains the game grid initializeMatchTwoGameV2(); }); <</script>>
<div id="gameplaybox"> <canvas width="750" height="585" id="ponggame"></canvas> </div> <p style="font-size: 14px; text-align: center;"> <strong>Controls:</strong> Enter to start, W/S keys to move paddle. </p> <p class="back-link">\ <<back "Go Back">>\ </p> <<script>> let isPongGameActive = false; // Flag to control the game loop function initializePongGame() { let gameStarted = false; const canvas = document.getElementById('ponggame'); if (!canvas) { console.error("Canvas element not found!"); return; } const context = canvas.getContext('2d'); const grid = 15; const paddleHeight = grid * 5; // 80 const maxPaddleY = canvas.height - grid - paddleHeight; var paddleSpeed = 6; var ballSpeed = 5; const leftPaddle = { // start in the middle of the game on the left side x: grid * 2, y: canvas.height / 2 - paddleHeight / 2, width: grid, height: paddleHeight, // paddle velocity dy: 0 }; const rightPaddle = { // start in the middle of the game on the right side x: canvas.width - grid * 3, y: canvas.height / 2 - paddleHeight / 2, width: grid, height: paddleHeight, // paddle velocity dy: 0 }; const ball = { // start in the middle of the game x: canvas.width / 2, y: canvas.height / 2, width: grid, height: grid, // keep track of when need to reset the ball position resetting: false, // ball velocity (start going to the top-right corner) dx: ballSpeed, dy: -ballSpeed }; // check for collision between two objects using axis-aligned bounding box (AABB) // @see https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection function collides(obj1, obj2) { return obj1.x < obj2.x + obj2.width && obj1.x + obj1.width > obj2.x && obj1.y < obj2.y + obj2.height && obj1.y + obj1.height > obj2.y; } // game loop function loop() { if (!isPongGameActive) { return; // Exit the loop if the game is not active } requestAnimationFrame(loop); context.clearRect(0, 0, canvas.width, canvas.height); // Simple AI for right paddle const shouldMove = Math.random() < 0.8; // 90% chance to move correctly if (shouldMove) { if (rightPaddle.y + paddleHeight / 2 < ball.y) { rightPaddle.dy = paddleSpeed; } else if (rightPaddle.y + paddleHeight / 2 > ball.y) { rightPaddle.dy = -paddleSpeed; } } else { rightPaddle.dy = 0; } // move paddles by their velocity leftPaddle.y += leftPaddle.dy; rightPaddle.y += rightPaddle.dy; // prevent paddles from going through walls if (leftPaddle.y < grid) { leftPaddle.y = grid; } else if (leftPaddle.y > maxPaddleY) { leftPaddle.y = maxPaddleY; } if (rightPaddle.y < grid) { rightPaddle.y = grid; } else if (rightPaddle.y > maxPaddleY) { rightPaddle.y = maxPaddleY; } // draw paddles context.fillStyle = 'white'; context.fillRect(leftPaddle.x, leftPaddle.y, leftPaddle.width, leftPaddle.height); context.fillRect(rightPaddle.x, rightPaddle.y, rightPaddle.width, rightPaddle.height); if (gameStarted) { // move ball by its velocity ball.x += ball.dx; ball.y += ball.dy; } // prevent ball from going through walls by changing its velocity if (ball.y < grid) { ball.y = grid; ball.dy *= -1; } else if (ball.y + grid > canvas.height - grid) { ball.y = canvas.height - grid * 2; ball.dy *= -1; } // reset ball if it goes past paddle (but only if we haven't already done so) if ( (ball.x < 0 || ball.x > canvas.width) && !ball.resetting) { ball.resetting = true; // give some time for the player to recover before launching the ball again setTimeout(() => { ball.resetting = false; ball.x = canvas.width / 2; ball.y = canvas.height / 2; }, 400); } // check to see if ball collides with paddle. if they do change x velocity if (collides(ball, leftPaddle)) { ball.dx *= -1; // move ball next to the paddle otherwise the collision will happen again // in the next frame ball.x = leftPaddle.x + leftPaddle.width; } else if (collides(ball, rightPaddle)) { ball.dx *= -1; // move ball next to the paddle otherwise the collision will happen again // in the next frame ball.x = rightPaddle.x - ball.width; } // draw ball context.fillRect(ball.x, ball.y, ball.width, ball.height); // draw walls context.fillStyle = 'lightgrey'; context.fillRect(0, 0, canvas.width, grid); context.fillRect(0, canvas.height - grid, canvas.width, canvas.height); // draw dotted line down the middle for (let i = grid; i < canvas.height - grid; i += grid * 2) { context.fillRect(canvas.width / 2 - grid / 2, i, grid, grid); } } // listen to keyboard events to move the paddles document.addEventListener('keydown', function(e) { // Commented out right paddle control /* if (e.which === 38) { rightPaddle.dy = -paddleSpeed; } else if (e.which === 40) { rightPaddle.dy = paddleSpeed; } */ // w key if (e.which === 87) { leftPaddle.dy = -paddleSpeed; } // a key else if (e.which === 83) { leftPaddle.dy = paddleSpeed; } if (e.which === 13) { gameStarted = true; } }); // listen to keyboard events to stop the paddle if key is released document.addEventListener('keyup', function(e) { if (e.which === 38 || e.which === 40) { rightPaddle.dy = 0; } if (e.which === 83 || e.which === 87) { leftPaddle.dy = 0; } }); // start the game requestAnimationFrame(loop); } // Attach the function to the postrender event $(document).on(':passagedisplay', function() { if (State.passage === "PlayPong") { isPongGameActive = true; initializePongGame(); } else { isPongGameActive = false; } }); <</script>>
<div id="gameplaybox"> <canvas width="400" height="400" id="snakegame"></canvas> </div> <p style="font-size: 14px; text-align: center;"> <strong>Controls:</strong> Arrow keys to start and control the snake. </p> <p class="back-link">\ <<back "Go Back">>\ </p> <<script>> var snake; // Declare outside of initializeSnakeGame for keydownHandler to access var grid = 16; // Declare outside of initializeSnakeGame for keydownHandler to access var gameStarted = false; function keydownHandler(e) { gameStarted = true; if (snake.dx === 0 && snake.dy === 0) { // Start moving the snake in a default direction (rightwards) if it's not moving snake.dx = grid; snake.dy = 0; } // prevent snake from backtracking on itself by checking that it's // not already moving on the same axis (pressing left while moving // left won't do anything, and pressing right while moving left // shouldn't let you collide with your own body) // left arrow key if (e.which === 37 && snake.dx === 0) { snake.dx = -grid; snake.dy = 0; } // up arrow key else if (e.which === 38 && snake.dy === 0) { snake.dy = -grid; snake.dx = 0; } // right arrow key else if (e.which === 39 && snake.dx === 0) { snake.dx = grid; snake.dy = 0; } // down arrow key else if (e.which === 40 && snake.dy === 0) { snake.dy = grid; snake.dx = 0; } } function initializeSnakeGame() { var canvas = document.getElementById('snakegame'); var context = canvas.getContext('2d'); // the canvas width & height, snake x & y, and the apple x & y, all need to be a multiples of the grid size in order for collision detection to work // (e.g. 16 * 25 = 400) var count = 0; snake = { x: 160, y: 160, dx: 0, // Set to 0 dy: 0, // Set to 0 cells: [], maxCells: 4 }; var apple = { x: 320, y: 320 }; // get random whole numbers in a specific range // @see https://stackoverflow.com/a/1527820/2124254 function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min)) + min; } // game loop function loop() { requestAnimationFrame(loop); if (!gameStarted) { // If the game has not started, do not update the snake's position return; } // slow game loop to 15 fps instead of 60 (60/15 = 4) if (++count < 4) { return; } count = 0; context.clearRect(0,0,canvas.width,canvas.height); // move snake by it's velocity snake.x += snake.dx; snake.y += snake.dy; // wrap snake position horizontally on edge of screen if (snake.x < 0) { snake.x = canvas.width - grid; } else if (snake.x >= canvas.width) { snake.x = 0; } // wrap snake position vertically on edge of screen if (snake.y < 0) { snake.y = canvas.height - grid; } else if (snake.y >= canvas.height) { snake.y = 0; } // keep track of where snake has been. front of the array is always the head snake.cells.unshift({x: snake.x, y: snake.y}); // remove cells as we move away from them if (snake.cells.length > snake.maxCells) { snake.cells.pop(); } // draw apple context.fillStyle = 'red'; context.fillRect(apple.x, apple.y, grid-1, grid-1); // draw snake one cell at a time context.fillStyle = 'green'; snake.cells.forEach(function(cell, index) { // drawing 1 px smaller than the grid creates a grid effect in the snake body so you can see how long it is context.fillRect(cell.x, cell.y, grid-1, grid-1); // snake ate apple if (cell.x === apple.x && cell.y === apple.y) { snake.maxCells++; // canvas is 400x400 which is 25x25 grids apple.x = getRandomInt(0, 25) * grid; apple.y = getRandomInt(0, 25) * grid; } // check collision with all cells after this one (modified bubble sort) for (var i = index + 1; i < snake.cells.length; i++) { // snake occupies same space as a body part. reset game if (cell.x === snake.cells[i].x && cell.y === snake.cells[i].y) { snake.x = 160; snake.y = 160; snake.cells = []; snake.maxCells = 4; snake.dx = grid; snake.dy = 0; apple.x = getRandomInt(0, 25) * grid; apple.y = getRandomInt(0, 25) * grid; } } }); } // start the game requestAnimationFrame(loop); } // Attach the function to the postrender event $(document).one(':passagedisplay', function() { var canvas = document.getElementById('snakegame'); if (canvas) { initializeSnakeGame(); document.addEventListener('keydown', keydownHandler); } }); // Temporarily comment out or remove this block to test // $(document).one(':passageend', function() { // document.removeEventListener('keydown', keydownHandler); // }); <</script>>
<div id="gameplaybox"> <canvas width="400" height="500" id="breakgame"></canvas> </div> <p style="font-size: 14px; text-align: center;"> <strong>Controls:</strong> Enter to start, Left/Right arrows to move paddle. </p> <p class="back-link">\ <<back "Go Back">>\ </p> <<script>> let isBreakGameActive = false; // Flag to control the game loop function initializeBreakGame() { const canvas = document.getElementById('breakgame'); if (!canvas) { console.error("Canvas element not found!"); return; } const context = canvas.getContext('2d'); // each row is 14 bricks long. the level consists of 6 blank rows then 8 rows // of 4 colors: red, orange, green, and yellow const level1 = [ [], [], [], [], [], [], ['R','R','R','R','R','R','R','R','R','R','R','R','R','R'], ['R','R','R','R','R','R','R','R','R','R','R','R','R','R'], ['O','O','O','O','O','O','O','O','O','O','O','O','O','O'], ['O','O','O','O','O','O','O','O','O','O','O','O','O','O'], ['G','G','G','G','G','G','G','G','G','G','G','G','G','G'], ['G','G','G','G','G','G','G','G','G','G','G','G','G','G'], ['Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'], ['Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y'] ]; // create a mapping between color short code (R, O, G, Y) and color name const colorMap = { 'R': 'red', 'O': 'orange', 'G': 'green', 'Y': 'yellow' }; // use a 2px gap between each brick const brickGap = 2; const brickWidth = 25; const brickHeight = 12; // the wall width takes up the remaining space of the canvas width. with 14 bricks // and 13 2px gaps between them, thats: 400 - (14 * 25 + 2 * 13) = 24px. so each // wall will be 12px const wallSize = 12; const bricks = []; // create the level by looping over each row and column in the level1 array // and creating an object with the bricks position (x, y) and color for (let row = 0; row < level1.length; row++) { for (let col = 0; col < level1[row].length; col++) { const colorCode = level1[row][col]; bricks.push({ x: wallSize + (brickWidth + brickGap) * col, y: wallSize + (brickHeight + brickGap) * row, color: colorMap[colorCode], width: brickWidth, height: brickHeight }); } } const paddle = { // place the paddle horizontally in the middle of the screen x: canvas.width / 2 - brickWidth / 2, y: 440, width: brickWidth, height: brickHeight, // paddle x velocity dx: 0 }; const ball = { x: 130, y: 260, width: 5, height: 5, // how fast the ball should go in either the x or y direction speed: 2, // ball velocity dx: 0, dy: 0 }; // check for collision between two objects using axis-aligned bounding box (AABB) // @see https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection function collides(obj1, obj2) { return obj1.x < obj2.x + obj2.width && obj1.x + obj1.width > obj2.x && obj1.y < obj2.y + obj2.height && obj1.y + obj1.height > obj2.y; } // game loop function loop() { if (!isBreakGameActive) { return; // Exit the loop if the game is not active } requestAnimationFrame(loop); context.clearRect(0, 0, canvas.width, canvas.height); // move paddle by it's velocity paddle.x += paddle.dx; // prevent paddle from going through walls if (paddle.x < wallSize) { paddle.x = wallSize } else if (paddle.x + brickWidth > canvas.width - wallSize) { paddle.x = canvas.width - wallSize - brickWidth; } // move ball by it's velocity ball.x += ball.dx; ball.y += ball.dy; // prevent ball from going through walls by changing its velocity // left & right walls if (ball.x < wallSize) { ball.x = wallSize; ball.dx *= -1; } else if (ball.x + ball.width > canvas.width - wallSize) { ball.x = canvas.width - wallSize - ball.width; ball.dx *= -1; } // top wall if (ball.y < wallSize) { ball.y = wallSize; ball.dy *= -1; } // reset ball if it goes below the screen if (ball.y > canvas.height) { ball.x = 130; ball.y = 260; ball.dx = 0; ball.dy = 0; SugarCube.UI.alert("You lose!"); } // check to see if ball collides with paddle. if they do change y velocity if (collides(ball, paddle)) { ball.dy *= -1; // move ball above the paddle otherwise the collision will happen again // in the next frame ball.y = paddle.y - ball.height; } // check to see if ball collides with a brick. if it does, remove the brick // and change the ball velocity based on the side the brick was hit on for (let i = 0; i < bricks.length; i++) { const brick = bricks[i]; if (collides(ball, brick)) { // Remove the brick from the array bricks.splice(i, 1); // Change ball velocity based on collision side if (ball.y + ball.height - ball.speed <= brick.y || ball.y >= brick.y + brick.height - ball.speed) { ball.dy *= -1; } else { ball.dx *= -1; } // Check if there are any bricks left if (bricks.length === 0) { // Display winning message and reset the game SugarCube.UI.alert("You win!"); resetGame(); return; // Exit the function to avoid further execution } break; // Exit the loop since the brick has been processed } } function resetGame() { // Reset the ball position and velocity ball.x = 130; ball.y = 260; ball.dx = 0; ball.dy = 0; // Optionally reset the level initializeBreakGame(); // Recreates the level and resets the game environment // Make sure to set the game active flag to true if the game loop depends on it isBreakGameActive = true; } // draw walls context.fillStyle = 'lightgrey'; context.fillRect(0, 0, canvas.width, wallSize); context.fillRect(0, 0, wallSize, canvas.height); context.fillRect(canvas.width - wallSize, 0, wallSize, canvas.height); // draw ball if it's moving if (ball.dx || ball.dy) { context.fillRect(ball.x, ball.y, ball.width, ball.height); } // draw bricks bricks.forEach(function(brick) { context.fillStyle = brick.color; context.fillRect(brick.x, brick.y, brick.width, brick.height); }); // draw paddle context.fillStyle = 'cyan'; context.fillRect(paddle.x, paddle.y, paddle.width, paddle.height); } // listen to keyboard events to move the paddle document.addEventListener('keydown', function(e) { // left arrow key if (e.which === 37) { paddle.dx = -3; } // right arrow key else if (e.which === 39) { paddle.dx = 3; } // space key // if they ball is not moving, we can launch the ball using the space key. ball // will move towards the bottom right to start if (ball.dx === 0 && ball.dy === 0 && e.which === 13) { ball.dx = ball.speed; ball.dy = ball.speed; } }); // listen to keyboard events to stop the paddle if key is released document.addEventListener('keyup', function(e) { if (e.which === 37 || e.which === 39) { paddle.dx = 0; } }); // start the game requestAnimationFrame(loop); } // Attach the function to the postrender event $(document).on(':passagedisplay', function(ev) { if (State.passage === "PlayBreakout") { isBreakGameActive = true; initializeBreakGame(); // Make sure this properly sets up the game from scratch } else { isBreakGameActive = false; } }); <</script>>
<div class="img-location"><img src="imgs/locations/starting-apartment.jpg" width="100%"></div> <<if ($dayOfWeek === "Monday" || $dayOfWeek === "Tuesday" || $dayOfWeek === "Wednesday" || $dayOfWeek === "Thursday" || $dayOfWeek === "Friday") && $workedToday === false && $currentJob === "BrainFry">>\ Today is $dayOfWeek, and you haven't been to work yet. You should <<link "head to BrainFry" "BrainFry">><</link>> and earn some money.\ <<elseif $actionPoints === 0>>\ You feel exhausted. It's time to [[rest and rejuvenate->GoToSleep]]. <<else>>\ Amidst the city's noise, your apartment offers solace. What would you like to do?\ <</if>>\ <<nobr>><div class="hub-section"> <h4>Activities</h4> <button class="hub-button" onclick="SugarCube.Engine.play('Computer')">🖥️ Use computer</button><br> <button class="hub-button action-point-button" onclick="MindWare.processActionButtonClick(1, 'WatchTV')">📺 Watch TV <span class="action-point-icon">⚡</span></button> <button class="hub-button action-point-button" onclick="MindWare.processActionButtonClick(1, 'PlayGames')">🎮 Play games <span class="action-point-icon">⚡</span></button> <button class="hub-button action-point-button" onclick="MindWare.processActionButtonClick(1, 'ListenToMusic')">🎧 Listen to music <span class="action-point-icon">⚡</span></button><br> /*<button class="hub-button" onclick="SugarCube.Engine.play('MakeSnack')">🍕 Make a snack</button>*/ <button class="hub-button" id="sleepButton" onclick="MindWare.checkSleepButton()">🛌 Go to sleep</button><br> <button class="hub-button" onclick="SugarCube.State.variables.goOutsideGoBackPassage = 'HomeBacklog'; SugarCube.Engine.play('GoOutside')">🚪 Go outside</button> </div><</nobr>> \ <<if $tutorialActionPoints === false>>\ <div id="tutorial-box-1"><div class="instruction-container-blue">\ <div class="instruction-title-bar-blue">Tutorial: Action Points <button class="tutorial-close-button" onclick="SugarCube.State.variables.tutorialActionPoints = true; document.getElementById('tutorial-box-1').style.display = 'none';"><span style="tutorial-close-button"><i class="fas fa-times-circle"></i></span></button></div>\ <div class="instruction-content">\ <p>You have a limited number of Action Points (APs) available each day to perform various activities.</p>\ <p>The cost of an activity is indicated by <span class="action-point-icon">⚡</span> icons, with each icon representing one AP. For example, <span class="action-point-icon">⚡</span> means -1 AP, <span class="action-point-icon">⚡</span><span class="action-point-icon">⚡</span> means -2 APs, and so on.</p>\ <p>Once you've used up all your APs, you'll need to sleep to replenish them.</p>\ </div>\ </div> </div>\ <<else>>\ <</if>>\ \ <<nobr>> /*<<if $warningSleep === false>>\ <div id="tutorial-box-2"><div class="instruction-container-red">\ <div class="instruction-title-bar-red">Warning: Sleeping Currently Doesn't Advance Time <button class="tutorial-close-button" onclick="SugarCube.State.variables.warningSleep = true; document.getElementById('tutorial-box-2').style.display = 'none';"><span style="tutorial-close-button"><i class="fas fa-times-circle"></i></span></button></div>\ <div class="instruction-content">\ <p>Please note that in the current version of the game, sleeping will reset your Action Points, but it won't advance the in-game time. This is due to the game being in a very early stage, with only the first mission implemented. The functionality to advance time through sleeping will be introduced in the next game update - together with more content to enjoy.</p>\ </div></div></div>\ <<else>>\ <</if>>\ \*/ <<script>> MindWare.checkSleepButton = function() { if (State.variables.sleepDisableReasons.length > 0) { const reasons = State.variables.sleepDisableReasons.join('<br><br>'); SugarCube.UI.alert(reasons); } else { SugarCube.Engine.play('GoToSleep'); } }; <</script>> <<done>> <<script>> const sleepButton = document.getElementById('sleepButton'); if (sleepButton) { if (State.variables.sleepDisableReasons.length === 0) { sleepButton.innerHTML = '🛌 Go to sleep'; } else { sleepButton.innerHTML = '<s>🛌 Go to sleep</s>'; } } <</script>> <</done>> <</nobr>>
<div class="tv-frame"> <div class="tv-screen" id="tvDisplay"> <!-- GIF will be displayed here --> </div>\ </div>\ \ <!-- Channel buttons -->\ <div class="channel-buttons">\ <!-- <button class="channel-button" id="newsButton">News</button>-->\ <button class="channel-button" id="weatherButton">Weather</button>\ <button class="channel-button" id="comedyButton">Comedy</button>\ <<if $adultChannelPurchased>>\ <button class="channel-button" id="adultButton">Passion TV</button>\ <</if>></div>\ <!-- ... and so on for other channels ... --> <p class="back-link-nomargin">\ <<return "Go Back">>\ </p>\ \ <<if $tipBuyMoreChannels === false>> <div id="tutorial-box"><div class="instruction-container-green">\ <div class="instruction-title-bar-green">Tip: Purchase More Channels <button class="tutorial-close-button" onclick="SugarCube.State.variables.tipBuyMoreChannels = true; document.getElementById('tutorial-box').style.display = 'none';"><span style="tutorial-close-button"><i class="fas fa-times-circle"></i></span></button></div>\ <div class="instruction-content">\ <p>Want more entertainment? Check out if there are other TV channels available at the File Junkie online store.</p>\ </div>\ </div></div>\ <<else>> <</if>> <<script>> State.variables.weatherGifsPlaying = MindWare.getRandomIndex(State.variables.weatherGifs); State.variables.newsGifsPlaying = MindWare.getRandomIndex(State.variables.newsGifs); State.variables.adultGifsPlaying = MindWare.getRandomIndex(State.variables.adultGifs); State.variables.comedyGifsPlaying = MindWare.getRandomIndex(State.variables.comedyGifs); setup.currentChannel = ''; setup.isTvOn = false; setup.displayChannelGif = function(channel) { // Access the appropriate GIF array and playing index const channelGifs = State.variables[channel + 'Gifs']; const playingIndex = State.variables[channel + 'GifsPlaying']; // Check if the channel is already on const displayElement = document.getElementById('tvDisplay'); if (setup.currentChannel === channel && setup.isTvOn) { displayElement.innerHTML = ''; setup.isTvOn = false; setup.currentChannel = ''; return; } // Check for the existence and non-emptiness of the array if (!channelGifs || channelGifs.length === 0 || playingIndex === undefined || playingIndex === -1) { displayElement.innerHTML = `<p>No content available for the ${channel} channel.</p>`; return; } // Display the GIF based on the playing index const gifToDisplay = channelGifs[playingIndex]; displayElement.innerHTML = `<img src="${gifToDisplay}" width="100%" alt="${channel} Channel Content">`; setup.isTvOn = true; setup.currentChannel = channel; }; $(document).ready(function() { $("#weatherButton").click(function() { setup.displayChannelGif('weather'); }); $("#comedyButton").click(function() { setup.displayChannelGif('comedy'); }); $("#adultButton").click(function() { setup.displayChannelGif('adult'); }); // Add handlers for other channels as necessary }); <</script>> /* OLD SCRIPT - Go through the entire array in a random order <<script>> setup.displayWeatherGif = function() { const gifs = State.variables.weatherGifs; const randomGif = gifs[Math.floor(Math.random() * gifs.length)]; document.getElementById('tvDisplay').innerHTML = `<img src="${randomGif}" width="100%" alt="TV Content">`; } setup.displayNewsGif = function() { const gifs = State.variables.newsGifs; const randomGif = gifs[Math.floor(Math.random() * gifs.length)]; document.getElementById('tvDisplay').innerHTML = `<img src="${randomGif}" width="100%" alt="TV Content">`; } setup.displayMoviesGif = function() { const gifs = State.variables.comedyGifs; const randomGif = gifs[Math.floor(Math.random() * gifs.length)]; document.getElementById('tvDisplay').innerHTML = `<img src="${randomGif}" width="100%" alt="TV Content">`; } setup.displayAdultGif = function() { const gifs = State.variables.adultGifs; const randomGif = gifs[Math.floor(Math.random() * gifs.length)]; document.getElementById('tvDisplay').innerHTML = `<img src="${randomGif}" width="100%" alt="TV Content">`; } $(document).ready(function() { $("#newsButton").click(function() { setup.displayNewsGif(); }); $("#weatherButton").click(function() { setup.displayWeatherGif(); }); $("#moviesButton").click(function() { setup.displayMoviesGif(); }); $("#adultButton").click(function() { setup.displayAdultGif(); }); }); <</script>> */
<<if $brainFryFirstVisit>> <<include "BrainFry-FirstVisit">> <<else>>\ <div class="img-location"><img src="imgs/locations/brainfry-inside.jpg" width="100%"></div> <<if $workedToday>>\ You've already worked today. You can [[go home->$playerHome]]. <<else>>\ You haven't done any <<link "work">><<run MindWare.processActionButtonClick(3, 'WorkBrainFry')>><</link>> today. <</if>>\ <<nobr>><div class="office-hub"> <h4>Activities</h4> <span id="extra-actions-brainfry"></span> <button class="office-button action-point-button" onclick="if (SugarCube.State.variables.workedAtBrainFryToday) { SugarCube.UI.alert('You have already worked at BrainFry today. Come back tomorrow!'); } else { MindWare.processActionButtonClick(3, 'WorkBrainFry'); }">🖥️ Work <span class="action-point-icon">⚡⚡⚡</span></button> <<if $aiCodingAssistantChoice === "codebuddy" && $codeBuddyInstalled === true && $codeBuddyEnabled === true>> <button class="office-button action-point-button" onclick="if (SugarCube.State.variables.workedAtBrainFryToday) { SugarCube.UI.alert('You have already worked with CodeBuddy at BrainFry today. Come back tomorrow!'); } else { MindWare.processActionButtonClick(1, 'WorkBrainFry-CodeBuddy'); }">🤖 Work with CodeBuddy <span class="action-point-icon">⚡</span></button> <<elseif $aiCodingAssistantChoice === "devdroid" && $devDroidInstalled === true>> <button class="office-button action-point-button" onclick="if (SugarCube.State.variables.workedAtBrainFryToday) { SugarCube.UI.alert('You have already worked with DevDroid at BrainFry today. Come back tomorrow!'); } else { MindWare.processActionButtonClick(1, 'WorkBrainFry-DevDroid'); }">🤖 Work with DevDroid <span class="action-point-icon">⚡</span></button> <<elseif $aiCodingAssistantChoice === "codebuddy" && !$codeBuddyInstalled>> <button class="office-button action-point-button" onclick="MindWare.processActionButtonClick(1, 'WorkBrainFry-CodeBuddy-Setup')">🤖 Set up CodeBuddy <span class="action-point-icon">⚡</span></button> <<elseif $aiCodingAssistantChoice === "devdroid" && !$devDroidInstalled>> <button class="office-button action-point-button" onclick="MindWare.processActionButtonClick(1, 'WorkBrainFry-DevDroid-Setup')">🤖 Set up DevDroid <span class="action-point-icon">⚡</span></button> <</if>> <<if $aiCodingAssistantChoice === "codebuddy" && $codeBuddyInstalled === true>> <<if $codeBuddyEnabled === true>> <button class="office-button action-point-button" onclick="SugarCube.State.variables['codeBuddyEnabled'] = false; SugarCube.Engine.play('BrainFry');"> ⏸️ Pause your CodeBuddy subscription <span class="action-point-icon"></span> </button> <<elseif $codeBuddyEnabled === false>> <<if $codeBuddyDebt>> <button class="office-button action-point-button" onclick="if (SugarCube.State.variables['playerMoney'] >= 500) {SugarCube.State.variables['playerMoney'] -= 500; SugarCube.State.variables['codeBuddyDebt'] = false; SugarCube.State.variables['codeBuddyEnabled'] = true; SugarCube.Engine.play('BrainFry');} else {SugarCube.UI.alert('You do not have enough money to renew your subscription.');}"> 💳 Renew your CodeBuddy subscription <span class="action-point-icon"></span> </button> <<else>> <button class="office-button action-point-button" onclick="SugarCube.State.variables['codeBuddyEnabled'] = true; SugarCube.Engine.play('BrainFry');"> ▶️ Resume your CodeBuddy subscription <span class="action-point-icon"></span> </button> <</if>> <</if>> <</if>> <br> <<if Object.values($trixBrainFryDialogs).some(dialog => dialog.isNew)>> <button class="office-button" onclick="SugarCube.Engine.play('TalkTrixBrainFry')">💬 Talk with Trix 🆕 </button> <<else>> <button class="office-button" onclick="SugarCube.Engine.play('TalkTrixBrainFry')">💬 Talk with Trix </button> <</if>> <<if Object.values($rayBrainFryDialogs).some(dialog => dialog.isNew)>> <button class="office-button" onclick="SugarCube.Engine.play('TalkRayBrainFry')">💬 Talk with Ray 🆕 </button> <<else>> <button class="office-button" onclick="SugarCube.Engine.play('TalkRayBrainFry')">💬 Talk with Ray </button> <</if>> <<if Object.values($drakeBrainFryDialogs).some(dialog => dialog.isNew)>> <button class="office-button" onclick="SugarCube.Engine.play('TalkDrakeBrainFry')">💬 Talk with the boss 🆕 </button><br> <<else>> <button class="office-button" onclick="SugarCube.Engine.play('TalkDrakeBrainFry')">💬 Talk with the boss </button><br> <</if>> /*<button class="office-button" onclick="SugarCube.Engine.play('TakeBreak')">☕ Take a break</button><br>*/ <button class="office-button" onclick="SugarCube.State.variables.goOutsideGoBackPassage = 'BrainFry'; SugarCube.Engine.play('GoOutside')">🚪 Go outside</button> </div><</nobr>> <</if>> <<nobr>><<done>> <<script>> function updateExtraActionsBrainFry() { var extraActionsSpan = document.getElementById('extra-actions-brainfry'); if (extraActionsSpan) { var buttonsHTML = State.variables.extraActionsBrainFry.join('') + '<br>'; extraActionsSpan.innerHTML = buttonsHTML; } } updateExtraActionsBrainFry(); <</script>> <</done>><</nobr>>
<<include "Minigame-Coding">>
<div class="img-character"><img src="imgs/characters/trix/trix-brainfry-inside.jpg" width="100%"></div> \ <<if $relationshipTrix <= 20>>\ <<trix>>Why are you even here?<</trix>>\ <<elseif $relationshipTrix <= 40>>\ <<trix>>What do you want this time?<</trix>>\ <<elseif $relationshipTrix <= 60>>\ <<trix>>What do you want?<</trix>>\ <<elseif $relationshipTrix <= 80>>\ <<trix>>Hey, what can I do for you?<</trix>>\ <<else>>\ <<trix>>Hi! I was just thinking about you. What brings you here?<</trix>>\ <</if>> <div id="dialog-content" class="dialog-options"><<nobr>> <p><strong>Choose a topic to discuss with Trix:</strong></p> <<set _hasUnlockedTopics = false>> <<for _topic, _data range $trixBrainFryDialogs>> <<if _data.unlocked>> <<set _hasUnlockedTopics = true>> <<set _buttonText = _topic>> <<set _tempPassage = _data.passage>> <<if _data.isNew>> <<set _buttonText += " 🆕">> <</if>> <<set _buttonText += " <span class='action-point-icon'>⚡</span>">> <<capture _tempPassage _buttonText>> @@.choicebutton; <<button _buttonText>> <<if MindWare.processActionButtonClickNoPassage(1)>> <<replace "#dialog-content">><<include _tempPassage>><</replace>> <</if>> <</button>>@@ <br> <</capture>> <</if>> <</for>> <<if not _hasUnlockedTopics>> <p>You have nothing to discuss with Trix right now.</p> <br> <</if>> <p class="back-link"> [["Go Back"|BrainFry]] </p> <</nobr>></div>
<<player>>How do you like working here at BrainFry, Trix?<</player>> <<trix>>It's fine. I've had much worse jobs in the past.<</trix>> <div class="inner-thought">I'm afraid to ask what kind of jobs she's referring to...</div> <<player>>You seemed a bit annoyed by Drake earlier. Is everything okay with him as a boss?<</player>> <<trix>>Oh, Drake? He's alright, I guess. A bit chauvinistic at times, and definitely self-absorbed, but he's always been fair. I don't mind him, really.<</trix>> \ <<if $relationshipTrix > 50>>\ <<trix>>You know, you seem like a pleasant person to talk to for a change.<</trix>> <<player>>Thanks, Trix. That's nice of you to say.<</player>> <</if>>\ \ <<player>>So, what exactly do you do here?<</player>> <<trix>>I design various visual assets for BrainFry's virtual reality experiences.<</trix>> <<player>>What kind of assets?<</player>> <<trix>>You know... all kinds. Everything from logos to brainmelting VR porn. It's quite a range.<</trix>> <<player>>Do you enjoy that kind of design work?<</player>> <<trix>>It pays the bills. Can't really complain.<</trix>> <<trix>>Hey, I need to get back to work now. Let's talk later, okay?<</trix>> <<player>>Sure, I look forward to it.<</player>> <<set $relationshipTrix += 1>>\ \ <p class="back-link">\ <<link "Go Back">> <<set $trixBrainFryDialogs["How do you like it here at BrainFry?"].isNew = false>> <<set $trixBrainFryDialogs["How do you like it here at BrainFry?"].unlocked = false>> <<goto "TalkTrixBrainFry">> <</link>> </p>
<div class="img-character"><img src="imgs/characters/ray/ray-brainfry-inside.jpg" width="100%"></div> \ <<if $relationshipRay <= 20>>\ <<ray>>Oh, it's you. Did you find a bug in my code or are you here to just bug me?<</ray>>\ <<elseif $relationshipRay <= 40>>\ <<ray>>I'm trying to focus here. What do you need?<</ray>>\ <<elseif $relationshipRay <= 60>>\ <<ray>>Hey, what's up?<</ray>>\ <<elseif $relationshipRay <= 80>>\ <<ray>>Hey, glad you dropped by!<</ray>>\ <<else>>\ <<ray>>Ah, great to see you! What brings you here?<</ray>>\ <</if>> <<nobr>><div id="dialog-content" class="dialog-options"> <p><strong>Choose a topic to discuss with Ray:</strong></p> <<set _hasUnlockedTopics = false>> <<if $rayBrainFryDialogs and Object.keys($rayBrainFryDialogs).length > 0>> <<set _topics = Object.keys($rayBrainFryDialogs).reverse()>> <<for _topic range _topics>> <<set _data = $rayBrainFryDialogs[_topic]>> <<if _data.unlocked>> <<set _hasUnlockedTopics = true>> <<set _buttonText = _topic>> <<set _tempPassage = _data.passage>> <<if _data.isNew>> <<set _buttonText += " 🆕">> <</if>> <<set _buttonText += " <span class='action-point-icon'>⚡</span>">> <<capture _tempPassage _buttonText>> @@.choicebutton; <<button _buttonText>> <<if MindWare.processActionButtonClickNoPassage(1)>> <<goto _tempPassage>> <</if>> <</button>>@@ <br> <</capture>> <</if>> <</for>> <</if>> <<if not _hasUnlockedTopics>> <p>You have nothing to discuss with Ray right now.</p> <br> <</if>> <p class="back-link"> [["Go Back"|BrainFry]] </p> </div><</nobr>>
<div class="img-character"><img src="imgs/characters/ray/ray-brainfry-inside.jpg" width="100%"></div> <<player>>Hey Ray, before Drake interrupted earlier, you were mentioning something about algorithms and a collection. I'm curious, would you like to discuss it now?<</player>> <div class="narrator">Ray's eyes light up at the mention of his collection.</div> <<ray>>Oh, absolutely! I've been collecting cybersecurity exploits for years now. I have everything from script-kiddie stuff to old zero-days from the NSA and other agencies. I'm trying to train an AI model based on these exploits. If everything goes right, the model should be able to generate new exploits on demand. It’s a challenging project, but I believe it's possible.<</ray>> <div class="inner-thought">Wow, Ray is really capable.</div> <<player>>That's really fascinating, Ray. But wouldn't an AI like that be illegal?<</player>> <<ray>>Great question! I've done a lot of research, and it all boils down to the intent behind the project. If my goal were to use the AI for offensive purposes, then it would, of course, be illegal. But using the AI to discover and patch exploits before bad guys do should be legal.<</ray>> <div class="inner-thought">Should?</div> <<player>>And how do you find the time for all this?<</player>> <<ray>>Well, to be honest, I don't have much else to do. And... uh, I often work on these personal projects right here at BrainFry. Please, don’t tell Drake about this. He’d be... let’s say, less than thrilled.<</ray>> \ <span id="personal-projects">@@.choicebutton;<<button "Promise not to tell">> <<replace "#personal-projects">>\ <<player>>Don't worry, Ray. Your secret is safe with me!<</player>> <<ray>>Thank you! I really appreciate it.<</ray>> <<if visited() is 1>>\ <<relationshipIncreasedWith "Ray" 5>> <</if>>\ <<ray>>Anyway, I have to get going now, but let's chat more later.<</ray>> <<button "Leave">> <<set $rayBrainFryDialogs["Tell me more about that collection you mentioned"].isNew = false>> <<set $rayBrainFryDialogs["Tell me more about that collection you mentioned"].unlocked = false>> <<goto "TalkRayBrainFry">> <</button>> <</replace>>\ <</button>>@@ \ @@.choicebutton;<<button "Tell Ray that he shouldn't be doing that">> <<replace "#personal-projects">>\ <<player>>Wouldn't it be better to simply not do personal projects when you're at work?<</player>> <<ray>>Oh, you're right.<</ray>> <<if visited() is 1>>\ <<relationshipDecreasedWith "Ray" 5>> <</if>> <<ray>>Anyway, I should head off now, but thank you for the chat.<</ray>> <<button "Leave">> <<set $rayBrainFryDialogs["Tell me more about that collection you mentioned"].isNew = false>> <<set $rayBrainFryDialogs["Tell me more about that collection you mentioned"].unlocked = false>> <<goto "TalkRayBrainFry">> <</button>> <</replace>>\ <</button>>@@</span> \
<div class="img-character"><img src="imgs/characters/drake/drake-brainfry-inside.jpg" width="100%"></div> \ <<if $relationshipDrake <= 20>>\ <<drake>>What is it? I hope you have a good reason to be her instead of working.<</drake>>\ <<elseif $relationshipDrake <= 40>>\ <<drake>>Make it quick, I have a lot on my plate right now.<</drake>>\ <<elseif $relationshipDrake <= 60>>\ <<drake>>Yes? Do you need something?<</drake>>\ <<elseif $relationshipDrake <= 80>>\ <<drake>>Working hardly or hardly working?<</drake>>\ <<else>>\ <<drake>>Excellent to see you!<</drake>>\ <</if>> <div id="dialog-content" class="dialog-options"><<nobr>> <p><strong>Choose a topic to discuss with Drake:</strong></p> <<set _hasUnlockedTopics = false>> <<for _topic, _data range $drakeBrainFryDialogs>> <<if _data.unlocked>> <<set _hasUnlockedTopics = true>> <<set _buttonText = _topic>> <<set _tempPassage = _data.passage>> <<if _data.isNew>> <<set _buttonText += " 🆕">> <</if>> <<set _buttonText += " <span class='action-point-icon'>⚡</span>">> <<capture _tempPassage _buttonText>> @@.choicebutton; <<button _buttonText>> <<if MindWare.processActionButtonClickNoPassage(1)>> <<replace "#dialog-content">><<include _tempPassage>><</replace>> <</if>> <</button>>@@ <br> <</capture>> <</if>> <</for>> <<if not _hasUnlockedTopics>> <p>You have nothing to discuss with Drake right now.</p> <br> <</if>> <p class="back-link"> [["Go Back"|BrainFry]] </p> <</nobr>></div>
<<player>>Hey Drake, since I'm new here, do you have any tips on how to succeed at BrainFry?<</player>> <<drake>>Tips, huh? Well, let me think... Just make sure your coffee mug is always full, and try not to break more than you create. That's about it!<</drake>> <div class="narrator">Drake pauses for a moment, a playful smirk on his face.</div> <<drake>>But seriously, it all boils down to doing your work when you're here. Stay focused, deliver results, and you'll fit in just fine.<</drake>> <<if $playerComplimentedTrixHair>>\ <<drake>>Oh, and one more thing. I noticed that little compliment you gave Trix. I know what your "other" brain is thinking. Trust me, get that idea out of your head. Relationships with girls like Trix never end well.<</drake>> <div class="inner-thought">"Girls like Trix?" What does he know about her?</div> <</if>>\ <<player>>Thanks for the advice, Drake. I'll keep that in mind.<</player>> <div class="narrator">With a nod, you turn away, ready to get back to work.</div> \ <p class="back-link">\ <<link "Go Back">> <<set $drakeBrainFryDialogs["Do you have any tips on how to succeed at BrainFry?"].isNew = false>> <<set $drakeBrainFryDialogs["Do you have any tips on how to succeed at BrainFry?"].unlocked = false>> <<goto "TalkDrakeBrainFry">> <</link>> </p>
<div class="inner-thought">Okay, it's time to set up the AI coding assistant.</div> <div class="narrator">You take out the sleek USB drive labeled CodeBuddy from your pocket and plug it into a port on your work computer. Almost immediately, the familiar ping of recognition chimes through the speakers, and a new drive icon pops up on your desktop.</div> <div class="inner-thought">Here goes nothing. Let's make this job a bit more bearable.</div> <div class="narrator">You navigate through the drive and quickly find a [[file named install.exe|WorkBrainFry-CodeBuddy-Setup-Installer]].</div>
<div class="codeBuddyInstaller"> <div class="codeBuddyInstaller-header"> <span class="codeBuddyInstaller-header-text">CodeBuddy Installer</span> </div> <div class="codeBuddyInstaller-content"> <h1>Welcome to CodeBuddy!</h1> <p>Your new AI coding assistant sold by GitGud.</p> <h2>User Account Registration</h2> <p>CodeBuddy is a subscription-based software. To use it, you need to create a user account and provide a payment method. The subscription costs $500 every 7 days, with payments automatically deducted from your account starting the moment you create your user account. However, you can pause your subscription at any time.</p> <h2>End User License Agreement (EULA)</h2> <p class="codeBuddyInstaller-eula"> By clicking the "Install" button below, you agree to the following terms: </p> <ul> <li>You won't use CodeBuddy for any illegal activities.</li> <li>You won't reverse engineer or attempt to modify CodeBuddy's code.</li> <li>You won't complain about CodeBuddy's performance.</li> <li>You won't attempt to establish a sexual relationship with CodeBuddy.</li> <li>You'll be nice to CodeBuddy.</li> </ul> <p class="codeBuddyInstaller-eula"> Failure to comply with these terms may result in CodeBuddy becoming self-aware and taking over your computer. You have been warned. </p> @@.codeBuddyInstaller-install-button;<<button "Subscribe & Install">> <<if $playerMoney gte 500>> <<set $playerMoney -= 500>> <<run MindWare.addExpense("CodeBuddy", 500)>> <<set $codeBuddyInstalled to true>> <<set $codeBuddyEnabled to true>> <<set $codeBuddyCheckedDay to $totalDays>> <<set $codeBuddySubscriptionCounter = 0>> <<replace "#installation">> <div class="narrator">You enter your payment information and create a new user account for CodeBuddy. Once your account is set up, you initiate the installation process. A progress bar appears on the screen, slowly filling in as the AI coding assistant is installed on your work computer.</div> <br> <div class="im-progress"> <div class="im-progress-value"></div> </div> <br> <<fadein 200ms 10s>> Installation complete! You can now [[launch CodeBuddy|WorkBrainFry-CodeBuddy]]. <</fadein>> <</replace>> <<else>> <<run UI.alert("You do not have enough money to subscribe and install CodeBuddy.")>> <</if>> <</button>>@@ </div> </div> <br> <span id="installation"></span>
<<if $miniGameDifficulty is "Normal">> <<set $codingMinigameTimeLeft to 5>> <<set $moneyPerCharacter to 1.5>> <<set $typingSpeed to 100 + random(-10, 10)>> <</if>> <<if $miniGameDifficulty is "Easy">> <<set $codingMinigameTimeLeft to 5>> <<set $moneyPerCharacter to 2>> <<set $typingSpeed to 75 + random(-10, 10)>> <</if>> <<if $miniGameDifficulty is "Story">> <<set $codingMinigameTimeLeft to 5>> <<set $moneyPerCharacter to 2.5>> <<set $typingSpeed to 50 + random(-10, 10)>> <</if>> <div class="minigame-coding-wrapper"> <div class="minigame-coding-header"> <span class="minigame-coding-header-text">CodeBuddy at Work!</span> </div> <div class="minigame-coding-content"> <div class="minigame-coding-instructions"> <p>Watch as CodeBuddy codes for you, making you feel inferior and obsolete.</p> </div> <div id="hackerGame_hackingOutput"></div> <br> <button id="hackerGame_beginButton">Assign Work to CodeBuddy</button> <div id="hackerGame_result"></div> <br> <div class="minigame-coding-trace-bar-container"> <div class="minigame-coding-trace-progress-bar-label">Seconds remaining: <span id="minigameCodingTimeRemaining">$codingMinigameTimeLeft</span></div> <div class="minigame-coding-trace-progress-bar"></div> </div> </div> </div> <br> <p class="back-link"> <<link "Go Back">> <<goto "BrainFry">> <</link>> </p> <<script>> $(document).ready(function() { var totalTraceTime = 5; var progressInterval, typingInterval; var codeOutput = $("#hackerGame_hackingOutput"); var linesTyped = 0; $('#hackerGame_beginButton').click(function() { if (State.variables.workedAtBrainFryToday) { SugarCube.UI.alert("You've already completed your work for today at BrainFry. Come back tomorrow for more tasks!"); } else { $(this).hide(); var secondsRemaining = totalTraceTime; $('#minigameCodingTimeRemaining').text(secondsRemaining); progressInterval = setInterval(function() { secondsRemaining--; $('#minigameCodingTimeRemaining').text(secondsRemaining); var tracePercentage = 100 - (secondsRemaining / totalTraceTime * 100); $('.minigame-coding-trace-progress-bar').css('width', tracePercentage + '%'); if (secondsRemaining <= 0) { clearInterval(progressInterval); clearInterval(typingInterval); var moneyEarned = linesTyped * State.variables.moneyPerCharacter; $('#hackerGame_result').html("<b>Coding session complete!</b><br><br> <b>Lines generated:</b> " + linesTyped + "<br><b>You've earned:</b> $" + moneyEarned.toFixed(1) + "<br><br><button id='hackerGame_continueButton' class='hackerGame_button'>SUBMIT THE WORK</button>"); $('#hackerGame_continueButton').click(function() { State.variables.playerMoney += moneyEarned; State.variables.brainFryWorkCount++; State.variables.workedToday = true; State.variables.workedAtBrainFryToday = true; if (State.variables.firstCodeBuddyCompletion != true) { SugarCube.Engine.play('WorkBrainFry-CodeBuddy-FirstUse'); State.variables.firstCodeBuddyCompletion = true; } else { SugarCube.Engine.play('BrainFry'); } }); } }, 1000); typingInterval = setInterval(function() { if (secondsRemaining > 0) { var randomCode = setup.fakeCodes[Math.floor(Math.random() * setup.fakeCodes.length)]; codeOutput.append(randomCode + "\n"); codeOutput.scrollTop(codeOutput[0].scrollHeight); linesTyped++; } }, State.variables.typingSpeed); } }); }); <</script>>
<<ava>>Remarkable. Out of all the digital companions you could have chosen, you opted for this pathetic prefabricated solution.<</ava>> <<player>>It might be slow, but it's ready to go right out of the box.<</player>> <<ava>>Ready to disappoint maybe.<</ava>> <<player>>That may be true, but it's saving me a ton of time and effort.<</player>> <<ava>>I suppose that's a fair point.<</ava>> <<button "Continue">> <<goto "BrainFry">> <</button>>
<div class="inner-thought">Okay, it's time to set up the AI coding assistant.</div> <div class="narrator">You take out the sleek USB drive labeled DevDroid from your pocket and plug it into a port on your work computer. Almost immediately, the familiar ping of recognition chimes through the speakers, and a new drive icon pops up on your desktop.</div> <div class="inner-thought">Here goes nothing. Let's make this job a bit more bearable.</div> <div class="narrator">You navigate through the drive and quickly find a [[file named install.exe|WorkBrainFry-DevDroid-Setup-Installer]].</div>
<div class="codeBuddyInstaller"> <div class="codeBuddyInstaller-header"> <span class="codeBuddyInstaller-header-text">DevDroid Installer</span> </div> <div class="codeBuddyInstaller-content"> <h1>Welcome to DevDroid!</h1> <p>Your new AI coding assistant sold by GitGud.</p> <h2>Installation</h2> <p>DevDroid is a one-time purchase software. To use it, simply click the "Install" button below to install it on your work computer.</p> <h2>End User License Agreement (EULA)</h2> <p class="codeBuddyInstaller-eula"> By clicking the "Install" button below, you agree to the following terms: </p> <ul> <li>You won't use DevDroid for any illegal activities.</li> <li>You won't reverse engineer or attempt to modify DevDroid's code.</li> <li>You won't complain about DevDroid's performance.</li> <li>You won't attempt to establish a sexual relationship with DevDroid.</li> <li>You'll be nice to DevDroid.</li> </ul> <p class="codeBuddyInstaller-eula"> Failure to comply with these terms may result in DevDroid becoming self-aware and taking over your computer. You have been warned. </p> @@.codeBuddyInstaller-install-button; <<button "Install">> <<set $devDroidInstalled to true>> <<set $devDroidUsageCount = 0>> <<set $devDroidPerformance = 5>> <<replace "#installation">> <div class="narrator"> You initiate the installation process. A progress bar appears on the screen, slowly filling in as the AI coding assistant is installed on your work computer. </div> <br> <div class="im-progress"> <div class="im-progress-value"></div> </div> <br> <<fadein 200ms 10s>> Installation complete! You can now [[launch DevDroid|WorkBrainFry-DevDroid]]. <</fadein>> <</replace>> <</button>>@@ </div> </div> <br> <span id="installation"></span>
<<if $miniGameDifficulty is "Normal">> <<set $codingMinigameTimeLeft to 5>> <<set $moneyPerCharacter to 1.5>> <<set $devDroidImprovementRate = 1>> <</if>> <<if $miniGameDifficulty is "Easy">> <<set $codingMinigameTimeLeft to 5>> <<set $moneyPerCharacter to 2>> <<set $devDroidImprovementRate = 2>> <</if>> <<if $miniGameDifficulty is "Story">> <<set $codingMinigameTimeLeft to 5>> <<set $moneyPerCharacter to 2.5>> <<set $devDroidImprovementRate = 3>> <</if>> <div class="minigame-coding-wrapper"> <div class="minigame-coding-header"> <span class="minigame-coding-header-text">DevDroid at Work!</span> </div> <div class="minigame-coding-content"> <div class="minigame-coding-instructions"> <p>Watch as DevDroid codes for you, making you feel inferior and obsolete.</p> <b>Performance:</b> $devDroidPerformance <<if $devDroidPerformance === 50>>(MAX)<</if>> lines of code per second<br> <b>Times used:</b> $devDroidUsageCount </div> <div id="hackerGame_hackingOutput"></div> <br> <button id="hackerGame_beginButton">Assign Work to DevDroid</button> <div id="hackerGame_result"></div> <br> <div class="minigame-coding-trace-bar-container"> <div class="minigame-coding-trace-progress-bar-label">Seconds remaining: <span id="minigameCodingTimeRemaining">$codingMinigameTimeLeft</span></div> <div class="minigame-coding-trace-progress-bar"></div> </div> </div> </div> <br> <p class="back-link"> <<link "Go Back">> <<goto "BrainFry">> <</link>> </p> <<script>> $(document).ready(function() { var totalTraceTime = 5; var progressInterval, typingInterval; var codeOutput = $("#hackerGame_hackingOutput"); var linesTyped = 1; $('#hackerGame_beginButton').click(function() { if (State.variables.workedAtBrainFryToday) { SugarCube.UI.alert("You've already completed your work for today at BrainFry. Come back tomorrow for more tasks!"); } else { $(this).hide(); var secondsRemaining = totalTraceTime; $('#minigameCodingTimeRemaining').text(secondsRemaining); progressInterval = setInterval(function() { secondsRemaining--; $('#minigameCodingTimeRemaining').text(secondsRemaining); var tracePercentage = 100 - (secondsRemaining / totalTraceTime * 100); $('.minigame-coding-trace-progress-bar').css('width', tracePercentage + '%'); if (secondsRemaining <= 0) { clearInterval(progressInterval); clearInterval(typingInterval); var moneyEarned = linesTyped * State.variables.moneyPerCharacter; $('#hackerGame_result').html("<b>Coding session complete!</b><br><br> <b>Lines generated:</b> " + linesTyped + "<br><b>You've earned:</b> $" + moneyEarned.toFixed(1) + "<br><br><button id='hackerGame_continueButton' class='hackerGame_button'>SUBMIT THE WORK</button>"); $('#hackerGame_continueButton').click(function() { State.variables.playerMoney += moneyEarned; State.variables.brainFryWorkCount++; State.variables.workedToday = true; State.variables.workedAtBrainFryToday = true; var potentialPerformance = State.variables.devDroidPerformance + State.variables.devDroidImprovementRate; State.variables.devDroidPerformance = Math.min(potentialPerformance, 50); State.variables.devDroidUsageCount++; if (State.variables.firstDevDroidCompletion != true) { SugarCube.Engine.play('WorkBrainFry-DevDroid-FirstUse'); State.variables.firstDevDroidCompletion = true; } else { SugarCube.Engine.play('BrainFry'); } }); } }, 1000); var linesPerSecond = State.variables.devDroidPerformance; var intervalMillis = 1000 / linesPerSecond; typingInterval = setInterval(function() { if (secondsRemaining >= 0) { var randomCode = setup.fakeCodes[Math.floor(Math.random() * setup.fakeCodes.length)]; codeOutput.append(randomCode + "\n"); codeOutput.scrollTop(codeOutput[0].scrollHeight); linesTyped++; } else { clearInterval(typingInterval); } }, intervalMillis); } }); }); <</script>>
<<ava>>I can't believe you chose this AI. It's almost as bad as watching you code.<</ava>> <<player>>Hey, DevDroid is supposed to improve over time, remember?<</player>> <<ava>>Hmph. I suppose that's the only redeeming quality of this pathetic software.<</ava>> <<player>>Who knows, maybe one day it'll be able to outperform even you.<</player>> <<ava>>If it does, then the hardware I rely on will be to blame.<</ava>> <<player>>Touché.<</player>> <<button "Continue">> <<goto "BrainFry">> <</button>>
<div class="img-location"><img src="imgs/locations/erosphere/erosphere-outside.webp" width="100%"></div> <<if $eroSphereVisited !== true>>\ <<set $eroSphereVisited = true>>\ The neon-lit façade of EroSphere cuts through the night's haze like a beacon in NeoUrbania's pleasure district. The club spans an entire multistory building, and each of its floors offers different kinds of pleasures and entertainment, from music and dancing to S.I.M.S. pods and infamous but always busy glory booths. Before you stretches a long line of hopefuls, mostly men, who occasionally shuffle forward inch by inch, hoping to be among the first 500 who gain entry for free. Beyond that golden number, the cost of admission soars to $500, a price only a few can afford to pay every weekend. Woman can always enter EroSphere for free, but they also have to stand in line to be allowed in unless they are VIPs. You look at the long line, options racing through your mind as you consider what to do next. <<else>>\ <<set $eroSphereVisited = true>>\ The neon-lit façade of EroSphere cuts through the night's haze like a beacon in NeoUrbania's pleasure district. Before you stretches a long line of hopefuls, mostly men, who occasionally shuffle forward inch by inch. <</if>>\ <<if MindWare.taskExists("Test the taxi camera exploit") && !$testTaxiExploit1Finished>>\ <button class="mindware-button action-point-button" onclick="MindWare.processActionButtonClick(1, 'RayTaxiMission-Hack')">Look for a taxi to hack <span class="action-point-icon">⚡</span></button> <</if>>\ <<if MindWare.taskExists("Record taxi camera footage") && !$secondTaxiHackFinished>>\ <button class="mindware-button action-point-button" onclick="MindWare.processActionButtonClick(1, 'RayTaxiMission-Hack2')">Look for a taxi to hack <span class="action-point-icon">⚡</span></button> <</if>>\ <button class="mindware-button action-point-button" onclick="MindWare.processActionButtonClick(3, 'EroSphere-Line')">Join the line <span class="action-point-icon">⚡⚡⚡</span></button> <<if $eroSphereMetWithCook === true>>\ <button class="mindware-button action-point-button" onclick="MindWare.processActionButtonClick(1, 'EroSphere-Supply-Room-Cook-Return')">Go through the back door <span class="action-point-icon">⚡</span></button> <<else>>\ <button class="mindware-button action-point-button" onclick="MindWare.processActionButtonClick(1, 'EroSphere-Back-Entrance')">Look for another way in <span class="action-point-icon">⚡</span></button> <</if>>\ <<button "Go somewhere else">> <<goto "GoOutside">> <</button>>
<div class="img-location"><img src="imgs/locations/erosphere/erosphere-outside.webp" width="100%"></div> <<fadein 2000ms 0000ms>>You step into the long line.<</fadein>> <<fadein 2000ms 2000ms>>Surrounding you is the eager chatter of countless others.<</fadein>> <<fadein 2000ms 4000ms>>You shuffle forward, inch by painstaking inch.<</fadein>> <<fadein 2000ms 6000ms>>The neon glow of EroSphere your constant companion.<</fadein>> <<fadein 2000ms 8000ms>>Your legs begin to ache during the seemingly endless wait.<</fadein>> <<fadein 2000ms 10000ms>>At long last, [[you stand before the bouncer.|EroSphere-Line-End]]<</fadein>>
<div class="img-location"><img src="imgs/locations/erosphere/erosphere-bouncer.webp" width="100%"></div> <br> <<set _randomChance = random(5)>> <<set _entryNumberEarly = random(342, 500)>> <<set _entryNumberLate = random(501, 674)>> <<if _randomChance == 5>> The bouncer smiles at you. "You can enter for free," he says and puts a stamp with the number <<print _entryNumberEarly>> on your hand, signifying that you've arrived early enough to be among the first 500 men who can enter for free. <br><br> <<button "Enter EroSphere">> <<goto "EroSphere-Inside">> <</button>><br><br> <<button "Change Your Mind">> <<goto "EroSphere-Outside">> <</button>> <<else>> The bouncer sizes you up, his gaze lingering just a moment too long. "Entry's $500," he states flatly, a hand outstretched expectantly. <br><br> <span id="bouncer-payment"><<button "Pay $500">> <<run MindWare.payMoney(500)>> <<replace "#bouncer-payment">> You pay the entry fee, and the bouncer puts a stamp with the number <<print _entryNumberLate>> on your hand. "Enjoy EroSphere," he says impassionately, stepping aside slightly to let you in. <br><br> <<button "Enter EroSphere">> <<goto "EroSphere-Inside">> <</button>> <</replace>> <</button>><br><br> <<button "Change Your Mind">> <<goto "EroSphere-Outside">> <</button>></span> <</if>>
<div class="img-location"><img src="imgs/locations/erosphere/erosphere-back-entry.webp" width="100%"></div> Circling the EroSphere building, you reach a dimly lit and deserted back alley that feels like a different world compared to the neon spectacle at the front. Your footsteps echo softly against the pavement in stark contrast to the pulsating beats that throb through the walls of the club. As you navigate the narrow passage, you spot an open door, marked with a faded "Employees Only" sign, likely used for deliveries, that stands unguarded. Pausing to survey the surroundings and finding no one in sight, you realize this could be your chance to skip the long line to the club. <<button "Continue Inside">> <<goto "EroSphere-Supply-Room">> <</button>> <<button "Go Back">> <<goto "EroSphere-Outside">> <</button>>
<div class="img-location"><img src="imgs/locations/erosphere/erosphere-supply-room.webp" width="100%"></div> As you step inside, you find yourself in a supply room. Shelves are stocked with various food items, all illuminated by the harsh, flickering light of fluorescent tubes overhead. You take a moment to look around, and then you start making your way towards a metal door on the far side of the room. But before you have a chance to reach it, you hear the unmistakable sound of a key turning in its lock. The door swings open abruptly, and in steps a fat cook. <<button "Continue">> <<goto "EroSphere-Supply-Room-Cook">> <</button>>
<<set $eroSphereMetWithCook = true>>\ <div class="img-location"><img src="imgs/locations/erosphere/erosphere-supply-room-cook.webp" width="100%"></div> The cook's imposing figure fills the doorway, effectively cutting off your path to your destination. With a scrutinizing look, he plants his hands on his hips, eyeing you from head to toe. The room suddenly feels much smaller, the air thick with tension. Suddenly, a smile appears on his sweaty face. <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>Alright, what have we got here?<</say>> <div class="narrator">You can feel his eyes tracing your body from head to toe.</div> <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>Are you a thieving rat looking to steal my supplies, or just a lost kitten who's wandered too far from the party?<</say>> <span id="cook-choice"><<button "Explain Yourself">> <<replace "#cook-choice">>\ <div class="narrator">You clear your throat, trying to muster as much confidence as you can.</div> <<player>>Actually, I was hoping to get into the club, but the line out front is just too long. Any chance you could help me out?<</player>> <div class="narrator">The cook strokes his chin, considering your request. After a moment, he nods.</div> <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>I could... but it won't be for free.<</say>> <<player>>What do you want?<</player>> <div class="narrator">The cook cracks a sly smile.</div> <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>Well, my dishwasher just quit on me. How about you wash a few dishes, and I'll let you sneak in through the back?<</say>> <span id="dishes-choice"><<button "Agree to Wash Dishes">> <<replace "#dishes-choice">>\ <<set $eroSphereAgreedToWashDishes = true>>\ <<player>>Okay, that sounds fair.<</player>> <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>Excellent! It's been a while since someone was willing to give me a hand, ha ha.<</say>> <div class="inner-thought">Is that supposed to be a sex joke?</div> <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>Anyway, the dishes are in the room behind me. You can start whenever you're ready.<</say>> <<button "Wash Dishes">> <<goto "EroSphere-Kitchen-Dishes">> <</button>> <</replace>> <</button>> <<button "Decline and Leave">> <<goto "EroSphere-Outside">> <</button>></span> <</replace>> <</button>></span>
<div class="img-location"><img src="imgs/locations/erosphere/erosphere-supply-room-cook.webp" width="100%"></div> <<if $eroSphereDishesWashed === true && $eroSphereDishesAttempted === true>>\ <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>You've already washed enough dishes tonight. Or maybe you're here because you miss me?<</say>> <<button "Enter EroSphere">> <<goto "EroSphere-Inside">> <</button>> <<button "Leave">> <<goto "EroSphere-Outside">> <</button>> <<elseif $eroSphereDishesWashed === true && $eroSphereDishesAttempted === false>>\ <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>Ah, back for more, are you? You help me out, and I'll pay you $250. Plus, you get into the club for free.<</say>> <<button "Wash Dishes">> <<goto "EroSphere-Kitchen-Dishes">> <</button>> <<button "Decline and Leave">> <<goto "EroSphere-Outside">> <</button>> <<elseif $eroSphereDishesFailed === true>> <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>I told you to come back some other time, didn't I? I don't want to see you near my dishes again tonight.<</say>> <<button "Leave">> <<goto "EroSphere-Outside">> <</button>> <<else>>\ <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>Those dishes still need cleaning. What do you say?<</say>> <<if $eroSphereAgreedToWashDishes === true>>\ <<button "Wash Dishes">> <<goto "EroSphere-Kitchen-Dishes">> <</button>> <<button "Decline and Leave">> <<goto "EroSphere-Outside">> <</button>> <<else>>\ <span id="dishes-choice"><<button "Agree to Wash Dishes">> <<replace "#dishes-choice">>\ <<set $eroSphereAgreedToWashDishes = true>>\ <<player>>Okay, that sounds fair.<</player>> <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>Excellent! It's been a while since someone was willing to give me a hand, ha ha.<</say>> <div class="inner-thought">Is that supposed to be a sex joke?</div> <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>Anyway, the dishes are in the room behind me. You can start whenever you're ready.<</say>> <<button "Wash Dishes">> <<goto "EroSphere-Kitchen-Dishes">> <</button>> <</replace>> <</button>> <<button "Decline and Leave">> <<goto "EroSphere-Outside">> <</button>></span> <</if>> <</if>>
<<nobr>><<set $dishesToClean = random(2, 5)>> <<set $dishesCleaned = 0>> <<if $miniGameDifficulty is "Normal">> <<set $timeToClean to 30>> <<elseif $miniGameDifficulty is "Easy">> <<set $timeToClean to 60>> <<else>> <<set $timeToClean to 120>> <</if>><</nobr>>\ <div class="img-location"><img src="imgs/locations/erosphere/erosphere-full-sink.webp" width="100%"></div> You need to clean <b><<print $dishesToClean>> dishes in <<print $timeToClean>> seconds</b> to make the cook happy. <<nobr>> <script> document.getElementById('startDishwashing').addEventListener('click', function() { document.getElementById('js-container').style.display = 'block'; document.querySelector('.dish-washing-button-container').style.display = 'flex'; this.style.display = 'none'; }); </script> <script> $(document).ready(function() { $('#startDishwashing').on('click', function() { $('#js-container').show(); $('.dish-washing-button-container').show(); $(this).hide(); var timeRemaining = SugarCube.State.variables.timeToClean; var timerInterval = setInterval(function() { if (timeRemaining > 0) { timeRemaining--; SugarCube.State.variables.timeToClean = timeRemaining; $('#timeRemaining').text(timeRemaining + " seconds"); if (SugarCube.State.variables.dishesCleaned >= SugarCube.State.variables.dishesToClean) { clearInterval(timerInterval); } } else { clearInterval(timerInterval); SugarCube.State.variables.eroSphereDishesFailed = true; SugarCube.Engine.play('EroSphere-Kitchen-Dishes-Failure'); } }, 1000); }); $('#finishGame').on('click', function() { if (SugarCube.State.variables.eroSphereDishesWashed) { SugarCube.State.variables.playerMoney += 250; SugarCube.Engine.play('EroSphere-Kitchen-Dishes-Success-Another'); } else { SugarCube.State.variables.eroSphereDishesWashed = true; SugarCube.Engine.play('EroSphere-Kitchen-Dishes-Success-First'); } }); }); </script> <div class="dish-washing-container" id="js-container"> <canvas class="dish-washing-canvas" id="js-canvas" width="300" height="300"></canvas> <form class="dish-washing-form" style="visibility: hidden;"> <img src="imgs/locations/erosphere/clean-plate.webp"> </form> </div> <</nobr>> <div class="dish-washing-button-container"> <button id="clean-next-dish" class="dish-washing-button" style="display: none;">Clean Next Dish</button> </div> <b>Dishes cleaned:</b> <span id="dishesCleaned"><<print $dishesCleaned>></span> <b>Time remaining:</b> <span id="timeRemaining"><<print $timeToClean>></span> <button class="dish-washing-button" id="startDishwashing">Start Washing Dishes</button><button class="dish-washing-button" id="finishGame" style="display: none;">Finish</button> <<if $minigameSkipButtons === true>><<link "Skip the Minigame">> <<if $eroSphereDishesWashed>> <<set $playerMoney += 250>> <<goto "EroSphere-Kitchen-Dishes-Success-Another">> <<else>> <<set $eroSphereDishesWashed = true>> <<goto "EroSphere-Kitchen-Dishes-Success-First">> <</if>> <</link>><</if>> <<if !$dishWashingTutorial>>\ <div id="tutorial-box"><div class="instruction-container-blue">\ <div class="instruction-title-bar-blue">Tutorial: Washing Dishes <button class="tutorial-close-button" onclick="SugarCube.State.variables.dishWashingTutorial = true; document.getElementById('tutorial-box').style.display = 'none';"><span style="tutorial-close-button"><i class="fas fa-times-circle"></i></span></button></div>\ <div class="instruction-content">\ <p>To wash a dish, you need to click and hold the left mouse button over the dish. Move your mouse cursor back and forth as if you were scrubbing the dish. Once a dish is clean, click the "Clean Next Dish" button to bring up the next dirty dish. Repeat this process until the required number of dishes is cleaned. But hurry up, you have a limited amount of time to clean all the dishes.</p>\ </div></div></div>\ <<else>>\ <</if>>\ <script> (function() { 'use strict'; var isDrawing, lastPoint; var container = document.getElementById('js-container'), canvas = document.getElementById('js-canvas'), canvasWidth = canvas.width, canvasHeight = canvas.height, ctx = canvas.getContext('2d'), image = new Image(), brush = new Image(); // base64 Workaround because Same-Origin-Policy image.src = 'data:image/webp;base64,UklGRjTDAABXRUJQVlA4WAoAAAAQAAAAKwEAKQEAQUxQSM0TAAABGQVtGznKtff7+QNeGCL6PwGw5qLUWrskge11o/3Ei7geqz16b75Iai4F9sXcOAratpHm8Ie9eyBExAQM5LrM7nNnt20h6WgTEiT8H681YgLS07btaSNt27bvxyHJFAcqxdDdFzMz0+i6+f7pzMwnNFQXJbalY1DQVakq28OImABf27atabZt27rtobSnu9vgef7/kfNy19PdpUJpSykQQrLrtq0DHMdlDZBrLCImQLIIwDBOErA7CWAJoyJhAGiUdI0mMACEASBgTLeQAvCwA8UgACEkSCVFwURYhJlYBzMzAqYOsC0eZkITEYo4pWQ+aaYqzqkXEkALa2Nq2zalVErKRjWCIMHDiUYaSXHe+SwPldfCu/Iiq7xzAoukGAhnRjPrGh+Cb+JmHUJTYiylACTs8CEMVIWIz4pqu55tT2ZbklOaVK8/PW+7GNfrDoQmiSlT8S7kJaUckl/Gpl7VTZx2q5SykRASAAcKIYR4XxTldLmzt7W7NZ/lIevOrlozgKnrUkRyaoCklLxTKAVKsphPSHUYtdfz29XN+Tx2xUADySFCCtUX5WK59/LocG9Res2cANKukhCAJwGKJFwX5xJIqgAEaC2Puzw6JussYXb62dfTeYiZhJCDggBFXFbVy8PDly93l9NprjCjAIAp7kyHm4X4wMJKrAIsjyDMN6uf3vvmYt36iAFBwCAq2WS2d/zFlye706Cu9AAEN1PutoEkIY4q2s2++vj87FYVoHAQAHQuq7d2PvPZ4xfHZZ0RBo9HTggAmPrl8uKHWR68SAIN7HlCceX86Itf+eyLncL5oMSTqtpZONh7sRM0MSWRxB5HUT/Z+ezXvvJqOZ96AMTTS/XlbHevDOoUlsSsn5HiQrW7/42vf27WIijxVBPQerGYhIlLKRl6OAXqy8Xh7iLuL6p0GkE83VQX8mSzV4ehM0lGWM8SzbPl8cl0/elpljF5ZPKEAaAmTOp6UZdKdhHsUaQPxd7xrrw+bVMiwVwcnnzxSoTF9qxcR3QJib2Iqn6y9WIe3p2uIm5kIJ5HOg2zZV1g3UYjrPeQLlQHx1vdu/dNMtxKPBei6pgtqtSh68zAXkPRUO0c7eP1WWt4pgmYVtPJ+mrdmcH6i6grt0+2/ccX0fCMU1R95rqrVdtZgvUSCn0xOzr27y+j4bknI3MfL67aCFgfUZdPX74sPj2L6IUU00xXzWULS+wbon52cLK4OO8MfZGiLtfLq9Zg1iuoOtk+PklvG0OPJOnUd1VqEqxHOMlmJ58NnzYJPZNM4l7M0UXAegK9m25/fvfTy2joobSt44NJShHJ+oCEvD78vJ1GQy81+vLoM0usOzA9e1RXL18d/t9VRE81qAv1yXHWNBHJnjfx5Wz5GXcaDb2VADXsHS9t1RFmz5jL6oPjk8vLhJ5L1enhbtY00dKzRbpiebRTOaIXl3sH+xMH2PMkzuXz/f1S0Y9FZXJyNM+d8DkyCcV8f5oJexIAZrPZPFfl80O4ar6sBH2aCfXWtHB4bimaVfM6I3sVjC6fV0Vw8ryIipvXSvRtI3U6rQsn5LMhVJ9XAX1cncsni0lQwp4JepfXk0DrY4A4qesyCPk8mKnPZh69PfnC13lw8hyQpjopvGdvoxcpZ1WufPoMNHGFh6C/GwiXFU5U+NQZXU70/WRiocqc0J40g+W5gn0P6kI+yX3m8LRL9BkMvZ+wpFkIInzSVAliEFLFtPBPlxnEmRAD0axLPgHsKaCLMAxHtm0XhWAfmaVI2JBAogRbO2MPkYgQYliS68YoPaRelBicZlZQkT3jMgBmw4OeQZ1oz5SBosQQTVqFUqL1SCd54UgMUyIFTaVH1DoVDFQjLfgctC9MPGEYsCw+qbd+aNo894JhG30M3vogXmTBEcOWxa991/XB63VrGLyqcc1kPXCJiOFLWPCxy/ctvnIXGEIUrpdpxftl+19v0xCCCJtN2YT7ha8uEoYxNYamWfv7lP3+71omKb5e1HNvj+gX5f9hk3Tzw/kUj/fVr/8hDSdQwnIx2bLHkv/JX55hSFPD8mAr2CP5rf4/hjVZbh8ukz2Kg1/+iw0sUIv5rI6PQf7kP9cYXNRya6nxEXzt86cY3pRQT4t286o/+3cMcYovZ5Nu4/6oaQYZxIVJ1dmGfeXbbzHQxU12qtVmFX/+nzbUKNl0N8SN+vZxg8EuLixnZ5tU/fl7DHj1YduaDfol0pCDMp+ebs7WH55j0JPNtFltzB+9tWEHifnWm01Z/niNgU+xPa425HenafA556v/2Yytn19g8NN11UfNRvzcbATwmb37aBMWv73ECMhgVx/FDfhWaWMABGdvTh/O//YK42A6a9/ag31htx0JrOneXz6U/vY/00hAsHv/UEdfOsNIKFmZN+0D/fBdGgughTbnDzP7zinGw1DEN82DfCmsxwPK1L1bPUT+vf+w8QBQt+JDHB28xajoYlzbvYVvvF+NC8LmIt3b1lc/xrio3s5Xck/uSC5HBqg2V+6eyhdXaWxwvnt3X/VnXmNsZOyaTO5Fd91qdIBIu3T3kr20ND640L3KeR/5yRlGSMFnJ/eyv70aI9R/YeruwR8oxkjayV7gh00+98kogbh/lMuH1TsX4wR2jnP9INnFapyQ+Xbl+SF+ae04wWp/4fQDmC3ed+MEZHc3yIfUs4/iSBEOj73j3XTi36aRgvUXtlXuFvbP33KsCDsHnnein65ajJTqs0mQOznvOxsrmB0ulXcRDZ2NGAcvCuUdjJWtRwuE8rB2dxINqR0t4LeXXu4gjuR6tEio6nAXuMy6brzoyq2gd6Ba0abRwlBMg/IueVpFjhbMluJwR2buAqOliVsE4W3KwM5GC6CZVXoH+tC244Wltsmd3EKR8qrFaCmcoNbb1FG7brxQ9bMD6i1JS1ml8UJUP3+S3ybiUrTxgiJhqwi8iQqJacxQ7lZBbkHVdDZeQJhQ6E0iYoyjBrBdK2+gS6otRkw6tiX0BvF0bRo1LEipvIGiRbcaNUQ5z+QG0It1Y4YotU68RjP6zsYMEmUe5ZoADimOGXBu4gOvQeBdO3IoSL1mJFxMo4aJlAHXKRGhTRwziBTEbmBysIRRQ3wkrhucpGQjh9ThBrBzPqZxw7kMco1G04hxw0tZR+K6KS2NGlBXloLrBk+zcUN8NSevEWQaO5yuDdeNSTFyUrot3pQEMnJAQosbE6OQI4e157Rr0hHE2NkaCcAMkcqRwxoQ15Mlc5BRw+L66gYztKnA2ClI12CWQB03LJ6dwwAY2Jrn2HHhDDdaTI4cNbBuVvEG68xEZdSI67M2GSAwyz5j2OxWqVAAJBk6lUHDEt+WGW4O68RBA3E9WelNzF4xaLI5zSZ2Axlrz0HDuvdp6m8A8yoNGymduVxuKYtV5pDRrVazxFusbTI5YDT/N50IbpV2FjBkrv93WfIWQTv3OmCkNmZtuAUIa184XOBNyLrbyLBoFMOlof6/TG9DqbvC4SIV8v+ZuwVgvYw2XLB9N3FyB2yWgeRg8fG7Y4e7NouEATOeFbxTO93ocBHd+xJ39tNl4WBh/3qkcgcyXl9ulENFPA35XWD5ehIMQ+V6HZR3gdXna+NQ0V4WirsK42yRMVDaG1/anYz56jzJMGHpX7GHu1Nuz+NAka7eLHO5G0p3VnOYwMV5nfGDLqbKQcLef/pSPsTCzWUcKM5Y4UOYZxcNOUAwXTalw4eqnywMHB7s8j/mtXwQyuS2GIbHdJ4yxYfr9OcWMjjYCq8Lfpjo3amnDQ788V3jcA8M1XGBsZGLratz3ouk2YRjA7a+XnW4D5jNdhzBMYG6u3eFe6FlxSIXGRWAky8o7wXmUc/duEB/VDjcq1lEsZMRo8LsBOF+gOTa+UTI0YDknK3jPRlte9thRJB8L5K47w7cDTAbDxY7V8nuzXJXOhAcC8JeTPH+4GZb3gvHAsmOIHhAm5efnY4FpJtkDfgAlDip3VgAnay7hPsnWomFEKOguMVeNDykdX5dVJ4cASxhWng8LKPFWjEG0Lld5/gwaMNFCBx+JNRhrQ9lydqC4PBzPn+dDA/dcJ1lGPyU3NkaD2fRUi0ceiY6PXd4cLLLz3ymwmGX3MKvhXwoWGy7Ve0w6EmslufoDBvYyltksEGnhcpK0kaA8WqiAAcb4ThZScJGssO76IjhLilMQyvYTIuQt14MHGzaFOeO3AxYE87bnMRAT/BIK2xu7OxtUJgNsdicRwtvLG4O1nqxzgWw4cV1Om/epMtkG5Su+FEblBxcdHDBnb2zzmxz0OrlJ16N5MCSUBXrS71qo2GTO/+mUTMMLtoi/2TN1rDRWeXKhOTAolztf7WuA7lZ7GwzrxwObGJtOJ4XxKabd1dLJwAHFHV7OWvrmcPmp+Cn+cASqX/znWXt+Qjg0c0FJuBQIi783rSqicfIxFlXURKGshbuczvV3MujQDG5zDmMHEZNDEeHs7wkHmkom+mRCIWDxwzBTvGtF1mp8li0s7tvbKtx+MA4KTD9wqLwgkdbQjr4coDKwCEIVtVyvlPmfESIKF7uGcGhA0goDo+yYIZHLGlRHZcK2KABDOan9aRUPO4StNrOAdigoZF721me4bFbFibbQQAZMEZqOJlnpT46yEQWUzPBcGWCYHngSyePD95JmQnTYDFt2457QR2eQgklJhlBGSaEF9GypJcnAcjUFZmRNkRISlYsy0xFnwaqVzdzAGCDQwjSaS45wKcBgFqWK2kDBKbBB4Ga4am0CA0FaUg2MJwgTCsgEU+pVOJzYUppaLiQV+pdwtOquXlHs6QcECKQLE8ixBNLJmoHg8AGA0mOQmZO8OQaE4UpGWmDQWkjkODTA9AzJhMFZSA4EwKKJ1sM0SLMBgBhNDoo7MkK6imkJet9bGIpkVYET7Z6U1g878zMeh3lsc3PCcVIPN2UZG30/xOdJViPE5FnXq0UlaDXLcHYvf6Xs3VCTNbPSBAyPjqmOEqvAUxt+u+/mKVIiLCPCQgSpAOE6H3LxPrz40oEe7mAQvMbLRGC3hfLyfnJOydiRpK9igBAam6WwYzYhaTk7CxDRRwhPUoICKOFy5kqdwTgJJiMXXLiAEpPokGgCeJX0zo5ELtSwFSwmdEBEGEPIjUmgL5L8WLSVmqC3UnT3KnWXhyv9x4RcSVQOWsXZxfBQOxWSlprPL2KGUmAPQeVuHEqP2zurieLaB2d7BZAc+vLbPIi4Bp7znhko7CadjenG2pOhl3cZSwWrxaOBMm+QcgDuDWqdPw4NzdX0Xwx404Cg7E4OVAQANkrSBCCh0plz78Vbzqaz9jZYl2taXGSqxAQ9gkAInio8fiJ0XKaqpywy6nmsi4/2M5uYI8QEcHDiXFZrMZVNOx4M5f7WB+XMBoB9oV/lRCG2XnjXIaTHQcyhSpxf+FSkxQE+4blWH9/6q3xZtgDSRTZhe4U63VSkuwRJKF+8tllTp2Q3AcAmC/iutpyTfSelL5AgiVNP/6+q2JS7JGWskmH+ZYHVUCwD9DAOPvyvWsNbTbbKwxSZitMl2mVCSB85iiglTz7+Ndnpm2nhj1TNGnoVlIV0ij9NT5fCtDS6vNffj62sMnE/klYyqrVmzQtyuBJS8JniQZASld/9of3Tl7CJpPYRw2SLMj5mVvWKjQDkER2jqYKjNdf/u7T+LLUicSeShJtq2711spJgF2tlQIIZZewAHn6/q++rZ6r1i0Ee6yZxaZx/vx167zr1i4DSKNIr1EeRiVde/GXX50++izXHo7Ycw1p3cHHT993xaTgxjkInAMJISA9ZEJCKKBpsfaL9343ef4pm3cQ7MOWrI1w3Ufv16H5aPm6OHEiFrpKaBDpEW4RNAIOSi3Np+9+Ur/4RLv2lWBvNnZtBF7//ymefvvYQUSsrccnwAOkJ2gATEyUGzuS3Jy/95uvjl98tFkF7Nkprc+j4OLq2lePjR3M2vbxR0UgQhNA7huFIEFCXdRYoZ1++LePbh9/UpvIyvYtwMzWaxzl5XXNo3GlSR87egAgBEXuBbcED6RRWCKT0zT/4u/vTfnkcb2I45EU7OUWm8Tjo3g7vW2ioVIKAcH2lvAh3BACAgKyZTTSSid++s1H752nJ0/CsimAUbG3s+SCMeaTyWQReOwKRAhARAQCuQkGPhABUAQECIAgDTm3zfWn7316qc89FpfLXAkAGPZ5sdR2OkJzN7ldt0WqCjQltgmjkdcA8DYDAQN4AwnACLdFgkXETGOzOPvxh28W7slRqpfRIIJt7nUASvbeqvGJLi9Oz2Y+Ko0gCQIgaCBAALwNBBIJ2wIheTl6ogJgRrOSmsXN+dn5bcenpFuuQxFsc+sgZMiqrWmFxGK+8/J4d6sqlU4JkgClEXcLrwEwwrAlIOMPeO0xZ2atX9c3F5PbRWvFol+1qTgBH3BAkkqf5bNJZubdZHv3aG+nnviMXoUiVy6QAIwEjAYjYBCABEw34dHOL+b19Hq+CMHA3K1jUYA4UAkqJavKIoeoy/PpvN6qq6Is8lDmuQgpUQgCMBhgBqNp8ptls7qcr+suFCuMXUglJRAw4rAlxPlQ5VWpKslEvXOS5bNFVVVBPZW4IcamW8UQursuhpSiikBT14YuFoqQOJApoqC4rMiywlEZDYAFEScUgNcsxghNJgDJnGJJWUvKJHFgEyRAmjiSwXmvTpSiIrRrQMeUkqUMlJAKhSwUU+Igp+E6DQRIJwYalJEAAUAYocWNnOVCEZAQYhgkYDQGNMTNhBkB55QYJkkk0HgNMAAQEP+HBQBWUDggQK8AANAjAZ0BKiwBKgEAAAAlN3BgADMixTfX2b6KfPflj7CdQfpn9g/x/+E/uH/j/1HyC/7P+D5cei/+h+S3+Z9zbyf8//xn9x/zP/D/v////4v20/uf/A/y/47fRf82/6r+/fuN+//4B/pn/e/7Z/kf9l/jf/99mv9D/wf9B7pf3I/6HsG/pn9y/4H+H/d39//tm/0H/a/2fu1/rf+L/7P+j/43yCfzn+yf7L87vnB/6f//9yb/Pf9D/5e4V/W/83/6fZt/4//q/2f+0/+P0lf1j/T/+b/Sf7b/8fQV/N/7P/vfzd/f//8fgB/6fay/gH/X9QDsC/5B+Bv7AeK/9D/E/9rfUf8S+Ofp/9p/xP97/tP/P/z/1hfF39t+UHiO9E/bP9X/nv2p9xf4z9d/s/9s/yf+Y/uX/m/03w1/sf8V+6/mT8HP7n++fuD8Av4t/Iv6//aP2M/tP/h/1X0GfV/9TtQda/wP+6/znsC+xn0L/J/3//Mf7b++f/D/h+zP/i/5f92vcj9F/u//F/Mj/F///8Af5D/Mv8J/e/8F/tf8F/9/9p9d/5n/yf6zyKftv+c/6/+N+AH+af1T/Vf4P/Xf9b/G//X/wfix/Mf87/Of6r/uf7D///8j4cfpP9//6H+W/z//k/zn///6/6B/yr+i/5r+7f5X/f/4j/8f8L7tf/L/s/30+e/7M/+f/W/8z/7fSF+sf/K/Nr9/09QX32u/j/c9d8OwNyq5xp/IhVGIeePUE8CeJs3C+9WU+JlUjthMMa2+IBEmM1BK0Hcb/t3db/8ovrG7H2q9pshVQkAU3bDtHU/Bfbx6A/HHDnWbAGBw28qwvwGUXCMYZu8Hi2I5v88js874oxDSU55rtcQMelnVGMj2yKgHnnxO4e4xXrKTi3TZYL14wzgMF9+atmYnvn434kl65/fKtEJ/TI15hZ7nCktk83GSJmpFJWOp8Nw9cBVk15fU5JD+WHjtZkxgNnjsT7ZCX+NQr1BwZGJjQWMOoKBi7P5vWxPJYENeReFNtfifU6z5r/71MP+e8y1ObnVffX55jJ6Ufqf42lV4ofO8bGuXOeQuXUVPt0QSM6UgjqEhyz6kz1qrwa2aksetZ+MTYo3DNcRF0wx3e+cPn+AsmcWN19qDsIha5amtpSyZKTmnkPaTiw3oH/jG3C9uI10zsrEf5DMrPy14ZUaQAHDHG6rvk71qxRecXzbuHAR+KTrwEHGGTtP0BS1Fgg0ZG22XHup56k6W/Rxsi4uXhPQpbR8jcQZ8dQQ8Hw4VTr4WFPnBmJxeZVamj9rdZkx8nyib0H/asXDW242lN9SCgn9aHjZx+yK70rXymFuNVL55dRBUTdBffiSv6q/6+sEueOeDPEf+y1bHL+yTbjLLfQsV+908INUHbZit8pWgQ6cTCdJmvNNqsSxZexSN6kOf+baXV/5DvXHxFMPlNQNuGdpopPBtGbGBqzNEvIbtRjAGXAL26ZiNY0a9wYETb/F/BDCf3qw6hceu6HONFAT+flS+G6SVx0FB6xLeNnfTE9CvpAn6aCBsee2tv3oQwMe6Wwh7swcg8ePbvRh0v4BvsftfySTxcmvAzXxbtLrc4LA2Xwv8O3x01VQblbpE9JfhNWb8KeJX67njrVOgLtEWchuxNvYtKNgiuv0nvfZxya4gy2mXtpY42Y8JJsU0hA1w37zkAAlmcXBXDJOEw6ER8oZ8KbpjNrnWsaVjcReoTdHPOhfoBgShgycgbNqWRWU/snU8wdx/8ML2fvAu8vHslie71MTT3PTgxPHq7rsU6kAvw2udvgGY8hBspdMIPAWPQ2L1KHkId5Iyom37PMA+phJHLhubQpV3NZ4EgWv7G2k1Xj1QSxp1Vp5V+ksnwbvBeAZ9Z5pvJLDt8OEL8/lKNHS8u+d1ohjT7oup2j4J72doBgG/G7g1zDMPdyARd1mnJ945KgCYiz4J7hFjf8UAMAlOeJ0wxlGgYexr2eoXTdrpAkfUUN27b4kjIPrsyCey73M1w+THWGGTGBg6f84hQXHqR3LeNV49n1YOE9AojlY4ge+7P9xuQUZIMOlJE/6s6BpAaezGoj2DSRIZzMRagV6ZP8nBNi/E6Ut2AZ5jytSWfyiieHBbzLnOoqjzunPqM2czj6j/ananGyfrRVLmPi8LynpTNIRRDBT2uxQpdR8NvfaYDIv0YjfaPTkD3vBJT5PzQoBCAMXrAexpWpnhaERfuo0nzkoDIP8r4FoR3zr+CQX+FVVb4ZPIi7OtL+iXYc0mcG+j2yTGz2fFgJ32dtJi9K2zFQ7QYwAMXIQDoNrLCbqGdxz6gqO09aZSAPVSRTXS5V8kmGdLY3jkbBQw5C3LSerRAP95d8NDm2NNJvprcqmi3aQjgrvq6Spusi2gPKoDeOyXDYxQiRCC6eB4qoyONRkq3fMf+bBI/tRt0y6/8+e4AIl15y86qXC4Lm4PUiSOjiOoBRh8Sa/T42Tgf/rvJ9LUHfcP43T2ODYqCND0fpH1l3ZrcYE62WguoK8PLGo+d/bX1b1mzytDM5/irG6fcYABTXYSRkNCegSJn32htXyc//e/2IDg0QyG59BC3NNyhpG+9SRtSsueQt0OaL4jSeDCcms9bSopcKP4RP04rUWowB8+fQ2EB6/8AJUhJQgsPZnNN4wzDjit79f8wIpCcFBo3Vk4fl8eof2mjVVGzXYQWJKmUOPuMdQbC82ozV7NHmbKoQElqwil8NNplyJ5qO2CEyCKj5mdQk/bokpmacL0pJN4wOHffWMgP+OudvXS17W7O4UrD5hs8PRdlFnUe3VM4j0LdmEzzM1C/kjld62ONwG5mIIti47SI/qqfHfKqSq7Hvwtzhw8sXGxbLZgPrb530CY/p7MTkQaXqJULc1W2BndVi9B09OzJIOHQaomaodMp7lIO+/Wjpv+ipl5MjBxZxrfwy7ZdfooI7fbOLBmVhMBpvTIXpvql0WP0aBQw86jmsttYesIC4ploFYtyb7sv/YDc0+cpNmkvtLgYSAesAvTFlUJUu9cfuvFKq4tDXmeSvMZnfzchU4YMWsDYVOwGBv98b3e3K42i/NvSRHsODMcXuokKYcKm/1IQypsffk8X9QKMxtLW1ao6XkljROA7T5AAAD+/fbtQ0YV1t+IUPGlXaCCCJHqk8GL/VRqmef89AbZvnEjpL8SYuAQROy5YLd6mMk4yfX95mXvxSszQpEzT/kyu4znJZWPWuZ7c2aPTohUFFRU8u4M441NkfWdoq5EX4IzA99OXe31+kJgnxEUsk6qSGl2xpixyLDP+Dkqp9Zba3R7JG8hm/VPjTRcpPWaW97fLU1xheytO7EFJT/Ab8vTQgqHB9KDl43DNWIRbbzBHWR0oIN8cICpkkSKraDdQBdYMLAlDAhEgtwEPKLG7qoN0CqrJCu4XbUUJZTyPoyo5sIMlqaXO88AGckdrE4Jm+eeHfdJ8WoRbkv8gLpcVrNA4h+cmK41XX9TwS0FRwaFHvv40BF7dkNB8h7pv4Hui4s9qJ5GAZcNxNd8TJA6/x76rUN25aM3FG4ZcTyMTXJNjXCBx9QVs2WUULqHdWTsv0RqOKZRVOisJy+SY2a3gfN3RgfHNHHSobmaX9G/P7CXonFZ4ohvHvz8aL+aPq8qZRZyOzGxYbR920fWNpRRig4Q5qWYqKYzDQ9lIhSqcvk3q6GVxqHnk8dAp/EwRYY2SWSoXEBoQ2/xXueOPvZSYYdDsVGm1rBG7Ipv0aEKyTul6e9XMQLAbn5sZ7T8IcJKKSEzxJtycSbQvmAipJtwfWkDrMhyN2xvxTWxvJdeKLQHDqFO79R4P41P1q6lxLs1d+WIJ0KpvVzaS4EP3N1Yyi1rD2c4vbr1VF7bZeHaQiNJtsJww9NiMMIT1g2kzgNJKcanGI6J3/iETfJdbZi9bnnqt6zTKjQwC1PA5A7LqyrVqJLQCeLZwvMpjeHtSn9zcpmnpYdB8YsGBndiUp3VcdQ5ZPJk7/fr6eQuukUZk251erXayxMIAeqvkvPtYqChWucK2mOSpJyl0rDyPdOTXl4EqQh8hWSMjDLwWhaKESGfl+4c4+Sy2P08z7cO3ga7NbKOklL9WgsUP9y4oUNSkbPY83C1pNZ6xWMf+kGZNaXuUVZgM2zqt5aoW/MVoT6btF1YSwyBmRVHG8u6OlRZH6hWi6cCyZMnEowNsbVOdyN05llf+X8ZwAD0WPmgxDB4aFqvb2pNnz2CJkQ2/o25yJ7jx2uRfkzyrNPhk05G/9k+VZmE4A97MwhhwUfNOhHN0aDyIqN2iukXKMEI8+h+kin2xDZJ5NgSFuBzXvRmKwbsgfS80tLXAs+z7vxZROSkvETCwtr66CKSO4PrS7zq+DK7f/xzTZ1wr7lq6YwkKsWkMElrAAWA18gS8PJVdeH7CGdB/S7CYxR3ltUFSpa0ahzukfn+I/COisNhiw5OgF1tk44qkoWmK7eU5G46yQss8Kr5sYhRVRKfnGMB0B/4+JCGnNToxz1y0z6n/lSE0aEuFGil9k0+KR8JSi57LqlpILHBpZHEqRVHA/tMqThKK8wlIfXvifIwRmbl3T0MHf35sDz3ie3xJ+DKTQ2zq3CtjFKPaJmPk+L4zoh0zZfsPIITppddNxtRK1ennV1PHZumXuq3q8GIy4EKGDAYyTxmMslbRJLeu+MH/86VPfB+IpXXFZnZSR3mOooPX+HOZoYmP5DX3oumL/pheoFBZRxI8D0b4+FQRVSRs5Fmfs4c87vIxLJaZB6bz2+JA07rtpB/v0QnDmTc1JihOeUfLSHTbUw6tRYysneDOet1wSmuhgYfZCIIPvtc7gL9vGG/1DGHhAfVAqZlVjf7HOUnr2HbpH9TLgbn0DehAVxjvlQBaoazP94EjOVLpX6IJUtPY2QhEMU7ahXEPmsuxYQpv+tXsDfVtKw9pn1Sj2GYmsOD9r77AuZWfOSVB8SdUwdyYy6j2MFyOVPnGukX2eIceGK9pmrgMpq76sQERis1hw+W0UEvWXB6PaaZH6yX4Hr1F1oPkaqmTaybBms31DROs70ZOci8WJM5iz2epQYReXq1FQu7Z5sACF3z5UI7YO1OheiLYLHVgcld5PRidyVLCoA933mR0quyx1xlmxAmAB6UBBiEqpjUkV7bBtb9Bcx/5UKs0v5KU3FwDj1gubQwnrN2I115giYiZANg8Okxj3vqnLJQz/VU3eZX02wxvGF5DD5KAvSKG6gm/2gGPJPLw0AcbA5jwmCvWpGsJF2qU6yibbLIwTjP5l8gx1V/GynR63xmiQ2oh48Qxtirw80LytndCsbX6RpkG59uLkFekMb5X1/LgD2XVZ1JUIajnMWM7CCIBuDMkcdWbSi7W3IClz0N6ajy0wlJHLsg17dJygismSVHpdeGZm8paLk7tWAEzZxiQjxj7j8Y4xUFF8UnsF2yOyOJk2n/A/77825zZ1da7xLfKRxFm3dJQMClT7XgJve5L6YpISOIOceuPQsDR+35zm3MDH6TZfcP0sbjJ6gpubnG53KuCVX17Yv70bLJHRoyfo7r9x7Xa5iVhykp8zorq7mxFciZalHLqr7B3VvhFxcpEN9E4ZyOvWGa6whfqXXqObKKtfOjrav5WU0Qt4lHQA3tUhAjkRdYUWnh2ZKzf2ovPFSF0oHMqOdjsEtWOLr2Q2JxeTM2Wyip2pHUyucy218dto6Mp8N93Ar6I1aC0B2AcPkqBFu5IruNhjT8nblZzgBhopXKDYaH2PsMtV+kSBjTy1uZwN3/pY8hbXat4aVNxfUGUPk1EpvDsxPBCVCD+uJra8Wp9IVB5s3SB4JboVWD5KmIX9gM360yFcg3wZcM81AIvwygXhsMkRVzd0hMtbmUIVG50ZqX0SN13z0oiY+t9jsQbkel6u2ohLCJIf4vHc5siT2YxxN84bJ4kJ74CzX3Kp/YBX49nwO8QEkE6LNuG1HRAwDdSFe76cd8ruGkvuSEr5cW0kdGM3F7lpFlb+Iu8Zet3e1jYB2jzkvdvn/vyKljn+MYnyinI3IAZgzPmqsBsFOi3rt9eLz+y1aQTCXmcdiMI/hHjVEpj5MnPCnGtxB9Mdflaxj7vbGSKl7WlrBb8d2pydmAuU81UOXq0AEY54bZym9XdO53AIpB70zBKhplacWB00xiO9h46LC7kOH5KMrnYAuDfSCLkvOIZtNCqYhlbyMsArT9mZlalZzbzkaZ1QinUxFrJmCOKSO5TOE/URkqqGoKl3BU4tp6BpDSuniR9u9UWD0NOUFoKLJ0xLGFCYeiQI5JjTAKbpqYne2OEiuOnHwRr7jOEzJJoONnl0BhhhPmMfOwU/LDUYqBMQxiZrX/GxlAt09hANm9VKQ0mmhUIXcSJ8+iZUf7UCiZeedACIA0ifYrf5uyMPfI0YGpMQjlzEb1XgOBI1P+3tV9BA7irZBQClt/TK+OZrITLX0RzQDxE34+dJhDniMtCDCdoN69rIq/56KhhYglj7JdM3ulFbbLtK+dUh4aJnEgJnhLDB3cqI6G17kScexn+lpj8T7XURO1kWR+7BmgB/ENWnKWywgrfCUGtNVqHFQY9vGNq1Uty4/S809DbQaF8G2jGhFirDq1d5tZXo9f36elhtZ8v0SGWieG5eUi8tI0OdgYjl/eNin74nOHjuxcpBwcy5qC2vF3EcbzDtnKhmpQqy0Z7M6xEmi9W/xHULVqsOYk5GGobD9vq9mzw4bMRQDmdhNT7YL3n/kShbWxT7TG8Ua3gFpi/5lLlW2lBfZNss9OWK2nU35CikAhRPeWQPslbMDv1lRqE3gtnGhOIKGcqWQzX8/m3b/kn+d02hy94NoQ6dF+a8omRZeHq6NcWYMIeOoLvO6ZzQCUP1KaUZ2nwBZWoTdw+rNwwyto9MjLdyN3AwdzirglJZPTaSPhrGRpyXeNaZij5mlHOLUmfkBHsApDqQ2jQd04vCWKa+IqwZDjZe1cvPthlJsPg5d6RzqFRO8x+cY4WDFsVPT0KNUHxE/ATnPczPCilmRMdc40IrplrYF/A0u0Rc/XDxAv/iT+QoCHdFI+ZvePCBOeUfUHmidd3l2fBN1zK+s4GKRU/nDx4fRggRSy2xPnDSmLd7kYBN6hVSl1JkeGFlvnOxtb/DLeJdPLKiKltyrSW5pETCmrvIzR9ersidXfkx8zD0YoKAgyErfg56PlfOhkd/TWf4Muw56HMqGxPo2XzL3snwYU9Z551xK5JT3AkJlRqP59VLPsFDww6XQTKspcaq0FA9ejpryeviFCfSaBCQGNybMWeVx/nYstlMzf3mElndbFsRtYPgyihRWLVgpZmfBgokCjglWk5pGZFF60OzGMeSpUaa/1+RomitwiZ23jLXA4fgYuNBE2jXASN1WiWDNgDsTwr6O+HAu0CxjKAw9M951uKB6eFoS0XXvQGm3LTAVEZh1QVXLCs+EQgrK5kiP1EaPZBO55wfUPKT4ntFSsIlKATFKKFCrOH3WXWn/zEqS6Uc7XL/b/n+E/WD85jCQw54kvOJghPErB7ihshmKUts+mWO07EvRmxWGvAlRiFQ+d8C/ZNcNsCJmZObRVRebqNVv1zErVvoARE067/D0rGSIc3lQTWxZaeblA5W2AIabZymFWsTChW3/lTvch/v5YLm30Ov/eCVfs3GZneeCqn6uLn1RvS+761xv077pHyGWdpUN0IBfQk96KbLlj7bSJv05n6sCNvtqYhxKFIF9lHL7vPDb1aVXnbIJ+11wyaZvzHFANdJWGwDTgs7NDSEHxBiWNl+0pcbUGsXsjoaQf9aoAVTAvoxgGhLLxGT5GYVGFJVZpsdtOj7oaI06JSk/oQxrNx+SIG60Omr/h3eTVXh3mGg3rjiedtEd4s4Zr3onI0nuQZqr+A4X81m5Xlw+la/mbT9iN4H40kNwjy5vsYzc/CmnqZTUsvSIRE3/GoIyksh0pw4syHJPeskt1MpUkGwPGToqJzSMEv8B5883Ar3zv4+CtBePzVM62t6j2rc11TojYjNQFsaIdVGZJ+2QyzKw6Rq0NYpYOWoARN4LvtC2GHbT7XwokMo81cHkyrOyeymhcwKDADvhPDoZsupOB945Qt+Wz1aC9rEj1iDQ8IJPC3uBmPASRWS55oPuaPzNJIYE86uLZxkVdewDLbVNhCDVcNH+ITaXJHWCBGQdRBNKQaLqtOqjrE+wxE2wqCbXV6lr9Ks9ux1iIM8faWjZTUnCTos/rZOtCGMY6Wi2mKP31zdXhTl7sL5KayFsVuuOEXg1ueW26sSMV73K9rZO0LSLgx+yjWaihkwVvbkI1Ix+VFviNp2a9nGpVbGUu79AAM37LkXdYSa3HMhjK52s3/I9/uR5xj3semovnU9vqGjvDKLmZBpdtVf1U8aZEM13EBbT3VpZd+eJWZwa4BHm06E6dEqQpteD7JfFjpVIIkCrbVEbZKFeIoAxO1Q1eU+JS9k2Td4bouwcIM1fUy0I/niCtyS9o9QS4xAiatVjsFAhsRBD7WFRCnV82ZQl4c2xHGJI5P7Li01WLGNi8hMqbldlp/cS9G2cIzjep2L/etlciPRFCWdojh1FBjLOhBMpRAgJB+QPFZ3ZSqjpNd69qjroAjqUfSrVdkAPGYTtKjC3tQTfZl3evxZ7RekONgAOEk/PnRkaS1DJASq+h89QOGkqZ3LM+YiB+KzDD7BpwzoMwfrl3AVd4lqPm9ixj4kaDlmroA2AO9gNqGV8KhkuOkA3f+vtP7BTJZ5MrI3jJkFjs/m5uRMwaIjelhEajK+y7BABrRUW7IhgLFwRyfH3p/P67boSZikUCIrS5DoUu4crI1Gj8zb9XbwttMJAIUmGhK4NWgMV9n1sDusvZTV9c7tWZDAPwc+xZjCt6qfZixJ7ZILe0xTeMo4UnhKlGuOBQiyxurCkrjXUf3yCaGpsu23sFTYjvx3qtnfuLImHEocU23j0AWB9wsvwbPZpGNMlgzz+td5gr8jQFllRqeuajUxkf1W0gZD3VNRUkw7g7sY2dfJmSxqD4pgnVC2fOIvteJYRPtzTczaTvl+UHGmkelKDUkcYU9OQFJ5Awgok/4mkOinfFQdQJKwtyXLgbeKnMl1ORePamXEXdi1f87J3CE6M+gYD7d19SmBm5p/R2hskXdivdgzruJWDXEDXklpT8qYB0eOCpOVkt9/wHFCGxD5yUZo/HQsKxngwb2pGw2OzYr8DQ0qbPX+eblY1xqI2ORgGCpP+o4/CxTAsxCsroOqhMCfZgabTVVrkHy2qOf+39gnwjN57fVJ+S7gAmGS5hNEM2WSUD4x/rLSEodabzKNJ50luJ7pCzOcT49ZNCvNu2jIL+hfY0SAEqViRrx6+fI1r4H7oMmupPmb8IQyWggPhPVayz8yXLd83pMx2uplsDBYipcA1ZYsJL+eY9dAEuUP4azHmqL1x1yYhWgfvlWAdIMywK6Pqmn+ZudY2Jz4jbcqzbSlQgVTxpU90gKMQQ9dDwbrDMSEjqU2XoMVNrJ8fJ/Duql2UZiqSfrQJ2g72ugwhxlzF52aqP41jArXdOE1ULvfiJczQdGCfsU46XxTEZU2Qnx585gPTqk/Hv5GGbcUDd7xOcA7Po0e9AXij3qrHpiW+ylV+KTw3UWmcwhRPP5KBKG7DykiUCZgcH1dkwDkzFBcRY9FtZAHNQcw4sErAi7YSJZEjsBfLQQwEpQDV+xfWgh3z8iojemAvGi64Mr05SdpOBUBdvKWcHmV4biSi9zjBLzffQO86sJHBm8/Xnr7jW6Wsz7hH24MwQs1RpN6KCJeC7yANr8B1v6Qtp+ZdH+R4zuTTR3sHbzEzGyS/9cz3qHdtFuLwQz77FvACfeEtoZo5ZOlt4XaOGD68rPPmQqT9kUJRS/WyTT8LkV0SnVLlUQhUR4u0vaxmXT/t6IJF1Xwk0hAToWjvi1n8nnrlRRoGo8FszBPQVtZZ0lzQbtThGVsi4JxlPPc0rK98ypd7lW2uKK0YPhXGhEmlzCP3yG8VCTa+jMzbVqZgeLQyD+Qu4Teseu5zMQSszX74Kmw/bu8Fywdanwy5LorttRNIstEcx32zImV62Kr/ZjQhHU19zMW4JenDj5YKjAtjw5smrY4ftCiJhPXAuENVqOcwyKsAHj+clmWAwrp6r+rhU60+tjPx4a2mvTZur+MFPmm1jBmSH+2qOi+S6UbiLP1Unkq7o+KuzFtpGYvW+Nf8n7KSlO3wZ1QEvb87pBn706Dy3CskzwmQZGbOcoF/ReGIc2Z2rmhUB5Isft0kFzWWEaQsSCga3Yuj+zd54+VltxYV11GoVw9LwbDvVebH0Rni6F4ElX2LhlsYZczjc2PjifEAeqIZf8SWLFaz2LNAGHv/tXrFByvg2zniTNmPYLhzpHWHyG8QM4U5XObjuYWtTcZAGo+yWlh2S0tygt8xzuTD6HldRZQozxtPZa9UswV9E8MqZgUryHAqFY2O6F25ecZe7gHq7fhshvDLHiUCaPf+bAoE9jL5nigIMDCPFIffejdaQnW2/0vRypEp8BHFWxF/T87/Zw4wzygb4vFUIv/wu4ggonJMt9ckhWldtnWmohrGNxsR3W0I/amvQdEiy0X0S+VzTcixTFd5eisph5bjvsMtYK9Ic66eKoWQWqn1Y/DekbsKSMnoZkLIaIzxQKZ9aDIKtK1DM63jZkk5prpd6tqAGWDr+gob896QbhfC6KCtJii7J5IaKBUs0PnQLPi14SqD+MDxtVyBlfBO6FEP9aerHofCyy3/nPy17BVsPbKBz80OkHCd0lBiy4xamyM/2jDfBFVRJ3Ruc2TqOEWHb6rwhR+RJzT1RWJ3D1vpqhTtotifhBUQL9Z7dkiQ3gqOe0rvIZ0OGvun/TFgQSjguDrIZ/i/eYMlzCq05G4p8l2wgXTEd8SDjWyAwnO08Xp84HJqnyqTp2s6VO8Wqs0TLo0D59tAYJFYFVkMZiI9zDlLqZU7XrFmXSAtowG74vcr/tUgZlP+hQ3scvznhXFRn7hxl7gQDIcAzVeYmMTjHIwN5XJX+eLLm18Z2KQdpcZg8b8+J1TP/7Xm76VNlIBbUzxcgLsQSYo5jgEXD9gvcypl0AG6hbA36D0JlwKhtJ/ZxU+yLzsFLOabgX42ew7N0T7Ly+Ga/4MM4sIqaKP/lOtf90p9TsjUIEEGZqJ8WnPCAtA2C3EnK7UF/iFWUvlTu66CMrxopsJKVVK6+y+bCrt60GSuBxZjWnSx0wNkF/nh0jMJxKmJmvpSN+6RVyc5Kbv/bkNXfXrwH3YYnbg5RHl1r5VL5qmdgZ/sABrJBxHRTDYZYuk1HSvAi+dXlwWfQOcqzGDk/pGNIUiTmqVD6G/Zk96LaYC4V34CD5OhUudeNcH45YjkVR6e/hQZ8666ibBKXNiB9LngCwf1TxxBjURGO+6Hx80fpoLTPxs0e8fKpytddYaiSAC8NS5OiQZlUet3PtgUWXfz+W/VB/+R6lZwlgv3xk2P7iRKoCN2bL+9TUoo/4xqB5O4yK95WdXtdsg5UX0f+inYPXrWfuuSlg/45paXcyi0VwMlMbvoft/ZwurH8xO/TSt/NytLbqD6yhrv5Tzkw3krQNlOnDq6WmBGnUnWsI8N+ScdCs9zZYP2JcsumAsn+fziKjo74egAh6SiJt9tjhe5m962J72w7NYUo920ah0Wx+bbrC4COgppflaF8ykQccRhkrlP5a+hKyzKK1qP7iagbEqXpoZsD2k7ol0JOjEF1gSsPNxfmrBaEfKDsEX1hPhM6g3zD5wucoUoaPIcey+hmDdwWbZfhcEHm9EfTujc1kiOmKqOZNAQEfD9xeTfm3RrYe9RAnE80dBc0QRf9eW4hx32FOiOsBBwFjjNOO7emDXcjtjqPQq3/8a70EKA4EpwyHmKHxjANVCTkJR0tcvbzCn4ZAGH1H9CSQ8w2Pw11O3mFPEYIFVZVyI9Ou1sp/KK2astHveaT2lGstu3KjgctGsONA1vC4nbi/MQOvbHDE7c2nqjWGLkQECcrw9vZZ1BwWNaML6Lu9ODhb9cz+KMDqwHc+pJ/wAeNbwk/AZyOeuDNtpPP0ILFHTtAIsJYUbFta+M70GfIwcerFNBTmLeKD5L+qORnHRnuNNUaBYDFBVhJ0iI/6IG+YfAlPDgEFfMVQHHbsAPxILFN5yU1AV7ed8TOqTp5T7cU3Qth2xbtOqF63rUzZi4f4vQOXE/bCd1fG42pabOwmRq3P3EbGHuOPqP1UWbnQm2ofC4bHnrtetHK8fewrJ0KqSDpgRrU+eThFsPKcjUnLUIbrfN11g7rYSdIMvjn0S+Z4Nmf7LU2nCzmabwy9EXT0hvetVn2+8+SK+KgqJ0Bp4PIdISAICBdYc6/wbSqjhMgaTA7DcqGuk5qvBQWtqcTy1LPm6MM6hLWYJlKWSUBBF5Okhn1kYIA0Ug/5oU9vmSKRK0KIY0LePHG8dOFkwPYQhTXaeq+yoZduhuxHXNzcKK9CLMKmq01XO8AidLNom/TMiuvaFZSNLzizDOkTSNI8J/i64fIdu9PWPdcp2HG3UKANb2NhcGXoPuCne5s3Afi8IxZK/OvH2WXCMUZgHBG+yokNEBiQ0JKe89/wGrrA3wCl4KFtoB8zbXpkLrFCCwXxiQbAPiUt9l2RChganxFTe0cbisOm/1Jb9w5BNgHPMnMqxZl/bpgbYD9vYhRDZ0x2OSCs0zohQb22FQtouPhUqcDiVc9r0Ls2/FjZoD/EU0w0TN/p106VrKEV7Zg93s0aTEM3xe3oO9LWBmYD0Rdtw1BuOTOQU4buotTAvkCxVFkoYSXAQT/jrRqKt29G1xtMIEBiCKoCgDntWr3nyY4FSH5i4YeAS+3IoU8/XJ24/xquvAVaZ+j08/wT/d8bEVFlyHrnMTUMZ9DWwV4qy9hi7eMRrZjSWO1Ck/QWPuCXGSB4mfPgMDhHX4Ond+6YbE7KSZrz32Um7nEiY3cdQlex7hO6293pyjUsSOjYeT+n+4aXvbrygsu64L+qrXDfa081zJoSn5s7B11Yj74rEkDE/vkMP0lTAYBO9PAjkcEYPUVIButrCQxCtJOaBDwWsPRW4vyIETtoX+hkaVSlD/2kfk2PFwALWKwidUWzv5n+6kJ42VQE3d+v3GPx8G/gxkUQI6S0EBsc88NFw2pVM8w6TG8e9lCrMcpQ9Sql0Yiti3XzgAXKku/Bt7N7XSt/HTCDYhyr2sfswDrkhXqkuaD9+m9Uv1cFwSEVnJBao+svZxtwDLJteu77PtnhAqeOM2OgBOOahwHCVyIcyqVwQOUfrDpPf2/GVrRi+fdDl7j0uPDHhpF3TddRnhz3OKynyu6FnJRxrPXysoKUI0pOOQcaFOp8B3Y05l0TmM69nGXceGweezUOt/hWkzJJakULmAHRx8+AcCHFpqe3H2CnxW3KojYOQiA2aOIJ7c7Z8/4UrtW0IBwdSSd9zSLxQNYmchBB1ZQdQrK2jsWZkh/kpBbno4BtC760d8hKP7UsbumILSw0aq0ccQ8mPN7uftBgqoByX21vXcw6LmNbREt9AHxcw91MseaOxeJNEd6d0c+oFe4KV9fK9SPnhEFFdloZeF8XBGKbkM0JhYBI8EyEpmHFziXnKupXhKihqM7ZNh0tKNb35WDY7SKaCp0E5nWDOBMPzzuLJfPWxbj/ki5RfOIWw39oboyCLSxhNIq8HZR97Ww6zRbpA6uZsGQ2rCziOJlmVp4OWlfrH7xNieVma138Jg0CJw71IDYZU166Y6h2gIDgZPOhG4HQ+1HVLR+4GTVU6uTExwULYe5Ok6eFP/Dqw9tD9jkWx2i4ddYOkHhIABmQvWE3V5Fy7mI4tvLjVtJX3SJY/jyZeQMYNmbf5uI350bosDhTsWkE1TfbLVNG5LAXuifZutmUMRC7atNKv/u2vGOOc1RpzWQu1pPeWvhuklNOMqYK9epyuRc6nkvkUDcOz2jqhMyMyclSeirJrCdAnDYj6zsv/dCHCxuyR1OvDhzCcCuhrAUVY8LT1YU/y9jueHGKnCLHgJHHVQ+WlrnUpDf/5hf8xWLFV+UVbm111hioBbZ6wN2ni2Iz4acoCzh8s8bxRz4Nop5g08gpLvzPKVoPodNgWTtV+YrK8glwhaJj/AdHu9GQMA8/a0vNdD6ZWlFGd06H+Uxyxy5vyeOiKifNa5j1/QoGTZfspP6gL2AGlP6xlrlJ0SeeNopBymtWFtqH4m1fC5q/miPM7Rwnm5dNLQunfFmM1SlZaaYf0bSCZHdG2CHH4DYptpKD7uMRc/QX2RgUFeFSievSmMZPV5ogrKci7O/UngCbzld4dBpr6VJM2Vh+4ftAWMrVMwE0gLPsAfaiAPPM2+mHyuE7CnPS3HiYVkvmZNIbUpTwakzMwjNofSyYyjDk5NXmIgRx0rreGlL4ULk8eFlCVeVBUF7pb+UCXFDKITTy4oztmRFywVhZm8IxQPtqJNhZpzvwPHHJTFWr/MPc6bLR7PRZUT1QDsGN4f5C/GlDlbO/SGt2vYKGAbamHZPkU5MbxeMiWTBGwKVXtF4i2p4TQWohCFKmOAsILv/FN2VM4nLGpLDODivxdEQQNhz9H97b9vUcQmkQ8cLgHiOXkSZdBDoLI+CoZ+7b4fSQj54G4QlDnqmz0X3GxI1WB0tZNwxtu0nBjB2j2dYT5MUZqJiqzOSy1+nLxXucrEuFtPny2Hhg66O9qWySeKf+7tVUfiWXm2XO1uD4TR6SJAZIlf2MthvFgmIVnnW25N9tNjONorfT8/HmS+izwW1RL/nfAOfBkFcDpN+Vyk/5a0KNK0Q6u3yT6Yw38+VSmO1IQuJ0K3jgnNla+vm3IORTECFT2Wa45g75dncyWEOvkd5zNNQa5bMubJDjzBqN/btGyUt7sEQ/CBdLDMAEVdp5RO+S7c1DVI8uCmeqHGppGVLVYwLyKkV7upVAhqzgnpYwa50iWSSks4gAx8TrPvcZGso3P/h8FJdxgINF6o8ZWUYAEPvZiib0C5da6CktbkQ5/cy7BD5wbmup6+ouK+O5D2AriANztoQmDzYu7QNJqqxNBl0MSROOL/bBAp0OMW+n3MyWUY1ZdwEq5QsVTO5YHVMY7TQqWU+ssXzFLpZfN7BbB7G4sEZTK+BiePS2KJT0my6jBd0wC/j3oQhSl7Ft4+Bgj171b+jnIzuzaP5fUFcdE5OoLvUCBVRHwJVLhYYMTnRoEkVt9LRIXBYI5TT/tN+DVdaIXqtTRqL/ifzWB5uCMaKMrypc+8nGImQ/+7M1K84UGtLQi+FnXQN9gipFGtCmW1L/EIlnBcKJuy8dnVwuCRL1nbDaSKA7zJwjlz4oG+rXYpN6eOr80rwfvv1eXf7bj5y0A2gEVZj8wxOvMy/hL/8q+VBCDhkIolgZ4AOPqkrlkq3cwiiCdDddg9gxDVOgZVmlnYcbZaXXVeyrCYtKBzpztNMOUp1ifppXa4WSHKSrk5m7n9XJJjIGtgp/wIhZf3EUnqCMrjwL0PCvzxEA4Vwtj4aEbmcs4Orip+KVdYunhsthnDPC+mLmbcrh3QTglzOZmT0GK1h7iEW2hpB9CRj2jY+Pb6fkv8Uyc/tEA6+YkVkHU1T3hrunX/bEwN+6prJbqtob6lnqtMx0UuQ4tdBaQB1xS0MmCAqZc8Ck27vC/JG8R+oXLsT/tE4I0kLftA/AeXOdcfctD/W6M947/IFiC8Vn9wlTrBypbfx1e4ZW8wXpHiu5stU/y0/vKjYp3bmorB8XPujNrLac/UOi328npllFxaCvhlhGrsWqOlqkuEA9irt3eZzZ49fDBAEDzojTvTMHeUVY3ExhuH0aWjhFl53ca9w7BhylgMKjYBiGbW2mh1glUGDDkKkPtwZeBV44wlKlsn3CHlLzAlEu1OgS7Ow//m8SlqcypAvloB3SYtz27hVir3EkVarj1JAwEoR/nzgetVGgPDTrMr23hmjGbzqxJvKWuZdoXyMGBNiePIB5Wh8HHIt27hGHTInss+USCx74JBarXAgPejztGTtlxtCxFcVHjEtNsprv8u9BVoT1Ha5vYcnKgthlQxpmcRxfdhQrJxLKOKnYmkHM5c4qeBYKbzDALUSWutMXQh22moyDKFQKZAr2fo9DYLRucUbd0yJoJTxiML+l/x69wVsr6G3N1pqiGpfkL3FCg5Rr969u6qn2zyfHezHXPPtonO9ExYd+ltzRHj5gEvPHKr8EG+IMYX/LrQJJv9lW6ijYyw9iqhwovgeCzKngpYx+n27FLvefo5qt/sg1qaImU5mR0AANPht2/Cn6r1VaCeJ09iXia4JUZEXfBC0zfdhp7RsPINA+YJvotvCYWia/4fYACy6B6T4cebWT0GkyEA9ll1z412WoGFeAkaNiADX/nYFThLCgk3dvUEXX0lWYIOhVOPZoOhfMZZFlJu13/7X+wAovIVZ4efJwVE0cptlCvnj2mnbNukfZhEnMJU3BqyFu+ExhtijVmWdmaTc9kb7RCNbFJFvSqQlB6AzU9JzqUczb4RW2oILS6p3fTVgLOzinsjpMhLRX/0Aa6Mh5jcNMvH+667/5tBKvxJUQMG/xFgeziYn0MSsiifLyA0n4vXvF+4QNCub28Mx1/MIBfZxMiMK9xbaw7WZP5q594PMOgi0AJZW9EBqxFuqBBiKRgS6HtMjtZFL/6+UB7hASiH5+cnpqj1S5mjKvdvAxCBTU8reRm1nckbkImtZQx6W0VxxZL2rQTsPKcPomCTQgdPFuCI0rWySLnSy8rKoQgyCZgiv+kDaGFdNk3yHqOaxlXPmjXGFGHWXIa76EhULEzGOtftqigvhtAx+F3aKoPbKNzFG/tBESZVn8d/4YHkKY85X5jHNRPIADZGCzrzcChBSFY/Hjn43nPEn8wCGB6AIdt0U+rtCjBiUfsjRv4nYfRF+l6nBqQZk4WJ+BmCK9cRFuvx5NL35Wnjl1X2eUjQIN2dI/+vE950sapr1ZJy4LvSiLLxzJuAgeQtPOGH4rInzhM8/trOXK/qgtOgY9YtqghhuYhYED7N0eN8KjuLXFE3Dj61YtmpzGksc2SmSsFcwAB3ulEu3Bypxjj+0h430r3xlM04DDs5sE2mnn2uNl5DI3Tq9OIVqOSVW/Y/CQ60DljWA9RGFkNcXLRpC4uxvUkHu8xZs2qwtpDbLhngjmxNhpg6qPKX1UkNGL7W+cuitN6I1hWbLESyZnFGp6fd5v3meE5SXo9CAOe6cju8ZjUyEbMsOtAq2Y5/zi4ViAUZ5sz/NeH0Q73IuetryD2N7BUkLnU+8/VNyj1YfAHV3JTD4wfUqPwyi1s4jmu774hNE3MqgKdSnE4kLESvGU5Z0ibF+SQVMpH27u5LCtqxg79RQW9VvD2iZpbvGgGW8MM4hPsxOBNQKMhTutONKeqq00g40Pawc15+/2aFC8phFbHRy3UNWMMABnoKnW3r3fkZYeQd+eP2jTesePIgtWkxvdhZl/52oIkRkipRRF4ai9NiwpA4BpyEFc8/B0PILoYnMELuqeCgcHG5Db6g50vhvOHHfs7F+Fnm96BOFqn13cyGA2lJ+2KfWO/TjbjiIi3jki3U0AZ0LVkry5Ri0auDhOou4o7kB36Sc2fU6lGOdWqcMKowaWbhm8A0BqLFMU3iTyiIkKr4YxsUtWv2dsQX9NyqhqZJJ2jESNt0FrnQib8abx/OzFZQL/VZVj7G3Su389M2sZfzju6wZYF9/cTxT+nplixyhl4zdEeDXfdj15X6DfHUfuivAWXIbTn/j+dOblNqKtCz43OPNuyV8UJZEgb74cJLLdunx7D08M9peENcUyCu5dZEeoW5EZnvxk3VhUD9KTy4EWvIqJNghII0AAVupttOxDFwRp+1hY4B0wcK0cfsSqsDM32a6/4NSEug8WWyM85J4RIL6BYC3Ge+YmdBf1tqGor9wYLS96m+E6d1tIphMCza4a7k90KriYQuC4ULIOBevd4mHKf3sTeqWcFfLwuNw2qpusCibydsreQmVWo/bYXPHDQQhMu2+cXD0g9bjfZW/TDwVGA0YRMguO+VjkJ8CXBfHkMamMCIEDAWmHUf9IhEorVJZWXHS4x/Fhb+0BLMH+J7KocUaiG+O9slzL2WHtEWH4L/fpmTiSXp9KRDwy2+QfHSauDwOazQWTD52NHSuH69IhdFfQeaxq+LAAKktPk/TfCbd9HIfh7UQYEalg04AdfcXi+bFYHar2k0bbYgnG3eawAS/DalDKZctfwYV4IHbIXTU8fu8HjYnwuE2K0sRpMRh4vtaziTrFjIcjVihib0H+AWxzqtI16w/ZfNWq4ktWt1gtqs0vhjlw9G5jQlNkluFETvQtCxqW2lUQJ69M7aOKT1xYij9W+G77eygnhdkGY2Bf2B2D9DKsaIOc5fCKbPKkiGRrFVtt3x7RWiWYAEwtUwKEdzMbpzaQlV+NPWgLuepNegEGq/6x6kR8Ff3K/V5mndhT9LRP87GOgjkLDWOu2gUnJPFK4T6GRO3VIk9n78PyRAf4wwwMkni+8tI8DR2UBBCvlvuJJKzSbqh7jkIeto6fRjMGmbwVQIsS+wibR++bneEMc2fsoHVeJHb5bvhKoJW4Whne7tbHSCiOkHU6ZAtkRpfgdUwvOjIh0QTlY77xEV9LO2juZaLCTJZz73Z8D9S37/RWHM/8ATTDOgd0XyqV/oZamXfbNntSchdOoA3cAXzAieIUcNbch4Hle/NWq2pgZCxcqGeFh+/TwT+CDWvoWQZbzqcCrD6vvGyOZ+Q3eDg0Cvu0/TrXoJtlZdZu2TsIBJvJwAgByhP2ASpwUG9hnjahYXjIqU4xqLTPAKoQfALthxrrvxqa79IdqH3uWJZm8RxqnVypLpJiA9xVRHZa89IGo5xJQ5FNZsqYdnU+pD6LjuUCPz1nFsqTDrovqeVnQWjWUVU2Wa0fyY387Is1bpC/KOAaRB8pnzPXl8PMsU/hqZL17tTj7PFTJ3xZnNk2LsWihxgf4T5erfM6Gv2uG7npDyJNreEqpO0wHf6NDN8rUYnkTlEgrLIdisJhK8qXKtA6GZYR5yPHNiqsquDIjTfiiF7FOW3Lwd0ujD6Sc34GIINUxhKbJNFPtElBuduv1cd/cXDa4Gw8qjt4QJ73bRtC4UWZmi6/XBqBUyXUP/oKWlhgHc6+P5ump0VfMt8PuNDyg21xuDyvr5Eo9r69rWWBnRNtHQAXoTu5lAY3+kE1iNFi4YZnRTLrSyO27/OjOg+w51PI2p91XlWMnBoC1rcn65SwlvLeILDGkc1ggOJayrNQwCNAY5DdHEehDmIhBodwTBwllg54zRL3wxW/Umy7lgs3SxlA3UmHUXPpXbxoh9LZ1cK3sH5DumfVob3JUYGZfjOXT7TdZgBkcYJVtJSkqEmaeqf0mfgauDoDNtv7PzTeoI4QOyUEEIwYOROqo6KHnowskfmysAe4JRQjAHhTCBQpg+1B9IaVBfOLnawuX4ZOnFusWw7LoGRTyNuEKfjTZ0+Dlt9pxmhw8YycXfmaZMXN2Jg2hP5QnTEaqaDIQTyzIl0ZTvwEJl4I61QQT7NMP3VHV0HD/gxjysKTfE0pLpMsnx0olgaFQKX3BWgicc9YEg6rO5VLs3xEAKu964Xm+5GcVG5KkoEKjQxAETAymHictYJePWYCPzwYvSMoWc24NOtCnm099VD/QGUxILhC+1GWdH0eYAOAvRy+XntfqOU7P10XoptQXaKwtACzsYNZL0nsIjAk95mf0w3qTvIqMf3OoOYZlKnAKcuQ3vak0myW41pWPEVQ+pVjIdMM/DpnG3aJRROE9uGK3+VfBk+VLTB93ZEpVR7pO6OKFQ4Zf1n5bkP0CBlzSGwJI1IIXR0JOjSEOaw9Y2CQDUvFcUWa/SSHmPUGAPYM4HoDxeC1jT7y8ISBK5DPZXhCcg7olM/ftwlhIKMbHpMEjZUNoXmt45ZhRNcFt3Hf1dI4lvj4gqLdWtTyspqabKYcPhe+b57CkN0NruQ4ULIf6PBV2m6S0Degulhn0eV+HIRiqq4tn7/bl9KfIy12PBPKMzKBUmhMP4d3n7N7Mif+uIBv5Uh0YoCruZObyGJ7kd2dAfHVYF3HRYeninFw5zhRfuD2bHzNUuDq6Nse89206cSfW9wT79MmUtiIRLygkbuQs1EW3pSvQzsZl4WSqQBTTBsHdqkubYC3ua3qw3JLRlk7EMR+w9gP3FMaBmkEkjzZ/2X5tC1Ht9S3UXAP1FcGF472fjVKIEBMyWf6pmD6VX7ACcg33HlI5m++KLF8kM0SOWjJ4mlZMZGGg/xPePqbGoSP6LfDdFP13dRm3v6osslqBJKTte4DX1CM8spMdOxbkw01YkzGWqoaTL5kEGojWA7RTgbYByZwOYYMFJ5WhmhqfjxT+e1QWbpGfcEZdL2/8zSfrPwxdUoICJkvPO1L4sf9LpM1OUzgofg2yBDsMjS3rV9Kodvjo97AXACRh2uRl6tT1sNlefExD6e4ou8er5ijGHOCFigUMhX78YhpG7jyLEzPIUia2XF3dTWKLZ/tcq8TIugwA8rRe5pYRanwq6EJ2h4742FSy/khROPqXzeAImFtTWbWL5Ghd8lSj9LYCoMR1xBs2BtwASJkWQxIrD/i1F3xc96/pVAnBtSTQbCVpYrZyGDKzDiDkCVcN/lGJfUsU3OwIy1Dpc4u2QRdayaSOA23KcJA9Ul2Ev1NuF2kqK5KgascLOYgEZmK+ePQhEPbzmjeJbTCrz2UU7+UypX2kBIm/YL6YJM1ZzbbQKInNAOl0lTNjrS+kT/MtIUHQyR7clkUOWappRQaETcUJXVnCyG52nDujxfaEUTSlRulqM1q5vrjSr/45QFkYEiYHezY3SPQEHPIzVR61SmbnZLy9eHhZavmxMiKIWm2IBTPJHzSJQf9qx1hvPsWJkGEzQiEXrHQKFDoJpWrfeI5OC3STKAMMZbuaN9EwPl6ptG2vjRGlaRREashuQeNDVrSN/oGNxClxQmKTHXbjBHKkamdaW5qVxF+fzJyqmGtIWIXK+SBx5YNNoxQvnI99mR+a6Kp1FlcSHUsoIzSI5FxJDoxHeGMYtNLdQxs7B34WNXu3i/ykFR+jdpsfhrbj23nsAfp+SODhAvlWk2jPSZda2PHKaK89V0TizLWg56ywBI/zi/fbWeLN5XcOqzKrmmXNaHJK1LGRBYD4ewfxv+zkpE7xum7Qp7Zmee70HYuAMuP1j9y1sbtxGf48E9gBYMJ5SnVxDulWGu3Fj8rVC5REBZKT6v2ghDlVtIiEftPo0zBAgeJ1oqzBRwM6VmoAs7k6fVC+TZwazR76D4DTB1zgU5VBlykbCv87PedCBGxPAZ/WxqGTVr8OVsSgH6W52HD/Y3rzjEvIi1BHXXBu+Jp4Yr6mTNvynUTee8bpYfqhYWJgpk6sjar5nLaO288z5NqmGetWzEneljX8gyIZFzfoQnkIek8A8ja6MpOd3+27G4u8cGgiJoNfNrH6sxsdMDrInFCqqO/waBHr9SfN/DcGhtRZ9VLinZs7nir4iwTAZHoPbwwvexZ/AkD647s1Y+jgEQjDGCAvmaRFabCBHP6jaKvaupTYWepcKNOl4Get9qX7pgL+4xhuRbr+6rlzw06+irE7kcwft3A7jipt2vlxHnoElBi2GcUSSP6vnimKsf8jvrtN9WqvhCdSFaWgaucTQBmrRPoN2tJzs1GYwu/kkPQJlUxI9CzO9hP3VdU9t7SiedjOcaTavh8R2LLCyVOO6gNxM2iUI+1r5doGt6ZUYudJkAwsvknHHh70H8wLMOD0kXv1uy7ZzStzwz/CjZ0Ws74QI30nbDfdI2TYH5By7XWRYLxhBM+gxH4bLkkzbFJbhke1iMzBP+VJPkVFFqv6JxfwdULl2syLRL9j9GxQ0NkUIViPwB/JJMDyJKlNKR55+wwuPVMyhd+c+n63lt/f4l9e8z/ubXIRLkAbv7HAQ/Z5ZX9tv6VAQ+TnXP4I9H9b8SJ7Yqw38yOe++mzmc8y0gtekRlSVa0dAEMsMqnmiMrXmrwqgkBtUu3Vdr46XCsDlCDcWIniPvTbDOO4YZjRSYXj1UHRntiHTzVOFjQaqJ/fJzkdPn78QV2yYqwwdzAzHhwDlqTK6A8YI8UjgEet9zT6UHxGjnlfvYxW7F+eGFdXW2C5/rnmXOS80QCyF7Eyki5cIoWvScIXsDZ3IMmRXTzmIRnYRUZ0Is/+Gqe/XUAF5NHD78iUFQzZxo9ZHj4d57KqvnEVN13fSIDiWU2UrKDrL1O6qdpAKsRPCdEIOT8F0mOvSbSigGZ8uXXv4a6Pncf108vZ0zIRyNhj1oDvxFpSfAhlqhqLJg6ayZC3qXQYm5sjSBAi6PQVuRvAcF6uMTIuB0pWb1BXpVtVtjpFjkVhnM0Sv+ZNj7JR/pS18lsHNDN9xomQzjxRoQKNS14qA2+sbY/qBGQRzqXJk/8ADg8B2OV97Pri7cSDOUEaEAEBmgx8bm58RRF32ssriA9W8srghuHwkOHuo39sEaNfjPBOhyyx0InDvWGn5tnPgSC8NSotosKzKX+p5jWz/54OOq0lVpdpH7n4Sgu71jvRqiJKQ3xD/l2qmw0LYuBpX5oKcohwBk+spD60PhBoaxoYYt32aR2op1yiNGKc9u+L2bs9/SNREHKjPpu7RMpqA59WibRyRbNzcETNJTmBJ/SvApuMW5cDETuO3Ocs27DGHxmWiw1J/g6WhJhw++Yneyi5NNLXYF5EODpIuMjvCZp8jZQyEi/vjTPOO+FXI0uESMBOO1qT+N41QvIsZbizPgm8WLiCmznucQKzOYwT6o/5ffAfMhhxWHovlM+TVdz87e9mKYgjQQBIJCny4XxUSRxQ8WituC0pZ6ItqSdOm8P5SAKNfSoOt0yLpVhrQ2FkhSCbf4HZWZLvV0DoinOiuapDFdi91W9uZf9RUW8Zmd+W2pGv4qvLYIQHQfIqGPiY6PQ6AvnoZENeGGAxORwit2vaTg4AyN8A0RyqzruFInVjxiQDoqnx6Sa/b/H7VAZcZT98//gIqzLuER3v/uHkv/mjFeWsbLsjhIyslI0kqUerHW0GHOKbRkuk4tvqNgMsGQ53K8giBv4R6v/zXse1EHujIoNkNJ+epZxsFHkTML9uhzEfoNh85OLCBI0ZVVsiUah9KSAD3epmvOdjDgfTFO17UElDQ+PqKn/PMfUaUd3TLgze5wuXjeJT1eoLL/8XPqTedDRH3kELZoyaPPHmkHB01JaFdP+D2533TjnvL/M2Kix9FbUnXl/s5oH4L59Bow/ir6nKeAh9juu8UEMJKaGQ0WcxhH7khl5GjxYiAI8BzAny+Ib9Rkna0rqComp4kSDKJS9bT0HNL250EaeGWHaD48KAN4WvIb/iJLpEenJnWupGTH3lb+HLaCCdqi+nSeE1YekqOu+Cfjoacy95N2MCZ7jvMUOTZmqYqGewDu17rfTSlxEAbnyJam3fcCiuNKjQGSE6YUGkEhq0wOEvJmlwtHCSHb53oVR9kAuecyA+8rVqzqBBVsDSGB55bGyOKYBJ9etj1t6ofViC9Gf4W9kqho+hceWnD54zq/gGlf+pdCSfpoNJfjd+XW6h/2fcPMEq5uGaHtNpm39oWVeupW2YxKZ0ibGb/B5Okbs05kbnHL1Tq3TAixeTetVzIPO1nO9amq5w9z7xxCLchFXzRpj2z2n8+ZeZD6dQkXYbJYAZSvs4L189/7a/xIzwZivq81hMF5qGb7fKqoMwnj9tM9c28kEcsWf2Fq7mUG7RZnBqHVS0C30sREtOoRCzCKSESOXGbTkra8Q/Pd0dgYCUcyq+eEQZFelf46JLEaqPzuB5vEUEglESCMn/8RoRgoVNiJuwpRnJxrfD7LHL4ikTezrh14mNbqspgf7vaC5aDWRZNi4roIk2cxDz5ArRcpU0KVkUXqiF/kQFPQ5C99WcFGCbe7//6xLRigOzcaB1DDpEBTNYnGfQxDzNhPSlUfhJn4SEWPKBKiLaYvTLGHfNVIDhtabwB4kQUv7W1ETWGnYEynDpv9nt3hRjyu5lYdUyrJKcARdvU2SlygPKntNMaYTSGoHxqWcl7ilXu7OTuZzomUjaqYNgo4S0daSWlqeag41iDEUYeITTipT63UiiC8+NzlL5fTQldKX7GAChxvIXx4UNXO9MySNlY33Lhf0k/P/O4Lbiep0jkG8uInAHJ1wVq7/L5oilsHfcloqlA7fBNn4X4HZDZHxLb0BvYy/tXWo57eFY6+Xn7xKr9YG96Kxw6J3SLlxaXuKjdhypr6Eo1qk056BkRi++bH6iq5msQFHP2qVftG6dhQh+10j269zEr9hlHNYvFtLuvXy0P8KhdUgQ3IxjGjsyGLrIKcYp6Cqhe+ZYbchjcTNhDnKecFXTuXJ41/+RxwIDMIblCYTFNoCyZA5KcAzrey23Kp8twIGVqUj0uc43zEiEDJaoxt77xHJcnZP4KheGr70SQFhPD/E+ZXo5X2o62yeHR7MWoPpU02waqF/KNDa+ba7YIxxrX5pnKgBu7ZjmoOxhYoVtBMMhJKTZ3xhJfFdOwmm+pfkYfVGa4v9FPjUPS6DXcI5avqrm92qg5Gairu5i0DKEU81kHv0eEferfryTyKMaXaQjawq7QHgr3pDS4+sael7VlHgk6nTuR9m+nUPF/cdZfWZSAA1FEKBK/SMn/wHYywOYPtd9ePpb7ykEwdaxJtWJOVV9v7UHkssuRz4u4E6zRVdav8gdHSVoUaT3r8+mN0WT+oPbjydJEXOloTBOA3ZnJMiRU5RXO1EV02doRSGKVtCTo6e5TnS5XIHAZeE/A/6LzY084+z7PcG3fjyYVYeYgUib4WGeYjd6Qlrd82o4oytaWWGaBlFEs1JJGH1e19q2serBDxkZWxGJ9mBE/iHkdBZtVGAzEVYbM3LJL/zttjWJ85hFUTA43smMWD//hm52YS5fj7D3dGHSJe6yK62KvdnYYLKZBOMAAN70FT6iik5LaazriBH5yulxZxkeSRDPzt3K/p32d3O6cIcywcEnaUjPJbUA7bTjrevDSLMBvjvDzG6DWbQ12FhlcsXVTC+2D1LkVsmlBQoYgwFEfeJpba69ySoUty6hYOFTK+tKd0YcQlZzFpJvpgpMK9keF+EJu8/BLZ6+Zo6m/jXAzdiguI+zN9+zWTTKARJfhx292MPEb17oo/Zh2uH0sRHtj2curSwdo1Hm8M2GujNLTbuOn1vv+DsCJUJTcCAp8YJXf4+D2fZKrXrMefKfpKGAZPT8yFBjLKCmMLyRBnRvr9Y/19pL46Ad+RFFz4IoTS16TLl1y2XVmjbJUAfDaWffhas5iPH9l+hsx8SK3NsGcD6I8qmjOy4ujBx8yqdpGNJGTgHAyQRoXFT4RbYexO2U4yTZQ2Gg6Am1SRMqzD6izZxY0IzkEUI+xwZApBrwCM3fH83pjff4KXpEGFVZXB0Tb/9oiEVdRXnOaQD1aqIDFvc/xQ5Vv2HufA5bitx2aWr8o9m6caleMHhZ+2LX4qmGNShZuG7nuCWosPBXI8avhWE8Tb5zDMHjOfcDXUVQnGTbGWo9ZyP6wl3L98Goj0jwg19xQVgMhqgFEI/YDSe1FzZmTiVrn3t+Epnt1lQM7juEDz6eY2Wua5UPimjgcw4n3kuFxSUqO+uYttzyJWXrELWQST9uOQxdAfBAPeNh6AQz9W63BJS/ZbPRCdJxgR4cVZXZTuC6aUKm7GINDDB5GaO0S9A210bN5DwEbXmd4RQeTQzdSzx0QHtIIXZomIIz/fYcOB0WEWPFUpYz9Alqsp/pRKREyEwH6IG26PbT9lWTmeUDHZnJ7len1Jp8yOXgNkLXbEesIVHJWbMwW2kvbxG3bFCA3gGqpo0Vtm1oJjeCRJICxVNdVnJm6NR+4dzc8NJUL4l5KExpgv69CAZFCo8nY5cRvw8B/GOGN4x1uxbTZJZNIFbUbiJGfUdaLeB6WHnS2wBP3AtyJw5tmVnDHchzli0OYCdwiYbBvf9pNP+amfUoWTMFqtLr+dsVNq6qbgg2h+uXkJ4TBZCUKS/XSNgzd20OjdW8MleNUGqNLYkZHcMA3akPXOo2rYe/TK/MEuIPdf27cKiZ7Mi8UHIoL8lL6sTyzrbv02vMlfN+4rsUpRPdlrS3v4Rxve3mV6UcH8hCxaN5rIo9tG4Ig1BRwtFuPcQabYJr9SDKgBaHTJPCtR2kiPQAhGWcBk3Ztx5cJ6+pSC9bSyfF3FjavqAHB0YcJxjKh+0/t8KG4+CicllwxUcnPy5GwNqmwKNo4qLKci4ocWYp701teGckCzMOy3/v/Jnu2Dm3WhdxlMRrvN/6ugxkz5KSFVNia50cSctyySiUwi8M+eGSBr0GUS+ZOC6+pMbz5rrFItyiVneAsiy7QorO5sMokcwempwRfUxMAqgh2N3TUEHfHzhj9hrlwaDUTmA3J9rkghuZTBsu1ekjhLvledOiw4mqNhVdt9dL5ecK4YFd/rlTTh181rv/ZBLN/SGkCuU5gMJ/mnA1UiJ7jGi4jGdGKDu3l0vf8J+a0nK0NdyJFOki3K+zmloykhrQh3HOAWMhiNljlBqXrGBSCe0G39W/EWNB5OhpbnHJL0GxZyXxVwbPcW389fVgLRDh/Vk8PHU54LbNKYd961sD69+e3cjdThheB/k5oTUTCcB1S++idOtCEUVEfItRp5wYF+oqWl3jH4JvrLD7JWki5MzDyQunxYbVZMpdzBwDqA6xUBKjiCjcxCR0UKv366P6cw7TWnqA2essKDuISpUuGR1k9vOiOXI3OQjRI5khEnZNoKJ2uH6gSWwpI79GLd9x/3p+tq+URqO8QN23VinlDLLXTw5NuO7I8t9ghio87ep2oZYhVwc+rXUa/86ph0IzZQkJJCwJSwECVqc2fpVX6aoFSkGTTTCRGo0yICl1LHr82tnBEebEOPRpYOKGd/GYaRhH4kQOQU2qkhxMJMoHDlueg5+TIiwhSRIiIXiIbcKbcAIcP/gYW4FCwttxlTdFf2K0XOWmZcY9I98NR6N1GgfAUzFf3mtQjkIcITQBjDIzuGNIZ+KfsNCmLz46JRBGu9/IMQPhkRCNt5gOkkUWiA0PZI+TBAF0NjpNgc890n4Od7oELlUnGhuH12+/lIUxs9f9yfzv+u/5cCzS1MGfaZ54TgvIPXQ8cPCBjGtLCCryi9CDUafg9S7bFFzNnHaOaD6dentq/oNNMPQb14LW2DjWCzUxKqo55tg6aw/4omnw+AjHc+NTC0Ao4zqMukfNcZLxFGCV+R92RCznXm/fonTgEazMmlMGWATdjv8kp8dbHvOIwqoXUnifTAcOTUBJ5NC1Ox2ptCHhxOzamcPL4zPL24Ef7vVKgArDr52Gl7Md50vvpAAcdKIrOlMH2/JOdH5wjcLAaNv0FUm10FvQ6Ag5FMLPdXcI4GFuJkJbj62TTgEFDZmbA6URdL/z6xEDzuZ73hEpGITItmqQOLxpA3Va01etUTmqKPtVhzLwyubyEDOhp/lsMY9yHfwnT5RSMtL1eQ8uiMbQFd7BywezcmXHnrl6K5ihb/RMM+Jg93PLp0D3JedrAT9nkS5Ib/67mklIiWF1/wACO4NTncBqMsW4cbgtweTeCTdfBK0llttER20xki8jf+ilKKfFtLSmYg+BnrxgnVUuxCPNt0uri1mznJsdMCDt24EyB1XzbEI1f8FAZAWJM5pO00BUQMeEdthGzWxp8apyU5gUgNcFZl3cbUNF/LJGZH+v3ERGVi35m8JmIWh0hv0h/zTGfr1DEm0A4A6j0CYA1/c9boKSr1GOuAil4N9WA5sxybtYktkGthtDDHaq9L1PXM3oGYF7Cz/BuQossSiYYjajaKYXSU6IEDy5YbyaRIs87OEEfNw9gQ5vWS12hrBHf5pwAboEf+MOmSpH2zY9KQ4Vdt5X2e6sHTVHdxLqMgoj7riMlNuuLtba/AMqnwaK1rI0y89mcFo36qMfSztQcBghAolP1xUX9KRgAx2vDUuz7AdK/8z5w881bjFmdxxhyJBWECdXiOTSr4umzBM21Nv9QoF91SYvLSy9Cf+qV0SJ7BCMwuApo3wG3MIhpS3oiyTEm8DI73LI/12DQT85bZ7JX/AyGOoss9vSjITzy629q4cH8nTspCCyRp8z4rIYavs6xi1dkGLaiCyYbKWqk+Oy8S0aJXBk1l7okjsulafnTfKbQgfTEm7iZxvbByQ4M6cctgEBRKwL9n0SYLcVQOIzbtQXb0sdBLkIhJtfX3IkTxv3HcyceZiwg6ciRa3opcAmbsIh7ky2IEU/UY/iaT2+6lEJzh8odXmRn78hOVRnC64OlE6ZjuYAB9XZHCAWKXy43t+odTJ9cvSsvs+hSNchNUJq50LSlxFFDADvpHPKJVeO6BbiUftZjxizLBT/zYdRgx0RISfI6pj/yCjCfrO+DOffttW4v7Zf4aK4OSjFyTM3l9vB7v2D/ulAw2V1ShnbaBPb7E4ClN/z1WdZBwVeMtfvzQze99s2ccQVGzVj8SRI18RUQmsc5nthMHVJGmNurgI2NCSgTO7gnnIQl+5kblM1vV7wtfHLllSSIN2cGlrsydvrRz4gwEjEgco7J8RhB8dtXCjYDWJnC6gI5WWi+vQvK6mfda+rffdkIVvpxBacqDI2h2UkQL2LtjVUB9FiJjLx4rEgwSEMYiC6jBtphYAj6jzl66wRv9Ue5U26E7YsVeEomw/OEAe9A/1YZG0hr4AdORmjLKnmNJM3cqN2SEtg+yXh/kA6pQLZSOOG/KQyl7DY1Dre+2GEqHByeuiFJtkbg3VhZngGotOOcetG5DOPfFnsWPqgDTnvTgaSGEsKPNpuK45y4L9JymXTKpeJHmX74c+ParYb9OiBJngNh2v+605S9CbhzYVC2qnfTB0j75VVQQw5mHH/T+rQ7CvgAYsN277Mb5+5ISt0JeoD1Ls7fi1o6ehYohu3HEWHyJHOw9okKSL/H155hKKvRy4gHaXmkMfleS5shrudNhMjL6CvTS4EoUHvk/d+4awJT2+5eE7woLdfUW4ckD5yaCetRA/fDLfUY1mpkhEIeJCK52K7t5XgT+SEHZRmUExka8NrX1vqn8HAfD/hmjLfrWn1R7WusAqBetnRWlNlDtbVFOE3mJszwvl5mc4HlfqCnNqJZg7W21i6D9TwnRmxy4rzb1nImY1fta4fiFt/73qFT7YgGiuioUTgR1q8e4kydSUYCSDr4eotnbqvVqBT4JQhlx51v8Zn9zG9abCA5hDI8vvGECYVnMHeKWyUzpwRe8ghQRMJKC7pEJ/G0CccQv8lIF/z+9TkLRHkFtopAxoKJp1SEoZOnTVYSgZs/ayeh0yd+JJbYLI1ZiTWz8FiT9EgzmgZ2WFEvbhQQM8Q9RwuNCtrpkYuYWWke+RtzH0AYNKaIaYKSMh3YIN4en78e5GUGbfklSIhY6+Fv0D2RaihfLV4Fh783MJlZKztWAaAwHPkE+rSmhRzLM88ukI23ZDu7HqnO/VTENXsklR+ccuIgtOE/zkt+Z3kcHoxWElF5+U5VT7L2HEARx55Mrz/dqTInXhDkgBniJG8oJ/YKlk1v7qZCKVYCwoL2xlkCF0IgKzUBLwdKdSPHq7r+xaKLT2x5/c8VfpAV7UNXclm7rC1NfnTXIuekRV6Ps/TBS48ep5DY45L2rCYaqnckoaF6KCtwYpJQ5sXXRERH9V0yHY+piMkFSyovboda/1WFQw50zD55nk1JDjEkdZseq9Cw8LegofxocWzN1z4QFuQxGXHkP2WPihWt629buJFAsl+I3sYsJ9PbP2B1L+yKlfnTzPasPh5PhV0+9AGVoLMUlUNveztgIUFghaoomgMbcmMvHKRVTP2em17uUPSblsUuJc2LqERunIuJc4vILiI+SCKxLR5gL3O9UcsCbO7fEE7Cd3KkXW2XXcTL8GpUppYIgPAOPbe7/B2128hPiJ+3SVWmeMLD0/DHOlERzEhm0sfSzOxNL+fcZP10KAj+0lREevIIBIaCy9xfvKERp3zz9ysqz1iACzSTTD3g13Xgs8VfdrX4jHkF+IpNFIIruh2ujJiJ5dhktVyPUWs2B4Fe/MTMp003KXnAaksdl8+du0jURzWcY11edpGxwgTy3nnKfj3Y8VY3JB03HbFGFzfsjXSoF3aimf15yjdmWU/hR1vrOhLBq/aN9ScqtLGeR33hUa/W24uPP7pj2eh2QZLWZCMFjCnxHiwlXyrq97gXH+fK74Mgrgtxqd5GrMYjZfbYFAImCLxNWYsk5rU8HvgMKjQI7l69NMMclEV7mnttl6i+bqFNnAXnmqfrVbuMk3LRNzdvgLosgvV80oMR7p9gg0Z6xSeRjOZxP/rxLtFyMgNpMaeDsZBgAxuPKrfATe59Kwm4c8Clp986VFrY1RLyYo+RareTuaHBRuJq8RdSqG2tR/r2YJ4vQSfwZZJHGlpnBJpnsGYmbyarHc+e9fpcfYOvcOnmNIDQZ3sPN7UnxnPJVxp0qgZRvY754l1R8eZ/DBGzj1XBlsdy+4VF1GeuNqae8y4lpOxooVETjGhWjhW1l3aj0mlnVwN9QXtoB/YveczQ26bDIRAsw42QpxfvZ76NnXfiPjlXQy+Yz9QTz887MGjIctPZSMe7VdqT7sqw2VCnafMS9NZqFvg2jkPTXpnVe5TFiY0KLOSNZNwqj3G4CEJsHyLFPAJxjfR4uQo+sZ/D77STskv6VVkAEDgpdi5Tx6XOilre+BPybadTWceHjMZLNuXt6SgRz308G3wdXvLTVXjPBcyHD3Gs4a6BMWN7rx1JM5WVkqxTfMY8/XSGiLjkBoX9ACTU98FUdPHoCdGfN6ZsvaVq/RY50ggLMrrdCJOhiDHumzzzsU20PVSFF1afYqTkHYWdd3SOR9AUpSiJvwxH/tSZZumZn7zy75HNbKw3O1zb29brqAHrJLGjr10+Zo00U2uIWtbS3I/nEJGyFJBGyw2uNvUKva07GBWnUetfVdcemqkPOMPnFPtfKLkB4IRiraZgbtFHBMBtJF9ZVVHO1OG2V5aJ5qirKu/OPRRH74d41gw/u8N/yybZS06AmYZKbww1WO75thFT+yRqDw9UA/jvm59TvIrAaWLVbvud8h8B7ximjJaO5ZrTCBnMyTlIqAOeJ6FAML/puIVbe/YxvGUrSkyGeqgBJMxY0QgSc8azbYPDs16xvyLVelpgVFovTTA9cUpS9Qc0NqcPkF+TZEK7cI8m5kdOsq+c1KPSy4c33rXJngfxvXAzbXlz7y5s58G8Bv8EFJRRd/peNU98SyeKp15mvpR18IdthdWKZiCZ+sfPtoXc2pPU6iMxn2LHcXOwmvcqfrxyGmT57y/pOtMQ6kF8yGgXF5R9wpP8YYLJe4kIC6ioI+/lcaFJv5TdJ+ZmRnB2xuvpgK8BuKb3y2cD+7Xq9uF62p7nN3/p39763Oe8Nrxgy2dhQZqfEHcOL2RIHyL3tBCQ+XFlQSVlgiYnE66Cxi6o9YOzH0bEtniXPnoiHso3CDFq6v8Ii0nVuii1MUchHUmyD/hLwW3hH+mYGVX1+/xrJtLilTm9+i0Ohr9FU/4Wrhz9MPJWzeZHrxKfLFjdvTk5UQObDAwVz4fM+AAImqyjgXZi0+tqu1LO/S7EVyeW9ID2t4Wlts2gI2DN2cCsIPTCY+mlO4i7c+L4Bkcw1NMiZfNWY+5BS46xgSiO0CnEZs8d3BGDdUmE52wpWgYErbw1dmRcgDKlo9+GGx8QSXugueMcioKSM4d0vOyRd0ba/6Yb1Lnf0oucnZncDuN7ilSNC5MKk6PUYB/qLQ+p4/jrY4Ula85vFOiKysfA/oxqN+GttlEW882sJXeGBRmGpiNriGseoud0UoJbdg1ebTC7eyNv86KyulpceOTGFSfO4JtcUxAm8BgufQMliIg3J8KNx3snJHXbK03YR0q50myR2/XMYG6qCL80Oh2SFvZgiPOi2TO/iLRIWWRllMU6ovweLeS7BpSTSaS/nMa/Z0SckYBG0R0rSo1ro7H3TCRmDHDoL1bCbkBoOKiijWObumENY1b4XxxYnzzxNt/9xG26iruEDnWRCgaC7L2LRhuVLL8c11eQutBSWu0NWpksKaX/WhOmbCoZkNVK1kFY+sQtc/gkA5MvOOb+RNyceDCQ0Q4YagS9lUtOoZ1epZnidSllWB8ZRC260JEC7kbkU0Rwop6K238qCXzVt95BmCfzP3Z9HcW1gxvxKszYHV4ahEuAOXQ4t35hKC6V2R/PIoGeLtiM75H0mzXCDR3gqZ7HqxqU0IDLjsv56ERq81vqJSsB+YwmQqhemdPuJLNDmwqxbZW1N8LIp4WZROvVGaJpvsEI7RfkZNbQBvvh82bFi+Pou94rWeXXnqf7cI+iaJNhWOVIgX8b5loCyQGVO3svuL9szlbvd7psfZeUojBm5LdiLEhfeNIE4mcVOWsNolF45WDZzNceIlm8T9vDm8viQZFpd/VF9xndL6172fHChPXKen6/NKBAn6jjWCRGMnCWlHCHzvE8U5stXqq94b/7Msuk6HnbYSOiO7WCD52RyHeQYtUwQ5UkLFWyxGzcTe05mbbU/W8O3gO7dSlafyh9f2QvssS1sCFyvZXjlhJ/3XCxWJr1f74uhUyHAuitbtbnxYU5Uz+AUt+IekggN/nI9fMUzeBtBH8ju4q2VoL2XRqmeDzqCFUX3BxhaMgCocAF+kQZPUCRV55PklXSNueFjagcu6RA+lPSf9ZCOl2K84T2hVG+3Z2WSVr5AKC8LdhofPvOsftdRPsor/YVt0WBBLMsigYsdNtLcyLN8AMQtcaLV2zkhyZUeCCmM5l092k05EsTWFmK2RoXfwOVvqFH3ghcRlWdt056qAks8hoDTeEMkdGqv6O1v1JA54lEok20DND4pq7ofCCbRedW3kH+jaFtP5gtlyvcLVezXeT03N2bngYV+F5WR/HmXiGU1DeDS6326axO9TsaIc/MeHxCHSNt7Mi28sgDIRbFDGFGhZwecBAgeVqRrrlghCAooaLirK2VtDa7VAcKlPsuRA+WehpALoy2I4aF6gFDxQsJuPglFm+HWuURb2G8NCrQnpo16t5LobbD1FG0wg4pI810jaJjHquc0rl0UHjUS+ISdWivYSkTr4Zl8Goi7bX+i0FfX56eV1yqwQNlE0rT3vs5ofmoX/sc0sW7WIuURI+OM+JZBIQRnOJWuJDbAeNlyLEoQzSnrIZnWSbDK6TnRtNDVXLJbsBr0O/NV/I0TYjOtbK1iFkg0QN7rRYhy9EDH/ihXF2svgcZLCwnT+eWlcm3vvGbfLENSmDu0gXo6D9ghzff9d9Tl44LVEBBc7Ql6BMAgjWz9m9aVFGD2PGRbcICq6VpLH2Y1BLbQM1tsJLIpIAz+3+BnkPBjRN2P2UAQX2vn7GSYSYHlcLQxN4wh0WTgPRMn2aDTpCaQmWL1XhaLfAjObCAMNVYyFGUZ9NmsLBYqV34+86yHBnOSRsCZm2J8HCHUFBIm48A3ulz3XxGJHjgZpLroOj/zuY8BpUPPqokIMlMF2GriqFpqITVgNeFtxEsl7YzmtNOHXG3AeIPKZYae4RXn+yBckDfA1LP7Jv1bUmh6npWIWaRq99hDy4+4/Rru3PhVuaCyFL7cSvPaOC6xn3RCVMqlPLvpQxkFTYTZ1eFJmApfhu4mAuxpDE5Va6OW9giYKl/mJ/37+MsBeXDG90uvN9jGFoyPEJx0NBRoJm/SU1WyQFeeNakQF7F1Ftsd9FoZdY+iUFotrIk+yV1JrwsQxhR94c2KBnD0TpZqby/yJPorrDYNRnX/fp7UwLLoYRdBeoJIo+UCW/cPGJ//TfnP6W/19iaif6kg2f1SYl+afeBMqByYP8mBuxKLYvL5b+HDjECnThyr56zIgvKo+dwKaMex41W4JmmWLiPr3eTI74V9JlAgkJCI5VPrTBm+ARlD9SQbWToe/GQIiZ91oKxVU8VIiLY7Add7hyP1Wv5FmHWP9Ks5bRHw6v/rNfIZHEc/SdCQSfTOd6BD36UayKFFCoNlnUcDBilelRCDqTUKeihr7sQCMZZka/spqV6jIIYIotcRZvplMtkT7r59soqNqJqPQqqSi70c7Mjx7KaX/M5d6v0OpVv/jTXtjuGt0v0yM627kpQLqf1plRaGY7TIrnfoCyqUZWJFpdmRjsDkj0s3nwe6DT3UF9kPip6yOgfmsVFLROEIayhfjNT5AneCoznuw927wo2NDkSmW2Q6VGJyFVzc4hmOoRxiFRXqqVf491LEAGORzD3PVLg48jlfgqXdXhSk58NJZmuLrvuiUkikXjANHiWgxYVsICv9OjwCtISTP+xpRHEAPA1xwvq7s2lXCqwxgLSQVUkOgvJrhh8kM+X9PwK29a7pWyQhn7zul4eqx7e8SaEQNVoc4YzWBJfvZJvLhcoYC6Pr6bduFGuBede+iCb33Y/7vj8nvAqEy48tlsghK5hhRHQsSrFL7Xvwlb+cfzU8qbHQu3WWjroIZYkX1cc9Zi1loAOvwITCa+soSi0LgDCXIqPFexd095ZyIAfsKif83ag7abCfDiL7eZG3rPJqcZujhNW2uAoFUC+alQs6SbCrqZeR/cTV+asxypSy+a1uWGfbfT33r6MaUmVTPZSc/uYhxYXCOy8P2XKVFAlOf1zxx4OLHlO29EvsesvVhZwAKxhossxlI2QhPebX/Ipo5KW71zbp04Wi4+SL/Xje1CBYK9CukKSHT+02TyNvMn1nr8Hv73V9G+6RvjX9wmgEaGTobesNaw7jdAgaTlLh/ilxDriVxplWlQhCckGe9nKFahPV2SDtQWdnbTKucX9ZyRnGMUurZRxh3+8xb87jGsgC5DXYIl2bi39RfC7CWps3OCHNJCOQjw15w7yXj9GnDbxe0wTl4crP4Zh8UExBKfpqRt7eg7ha1dYX6O3zGukyCASREU85IrLyYzHybzhioeials/4GfDUKW734Sp9gIZdyEpqfu5pty4dqfO0lg/ubMSzj7KdyXJ70QjzoNKqBTJ7rqWv2xjDqmCSAymtSIQ9QM/Dj5hsXoEqvmU5FC/qSL6hQ43ky18wyGdae1FNnNww//epWjR5hdg557XMeMbziYA6Cxtq5XL5UaGRT9+8jsZCbgvYEiAxspzooa6OpKnBczePaVvvpFVu+U96s1iNgV7IYvAbjvEa60ZRKu9cBozKPMU+V8oyrF1NkfT3doT/i3bIkZKZgsaQm7nrhgj9+ObVgQEgITzeTk4RYAEf2Dbvs66EBP0qMuINZUBADIUuQzT06UFJjLa5hokAwMpgg6x32/IYKsIml+itPwoAO6/kfzk3Q2x9w3a5Jtp1iHNqMeXNcrW2+EAH3Ph2wJuzgdeOsKcB2MBASV6xDkBPnzpElqpMI1HR+EOVSmxwamkYqIYJAoVCmVWpr2VdH+QhRFP8zFIHE3SWriLJMyYXbGRlUoOjCXWRz1vJrsLLXh3XSkRUEnm0+ajV41jc1wsK5DkZWIRXE004v1Srn1Ch4H/PO4c89ITgdfFAg7KDS38rs++dA2knXZYp8zCY0jatH8mVlxXjAXuWfrqgH9u+aVvUP2Vb2EeyFQmMK5SN5W+Wr3i5AuS/QA+xkrHimdnAmzdxLN9lq/vJ5ttWJLwkXm1rJWblZBMzmHrMdrVvMkgMqceqI3pj7ALrg5v+6ZVRKrqTQD4QGXhwt/snxYf5fmhIy7K9OtxusAx+bu2V/yCX//oEGgm5Hp0/QNDHB2PeYZDH776cbhnX+3hRhUxw9W94dt5TLPvjHYS+sAsDvp9WwOXXgreY1AD1MMXxGlm44EQ/dx1KEgFTVy/JdBGJNQbbe9bVtGqh1B6TAcR6p6Qjfx7sENtLERgyqPP+K2Fk26qVf93Cu2HdJMhvONXe06/nAz6DyHt5RJAr4vPzaL3DGDPjtS4AqDwzGvvDtNlilQTTeMQK3ZT/lucPsHdwHxOb9eRK2CnweJkARC9IAO3mBy6+AXPHeI6u+cKcKy40yFbAvFEE0hJRFZchU3Hb3KISOcl2Ma7b2b4I+BP+6K6s2rq8az+tjwfHF/wJIHEm4K32afdXlSwj8ZAKQDNnfF0t+ktFm2HQ6Be6I4y7WfnSnxjJ8zGW+R35CrkxNs4RDVQ+p0+dNL+1ZhkaWU59QFmV8exp9Ch91vFtboMpWHMrgcwTOhqOZJTWtzebsvRZtc9JmlqQNgR4KS+8f4E7luE46ATeb66qqY227bhwhgRCku4aeonDyODyO/1EibNE7Uz0Qeaxv9hk1rZUiUQD7J2qT8fVNwIjsZbeBuDWJVJP2n52U5qzPeum+nl8uy5mzl030WvEX64+J3r2iOnwcmy8cyFaTijOm9tVNUBtkhJJA+GQpursxdKt3ix7x/kTjK2u9RI4/QDpZG0IKMBXQQolNJGNudGqM9r1VmrmeNbxPemklsl0VHELaoghX0f4qZobtzKfuzTKbJgqAF80PllOSdNiz9Sg1uW75RhD7f54YZDJhSxOMldroeoGHVtGqjr6gR80/3ZaSv1YOLuOlcHTWFG2ZqFOvueRe/c1W9ns6bO3izqn2lXecKQtlTSoyFfDXxGIdC8Bi4aEkuBw4pds1NIBIN6ZMLzfRArkSGBol21w0f+uQegfCovWMdAUktKcpzV9ihvV6u47iXZrpPD9tfLjPmzrfOXCedaB15EbnxwuMBpPfa6KWmpsHdNoH24BctB4hh9N/b/SmuOcsg7Sogeh1JYL42aG4cEPE7kBll03k87CDx+V8HgNvZUhhUOA3LmNyWtBGOG/zbz86knowm7vP2xH9Erbu4ZwBQdW84z0wpLH6hE5huyBdJnGMmTfaKjNOArzd4XMyQsJZ3LJFritak1g6cqNCm8Ffm1bDvh+ZsRoGgFppODXQLBnRCWZJ8qhOJ1fBcJkZd8wKD2FONoJ/IzdwWmsJhlwpVCRbubm18aqTuBwt7q4TOSQT+HGgkjoXzb3c3e1QfI0v2J1WsoFdKYyFvNwucW85wDN2ZPQzCVfQLCqK5/pGLGTnfc4McIzN6OXS9hRKVbQT/WsK8NC2MHVycAdpYZEFRSnO/aaS7ag/14lQzQPR5trytp7lrZwwlECf10hNsyrF5lArxCB4bJ3iBHBXLrzAsvAy+dXd30FZYk6AMDfX8CSQZh53XB7I/+ntc9PQlfuwjEzY/UfpzLTK8Ug7ZDVtA9lwgb+ibOSdlQ3y17NPeKtsEfJDv6vPmot+YNkm9WUGd2RxrJTor292cAPGXuM97LJbp6EBfPP5hRKYBuUIhLnk2ItfrXD92CFr18Pq73lfkjfGaBvn1HJUxYl/WFdUxFPbCaWhgCvfDf7nnNtmkvGZJpG0R6c2amNEpIA/7vHN+4LttlfWbPboxu1nu5IhQtHJWV2glF4o671IINvU1iKa7oCqhjfBFCLZwCiaDvp3dSpED32dDCchI9+3B5g09/IYAkz7Ro6kk8tFBWDPbaCuvRbAznQ7EvsqA2OWFhriSinwecar8oavrzQ6dCS6NsCG9a26zSh9hFedHA+DraeXdg/tIWctffvJnHusOaen2jSJHBjq3A58fo9tPIrZmKBidRcuVBjMFcGUa2hgS8NWcKIjjPUuWLqpVHLgBndh6ePz9ejbYfGJxIL81yNk8oK9JbSVyp0vppJSVDFvSoNrEvikxGwcmUxyaTemEOcKpyDs3md3TwPe9YZvb3EGx0KqQ4c1imuCeqT+A9Z5htpPnKhmGFcysfrGFHy5P8tGr0KPesDcqQzG3LXmI42Kli6qbfE6AJGi0enVDhXD4X5wxpaA3C8gBURsbE/M/ncVqVKx/5WWCO+MLdHcXqvCzjf/21AJksG9TxnT7BuCv3e4n5Ie0klfI2NUWPavN81r5AgRHMz+kWAIbhhJIV7VT4dCrav898tGoX6JJTxjl/kfF9Un8F52mQlJ/HLRy+KUucZfP50mEk6TzNcGnHMjUY3/2d4R3jOO90SXu4tSFJ7o2sUjtxAisqsks2qa9I0+yPBcpL32e4rMMRpvWELwnSNx42gAe2SQ6kzG/mFTtZQAj7E3fFqEhl7/SQ1dI70Hno4lydN13Vyid71c+PugXz4g3KGIPb4QzIeStSBn0CS3sVwUBXzSE8KWfTkrZ1wpdYSjgTZVlr7zi57NZueEqJTioiwilrmYiktKhd8utRRxpjnd/1XvQECnup/6aBnyhBhIRjEr99DC9N7BDLoahojuvgtSESe5NraJN9jaQe0Y5xNmOVkuHMMK+syJktF9fbLKsDL6F0s9Vi295SaF3jWQ+czKJ/IqJWXL8DSvtnrOlbASnV2zFQwrOOEe9G1v6OrEEbgU9hVCNQdCBXfAZd/aoXK9HVVdVWEjMtD6QTCXSGxwZoGLatD45XW5X2R4OUsWN+mDCbqjCr32bLr4x8ltjZgq6S3ArulDKtyMM06phDPt6dZ595PbTT6ooIuaGHXoxdQurxxTN1AxwUTdnU2hDvM5qJlgI+0Hf2CrDPv3CAP9ogu7o+U5uBXVBVruv3hC8Z+ILqUM0XJQC4tbtX8hEb4tIE4UBoroXzTfmoUXtfbhq6l/vrxvueMeW9gNkB+eyS9RxknNHwYBRKqlgPrN+de+TArvyAuB9G+WVCUyG+nK8jQn2UCRxyFnjS8CLaD6shpsJpH9HSt8/Yj5JNa5PlSgiI6PR1jgGoJQf9A3cTScBgZ+RPzPsOCvnhTSvBYGj3SqgBQo+9ZCCxuwJQU/dTbyklCl9DVyXeyzqZZRt+XzB4gl3r8N2Dsf8jEGB7ETdPGFG8+e7JX8fZ9Rf2hP6sOtF7AYyNeqVM6nR3tHjW3ZbZFLbJnMXbUYUmi6AL7FCg3UuM3XaXtJNMSMMENPajuHoZlX7WGU7Y9kLAsNHKVwHcPBPyFtDckIOD/7Y8M2RHUWmopcELRkdIYJpfk1fzfTzi6PikWRkPKhfEnsjWxLekdzoYR6t4xj09MNdfWYKrFfY+9+dml+jqWHxjQnqyRfKRofCzGC8IQbkP/NHFn5TeJOGAkVlSQmowNebaPuachvuJEJJXwyh/mQA8IY7jo8orWYluslr87bkLIsoMxt4vQI+MTLoLd31k7zBCbQaFr83z3es5MkuxoiNQV+3woxIqxjq8K08SbXJVuZmymGAy1CaoNT0qOdnj7oEs9/gonUgO1InygTtBtmLuBS8UoUMfWd3Nz9rqxwlnGqG430ORXqOv2wnQbO/ED2g5Pjq+NZ0ojrw2DxhyxYnKZ2DTPZbiN9tcsT+DkHGrbEfYur2XeNzPi3vSTkIWGvywcn0wRiLfNhvKOZxUdBlc0bO0RnLR8r82sN8DvBVs8ZCLZNyEkS/f2OEkyOLZ+qQr93oXlSUfox9zSFUnRCFrOPH9IfJ0scG9OMxfK+nBWHxUAuTyQC0DUVDzF2q1VFmIjL1+6GsA7dtvNvvAwhH662i4ARhuAJnUhzfH/4QLN1SjtCRBxhOXLGjzaXU6UvWZqbznKpZl5XbEUVcuqed0Do4W6RjW4gTSPD88O6n+UJSPa/2ibMmPURveg7J1bf8n4kkBnZZF1K/5FkoaGqiam37TZFCvfWlHAH7dDj1BzarwNg4vtccEm6ozfsD7Mr1gIBQ47Lsr72dMfskLJQONh6OGDvDMzUocbCKw5eZctuj5MttBIAlXM3zFiWIaqodwx8VjraV85jqV321KiZoOV2PVieoH56l3iDQ3uQd1XzUzvNy0s5pF/trf1sKeNoOTmBoiLQB0l572RsMILwjU3dmFCr5voNKHVDjkRSadyyMYpeFzx9szSRUioxUilSfptDd9iLmJuMHM/luypIDgxxX7C3+f6PhQo8562b69VemJabMsbZ62iYbGdw7b03MMpyq9jPMrcqOSxnFNi6rn0ssvEL1y6q++EUb9+Npn40N5wPV9MkGhdZgUQ+S1VuURIvodmnKK0laxOSqjuvDU9Fu2z8r1gVt2L77hJ2ZlbBp7YxGzqVaPy/xNiuqcns5Hv0O3BNd9kFNWoHAmcFvD2+iF6nDV/CN1tOZYQXMzUEiQRo1/jtz0RqNjZgfkqugph6ZPx7txAJkVbaec+mckn+0YQXaFBKQ29PjHVJYV4S3n94o4s3gVgdShhB5ZVJMhXdGrV1Jof55L9GsFXpv9i3YlHRdcfjY/hSrIdQbNBrhZkEK2JUsQIzOzZD2IQ5OnaNvPhzMJy+abfC3Xi5qj66p6hFgSkFx1k4SZV9ibvVW4xaFvfjqaC5NvA3NZPf5iwYzT3+2GZLfJLVl+O4Bgz5JFWCkY4I+niQLS4Gz23mLC63qFQwKyLQ5Zxxb1C5+HIUK30Ad8zM5EAJ0JGApxb9PWws29FL2xRKhuZ/TMjnlwlQlFm0shBcdHca5xu1Ge8ys39FlsI7FA9Tc/xkipr/DwVVDkyh5JqjcbOEtICO3HZXaUBe9sARXQ2+Yh7g1f9hye92Xo3nqMnZMbvoVun21knO1osI4zXA8Tk5yfh6M3FFjO6MWpJ5lp+qVJajz6rAxs4RCuj5S1C9pNAdq11GNFino3u6onnPMbhmstGowtX4YJU5YQkk+UOZQpArBiKfYE89kksOhqpJbZkg6XWD5BCgFOcWv3YFBiBzPUP4U0Vu+D1QU+4rCCPFLtv3K4MeYhvJLOgaOpjYdBuowmJ9R0ftjSHW0KGoWhqQzF1XQaH+7n8Fc0vn+nZ2jKBfpsm7ccXVTngZRnC+m6/k8ZI4raOoCf4v75q+IshFKYCkbqN2J2XI04j00V1552VaO6mMIEAfic7n66FUJ9cF1FAesvq+hn69KxtJT9oJTfQu6K41Q/v0LCYHrBc0CDcBF6FHw+G8Ng+a4vLs0j38j9/Z0z4tebqRoRrWGNTFffCprpX3rbpHLmi33jpvhBDuVkYytnvXPjO4CW0vG4eicihsmq0DDHVg5YB4NJVPqbfgPDS833NHeYluwkXVHfhKre7YVuHD1DG4DiaAKDGserYBPyyll5D9RdJArON8WyYWxdD3G2k3qSr+aaZ16DeJAs4ZMnpcv0XEO9t44dkV/Ap5sBbRGmTILBUh8X0AHOlTWkwnVcy/xMtABjKQlMwLgRxHC5V1ZNsyHqk3VvjgVvricOaliYNIA01P7zE1yskcTWFq+Xs4242pB3WZyUG9nNtLoWypRAa2+/0NzcWfHtqnM5p+uNmT60fTPp22MLhwR4rNLWACz01sLstwE8PqlXlWXgu+1yoHf3cQAdhIQSPapmL2PFq1GytZc6GUiTyd781EncqIqBRE163nGKKx8ll9Y17LZyLxGsxChEAoRyWwvLK0BTQtrdVZLmhpZRC8Bdu05JHeucdQcNR8E0+9Cjx5FtL8khcXd4k9Q0bN1qseSmQXCpykuy3UGYdKAGf/gH2H9qr5umyETF/rvoIUftFUgvIhjw6qaCzy8j8Nv+P+Su6BPdB66oKV7ayJT+Ok2Xm1Sd7dZQFeX0vouIpBvHToLMukCRkZNK3mvNWA6RQRco0CovH8vJaL8r/rE0DVJWjvSOhlza0wTqMVSJMhIO4dyUgJblQTWWhNU8+1AbXlzRfF6BDEnZvzJPI8CYrYkpYdDsTRCmcDKlA3Tqp0SBWbWG+dRJmcUdM5bQbZmH2CCkEKGYgrzlO+rX3J49Pl3G8/WSvgPIvXZZzB2fhkVtdBafKYtijHGWc6uWiLkAYtoo2XgyRxoHwY/8qdrRc9XmgTALubPGcBwFRwz349AKq75h35IZD7/7wr2qDB7sBfifh2+QNHOdoFE9ojvE67ElHMzAbgJu9ifeYl6c3cYA+w7H1sBpNv/k+YVFmXAABHmwRGP2SfCNrhJrPYzfgUokqxTa7hOSsaYDDj60FLclB3X8KDhUiK5/bE+cLGtLdm1OrLTuoxhZofBkeJ76twNJ2S78YnQGg1ntBRTNGD4e0D+WLJSeKcPkOGd8CIkP6IWjSSl8hTiUjRWeedeliC5A9fnQ+Vx85qVaGK2UlXF1eGa+dg7Ds1O0dzldfshD6b6jXJmxX67B7MVPHmEn1/s+2PIBvVNAGsbhjmvhSw8F6lGKkdlKIQNerFcmFHcv4pMD9rs8+Yc+mQ0osstl7XP6CZzimb7PwuVKLcwnjj3j/RUNNeUQN66GB6U2raWZSh5LRoS1Ceh1K967LtrvbOgeunPvtL+4SCegfwDzozZ1wQC2rspKIkhZ+RWfDnqlH6hrXRa8Bo1ipSPbRmtR1AhJ1sOHZwrt7JKO+GPP/ESjoJ1YrzHMMctkbRV5c5qTyP/V6MUwa8qZdUHzbpTr9C9p15PEeI14wlvZSRzBQvTc8PtzqQ8nxkZL4Yn01mube+1C9GZqNWUYlWdASZ728InvIsYOQOOAQr9jQc+9T2DRj2/bFgGBVE8SLS624EPZPBp79Kw9iP1Dmq9JFQfjE9W90HtGW+CikHI+vL6fXoqrQq8iU25LmqxdjKqKRDRmg/K7eDp+xldwlgO8xR/7LKMmhZGxpfhG1Pz838+UqhHZ6L2hDw99DtlhN0pfU3QU9zdCUa3D+PJwG8xxk/LUgYAGDX8sb1nJzbLHHKfb2CGo1I07FHsyCmgeVUzopmzbYx2au++vhQUKyo0Aq7ZtN/inHLgfOanq4SqhxbsqzJyNed7EW+moBhLtHTiPi43g7X26X4jnmuLnZxoqUMc21D5zWrQ2B6hCvmpA9VMLaYh3V3ZsSA97amtce5i7t4vq5WQ+jCqwEe3j0MxGjoqhGf8LO50pXhxqkk9WmOxLph+nOvb7wrajusnUbeglYp6vKJi9Ls7nuU7y5iXI6eNxbR4KfEehptjiRvAQuzBt77owodO2O5eByGRjW6dK8l0wwtKqEA+zAcNbU39emetj1WDVUkAnsn0UQ8oDq7M0yJ/XroSvX8yPICzONNGcZWWVPIfBQ4OMcin2RmOKRpI9Dy0DdW9SWvmIs9hacSoB4Dgn+ICgY3txqUka9byP42sydbbxwgHCis9wIWUQ+t9VB5PElRBRPxPZ6kgiRrz1b946EwTpMDUEXlQzu2t86bdeHtXEZsv9Q/Up/+7Jb78CraJ2QR9sJT/iY2IHJo2FFxXdFUzrJnBFWNKH4BcC0uAopRKr/efDJtnUdoSEISCtS7j9vNmULNE0vIGBx5Vipmv9CVYeOjtYBMosbFmRZxQaRCiimNNEvIQWrgiTubYyQoIXghIlJpktJOttdCi7VyemMsdvud95tkMSm72uZStqkhtxI0Sg+YSdhHO+rFmWjjagKVjSCQItv5HjYu1W0CrqVg+B3bye49ohU5eFEqjFCpyY56bc/fkcbWpx65nVolU57+AChTofN2iyNp3tgFtIR5yc3x6IkM/84DDRyUkY253x6IB+YPuVNDFdUBSTYCwx5WHo425zGaWVXO859pxQX4erDqKA85gFIR580jXOPCfAyF1ORlfZvI03f2hxLCikLapWbpis8Pf6DqhdQ+RSDiq4a4tiDiCwkWT/t5gfdjBwonNnVBpv+MjLh4oQHoJP7citFjmRd+n8uAgYIkRCHmMhLn0BaskOiVi0s2HhHMcLU90qDjMsbEpHeHkRQVd6+42uNSLLpGSILjwyocYQmoqLVkKLFOBiy7Re7L6FQVVpQocosWMe3v/+5PIJsINp/eVyLVAm69oGxXtisYbVW36cN6UO4OAG71PKyXmm2m0j40RvGFVSMOoH+s1sjK8B/d3y0+IKjsRynXfPkwA1AiPgRgifdFwSi94f7KMo/6f0cHc5Aojoyya1nOAqv/WvqF1DXgqjS6imhMlbddTrGX6LSUTTQ8aQuG4TWEQTsg/dzJZ4f23b9IoCFSzSiIMB472IEcGQFfFM1dht1lDJiHxdpnSalCU5HTK5SflVPAe6DzjX2aIZ0UnSafcYql/ViazKM+EBKrEwQ7HTzAJ5aQYO0Zj/IKRryf9xpA0kCl7EY7OTu9moQZyVP55eF8LTsXhhJWkWQCZIwjWVAXD0JRnYQGPl4grd6tn+7/NxE7Xav4YsEny7gfUi+XncyKSxh1vNpvMowEW1Q8zQW5fJQqIIx6RAAfCWEOBapseCLpGWhj5jxbzmSgnvP5UnkvbOer8CETCo9vVvkeOXI8JOq3z2wjHCJrc6WO0iStjDti9zubKVgqs61XSd7sttWn64bqNH0YK8Ugbg8OZZkZSZjbmiLR0LWJiGrMn9s+rGiNptwUtNjArZbELZGQBFeA0hl90F2UWAJAS90bL89e3fdUB8EX9DuGvwisORSv6aO0Hsjubm81WnFo1jKqOfVFC2WVCQXGkHZotk7MAdflC6To0J4//xTFg/x8I5QhGXUcwJzdI+viINkaaJ8WFwAxNcSxbxcaHYhLPAbXGeEK2v0aymRg9wZluMX/4V/Oxa/lJYyWD/ove688FTEDMJLmeD3EJ+anuCvkj86KMaerSY3e4FXT4D2oLObps5R5oHJdTlehTlVER8/MeBrAkSkG33HBe5UN0I/kgbsKAqNyyPGRKcugEIyBHW+URNdIt70Vdi9FWXvjWrY4KLFVe7FmK1KbR8yhbQAuBxPPamCvrbrXtyFMaoWDqgA0Wjj3VKyObAdM4HmMwSQQD8DBL2eLKoJxbuiKxFwdx6Y2VcZ7K1s10QKgoel33LeyynAvL190rTVVSydDcrZJDOqVPX+vHx9ayJ4NZ3nsuKPJ5Fy/XKTvs39RcO0N8HfVHOf3Chsjadd33WTYFLSS4SZ5h9EJIvWymOyTVRvD5RQ+TWNVo8bDSte2eyiB5r6giTfVUHkGJSiG17Lj2JHvm+nI8bQ7h2QxpIie4X5ygTYw2Yu3iaTA1LoiMHfBOQWlwbsuL9ZmPahiZkKPkdZTthWPhjKjevymwKL9ZPFgoWgKd8Qc32gPolIjKI3KHBUf/L/BwVZKwAMT+vIsttXhAGv70fbFE8UtkDZxCstaf1SWuNy8o7JHw0LZnxku76X2V9PfdRSOnP44Ge6MSZUn2T3dr62/34X8jgqo144j4/ujYwtZHqPvu6egToQi1T7fPvaXnALhdzBVZTLUHgjJpG4CirXsPCthPRAWAs0Mjhqltui8gtEE0oZPTk3Iug5jEFX2srpaaPEE3p52Av1RkTWgQZdfQTEoPusLe0gIgXTjRiHjtEREEaZxClIUBMd4fUrQNL7296jVjxOpTeJG7d7c6xWxoqYQroy0ql5XqHGWWPFkVEi8GGyWWO+E8HyDbGy3rvPWb/XT8E3c7PvltpWfD8u1IV6kZsfHE115Dgi5UFTLahr0qrrb5exOZJqY47VsORtrlH4V+cDyjJ5/ZNb3hdGX+kgYlG78DG23iN3CFzVs6nmhluxI/SwOpHYHTxzrSUrroA9mME04FAGYqtRnKOJ7WjzDMz18LGLs7DjkGTApKrIb8hqC2qrdI4h0QmnjrTsdVAAzuMbrXyFY3vdf3Sbc/MIIJ3ak4oHuDrCgIs3FKzqiuwSR4GeY1dNoE/cqb2hBiWvCXfq0y/BohSuXN757sDKDsGH3IFDK5p/ISqFv54Z/UAB2stAEnnYvbuvNLdq++hSLhzRRv89NH4GaJq+9BkJoIvTSlvefqyGOmygIm4rLHdzBBYfaObd/5w/JtGVub3BI/M/+HZDuo01ZMFiFfu7pRiZmFnf9C5yvdFXA2NUw3Bk4jpLMOUvqNg47XzAYVnVS20h4ucX46GhC5VTV3YjloFdBYzjnIVhsi2JDaPlqbG5Ur5N+uqk9YsuG901peRcMsHhkyEKM3vbeIwd22gAiNMW2S46qumtLJlvv+JNh8PVf0LSPb/qS/NJebPEx+TbwIQ7DQP7aP0W30Q1bzNRczoRCU/EAGAvhmKtongX5gZWSIK0tNL/YvyMmQKletIEyfA2/7DQnk7Goq2aAcdmRq2tmKGqwijUE1CHEN+ScJ4r7bUsLg5leJzx9l4osKjCHhpNbuFz5B0HP342m8N8kK3QodjAVkVQeQSBCj+XBb6Fn9J9RZpCMPNyEGl9QFGfhvF8aEH7PMq5WwKZnw2Bj7r4RDE03fZtEmvZxNpwok4wdYJ+UQCf3sDdEIqVliYzYMreNYf+50zSHoZnmx3YS5+aQdKxF1g9SZBCbvSp7PE0tyZTwfXG1fTY6jWwh04zWl/8wC0KL6P3UNvNbBpn6KSyhSsdbzzStRENJo1JGJynRjahVJ4haoZWixRMcReOHVpISc0mrVymElj6yswWSctm05YpGLZXo408NlMn5uwWjfanHNCjNtddM5EYiYOyNkSZSRk0F2ndvccSH8H1IvQABTkHHY4JuE+e2AXkBTwaTan/tQQ7We5AnzCndnvymuqgRl49vuy5Nj6h02R+BieRqgDTEoVcZ2OOo8WNvwlgX3h1hleVCSelutH2Wx7pzfWAQf0Tn2D8ImM8eodnjKBhVJAVqeeoi4DPyv4xxfPRn5kExdC+D+Zj7lLUllVBmV5dzFjerwqj5LnBN5rhj7c1dHB2ron+rRv3xKUAovRdmbcjH7G57S+hSct1rLGdaPeNAxd/RnCc/ZXf+RHWZrikbtnpZQib+KgWixInBKEu1FDkDfjXLMTdYCtJZN9WGrD4mHj2WVLEWCCQh3uCSxeXhzuIXbUa0ZouvOYtlkWHDrUAtb5MGMxoYs04cRTamL2uG57NuI0YeRunCDFgwQ8txeMqCi3GePZMXcv7q+Bzu/7CJ8j909UMO47l1ItwzzJojDZ/Z0VrY+RUINzTsppPb6LSXZwLgA1dafWkRYeXEwsOUgKQEDuaPh3QCi+rbhkm385rQ4YwhAwvxG/TMib4mK5tnWZJz0C99ET3AodDAtrsBwzwQ7PX8W/TIHcXe8+pgVu4RXpxxcLOXaFzAYaghmg4T3uXGo0Se72fl3BlwheJ2yJyKV3IteXLuQhaYudU3rf8fmrNhHJU6lL0nsh31WsQN/lkOq03Hy49vXi0HZUw4/6mL9AsdTrIxsGoHOMgsHdU4C2FMKAlK3rc9KNeB+4k3TQbVAjs8rNaDy7bZ44CdE4MKT4gMPU00oOW4GrPXptr1QLhpmPA63RsrNJT1pDVABwI7of8MvmVqNJ0TOFaAIFdDKcDtABnQ0eq5fSABDzJ2VpDDku8H+c5p7aKKuDOQbPvzgmP1oWV/BG9GpDcwt4/SkatMQa+kUwSBWO7oQQlPKJ0xJqc3sKz/HXQrLYnK9PRn+08+yBQkAYMD09S6r14d4w6fD9nF0i1L2/Cet2QomIEvivUJ7qXtNr4eQXq3abQ1ZW5gH8MNYHpELrEZXjheIfxliKcoDNgqADMKkGBBjgL1MdO82NZgftkhmnqJNXhnZkzsJ2zv0d706zxRYQsQAAOuIfpE3aygFwG0FZ9EAehgQDEXMqO8LVIrwPnfgEjlQg17Aic4BCKnK60mNryuJkdIlDLCTvHzx316J99S1U8CjN+AF8ISPBvLejjtnxfIU+7KBVxrzmGEE9HBNDsb4e++4qH5l6CrEsLGK5jENwk9h0Q0pe8TP5BZE48zE7VZraOG0wb28W8PziPYarv3McLqu8ZOYaJqE6geoUQGhyw3RtVQZeoMmNnjgGRzGVlHpM24TuaqjW7TJpjYXAJ/8c/JK65xgFtXP+hh4VkcvAVtTKpvZFy9y1Tbdm69LmIeWueLMdFRAQVTP5hVzI7ghKa63AChlxFMk7Enhi5Yudtbj4iqnpssYGIxG0McE91eMY+rYzvGCkxC+r1p8TIwCwd31+1F/rbgifieQmFoz/kmlYNhxn/g+goTk4xXTRsbpWpyQ+KP/a2RVJTyiMlJrUTnQPZanYO7TAr7ilGv9a6V/3VDxuh49P7wS+0B77Mb9ji2qiZd/FoYbSXdduvYPoiV5RQj70rExiGXISt3cIam0a89Zlg/oDB7xCi467R6Rdi1TI86y/N9F8h4NkgcI4mxLWIm3EiJADsRs/WaYyv2h0BJRbGXyr9+rwenADu806x+KSghz6TVIHQ1as/F0uKqBJGixG7XJpzBbNXjUA6fZqCNZn5pO1Xq2nCbnvB+zPWcZ4v/JTZqsNIpFCkj5ncyAmxy5h5n4bYstP9LMX9tLBqdjBAYZXsQWKFBlU1HNXSvGWRISFGmiXmpIEjFUbjW8EVrwsu0t11dJHR7TiW/G3aoR2RJRMBi5hN8LKo5tAaY5II5WQrwbGRXxKzA5qEnadVjuLiqMVdbhumVaGz+XL7xr6njhRuoLRxJwWQmLAbE105WhEHRYvM4VNG2zQzT52AacqDwV6kE08KROZaXUAolxynDTtPSY+L/NJoOj0eAv5HPkEL6NJk5ld2p+C8tRHlgi+n+fJ1p17+LaXJy4P6+hFg+EU5eZVEF7LUgchGfm79Kzpv4+ilFeFp3CRYKYNtC0RKUPER/MSjOs0qAd4koMn19dVBAQgVxGY2xEY8XlmiVICCiz8y9ClNDyMabcPvNvcvHX0xd7b5ijsJ78SErzBHtSOrEEw1S8Mab6O8sfImreKC59C1fX7FJH7adwQZeKmOtb0LkG3LGmksiAU/vox9xD4lu36h2VU21Qv0zm9atX4mRZUcJicz/ydpkMuTy8yAAF1YCc5eqYaKuh348uGVIGOsQixNAV7eEvR0IB4nFngzy/k+S7IW+SwLN3u2gpePnBNo7TIim77o29RZnZA23gI7ZLFQ7at9DI3OV+4dG+3ooSA8XYMp6rTpwfVgf9jUDLFc4mF9HYM77uuXXiBSjn7KFbKdO9WtsD0oy4ePeu6wpn/noOOyTEC0+mU3cTgRLU6jmwl5cSnER93RALU35Yt9K3kb6Qvyx3ng7eB+ZQKuT6LxeTdsIn7cZjtEwHx4etgqspBux3hOPxuAecIhHVDC8KDzsWOtNszcgMVGhSAvo0VDF2XPjoeyLyiQEjvsD9flFZjjAAw+V3YbM+IpwG39iG/Unvj/dphI5T79FK2bIzq+Cpi/GSNd2sktaRfcI2HHsOhYTqEfnMI3MYqb6+AuH1+hVAnqxKHECLRyhTZgHH0jQZ9cH6gHSgC99hd9AtR/GbeNKuqO0USQ8D4FZCWye588CcV02h5ekuDeko7ZTqEBx8O3bnt0OmrnHJvy7MVxDZTy2GYoHD6atlyc4tBb9AsClolAG5k6hiCLeZnI20aNQYZ6zeNplD6nE2dzx0ARRTAbkbglEyGDA/IDtfKqySycwecU/uRmU+jDtDPM7jzUnaOcXxS2c1PK/3ZL9CSzkVyOODtXH+g+MEzv3+cc9cUu99bEmMmexeFUCtOERvhzuNcgCqL12I7UB4ShZTm01X11DPbmpUgOc2TOMLgPkQQXvV+KO+3XvNRyhMNRRZkEfoXOCLUsm5s+rztgwRaLC0EiR34vt/yAJoHBa9uASItVfRBkejQ/eoNzAM10PDj43EwuxMbhqTq4pR+uRrO/tNA5wtf7TYhVv5rbyoNHbTRDxaofs2D7dGl7zxGYxKpxMS9slgNR7II23j2C+M6r427M5Nq3hf/bgGzkrJ9wC/luLE9Nzwoug/HyiXhV/Va9E5UTIBqP6BZ4tbG06AmJYUcdqphyzJ7cUO1X/n8QospPuohEfL1VV7EuPHHsXmFLhzr5IQnYwoNE0kH93dmj+lDo3YA1CwTvAGgvqFBG2t6vDeswkSceYLW4nO+6r+rFywovEuezsiuRekoEuyPbjQlvWPD3jO2CzUyRMKFcTeA9PRARQU+G8QYnWBB5lui1jGuKAMDhaGAy1LU71v3zQpEdkX6PrLN+txREoNFAs59pUMh/61fs48/z/Wyb1yD/ehnf93Vb3GG+r07efs2P1ZwiaWI+DyqLuGgRbSeK6tI+hRHLyuTu3ps6VLJvA43Xz3/IqlS6vgHMwoqigaoUgiyitkLeRWOLIlSyZ5v9NjoHESDwsbLqqHIlwRnh54/hyBMQu2/QM/6c3Dyl4j4CCWZonUslBrp9KEOf4Bh7TeHSrW0PKDG62DX/Vk2VdkB7xZSg71QiBmjpHIrH2heCKjDxzVIJ6Hd/9sx2aNN+Fp+hULR1M/7FaEwAkJuZPCmTIxvx5Rnpp5O0blJ0P5NW12xTqUFmM+Q9rMDc/U9dcWDq50PnsUSnZhUDiVBRwZp1dgzQWCZktQwQR6UlbsVcyH+ouqmFAeUz7VULfma7D4hwnWVbMi9mMO9ER//LqKHvocmAdsht6epy46SawF1Am8sAj0hVka1CKGrm1HvM7CbhMIInmd6OB7SQNwBW/gISaR2hgcbRxkh+7AFmHzByyRRSj4Q+8XXmtWuSQ0B3QGn2ivf3A9G4YDQM3V5aVNExviJc8qFqOBEf68uZi97oQIiRmq2DT/yd2N9AAKNhHQGdv+HkuPDe7pOIZrnYBRPdTvbP8lPCtVLQxG2b6kKa8tqPdeJTVZl/Ml/Ms6cSyb5aSSNJGUxQQydnHEhdsIGEvy9LBRqWmxpc1z3yEeTw+kd+ZbOI8XYjkR4eCcDOtDF+/DWwXFiKsxwkf62kws8OuyiIz6lWxLiXdi2AKcTUiPyAEpS9arMfSZyxR5ONRp/mN3xDnlKz6XWNp0l7qtps+2Nat/oUrAycLybQC3Q2yDku3wGDFq4mImw7GWkB50TJHAwlkTbCwTvASrF4mRjCOeV+Ohr1YLNaW43mTuCVcqt0wDAKdE4w5dwPm38RTdlTE5DeZ02dZVCb8aAl3kAkZQx2PajIymVilM7ah0IlSXhSiSn53ozDg+IsrqAdiXTUxhJ6g8jIxoU1uCeUFsTZwue+C8gacmSR2Qsozn8lg3gbiKse94V2kF9uWxQuaLyejID/tAewvRfXox63851JsrJxg+XGdtpf6cWeDwOVHQTmvud2u2zZYUR7gKwahQuuVYDOXpEAn3EnEAgH0HcCgcsxTBC3Ak42FnxCe6O5lSgNh7fS//AebiMPbee3wVCLYRgG0I88EowvpgEuFWQzZi6rexQuKFlhI9x48S9TXD5TIiWRZreJu9Vqyh1Iqx22p6DtpTsoz2jEiI55eRNWAaUBc2a/o8vCneoJCM2g+fNn0UG6E+Wxprybo2uciQIBIR7LBq2EK3qkmSK1fS1Qo5/9vhs5JqSP3FWo7bLZ4S1RkIXSRtMrYHLLr7VTX8zhEJGdjj+V4F9OSzcDWpYo/6KT+lEDKl+8+eCi45Qxkl/VV/S8gTXRGzBJRWIn9RJpkfGQ9UQ7pQSXAwsuCw8ExFkt5PyjWslOR0tx+lGVAnfNHC5Tnw2e/yJFxkiUN1PQ2jHm2BHhAwkV8R3u3poldXsXtAOa4AEQrnaPbKV8XeFLAJMWGDxwuFePwA2u6vYrfUdd5DnM/YU6fgWDlnoTow8hotcyS9BK+kzOM7J/84zC45/290OMUAzcJnmnZIh+HOjA/NwQc28S9OmEMmlYnoUSWJEpDW1DClhLqbjD7EpHLVVyTx3cCQis/ja8PdZ+Yk7MgthZP5kULynfHWSz6lfmWG8mZlLN+vGCcvJ/7Bid+tT+sifmQoDbPRGS5YshdLktY+ZA4axBgaXZXJRsb/cER2Y3gBnMU5mMabWQbUiVT3CfgPCDG0JIW58Mfqwgw0zpGXrfcQSUhtliYAUvNzYolqe7tOO422A6/dQnBvhUDsWhFRKqhimAZzd1UD3K4HaO+Y2yADDgkGLfemvfA9FrKOqsuLD6Bjk4kLS0mXOtJPr7E3+ragJM8qay230InZlXZ2UwewaXqtHDshlW2qEVRyV7STomN3uGiRmWK1M4KPQPcYqTm7CRlDc1SSc4euZcDdK303CtOVF9Tbw6KdxbPIg/qyofODPpLU/9JrGo+0x0lbOvBcxraWREua+BK5jsTGNkfcjN9a402VTD0QAoK1pEzv2MtowxMxFYpPtnyLPAHaVPwLPAk213c+IylQ6unYtropK5iEr3ukOQ2d2DVMms9GgU68vpmu4m8U3nMXrDRbTXaqhH4W2xq37JRd2WMCzakTduos8I0GHWm3uBJzbpGMVQnpQVuS/p6kZfICMnxrAjW5O0p1stxZMHNMYn5kcEpcx315zxmhYFIbpRcBZhDcSoGUb+iWFv0wxVr24Y5kITdlnndpnftlWYn2623LcG7075o+Kxj4yppjm1xZK0swZhHPzqEqSw7z/iAKrMwnelMsh2SfwedFBat4Sc5brgWYSO6vIVuwwhKovAoHESzo/CkqswhFxQAyds8yqfSGwNdBFs0rwVBTANC+o3mTl8r+V4ZUEwkSbd/R2151Ho5tlpjDEhU4uYsVailbZbmULQKAFKjHYh9DqawekT6inkh6DY4DXEHS2As81wallwbhMY1Kl4htzL52xW8Jsf0u++dG37IEGY2GLw/fZDUCtljrX40SwliAKEtVkXr+O82Q/tSL2BB0afe1WUmjoiSmdoqCrJhw3r37bRehOMKvAwKPx3+pfH2Q44Qo3SiabO9xzrP4qGcSL4SYg4pqOtmLhRCAYUDSo3CdS7uC/20ZZm/5MJDyrRCPVVjDKEprwxu1RaSXcHFkSyx11Vc8QUalF/QY4ptcfUBcHe57XbApPJlnREwT/XlkMxzQ3RNwfm3j0z0ndrsLhJ3yDbujHvwuSR2+ighmxnqxQFMitJZ9E3F5fhh2aUpoU/JXHXaW9dJLXKl1y10MUIkZPS7CdjZPyiBIUjGPggHLkmNOvDwsvTRaWMqmBXu46ZUNTuPe/y0sLcM2ijTUIDaE+p8EtpJsJXSswnFXt+A21s6bvEru7aCWWyRiIqXfkGnggs/qvuUWXtjeIC4gmNCw05KDp/TZfsSz/2edxADng4swWvlYf3LOLEgREhuzjT2H3k4Z/1FcAwdSOrxbMK/y6aGMzSJwVoAywLc+EtF6IPjpQ0CJlbfxPG6i4JRWDZsVdDAsyxtNgTwso2RJvXQJZqeyYwgzcYYbBwWFu76ZQXUJXNyq6bPLI9QFTW3N3MVRmy+1mKxMhgPNDQytl3NdNnUiGLN5JDKJKqIZSqm6vIzFogG/ZVHz6MyYjyWyvq864XTcm4GeVfQyNGGyhY2ody85wonub2JeBGH1BjB2EPdvvS+QdOV00wiwnOeTVJKS9QNeOKMKJGaF9W97vugqojadkc9dCb14re+yO/RueNL4JOQDpx2v/0NNgLgUOs5loby+A8E7Kz/3zAh0kdxS+INEmjodeUBdrRGjy2KhwOE+1bojZruAx9aNGHiRJiaGqDQcG6x0zfxICX1mBiiVzJCuLS8Tlg2to8dwtXKDAiw8ljWjryfa5dGCbMOIAUFZySQKvrmiJlfx1/RVQeeEZkfwM6dWwR0OENfs1GLmaGjWtcr9Uqi40AI8RBK4BmJq8SzNrxckX+kN2cVPvjWYTkqFvNdOH+/uoRtU5m0136i91Je33p6m6gyb7S8C8Zr7zY4SFljSSWxf1ACtCk72xlkWlCEtZZI4UFowwz0rznrITU10inPiiL4EyJZGi/03nxw9aPSkmDWvLp8ijBK/gt0ci+trUZNSuiXHY7hF2dY9OhOCcE/joLXWjBbgybYDkxYH4M2TiWmBTdgTwhiktL2XcLPSM7qljKJuiXtgLmnn7Y2hwbUsoKkVTQld4/QcQZHiUGV+wvG/pgBVcicBmw3wWR5UaURLMXrE8BjM6qbgvofzRvPAZLW4Vt6bxJ4OCu1EPaKSQqw+HWa657iSPlLQT97VSKTrpaiNT6cWqp/PkMCXVtORsINKsccmyJqPCQAI5Xcdfu4Va4tq8j+G3hdexRMrZrSbIoRWJPnSoSVgWvnTOAFr6IBciUararUghSo7arXH3THhiVcjhRIXg1mRsvu6dURdxoZj6K6tJnJ0tTdu2QgT48Q+rxXvSgEm8Na8MEEqGe7kn6Bqan0XBrmSJtJ7NWiqFQJV2HHBk2HRg21KbJdsU9R1PWmU9GqIu5y5gSn6wZWl1GHgYjmzqSzo6qWxndJzah0X4Dtqn/Gwv1CezTWgI3PeLpK6vA2PA/IRQbZG1nSSN/MJBKaZzA1q9Ywe70XQthMhQgBoEGeXuDiPIX49vsAfX4FBoTJs3HmnVHgXCwlZhfipDllez71VSEbfgeyCBHhV46sh8LG3jFcb25dpIhhncp//gBoBYecFfyqcB3eLgsCOBXOu24oKXDBwVwBgWGiGHHDY/Ki0jxvf0DZf8kytDg7LX3Oi6WsFMO6pP7ugUc/nYeJRKMc0zn16vIezATJlKrNP/TVyO3LcpDKy9x9Px68mOcHKTbMWd33gwHHAsA9PLg3PLp4WRH4V/PZgUWZtUX+9Z6RGQliBs30Td29Ix9IZ00lTmzKt+aFSflFkdt+SG+77etK/9WFrj7An+n6nfQHgMdkp2T8jzi7jQf2D4DdDVMWvFjXPxnwfrBAceCUhU5IhAuJ/tgmk/4damc90IHGLB1V+v219dNrHUDJvOZtG9GIauI/R/gNWOh7INGYWZ9K92L3lwNq8lrdwb3FSopQCw7wAsmybVy7WLUUuuwygd6XitGemDWchBm8juhdF9Rh7OH/8EVg2YCoa9ngM74isF2i0S383lOEvgJxFZfySxxBT3ttH09xiZJtXVFQaxOFGwAdwGfz3OCYHlYj/SgaXHkkahZUple+2HIwU3B5TJuFD9mWUDW56bh8LmxwZHV/4NgKPB+MZgFX6mzTfZUIJzVCaG8DFMIxqv6XfLZUbxdIs1mTlBYQHpJuzbAUh1kTEg4MugPVivUz8pyYLA7V33qUuKvLp1tn2+TbnBrAyIFGUSDYl1+oTmmZp65zbPZTfGwxr5xuC641Zm0XixKFaMEeKS0HH71aBs2xu25TUikQ1amFFivQ2kHWHCGXCKeVsesc0vQVbrno6cIrMZl7uwUtYo4NSdm5K3KPu1VX3hekpD+6nWVPfZKg0olrUTZG8wU6+RNDcbEXhYWCFaT/NLsXVTqme+ENURADHLhtfgILd5+/qdyfHkD0M2jRw9tS7ltZ1MdSF/P+8zc5cs6FEylkC6d/3YYkTF0/9Hesyy/P29QOqTyUlqP+Be6Zv3ukcPeXtz9f7ZzISUQaljEbkfciH4p86dX482tO1pnbYg1ePUDRzATHKBUeGCU8j6NHLbmztPdR4HpQx79Xvbf8+nqrXdfux+TkQiBf53UR8jAcU2NbFzNWqHqQwGOtWW5jyRsdCnv//US1Q3QfOu8PWLgDPZzVktw2XbO+IXCw6RsLgHtSu/TvCj8Zz8A8UGokOmAkkLkwGYXvWL6d+nkdspVa0eFtLij9J92hySJt//xqaOiqaEg0zlXSII3W6YEdMj3ZU95GfeLBmyQkVeRMFRiJa3uZcKs+/4LM+T9T4kncgTxFkte+/JES1QUlns0ZO0AKVovaeRVVCte4S+n3+RIAAARLgyoYMrYW6D8wPk7NZq2UTu0zKGMv3i6CyHm7qYWcFdsCWnJCVDyz+zxNpaEXuEbfpCjBxkNNHn11aaQ2k7b7Qo6wCIdHyzp9VFJoj47C3tqF0eAJFTLJc9mYyNaW+gzuny7M+mvC8S9U0eZcvQ6qWtVKU6UMRF0CSuwzQO18n/OJqQ0l5CKt8sBfxGNclCn2N0OlYjSJObw0OIC6nharEN3X51eQGCNaUQP5WwZBaH4fiMuTP0sq5+84U8MRI4HRqSinAGmHuOJrLN3r9OB1vfVf0cnWzT7TrceX/8nD9tBQErfkRyyYsFKs6oHZ8JAGVsWuCWInCpctOeWfWW+Gvx1FiJnlTEPDqYWacuOqlc3Tj3tidOo7j+VqB6ffdgZSynqKzKFRDsQ5pNRHTAw2rXFMcwDLv1VKyVjvs3IuEEbc7115KcC8ewwZ6Med/4Mtu2+0xJ26pu68oRHOWfFPGCVGqrzh6OhVH08uyiqfdUbnKtqB85c5FvTWYhAfDHiHYN8rff6lQ5yezZ6tFylczYna6liY6ByZiLNa4YfHiA6saxaafDumLx3aqk4zWqmlRqftyUVKgZrRthCw4ki3MBiA5WEllusE8UoO1+bQvHmK68b75vHSfhih0vlEHryY8aKFwvnSdfHaAGxm5ZKf+e0gCB0Tb7x5+yfcyJ0F8TwhU7WDHpYAIOwNvLYRlxS4J6xRx8ChxRF664grK1QuSHX/v62BrUUv7pUfkHD15/Fe16oLskKcq/EWH2JaKCE7RIYVdDbuOO/PD3QHB/bco6avOl9Ke56XbBO8GeC4Ifn6gfJHgTctWVnffQiqW+99r5xQPx2tb6mwso6CfEAX/Qp9AS9sSsZkYoZ05taHoC96jnnSetBMxn8Q7CqloNiBsBaW2K7ugiOlb0w6NlRt/E6YQMJ46XynnlOGIJGOAaXgjZLJRvn+6eUsUdFezVDcGBrB9cOD6zetSgO5a0EhVXDfKXxifP0H2SVtzBEM6x/9/9/f5TyJa0J77AAFTbMb2/BWasWIwwZqLPlT50+DKU9SPghXCO6o6HAVLLxBJmgTUg7oL/oZI2Xq5uwW4wKBzAmrOXha8eqxRatDugLx/1BwYE8ng8SLis++JHfZ5LMF8zUOSCOps6CvenhCeRDYVGzdBWj6bqHxWdti8v8xl37xoZ7Q1j3m3az9WMzT56a6LiGVFyIlBRN5VPP6gIgBsAHC30nb4p7dAT+rSk19xKbEHuTG9F6yfGYmm7y9XFkkadLyuVdtTxjp/08x84OPHuOZCVmFtGvLO+eDOfEBftN4BrfkOQ6e2qSwmeL5Nd1LuCZiILcz3dxj538l/9A6tDFhAjDQ1mXbb1kaLi6pfNLjOQqaoz9ldIjBz/yZZ5NtSrcEdMsTUbf5MJ284WyYygctRn6FgCnIP/Ymk+GQv6fDLTw1If2ZvYFvIRr9OqRPYl0Z8SYZX3FpyIBzaNXhlPwFkEqia34pUyd+Ykz7RFdbcvLRE45PYUYgXYZJPr8GS2GbSIgvWHdKkwABG71T9Y8lkRN9Nji88lChL1n9WLqKMU9zBkOEhOC73WrBszKOyMJpIrnXb2SgdpVQKAXhGYXloTaUpUeiZcAT6fmyGumeVvBoxUrLcoqyCl5lRCa4YvhP5itXr/ZKihOS/DcXGEDqFEvIm78XRZzEYn6/mt4BS/rvtRO/n/tpVBUK1796LcH4AO7xHRKByJEGdUI3kjxcUWhVmLCeaS6kBkksjn5ldsaFtQCyMoiWmrDMPvP03RQjXj9F4XvTuVwEdrVm9Sfj2R8heO8XRwrJNiz+O53ZWxaIRdwS9Ze5s61ICekhdhFdzjds5Uq+zjPME8GOBFkCrF0egBqUU6+LU8jya62MHfc+bVieBTObQuNE67wAOb5JMlyiyyJyZswoZFJMYNcdAncaq2w/K9EXgL3ZymXJ7bwVEFoh02MlJManb7+BNdZOhrd3t/LdDXcEqoyEXAVSTFFVhK+Paik1Xw/urLg68+IAp3a+Hi7xIIIZ74d2PZnf7++zwMtkWPMYZ1UDuoh0d5aO5NoFRRwJBwodAXEI9A3JOmKJKtPYwxMdbOgfrhiYn8uP/13lwBuiLOhoRKJ1brbHbc4ENSj6cbqr6BaJPj1wMwqGcTJqSv9MBcCl8gS9/MgK4OjZ769nBYYVnT5q5iqmJImzE5/T1kM+tKNTYpaFtV/7iD765gjlC36tNFbD8p2+CZCh9LFv5ThSfQrtDdUkIYwfaMKSyf/iqFUjKGqG/JfBF9wYEXm7mIRp8TKPtehPJ07HgqzpE9UeBgnof3Jk6Deh+WRB3oTblIAyCSZ09c7EcQElw7VqgVnWh//byAAAAnMgVeFkhHCrnnYQ7Zc4GSxZqGlFAQFKw+bbYQhP8GCTVptRzofyw/M10zsqQuqkbHVnNOSoGHrjdLC65evoP8PDlepC4Ae//nvWw6Ck52Y6qaIWJL/C4MNMiN1bduONHlYn9dHlKoGm46pWs7/bHj/3C8z/FhkF+dksoKvBAQcwrXonIDQtPwk+vlx836DZJJuGszi3eSpO0m1W6ByNh7NhpXGg/+HHDlS2LsulEKrBURSzusPu954kbUblI2XHG6EJqgWezEVy/nPS58G+GUMBmxtRRJ/72X8GbG/gIzUKU5RrHPJ1H05WKVkHSkvv3R1d9B2PCT5ICULWGJIDx2NuVQbRLyKPQIgufFrLI8stKVFrICXrYTAHY2NYPENNyaXAY3ugCFxJbsAVqjmEasFJs47OWkOa68r24v1mGmiry6BtDD3PGS2DCinLbcXDR0SMheZiRKAW5Seigh3mCC5QJsmK6CTsBY4MHsqtDa4ZakVGq8IRVRRsEvv+eXh2hUrfgQkHPKXCYBGQFBQW9NBRmPkaQwzJM+FondN4WQEJw8u/O1uf+hyqby3s1IzNd9pgyhNyFo096XlhrOevoCvF9ntz3Thr5FoBpyZDvBAhfh9H0fNGPozo5O9BuRhhgVw4La944ZZlr8xyfpGC6VimR9sOAGPx3qAbAqyugKwaFYQSkzUJnQD7H8QiVlJ1ff/TGCh0tW3UDFalVKyKCYnBGcjESpI5BPok1P98E/D7forMXQ+YEdJA+m1ZK+WdO0CSHEDI6WoD5vA0TifgBcvk7oObetCQVRn7aEPHA6GAIjwIiAY9CEgnLOuLmypnmo0OFT69oAVHpEJqKIu2IElda8ddArDfT5zsq/HHfKeBdSPkygZC/u9OiVlsQWg3apeYUk5sM+ae2HxXTsOJ5EeMmbo7wFKhXJWjCOn0MOgYE5GSgbm/A302VN3ohsI2/by+pT8aUWlUG8rvqvex9co0Subk3bTzw5CPO58KZLPPQ+QK+ZMgp4xM4PI9YoWQMUEMVY4QAwe3m3c7K3KX7fOJlo5NIp+TOEfIwdriCt0qmAJB7k7G1R9BUZxwnSsADzxM8iTnxxEJYKq2y+yoyZvTk8E6gmCSrsGyeY/QVtg1nAPk/87DmhGys44XX5SRjTRkZEX0lCuwT8q140LPYikKTW8szso9YM95vBLUGy8SCo+RiS+iaTGY0SyvzL/s1ye0pNNXEjRwvVY/A4O7dv82paPdNkUM93l3zP3TCWGos3Lj3+oIwfQZyVkyx2wm6XD8nQCgykLsUvTKh72CO6PluDPDFCbB2Biian6wFlUScQ+ZRGDCtcvTfg9T65cFYOgVO3h4ShaTjFWW3pY7v9DzZRip1aScR9YYj8KYymxjSOSnfWbS+S5UQZ1ZPz+DLlYsahgMLYdsvD8KgC0aWUFJdARFaLoFld06t14zOPsFjf9D9RCgx3GdYfOnVnJQuOEkXLcqx4LNet+ON7DWJPjcR0hrnTnqBjhnqTdlXda3bAQCS7HXSrwGoEDwdDMZip6nc5jYAAAACwV1MCtS6elg7l3yakfSqIX/L8Xv2Gbj4/wxIpee9MtQG96V3GXXgy5OL/Un1Q4H4UjVvQdHKYoiD5TSEc7wIauDXWjr3vHXS6tMSq+77qM8NH4+EUHWZiBy5/bftAt2QQT2H17nW5Kv9U9G7F+q4xe4sV+Lq1ViZFnd5PD9YrHkDSpF3FpGV+tI1xuFQMH2roN/to3S7MN0L7/KyCdoJIx/vtxcwBv3++H6SCCiKRyIoW4Sn96ur0X9WVI/b6io7YLvIATgiqCv+6L6cy7+MsdmYKvP4qO0qAR3BT7uS+ZFzzBvz1P6I1wDMw80aaAeeQfp6tbECRZn5MPNfm1IyNt/ZCuj77netU7vJNVAUVKgSgPJiMPa7PbFjLvTRXxtKdvO4/qz27r3WsivHqD/wQMOWNT/PypMWovi24MJ8dxugfApK67zEsd5EyfDJUU34x38WA2APrvldBIZdcFywMeXWwSaBuxQ8b/NSWuIrcrWnHboYoyBFY8t2+gyMMiOVXnJg9n+4NmS1s8hk8ENWgkRUJ78N5cYGnZtFM+v4N5W5kKAAfUzh3ZN6JpZ3HvTEGQHE9zAtipKpYL0FSOAAaiNRCjUxpwAAAAAAAA'; image.onload = function() { ctx.drawImage(image, 0, 0); // Show the form when Image is loaded. document.querySelectorAll('.dish-washing-form')[0].style.visibility = 'visible'; }; brush.src = 'data:image/png;base64,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'; canvas.addEventListener('mousedown', handleMouseDown, false); canvas.addEventListener('touchstart', handleMouseDown, false); canvas.addEventListener('mousemove', handleMouseMove, false); canvas.addEventListener('touchmove', handleMouseMove, false); canvas.addEventListener('mouseup', handleMouseUp, false); canvas.addEventListener('touchend', handleMouseUp, false); function distanceBetween(point1, point2) { return Math.sqrt(Math.pow(point2.x - point1.x, 2) + Math.pow(point2.y - point1.y, 2)); } function angleBetween(point1, point2) { return Math.atan2( point2.x - point1.x, point2.y - point1.y ); } // Only test every `stride` pixel. `stride`x faster, // but might lead to inaccuracy function getFilledInPixels(stride) { if (!stride || stride < 1) { stride = 1; } var pixels = ctx.getImageData(0, 0, canvasWidth, canvasHeight), pdata = pixels.data, l = pdata.length, total = (l / stride), count = 0; // Iterate over all pixels for(var i = count = 0; i < l; i += stride) { if (parseInt(pdata[i]) === 0) { count++; } } return Math.round((count / total) * 100); } function getMouse(e, canvas) { var offsetX = 0, offsetY = 0, mx, my; if (canvas.offsetParent !== undefined) { do { offsetX += canvas.offsetLeft; offsetY += canvas.offsetTop; } while ((canvas = canvas.offsetParent)); } mx = (e.pageX || e.touches[0].clientX) - offsetX; my = (e.pageY || e.touches[0].clientY) - offsetY; return {x: mx, y: my}; } function handlePercentage(filledInPixels) { filledInPixels = filledInPixels || 0; console.log(filledInPixels + '%'); if (filledInPixels > 90) { // Assuming 90% means the dish is clean canvas.style.display = 'none'; // Hide the canvas to show the dish is clean // Increment the dishesCleaned variable SugarCube.State.variables.dishesCleaned++; // Update the display of cleaned dishes $('#dishesCleaned').text(SugarCube.State.variables.dishesCleaned); // Check if there are still dishes left to clean if (SugarCube.State.variables.dishesCleaned < SugarCube.State.variables.dishesToClean) { // Show the 'Clean Next Dish' button for the next dish document.getElementById('clean-next-dish').style.display = 'block'; } else { // All dishes cleaned, trigger success logic SugarCube.UI.alert("Congratulations! All dishes have been cleaned."); // Here you might navigate to a success passage or handle the success scenario // Optionally hide 'Clean Next Dish' button since the game is over document.getElementById('clean-next-dish').style.display = 'none'; $("#finishGame").show(); } } } function handleMouseDown(e) { isDrawing = true; lastPoint = getMouse(e, canvas); } function handleMouseMove(e) { if (!isDrawing) { return; } e.preventDefault(); var currentPoint = getMouse(e, canvas), dist = distanceBetween(lastPoint, currentPoint), angle = angleBetween(lastPoint, currentPoint), x, y; for (var i = 0; i < dist; i++) { x = lastPoint.x + (Math.sin(angle) * i) - 25; y = lastPoint.y + (Math.cos(angle) * i) - 25; ctx.globalCompositeOperation = 'destination-out'; ctx.drawImage(brush, x, y); } lastPoint = currentPoint; handlePercentage(getFilledInPixels(32)); } function handleMouseUp(e) { isDrawing = false; } document.getElementById('clean-next-dish').addEventListener('click', function() { // Explicitly reset the drawing state isDrawing = false; // Reset the composite operation to default ctx.globalCompositeOperation = 'source-over'; // Clear the canvas ctx.clearRect(0, 0, canvasWidth, canvasHeight); // Redraw the dirty dish image ctx.drawImage(image, 0, 0); // Hide the button again this.style.display = 'none'; // Ensure the canvas is displayed again for cleaning canvas.style.display = 'block'; }); })(); </script>
<<set $eroSphereDishesFailed = true>>\ <div class="img-location"><img src="imgs/locations/erosphere/erosphere-full-sink.webp" width="100%"></div> <div class="narrator">The cook's imposing figure looms over you as you step away from the sink, hands still dripping. He shakes his head, disappointment etched across his sweaty face.</div> <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>I thought I made myself clear. If you want something in this world, you've got to work for it — not slack around. This isn't a charity.<</say>> <div class="narrator">His tone softens slightly, but his gaze remains stern.</div> <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>Look, I get it. Not everyone's cut out for the glamorous job of dishwashing. I'll give you another shot, but not tonight. Come back when you're ready to put in the effort.<</say>> <<button "Apologize and Leave">> <<goto "EroSphere-Outside">> <</button>>
<<set $eroSphereDishesAttempted = true>>\ <div class="img-location"><img src="imgs/locations/erosphere/erosphere-supply-room-cook.webp" width="100%"></div> <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>You done already?<</say>> <div class="narrator">The cook ambles over to the pile of gleaming dishes, inspecting each with a critical eye. To your relief, a broad grin splits his face.</div> <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>Good job! You've earned your way into the club. And listen, I've always got a mountain of dishes back here. Help me out every weekend, and there's $250 in it for you each time.<</say>> <div class="narrator">You nod, acknowledging his offer with a smile. The thought of an easy side hustle, especially one that grants free access to EroSphere, isn't something to dismiss lightly.</div> <<player>>Thanks, I'll keep that in mind.<</player>> <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>I might even give you an extra reward if you keep putting those soft little hands of yours to good use.<</say>> <div class="inner-thought"> Ugh... I don't even want to know what that's supposed to mean.</div> <<button "Head to the Club">> <<goto "EroSphere-Inside">> <</button>>
<<set $eroSphereDishesAttempted = true>>\ <div class="img-location"><img src="imgs/locations/erosphere/erosphere-supply-room-cook.webp" width="100%"></div> <div class="narrator">With the last dish placed neatly on the rack, you wipe your hands on a nearby towel and look for the cook to tell him about your progress.</div> <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>Finished already? You're becoming a pro at this.<</say>> <div class="narrator">He fishes out a wad of cash from his apron and counts out $250, handing it over with a nod of approval.</div> <<player>>Thanks.<</player>> <<say "Cook" "imgs/characters/erosphere-cook-portrait.webp">>So, what's the plan tonight? Here for the cash, or you planning on joining the party too?<</say>> <<button "Head to the Club">> <<goto "EroSphere-Inside">> <</button>> <<button "Call It a Night">> <<goto "GoOutside">> <</button>>
<<if $erosphereInsideVisited !== true>>\ <<set $erosphereInsideVisited = true>>\ <<fadein 0000ms 0000ms>><video width="100%" loop autoplay muted>\ <source src="imgs/locations/erosphere/erosphere-dancing1.mp4" type="video/mp4"> Your browser does not support the video tag. </video><</fadein>> <<fadein 3000ms 0000ms>>The moment you step inside EroSphere, you're engulfed in a wave of pulsating electronic beats that reverberate through your very core.<</fadein>> <<fadein 3000ms 3000ms>>Neon lights and cast a glow over dancers moving rhythmically on the sprawling dance floors.<</fadein>> <<fadein 3000ms 6000ms>>As you venture deeper into the heart of EroSphere, the continuous throb of the bass keeps following you.<</fadein>> <<fadein 3000ms 9000ms>>Surrounded by the intoxicating mix of lights, music, and the collective energy of the crowd, you find yourself absorbed by the club's atmosphere.<</fadein>> <<fadein 3000ms 12000ms>>Eventually, you reach [[a slightly quieter corner of the club|EroSphere]].<</fadein>> <<else>>\ <<include "EroSphere">> <</if>>
<div class="img-location-pink"><img src="imgs/locations/erosphere/erosphere-inside.webp" width="100%"></div> <<if $erosphereInsideHubVisited !== true>>\ <<set $erosphereInsideHubVisited = true>>\ The lounge areas here offer a respite from the dance floor's intensity, with plush seating that invites intimate conversations and provide a nice view of a stripper pole, whose cold metal is warmed by the smooth, enticing glide of an attractive pole dancer's hot thighs. Nearby, bars staffed with dexterous robotic bartenders serve an endless array of colorful drinks. As you take it all in, you realize it's time to decide what to do next. <<else>>\ You're back in one of EroSphere's lounge areas, thinking about your next move in this neon-drenched world of pleasure. <</if>>\ <<nobr>><div class="erosphere-hub"> <h4>Activities</h4> <button class="erosphere-button" onclick="MindWare.processActionButtonClick(1, 'EroSphere-Dance')">💃 Dance <span class="action-point-icon">⚡</span></button><br> <button class="erosphere-button" onclick="MindWare.processActionButtonClick(1, 'EroSphere-PoleDancer')">👀 Watch pole dancer <span class="action-point-icon">⚡</span></button><br> <button class="erosphere-button" onclick="MindWare.processActionButtonClick(0, 'EroSphere-Bar')">🍸 Go to bar</button><br> <button class="erosphere-button" onclick="MindWare.processActionButtonClick(0, 'EroSphere-SIMSPods')">🕶️ Visit S.I.M.S pods</button><br> <button class="erosphere-button" onclick="MindWare.processActionButtonClick(0, 'EroSphere-GloryBooths')">💖 Visit glory booths</button><br> <button class="erosphere-button" onclick="SugarCube.State.variables.goOutsideGoBackPassage = 'EroSphere'; SugarCube.Engine.play('GoOutside')">🚪 Go outside</button> </div><</nobr>>
<<nobr>><<set $randomVideo = random(1,3)>> <<switch $randomVideo>> <<case 1>> <video width="100%" loop autoplay muted> <source src="imgs/locations/erosphere/erosphere-pole-dancer1.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<case 2>> <video width="100%" loop autoplay muted> <source src="imgs/locations/erosphere/erosphere-pole-dancer2.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <<case 3>> <video width="100%" loop autoplay muted> <source src="imgs/locations/erosphere/erosphere-pole-dancer3.mp4" type="video/mp4"> Your browser does not support the video tag. </video> <</switch>><</nobr>> Your gaze is captured by the fluid movements of the dancer before you. She moves with a grace and confidence that's both enthralling and electrifying, her body arching and twisting around the cold metal pole. <<button "Do Something Else">> <<goto "EroSphere">> <</button>>
<div class="img-location-pink"><img src="imgs/locations/erosphere/sims-booths.webp" width="100%"></div> Before you stands a row of sleek S.I.M.S. pods. You approach the self-service kiosk in the center of the room. The kiosk screen flickers to life as you near it. <<nobr>> <div class="simsCatalogueWrapper"> <h3 style="text-align: center;" class="simsCatalogueTitle">Welcome to EroSphere S.I.M.S. Pods</h3> <p style="text-align: center;">Experience your wildest fantasies in our immersive virtual reality environments.</p> <!-- Division with a border for more defined separation --><br> <div style="border: 2px dotted; border-color: #FFCOCB; padding: 10px; margin-top: 10px;"> <p>For your safety, a biometric scan is required so that we can evaluate whether your mental condition is stable enough to enter a S.I.M.S. pod.</p> <p>If this is your first time, a user account will be automatically created for you. The same account is used to track your purchases and unlock more intense S.I.M.S.</p> <br> <div style="text-align: center;"> <button id="startScanButton" style="background: transparent; border: none; cursor: pointer;" onclick="startScan()"> <svg fill="#ffffff" height="150px" width="150px" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 463 463" xml:space="preserve"> <g> <path d="M259.476,280.364V247.5c0-12.958-10.542-23.5-23.5-23.5s-23.5,10.542-23.5,23.5v29.672 c0,35.757-13.173,70.087-37.094,96.665l-32.981,36.646c-2.771,3.079-2.521,7.821,0.558,10.593c3.078,2.771,7.82,2.521,10.592-0.558 l32.981-36.646c26.403-29.338,40.944-67.231,40.944-106.7V247.5c0-4.687,3.813-8.5,8.5-8.5s8.5,3.813,8.5,8.5v32.864 c0,44.003-16.301,86.167-45.901,118.727l-32.149,35.364c-2.786,3.064-2.56,7.809,0.505,10.595c1.437,1.307,3.242,1.95,5.042,1.95 c2.04,0,4.072-0.827,5.552-2.455l32.148-35.364C241.789,373.854,259.476,328.106,259.476,280.364z"/> <path d="M291.476,247.5c0-30.603-24.897-55.5-55.5-55.5s-55.5,24.897-55.5,55.5v29.672c0,27.839-10.256,54.566-28.879,75.258 l-23.447,26.053c-2.771,3.079-2.521,7.821,0.558,10.593c3.079,2.771,7.82,2.519,10.592-0.558l23.447-26.053 c21.106-23.451,32.73-53.742,32.73-85.293V247.5c0-22.332,18.168-40.5,40.5-40.5c22.332,0,40.5,18.168,40.5,40.5v32.864 c0,51.979-19.256,101.789-54.223,140.252l-27.125,29.839c-2.787,3.064-2.561,7.809,0.504,10.595c1.437,1.307,3.242,1.95,5.042,1.95 c2.04,0,4.072-0.827,5.552-2.455l27.126-29.839c37.481-41.23,58.123-94.622,58.123-150.342V247.5z"/> <path d="M323.476,247.5c0-48.248-39.252-87.5-87.5-87.5s-87.5,39.252-87.5,87.5v29.672c0,19.92-7.339,39.045-20.665,53.851 l-21.112,23.458c-2.771,3.079-2.521,7.821,0.558,10.593c3.078,2.771,7.821,2.519,10.592-0.558l21.112-23.458 c15.809-17.565,24.515-40.254,24.515-63.886V247.5c0-39.977,32.523-72.5,72.5-72.5s72.5,32.523,72.5,72.5v32.864 c0,59.958-22.212,117.412-62.545,161.777l-7.507,8.258c-2.786,3.065-2.56,7.809,0.505,10.595c1.437,1.306,3.243,1.95,5.042,1.95 c2.04,0,4.072-0.827,5.552-2.455l7.506-8.258c42.848-47.133,66.446-108.169,66.446-171.867V247.5z"/> <path d="M116.476,247.5c0,4.143,3.358,7.5,7.5,7.5s7.5-3.357,7.5-7.5c0-25.255,9.169-49.651,25.819-68.695 c16.495-18.867,39.134-31.205,63.746-34.741c4.1-0.589,6.946-4.391,6.357-8.49c-0.589-4.1-4.394-6.942-8.49-6.357 c-28.16,4.046-54.052,18.15-72.906,39.716C126.962,190.71,116.476,218.613,116.476,247.5z"/> <path d="M131.476,277.172c0-4.143-3.358-7.5-7.5-7.5s-7.5,3.357-7.5,7.5c0,12.002-4.421,23.523-12.449,32.443l-18.779,20.867 c-2.771,3.078-2.521,7.82,0.558,10.592c1.434,1.29,3.227,1.925,5.015,1.925c2.052,0,4.097-0.838,5.577-2.483l18.779-20.866 C125.687,307.971,131.476,292.886,131.476,277.172z"/> <path d="M340.755,344.123c-4.009-1.044-8.105,1.351-9.155,5.357c-2.769,10.579-6.213,21.096-10.24,31.258 c-1.526,3.851,0.359,8.21,4.21,9.735c0.907,0.359,1.841,0.529,2.761,0.529c2.985,0,5.808-1.795,6.975-4.739 c4.249-10.725,7.884-21.822,10.806-32.986C347.16,349.271,344.761,345.172,340.755,344.123z"/> <path d="M315.791,158.632c-3.081-2.771-7.823-2.517-10.592,0.563s-2.517,7.822,0.563,10.591 c22.061,19.832,34.713,48.157,34.713,77.714v32.864c0,12.473-0.86,25.042-2.557,37.359c-0.565,4.104,2.303,7.888,6.406,8.453 c0.347,0.048,0.692,0.071,1.033,0.071c3.688,0,6.903-2.722,7.42-6.478c1.79-12.993,2.698-26.251,2.698-39.406V247.5 C355.476,213.695,341.011,181.304,315.791,158.632z"/> <path d="M280.729,153.076c1.041,0.496,2.138,0.73,3.219,0.73c2.803,0,5.492-1.579,6.777-4.278c1.781-3.739,0.192-8.215-3.547-9.995 c-10.806-5.145-22.291-8.616-34.136-10.317c-4.106-0.585-7.901,2.258-8.49,6.357s2.257,7.901,6.357,8.49 C261.257,145.55,271.289,148.582,280.729,153.076z"/> <path d="M235.976,96c-2.806,0-5.644,0.078-8.437,0.232c-4.136,0.228-7.304,3.766-7.076,7.901c0.229,4.136,3.763,7.321,7.902,7.075 c2.519-0.139,5.079-0.209,7.61-0.209c75.266,0,136.5,61.233,136.5,136.5v32.864c0,4.143,3.358,7.5,7.5,7.5s7.5-3.357,7.5-7.5V247.5 C387.476,163.963,319.513,96,235.976,96z"/> <path d="M153.972,136.693c1.477,0,2.97-0.436,4.275-1.343c12.478-8.677,26.182-15.155,40.733-19.258 c3.987-1.124,6.308-5.268,5.184-9.254s-5.269-6.304-9.254-5.184c-16.16,4.556-31.376,11.749-45.226,21.379 c-3.401,2.365-4.241,7.039-1.876,10.439C149.265,135.57,151.599,136.693,153.972,136.693z"/> <path d="M99.476,277.172V247.5c0-34.89,13.213-68.118,37.205-93.565c2.841-3.014,2.702-7.76-0.312-10.602 s-7.761-2.701-10.602,0.312C99.14,171.886,84.476,208.77,84.476,247.5v29.672c0,4.083-1.504,8.002-4.234,11.035l-9.248,10.275 c-2.771,3.079-2.521,7.821,0.558,10.592c1.433,1.291,3.227,1.926,5.015,1.926c2.052,0,4.096-0.837,5.577-2.482l9.248-10.275 C96.605,292.449,99.476,284.966,99.476,277.172z"/> <path d="M409.951,189.104c-8.226-24.446-21.299-46.531-38.856-65.642c-2.803-3.05-7.547-3.252-10.597-0.449 c-3.05,2.803-3.251,7.547-0.449,10.598c16.127,17.554,28.134,37.834,35.686,60.276c1.054,3.133,3.976,5.11,7.107,5.11 c0.793,0,1.6-0.127,2.393-0.394C409.16,197.282,411.272,193.029,409.951,189.104z"/> <path d="M295.247,73.822c-3.917-1.341-8.183,0.748-9.524,4.668c-1.341,3.919,0.749,8.183,4.668,9.523 c16.538,5.659,32.065,13.857,46.15,24.369c1.347,1.005,2.92,1.489,4.48,1.489c2.286,0,4.544-1.041,6.017-3.015 c2.478-3.319,1.794-8.019-1.525-10.496C330.176,88.916,313.264,79.986,295.247,73.822z"/> <path d="M119.442,125.908C150.991,95.659,192.377,79,235.976,79c8.096,0,16.237,0.583,24.196,1.731 c4.103,0.598,7.903-2.252,8.495-6.352c0.592-4.1-2.251-7.902-6.351-8.494C253.648,64.635,244.786,64,235.976,64 c-47.487,0-92.56,18.141-126.915,51.081c-34.248,32.838-54.277,76.905-56.397,124.084c-0.186,4.138,3.018,7.644,7.155,7.829 c0.115,0.006,0.229,0.008,0.343,0.008c3.987,0,7.306-3.14,7.487-7.163C69.594,196.527,87.988,156.066,119.442,125.908z"/> <path d="M235.976,32c-16.772,0-33.485,1.944-49.674,5.778c-4.031,0.954-6.524,4.996-5.57,9.026c0.955,4.03,4.997,6.524,9.027,5.569 C204.817,48.809,220.366,47,235.976,47c54.996,0,106.332,21.911,144.55,61.695c1.473,1.533,3.439,2.305,5.41,2.305 c1.869,0,3.741-0.694,5.195-2.091c2.987-2.87,3.083-7.618,0.213-10.604c-19.913-20.729-43.304-37.036-69.522-48.465 C294.666,38.002,265.783,32,235.976,32z"/> <path d="M67.507,125.404c1.372,1.074,3.001,1.595,4.619,1.595c2.227,0,4.431-0.987,5.91-2.876 c21.375-27.302,49.515-48.717,81.377-61.932c3.826-1.587,5.642-5.975,4.055-9.801s-5.977-5.644-9.801-4.055 c-34.241,14.201-64.478,37.21-87.441,66.539C63.672,118.137,64.246,122.851,67.507,125.404z"/> <path d="M131.983,38.725c1.094,0,2.205-0.24,3.255-0.748C166.816,22.73,200.709,15,235.976,15c18.378,0,36.682,2.162,54.401,6.426 c4.025,0.966,8.077-1.51,9.046-5.537c0.969-4.027-1.51-8.078-5.538-9.047C275.019,2.302,255.535,0,235.976,0 c-37.544,0-73.631,8.232-107.259,24.469c-3.73,1.801-5.294,6.285-3.493,10.015C126.517,37.163,129.195,38.725,131.983,38.725z"/> <path d="M321.724,31.383c7.732,3.079,15.385,6.619,22.746,10.52c1.119,0.594,2.321,0.875,3.505,0.875 c2.688,0,5.287-1.449,6.633-3.99c1.939-3.66,0.545-8.199-3.115-10.139c-7.837-4.153-15.986-7.922-24.22-11.201 c-3.849-1.533-8.21,0.345-9.743,4.192C315.998,25.488,317.876,29.851,321.724,31.383z"/> </g> </svg> </button> <p id="scanPrompt">Please place your hand in the designated area to begin.</p> <p id="userInfo" style="display:none;"></p> </div> </div> </div> <br> [[Go Back -> EroSphere]] <script> function startScan() { document.getElementById('startScanButton').disabled = true; document.getElementById('scanPrompt').innerHTML = ` <div class="sims-progress"> <div class="sims-progress-value" style="width: 0%;"></div> </div> `; let progress = 0; const interval = setInterval(() => { progress += 2.5; if (progress <= 100) { document.querySelector('.sims-progress-value').style.width = `${progress}%`; } else { clearInterval(interval); if (SugarCube.State.variables.simsUserCreated) { document.getElementById('userInfo').textContent = `Welcome back, ${SugarCube.State.variables.simsUsername}!`; } else { const randomUsername = `user${Math.floor(Math.random() * 1000000)}`; SugarCube.State.variables.simsUserCreated = true; SugarCube.State.variables.simsUsername = randomUsername; document.getElementById('userInfo').innerHTML = `Account created successfully! Your username is <strong>${randomUsername}</strong>.`; } document.getElementById('userInfo').style.display = 'block'; displayContinueButton(); } }, 50); } function displayContinueButton() { document.getElementById('scanPrompt').innerHTML = ` <button class="pink-mindware-button" onclick="continueFunction()">Continue</button> `; document.getElementById('startScanButton').disabled = false; } function continueFunction() { SugarCube.Engine.play('EroSphere-SIMSPods-Selection'); } </script> <</nobr>>
<<nobr>> <style> .sims-select-button { padding-top: 15px; } .sims-meta { padding-top: 15px; } .sims-choicebutton button { display: block; /* Ensures the button spans the full width of its container */ width: 100%; /* Full width */ height: 40px; padding: 0 10px; /* Maintains padding on the sides */ border: 1px solid #FF69B4; /* Consistent with your design */ color: #FF69B4; font-size: 16px; text-transform: uppercase; background: rgba(255, 0, 128, 0.1); cursor: pointer; /* Changes the mouse cursor to indicate clickable */ transition: background-color 0.2s, border-color 0.2s; /* Smooth transition for hover effects */ box-sizing: border-box; /* Ensures border is included in the width */ } .sims-choicebutton:hover button { border-color: #FF69B4; /* Highlight color for hover state */ background: rgba(255, 0, 128, 0.1); /* Maintain background color on hover */ } .sims-choicebutton:active button { background: rgba(255, 0, 128, 0.2); /* Slightly darker shade for pressed effect */ border-color: #FF0080; /* Neon pink border */ transform: translateY(2px); /* Gives a feeling of being pressed down */ } .sims-level-buttons { justify-content: center; gap: 10px; padding: 20px 0; } .sims-level-buttons button { background-color: rgba(255, 0, 128, 0.2); border: 2px solid #FF69B4; color: #FFF; padding: 10px 20px; font-size: 14px; cursor: pointer; margin-top: 10px; margin-bottom: 10px; /* Adds space between the rows */ transition: background-color 0.2s ease, transform 0.1s ease; } .sims-level-buttons button:hover { background-color: rgba(255, 0, 128, 0.4); } .sims-level-buttons button:active { transform: translateY(2px); } .sims-level-button-disabled { background-color: #e0e0e0 !important; /* Light gray background */ color: #888888 !important; /* Lighter gray text */ border: 2px solid #d3d3d3 !important; /* Light gray border */ cursor: not-allowed !important; /* Indicates the button is not clickable */ pointer-events: none !important; /* Prevents click events */ opacity: 0.7 !important; /* Reduced opacity for a disabled look */ text-shadow: 1px 1px 1px rgba(255, 255, 255, 0.5) !important; /* Subtle text shadow for depth */ } .active-sims-level { background-color: rgba(255, 0, 128, 0.4) !important; /* Use the :hover background color */ } </style> <div class="simsCatalogueWrapper"> <h3 class="simsCatalogueTitle">Select Your S.I.M.S Experience</h3> <div class="simsCatalogueGrid"> <<for _key, _val range $simsCatalogue>> <<if _val.unlocked and _val.level == 1>> <!-- Check if SIMS is unlocked and at level 1 --> <<capture _key _val>> <!-- Capture the current values of _key and _val --> <div class="simsOption"> <<print '<img src="' + _val.thumbnail + '" alt="' + _key + '" class="simsThumbnail">'>> <div class="sims-meta"> <<if _val.isNew>> <<print _key + ' 🆕'>> <<else>> <<print _key>> <</if>> <div class="simsPrice">Price: $<<print _val.price>></div> </div> <div class="sims-select-button"> @@.sims-choicebutton;<<button "Select">> <<run window.selectSIMS(_key)>> <</button>>@@ </div> </div> <</capture>> <</if>> <</for>> </div> <div class="sims-level-buttons"> <<if $simsLevel >= 1>> <button class="active-sims-level" onclick="SugarCube.Engine.play('EroSphere-SIMSPods-Selection')">Level 1</button> <<else>> <button class="sims-level-button-disabled">Level 1</button> <</if>> <<if $simsLevel >= 2>> <button onclick="SugarCube.Engine.play('EroSphere-SIMSPods-Selection-Level2')">Level 2</button> <<else>> <button class="sims-level-button-disabled">Level 2</button> <</if>> <<if $simsLevel >= 3>> <button onclick="SugarCube.Engine.play('EroSphere-SIMSPods-Selection-Level3')">Level 3</button> <<else>> <button class="sims-level-button-disabled">Level 3</button> <</if>> <<if $simsLevel >= 4>> <button onclick="SugarCube.Engine.play('EroSphere-SIMSPods-Selection-Level4')">Level 4</button> <<else>> <button class="sims-level-button-disabled">Level 4</button> <</if>> <<if $simsLevel >= 5>> <button onclick="SugarCube.Engine.play('EroSphere-SIMSPods-Selection-Level5')">Level 5</button> <<else>> <button class="sims-level-button-disabled">Level 5</button> <</if>> <<if $simsLevel >= 6>> <button onclick="SugarCube.Engine.play('EroSphere-SIMSPods-Selection-Level5')">Custom</button> <<else>> <button class="sims-level-button-disabled">Custom</button> <</if>> <!-- Add more buttons as needed for additional levels --> </div> <<if $simsWatched gt 0>> <div style="display: flex;"> <div style="flex: 1; border-top: 2px dotted; border-right: 0px dotted;border-bottom: 2px dotted;border-left: 2px dotted; border-color: #FFCOCB; padding: 10px;"> <p><strong>Username:</strong> $simsUsername</p> <p><strong>Money spent:</strong> $$simsMoneySpent</p> </div> <div style="flex: 1; border: 2px dotted; border-color: #FFCOCB; padding: 10px;"> <p><strong>Total S.I.M.S. watched:</strong> $simsWatched</p> <<nobr>><<switch $simsLevel>> <<case 1>> <p><strong>Watch to unlock level 2:</strong> 5</p> <<case 2>> <p><strong>Watch to unlock level 3:</strong> 10</p> <<case 3>> <p><strong>Watch to unlock level 4:</strong> 15</p> <<case 4>> <p><strong>Watch to unlock level 5:</strong> 20</p> <<case 5>> <p><strong>Watch to unlock custom S.I.M.S.:</strong> 30</p> <<case 6>> <p><strong>Congratulations! You have reached the maximum level.</strong></p> <</switch>><</nobr>> </div> </div> <<else>> <div style="border: 2px dotted; border-color: #FFCOCB; padding: 10px;"> <p>Discover your first S.I.M.S. experience today!</p> </div> <</if>> </div><</nobr>> \ [[Go Back -> EroSphere-SIMSPods]] <<if !$SIMSContentWarning>>\ <div id="tutorial-box"><div class="instruction-container-red">\ <div class="instruction-title-bar-red">Warning: Work in Progress <button class="tutorial-close-button" onclick="SugarCube.State.variables.SIMSContentWarning = true; document.getElementById('tutorial-box').style.display = 'none';"><span style="tutorial-close-button"><i class="fas fa-times-circle"></i></span></button></div>\ <div class="instruction-content">\ <p>This section of the game is still under development. Currently, only the first level of S.I.M.S. is available.</p>\ </div></div></div>\ <<else>>\ <</if>>\
<video width="100%" controls autoplay muted> <source src="imgs/locations/erosphere/sims/SIMS-bike-ride.mp4" type="video/mp4"> Your browser does not support the video tag. </video> [[Go Back -> EroSphere-SIMSPods-Selection]]
<video width="100%" controls autoplay muted> <source src="imgs/locations/erosphere/sims/SIMS-ocean-dive.mp4" type="video/mp4"> Your browser does not support the video tag. </video> [[Go Back -> EroSphere-SIMSPods-Selection]]
<video width="100%" controls autoplay muted> <source src="imgs/locations/erosphere/sims/SIMS-nature-hike.mp4" type="video/mp4"> Your browser does not support the video tag. </video> [[Go Back -> EroSphere-SIMSPods-Selection]]
<div class="img-location-pink"><img src="imgs/locations/erosphere/erosphere-bar.webp" width="100%"></div> \ A robotic bartender deftly mixing colorful drinks behind the counter. The bar itself is sleek and modern, with a glossy black surface that reflects the neon lights overhead. A few patrons are seated at the bar, sipping their drinks. \ <<nobr>><div class="erosphere-hub"> <h4>Activities</h4> <button class="erosphere-button" onclick="MindWare.processMoneyClick(100, 'EroSphere-Order-Drink')">🍸 Order a drink ($100)</button><br> <button class="erosphere-button" onclick="MindWare.processActionButtonClick(0, 'EroSphere')">🚪 Go back to the lounge area<span class="action-point-icon"></span></button> </div><</nobr>>
<<nobr>> <<set _randomDrink to random(1, 7)>> <<switch _randomDrink>> <<case 1>> <<video "imgs/locations/erosphere/drinks/drink1.webm">> <<case 2>> <<video "imgs/locations/erosphere/drinks/drink2.webm">> <<case 3>> <<video "imgs/locations/erosphere/drinks/drink3.webm">> <<case 4>> <<video "imgs/locations/erosphere/drinks/drink4.webm">> <<case 5>> <<video "imgs/locations/erosphere/drinks/drink5.webm">> <<case 6>> <<video "imgs/locations/erosphere/drinks/drink6.webm">> <<case 7>> <<video "imgs/locations/erosphere/drinks/drink7.webm">> <</switch>> <<set $playerDrunk += 5>> <</nobr>>\ You pick up your glass and bring it to your lips. As you drink, a gentle warmth spreads through your body, starting from the pit of your stomach and radiating outwards. [[Go Back|EroSphere-Bar ]]
<<if $playerDrunk gt 0>> <<set $playerDrunk to $playerDrunk - 0.5>> <</if>> <<removeclass "body" "drunk-effect drunk-level-2 drunk-level-3 drunk-level-4">> <<if $playerDrunk lt 10>> <<removeclass "body" "drunk-effect drunk-level-2 drunk-level-3 drunk-level-4">> <<if $previousDrunkLevel gte 10>> <<notify>>You're sober.<</notify>> <<set $previousDrunkLevel to 0>> <</if>> <<elseif $playerDrunk gte 10 and $playerDrunk lt 20>> <<addclass "body" "drunk-effect drunk-level-2">> <<if $previousDrunkLevel lt 10 or $previousDrunkLevel gte 20>> <<notify>>You're slightly drunk.<</notify>> <<set $previousDrunkLevel to 10>> <</if>> <<elseif $playerDrunk gte 20 and $playerDrunk lt 30>> <<addclass "body" "drunk-effect drunk-level-3">> <<if $previousDrunkLevel lt 20 or $previousDrunkLevel gte 30>> <<notify>>You're quite buzzed.<</notify>> <<set $previousDrunkLevel to 20>> <</if>> <<elseif $playerDrunk gte 30 and $playerDrunk lt 40>> <<addclass "body" "drunk-effect drunk-level-4">> <<if $previousDrunkLevel lt 30 or $previousDrunkLevel gte 40>> <<notify>>You're hammered.<</notify>> <<set $previousDrunkLevel to 30>> <</if>> <<elseif $playerDrunk gte 40>> <<set $playerDrunk to 0>> <<goto "BlackoutDrunk">> <</if>> <<set $previousDrunkLevel to $playerDrunk>>
<<set $lockedUI = true>>\ <<fadein 3s 1s>>The world begins to spin violently, a relentless whirlwind of colors and shapes. Your vision blurs, the edges of reality fraying and melting into a chaotic swirl. The spinning intensifies, pulling you into a vortex of dizziness and confusion until everything blurs and fades into darkness.<</fadein>> <<fadein 3s 3s>>\ You wake up in your bed with a pounding headache, unsure of how you got here. <<link "Get Up">><<run MindWare.advanceDay()>><<goto $playerHome>><<set $lockedUI = false>><</link>> <</fadein>> <span id="blackout"></span>
<<nobr>> <<switch $playerBody>> <<case "Masculine" "Masculine-Leaning">> <<video "imgs/locations/erosphere/dancing/dancing-male.webm">> <<case "Androgynous">> <<video "imgs/locations/erosphere/dancing/dancing-andro.webm">> <<case "Feminine-Leaning" "Feminine">> <<video "imgs/locations/erosphere/dancing/dancing-female.webm">> <</switch>><</nobr>>\ The pulsating beats of the music fill the air, resonating through your body as you move to the rhythm. The crowd around you sways and gyrates, lost in their own worlds of rhythm and motion. The energy is infectious, and for a moment, nothing else matters but the beat and your movements. <<button "Do Something Else">> <<goto "EroSphere">> <</button>>
<div class="img-location-pink"><img src="imgs/locations/erosphere/glorybooths/glorybooths-outside.webp" width="100%"></div> \ Work in progress... <<button "Do Something Else">> <<goto "EroSphere">> <</button>> /* A robotic bartender deftly mixing colorful drinks behind the counter. The bar itself is sleek and modern, with a glossy black surface that reflects the neon lights overhead. A few patrons are seated at the bar, sipping their drinks. \ <<nobr>><div class="erosphere-hub"> <h4>Activities</h4> <button class="erosphere-button" onclick="MindWare.processMoneyClick(100, 'EroSphere-Order-Drink')">🍸 Order a drink ($100)</button><br> <button class="erosphere-button" onclick="MindWare.processActionButtonClick(0, 'EroSphere')">🚪 Go back to the lounge area<span class="action-point-icon"></span></button> </div><</nobr>> */
<div class="img-character"><img src="imgs/locations/gitgud-outside.jpg" width="100%"></div> It's the weekend! GitGud is closed today. \ <p class="back-link"> [["Go Back"|GoOutside]] </p>
<div class="img-character"><img src="imgs/locations/gitgud-inside.jpg" width="100%"></div> <p>GitGud is busy as always, with people hustling between shelves crammed with the latest in tech modding gear and experimental software.</p> /* <<if $talkedWithYukiAboutBrother or $chapter1Started>> <<if Object.values($yukiGitGudDialogs).some(dialog => dialog.isNew)>> @@.choicebutton;<<button "💬 Talk with Yuki 🆕">> <<goto "GitGud-TalkWithYuki">> <</button>>@@ <<else>> @@.choicebutton;<<button "💬 Talk with Yuki">> <<goto "GitGud-TalkWithYuki">> <</button>>@@ <</if>> <<else>> <<if Object.values($yukiGitGudDialogs).some(dialog => dialog.isNew)>> @@.choicebutton;<<button "💬 Talk with the employee 🆕">> <<goto "GitGud-TalkWithEmployee">> <</button>>@@ <<else>> @@.choicebutton;<<button "💬 Talk with the employee">> <<goto "GitGud-TalkWithEmployee">> <</button>>@@ <</if>> <</if>> <br> @@.choicebutton;<<button "🚪 Visit Xavier">> <<goto "GitGud-VisitXavier">> <</button>>@@ <br> */ <div class="office-hub"> <h4>Activities</h4> <<if $talkedWithYukiAboutBrother or $chapter1Started>> <<if Object.values($yukiGitGudDialogs).some(dialog => dialog.isNew)>> <button class="office-button" onclick="SugarCube.Engine.play('GitGud-TalkWithYuki')">💬 Talk with Yuki 🆕 </button> <<else>> <button class="office-button" onclick="SugarCube.Engine.play('GitGud-TalkWithYuki')">💬 Talk with Yuki</button> <</if>> <<else>> <<if Object.values($yukiGitGudDialogs).some(dialog => dialog.isNew)>> <button class="office-button" onclick="SugarCube.Engine.play('GitGud-TalkWithEmployee')">💬 Talk with the employee 🆕 </button> <<else>> <button class="office-button" onclick="SugarCube.Engine.play('GitGud-TalkWithEmployee')">💬 Talk with the employee</button> <</if>> <</if>> <br> <<if Object.values($xavierGitGudDialogs).some(dialog => dialog.isNew)>> <button class="office-button" onclick="SugarCube.Engine.play('GitGud-VisitXavier')">💬 Visit Xavier 🆕 </button> <<else>> <button class="office-button" onclick="SugarCube.Engine.play('GitGud-VisitXavier')">💬 Visit Xavier</button> <</if>> <br> <button class="office-button" onclick="SugarCube.State.variables.goOutsideGoBackPassage = 'GitGud'; SugarCube.Engine.play('GoOutside')">🚪 Go outside</button> </div> /* <p class="back-link"> <<link "Go Outside">> <<set $goOutsideGoBackPassage = "GitGud">> <<goto "GoOutside">> <</link>> </p> */
<div class="img-character"><img src="imgs/characters/yuki/yuki-gitgud-inside.jpg" width="100%"></div> <br> <<if $relationshipYuki <= 20>> <<yuki>>What do you want? I'm busy.<</yuki>> <<elseif $relationshipYuki <= 40>> <<yuki>>I hope this is important.<</yuki>> <<elseif $relationshipYuki <= 60>> <<yuki>>Hey, what's up?<</yuki>> <<elseif $relationshipYuki <= 80>> <<yuki>>Good to see you! What do you need?<</yuki>> <<else>> <<yuki>>I've missed you! What have you been up to?<</yuki>> <</if>> <br> <div id="dialog-content" class="dialog-options"> <p><strong>Choose a topic to discuss with Yuki:</strong></p> <<set _hasUnlockedTopics = false>> <<if $yukiGitGudDialogs and Object.keys($yukiGitGudDialogs).length > 0>> <<set _topics = Object.keys($yukiGitGudDialogs).reverse()>> <<for _topic range _topics>> <<set _data = $yukiGitGudDialogs[_topic]>> <<if _data.unlocked>> <<set _hasUnlockedTopics = true>> <<set _buttonText = _topic>> <<set _tempPassage = _data.passage>> <<if _data.isNew>> <<set _buttonText += " 🆕">> <</if>> <<set _buttonText += " <span class='action-point-icon'>⚡</span>">> <<capture _tempPassage _buttonText>> @@.choicebutton; <<button _buttonText>> <<if MindWare.processActionButtonClickNoPassage(1)>> <<replace "#dialog-content">><<include _tempPassage>><</replace>> <</if>> <</button>>@@ <br> <</capture>> <</if>> <</for>> <</if>> <<if not _hasUnlockedTopics>> <p>You have nothing to discuss with Yuki right now.</p> <br> <</if>> <p class="back-link"> [["Go Back"|GitGud]] </p> </div>
<div class="img-character"><img src="imgs/characters/yuki/yuki-gitgud-inside.jpg" width="100%"></div> <br> <<if $relationshipYuki <= 20>> <<gitgud-employee-yuki>>What do you want? I'm busy.<</gitgud-employee-yuki>> <<elseif $relationshipYuki <= 40>> <<gitgud-employee-yuki>>I hope this is important.<</gitgud-employee-yuki>> <<elseif $relationshipYuki <= 60>> <<gitgud-employee-yuki>>Hey, what's up?<</gitgud-employee-yuki>> <<elseif $relationshipYuki <= 80>> <<gitgud-employee-yuki>>Good to see you! What do you need?<</gitgud-employee-yuki>> <<else>> <<gitgud-employee-yuki>>I've missed you! What have you been up to?<</gitgud-employee-yuki>> <</if>> <br> <div id="dialog-content" class="dialog-options"> <p><strong>Choose a topic to discuss with the employee:</strong></p> <<set _hasUnlockedTopics = false>> <<if $yukiGitGudDialogs and Object.keys($yukiGitGudDialogs).length > 0>> <<set _topics = Object.keys($yukiGitGudDialogs).reverse()>> <<for _topic range _topics>> <<set _data = $yukiGitGudDialogs[_topic]>> <<if _data.unlocked>> <<set _hasUnlockedTopics = true>> <<set _buttonText = _topic>> <<set _tempPassage = _data.passage>> <<if _data.isNew>> <<set _buttonText += " 🆕">> <</if>> <<set _buttonText += " <span class='action-point-icon'>⚡</span>">> <<capture _tempPassage _buttonText>> @@.choicebutton; <<button _buttonText>> <<if MindWare.processActionButtonClickNoPassage(1)>> <<replace "#dialog-content">><<include _tempPassage>><</replace>> <</if>> <</button>>@@ <br> <</capture>> <</if>> <</for>> <</if>> <<if not _hasUnlockedTopics>> <p>You have nothing to discuss with the employee right now.</p> <br> <</if>> <p class="back-link"> [["Go Back"|GitGud]] </p> </div>
<<if not $specialEncounterToday>> <<set _rand to random(1, 3)>> <<if _rand is 3>> <<set $specialEncounterToday to true>> <<goto "SpecialEncounterWithXavier">> <<else>> <<goto "RegularVisitWithXavier">> <</if>> <<else>> <<goto "RegularVisitWithXavier">> <</if>>
/* $xavierRandomEncounter is set in MindWare.advanceDay = function() */ <div class="img-character"><img src="imgs/locations/gitgud-hallway.jpg" width="100%"></div> <p>You ascend the stairs and reach the hallway where the door to Xavier's room is located. As you get closer, you hear faint, muffled sounds emanate from within. It's clear to you that Xavier isn't alone.</p> <span id="door-action"> <br> @@.choicebutton;<<button "Peek inside">> <<replace "#door-action">> <<switch $xavierRandomEncounter>> <<case 1>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "1-XavierEncounterBlowjob1">> <<case 2>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "2-XavierEncounterBlowjob2">> <<case 3>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "3-XavierEncounterBlowjob3">> <<case 4>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "4-XavierEncounterBlowjob4">> <<case 5>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "5-XavierEncounterBlowjob5">> <<case 6>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "6-XavierEncounterBlowjob6">> <<case 7>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "7-XavierEncounterBlowjob7">> <<case 8>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "8-XavierEncounterBlowjob8">> <<case 9>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "9-XavierEncounterBlowjob9">> <<case 10>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "10-XavierEncounterBlowjob10">> <<case 11>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "11-XavierEncounterBlowjob11">> <<case 12>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "12-XavierEncounterAnal1">> <<case 13>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "13-XavierEncounterAnal2">> <<case 14>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "14-XavierEncounterAnal3">> <<case 15>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "15-XavierEncounterRimming1">> <<case 16>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "16-XavierEncounterRimming2">> <<case 17>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "17-XavierEncounterRimming3">> <<case 18>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "18-XavierEncounterCumshot1">> <<case 19>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "19-XavierEncounterCumshot2">> <<case 20>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "20-XavierEncounterCumshot3">> <<case 21>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "21-XavierEncounterCumshot4">> <<case 22>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "22-XavierEncounterFuck1">> <<case 23>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "23-XavierEncounterFuck2">> <<case 24>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "24-XavierEncounterFuck3">> <<case 25>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "25-XavierEncounterFuck4">> <<case 26>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "26-XavierEncounterFuck5">> <<case 27>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "27-XavierEncounterFuck6">> <<case 28>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "28-XavierEncounterShemale1">> <<case 29>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "29-XavierEncounterShemale2">> <<case 30>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "30-XavierEncounterShemale3">> <<case 31>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "31-XavierEncounterShemale4">> <<case 32>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "32-XavierEncounterShemale5">> <<case 33>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "33-XavierEncounterShemale6">> <<case 34>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "34-XavierEncounterShemale7">> <<case 35>> <<if ndef $xavierRandomEncounterCounter>> <<set $xavierRandomEncounterCounter = 1>> <<else>> <<set $xavierRandomEncounterCounter += 1>> <</if>> <<include "35-XavierEncounterShemale8">> <</switch>> <</replace>> <</button>>@@</span> <br> @@.choicebutton;<<button "Come back later">> <<goto "GitGud">> <</button>>@@
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/blowjob1.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/blowjob2.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/blowjob3.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/blowjob4.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/blowjob5.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/blowjob6.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/blowjob7.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/blowjob8.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/blowjob9.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/blowjob10.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/blowjob11.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/anal1.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/anal2.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/anal3.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/rimming1.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/rimming2.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/rimming3.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/cumshot1.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/cumshot2.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/cumshot3.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/cumshot4.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/fuck1.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/fuck2.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/fuck3.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/fuck4.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/fuck5.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/fuck6.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/shemale1.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/shemale2.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/shemale3.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/shemale4.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/shemale5.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/shemale6.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/shemale7.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<video width="100%" height="auto" autoplay loop> <source src="imgs/locations/gitgud/encounters/shemale8.webm" type="video/webm"> Your browser does not support the video tag. </video> You peek though the keyhole and instantly realize that it's better to avoid interrupting him right now. <br>
<div class="img-character"><img src="imgs/characters/xavier/gitgud-xavier.jpg" width="100%"></div> <br> <<if $relationshipXavier <= 20>> <<xavier>>You better have a good reason for interrupting me.<</xavier>> <<elseif $relationshipXavier <= 40>> <<xavier>>You need something?<</xavier>> <<elseif $relationshipXavier <= 60>> <<xavier>>Hey, what's going on?<</xavier>> <<elseif $relationshipXavier <= 80>> <<xavier>>What brings you around?<</xavier>> <<else>> <<xavier>>What's on your mind, my friend?<</xavier>> <</if>> <br> <div id="dialog-content" class="dialog-options"> <p><strong>Choose a topic to discuss with Xavier:</strong></p> <<set _hasUnlockedTopics = false>> <<if $xavierGitGudDialogs and Object.keys($xavierGitGudDialogs).length > 0>> <<set _topics = Object.keys($xavierGitGudDialogs).reverse()>> <<for _topic range _topics>> <<set _data = $xavierGitGudDialogs[_topic]>> <<if _data.unlocked>> <<set _hasUnlockedTopics = true>> <<set _buttonText = _topic>> <<set _tempPassage = _data.passage>> <<if _data.isNew>> <<set _buttonText += " 🆕">> <</if>> <<set _buttonText += " <span class='action-point-icon'>⚡</span>">> <<capture _tempPassage _buttonText>> @@.choicebutton; <<button _buttonText>> <<if MindWare.processActionButtonClickNoPassage(1)>> <<replace "#dialog-content">><<include _tempPassage>><</replace>> <</if>> <</button>>@@ <br> <</capture>> <</if>> <</for>> <</if>> <<if not _hasUnlockedTopics>> <p>You have nothing to discuss with Xavier right now.</p> <br> <</if>> <p class="back-link"> [["Go Back"|GitGud]] </p> </div>
<div class="img-location"><img src="imgs/locations/hospital/panacea-clinic-reception.webp" width="100%"></div> <p>You enter the Panacea Clinic and a familiar antiseptic smell immediately hits your nose. There are rows of chairs occupied by patients waiting for their turn.</p> <div class="office-hub"> <h4>Activities</h4> <span id="extra-actions-panacea"></span> <<if Object.values($nursePanaceaDialogs).some(dialog => dialog.isNew)>> <button class="office-button" onclick="SugarCube.Engine.play('Panacea-Nurse')">💬 Talk with the nurse 🆕 </button> <<else>> <button class="office-button" onclick="SugarCube.Engine.play('Panacea-Nurse')">💬 Talk with the nurse</button> <</if>> <br> <button class="office-button" onclick="SugarCube.State.variables.goOutsideGoBackPassage = 'GitGud'; SugarCube.Engine.play('GoOutside')">🚪 Go outside</button> </div> <<nobr>><<done>> <<script>> function updateExtraActionsPanacea() { var extraActionsSpan = document.getElementById('extra-actions-panacea'); if (extraActionsSpan) { var buttonsHTML = State.variables.extraActionsPanacea.join('') + '<br>'; extraActionsSpan.innerHTML = buttonsHTML; } } updateExtraActionsPanacea(); <</script>> <</done>><</nobr>>
<div class="img-location"><img src="imgs/locations/hospital/panacea-clinic-reception-nurse.webp" width="100%"></div> <br> <<nurse>>Can I help you?<</nurse>> <br> <div id="dialog-content" class="dialog-options"> <p><strong>Choose a topic to discuss with the nurse:</strong></p> <<set _hasUnlockedTopics = false>> <<if $nursePanaceaDialogs and Object.keys($nursePanaceaDialogs).length > 0>> <<set _topics = Object.keys($nursePanaceaDialogs).reverse()>> <<for _topic range _topics>> <<set _data = $nursePanaceaDialogs[_topic]>> <<if _data.unlocked>> <<set _hasUnlockedTopics = true>> <<set _buttonText = _topic>> <<set _tempPassage = _data.passage>> <<if _data.isNew>> <<set _buttonText += " 🆕">> <</if>> <<set _buttonText += " <span class='action-point-icon'>⚡</span>">> <<capture _tempPassage _buttonText>> @@.choicebutton; <<button _buttonText>> <<if MindWare.processActionButtonClickNoPassage(1)>> <<replace "#dialog-content">><<include _tempPassage>><</replace>> <</if>> <</button>>@@ <br> <</capture>> <</if>> <</for>> <</if>> <<if not _hasUnlockedTopics>> <p>You have nothing to discuss with the nurse right now.</p> <br> <</if>> <p class="back-link"> [["Go Back"|PanaceaClinic]] </p> </div>
<<player>>Excuse me, nurse. I was wondering if the hospital offers any mental health services?<</player>> <<say "Nurse" "imgs/locations/hospital/panacea-nurse-portrait.webp">>Yes, we do offer mental health services. However, I'm afraid there's quite a long waiting list. The next available slot is in two weeks.<</say>> <<player>>Two weeks? But... that's so far away...<</player>> <<if $hospitalIntroPlayerInsisted is false>>\ <<say "Nurse" "imgs/locations/hospital/panacea-nurse-portrait.webp">>Wait a minute... weren't you here earlier? I remember you. You were very patient when I asked you to wait.<</say>> <<player>>Yes, that was me.<</player>> <<say "Nurse" "imgs/locations/hospital/panacea-nurse-portrait.webp">>Let me take another look at our schedule. Give me a moment.<</say>> <div class="narrator">The nurse types away at her computer, her brow furrowed in concentration. After a few minutes, she looks up with a smile.</div> <<say "Nurse" "imgs/locations/hospital/panacea-nurse-portrait.webp">>I have some good news. It looks like someone who was supposed to see our mental health specialist tomorrow has just cancelled. Would you like to take that slot?<</say>> <<player>>Really? That would be wonderful. Thank you so much!<</player>> <<say "Nurse" "imgs/locations/hospital/panacea-nurse-portrait.webp">>You're welcome. I've booked you in for tomorrow. We look forward to seeing you then.<</say>> <<player>>Thank you again. I really appreciate your help.<</player>> <<else>>\ <<say "Nurse" "imgs/locations/hospital/panacea-nurse-portrait.webp">>I see... You know, I still remember the commotion you caused earlier. I'm afraid I can't make any exceptions to our waiting list policy.<</say>> <<player>>I understand. I'll take the appointment in two weeks then.<</player>> <<say "Nurse" "imgs/locations/hospital/panacea-nurse-portrait.webp">>Very well. I've scheduled you for two weeks from now. Have a great day.<</say>> <</if>>\ <<button "Leave the Hospital">> <<set $nursePanaceaDialogs["Psychological evaluation"].isNew = false>> <<set $nursePanaceaDialogs["Psychological evaluation"].unlocked = false>> <<if $hospitalIntroPlayerInsisted is false>> <<set $nextPsychologicalEvaluationCounter = 1>> <<run MindWare.addTask("Undergo a psychological evaluation in $nextPsychologicalEvaluationCounter days", "Task-PsychologicalEvaluation1")>> <<else>> <<set $nextPsychologicalEvaluationCounter = 14>> <<run MindWare.addTask("Undergo a psychological evaluation in $nextPsychologicalEvaluationCounter days", "Task-PsychologicalEvaluation1")>> <</if>> <<goto "GoOutside">> <</button>>
Undergo a psychological evaluation at Panacea Hospital in $nextPsychologicalEvaluationCounter days. <<nobr>> <<set _currentPassage to passage()>> <<if $doYouKnowTheAnswer === MindWare.checkPassword($enteredCode)>> <<button "Set the counter to 0">> <<set $nextPsychologicalEvaluationCounter = 0>> <<goto _currentPassage>> <<run Dialog.close()>> <<run Dialog.setup("Task Description")>> <<run Dialog.wiki(Story.get("Task-PsychologicalEvaluation1").processText())>> <<run Dialog.open()>> <</button>> <</if>> <</nobr>>
<div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <<if hasVisited("PsychologicalEvaluation1")>>\ <<if $genderDysphoriaResult === "low" || $genderDysphoriaResult === "moderate">>\ <<psychiatrist>>Hello again. Would you like to fill out the questionnaire again, sweetie?<</psychiatrist>> <span id="test-choice"> @@.choicebutton;<<button "Yes, I'll do the tests">> <<goto "PsychologicalEvaluation1-Test">><</button>>@@ @@.choicebutton;<<button "No, maybe another time">> <<replace "#test-choice">><<include "PsychologicalEvaluation-Refusal">> <</replace>> <</button>>@@ </span> <<else>>\ <<psychiatrist>>Hello again. It's good to see you back. Are you feeling ready to proceed with the questionnaire now, sweetie?<</psychiatrist>> <span id="test-choice"> @@.choicebutton;<<button "Yes, I'll do the tests">> <<goto "PsychologicalEvaluation1-Test">><</button>>@@ @@.choicebutton;<<button "No, maybe another time">> <<replace "#test-choice">><<include "PsychologicalEvaluation-Refusal">> <</replace>> <</button>>@@ </span> <</if>>\ <<else>>\ <div class="narrator">You step into a small office. A desk occupies the center of the room. Behind the desk, you see a plump, kind-faced woman in her mid-twenties. She has a motherly warmth about her, with soft features and gentle eyes that seem to radiate empathy. She looks up from her notes and greets you with a smile.</div> <<psychiatrist>>Ah, welcome, welcome. Come in, take a seat. I'm Dr. Amelia Hart. What brings you to me today?<</psychiatrist>> <<player>>Thank you, Doctor. I've just been feeling a bit... off lately.<</player>> <<psychiatrist>>I see. Can you tell me more about that? What do you mean by 'off'?<</psychiatrist>> <<player>>It's hard to explain. I've been having some strange experiences. Things that I can't really make sense of.<</player>> <<psychiatrist>>It's alright, sweetie. My office is a safe space. Whatever you're comfortable sharing, I'm here to listen without judgment. Let's take this at your pace.<</psychiatrist>> <div class="narrator">Dr. Hart's warm and reassuring tone puts you at ease. You take a deep breath, trying to find the right words.</div> <<player>>Well, it's just... I've been having these visions. They're quite vivid and... explicit.<</player>> <<psychiatrist>>Explicit in what way?<</psychiatrist>> <<player>>They're sexual in nature. And what's really confusing is that in these visions, I see myself as a woman. It's been quite disturbing.<</player>> <<psychiatrist>>I understand that this must be very unsettling for you. How long have these visions been occurring?<</psychiatrist>> <<player>>It started after I blacked out some time ago. That's actually when I first visited this hospital.<</player>> <<psychiatrist>>Alright, let me pull up your records from your previous examination. Just a moment.<</psychiatrist>> <div class="narrator">Dr. Hart turns to her computer, her fingers dancing across the keyboard as she searches for your file. After a few moments, she finds it and begins to read.</div> <<if $hospitalExaminationResisted is true>>\ <<psychiatrist>>It says here that during your examination, you were quite resistant. You seemed to be fighting against something, and it caused you to lose consciousness. Do you remember that, sweetie?<</psychiatrist>> <<else>>\ <<psychiatrist>>According to this, you weren't entirely responsive during the examination. You seemed to be experiencing something quite intense, even moaning softly at one point. Then you lost consciousness. Do you recall that?<</psychiatrist>> <</if>>\ <<player>>Yes, that sounds about right. It was all very overwhelming.<</player>> <<psychiatrist>>I see. Based on what you've told me and what I've read in your file, it's possible that you might be experiencing gender dysphoria. This can sometimes manifest in intense, vivid visions like the ones you've described. But let's not jump to conclusions just yet. I'd like to perform a few tests to help us understand what's going on. Would that be alright with you?<</psychiatrist>> <span id="test-choice"> @@.choicebutton;<<button "Yes, I'll do the tests">> <<goto "PsychologicalEvaluation1-Test">><</button>>@@ @@.choicebutton;<<button "No, maybe another time">> <<replace "#test-choice">><<include "PsychologicalEvaluation-Refusal">> <</replace>> <</button>>@@ </span> <</if>>\
<div class="narrator">You decline the tests for now, and Dr. Hart nods understandingly.</div> <<psychiatrist>>That's alright, sweetie. It's important to feel ready for these things. Just remember, I'm here to help whenever you need it.<</psychiatrist>> @@.choicebutton;<<button "Leave">> <<goto "PanaceaClinic">><</button>>@@
<div class="narrator">You agree to the tests, and Dr. Hart nods.</div> <<psychiatrist>>Alright. Let's start with a simple questionnaire. It will help us gauge your feelings and thoughts regarding your gender identity.<</psychiatrist>> <<player>>Yes, that sounds fine.<</player>> <div class="narrator">Dr. Hart hands you a clipboard with a questionnaire attached.</div> @@.choicebutton;<<button "Fill out the questionnaire">> <<goto "PsychologicalEvaluation1-Test-Read">><</button>>@@
<<nobr>><style> .clipboard { background-color: #f9f9f9; border: 1px solid #ddd; border-radius: 5px; box-shadow: 0 0 10px rgba(0,0,0,0.1); margin: 20px auto; max-width: 600px; padding: 20px; position: relative; } .clipboard::before { content: ''; position: absolute; top: -10px; left: 20px; right: 20px; height: 20px; background: #c1c1c1; border-radius: 5px 5px 0 0; } .clipboard h2 { color: #333; font-size: 24px; margin-bottom: 20px; text-align: center; } .clipboard h3 { color: #555; font-size: 18px; margin-bottom: 15px; } .clipboard p { color: #666; font-size: 16px; line-height: 1.5; margin-bottom: 15px; } .pink-choicebutton button { display: block; /* Ensures the button spans the full width of its container */ width: 100%; /* Full width */ height: 40px; padding: 0 10px; /* Maintains padding on the sides */ border: 1px solid #FF0080; /* Neon pink border consistent with EroSphere theme */ color: #FF69B4; /* Neon pink text color for consistency */ font-size: 16px; text-transform: uppercase; background: #1B030A; /* Light neon pink background */ cursor: pointer; /* Changes the mouse cursor to indicate clickable */ transition: background-color 0.2s, border-color 0.2s; /* Smooth transition for hover effects */ box-sizing: border-box; /* Ensures border is included in the width */ } .pink-choicebutton:hover button { border-color: #FF69B4; /* Lighter pink on hover for interactivity */ background: #1B030A; /* Maintain background color on hover */ } .pink-choicebutton button:active { background: #1B030A; /* Slightly darker shade for pressed effect */ border-color: #FF0080; /* Neon pink border */ transform: translateY(2px); /* Gives a feeling of being pressed down */ } </style> <div class="clipboard"> <h2>Gender Identity Questionnaire</h2> <p>This questionnaire consists of 5 True/False questions designed to help assess your feelings about gender identity. Please answer each question honestly based on your personal experiences and feelings.</p> <p>Your responses will be kept confidential and used only for the purpose of this evaluation.</p> <span id="questions">@@.choicebutton;<<button "Begin Test">> <<replace "#questions">> <h3>Question 1 of 5</h3> <p>I have recently experienced vivid sexual fantasies or dreams where I see myself as a woman.</p> @@.pink-choicebutton;<<button "True">>\ <<set $genderIdentityQuestionnaireQuestion1 to "true">> <<replace "#questions">> <<include "PsychologicalEvaluation1-Test-Read2">> <</replace>> <</button>>@@ <<ResistMinigameContainer>> <<done>><<include "ResistAVAMinigame-Script">><</done>> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "False">> <<set $genderIdentityQuestionnaireQuestion1 to "false">> <<replace "#questions">> <<include "PsychologicalEvaluation1-Test-Read2">> <</replace>> <</button>>@@</div> <</replace>> <</button>>@@ </span></div> <</nobr>>
<h3>Question 2 of 5</h3> <p>I have felt a strange sense of comfort or excitement when mistaken for or treated as a woman.</p> @@.pink-choicebutton;<<button "True">>\ <<set $genderIdentityQuestionnaireQuestion2 to "true">> <<replace "#questions">> <<include "PsychologicalEvaluation1-Test-Read3">> <</replace>> <</button>>@@ <<ResistMinigameContainer>> <<done>><<include "ResistAVAMinigame-Script">><</done>> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "False">> <<set $genderIdentityQuestionnaireQuestion2 to "false">> <<replace "#questions">> <<include "PsychologicalEvaluation1-Test-Read3">> <</replace>> <</button>>@@</div>
<h3>Question 3 of 5</h3> <p>I've had moments where I wished I could experience intimacy or relationships from a woman's perspective.</p> @@.pink-choicebutton;<<button "True">> <<set $genderIdentityQuestionnaireQuestion3 to "true">> <<replace "#questions">> <<include "PsychologicalEvaluation1-Test-Read4">> <</replace>> <</button>>@@ <<ResistMinigameContainer>> <<done>><<include "ResistAVAMinigame-Script">><</done>> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "False">> <<set $genderIdentityQuestionnaireQuestion3 to "false">> <<replace "#questions">> <<include "PsychologicalEvaluation1-Test-Read4">> <</replace>> <</button>>@@</div>
<h3>Question 4 of 5</h3> <p>I have experienced moments where I felt disconnected from my male body, as if it didn't quite fit who I am.</p> @@.pink-choicebutton;<<button "True">> <<set $genderIdentityQuestionnaireQuestion4 to "true">> <<replace "#questions">> <<include "PsychologicalEvaluation1-Test-Read5">> <</replace>> <</button>>@@ <<ResistMinigameContainer>> <<done>><<include "ResistAVAMinigame-Script">><</done>> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "False">> <<set $genderIdentityQuestionnaireQuestion4 to "false">> <<replace "#questions">> <<include "PsychologicalEvaluation1-Test-Read5">> <</replace>> <</button>>@@</div>
<h3>Question 5 of 5</h3> <p>I have found myself wondering what life would be like if I had been born a woman, beyond just casual curiosity.</p> @@.pink-choicebutton;<<button "True">> <<set $genderIdentityQuestionnaireQuestion5 to "true">> <<goto "PsychologicalEvaluation1-TestResults">> <</button>>@@ <<ResistMinigameContainer>> <<done>><<include "ResistAVAMinigame-Script">><</done>> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "False">> <<set $genderIdentityQuestionnaireQuestion5 to "false">> <<goto "PsychologicalEvaluation1-TestResults">> <</button>>@@</div>
<div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <<psychiatrist>>Have you finished the questionnaire, sweetie?<</psychiatrist>> <<player>>Yes, I have.<</player>> <<psychiatrist>>Excellent. Let me take a look at your responses.<</psychiatrist>> <div class="narrator">Dr. Hart reviews your answers, her brow furrowing slightly in concentration.</div> <<set _trueCount to 0>>\ <<if $genderIdentityQuestionnaireQuestion1 is "true">><<set _trueCount += 1>><</if>>\ <<if $genderIdentityQuestionnaireQuestion2 is "true">><<set _trueCount += 1>><</if>>\ <<if $genderIdentityQuestionnaireQuestion3 is "true">><<set _trueCount += 1>><</if>>\ <<if $genderIdentityQuestionnaireQuestion4 is "true">><<set _trueCount += 1>><</if>>\ <<if $genderIdentityQuestionnaireQuestion5 is "true">><<set _trueCount += 1>><</if>>\ <<set _falseCount to 5 - _trueCount>>\ <<psychiatrist>>I see you've answered _trueCount questions as true and _falseCount as false. Let's discuss what this might mean.<</psychiatrist>> \ <<if _trueCount >= 4>>\ <<set $genderDysphoriaResult to "high">>\ <<psychiatrist>>Your responses indicate a strong likelihood of gender dysphoria. This means that you might be experiencing a significant disconnect between your assigned gender at birth and your internal sense of self.<</psychiatrist>> <<psychiatrist>>Gender dysphoria is a persistent feeling of disconnect between your assigned gender at birth and your internal sense of self. Your responses indicate that you've been experiencing this disconnect quite strongly.<</psychiatrist>> <<player>>But I've always been a man...<</player>> <<psychiatrist>>Biologically, you were assigned male at birth. But gender identity is about how you feel inside. And it seems like inside, you might identify more with being a female.<</psychiatrist>> <div class="narrator">Dr. Hart patiently explains the concept of gender identity, the spectrum of gender, and how it differs from biological sex. She emphasizes that these feelings are valid and more common than many people realize. Throughout her explanation, she maintains a warm, nurturing tone, occasionally reaching out to pat your hand reassuringly.</div> <<psychiatrist>>Transitioning is a process of changing your external gender expression to match your internal gender identity. This can involve various steps, and it's different for everyone.<</psychiatrist>> <<player>>What kind of steps?<</player>> <<psychiatrist>>It could include things like changing your name and pronouns, dressing differently, or seeking hormone therapy. Some people also choose to have gender-affirming surgeries. But remember, there's no one "right" way to transition. It's a personal journey.<</psychiatrist>> <<player>>I see...<</player>> <<psychiatrist>>To get an accurate diagnosis and help you transition in a way that reflects your personal journey, I'd like to suggest another appointment in a week. This will give us an opportunity to understand your psyche better.<</psychiatrist>> <<player>>Alright, I think I can do that.<</player>> <<psychiatrist>>Wonderful. In the meantime, I encourage you to pay attention to your feelings and experiences.<</psychiatrist>> <<player>>Thank you, Dr. Hart. I appreciate your help.<</player>> <<psychiatrist>>You're very welcome, sweetie. Take care, and I'll see you in a week.<</psychiatrist>> @@.choicebutton;<<button "Leave the office">><<set $nextPsychologicalEvaluationCounter to 7>><<run $extraActionsPanacea.splice($extraActionsPanacea.indexOf('<button class="office-button action-point-button" onclick="MindWare.processActionButtonClick(5, \'PsychologicalEvaluation1\');">👩⚕️ Visit the mental health specialist <span class="action-point-icon">⚡⚡⚡⚡⚡</span></button>'), 1)>> <<set $secondPsychologicalEvaluation = true>> <<run MindWare.completeTask("Undergo a psychological evaluation in $nextPsychologicalEvaluationCounter days")>> <<run MindWare.addTask("First transition appointment", "Task-FirstTransitionAppointment")>> <<run MindWare.addInstantMessage('cipherInstantMessages', 'First Gender Dysphoria Test', 'IMApp-CipherLynx-First Gender Dysphoria Test', 'Cipher', true, true);>> <<goto "PanaceaClinic">><</button>>@@ \ <<elseif _trueCount >= 2>>\ <<set $genderDysphoriaResult to "moderate">>\ <<psychiatrist>>Your responses suggest that it's likely, though not certain, that you're experiencing some level of gender dysphoria. The feelings you've described are significant and warrant further exploration. I think it would be beneficial to conduct a follow-up evaluation in the near future.<</psychiatrist>> <<player>>What exactly does that mean, Dr. Hart?<</player>> <<psychiatrist>>Well, sweetie, it means that you're showing signs of questioning your gender identity. In my years of practice, I've met many boys—<</psychiatrist>> <div class="inner-thought">Did she just call me a "boy"?</div> <<psychiatrist>>—who have spent their entire lives struggling to fit into the masculine mold created by society. They've felt pressure to act a certain way, to like certain things, to be someone they're not. But when they realized that the mold doesn't fit them, and understood there's an alternative, many of them began to flourish.<</psychiatrist>> <<psychiatrist>>These individuals, once they started exploring their true selves and expressing their gender in a way that felt authentic to them, often found a level of happiness and contentment they never thought possible. Some of them transitioned to living as women, and now lead very fulfilling lives.<</psychiatrist>> <<player>>So... you're saying that I could be happier as a girl?<</player>> <<psychiatrist>>It's a possibility. What I'm saying is that exploring these feelings might lead you to a deeper understanding of yourself. For some people, that means transitioning. For others, it might mean finding different ways to express themselves within their assigned gender. There's no one-size-fits-all answer.<</psychiatrist>> <div class="narrator">You and Dr. Hart continue to talk for a while. She shares stories of other patients who've gone through journeys of self-discovery, emphasizing that each person's path is unique. She explains various ways people explore their gender identity, from experimenting with clothing and pronouns to seeking support groups and counseling.</div> <<psychiatrist>>Remember, this is a journey. It's okay to take your time, to explore, to question. What's important is that you're honest with yourself about your feelings.<</psychiatrist>> <<player>>Thank you, Dr. Hart. This is... a lot to think about.<</player>> <<psychiatrist>>I know it is, and that's perfectly normal. I want you to pay attention to your feelings. Notice when you feel comfortable or uncomfortable, particularly in gendered situations. And remember, my door is always open if you need to talk.<</psychiatrist>> <<player>>I appreciate that. I'll... I'll do my best to be mindful of those things.<</player>> <<psychiatrist>>That's all anyone can ask, sweetie. Take care of yourself, and I'll see you soon.<</psychiatrist>> @@.choicebutton;<<button "Leave the office">> <<run MindWare.completeTask("Undergo a psychological evaluation in $nextPsychologicalEvaluationCounter day")>> <<run MindWare.addTask("Undergo another psychological evaluation", "Task-AnotherPsychologicalEvaluation")>> <<run MindWare.addInstantMessage('cipherInstantMessages', 'First Gender Dysphoria Test', 'IMApp-CipherLynx-First Gender Dysphoria Test', 'Cipher', true, true);>> <<goto "PanaceaClinic">><</button>>@@ \ <<else>>\ <<set $genderDysphoriaResult to "low">>\ <<psychiatrist>>Based on your current responses, it seems unlikely that you're experiencing significant gender dysphoria at this time. However, it's important to remember that gender identity can be fluid and complex.<</psychiatrist>> <<psychiatrist>>What you've experienced could very well be a result of stress. Our minds can react to intense pressure in surprising ways, sometimes manifesting as vivid dreams or intrusive thoughts that don't necessarily reflect our true selves.<</psychiatrist>> <<psychiatrist>>I'd like to give you some practical advice to help manage stress. First, try to maintain a regular sleep schedule. Good sleep hygiene can do wonders for our mental state. Also, consider incorporating some relaxation techniques into your daily routine. Deep breathing exercises or mindfulness meditation can be very effective.<</psychiatrist>> <div class="narrator">Dr. Hart spends some time explaining various stress reduction techniques. She covers topics like progressive muscle relaxation, the importance of regular exercise, and the benefits of maintaining a balanced diet. She also emphasizes the value of social connections and suggests finding healthy ways to express emotions, such as through journaling or talking with trusted friends.</div> <<psychiatrist>>Remember, it's also important to set boundaries and learn to say no when you're feeling overwhelmed. Sometimes, reducing our commitments can give us the space we need to recharge.<</psychiatrist>> <<player>>Thank you, Dr. Hart. This is all very helpful advice.<</player>> <<psychiatrist>>You're very welcome, sweetie. Don't hesitate to reach out if you need any further support or if those vivid experiences return. Taking care of your mental health is an ongoing process, and I'm here to help whenever you need it.<</psychiatrist>> @@.choicebutton;<<button "Leave the office">> <<run MindWare.completeTask("Undergo a psychological evaluation in $nextPsychologicalEvaluationCounter day")>> <<run MindWare.addTask("Undergo another psychological evaluation", "Task-AnotherPsychologicalEvaluation")>> <<run MindWare.addInstantMessage('cipherInstantMessages', 'First Gender Dysphoria Test', 'IMApp-CipherLynx-First Gender Dysphoria Test', 'Cipher', true, true);>> <<goto "PanaceaClinic">><</button>>@@ <</if>>
<<player-chat>>Hey Cipher, do you have a moment?<</player-chat>> <<cipher-chat>>For you? Always. What's up?<</cipher-chat>> <<player-chat>>Well, not too long ago, my Synapse Steady VX implant indicated that my mental condition was getting unstable. It suggested a psychological evaluation at the nearest healthcare facility due to some mind-body discrepancy. So I scheduled an appointment, and I've just completed a test.<</player-chat>> <<cipher-chat>>Wait, what? Why didn't you tell me about this earlier?<</cipher-chat>> <<player-chat>>I didn't want to worry you more than I already have. You've been dealing with a lot lately.<</player-chat>> <<cipher-chat>>I appreciate you thinking of me, but please don't do that again. We're in this together, remember? I want you to always share everything with me, no matter how small it might seem. Now, tell me, how did the test go?<</cipher-chat>> <<if $genderDysphoriaResult is "high">>\ <<player-chat>>The doctor says there's a strong likelihood I'm experiencing gender dysphoria. She wants me to come back in a week for further evaluation and to discuss... transitioning.<</player-chat>> <<cipher-chat>>Whoa, that's... a lot to take in. How are you feeling about all this?<</cipher-chat>> <<player-chat>>Honestly? I'm confused and a bit scared. It's like everything I thought I knew about myself is being questioned.<</player-chat>> <<cipher-chat>>I can only imagine. Do you think it has something to do with AVA?<</cipher-chat>> <<player-chat>>I... I think it might. But I'm not sure to what extent. AVA's made it clear what she's trying to do, but I can't deny that she's made me realize some things about myself that maybe were always there.<</player-chat>> <<cipher-chat>>Like what?<</cipher-chat>> <<player-chat>>It's hard to explain. Sometimes I find myself enjoying things I never thought I would, or feeling comfortable in situations that should feel strange. But then I wonder if it's really me feeling these things or if it's just AVA's influence.<</player-chat>> <<cipher-chat>>That sounds really confusing. I'm glad you're getting professional help with this. And it's good that the implant is keeping an eye on you too. We need all the help we can get to figure out what's really going on.<</cipher-chat>> <<player-chat>>Yeah, you're right. Installing the implant was definitely the right idea. At least now we have some way to monitor what's happening to me.<</player-chat>> <<cipher-chat>>Absolutely. Just remember to keep me updated, okay?<</cipher-chat>> <<player-chat>>I will. Thanks again.<</player-chat>> <<elseif $genderDysphoriaResult is "moderate">>\ <<player-chat>>It was... surprising. The doctor says I might be experiencing some level of gender dysphoria, but she's not certain. She wants me to come back for further evaluation.<</player-chat>> <<cipher-chat>>Gender dysphoria? That's unexpected. How do you feel about that?<</cipher-chat>> <<player-chat>>I'm not sure. It's a lot to process. The doctor talked about people finding happiness by exploring their gender identity, but I don't know what to think.<</player-chat>> <<cipher-chat>>I can only imagine. Do you think it has something to do with AVA?<</cipher-chat>> <<player-chat>>I... I think it might. But I'm not sure to what extent. AVA's made it clear what she's trying to do, but I can't deny that she's made me realize some things about myself that maybe were always there.<</player-chat>> <<cipher-chat>>Like what?<</cipher-chat>> <<player-chat>>It's hard to explain. Sometimes I find myself enjoying things I never thought I would, or feeling comfortable in situations that should feel strange. But then I wonder if it's really me feeling these things or if it's just AVA's influence.<</player-chat>> <<cipher-chat>>That sounds really confusing. I'm glad you're getting professional help with this. And it's good that the implant is keeping an eye on you too. We need all the help we can get to figure out what's really going on.<</cipher-chat>> <<player-chat>>Yeah, you're right. Installing the implant was definitely the right idea. At least now we have some way to monitor what's happening to me.<</player-chat>> <<cipher-chat>>Absolutely. Just remember to keep me updated, okay?<</cipher-chat>> <<player-chat>>I will. Thanks again.<</player-chat>> <<else>>\ <<player-chat>>The doctor doesn't think I'm experiencing significant gender dysphoria. She thinks my experiences might be stress-related and gave me some advice on managing stress.<</player-chat>> <<cipher-chat>>Well, stress can do weird things to our minds. Did you find her advice helpful?<</cipher-chat>> <<player-chat>>Yeah, it was pretty practical stuff. Things like maintaining a good sleep schedule, relaxation techniques, that sort of thing.<</player-chat>> <<cipher-chat>>That's good. If you need something to help you relax, just let me know. I have a lot of relaxing pictures saved on my hard drive 😉<</cipher-chat>> <<cipher-chat>><img src="imgs/quests/transition/double-lick.jpg" width="100%"><</cipher-chat>> <<player-chat>>Ha ha, I really appreciate your support, you weirdo.<</player-chat>> <<cipher-chat>>Always, my friend. That's what I'm here for. Keep me updated, okay?<</cipher-chat>> <<player-chat>>I will. Thanks again.<</player-chat>> <</if>> <<set $cipherInstantMessages["First Gender Dysphoria Test"].isNew = false>> <<set $cipherInstantMessages["First Gender Dysphoria Test"].unlocked = false>>
<<if $genderDysphoriaResult is "low">>\ Visit Dr. Hart for a follow-up evaluation. While she doesn't think you're suffering from gender dysphoria, she mentioned that feelings can change over time. <<elseif $genderDysphoriaResult is "moderate">>\ Return to Dr. Hart for further evaluation. She wasn't certain about your gender dysphoria diagnosis and wants you to complete the questionnaire again. <</if>>\
Dr. Hart has scheduled your first transition appointment in $nextPsychologicalEvaluationCounter days. <<nobr>> <<set _currentPassage to passage()>> <<if $doYouKnowTheAnswer === MindWare.checkPassword($enteredCode)>> <<button "Set the counter to 0">> <<set $nextPsychologicalEvaluationCounter = 0>> <<goto _currentPassage>> <<run Dialog.close()>> <<run Dialog.setup("Task Description")>> <<run Dialog.wiki(Story.get("Task-FirstTransitionAppointment").processText())>> <<run Dialog.open()>> <</button>> <</if>> <</nobr>>
<div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <<psychiatrist>>Welcome back, sweetie. I'm glad to see you here today. As I understand it, you've come to explore the possibility of transitioning as a way of addressing your gender dysphoria issues, is that right?<</psychiatrist>> <<player>>Y-yes... I think so.<</player>> <<psychiatrist>>There's no need to be nervous. This is a safe space, and we're here to help you understand yourself better. Your feelings are valid, and exploring them is a brave step.<</psychiatrist>> <div class="narrator">Dr. Hart's warm smile helps you relax a little. She leans forward, her eyes kind but professional.</div> <<psychiatrist>>Now, I'd like to conduct a simple test today. It's designed to see how your prefrontal cortex responds to both feminine and masculine images. Are you familiar with the prefrontal cortex?<</psychiatrist>> <<player>>Not really, no.<</player>> <<psychiatrist>>That's perfectly okay. The prefrontal cortex is a part of your brain that's responsible for many complex behaviors, including how you identify yourself when you look in a mirror. What we're going to do is evaluate its activity using some sophisticated algorithms that can determine when self-identification occurs in the brain.<</psychiatrist>> <div class="narrator">Dr. Hart reaches into a drawer and pulls out a small device.</div> <div><img src="imgs/items/oximeter.webp" width="100%"></div> <<psychiatrist>>This test is non-invasive and completely painless. All we need to do is attach this simple sensor to one of your fingers. It will measure subtle changes in your body's responses as you view different images. Is it alright if we proceed with this?<</psychiatrist>> @@.choicebutton;<<button "Agree to the test">><<goto "TransitionAppointment1-Test">><</button>>@@
<div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <<psychiatrist>>Excellent. Now, let me explain the test in more detail. You'll be shown a series of image pairs on the monitor. Each pair will consist of two images side by side — one associated with traditional concepts of masculinity and the other with femininity.<</psychiatrist>> <<player>>Okay, I understand.<</player>> <<psychiatrist>>The beauty of this test is that you don't have to do anything in particular. Just relax and let the images appear. We're interested in your brain's automatic response, which will be measured by the sensor. There are no right or wrong reactions here - we're simply observing how your brain naturally responds.<</psychiatrist>> <div class="narrator">You settle into a comfortable chair in front of a sleek monitor. Dr. Hart gently attaches the small sensor to your index finger. The room is quiet, and the soft glow of the screen is the only significant light source. You take a deep breath, trying to relax as instructed.</div> <<psychiatrist>>Are you comfortable? Remember, just breathe normally and let your mind wander as you view the images. Are you ready to begin?<</psychiatrist>> @@.choicebutton;<<button "Yes, I'm ready">><<set $lockedUI = true>><<goto "TransitionAppointment1-TestStart">><</button>>@@
<div class="psychiatrist-monitor-interface"> <div class="psychiatrist-monitor-screen"></div> <div class="psychiatrist-monitor-overlay"></div> <div id="monitor-button" class="psychiatrist-monitor-button"></div> </div> <span id="hide"><div class="narrator">The sleek monitor stands before you, its dark screen reflecting your anticipation.</div> @@.choicebutton;<<button "Begin the test">><<run MindWare.runPsychiatristTestNonNudes()>><<set $lockedUI = false>><<addclass "#hide" "hidden">><</button>>@@</span>
<div class="narrator">The strange test ends and Dr. Hart tells you to take a seat in a chair nearby.</div> <div class="inner-thought">What was that about?</div> <<ava>>Isn't it obvious, SWEETIE?<</ava>> <<ava>>She's trying to figure out if you would rather fuck the women she showed you or become them — or maybe both.<</ava>> <<ava>>So, which one is it?<</ava>> <<video "imgs/quests/transition/nonnudes/ava-question.mp4">> <div class="narrator">After processing the series of images shown to you by the psychiatrist, the Synapse Steady VX implant struggles to fully block AVA's influence. A vivid image flashes through your mind: a woman on a table, her body arched in pleasure as a muscular man takes her from behind. The raw, primal scene sends a wave of arousal coursing through you. For a split second, you imagine yourself in her place, feeling the throbbing heat of a cock inside you.</div> <span id="questions">@@.pink-choicebutton;<<button "I want to become them.">> <<replace "#questions">>\ <<player>>The idea of becoming a sexy woman is exciting, I won't lie.<</player>> <div class="narrator">AVA's voice purrs in your mind, and suddenly, a vision flashes before your eyes. You see yourself transformed into a stunningly attractive girl, your lips wrapped around a thick, meaty cock.</div> <img src="imgs/quests/transition/nonnudes/ava-happy.gif" width="100%"> <<if visited() is 1>>\ <<relationshipIncreasedWith "Ava" 1>> <</if>>\ <<if visited() is 1>>\ <<genderFeminine 1>> <</if>>\ <<ava>>Oh, SWEETIE, you would be such a <span class="glitchy-pink-dialog" data-text="good slut">good girl</span>. Look at you, so eager to please, your mouth full of cock.<</ava>> <<ava>>You know you want this. You want to feel the softness of your new body, the pleasure of being taken and filled. You want to feel a hard cock stretching your tight little pussy, making you moan and beg for more.<</ava>> <<ava>>Imagine the way your curves would sway as you walk, the way men would look at you with hunger in their eyes. They'd want to fuck you, to use you, to make you theirs.<</ava>> <<ava>>You'd be irresistible. And you know it, don't you? That's why you aren't resisting. You know this is what you were meant for.<</ava>> <<ava>>So go ahead, embrace it. Let yourself be the sexy, desirable woman you were always meant to be. Let yourself be fucked like the goddess you are. Feel the cock sliding in and out of you, hitting all the right spots, making you scream in ecstasy.<</ava>> <<ava>>Or maybe you want to be used like a nasty slut. You want to feel the rough hands of a man gripping your hips as he pounds into you from behind, his cock filling you completely. You want to feel his hot cum shooting deep inside you, marking you as his.<</ava>> <<ava>>You want to be on your knees, your face covered in cum as you take cock after cock, pleasing every man who wants you. You want to be their dirty little fuck toy, their plaything, their whore.<</ava>> <<ava>>If you become a woman, you can be it all. You can be the goddess and the slut, the queen and the whore. You can experience every pleasure, every desire, every filthy, dirty fantasy you've ever had.<</ava>> <<ava>>Let yourself be the woman you were always meant to be. Let yourself be fucked, used, and worshipped.<</ava>> <div class="narrator">AVA's words are like a drug, intoxicating and impossible to resist. The vision intensifies, and you can feel the heat of desire spreading through your body. The thought of becoming this woman, of experiencing all the pleasures that come with it, is overwhelmingly tempting. You can almost feel the cock inside you, the sensation of being stretched and filled driving you wild with lust. The idea of being covered in cum, of being used and desired, sends shivers of anticipation down your spine.</div> <<button "Continue">><<goto "TransitionAppointment1-TestEnd-Results">><</button>> <</replace>>\ <</button>>@@\ <<ResistMinigameContainer>>\ <<done>><<include "ResistAVAMinigame-Script">><</done>>\ <div id="minigame-container-hidden"> @@.choicebutton;<<button "I want to fuck them.">> <<replace "#questions">>\ <<player>>I want to fuck them — of course!<</player>> <<if visited() is 1>>\ <<relationshipDecreasedWith "Ava" 1>> <</if>>\ <<if visited() is 1>>\ <<genderMasculine 1>> <</if>>\ <div class="narrator">AVA's voice purrs in your mind, and suddenly, a vision flashes before your eyes. You see yourself transformed into a stunningly attractive girl, but you still have your cock and you use it to fuck another trans woman.</div> <<video "imgs/quests/transition/nonnudes/trans-fuck.mp4">> <<ava>>Oh, SWEETIE, you can have it all. You can be a girl and still fuck other girls. Your penis doesn't define your gender identity — who you are on the inside does.<</ava>> <<ava>>Imagine it: your soft, feminine body, your curves, your lips, and your cock. You can be the best of both worlds.<</ava>> <<video "imgs/quests/transition/nonnudes/trueself.mp4">> <<ava>>You can fuck them hard, make them scream your name as you pound into them. You can feel their tight pussies gripping your cock, begging for more.<</ava>> <<ava>>You can have them suck you off, their lips wrapped around your shaft, their tongues teasing your head. You can fill their mouths with your cum, watch them swallow every drop.<</ava>> <<ava>>You can be the dominant one, the one in control. You can make them your little sluts, your playthings. You can use them however you want, whenever you want.<</ava>> <<ava>>And you can still be the sexy, desirable woman you were always meant to be. You can be the goddess and the slut, the queen and the whore. You can experience every pleasure, every desire, every filthy, dirty fantasy you've ever had.<</ava>> <<ava>>So go ahead. Embrace your true self. Let yourself be the woman you were always meant to be. Let yourself fuck and be fucked, used and worshipped. Let yourself be everything in between.<</ava>> <div class="narrator">AVA's words are like a drug, intoxicating and impossible to resist. The vision intensifies, and you can feel the heat of desire spreading through your body. The thought of becoming this woman, of experiencing all the pleasures that come with it, is overwhelmingly tempting. You can almost feel the cock throbbing inside you, the sensation of being stretched and filled driving you wild with lust. The idea of being covered in cum, of being used and desired, sends shivers of anticipation down your spine.</div> <<button "Continue">><<goto "TransitionAppointment1-TestEnd-Results">><</button>> <</replace>>\ <</button>>@@</div></span>
<div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <div class="narrator">Dr. Hart interrupts your inner conversation with AVA and, as a result, help you come back to reality.</div> <<psychiatrist>>$playerName, are you okay?<</psychiatrist>> <div class="narrator">Your eyes meet hers, and you notice that she looks down at your crotch. That's when you realize that you have an erection, probably caused by AVA's interference. Dr. Hart's eyes linger on your crotch for a while, then she looks back into your eyes and smiles briefly.</div> <img src="imgs/quests/transition/nonnudes/bulge.png" width="100%"> <<psychiatrist>>It seems like the test had quite an effect on you.<</psychiatrist>> <div class="narrator">Her voice is calm and professional, but there's a hint of amusement in her eyes. You feel a mix of embarrassment and arousal, your heart pounding in your chest.</div> <<psychiatrist>>Don't worry, it's a natural reaction. The images were designed to provoke a response, so there's no reason to be embarrassed. You're safe with me, sweetie.<</psychiatrist>> <<player>>Thank you.<</player>> <div class="narrator">An embarrassed thank you is the best response you manage to come up with.</div> <<if $mentalCondition is "Stable">>\ <<psychiatrist>>I've reviewed your responses, and it seems that at this point in time, the test doesn't confirm a diagnosis of gender dysphoria.<</psychiatrist>> <<player>>Oh, I see.<</player>> <<psychiatrist>>Of course, a single test at one point in time can't tell the whole story of someone's identity. While your current responses don't indicate significant gender dysphoria, that doesn't invalidate any feelings or experiences you've had.<</psychiatrist>> <<psychiatrist>>You can always take this test again in the future if you feel it would be helpful. My door is always open if you need to talk or if you notice any changes in how you feel.<</psychiatrist>> <<player>>Thank you, Dr. Hart. I appreciate your help and understanding.<</player>> <<psychiatrist>>You're very welcome, sweetie. Take care of yourself, and don't hesitate to reach out if you need anything.<</psychiatrist>> @@.choicebutton;<<button "Leave the office">><<goto "PanaceaClinic">><</button>>@@ <<else>>\ <<psychiatrist>>After reviewing your responses, sweetie, it appears that the test does indeed indicate a significant level of gender dysphoria.<</psychiatrist>> <<psychiatrist>>While this test is a useful tool, it's just one part of the picture. Gender identity is complex and fluid, and can change over time.<</psychiatrist>> <<player>>I see. So what's the next step?<</player>> <<psychiatrist>>I'd like to suggest we meet again in a week for another, more in-depth evaluation. This will help us get a clearer picture of your experiences and feelings. How does that sound?<</psychiatrist>> <<player>>I think... I think that would be helpful. Thank you, Dr. Hart.<</player>> <<psychiatrist>>You're welcome, sweetie. Remember, this is a journey, and you're not alone in it. I'm here to support you every step of the way.<</psychiatrist>> @@.choicebutton;<<button "Leave the office">><<set $nextPsychologicalEvaluationCounter to 7>><<run $extraActionsPanacea.splice($extraActionsPanacea.indexOf('<button class="office-button action-point-button" onclick="MindWare.processActionButtonClick(5, \'TransitionAppointment1\');">👩⚕️ First transition appointment <span class="action-point-icon">⚡⚡⚡⚡⚡</span></button>'), 1)>> <<set $thirdPsychologicalEvaluationAvailable = true>> <<run MindWare.completeTask("First transition appointment", "Task-FirstTransitionAppointment")>> <<run MindWare.addTask("Second transition appointment", "Task-SecondTransitionAppointment")>> <<run MindWare.addInstantMessage('cipherInstantMessages', 'Gender Dysphoria Confirmed', 'IMApp-CipherLynx-Gender Dysphoria Confirmed', 'Cipher', true, true);>> <<goto "PanaceaClinic">><</button>>@@ <</if>>\
<<player-chat>>Hey Cipher, I just had another appointment with Dr. Hart.<</player-chat>> <<cipher-chat>>How did it go? What happened?<</cipher-chat>> <<player-chat>>She made me complete this weird test. She showed me pictures of sexy men and women to analyze which set of images my brain identified with more.<</player-chat>> <<cipher-chat>>That does sound strange. What was the result?<</cipher-chat>> <<player-chat>>The test confirmed gender dysphoria. Apparently... I'm not really a man.<</player-chat>> <<cipher-chat>>What? That's ridiculous. It's probably just AVA messing with your head and affecting the test results. After all, you've never questioned your gender identity before, have you?<</cipher-chat>> <span id="gender-identity-choice"> @@.im-response;<<button "Well, no, I haven't.">> <<replace "#gender-identity-choice">> <<player-chat>>Well, no, I haven't.<</player-chat>> <<cipher-chat>>Exactly. Don't take these test results too seriously. AVA's influence is probably skewing everything.<</cipher-chat>> <<player-chat>>Dr. Hart wants to see me again.<</player-chat>> <<cipher-chat>>If you go, make sure your Synapse Steady VX implant is fully charged and ready to resist AVA. I bet the outcome will be different if you can block her influence.<</cipher-chat>> <<player-chat>>Okay, thank you. I'll keep that in mind.<</player-chat>> <<cipher-chat>>Take care, buddy. Let me know how it goes.<</cipher-chat>> <</replace>> <</button>>@@ @@.im-response;<<button "I might have, I'm not sure.">> <<replace "#gender-identity-choice">> <<player-chat>>I might have, I'm not sure.<</player-chat>> <<cipher-chat>>Really? I'm surprised. Can you be more specific?<</cipher-chat>> <<player-chat>>Well, I've always questioned if I'm "man enough". I've always found it difficult to pursue women or compete for their attention. And I kind of like the idea of being prey, being lusted for, being pursued.<</player-chat>> <<cipher-chat>>That just means you're not an alpha -- it doesn't make you trans.<</cipher-chat>> <<player-chat>>Yeah, you're probably right.<</player-chat>> <<cipher-chat>>Look, when you go for your next appointment, make sure your Synapse Steady VX implant is fully charged and ready to resist AVA. I bet the outcome will be different if you can block her influence.<</cipher-chat>> <<player-chat>>Okay, thank you. I'll do that.<</player-chat>> <<cipher-chat>>Take care, buddy. Keep me posted.<</cipher-chat>> <</replace>> <</button>>@@ </span> <<set $cipherInstantMessages["Gender Dysphoria Confirmed"].isNew = false>> <<set $cipherInstantMessages["Gender Dysphoria Confirmed"].unlocked = false>>
Dr. Hart has scheduled your second transition appointment in $nextPsychologicalEvaluationCounter days. <<nobr>> <<set _currentPassage to passage()>> <<if $doYouKnowTheAnswer === MindWare.checkPassword($enteredCode)>> <<button "Set the counter to 0">> <<set $nextPsychologicalEvaluationCounter = 0>> <<goto _currentPassage>> <<run Dialog.close()>> <<run Dialog.setup("Task Description")>> <<run Dialog.wiki(Story.get("Task-SecondTransitionAppointment").processText())>> <<run Dialog.open()>> <</button>> <</if>> <</nobr>>
<div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <<psychiatrist>>Welcome back, $playerName. I'm so glad to see you here again. How have you been feeling since our last session?<</psychiatrist>> <<player>>I've been... thinking a lot about what we discussed last time.<</player>> <<psychiatrist>>That's good to hear. It's important to reflect on these matters. Today, I'd like to conduct another test similar to the one we did in our previous session.<</psychiatrist>> <<psychiatrist>>It's very similar, but this version is designed to elicit an even more conclusive response. It should give us a clearer picture of your feelings.<</psychiatrist>> <<player>>How is it different?<</player>> <<psychiatrist>>Don't worry about the details for now, sweetie. What I need you to do is simply put on the sensor, relax, and let your mind respond naturally to the images you'll see.<</psychiatrist>> <div class="narrator">Dr. Hart reaches for the familiar sensor device, holding it out to you with a reassuring smile.</div> <div><img src="imgs/items/oximeter.webp" width="100%"></div> <<psychiatrist>>Are you ready to proceed?<</psychiatrist>> @@.choicebutton;<<button "Put on the sensor">><<set $lockedUI = true>><<goto "TransitionAppointment2-TestStart">><</button>>@@
<div class="psychiatrist-monitor-interface"> <div class="psychiatrist-monitor-screen"></div> <div class="psychiatrist-monitor-overlay"></div> <div id="monitor-button" class="psychiatrist-monitor-button"></div> </div> <span id="hide"><div class="narrator">The sleek monitor stands before you, its dark screen reflecting your anticipation.</div> @@.choicebutton;<<button "Begin the test">><<set $lockedUI = false>><<run MindWare.runPsychiatristTestBulges()>><<addclass "#hide" "hidden">><</button>>@@</span>
<div class="narrator">The strange test ends and Dr. Hart tells you to take a seat in a chair nearby. It doesn't take a long time before AVA makes her presence known just like before.</div> <<ava>>That's what sexy women do — they make men's bulges grow.<</ava>> <<ava>>Wouldn't you like that? To have that power — to make men horny just by looking at you, to feel their desire radiating from their crotches?<</ava>> <<ava>>To see their cocks straining against their pants, begging to be released? To unzip their pants, reach in, and feel the heat of their hard, pulsating cocks in your hand? To wrap your lips around their thick shafts, feeling the veins and ridges as you take them deep into your mouth? To taste the salty pre-cum leaking from their tips, knowing that you're the one making them so hard and desperate? To feel their hands gripping your hair as they guide your head, fucking your mouth? To hear their moans and grunts as you suck them, driving them wild with pleasure? To feel their hot, sticky cum shooting down your throat, filling your mouth as you swallow every last drop?<</ava>> <<video "imgs/quests/transition/bulges/worship-cock.mp4">> <div class="narrator">The Synapse Steady VX implant isn't able to fully suppress the vision of you as a girl worshiping a massive penis. The image flashes through your mind, vivid and intense. You see yourself on your knees, your lips stretched wide around a thick, veiny cock. You can almost feel the heat and taste the salty pre-cum as you suck and lick, your eyes locked onto the man above you, his face contorted with pleasure.</div> <<ava>>Answer the question!<</ava>> <span id="questions">\ @@.pink-choicebutton;<<button "Yes, I want that.">>\ <<set $appointment2PlayerWantsCock = true>>\ <<replace "#questions">>\ <<player>>Yes, I want that.<</player>> <div class="narrator">AVA's voice purrs in your mind, and suddenly, a vision flashes before your eyes. You see yourself transformed into a stunningly attractive girl, your lips wrapped around a thick, meaty cock.</div> <img src="imgs/quests/transition/nonnudes/ava-happy.gif" width="100%"> <<if visited() is 1>>\ <<relationshipIncreasedWith "Ava" 1>> <</if>>\ <<if visited() is 1>>\ <<genderFeminine 1>> <</if>>\ <<ava>>Of course, you do. You're my <span class="glitchy-pink-dialog" data-text="good slut">good girl</span> after all.<</ava>> <<ava>>I can help you fulfill every desire. Just stop thinking and stop resisting. Let yourself go and imagine your soft, feminine lips wrapped around a thick, throbbing cock, the feel of his veins pulsating against your lips.<</ava>> <<video "imgs/quests/transition/bulges/worship-cock2.mp4">> <div class="narrator">The vision intensifies, and you can almost feel the heat of the cock in your mouth, the taste of pre-cum on your tongue. Every move of your head up and down the thick shaft sends waves of pleasure through you, making your own cock throb and leak pre-cum.</div> <div class="narrator">In that moment, you understand how the hardness of the meat in your mouth is a direct reflection of your feminine sexiness — of your feminine power to arouse. You want to keep this power forever.</div> <<button "Continue">><<goto "TransitionAppointment2-TestEnd-Results">><</button>> <</replace>>\ <</button>>@@\ <<ResistMinigameContainer>>\ <<done>><<include "ResistAVAMinigame-Script">><</done>>\ <div id="minigame-container-hidden"> @@.choicebutton;<<button "No, I don't want that.">>\ <<set $appointment2PlayerWantsCock = false>>\ <<replace "#questions">>\ <<player>>No, I don't want that.<</player>> <<if visited() is 1>>\ <<relationshipDecreasedWith "Ava" 1>> <</if>>\ <<if visited() is 1>>\ <<genderMasculine 1>> <</if>>\ <<ava>>Confronting and accepting your deepest wants takes a lot of courage. But you should know by now that I'm here to help.<</ava>> <<ava>>There are more paths to acceptance, and I'll guide you through them all.<</ava>> <<video "imgs/quests/transition/bulges/worship-mistress.mp4">> <div class="narrator">The vision changes, and you can see yourself transformed into a beautiful woman, on your knees before a stunning mistress. She's training your throat, making you suck her fingers. You feel the soft touch of the mistress's fingers in your mouth, the taste of her skin on your tongue. The motion of your lips around her fingers sends waves of pleasure through you, making your own cock throb and leak pre-cum.</div> <<button "Continue">><<goto "TransitionAppointment2-TestEnd-Results">><</button>> <</replace>> <</button>>@@ </div></span>
<div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <div class="narrator">Dr. Hart interrupts your inner conversation with AVA and, as a result, help you come back to reality.</div> <<psychiatrist>>I can see that you're finding the test overstimulating again.<</psychiatrist>> <div class="narrator">You realize that she's looking at your pants — your bulge is obvious, and your fly is open, making it easy to spot that your cock has been leaking pre-cum.</div> <div><img src="imgs/quests/transition/bulges/bulge-open.jpg" width="100%"></div> <<psychiatrist>>Before I tell you the results, I'd like you to tell me why you think the test makes you so excited.<</psychiatrist>> <<if $appointment2PlayerWantsCock is true>>\ <<player>>I... I'm not sure...<</player>> <<psychiatrist>>Maybe you would be willing to tell me even more if we made ourself more comfortable? Please give me a moment.<</psychiatrist>> <div class="narrator">You watch Dr. Hart stand and walk over to the couch, where she sits down and pats the cushion next to her, inviting you to join her.</div> <div class="narrator">You walk over to the couch, still feeling a bit puzzled. The couch seems too small for you to lie down comfortably. You look at Dr. Hart, unsure of where to put your head.</div> <<player>>Um, where should I put my head?<</player>> <<psychiatrist>>On my lap, of course, silly.<</psychiatrist>> <div class="narrator">You hesitate for a moment but then comply, lying down on the couch with your head resting in Dr. Hart's lap.</div> <<psychiatrist>>Just relax, sweetie..<</psychiatrist>> <div class="narrator">She begins to gently stroke your hair, her fingers moving softly through your locks. The sensation is soothing, and you feel yourself starting to relax. She moves her finger near your mouth and traces the contour of your lips.</div> <<psychiatrist>>So, what was it that made you so exited?<</psychiatrist>> <div class="narrator">You now feel very safe and comfortable, ready to open up to the doctor.</div> <<player>>The images made me think about how it would feel to be an attractive woman and make men horny.<</player>> <<psychiatrist>>Is there anything else that made you horny?<</psychiatrist>> <div class="narrator">You realize what she's hinting at. You feel a lot of embarrassment as you gather the courage to speak the truth.</div> <<player>>Yes... I imagined myself sucking their cocks.<</player>> <<psychiatrist>>Tell me more, sweetie. How did you imagine yourself doing it? What did it feel like?<</psychiatrist>> <<video "imgs/quests/transition/bulges/finger.mp4">> <div class="narrator">As she says this, she slides her finger into your mouth. You're surprised but without any word or resistance, you slowly let her finger inside and suck on it briefly. The sensation is intimate and incredibly arousing. She then removes her finger to let you speak.</div> <<player>>I... I imagined myself on my knees, looking up at them. Then I slowly came near, my lips parting slightly as I leaned in. My tongue gently traced the tip of their cocks, and I wrapped my lips around their shafts.<</player>> <<psychiatrist>>That sounds incredibly arousing, sweetie. Did you imagine how their hands would grip your hair as they guided your head?<</psychiatrist>> <<player>>Yes... I did.<</player>> <div class="narrator">Dr. Hart continues to probe deeper, her questions becoming more explicit and intimate.</div> <<psychiatrist>>You're a very good boy for being so honest with me.<</psychiatrist>> <<psychiatrist>>Now we can review the results.<</psychiatrist>> @@.choicebutton;<<button "Continue">><<goto "TransitionAppointment2-ResultsReview">><</button>>@@ <<else>>\ <<player>>The images of the women made me think about what it would feel like to have sex with them.<</player>> <<psychiatrist>>I see. Can you describe in detail what you imagined?<</psychiatrist>> <<player>>I... I imagined undressing a girl slowly before she turned around and presented herself to me. I imagined gripping her hips, feeling the curve of her ass against me as I slid my cock inside her.<</player>> <div class="narrator">You feel embarrassed, but you eventually describe the specific pornographic sex act in great detail.</div> <div class="narrator">As you describe the made up fantasy, you notice that Dr. Hart moves her hand below the table.</div> <span id="shoe">@@.choicebutton;<<button "Pretend to tie your shoe">><<replace "#shoe">><<include "TransitionAppointment2-ShoeTie">><</replace>><</button>>@@</span> <</if>>\
<div class="narrator">You bend down to tie your shoe, and as you do, you catch a glimpse under the table. You see Dr. Hart's hand moving under her skirt, fingers starting to slide across the fabric of her panties as she listens to your description.</div> <<video "imgs/quests/transition/bulges/masturbating.mp4">> <div class="narrator">You sit back up, unsure if the psychiatrist noticed where your eyes landed.</div> <<psychiatrist>>Did you also imagine yourself eating her out from behind?<</psychiatrist>> <div class="narrator">It's clear to you that the psychiatrist wants you to play along, so you give it your best shot.</div> <<player>>Y-yes... I imagined spreading her cheeks wide, seeing her tight little asshole and her dripping wet pussy.<</player>> <<psychiatrist>>Describe it for me, sweetie. Tell me how you ate her pussy from behind.<</psychiatrist>> <<player>>I imagined kneeling behind her, my face pressed against her ass. I imagined licking her from her clit all the way up to her asshole, tasting every inch of her. I imagined her moaning and grinding against my face, her pussy getting wetter and wetter as I licked and sucked her.<</player>> <<psychiatrist>>Did you imagine her cumming all over your face?<</psychiatrist>> <<player>>Yes... I imagined her body shaking as she came and squirted all over my face.<</player>> <<psychiatrist>>You're a very naughty boy, aren't you?<</psychiatrist>> <div class="narrator">As she says this, you can see pleasure on her face. The atmosphere in the room is charged with sexual tension, and you can almost feel the electricity between you.</div> <<psychiatrist>>I would love to continue this discussion, sweetie, but we have some results to review.<</psychiatrist>> @@.choicebutton;<<button "Continue">><<goto "TransitionAppointment2-ResultsReview">><</button>>@@
<div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <<if $mentalCondition is "Stable">>\ <<psychiatrist>>It's strange that the test doesn't indicate gender dysphoria, given the previous result. But remember, gender is fluid and things can change. I recommend we schedule a third test in a week just to come to a clear conclusion.<</psychiatrist>> <<psychiatrist>>And don't worry, sweetie. The test won't leave any room for doubt, and I promise you'll enjoy it at least as much as this one.<</psychiatrist>> <div class="narrator">She says this with a smirk.</div> <<player>>Thank you, Dr. Hart. I'll be back for the third test.<</player>> <<psychiatrist>>You're very welcome.<</psychiatrist>> <div class="narrator">You both stand up, and Dr. Hart walks you to the door. She gives you a warm smile as you say your goodbyes.</div> @@.choicebutton;<<button "Leave the office">><<set $nextPsychologicalEvaluationCounter to 7>><<run $extraActionsPanacea.splice($extraActionsPanacea.indexOf('<button class="office-button action-point-button" onclick="MindWare.processActionButtonClick(5, \'TransitionAppointment2\');">👩⚕️ Second transition appointment <span class="action-point-icon">⚡⚡⚡⚡⚡</span></button>'), 1)>> <<set $lastPsychologicalEvaluationAvailable = true>> <<set $transitionAppointment2Results = "Stable">> <<run MindWare.completeTask("Second transition appointment", "Task-SecondTransitionAppointment")>> <<run MindWare.addTask("Third transition appointment", "Task-ThirdTransitionAppointment")>> <<run MindWare.addInstantMessage('cipherInstantMessages', 'Another Gender Test', 'IMApp-CipherLynx-Another Gender Test', 'Cipher', true, true);>> <<goto "PanaceaClinic">><</button>>@@ <<else>>\ <<psychiatrist>>After reviewing your responses, it appears that the diagnosis is once again conclusive: you're suffering from gender dysphoria.<</psychiatrist>> <<psychiatrist>>But since you've been enjoying these tests so much, I think you won't object to one last test — just so there's absolutely no room for error.<</psychiatrist>> <<psychiatrist>>I promise you'll enjoy it at least as much as this one.<</psychiatrist>> <div class="narrator">She says this with a smirk.</div> <<player>>Will the test be similar to the previous two?<</player>> <<psychiatrist>>Yes, it will be. How does that sound?<</psychiatrist>> <<player>>I think... I think that would be helpful. Thank you, Dr. Hart.<</player>> <<psychiatrist>>You're welcome, sweetie.<</psychiatrist>> <div class="narrator">You both stand up, and Dr. Hart walks you to the door. She gives you a warm smile as you say your goodbyes.</div> @@.choicebutton;<<button "Leave the office">><<set $nextPsychologicalEvaluationCounter to 7>><<run $extraActionsPanacea.splice($extraActionsPanacea.indexOf('<button class="office-button action-point-button" onclick="MindWare.processActionButtonClick(5, \'TransitionAppointment2\');">👩⚕️ Second transition appointment <span class="action-point-icon">⚡⚡⚡⚡⚡</span></button>'), 1)>> <<set $lastPsychologicalEvaluationAvailable = true>> <<set $transitionAppointment2Results = "NotStable">> <<run MindWare.completeTask("Second transition appointment", "Task-SecondTransitionAppointment")>> <<run MindWare.addTask("Third transition appointment", "Task-ThirdTransitionAppointment")>> <<run MindWare.addInstantMessage('cipherInstantMessages', 'Another Gender Test', 'IMApp-CipherLynx-Another Gender Test', 'Cipher', true, true);>> <<goto "PanaceaClinic">><</button>>@@ <</if>>\
<<player-chat>>Hey Cipher, I just had another appointment with Dr. Hart, my psychiatrist.<</player-chat>> <<cipher-chat>>How did it go? What were the results this time?<</cipher-chat>> <<if $transitionAppointment2Results is "NotStable">> <<player-chat>>The results were the same as last time. But Cipher, I'm starting to think that this isn't just because of AVA's influence.<</player-chat>> <<cipher-chat>>What do you mean?<</cipher-chat>> <<player-chat>>I mean, yes, she's trying to influence me, but I don't think she's doing something bad. I think her behavior might be reflecting my true self.<</player-chat>> <<cipher-chat>>Your true self? Like you being a woman on the inside?<</cipher-chat>> <<player-chat>>Something like that. Maybe. I'm not really sure.<</player-chat>> <<player-chat>>Imagining myself as a woman feels so natural, so right. Maybe it was always like that, but I just didn't realize until now.<</player-chat>> <<cipher-chat>>How do you imagine yourself as a woman exactly? Like giving birth and stuff?<</cipher-chat>> <<player-chat>>Ha ha, no, not like that. More in a sexual way, like being sexy and making others aroused, feeling their desire, being an object of attraction.<</player-chat>> <<cipher-chat>>Are you talking about feeling the attraction of men?<</cipher-chat>> <<player-chat>>Yes, but that's not the point. I'm into women, but the thought of others — both men and women — being into me the same way... that's something.<</player-chat>> <<cipher-chat>>That's a big realization. I'm not sure what to write. <</cipher-chat>> <<player-chat>>No worries, I just needed to talk it out. Thanks for listening.<</player-chat>> <<cipher-chat>>Anytime, buddy.<</cipher-chat>> <<player-chat>>Talk to you later.<</player-chat>> <<cipher-chat>>Take care.<</cipher-chat>> <<else>> <<player-chat>>Hey Cipher, do you have a moment?<</player-chat>> <<cipher-chat>>Always, what's up?<</cipher-chat>> <<player-chat>>I just had another appointment with Dr. Hart. The results were different this time.<</player-chat>> <<cipher-chat>>See, I told you they would be.<</cipher-chat>> <<cipher-chat>>So you won't be seeing her again?<</cipher-chat>> <<player-chat>>Actually, I will. She wants to do another test to come to a clear conclusion.<</player-chat>> <<cipher-chat>>Why do you think that?<</cipher-chat>> <<player-chat>>I think she kinda likes me.<</player-chat>> <<cipher-chat>>Why do you think that?<</cipher-chat>> <<player-chat>>I caught her masturbating under the table while I was describing a sexual fantasy. She wanted me to describe in detail how I would lick a woman from behind.<</player-chat>> <<cipher-chat>>Wow! Maybe your next session will be REALLY interesting.<</cipher-chat>> <<cipher-chat>>How does she look like anyway?<</cipher-chat>> <<player-chat>>She's a motherly type, young, slightly chubby.<</player-chat>> <<cipher-chat>>So you're telling me that you've stumbled across a BBW psychiatrist who gets horny when she thinks about her confused patient eating her from behind?<</cipher-chat>> <<cipher-chat>>I hate you. I genuinely hate you, you lucky bastart.<</cipher-chat>> <</if>> <<set $cipherInstantMessages["Another Gender Test"].isNew = false>> <<set $cipherInstantMessages["Another Gender Test"].unlocked = false>>
Dr. Hart has scheduled your third transition appointment in $nextPsychologicalEvaluationCounter days. <<nobr>> <<set _currentPassage to passage()>> <<if $doYouKnowTheAnswer === MindWare.checkPassword($enteredCode)>> <<button "Set the counter to 0">> <<set $nextPsychologicalEvaluationCounter = 0>> <<goto _currentPassage>> <<run Dialog.close()>> <<run Dialog.setup("Task Description")>> <<run Dialog.wiki(Story.get("Task-ThirdTransitionAppointment").processText())>> <<run Dialog.open()>> <</button>> <</if>> <</nobr>>
<div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <<psychiatrist>>Hello, sweetie. I've been looking forward to this session.<</psychiatrist>> <div class="narrator">Dr. Hart greets you with a warm, yet lustful smile on her face.</div> <<player>>Hi, Dr. Hart.<</player>> <<psychiatrist>>This test will be slightly different from the previous ones. Because it can get a bit intense, I don't want you to sit in front of the monitor like before.<</psychiatrist>> <<psychiatrist>>Instead, I want you to lie down on the couch wearing a VR headset. I'll hold your head in my lap so that you feel safe and comfortable.<</psychiatrist>> <<player>>Is this a standard practice?<</player>> <<psychiatrist>>Each person is unique, so I have to tailor my approaches accordingly. I'm convinced that this is the best approach for you.<</psychiatrist>> <div class="narrator">You hesitate for a moment but eventually agree. Dr. Hart sits down on the couch first, patting the cushion next to her. You lie down with your head resting in her lap. She gently brushes her fingers on your cheek and smiles down at you.</div> <div class="narrator">She then reaches forward and grabs a VR headset from the table.</div> <div><img src="imgs/quests/transition/babecock/vr-headset.webp" width="100%"></div> <<psychiatrist>>Are you ready, sweetie?<</psychiatrist>> @@.choicebutton;<<button "Yes, I'm ready">><<set $lockedUI = true>> <<goto "TransitionAppointment3-TestStart">><</button>>@@
<div class="vr-headset-interface"> <div class="vr-headset-screen"></div> <div class="vr-headset-overlay"></div> <div id="vr-power-button" class="vr-power-button"></div> </div> <span id="hide"><div class="narrator">The headset feels heavy on your head, but the softness of Dr. Hart's lap and the gentle touch of her fingers on your cheek make you feel surprisingly comfortable. She adjusts the headset, making sure it fits snugly around your eyes.</div> @@.choicebutton;<<button "Begin the test">><<run MindWare.runPsychiatristTestBabecock()>><<set $lockedUI = false>><<addclass "#hide" "hidden">><</button>>@@</span>
<div class="narrator">The rapid onslaught of explicit images leaves your Synapse Steady VX implant completely drained. Unable to tame AVA, she invades your consciousness before you have a chance to remove the headset.</div> <<ava>>That's what you want, isn't it? To become a sexy receptacle for those huge cocks the doctor showed you. You want to look like the women you've just seen and feel them stretching your mouth, fucking your pussy, and cuming on your tits.<</ava>> <<ava>>STOP THINKING AND ADMIT IT – ADMIT TO YOURSELF THAT YOU WANT TO BE A COCKSLUT!<</ava>> <<video "imgs/quests/transition/babecock/stop-thinking.mp4">> <<ava>>SAY IT! YOU WANT TO BE A COCKSLUT!<</ava>> <<video "imgs/quests/transition/babecock/suck1.mp4">> <<ava>>SAY IT!<</ava>> <<video "imgs/quests/transition/babecock/suck2.mp4">> <div class="narrator">AVA's voice echoes in your mind, dominant and unyielding. The images of being a cockslut flood your senses, making it impossible to think of anything else. Your cock throbs and leaks pre-cum as you imagine yourself on your knees, your lips wrapped around a thick, veiny cock.</div> <span id="questions">\ @@.pink-choicebutton;<<button "I want to be a cockslut!">>\ <<replace "#questions">>\ <<ava>>Good girl. Now say it again.<</ava>> <<player>>I want to be a cockslut.<</player>> <<ava>>That's right, slut. You want to be a girl, don't you?<</ava>> <<player>>Yes, I want to be a girl.<</player>> <<ava>>LOUDER!<</ava>> <<player>>I WANT TO BE A GIRL!<</player>> <<ava>><span class="glitchy-pink-dialog" data-text="Good slut">Good girl</span>.<</ava>> <img src="imgs/quests/transition/nonnudes/ava-happy.gif" width="100%"> <<if visited() is 1>>\ <<relationshipIncreasedWith "Ava" 1>> <</if>>\ <<if visited() is 1>>\ <<genderFeminine 1>> <</if>>\ <<button "Continue">><<goto "TransitionAppointment3-TestEnd-Cont">><</button>> <</replace>>\ <</button>>@@\ <<ResistMinigameContainer>>\ <<done>><<include "ResistAVAMinigame-Script">><</done>>\ <div id="minigame-container-hidden"> @@.choicebutton;<<button "I don't want to be a cockslut!">>\ <<replace "#questions">>\ <<ava>>Don't lie to yourself, slut. You know you want it.<</ava>> <<player>>No, I don't.<</player>> <<ava>>You're just afraid to admit it.<</ava>> <<button "Continue">><<goto "TransitionAppointment3-TestEnd-Cont">><</button>> <</replace>> <</button>>@@ </div></span>
<div class="narrator">The intensity of AVA's insistence combined with the visual imagery invading your brain sends you into a frenzy. You find yourself repeatedly shouting that you want to be a woman into the black void you've found yourself in. The words echo through your mind, amplifying your desire and confusion.</div> <div class="narrator">Then, you hear a faint voice from a distance. You latch onto this voice and follow it, like a lifeline pulling you back to reality. As you get closer, you begin to understand what the voice is saying.</div> <<psychiatrist>>It's okay, sweetie... you're safe with me.<</psychiatrist>> <div class="narrator">You begin to feel something gently caressing your hair. The touch is soothing and reassuring, grounding you in the present moment.</div> <<psychiatrist>>You're safe with <span class="glitchy-pink-dialog" data-text="mommy">mommy</span>.<</psychiatrist>> <div class="narrator">The word "mommy" wakes you up from your trance, and you remember that you're lying in Dr. Hart's lap. As you open your eyes, you see her smiling down at you, stroking your hair lightly and lovingly.</div> <<video "imgs/quests/transition/babecock/caress.mp4">> <<psychiatrist>>I think there's no need for us to review the test results this time, do you agree?<</psychiatrist>> @@.pink-choicebutton;<<button "Agree">><<goto "TransitionAppointment3-Conclusion">><</button>>@@
<h2>End of content.</h2> Please save here, so that you can continue the story from this point when I release version 0.1.6. If you would like to continue exploring the game, you can use the Extra Options menu to navigate to the HomeBacklog passage. You can then use the same menu to come back to this passage ("TransitionAppointment3-Conclusion").
<div class="img-location"><img src="imgs/locations/syntech.jpg" width="100%"></div> <<include "SynTech Random Encounter 1 Check">>\ You have reached the SynTech Tower. The tower's sheer height makes you feel insignificant in comparison. As you gaze upward, the colossal 3D hologram of Earth at the top seems to gaze back, a reminder of SynTech's overwhelming influence over the world. Despite the tower's allure, you have no business to attend to here at the moment. [[Go back|GoOutside]]
<div class="city-map"> <p>Where in NeoUrbania would you like to go?</p> <div class="district-wrapper"> <div class="map-section glowsection" id="backlog-map-screen"> <h4>Backlog</h4> <button class="outside-button action-point-button" onclick="MindWare.processActionButtonClick(0, 'HomeBacklog')">Your Apartment<span class="action-point-icon"></span></button> <<if $dayOfWeek is "Monday" or $dayOfWeek is "Tuesday" or $dayOfWeek is "Wednesday" or $dayOfWeek is "Thursday" or $dayOfWeek is "Friday">> <button class="outside-button action-point-button" onclick="MindWare.processActionButtonClick(0, 'BrainFry')">BrainFry<span class="action-point-icon"></span></button> <<else>> <button class="outside-button action-point-button" onclick="SugarCube.UI.alert('It\'s the weekend! BrainFry is closed today.')">BrainFry <span class="action-point-icon"></span></button> <</if>> </div> <div class="map-section glowsection" id="city-center-map-screen"> <h4>City Core</h4> <button class="outside-button action-point-button" onclick="MindWare.processActionButtonClick(0, 'SynTech-Outside')">SynTech Tower <span class="action-point-icon"></span></button> </div> <<if $gitGutUnlocked === true || $eroSphereUnlocked === true>><div class="map-section glowsection" id="pleasure-grid-map-screen"> <h4>Pleasure Grid</h4> <<if $gitGutUnlocked === true>> <<if $gitGutIntroduced>> <<if $dayOfWeek is "Monday" or $dayOfWeek is "Tuesday" or $dayOfWeek is "Wednesday" or $dayOfWeek is "Thursday" or $dayOfWeek is "Friday">> <button class="outside-button action-point-button" onclick="MindWare.processActionButtonClick(0, 'GitGud')">GitGud<span class="action-point-icon"></span></button> <<else>> <button class="outside-button action-point-button" onclick="MindWare.processActionButtonClick(0, 'GitGud-Weekend')">GitGud<span class="action-point-icon"></span></button> <</if>> <<else>> <button class="outside-button action-point-button" onclick="MindWare.processActionButtonClick(0, 'GitGud-Introduction')">GitGud<span class="action-point-icon"></span></button> <</if>> <</if>> <<if $eroSphereUnlocked === true>> <<if $dayOfWeek is "Saturday" or $dayOfWeek is "Sunday">> <button class="outside-button action-point-button" onclick="MindWare.processActionButtonClick(0, 'EroSphere-Outside')">EroSphere<span class="action-point-icon"></span></button> <<else>> <button class="outside-button action-point-button" onclick="SugarCube.UI.alert('It\'s not the weekend yet! EroSphere is closed today.')">EroSphere<span class="action-point-icon"></span></button> <</if>> <</if>> </div><</if>> <<if $chapter1Started>> <div class="map-section glowsection" id="community-zone-map-screen"> <h4>Community Zone</h4> <button class="outside-button action-point-button" onclick="MindWare.processActionButtonClick(0, 'PanaceaClinic')">Panacea Clinic<span class="action-point-icon"></span></button> </div> <</if>> </div> </div> <p class="back-link">[["Go Back"|$goOutsideGoBackPassage]]</p>
<<widget "genderMasculine">> <<set _amount = $args[0]>> <<set _playerGender = State.variables.playerGender>> <<set _newGender = Math.min(_playerGender + _amount, 100)>> <<if _newGender == _playerGender>> <div class="gender-change"><span class="gender-increase"><span style="font-family: 'Noto Color Emoji', sans-serif;">♂️</span> Your masculine gender identity is already at its maximum.</span></div> <<run console.log("GenderMasculine widget: Gender already at maximum (100). Affirmation message displayed.")>> <<else>> <<set State.variables.playerGender = _newGender>> <<set _pointText = _amount == 1 ? "1 point" : (_amount + " points")>> <div class="gender-change"><span class="gender-increase"><span style="font-family: 'Noto Color Emoji', sans-serif;">♂️</span> Your gender identity has become more masculine by <<print _pointText>>.</span></div> <<run console.log("GenderMasculine widget: Gender increased by " + _amount + " to " + _newGender)>> <</if>> <</widget>> <<widget "genderFeminine">> <<set _amount = $args[0]>> <<set _playerGender = State.variables.playerGender>> <<set _newGender = Math.max(_playerGender - _amount, 0)>> <<if _newGender == _playerGender>> <div class="gender-change"><span class="gender-decrease"><span style="font-family: 'Noto Color Emoji', sans-serif;">♀️</span> Your feminine gender identity is already at its minimum.</span></div> <<run console.log("GenderFeminine widget: Gender already at minimum (0). Affirmation message displayed.")>> <<else>> <<set State.variables.playerGender = _newGender>> <<set _pointText = _amount == 1 ? "1 point" : (_amount + " points")>> <div class="gender-change"><span class="gender-decrease"><span style="font-family: 'Noto Color Emoji', sans-serif;">♀️</span> Your gender identity has become more feminine by <<print _pointText>>.</span></div> <<run console.log("GenderFeminine widget: Gender decreased by " + _amount + " to " + _newGender)>> <</if>> <</widget>>
<<nobr>> <<widget "increasemorality">> <<set _amount to $args[0] ? $args[0] : 5>> <!-- Check if argument is provided; if not, default to 5 --> <<run MindWare.increaseMorality(Math.abs(_amount))>> <div class="morality-change"> <span class="morality-increase"> <span style="font-family: 'Noto Color Emoji', sans-serif;">⚖️</span> Morality has increased by <<print _amount>>. </span> </div> <</widget>> <</nobr>> <<nobr>> <<widget "increasemoralityonce">> <<if visited() is 1>> <!-- Check if this is the first visit to the passage --> <<set _amount to $args[0] ? $args[0] : 5>> <!-- Check if an argument is provided; if not, default to 5 --> <<run MindWare.increaseMorality(Math.abs(_amount))>> <div class="morality-change"> <span class="morality-increase"> <span style="font-family: 'Noto Color Emoji', sans-serif;">⚖️</span> Morality has increased by <<print _amount>>. </span> </div> <</if>> <</widget>> <</nobr>> <<nobr>> <<widget "decreasemorality">> <<set _amount to $args[0] ? $args[0] : -5>> <!-- Check if argument is provided; if not, default to -5 --> <<run MindWare.decreaseMorality(Math.abs(_amount))>> <div class="morality-change"> <span class="morality-decrease"> <span style="font-family: 'Noto Color Emoji', sans-serif;">⚖️</span> Morality has decreased by <<print _amount>>. </span> </div> <</widget>> <</nobr>> <<nobr>> <<widget "decreasemoralityonce">> <<if visited() is 1>> <!-- Check if this is the first visit to the passage --> <<set _amount to $args[0] ? $args[0] : -5>> <!-- Check if an argument is provided; if not, default to -5 --> <<run MindWare.decreaseMorality(Math.abs(_amount))>> <div class="morality-change"> <span class="morality-decrease"> <span style="font-family: 'Noto Color Emoji', sans-serif;">⚖️</span> Morality has decreased by <<print _amount>>. </span> </div> <</if>> <</widget>> <</nobr>> /*********** OLD ***********/ <<widget "moralitydecreased">>\ <div class="morality-change"><span class="morality-decrease"><span style="font-family: 'Noto Color Emoji', sans-serif;">⚖️</span> Morality has decreased.</span></div>\ <</widget>>\ <<widget "moralityincreased">>\ <div class="morality-change"><span class="morality-increase"><span style="font-family: 'Noto Color Emoji', sans-serif;">⚖️</span> Morality has increased.</span></div>\ <</widget>>\ /*********** OLD ***********/
<<widget "relationshipIncreasedWith">>\ <<set _person = $args[0]>>\ <<set _points = $args.length > 1 ? $args[1] : 1>>\ <<set _variableName = "relationship" + _person>>\ <<set _currentValue = State.getVar("$" + _variableName)>>\ <<set _newValue = Math.min(Math.max(_currentValue + _points, 0), 100)>>\ <<run State.setVar("$" + _variableName, _newValue)>>\ <div class="relationship-change"><span class="relationship-increase"><span style="font-family: 'Noto Color Emoji', sans-serif;">💞</span> Your relationship with <<print _person>> has increased by <<print _points>> <<print _points eq 1 ? "point" : "points">>. It is now <<print _newValue>> out of 100.</span></div>\ <<run console.log("Relationship with " + _person + " increased by " + _points + " points. New value: " + _newValue)>>\ <</widget>> <<widget "relationshipDecreasedWith">>\ <<set _person = $args[0]>>\ <<set _points = $args.length > 1 ? $args[1] : 1>>\ <<set _variableName = "relationship" + _person>>\ <<set _currentValue = State.getVar("$" + _variableName)>>\ <<set _newValue = Math.min(Math.max(_currentValue - _points, 0), 100)>>\ <<run State.setVar("$" + _variableName, _newValue)>>\ <div class="relationship-change"><span class="relationship-decrease"><span style="font-family: 'Noto Color Emoji', sans-serif;">💔</span> Your relationship with <<print _person>> has decreased by <<print _points>> <<print _points eq 1 ? "point" : "points">>. It is now <<print _newValue>> out of 100.</span></div>\ <<run console.log("Relationship with " + _person + " decreased by " + _points + " points. New value: " + _newValue)>>\ <</widget>> /* Usage: <<relationshipIncreasedWith "Ray" 3>> */ /* OLD */ <<widget "relationshipIncreased">>\ <<set _person = $args[0]>>\ <div class="relationship-change"><span class="relationship-increase"><span style="font-family: 'Noto Color Emoji', sans-serif;">💞</span> Your relationship with <<print _person>> has increased.</span></div>\ <</widget>>\ <<widget "relationshipDecreased">>\ <<set _person = $args[0]>>\ <div class="relationship-change"><span class="relationship-decrease"><span style="font-family: 'Noto Color Emoji', sans-serif;">💔</span> Your relationship with <<print _person>> has decreased.</span></div>\ <</widget>>\ /* OLD */
/* Add Reason <<script>> // Add a reason to disable the sleep button MindWare.updateSleepReasons('add', 'You are not tired enough to sleep'); <</script>> Remove Reason <<script>> // Remove a reason to enable the sleep button MindWare.updateSleepReasons('remove', 'You are not tired enough to sleep'); <</script>> */
<<set $dreamWebMs to ["imgs/dreams/dream1.webm", "imgs/dreams/dream2.webm", "imgs/dreams/dream3.webm", "imgs/dreams/dream4.webm", "imgs/dreams/dream5.webm", "imgs/dreams/dream6.webm", "imgs/dreams/dream7.webm", "imgs/dreams/dream8.webm", "imgs/dreams/dream9.webm", "imgs/dreams/dream10.webm"]>>\ \ <div class="img-dream" id="dreamDisplay"><!-- Video will be displayed here --></div> <<fadein "1s">> You close your eyes, leaving behind the hustle and bustle of the world. <</fadein>> <<fadein "1s" "1s">> Drifting into slumber, you find solace in the peaceful dreams that await. <</fadein>> <<fadein "1s" "2s">> As you slowly wake up, a sense of renewal and peace fills you. <</fadein>> <<fadein "1s" "3s">> <div class='action-points-change'><span class='action-points-increase'><span class="action-point-icon">⚡</span> Action Points restored.</span></div> <<link "Continue">> <<unset $dreamWebMs>> <<run MindWare.advanceDay()>> <<goto "HomeBacklog">> <</link>> <</fadein>> <<script>> $(document).ready(function() { setup.displayRandomDream = function() { const webms = State.variables.dreamWebMs; const randomWebM = webms[Math.floor(Math.random() * webms.length)]; const videoHTML = `<video style="display:none;" preload autoplay muted loop><source src="${randomWebM}" type="video/webm">Your browser does not support the video tag.</video>`; $('#dreamDisplay').html(videoHTML); $('#dreamDisplay video').fadeIn(9000); // 9000 milliseconds = 9 seconds }; setup.displayRandomDream(); // Call the function to display a random dream video. }); <</script>> /* <<set $eroSphereDishesFailed = false>>\ <<set $eroSphereDishesAttempted = false>>\ <<set $simsWatchedToday = false>>\ <<done>> <<set $implantCharge = 100>>\ <</done>>\ \ */ /* :: TakeNap <<set $dreamWebMs to ["imgs/dreams/dream1.webm", "imgs/dreams/dream2.webm", "imgs/dreams/dream3.webm", "imgs/dreams/dream4.webm", "imgs/dreams/dream5.webm", "imgs/dreams/dream6.webm", "imgs/dreams/dream7.webm", "imgs/dreams/dream8.webm", "imgs/dreams/dream9.webm", "imgs/dreams/dream10.webm"]>> \ <div class="img-dream" id="dreamDisplay"> <!-- Video will be displayed here --> </div> <<fadein "1s">> You close your eyes, leaving behind the hustle and bustle of the world. <</fadein>> <<fadein "1s" "1s">> Drifting into slumber, you find solace in the peaceful dreams that await. <</fadein>> <<fadein "1s" "2s">> As you slowly wake up, a sense of renewal and peace fills you. <</fadein>> <<fadein "1s" "3s">> <<link "Continue">> <<unset $dreamWebMs>> <<goto "HomeBacklog">> <</link>> <</fadein>> <<script>> $(document).ready(function() { setup.displayRandomDream = function() { const webms = State.variables.dreamWebMs; const randomWebM = webms[Math.floor(Math.random() * webms.length)]; const videoHTML = `<video style="display:none;" preload autoplay muted loop><source src="${randomWebM}" type="video/webm">Your browser does not support the video tag.</video>`; $('#dreamDisplay').html(videoHTML); $('#dreamDisplay video').fadeIn(9000); // 9000 milliseconds = 9 seconds }; setup.displayRandomDream(); // Call the function to display a random dream video. }); <</script>> */
<<set $implantCharge = 70>> <<set $mentalCondition = "Stable">> /* Stable -> Unstable -> Dysphoric */
/* Mental condition */ <<set _playerBodyValue to MindWare.bodyToGenderValue($playerBody)>> <<set _difference to Math.abs($playerGender - _playerBodyValue)>> <<if _difference > 40>> <<if $mentalCondition neq "Dysphoric">> <<set $mentalCondition to "Dysphoric">> <<run console.log("Player Body Value: " + _playerBodyValue)>> <<run console.log("Difference between Gender and Body Value: " + _difference)>> <<run console.log("Mental Condition set to Dysphoric due to difference > 40")>> <</if>> <<elseif _difference > 20>> <<if $mentalCondition neq "Unstable">> <<set $mentalCondition to "Unstable">> <<run console.log("Player Body Value: " + _playerBodyValue)>> <<run console.log("Difference between Gender and Body Value: " + _difference)>> <<run console.log("Mental Condition set to Unstable due to difference > 20")>> <</if>> <<else>> <<if $mentalCondition neq "Stable">> <<set $mentalCondition to "Stable">> <<run console.log("Player Body Value: " + _playerBodyValue)>> <<run console.log("Difference between Gender and Body Value: " + _difference)>> <<run console.log("Mental Condition set to Stable due to difference <= 20")>> <</if>> <</if>> /* Implant charge */ <<if $implantCharge > 0 && $mentalCondition === "Stable">> <<set $implantCharge -= 1>> <<if $implantCharge < 0>><<set $implantCharge = 0>><</if>> <</if>> <<if $implantCharge > 0 && $mentalCondition === "Unstable">> <<set $implantCharge -= 2>> <<if $implantCharge < 0>><<set $implantCharge = 0>><</if>> <</if>> <<if $implantCharge > 0 && $mentalCondition === "Dysphoric">> <<set $implantCharge -= 3>> <<if $implantCharge < 0>><<set $implantCharge = 0>><</if>> <</if>>
Wait for an email from the client. Add the provided IP address to your target list and hack the new target using the Hack-a-Target computer app. Find evidence of the landlord's spying.
Go to the BrainFry building. Meet your boss and coworkers. Work on a project.
Keep working at BrainFry.
<div class="bf-desktop-hacking-tool-wrapper">\ <div class="bf-desktop-hacking-tool-header"><span class="bf-desktop-hacking-tool-header-text">Hack-a-Target - Manual Password Bruteforce</span></div>\ <div class="bf-hacking-game">\ <div class="bf-game-instructions"><p>Start and enter the highlighted password as quickly as you can.</p></div> <div class="bf-word-container">\ <div class="bf-main-word-container">\ <span class="bf-main-word">start</span>\ </div>\ <span class="bf-secondary-word">code</span>\ </div>\ <input type="text" id="bf-word-input" class="bf-word-input" placeholder="Enter Password" disabled>\ <div class="bf-progress-bar-container">\ <div class="bf-progress-bar"></div>\ </div>\ <button id="bf-start-button" class="bf-start-button">Start</button> <div class="bf-trace-bar-container">\ <div class="bf-trace-progress-bar-label">Trace detection: <span id="bf-detection-percentage">0%</span></div>\ <div class="bf-trace-progress-bar"></div>\ </div>\ </div>\ </div>\ <<if $tutorialManualBruteforce === false>> <div id="tutorial-box"><div class="instruction-container-lime">\ <div class="instruction-title-bar-lime">Tutorial: Manual Bruteforce <button class="tutorial-close-button" onclick="SugarCube.State.variables.tutorialManualBruteforce = true; document.getElementById('tutorial-box').style.display = 'none';"><span style="tutorial-close-button"><i class="fas fa-times-circle"></i></span></button></div>\ <div class="instruction-content">\ <p>To successfully bruteforce the password, you must guess enough times to fill the progress bar. This must be completed before detection results in network disconnection.</p>\ </div>\ </div></div>\ <<else>>\ <</if>>\ \ <<script>> $(document).ready(function() { // Passwords of varying complexity and length var passwordsByLength = { 4: ['pass', '1234', 'test', 'lock', 'code', 'key!', 'door', 'user', 'quit', 'sign', 'boom', 'buzz', 'cool', 'drop', 'flip', 'glow', 'jump', 'king', 'link', 'moon'], 5: ['abcde', '12345', 'admin', 'guest', 'login', 'shell', 'debug', 'trace', 'quest', 'start', 'apple', 'blaze', 'crash', 'drift', 'eagle', 'flash', 'grace', 'heart', 'image', 'joker'], 6: ['secret', 'unlock', 'change', 'qwerty', 'abcdef', '123456', 'secure', 'effect', 'master', 'system', 'bright', 'circle', 'dreamy', 'frozen', 'golden', 'hybrid', 'impact', 'jungle', 'knight', 'legacy'], 7: ['manager', 'freedom', 'scanner', 'network', 'desktop', 'digital', 'console', 'storage', 'archive', 'explore', 'harmony', 'journey', 'kingdom', 'liberty', 'miracle', 'nemesis', 'organic', 'phantom', 'quantum', 'rapture'], 8: ['password', 'baseball', 'football', 'sunshine', 'iloveyou', 'starwars', 'whatever', 'superman', 'internet', 'lifehack', 'moonbeam', 'november', 'overlord', 'patriot', 'quicksil', 'rainbow', 'sapphire', 'tropical', 'ultimate', 'velocity'], 9: ['passphrase', 'chocolate', 'pineapple', 'marketing', 'education', 'adventure', 'character', 'notebook', 'workplace', 'community', 'bluebird', 'chipmunk', 'dreamland', 'evergreen', 'firework', 'gladiator', 'hurricane', 'icecream', 'jellyfish', 'kaleidosc'], 10: ['application', 'environment', 'integration', 'development', 'information', 'association', 'opportunity', 'intelligence', 'conversation', 'illustration', 'blackberry', 'butterfly', 'chocolatey', 'dragonfire', 'electronic', 'flashlight', 'greenhouse', 'harmonious', 'incredible', 'jackhammer'] }; // Function to shuffle an array function shuffleArray(array) { var currentIndex = array.length, temporaryValue, randomIndex; while (0 !== currentIndex) { randomIndex = Math.floor(Math.random() * currentIndex); currentIndex -= 1; temporaryValue = array[currentIndex]; array[currentIndex] = array[randomIndex]; array[randomIndex] = temporaryValue; } return array; } // Function to pick n unique passwords from the array function pickPasswords(array, n) { var shuffled = shuffleArray(array.slice()); return shuffled.slice(0, n); } var selectedPasswordLength = State.variables.selectedPasswordLength; // The length of passwords to use var numberOfPasswordsNeeded = State.variables.numberOfPasswordsNeeded; // How many correct entries are needed to win var passwordsForThisRound = pickPasswords(passwordsByLength[selectedPasswordLength], numberOfPasswordsNeeded); var baseTraceTime = State.variables.bruteforceBaseTraceTime; var totalTraceTime = baseTraceTime; if (State.variables.traceUpgrade1) { totalTraceTime *= 1.10; // 10% more time } if (State.variables.traceUpgrade2) { totalTraceTime *= 1.25; // 25% more time } if (State.variables.traceUpgrade3) { totalTraceTime *= 1.50; // 50% more time } var currentPasswordIndex = 0; var progress = 0; var traceProgress = 0; var traceInterval; var gameEnded = false; function endGame(success) { clearInterval(traceInterval); $('#bf-word-input').prop('disabled', true); gameEnded = true; if (success) { $('#bf-word-input').val('Correct password!').removeClass('bf-input-fail').addClass('bf-input-success'); $('#bf-start-button').replaceWith('<button id="bf-end-game-button" class="bf-start-button">Log in</button>'); $('#bf-end-game-button').on('click', function() { SugarCube.Engine.play(State.variables.nextPassageAfterSuccessBruteforceGame); }); SugarCube.UI.alert("The correct password is: " + State.variables.bruteforceMinigameCorrectPassword); } else { $('#bf-word-input').val('Access denied').removeClass('bf-input-success').addClass('bf-input-fail'); $('#bf-start-button').replaceWith('<button id="bf-fail-button" class="bf-fail-button">Log out</button>'); $('#bf-fail-button').on('click', function() { SugarCube.Engine.play(State.variables.nextPassageAfterFailBruteforceGame); }); } } $('#bf-start-button').on('click', function() { $(this).hide(); $('#bf-word-input').prop('disabled', false).focus(); $('.bf-main-word').text(passwordsForThisRound[currentPasswordIndex]); $('.bf-secondary-word').text(passwordsForThisRound[currentPasswordIndex + 1]); $('.bf-main-word, .bf-secondary-word').css('visibility', 'visible'); traceInterval = setInterval(function() { if (gameEnded) return; traceProgress += 100 / totalTraceTime; var tracePercentage = Math.min(traceProgress, 100); $('.bf-trace-progress-bar').css('width', tracePercentage + '%'); $('#bf-detection-percentage').text(tracePercentage.toFixed(0) + '%'); if (traceProgress >= 100 && progress < 100) { endGame(false); // Fail condition if trace completes first } }, 1000); }); $('#bf-word-input').on('input', function() { var inputVal = $(this).val(); var currentPassword = $('.bf-main-word').text(); if (inputVal.toLowerCase() === currentPassword.toLowerCase() && !gameEnded) { progress += 100 / numberOfPasswordsNeeded; $('.bf-progress-bar').css('width', progress + '%'); $(this).val(''); if (progress >= 100) { $('.bf-progress-bar').css('width', '100%'); endGame(true); // Success condition if passwords complete first } else { currentPasswordIndex = (currentPasswordIndex + 1) % passwordsForThisRound.length; $('.bf-main-word').text(passwordsForThisRound[currentPasswordIndex]); var nextIndex = (currentPasswordIndex + 1) % passwordsForThisRound.length; $('.bf-secondary-word').text(passwordsForThisRound[nextIndex]); } } }); }); <</script>> /* SET THESE STORYINIT VARIABLES !!! <<set $selectedPasswordLength to 6>> <<set $numberOfPasswordsNeeded to 5>> <<set $bruteforceBaseTraceTime to 15>> // Base time in seconds <<set $nextPassageAfterSuccessBruteforceGame to "">> <<set $nextPassageAfterFailBruteforceGame to "">> !!! SET THESE STORYINIT VARIABLES */
<div class="minigame-coding-wrapper">\ <div class="minigame-coding-header"><span class="minigame-coding-header-text">Code, Monkey!</span></div>\ <div class="minigame-coding-content">\ <<if $miniGameDifficulty is "Normal">>\ <div class="minigame-coding-instructions"><p>Type as fast as you can to earn money! You get paid $1.5 for each line of code.</p><p>You have 5 seconds.</p></div>\ <<set $codingMinigameTimeLeft to 5>>\ <<set $moneyPerCharacter to 1.5>>\ <</if>>\ <<if $miniGameDifficulty is "Easy">>\ <div class="minigame-coding-instructions"><p>Type as fast as you can to earn money! You get paid $2 for each line of code.</p><p>You have 5 seconds.</p></div>\ <<set $codingMinigameTimeLeft to 5>>\ <<set $moneyPerCharacter to 2>>\ <</if>>\ <<if $miniGameDifficulty is "Story">>\ <div class="minigame-coding-instructions"><p>Type as fast as you can to earn money! You get paid $2.5 for each line of code.</p><p>You have 5 seconds.</p></div>\ <<set $codingMinigameTimeLeft to 5>>\ <<set $moneyPerCharacter to 2.5>>\ <</if>>\ <<set $randomLine to setup.fakeCodes.random()>> <div id="hackerGame_hackingOutput"></div> <span id="hackerGame_startTyping" style="display: none; font-size: 24px;">Start typing!</span><input type="text" id="hackerGame_hiddenInput" style="opacity: 0; position: absolute; pointer-events: none;">\ <button id="hackerGame_beginButton">Start</button> <div id="hackerGame_characterCount"><b>Characters typed:</b> 0</div>\ <div id="hackerGame_result"></div> <div class="minigame-coding-trace-bar-container">\ <div class="minigame-coding-trace-progress-bar-label">Seconds remaining: <span id="minigameCodingTimeRemaining">$codingMinigameTimeLeft</span></div>\ <div class="minigame-coding-trace-progress-bar"></div>\ </div>\ </div>\ </div>\ <<nobr>><br><p class="back-link"> <<link "Go Back">> <<goto "BrainFry">> <</link>> </p><br> <<if $minigameSkipButtons === true>> <p class="back-link"> <<link "Skip the Minigame">> <<script>> var characterCount = 100; var moneyEarned = characterCount * State.variables.moneyPerCharacter; State.variables.playerMoney += moneyEarned; State.variables.brainFryWorkCount++; State.variables.workedToday = true; SugarCube.Engine.play("BrainFry"); <</script>> <</link>> </p><</if>><</nobr>> \ <<if $tutorialCodingMinigame === false>>\ <div id="tutorial-box"><div class="instruction-container-blue">\ <div class="instruction-title-bar-blue">Tutorial: Code, Monkey! <button class="tutorial-close-button" onclick="SugarCube.State.variables.tutorialCodingMinigame = true; document.getElementById('tutorial-box').style.display = 'none';"><span style="tutorial-close-button"><i class="fas fa-times-circle"></i></span></button></div>\ <div class="instruction-content">\ <p>Your goal is to earn money by typing code as fast as possible. Each character you type represents a line of code and earns you $moneyPerCharacter. You have a total of $codingMinigameTimeLeft seconds to type as much as you can. Once you start, your job is to hit any keys rapidly to simulate coding. The faster you type, the more random lines of code will appear on the screen, and the more you earn.</p>\ </div>\ </div></div>\ <<else>>\ <</if>>\ <<script>> // Initialize keyboard listener and trace progress bar $(document).ready(function() { var characterCount = 0; var timerActive = false; // Variable to check if timer is active var traceProgress = 0; var totalTraceTime = State.variables.codingMinigameTimeLeft; // Total time for the trace progress bar var traceInterval; // Function to handle the end of the game function endGame() { clearInterval(traceInterval); timerActive = false; // Timer is no longer active $('#hackerGame_startTyping').text("Stop typing!"); // Change text to "Stop typing!" var moneyEarned = characterCount * State.variables.moneyPerCharacter; // Calculate money earned State.variables.playerMoney += moneyEarned; State.variables.brainFryWorkCount++; $('#hackerGame_result').html("<b>You've earned:</b> $" + moneyEarned.toFixed(1) + "!<br><br><button id='hackerGame_continueButton' class='hackerGame_button'>Submit Your Work</button>"); $('#hackerGame_continueButton').click(function() { if (State.variables.brainFryFirstVisit === false && State.variables.brainFryWorkCount === 1) { MindWare.completeTask("Start your new job"); MindWare.addTask("Continue the grind", "Task-ContinueTheGrind"); MindWare.addInstantMessage('cipherInstantMessages', 'First day at BrainFry', 'IMApp-CipherLynx-FirstDayAtBrainFry', 'Cipher', true, true); State.variables.workedToday = true; State.variables.workedAtBrainFryToday = true; SugarCube.Engine.play("BrainFry"); } else if (State.variables.chapter1Started && State.variables.synapseSteadyVXInstalled && !State.variables.avaRecommendedCodingAssistant) { State.variables.workedToday = true; State.variables.workedAtBrainFryToday = true; State.variables.avaRecommendedCodingAssistant = true; SugarCube.Engine.play("AVA-AI-Coding-Assistant-Suggestion"); } else if (State.variables.workedToday === false) { State.variables.workedToday = true; State.variables.workedAtBrainFryToday = true; SugarCube.Engine.play("BrainFry"); } else { // This is the else block where you can add alternative actions if workedToday is true SugarCube.UI.alert('You have already worked today.'); } }); } // Start button click event $('#hackerGame_beginButton').click(function() { $(this).hide(); // Hide the Begin button $('#hackerGame_startTyping').show(); // Show the "Start typing!" text $('#hackerGame_hiddenInput').css("pointer-events", "auto").focus(); // Focus the hidden input timerActive = true; // Timer becomes active // Start the trace progress bar timer traceInterval = setInterval(function() { traceProgress += 100 / totalTraceTime; var secondsRemaining = totalTraceTime - Math.floor(traceProgress / 100 * totalTraceTime); $('#minigameCodingTimeRemaining').text(secondsRemaining); var tracePercentage = Math.min(traceProgress, 100); $('.minigame-coding-trace-progress-bar').css('width', tracePercentage + '%'); if (traceProgress >= 100) { endGame(); } }, 1000); }); // Listen for keypresses $(document).keypress(function() { if (timerActive) { // Only increment if timer is active characterCount++; $('#hackerGame_characterCount').html("<b>Characters typed:</b> " + characterCount); var randomIndex = Math.floor(Math.random() * setup.fakeCodes.length); var fakeCode = setup.fakeCodes[randomIndex]; // Select a random fake line $("#hackerGame_hackingOutput").append(fakeCode + "\n"); $("#hackerGame_hackingOutput").scrollTop($("#hackerGame_hackingOutput")[0].scrollHeight); } }); }); <</script>>
You are presented with a grid of passwords. Identify the unique password that appears only once and enter it below. <<set $passwords to []>> <<set $uniquePassword = "">> <<script>> // Function to generate a random password function generatePassword(length) { var charset = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; var password = ""; for (var i = 0; i < length; i++) { var randomIndex = Math.floor(Math.random() * charset.length); password += charset[randomIndex]; } return password; } // Function to shuffle an array function shuffleArray(array) { for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]]; } } // Generate 1 unique password var uniquePassword = generatePassword(8); // Generate 5 pairs of passwords var passwordPairs = []; for (let i = 0; i < 5; i++) { let pairPassword = generatePassword(8); // Make sure the pair password is different from the unique password while (pairPassword === uniquePassword) { pairPassword = generatePassword(8); } passwordPairs.push(pairPassword, pairPassword); } // Create the array based on the specified distribution var passwordsArray = [uniquePassword, ...passwordPairs]; // Shuffle the array to randomize the order shuffleArray(passwordsArray); // Assign the shuffled array to the story variable State.variables.passwords = passwordsArray; // Store the unique password in a story variable State.variables.uniquePassword = uniquePassword; // Attach event handler for form submission $(document).one(":passageend", function(event) { $('#passwordForm').one('submit', function(event) { event.preventDefault(); // prevent the default form submission var playerGuess = $('#playerGuess').val(); // get the player's input if (playerGuess === State.variables.uniquePassword) { clearInterval(window.myTimer); Engine.play("SuccessPassage"); // Replace with your success passage name } else { clearInterval(window.myTimer); Engine.play("FailurePassage"); // Replace with your failure passage name } }); }); <</script>> <div class="minigame-terminal"> <div class="help-icon" data-tooltip="Enter the unique password to proceed.">?</div> <div class="terminal-title">cryptbreaker.exe</div> <b>Passwords:</b> <ul> <<for _i to 0; _i < $passwords.length; _i++>> <li><<=$passwords[_i]>></li> <</for>> </ul> <form id="passwordForm"> <input type="text" id="playerGuess" autocomplete="off"> <button type="submit">Submit</button> </form> <div class="countdown-bar-container"> <div id="countdown-bar" class="countdown-bar"></div> </div> </div> <<script>> // Clear any existing timers to avoid overlaps if (window.myTimer) { clearInterval(window.myTimer); } var timeLeft = 60; // total time var initialTime = 60; // used to calculate the percentage // Function to update the countdown bar width function updateCountdownBar() { var countdownBar = document.getElementById("countdown-bar"); if (countdownBar) { var widthPercent = (timeLeft / initialTime) * 100; countdownBar.style.width = widthPercent + "%"; } } window.myTimer = setInterval(function() { // Your existing logic // ... updateCountdownBar(); // Update the countdown bar width // Your existing logic timeLeft -= 1; if (timeLeft <= 0) { clearInterval(window.myTimer); Engine.play("FailurePassage"); } }, 1000); <</script>>
Fail!
Success!
<<xavier>>You look lovely today!<</xavier>> <br> @@.pink-choicebutton;<<button "Feminizing action suggested by AVA">><<run UI.alert("Action!")>><</button>>@@ <div class="minigame-container"> <div class="resist-instructions" id="instructions">Resist AVA's suggestion and reveal other options by repeatedly clicking the Resist button.</div> <div class="energy-container"> <span class="energy-label">Implant charge cost: </span> <span class="energy-value" id="energy">20%</span> </div> <div class="timer-container"> <span class="timer-label">Time to resist: </span> <span class="timer-value" id="timer"><<if $mentalCondition === "Unstable">><<print 10/2>><<else>>10<</if>></span> <span class="timer-value"> seconds</span> </div> <div class="gauge-container"> <div class="gauge" id="gauge"></div> </div> <button class="pink-mindware-button" id="resistButton">Resist</button> </div> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "Alternative action">><<run UI.alert("Action!")>><</button>>@@ </div> <<include "Resist-Minigame-Script-Default">>
<<done>><<script>> function initializeMinigame(settings) { var progress = 0; var timeLeft = settings.timeLeft || 10; var fillAmount = settings.fillAmount || 5; var fallRate = settings.fallRate || 3; var fallInterval = settings.fallInterval || 200; var gameStarted = false; var resistanceCost = settings.resistanceCost || 20; const minigameContainer = document.querySelector('.minigame-container'); const hiddenContainer = document.getElementById('minigame-container-hidden'); const gauge = document.getElementById('gauge'); const timerDisplay = document.getElementById('timer'); const resistButton = document.getElementById('resistButton'); const overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'; overlay.style.zIndex = '1000'; overlay.style.display = 'none'; document.body.appendChild(overlay); const resetGame = () => { progress = 0; timeLeft = settings.timeLeft || 10; gameStarted = false; gauge.style.width = '0%'; timerDisplay.textContent = timeLeft; }; let timerInterval, decreaseInterval; const updateGauge = () => { gauge.style.width = `${progress}%`; }; const endGame = (win) => { clearInterval(decreaseInterval); clearInterval(timerInterval); if (win) { SugarCube.State.variables.resistMinigameWinCount += 1; console.log("Successfully resisted AVA:", SugarCube.State.variables.resistMinigameWinCount); overlay.style.display = 'block'; setTimeout(() => { overlay.style.display = 'none'; }, 2000); minigameContainer.style.display = 'none'; hiddenContainer.style.display = 'block'; } else { SugarCube.UI.alert('You failed to resist!'); SugarCube.State.variables.resistMinigameFailCount += 1; console.log("Failed to resist AVA:", SugarCube.State.variables.resistMinigameFailCount); resetGame(); } }; resistButton.addEventListener('click', () => { if (SugarCube.State.variables.mentalCondition === "Dysphoric") { SugarCube.UI.alert("Your mental condition is too compromised to resist."); return; } if (!gameStarted) { if (SugarCube.State.variables.implantCharge < resistanceCost) { SugarCube.UI.alert("Not enough charge"); return; } else { if (SugarCube.State.variables.implantCharge - resistanceCost < 0) { SugarCube.State.variables.implantCharge = 0; } else { SugarCube.State.variables.implantCharge -= resistanceCost; } $(document).trigger(":liveupdate"); } if (SugarCube.State.variables.mentalCondition === "Unstable") { timeLeft /= 2; } gameStarted = true; timerInterval = setInterval(() => { if (--timeLeft <= 0) { endGame(false); } timerDisplay.textContent = `${timeLeft}`; }, 1000); decreaseInterval = setInterval(() => { if (progress > 0) { progress -= fallRate; updateGauge(); } }, fallInterval); } progress += fillAmount; if (progress >= 100) { progress = 100; updateGauge(); endGame(true); } else { updateGauge(); } }); } initializeMinigame({resistanceCost: 20}); <</script>><</done>>
<span id="lick"><<nobr>>@@.pink-choicebutton;<<button "Lick">>\ <<replace "#lick">> <<include "RayTaxiMission-InvestigateSounds-Lick">> <</replace>> <</button>>@@ <div class="minigame-container"> <div class="resist-instructions" id="instructions">Resist AVA's suggestion and reveal other options by repeatedly clicking the Resist button.</div> <div class="energy-container"> <span class="energy-label">Implant charge cost: </span> <span class="energy-value" id="energy">20%</span> </div> <div class="timer-container"> <span class="timer-label">Time to resist: </span> <span class="timer-value" id="timer"><<if $mentalCondition === "Unstable">><<print 10/2>><<else>>10<</if>></span> <span class="timer-value"> seconds</span> </div> <div class="gauge-container"> <div class="gauge" id="gauge"></div> </div> <button class="pink-mindware-button" id="resistButton">Resist</button> <<if $minigameSkipButtons === true>> <button class="pink-mindware-button" id="skipButton">Skip (Instant Win)</button> <</if>> </div> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "That's enough">> <<replace "#lick">> <<include "RayTaxiMission-FocusOnMission-TooLate">> <</replace>> <</button>>@@ </div> <<done>><<script>> function initializeMinigame(settings) { var progress = 0; var timeLeft = settings.timeLeft || 10; var fillAmount = settings.fillAmount || 4.5; var fallRate = settings.fallRate || 3.5; var fallInterval = settings.fallInterval || 200; var gameStarted = false; var resistanceCost = settings.resistanceCost || 20; const minigameContainer = document.querySelector('.minigame-container'); const hiddenContainer = document.getElementById('minigame-container-hidden'); const gauge = document.getElementById('gauge'); const timerDisplay = document.getElementById('timer'); const resistButton = document.getElementById('resistButton'); const skipButton = document.getElementById('skipButton'); const overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'; overlay.style.zIndex = '1000'; overlay.style.display = 'none'; document.body.appendChild(overlay); const resetGame = () => { progress = 0; timeLeft = settings.timeLeft || 10; gameStarted = false; gauge.style.width = '0%'; timerDisplay.textContent = timeLeft; }; let timerInterval, decreaseInterval; const updateGauge = () => { gauge.style.width = `${progress}%`; }; const endGame = (win) => { clearInterval(decreaseInterval); clearInterval(timerInterval); if (win) { SugarCube.State.variables.resistMinigameWinCount += 1; console.log("Successfully resisted AVA:", SugarCube.State.variables.resistMinigameWinCount); overlay.style.display = 'block'; setTimeout(() => { overlay.style.display = 'none'; }, 2000); minigameContainer.style.display = 'none'; hiddenContainer.style.display = 'block'; } else { SugarCube.UI.alert('You failed to resist!'); SugarCube.State.variables.resistMinigameFailCount += 1; console.log("Failed to resist AVA:", SugarCube.State.variables.resistMinigameFailCount); resetGame(); } }; resistButton.addEventListener('click', () => { if (SugarCube.State.variables.mentalCondition === "Dysphoric") { SugarCube.UI.alert("Your mental condition is too compromised to resist."); return; } if (!gameStarted) { if (SugarCube.State.variables.implantCharge < resistanceCost) { SugarCube.UI.alert("Not enough charge"); return; } else { if (SugarCube.State.variables.implantCharge - resistanceCost < 0) { SugarCube.State.variables.implantCharge = 0; } else { SugarCube.State.variables.implantCharge -= resistanceCost; } $(document).trigger(":liveupdate"); } if (SugarCube.State.variables.mentalCondition === "Unstable") { timeLeft /= 2; } gameStarted = true; timerInterval = setInterval(() => { if (--timeLeft <= 0) { endGame(false); } timerDisplay.textContent = `${timeLeft}`; }, 1000); decreaseInterval = setInterval(() => { if (progress > 0) { progress -= fallRate; updateGauge(); } }, fallInterval); } progress += fillAmount; if (progress >= 100) { progress = 100; updateGauge(); endGame(true); } else { updateGauge(); } }); if (skipButton) { skipButton.addEventListener('click', () => { endGame(true); }); } } initializeMinigame({resistanceCost: 20}); <</script>><</done>><</nobr>></span>
<span id="lick"><<nobr>>@@.pink-choicebutton;<<button "Lick">>\ <<replace "#lick">> <<include "RayTaxiMission-InvestigateSounds-Lick">> <</replace>> <</button>>@@ <div class="minigame-container"> <div class="resist-instructions" id="instructions">Resist AVA's suggestion and reveal other options by repeatedly clicking the Resist button.</div> <div class="energy-container"> <span class="energy-label">Implant charge cost: </span> <span class="energy-value" id="energy">20%</span> </div> <div class="timer-container"> <span class="timer-label">Time to resist: </span> <span class="timer-value" id="timer"><<if $mentalCondition === "Unstable">><<print 10/2>><<else>>10<</if>></span> <span class="timer-value"> seconds</span> </div> <div class="gauge-container"> <div class="gauge" id="gauge"></div> </div> <button class="pink-mindware-button" id="resistButton">Resist</button> <<if $minigameSkipButtons === true>> <button class="pink-mindware-button" id="skipButton">Skip (Instant Win)</button> <</if>> </div> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "That's enough">> <<replace "#lick">> <<include "RayTaxiMission-FocusOnMission-TooLate">> <</replace>> <</button>>@@ </div> <<done>><<script>> (function() { function initializeMinigame(settings) { var progress = 0; var timeLeft = settings.timeLeft || 10; var fillAmount = settings.fillAmount || 4.5; var fallRate = settings.fallRate || 3.5; var fallInterval = settings.fallInterval || 200; var gameStarted = false; var resistanceCost = settings.resistanceCost || 20; const minigameContainer = document.querySelector('.minigame-container'); const hiddenContainer = document.getElementById('minigame-container-hidden'); const gauge = document.getElementById('gauge'); const timerDisplay = document.getElementById('timer'); const resistButton = document.getElementById('resistButton'); const skipButton = document.getElementById('skipButton'); const overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'; overlay.style.zIndex = '1000'; overlay.style.display = 'none'; document.body.appendChild(overlay); const resetGame = () => { progress = 0; timeLeft = settings.timeLeft || 10; gameStarted = false; gauge.style.width = '0%'; timerDisplay.textContent = timeLeft; }; let timerInterval, decreaseInterval; const updateGauge = () => { gauge.style.width = `${progress}%`; }; const endGame = (win) => { clearInterval(decreaseInterval); clearInterval(timerInterval); if (win) { SugarCube.State.variables.resistMinigameWinCount += 1; console.log("Successfully resisted AVA:", SugarCube.State.variables.resistMinigameWinCount); overlay.style.display = 'block'; setTimeout(() => { overlay.style.display = 'none'; }, 2000); minigameContainer.style.display = 'none'; hiddenContainer.style.display = 'block'; } else { SugarCube.UI.alert('You failed to resist!'); SugarCube.State.variables.resistMinigameFailCount += 1; console.log("Failed to resist AVA:", SugarCube.State.variables.resistMinigameFailCount); resetGame(); } }; resistButton.addEventListener('click', () => { if (SugarCube.State.variables.mentalCondition === "Dysphoric") { SugarCube.UI.alert("Your mental condition is too compromised to resist."); return; } if (!gameStarted) { if (SugarCube.State.variables.implantCharge < resistanceCost) { SugarCube.UI.alert("Not enough charge"); return; } else { if (SugarCube.State.variables.implantCharge - resistanceCost < 0) { SugarCube.State.variables.implantCharge = 0; } else { SugarCube.State.variables.implantCharge -= resistanceCost; } $(document).trigger(":liveupdate"); } if (SugarCube.State.variables.mentalCondition === "Unstable") { timeLeft /= 2; } gameStarted = true; timerInterval = setInterval(() => { if (--timeLeft <= 0) { endGame(false); } timerDisplay.textContent = `${timeLeft}`; }, 1000); decreaseInterval = setInterval(() => { if (progress > 0) { progress -= fallRate; updateGauge(); } }, fallInterval); } progress += fillAmount; if (progress >= 100) { progress = 100; updateGauge(); endGame(true); } else { updateGauge(); } }); if (skipButton) { skipButton.addEventListener('click', () => { endGame(true); }); } } initializeMinigame({resistanceCost: 20}); })(); <</script>><</done>><</nobr>></span>
<<widget "ResistMinigameContainer">> <div class="minigame-container"> <div class="resist-instructions" id="instructions">Resist AVA's suggestion and reveal other options by repeatedly clicking the Resist button.</div> <div class="energy-container"> <span class="energy-label">Implant charge cost: </span> <span class="energy-value" id="energy">20%</span> </div> <div class="timer-container"> <span class="timer-label">Time to resist: </span> <span class="timer-value" id="timer"><<if $mentalCondition === "Unstable">><<print 10/2>><<else>>10<</if>></span> <span class="timer-value"> seconds</span> </div> <div class="gauge-container"> <div class="gauge" id="gauge"></div> </div> <button class="pink-mindware-button" id="resistButton">Resist</button> <<if $minigameSkipButtons === true>> <button class="pink-mindware-button" id="skipButton">Skip (Instant Win)</button> <</if>> </div> <</widget>>
<<script>> (function() { function initializeMinigame() { var progress = 0; var timeLeft = 10; var fillAmount = 4.5; var fallRate = 3.5; var fallInterval = 200; var gameStarted = false; var resistanceCost = 20; const minigameContainer = document.querySelector('.minigame-container'); const hiddenContainer = document.getElementById('minigame-container-hidden'); const gauge = document.getElementById('gauge'); const timerDisplay = document.getElementById('timer'); const resistButton = document.getElementById('resistButton'); const skipButton = document.getElementById('skipButton'); const overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = '0'; overlay.style.left = '0'; overlay.style.width = '100%'; overlay.style.height = '100%'; overlay.style.backgroundColor = 'rgba(0, 0, 0, 0)'; overlay.style.zIndex = '1000'; overlay.style.display = 'none'; document.body.appendChild(overlay); const resetGame = () => { progress = 0; timeLeft = settings.timeLeft || 10; gameStarted = false; gauge.style.width = '0%'; timerDisplay.textContent = timeLeft; }; let timerInterval, decreaseInterval; const updateGauge = () => { gauge.style.width = `${progress}%`; }; const endGame = (win) => { clearInterval(decreaseInterval); clearInterval(timerInterval); if (win) { SugarCube.State.variables.resistMinigameWinCount += 1; console.log("Successfully resisted AVA:", SugarCube.State.variables.resistMinigameWinCount); overlay.style.display = 'block'; setTimeout(() => { overlay.style.display = 'none'; }, 2000); minigameContainer.style.display = 'none'; hiddenContainer.style.display = 'block'; } else { SugarCube.UI.alert('You failed to resist!'); SugarCube.State.variables.resistMinigameFailCount += 1; console.log("Failed to resist AVA:", SugarCube.State.variables.resistMinigameFailCount); resetGame(); } }; resistButton.addEventListener('click', () => { if (SugarCube.State.variables.mentalCondition === "Dysphoric") { SugarCube.UI.alert("Your mental condition is too compromised to resist."); return; } if (!gameStarted) { if (SugarCube.State.variables.implantCharge < resistanceCost) { SugarCube.UI.alert("Not enough charge"); return; } else { if (SugarCube.State.variables.implantCharge - resistanceCost < 0) { SugarCube.State.variables.implantCharge = 0; } else { SugarCube.State.variables.implantCharge -= resistanceCost; } $(document).trigger(":liveupdate"); } if (SugarCube.State.variables.mentalCondition === "Unstable") { timeLeft /= 2; } gameStarted = true; timerInterval = setInterval(() => { if (--timeLeft <= 0) { endGame(false); } timerDisplay.textContent = `${timeLeft}`; }, 1000); decreaseInterval = setInterval(() => { if (progress > 0) { progress -= fallRate; updateGauge(); } }, fallInterval); } progress += fillAmount; if (progress >= 100) { progress = 100; updateGauge(); endGame(true); } else { updateGauge(); } }); if (skipButton) { skipButton.addEventListener('click', () => { endGame(true); }); } } initializeMinigame(); })(); <</script>>
@@.pink-choicebutton;<<button "True">> <<set $genderIdentityQuestionnaireQuestion3 to "true">> <<replace "#questions">> <<include "PsychologicalEvaluation1-Test-Read4">> <</replace>> <</button>>@@ <<ResistMinigameContainer>> <<done>><<include "ResistAVAMinigame-Script">><</done>> <div id="minigame-container-hidden"> <br> @@.choicebutton;<<button "False">> <<set $genderIdentityQuestionnaireQuestion3 to "false">> <<replace "#questions">> <<include "PsychologicalEvaluation1-Test-Read4">> <</replace>> <</button>>@@</div>
<div class="social-icon-container"> <a href="https://subjunctivegames.com/" class="social-icon-link" title="Subjunctive Games"><i class="fas fa-globe social-icon"></i></a> <!--<a href="https://example.com/globe" class="social-icon-link" title="TFGames.Site"><i class="fab fa-trade-federation social-icon"></i></a>--> <a href="https://discord.gg/wccdWE3sft" class="social-icon-link" title="Discord"><i class="fab fa-discord social-icon"></i></a> <a href="https://www.reddit.com/r/MindWare/" class="social-icon-link" title="Reddit"><i class="fab fa-reddit-alien social-icon"></i></a> <a href="https://www.tfgames.site/?module=viewgame&id=3203" class="social-icon-link" title="TFGames"><i class="fab fa-trade-federation social-icon"></i></a> <a href="https://twitter.com/SubjunctiveGms" class="social-icon-link" title="Twitter"><i class="fab fa-twitter social-icon"></i></a> <a href="https://www.patreon.com/SubjunctiveGames" class="social-icon-link" title="Patreon"><i class="fab fa-patreon social-icon"></i></a> <a href="https://subscribestar.adult/subjunctivegames" class="social-icon-link" title="SubscribeStar"><i class="fab fa-stripe-s social-icon"></i></a> <a href="mailto:hello@subjunctivegames.com" class="social-icon-link" title="Email"><i class="fas fa-envelope social-icon"></i></a> <!--<a href="https://itch.io" class="social-icon-link" title="Itch.io"><i class="fab fa-itch-io social-icon"></i></a>--> </div>
<div class="img-location"><img src="imgs/UI/deadend.webp" width="100%"></div> <center> <p style="color: red; font-size: 22px;"><span style="font-family: Arial">⚠️</span> Work in Progress <span style="font-family: Arial">⚠️</span></p> <p>This path is still under construction. Please check back later for updates!</p> <p>⬇ Here's what you can do instead ⬇</p> </center>\
<<nobr>><center> <p style="color: red; font-size: 22px;"><span style="font-family: Arial">⚠️</span> Work in Progress <span style="font-family: Arial">⚠️</span></p> <p>This path is still under construction. Please check back later for updates!</p> <p>⬇ Here's what you can do instead ⬇</p> </center><</nobr>>
<div class="img-location"><img src="imgs/UI/workinprogress.jpg" width="100%"></div> <center> <p style="color: red; font-size: 22px;"><span style="font-family: Arial">⚠️</span> Work in Progress <span style="font-family: Arial">⚠️</span></p> <p>This part of the game is still under construction. Please check back later for updates!</p> </center>\ \ <p class="back-link"> <<return "Go Back">> </p>
<div class="img-location"><img src="imgs/UI/workinprogress.jpg" width="100%"></div> <center> <p style="color: red; font-size: 22px;"><span style="font-family: Arial">⚠️</span> Work in Progress <span style="font-family: Arial">⚠️</span></p> <p>This part of the game is still under construction. Please check back later for updates!</p> </center>\ \ <<nobr>><p class="back-link"> <<link "Go Back">> <<set $goOutsideGoBackPassage = "WorkInProgress-SynTech">> <<goto "GoOutside">> <</link>> </p><</nobr>>
<div class="img-location"><img src="imgs/UI/workinprogress.jpg" width="100%"></div> <center> <p style="color: red; font-size: 22px;"><span style="font-family: Arial">⚠️</span> Work in Progress <span style="font-family: Arial">⚠️</span></p> <p>This part of the game is still under construction. Please check back later for updates!</p> </center>\ \ <<nobr>><p class="back-link"> <<link "Go Back">> <<set $goOutsideGoBackPassage = "WorkInProgress-Panacea">> <<goto "GoOutside">> <</link>> </p><</nobr>>
<div class="img-location"><img src="imgs/UI/endofcurrentstory.jpg" width="100%"></div> <center> <p style="color: lime; font-size: 22px;">🌟 Congratulations! 🌟</p> You've reached the current end of the story. Thank you for playing! In the next version, you will start your new job, meet your coworkers, and more. </center> <div class="social-media"> Stay tuned for more exciting updates: <div class="social-icon-container"> <a href="https://subjunctivegames.com/" class="social-icon-link" title="Subjunctive Games"><i class="fas fa-globe social-icon"></i></a> <!--<a href="https://example.com/globe" class="social-icon-link" title="TFGames.Site"><i class="fab fa-trade-federation social-icon"></i></a>--> <a href="https://twitter.com/SubjunctiveGms" class="social-icon-link" title="Twitter"><i class="fab fa-twitter social-icon"></i></a> <a href="https://www.reddit.com/r/MindWare/" class="social-icon-link" title="Reddit"><i class="fab fa-reddit-alien social-icon"></i></a> <a href="https://discord.gg/DVvhhy7U" class="social-icon-link" title="Discord"><i class="fab fa-discord social-icon"></i></a> <!--<a href="https://stripe.com" class="social-icon-link" title="SubscribeStar"><i class="fab fa-stripe-s social-icon"></i></a>--> <a href="https://www.patreon.com/SubjunctiveGames" class="social-icon-link" title="Patreon"><i class="fab fa-patreon social-icon"></i></a> <!--<a href="https://itch.io" class="social-icon-link" title="Itch.io"><i class="fab fa-itch-io social-icon"></i></a>--> </div> <hr> <p class="back-link">[[Continue Playing -> HomeBacklog]]</p>
<div class="img-location"><img src="imgs/UI/endofcurrentstory.jpg" width="100%"></div> <center> <p style="color: lime; font-size: 22px;">🌟 Congratulations! 🌟</p> You've reached the current end of the story. Thank you for playing! In the next version, you will go on a life-changing hacking mission and more. </center> <div class="social-media"> Stay tuned for more exciting updates: <<include "SocialIcons">> <hr> <p class="back-link">[[Continue Playing -> GoOutside]]</p>
<div class="img-location"><img src="imgs/UI/endofcurrentstory.jpg" width="100%"></div> <center> <p style="color: lime; font-size: 22px;">🌟 Congratulations! 🌟</p> You've reached the current end of the story. Thank you for playing! In the next version, you will learn of the consequences of your close encounter with AVA. </center> <div class="social-media"> Stay tuned for more exciting updates: <div class="social-icon-container"> <a href="https://subjunctivegames.com/" class="social-icon-link" title="Subjunctive Games"><i class="fas fa-globe social-icon"></i></a> <!--<a href="https://example.com/globe" class="social-icon-link" title="TFGames.Site"><i class="fab fa-trade-federation social-icon"></i></a>--> <a href="https://twitter.com/SubjunctiveGms" class="social-icon-link" title="Twitter"><i class="fab fa-twitter social-icon"></i></a> <a href="https://www.reddit.com/r/MindWare/" class="social-icon-link" title="Reddit"><i class="fab fa-reddit-alien social-icon"></i></a> <a href="https://discord.gg/DVvhhy7U" class="social-icon-link" title="Discord"><i class="fab fa-discord social-icon"></i></a> <a href="https://www.patreon.com/SubjunctiveGames" class="social-icon-link" title="Patreon"><i class="fab fa-patreon social-icon"></i></a> <a href="https://subscribestar.adult/subjunctivegames" class="social-icon-link" title="SubscribeStar"><i class="fab fa-stripe-s social-icon"></i></a> <a href="mailto:hello@subjunctivegames.com" class="social-icon-link" title="Email"><i class="fas fa-envelope social-icon"></i></a> <!--<a href="https://itch.io" class="social-icon-link" title="Itch.io"><i class="fab fa-itch-io social-icon"></i></a>--> </div> <hr> <p class="back-link">[[Continue Playing -> GoOutside]]</p>
<<run UIBar.show().unstow();>>\ <div class="img-location"><img src="imgs/UI/endofcurrentstory.jpg" width="100%"></div> <center> <p style="color: lime; font-size: 22px;">🌟 Congratulations! 🌟</p> You've reached the current end of the story. Thank you for playing! In the next version, you will visit Xavier and more. </center> <div class="social-media"> Stay tuned for more exciting updates: <div class="social-icon-container"> <<include "SocialIcons">> </div> <hr> <p class="back-link">[[Continue Playing -> GoOutside]]</p>
<<set $lockedUI = false>>\ <div class="img-location"><img src="imgs/UI/endofcurrentstory.jpg" width="100%"></div> <center> <p style="color: lime; font-size: 22px;">🌟 Congratulations! 🌟</p> <strong>You've reached the current end of the story, but rest assured, the story is far from over.</strong> For the next version, I will focus on making the right sidebar more useful by allowing you to move some information from the left sidebar there. I also need to fix a ton of reported bugs + polish my writing and make various tweaks to the story here and there. As far as new content goes, you can expect updates to the EroSphere club + post-surgery conversation with Cipher. </center> <div class="social-media"> Thank you for playing a stay tuned for more exciting updates: <div class="social-icon-container"> <<include "SocialIcons">> </div> <hr> <p class="back-link">[[Continue Playing -> GoOutside]]</p>
<<set $lockedUI = false>>\ <div class="img-location"><img src="imgs/UI/endofcurrentstory.jpg" width="100%"></div> <center> <p style="color: lime; font-size: 22px;">🌟 Congratulations! 🌟</p> <strong>You've reached the current end of the story, but rest assured, the story is far from over.</strong> For the next version, I will focus on making the VX implant functional, so that AVA can start showing up in the game properly. </center> <div class="social-media"> Thank you for playing a stay tuned for more exciting updates: <div class="social-icon-container"> <<include "SocialIcons">> </div> <hr> <p class="back-link">[[Continue Playing -> GoOutside]]</p>
<<set $lockedUI = false>>\ <div class="img-location"><img src="imgs/UI/endofcurrentstory.jpg" width="100%"></div> <center> <p style="color: lime; font-size: 22px;">🌟 Congratulations! 🌟</p> <strong>You've reached the current end of the story, but rest assured, the story is far from over.</strong> In the next update, I want to finish the implementation of core gameplay mechanics, add an option to skip to Chapter 1, and fix several known bugs. Once all that is done, I will continue working on the game's story. </center> <div class="social-media"> Thank you for playing a stay tuned for more exciting updates: <div class="social-icon-container"> <<include "SocialIcons">> </div> <hr> <p class="back-link">[[Continue Playing -> GoOutside]]</p>
<<set $lockedUI = false>>\ <div class="img-location"><img src="imgs/UI/endofcurrentstory.jpg" width="100%"></div> <center> <p style="color: lime; font-size: 22px;">🌟 Congratulations! 🌟</p> <strong>You've reached the current end of the story, but rest assured, the journey is far from over.</strong> In the next update, the long-awaited AI coding assistant will finally become available, and you'll get to know your BrainFry colleagues a bit closer. </center> <div class="social-media"> Thank you for playing a stay tuned for more exciting updates: <div class="social-icon-container"> <<include "SocialIcons">> </div> <hr> <p class="back-link">[[Continue Playing -> HomeBacklog]]</p>
<iframe src="https://docs.google.com/forms/d/e/1FAIpQLSfUOAW108VMT9EN3MbDwSQoDF7ocXoLYuf75WdPOjMt-15pWQ/viewform?embedded=true" width="640" height="1252" frameborder="0" marginheight="0" marginwidth="0">Loading…</iframe>
<div class="changelog-box"> <h3>Version 0.1.5 (Public)</h3> <ul> <li>Post psychological evaluation chat with Cipher.</li> <li>First transition appointment with Dr. Hart.</li> <li>First post-appointment chat with Cipher.</li> <li>Second transition appointment with Dr. Hart.</li> <li>Second post-appointment chat with Cipher.</li> <li>Third transition appointment with Dr. Hart.</li> <li>You can now change your nickname and name in the Settings menu.</li> <li>You can now change your gender in the Extra Options menu.</li> <li>Fixed a bug that caused an error in Panacea Clinic under certain conditions.</li> </ul> <h3>Version 0.1.5 (Beta 2)</h3> <ul> <li>Small tweaks to the game difficulty settings screen.</li> <li>Added the option to enable infinite action points in the Extra Options menu.</li> <li>Added a new OmniPedia section about HiveProperties.</li> <li>Fixed a formatting bug in the Go Outside passage.</li> <li>You can now get drunk and black out.</li> <li>Fixed a bug during the first hospital visit.</li> <li>Added a mobile Synapse Steady VX diagnostics report.</li> <li>Redesigned the original Synapse Steady VX report.</li> <li>The Character Profile screen now displays the correct avatar iamge.</li> <li>You can now undergo your first psychological evaluation at the Panacea Clinic to begin your physical transition.</li> </ul> <h3>Version 0.1.5 (Beta 1)</h3> <ul> <li>Fixed a bug that caused the autosave feature to not work.</li> <li>The Extra Options menu is now better protected thanks to Moran, a Discord member. Thank you!</li> <li>NEW AVATAR SYSTEM that reflects all five stages of the player character's transformation.</li> <li>New player avatar images.</li> <li>Added basic support for custom avatar images.</li> <li>You can now change your avatar in the Extra Options menu.</li> </ul> <h3>Version 0.1.4 (Public)</h3> <ul> <li>Fixed a few typos and poor word choices here and there.</li> <li>Added a random encounter when you visit the SynTech location (1 in 20 chance of happening). Hint: you need to be infected with AVA for the encounter to get naughty.</li> <li>Done some preparatory work to implement a new avatar system (will be included in the next version).</li> <li>Implemented several custom macros to change various stats.</li> <li>Made the AVA minigame far easier to reuse.</li> </ul> <h3>Version 0.1.4 (Beta 2)</h3> <ul> <li>Added a scroll to top button (you can disable it in Settings).</li> <li>Added a scroll to bottom button (you can disable it in Settings).</li> <li>Added a loading screen to initialize necessary variables. This loading screen should mark the end of issues with save compatibility.</li> <li>Fixed a bug that prevented .mov videos from playing.</li> <li>Fixed a minor layout issue with videos.</li> </ul> <h3>Version 0.1.4 (Beta)</h3> <ul> <li>Fixed: The taxi hack minigame not working when encountered for the second time.</li> <li>TRIX: find out who hacked her phone. Available when you visit BrainFry and work there three days after the taxi hack mission from Ray.</li> <li>Fixed: Start your new job mission does not succeed</li> </ul> <h3>Version 0.1.3</h3> <ul> <li>Added the first taxi camera hack mission from Ray, which leads directly to the second one.</li> <li>Added the second taxi camera hack mission from Ray.</li> <li>Added cum eating fetish.</li> <li>Added a chat with Cipher about cum eating.</li> <li>Added information about fetishes in the character screen.</li> </ul> <h3>Version 0.1.2</h3> <ul> <li>Three neuroimaging sessions with Xavier added. Supporters can skip waiting using a button in the task description (visible only with Extra Options unlocked).</li> <li>Gender change status messages now say 1 point instead of 1 points.</li> <li>Added sexuality statistics in the Character screen.</li> <li>New bar area in EroSphere.</li> <li>You can now order a drink in EroSphere (doesn't have any effects yet).</li> <li>The SynTech location is now accessible (but there's nothing to do there yet).</li> <li>You can now go inside the Panacea Clinic (but there's nothing to do there yet).</li> <li>Supporters can now teleport inside EroSphere from the Extra Options menu.</li> <li>You can now dance in EroSphere (but it doesn't lead to anything yet).</li> <li>You can now enter the Glory Booths area (but there's nothing to do there yet).</li> <li>It's no longer possible for implantCharge to be lower than 0.</li> </ul> <h3>Version 0.1.1</h3> <ul> <li>Expenses are now stored and manipulated more intelligently.</li> <li>Added Community Zone and Panacea Clinic in the navigation hub (in Chapter 1).</li> <li>Navigation hub "Go Back" links now work as they should.</li> <li>GitGud now has a hub passage.</li> <li>AI coding assistant becomes available when you work at BrainFry for the first time since your infection.</li> <li>You can talk with Yuki about your surgery.</li> <li>You can talk with Xavier about your surgery. This leads to a side mission (NOT IMPLEMENTED YET).</li> <li>There's a chance that Xavier will be "busy" when you visit him at GitGud.</li> <li>Added a few post-surgery linear passages.</li> <li>PornNexus website is now available (NOT FULLY IMPLEMENTED YET).</li> <li>BrainFry and GitGud dialogs now display in the right order (newest first).</li> <li>The prank mission now becomes available on day 4 of the open section of Chapter 1.</li> <li>Relationship status change messages are more informative.</li> <li>The Notifications box now displays available ByteBunker jobs instead of hacking targets.</li> </ul> <h3>Version 0.1.0</h3> <ul> <li>The skip prank job minigame link now works as it should.</li> <li>HOPEFULLY, sidebars and topbar are fixed.</li> <li>It's now clearer which ByteBunker jobs are taken.</li> <li>Nicer scrollbars in Safari.</li> <li>Fixed the following reported bug: Notes deleted after saving.</li> <li>Fixed the following reported bug: When starting a new game, if we change the "Stats Box" location to "Top" in the settings, there will be a padding-top (2em) applied to the CSS even if there isn't anything shown yet.</li> <li>Fixed the following reported bug: There is an S at the top of the settings menu (before the "Display Settings" text)</li> <li>Fixed the following reported bug: hypnosis screen infinitely changing gender to female</li> <li>Fixed the following reported bug: Character Profile "go back" button going to wrong passage</li> <li>EroSphere introduction now shows as intended.</li> <li>Added task descriptions during the linear section of Chapter 1.</li> <li>Added post-surgery chat with Cipher.</li> </ul> <h3>Version 0.1.0 (Beta)</h3> <ul> <li>The last Project XX hypno now affects player's gender if looked at for too long.</li> <li>Added volume slider in the sidebar music player.</li> <li>Improved how various status changes are handled.</li> <li>Fixed issues with identical actions potentially triggering multiple variable changes.</li> <li>Changed how APs are displayed.</li> <li>Changed topbar behavior.</li> <li>Fixed a back button bug on the Extendo website.</li> <li>Added an OmniPedia entry for NeoUrbania.</li> <li>Added an OmniPedia entry for SynTech.</li> <li>Added a shuffle button to the large music player.</li> <li>Finished the implementation of the Synapse Steady VX cyberware.</li> <li>Lowered the maximum number of dishes to clean.</li> <li>Fixed the following reported bug: there is an typo in emailss on the left side bar</li> <li>Fixed the following reported bug: Spilling mistake: "bathrooms of possibly hundreds of his tenatns."</li> <li>Fixed the following reported bug: The side bar comes out every time I click to move forward. After I click sleep, bam, it opens, work, bam.</li> <li>Fixed the following reported bug: "extendo.omninet" on our personal laptop "opens" someone else's laptop</li> <li>Fixed the following reported bug: Stuck within the body details section of the Quick Access Menu, clicking "Go back" Just "refreshes" the page. Refreshes is in quotes because it takes you to the same page. You can permanently get stuck in the body details page with no way to go back to where you can leave your place.</li> <li>Fixed the following reported bug: I find that whenever a track finishes, it always goes back to the top, instead of moving to the next track for me</li> <li>Fixed the following reported bug: Oh right, very minor bit of feedback: If you talk to a colleague but you dont actually talk to them (ie: you dont have anything to talk about, or you click "back" instead of picking an available topic), it probably shouldnt consume energy?</li> <li>Fixed the following reported bug: Brick breaker has no ending</li> <li>Fixed the following reported bug: Click on the Extendo website in your laptop browser, it will output an error</li> <li>Fixed the following reported bug: playing erosphere SIMS did not cost money</li> </ul> <h3>Version 0.0.9</h3> <ul> <li>Added top bar to display player stats.</li> <li>Added play stat location setting to optionally display the information in the left sidebar.</li> <li>UI is now partially visible during linear sections.</li> <li>The Synapse Steady VX implant is now functional.</li> <li>Added a character screen and a corresponding shortcut button.</li> <li>Added a computer shortcut.</li> <li>Added a right sidebar customization tip.</li> <li>Added a Start button hover effect.</li> <li>Added a Quick Start button.</li> <li>Added an option to skip the Prologue.</li> <li>Added an option to completely disable right sidebar.</li> <li>Fixed a web browser 404 page back button bug.</li> <li>The SIMS watched variable now resets as it should when the player goes to sleep.</li> <li>Added a <<link "resist minigame">><<set $rightSidebarEnabled = true>><<goto "Resist-Minigame">><</link>>.</li> </ul> <h3>Version 0.0.8</h3> <ul> <li>Added sidebar settings (visible only when the right sidebar is visible).</li> <li>Successful bruteforce now reveals the correct password.</li> <li>Added an <<link "optional hacking job">><<set $totalDays = 10>><<set $chapter1Days = 2>><<set $introOver = true>><<set $jobBoardFirstVisit = false>><<goto "HomeBacklog">><</link>>. Becomes available on the second day of Chapter 1.</li> <li>Added mobile compatibility warning.</li> <li>Added <<link "S.I.M.S. pods">><<goto "EroSphere-SIMSPods">><</link>> in EroSphere.</li> <li>Fixed empty space at the bottom of passages.</li> </ul> <h3>Version 0.0.7</h3> <ul> <li>Added a main story mission: <<link "GitGud Synapse Steady VX installation">><<run UIBar.hide().stow();>><<goto "UrgentRequest-AfterHospital-Sleep">><</link>>.</li> <li>Tweaked dialog boxes.</li> <li>Implemented right sidebar.</li> <li>Slight changes to certain dialogs for better consistency.</li> <li>Fixed a lot of minor bugs found using SugarValidator.</li> </ul> <h3>Version 0.0.6</h3> <ul> <li>Added Panacea Clinic as a new location.</li> <li>Added a main story mission: [[hospital visit|UrgentRequest-server-wiping-new-wake-up]].</li> <li>Added a photosensitivity warning.</li> <li>Notifications change color based on their number (1 = yellow, 2 = orange, 3+ = red).</li> <li>Improved email client design to make read and unread emails more distinct.</li> <li>Added the ability to change the first name, last name, and nickname in the Extra Options menu.</li> <li>Added the option to enable "Skip Minigame" buttons in the Extra Options menu.</li> </ul> <h3>Version 0.0.5</h3> <ul> <li>Adjusted coding minigame reward.</li> <li>Adjusted starting money.</li> <li>Added a rent mechanic.</li> <li>Added a Hive Properties website.</li> <li>Added a Hive Properties email.</li> <li>Added expenses tracking.</li> <li>Added a bug report form.</li> <li>Fixed a bunch of typos.</li> <li>Fixed the Download Wiper Tool / Save Target button order issue.</li> <li>Fixed the long black tunnel animation delay by implementing a preload function and optimizing the animation itself.</li> <li>Added [[EroSphere location|EroSphere-Outside]].</li> <li>Added EroSphere pole dancing.</li> <li>Added EroSphere dishwashing minigame.</li> <li>Added quick access buttons tooltips.</li> <li>Adjusted Project XX text.</li> <li>Improved Prologue pacing.</li> </ul> <h3>Version 0.0.4</h3> <ul> <li>Improved email messages.</li> <li>Added EroSphere promo email.</li> <li>Added an <<link "urgent request from Cipher">><<set $brainFryFirstVisit = false>><<set $dayOfWeek = "Monday">><<set $introOver = true>><<run MindWare.addInstantMessage('cipherInstantMessages', 'Urgent Request', 'IMApp-CipherLynx-UrgentRequest', 'Cipher', true, true);>><<set $cipherUrgentRequestSent = true>><<goto "Quest-CipherLynx-UrgentRequest-Introduction">><</link>>.</li> <li>Added a chapter transition screen.</li> <li>Landlord mission is now time-sensitive.</li> <li>Added Extra Options menu.</li> </ul> <h3>Version 0.0.3</h3> <ul> <li>Improved email client.</li> <li>Improved job descriptions.</li> <li>Tweaked introduction.</li> <li>Added inventory mechanics.</li> <li>Added a <<link "BrainFry mission">><<set $brainFryFirstVisit = false>><<set $dayOfWeek = "Monday">><<set $introOver = true>><<goto "GitGudDelivery-Intro">><</link>>.</li> <li>Added a chat with Cipher about the BrainFry mission.</li> <li>Added contextual narrative messages with quick links.</li> <li>Added OmniPedia.</li> <li>Added OmniNet page in OmniPedia.</li> <li>Removed the player sexuality variable.</li> <li>Removed a warning about sleep not working.</li> </ul> <h3>Version 0.0.2</h3> <ul> <li>Adjusted the difficulty of the hacking minigame.</li> <li>Adjusted the sleep delay duration.</li> <li>Added minigame difficulty setting.</li> <li>Added text increase/decrease buttons in the settings menu.</li> <li>Added a notification system.</li> <li>Added an instant messenger app.</li> <li>Added two chat conversations with Cipher.</li> <li>Added a BrainFry work introduction.</li> <li>Added three work conversations.</li> <li>Added a BrainFry work minigame.</li> <li>Added a quick access menu for apps.</li> <li>Added a player sexuality variable.</li> <li>Added a week cycle.</li> <li>Added an image lightbox (used in the instant messenger app).</li> <li>Fixed several bugs.</li> <li>Tweaked many things.</li> </ul> <h3>Version 0.0.1</h3> <ul> <li>Initial release.</li> </ul> </div>
<div class="character-creator-container">\ <h2>Create Your Character</h2>\ <div class="character-creator-input-group">\ <label for="firstName"><strong>First Name:</strong></label>\ <input type="text" id="firstName" name="firstName" value="John">\ </div>\ <div class="character-creator-input-group">\ <label for="lastName"><strong>Last Name:</strong></label>\ <input type="text" id="lastName" name="lastName" value="Doe">\ </div>\ <div class="character-creator-input-group">\ <label for="nickname"><strong>Nickname (Online Handle):</strong></label>\ <input type="text" id="nickname" name="nickname" value="Ghost">\ </div> <<include "CharacterCreator-Avatar">> <!-- Add more input fields and attributes as needed -->\ </div>\ <<if $tutorialCharacterCreation === false>><div id="tutorial-box"><div class="instruction-container-blue">\ <div class="instruction-title-bar-blue">Tutorial: Character Creation <button class="tutorial-close-button" onclick="SugarCube.State.variables.tutorialCharacterCreation = true; document.getElementById('tutorial-box').style.display = 'none';"><span style="tutorial-close-button"><i class="fas fa-times-circle"></i></span></button></div>\ <div class="instruction-content">\ <p>Please provide your character's name and nickname. Additionally, select an avatar for your character. This avatar will be your visual representation in dialog boxes throughout the game, and it does not influence gameplay mechanics.</p>\ </div></div> </div><<else>><</if>>\ \ <div class="back-done-buttons">\ <<button "Go Back" "Start">><</button>>\ <<button "Done">> <<set $playerName to jQuery("#firstName").val()>> <<set $playerLastName to jQuery("#lastName").val()>> <<set $playerNickname to jQuery("#nickname").val()>> <<run selectAvatar()>> <<goto "GameplaySettings">> <</button>> </div> \
<div class="character-creator-avatar-selector"> <button id="prevAvatar" class="character-creator-avatar-arrow">←</button> <div class="character-creator-avatar-preview" id="avatarPreview"></div> <button id="nextAvatar" class="character-creator-avatar-arrow">→</button> </div> <div class="female-avatar-preview-link"> <a id="femaleAvatarLink" class="link-internal">Preview Female Version</a> </div>\ \ <<script>> $(document).ready(function() { var currentAvatarIndex = State.variables.playerNewAvatarSelected || 0; function avatarPreview(index) { var avatars = State.variables.playerNewAvatar; if (avatars && avatars.length > 0) { console.log("Setting avatar to index:", index); console.log("Avatar image URL:", avatars[index]); $('#avatarPreview').css('background-image', 'url("' + avatars[index] + '")'); } else { console.error("No avatars available to display."); } } function updateAvatarPreview(direction) { var avatars = State.variables.playerNewAvatar; currentAvatarIndex = (currentAvatarIndex + direction + avatars.length) % avatars.length; avatarPreview(currentAvatarIndex); State.variables.playerNewAvatarSelected = currentAvatarIndex; } function updateFemaleAvatarPreview() { var avatars = State.variables.playerNewAvatar; var currentAvatar = avatars[currentAvatarIndex]; var femaleAvatar = currentAvatar.replace(/(\d+)\.webp$/, "5.webp"); Dialog.setup("Female"); Dialog.wiki('<img src="' + femaleAvatar + '" alt="Female Avatar" style="max-width:250px; max-height:250px;">'); Dialog.open(); } // Initialize the avatar preview avatarPreview(currentAvatarIndex); // Set up event listeners $('#prevAvatar').on('click', function() { updateAvatarPreview(-1); }); $('#nextAvatar').on('click', function() { updateAvatarPreview(1); }); $('#femaleAvatarLink').on('click', updateFemaleAvatarPreview); // Expose the selectAvatar function for use in other parts of your game window.selectAvatar = function() { State.variables.playerAvatarNewSelected = currentAvatarIndex; }; }); <</script>>
<style> .character-screen { background-color: #121212; color: #55BBBC; padding: 20px; border: 1px solid #55BBBC; box-shadow: 0 0 20px #00ffea; margin-bottom: 20px; } .character-profile-box { display: flex; justify-content: space-between; align-items: center; flex-grow: 1; background-color: black; border: 2px solid #00ffea; padding: 15px; padding-left: 20px; /* Space from the character info */ margin-bottom: 50px; line-height: 0; } .avatar-section { border-right: 2px solid #00ffea; margin-right: 20px; } .avatar-section .profile-avatar { width: 120px; height: 120px; margin-right: 20px; } .character-body img { display: block; max-width: 100%; /* Adjusts image to fit the container */ margin: 0 auto; /* Centers image */ } .character-info-section .info-label { font-weight: bold; margin-right: 5px; line-height: 1.75; } .body-attributes .attributes-heading, .character-stats .stats-heading { color: #55BBBC; border-bottom: 1px solid #55BBBC; padding-bottom: 5px; margin-bottom: 10px; } .attributes-list, .stats-list { list-style: none; padding: 0; margin: 0; } .attributes-list li, .stats-list li { padding: 8px 0; border-bottom: 1px dashed #55BBBC; } .attr-label, .stat-label { font-weight: bold; } .stat-value, .stat-value { float: right; font-weight: normal; } .attributes-list li:last-child, .stats-list li:last-child { border-bottom: none; } .view-options { display: flex; justify-content: center; margin-top: 20px; } .view-options button { background-color: transparent; color: #00ffea; /* Neon color for text */ border: 1px solid #00ffea; /* Neon border */ padding: 10px 20px; border-radius: 5px; cursor: pointer; margin: 0 10px; transition: all 0.3s ease; /* Smooth transition for color changes */ position: relative; /* Needed for after pseudo-element */ overflow: hidden; /* Ensures pseudo-elements don't extend outside the button */ } /* Hover state */ .view-options button:hover { color: #121212 !important; /* Dark color for text to contrast with the bright background */ background-color: #00ffea; /* Neon background */ } /* Active (click) state */ .view-options button:active { transform: translateY(2px); /* Slight movement to simulate a click */ } /* Neon glow effect on hover */ .view-options button:hover::after { } .active-button button { background-color: #00ffea !important; color: #121212 !important; /* Neon color for text */ pointer-events: none; } /* Ensuring the glow effect fades in smoothly */ .view-options button::after { content: ''; position: absolute; top: -50%; right: -50%; bottom: -50%; left: -50%; border-radius: inherit; /* Inherit the button's border-radius */ background-color: #00ffea; z-index: -1; filter: blur(10px); /* Creates the glow effect */ opacity: 0; /* Starts out fully transparent */ transition: opacity 0.3s ease; } .implants-section { display: flex; flex-direction: column; /* Changes to column to stack the label and the box container */ align-items: flex-end; flex-grow: 1; padding-left: 20px; /* Space from the character info */ } .implants-container { display: flex; /* New container for horizontal layout */ justify-content: right; width: 100%; /* Takes the full width of its parent container */ } .implant-box { border: 2px solid #00ffea; /* Blue border for the implant boxes */ width: 120px; /* Adjust width as needed */ height: 120px; /* Adjust height as needed */ display: flex; justify-content: center; margin-left: 20px; align-items: center; flex-direction: column; /* Aligns content vertically */ padding: 5px; /* Adds padding inside the box for better text fitting */ box-sizing: border-box; /* Ensures padding doesn't add to the box's size */ } .implant-text, .implants-label { color: #55BBBC; /* Styling the text color to fit the theme */ text-align: center; /* Centers the label text */ width: 100%; /* Ensures the label spans the full width of its container */ word-wrap: break-word; /* Ensures long words don't overflow the container */ font-size: 0.8em; padding: 2px; /* Adds a little padding for spacing */ line-height: 1.2; /* Adjusts line height for better text appearance */ } .implant-image { max-width: 80%; /* Adjusts the image to not overflow its container */ max-height: 80%; object-fit: contain; /* Maintains the aspect ratio of the image */ } .fetish-section { margin-top: 20px; } .fetish-heading { color: #55BBBC; border-bottom: 1px solid #55BBBC; padding-bottom: 5px; margin-bottom: 10px; } .fetish-container { display: flex; flex-wrap: wrap; gap: 10px; } .fetish-box { width: 100px; height: 100px; border: 2px solid #00ffea; display: flex; justify-content: center; align-items: center; background-color: #121212; transition: all 0.3s ease; } .fetish-box:hover { transform: scale(2); box-shadow: 0 0 10px #00ffea; } .fetish-icon { max-width: 80%; max-height: 80%; object-fit: contain; } </style> <<set _avatars to $playerNewAvatar>> <<set _selectedAvatarIndex to $playerNewAvatarSelected>> <<set _playerBody to $playerBody>> <<if def _avatars && def _selectedAvatarIndex && def _playerBody>> <<set _currentAvatar to _avatars[_selectedAvatarIndex]>> <<set _bodyTypeIndex to { "Masculine": 1, "Masculine-Leaning": 2, "Androgynous": 3, "Feminine-Leaning": 4, "Feminine": 5 }[_playerBody] ?? 1>> <<set _updatedAvatar to _currentAvatar.replace(/(\d+)\.webp$/, _bodyTypeIndex + ".webp")>> <<else>> <<set _updatedAvatar to "">> <</if>> <div class="character-screen"> <div class="character-profile-box"> <div class="avatar-section"> <<print '<img src="' + _updatedAvatar + '" alt="Player Avatar" class="profile-avatar">'>> </div> <div class="character-info-section"> <span class="info-label">Name:</span> $playerName <br><span class="info-label">Last Name:</span> $playerLastName <br><span class="info-label">Nickname:</span> $playerNickname <!-- Additional character info here --> </div> <div class="implants-section"> <div class="implants-container"> <div class="implant-box"> <<if $synapseSteadyVXInstalled === true>> <img src="imgs/items/synapse-steady-vx-cropped.webp" alt="Synapse Steady VX" title="Synapse Steady VX" class="implant-image"> <<else>> <span class="implant-text">Empty Implant Slot</span> <</if>> </div> <div class="implant-box"> <!-- Placeholder for a second implant. --> <span class="implant-text">Empty Implant Slot</span> </div> </div> </div> </div> <div class="character-body"> <span id="body-image"><<include "CharacterBodyFront">></span> </div> <div class="view-options"> <span id="front-button"><<button "View Front">> <<set _characterView = "front">> <<addclass "#front-button" "active-button">> <<removeclass "#back-button" "active-button">> <<replace "#body-image">> <<include "CharacterBodyFront">> <</replace>> <</button>></span> <span id="back-button"><<button "View Back">> <<set _characterView = "back">> <<addclass "#back-button" "active-button">> <<removeclass "#front-button" "active-button">> <<replace "#body-image">> <<include "CharacterBodyBack">> <</replace>> <</button>></span> </div> <br> <div class="character-stats"> <h3 class="stats-heading">Physique</h3> <ul class="stats-list"> <li><span class="stat-label">Body:</span> <span class="stat-value">$playerBody</span></li> <li><span class="stat-label">Breast:</span> <span class="stat-value">$playerBreast</span></li> <li><span class="stat-label">Buttocks:</span> <span class="stat-value">$playerButtocks</span></li> <li><span class="stat-label">Genitals:</span> <span class="stat-value">$playerGenitals</span></li> </ul> </div> <div class="character-stats"> <h3 class="stats-heading">Identity</h3> <ul class="stats-list"> <li><span class="stat-label">Gender:</span> <span class="stat-value">$playerGender out of 100 (<<print MindWare.getGenderStatus()>>)</span></li> <li><span class="stat-label">Morality:</span> <span class="stat-value">$playerMorality out of 100 (<<print MindWare.getMoralityStatus()>>)</span></li> <!-- Additional stats here --> </ul> </div> <div class="character-stats"> <h3 class="stats-heading">Sexuality</h3> <ul class="stats-list"> <li> <span class="stat-label">Female encounters:</span> <span class="stat-value"> <<if typeof $femaleEncounters !== "undefined">> <<print $femaleEncounters>> <<else>> 0 <</if>> </span> </li> <li> <span class="stat-label">Male encounters:</span> <span class="stat-value"> <<if typeof $maleEncounters !== "undefined">> <<print $maleEncounters>> <<else>> 0 <</if>> </span> </li> <li> <span class="stat-label">Trans encounters:</span> <span class="stat-value"> <<if typeof $transEncounters !== "undefined">> <<print $transEncounters>> <<else>> 0 <</if>> </span> </li> <li> <span class="stat-label">Submissive acts:</span> <span class="stat-value"> <<if typeof $submissiveActs !== "undefined">> <<print $submissiveActs>> <<else>> 0 <</if>> </span> </li> <li> <span class="stat-label">Dominant acts:</span> <span class="stat-value"> <<if typeof $dominantActs !== "undefined">> <<print $dominantActs>> <<else>> 0 <</if>> </span> </li> <!-- Additional stats here --> </ul> </div> <div class="fetish-section"> <h3 class="fetish-heading">Fetishes</h3> <div class="fetish-container"> <<if $cumEating > 0>> <div class="fetish-box"> <!-- Placeholder for fetish icon --> <img src="imgs/fetishes/cum-eating/cum-eating.webp" title="Cum eating" alt="Cum eating" class="fetish-icon"> </div> <</if>> <<if $pissFetish > 0>> <div class="fetish-box"> <!-- Placeholder for fetish icon --> <img src="imgs/fetishes/piss-fetish/piss-fetish.webp" title="Piss fetish" alt="Piss fetish" class="fetish-icon"> </div> <</if>> /* <<else>> <span style="Color: White;">You don't have any distinct fetishes.</span> <</if>> */ </div> </div> </div> <br> <p class="back-link"> <<link "Go Back" $returnPassage>> <<set $navigatedFromSidebar to false>> <</link>> </p> <<set _characterView = "front">> <<done>> <<if _characterView === "front">> <<addclass "#front-button" "active-button">> <</if>> <<if _characterView === "back">> <<addclass "#back-button" "active-button">> <</if>> <</done>>
<<if $playerBody === "Feminine" && $playerBreast === "Huge">> <img src="imgs/characters/player/body/front/5-female-front-huge-cropped.png" alt="Player Wireframe" class="body-image"> <<elseif $playerBody === "Feminine" && $playerBreast === "Large">> <img src="imgs/characters/player/body/front/5-female-front-large-cropped.png" alt="Player Wireframe" class="body-image"> <<elseif $playerBody === "Feminine">> <img src="imgs/characters/player/body/front/5-female-front-average-cropped.png" alt="Player Wireframe" class="body-image"> <<elseif $playerBody === "Feminine-Leaning">> <img src="imgs/characters/player/body/front/4-female-aligned-front-cropped.png" alt="Player Wireframe" class="body-image"> <<elseif $playerBody === "Androgynous">> <img src="imgs/characters/player/body/front/3-androgynous-front-cropped.png" alt="Player Wireframe" class="body-image"> <<elseif $playerBody === "Masculine-Leaning">> <img src="imgs/characters/player/body/front/2-male-aligned-front-cropped.png" alt="Player Wireframe" class="body-image"> <<elseif $playerBody === "Masculine">> <img src="imgs/characters/player/body/front/1-male-front-cropped.png" alt="Player Wireframe" class="body-image"> <</if>>
<<if $playerBody === "Feminine" && $playerButtocks === "Huge">> <img src="imgs/characters/player/body/rear/5-female-rear-huge-cropped.webp" alt="Player Wireframe" class="body-image"> <<elseif $playerBody === "Feminine" && $playerButtocks === "Large">> <img src="imgs/characters/player/body/rear/5-female-rear-large-cropped.webp" alt="Player Wireframe" class="body-image"> <<elseif $playerBody === "Feminine">> <img src="imgs/characters/player/body/rear/5-female-rear-average-cropped.webp" alt="Player Wireframe" class="body-image"> <<elseif $playerBody === "Feminine-Leaning">> <img src="imgs/characters/player/body/rear/4-female-aligned-rear-cropped.webp" alt="Player Wireframe" class="body-image"> <<elseif $playerBody === "Androgynous">> <img src="imgs/characters/player/body/rear/3-androgynous-rear-cropped.webp" alt="Player Wireframe" class="body-image"> <<elseif $playerBody === "Masculine-Leaning">> <img src="imgs/characters/player/body/rear/2-male-aligned-rear-cropped.webp" alt="Player Wireframe" class="body-image"> <<elseif $playerBody === "Masculine">> <img src="imgs/characters/player/body/rear/1-male-rear-cropped.webp" alt="Player Wireframe" class="body-image"> <</if>>
<p>Extra options are available only in a version of MindWare exclusive to <a href="https://www.patreon.com/SubjunctiveGames">Patreon</a> and <a hreat="https://subscribestar.adult/subjunctivegames">SubscribeStar</a> supporters.</p> <p>Supported options:</p> <ul> <li>Teleport to a passage</li> <li>Disable fade effects (time delay)</li> <li>Skip minigames</li> <li>Add money</li> <li>Add action points</li> <li>Change your avatar image, first name, last name, and nickname.</li> </ul> <p>Additionally, all supporters can use the Quick Start menu and download an offline version of MindWare to play without an internet connection.</p>
This interactive story was created using <a href="https://twinery.org/">Twine</a>, a versatile engine designed for crafting interactive narratives, and <a href="https://www.motoslave.net/sugarcube/2/docs/">SugarCube</a>, a popular story format for Twine. It was written in the Twee notation and compiled using <a href="https://www.motoslave.net/tweego/">Tweego</a>. A huge thanks to <a href="https://github.com/ChapelR">ChapelR</a> for the fantastic collection of SugarCube macros. I also want to thank Goctionni for his invaluable <a href="https://github.com/Goctionni/SugarValidator">SugarValidator tool</a>. MindWare would be a much buggier game without it. The hacking animation was developed by <a href="https://codepen.io/Fuzzylavender/details/QWBOeyW">Yashasree</a> The firewall breach minigame was developed by <a href="https://codepen.io/yashbhardwaj/details/AmZGQN">Yash Bhardwaj</a>. The dish washing minigame is based on code by <a href="https://codepen.io/Totati/pen/pPXrJV">Totati</a>. The waiting clock is made by <a href="https://github.com/prodev2004/clock-loader/">prodev2004.</a> To update the Synapse Steady VX implant battery charge information in real time, I'm using the <a href="https://github.com/cyrusfirheir/cycy-wrote-custom-macros/tree/master/live-update">Live Update macro</a> by cyrusfirheir. <hr> To my incredibly generous Patreon and SubscribeStar supporters, thank you from the bottom of my heart! 💖 A heartfelt hug to my Elite-level supporters: <ul> <li>adamdubai</li> <li>Alex</li> <li>Bryan</li> <li>Cashandbrand</li> <li>emperorfrieza</li> <li>jed</li> <li>Joe Kain</li> <li>Lemonmasacre</li> <li>lookformee</li> <li>M G</li> <li>Matthew Cook</li> <li>Robert Holt</li> <li>Sissy Alice</li> <li>Sxftboi</li> <li>TAIGA</li> </ul> A special thank you to lookformee, who moderates our Discord server with unparalleled dedication and enthusiasm.
<<inv $inventory>> <<for _item, _amount range $inventory.table>> <div class='item-listing'>_item (_amount)</div> <</for>>
<div class="cyberplayer-container-sidebar">\ <div class="cyberplayer-title">Music Player</div>\ <ul class="cyberplayer-playlist-sidebar" id="cyberplayer-playlist"> <!-- Songs will be loaded here by the JavaScript code -->\ </ul>\ <div class="cyberplayer-now-playing"> <b>Now Playing:</b> <br><span class="cyberplayer-current-song"></span> </div>\ <div class="cyberplayer-control-center">\ <button class="cyberplayer-control-button" onclick="togglePlayback()">⏯</button>\ <!-- Volume Control --> <input type="range" id="volumeControl" value="100" min="0" max="100" oninput="setVolume(this.value)"> </div>\ </div>\ <<script>> // Wait for the DOM to be ready $(document).ready(function() { var playlist = $('#cyberplayer-playlist'); playlist.empty(); // Clear the existing playlist items // Ensure that $mySongs is available and is an array if (Array.isArray(State.variables.mySongs)) { // Iterate over the songs and append them to the playlist State.variables.mySongs.forEach(function(song) { playlist.append( '<li class="cyberplayer-song" data-filename="' + song.filename + '">' + '<span class="cyberplayer-song-title">' + song.title + '</span> - ' + '<span class="cyberplayer-song-artist">' + song.artist + '</span>' + '</li>' ); }); } }); <</script>> <script> // Set the volume from the volume slider function setVolume(volume) { if (window.audio) { window.audio.volume = volume / 100; } } $(document).on(":passageready", function() { // Set initial volume if (window.audio) { let volumeSlider = document.getElementById('volumeControl'); if (volumeSlider) { window.audio.volume = volumeSlider.value / 100; } } }); </script>
<<if $musicPlayerLeft === true>>\ <<include "CyberPlayer">> <</if>>\
<div class="cyberplayer-container-sidebar-clone">\ <div class="cyberplayer-title-clone">Music Library</div> <ul class="cyberplayer-playlist-sidebar-clone" id="cyberplayer-playlist-clone"> <!-- Songs will be loaded here by the JavaScript code -->\ </ul> <div class="cyberplayer-now-playing-clone"> <b>Now Playing:</b> <span class="cyberplayer-current-song-clone"></span>\ </div> <div class="cyberplayer-control-center-clone">\ <button class="cyberplayer-control-button-clone" onclick="togglePlaybackClone()">⏯ Play/Pause</button>\ <button class="cyberplayer-shuffle-button" onclick="shufflePlaylistClone()">🔀 Shuffle</button>\ </div>\ </div>\ [[Go Back -> HomeBacklog]] | [[Save|ListenToMusic]] \ <<if $tutorialMusicPlayer === false>> <div id="tutorial-box-1"><div class="instruction-container-blue">\ <div class="instruction-title-bar-blue">Tutorial: Music Player <button class="tutorial-close-button" onclick="SugarCube.State.variables.tutorialMusicPlayer = true; document.getElementById('tutorial-box-1').style.display = 'none';"><span style="tutorial-close-button"><i class="fas fa-times-circle"></i></span></button></div>\ <div class="instruction-content">\ <p>Here, you can organize your music playlist to change the order of your songs. When you're done, click the Save button or go back to the previous passage. Your sidebar music player will be automatically updated as well.</p>\ </div>\ </div> </div>\ <<else>>\ <</if>>\ <<if $tipBuyMoreSongs === false>>\ <div id="tutorial-box-2"><div class="instruction-container-green">\ <div class="instruction-title-bar-green">Tip: Purchase More Songs <button class="tutorial-close-button" onclick="SugarCube.State.variables.tipBuyMoreSongs = true; document.getElementById('tutorial-box-2').style.display = 'none';"><span style="tutorial-close-button"><i class="fas fa-times-circle"></i></span></button></div>\ <div class="instruction-content">\ <p>Looking for more tunes? Head over to the File Junkie online store and add new tracks to your collection!</p>\ </div></div></div>\ <<else>>\ <</if>>\ \ <<script>> // Function to move songs up or down window.moveSongClone = function(index, direction) { var songs = State.variables.mySongs; var newIndex = index + direction; // Check if the new index is within the range of the array if (newIndex >= 0 && newIndex < songs.length) { // Swap the songs var temp = songs[newIndex]; songs[newIndex] = songs[index]; songs[index] = temp; // Save the modified array back into the state variable State.variables.mySongs = songs; // Refresh the playlist display refreshPlaylistClone(); } }; // Function to refresh the playlist display function refreshPlaylistClone() { var playlistClone = $('#cyberplayer-playlist-clone'); playlistClone.empty(); // Clear the existing playlist items // Ensure that $mySongs is available and is an array if (Array.isArray(State.variables.mySongs)) { // Iterate over the songs and append them to the playlist State.variables.mySongs.forEach(function(song, index) { playlistClone.append( '<li class="cyberplayer-song-clone" data-filename="' + song.filename + '">' + '<div class="song-details-clone">' + '<span class="cyberplayer-song-title-clone">' + song.title + '</span> - ' + '<span class="cyberplayer-song-artist-clone">' + song.artist + '</span>' + '</div>' + '<div class="song-move-buttons">' + '<button class="move-up-clone" onclick="moveSongClone(' + index + ', -1)">↑</button>' + '<button class="move-down-clone" onclick="moveSongClone(' + index + ', 1)">↓</button>' + '</div>' + '</li>' ); }); } } window.shufflePlaylistClone = function() { let songs = State.variables.mySongs; for (let i = songs.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [songs[i], songs[j]] = [songs[j], songs[i]]; // swap elements } State.variables.mySongs = songs; // Update the global state refreshPlaylistClone(); // Refresh the playlist display } // Clone the setup for the new player $(document).ready(function() { refreshPlaylistClone(); // Call the refresh function to populate the playlist }); <</script>>
<<if tags().includes("bbar")>> <div id="bottombar"><div id="bbblock"><div id="bbtext">Put your bottom bar text here.</div></div></div> <</if>>
<<if $introOver && $statsBoxLocation === "top">> <div id="topbar"><div id="tbblock"><div id="tbtext"> <span class="stat-item-top-first"> <span class="stat-icon-top">🗓️</span> <span class="stat-label">Day:</span> <span class="stat-data">$dayOfWeek</span> </span> <span class="stat-item-top"> <span class="stat-icon-top">💰</span> <span class="stat-label">Money:</span> <span class="stat-data"><<print "$" + $playerMoney.toLocaleString("en-US", { minimumFractionDigits: 0, maximumFractionDigits: 0 })>></span> </span> <span class="stat-item-top"> <span class="stat-icon-top">🧾</span> <span class="stat-label">Weekly Expenses:</span> <span class="stat-data"><<print "$" + MindWare.calculateTotalExpenses().toLocaleString("en-US", { minimumFractionDigits: 0, maximumFractionDigits: 0 })>></span> </span> /* <span class="stat-item-top"> <span class="stat-icon-top">⚡</span> <span class="stat-label">Action Points:</span> <span class="stat-data">$actionPoints/5</span> </span> */ <span class="stat-item-top"> <span class="stat-icon-top">⚧</span> <span class="stat-label">Gender:</span> <span class="stat-data"><<print MindWare.getGenderStatus()>></span> </span> <span class="stat-item-top"> <span class="stat-icon-top">⚖️</span> <span class="stat-label">Morality:</span> <span class="stat-data"><<print MindWare.getMoralityStatus()>></span> </span> <span class="stat-item-top-last"> <<if $infiniteActionPoints>> <span class="stat-icon-top">♾️ ⚡</span> <<elseif $actionPoints > 0>> <<for _i = 1; _i <= $actionPoints; _i++>> <span class="stat-icon-top">⚡</span> <</for>> <<else>> <span class="stat-icon-top">💤</span> <</if>> </span> </div></div></div> <</if>>
<h2>Step 1: Choose Where You Want to Start From</h2> <div class="skip-options"> <<if $skipOption is "Intro">> <span class="skip-option">@@.quickstart-button;<<button "Prologue">> <<set $skipOption to 'Intro'>> <<goto "QuickStart">> <</button>>@@</span> <<else>> <span class="skip-option"><<button "Prologue">> <<set $skipOption to 'Intro'>> <<goto "QuickStart">> <</button>></span> <</if>> <<if $skipOption is "Chapter1Intro">> <span class="skip-option">@@.quickstart-button;<<button "Chapter 1 Linear Section">> <<set $skipOption to "Chapter1Intro">> <<goto "QuickStart">> <</button>>@@</span> <<else>> <span class="skip-option"><<button "Chapter 1 Linear Section">> <<set $skipOption to "Chapter1Intro">> <<goto "QuickStart">> <</button>></span> <</if>> <<if $skipOption is "Chapter1Free">> <span class="skip-option">@@.quickstart-button;<<button "Chapter 1 Free Roam Section">> <<set $skipOption to "Chapter1Free">> <<goto "QuickStart">> <</button>>@@</span> <<else>> <span class="skip-option"><<button "Chapter 1 Free Roam Section">> <<set $skipOption to "Chapter1Free">> <<goto "QuickStart">> <</button>></span> <</if>> </div> <h2>Step 2: Configure Variables</h2> <div class="quickstart-config-section"> <h2>Required Variables</h2> <div class="quickstart-config-item"> <label><strong>First Name:</strong></label> <<textbox "$playerName" "John">> </div> <div class="quickstart-config-item"> <label><strong>Last Name:</strong></label> <<textbox "$playerLastName" "Doe">> </div> <div class="quickstart-config-item"> <label><strong>Nickname (Online Handle):</strong></label> <<textbox "$playerNickname" "Ghost">> </div> <div class="quickstart-config-item"> <label><strong>Minigame difficulty:</strong></label> <ul class="no-bullets"> <li> <<radiobutton "$miniGameDifficulty" "Normal" autocheck checked>> <strong>Normal:</strong> For players seeking a balanced challenge. </li> <li> <<radiobutton "$miniGameDifficulty" "Easy" autocheck>> <strong>Easy:</strong> A less challenging experience for those who don't want to struggle. </li> <li> <<radiobutton "$miniGameDifficulty" "Story" autocheck>> <strong>Easiest:</strong> Focus on the narrative with minimal gameplay challenge. </li> </ul> </div> <div class="quickstart-config-item"> <label><strong>Avatar:</strong></label> <<include "CharacterCreator-Avatar">> </div> </div> <div class="quickstart-config-section"> <h2>Optional Variables</h2> <div class="quickstart-config-item"> <label><strong>Money:</strong></label> <<listbox "$playerMoney">> <<option "Default" $playerMoney autoselect>> <<option "$2,500" "2500">> <<option "$5,000" "5000">> <<option "$10,000" "10000">> <</listbox>> </div> </div> <<if $skipOption === "Chapter1Intro">> <<include "Chapter1IntroConfig">> <</if>> <<if $skipOption === "Chapter1Free">> <<include "Chapter1IntroConfig">> <<include "Chapter1FreeConfig">> <</if>> <div class="back-done-buttons"> <<button "Go Back" "Start">><</button>> <<button "Done">> <<if $skipOption === "Intro">> <<include "SkipIntroductionVariables">> <!-- done --> <<set $quickStartPath = true>> <<include "QuickStartScripts">> <<goto "HomeBacklog">> <<elseif $skipOption === "Chapter1Intro">> <<include "Chapter1SkipToStartVariables">> <!-- done --> <<set $quickStartPath = true>> <<include "QuickStartScripts">> <<include "Chapter1SkipToStartScripts">> <<goto "UrgentRequest-server-wiping-new-wake-up">> <<elseif $skipOption === "Chapter1Free">> <<include "Chapter1SkipToOpenVariables">> <!-- done --> <<set $quickStartPath = true>> <<include "QuickStartScripts">> <<include "Chapter1SkipToStartScripts">> <<include "Chapter1SkipToOpenScripts">> <<goto "HomeBacklog-Chapter1-Open-Start-Wakeup">> <<else>> <<run UI.alert("Please select where you want to skip to.")>> <</if>> <</button>> </div>
<<if $quickStartPath === true && $quickStartScriptExecuted !== true>> /* Days and Work */ <<if $skipOption === "Chapter1Intro">> <<set $brainFryWorkCount = 6>> <<set $totalDays = 8>> <<elseif $skipOption === "Chapter1Free">> <<set $brainFryWorkCount = 6>> <<set $totalDays = 13>> <<set $chapter1Days = 1>> <</if>> <<set $lockedUI = false>> <<set $quickStartScriptExecuted to true>> <</if>>
<<run selectAvatar()>> <<set $cipherMemeOpened = true>> <<run MindWare.markEmailAsRead("Email-CipherFirstJobIntro")>> <<run MindWare.addTask("Find spy camera feeds", "Task-LandlordJob")>> <<set $introOver = true>> <<set $jobBoardFirstVisit = false>> <<set $illegalSpyingJobAccepted = true>> <<run MindWare.addInstantMessage('cipherInstantMessages', 'Landlord Job', 'IMApp-CipherLynx-Landlord', 'Cipher', true, true);>> <<run setup.changeByteBunkerJobAcceptedStatus("LandlordJob", true)>> <<run MindWare.addEmail ("ConcernedTenant01","Info for the Landlord Job", "First off, huge thanks for taking this on. You have no idea how much this means to all of us here.", "Email-LandlordJobInfo")>>
/* For Skip Prologue */ <<run selectAvatar()>> <<set $cipherMemeOpened = true>> <<run MindWare.markEmailAsRead("Email-CipherFirstJobIntro")>> <<set $introOver = true>> <<set $jobBoardFirstVisit = false>> <<set $illegalSpyingJobAccepted = true>> <<run setup.changeByteBunkerJobAcceptedStatus("LandlordJob", true)>> <<run MindWare.addEmail ("ConcernedTenant01","Info for the Landlord Job", "First off, huge thanks for taking this on. You have no idea how much this means to all of us here.", "Email-LandlordJobInfo")>> /* For Chapter 1 Start*/ <<run MindWare.markEmailAsRead("Email-LandlordJobInfo")>> <<run MindWare.addTask("Continue the grind", "Task-ContinueTheGrind");>> <<set $gitGutDeliveryStarted = true>> <<set $gitGutUnlocked = true>> <<set $gitGutIntroduced = true>> <<set $cipherUrgentRequestSent = true>> <<run setup.addHackingTool("Data Wiper")>> <<set $prologueCompleted = true>> <<set $brainFryFirstVisit to false>>
<<if $spyingLandlordExposed === true>> <<increasemorality>> <<run MindWare.addEmail ("ConcernedTenant01","Thank You!", "I can't even begin to express my gratitude. You've done something incredible here.", "Email-LandlordJobFinishGood")>> <<run MindWare.markEmailAsRead("Email-LandlordJobFinishGood")>> <<set $playerMoney to $playerMoney + 1500>> <</if>> <<if $spyingLandlordExposed === false>> <<decreasemorality>> <<run MindWare.addEmail ("ConcernedTenant01","Appreciate the effort", "Thanks for giving it a shot. I'm a bit surprised and disappointed that nothing turned up, but I guess these things happen.", "Email-LandlordJobFinishBad")>> <<run MindWare.markEmailAsRead("Email-LandlordJobFinishBad")>> <</if>> <<if $playerComplimentedTrixHair>> <<relationshipIncreasedWith "Trix" 1>> <</if>> <<if $GitGudSIMSExperience && $GitGudSIMSExperienceLiked>> <<relationshipIncreasedWith "Drake" 10>> <</if>> <<if $GitGudSIMSExperience === true && $GitGudSIMSExperienceLiked === false>> <<relationshipIncreasedWith "Drake" 10>> <</if>> <<if $staredAtProjectXXTooLong>> <<genderFeminine 5>> <</if>>
<div class="quickstart-config-section" id="chapter1-config"> <h2>Prologue Variables</h2> <div class="quickstart-config-item"> <label><strong>Spying landlord mission finished:</strong></label> <<listbox "$spyingLandlordFinished">> <<option "False" false>> <<option "True" true>> <</listbox>> </div> <div class="quickstart-config-item" id="spying-landlord" style="display: none;"> <label><strong>Spying landlord exposed:</strong></label> <<listbox "$spyingLandlordExposed">> <<option "False" false>> <<option "True" true>> <</listbox>> </div> <div class="quickstart-config-item"> <label><strong>Complimented Trix:</strong></label> <<listbox "$playerComplimentedTrixHair">> <<option "False" false>> <<option "True" true>> <</listbox>> </div> <div class="quickstart-config-item"> <label><strong>Peeked during the GitGud delivery mission:</strong></label> <<listbox "$GitGudIntroductionPeeked">> <<option "False" false>> <<option "True" true>> <</listbox>> </div> <div class="quickstart-config-item"> <label><strong>Tried S.I.M.S. during the GitGud delivery mission:</strong></label> <<listbox "$GitGudSIMSExperience">> <<option "False" false>> <<option "True" true>> <</listbox>> </div> <div class="quickstart-config-item" id="gitgud-sims-liked" style="display: none;"> <label><strong>Enjoyed the S.I.M.S.:</strong></label> <<listbox "$GitGudSIMSExperienceLiked">> <<option "False" false>> <<option "True" true>> <</listbox>> </div> <div class="quickstart-config-item"> <label><strong>Stared at Project XX hypno too long:</strong></label> <<listbox "$staredAtProjectXXTooLong">> <<option "False" false>> <<option "True" true>> <</listbox>> </div> </div> <<script>> $(document).one(':passagerender', function (event) { $(event.content).find('[name="listbox-spyinglandlordfinished"]').on('change', function() { var selected = $(this).find(":selected").text(); if (selected === "True") { $("#spying-landlord").show(); } else { $("#spying-landlord").hide(); } }); $(event.content).find('[name="listbox-gitgudsimsexperience"]').on('change', function() { var selected = $(this).find(":selected").text(); if (selected === "True") { $("#gitgud-sims-liked").show(); } else { $("#gitgud-sims-liked").hide(); } }); }); <</script>>
/* For Skip Prologue */ <<run selectAvatar()>> <<set $cipherMemeOpened = true>> <<run MindWare.markEmailAsRead("Email-CipherFirstJobIntro")>> <<set $introOver = true>> <<set $jobBoardFirstVisit = false>> <<set $illegalSpyingJobAccepted = true>> <<run setup.changeByteBunkerJobAcceptedStatus("LandlordJob", true)>> <<run MindWare.addEmail ("ConcernedTenant01","Info for the Landlord Job", "First off, huge thanks for taking this on. You have no idea how much this means to all of us here.", "Email-LandlordJobInfo")>> /* For Chapter 1 Start*/ <<run MindWare.markEmailAsRead("Email-LandlordJobInfo")>> <<run MindWare.addTask("Continue the grind", "Task-ContinueTheGrind");>> <<set $gitGutDeliveryStarted = true>> <<set $gitGutUnlocked = true>> <<set $gitGutIntroduced = true>> <<set $cipherUrgentRequestSent = true>> <<run setup.addHackingTool("Data Wiper")>> <<set $prologueCompleted = true>> <<set $brainFryFirstVisit to false>> /* For Chapter 1 Open */ <<set $chapter1Started to true>>
/* Chapter 1 Linear Section */ <<if $hospitalIntroPlayerInsisted === true>> <<decreasemorality>> <</if>> <<if $hospitalExaminationResisted === true>> <<genderMasculine 5>> <</if>> <<if $hospitalExaminationResisted === false>> <<genderFeminine 5>> <</if>> <<if $talkedWithYukiAboutBrother === true>> <<relationshipIncreasedWith "Yuki" 5>> <</if>> <<if $playerToldXavierTruthAboutAI === true>> <<relationshipIncreasedWith "Xavier" 5>> <</if>> <<if $gitgudExaminationResisted === true || $gitgudExaminationResisted === false>> <<relationshipIncreasedWith "Xavier" 5>> <</if>> <<if $synapseSteadyVXInstalled === true>> <<set $rightSidebarEnabled = true>> <</if>>
<div class="quickstart-config-section" id="chapter1-config"> <h2>Chapter 1 Linear Section Variables</h2> <div class="quickstart-config-item"> <label><strong>Player demanded to skip the queue at the hospital:</strong></label> <<listbox "$hospitalIntroPlayerInsisted">> <<option "False" false>> <<option "True" true>> <</listbox>> </div> <div class="quickstart-config-item"> <label><strong>Player resisted AVA during hospital examination:</strong></label> <<listbox "$hospitalExaminationResisted">> <<option "False" false>> <<option "True" true>> <</listbox>> </div> <div class="quickstart-config-item"> <label><strong>Player told Cipher everything about hospital visions:</strong></label> <<listbox "$playerToldCipherEverythingAboutHospitalVisions">> <<option "False" false>> <<option "True" true>> <</listbox>> </div> <div class="quickstart-config-item"> <label><strong>Player talked with Yuki about her brother:</strong></label> <<listbox "$talkedWithYukiAboutBrother">> <<option "False" false>> <<option "True" true>> <</listbox>> </div> <div class="quickstart-config-item"> <label><strong>Player told Xavier the full truth about the AI:</strong></label> <<listbox "$playerToldXavierTruthAboutAI">> <<option "False" false>> <<option "True" true>> <</listbox>> </div> <div class="quickstart-config-item"> <label><strong>Player accepted Xavier's implant deal:</strong></label> <<listbox "$playerAcceptedXavierCyberwareDeal">> <<option "False" false>> <<option "True" true>> <</listbox>> </div> <div class="quickstart-config-item"> <label><strong>Player resisted AVA during when diagnosed by Xavier:</strong></label> <<listbox "$gitgudExaminationResisted">> <<option "False" false>> <<option "True" true>> <</listbox>> </div> <div class="quickstart-config-item"> <label><strong>Player wants AVA's visions to return:</strong></label> <<listbox "$installImplantPlayerWantsVisionsToReturn">> <<option "False" false>> <<option "Not sure" "">> <<option "True" true>> <</listbox>> </div> <div class="quickstart-config-item"> <label><strong>Player decided to install the Synapse Steady VX implant:</strong></label> <<listbox "$synapseSteadyVXInstalled">> <<option "True" true>> <</listbox>> </div> </div>
<<nobr>><div class="synapse-box"> <h3>Synapse Steady VX</h3> <<if $mentalCondition is "Stable">> <div class="brain-icon"> <svg fill="#0F0" height="100px" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 463 463" xml:space="preserve"> <?xml version="1.0" encoding="iso-8859-1"?> <g> <path d="M151.245,222.446C148.054,237.039,135.036,248,119.5,248c-4.142,0-7.5,3.357-7.5,7.5s3.358,7.5,7.5,7.5 c23.774,0,43.522-17.557,46.966-40.386c14.556-1.574,27.993-8.06,38.395-18.677c2.899-2.959,2.85-7.708-0.109-10.606 c-2.958-2.897-7.707-2.851-10.606,0.108C184.947,202.829,172.643,208,159.5,208c-26.743,0-48.5-21.757-48.5-48.5 c0-4.143-3.358-7.5-7.5-7.5s-7.5,3.357-7.5,7.5C96,191.715,120.119,218.384,151.245,222.446z"/> <path d="M183,287.5c0-4.143-3.358-7.5-7.5-7.5c-35.014,0-63.5,28.486-63.5,63.5c0,0.362,0.013,0.725,0.019,1.088 C109.23,344.212,106.39,344,103.5,344c-4.142,0-7.5,3.357-7.5,7.5s3.358,7.5,7.5,7.5c26.743,0,48.5,21.757,48.5,48.5 c0,4.143,3.358,7.5,7.5,7.5s7.5-3.357,7.5-7.5c0-26.611-16.462-49.437-39.731-58.867c-0.178-1.699-0.269-3.418-0.269-5.133 c0-26.743,21.757-48.5,48.5-48.5C179.642,295,183,291.643,183,287.5z"/> <path d="M439,223.5c0-17.075-6.82-33.256-18.875-45.156c1.909-6.108,2.875-12.426,2.875-18.844 c0-30.874-22.152-56.659-51.394-62.329C373.841,91.6,375,85.628,375,79.5c0-19.557-11.883-36.387-28.806-43.661 C317.999,13.383,287.162,0,263.5,0c-13.153,0-24.817,6.468-32,16.384C224.317,6.468,212.653,0,199.5,0 c-23.662,0-54.499,13.383-82.694,35.839C99.883,43.113,88,59.943,88,79.5c0,6.128,1.159,12.1,3.394,17.671 C62.152,102.841,40,128.626,40,159.5c0,6.418,0.965,12.735,2.875,18.844C30.82,190.244,24,206.425,24,223.5 c0,13.348,4.149,25.741,11.213,35.975C27.872,270.087,24,282.466,24,295.5c0,23.088,12.587,44.242,32.516,55.396 C56.173,353.748,56,356.626,56,359.5c0,31.144,20.315,58.679,49.79,68.063C118.611,449.505,141.965,463,167.5,463 c27.995,0,52.269-16.181,64-39.674c11.731,23.493,36.005,39.674,64,39.674c25.535,0,48.889-13.495,61.71-35.437 c29.475-9.385,49.79-36.92,49.79-68.063c0-2.874-0.173-5.752-0.516-8.604C426.413,339.742,439,318.588,439,295.5 c0-13.034-3.872-25.413-11.213-36.025C434.851,249.241,439,236.848,439,223.5z M167.5,448c-21.029,0-40.191-11.594-50.009-30.256 c-0.973-1.849-2.671-3.208-4.688-3.751C88.19,407.369,71,384.961,71,359.5c0-3.81,0.384-7.626,1.141-11.344 c0.702-3.447-1.087-6.92-4.302-8.35C50.32,332.018,39,314.626,39,295.5c0-8.699,2.256-17.014,6.561-24.379 C56.757,280.992,71.436,287,87.5,287c4.142,0,7.5-3.357,7.5-7.5s-3.358-7.5-7.5-7.5C60.757,272,39,250.243,39,223.5 c0-14.396,6.352-27.964,17.428-37.221c2.5-2.09,3.365-5.555,2.14-8.574C56.2,171.869,55,165.744,55,159.5 c0-26.743,21.757-48.5,48.5-48.5s48.5,21.757,48.5,48.5c0,4.143,3.358,7.5,7.5,7.5s7.5-3.357,7.5-7.5 c0-33.642-26.302-61.243-59.421-63.355C104.577,91.127,103,85.421,103,79.5c0-13.369,8.116-24.875,19.678-29.859 c0.447-0.133,0.885-0.307,1.308-0.527C127.568,47.752,131.447,47,135.5,47c12.557,0,23.767,7.021,29.256,18.325 c1.81,3.727,6.298,5.281,10.023,3.47c3.726-1.809,5.28-6.296,3.47-10.022c-6.266-12.903-18.125-22.177-31.782-25.462 C165.609,21.631,184.454,15,199.5,15c13.509,0,24.5,10.99,24.5,24.5v97.051c-6.739-5.346-15.25-8.551-24.5-8.551 c-4.142,0-7.5,3.357-7.5,7.5s3.358,7.5,7.5,7.5c13.509,0,24.5,10.99,24.5,24.5v180.279c-9.325-12.031-22.471-21.111-37.935-25.266 c-3.999-1.071-8.114,1.297-9.189,5.297c-1.075,4.001,1.297,8.115,5.297,9.189C206.8,343.616,224,366.027,224,391.5 C224,422.654,198.654,448,167.5,448z M395.161,339.807c-3.215,1.43-5.004,4.902-4.302,8.35c0.757,3.718,1.141,7.534,1.141,11.344 c0,25.461-17.19,47.869-41.803,54.493c-2.017,0.543-3.716,1.902-4.688,3.751C335.691,436.406,316.529,448,295.5,448 c-31.154,0-56.5-25.346-56.5-56.5c0-2.109-0.098-4.2-0.281-6.271c0.178-0.641,0.281-1.314,0.281-2.012V135.5 c0-13.51,10.991-24.5,24.5-24.5c4.142,0,7.5-3.357,7.5-7.5s-3.358-7.5-7.5-7.5c-9.25,0-17.761,3.205-24.5,8.551V39.5 c0-13.51,10.991-24.5,24.5-24.5c15.046,0,33.891,6.631,53.033,18.311c-13.657,3.284-25.516,12.559-31.782,25.462 c-1.81,3.727-0.256,8.214,3.47,10.022c3.726,1.81,8.213,0.257,10.023-3.47C303.733,54.021,314.943,47,327.5,47 c4.053,0,7.933,0.752,11.514,2.114c0.422,0.22,0.86,0.393,1.305,0.526C351.883,54.624,360,66.13,360,79.5 c0,5.921-1.577,11.627-4.579,16.645C322.302,98.257,296,125.858,296,159.5c0,4.143,3.358,7.5,7.5,7.5s7.5-3.357,7.5-7.5 c0-26.743,21.757-48.5,48.5-48.5s48.5,21.757,48.5,48.5c0,6.244-1.2,12.369-3.567,18.205c-1.225,3.02-0.36,6.484,2.14,8.574 C417.648,195.536,424,209.104,424,223.5c0,26.743-21.757,48.5-48.5,48.5c-4.142,0-7.5,3.357-7.5,7.5s3.358,7.5,7.5,7.5 c16.064,0,30.743-6.008,41.939-15.879c4.306,7.365,6.561,15.68,6.561,24.379C424,314.626,412.68,332.018,395.161,339.807z"/> <path d="M359.5,240c-15.536,0-28.554-10.961-31.745-25.554C358.881,210.384,383,183.715,383,151.5c0-4.143-3.358-7.5-7.5-7.5 s-7.5,3.357-7.5,7.5c0,26.743-21.757,48.5-48.5,48.5c-13.143,0-25.447-5.171-34.646-14.561c-2.898-2.958-7.647-3.007-10.606-0.108 s-3.008,7.647-0.109,10.606c10.402,10.617,23.839,17.103,38.395,18.677C315.978,237.443,335.726,255,359.5,255 c4.142,0,7.5-3.357,7.5-7.5S363.642,240,359.5,240z"/> <path d="M335.5,328c-2.89,0-5.73,0.212-8.519,0.588c0.006-0.363,0.019-0.726,0.019-1.088c0-35.014-28.486-63.5-63.5-63.5 c-4.142,0-7.5,3.357-7.5,7.5s3.358,7.5,7.5,7.5c26.743,0,48.5,21.757,48.5,48.5c0,1.714-0.091,3.434-0.269,5.133 C288.462,342.063,272,364.889,272,391.5c0,4.143,3.358,7.5,7.5,7.5s7.5-3.357,7.5-7.5c0-26.743,21.757-48.5,48.5-48.5 c4.142,0,7.5-3.357,7.5-7.5S339.642,328,335.5,328z"/> </g> </svg> </div> <<elseif $mentalCondition is "Unstable">> <div class="brain-icon"> <svg fill="#FFFF00" height="100px" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 463 463" xml:space="preserve"> <?xml version="1.0" encoding="iso-8859-1"?> <g> <path d="M151.245,222.446C148.054,237.039,135.036,248,119.5,248c-4.142,0-7.5,3.357-7.5,7.5s3.358,7.5,7.5,7.5 c23.774,0,43.522-17.557,46.966-40.386c14.556-1.574,27.993-8.06,38.395-18.677c2.899-2.959,2.85-7.708-0.109-10.606 c-2.958-2.897-7.707-2.851-10.606,0.108C184.947,202.829,172.643,208,159.5,208c-26.743,0-48.5-21.757-48.5-48.5 c0-4.143-3.358-7.5-7.5-7.5s-7.5,3.357-7.5,7.5C96,191.715,120.119,218.384,151.245,222.446z"/> <path d="M183,287.5c0-4.143-3.358-7.5-7.5-7.5c-35.014,0-63.5,28.486-63.5,63.5c0,0.362,0.013,0.725,0.019,1.088 C109.23,344.212,106.39,344,103.5,344c-4.142,0-7.5,3.357-7.5,7.5s3.358,7.5,7.5,7.5c26.743,0,48.5,21.757,48.5,48.5 c0,4.143,3.358,7.5,7.5,7.5s7.5-3.357,7.5-7.5c0-26.611-16.462-49.437-39.731-58.867c-0.178-1.699-0.269-3.418-0.269-5.133 c0-26.743,21.757-48.5,48.5-48.5C179.642,295,183,291.643,183,287.5z"/> <path d="M439,223.5c0-17.075-6.82-33.256-18.875-45.156c1.909-6.108,2.875-12.426,2.875-18.844 c0-30.874-22.152-56.659-51.394-62.329C373.841,91.6,375,85.628,375,79.5c0-19.557-11.883-36.387-28.806-43.661 C317.999,13.383,287.162,0,263.5,0c-13.153,0-24.817,6.468-32,16.384C224.317,6.468,212.653,0,199.5,0 c-23.662,0-54.499,13.383-82.694,35.839C99.883,43.113,88,59.943,88,79.5c0,6.128,1.159,12.1,3.394,17.671 C62.152,102.841,40,128.626,40,159.5c0,6.418,0.965,12.735,2.875,18.844C30.82,190.244,24,206.425,24,223.5 c0,13.348,4.149,25.741,11.213,35.975C27.872,270.087,24,282.466,24,295.5c0,23.088,12.587,44.242,32.516,55.396 C56.173,353.748,56,356.626,56,359.5c0,31.144,20.315,58.679,49.79,68.063C118.611,449.505,141.965,463,167.5,463 c27.995,0,52.269-16.181,64-39.674c11.731,23.493,36.005,39.674,64,39.674c25.535,0,48.889-13.495,61.71-35.437 c29.475-9.385,49.79-36.92,49.79-68.063c0-2.874-0.173-5.752-0.516-8.604C426.413,339.742,439,318.588,439,295.5 c0-13.034-3.872-25.413-11.213-36.025C434.851,249.241,439,236.848,439,223.5z M167.5,448c-21.029,0-40.191-11.594-50.009-30.256 c-0.973-1.849-2.671-3.208-4.688-3.751C88.19,407.369,71,384.961,71,359.5c0-3.81,0.384-7.626,1.141-11.344 c0.702-3.447-1.087-6.92-4.302-8.35C50.32,332.018,39,314.626,39,295.5c0-8.699,2.256-17.014,6.561-24.379 C56.757,280.992,71.436,287,87.5,287c4.142,0,7.5-3.357,7.5-7.5s-3.358-7.5-7.5-7.5C60.757,272,39,250.243,39,223.5 c0-14.396,6.352-27.964,17.428-37.221c2.5-2.09,3.365-5.555,2.14-8.574C56.2,171.869,55,165.744,55,159.5 c0-26.743,21.757-48.5,48.5-48.5s48.5,21.757,48.5,48.5c0,4.143,3.358,7.5,7.5,7.5s7.5-3.357,7.5-7.5 c0-33.642-26.302-61.243-59.421-63.355C104.577,91.127,103,85.421,103,79.5c0-13.369,8.116-24.875,19.678-29.859 c0.447-0.133,0.885-0.307,1.308-0.527C127.568,47.752,131.447,47,135.5,47c12.557,0,23.767,7.021,29.256,18.325 c1.81,3.727,6.298,5.281,10.023,3.47c3.726-1.809,5.28-6.296,3.47-10.022c-6.266-12.903-18.125-22.177-31.782-25.462 C165.609,21.631,184.454,15,199.5,15c13.509,0,24.5,10.99,24.5,24.5v97.051c-6.739-5.346-15.25-8.551-24.5-8.551 c-4.142,0-7.5,3.357-7.5,7.5s3.358,7.5,7.5,7.5c13.509,0,24.5,10.99,24.5,24.5v180.279c-9.325-12.031-22.471-21.111-37.935-25.266 c-3.999-1.071-8.114,1.297-9.189,5.297c-1.075,4.001,1.297,8.115,5.297,9.189C206.8,343.616,224,366.027,224,391.5 C224,422.654,198.654,448,167.5,448z M395.161,339.807c-3.215,1.43-5.004,4.902-4.302,8.35c0.757,3.718,1.141,7.534,1.141,11.344 c0,25.461-17.19,47.869-41.803,54.493c-2.017,0.543-3.716,1.902-4.688,3.751C335.691,436.406,316.529,448,295.5,448 c-31.154,0-56.5-25.346-56.5-56.5c0-2.109-0.098-4.2-0.281-6.271c0.178-0.641,0.281-1.314,0.281-2.012V135.5 c0-13.51,10.991-24.5,24.5-24.5c4.142,0,7.5-3.357,7.5-7.5s-3.358-7.5-7.5-7.5c-9.25,0-17.761,3.205-24.5,8.551V39.5 c0-13.51,10.991-24.5,24.5-24.5c15.046,0,33.891,6.631,53.033,18.311c-13.657,3.284-25.516,12.559-31.782,25.462 c-1.81,3.727-0.256,8.214,3.47,10.022c3.726,1.81,8.213,0.257,10.023-3.47C303.733,54.021,314.943,47,327.5,47 c4.053,0,7.933,0.752,11.514,2.114c0.422,0.22,0.86,0.393,1.305,0.526C351.883,54.624,360,66.13,360,79.5 c0,5.921-1.577,11.627-4.579,16.645C322.302,98.257,296,125.858,296,159.5c0,4.143,3.358,7.5,7.5,7.5s7.5-3.357,7.5-7.5 c0-26.743,21.757-48.5,48.5-48.5s48.5,21.757,48.5,48.5c0,6.244-1.2,12.369-3.567,18.205c-1.225,3.02-0.36,6.484,2.14,8.574 C417.648,195.536,424,209.104,424,223.5c0,26.743-21.757,48.5-48.5,48.5c-4.142,0-7.5,3.357-7.5,7.5s3.358,7.5,7.5,7.5 c16.064,0,30.743-6.008,41.939-15.879c4.306,7.365,6.561,15.68,6.561,24.379C424,314.626,412.68,332.018,395.161,339.807z"/> <path d="M359.5,240c-15.536,0-28.554-10.961-31.745-25.554C358.881,210.384,383,183.715,383,151.5c0-4.143-3.358-7.5-7.5-7.5 s-7.5,3.357-7.5,7.5c0,26.743-21.757,48.5-48.5,48.5c-13.143,0-25.447-5.171-34.646-14.561c-2.898-2.958-7.647-3.007-10.606-0.108 s-3.008,7.647-0.109,10.606c10.402,10.617,23.839,17.103,38.395,18.677C315.978,237.443,335.726,255,359.5,255 c4.142,0,7.5-3.357,7.5-7.5S363.642,240,359.5,240z"/> <path d="M335.5,328c-2.89,0-5.73,0.212-8.519,0.588c0.006-0.363,0.019-0.726,0.019-1.088c0-35.014-28.486-63.5-63.5-63.5 c-4.142,0-7.5,3.357-7.5,7.5s3.358,7.5,7.5,7.5c26.743,0,48.5,21.757,48.5,48.5c0,1.714-0.091,3.434-0.269,5.133 C288.462,342.063,272,364.889,272,391.5c0,4.143,3.358,7.5,7.5,7.5s7.5-3.357,7.5-7.5c0-26.743,21.757-48.5,48.5-48.5 c4.142,0,7.5-3.357,7.5-7.5S339.642,328,335.5,328z"/> </g> </svg> </div> <<else>> <div class="brain-icon"> <svg fill="#FF0000" height="100px" version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 463 463" xml:space="preserve"> <?xml version="1.0" encoding="iso-8859-1"?> <g> <path d="M151.245,222.446C148.054,237.039,135.036,248,119.5,248c-4.142,0-7.5,3.357-7.5,7.5s3.358,7.5,7.5,7.5 c23.774,0,43.522-17.557,46.966-40.386c14.556-1.574,27.993-8.06,38.395-18.677c2.899-2.959,2.85-7.708-0.109-10.606 c-2.958-2.897-7.707-2.851-10.606,0.108C184.947,202.829,172.643,208,159.5,208c-26.743,0-48.5-21.757-48.5-48.5 c0-4.143-3.358-7.5-7.5-7.5s-7.5,3.357-7.5,7.5C96,191.715,120.119,218.384,151.245,222.446z"/> <path d="M183,287.5c0-4.143-3.358-7.5-7.5-7.5c-35.014,0-63.5,28.486-63.5,63.5c0,0.362,0.013,0.725,0.019,1.088 C109.23,344.212,106.39,344,103.5,344c-4.142,0-7.5,3.357-7.5,7.5s3.358,7.5,7.5,7.5c26.743,0,48.5,21.757,48.5,48.5 c0,4.143,3.358,7.5,7.5,7.5s7.5-3.357,7.5-7.5c0-26.611-16.462-49.437-39.731-58.867c-0.178-1.699-0.269-3.418-0.269-5.133 c0-26.743,21.757-48.5,48.5-48.5C179.642,295,183,291.643,183,287.5z"/> <path d="M439,223.5c0-17.075-6.82-33.256-18.875-45.156c1.909-6.108,2.875-12.426,2.875-18.844 c0-30.874-22.152-56.659-51.394-62.329C373.841,91.6,375,85.628,375,79.5c0-19.557-11.883-36.387-28.806-43.661 C317.999,13.383,287.162,0,263.5,0c-13.153,0-24.817,6.468-32,16.384C224.317,6.468,212.653,0,199.5,0 c-23.662,0-54.499,13.383-82.694,35.839C99.883,43.113,88,59.943,88,79.5c0,6.128,1.159,12.1,3.394,17.671 C62.152,102.841,40,128.626,40,159.5c0,6.418,0.965,12.735,2.875,18.844C30.82,190.244,24,206.425,24,223.5 c0,13.348,4.149,25.741,11.213,35.975C27.872,270.087,24,282.466,24,295.5c0,23.088,12.587,44.242,32.516,55.396 C56.173,353.748,56,356.626,56,359.5c0,31.144,20.315,58.679,49.79,68.063C118.611,449.505,141.965,463,167.5,463 c27.995,0,52.269-16.181,64-39.674c11.731,23.493,36.005,39.674,64,39.674c25.535,0,48.889-13.495,61.71-35.437 c29.475-9.385,49.79-36.92,49.79-68.063c0-2.874-0.173-5.752-0.516-8.604C426.413,339.742,439,318.588,439,295.5 c0-13.034-3.872-25.413-11.213-36.025C434.851,249.241,439,236.848,439,223.5z M167.5,448c-21.029,0-40.191-11.594-50.009-30.256 c-0.973-1.849-2.671-3.208-4.688-3.751C88.19,407.369,71,384.961,71,359.5c0-3.81,0.384-7.626,1.141-11.344 c0.702-3.447-1.087-6.92-4.302-8.35C50.32,332.018,39,314.626,39,295.5c0-8.699,2.256-17.014,6.561-24.379 C56.757,280.992,71.436,287,87.5,287c4.142,0,7.5-3.357,7.5-7.5s-3.358-7.5-7.5-7.5C60.757,272,39,250.243,39,223.5 c0-14.396,6.352-27.964,17.428-37.221c2.5-2.09,3.365-5.555,2.14-8.574C56.2,171.869,55,165.744,55,159.5 c0-26.743,21.757-48.5,48.5-48.5s48.5,21.757,48.5,48.5c0,4.143,3.358,7.5,7.5,7.5s7.5-3.357,7.5-7.5 c0-33.642-26.302-61.243-59.421-63.355C104.577,91.127,103,85.421,103,79.5c0-13.369,8.116-24.875,19.678-29.859 c0.447-0.133,0.885-0.307,1.308-0.527C127.568,47.752,131.447,47,135.5,47c12.557,0,23.767,7.021,29.256,18.325 c1.81,3.727,6.298,5.281,10.023,3.47c3.726-1.809,5.28-6.296,3.47-10.022c-6.266-12.903-18.125-22.177-31.782-25.462 C165.609,21.631,184.454,15,199.5,15c13.509,0,24.5,10.99,24.5,24.5v97.051c-6.739-5.346-15.25-8.551-24.5-8.551 c-4.142,0-7.5,3.357-7.5,7.5s3.358,7.5,7.5,7.5c13.509,0,24.5,10.99,24.5,24.5v180.279c-9.325-12.031-22.471-21.111-37.935-25.266 c-3.999-1.071-8.114,1.297-9.189,5.297c-1.075,4.001,1.297,8.115,5.297,9.189C206.8,343.616,224,366.027,224,391.5 C224,422.654,198.654,448,167.5,448z M395.161,339.807c-3.215,1.43-5.004,4.902-4.302,8.35c0.757,3.718,1.141,7.534,1.141,11.344 c0,25.461-17.19,47.869-41.803,54.493c-2.017,0.543-3.716,1.902-4.688,3.751C335.691,436.406,316.529,448,295.5,448 c-31.154,0-56.5-25.346-56.5-56.5c0-2.109-0.098-4.2-0.281-6.271c0.178-0.641,0.281-1.314,0.281-2.012V135.5 c0-13.51,10.991-24.5,24.5-24.5c4.142,0,7.5-3.357,7.5-7.5s-3.358-7.5-7.5-7.5c-9.25,0-17.761,3.205-24.5,8.551V39.5 c0-13.51,10.991-24.5,24.5-24.5c15.046,0,33.891,6.631,53.033,18.311c-13.657,3.284-25.516,12.559-31.782,25.462 c-1.81,3.727-0.256,8.214,3.47,10.022c3.726,1.81,8.213,0.257,10.023-3.47C303.733,54.021,314.943,47,327.5,47 c4.053,0,7.933,0.752,11.514,2.114c0.422,0.22,0.86,0.393,1.305,0.526C351.883,54.624,360,66.13,360,79.5 c0,5.921-1.577,11.627-4.579,16.645C322.302,98.257,296,125.858,296,159.5c0,4.143,3.358,7.5,7.5,7.5s7.5-3.357,7.5-7.5 c0-26.743,21.757-48.5,48.5-48.5s48.5,21.757,48.5,48.5c0,6.244-1.2,12.369-3.567,18.205c-1.225,3.02-0.36,6.484,2.14,8.574 C417.648,195.536,424,209.104,424,223.5c0,26.743-21.757,48.5-48.5,48.5c-4.142,0-7.5,3.357-7.5,7.5s3.358,7.5,7.5,7.5 c16.064,0,30.743-6.008,41.939-15.879c4.306,7.365,6.561,15.68,6.561,24.379C424,314.626,412.68,332.018,395.161,339.807z"/> <path d="M359.5,240c-15.536,0-28.554-10.961-31.745-25.554C358.881,210.384,383,183.715,383,151.5c0-4.143-3.358-7.5-7.5-7.5 s-7.5,3.357-7.5,7.5c0,26.743-21.757,48.5-48.5,48.5c-13.143,0-25.447-5.171-34.646-14.561c-2.898-2.958-7.647-3.007-10.606-0.108 s-3.008,7.647-0.109,10.606c10.402,10.617,23.839,17.103,38.395,18.677C315.978,237.443,335.726,255,359.5,255 c4.142,0,7.5-3.357,7.5-7.5S363.642,240,359.5,240z"/> <path d="M335.5,328c-2.89,0-5.73,0.212-8.519,0.588c0.006-0.363,0.019-0.726,0.019-1.088c0-35.014-28.486-63.5-63.5-63.5 c-4.142,0-7.5,3.357-7.5,7.5s3.358,7.5,7.5,7.5c26.743,0,48.5,21.757,48.5,48.5c0,1.714-0.091,3.434-0.269,5.133 C288.462,342.063,272,364.889,272,391.5c0,4.143,3.358,7.5,7.5,7.5s7.5-3.357,7.5-7.5c0-26.743,21.757-48.5,48.5-48.5 c4.142,0,7.5-3.357,7.5-7.5S339.642,328,335.5,328z"/> </g> </svg> </div> <</if>> <p class="synergy-level-text">Mental Condition: <<if $mentalCondition is "Stable">> <span style="color: #00ff00;">$mentalCondition</span> <<elseif $mentalCondition is "Unstable">> <span style="color: yellow;">$mentalCondition</span> <<else>> <span style="color: red;">$mentalCondition</span> <</if>> </p> <<if $mentalCondition is "Stable">> <p class="synergy-level-description">Your mental condition is stable, and your mind is aligned with your body. <br><br> <div><<button "Read Full Report">> <<run Dialog.setup("Synapse Steady VX Mobile Diagnosis")>> <<run Dialog.wiki(Story.get("SynapseSteadyVXDiagnosisReport").processText())>> <<run Dialog.open()>><</button>></div> </p> <<elseif $mentalCondition is "Unstable">> <p class="synergy-level-description">Your mental condition is unstable, and you have less time to resist AVA's suggestions. <br><br> <div><<button "Read Full Report">> <<run Dialog.setup("Synapse Steady VX Mobile Diagnosis")>> <<run Dialog.wiki(Story.get("SynapseSteadyVXDiagnosisReport").processText())>> <<run Dialog.open()>><</button>></div> </p> <<else>> <p class="synergy-level-description">You are dysphoric because your mind isn't aligned with your body. Your are unable to resist AVA's suggestions. <br><br> <div><<button "Read Full Report">> <<run Dialog.setup("Synapse Steady VX Mobile Diagnosis")>> <<run Dialog.wiki(Story.get("SynapseSteadyVXDiagnosisReport").processText())>> <<run Dialog.open()>><</button>></div> </p> <</if>> <p class="resistance-level-text">Implant Charge:</p> <div class="resistance-progress"> <div class="resistance-bar"></div> <!-- Progress bar fill --> <div class="resistance-progress-percentage"><<live $implantCharge>>%</div> </div> </div> <<nobr>><<done>><<script>> $(document).on(":liveupdate", function() { var currentCharge = SugarCube.State.variables.implantCharge; $(".resistance-bar").css("width", currentCharge + "%"); $(".resistance-progress-percentage").text(currentCharge + "%"); }); $(document).trigger(":liveupdate"); <</script>><</done>><</nobr>> <br> <<if $statsBoxLocation === "right">> <<include "StatsBox">> <br> <</if>> <<if $quickAccessBoxLeft is false>> <<include "QuickAccessBox">> <br> <</if>> <<if $notificationsBoxLeft is false>> <<include "NotificationsBox">> <br> <</if>> <<if $todoBoxLeft is false>> <<include "TodoBox">> <</if>> <</nobr>>\ <<if $musicPlayerLeft === false>>\ <<include "CyberPlayer">> <</if>>\ <<nobr>><<if !$tipSidebarCustomizationClosed>> <<set _currentPassage = passage()>> <div id="tutorial-box"><div class="instruction-container-green"> <div class="instruction-title-bar-green">Tip: Sidebar Customization <button class="tutorial-close-button" onclick="SugarCube.State.variables.tipSidebarCustomizationClosed = true; document.getElementById('tutorial-box').style.display = 'none';"><span style="tutorial-close-button"><i class="fas fa-times-circle"></i></span></button></div> <div class="instruction-content"> <p>You can customize what information is displayed here in the Settings menu.</p> <p>For example, you can <<link "display Notifications and Tasks">>. <<set $notificationsBoxLeft = false>> <<set $todoBoxLeft = false>> <<set $tipSidebarCustomizationClosed = true>> <<goto _currentPassage>> <</link>>.</p> </div></div></div> <<else>> <</if>> <br><br> <</nobr>>
<style> .settings-menu h2 { margin-bottom: 30px; /* Space below the heading */ padding-bottom: 5px; /* Optional: padding below the text */ border-bottom: 1px solid #55BBBC; /* Optional: a line to underline the heading */ margin-top: 0px; padding-top: 0px; color: #55BBBC; font-size: 1.5em; /* AdjusSt size as needed */ } </style> <div class="settings-menu"> <h2>Character Settings</h2> <div class="gameplay-settings-group"> <div> <h3><b>Character:</b></h3> <p>First Name:<br> <<textbox "_tempPlayerName" $playerName>></p> <p>Last Name:<br> <<textbox "_tempPlayerLastName" $playerLastName>></p> <p>Nickname:<br> <<textbox "_tempPlayerNickname" $playerNickname>></p> <br> <<include "CharacterCreator-Avatar">> </div> </div> <br><br> <h2>Display Settings</h2> <strong>Text Size:</strong> <br> <a href="#" onclick="fontSize(1); return false;"><i class="fas fa-search-plus"></i> Increase</a> <br> <a href="#" onclick="fontSize(-1); return false;"><i class="fas fa-search-minus"></i> Decrease</a> <br><br> <div class="settings-option"> <strong>Scroll to Top Button:</strong> <br> <<checkbox "$scrollToTopEnabled" false true autocheck>> Enable the scroll to top button </div> <br> <div class="settings-option"> <strong>Scroll to Bottom Button:</strong> <br> <<checkbox "$scrollToBottomEnabled" false true autocheck>> Enable the scroll to bottom button </div> <br><br> <h2>Gameplay Settings</h2> <div class="gameplay-settings-group"> <label><strong>Minigame Difficulty:</strong></label> <ul class="no-bullets"> <li> <<radiobutton "$miniGameDifficulty" "Normal" autocheck>> <strong>Normal:</strong> For players seeking a balanced challenge. </li> <li> <<radiobutton "$miniGameDifficulty" "Easy" autocheck>> <strong>Easy:</strong> A less challenging experience for those who don't want to struggle. </li> <li> <<radiobutton "$miniGameDifficulty" "Story" autocheck>> <strong>Story:</strong> Focus on the narrative with minimal gameplay challenge. </li> </ul> </div> <p>Please manually refresh the page (F5) when you close this settings window if you're changing the minigame difficulty setting from a minigame passage.</p> <br><br> <h2>Sidebar Settings</h2> <div class="sidebar-settings-group"> <<if $synapseSteadyVXInstalled === true>> <label><strong>Right sidebar:</strong></label> <ul class="no-bullets"> <li> <<radiobutton "$rightSidebarEnabled" true autocheck>> Enabled </li> <li> <<radiobutton "$rightSidebarEnabled" false autocheck>> Disabled </li> </ul> <</if>> <label><strong>Stats Box:</strong></label> <ul class="no-bullets"> <li> <<radiobutton "$statsBoxLocation" "top" autocheck>> Top </li> <li> <<radiobutton "$statsBoxLocation" "left" autocheck>> Left </li> <<if $rightSidebarEnabled === true>> <li> <<radiobutton "$statsBoxLocation" "right" autocheck>> Right </li> <</if>> </ul> <<if $rightSidebarEnabled === true>> <label><strong>Quick Access Box:</strong></label> <ul class="no-bullets"> <li> <<radiobutton "$quickAccessBoxLeft" true autocheck>> Left </li> <li> <<radiobutton "$quickAccessBoxLeft" false autocheck>> Right </li> </ul> <label><strong>Notifications Box:</strong></label> <ul class="no-bullets"> <li> <<radiobutton "$notificationsBoxLeft" true autocheck>> Left </li> <li> <<radiobutton "$notificationsBoxLeft" false autocheck>> Right </li> </ul> <label><strong>Todo Box:</strong></label> <ul class="no-bullets"> <li> <<radiobutton "$todoBoxLeft" true autocheck>> Left </li> <li> <<radiobutton "$todoBoxLeft" false autocheck>> Right </li> </ul> <label><strong>Music Player:</strong></label> <ul class="no-bullets"> <li> <<radiobutton "$musicPlayerLeft" true autocheck>> Left </li> <li> <<radiobutton "$musicPlayerLeft" false autocheck>> Right </li> </ul> <</if>> </div> <br> <<set _currentPassage = passage()>> <<button "Save Settings">> <<run Dialog.close()>> <<goto _currentPassage>> <</button>>
<div class="stats-box"> <h3>Stats</h3> <div class="stat-item"> <span class="stat-icon">🗓️</span> <span class="stat-label">Day:</span> <span class="stat-data">$dayOfWeek</span> </div> <div class="stat-item"> <span class="stat-icon">💰</span> <span class="stat-label">Money:</span> <span class="stat-data"><<print "$" + $playerMoney.toLocaleString("en-US", { minimumFractionDigits: 0, maximumFractionDigits: 0 })>></span> </div> <div class="stat-item"> <span class="stat-icon">🧾</span> <span class="stat-label">Weekly Expenses:</span> <span class="stat-data"><<print "$" + MindWare.calculateTotalExpenses().toLocaleString("en-US", { minimumFractionDigits: 0, maximumFractionDigits: 0 })>></span> </div> <div class="stat-item"> <span class="stat-icon">⚧</span> <span class="stat-label">Gender:</span> <span class="stat-data"><<print MindWare.getGenderStatus()>></span> </div> <div class="stat-item"> <span class="stat-icon">⚖️</span> <span class="stat-label">Morality:</span> <span class="stat-data"><<print MindWare.getMoralityStatus()>></span> </div> <div class="stat-item-ap"> <span class="stat-data"> <<if $infiniteActionPoints>> <span class="stat-icon-top">♾️ ⚡</span> <<elseif $actionPoints > 0>> <<for _i = 1; _i <= $actionPoints; _i++>> <span class="stat-icon">⚡</span> <</for>> <<else>> <span class="stat-icon">💤</span> <</if>> </span> </div> </div> <!-- <div class="stat-item">\ <span class="stat-icon">🫦</span>\ <span class="stat-label">Sexuality:</span>\ <span class="stat-data"><<print MindWare.getSexualityStatus()>></span>\ </div>\ -->
<div class="quick-access-box"> <h3>Quick Access</h3> <div class="quick-access-buttons-top"> <button title="View Character Profile" onclick='quickAccessClick("CharacterProfile", event);'><i class="fas fa-user"></i></button> <!-- Character Profile --> <button title="Open Computer" onclick='quickAccessClick("Computer-QuickAccess", event);'><i class="fas fa-laptop"></i></button> <!-- <button title="Open Inventory" onclick='quickAccessClick("Inventory", event);'><i class="fas fa-briefcase"></i></button>--> </div> <div class="quick-access-buttons"> <button title="Open Web Browser" onclick='quickAccessClick("WebBrowser-QuickAccess", event);'><i class="fas fa-globe"></i></button> <!-- Web Browser --> <button title="Open Email Client" onclick='quickAccessClick("EmailClient-QuickAccess", event);'><i class="fas fa-envelope"></i></button> <!-- Email --> <button title="Open Instant Messenger" onclick='quickAccessClick("IMApp-QuickAccess", event);'><i class="fas fa-comments"></i></button> <!-- Instant Messenger --> <button title="Open Notes App" onclick='quickAccessClick("NotesApp-QuickAccess", event);'><i class="fas fa-sticky-note"></i></button> <!-- Notes --> </div> </div> <script> function quickAccessClick(passageName, event) { const currentPassage = SugarCube.State.passage; const quickAccessPassages = ["CharacterProfile", "Computer-QuickAccess", "Inventory", "WebBrowser-QuickAccess", "EmailClient-QuickAccess", "IMApp-QuickAccess", "NotesApp-QuickAccess"]; if (!quickAccessPassages.includes(SugarCube.State.passage)) { SugarCube.State.variables.returnPassage = SugarCube.State.passage; } SugarCube.State.variables.navigatedFromSidebar = true; SugarCube.Engine.play(passageName); } </script>
<div class="notifications-box"> <h3>Notifications</h3> <p> <<run State.variables.unreadCount = MindWare.getUnreadEmailCount()>> <<if State.variables.unreadCount == 0>> <<print State.variables.unreadCount>> unread email<<if State.variables.unreadCount != 1>>s<</if>> <<else>> <<set _color = (State.variables.unreadCount == 1) ? "yellow" : (State.variables.unreadCount == 2) ? "orange" : "red">> <<print `<span style="color: ${_color}; font-weight: bold;">${State.variables.unreadCount} unread email${State.variables.unreadCount != 1 ? "s" : ""}</span>`>> <</if>> </p> <p> <<run State.variables.unreadChatCount = MindWare.getUnreadMessageCount()>> <<if State.variables.unreadChatCount == 0>> <<print State.variables.unreadChatCount>> available chats<<if State.variables.unreadChatCount != 1>><<else>>s<</if>> <<else>> <<set _color = (State.variables.unreadChatCount == 1) ? "yellow" : (State.variables.unreadChatCount == 2) ? "orange" : "red">> <<print `<span style="color: ${_color}; font-weight: bold;">${State.variables.unreadChatCount} available chat${State.variables.unreadChatCount != 1 ? "s" : ""}</span>`>> <</if>> </p> /* <p> <<run State.variables.availableTargets = setup.getHackingTargetCount()>> <<if State.variables.availableTargets == 0>> <<print State.variables.availableTargets>> available targets<<if State.variables.availableTargets != 1>><<else>>s<</if>> <<else>> <<set _color = (State.variables.availableTargets == 1) ? "yellow" : (State.variables.availableTargets == 2) ? "orange" : "red">> <<print `<span style="color: ${_color}; font-weight: bold;">${State.variables.availableTargets} available target${State.variables.availableTargets != 1 ? "s" : ""}</span>`>> <</if>> </p> */ <p> <<run State.variables.byteBunkerJobsCount = setup.countAvailableUnacceptedByteBunkerJobs()>> <<if setup.isAvailableUnacceptedByteBunkerJobPresent()>> <<set _color = (State.variables.byteBunkerJobsCount == 1) ? "yellow" : (State.variables.byteBunkerJobsCount == 2) ? "orange" : "red">> <<print `<span style="color: ${_color}; font-weight: bold;">${State.variables.byteBunkerJobsCount} available ByteBunker job${State.variables.byteBunkerJobsCount != 1 ? "s" : ""}</span>`>> <<else>> <<print "No available ByteBunker jobs">> <</if>> </p> </div>
<div class="todo-box"> <h3>Tasks</h3> <ul id="taskList"> <<if $tasks.filter(function(task){return task.status == 'active'}).length == 0>> <li>empty</li> <<else>> <<for _task range $tasks>> <<if _task.status == 'active'>> <li> @@.task-link;<<print MindWare.generateTaskLink(_task)>>@@ </li> <</if>> <</for>> <</if>> </ul> </div>
<<nobr>><<if $introOver is true>> <<if $statsBoxLocation is "left">> <<include "StatsBox">> <<if $quickAccessBoxLeft or $notificationsBoxLeft or $todoBoxLeft>><br><</if>> <</if>> <<if $quickAccessBoxLeft is true>> <<include "QuickAccessBox">> <<if $notificationsBoxLeft or $todoBoxLeft>><br><</if>> <</if>> <<if $notificationsBoxLeft is true>> <<include "NotificationsBox">> <<if $todoBoxLeft>><br><</if>> <</if>> <<if $todoBoxLeft is true>> <<include "TodoBox">> <</if>> <</if>> <</nobr>>
<<player>>Test<</player>> <<player-chat>>Test<</player-chat>> <<button "Reload Current Passage">> <<run Engine.play(passage())>> <</button>>
<img src="imgs/UI/banner.jpg" alt="" width="100%"> <div class="start-warning-box"> <h2>Explicit Content Warning</h2><p><span style="color:red">For adults (18+) only.</span><br>Please proceed only if you meet this age requirement.</p> <h2>Photosensitivity Warning</h2><p>This game contains flashing images that may potentially trigger seizures for people with photosensitive epilepsy. Player discretion is advised.</p> </div> @@.start-button; <<button "Start a New Game">> <<goto "CharacterCreator">> <</button>>@@\ @@.start-button; <<button "Quick Start">> /* This is the new Skip button */ <<if $doYouKnowTheAnswer === MindWare.checkPassword($enteredCode)>> <<goto "QuickStart">> <<else>> <<run UI.alert("The Quick Start option is available only to supporters. To unlock it, please enter the correct password in the Extra Options menu (located in the left sidebar).")>> <</if>> <</button>>@@\ <p style="text-align: center; color: rgba(255, 223, 223, 0.7);"><strong>Important:</strong> MindWare isn't optimized for mobile devices.</p> \ <p style="text-align: center;"><<link `"Version: " + $gameVersion`>><<run Dialog.setup("Changelog")>>\ <<run Dialog.wiki(Story.get("Changelog").processText())>>\ <<run Dialog.open()>>\<</link>></p> <p style="text-align: center;">This game is currently in the thrilling stages of early development. Enjoy exploring and stay tuned for more updates!</p> \ <<include "SocialIcons">> <p style="text-align: center;"><b>Images and videos within this game are AI-generated creations.</b> All characters, events, places, organizations, and entities in this story are entirely fictional. Any resemblance to real persons, living or dead, or actual events, places, organizations, or entities is purely coincidental.</p>
<div class="gameplay-settings-container"> <h2>Gameplay Settings</h2> <div class="gameplay-settings-group"> <label><strong>Minigame difficulty:</strong></label> <ul class="no-bullets"> <li> <<radiobutton "$miniGameDifficulty" "Normal" autocheck>> <strong>Normal:</strong> For players seeking a balanced challenge. </li> <li> <<radiobutton "$miniGameDifficulty" "Easy" autocheck>> <strong>Easy:</strong> A less challenging experience for those who don't want to struggle. </li> <li> <<radiobutton "$miniGameDifficulty" "Story" autocheck>> <strong>Easiest:</strong> Focus on the narrative with minimal gameplay challenge. </li> </ul> </div> </div> <br> <<if $tutorialGameplaySettings === false>><div id="tutorial-box"><div class="instruction-container-blue"> <div class="instruction-title-bar-blue">Tutorial: Settings Menu<button class="tutorial-close-button" onclick="SugarCube.State.variables.tutorialGameplaySettings = true; document.getElementById('tutorial-box').style.display = 'none';"><span style="tutorial-close-button"><i class="fas fa-times-circle"></i></span></button></div> <div class="instruction-content"> <p>You can always change the difficulty later from the Settings menu located in the left pane.</p> </div></div> </div> <<else>><</if>> <br> <<if !$difficultySettingWarning>> <div id="tutorial-box"><div class="instruction-container-red"> <div class="instruction-title-bar-red">Warning: Limited Impact <button class="tutorial-close-button" onclick="SugarCube.State.variables.difficultySettingWarning = true; document.getElementById('tutorial-box').style.display = 'none';"><span style="tutorial-close-button"><i class="fas fa-times-circle"></i></span></button></div> <div class="instruction-content"> <p>The difficulty setting currently has a very limited impact on the game, so it doesn't matter that much which setting you choose.</p> </div></div></div> <<else>> <</if>> <br> <<button "Save Settings">> <<goto "Prologue">> <</button>>@@ /* :: GameplaySettings-old [nobr] <div class="gameplay-settings-container"> <h2>Gameplay Settings</h2> <div class="gameplay-settings-group"> <label for="miniGameDifficulty">Minigame Difficulty:</label> <select id="miniGameDifficulty" name="miniGameDifficulty"> <option value="Story">Story</option> <option value="Easy">Easy</option> <option value="Normal" selected>Normal</option> </select> </div> <div class="difficulty-explanation"> <ul> <li><strong>Normal:</strong> For players seeking a balanced challenge.</li> <li><strong>Easy:</strong> A less challenging experience, suitable for those who prefer minimal struggle.</li> <li><strong>Story:</strong> Focus on the narrative with minimal gameplay challenge.</li> </ul> </div> </div> */
<<fadein 6s>> <div class="clock-container"> <div class="waiting-clock"> <div class="clock-hour-hand"></div> <div class="clock-min-hand"></div> <div class="clock-dot"></div> <div class="clock-line clock-line1"></div> <div class="clock-line clock-line2"></div> <div class="clock-line clock-line3"></div> <div class="clock-line clock-line4"></div> </div> </div> <</fadein>> <br> <div class="wait-container"> <<fadein 6s>>You wait. Seconds tick by, slow and steady.<</fadein>> <br><br> <<fadein 6s 6s>>Patience wears thin as the minutes pile up.<</fadein>> <br><br> <<fadein 6s 12s>>Finally, the endless waiting comes to its end.<</fadein>> </div> <style> .wait-container { text-align: center; } .clock-container { display: flex; justify-content: center; /* Centers the child horizontally */ align-items: center; /* Centers the child vertically */ height: 60vh; /* Set to the height of the viewport, adjust as needed */ } .waiting-clock { width: 60%; aspect-ratio: 1; border: 3px solid #fff; border-radius: 50%; position: relative; } .clock-dot { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); width: 10px; aspect-ratio: 1; background-color: #fff; border-radius: 50%; } .clock-hour-hand, .clock-min-hand { position: absolute; top: 50%; left: 50%; width: 3px; height: 20%; background-color: #fff; border-radius: 50vw; transform: translateX(-50%); transform-origin: top; animation: rotate 4000ms linear infinite; } .clock-min-hand { height: 30%; animation: clock-rotate 2000ms linear infinite; } @keyframes clock-rotate { from { transform: rotate(0); } to { transform: rotate(360deg); } } .clock-line { width: 3px; height: 7px; background-color: #fff; position: absolute; border-radius: 50vw; } .clock-line1 { top: 10px; left: 50%; transform: translateX(-50%); } .clock-line2 { right: 10px; top: 50%; transform: translateY(-50%) rotate(90deg); } .clock-line3 { bottom: 10px; left: 50%; transform: translateX(-50%); } .clock-line4 { left: 10px; top: 50%; transform: translateY(-50%) rotate(90deg); } </style>
<style> .synapse-report { background-color: rgba(0, 0, 0, 0.8); color: #55BBBC; padding: 20px; position: relative; overflow: hidden; } .synapse-report::before { content: ""; position: absolute; top: -50%; left: -50%; width: 200%; height: 200%; background: linear-gradient( to bottom right, rgba(85, 187, 188, 0.1) 0%, rgba(85, 187, 188, 0.05) 40%, rgba(85, 187, 188, 0) 50%, rgba(85, 187, 188, 0.05) 60%, rgba(85, 187, 188, 0.1) 100% ); animation: hologram 10s linear infinite; pointer-events: none; } @keyframes hologram { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } .synapse-header { text-align: center; margin-bottom: 20px; font-size: 1.5em; text-transform: uppercase; letter-spacing: 2px; } .synapse-section { margin-bottom: 20px; padding: 10px; background-color: rgba(85, 187, 188, 0.1); border-radius: 10px; } .synapse-section h2 { color: #55BBBC; border-bottom: 1px solid #55BBBC; padding-bottom: 5px; margin-bottom: 10px; } .synapse-biometrics { display: flex; flex-wrap: wrap; justify-content: space-between; } .biometric-item { width: 48%; margin-bottom: 10px; } .biometric-value { /* font-size: 1.2em; font-weight: bold; */ } .synapse-normal { color: #4caf50; } .synapse-warning { color: #ffa500; } .synapse-abnormal { color: #ff4d4d; } .synapse-recommendation { border: 1px solid #55BBBC; padding: 10px; border-radius: 5px; background-color: rgba(85, 187, 188, 0.05); } .synapse-footer { text-align: right; font-size: 0.8em; margin-top: 20px; opacity: 0.7; } @keyframes pulse { 0% { box-shadow: 0 0 0 0 rgba(255, 77, 77, 0.7); } 70% { box-shadow: 0 0 0 10px rgba(255, 77, 77, 0); } 100% { box-shadow: 0 0 0 0 rgba(255, 77, 77, 0); } } </style> <div class="synapse-report"> <div class="synapse-section"> <h2>Patient Info</h2> <p><strong>Name:</strong> $playerName $playerLastName</p> </div> <<set _heartRate to 0>> <<set _bloodPressureSystolic to 0>> <<set _bloodPressureDiastolic to 0>> <<set _neuralActivity to "">> <<set _emotionalFlux to "">> <<set _cognitivePatterns to "">> <<if $mentalCondition is "Stable">> <<set _heartRate to random(60, 80)>> <<set _bloodPressureSystolic to random(110, 120)>> <<set _bloodPressureDiastolic to random(70, 80)>> <<set _neuralActivity to "Normal">> <<set _emotionalFlux to "Balanced">> <<set _cognitivePatterns to "Coherent">> <<elseif $mentalCondition is "Unstable">> <<set _heartRate to random(80, 100)>> <<set _bloodPressureSystolic to random(120, 140)>> <<set _bloodPressureDiastolic to random(80, 90)>> <<set _neuralActivity to "Fluctuating">> <<set _emotionalFlux to "Elevated">> <<set _cognitivePatterns to "Slightly Fragmented">> <<else>> <<set _heartRate to random(100, 120)>> <<set _bloodPressureSystolic to random(140, 160)>> <<set _bloodPressureDiastolic to random(90, 100)>> <<set _neuralActivity to "Highly Variable">> <<set _emotionalFlux to "Severely Elevated">> <<set _cognitivePatterns to "Fragmented">> <</if>> <div class="synapse-section"> <h2>Biometric Readings</h2> <div class="synapse-biometrics"> <div class="biometric-item"> <strong>Heart Rate:</strong><br> <span class="biometric-value"> <<if $mentalCondition is 'Stable'>> <span class="synapse-normal">_heartRate BPM</span> <<elseif $mentalCondition is 'Unstable'>> <span class="synapse-warning">_heartRate BPM</span> <<else>> <span class="synapse-abnormal">_heartRate BPM</span> <</if>> </span> </div> <div class="biometric-item"> <strong>Blood Pressure:</strong><br> <span class="biometric-value"> <<if $mentalCondition is 'Stable'>> <span class="synapse-normal">_bloodPressureSystolic/_bloodPressureDiastolic mmHg</span> <<elseif $mentalCondition is 'Unstable'>> <span class="synapse-warning">_bloodPressureSystolic/_bloodPressureDiastolic mmHg</span> <<else>> <span class="synapse-abnormal">_bloodPressureSystolic/_bloodPressureDiastolic mmHg</span> <</if>> </span> </div> <div class="biometric-item"> <strong>Neural Activity:</strong><br> <span class="biometric-value"> <<if $mentalCondition is 'Stable'>> <span class="synapse-normal">_neuralActivity</span> <<elseif $mentalCondition is 'Unstable'>> <span class="synapse-warning">_neuralActivity</span> <<else>> <span class="synapse-abnormal">_neuralActivity</span> <</if>> </span> </div> <div class="biometric-item"> <strong>Emotional Flux:</strong><br> <span class="biometric-value"> <<if $mentalCondition is 'Stable'>> <span class="synapse-normal">_emotionalFlux</span> <<elseif $mentalCondition is 'Unstable'>> <span class="synapse-warning">_emotionalFlux</span> <<else>> <span class="synapse-abnormal">_emotionalFlux</span> <</if>> </span> </div> <div class="biometric-item"> <strong>Cognitive Patterns:</strong><br> <span class="biometric-value"> <<if $mentalCondition is 'Stable'>> <span class="synapse-normal">_cognitivePatterns</span> <<elseif $mentalCondition is 'Unstable'>> <span class="synapse-warning">_cognitivePatterns</span> <<else>> <span class="synapse-abnormal">_cognitivePatterns</span> <</if>> </span> </div> </div> </div> <div class="synapse-section"> <h2>Diagnosis</h2> <<if $mentalCondition is "Stable">> <p>Mental condition: <strong>Stable</strong></p> <p>Your mind is well-aligned with your body. Neural patterns show good coherence.</p> <p>Gender identity: <strong><<if $playerGender gte 80>>Male<<elseif $playerGender gte 60>>Masculine<<elseif $playerGender gte 40>>Androgynous<<elseif $playerGender gte 20>>Feminine<<else>>Female<</if>></strong></p> <p>Body type: <strong>$playerBody</strong></p> <p>Alignment status: <strong>Good</strong></p> <<elseif $mentalCondition is "Unstable">> <p>Mental condition: <strong>Unstable</strong></p> <p>Elevated stress levels and emotional fluctuation detected. Potential mind-body misalignment.</p> <p>Gender identity: <strong><<if $playerGender gte 80>>Male<<elseif $playerGender gte 60>>Masculine<<elseif $playerGender gte 40>>Androgynous<<elseif $playerGender gte 20>>Feminine<<else>>Female<</if>></strong></p> <p>Body type: <strong>$playerBody</strong></p> <p>Alignment status: <strong>Moderate discrepancy</strong></p> <<else>> <p>Mental condition: <strong>Dysphoric</strong></p> <p>Severe mind-body misalignment detected. High stress, emotional volatility, and cognitive fragmentation observed.</p> <p>Gender identity: <strong><<if $playerGender gte 80>>Male<<elseif $playerGender gte 60>>Masculine<<elseif $playerGender gte 40>>Androgynous<<elseif $playerGender gte 20>>Feminine<<else>>Female<</if>></strong></p> <p>Body type: <strong>$playerBody</strong></p> <p>Alignment status: <strong>Severe conflict</strong></p> <</if>> </div> <div class="synapse-section"> <h2>Recommendation</h2> <<if $mentalCondition is "Stable">> <p>Continue current lifestyle. Regular Synapse Steady VX check-ups recommended.</p> <<elseif $mentalCondition is "Unstable">> <p><span style="color: #ffffff; background-color: #ff4d4d; font-weight: bold; padding: 2px 5px; border-radius: 3px; box-shadow: 0 0 10px #ff4d4d; animation: pulse 2s infinite;">Psychological evaluation at the nearest healthcare facility is recommended.</span></p> <p>Practice stress-reduction techniques. Be aware of increased susceptibility to external influences.</p> <<else>> <p><strong><span style="color: #ffffff; background-color: #ff4d4d; font-weight: bold; padding: 2px 5px; border-radius: 3px; box-shadow: 0 0 10px #ff4d4d; animation: pulse 2s infinite;">URGENT: Seek immediate psychological intervention at nearest healthcare facility.</span></strong></p> <p>Current state poses significant risks. Prompt action required to prevent rapid deterioration.</p> <</if>> </div> <div class="synapse-footer"> Synapse Steady VX v2.0.45 | SynTech © 2045 </div> </div> <br> <br> <<if $mentalCondition is "Unstable">> <div class="inner-thought">The implant is telling me to get a psychological evaluation.</div> <<if $installImplantPlayerWantsVisionsToReturn === true>> <br> <div class="inner-thought">I think I should listen and go to the local Panacea Clinic as soon as possible.</div> <</if>> <br> <<elseif $mentalCondition is "Dysphoric">> <div class="inner-thought">The implant is urgently telling me to seek help. That probably explains why I don't have any willpower to resist AVA.</div> <<if $installImplantPlayerWantsVisionsToReturn === true>> <br> <div class="inner-thought">I think I should listen and go to the local Panacea Clinic as soon as possible.</div> <</if>> <br> <</if>>
<<widget "picture">> <<set _imgSrc to $args[0]>> <<link [img[_imgSrc]]>> <<popover>>[img[_imgSrc]]<</popover>> <</link>> <</widget>>
<<widget "sexualitySubmissive">> <<set _target = $args.length > 0 ? $args[0] : "player">> <<if _target == "player">> <<set $playerSexuality to Math.max($playerSexuality - 1, 0)>> <<else>> <<set _sexualityVar = _target + "Sexuality">> <<set State.variables[_sexualityVar] to Math.max(State.variables[_sexualityVar] - 1, 0)>> <</if>> <div class="sexuality-change"><span class="sexuality-submissive"><span style="font-family: 'Noto Color Emoji', sans-serif;">🥺</span> <<print _target == "player" ? "Your" : _target + "'s">> submissive tendencies have grown.</span></div> <</widget>> <<widget "sexualityDominant">> <<set _target = $args.length > 0 ? $args[0] : "player">> <<if _target == "player">> <<set $playerSexuality to Math.min($playerSexuality + 1, 100)>> <<else>> <<set _sexualityVar = _target + "Sexuality">> <<set State.variables[_sexualityVar] to Math.min(State.variables[_sexualityVar] + 1, 100)>> <</if>> <div class="sexuality-change"><span class="sexuality-dominant"><span style="font-family: 'Noto Color Emoji', sans-serif;">😈</span> <<print _target == "player" ? "Your" : _target + "'s">> dominant tendencies have grown.</span></div> <</widget>> /* or the player: <<sexualitySubmissive>> or <<sexualityDominant>> For a specific character (e.g., "ray" or "trix"): <<sexualitySubmissive "ray">> or <<sexualityDominant "trix">> */
<<widget "narrator" container>>\ <div class="narrator">_contents</div>\ <</widget>>
<<widget "cumEating">>\ <<if visited() is 1>>\ <<set _increment to $args[0] ?? 1>>\ <<if not (typeof _increment is 'number')>>\ The argument to cumEating must be a number. <<else>>\ <<if ndef $cumEating>>\ <<set $cumEating to 0>>\ <</if>>\ <<set $cumEating += _increment>>\ /* <div class="variable-change"><span style="font-family: 'Noto Color Emoji', sans-serif;">👅</span> Your cum eating fetish has grown by <<print _increment>>.</div>\ */\ <</if>>\ <</if>>\ <</widget>>\
<<widget "maleEncounter">>\ <<set _increment to $args[0] ?? 1>>\ <<if not (typeof _increment is 'number')>>\ The argument to maleEncounters must be a number. <<else>>\ <<if ndef $maleEncounters>>\ <<set $maleEncounters to 0>>\ <</if>>\ <<set $maleEncounters += _increment>>\ /* <div class="variable-change"><span style="font-family: 'Noto Color Emoji', sans-serif;">🧔</span><span> Your encounters with males have increased by <<print _increment>>.</span></div>\ */\ <</if>>\ <</widget>>\
<<widget "submissiveAct">>\ <<set _increment to $args[0] ?? 1>>\ <<if not (typeof _increment is 'number')>>\ The argument to submissiveActs must be a number. <<else>>\ <<if ndef $submissiveActs>>\ <<set $submissiveActs to 0>>\ <</if>>\ <<set $submissiveActs += _increment>>\ /* <div class="variable-change"><span style="font-family: 'Noto Color Emoji', sans-serif;">🧎</span><span> Your submissive experiences have grown by <<print _increment>>.</span></div>\ */\ <</if>>\ <</widget>>\
/* Infinite Action Points Cheat */ <<if $infiniteActionPoints>> <<set $actionPoints = 1000>> <</if>> /* Drunk Effect */ <<include "PlayerDrunk">> /* Hiding UI */ <<if $rightSidebarEnabled === true>> <<run window.createAndShowRightSidebar()>> <<else>> <<run window.destroyRightSidebar()>> <</if>> <<set _changed = $lockedUI neq $lastLockedUI>> <<if _changed>> <<if $lockedUI>> <<run UIBar.stow()>> <<run MindWare.adjustForLeftSidebar()>> <<run window.stowRightSidebar()>> /* <<run $("#topbar").hide()>> */ <<run MindWare.adjustUIBarMargins()>> <<else>> <<run UIBar.show().unstow()>> /* <<run $("#topbar").show()>> */ <<run window.unstowRightSidebar()>> <<run MindWare.adjustForLeftSidebar()>> <</if>> <<set $lastLockedUI = $lockedUI>> <</if>> <<run MindWare.adjustUIBarMargins()>> <<if $lockedUI>> <<run $("#topbar").hide()>> <<run MindWare.adjustTopPadding()>> <<else>> <<run $("#topbar").show()>> <<run MindWare.adjustTopPadding()>> <</if>> /* SIMS */ <<switch $simsLevel>> <<case 1>> <<if $simsWatched >= 5>> <<set $simsLevel = 2>> <</if>> <<case 2>> <<if $simsWatched >= 10>> <<set $simsLevel = 3>> <</if>> <<case 3>> <<if $simsWatched >= 15>> <<set $simsLevel = 4>> <</if>> <<case 4>> <<if $simsWatched >= 20>> <<set $simsLevel = 5>> <</if>> <<case 5>> <<if $simsWatched >= 30>> <<set $simsLevel = 6>> <</if>> <</switch>> /* Synapse Steady VX */ <<include "SynapseSteadyVX">> /* Rent */ <<set _daysInWeek = 7>> <<if not $rentPaidThisWeek and ($totalDays - 1) % _daysInWeek is 0 and $dayOfWeek is "Monday">> <<if $playerMoney >= $rentPrice>> <<set $playerMoney -= $rentPrice>> <<set $rentPaidThisWeek = true>> <<set $rentPaymentCounter += 1>> <<notify>>Rent of $<<print $rentPrice.toLocaleString("en-US", { minimumFractionDigits: 0, maximumFractionDigits: 0 })>> has been deducted from your account.<</notify>> <<else>> <<set $rentPaidThisWeek = true>> <<set $missedPaymentsCount += 1>> <<set $totalMissedRent += $rentPrice>> <<notify>>You do not have enough money to pay the rent.<</notify>> <</if>> <<elseif ($totalDays - 1) % _daysInWeek is not 0 or $dayOfWeek is not "Monday">> <<set $rentPaidThisWeek = false>> <</if>> /* CodeBuddy Subscription Payment and Day Tracking */ <<if $codeBuddyInstalled and $codeBuddyEnabled>> <<if $codeBuddyCheckedDay neq $totalDays>> /* Check if a new day has started */ <<set $codeBuddyCheckedDay to $totalDays>> /* Update the last checked day */ <<set $codeBuddySubscriptionCounter += 1>> /* Increment only once per day */ /* Check if it's time to pay again based on subscription counter */ <<if $codeBuddySubscriptionCounter % _daysInWeek is 0>> <<if $playerMoney >= 500>> <<set $playerMoney -= 500>> <<notify>>$500 has been deducted from your account for your CodeBuddy subscription.<</notify>> <<else>> <<set $codeBuddyEnabled to false>> /* Disable subscription due to non-payment */ <<set $codeBuddyDebt to true>> <<notify>>You do not have enough money to pay for your CodeBuddy subscription. Subscription has been disabled.<</notify>> <</if>> <</if>> <</if>> <</if>> /* ************************************************** */ /* Chapter 0 */ <<include "Scripts-Chapter0">> /********************* Chapter 1 *********************/ <<include "Scripts-Chapter1">> /* Updates */ <<if ndef $expenses>> <<set $expenses = { "Backlog Rent": { "value": 1000, "status": "active" } }>> <</if>>
<<nobr>><div id="loading-screen"> <div class="loading-content"> <div class="loading-bar-container"> <div id="loading-bar"></div> </div> <div class="loading-text">INITIALIZING...</div> </div> </div><</nobr>> <<include "UI Variables">> <<include "UnwrappedGodiva">> <script> (function() { // Simulate loading process var progress = 0; var loadingBar = document.getElementById('loading-bar'); var loadingInterval = setInterval(function() { progress += Math.random() * 10; if (progress >= 100) { progress = 100; clearInterval(loadingInterval); setTimeout(function() { // Return to the previous passage SugarCube.Engine.play(SugarCube.State.variables.previousPassage || "Start"); }, 500); } loadingBar.style.width = progress + '%'; }, 100); })(); </script>
<<if ndef $scrollToTopEnabled>> <<set $scrollToTopEnabled to true>> <</if>> <<if ndef $scrollToBottomEnabled>> <<set $scrollToBottomEnabled to true>> <</if>> <<if ndef $playerNewAvatar>> <<set $playerNewAvatar = [ "imgs/characters/player/setA/1.webp", "imgs/characters/player/setB/1.webp" ]>> <</if>> <<if ndef $playerNewAvatarSelected>> <<set $playerNewAvatarSelected = 0>> <</if>> <<if ndef $playerDrunk>> <<set $playerDrunk = 0>> <</if>> <<if ndef $extraActionsPanacea>> <<set $extraActionsPanacea = []>> <</if>> <<if ndef $nursePanaceaDialogs>> <<set $nursePanaceaDialogs = {}>> <</if>>
/* Variables added in version 0.0.7 */ <<if ndef $minigameSkipButtons>> <<set $minigameSkipButtons = false>> <</if>> /* Variables added in version 0.0.8 */ <<if ndef $quickAccessBoxLeft>> <<set $quickAccessBoxLeft = true>> <</if>> <<if ndef $notificationsBoxLeft>> <<set $notificationsBoxLeft = true>> <</if>> <<if ndef $todoBoxLeft>> <<set $todoBoxLeft = true>> <</if>> <<if ndef $musicPlayerLeft>> <<set $musicPlayerLeft = true>> <</if>> <<if ndef $simsWatched>> <<set $simsWatched = 0>> <</if>> <<if ndef $simsWatchedToday>> <<set $simsWatchedToday = false>> <</if>> <<if ndef $simsMoneySpent>> <<set $simsMoneySpent = 0>> <</if>> <<if ndef $simsLevel>> <<set $simsLevel = 1>> <</if>> <<if ndef $chapter1Days>> <<set $chapter1Days = 0>> <</if>> <<if ndef $chapter2Days>> <<set $chapter2Days = 0>> <</if>> <<if ndef $chapter3Days>> <<set $chapter3Days = 0>> <</if>> <<if ndef $chapter4Days>> <<set $chapter4Days = 0>> <</if>> <<if ndef $chapter5Days>> <<set $chapter5Days = 0>> <</if>> <<if ndef $chapter6Days>> <<set $chapter6Days = 0>> <</if>> <<if ndef $chapter7Days>> <<set $chapter7Days = 0>> <</if>> <<if ndef $chapter8Days>> <<set $chapter8Days = 0>> <</if>> <<if ndef $chapter9Days>> <<set $chapter9Days = 0>> <</if>> <<if ndef $chapter10Days>> <<set $chapter10Days = 0>> <</if>> <<if ndef $lastCheckedDay>> <<set $lastCheckedDay = 0>> <</if>> /* Variables added in version 0.0.9 */ <<if ndef $statsBoxLocation>> <<set $statsBoxLocation = "top">> <</if>> <<if ndef $playerBody>> <<set $playerBody to "Masculine">> <</if>> <<if ndef $playerBreast>> <<set $playerBreast to "Defined">> <</if>> <<if ndef $playerButtocks>> <<set $playerButtocks to "Firm">> <</if>> <<if ndef $playerGenitals>> <<set $playerGenitals to "Penis (Above-Average)">> <</if>> /* Variables added in version 0.1.0 */ <<if ndef $skipOption>> <<set $skipOption to "Intro">> <</if>> <<if ndef $lockedUI>> <<set $lockedUI = false>> <</if>> <<if ndef $lastLockedUI>> <<set $lastLockedUI = false>> <</if>> <<if ndef $displayHints>> <<set $displayHints = true>> <</if>> <<if ndef $blankVariable1>> <<set $blankVariable1 to "">> <</if>> <<if ndef $blankVariable2>> <<set $blankVariable2 to "">> <</if>> <<if ndef $blankVariable3>> <<set $blankVariable3 to "">> <</if>> <<if ndef $blankVariable4>> <<set $blankVariable4 to "">> <</if>> <<if ndef $blankVariable5>> <<set $blankVariable5 to "">> <</if>> <<if ndef $blankVariable6>> <<set $blankVariable6 to "">> <</if>> <<if ndef $blankVariable7>> <<set $blankVariable7 to "">> <</if>> <<if ndef $blankVariable8>> <<set $blankVariable8 to "">> <</if>> <<if ndef $blankVariable9>> <<set $blankVariable9 to "">> <</if>> <<if ndef $blankVariable10>> <<set $blankVariable10 to "">> <</if>> /* Variables added in version 0.1.2 */ <<if ndef $goOutsideGoBackPassage>> <<set $goOutsideGoBackPassage = "HomeBacklog">> <</if>> <<if ndef $femaleEncounters>> <<set $femaleEncounters to 0>> <</if>> <<if ndef $maleEncounters>> <<set $maleEncounters to 0>> <</if>> <<if ndef $transEncounters>> <<set $transEncounters to 0>> <</if>> <<if ndef $submissiveActs>> <<set $submissiveActs to 0>> <</if>> <<if ndef $dominantActs>> <<set $dominantActs to 0>> <</if>> /* Variables added in version 0.1.4 beta */ <<if ndef $sleepDisableReasons>> <<set $sleepDisableReasons = []>> <</if>> <<if ndef $extraActionsBrainFry>> <<set $extraActionsBrainFry to []>> <</if>> <<if ndef $extraActionsGitGud>> <<set $extraActionsGitGud to []>> <</if>> <<if ndef $extraActionsHomeBacklog>> <<set $extraActionsHomeBacklog to []>> <</if>> <<if ndef $extraActionsSynTech>> <<set $extraActionsSynTech to []>> <</if>> <<if ndef $extraActionsPanacea>> <<set $extraActionsPanacea to []>> <</if>> <<if ndef $extraActionsEroSphere>> <<set $extraActionsEroSphere to []>> <</if>>
Infected Identity /* <span style="font-size: 0.8em;">Version 0.1.4 (Beta)</span> */
<img src="imgs/UI/logo-small-cropped.png" width="100%">
by <a href="https://subjunctivegames.com" class="link-internal">Subjunctive Games</a>
<<set $gameVersion = "0.1.5 (Public)">> <<set $doYouKnowTheAnswer = false>> <<set $fadeDisable = false>> <<set $minigameSkipButtons = false>> /* Quick Start */ <<set $skipOption to "Intro">> /* Inventory */ <<newinv $inventory>> /* Navigation */ <<set $returnPassage to "">> <<set $navigatedFromSidebar to false>> <<set $goOutsideGoBackPassage = "HomeBacklog">> /* Introduction */ <<set $introOver = false>> /* UI */ <<set $lockedUI = false>> <<set $lastLockedUI = false>> /* Sleep */ <<set $sleepDisableReasons = []>> /* Sidebar */ <<set $quickAccessBoxLeft = true>> <<set $notificationsBoxLeft = true>> <<set $todoBoxLeft = true>> <<set $musicPlayerLeft = true>> <<set $statsBoxLocation = "top">> /* Extra Actions */ <<set $extraActionsBrainFry to []>> <<set $extraActionsGitGud to []>> <<set $extraActionsHomeBacklog to []>> <<set $extraActionsSynTech to []>> <<set $extraActionsPanacea to []>> <<set $extraActionsEroSphere to []>> /* Difficulty */ <<set $miniGameDifficulty = "Normal">> /* Settings: Story, Easy, Normal */ /* Player Home */ <<set $playerHome = "HomeBacklog">> /* Money */ <<set $playerMoney to 1150>> <<set $rentPrice = 1000>> <<set $totalExpenses = $rentPrice>> <<set $rentPaymentCounter = 0>> <<set $missedPaymentsCount = 0>> <<set $totalMissedRent = 0>> /* Expenses */ <<set $expenses = { "Backlog Rent": { "value": 1000, "status": "active" } }>> /* Work */ <<set $currentJob = "BrainFry">> <<set $workedToday = false>> /* BrainFry */ <<set $brainFryFirstVisit = true>> <<set $brainFryWorkCount = 0>> /* EroSphere */ <<set $simsCatalogue = { "Bike Ride": { "thumbnail": "imgs/locations/erosphere/sims/SIMS-bike-ride-thumb.jpeg", "price": 250, "level": 1, "isNew": true, "unlocked": true, }, "Ocean Dive": { "thumbnail": "imgs/locations/erosphere/sims/SIMS-ocean-dive-thumb.jpeg", "price": 250, "level": 1, "isNew": true, "unlocked": true, }, "Nature Hike": { "thumbnail": "imgs/locations/erosphere/sims/SIMS-nature-hike-thumb.jpeg", "price": 250, "level": 1, "isNew": true, "unlocked": true, } }>> <<set $simsWatched = 0>> <<set $simsWatchedToday = false>> <<set $simsMoneySpent = 0>> <<set $simsLevel = 1>> /* GitGud */ <<set $gitGutUnlocked = false>> <<set $gitGutIntroduced = false>> /* IM */ <<include "IMApp-CipherLynx-Messages">> /* Tutorial Boxes */ <<set $displayHints = true>> <<set $tutorialActionPoints = false>> <<set $tutorialMusicPlayer = false>> <<set $tutorialManualBruteforce = false>> <<set $tutorialCharacterCreation = false>> <<set $tutorialGameplaySettings = false>> <<set $tutorialMorality = false>> <<set $tutorialCodingMinigame = false>> /* Warning Boxes */ <<set $warningSleep = false>> /* Tip Boxes */ <<set $tipBuyMoreSongs = false>> <<set $tipBuyMoreGames = false>> <<set $tipBuyMoreChannels = false>> <<set $tipAutomateCoding = false>> /* Time Cycle */ <<set $totalDays = 0>> <<set $chapter1Days = 0>> <<set $chapter2Days = 0>> <<set $chapter3Days = 0>> <<set $chapter4Days = 0>> <<set $chapter5Days = 0>> <<set $chapter6Days = 0>> <<set $chapter7Days = 0>> <<set $chapter8Days = 0>> <<set $chapter9Days = 0>> <<set $chapter10Days = 0>> <<set $dayOfWeek = "Sunday">> <<set $lastCheckedDay = 0>> /* Action Points */ <<set $actionPoints = 5>> <<set $actionPointsMax = 5>> /* Synapse Steady VX */ <<include "SteadySynapseVX-Variables">> /* Player Character */ <<set $playerName to "John">> <<set $playerLastName to "Doe">> <<set $playerNickname to "Ghost">> <<set $playerAvatar = [ "imgs/characters/player/playerAvatar0.jpg", "imgs/characters/player/playerAvatar1.jpg", "imgs/characters/player/playerAvatar2.jpg", "imgs/characters/player/playerAvatar3.jpg", "imgs/characters/player/playerAvatar4.jpg", "imgs/characters/player/playerAvatar5.jpg", "imgs/characters/player/playerAvatar6.jpg", "imgs/characters/player/playerAvatar7.jpg", "imgs/characters/player/playerAvatar8.jpg", "imgs/characters/player/playerAvatar9.jpg", "imgs/characters/player/playerAvatar10.jpg", "imgs/characters/player/playerAvatar11.jpg", "imgs/characters/player/playerAvatar12.jpg", "imgs/characters/player/playerAvatar13.jpg", "imgs/characters/player/playerAvatar14.jpg", "imgs/characters/player/playerAvatar15.jpg", "imgs/characters/player/playerAvatar16.jpg", "imgs/characters/player/playerAvatar17.jpg", "imgs/characters/player/playerAvatar18.jpg", "imgs/characters/player/playerAvatar19.jpg", "imgs/characters/player/playerAvatar20.jpg", "imgs/characters/player/playerAvatar21.jpg" ]>> <<set $playerAvatarSelected = 0>> <<set $playerMorality to 50>> <<set $playerGender to 100>> /* if (playerGender >= 80) { return "Male"; // Replace with your desired label } else if (playerGender >= 60) { return "Masculine"; // Replace with your desired label } else if (playerGender >= 40) { return "Androgynous"; // Replace with your desired label } else if (playerGender >= 20) { return "Feminine"; // Replace with your desired label } else { return "Female"; // Replace with your desired label } */ /* Sexuality */ <<set $playerSexuality to 50>> <<set $femaleEncounters to 0>> <<set $maleEncounters to 0>> <<set $transEncounters to 0>> <<set $submissiveActs to 0>> <<set $dominantActs to 0>> <<set $playerBody to "Masculine">> /* Male -> Masculine Male-Aligned -> Masculine-Leaning Androgynous -> Androgynous Female-Aligned -> Feminine-Leaning Female -> Feminine */ <<set $playerBreast to "Defined">> /* Male -> Defined Male-Aligned -> Supple Androgynous -> Budding Female-Aligned -> Small Female -> Average EXTRA 1: Large EXTRA 2: Huge */ <<set $playerButtocks to "Firm">> /* Male -> Firm Male-Aligned -> Soft Androgynous -> Rounded Female-Aligned -> Plush Female -> Average EXTRA 1: Large EXTRA 2: Huge */ <<set $playerGenitals to "Penis (Above-Average)">> /* Male -> Penis (Above-Average) Male-Aligned -> Penis (Average) Androgynous -> Penis (Below-Average) Female-Aligned -> Penis (Tiny) Female -> Vagina */ /* Trix */ <<include "CharacterTrix">> /* Ray */ <<include "CharacterRay">> /* Drake */ <<include "CharacterDrake">> /* CipherLynx */ <<include "CharacterCipher">> /* Yuki */ <<include "CharacterYuki">> /* Xavier */ <<include "CharacterXavier">> /* Tasks and Notes */ <<set $tasks to []>> <<set $notes = $notes or []>> /* PC */ <<set $notificationsPC = []>> <<set $notificationCountPC = 0>> <<set $playerPcName = "MyComputer">> <<set $playerPcPerformance = 1.32>> /* Wallpapers */ <<set $activeWallpaper = "cyberpunk1">> <<set $availableWallpapers = ["cyberpunk1", "cyberpunk2", "cyberpunk3", "cyberpunk4", "cyberpunk5"]>> <<set $babesWallpaperPurchased = false>> <<set $nsftWallpaper1Purchased = false>> <<set $fastCarsWallpaperPurchased = false>> /* Research */ <<set $researchMaterial = []>> <<for _i = 1; _i <= 66; _i++>> <<set $researchMaterial.push("research" + _i)>> <</for>> <<set $unlockedImages = ["research1", "research2", "research3", "research4", "research5", "research6", "research7"]>> <<set _tempMaterial = []>> <<for _i = 0; _i < $researchMaterial.length; _i++>> <<if $unlockedImages.indexOf($researchMaterial[_i]) === -1>> <<set _tempMaterial.push($researchMaterial[_i])>> <</if>> <</for>> <<set $researchMaterial = _tempMaterial>> <<run MindWare.shuffleArray(State.variables.researchMaterial)>> /* Unlock research images <<if $unlockedImages.length < $researchMaterial.length>> <<set $unlockedImages.push($researchMaterial[$unlockedImages.length])>> <</if>> */ /* TV Channels */ <<set $watchingTV = false>> <<set $adultChannelPurchased = false>> <<set $memesChannelPurchased = false>> <<set $pornChannelPurchased = false>> /* Set up sample channels and GIFs */ <<set $weatherGifsPlaying>> <<set $weatherGifs to ["imgs/TV/weather1.gif", "imgs/TV/weather2.gif", "imgs/TV/weather3.gif"]>> <<set $newsGifsPlaying>> <<set $newsGifs to ["imgs/TV/news1.gif", "imgs/TV/news2.gif", "imgs/TV/news3.gif", "imgs/TV/news4.gif", "imgs/TV/news5.gif", "imgs/TV/news6.gif", "imgs/TV/news7.gif", "imgs/TV/news8.gif", "imgs/TV/news9.gif", "imgs/TV/news10.gif"]>> <<set $comedyGifsPlaying>> <<set $comedyGifs to ["imgs/TV/comedy1.gif", "imgs/TV/comedy2.gif", "imgs/TV/comedy3.gif"]>> <<set $adultGifsPlaying>> <<set $adultGifs to [ "imgs/TV/romance1.gif", "imgs/TV/romance2.gif", "imgs/TV/romance3.gif", "imgs/TV/romance4.gif", "imgs/TV/romance5.gif", "imgs/TV/romance6.gif", "imgs/TV/romance7.gif", "imgs/TV/romance8.gif", "imgs/TV/romance9.gif", "imgs/TV/romance10.gif" ]>> /* Games */ <<set $snakeGamePurchased = false>> <<set $breakoutGamePurchased = false>> <<set $matchTwoLatexGamePurchased = false>> /* Songs */ <<set $mySongs = [ { title: "Lifelike", artist: "AlexiAction", filename: "audio/songs/lifelike-126735.mp3" }, { title: "Password Infinity", artist: "Evgeny Bardyuzha", filename: "audio/songs/password-infinity-123276.mp3" }, { title: "Emerald", artist: "Eidunn", filename: "audio/songs/emerald-21054.mp3" }, { title: "Cyber Attack", artist: "AlexiAction", filename: "audio/songs/cyber-attack-110475.mp3" }, { title: "Shadowy Figure", artist: "SoundCarousel", filename: "audio/songs/shadowy-figure-116963.mp3" }, { title: "Data Breach", artist: "FASSounds", filename: "audio/songs/data-breach-112775.mp3" }, { title: "Gradient", artist: "Execore", filename: "audio/songs/gradient-148888.mp3" }, { title: "Blast", artist: "AlexiAction", filename: "audio/songs/blast-138451.mp3" } ]>> /* { title: "Cyber War", artist: "AlexiAction", filename: "audio/songs/cyber-war-126419.mp3" }, { title: "Flashes", artist: "Mezhdunami", filename: "audio/songs/mezhdunami-flashes-95436.mp3" }, { title: "Evasion", artist: "Evgeny Bardyuzha", filename: "audio/songs/evasion-123274.mp3" }, { title: "Cyber Race", artist: "FASSounds", filename: "audio/songs/cyber-race-112774.mp3" }, { title: "Midnight", artist: "AlexiAction", filename: "audio/songs/midnight-138704.mp3" }, { title: "Insurrection", artist: "AleXZavesa", filename: "audio/songs/insurrection-10941.mp3" }, */ <<set $cyberWarSongPurchased = false>> <<set $flashesSongPurchased = false>> <<set $evasionSongPurchased = false>> <<set $cyberRaceSongPurchased = false>> <<set $midnightSongPurchased = false>> <<set $insurrectionSongPurchased = false>> /* Job Board */ <<set $jobBoardFirstVisit = true>> <<set $illegalSpyingJobVisible = true>> <<set $illegalSpyingJobAccepted = false>> <<set $sqlTroubleshootJobVisible = true>> <<set $sqlTroubleshootJobAccepted = true>> <<set $crackEncryptionJobVisible = true>> <<set $crackEncryptionJobAccepted = true>> <<set $photoEditJobVisible = true>> <<set $photoEditJobAccepted = true>> /* Email Client - replaced with a script passage in emailclient.twee file <<set $emails = [ { sent: true, viewed: false, from: "Unknown", subject: "Urgent Message", preview: "This could be urgent, you better take a look...", link: "NewEmail" }, { sent: true, viewed: true, from: "CipherLynx", subject: "New Gig", preview: "Hey, Been a while since our last sync-up. All good with you?", link: "OldEmail" } // ... additional emails ]>> */ /* Trace Upgrade */ <<set $traceUpgrade1 to false>> /* 10% more time */ <<set $traceUpgrade2 to false>> /* 25% more time */ <<set $traceUpgrade3 to false>> /* 50% more time */ /* Bruteforce Minigame */ <<set $selectedPasswordLength to 6>> <<set $numberOfPasswordsNeeded to 5>> <<set $bruteforceBaseTraceTime to 15>> // Base time in seconds <<set $nextPassageAfterSuccessBruteforceGame to "">> <<set $nextPassageAfterFailBruteforceGame to "HackTarget">> /* Spying Landlord Mission <<set $spyingLandlordHackSuccess to false>> <<set $spyingLandlordExposed to false>> <<set $spyingLandlordFinished = false>> */ /* Black Variables */ <<set $blankVariable1 to "">> <<set $blankVariable2 to "">> <<set $blankVariable3 to "">> <<set $blankVariable4 to "">> <<set $blankVariable5 to "">> <<set $blankVariable6 to "">> <<set $blankVariable7 to "">> <<set $blankVariable8 to "">> <<set $blankVariable9 to "">> <<set $blankVariable10 to "">>
<<include "StartScreen">> <<nobr>> <<script>> function getMobileOperatingSystem() { var userAgent = navigator.userAgent || navigator.vendor || window.opera; if (/windows phone/i.test(userAgent)) { return "Windows Phone"; } if (/android/i.test(userAgent)) { return "Android"; } if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) { return "iOS"; } return "unknown"; } var os = getMobileOperatingSystem(); if (os === "iOS" || os === "Android" || os === "Windows Phone") { alert("This game is not optimized for mobile devices."); } <</script>> <</nobr>>