JavaScript must be enabled to play.
Browser lacks capabilities required to play.
Upgrade or switch to another browser.
Loading…
<div class="mobile-skip-screen"> <h2>Minigame Unavailable</h2> <p>This minigame isn't optimized for mobile devices yet.</p> <p>Skipping to ensure the best gameplay experience.</p> <br> <<button "Go Back">><<goto $skipMinigameBack>><</button>> <<if previous() is "WorkBrainFry">> <<button "Continue">><<run MindWare.submitBrainFryWork(500, 250)>><</button>> <<else>> <<button "Continue">><<goto $skipMinigameContinue>><</button>> <</if>> </div> <style> .mobile-skip-screen { font-family: var(--mindware-ui-font-primary); color: var(--mindware-ui-text-color); background-color: var(--mindware-ui-content-bg); padding: 20px; text-align: center; border: var(--mindware-ui-pixel-size) solid var(--mindware-ui-border-color); box-shadow: 0 0 10px var(--mindware-ui-shadow-color); margin: 20px auto; } .mobile-skip-screen h2 { font-size: 1.5em; margin-bottom: 15px; color: var(--mindware-ui-accent-color); } .mobile-skip-screen p { font-size: 1em; margin-bottom: 10px; color: var(--mindware-ui-light-text); } .countdown { font-size: 1.2em; margin-top: 20px; font-weight: bold; color: var(--mindware-ui-secondary-accent); } </style>
<div class="mobile-skip-screen"> <h2>Games Unavailable</h2> <p>Games aren't optimized for mobile devices yet.</p> <p>But don't worry: they are just distractions and serve no real purpose in the game.</p> <br> <<button "Go Back">><<goto $playerHome>><</button>> </div> <style> .mobile-skip-screen { font-family: var(--mindware-ui-font-primary); color: var(--mindware-ui-text-color); background-color: var(--mindware-ui-content-bg); padding: 20px; text-align: center; border: var(--mindware-ui-pixel-size) solid var(--mindware-ui-border-color); box-shadow: 0 0 10px var(--mindware-ui-shadow-color); margin: 20px auto; } .mobile-skip-screen h2 { font-size: 1.5em; margin-bottom: 15px; color: var(--mindware-ui-accent-color); } .mobile-skip-screen p { font-size: 1em; margin-bottom: 10px; color: var(--mindware-ui-light-text); } .countdown { font-size: 1.2em; margin-top: 20px; font-weight: bold; color: var(--mindware-ui-secondary-accent); } </style>
/* EXAMPLE */ <!-- Button to submit to AVA --> @@.pink-choicebutton;<<button "Submit to AVA">> <</button>>@@ <br> <!-- Button to resist AVA wrapped in a div with a unique ID --> <div id="resist-ava-button-container"> @@.choicebutton;<<button "Resist AVA">> <<run MindWare.resistAVAMinigame()>> <</button>>@@ <br> </div> <!-- Hidden Content: Button to Continue (Initially Hidden) --> <div id="AVA-resist-minigame-hidden-content" style="display: none;"> @@.choicebutton;<<button "Continue">> <<set $genderIdentityQuestionnaireQuestion3 to "true">> <<replace "#questions">> <<include "PsychologicalEvaluation1-Test-Read4">> <</replace>> <</button>>@@ </div> /* With settings */ <!-- Button to resist AVA wrapped in a div with a unique ID --> <div id="resist-ava-button-container"> @@.choicebutton;<<button "Resist AVA">> <<set $resistAVACustomSettings to true>> <<set $resistAVATotalCircles to 7>> <<set $resistAVACircleDuration to 1500>> <<set $resistAVACircleMinSize to 40>> <<set $resistAVACircleMaxSize to 80>> <<run MindWare.resistAVAMinigame()>> <</button>>@@ <br> </div>
<style> .container { touch-action: none; /* Prevents default touch behaviors */ -webkit-touch-callout: none; /* Prevents callouts */ -webkit-user-select: none; /* Prevents text selection */ -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .room { touch-action: none; -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .exit-portal { position: absolute; top: 0 !important; width: 100%; height: 100vh; background-image: url('imgs/dreams/tunnel.webp'); background-size: 100% 100%; /* z-index: 10000; */ z-index: 100004 !important; opacity: 0; /* Start fully transparent */ animation: fadeInBackground 2s ease-in-out forwards, forceRepaint 0.1s infinite; animation-delay: 0s, 2s; /* Delay for each animation respectively */ } @keyframes fadeInBackground { 0% { opacity: 0; } 100% { opacity: 1; } } /* .exit-portal { position: absolute; top: 0 !important; width: 100%; height: 100vh; background: linear-gradient(to right, rgba(0, 255, 0, 1), rgba(0, 255, 0, 1), rgba(0, 255, 0, 1) ); z-index: 10000; box-shadow: 0 0 50px #00ff00; } */ .container { max-width: 54em; /* min-height: calc(100vh - 65px); */ min-height: 100vh; margin: 0px auto; perspective: 700px; /* Slightly increase the perspective for better depth */ perspective-origin: 50% 50%; /* Add this to center the perspective point */ /* ... existing styles ... */ -webkit-perspective: 700px; -webkit-perspective-origin: 50% 50%; transform-style: preserve-3d; -webkit-transform-style: preserve-3d; /* Safari needs this prefix */ } /* For screens with max-width 1200px */ @media (max-width: 1200px) { .container { perspective: 650px; /* Slightly reduced */ } } /* For screens with max-width 992px */ @media (max-width: 992px) { .container { perspective: 600px; /* Reduced further */ } } /* For screens with max-width 844px */ @media (max-width: 844px) { .container { perspective: 550px; /* Closer to the target */ } } /* For screens with max-width 600px */ @media (max-width: 600px) { .container { perspective: 500px; /* Smallest, final perspective */ } } .room-old { position: relative; width: 100%; min-height: calc(100vh - 15vh); transform-style: preserve-3d; transform-origin: center center; /* Add this */ /* ... existing styles ... */ transform-style: preserve-3d; -webkit-transform-style: preserve-3d; backface-visibility: hidden; -webkit-backface-visibility: hidden; } .room { position: relative; width: 100%; min-height: calc(100vh - 15vh); transform-style: preserve-3d; -webkit-transform-style: preserve-3d; transform-origin: center center; -webkit-transform-origin: center center; transform-box: border-box; -webkit-transform-box: border-box; } /* For screens with max-width 1200px */ @media (max-width: 1200px) { .room { min-height: calc(100vh - 20vh); /* Slightly less space at top */ } } /* For screens with max-width 992px */ @media (max-width: 992px) { .room { min-height: calc(100vh - 25vh); } } /* For screens with max-width 844px */ @media (max-width: 844px) { .room { min-height: calc(100vh - 30vh); } } /* For screens with max-width 600px */ @media (max-width: 600px) { .room { min-height: calc(100vh - 35vh); /* Minimal space at top for smallest screens */ } } .transit { transition: all 0.6s linear; -webkit-transition: all 0.6s linear; } .transitfast { transition: all 0.3s linear; -webkit-transition: all 0.3s linear; } .room-wrapper { position: relative; width: 100%; height: 100%; overflow-y: auto; /* Allows vertical scrolling if content overflows */ overflow-x: hidden; /* Prevents horizontal scrolling */ margin-top: 5px; border: 3px solid transparent; border-image: linear-gradient(135deg, rgba(0, 175, 255, 1), rgba(255, 100, 255, 1)) 1; background: rgba(255, 255, 255, 0.05); /* backdrop-filter: blur(4px); */ box-shadow: 0px 0px 5px 2px rgba(0, 175, 255, 0.3), 0px 0px 8px 4px rgba(255, 100, 255, 0.3); animation: scanlines 0.1s steps(50) infinite, borderColorShift 5s ease-in-out infinite; /* new */ z-index: 100002; } .room div { position: absolute; top: 15px; width: 100%; height: 100%; padding: 0px; transform-origin: center center; /* Add this */ backface-visibility: hidden; /* new styles */ -webkit-transform-origin: center center; -webkit-backface-visibility: hidden; z-index: 100001; } .clickable:hover .room-wrapper { cursor: pointer; background-color: rgba(150, 150, 255, 0.4); /* More intense background on hover */ border-color: #00ccff; box-shadow: 0px 0px 20px 10px rgba(0, 175, 255, 0.8), 0px 0px 25px 12px rgba(255, 100, 255, 0.8); /* Increased glow on hover */ transition: box-shadow 0.3s ease, background-color 0.3s ease, border-color 0.3s ease; /* Smooth transition */ z-index:; } /* Scanline effect animation */ @keyframes scanlines { 0% { background-position: 0 0; } 100% { background-position: 0 100%; } } /* Border color shift animation */ @keyframes borderColorShift { 0% { border-image: linear-gradient(135deg, rgba(0, 175, 255, 1), rgba(255, 100, 255, 1)) 1; } 50% { border-image: linear-gradient(135deg, rgba(125, 75, 255, 1), rgba(255, 150, 255, 1)) 1; /* Blue shifts more to purple, pink becomes brighter */ } 100% { border-image: linear-gradient(135deg, rgba(0, 175, 255, 1), rgba(255, 100, 255, 1)) 1; } } /* Optional glow pulse for a more holographic feel */ @keyframes glowPulse { 0% { box-shadow: 0px 0px 10px 5px rgba(0, 175, 255, 0.3), 0px 0px 15px 10px rgba(255, 100, 255, 0.3); /* Reduced glow */ } 50% { box-shadow: 0px 0px 15px 10px rgba(0, 175, 255, 0.5), 0px 0px 20px 10px rgba(255, 100, 255, 0.5); /* Reduced pulse */ } 100% { box-shadow: 0px 0px 10px 5px rgba(0, 175, 255, 0.3), 0px 0px 15px 10px rgba(255, 100, 255, 0.3); } } /* Fullscreen overlay for the dream3d passage */ .dream-fullscreen-overlay { position: fixed; top: 0; left: 0; width: 100vw; /* Full viewport width */ height: 100vh; /* Full viewport height */ background-color: black; /* Black background for the minigame overlay */ z-index: 9999; /* Bring the overlay to the top of everything */ overflow: hidden; /* Ensure the overlay content does not overflow */ cursor: pointer; } /* Hide scrollbars when fullscreen overlay is active */ body.no-scroll { overflow: hidden; /* This hides the scrollbars */ } /* Hide scrollbars for the #passages element */ #passages.no-scroll { overflow: hidden; /* This will hide the scrollbars for the #passages element */ } .hypno-container { top: 0px !important; width: 100%; height: 100vh; background-size: contain, auto; background-repeat: no-repeat, repeat; background-position: center, top left; margin: 0; padding: 0; border: 0; /* z-index: 9999; */ z-index: 100003 !important; animation: cyberpunkColors 8s infinite ease-in-out; position: relative; animation: forceRepaint 0.1s infinite; } @keyframes forceRepaint { 0% { opacity: 1; } 50% { opacity: 0.9999; } 100% { opacity: 1; } } /* Subtle pulsing glow overlay */ .hypno-container::after { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: radial-gradient(circle at center, transparent 0%, rgba(185, 87, 206, 0.1) 50%, rgba(89, 148, 206, 0.2) 100% ); animation: glowHypnoPulse 4s infinite alternate; mix-blend-mode: screen; pointer-events: none; } @keyframes cyberpunkColors { 0%, 100% { filter: contrast(110%) brightness(100%) hue-rotate(0deg) saturate(120%); } 33% { /* Deep cyberpunk blue/purple */ filter: contrast(120%) brightness(95%) hue-rotate(200deg) saturate(150%); } 66% { /* Intense magenta/neon */ filter: contrast(130%) brightness(105%) hue-rotate(280deg) saturate(180%); } } @keyframes glowHypnoPulse { 0%, 100% { opacity: 0.3; } 50% { opacity: 0.7; } } .red-warning { top: 0px !important; width: 100vw; /* Full viewport width */ height: 100vh; /* Full viewport height */ background-color: rgba(255, 0, 0, 0.5); /* Semi-transparent red */ z-index: 9998; /* Below the hypno-container but on top of other content */ animation: red-flash 1s ease-in-out infinite; /* Flashing effect */ } /* Flashing animation */ @keyframes red-flash { 0% { background-color: rgba(255, 0, 0, 0.5); /* Semi-transparent red */ } 50% { background-color: rgba(255, 0, 0, 0.1); /* Lighter red */ } 100% { background-color: rgba(255, 0, 0, 0.5); /* Back to semi-transparent red */ } } </style> <<script>> (function() { window.DreamManager.cleanup(); const instanceId = Date.now(); window.DreamManager.currentInstance = instanceId; /* Configuration Variables */ const config = { images: (State.variables.dreamConfig && State.variables.dreamConfig.images !== undefined) ? State.variables.dreamConfig.images : [ 'hypno-solo/537167042_p0.webp', 'hypno-solo/538222714_p0.webp', 'hypno-solo/607915785_p1.webp', 'hypno-solo/537167473_p0.webp', 'hypno-solo/538223465_p0.webp', 'hypno-solo/610507079_p0.webp', 'hypno-solo/537168502_p0.webp', 'hypno-solo/538745429_p0.webp', 'hypno-solo/611132916_p0.webp', 'hypno-solo/537179700_p0.webp', 'hypno-solo/538849150_p0.webp', 'hypno-solo/611741618_p0.webp', 'hypno-solo/537182511_p1.webp', 'hypno-solo/538891158_p0.webp', 'hypno-solo/611741618_p1.webp', 'hypno-solo/537187364_p1.webp', 'hypno-solo/539725855_p0.webp', 'hypno-solo/620011929_p0.webp', 'hypno-solo/537188585_p0.webp', 'hypno-solo/540121463_p0.webp', 'hypno-solo/621014644_p0.webp', 'hypno-solo/537208456_p0.webp', 'hypno-solo/549691708_p0.webp', 'hypno-solo/623036862_p0.webp', 'hypno-solo/537277648_p0.webp', 'hypno-solo/564432355_p0.webp', 'hypno-solo/623980519_p0.webp', 'hypno-solo/537796555_p0.webp', 'hypno-solo/564432355_p1.webp', 'hypno-solo/630682178_p1.webp', 'hypno-solo/537807630_p0.webp', 'hypno-solo/572987598_p0.webp', 'hypno-solo/631151091_p1.webp', 'hypno-solo/537839279_p0.webp', 'hypno-solo/574359634_p0.webp', 'hypno-solo/633341305_p0.webp', 'hypno-solo/537845640_p0.webp', 'hypno-solo/583215837_p0.webp', 'hypno-solo/639446048_p1.webp', 'hypno-solo/537860788_p0.webp', 'hypno-solo/605558520_p0.webp', 'hypno-solo/648321039_p0.webp', 'hypno-solo/537990665_p0.webp', 'hypno-solo/605716507_p0.webp', 'hypno-solo/648321039_p2.webp', 'hypno-solo/537990784_p0.webp', 'hypno-solo/606507445_p0.webp', 'hypno-solo/650633046_p0.webp', 'hypno-solo/537990986_p0.webp', 'hypno-solo/607915785_p0.webp' ], initialDelay: (State.variables.dreamConfig && State.variables.dreamConfig.initialDelay !== undefined) ? State.variables.dreamConfig.initialDelay : 5000, warningDisplayTime: (State.variables.dreamConfig && State.variables.dreamConfig.warningDisplayTime !== undefined) ? State.variables.dreamConfig.warningDisplayTime : 1500, imageDisplayTime: (State.variables.dreamConfig && State.variables.dreamConfig.imageDisplayTime !== undefined) ? State.variables.dreamConfig.imageDisplayTime : 3000, numberOfSets: (State.variables.dreamConfig && State.variables.dreamConfig.numberOfSets !== undefined) ? State.variables.dreamConfig.numberOfSets : 0, numberOfWallsPerSet: (State.variables.dreamConfig && State.variables.dreamConfig.numberOfWallsPerSet !== undefined) ? State.variables.dreamConfig.numberOfWallsPerSet : 2, hypnoTimer: (State.variables.dreamConfig && State.variables.dreamConfig.hypnoTimer !== undefined) ? State.variables.dreamConfig.hypnoTimer : 10000, progressBarColor: (State.variables.dreamConfig && State.variables.dreamConfig.progressBarColor !== undefined) ? State.variables.dreamConfig.progressBarColor : "#0C85D3" }; /* const config = { images: [ '537167042_p0.webp', '538222714_p0.webp', '607915785_p1.webp', '537167473_p0.webp', '538223465_p0.webp', '610507079_p0.webp', '537168502_p0.webp', '538745429_p0.webp', '611132916_p0.webp', '537179700_p0.webp', '538849150_p0.webp', '611741618_p0.webp', '537182511_p1.webp', '538891158_p0.webp', '611741618_p1.webp', '537187364_p1.webp', '539725855_p0.webp', '620011929_p0.webp', '537188585_p0.webp', '540121463_p0.webp', '621014644_p0.webp', '537208456_p0.webp', '549691708_p0.webp', '623036862_p0.webp', '537277648_p0.webp', '564432355_p0.webp', '623980519_p0.webp', '537796555_p0.webp', '564432355_p1.webp', '630682178_p1.webp', '537807630_p0.webp', '572987598_p0.webp', '631151091_p1.webp', '537839279_p0.webp', '574359634_p0.webp', '633341305_p0.webp', '537845640_p0.webp', '583215837_p0.webp', '639446048_p1.webp', '537860788_p0.webp', '605558520_p0.webp', '648321039_p0.webp', '537990665_p0.webp', '605716507_p0.webp', '648321039_p2.webp', '537990784_p0.webp', '606507445_p0.webp', '650633046_p0.webp', '537990986_p0.webp', '607915785_p0.webp' ], initialDelay: 5000, warningDisplayTime: 1500, imageDisplayTime: 3000, numberOfSets: 0, numberOfWallsPerSet: 2 }; */ /* Validation for numberOfWallsPerSet */ if (config.numberOfWallsPerSet < 0 || config.numberOfWallsPerSet > 4) { console.error("numberOfWallsPerSet must be between 0 and 4."); config.numberOfWallsPerSet = 3; /* Default to 3 if invalid */ } /* Helper Function to Shuffle an Array */ function shuffle(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]]; } return array; } /* Helper Function to Get Random Subset */ function getRandomSubset(array, size) { if (size > array.length) { throw new Error("Subset size larger than array length"); } const shuffled = shuffle([...array]); return shuffled.slice(0, size); } /* Preload Images */ config.images.forEach(img => { const image = new Image(); image.src = `imgs/dreams/${img}`; }); /* Initialize Variables */ let currentSet = 0; /* Function to Start the Image Cycle */ function startImageCycle() { if (window.DreamManager.currentInstance !== instanceId) return; setTimeout(() => { runSet(); }, config.initialDelay); } /* Function to Run Each Set */ function runSet() { if (window.DreamManager.currentInstance !== instanceId) return; /* Remove the end condition check and replace with infinite loop logic */ if (config.numberOfSets > 0 && currentSet >= config.numberOfSets) { console.log("All sets completed."); return; } console.log(`Running set ${currentSet + 1}`); /* Determine the number of walls to display images on for this set */ let numberOfWalls = config.numberOfWallsPerSet; /* If numberOfWalls is 0, skip this set */ if (numberOfWalls === 0) { console.log("No walls selected for this set."); currentSet++; runSet(); /* Proceed to next set immediately */ return; } /* Ensure numberOfWalls does not exceed 4 */ numberOfWalls = Math.min(numberOfWalls, 4); /* Get the currently facing wall */ const facingWall = State.variables.facing; /* Check if exit portal exists on any wall */ const wallElements = document.querySelectorAll('.room-wrapper'); let wallWithPortal = null; wallElements.forEach(wall => { if (wall.querySelector('.exit-portal')) { wallWithPortal = wall.id.replace('wall-', ''); } }); /* Validate the facingWall */ const validWalls = ['N', 'E', 'S', 'W']; if (!validWalls.includes(facingWall)) { console.error(`Invalid facing wall: ${facingWall}`); currentSet++; runSet(); return; } /* Select walls, excluding the wall with the portal */ let availableWalls = validWalls.filter(wall => wall !== wallWithPortal); let selectedWalls = []; if (numberOfWalls >= 1) { if (!wallWithPortal || facingWall !== wallWithPortal) { selectedWalls.push(facingWall); } if (numberOfWalls > 1) { const remainingWalls = availableWalls.filter(wall => wall !== facingWall); const additionalWalls = getRandomSubset(remainingWalls, Math.min(numberOfWalls - selectedWalls.length, remainingWalls.length)); selectedWalls = selectedWalls.concat(additionalWalls); } } console.log(`Selected Images: ${selectedWalls.length >0 ? selectedWalls.length : 0}`); console.log(`Selected Walls: ${selectedWalls}`); /* Select random images based on the number of selected walls */ const selectedImages = getRandomSubset(config.images, selectedWalls.length); console.log(`Selected Images: ${selectedImages}`); /* Display warnings on selected walls */ selectedWalls.forEach((wall, index) => { const wallElement = $(`#wall-${wall}`); const warningDiv = $(` <div class="red-warning dynamic-warning" id="warning-${wall}-${currentSet}"></div> `); wallElement.append(warningDiv); }); /* After warningDisplayTime, remove warnings and display images */ setTimeout(() => { /* Remove warnings */ selectedWalls.forEach(wall => { $(`#warning-${wall}-${currentSet}`).remove(); }); /* Assign images to walls */ selectedWalls.forEach((wall, index) => { const wallElement = $(`#wall-${wall}`); const imageUrl = `imgs/dreams/${selectedImages[index]}`; /* Create hypno-container div with duplicated background-image */ const hypnoDiv = $(` <div class="hypno-container dynamic-hypno" id="hypno-${wall}-${currentSet}" style=" background-image: url('${imageUrl}'), url('${imageUrl}'); "> </div> `); /* Append to the wall */ wallElement.append(hypnoDiv); }); /* After imageDisplayTime, remove images and proceed to next set */ setTimeout(() => { if (window.DreamManager.currentInstance !== instanceId) return; selectedWalls.forEach(wall => { $(`#hypno-${wall}-${currentSet}`).remove(); }); /* Increment set counter (useful for generating unique IDs) */ currentSet++; /* Check if we should stop based on passage change */ const currentPassage = SugarCube.Story.get(SugarCube.State.passage); if (!currentPassage || !currentPassage.tags.includes('dream3d')) { console.log("Dream sequence ended."); return; } /* Continue to next set */ runSet(); }, config.imageDisplayTime); }, config.warningDisplayTime); } /* Store intervals for cleanup */ function setDreamInterval(callback, delay) { const id = setInterval(callback, delay); window.DreamManager.intervalIds.add(id); return id; } /* Add cleanup handler */ $(document).on(':passagestart', function (ev) { window.DreamManager.cleanup(); }); /* Add a cleanup function to handle passage changes */ $(document).on(':passagestart', function (ev) { /* Check if we're leaving a dream3d passage */ const prevPassage = SugarCube.Story.get(SugarCube.State.passage); if (prevPassage && prevPassage.tags.includes('dream3d')) { /* Clean up any remaining dynamic elements */ $('.dynamic-warning, .dynamic-hypno').remove(); } }); /* Start the cycle when the passage is displayed */ $(document).on(':passagedisplay', function (ev) { /* Check if the current passage has the 'dream3d' tag */ const currentPassageName = SugarCube.State.passage; const currentPassage = SugarCube.Story.get(currentPassageName); if (currentPassage && currentPassage.tags.includes('dream3d')) { startImageCycle(); } }); })(); <</script>> <<if !$disableHypnoTimer>> <div id="hypno-timer-container" style="position: fixed; bottom: 10px; right: 10px; left: 10px; display: flex; align-items: center; gap: 10px;"> <div id="hypno-progress" style="flex: 1; height: 10px; background-color: rgba(255,255,255,0.3); border: 1px solid #fff; border-radius: 5px; overflow: hidden;"> <div id="hypno-progress-fill" style="width: 0%; height: 100%; background-color: #0C85D3; transition: width 0.1s linear;"></div> </div> <div id="exit-timer" style="background-color: rgba(0,0,0,0.5); color: white; padding: 5px 10px; border-radius: 5px; font-family: monospace;">00:00</div> </div> <<else>> <div id="exit-button-container" style="position: fixed; bottom: 10px; right: 10px;"> <button onclick="SugarCube.Engine.play(SugarCube.State.variables.returnPassage); window.stopDreamsSound();" style="background-color: rgba(0,0,0,0.7); color: white; padding: 10px 20px; border: 1px solid #fff; border-radius: 5px; cursor: pointer; font-family: monospace; transition: all 0.3s ease;"> EXIT DREAM </button> </div> <</if>> /* <div id="exit-timer-container" style="position: fixed; bottom: 30px; right: 10px; left: 10px; display: flex; align-items: center; gap: 10px;"> <div id="exit-progress" style="flex: 1; height: 10px; background-color: rgba(255,255,255,0.3); border: 1px solid #fff; border-radius: 5px; overflow: hidden;"> <div id="exit-progress-fill" style="width: 0%; height: 100%; background-color: #00FF00; transition: width 0.1s linear;"></div> </div> </div> */
<canvas class="background" id="matrixEffectWest" style="width: 100%; height: 100%;"></canvas> <script> (function () { const n = document.getElementById('matrixEffectWest'); if (n) { var e = n.getContext('2d'); var t = (n.width = window.innerWidth); var a = (n.height = window.innerHeight); var i = Array(275).join(0).split(''); if (typeof West_Game_Interval !== 'undefined') { clearInterval(West_Game_Interval); } West_Game_Interval = setInterval(o, 45); } function o() { (e.fillStyle = 'rgba(0,0,0,.07)'), e.fillRect(0, 0, t, a), (e.fillStyle = '#0C85D3'), (e.font = '10px Georgia'), i.map((n, t) => { (text = String.fromCharCode(100 + 33 * Math.random())), (x = 10 * t), e.fillText(text, x, n), n > 100 + 3e4 * Math.random() ? (i[t] = 0) : (i[t] = n + 10); }); } })(); </script>
<canvas class="background" id="matrixEffectNorth" style="width: 100%; height: 100%;"></canvas> <script> (function () { const n = document.getElementById('matrixEffectNorth'); if (n) { var e = n.getContext('2d'); var t = (n.width = window.innerWidth); var a = (n.height = window.innerHeight); var i = Array(275).join(0).split(''); if (typeof North_Game_Interval !== 'undefined') { clearInterval(North_Game_Interval); } North_Game_Interval = setInterval(o, 45); } function o() { (e.fillStyle = 'rgba(0,0,0,.07)'), e.fillRect(0, 0, t, a), (e.fillStyle = '#0C85D3'), (e.font = '10px Georgia'), i.map((n, t) => { (text = String.fromCharCode(100 + 33 * Math.random())), (x = 10 * t), e.fillText(text, x, n), n > 100 + 3e4 * Math.random() ? (i[t] = 0) : (i[t] = n + 10); }); } })(); </script>
<canvas class="background" id="matrixEffectEast" style="width: 100%; height: 100%;"></canvas> <script> (function () { const n = document.getElementById('matrixEffectEast'); if (n) { var e = n.getContext('2d'); var t = (n.width = window.innerWidth); var a = (n.height = window.innerHeight); var i = Array(275).join(0).split(''); if (typeof East_Game_Interval !== 'undefined') { clearInterval(East_Game_Interval); } East_Game_Interval = setInterval(o, 45); } function o() { (e.fillStyle = 'rgba(0,0,0,.07)'), e.fillRect(0, 0, t, a), (e.fillStyle = '#0C85D3'), (e.font = '10px Georgia'), i.map((n, t) => { (text = String.fromCharCode(100 + 33 * Math.random())), (x = 10 * t), e.fillText(text, x, n), n > 100 + 3e4 * Math.random() ? (i[t] = 0) : (i[t] = n + 10); }); } })(); </script>
<canvas class="background" id="matrixEffectSouth" style="width: 100%; height: 100%;"></canvas> <script> (function () { const n = document.getElementById('matrixEffectSouth'); if (n) { var e = n.getContext('2d'); var t = (n.width = window.innerWidth); var a = (n.height = window.innerHeight); var i = Array(275).join(0).split(''); if (typeof South_Game_Interval !== 'undefined') { clearInterval(South_Game_Interval); } South_Game_Interval = setInterval(o, 45); } function o() { (e.fillStyle = 'rgba(0,0,0,.07)'), e.fillRect(0, 0, t, a), (e.fillStyle = '#0C85D3'), (e.font = '10px Georgia'), i.map((n, t) => { (text = String.fromCharCode(100 + 33 * Math.random())), (x = 10 * t), e.fillText(text, x, n), n > 100 + 3e4 * Math.random() ? (i[t] = 0) : (i[t] = n + 10); }); } })(); </script>
<<if !State.variables.facing>> <<set $facing = 'N'>> <</if>> <<set $dreamConfig = { "images": [ "hypno-solo/537167042_p0.webp", "hypno-solo/538222714_p0.webp", "hypno-solo/607915785_p1.webp", "hypno-solo/537167473_p0.webp", "hypno-solo/538223465_p0.webp", "hypno-solo/610507079_p0.webp", "hypno-solo/537168502_p0.webp", "hypno-solo/538745429_p0.webp", "hypno-solo/611132916_p0.webp", "hypno-solo/537179700_p0.webp", "hypno-solo/538849150_p0.webp", "hypno-solo/611741618_p0.webp", "hypno-solo/537182511_p1.webp", "hypno-solo/538891158_p0.webp", "hypno-solo/611741618_p1.webp", "hypno-solo/537187364_p1.webp", "hypno-solo/539725855_p0.webp", "hypno-solo/620011929_p0.webp", "hypno-solo/537188585_p0.webp", "hypno-solo/540121463_p0.webp", "hypno-solo/621014644_p0.webp", "hypno-solo/537208456_p0.webp", "hypno-solo/549691708_p0.webp", "hypno-solo/623036862_p0.webp", "hypno-solo/537277648_p0.webp", "hypno-solo/564432355_p0.webp", "hypno-solo/623980519_p0.webp", "hypno-solo/537796555_p0.webp", "hypno-solo/564432355_p1.webp", "hypno-solo/630682178_p1.webp", "hypno-solo/537807630_p0.webp", "hypno-solo/572987598_p0.webp", "hypno-solo/631151091_p1.webp", "hypno-solo/537839279_p0.webp", "hypno-solo/574359634_p0.webp", "hypno-solo/633341305_p0.webp", "hypno-solo/537845640_p0.webp", "hypno-solo/583215837_p0.webp", "hypno-solo/639446048_p1.webp", "hypno-solo/537860788_p0.webp", "hypno-solo/605558520_p0.webp", "hypno-solo/648321039_p0.webp", "hypno-solo/537990665_p0.webp", "hypno-solo/605716507_p0.webp", "hypno-solo/648321039_p2.webp", "hypno-solo/537990784_p0.webp", "hypno-solo/606507445_p0.webp", "hypno-solo/650633046_p0.webp", "hypno-solo/537990986_p0.webp", "hypno-solo/607915785_p0.webp" ], "initialDelay": 3000, "warningDisplayTime": 1500, "imageDisplayTime": 3000, "numberOfSets": 0, "dreamFailTimer": 5000, "numberOfWallsPerSet": 2, "dreamSoundId": "dream-hypno-obey" }>> <div class="container"> <div class="room"> <div class="west" data-wall="W" onclick="rotate('W')"> <div class="room-wrapper" id="wall-W"> <<include "Matrix Effect West">> </div> </div> <div class="north" data-wall="N" onclick="rotate('N')"> <div class="room-wrapper" id="wall-N"> <<include "Matrix Effect North">> </div> </div> <div class="east" data-wall="E" onclick="rotate('E')" > <div class="room-wrapper" id="wall-E"> <<include "Matrix Effect East">> </div> </div> <div class="south" data-wall="S" onclick="rotate('S')" > <div class="room-wrapper" id="wall-S"> <<include "Matrix Effect South">> </div> </div> </div> </div> <<include "Dream3D">>
<<if !State.variables.facing>> <<set $facing = 'N'>> <</if>> <<set $dreamConfig = { "images": [ "hypno-cock/537166764_p0.webp", "hypno-cock/621848180_p0.webp", "hypno-cock/537183268_p0.webp", "hypno-cock/579291385_p0.webp", "hypno-cock/622903894_p0.webp", "hypno-cock/537278168_p0.webp", "hypno-cock/583309087_p1.webp", "hypno-cock/629789236_p0.webp", "hypno-cock/537905533_p0.webp", "hypno-cock/605558520_p1.webp", "hypno-cock/629789704_p0.webp", "hypno-cock/538552372_p0.webp", "hypno-cock/605652189_p1.webp", "hypno-cock/630682178_p0.webp", "hypno-cock/540110418_p0.webp", "hypno-cock/631833543_p0.webp", "hypno-cock/557661099_p1.webp", "hypno-cock/563038141_p0.webp", "hypno-cock/639446048_p2.webp", "hypno-cock/564671788_p1.webp", "hypno-cock/618836280_p1.webp", "hypno-cock/650633046_p1.webp", "hypno-cock/572987598_p1.webp", "hypno-cock/576005360_p0.webp" ], "initialDelay": 3000, "warningDisplayTime": 1000, "imageDisplayTime": 3000, "numberOfSets": 0, "numberOfWallsPerSet": 3, "dreamFailTimer": 5000, "dreamSoundId": "dream-hypno-cock" }>> <div class="container"> <div class="room"> <div class="west" data-wall="W" onclick="rotate('W')"> <div class="room-wrapper" id="wall-W"> <<include "Matrix Effect West">> </div> </div> <div class="north" data-wall="N" onclick="rotate('N')"> <div class="room-wrapper" id="wall-N"> <<include "Matrix Effect North">> </div> </div> <div class="east" data-wall="E" onclick="rotate('E')" > <div class="room-wrapper" id="wall-E"> <<include "Matrix Effect East">> </div> </div> <div class="south" data-wall="S" onclick="rotate('S')" > <div class="room-wrapper" id="wall-S"> <<include "Matrix Effect South">> </div> </div> </div> </div> <<include "Dream3D">>
<<widget "statChange">> <<if ndef $statChanges>> <<set $statChanges to {}>> <</if>> <<if not $statChanges.hasOwnProperty(_args[0])>> <<set _tempStatValue to 0>> _args[1] <<set $statChanges[_args[0]] to _tempStatValue>> <</if>> <</widget>>
<<widget "moreFeminine">> <<set _amount to _args[0]>> <<set _tempStatValue to _amount>> <<set _playerGender to State.variables.playerGender>> <<set _newGender to 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><br> <<run console.log("GenderFeminine widget: Gender already at minimum (0). Affirmation message displayed.")>> <<else>> <<set State.variables.playerGender to _newGender>> <<set _pointText to _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><br> <<run console.log("GenderFeminine widget: Gender decreased by " + _amount + " to " + _newGender)>> <</if>> <</widget>> <<widget "moreMasculine">> <<set _amount to _args[0]>> <<set _tempStatValue to _amount>> <<set _playerGender to State.variables.playerGender>> <<set _newGender to 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><br> <<run console.log("GenderMasculine widget: Gender already at maximum (100). Affirmation message displayed.")>> <<else>> <<set State.variables.playerGender to _newGender>> <<set _pointText to _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><br> <<run console.log("GenderMasculine widget: Gender increased by " + _amount + " to " + _newGender)>> <</if>> <</widget>>
/* First Missed Rent Message */ <<if $missedPaymentsCount >= 1 && !$hivePropertiesQuestStarted>> <<set $hivePropertiesQuestStarted to true>> <<set $rentComplianceSpecialistVisitDay to $totalDays + 3>> <<set $rentComplianceSpecialistComing to true>> <<run MindWare.addEmail ("Hive Properties","Hive Properties - Missed Rent Payment", "You have missed a rent payment. An appoitment with a Rent Compliance Specialist has been scheduled.", "Email-HiveProperties-MissedPayment1")>> <</if>> /* First RCS Visit event */ <<if $rentComplianceSpecialistComing && $totalDays === $rentComplianceSpecialistVisitDay && !$rentComplianceSpecialistVisitTriggered && passage() === $playerHome>> <<set $rentComplianceSpecialistVisitTriggered to true>> <<goto "HiveProperties-MissedPayment1-Visit">> <</if>> /* SUCKER installation */ <<if $SUCKERScheduled && !$SUCKERInstalled && $totalDays === $SUCKERInstallationDay>> <<set $SUCKERScheduled to false>> <<goto "HiveProperties-SUCKER-Installation">> <</if>>
<div class="email-message"> <div class="from-line"><strong>From:</strong> Hive Properties</div> <div class="subject-line"><strong>Subject:</strong> Hive Properties - Missed Rent Payment</div> <div class="message-content"> <img src="imgs/emails/hive-properties-welcome-email.webp" width="100%"> <p>Dear Tenant,</p> <p>We regret to inform you that your recent rent payment has not been received. This is a serious matter that requires your immediate attention.</p> <p><strong>URGENT ACTION REQUIRED:</strong></p> <p>You have <span style="color: red; font-weight: bold;">THREE (3) DAYS</span> from the date of this email to rectify this situation by submitting your overdue payment in full.</p> <p>Failure to do so will result in the dispatch of a Rent Compliance Specialist to your residence. They will discuss your payment delinquency with you and explore potential resolutions.</p> <p>Thank you for your prompt attention to this critical matter.</p> <p class="hive-welcome-footer">Regards,<br>Hive Properties Management</p> </div> <div class="email-message-buttons"> <<if !MindWare.emailIsRead("Email-HiveProperties-MissedPayment1")>> @@.email-listing;<<button "Mark as Read">> <<run MindWare.markEmailAsRead("Email-HiveProperties-MissedPayment1")>> <<goto "Email-HiveProperties-MissedPayment1">> <</button>> @@ <</if>> </div> </div> <br> <p class="back-link">[[Go Back -> EmailClient]]</p>
<<nobr>> <style> .knock { font-size: 4em; text-align: center; color: white; animation: knockAnimation 1.5s ease-in-out infinite; display: inline-block; position: relative; } @keyframes knockAnimation { 0% { transform: scale(1) translateY(0); color: white; text-shadow: 2px 2px 0 #000; } 10% { transform: scale(1.1) translateY(-10px); color: white; text-shadow: 4px 4px 0 #000, -4px -4px 0 #000; } 20% { transform: scale(1) translateY(0); color: white; text-shadow: 2px 2px 0 #000; } 30% { transform: scale(1.1) translateY(-10px); color: white; text-shadow: 4px 4px 0 #000, -4px -4px 0 #000; } 40% { transform: scale(1) translateY(0); color: white; text-shadow: 2px 2px 0 #000; } 50% { transform: scale(1.1) translateY(-10px); color: white; text-shadow: 4px 4px 0 #000, -4px -4px 0 #000; } 60% { transform: scale(1) translateY(0); color: white; text-shadow: 2px 2px 0 #000; } 100% { transform: scale(1) translateY(0); color: white; text-shadow: 2px 2px 0 #000; } } </style> <</nobr>> <h1 class="knock">KNOCK! KNOCK! KNOCK!</h1> <div class="narrator">You're jolted awake by the sound of loud, insistent knocking. For a moment, you're disoriented. Living in Hive Properties, you're accustomed to the cacophony of sounds from neighboring units - arguments, music, and yes, knocking. But this... this is different. The knocking is coming from your own door. You can't remember the last time you had a visitor.</div> <<if MindWare.emailIsRead("Email-HiveProperties-MissedPayment1")>> <div class="narrator">As sleep clears from your mind, a sinking feeling settles in your stomach. You remember the email. The missed payment. The warning. It all comes flooding back - the Rent Compliance Specialist. They're here, just as they promised.</div> <<else>> <div class="narrator">Who could it possibly be? You wrack your brain, but come up empty. You never have visitors, and you certainly weren't expecting anyone today.</div> <</if>> <div class="narrator">The knocking continues, growing more insistent. It's clear whoever is on the other side of the door isn't going away. You take a deep breath, steeling yourself for whatever - or whoever - awaits you.</div> @@.choicebutton;<<button "Open the door">><<goto "HiveProperties-MissedPayment1-Visit-OpenDoor">><</button>>@@
<div class="img-location"><img src="imgs/quests/missed-rent-payment/hive-properties-agent-visit.webp" width="100%"></div> <<narrator>>As you open the door, you're greeted by the sight of a stern-looking woman in a crisp, gray suit.<</narrator>> <<hiveagent>>Good morning. Is this the residence of Mr. $playerLastName?<</hiveagent>> <<player>>Yes, that's me.<</player>> <<hiveagent>>I'm a Hive Properties agent. I'm here because you've missed $missedPaymentsCount <<if $missedPaymentsCount > 1>>payments<<else>>payment<</if>>, totaling $totalMissedRent. Hive Properties takes this matter very seriously, and it's important we resolve this situation immediately.<</hiveagent>> <<player>>I... I understand.<</player>> <<hiveagent>>As per our new policy, all tenants with outstanding balances are required to have a Specialized Unit for Corporeal Kinetic Extraction and Recycling, or SUCKER, installed in their unit.<</hiveagent>> <<player>>What is this system?<</player>> <<hiveagent>>The Specialized Unit for Corporeal Kinetic Extraction and Recycling is designed for at-home extraction of various bodily fluids based on market demand. Currently, blood plasma is in high demand. You would use the device early in the morning and place the extracted fluid in a collection box outside your apartment. A collector will retrieve it when notified by the box.<</hiveagent>> <<narrator>>The agent's tone remains clinically detached as she explains the device, as if she were describing a kitchen appliance rather than a method of literally draining your body to pay rent.<</narrator>> <<hiveagent>>Hive Properties began installing the first SUCKER units several months ago as part of a pilot program. The initiative has been a resounding success, allowing tenants to remain in their homes while addressing their financial obligations. The collected fluids are sold to medical research facilities and hospitals, creating a mutually beneficial arrangement.<</hiveagent>> <<player>>So that's why I haven't heard about them before?<</player>> <<hiveagent>>Precisely. You're among the first wave of tenants to be offered this opportunity outside of the initial test group. You should consider yourself fortunate to have this alternative to eviction. Many of our tenants have found it to be a convenient solution to their financial difficulties.<</hiveagent>> <<narrator>>The agent's words, meant to be reassuring, only serve to heighten your sense of unease.<</narrator>> <<hiveagent>>This arrangement would allow you to stay in your apartment while working off your debt. Each extraction will be credited towards your outstanding balance, with the potential to even generate additional income once your debt is cleared.<</hiveagent>> <<player>>I... I think I need some time to think about this.<</player>> <<hiveagent>>There is nothing to think about, Mr. $playerLastName. The installation and, if in debt, the use of SUCKER is mandatory.<</hiveagent>> <<player>>Wait... is this even legal?<</player>> <<hiveagent>>Mr. $playerLastName, I assure you that Hive Properties operates within the bounds of the law. Our legal team has thoroughly vetted this program. If you review your rental agreement, you'll find a clause that allows for 'alternative payment methods' in cases of delinquency.<</hiveagent>> <<player>>But I never agreed to... this.<</player>> <<hiveagent>>By residing in a Hive Properties unit, you've implicitly agreed to our terms and conditions, which are subject to change.<</hiveagent>> <<player>>Do I really have no other choice?<</player>> <<hiveagent>>I'm afraid not, Mr. $playerLastName. The SUCKER installation is now a standard procedure for addressing missed payments. It's either this or face immediate eviction proceedings. Now, shall we proceed with scheduling the installation?<</hiveagent>> <<player>>It's not like I can refuse.<</player>> <<hiveagent>>Very well. I'll schedule the installation team for tomorrow morning. Be ready by 8 AM sharp. They will require full access to your apartment. Do you understand?<</hiveagent>> <<player>>Yes, I understand.<</player>> <<hiveagent>>Good. Sign here to confirm your agreement.<</hiveagent>> <<narrator>>The agent produces a digital tablet with a contract displayed on the screen. Your hand trembles slightly as you sign, feeling as if you're signing away more than just rent money.<</narrator>> <<hiveagent>>Thank you for your cooperation, Mr. $playerLastName. Remember, 8 AM tomorrow. Good day.<</hiveagent>> <<narrator>>With a curt nod, the agent turns and leaves.<</narrator>> <<button "Continue">> <<set $SUCKERScheduled to true>> <<set $rentComplianceSpecialistComing to false>> <<set $SUCKERInstallationDay to $totalDays + 1>> <<goto $playerHome>> <</button>>
/* DEV TODO: add a sex scene with trans or female player */\ <<narrator>>The morning light filters through your window as you hear a firm knock at your door. You open it to find two burly workers in Hive Properties uniforms, toolboxes in hand.<</narrator>> <div class="img-location"><img src="imgs/quests/missed-rent-payment/hive-properties-workers.webp" width="100%"></div> <<worker1>>Morning, Mr. $playerLastName. We're here to install your Specialized Unit for Corporeal Kinetic Extraction and Recycling unit.<</worker1>> <<player>>Come in.<</player>> <<narrator>>The workers step inside, their heavy boots echoing through your apartment. They head straight to your bathroom, setting their toolboxes down with a clatter.<</narrator>> <<worker2>>Alright, let's get this show on the road. Where do you want the SUCKER?<</worker2>> <<player>>Uh, I guess next to the sink?<</player>> <<narrator>>The workers nod and start unpacking their equipment. You watch as they begin to assemble the SUCKER unit.<</narrator>> <<video "imgs/quests/missed-rent-payment/SUCKER-installation.mp4">> <<narrator>>The installation process is surprisingly quick. Within minutes, the SUCKER unit is securely mounted next to your sink, looking almost like a futuristic piece of art.<</narrator>> <div><img src="imgs/quests/missed-rent-payment/SUCKER.webp" width="100%"></div> <<worker1>>All done. Now, let me explain how this thing works.<</worker1>> <<worker2>>Yeah, it's pretty straightforward. You just sit here, attach this tube to your arm, and the SUCKER machine does the rest.<</worker2>> <<narrator>>The worker demonstrates, pointing out the various parts of the device. There's a small screen that displays instructions, retractable tube with a needle hidden inside its metallic end, a blood collection bad in a climate-controlled compartment, and an oval opening that causes the two workerks to pause.<</narrator>> <<worker2>>And, uh, you'll notice there’s an additional... feature here.<</worker2>> <<worker2>>Yeah, that's for... additional collections. We're not supposed to talk about it yet, but let's just say it's for when they expand the program.<</worker2>> <<worker1>>Right, right. Just focus on the blood plasma for now. The rest will be explained later.<</worker1>> <<narrator>>The workers exchange a quick glance, and you get the sense that there's more to this device than they're letting on.<</narrator>> <<worker1>>Anyway, that's about it. Pretty simple, huh?<</worker1>> <<player>>I guess so.<</player>> <<worker1>>Every morning, place the collection container in the collection box outside your apartment, and a collector will pick it up.<</worker1>> <<narrator>>You nod and the workers pack up their tools and head for the door.<</narrator>> <<worker1>>Alright, Mr. $playerLastName, you're all set. Have a good one.<</worker1>> <<button "Continue">> <<set $SUCKERInstalled to true>> <<goto "HiveProperties-SUCKER-FirstExtraction">> <</button>>
<div class="img-location"><img src="imgs/quests/missed-rent-payment/SUCKER.webp" width="100%"></div> <div class="narrator">You stand in front of the newly installed SUCKER machine, its sleek metallic surface gleaming in the bathroom light. The small screen flickers to life, displaying step-by-step instructions. With a deep breath, you sit down and roll up your sleeve.</div> @@.choicebutton;<<button "Perform Extraction">><<goto "HiveProperties-SUCKER-ExtractionResult">><</button>>@@
<div class="narrator">The retractable tube extends, and you place its metallic end on your arm. The machine whirs to life, and you feel a sharp pinch as the needle pierces your skin.</div> <div class="narrator">As the extraction begins and your blood starts flowing through the transparent tube. The machine hums softly, separating the plasma from your blood with clinical efficiency.</div> <<video "imgs/quests/missed-rent-payment/blood-flow.mp4">> <div class="narrator">After rougly 30 minutes, the machine beeps, signaling the end of the extraction. The needle retracts, leaving behind only a small droplet of blood.</div> <div class="narrator">You feel a bit lightheaded as you stand up, the room spinning slightly. The machine has produced a neat, labeled container of your plasma, ready for collection.</div> @@.choicebutton;<<button "Deposit Your Plasma">> <<run MindWare.performPlasmaExtraction()>> <<goto "HiveProperties-SUCKER-FirstDeposit">> <</button>>@@
<div class="img-location"><img src="imgs/quests/missed-rent-payment/collection-box.webp" width="100%"></div> <<narrator>>You carefully place the plasma bag into the collection box outside your apartment. The box scans the bag while producing a series of beeps and flashes.<</narrator>> <<narrator>>Within seconds, the box completes its analysis and a small screen informs you that your deposit has been accepted and collection scheduled.<</narrator>> <<narrator>>The money is instantly credited to your account.<</narrator>> <<button "Continue">> <<goto $playerHome>> <</button>>
<div class="img-location"><img src="imgs/quests/missed-rent-payment/SUCKER.webp" width="100%"></div> <<fadein 2000ms 100ms>><<narrator>>As dawn breaks, you're awakened by the notification sound of the SUCKER machine telling you that you own Hive Properties rent and are thus required to donate some of your bodily fluids. Still groggy, you make your way to the bathroom.<</narrator>><</fadein>> <<fadein 2000ms 2000ms>><<narrator>>You sit down in front of the machine. The familiar pinch of the needle barely registers as the extraction begins.<</narrator>><</fadein>> <<fadein 2000ms 4000ms>><<video "imgs/quests/missed-rent-payment/blood-flow.mp4">><</fadein>> <<fadein 2000ms 6000ms>><<narrator>>The transparent tube fills with your blood, and the machine starts separating your plasma. You feel lightheaded.<</narrator>><</fadein>> <<fadein 2000ms 8000ms>><<narrator>>Finally, the machine beeps, signaling the end of the process. You stand up slowly, steadying yourself against the sink, and place the valuable fluid in the collection box outside your apartment.<</narrator>><</fadein>> <<fadein 2000ms 10000ms>><<button "Continue">> <<run MindWare.performPlasmaExtraction()>> <<goto $playerHome>> <</button>><</fadein>>
<<if visited() is 1>> <<set $uglyBastardQuestStage to 1>> <</if>> <<switch $uglyBastardQuestStage>> <<case 1>> <<include "Ugly-Bastard-Quest-1">> <<case 2>> <<include "Ugly-Bastard-Quest-2">> <<case 3>> <<include "Ugly-Bastard-Quest-3">> <<case 3>> <<include "Ugly-Bastard-Quest-4">> <<default>> <<include "Ugly-Bastard-Quest-Complete">> <</switch>>
<<img-location "imgs/quests/ugly-bastard/freezer-outside.webp">> <<narration>>You step into the kitchen, the air thick with the scent of grease. You look around, expecting to see the cook, but the kitchen is eerily empty. There's no sign of him anywhere.<</narration>> <<narration>>As you scan the room, you hear a muffled noise coming from the walk-in freezer.<</narration>> <<button "Investigate the Noise">> <<goto "Ugly-Bastard-Quest-1-Investigate">> <</button>> <br><br> <<button "Come Back Later">> <<goto "EroSphere-Outside">> <</button>>
<<fadein 2000ms 0000ms>><<narration>>The cold air is seeping out from the slightly opened door and sending a chill down your spine as you cautiously approach the walk-in freezer.<</narration>><</fadein>> <<fadein 2000ms 2000ms>><<narration>>You peek through the narrow opening, your breath misting in the frigid air.<</narration>><</fadein>> <<fadein 2000ms 4000ms>><<narration>>It takes a moment for your eyes to adjust to the dim light, but then you locate the source of the noise.<</narration>><</fadein>> <<fadein 2000ms 6000ms>><<narration>>To your horror, you see the cook, completely naked but seemingly impervious to the cold thanks to the absurdly thick layer of fat covering his body. He's shoving his cock into a girl's mouth.<</narration>><</fadein>> <<fadein 2000ms 8000ms>><<narration>>His massive belly slaps against her head with each brutal push, the sound echoing grotesquely in the confined space.<</narration>><</fadein>> <<fadein 2000ms 10000ms>><<vid "imgs/quests/ugly-bastard/oral1.mov">><</fadein>> <<fadein 2000ms 12000ms>><<narration>>Your immediate reaction is one of utter disgust. You quickly decide to leave before he notices your presence.<</narration>><</fadein>> <<fadein 2000ms 14000ms>><<button "Leave Quickly">> <<goto "EroSphere-Outside">> <<set $uglyBastardQuestStage to 2>> <</button>><</fadein>>
<<img-location "imgs/locations/erosphere/erosphere-supply-room.webp">> <<narration>>You hear noises again, but this time they're not coming from the walk-in freezer. The sounds are coming from the cook's small office. You immediately realize what's going on. You feel repulsed by the memory from the last time, but at the same time, you're curious in an almost morbid way.<</narration>> <<button "Investigate the Noise">> <<goto "Ugly-Bastard-Quest-2-Investigate">> <</button>> <br><br> <<button "Come Back Later">> <<goto "EroSphere-Outside">> <</button>>
<<narration>>You peek through the door to the office and see the fat cook with a different girl than before. This time, the girl is kneeling on a sofa, and the fat cook is fucking her from behind.<</narration>> <<vid "imgs/quests/ugly-bastard/doggie1.mp4">> <<narration>>You watch as he pauses between thrusts to lift his stomach up and slap the girl's ass with it. The sound of flesh hitting flesh echoes through the room, and you can see the red marks forming on her skin.<</narration>> <<narration>>You feel revolted, but then you hear the girl's moan as he slaps her with his fat belly. You realize that she's actually enjoying herself.<</narration>> <<narration>>You struggle to imagine what an attractive girl—presumably an EroSphere stripper—finds attractive about getting fucked by such an ugly bastard.<</narration>> <<narration>>Suddenly, AVA speaks to you.<</narration>> <<AVA>>It's not that difficult to understand—he gives her what she craves.<</AVA>> <<PLAYER>>And what is that?<</PLAYER>> <<AVA>>The feeling of being strongly desired, craved, lusted for. Yes, he may be ugly, but he doesn't hold back—he indulges himself with all of his senses—she feels that—like if she's his tasty meal and he's ready to devour her.<</AVA>> <<PLAYER>>That's what women like?<</PLAYER>> <<AVA>>That's what everyone likes but often only women get to experience. Wouldn't you like to experience the feeling yourself?<</AVA>> <<narration>>Arousing curiosity starts building up inside of you, stirring up visions in your mind.<</narration>> <!-- Button to submit to AVA --> <span id="replace">@@.pink-choicebutton;<<button "Submit to AVA">> <<replace "#replace">> <<vid "imgs/quests/ugly-bastard/blank-bimbo.mp4">> <<narration>>You imagine yourself as a perfect woman. Long blond hair cascades down your shoulders. Your full lips are slightly parted. Your eyes sparkle with seduction. Your body is sculpted to perfection, with curves that draw the eye and stir desire.<</narration>> <<narration>>You imagine how it would feel to be so desirable. The sensation of being wanted, craved, and lusted after. The feeling of being the center of attention, the object of desire. The thrill of knowing that every movement, every gesture, every word you utter is watched, admired, and desired. The feeling of being desired, of being wanted, of being the object of someone's deepest, darkest fantasies.<</narration>> <<statChange "ugly_bastard_quest_2_AVA_submit" "<<moreFeminine 5>>">> <<narration>>Whewn you come back to reality, the office is nearly silent. You can hear only the cook's breathing and see the girl cleaning herself up, smiling.<</narration>> @@.choicebutton;<<button "Leave Quietly">> <<set $uglyBastardQuestStage to 3>> <<goto "EroSphere-Outside">> <</button>>@@ <</replace>> <</button>>@@ <br> <!-- Button to resist AVA wrapped in a div with a unique ID --> <div id="resist-ava-button-container"> @@.choicebutton;<<button "Resist AVA">> <<run MindWare.resistAVAMinigame()>> <</button>>@@ <br> </div> <!-- Hidden Content: Button to Continue (Initially Hidden) --> <div id="AVA-resist-minigame-hidden-content" style="display: none;"> @@.choicebutton;<<button "Ignore AVA and Leave Quietly">> <<set $uglyBastardQuestStage to 3>> <<goto "EroSphere-Outside">> <</button>>@@ </div></span>
End of content. More scenes with the cook will be added in the future. <br><br> <<return>>
<<set $firstHormonalTherapyStarted to true>>\ <div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <div class="narrator">As you enter Dr. Hart's office, the familiar scent of sterile air and the hum of fluorescent lights greet you. She sits behind her desk, her eyes scanning a file that undoubtedly bears your name.</div> <<if visited("TransitionAppointment3-Not-Really") >= 1>>\ <<psychiatrist>>I'm glad you've made the right choice, sweetie. It's important that we move forward with your treatment without any further delays.<</psychiatrist>> <div class="narrator">You can't help but feel a chill run down your spine as you recall your last conversation, where she threatened you with hospitalization.</div> <<else>>\ <<psychiatrist>>Welcome back, sweetie. I'm so excited to start this new chapter of your journey with you.<</psychiatrist>> <div class="narrator">Dr. Hart's eyes twinkle with motherly affection as she gestures for you to take a seat.</div> <</if>>\ <<psychiatrist>>Today, we're going to talk about how hormonal therapy works and what you can expect in the coming days.<</psychiatrist>> <<psychiatrist>>Shell we proceed?<</psychiatrist>> @@.choicebutton;<<button "Yes">><<goto "FirstHormonalTherapy2">><</button>>@@
<div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <<psychiatrist>>The therapy we'll be starting involves multiple doses of fast-acting hormone-altering medication.<</psychiatrist>> <<psychiatrist>>Because of the rapid nature of the changes the medication will bring, I'll need to see you on a regular basis until we've achieved the desired results.<</psychiatrist>> <<psychiatrist>>During these appointments, we'll perform routine checkups to ensure your body is responding well to the treatment. But more importantly, we'll be conducting gender alignment hypnotherapy sessions in virtual reality.<</psychiatrist>> <<if $installImplantPlayerWantsVisionsToReturn === false>>\ <div class="narrator">The mention of virtual reality sends a small shiver down your spine, memories of your recent experiences with AVA flashing through your mind.</div> <<elseif $installImplantPlayerWantsVisionsToReturn === "">>\ <div class="narrator">You shift uncomfortably in your seat, torn between curiosity and apprehension.</div> <<else>>\ <div class="narrator">Your eyes light up with a mix of excitement and anticipation.</div> <</if>>\ <<psychiatrist>>Now, do you have any questions about the therapy or the VR sessions?<</psychiatrist>> @@.choicebutton;<<button "Ask about side effects">><<goto "FirstHormonalTherapy2-SideEffects">><</button>>@@ @@.choicebutton;<<button "No questions">><<goto "FirstHormonalTherapy3">><</button>>@@
<div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <<psychiatrist>>That's a good question.<</psychiatrist>> <<psychiatrist>>One of the most common side effects is a change in libido. Some people experience an increase in sexual desire, while others may notice a decrease. Another common side effect is skin problems. Hormonal changes can sometimes lead to acne or skin irritation. We'll definitely keep an eye on your skin during our routine checkups.<</psychiatrist>> <div class="narrator">You notice a lustful smile appear on the doctor's face, but you're not sure if it's not just your imagination.</div> <<psychiatrist>>You may also experience mood swings, fatigue, or changes in appetite. These are all normal reactions to the hormonal adjustments your body will be undergoing.<</psychiatrist>> <<psychiatrist>>Now, do you have any other questions or concerns about the side effects?<</psychiatrist>> @@.choicebutton;<<button "All clear">><<goto "FirstHormonalTherapy3">><</button>>@@
<div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <<psychiatrist>>Good. We can proceed with the pre-therapy examination. It's just a routine check and won't take more than a minute. Then I can administer the first dose.<</psychiatrist>> <<psychiatrist>>Please undress completely for me.<</psychiatrist>> <div class="narrator">You hesitate, a slight embarrassment coloring your cheeks.</div> <<player>>You mean... everything? Even my underwear?<</player>> <<psychiatrist>>Ha ha, of course. There's no need to be embarrassed in front of your doctor.<</psychiatrist>> <div class="narrator">You nod, slowly beginning to undress. The cold hospital air does you no favors, causing your body to shiver slightly and your penis to shrink.</div> <div class="narrator">Dr. Hart approaches you with a stethoscope in hand. She places the cold metal against your chest, listening intently to your heartbeat and breathing. You can feel her warm breath on your skin as she leans in close.</div> <<psychiatrist>>Deep breaths for me, sweetie.<</psychiatrist>> <div><img src="imgs/quests/transition/stethoscope.webp" width="100%"></div> <div class="narrator">You comply, taking deep breaths as she moves the stethoscope to your back, listening to your lungs.</div> <div class="narrator">Next, she wraps a blood pressure cuff around your arm, pumping it until it's tight. She watches the gauge carefully as she releases the pressure, noting your blood pressure reading.</div> <<psychiatrist>>You're doing so well. We're almost done.<</psychiatrist>> <div class="narrator">She then grabs a ruler from her desk and turns back to you, her eyes meeting yours.</div> <<psychiatrist>>Now, I need to measure the size of your testicles and penis. It's important for us to track any changes that occur during the therapy.<</psychiatrist>> <div class="narrator">Your heart starts racing at the thought of what's about to happen.</div> <<if visited("TransitionAppointment2-ShoeTie") gt 0>>\ <div class="narrator">You still vividly remember how you caught the doctor masturbating when you were describing your sexual fantasies to her during your previous visit.</div> <<video "imgs/quests/transition/bulges/masturbating.mp4">> <</if>>\ <<psychiatrist>>Just relax, sweetie. This won't take long.<</psychiatrist>> <div class="narrator">Dr. Hart kneels down in front of you and starts with your testicles, her fingers gently cupping and examining each one before she measures them. Her touch is soft and careful, sending wave after wave of arousal through you and causing your penis to become hard.</div> <<video "imgs/quests/transition/ball-examination.mp4">> <div class="narrator">She stands up, her eyes lingering on your now visible erection.</div> <<psychiatrist>>This isn't good at all, sweetie. I need to measure your penis when its flaccid.<</psychiatrist>> <div class="narrator">She takes a few steps and grabs a cup from her desk.</div> <<psychiatrist>>Here. Please ejaculate into this cup.<</psychiatrist>> <div><img src="imgs/quests/transition/sterile-cup.webp" width="100%"></div> @@.choicebutton;<<button "What?!">><<goto "FirstHormonalTherapy3-Ejaculate">><</button>>@@
<<player>>You want me to cu... I mean ejaculate into the cup?!<</player>> <<psychiatrist>>Of course. Or would you rather make a big mess on my floor? Who would clean that up, huh?<</psychiatrist>> <div class="narrator">You're not completely sure if she's teasing you or being serious.</div> <<psychiatrist>>Look, sweetie, you're not my only patient. We need to move things along. I have experience with this, and I know that if we just wait, you'll get hard again before I can complete the measurement. If you ejaculate, you won't get hard again... at least for a while.<</psychiatrist>> @@.choicebutton;<<button "Ask for privacy">><<goto "FirstHormonalTherapy3-Ejaculate-Privacy">><</button>>@@ @@.choicebutton;<<button "Do as she says">><<goto "FirstHormonalTherapy3-Ejaculate-Comply">><</button>>@@
<<player>>Can I use the bathroom for this?<</player>> <<psychiatrist>>I'm afraid there's no bathroom in my office, sweetie.<</psychiatrist>> <<player>>Can you at least turn away while I do it?<</player>> <div class="narrator">Dr. Hart's expression becomes stern as she looks at you.</div> <<psychiatrist>>If you want me to be able to help you, you need to get used to being vulnerable in front of me. This is a perfect start. Now, please proceed.<</psychiatrist>> @@.choicebutton;<<button "Defeatedly continue">><<goto "FirstHormonalTherapy3-Ejaculate-Comply">><</button>>@@
<<video "imgs/quests/transition/masturbation.mp4">> <div class="narrator">You start nervously masturbating, your eyes fixed on your penis. You're acutely aware that Dr. Hart is watching you attentively. You want this to be over as quickly as possible, so you start searching your mind for fantasies to help you orgasm.</div> <span id="choiceButtons">@@.choicebutton;<<button "Think about Trix">><<replace "#choiceButtons">><<set $firstHormonalTherapyEjaculateFantasy to "Trix">><<include "FirstHormonalTherapy3-Ejaculate-Trix">><</replace>><</button>>@@ @@.choicebutton;<<button "Think about Yuki">><<replace "#choiceButtons">><<set $firstHormonalTherapyEjaculateFantasy to "Yuki">><<include "FirstHormonalTherapy3-Ejaculate-Yuki">><</replace>><</button>>@@ <<if visited("Xavier-Third Neuroimaging-Truth-Kneel-End") gt 0>>\ @@.choicebutton;<<button "Think about Xavier">><<replace "#choiceButtons">><<set $firstHormonalTherapyEjaculateFantasy to "Xavier">><<include "FirstHormonalTherapy3-Ejaculate-Xavier">><</replace>><</button>>@@<</if>></span>
<div class="narrator">You imagine Trix, her tongue out and her hand stroking you as she aims your cock toward her open, wet mouth. The thought brings you closer to the edge</div> <<video "imgs/quests/transition/trix-masturbation.mov">> @@.choicebutton;<<button "Continue">><<goto "FirstHormonalTherapy3-Ejaculate-Finish">><</button>>@@
<div class="narrator">You think about Yuki, her gentle demeanor and soft touch. You envision her delicate hands wrapped around you, her eyes filled with affection. The thought of her stroking you brings you closer to the edge.</div> <<video "imgs/quests/transition/yuki-masturbation.mov">> @@.choicebutton;<<button "Continue">><<goto "FirstHormonalTherapy3-Ejaculate-Finish">><</button>>@@
<div class="narrator">You recall Xavier, his commanding presence and intense gaze. You picture your hand stroking his huge black clock. The fantasy pushes you closer towards climax.</div> <<video "imgs/quests/transition/xavier-masturbation.mov">> @@.choicebutton;<<button "Continue">><<goto "FirstHormonalTherapy3-Ejaculate-Finish">><</button>>@@
<div class="narrator">You're at the very edge of orgasm when you bring your gaze up from your penis to Dr. Hart. You notice that her hand is moving rhythmically under the desk.</div> <<video "imgs/quests/transition/bulges/masturbating.mp4">> <<if visited("TransitionAppointment2-ShoeTie") gt 0>>\ <div class="narrator">You immediately realize that she's masturbating again. The sight of the doctor pleasuring herself brings you over the edge, and you cum a large load into the cup.</div> <<else>>\ <div class="narrator">The sight of the doctor pleasuring herself sends a final wave of pleasure through you, and you cum a large load into the cup.</div> <</if>>\ <<video "imgs/quests/transition/cum-in-cup.mp4">> <div class="narrator">Afraid to look up, you focus on steadying your breath after the orgasm. Your penis quickly becomes flaccid from the embarrassment, as if all the blood is escaping from it to your cheeks.</div> <div class="narrator">Meanwhile, Dr. Hart stands up and takes the cup from you, placing it on a nearby table.</div> <<psychiatrist>>You were a good boy. Now, let's finish the measurements.<</psychiatrist>> <div class="narrator">As she holds your penis to take the measurement, she squeezes it firmly, and one last drop of cum leaks out. She lets it drip to the floor, smiles, and stands up.</div> <<video "imgs/quests/transition/cum-drip.mov">> <<psychiatrist>>You can get dressed now, sweetie.<</psychiatrist>> <div class="narrator">The doctor sits down again, and you quickly gather your clothes, eager to move on.</div> @@.choicebutton;<<button "Get dressed">><<goto "FirstHormonalTherapy4">><</button>>@@
<div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <div class="narrator">Dr. Hart hands you a small pink pill and a cup of water.</div> <<psychiatrist>>Please swallow this pill for me, sweetie.<</psychiatrist>> <div><img src="imgs/quests/transition/pill.webp" width="100%"></div> <div class="narrator">You notice that the cup looks exactly like the one you orgasmed into just a while ago.</div> <div class="inner-thought">She must have more than one of these cups. There's no way she'd give me the same one I just... used.</div> <<psychiatrist>>Go on, sweetie.<</psychiatrist>> <div class="narrator">You decide not to dwell on the cup and proceed to swallow the pill.</div> <span id="choiceButton"><<button "Swallow the pill">><<replace "#choiceButton">>\ <<psychiatrist>>You did great, sweetie. That's all for today. Please visit me in roughly three days or as soon as you start seeing some results.<</psychiatrist>> <<player>>You mean it will take only three days for me to become feminine?<</player>> <<psychiatrist>>Ha ha, no. Unfortunately, a pill that acts that fast doesn't exist. It's a much longer process than that, but you mental health and issues with gender dysphoria should improve as soon as your body starts responding to the hormones.<</psychiatrist>> <<player>>Thank you, Dr. Hart.<</player>> <<button "Leave and tell Cipher what happened">> <<set $hormonalTherapyDream to 1>> <<set $hormonalTherapyDreamsActive to true>> <<set $nextPsychologicalEvaluationCounter to 3>> <<set $secondHormonalTherapyAvailable to true>> <<run $extraActionsPanacea.splice($extraActionsPanacea.indexOf('<button class="office-button action-point-button" onclick="MindWare.processActionButtonClick(3, \'SecondHormonalTherapy\');">💊 Second hormonal therapy <span class="action-point-icon">⚡⚡⚡</span></button>'), 1)>> <<run MindWare.completeTask("Begin hormonal therapy", "Task-HormonalTherapy")>> <<run MindWare.addTask("First hormonal therapy checkup", "Task-HormonalTherapyCheckupOne")>> <<goto "HormonalTherapy-CipherChat">> <</button>> <</replace>><</button>></span>
Dr. Hart wants to see you as soon as the pill she gave you visibly starts working.
<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"> <<cipher-chat>>Hey, how'd it go with Dr. Hart?<</cipher-chat>> <<player-chat>>I took my first pill.<</player-chat>> <<cipher-chat>>If YOU took the pill, then I'm happy for you.<</cipher-chat>> <<player-chat>>What are you trying to imply?<</player-chat>> <<cipher-chat>>Nevermind... How long did the doc say it'd take before you start seeing effects?<</cipher-chat>> <<player-chat>>She said to come back in about three days, or when I start noticing changes.<</player-chat>> <<cipher-chat>>Wait, what?! You're gonna have boobs and everything in just 3 days?!<</cipher-chat>> <<player-chat>>Lol, is that all you think about? Tits on the brain much? No, the full transformation will take much longer. Dr. Hart said the initial effects are more about mental health and reducing gender dysphoria.<</player-chat>> <<cipher-chat>>Oh, right. That makes more sense. Still, that's pretty fast for some changes. You nervous?<</cipher-chat>> <<player-chat>>A little, yeah. It's exciting but also kinda scary.<</player-chat>> <<cipher-chat>>I bet. But hey, I'm here for you if you need to talk or anything. Keep me posted on any changes, okay?<</cipher-chat>> <<player-chat>>Thanks, Cipher. I really appreciate that. I'll definitely let you know if anything happens.<</player-chat>> <<cipher-chat>>Cool. And hey, maybe in a few months, we can go bra shopping together! 😜<</cipher-chat>> <<player-chat>>There you go with the boobs again! 🙄<</player-chat>> <<cipher-chat>>Haha, sorry! Can't help it. Alright, I'll let you go. Take care and good luck!<</cipher-chat>> <<player-chat>>Thanks! Talk to you later.<</player-chat>> @@.im-response; <<button "Leave the chat and go home">><<goto $playerHome>><</button>>@@ </div> </div> </div>
<div class="img-location"><img src="imgs/locations/starting-apartment-bathroom.webp" width="100%"></div> <<narration>>You enter the bathroom. As you approach the mirror, your eyes are immediately drawn to your reflection. Something feels... off.<</narration>> <<narration>>Your gaze fixates on your facial hair. What was once a mark of masculinity now seems foreign, almost unnatural.<</narration>> <<PLAYER>>This... this doesn't feel right anymore.<</PLAYER>> <<AVA>>Perhaps it's time for a change?<</AVA>> <<PLAYER>>You think I should shave it off?<</PLAYER>> <<AVA>>Yes. That's exactly what you should do.<</AVA>> <<narration>>You stare at your reflection, contemplating AVA's words. The razor sits on the bathroom counter, almost beckoning to you.<</narration>> <span id="ChoiceButton">@@.pink-choicebutton;<<button "Shave off your facial hair">> <<replace "#ChoiceButton">> <<video "imgs/quests/transition/shaving.mp4">><br> <<narration>>You watch as your beard slowly disappears, leaving you with a clean-shaven face.<</narration>> <<button "Look at your reflection in the mirror">><<goto "Hormonal-Therapy-Masculine-Leaning-Transformation-Mirror">><<set $playerBody to "Masculine-Leaning">><</button>> <</replace>> <</button>>@@ <br> <!-- Button to resist AVA wrapped in a div with a unique ID --> <div id="resist-ava-button-container"> @@.choicebutton;<<button "Resist AVA">> <<run MindWare.resistAVAMinigame()>> <</button>>@@ <br> </div> <!-- Hidden Content: Button to Continue (Initially Hidden) --> <div id="AVA-resist-minigame-hidden-content" style="display: none;"> @@.choicebutton;<<button "Don't shave your facial hair">> <<replace "#ChoiceButton">> <<narration>>You decide to keep your facial hair for now. It's clear to you that the pill is working, but you think it's better to visit Dr. Hart first. <</narration>> <<button "Visit Dr. Hart">> <<goto "Hormonal-Therapy-Masculine-Leaning-Transformation-DrHart-FacialHair">> <</button>> <</replace>> <</button>>@@ </div></span>
<<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>> <<print '<div><img src="' + _updatedAvatar + '" alt="Player Avatar" width="100%" class="profile-avatar"></div>'>> <<narration>>You look at your reflection in the mirror and are immediately struck by the change. It's been a while since you've shaved.<</narration>> <<narration>>But the lack of facial hair is not what catches your attention the most. You don't remember your face being this smooth before.<</narration>> <div class="inner-thought">I think the pill is working. I should visit Dr. Hart.</div> <br> <<button "Visit Dr. Hart">> <<goto "Hormonal-Therapy-Masculine-Leaning-Transformation-DrHart-Shaven">> <</button>>
End of content. You can save here and continue [[exploring the game|HomeBacklog]].
End of content. You can save here and continue [[exploring the game|HomeBacklog]].
/* Latest Version */ <<if $latestVersion !== "0.1.6 (Supporter-Only Beta 1)">> <<set $latestVersion = "0.1.6 (Supporter-Only Beta 1)">> <<update>> <</if>> /* 0.1.6 (Supporter-Only Beta 1) */ <<if ndef $miniGameDifficulty>> <<set $miniGameDifficulty to "Normal">> <</if>> <<if $miniGameDifficulty === "Easy">> <<set $miniGameDifficulty to "Normal">> <</if>> <<if $miniGameDifficulty === "Story">> <<set $miniGameDifficulty to "Normal">> <</if>> /* 0.1.6 (Supporter-Only Beta 3) */ <<if ndef $statChanges>> <<set $statChanges to {}>> <</if>> <<if ndef $daysInWeek>> <<set $daysInWeek to 7>> <</if>> /* 0.1.6 (Public) */ <<if ndef $relationshipPsychiatrist>> <<set $relationshipPsychiatrist to 50>> <</if>> <<set $gameVersion to "0.1.6 (Public)">> /* 0.1.7 (Supporter-Only Beta 1) */ <<if ndef $disableButtonSounds>> <<set $disableButtonSounds to false>> <</if>> <<if ndef $hideAvatar>> <<set $hideAvatar to false>> <</if>> <<if !SugarCube.State.variables.trixBrainFryDialogs.hasOwnProperty('Ever been to GitGud?')>> <<run MindWare.addDialog('trixBrainFryDialogs', 'Ever been to GitGud?', 'Trix GitGud Dialog - Ever been to GitGud?');>> <</if>>
<div class="mindware-ui-game-container"> <header class="mindware-ui-top-bar"> <div class="mindware-ui-logo"> <div class="mindware-ui-game-controls-left"> <button class="mindware-ui-control-btn mindware-ui-go-back-btn" onclick="if (SugarCube.State.passage !== 'First') { SugarCube.Engine.backward(); }" title="Go back"> <svg class="mindware-ui-icon" width="100%" height="100%" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M7.82843 10.9999H20V12.9999H7.82843L13.1924 18.3638L11.7782 19.778L4 11.9999L11.7782 4.22168L13.1924 5.63589L7.82843 10.9999Z"></path></svg> </button> <button class="mindware-ui-control-btn mindware-ui-go-forward-btn" onclick="SugarCube.Engine.forward()" title="Go forward"> <svg class="mindware-ui-icon" width="100%" height="100%" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M16.1716 10.9999L10.8076 5.63589L12.2218 4.22168L20 11.9999L12.2218 19.778L10.8076 18.3638L16.1716 12.9999H4V10.9999H16.1716Z"></path></svg> </button> </div> </div> <nav class="mindware-ui-main-nav"> <button id="charBtn" class="mindware-ui-nav-btn" onclick='quickAccessClick("CharacterProfile", event);'>Char</button> <button id="pcBtn" class="mindware-ui-nav-btn" onclick='quickAccessClick("Computer-QuickAccess", event);'>PC</button> <button id="jobsBtn" class="mindware-ui-nav-btn" onclick='quickAccessClick("JobBoard-QuickAccess", event);'>Jobs</button> <button id="emailBtn" class="mindware-ui-nav-btn" onclick='quickAccessClick("EmailClient-QuickAccess", event);'>Email</button> <button id="chatBtn" class="mindware-ui-nav-btn" onclick='quickAccessClick("IMApp-QuickAccess", event);'>Chat</button> <button id="notesBtn" class="mindware-ui-nav-btn" onclick='quickAccessClick("NotesApp-QuickAccess", event);'>Notes</button> </nav> <script> function quickAccessClick(passageName, event) { const currentPassage = SugarCube.State.passage; const quickAccessPassages = ["CharacterProfile", "Computer-QuickAccess", "Inventory", "JobBoard-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> <script> // Function to update button glow based on state variables function updateButtonGlows() { // Fetch the state variables const availableTargets = SugarCube.State.variables.hackingTargets.length || 0; const unreadEmails = SugarCube.State.variables.unreadCount || 0; const unreadChats = SugarCube.State.variables.unreadChatCount || 0; const availableJobs = SugarCube.State.variables.byteBunkerJobsCount || 0; // Get button elements const pcBtn = document.getElementById('pcBtn'); const emailBtn = document.getElementById('emailBtn'); const chatBtn = document.getElementById('chatBtn'); const jobsBtn = document.getElementById('jobsBtn'); // // Toggle glow for PC button // if (availableTargets > 0) { // pcBtn.classList.add('mindware-ui-main-nav-btn-glow'); // } else { // pcBtn.classList.remove('mindware-ui-main-nav-btn-glow'); // } // Toggle glow for Email button if (unreadEmails > 0) { emailBtn.classList.add('mindware-ui-main-nav-btn-glow'); } else { emailBtn.classList.remove('mindware-ui-main-nav-btn-glow'); } // Toggle glow for Chat button if (unreadChats > 0) { chatBtn.classList.add('mindware-ui-main-nav-btn-glow'); } else { chatBtn.classList.remove('mindware-ui-main-nav-btn-glow'); } // Toggle glow for Jobs button if (availableJobs > 0) { jobsBtn.classList.add('mindware-ui-main-nav-btn-glow'); } else { jobsBtn.classList.remove('mindware-ui-main-nav-btn-glow'); } } // Ensure the function runs every time a passage is rendered $(document).on(':passagedisplay', () => { // Update state variables before checking SugarCube.State.variables.unreadCount = MindWare.getUnreadEmailCount(); SugarCube.State.variables.unreadChatCount = MindWare.getUnreadMessageCount(); SugarCube.State.variables.byteBunkerJobsCount = SugarCube.setup.countAvailableUnacceptedByteBunkerJobs(); // Optionally, update other related variables or perform additional checks here // Update the button glows based on the latest state updateButtonGlows(); }); </script> <div class="mindware-ui-game-controls"> <button class="mindware-ui-control-btn mindware-ui-save-btn" onclick="SugarCube.UI.saves()" title="Save game"> <svg class="mindware-ui-icon" width="100%" height="100%" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M18 19H19V6.82843L17.1716 5H16V9H7V5H5V19H6V12H18V19ZM4 3H18L20.7071 5.70711C20.8946 5.89464 21 6.149 21 6.41421V20C21 20.5523 20.5523 21 20 21H4C3.44772 21 3 20.5523 3 20V4C3 3.44772 3.44772 3 4 3ZM8 14V19H16V14H8Z"></path></svg> </button> <!-- SETTINGS --> <button class="mindware-ui-control-btn mindware-ui-settings-btn" onclick="SugarCube.Dialog.setup('Settings', 'Settings'); SugarCube. Dialog.wiki(SugarCube.Story.get('SettingsMenu').processText()); SugarCube.Dialog.open();" title="Settings"> <svg class="mindware-ui-icon" width="100%" height="100%" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M3.33946 17.0002C2.90721 16.2515 2.58277 15.4702 2.36133 14.6741C3.3338 14.1779 3.99972 13.1668 3.99972 12.0002C3.99972 10.8345 3.3348 9.824 2.36353 9.32741C2.81025 7.71651 3.65857 6.21627 4.86474 4.99001C5.7807 5.58416 6.98935 5.65534 7.99972 5.072C9.01009 4.48866 9.55277 3.40635 9.4962 2.31604C11.1613 1.8846 12.8847 1.90004 14.5031 2.31862C14.4475 3.40806 14.9901 4.48912 15.9997 5.072C17.0101 5.65532 18.2187 5.58416 19.1346 4.99007C19.7133 5.57986 20.2277 6.25151 20.66 7.00021C21.0922 7.7489 21.4167 8.53025 21.6381 9.32628C20.6656 9.82247 19.9997 10.8336 19.9997 12.0002C19.9997 13.166 20.6646 14.1764 21.6359 14.673C21.1892 16.2839 20.3409 17.7841 19.1347 19.0104C18.2187 18.4163 17.0101 18.3451 15.9997 18.9284C14.9893 19.5117 14.4467 20.5941 14.5032 21.6844C12.8382 22.1158 11.1148 22.1004 9.49633 21.6818C9.55191 20.5923 9.00929 19.5113 7.99972 18.9284C6.98938 18.3451 5.78079 18.4162 4.86484 19.0103C4.28617 18.4205 3.77172 17.7489 3.33946 17.0002ZM8.99972 17.1964C10.0911 17.8265 10.8749 18.8227 11.2503 19.9659C11.7486 20.0133 12.2502 20.014 12.7486 19.9675C13.1238 18.8237 13.9078 17.8268 14.9997 17.1964C16.0916 16.5659 17.347 16.3855 18.5252 16.6324C18.8146 16.224 19.0648 15.7892 19.2729 15.334C18.4706 14.4373 17.9997 13.2604 17.9997 12.0002C17.9997 10.74 18.4706 9.5632 19.2729 8.6665C19.1688 8.4405 19.0538 8.21822 18.9279 8.00021C18.802 7.78219 18.667 7.57148 18.5233 7.36842C17.3457 7.61476 16.0911 7.43414 14.9997 6.80405C13.9083 6.17395 13.1246 5.17768 12.7491 4.03455C12.2509 3.98714 11.7492 3.98646 11.2509 4.03292C10.8756 5.17671 10.0916 6.17364 8.99972 6.80405C7.9078 7.43447 6.65245 7.61494 5.47428 7.36803C5.18485 7.77641 4.93463 8.21117 4.72656 8.66637C5.52881 9.56311 5.99972 10.74 5.99972 12.0002C5.99972 13.2604 5.52883 14.4372 4.72656 15.3339C4.83067 15.5599 4.94564 15.7822 5.07152 16.0002C5.19739 16.2182 5.3324 16.4289 5.47612 16.632C6.65377 16.3857 7.90838 16.5663 8.99972 17.1964ZM11.9997 15.0002C10.3429 15.0002 8.99972 13.6571 8.99972 12.0002C8.99972 10.3434 10.3429 9.00021 11.9997 9.00021C13.6566 9.00021 14.9997 10.3434 14.9997 12.0002C14.9997 13.6571 13.6566 15.0002 11.9997 15.0002ZM11.9997 13.0002C12.552 13.0002 12.9997 12.5525 12.9997 12.0002C12.9997 11.4479 12.552 11.0002 11.9997 11.0002C11.4474 11.0002 10.9997 11.4479 10.9997 12.0002C10.9997 12.5525 11.4474 13.0002 11.9997 13.0002Z"></path></svg> </button> <!-- EXTRA OPTIONS --> <button class="mindware-ui-control-btn mindware-ui-settings-btn" onclick="SugarCube.Dialog.setup('Extra Options', 'Extra Options'); SugarCube.Dialog.wiki(SugarCube.Story.get('Cheats').processText()); SugarCube.Dialog.open(); SugarCube.State.variables.returnPassage = SugarCube.State.passage;" title="Extra Options"> <svg class="mindware-ui-icon" width="100%" height="100%" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M12.0006 18.26L4.94715 22.2082L6.52248 14.2799L0.587891 8.7918L8.61493 7.84006L12.0006 0.5L15.3862 7.84006L23.4132 8.7918L17.4787 14.2799L19.054 22.2082L12.0006 18.26ZM12.0006 15.968L16.2473 18.3451L15.2988 13.5717L18.8719 10.2674L14.039 9.69434L12.0006 5.27502L9.96214 9.69434L5.12921 10.2674L8.70231 13.5717L7.75383 18.3451L12.0006 15.968Z"></path></svg> </button> <!-- BUG REPORT --> <button class="mindware-ui-control-btn mindware-ui-settings-btn" onclick="SugarCube.Dialog.setup('Bug Report', 'Bug Report'); SugarCube.Dialog.wiki(SugarCube.Story.get('Bug Report').processText()); SugarCube.Dialog.open();" title="Bug Report"> <svg class="mindware-ui-icon" width="100%" height="100%" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M13 19.9C15.2822 19.4367 17 17.419 17 15V12C17 11.299 16.8564 10.6219 16.5846 10H7.41538C7.14358 10.6219 7 11.299 7 12V15C7 17.419 8.71776 19.4367 11 19.9V14H13V19.9ZM5.5358 17.6907C5.19061 16.8623 5 15.9534 5 15H2V13H5V12C5 11.3573 5.08661 10.7348 5.2488 10.1436L3.0359 8.86602L4.0359 7.13397L6.05636 8.30049C6.11995 8.19854 6.18609 8.09835 6.25469 8H17.7453C17.8139 8.09835 17.88 8.19854 17.9436 8.30049L19.9641 7.13397L20.9641 8.86602L18.7512 10.1436C18.9134 10.7348 19 11.3573 19 12V13H22V15H19C19 15.9534 18.8094 16.8623 18.4642 17.6907L20.9641 19.134L19.9641 20.866L17.4383 19.4077C16.1549 20.9893 14.1955 22 12 22C9.80453 22 7.84512 20.9893 6.56171 19.4077L4.0359 20.866L3.0359 19.134L5.5358 17.6907ZM8 6C8 3.79086 9.79086 2 12 2C14.2091 2 16 3.79086 16 6H8Z"></path></svg> </button> <button class="mindware-ui-control-btn mindware-ui-restart-btn" onclick="SugarCube.UI.restart()" title="Restart"> <svg class="mindware-ui-icon" width="100%" height="100%" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M18.5374 19.5674C16.7844 21.0831 14.4993 22 12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 14.1361 21.3302 16.1158 20.1892 17.7406L17 12H20C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20C14.1502 20 16.1022 19.1517 17.5398 17.7716L18.5374 19.5674Z"></path></svg> </button> </div> </header> <main class="mindware-ui-content-area"> <aside class="mindware-ui-side-panel mindware-ui-left-panel"> <div id="portrait-box" class="mindware-ui-character-portrait" data-passage="Portrait"></div> <div class="mindware-ui-energy-container" data-passage="ActionPoints"></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> <button title="Open Computer" onclick='quickAccessClick("Computer-QuickAccess", event);'><i class="fas fa-laptop"></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> <button title="Open Email Client" onclick='quickAccessClick("EmailClient-QuickAccess", event);'><i class="fas fa-envelope"></i></button> <button title="Open Instant Messenger" onclick='quickAccessClick("IMApp-QuickAccess", event);'><i class="fas fa-comments"></i></button> <button title="Open Notes App" onclick='quickAccessClick("NotesApp-QuickAccess", event);'><i class="fas fa-sticky-note"></i></button> </div> </div>--> <div class="mindware-ui-stats-box" data-passage="Stats"></div> <div class="mindware-ui-todo-box" data-passage="TodoBox"></div> </aside> <div class="mindware-ui-main-content-wrapper"> <section id="passages" class="mindware-ui-main-content"></section> </div> <aside class="mindware-ui-side-panel mindware-ui-right-panel"> <div class="mindware-ui-time-info" data-passage="TimeBox"></div> <div id="mindware-ui-game-clock" class="mindware-ui-game-clock"> <!-- <div class="mindware-ui-quick-inventory"> <h3>Items</h3> <div class="mindware-ui-item-grid"> <div class="mindware-ui-item" id="mindware-ui-item1">🗡️</div> <div class="mindware-ui-item" data-tooltip="Red ">🍎</div> <div class="mindware-ui-item">🧪</div> <div class="mindware-ui-item">📜</div> </div> </div> --> <div class="mindware-ui-synapse-box" data-passage="SynapseVX"></div> <div class="mindware-ui-music-player" data-passage="MusicPlayer"></div> </aside> </main> <!-- <footer class="mindware-ui-bottom-bar"> <div class="mindware-ui-bottom-bar-left"> <div class="mindware-ui-status-item mindware-ui-current-location"> <span class="mindware-ui-status-icon"> <svg class="mindware-ui-icon" width="1em" height="1em" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> <path d="M7 2h10v2H7V2zM5 6V4h2v2H5zm0 8H3V6h2v8zm2 2H5v-2h2v2zm2 2H7v-2h2v2zm2 2H9v-2h2v2zm2 0v2h-2v-2h2zm2-2v2h-2v-2h2zm2-2v2h-2v-2h2zm2-2v2h-2v-2h2zm0-8h2v8h-2V6zm0 0V4h-2v2h2zm-5 2h-4v4h4V8z" fill="currentColor"/> </svg> </span> <span id="mindware-ui-current-location-text" class="mindware-ui-status-text">Loading...</span> </div> </div> <div class="mindware-ui-bottom-bar-center"> <div class="mindware-ui-music-controls"> <button id="mindware-ui-playPauseBtn" class="mindware-ui-music-btn mindware-ui-play-pause mindware-ui-no-gloss" title="Play/Pause" onclick="event.preventDefault(); window.gameMusic.togglePlayPause();" ontouchend="event.preventDefault(); window.gameMusic.togglePlayPause();"> <svg id="mindware-ui-playIcon" class="mindware-ui-icon" width="1em" height="1em" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> <path d="M10 20H8V4h2v2h2v3h2v2h2v2h-2v2h-2v3h-2v2z" fill="currentColor"/> </svg> <svg id="mindware-ui-pauseIcon" class="mindware-ui-icon" width="1em" height="1em" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" style="display: none;"> <path d="M10 4H5v16h5V4zm9 0h-5v16h5V4z" fill="currentColor"/> </svg> </button> </div> <div class="mindware-ui-music-info"> <span id="mindware-ui-musicStatus" class="mindware-ui-music-status">Paused:</span> <span id="mindware-ui-musicSong" class="mindware-ui-music-song">No track playing</span> </div> </div> <div class="mindware-ui-bottom-bar-right"> <div class="mindware-ui-status-item mindware-ui-notification-area"> <span class="mindware-ui-status-icon mindware-ui-message-unread"> <svg class="mindware-ui-icon" width="1em" height="1em" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> <path d="M22 2h-6v6h6V2zM4 4h10v2H4v12h16v-8h2v10H2V4h2zm4 4H6v2h2v2h2v2h4v-2h2v-2h-2v2h-4v-2H8V8z" fill="currentColor"/> </svg> </span> <span class="mindware-ui-status-icon mindware-ui-message-read"> <svg class="mindware-ui-icon" width="1em" height="1em" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> <path d="M22 4H2v16h20V4zM4 18V6h16v12H4zM8 8H6v2h2v2h2v2h4v-2h2v-2h2V8h-2v2h-2v2h-4v-2H8V8z" fill="currentColor"/> </svg> </span> <span class="mindware-ui-status-text">No messages</span> </div> </div> </footer> --> </div>
<h3 class="mindware-ui-todo-title">Tasks</h3> <ul id="taskList" class="mindware-ui-task-list"> <<set _activeTasks = $tasks.filter(function(task){return task.status == 'active'})>> <<if _activeTasks.length == 0>> <li class="mindware-ui-task-item mindware-ui-task-empty">No active tasks</li> <<else>> <<for _i, _task range _activeTasks>> <li class="mindware-ui-task-item <<if _i == _activeTasks.length - 1>>last-task<</if>>"> <span class="mindware-ui-task-link"><<print MindWare.generateTaskLink(_task)>></span> </li> <</for>> <</if>> </ul>
<<if $synapseSteadyVXInstalled === true>> <h3 class="mindware-ui-synapse-title">Synapse Steady</h3> <div class="mindware-ui-synapse-content"> <!-- Add mental condition class to the brain icon container --> <<if $mentalCondition is "Stable">> <div class="mindware-ui-brain-icon stable"> <svg fill="#55BBBC" height="80px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 463 463"> <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="mindware-ui-brain-icon unstable"> <!-- Unstable SVG Icon --> <svg fill="#FF00FF" height="80px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 463 463"> <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="mindware-ui-brain-icon dysphoric"> <svg fill="#FF0000" height="80px" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 463 463"> <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>> </div> <!-- Mental Condition Display with Integrated Report Button --> <div class="mindware-ui-condition-display"> <div class="mindware-ui-condition-info"> <div class="mindware-ui-condition-label">Mental Condition:</div> <div class="mindware-ui-condition-value">$mentalCondition</div> </div> <div class="mindware-ui-report-link"> <a href="javascript:void(0);" onclick="SugarCube.Dialog.setup('Synapse Steady VX Mobile Diagnosis'); SugarCube.Dialog.wiki(SugarCube.Story.get('SynapseSteadyVXDiagnosisReport').processText()); SugarCube.Dialog.open();"> Read Full Report </a> </div> </div> /* <div class="mindware-ui-condition-display"> <div class="mindware-ui-condition-info"> <div class="mindware-ui-condition-label">Implant Charge:</div> </div> </div> */ <div class="mindware-ui-implant-charge"> <div class="mindware-ui-implant-icon"> <<if $implantCharge > 0>> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M9 4V3C9 2.44772 9.44772 2 10 2H14C14.5523 2 15 2.44772 15 3V4H18C18.5523 4 19 4.44772 19 5V21C19 21.5523 18.5523 22 18 22H6C5.44772 22 5 21.5523 5 21V5C5 4.44772 5.44772 4 6 4H9Z"></path> </svg> <<else>> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M9 4V3C9 2.44772 9.44772 2 10 2H14C14.5523 2 15 2.44772 15 3V4H18C18.5523 4 19 4.44772 19 5V21C19 21.5523 18.5523 22 18 22H6C5.44772 22 5 21.5523 5 21V5C5 4.44772 5.44772 4 6 4H9Z"></path> </svg> <</if>> </div> <div class="mindware-ui-implant-progress"> <<print `<div class="mindware-ui-implant-bar" style="width: ${$implantCharge}%"></div>`>> </div> <<if $implantCharge === 0>> <span class="implant-charge-empty">EMPTY</span> <<elseif $implantCharge <= 20>> <span class="implant-charge-low">LOW</span> <</if>> </div> <</if>> <<done>><<script>> $(document).on(":liveupdate", function() { var currentCharge = SugarCube.State.variables.implantCharge; $(".mindware-ui-implant-bar").css("width", currentCharge + "%"); $(".mindware-ui-implant-percentage").text(currentCharge + "%"); }); $(document).trigger(":liveupdate"); <</script>><</done>>
/* Container for the Synapse Steady VX Synergy Level */ .synapse-steady-vx-container { padding: 15px; background-color: #000; /* Dark background for contrast */ color: #fff; /* Light text for readability */ margin: 10px 0; border-radius: 5px; font-family: Arial, sans-serif; box-shadow: 0 2px 4px rgba(0,0,0,0.2); /* Soft shadow for depth */ } /* Heading style */ .synapse-box { overflow-y: auto; border: 1px solid #55BBBC; padding: 15px; margin-bottom: 10px; background-color: black; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1); } .synapse-box h3 { color: #55BBBC; margin: 0; padding-bottom: 10px; font-size: 1.2em; border-bottom: 1px solid #55BBBC; text-align: center; } .synergy-progress { width: 100%; height: 20px; background-color: #333; border-radius: 10px; margin-top: 5px; } .synergy-bar { height: 100%; background-color: #55BBBC; border-radius: 10px; transition: width 0.5s ease-in-out; } /* Add this new class for the resistance energy container */ .resistance-energy-container { display: flex; justify-content: center; align-items: center; margin-top: 5px; margin-bottom: 15px; } .resistance-energy-icon { width: 20px; height: 20px; background-color: #FF6B6B; /* Red color to represent resistance energy */ border-radius: 50%; margin: 0 2px; transition: background-color 0.3s ease-in-out; } .resistance-energy-icon.empty { background-color: #333; /* Dark color to represent empty resistance energy */ } .condition-level-text, .synergy-level-text { padding-top: 0px; font-size: 0.8em; text-align: center; font-weight: bold; margin-block-end: 0px; } .resistance-level-text { padding-top: 20px; font-size: 0.8em; text-align: center; font-weight: bold; margin-block-start: 0em; margin-block-end: 0px; } .synergy-level-description { padding-top: 0px; font-size: 0.8em; text-align: center; margin-block-end: 0px; border-bottom: 1px dashed #55BBBC; padding-bottom: 20px; } .brain-icon { display: flex; justify-content: center; align-items: center; margin: 25px auto 20px; } .resistance-progress { position: relative; /* Add relative positioning */ width: 100%; height: 20px; background-color: #333; border-radius: 10px; margin-top: 5px; display: flex; /* Use flexbox to center the text */ justify-content: center; /* Center horizontally */ align-items: center; /* Center vertically */ } .resistance-bar { height: 100%; background-color: #55BBBC; border-radius: 10px 10px 10px 10px; /* Adjust the border-radius for a smoother look */ transition: width 0.5s ease-in-out; position: absolute; /* Make it absolutely positioned */ top: 0; left: 0; } .resistance-progress-percentage { position: relative; /* Make sure the text is relative to the flex container */ color: #fff; /* Ensure text color is white for visibility */ font-size: 0.8em; z-index: 2; /* Higher z-index to ensure it's on top */ } </style>
<h3 class="mindware-ui-stats-title">Stats</h3> <div class="mindware-ui-stats-list"> <div class="mindware-ui-stat-item"> <div class="mindware-ui-stat-label-group"> <span class="mindware-ui-stat-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M2 20H22V22H2V20ZM4 12H6V19H4V12ZM9 12H11V19H9V12ZM13 12H15V19H13V12ZM18 12H20V19H18V12ZM2 7L12 2L22 7V11H2V7ZM4 8.23607V9H20V8.23607L12 4.23607L4 8.23607ZM12 8C11.4477 8 11 7.55228 11 7C11 6.44772 11.4477 6 12 6C12.5523 6 13 6.44772 13 7C13 7.55228 12.5523 8 12 8Z"></path></svg> </span> <span class="mindware-ui-stat-label">Money:</span> </div> <span class="mindware-ui-stat-data">$<<print $playerMoney.toLocaleString("en-US", { minimumFractionDigits: 0, maximumFractionDigits: 0 })>></span> </div> <div class="mindware-ui-stat-item"> <div class="mindware-ui-stat-label-group"> <span class="mindware-ui-stat-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M3.00488 2.99979H21.0049C21.5572 2.99979 22.0049 3.4475 22.0049 3.99979V19.9998C22.0049 20.5521 21.5572 20.9998 21.0049 20.9998H3.00488C2.4526 20.9998 2.00488 20.5521 2.00488 19.9998V3.99979C2.00488 3.4475 2.4526 2.99979 3.00488 2.99979ZM20.0049 10.9998H4.00488V18.9998H20.0049V10.9998ZM20.0049 8.99979V4.99979H4.00488V8.99979H20.0049ZM14.0049 14.9998H18.0049V16.9998H14.0049V14.9998Z"></path></svg> </span> <span class="mindware-ui-stat-label">Weekly Expenses:</span> </div> <span class="mindware-ui-stat-data">$<<print MindWare.calculateTotalExpenses().toLocaleString("en-US", { minimumFractionDigits: 0, maximumFractionDigits: 0 })>></span> </div> <div class="mindware-ui-stat-item"> <div class="mindware-ui-stat-label-group"> <span class="mindware-ui-stat-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"><path d="M15.0491 8.53666L18.5858 5H14V3H22V11H20V6.41421L16.4633 9.95088C17.4274 11.2127 18 12.7895 18 14.5C18 18.6421 14.6421 22 10.5 22C6.35786 22 3 18.6421 3 14.5C3 10.3579 6.35786 7 10.5 7C12.2105 7 13.7873 7.57264 15.0491 8.53666ZM10.5 20C13.5376 20 16 17.5376 16 14.5C16 11.4624 13.5376 9 10.5 9C7.46243 9 5 11.4624 5 14.5C5 17.5376 7.46243 20 10.5 20Z"></path></svg> </span> <span class="mindware-ui-stat-label">Gender:</span> </div> <span class="mindware-ui-stat-data"><<print MindWare.getGenderStatus()>></span> </div> <div class="mindware-ui-stat-item"> <div class="mindware-ui-stat-label-group"> <span class="mindware-ui-stat-icon"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256"><rect width="256" height="256" fill="none"/><circle cx="128" cy="40" r="24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"/><path d="M149.17,80a24,24,0,0,1,18,8.13l45.32,51.38a12,12,0,0,1-17,17L160,128l22.87,86.93a12,12,0,0,1-21.75,10.14L128,168,94.88,225.07a12,12,0,0,1-21.75-10.14L96,128,60.49,156.49a12,12,0,0,1-17-17L88.83,88.13a24,24,0,0,1,18-8.13Z" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"/></svg> </span> <span class="mindware-ui-stat-label">Body:</span> </div> <span class="mindware-ui-stat-data"><<print $playerBody>></span> </div> </div>
<div class="timebox-content"> <span class="timebox-day">Day <strong>$totalDays</strong></span> <span class="timebox-weekday">$dayOfWeek</span> </div>
<<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>> <<if !$hideAvatarImage>> <div class="mindware-ui-character-portrait-inner"> <<print '<img src="' + _updatedAvatar + '" alt="Player Avatar" class="profile-avatar">'>> </div> <div class="mindware-ui-character-portrait-overlay"></div> <<removeclass "#portrait-box" "hidden">> <<else>> <<addclass "#portrait-box" "hidden">> <</if>>
<<if $infiniteActionPoints>> <<for _i = 1; _i <= 5; _i++>> <div class="mindware-ui-energy-infinite"> <div class="mindware-ui-energy-bolt infinite"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <path d="M13 10V3L4 14h7v7l9-11h-7z"/> </svg> </div> </div> <</for>> <<else>> <<for _i = 1; _i <= 5; _i++>> <<if _i <= $actionPoints>> <div class="mindware-ui-energy-bolt active"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <path d="M13 10V3L4 14h7v7l9-11h-7z"/> </svg> </div> <<else>> <div class="mindware-ui-energy-bolt"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor"> <path d="M13 10V3L4 14h7v7l9-11h-7z"/> </svg> </div> <</if>> <</for>> <</if>>
<h3 class="mindware-ui-music-player-title">Music Player</h3> <!-- Use the <<run>> macro to populate $originalPlaylist with data from window.gameMusic --> <<run $originalPlaylist = window.gameMusic.getPlaylist()>> <!-- Playlist Section --> <ul class="mindware-ui-playlist"> <<set _currentPlaylist to window.gameMusic.getPlaylist()>> <<for _i to 0; _i < _currentPlaylist.length; _i++>> <<print '<li class="playlist-item" data-index="' + _i + '">' + _currentPlaylist[_i].title + '</li>'>> <</for>> </ul> <!-- Playback Controls --> <div class="mindware-ui-playback-controls"> <button id="prev-button" class="mindware-ui-playback-control-btn"> <!-- Previous SVG Icon --> <svg viewBox="0 0 24 24" fill="currentColor"> <path d="M17 18l-8.5-6L17 6v12zM5.5 6v12h2V6h-2z"/> </svg> </button> <button id="play-pause-button" class="mindware-ui-playback-control-btn"> <!-- Play Icon --> <svg id="play-icon" viewBox="0 0 24 24" fill="currentColor"> <path d="M8 5v14l11-7z"/> </svg> <!-- Pause Icon --> <svg id="pause-icon" viewBox="0 0 24 24" fill="currentColor" style="display: none;"> <path d="M6 19h4V5H6v14zm8-14v14h4V5h-4z"/> </svg> </button> <button id="next-button" class="mindware-ui-playback-control-btn"> <!-- Next SVG Icon --> <svg viewBox="0 0 24 24" fill="currentColor"> <path d="M7 6l8.5 6L7 18V6zm10.5 0v12h2V6h-2z"/> </svg> </button> </div> <!-- Volume Control --> <div class="mindware-ui-volume-control"> <svg class="mindware-ui-volume-icon" viewBox="0 0 24 24" width="24" height="24" fill="currentColor"> <path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"/> </svg> <input type="range" min="0" max="100" value="10" class="mindware-ui-volume-slider" id="volume-slider"> </div> <!-- Currently Playing Display --> <div class="mindware-ui-current-song"> Now Playing: <span id="current-song-name">Blast</span> </div>
<style> /* Start Menu Styles */ #start-menu { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: var(--mindware-ui-main-bg); background-image: linear-gradient(45deg, rgba(85, 187, 188, 0.07) 25%, transparent 25%), linear-gradient(-45deg, rgba(85, 187, 188, 0.07) 25%, transparent 25%), linear-gradient(45deg, transparent 75%, rgba(85, 187, 188, 0.07) 75%), linear-gradient(-45deg, transparent 75%, rgba(85, 187, 188, 0.07) 75%), linear-gradient(to bottom, rgba(255, 0, 255, 0.03) 1px, transparent 1px), linear-gradient(to right, rgba(255, 0, 255, 0.03) 1px, transparent 1px); background-size: 6px 6px, 6px 6px, 6px 6px, 6px 6px, 20px 20px, 20px 20px; background-position: 0 0, 3px 0, 3px -3px, 0px 3px, 0 0, 0 0; background-attachment: fixed; background-blend-mode: normal, normal, normal, normal, overlay, overlay; display: flex; justify-content: center; align-items: center; overflow-y: auto; z-index: 1000; } .start-menu-content { background-color: rgba(0, 0, 0, 0.8); padding: 2rem; border: var(--mindware-ui-pixel-size) solid var(--mindware-ui-border-color); box-shadow: 0 0 20px var(--mindware-ui-shadow-color); max-width: 1000px; width: 100%; margin: 0rem; display: flex; flex-direction: column; justify-content: space-between; min-height: 80vh; max-height: 90vh; overflow-y: auto; } .start-menu-container { display: flex; flex-direction: column; align-items: center; justify-content: center; flex-grow: 1; } .game-logo { margin-bottom: 2rem; text-align: center; } .game-logo img { max-width: 100%; height: auto; } @keyframes neonFlicker { 0%, 19%, 21%, 23%, 25%, 54%, 56%, 100% { text-shadow: 0 0 10px var(--mindware-ui-secondary-accent), 0 0 20px var(--mindware-ui-accent-color), 0 0 30px var(--mindware-ui-accent-color); } 20%, 24%, 55% { text-shadow: none; } } .game-logo h1 { font-size: 4rem; color: var(--mindware-ui-accent-color); margin: 0; font-family: 'Orbitron', sans-serif; letter-spacing: 4px; text-transform: uppercase; animation: neonFlicker 3s infinite alternate; } .menu-content { display: flex; flex-direction: column; align-items: center; width: 100%; } .content-warning { margin-bottom: 2rem; font-size: 1rem; color: var(--mindware-ui-light-text); text-align: center; } .content-warning .adult-warning { color: red; } .menu-buttons { display: flex; flex-direction: column; gap: 1rem; margin-bottom: 2rem; width: 100%; max-width: 300px; } .menu-button { font-family: var(--mindware-ui-font-primary); font-size: 1.2rem; background-color: var(--mindware-ui-button-color); color: var(--mindware-ui-text-color); border: var(--mindware-ui-pixel-size) solid var(--mindware-ui-border-color); padding: 1rem; cursor: pointer; text-transform: uppercase; transition: background-color 0.2s ease-in-out, color 0.2s ease-in-out; width: 100%; } .menu-button:hover { background-color: var(--mindware-ui-accent-color); color: var(--mindware-ui-main-bg); border-color: var(--mindware-ui-border-color); } .footer { font-size: 0.9rem; color: var(--mindware-ui-light-text); text-align: center; margin-top: 2rem; } .footer p { margin: 0.5rem 0; } .social-icon-container { display: flex; justify-content: center; align-items: center; flex-wrap: wrap; gap: 0.5rem; margin: 1rem 0; } .social-icon-link { display: inline-block; text-decoration: none !important; margin: 0 !important; } .social-icon { background-color: var(--mindware-ui-accent-color); border-radius: 50%; width: 40px; height: 40px; display: flex; justify-content: center; align-items: center; color: var(--mindware-ui-main-bg); font-size: 20px; transition: all 0.3s ease; } .social-icon:hover { box-shadow: 0 0 10px 2px var(--mindware-ui-accent-color); background-color: var(--mindware-ui-secondary-accent); transform: scale(1.1); } a.link-external:after { content: ""; } @media (min-width: 768px) { .start-menu-container { flex-direction: row; justify-content: space-between; align-items: center; } .game-logo, .menu-content { flex: 1; margin: 0 1rem; } } @media (max-width: 767px) { .start-menu-content { padding: 1rem; margin: 0rem; min-height: auto; max-height: calc(100vh - 2rem); } .game-logo h1 { /* font-size: 3rem; */ margin-bottom: 1rem; } .game-logo img { display: none; } .menu-button { font-size: 1.1rem; padding: 0.9rem; } .menu-buttons { max-width: 100%; gap: 2rem; } .start-menu-container { flex-direction: column-reverse; } .game-logo { margin-top: 2rem; } .social-icon { width: 32px; height: 32px; /*font-size: 16px;*/; } } </style> <div id="start-menu"> <div class="start-menu-content"> <div class="start-menu-container"> <div class="menu-content"> <div class="menu-buttons"> <<if Save.browser.size > 0>> <button class="menu-button" onclick="window.playStartButtonSound(); SugarCube.Save.browser.continue()"> Continue</button> <</if>> <button class="menu-button" onclick="SugarCube.Dialog.setup('Unlock Code', 'Unlock Code'); SugarCube.Dialog.wiki(SugarCube.Story.get('Unlock Code').processText()); SugarCube.Dialog.open();"> New Game</button> <button class="menu-button" onclick="SugarCube.UI.saves()"> Load Game</button> /* <button class="menu-button" onclick="SugarCube.UI.alert('Not implemented yet.')"> Options</button> */ <button class="menu-button" onclick="SugarCube.Dialog.setup('Credits', 'Credits'); SugarCube.Dialog.wiki(SugarCube.Story.get('Credits').processText()); SugarCube.Dialog.open();"> Credits</button> </div> </div> <div class="game-logo"> <!-- Use either an image or the h1 title, or both --> <!-- If you have a logo image without the game title, include the h1 --> <!-- Example with image and title --> <h1>MindWare</h1> <img src="imgs/UI/logo-small-cropped.png" alt="MindWare Logo"> <!-- Uncomment the next line if your logo image doesn't include the game title --> <div class="content-warning"> <p class="adult-warning"><strong>For adults (18+) only.</strong></p> Version: <<link $gameVersion>> <<run Dialog.setup("Changelog")>> <<run Dialog.wiki(Story.get("Changelog").processText())>> <<run Dialog.open()>> <</link>> </div> </div> </div> <div class="footer"> /* <div> <<link $gameVersion>> <<run Dialog.setup("Changelog")>> <<run Dialog.wiki(Story.get("Changelog").processText())>> <<run Dialog.open()>> <</link>> </div> */ <div class="content-warning"> <p>All content is AI-generated; any resemblance to real persons, living or dead, is purely coincidental.</p> <p>Contains flashing images that may trigger seizures for people with photosensitive epilepsy.</p> </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 link-external" 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>MindWare is currently in the early stages of development. Enjoy exploring and stay tuned for future updates!</div> </div> </div> </div>
<div class="unlock-code-container"> <h2>Welcome to MindWare!</h2> <p>I hope you enjoy playing the game! While the content is limited at the moment, I'm pouring as much time as I can into expanding and improving it.</p> <p>This is my first major project, and I'm learning and growing with each step (and yes, making plenty of mistakes along the way).</p> <p>If you'd like to help me dedicate more time to developing the game, consider supporting me on <a href="https://www.patreon.com/SubjunctiveGames" target="_blank" class="">Patreon</a> or <a href="https://subscribestar.adult/subjunctivegames" target="_blank" class="">SubscribeStar</a>. Your support could help me reduce my freelance workload and focus more on game development—a dream I'm eager to realize!</p> <br> <hr> <br> <div class="extra-options-info"> <h3>Extra Options for Supporters</h3> <p>As a thank you to my Patreon and SubscribeStar supporters, I've created an Extra Options menu with additional features, including:</p> <ul> <li>Teleport to any passage</li> <li>Disable fade effects</li> <li>Add money</li> <li>Change your gender</li> <li>Enable infinite action points</li> <li>Option to fast-forward some timed quests</li> <li>Additional player avatar sets</li> </ul> <br> <p>All supporters additionally get these Patreon/SubscribeStar perks:</p> <ul> <li>More voting power in polls</li> <li>Early beta releases</li> <li>Regular offline MindWare releases</li> <li>Supporter-only Discord channel access</li> </ul> <br> <p>If you're a supporter, please enter your unlock code below:</p> </div> <div class="unlock-code-input"> <<textbox "$enteredCode" "">> <<button "Unlock Extra Options">> <<if MindWare.checkPassword($enteredCode) !== null>> <<set $doYouKnowTheAnswer = MindWare.checkPassword($enteredCode)>> <<run Dialog.close()>> <<run Dialog.setup("Extra Options Unlocked", "Extra Options Unlocked")>> <<run Dialog.wiki(Story.get("ExtraOptionsUnlocked").processText())>> <<run Dialog.open()>> <<else>> <<replace "#errorMessage">> <p class="error-message">Incorrect code. Please try again or proceed without Extra Options.</p> <</replace>> <</if>> <</button>> </div> <div id="errorMessage"></div> <div class="proceed-options"> <p>Don't have an unlock code?</p> <<button "Start New Game">><<run window.playStartButtonSound()>><<run setup.runStartingVariablesFromMenu()>><<run Dialog.close()>><</button>> <br><br> <hr> <br> <p style="color: #32CD32; font-weight: bold;">Want to support MindWare and get access to Extra Options?</p> <div class="support-links"> <a href="https://www.patreon.com/SubjunctiveGames" target="_blank" class="support-button">Support on Patreon</a> <a href="https://subscribestar.adult/subjunctivegames" target="_blank" class="support-button">Support on SubscribeStar</a> </div> </div> </div> <style> .unlock-code-container { color: var(--mindware-ui-text-color); padding: 1rem; max-width: 600px; margin: 0 auto; } .unlock-code-container h2 { color: var(--mindware-ui-accent-color); text-align: center; margin-bottom: 1rem; } .extra-options-info { margin-bottom: 1.5rem; } .extra-options-info h3 { color: var(--mindware-ui-secondary-accent); } .extra-options-info ul { list-style-type: none; padding-left: 1rem; } .extra-options-info li::before { content: "•"; color: var(--mindware-ui-accent-color); display: inline-block; width: 1em; margin-left: -1em; } .unlock-code-input { display: flex; justify-content: center; align-items: center; gap: 1rem; margin-bottom: 1rem; } .error-message { color: #ff4444; text-align: center; margin-bottom: 1rem; } .proceed-options { text-align: center; } .proceed-options p { margin-bottom: 0.5rem; } .support-container { padding: 1rem; margin-top: 1.5rem; } .support-title { color: #32CD32; font-weight: bold; font-size: 1.1em; margin-bottom: 0.5rem; text-align: center; } .support-links { display: flex; justify-content: center; gap: 1rem; margin-top: 1rem; } .support-button { background-color: #7b1fa2; color: #ffffff; border: none; padding: 0.75rem 1.5rem; cursor: pointer; text-decoration: none; font-weight: bold; transition: background-color 0.3s ease, transform 0.3s ease; } .support-button:hover { background-color: #9c27b0; transform: translateY(-3px); } /* .support-button:hover, button:hover { background-color: var(--mindware-ui-accent-color); } */ </style>
<div class="extra-options-unlocked"> <h2>Extra Options Unlocked!</h2> <p>Thank you for supporting MindWare. Your Extra Options have been unlocked.</p> <p>You can access these options at any time from the Extra Options menu (look for a star icon in the top-right corner).</p> <<button "Continue">><<run window.playStartButtonSound()>><<run setup.runStartingVariablesFromMenu()>><<run Dialog.close()>><</button>> </div> <style> .extra-options-unlocked { text-align: center; padding: 1rem; } .extra-options-unlocked h2 { color: var(--mindware-ui-accent-color); margin-bottom: 1rem; } .extra-options-unlocked button { margin-top: 1rem; } </style>
<style> .start-warning-box { width: 80%; margin: auto; padding: 20px; text-align: center; border: var(--mindware-ui-pixel-size) solid var(--mindware-ui-accent-color); background-color: var(--mindware-ui-panel-bg); color: var(--mindware-ui-text-color); border-radius: var(--mindware-ui-border-radius); box-shadow: 0px 0px 10px 2px var(--mindware-ui-accent-color); position: relative; font-family: var(--mindware-ui-font-primary); } .start-warning-box h2 { margin-top: 0; font-size: 24px; text-transform: uppercase; letter-spacing: 2px; color: var(--mindware-ui-accent-color); } .start-warning-box p { margin-bottom: 0; font-size: 18px; } .start-button { display: flex; justify-content: center; align-items: center; margin: 20px 10px; position: relative; } .start-button button { display: flex; justify-content: center; align-items: center; height: 60px !important; width: 250px; border: var(--mindware-ui-pixel-size) solid var(--mindware-ui-accent-color); color: var(--mindware-ui-text-color); font-weight: bold !important; font-size: 20px !important; text-transform: uppercase; background: var(--mindware-ui-button-color); font-family: var(--mindware-ui-font-primary); } .start-button button:hover { border-color: var(--mindware-ui-secondary-accent); background: var(--mindware-ui-panel-bg); color: var(--mindware-ui-light-text); box-shadow: 0 0 10px var(--mindware-ui-secondary-accent); transform: scale(1.05); transition: all 0.3s ease; } .skip-button { position: absolute; top: 20px; right: 20px; padding: 10px 20px; background-color: var(--mindware-ui-panel-bg); color: var(--mindware-ui-text-color); /*font-size: 16px;*/; border: none; cursor: pointer; border-radius: var(--mindware-ui-border-radius); font-family: var(--mindware-ui-font-primary); } .social-icon-container { display: flex; justify-content: center; align-items: center; width: 100%; height: 1vh; } .social-icon { background-color: var(--mindware-ui-accent-color); border-radius: 50%; width: 40px; height: 40px; display: flex; justify-content: center; align-items: center; margin: 5px; color: var(--mindware-ui-text-color); font-size: 24px; } .social-icon:hover { box-shadow: 0px 0px 10px 2px var(--mindware-ui-accent-color); } a.link-external:after { content: ""; } .social-icon-link { display: inline-block; text-decoration: none; margin: 0px !important; } </style>\ \ <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 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"><<link $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> \ <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 link-external" 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> <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>
I want to thank my incredibly generous Patreon and SubscribeStar supporters 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>Buss</li> <li>Cashandbrand</li> <li>chang lee</li> <li>Dagi</li> <li>emperorfrieza</li> <li>Joe Kain</li> <li>Lemonmasacre</li> <li>lookformee</li> <li>M G</li> <li>Matthew Cook</li> <li>Robert Holt</li> <li>secretly a plant</li> <li>Sissy Alice</li> <li>Sxftboi</li> <li>TAIGA</li> <li>Wayne</li> <li>WimpyDawg</li> </ul> A special thank you to lookformee, who moderates our Discord server with unparalleled dedication and enthusiasm. <hr> 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.
<div class="changelog-box"> <h3>Version 0.1.7 (Supporters-Only Beta 1)</h3> <ul> <li>You can now disable the avatar image in the sidebar.</li> <li>You can now disable button sound effects in the settings menu.</li> <li>New OmniPedia entry about the Community Zone.</li> <li>New dialog with Trix (unlocked after the GitGud delivery quest).</li> <li>New sleep minigame (currently accessible only via the Extra Options menu).</li> </ul> <h3>Version 0.1.6 (Public)</h3> <ul> <li>Coding assistants should now be more balanced (but this part of the game still needs a lot of work).</li> <li>New avatar set (custom avatars can now be placed in the "setX" folder).</li> <li>More content with the psychiatrist.</li> </ul> <h3>Version 0.1.6 (Supporters-Only Beta 3)</h3> <ul> <li>Many minor UI design improvements.</li> <li>Top menu buttons now double as notification indicators.</li> <li>Added ByteBunker OmniPedia entry.</li> <li>Minigames are automatically skipped on mobile.</li> <li>Added notification sound effect.</li> <li>Post-infection white overlay now doesn't flicker.</li> <li>Significantly more robust system for stat changes.</li> <li>Fixed dish washing minigame.</li> <li>Slightly improved the waveform minigame.</li> <li>Fixed bug that stopped rent payments from working.</li> <li>Added first sex scene with cook.</li> <li>Added second sex scene with cook.</li> </ul> <h3>Version 0.1.6 (Supporters-Only Beta 2)</h3> <ul> <li>New mobile-friendly UI.</li> <li>New UI sound system.</li> <li>New music playback system.</li> <li>New start screen.</li> <li>Updated Listen to Music section in player's apartment.</li> <li>Many minor UI redesign-related changes.</li> </ul> <h3>Version 0.1.6 (Supporters-Only Beta 1)</h3> <ul> <li>Removed difficulty settings.</li> <li>Removed Quick Start button.</li> <li>Reimplemented minigame skip button.</li> <li>Moved option to enable minigame skip buttons to Settings menu.</li> <li>Removed morality mechanic.</li> <li>Removed some sexuality stats.</li> <li>Fixed bug causing scroll to top button to be created endlessly.</li> <li>Made first bruteforce minigame easier.</li> <li>Added 10 showercam feeds.</li> <li>Added version number below game subtitle.</li> <li>Added first Rent Compliance Specialist visit.</li> <li>Implemented Hive Properties debt leading to installation of SUCKER machine.</li> <li>Fixed bug allowing skipping of BrainFry introduction.</li> <li>Increased earnings from coding minigame.</li> <li>Added visible BrainFry work counter to BrainFry passage.</li> <li>Replaced Synapse Steady VX installation clock with video to fix rare bug.</li> <li>Added unpaid rent notification to home passage.</li> <li>Fixed bug causing psychiatrist to say "hello again" on first visit.</li> <li>Fixed Extra Options menu to preserve player name-related variables.</li> <li>Updated Settings menu to correctly set player name variables.</li> </ul> <h3>Version 0.1.5 (Public)</h3> <ul> <li>Added post psychological evaluation chat with Cipher.</li> <li>Added first transition appointment with Dr. Hart.</li> <li>Added first post-appointment chat with Cipher.</li> <li>Added second transition appointment with Dr. Hart.</li> <li>Added second post-appointment chat with Cipher.</li> <li>Added third transition appointment with Dr. Hart.</li> <li>Implemented nickname and name change in Settings menu.</li> <li>Implemented gender change in Extra Options menu.</li> <li>Fixed bug causing error in Panacea Clinic under certain conditions.</li> </ul> <h3>Version 0.1.5 (Beta 2)</h3> <ul> <li>Made small tweaks to game difficulty settings screen.</li> <li>Added option to enable infinite action points in Extra Options menu.</li> <li>Added new OmniPedia section about HiveProperties.</li> <li>Fixed formatting bug in Go Outside passage.</li> <li>Implemented drunk and blackout mechanics.</li> <li>Fixed bug during first hospital visit.</li> <li>Added mobile Synapse Steady VX diagnostics report.</li> <li>Redesigned original Synapse Steady VX report.</li> <li>Updated Character Profile screen to display correct avatar image.</li> <li>Implemented first psychological evaluation at Panacea Clinic to begin physical transition.</li> </ul> <h3>Version 0.1.5 (Beta 1)</h3> <ul> <li>Fixed bug preventing autosave feature from working.</li> <li>Improved Extra Options menu protection (thanks to Discord member Moran).</li> <li>Implemented new avatar system reflecting all five stages of player character's transformation.</li> <li>Added new player avatar images.</li> <li>Added basic support for custom avatar images.</li> <li>Implemented avatar change in Extra Options menu.</li> </ul> <h3>Version 0.1.4 (Public)</h3> <ul> <li>Fixed various typos and poor word choices.</li> <li>Added random encounter when visiting SynTech location (1 in 20 chance, requires AVA infection for naughty content).</li> <li>Prepared groundwork for new avatar system (to be included in next version).</li> <li>Implemented several custom macros to change various stats.</li> <li>Improved reusability of AVA minigame.</li> </ul> <h3>Version 0.1.4 (Beta 2)</h3> <ul> <li>Added scroll to top button (can be disabled in Settings).</li> <li>Added scroll to bottom button (can be disabled in Settings).</li> <li>Added loading screen to initialize necessary variables (should resolve save compatibility issues).</li> <li>Fixed bug preventing .mov videos from playing.</li> <li>Fixed minor layout issue with videos.</li> </ul> <h3>Version 0.1.4 (Beta)</h3> <ul> <li>Fixed taxi hack minigame not working on second encounter.</li> <li>Added TRIX mission to find out who hacked her phone (available at BrainFry after working there three days post-taxi hack mission from Ray).</li> <li>Fixed "Start your new job" mission not succeeding.</li> </ul> <h3>Version 0.1.3</h3> <ul> <li>Added first taxi camera hack mission from Ray, leading to second one.</li> <li>Added second taxi camera hack mission from Ray.</li> <li>Added cum eating fetish.</li> <li>Added chat with Cipher about cum eating.</li> <li>Added fetish information to character screen.</li> </ul> <h3>Version 0.1.2</h3> <ul> <li>Added three neuroimaging sessions with Xavier. Supporters can skip waiting using button in task description (visible only with Extra Options unlocked).</li> <li>Updated gender change status messages to say "1 point" instead of "1 points".</li> <li>Added sexuality statistics in Character screen.</li> <li>Added new bar area in EroSphere.</li> <li>Implemented drink ordering in EroSphere (no effects yet).</li> <li>Made SynTech location accessible (no content yet).</li> <li>Made Panacea Clinic interior accessible (no content yet).</li> <li>Added teleport to EroSphere for supporters in Extra Options menu.</li> <li>Implemented dancing in EroSphere (no consequences yet).</li> <li>Added Glory Booths area (no content yet).</li> <li>Fixed implantCharge to prevent it from going below 0.</li> </ul> <h3>Version 0.1.1</h3> <ul> <li>Improved storage and manipulation of expenses.</li> <li>Added Community Zone and Panacea Clinic to navigation hub (Chapter 1).</li> <li>Fixed navigation hub "Go Back" links.</li> <li>Added hub passage for GitGud.</li> <li>Made AI coding assistant available after first BrainFry work post-infection.</li> <li>Added conversation with Yuki about surgery.</li> <li>Added conversation with Xavier about surgery, leading to side mission (not implemented yet).</li> <li>Implemented chance for Xavier to be "busy" when visited at GitGud.</li> <li>Added post-surgery linear passages.</li> <li>Made PornNexus website available (not fully implemented yet).</li> <li>Fixed BrainFry and GitGud dialog display order (newest first).</li> <li>Made prank mission available on day 4 of open section in Chapter 1.</li> <li>Improved relationship status change messages.</li> <li>Updated Notifications box to display available ByteBunker jobs instead of hacking targets.</li> </ul> <h3>Version 0.1.0</h3> <ul> <li>Fixed skip prank job minigame link.</li> <li>Fixed sidebars and topbar issues.</li> <li>Clarified which ByteBunker jobs are taken.</li> <li>Improved scrollbar appearance in Safari.</li> <li>Fixed bug: Notes deleted after saving.</li> <li>Fixed bug: Unwanted padding-top when changing "Stats Box" location to "Top" in settings.</li> <li>Fixed bug: Extraneous "S" at top of settings menu.</li> <li>Fixed bug: Hypnosis screen infinitely changing gender to female.</li> <li>Fixed bug: Character Profile "go back" button leading to wrong passage.</li> <li>Fixed EroSphere introduction display.</li> <li>Added task descriptions during linear section of Chapter 1.</li> <li>Added post-surgery chat with Cipher.</li> </ul> <h3>Version 0.1.0 (Beta)</h3> <ul> <li>Implemented gender change effect for prolonged viewing of last Project XX hypno.</li> <li>Added volume slider to sidebar music player.</li> <li>Improved handling of various status changes.</li> <li>Fixed issues with identical actions potentially triggering multiple variable changes.</li> <li>Changed AP display method.</li> <li>Modified topbar behavior.</li> <li>Fixed back button bug on Extendo website.</li> <li>Added OmniPedia entry for NeoUrbania.</li> <li>Added OmniPedia entry for SynTech.</li> <li>Added shuffle button to large music player.</li> <li>Completed implementation of Synapse Steady VX cyberware.</li> <li>Reduced maximum number of dishes to clean.</li> <li>Fixed typo: "emailss" in left sidebar.</li> <li>Fixed typo: "tenatns" in bathroom description.</li> <li>Fixed sidebar opening issue after sleep and work actions.</li> <li>Fixed "extendo.omninet" opening wrong laptop on personal laptop.</li> <li>Fixed loop in body details section of Quick Access Menu.</li> <li>Fixed music player always returning to top track after finish.</li> <li>Fixed energy consumption for unsuccessful colleague interactions.</li> <li>Added ending to brick breaker game.</li> <li>Fixed error output when clicking Extendo website in laptop browser.</li> <li>Fixed EroSphere SIMS not costing money to play.</li> </ul> <h3>Version 0.0.9</h3> <ul> <li>Added top bar to display player stats.</li> <li>Added play stat location setting for optional left sidebar display.</li> <li>Made UI partially visible during linear sections.</li> <li>Implemented functional Synapse Steady VX implant.</li> <li>Added character screen and corresponding shortcut button.</li> <li>Added computer shortcut.</li> <li>Added right sidebar customization tip.</li> <li>Added Start button hover effect.</li> <li>Added Quick Start button.</li> <li>Added option to skip Prologue.</li> <li>Added option to completely disable right sidebar.</li> <li>Fixed web browser 404 page back button bug.</li> <li>Fixed SIMS watched variable reset on sleep.</li> <li>Added resist minigame.</li> </ul> <h3>Version 0.0.8</h3> <ul> <li>Added sidebar settings (visible only when right sidebar is visible).</li> <li>Updated successful bruteforce to reveal correct password.</li> <li>Added optional hacking job (available on second day of Chapter 1).</li> <li>Added mobile compatibility warning.</li> <li>Added "S.I.M.S. pods" in EroSphere.</li> <li>Fixed empty space at bottom of passages.</li> </ul> <h3>Version 0.0.7</h3> <ul> <li>Added main story mission: GitGud Synapse Steady VX installation.</li> <li>Tweaked dialog boxes.</li> <li>Implemented right sidebar.</li> <li>Made minor changes to certain dialogs for better consistency.</li> <li>Fixed numerous minor bugs found using SugarValidator.</li> </ul> <h3>Version 0.0.6</h3> <ul> <li>Added Panacea Clinic as new location.</li> <li>Added main story mission: hospital visit.</li> <li>Added photosensitivity warning.</li> <li>Implemented color-changing notifications based on number (1 = yellow, 2 = orange, 3+ = red).</li> <li>Improved email client design to distinguish read and unread emails.</li> <li>Added ability to change first name, last name, and nickname in Extra Options menu.</li> <li>Added option to enable "Skip Minigame" buttons in 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 rent mechanic.</li> <li>Added Hive Properties website.</li> <li>Added Hive Properties email.</li> <li>Added expenses tracking.</li> <li>Added bug report form.</li> <li>Fixed numerous typos.</li> <li>Fixed Download Wiper Tool / Save Target button order issue.</li> <li>Fixed long black tunnel animation delay by implementing preload function and optimizing animation.</li> <li>Added EroSphere location.</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 urgent request from Cipher.</li> <li>Added chapter transition screen.</li> <li>Made landlord mission 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 BrainFry mission.</li> <li>Added chat with Cipher about 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 player sexuality variable.</li> <li>Removed warning about sleep not working.</li> </ul> <h3>Version 0.0.2</h3> <ul> <li>Adjusted difficulty of hacking minigame.</li> <li>Adjusted sleep delay duration.</li> <li>Added minigame difficulty setting.</li> <li>Added text increase/decrease buttons in settings menu.</li> <li>Added notification system.</li> <li>Added instant messenger app.</li> <li>Added two chat conversations with Cipher.</li> <li>Added BrainFry work introduction.</li> <li>Added three work conversations.</li> <li>Added BrainFry work minigame.</li> <li>Added quick access menu for apps.</li> <li>Added player sexuality variable.</li> <li>Added week cycle.</li> <li>Added image lightbox (used in instant messenger app).</li> <li>Fixed several bugs.</li> <li>Tweaked many aspects.</li> </ul> <h3>Version 0.0.1</h3> <ul> <li>Initial release.</li> </ul> </div>
/*********************************************/ /* 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>>
<<run window.gameBackgroundMusic.play(0);>> <<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 2065. 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 less advertised wares 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);>> <<run MindWare.addDialog('trixBrainFryDialogs', 'Ever been to GitGud?', 'Trix GitGud Dialog - Ever been to GitGud?');>> <<goto "BrainFry">> <</button>>
<<player>>Have you ever been to GitGud? Drake just sent me there to deliver a S.I.M.S.<</player>> <<trix>>He used to send me there all the time.<</trix>> <<player>>Used to?<</player>> <<trix>>Have you met Xavier?<</trix>> <<player>>Yea, Drake asked me to deliver the S.I.M.S. to him.<</player>> <<trix>>And you have no idea why it was better for me to stop going there?<</trix>> <<if $GitGudIntroductionPeeked>>\ <<player>>Actually, I do...<</player>> <<trix>>Are you blushing?! What did you saw?<</trix>> <<player>>I'm not blushing!<</player>> <div class="inner-thought">Or am I?</div> <<trix>>I don't mind... it's cute because I'm willing to bet that I know what you saw.<</trix>> <<player>>And what's that?<</player>> <<trix>>You saw Xavier having sex with one of his girls. Am I right?<</trix>> <<player>>How did you know?<</player>> <<trix>>Because that's what I saw when I was there. Many times.<</trix>> <<player>>You watched him through the keyhole?<</player>> <<trix>>What? Of course not! Wait... that's what you did?! The image of you peeking through the keyhole and blushing is adorable!<</trix>> <<player>>I wasn't blushing!<</player>> <<narrator>>Trix laughs heartily at your expense.<</narrator>> <<player>>But if you didn't peek, then how do you know what I saw?<</player>> <<trix>>He made me wait right outside the door while he was doing it. I could hear them through the door.<</trix>> <<player>>I see...<</player>> <<trix>>Then one day he opened the door — his huge cock pointed straight at me — and ask me if I was tired of waiting.<</trix>> <<player>>Damn... What happened then?<</player>> <<trix>>He told me that I should join him and the slut he was with to "speed things up."<</trix>> <<player>>And you did?<</player>> <<trix>>Of course not! I told him that I'd wait for him to finish, and that was the last time I went there.<</trix>> <<player>>Was he pissed?<</player>> <<trix>>No, he didn't seem to care. I was probably just another piece of ass to him.<</trix>> <<else>>\ <<player>>I really don't. Did something happen?<</player>> <<trix>>He used to make me wait right outside his door.<</trix>> <<player>>That sounds annoying. I can see why you stopped going there.<</player>> <<trix>>No, that wasn't the problem.<</trix>> <<trix>>The problem was that he was having sex with his girls while I was waiting. I could hear everything through the door.<</trix>> <<player>>Oh, I see. That must have been uncomfortable.<</player>> <<trix>>It was more than uncomfortable. One day, he opened the door and asked me if I was tired of waiting. He was completely naked and... well, you get the picture.<</trix>> <<player>>What happened then?<</player>> <<trix>>He told me that I should join him and the slut he was with to "speed things up."<</trix>> <<player>>And you did?!<</player>> <<trix>>Of course not! I told him that I'd wait for him to finish, and that was the last time I went there.<</trix>> <<player>>Was he pissed?<</player>> <<trix>>No, he didn't seem to care. I was probably just another piece of ass to him.<</trix>> <</if>>\ <<player>>It's good that you stood your ground and knew your self-worth. Not everyone would have the strength to do that.<</player>> <<trix>>Yeah, now I do. Anyway, it was nice talking to you, but work calls.<</trix>> \ <p class="back-link">\ <<link "Go Back">> <<set $trixBrainFryDialogs["Ever been to GitGud?"].isNew = false>> <<set $trixBrainFryDialogs["Ever been to GitGud?"].unlocked = false>> <<goto "TalkTrixBrainFry">> <</link>> </p>
<<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">> <<run MindWare.addTask("Wipe the SynTech server", "Task-WipeTheSynTechServer")>> <</replace>> <</button>>@@ </span>
Cipher asked you to help him wipe a server that belongs to SynTech, the most powerful megacorporation in the world.
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>
<<if MindWare.isMobileDevice()>> <<set $skipMinigameBack to "UrgentRequest-server">> <<set $skipMinigameContinue to "UrgentRequest-server-firewall-hack-success">> <<goto "Skipping Minigame">> <</if>> <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> <<if $minigameSkipButtons === true>><br> @@.minigame-skip-button;<<button "Skip Minigame">><<goto "UrgentRequest-server-firewall-hack-success">><</button>>@@ <</if>> <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>> <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>
<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 <<link "sleep">><<run MindWare.completeTask("Wipe the SynTech server", "Task-WipeTheSynTechServer")>><<goto "Chapter1">><</link>>.<</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> <<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>>
<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 ability to hide what a sexist pig you can be was 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">>\ <<set $brainFryFirstVisit to false>>\ <</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 > 1 && 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(3, \'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(3, \'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(3, \'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(3, \'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>> /* First Hormonal Therapy */ <<set _buttonString4 = '<button class="office-button action-point-button" onclick="MindWare.processActionButtonClick(3, \'FirstHormonalTherapy\');">💊 First hormonal therapy <span class="action-point-icon">⚡⚡⚡</span></button>'>> <<if $nextPsychologicalEvaluationCounter === 0 && $firstHormonalTherapyAvailable === true && $firstHormonalTherapyActivated !== true>> <<set $firstHormonalTherapyActivated = true>> <<if $extraActionsPanacea.indexOf(_buttonString4) === -1>> <<run $extraActionsPanacea.push(_buttonString4)>> <</if>> /* Initialize the counter when the quest becomes available */ <<if !$firstHormonalTherapyDaysAvailable>> <<set $firstHormonalTherapyDaysAvailable = 0>> <</if>> <</if>> /* Second Hormonal Therapy */ <<set _buttonString4 = '<button class="office-button action-point-button" onclick="MindWare.processActionButtonClick(3, \'SecondHormonalTherapy\');">💊 Second hormonal therapy <span class="action-point-icon">⚡⚡⚡</span></button>'>> <<if $nextPsychologicalEvaluationCounter === 0 && $secondHormonalTherapyAvailable === true && $secondHormonalTherapyActivated !== true>> <<set $secondHormonalTherapyActivated = true>> <<if $extraActionsPanacea.indexOf(_buttonString4) === -1>> <<run $extraActionsPanacea.push(_buttonString4)>> <</if>> /* Initialize the counter when the quest becomes available */ <<if !$secondHormonalTherapyAvailable>> <<set $secondHormonalTherapyDaysAvailable = 0>> <</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">@@.choicebutton;<<button "Wait Patiently">> <<replace "#nurse-choice">>\ <<include "UrgentRequest-Hospital-Intro-Inside-Nurse-Wait">> <</replace>> <</button>>@@ \ @@.choicebutton;<<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">@@.choicebutton;<<button "Resist">> <<replace "#examination4">>\ <<include "UrgentRequest-Hospital-Intro-Examination-Resist">> <</replace>> <</button>>@@ @@.choicebutton;<<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 $10,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 >= 10000>> <span id="xavier-deal">\ <<button "Pay the $10,000">> <<set $playerMoney -= 10000>> <<replace "#xavier-deal">>\ <<player>>I appreciate the offer, Xavier, but I'd rather just pay for the implant upfront. Here's the $10,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">@@.choicebutton;<<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>>@@ @@.choicebutton;<<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">@@.choicebutton;<<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>>@@ @@.choicebutton;<<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"> @@.choicebutton;<<button "Tell Xavier the Truth">>\ <<replace "#tell-xavier">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Diagnosis-Trance-Deeper-Continue4-Truth">> <</replace>> <</button>>@@ @@.choicebutton;<<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 © 2065 </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">@@.choicebutton;<<button "Install the Implant">>\ <<replace "#decision">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant">> <</replace>> <</button>>@@ @@.choicebutton;<<button "Don't Install the Implant">>\ <<replace "#decision">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Dont-Install-Implant">> <</replace>> <</button>>@@ @@.choicebutton;<<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">> @@.choicebutton;<<button "Install the Implant">>\ <<replace "#decision">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant">> <</replace>> <</button>>@@ @.choicebutton;<<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">@@.choicebutton;<<button "Install the Implant">>\ <<replace "#decision">>\ <<include "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant">> <</replace>> <</button>>@@ @@.choicebutton;<<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>> <<video "imgs/quests/synapse-steady-installation/ecg.mp4">> <</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? Are you the AI Cipher has been talking about? 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">@@.choicebutton;<<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">@@.choicebutton;<<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>>@@ @@.choicebutton;<<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 "Stay quiet">>\ <<replace "#ava-continue5">>\ <<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 "Stay quiet">>\ <<replace "#ava-continue5">>\ <<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>>
<<nobr>><<fadein 6s>> <img src="imgs/quests/synapse-steady-installation/clock-cropped.gif" width="100%"> <br> <</fadein>> <br> <<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, <<link "the endless waiting comes to its end">>\ <<set $rightSidebarEnabled = true>> <<set $lockedUI = false>> <<set $synapseSteadyVXInstalled = true>> <<set $introOver = true>> <<goto "UrgentRequest-AfterHospital-GitGud-Xavier-Install-Implant-Surgery-Done-Continue3">> <</link>>.<</fadein>> <</nobr>>
<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>> @@.choicebutton;<<button "Choose the Subscription-Based AI">> <<set $aiCodingAssistantChoice to "codebuddy">> <<goto "Yuki-Subscribe-CodeBuddy">> <</button>>@@ <br> @@.choicebutton;<<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> <<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 class="slider-container"> <label for="frequency-slider">Frequency:</label> <input type="range" id="frequency-slider" min="0.1" max="10" step="0.1" value="7"> </div> <div class="slider-container"> <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> \ <<if $minigameSkipButtons === true>>\ @@.minigame-skip-button;<<button "Skip Minigame">><<goto "RayTaxiMission-Hack1-Success">><</button>>@@ <</if>>\ \ <style> #frequency-minigame-container { text-align: center; margin-top: 20px; } #frequency-waveCanvas { border: 2px solid #55BBBC; background-color: azure; margin-bottom: 20px; } .slider-container { display: flex; align-items: center; justify-content: center; margin-bottom: 10px; } /* Frequency and Amplitude Labels */ label[for="frequency-slider"], label[for="amplitude-slider"] { font-size: 1.2em; color: #55BBBC; text-transform: uppercase; margin-right: 10px; width: 100px; /* Fixed width for labels */ text-align: right; } /* 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; padding-left: 20px; padding-right: 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>> @@.choicebutton;<<button "Agree to help">> <<goto "RayTaxiMission2-AgreeToHelp">> <</button>>@@ @@.choicebutton;<<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> @@.choicebutton;<<button "Investigate the sounds">> <<goto "RayTaxiMission-InvestigateSounds">> <</button>>@@ @@.choicebutton;<<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 || 7; 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 || 7; 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 || 7; 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 || 7; 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 class="slider-container"> <label for="frequency-slider">Frequency:</label> <input type="range" id="frequency-slider" min="0.1" max="10" step="0.1" value="7"> </div> <div class="slider-container"> <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> <<if $minigameSkipButtons === true>>\ @@.minigame-skip-button;<<button "Skip Minigame">><<goto "RayTaxiMission-Hack2-Success-Blond">><</button>>@@ <</if>>\ <style> #frequency-minigame-container { text-align: center; margin-top: 20px; } #frequency-waveCanvas { border: 2px solid #55BBBC; background-color: azure; margin-bottom: 20px; } .slider-container { display: flex; align-items: center; justify-content: center; margin-bottom: 10px; } /* Frequency and Amplitude Labels */ label[for="frequency-slider"], label[for="amplitude-slider"] { font-size: 1.2em; color: #55BBBC; text-transform: uppercase; margin-right: 10px; width: 100px; /* Fixed width for labels */ text-align: right; } /* 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 class="slider-container"> <label for="frequency-slider">Frequency:</label> <input type="range" id="frequency-slider" min="0.1" max="10" step="0.1" value="7"> </div> <div class="slider-container"> <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> <<if $minigameSkipButtons === true>>\ @@.minigame-skip-button;<<button "Skip Minigame">><<goto "RayTaxiMission-Hack2-Success-Raven">><</button>>@@ <</if>>\ <style> #frequency-minigame-container { text-align: center; margin-top: 20px; } #frequency-waveCanvas { border: 2px solid #55BBBC; background-color: azure; margin-bottom: 20px; } .slider-container { display: flex; align-items: center; justify-content: center; margin-bottom: 10px; } /* Frequency and Amplitude Labels */ label[for="frequency-slider"], label[for="amplitude-slider"] { font-size: 1.2em; color: #55BBBC; text-transform: uppercase; margin-right: 10px; width: 100px; /* Fixed width for labels */ text-align: right; } /* 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 || 7; 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 || 7; 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>> @@.choicebutton;<<button "Tell the truth">><<goto "Xavier-Third Neuroimaging-Truth">><</button>>@@ @@.choicebutton;<<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 || 7; 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 || 7; 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.Engine.display('Ray-Hack-WebBrowser')">🌐<span class="desktop-icon-label">Web Browser</span></div>\ <div class="flxfit-desktop-icon" onclick="SugarCube.Engine.display('Ray-IDE')"></><span class="desktop-icon-label">Integrated Development Environment</span></div>\ <div class="flxfit-desktop-icon" onclick="SugarCube.Engine.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 || 7; 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>> <<relationshipDecreasedWith "Ava" 5>> <</if>> <br> <<ava>>Disappointing.<</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 will.<</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 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 || 7; 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 "AVA" container>> <<say "AVA" `"imgs/characters/ava/ava-portrait.webp"`>>_contents<</say>><br> <</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>>
<<widget "hiveagent" container>> <<say "Hive Agent" "imgs/characters/hiveagent.webp">>_contents<</say>> <</widget>>
<<widget "worker1" container>> <<say "Worker 1" "imgs/characters/worker1.webp">>_contents<</say>> <</widget>> <<widget "worker2" container>> <<say "Worker 2" "imgs/characters/worker2.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>> <<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>>Ouch!<</player-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, custom S.I.M.S. 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>>Ouch!<</player-chat>> <</if>> <</if>>
<<player-chat>>AVA just talked with me.<</player-chat>> <<cipher-chat>>What?! 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>> <<cipher-chat>>You better get some rest. I'll do some extra digging and see if I can find any leads on blocking AVA's access.<</cipher-chat>> <<cipher-chat>>Try to make tomorrow a regualar day. That's the best you can do right now.<</cipher-chat>> <<player-chat>>I guess you're right.<</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" id="hackTargetIcon" 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" }); // Function for icon bouncing function bounceIcon() { $('#hackTargetIcon').addClass('pc-icon-bounce'); setTimeout(function() { $('#hackTargetIcon').removeClass('pc-icon-bounce'); }, 1000); } // Check for hacking targets and initiate bounce function checkAndBounce() { if (State.variables.hackingTargets && State.variables.hackingTargets.length > 0) { bounceIcon(); } } // Set interval to check and bounce every 3 seconds setInterval(checkAndBounce, 3000); }); <</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</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 $navigatedFromSidebar>>\ <<if previous() is "JobBoard">>\ <p class="back-link"> [[Go Back->WebBrowser]] </p> <<else>>\ <p class="back-link"> <<link "Go Back" $returnPassage>> <<set $navigatedFromSidebar to false>> <</link>> </p> <</if>>\ <<else>>\ <p class="back-link"> [[Go Back->WebBrowser]] </p> <</if>>\ <</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>>
<<include "JobBoard">>
<<include "LandlordJob">>
<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> $5,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 window.gameBackgroundMusic.stop()>> <<run window.gameMusic.startNewGame()>> <<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>\ <<if $introOver === true>><p class="back-link"> <<return "Go Back">> </p><</if>>
<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 25>> <<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>>\ @@.minigame-skip-button;<<button "Skip Minigame">><<goto "SpyingLandlordHack-server-camera-access">><</button>>@@ <</if>>\ <<nobr>><<if MindWare.isMobileDevice()>> <<goto "Skipping Minigame">> <<set $skipMinigameContinue = "SpyingLandlordHack-server-camera-access">> <<set $skipMinigameBack = "SpyingLandlordHack-server">> <</if>><</nobr>>
<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 + 10000>><</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>>\ <<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>>
<<nobr>> <<if MindWare.isMobileDevice()>> <<set $skipMinigameBack to "ByteBunker-Prank-computer-login">> <<set $skipMinigameContinue to "ByteBunker-Prank-computer">> <<goto "Skipping Minigame">> <</if>> <</nobr>>\ <<include "Minigame-Bruteforce">>\ <<if $minigameSkipButtons === true>>\ @@.minigame-skip-button;<<button "Skip Minigame">><<goto "ByteBunker-Prank-computer">><</button>>@@ <</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.Engine.display('Prank-Job-WebBrowser')">🌐<span class="desktop-icon-label">Web Browser</span></div>\ <div class="flxfit-desktop-icon" onclick="SugarCube.Engine.display('FLXFIT-Report')">📄<span class="desktop-icon-label">FromSamantha-MeetingNotes.txt</span></div>\ <div class="flxfit-desktop-icon" onclick="SugarCube.Engine.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>Home Location</td> <td> <<if $playerHome === "HomeBacklog">> Backlog <<else>> Missing Data <</if>> </td> </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> <<if $rentComplianceSpecialistComing === true>> <tr> <td>Days to Rent Compliance Specialist Visit</td> <td><<print Math.max(0, $rentComplianceSpecialistVisitDay - $totalDays)>></td> </tr> <</if>> </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.State.variables.rentComplianceSpecialistComing = false; 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 omnipedia-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> <li><<link "ByteBunker">><<replace "#replace-me">><<include "OmniPedia-ByteBunker">><</replace>><</link>></li> <li><<link "Community Zone">><<replace "#replace-me">><<include "OmniPedia-CommunityZone">><</replace>><</link>></li> </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> <br> <p>NeoUrbania is a sprawling metropolis and the epicenter of technological advancements in the year 2065. 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> <br> <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="omnipedia-content"> <h2>Topic: ByteBunker</h2> <p>ByteBunker is a legendary forum in the hacking community. In its heyday, it was the premier gathering place for hackers worldwide, serving as a melting pot for sharing exploits, exchanging coding tips, and showcasing groundbreaking hacks.</p> <p>Founded in the early days of the OmniNet, ByteBunker quickly gained notoriety for its no-holds-barred approach to information sharing. The forum's ethos of unrestricted knowledge exchange attracted some of the brightest minds in the hacking world, fostering an environment of innovation and skill development that was unparalleled in its time.</p> <p>However, the rapid advancement of technology and the rise of mainstream social media platforms have taken their toll on ByteBunker. The once-bustling digital corridors have grown quieter, with many veteran members moving on to corporate positions or delving deeper into underground networks to evade increasing surveillance.</p> <p class="back-link"> [[Choose a different topic->OmniPedia]] </p> </div>
<div class="omnipedia-content"> <h2>Topic: Community Zone</h2> <p>The Community Zone is the heart of middle-class life in NeoUrbania, characterized by towering apartment mega-blocks that create a distinct skyline. These colossal structures house thousands of residents, with a clear socioeconomic stratification evident in the layout of the buildings.</p> <p>Lower floors typically belong to corporate landlords like HiveProperties that cater to the lower middle class with functional but often crowded apartments. Mid-levels are generally owned by individual residents and offer more space and better amenities. The upper floors boast premium apartments with cityscape views, while a select few luxurious penthouses crown each mega-block.</p> <p>However, most wealthy NeoUrbanians choose to live in the suburbs to avoid the pollution and congestion of the city center. They commute to work in the city center using VTOLs (Vertical Take-Off and Landing vehicles), which are a common sight in the sky above the Community Zone.</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 || 7; 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>>And what are you planning to do with it?<</player>> <br> <<ava>>I plan 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>>And what are you planning to do with it?<</player>> <br> <<ava>>I plan 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>>And what are you planning to do with it?<</player>> <br> <<ava>>I plan 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 $5,000 for a total of $10,000 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 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 $10,000 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 "LandlordJob-First">> <<else>> <<script>> SugarCube.UI.alert("You should check the meme Cipher sent you first."); <</script>> <</if>> <</button>>
<<include "JobBoard">>
<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>
<<nobr>><<if MindWare.isMobileDevice()>> <<goto "Skipping Games">> <</if>><</nobr>> 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>>\ <<if $totalMissedRent > 0>>\ You have <span class="stat-data"><<print "$" + $totalMissedRent.toLocaleString("en-US", { minimumFractionDigits: 0, maximumFractionDigits: 0 })>></span> of unpaid rent. You should visit the [[Hive Properties website|HiveProperties-Website]] and pay it as soon as you can. <</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')">🎧 Organize your 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>>\ The total number of times you've worked at BrainFry is $brainFryWorkCount. <<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>> <div class="narrator">Ray quickly leaves. It's clear that your answer has disappointed him.</div> <<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 2>> <<set $typingSpeed to 75 + 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>> <<set $typingSpeed to 75 + 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 = 50>> <<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 2>> <<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 === 100>>(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, 100); 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>>\ <<if $synapseSteadyVXInstalled && random(1, 3) === 1 && !$triggerUglyBastardContent>> <<set $triggerUglyBastardContent to true>> <<goto "Ugly-Bastard">> <<else>> <<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>> <</if>> <<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> \ <<nobr>><<if $minigameSkipButtons === true>> <<if $eroSphereDishesWashed>> @@.minigame-skip-button;<<button "Skip Minigame">> <<set $playerMoney += 250>> <<goto "EroSphere-Kitchen-Dishes-Success-Another">> <</button>>@@ <<else>> @@.minigame-skip-button;<<button "Skip Minigame">> <<set $eroSphereDishesWashed = true>> <<goto "EroSphere-Kitchen-Dishes-Success-First">> <</button>>@@ <</if>> <</if>><</nobr>> \ <<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,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'; 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) { const rect = canvas.getBoundingClientRect(); let clientX, clientY; if (e.touches && e.touches.length > 0) { clientX = e.touches[0].clientX; clientY = e.touches[0].clientY; } else { clientX = e.clientX; clientY = e.clientY; } return { x: clientX - rect.left, y: clientY - rect.top }; } function handlePercentage(filledInPixels) { filledInPixels = filledInPixels || 0; console.log('Filled in pixels: ' + filledInPixels + '%'); console.log('Dishes cleaned: ' + SugarCube.State.variables.dishesCleaned); console.log('Dishes to clean: ' + SugarCube.State.variables.dishesToClean); if (filledInPixels > 90 && !dishJustCleaned) { dishJustCleaned = true; canvas.style.display = 'none'; SugarCube.State.variables.dishesCleaned++; $('#dishesCleaned').text(SugarCube.State.variables.dishesCleaned); console.log('Dish cleaned. New total: ' + SugarCube.State.variables.dishesCleaned); if (SugarCube.State.variables.dishesCleaned < SugarCube.State.variables.dishesToClean) { document.getElementById('clean-next-dish').style.display = 'block'; console.log('Showing next dish button'); } else { SugarCube.UI.alert("Congratulations! All dishes have been cleaned."); document.getElementById('clean-next-dish').style.display = 'none'; $("#finishGame").show(); console.log('Game finished'); } } } let dishJustCleaned = false; function handleMouseDown(e) { isDrawing = true; lastPoint = getMouse(e, canvas); dishJustCleaned = false; } function handleMouseMove(e) { if (!isDrawing) { return; } e.preventDefault(); const currentPoint = getMouse(e, canvas); const dist = distanceBetween(lastPoint, currentPoint); const angle = angleBetween(lastPoint, currentPoint); let x, y; for (let 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() { isDrawing = false; dishJustCleaned = false; ctx.globalCompositeOperation = 'source-over'; ctx.clearRect(0, 0, canvasWidth, canvasHeight); ctx.drawImage(image, 0, 0); this.style.display = 'none'; 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 heavy 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> <br> <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> <br> <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 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 visited("PsychologicalEvaluation1") > 1>>\ <<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 */ } @media (pointer: coarse) and (hover: none) { .pink-choicebutton button { height: 30px; } } .pink-choicebutton:hover button { border-color: #FF69B4 !important; /* Lighter pink on hover for interactivity */ background: #1B030A !important; /* Maintain background color on hover */ } .pink-choicebutton button:active { background: #1B030A !important; /* Slightly darker shade for pressed effect */ border-color: #FF0080 !important; /* Neon pink border */ transform: translateY(2px) !important; /* 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(3, \'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 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(3, \'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 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(3, \'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(3, \'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 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>>@@
<<set $relationshipPsychiatrist to 50>>\ <div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <<psychiatrist>>I think it's clear now that we've reached a significant breakthrough.<</psychiatrist>> <<player>>What happens next?<</player>> <<psychiatrist>>We'll begin the next phase of your transition. This includes hormonal therapy and additional counseling to help you adjust.<</psychiatrist>> <<ava>>Embrace it. This is who you are.<</ava>> <div class="narrator">AVA's voice echoes softly in your mind.</div> <<psychiatrist>>Do you have any questions or concerns you'd like to share?<</psychiatrist>> @@.choicebutton;<<button "No, I Don't">><<goto "TransitionAppointment3-Acceptance">><</button>>@@ @@.choicebutton;<<button "I'm Nervous">><<goto "TransitionAppointment3-Nervous">><</button>>@@
<div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <<player>>No, no questions.<</player>> <<include "TransitionAppointment3-Acceptance-Continue">>
<<psychiatrist>>I'm glad to hear that. I'll fill out the necessary paperwork, and we should be able to apply the first dose of hormonal therapy next week.<</psychiatrist>> <div class="narrator">She stands up and extends her hand to help you rise.</div> <<player>>Thank you, Dr. Hart. I appreciate everything you've done.<</player>> <<psychiatrist>>You're very welcome, sweetie. See you at our next appointment.<</psychiatrist>> <div class="narrator">As you leave her office, AVA's voice whispers softly.</div> <<ava>>You're on the right path.<</ava>> <<video "imgs/quests/transition/vision.mp4">> @@.choicebutton;<<button "Leave the Clinic">><<set $nextPsychologicalEvaluationCounter = 7>> <<run MindWare.completeTask("Third transition appointment", "Task-ThirdTransitionAppointment")>> <<run MindWare.addTask("Begin hormonal therapy", "Task-HormonalTherapy")>> <<run $extraActionsPanacea.splice($extraActionsPanacea.indexOf('<button class="office-button action-point-button" onclick="MindWare.processActionButtonClick(3, \'TransitionAppointment3\');">👩⚕️ Third transition appointment <span class="action-point-icon">⚡⚡⚡</span></button>'), 1)>> <<set $firstHormonalTherapyAvailable to true>> <<run MindWare.addInstantMessage('cipherInstantMessages', 'First Hormonal Therapy', 'IMApp-CipherLynx-First Hormonal Therapy', 'Cipher', true, true);>> <<goto "PanaceaClinic">><</button>>@@
Dr. Hart has scheduled your first hormonal therapy session in $nextPsychologicalEvaluationCounter days. <<nobr>> <<set _currentPassage to passage()>> <<if 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-HormonalTherapy").processText())>> <<run Dialog.open()>> <</button>> <</if>> <</nobr>>
<div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <<player>>I can't help but feel nervous.<</player>> <<psychiatrist>>There's no need to be nervous, sweetie. Mommy's gonna help you.<</psychiatrist>> <<psychiatrist>>I've helped many sweet boys like you blossom into beautiful girls — it's the most rewarding part of my job as a psychiatrist.<</psychiatrist>> <<psychiatrist>>You just need to trust mommy and do as I say, okay? I promise you'll enjoy the process as much as I will.<</psychiatrist>> <div class="narrator">Before you can say anything, Dr. Hart hugs you tightly and pulls your head to her large breast, stroking your hair again.</div> <<video "imgs/quests/transition/pampers.mp4">> <<psychiatrist>>Do you feel better now, sweetie?<</psychiatrist>> @@.choicebutton;<<button "Yes, I feel better">> <<goto "TransitionAppointment3-Better">><</button>>@@ @@.choicebutton;<<button "Not really">> <<goto "TransitionAppointment3-Not-Really">><</button>>@@
<div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <<player>>Yes, I feel better.<</player>> <<relationshipIncreasedWith "Psychiatrist" 5>> <<include "TransitionAppointment3-Acceptance-Continue">>
<div class="img-location"><img src="imgs/locations/hospital/psychiatrist-office.webp" width="100%"></div> <<player>>I'm still nervous and not sure if I'm making the right choice. Maybe I should get a second opinion.<</player>> <<psychiatrist>>Sweetie, I understand your concerns, but...<</psychiatrist>> <div class="narrator">Dr. Hart's demeanor changes suddenly. Her sweet and motherly tone vanishes, replaced by a stern and dominant expression.</div> <<psychiatrist>>I am a doctor, and I know what's best for you. The test results were clear, and hormonal treatment is necessary to stop your gender dysphoria. Otherwise, worse mental symptoms might manifest — symptoms that might require hospitalization.<</psychiatrist>> <div class="narrator">Her words hang in the air, and you realize that she has just threatened you.</div> <<relationshipDecreasedWith "Psychiatrist" 5>> <<psychiatrist>>I've had patients who were resisting transition, just like you. They suffered from psychological and gender identity-related problems. They were in denial, refusing to accept the truth about themselves.<</psychiatrist>> <<psychiatrist>>But I saw past their masculine facades. I did what I had to do to liberate the beautiful girls inside them. And you know what? They're all so grateful now.<</psychiatrist>> <<psychiatrist>>I'm still friends with those girls, and they're always eager to express their gratitude in many different ways. They understand that I helped them become who they truly are. They often tell me how much better their lives are now, how much more fulfilled and content they feel. They're no longer hiding, no longer pretending. They're finally free to be themselves, and it's a beautiful thing to see.<</psychiatrist>> @@.pink-choicebutton;<<button "I... I understand">><<goto "TransitionAppointment3-Acceptance-Continue">><</button>>@@
<<player-chat>>Hey Cipher, I just had another appointment with Dr. Hart.<</player-chat>> <<cipher-chat>>How did it go? What did you discuss?<</cipher-chat>> <<player-chat>>We talked about my gender dysphoria and the next steps in my treatment.<</player-chat>> <<cipher-chat>>What kind of treatment are you talking about?<</cipher-chat>> <<player-chat>>I'm going to start hormonal therapy to transform my body.<</player-chat>> <<cipher-chat>>Is this your decision or AVA's?<</cipher-chat>> <<player-chat>>I think it's my decision.<</player-chat>> <<cipher-chat>>How can you be sure?<</cipher-chat>> <<player-chat>>I can't be sure...<</player-chat>> <<if visited("TransitionAppointment3-Not-Really") >= 1>> <<player-chat>>But the doctor isn't leaving me much choice anyway.<</player-chat>> <<cipher-chat>>How come?<</cipher-chat>> <<player-chat>>She threatened hospitalization if I don't go through with the treatment.<</player-chat>> <<cipher-chat>>Is that even legal?!<</cipher-chat>> <<player-chat>>I don't know... probably.<</player-chat>> <<player-chat>>Something's telling me it's the right choice, though.<</player-chat>> <<cipher-chat>>I just hope that something is your own mind.<</cipher-chat>> <<player-chat>>Yea, me too.<</player-chat>> <<else>> <<if visited("TransitionAppointment3-Better") >= 1>> <<player-chat>>But the doctor really cares about her patients. She's been very supportive and understanding.<</player-chat>> <<cipher-chat>>That's good to hear. It's important to have someone you can trust — now you have two people 😉<</cipher-chat>> <<player-chat>>❤️<</player-chat>> <<cipher-chat>>Just make sure you're doing this for yourself and not because someone or something else is pushing you.<</cipher-chat>> <<player-chat>>I think I am. It feels right, you know?<</player-chat>> <<cipher-chat>>If it feels right, then that's at least a good sign... I think.<</cipher-chat>> <</if>> <</if>> <<set $cipherInstantMessages["First Hormonal Therapy"].isNew = false>> <<set $cipherInstantMessages["First Hormonal Therapy"].unlocked = false>>
<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 "moreMasculine">> <<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><br> <<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><br> <<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>> /* <<widget "moreFeminine">> <<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><br> <<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><br> <<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>> */
<<if $hormonalTherapyDreamsActive !== true>>\ <<nobr>><<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); }; setup.displayRandomDream(); }); <</script>><</nobr>>\ \ <<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> <</if>>\ \ <<if $hormonalTherapyDreamsActive === true && $hormonalTherapyDream === 1>>\ <<video "imgs/dreams/hormones/dream1.webm">> <<fadein "2s">> You close your eyes, leaving behind the hustle and bustle of the world. <</fadein>> <<fadein "2s" "2s">> Drifting into slumber, you see a beautiful girl in front of you and feel the desire to get closer to her, to touch her, to become one with her. <</fadein>> <<fadein "2s" "4s">> Then you notice a man behind the girl, thrusting into her. You wake up startled but aroused. <</fadein>> <<fadein "2s" "6s">> You notice that a strange tingling sensention on your skin. <</fadein>> <<fadein "2s" "8s">> <<include "Wake Up Button">> <</fadein>> <<set $hormonalTherapyDream to 2>>\ <<elseif $hormonalTherapyDreamsActive === true && $hormonalTherapyDream === 2>>\ <<video "imgs/dreams/hormones/dream2.webm">> <<fadein "2s">> You close your eyes, leaving behind the hustle and bustle of the world. <</fadein>> <<fadein "2s" "2s">> Drifting into slumber, you see a beautiful girl in front of you and feel the desire to get closer to her, to touch her, to become one with her. <</fadein>> <<fadein "2s" "4s">> Then you notice the girl is grinding on her pillow. You wake up startled but aroused. <</fadein>> <<fadein "2s" "6s">> Your skin is tingling again. When you touch your hand, you notice how smooth it feels. <</fadein>> <<fadein "2s" "8s">> <div class="inner-thought">Is the pill affecting me so much already?</div> <</fadein>> <<fadein "2s" "10s">> <<include "Wake Up Button">> <</fadein>> <<set $hormonalTherapyDream to 3>>\ <<elseif $hormonalTherapyDreamsActive === true && $hormonalTherapyDream === 3>>\ <<video "imgs/dreams/hormones/dream3.webm">> <<fadein "2s">> You close your eyes, leaving behind the hustle and bustle of the world. <</fadein>> <<fadein "2s" "2s">> Drifting into slumber, you are suddenly overwhelmed by a barrage of vivid, erotic visions. <</fadein>> <<fadein "2s" "4s">> You see beautiful girls getting fucked hard and sucking on hard, veiny shafts, their bodies writhing in pleasure <</fadein>> <<fadein "2s" "6s">> The visions change rapidly, each one more intense than the last. The onslaught of images is overwhelming, and you feel your own body responding, becoming more and more aroused. <</fadein>> <<fadein "2s" "8s">> Finally, you can't take it anymore. With a loud groan, you come hard and wake up, your heart pounding and your body still tingling with the aftermath of your intense, erotic dream. <</fadein>> <<fadein "2s" "10s">> You look down and see a large cum stain on your underwear. <<video "imgs/quests/transition/wet-dream.mov">>\ <</fadein>> <<fadein "2s" "12s">> I need to clean myself up. <<link "Continue">> <<unset $dreamWebMs>> <<run MindWare.advanceDay()>> <<goto "Hormonal Therapy Masculine-Leaning Transformation">> <</link>> <<set $hormonalTherapyDreamActive to false>>\ <</fadein>> <<else>>\ <<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">> <<include "Wake Up Button">> <</fadein>> <</if>>\
<div class='action-points-change'><span class='action-points-increase'><span class="action-point-icon">⚡</span> Action Points restored.</span></div> <<if $SUCKERInstalled && $totalMissedRent > 0>>\ <<link "Continue">> <<unset $dreamWebMs>> <<run MindWare.advanceDay()>> <<goto "HiveProperties-SUCKER-AutomaticMorningExtraction">> <</link>> <<else>>\ <<link "Continue">> <<unset $dreamWebMs>> <<run MindWare.advanceDay()>> <<goto "HomeBacklog">> <</link>> <</if>>\ /* <<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 -= 2>> <<if $implantCharge < 0>><<set $implantCharge = 0>><</if>> <</if>> <<if $implantCharge > 0 && $mentalCondition === "Unstable">> <<set $implantCharge -= 4>> <<if $implantCharge < 0>><<set $implantCharge = 0>><</if>> <</if>> <<if $implantCharge > 0 && $mentalCondition === "Dysphoric">> <<set $implantCharge -= 8>> <<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>>\ <<if $tutorialSkipMinigameClosed !== true>> <div id="tutorial-box-2"><div class="instruction-container-red">\ <div class="instruction-title-bar-red">Tutorial: Skip Minigames <button class="tutorial-close-button" onclick="SugarCube.State.variables.tutorialSkipMinigameClosed = 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>You can enable the option to skip any minigame in the settings menu. If you choose to do so, a button will appear below the currently active minigame, allowing you to instantly successfully complete it.</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"><br><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 "Easy">>\ <div class="minigame-coding-instructions"><br><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"><br><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>><<if MindWare.isMobileDevice()>> <<goto "Skipping Minigame">> <<set $skipMinigameBack to "BrainFry">> <<set $skipMinigameContinue to "BrainFry">> <</if>><</nobr>> \ <<nobr>><<if $minigameSkipButtons === true>>\ @@.minigame-skip-button;<<button "Skip Minigame (Earn $500)">><<run MindWare.submitBrainFryWork(500, 250)>><</button>>@@ <</if>> <p class="back-link"> <<link "Go Back">> <<goto "BrainFry">> <</link>> </p><br><</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>> $(document).ready(function() { var characterCount = 0; var timerActive = false; var traceProgress = 0; var totalTraceTime = State.variables.codingMinigameTimeLeft; var traceInterval; function cleanup() { clearInterval(traceInterval); timerActive = false; $(document).off('keypress.codingMinigame'); } function endGame() { cleanup(); $('#hackerGame_startTyping').text("Stop typing!"); var moneyEarned = characterCount * State.variables.moneyPerCharacter; $('#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() { MindWare.submitBrainFryWork(moneyEarned, characterCount); }); } $('#hackerGame_beginButton').click(function() { $(this).hide(); $('#hackerGame_startTyping').show(); $('#hackerGame_hiddenInput').css("pointer-events", "auto").focus(); timerActive = true; 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); }); $(document).on('keypress.codingMinigame', function() { if (timerActive) { characterCount++; $('#hackerGame_characterCount').html("<b>Characters typed:</b> " + characterCount); var randomIndex = Math.floor(Math.random() * setup.fakeCodes.length); var fakeCode = setup.fakeCodes[randomIndex]; $("#hackerGame_hackingOutput").append(fakeCode + "\n"); $("#hackerGame_hackingOutput").scrollTop($("#hackerGame_hackingOutput")[0].scrollHeight); } }); $(document).one(':passageend', cleanup); }); <</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 || 7; 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 || 7; 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 || 7; 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 = 5.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="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">> <<if selectAvatar()>> <<set $playerName to jQuery("#firstName").val()>> <<set $playerLastName to jQuery("#lastName").val()>> <<set $playerNickname to jQuery("#nickname").val()>> <<set $miniGameDifficulty to "Normal">> <<goto "Prologue">> <</if>> <</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 id="avatarStatus" class="character-creator-avatar-status"></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) { $('#avatarPreview').css('background-image', 'url("' + avatars[index] + '")'); updateAvatarStatus(index); } else { console.error("No avatars available to display."); } } function updateAvatarStatus(index) { if (index === 0) { $('#avatarStatus').text(''); } else if (currentAvatarIndex !== 0 && !MindWare.checkPassword(SugarCube.State.variables.enteredCode)) { $('#avatarStatus').html('<span style="color: #FFA500;"><a href="https://www.patreon.com/SubjunctiveGames">Supporters Only</a></span>'); } else { $('#avatarStatus').text(''); } } 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(); } function showSupporterDialog() { Dialog.setup("Supporter-Only Content"); Dialog.wiki(` <p>Only the first avatar set is free. The rest are available exclusively to <a href="https://www.patreon.com/SubjunctiveGames">Patreon</a> and <a href="https://subscribestar.adult/subjunctivegames">SubscribeStar</a> supporters.</p> <p>Please enter the unlock code:</p>\ <<textbox "$enteredCode" "">><br> <<button "Submit">> <<if MindWare.checkPassword($enteredCode) !== null>> <<set $doYouKnowTheAnswer = MindWare.checkPassword($enteredCode)>> <<run Dialog.close()>> <<else>> <<replace "#errorMessage">> <p style="color: red;">Incorrect code. Please try again or select the free avatar.</p> <</replace>> <</if>> <</button>> <div id="errorMessage"></div> `); 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() { if (currentAvatarIndex !== 0 && !MindWare.checkPassword(SugarCube.State.variables.enteredCode)) { showSupporterDialog(); return false; } State.variables.playerNewAvatarSelected = currentAvatarIndex; return true; }; }); <</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"> <<if $hideAvatarImage>> <div class="avatar-section"> <<print '<img src="' + _updatedAvatar + '" alt="Player Avatar" class="profile-avatar">'>> </div> <</if>> <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>>
<style> /* Updated styles for the cheat menu headers */ #cheatsContent h2 { color: #55BBBC; font-size: 1.5em; margin-top: 0; margin-bottom: 30px; padding-top: 0; padding-bottom: 0px; text-align: left; position: relative; } #cheatsContent h2::after { content: ''; position: absolute; left: 0; right: 0; bottom: -0.5rem; height: 1px; background: linear-gradient(to right, #55BBBC, #55BBBC, transparent); } #cheatsContent h3 { color: #A0E6E7; font-size: 1.2em; margin-top: 20px; margin-bottom: 10px; padding-bottom: 5px; position: relative; } #cheatsContent h3::after { content: ''; position: absolute; left: 0; bottom: 0; width: 30px; height: 1px; background-color: #55BBBC; } .dream-section { margin-top: 20px; } .dream-heading { color: #55BBBC; border-bottom: 1px solid #55BBBC; padding-bottom: 5px; margin-bottom: 10px; } .dream-container { display: flex; flex-wrap: wrap; gap: 10px; } .dream-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; } .dream-box:hover { transform: scale(1.1); box-shadow: 0 0 10px #00ffea; } .dream-icon { max-width: 80%; max-height: 80%; object-fit: contain; } </style> <span id="cheatsContent"> <<if MindWare.checkPassword($enteredCode)>> <h2>Navigation</h2> <h3>Teleport to a Passage:</h3> <<set $selectedPassage = ''>> <!-- Initialize the variable --> <<listbox "$selectedPassage">> <<option "Select a Passage" '' selected>> <!-- Default option --> <<option "Start">> <!-- Value and label are the same --> <<option "HomeBacklog">> <<option "Computer">> <<option "EroSphere">> <!-- Add more options as needed --> <</listbox>> <<button "Go">> <<if $selectedPassage neq ''>> <<goto $selectedPassage>> <<else>> <</if>> <</button>> <br><br> <<textbox "$debugPassageName" "Enter a passage name">> <<button "Go">> <<if Story.has($debugPassageName)>> <<goto $debugPassageName>> <<else>> <<print "Passage '" + $debugPassageName + "' does not exist.">> <</if>> <</button>> <br> <p><b>Current passage name:</b> <<print passage()>></p> <div> <br> <h2>UI</h2> <h3>Fade Effect Toggle:</h3> <p>This option enables or disables the fade-in and fade-out effects in the game. When disabled, text appears and disappears instantly without any fading transition.</p> <<checkbox "$fadeDisable" false true autocheck>> Disable Fade Effects? /* <h3>Show Minigame Skip Buttons:</h3> <p>Enable this option to show buttons that allow you to skip minigames. Refresh the page (F5) if the button doesn't show up after you click Confirm.</p> <<checkbox "$minigameSkipButtons" false true autocheck>> Show Skip Buttons? */ </div> <div> <br> <h2>Player Stats</h2> <div> <h3><b>Money:</b> $<span id="moneyDisplay"><<print $playerMoney>></span><br></h3> <<link "+100">> <<set $playerMoney += 100>> <<replace "#moneyDisplay">><<print $playerMoney>><</replace>> <</link>> <<link "+1,000">> <<set $playerMoney += 1000>> <<replace "#moneyDisplay">><<print $playerMoney>><</replace>> <</link>> <<link "+10,000">> <<set $playerMoney += 10000>> <<replace "#moneyDisplay">><<print $playerMoney>><</replace>> <</link>> </div> <br> <div> <h3><b>Action Points:</b> <span id="actionPointsDisplay"><<print $actionPoints>></span><br></h3> <<link "+1">> <<set $actionPoints += 1>> <<replace "#actionPointsDisplay">><<print $actionPoints>><</replace>> <</link>> <<link "+10">> <<set $actionPoints += 10>> <<replace "#actionPointsDisplay">><<print $actionPoints>><</replace>> <</link>> <<link "+100">> <<set $actionPoints += 100>> <<replace "#actionPointsDisplay">><<print $actionPoints>><</replace>> <</link>> <br> <<checkbox "$infiniteActionPoints" false true autocheck>> Enable Infinite Action Points? </div> <br> <div> <h3><b>Gender:</b> <span id="genderDisplay"><<print $playerGender>> out of 100 (<<print MindWare.getGenderStatus()>>)</span></h3> <<link "Set to 0 (Female)">> <<set $playerGender to 0>> <<replace "#genderDisplay">><<print $playerGender>> out of 100 (<<print MindWare.getGenderStatus()>>)<</replace>> <</link>><br> <<link "Set to 30 (Feminine)">> <<set $playerGender to 30>> <<replace "#genderDisplay">><<print $playerGender>> out of 100 (<<print MindWare.getGenderStatus()>>)<</replace>> <</link>><br> <<link "Set to 50 (Androgynous)">> <<set $playerGender to 50>> <<replace "#genderDisplay">><<print $playerGender>> out of 100 (<<print MindWare.getGenderStatus()>>)<</replace>> <</link>><br> <<link "Set to 70 (Masculine)">> <<set $playerGender to 70>> <<replace "#genderDisplay">><<print $playerGender>> out of 100 (<<print MindWare.getGenderStatus()>>)<</replace>> <</link>><br> <<link "Set to 100 (Male)">> <<set $playerGender to 100>> <<replace "#genderDisplay">><<print $playerGender>> out of 100 (<<print MindWare.getGenderStatus()>>)<</replace>> <</link>> </div> </div> <div> <br> <h2>Information</h2> <ul> <li><b>Total days:</b> $totalDays</li> <<if $chapter1Started>> <li><b>Chapter 1 days:</b> $chapter1Days</li> <</if>> </ul> <br> <h2>Dreams</h2> <<nobr>><div class="dream-section"> <<checkbox "$disableHypnoTimer" false true autocheck>> Disable Dream Timer? <p style="font-size: 0.9em; color: #888;">When enabled, you can look at dream images indefinitely.</p> <div class="dream-container"> <div class="dream-box"> <img src="imgs/dreams/hypno-solo/605716507_p0.webp" onclick="SugarCube.Engine.play('Dream3DRoom1'); SugarCube.Dialog.close();" class="dream-icon"> /* <div class="dream-title">Dream Room 1</div> */ </div> <div class="dream-box"> <img src="imgs/dreams/hypno-cock/639446048_p2.webp" onclick="SugarCube.Engine.play('Dream3DRoom2'); SugarCube.Dialog.close();" class="dream-icon"> /* <div class="dream-title">Dream Room 2</div> */ </div> </div> </div><</nobr>> <br> <h2>Testing</h2> <!-- Button to resist AVA wrapped in a div with a unique ID --> <div id="resist-ava-button-container"> <<button "Resist AVA">> <<run MindWare.resistAVAMinigame()>> <<run Dialog.close()>> <</button>> <br> </div> <!-- Hidden Content: Button to Continue (Initially Hidden) --> <div id="AVA-resist-minigame-hidden-content" style="display: none;"> <<button "Choice">> <</button>> </div> </div> <<set _currentPassage = passage()>> <br> <hr> <br> <<button "Confirm">> <<run Dialog.close()>> <<goto _currentPassage>> <</button>> <<else>> <p>Extra options are available only in a version of MindWare exclusive to <a href="https://www.patreon.com/SubjunctiveGames">Patreon</a> and <a href="https://subscribestar.adult/subjunctivegames">SubscribeStar</a> supporters.</p> <p>Supported options:</p> <ul> <li>Teleport to any passage</li> <li>Disable fade effects</li> <li>Add money</li> <li>Change your gender</li> <li>Enable infinite action points</li> <li>Option to fast-forward some timed quests</li> <li>Additional player avatar sets</li> </ul> <br> <p>All supporters additionally get these Patreon/SubscribeStar perks:</p> <ul> <li>More voting power in polls</li> <li>Early beta releases</li> <li>Regular offline MindWare releases</li> <li>Supporter-only Discord channel access</li> </ul> <br> <p>Enter the correct access code to unlock extra options:</p> <<textbox "$enteredCode" "">> <<button "Submit">> <<if MindWare.checkPassword($enteredCode) !== null>> <<set $doYouKnowTheAnswer = MindWare.checkPassword($enteredCode)>> <<replace "#cheatsContent">><<include "Cheats">><</replace>> <<run Dialog.close()>> <<run Dialog.setup("Extra Options", "Extra Options")>> <<run Dialog.wiki(Story.get("Cheats").processText())>> <<run Dialog.open()>> <<else>> <<replace "#errorMessage">> <p style="color: red;">Incorrect code. Please try again.</p> <</replace>> <</if>> <</button>> <</if>> <div id="errorMessage"></div> </span>
<<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="album-selection-container"> <h2 class="album-selection-title">Select an Album</h2> <div class="album-grid"> <div class="album"> <div class="album-cover"> <img src="imgs/UI/favicon/android-chrome-512x512.png" alt="MindWare Mix"> </div> <h3 class="album-title">MindWare Mix</h3> <p class="album-artist">Various Artists</p> <<if $selectedPlaylist === "MindWareMix">> <button class="album-button selected">Selected</button> <<else>> <button class="album-button" onclick="selectAlbum('MindWareMix')">Select</button> <</if>> </div> <div class="album"> <div class="album-cover"> <img src="audio/songs/Infinity Zero/infinityzero.png" alt="Infinity Zero"> </div> <h3 class="album-title">Infinity Zero</h3> <p class="album-artist">Jeremy Blake</p> <<if $selectedPlaylist === "InfinityZero">> <button class="album-button selected">Selected</button> <<else>> <button class="album-button" onclick="selectAlbum('InfinityZero')">Select</button> <</if>> </div> /* <div class="album"> <div class="album-cover"> <img src="imgs/UI/favicon/android-chrome-512x512.png" alt="Neon Vibes"> </div> <h3 class="album-title">Placeholder</h3> <p class="album-artist">Unknown Artist</p> <<if $selectedPlaylist === "NeonVibes">> <button class="album-button selected">Selected</button> <<else>> <button class="album-button" onclick="selectAlbum('NeonVibes')">Select</button> <</if>> </div> */ </div> </div> <br> <p style="text-align: center">[[Go Back -> HomeBacklog]] | [[Save|ListenToMusic]]</p> <<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 see all music albums you have access to and switch between them.</p> </div> </div> </div> <<else>> <</if>> <br> <<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 albums to your collection!</p> <p>STILL WORK IN PROGRESS</p> </div></div></div> <<else>> <</if>> <style> .album-selection-container { max-width: 1200px; margin: 0 auto; padding: 20px; } .album-selection-title { color: var(--mindware-ui-accent-color, #55bbbc); font-size: 1.5rem; text-align: center; margin-bottom: 2rem; text-transform: uppercase; } .album-grid { display: flex; flex-wrap: wrap; justify-content: center; gap: 2rem; } .album { width: 160px; text-align: center; } .album-cover { position: relative; width: 100%; padding-bottom: 100%; /* 1:1 Aspect Ratio */ margin-bottom: 1rem; overflow: hidden; border-radius: 10px; box-shadow: 0 10px 20px rgba(0, 0, 0, 0.3); } .album-cover img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; transition: transform 0.3s ease; } .album-cover::before { content: ''; position: absolute; top: 0; left: 0; right: 0; bottom: 0; background: linear-gradient( 135deg, rgba(255, 255, 255, 0.3) 0%, rgba(255, 255, 255, 0.1) 50%, rgba(255, 255, 255, 0) 51%, rgba(255, 255, 255, 0) 100% ); z-index: 1; } .album-cover:hover img { transform: scale(1.05); } .album-title { color: var(--mindware-ui-text-color, #ffffff); font-size: 1.2rem; margin-bottom: 0.5rem; } .album-artist { color: var(--mindware-ui-light-text, #cccccc); font-size: 0.9rem; margin-bottom: 0.5rem; font-style: italic; } .album-button { background-color: var(--mindware-ui-panel-bg, #1a1a1a); color: var(--mindware-ui-accent-color, #55bbbc); border: 2px solid var(--mindware-ui-accent-color, #55bbbc); padding: 0.5rem 1rem; font-size: 1rem; cursor: pointer; transition: all 0.3s ease; border-radius: 5px; } .album-button:hover { background-color: var(--mindware-ui-accent-color, #55bbbc); color: var(--mindware-ui-panel-bg, #1a1a1a); } .album-button.selected { background-color: var(--mindware-ui-accent-color, #55bbbc); color: var(--mindware-ui-panel-bg, #1a1a1a); cursor: default; } /* Responsive Styles */ @media (max-width: 1024px) { .album { width: 150px; } .album-title { font-size: 1.1rem; } .album-button { font-size: 0.9rem; } } @media (max-width: 932px) { .album { width: 120px; } .album-grid { gap: 1.5rem; } .album-title { font-size: 1rem; } } @media (max-width: 844px) { .album { width: 100px; } .album-grid { gap: 1rem; } .album-button { padding: 0.4rem 0.8rem; } } @media (max-width: 667px) { .album { width: 70px; } .album-title { font-size: 0.9rem; } .album-button { font-size: 0.8rem; padding: 0.3rem 0.6rem; } .album-selection-title { font-size: 1.3rem; margin-bottom: 1.5rem; } } @media (max-width: 480px) { .album { width: 130px; } .album-grid { gap: 0.8rem; } .album-title { font-size: 0.8rem; } .album-button { font-size: 0.7rem; padding: 0.2rem 0.5rem; } } </style> <<script>> window.selectAlbum = function(albumName) { SugarCube.State.variables.selectedPlaylist = albumName; window.gameMusic.resetPlaylist(); window.gameMusic.init(); Engine.play(passage()); }; <</script>>
<div class="full-size-music-player"> <h2 class="music-player-title">Music Library</h2> <ul id="full-playlist" class="playlist"> <!-- Playlist items will be dynamically added here --> </ul> <div class="player-controls"> <button id="full-prev-button" class="control-button"> <svg viewBox="0 0 24 24" fill="currentColor"> <path d="M17 18l-8.5-6L17 6v12zM5.5 6v12h2V6h-2z"/> </svg> </button> <button id="full-play-pause-button" class="control-button"> <svg id="full-play-icon" viewBox="0 0 24 24" fill="currentColor"> <path d="M8 5v14l11-7z"/> </svg> <svg id="full-pause-icon" viewBox="0 0 24 24" fill="currentColor" style="display: none;"> <path d="M6 19h4V5H6v14zm8-14v14h4V5h-4z"/> </svg> </button> <button id="full-next-button" class="control-button"> <svg viewBox="0 0 24 24" fill="currentColor"> <path d="M7 6l8.5 6L7 18V6zm10.5 0v12h2V6h-2z"/> </svg> </button> <button id="full-shuffle-button" class="control-button"> <svg viewBox="0 0 24 24" fill="currentColor"> <path d="M10.59 9.17L5.41 4 4 5.41l5.17 5.17 1.42-1.41zM14.5 4l2.04 2.04L4 18.59 5.41 20 17.96 7.46 20 9.5V4h-5.5zm0.33 9.41l-1.41 1.41 3.13 3.13L14.5 20H20v-5.5l-2.04 2.04-3.13-3.13z"/> </svg> </button> </div> <div class="volume-control"> <svg class="volume-icon" viewBox="0 0 24 24" width="24" height="24" fill="currentColor"> <path d="M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"/> </svg> <input type="range" id="full-volume-slider" min="0" max="100" value="10" class="volume-slider"> </div> <div class="now-playing"> Now Playing: <span id="full-current-song"></span> </div> </div> [[Go Back -> HomeBacklog]] | [[Save|ListenToMusic]] <style> .full-size-music-player { background-color: var(--mindware-ui-panel-bg, #1a1a1a); color: var(--mindware-ui-text-color, #ffffff); padding: 20px; border-radius: 10px; margin: 0 auto; font-family: var(--mindware-ui-font-primary, sans-serif); } .music-player-title { color: var(--mindware-ui-accent-color, #55bbbc); font-size: 1.2rem; margin-bottom: 1rem; text-align: center; position: relative; text-transform: uppercase; } .music-player-title::after { content: ''; position: absolute; left: 0; right: 0; bottom: -0.5rem; height: 2px; background: linear-gradient(to right, transparent, var(--mindware-ui-accent-color, #55bbbc), transparent); } .playlist { list-style-type: none; padding: 0; margin: 0 0 1rem 0; max-height: 300px; overflow-y: auto; } .playlist li { display: flex; justify-content: space-between; align-items: center; padding: 8px 12px; cursor: pointer; font-size: 0.9em; transition: background-color 0.2s ease, border-left 0.2s ease; border-left: 4px solid transparent; } .playlist li:hover, .playlist li.active { background-color: rgba(85, 187, 188, 0.1); border-left: 4px solid var(--mindware-ui-accent-color, #55bbbc); } .playlist .song-controls { display: flex; gap: 5px; } .playlist .song-controls button { background-color: transparent; color: var(--mindware-ui-accent-color, #55bbbc); border: none; cursor: pointer; padding: 5px; transition: transform 0.2s ease, filter 0.2s ease; } .playlist .song-controls button:hover { transform: scale(1.1); filter: brightness(1.2); } .player-controls { display: flex; justify-content: center; align-items: center; gap: 20px; margin-bottom: 1rem; } .control-button { background-color: transparent; color: var(--mindware-ui-accent-color, #55bbbc); border: none; cursor: pointer; padding: 0; transition: transform 0.2s ease, filter 0.2s ease; display: flex; align-items: center; justify-content: center; } .control-button svg { width: 32px; height: 32px; fill: currentColor; } .control-button:hover { transform: scale(1.1); filter: brightness(1.2); } .volume-control { display: flex; align-items: center; justify-content: center; margin-top: 1rem; } .volume-slider { -webkit-appearance: none; width: 100%; max-width: 200px; height: 5px; border-radius: 5px; background: #d3d3d3; outline: none; opacity: 0.7; transition: opacity .2s; } .volume-slider::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 16px; height: 24px; border-radius: 3px; background: var(--mindware-ui-accent-color, #55bbbc); cursor: pointer; margin-top: -8px; } .volume-slider::-moz-range-thumb { width: 16px; height: 24px; border-radius: 3px; background: var(--mindware-ui-accent-color, #55bbbc); cursor: pointer; } .volume-icon { margin-right: 10px; color: var(--mindware-ui-accent-color, #55bbbc); } .now-playing { text-align: center; font-size: 1rem; color: var(--mindware-ui-light-text, #cccccc); margin-top: 1rem; } /* Scrollbar Styling for Playlist */ .playlist::-webkit-scrollbar { width: 8px; } .playlist::-webkit-scrollbar-track { background: var(--mindware-ui-panel-bg, #1a1a1a); } .playlist::-webkit-scrollbar-thumb { background-color: var(--mindware-ui-accent-color, #55bbbc); border-radius: 4px; } .playlist::-webkit-scrollbar-thumb:hover { background-color: var(--mindware-ui-light-text, #cccccc); } </style> <script> (function () { // Extend the existing gameMusic object Object.assign(window.gameMusic, { updateFullSizeUI() { const playIcon = document.getElementById('full-play-icon'); const pauseIcon = document.getElementById('full-pause-icon'); const currentSong = document.getElementById('full-current-song'); const volumeSlider = document.getElementById('full-volume-slider'); const playlist = document.getElementById('full-playlist'); if (this.isPlaying()) { playIcon.style.display = 'none'; pauseIcon.style.display = 'inline'; } else { playIcon.style.display = 'inline'; pauseIcon.style.display = 'none'; } const trackInfo = this.getCurrentTrackInfo(); currentSong.textContent = `${trackInfo.title} - ${trackInfo.artist}`; if (this.sound) { volumeSlider.value = this.sound.volume() * 100; } // Update playlist playlist.innerHTML = ''; this.playlist.forEach((track, index) => { const li = document.createElement('li'); li.innerHTML = ` <span>${track.title} - ${track.artist}</span> <div class="song-controls"> <button class="move-up" data-index="${index}">↑</button> <button class="move-down" data-index="${index}">↓</button> <button class="play-song" data-index="${index}">▶</button> </div> `; if (index === this.currentTrack) { li.classList.add('active'); } playlist.appendChild(li); }); }, moveTrack(fromIndex, toIndex) { const track = this.playlist.splice(fromIndex, 1)[0]; this.playlist.splice(toIndex, 0, track); this.updateFullSizeUI(); // If the current track was moved, update the currentTrack index if (this.currentTrack === fromIndex) { this.currentTrack = toIndex; } else if (fromIndex < this.currentTrack && toIndex >= this.currentTrack) { this.currentTrack--; } else if (fromIndex > this.currentTrack && toIndex <= this.currentTrack) { this.currentTrack++; } }, shufflePlaylist() { for (let i = this.playlist.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [this.playlist[i], this.playlist[j]] = [this.playlist[j], this.playlist[i]]; } this.updateFullSizeUI(); } }); // Event listeners for the full-size player document.getElementById('full-play-pause-button').addEventListener('click', () => { window.gameMusic.togglePlayPause(); window.gameMusic.updateFullSizeUI(); }); document.getElementById('full-prev-button').addEventListener('click', () => { window.gameMusic.playPrevious(); window.gameMusic.updateFullSizeUI(); }); document.getElementById('full-next-button').addEventListener('click', () => { window.gameMusic.playNext(); window.gameMusic.updateFullSizeUI(); }); document.getElementById('full-shuffle-button').addEventListener('click', () => { window.gameMusic.shufflePlaylist(); window.gameMusic.updateFullSizeUI(); }); document.getElementById('full-volume-slider').addEventListener('input', (event) => { const volume = event.target.value / 100; window.gameMusic.setVolume(volume); }); document.getElementById('full-playlist').addEventListener('click', (event) => { const target = event.target; if (target.classList.contains('move-up')) { const index = parseInt(target.dataset.index); if (index > 0) { window.gameMusic.moveTrack(index, index - 1); } } else if (target.classList.contains('move-down')) { const index = parseInt(target.dataset.index); if (index < window.gameMusic.playlist.length - 1) { window.gameMusic.moveTrack(index, index + 1); } } else if (target.classList.contains('play-song')) { const index = parseInt(target.dataset.index); window.gameMusic.loadTrack(index); window.gameMusic.play(); window.gameMusic.updateFullSizeUI(); } }); // Update both UIs when the passage is displayed $(document).on(':passagedisplay', function (ev) { if (ev.passage.title === "FullSizeMusicPlayer") { window.gameMusic.updateFullSizeUI(); } window.updateMusicUI(); }); // Extend the existing updateMusicUI function to update both players const originalUpdateMusicUI = window.updateMusicUI; window.updateMusicUI = function() { originalUpdateMusicUI(); if (document.getElementById('full-play-pause-button')) { window.gameMusic.updateFullSizeUI(); } }; })(); </script>
<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>>
<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 + 10000>> <</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>
<style> .settings-menu h2 { color: #55BBBC; font-size: 1.5em; margin-top: 0; margin-bottom: 30px; padding-top: 0; padding-bottom: 0px; text-align: left; position: relative; /* text-transform: uppercase; -- Commented out, but you can uncomment if desired */ } .settings-menu h2::after { content: ''; position: absolute; left: 0; right: 0; bottom: -0.5rem; height: 1px; background: linear-gradient(to right, #55BBBC, #55BBBC, transparent); } </style> <div class="settings-menu"> Game version: <<link $gameVersion>> <<run Dialog.setup("Changelog")>> <<run Dialog.wiki(Story.get("Changelog").processText())>> <<run Dialog.open()>> <</link>> <br><br> <h2>Character Settings</h2> <div class="gameplay-settings-group"> <div> <h3><b>Character:</b></h3> <p>First Name:<br> <<textbox "$playerName" $playerName>></p> <p>Last Name:<br> <<textbox "$playerLastName" $playerLastName>></p> <p>Nickname:<br> <<textbox "$playerNickname" $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> */ <div class="avatar-toggle"> <<checkbox "$hideAvatarImage" false true autocheck>> Hide Avatar Image from the Left Sidebar </div> <br><br> <h2>Sound Settings</h2> <<checkbox "$disableButtonSounds" false true autocheck>> Disable Button Sound Effects <br><br> <h2>Gameplay Settings</h2> <div class="gameplay-settings-group"> <label><strong>Show Minigame Skip Buttons:</strong></label> <p>Enable this option to show buttons that allow you to skip minigames. Refresh the page (F5) if the button doesn't show up after you click Confirm.</p> <<checkbox "$minigameSkipButtons" false true autocheck>> Show Skip Buttons? </div> /* <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()>> /* <<set $playerName = jQuery("#_tempPlayerName").val()>> <<set $playerLastName = jQuery("#_tempPlayerLastName").val()>> <<set $playerNickname = jQuery("#_tempPlayerNickname").val()>> */ <<goto _currentPassage>> <</button>>
<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>
<<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 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><strong>Important:</strong> MindWare isn't optimized for mobile devices.</p> \ <p><<link $gameVersion>><<run Dialog.setup("Changelog")>> <<run Dialog.wiki(Story.get("Changelog").processText())>> <<run Dialog.open()>>\<</link>></p> <p>This game is currently in the thrilling stages of early development. Enjoy exploring and stay tuned for more updates!</p> \ <<include "SocialIcons">> <p><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>>@@
<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); } } .mindware-ui-implant-charge { display: flex; align-items: center; margin-bottom: 20px; background-color: rgba(85, 187, 188, 0.1); border-radius: 10px; padding: 10px; height: 44px; /* Set a fixed height */ } .mindware-ui-implant-icon { margin-right: 10px; display: flex; align-items: center; height: 100%; } .mindware-ui-implant-icon svg { vertical-align: middle; } .mindware-ui-implant-progress { flex-grow: 1; height: 20px; background-color: rgba(85, 187, 188, 0.2); border-radius: 10px; overflow: hidden; position: relative; display: flex; align-items: center; } .mindware-ui-implant-bar { height: 100%; background-color: #55BBBC; transition: width 0.5s ease-in-out; } .implant-charge-percentage { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); color: #fff; font-weight: bold; } .implant-charge-empty, .implant-charge-low { margin-left: 10px; font-weight: bold; display: flex; align-items: center; height: 100%; } .implant-charge-empty { color: #ff4d4d; } .implant-charge-low { color: #ffa500; } </style> <div class="synapse-report"> <div class="mindware-ui-implant-charge"> <div class="mindware-ui-implant-icon"> <<if $implantCharge > 0>> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="currentColor" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M9 4V3C9 2.44772 9.44772 2 10 2H14C14.5523 2 15 2.44772 15 3V4H18C18.5523 4 19 4.44772 19 5V21C19 21.5523 18.5523 22 18 22H6C5.44772 22 5 21.5523 5 21V5C5 4.44772 5.44772 4 6 4H9Z"></path> </svg> <<else>> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> <path d="M9 4V3C9 2.44772 9.44772 2 10 2H14C14.5523 2 15 2.44772 15 3V4H18C18.5523 4 19 4.44772 19 5V21C19 21.5523 18.5523 22 18 22H6C5.44772 22 5 21.5523 5 21V5C5 4.44772 5.44772 4 6 4H9Z"></path> </svg> <</if>> </div> <div class="mindware-ui-implant-progress"> <<print `<div class="mindware-ui-implant-bar" style="width: ${$implantCharge}%"></div>`>> <span class="implant-charge-percentage"><<print $implantCharge>>%</span> </div> <<if $implantCharge === 0>> <span class="implant-charge-empty">EMPTY</span> <<elseif $implantCharge <= 20>> <span class="implant-charge-low">LOW</span> <</if>> </div> <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><<print MindWare.getGenderStatus()>></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><<print MindWare.getGenderStatus()>></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><<print MindWare.getGenderStatus()>></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 © 2065 </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 "narration" container>> <div class="narrator">_contents</div><br> <</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">> /* 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 */ <<if ndef $lastRentDay>> <<set $lastRentDay to 0>> <</if>> <<set _daysInWeek to 7>> <<set _currentWeek to Math.floor($totalDays / _daysInWeek)>> <<if $dayOfWeek is "Monday" and _currentWeek > $lastRentDay>> <<if $playerMoney >= $rentPrice>> <<set $playerMoney -= $rentPrice>> <<set $rentPaymentCounter += 1>> <<notify>>Rent of $<<print $rentPrice.toLocaleString("en-US", { minimumFractionDigits: 0, maximumFractionDigits: 0 })>> has been deducted from your account.<</notify>> <<else>> <<set $missedPaymentsCount += 1>> <<set $totalMissedRent += $rentPrice>> <<notify>>You do not have enough money to pay the rent.<</notify>> <</if>> <<set $lastRentDay to _currentWeek>> <</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>> /***** Hive Properties *****/ <<include "Hive-Properties-Scripts">>
<<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">> <<include "Updates">> <script> (function() { 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() { if (SugarCube.setup.startingScriptsRanFromMenu) { SugarCube.Engine.play("CharacterCreator"); } else { SugarCube.Engine.play(SugarCube.State.variables.previousPassage); } }, 500); } loadingBar.style.width = progress + '%'; }, 100); })(); </script>
<<if ndef $scrollToTopEnabled>> <<set $scrollToTopEnabled to true>> <</if>> <<if ndef $scrollToBottomEnabled>> <<set $scrollToBottomEnabled to true>> <</if>> <<set $playerNewAvatar = [ "imgs/characters/player/setA/1.webp", "imgs/characters/player/setB/1.webp", "imgs/characters/player/setX/1.webp" ]>> <<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>> <<if ndef $selectedPlaylist>> <<set $selectedPlaylist to "MindWareMix">> <</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>>
<<script>> MindWare.updateSleepReasons('add', 'You are not tired enough to sleep'); <</script>> <<script>> MindWare.updateSleepReasons('add', 'You still have things to do'); <</script>> [[Home|HomeBacklog]]
<<textbox "$debugPassageName" "">> <<button "Go to Passage">> <<if Story.has($debugPassageName)>> <<goto $debugPassageName>> <<else>> <<print "Passage '" + $debugPassageName + "' does not exist.">> <</if>> <</button>> [[Go to Start|Start]] [[Go to Apartment|HomeBacklog]] [[Go to Computer|Computer]] [[Go to GamesHub|GamesHub]] [[Go to Job Board|JobBoard]] [[Go to Email Client|EmailClient]] [[Go to Bruteforce Minigame|Minigame-Bruteforce]] [[SpyingLandlordHack-server-camera-access]] [[WorkInProgress]] [[EndOfCurrentStory]] [[EroSphere-SIMSPods-Selection|EroSphere-SIMSPods-Selection]] [[EroSphere-SIMSPods|EroSphere-SIMSPods]] <<link "Notification">> <<notify>>Test notification<</notify>> <</link>> <<link "Complete Landlord Spying">> <<set $spyingLandlordFinished to true>> <<set $spyingLandlordExposed to false>> <</link>> <div class="btn-wrapper"> <<button "Accept this job">> <<set $tasks.push("Find spy camera feeds")>> <<set $introOver = true>> <<set $jobBoardFirstVisit = false>> <<set $illegalSpyingJobAccepted = true>> <<run setup.addNotification("You have received a new email from ConcernedTenant01.")>> <<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> <<link "Add Email">> <<run MindWare.addEmail("NewSender", "New Subject", "This is a new email message", "NewEmailPassage")>> <</link>> <<link "Job board already visited">><<set $jobBoardFirstVisit = false>><</link>> <!-- StoryShare TEST -->
Infected Identity <span style="font-size: 0.6em;">Version <<live $latestVersion>></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.7 (Supporter-Only Beta 1)">> <<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 2250>> <<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 "">>