<<nobr>>
<div class="content-wrapper">
<div id="Dis">⚠️ IMPORTANT ⚠️
This game is intended for audiences 18 years and older. It contains explicit content, including depictions of sexual themes, violence, and other sensitive or potentially disturbing material. Viewer discretion is strongly advised. If you are under 18 or find such content inappropriate, we urge you to exit now. By clicking 'Accept,' you confirm that you are of legal age and choose to proceed at your own discretion.</div>
<div class="links">
[[Accept|StartGame]]
</div>
</div>
<style>
/* Ocultar la barra de UI */
#ui-bar, #character-menu {
display: none;
}
.stat-row {
display: none;
}
a {
width: 7em;
max-width: 7em;
}
#name {
display: none;
}
.passage {
max-height: 80vh;
padding: 1em;
position: relative;
top: -2em;
left: -1em;
}
#story {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
padding: 0;
box-sizing: border-box;
overflow: hidden;
}
.content-wrapper {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 100%;
max-width: 1200px;
margin: -15px auto;
position: relative;
top: 2em;
left: 1em;
}
/* Elemento principal del texto */
#Dis {
background: #19191999;
width: 90%;
max-width: 45em;
text-align: center;
padding: 1.5em;
border: 1px solid white;
border-radius: 16px;
color: #ffffff;
font-size: 20px;
font-family: 'Arial', sans-serif;
box-sizing: border-box;
word-wrap: break-word;
overflow-wrap: break-word;
margin: 0 auto;
opacity: 0;
animation: fadeIn 3s forwards;
backdrop-filter: blur(8px);
box-shadow: 0 0 15px #0096ff80;
transition: all 0.3s ease-in-out;
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(-20px); /* Deslizamiento inicial */
}
to {
opacity: 1;
transform: translateY(0);
}
}
.links {
top: 10em
}
.links a {
display: inline-block;
background-color: #19191999;
border: 1px solid rgba(255, 255, 255, 0.6);
border-radius: 16px;
color: #ffffff;
font-size: 20px;
font-family: 'Arial', sans-serif;
box-sizing: border-box;
overflow-wrap: break-word;
opacity: 0;
animation: fadeIn 3s forwards;
backdrop-filter: blur(8px);
box-shadow: 0 0 15px rgba(0, 150, 255, 0.5);
padding: 0.05em 1.5em;
text-decoration: none;
transition: background-color 0.3s ease;
margin: 0.5em;
text-align: center;
}
.links a:hover {
background-color: #0013189e;
}
/* Animación de aparición */
@keyframes fadeIn {
0% {
opacity: 0;
transform: scale(0.9);
}
100% {
opacity: 1;
transform: scale(1);
}
}
/* Media Queries para tablets */
@media screen and (max-width: 1024px) {
#Ntext {
font-size: 18px;
width: 85%;
}
}
/* Media Queries para tablets pequeñas y móviles grandes */
@media screen and (max-width: 768px) {
#story {
padding: 0;
}
#Ntext {
font-size: 16px;
padding: 0.8em;
width: 80%;
}
.links a {
padding: 0.6em 1.2em;
}
}
/* Media Queries para móviles */
@media screen and (max-width: 480px) {
#story {
padding: 0;
}
#Ntext {
font-size: 14px;
padding: 0.6em;
width: 90%;
}
.links a {
padding: 0.5em 1em;
font-size: 14px;
}
}
/* Media Queries para modo paisaje en móviles */
@media screen and (max-height: 480px) and (orientation: landscape) {
#Ntext {
font-size: 14px;
padding: 0.5em;
margin-bottom: 1rem;
width: 95%;
max-width: 600px;
}
.links {
max-width: 600px;
}
.links a {
padding: 0.4em 0.8em;
font-size: 13px;
margin: 0.3em;
}
}
</style>
<</nobr>><<if $startgame is true>>
<<fullscreenButton>>
<<include "diary">>
<<else>>
<br>
<br>
<</if>>
<<include "StoryTitle">>
<<script>>
$(document).on(':passagerender', function() {
if (State.variables.bag === 1) {
window.showInventoryButton();
} else if (State.variables.bag === 0) {
window.hideInventoryButton();
}
});
<</script>>
<style>
#character-image-container {
width: 345px;
height: 515px;
border-radius: 10px;
overflow: hidden;
position: relative;
background: none;
top: 4em;
}
#character-menu {
top: 0;
left: 0;
height: 100%;
background: #000a0ec7;
border-right: 1px solid #2e4f69;
}
#character-inventory-toggle {
border: 1px solid #f5deb36e;
}
#character-weapon-quickslot {
position: relative;
width: 30px;
height: 30px;
top: 0px;
left: -278px;
border: 1px solid #f5deb36e;
}
#character-bullet-quickslot {
width: 32px;
height: 32px;
top: 52px;
left: -330px;
border: 1px solid #f5deb36e;
}
#character-health-quickslot {
left: 2px;
border: 1px solid #f5deb36e;
}
#character-sanity-quickslot {
left: 2px;
border: 1px solid #f5deb36e;
}
#character-battery-quickslot {
width: 40px;
height: 40px;
top: 25px;
left: 35px;
border: 1px solid #f5deb36e;
}
#character-health-bar {
border: 1px solid #003615;
}
#character-sanity-bar {
border: 1px solid #002a36;
}
.stat-row {
top: 0em;
left: 5em;
z-index: 20;
}
#lantern-ui {
position: relative;
top: 9em;
left: 18px;
}
.quickbar {
display: grid;
grid-template-columns: repeat(5, 1fr);
gap: 15px;
padding-top: 44px;
border-top: 1px solid rgba(255, 255, 255, 0.1);
margin-top: 5px;
}
</style><<include "Characters">>
<<include "diary">>
<<include "Countdown">>
<<include "monster_sounds">>
<<include "sounds">>
<<cacheaudio "caseyDescent" "media/caseydescent.mp3">>
<<cacheaudio "pianoSonata" "media/pianosonata.mp3">>
<<cacheaudio "newstart" "media/newstart.mp3">>
<<cacheaudio "voidEchoes" "media/echoes-of-the-void.mp3">>
<<set $imageList to ["img/backgrounds/intromenu.png", "img/backgrounds/parking.png", "img/backgrounds/lake.png", "img/backgrounds/intromenu2.png", "img/backgrounds/intromenu3.png", "img/backgrounds/intromenu4.png", "img/backgrounds/intromenu5.png"]>>
<<set $imageIndex to 0>>
<<set $InvestigatorRoad = 1>>
<<set $McMoney = 100>>
<<set $Coin = 0>>
<<set $lockpick = 0>><<nobr>>
<<include "Characters">>
<<if $intro is true>>
<<audio "pianoSonata" stop>>
<</if>>
<</nobr>><<set $Mc = {
fullName: $playerName + " Casey",
baseName: $playerName,
img: "img/characters/casey/casey-avatar.png"
}>>
<<set $Casey = {
Name: "Casey",
img: "img/characters/casey/casey-avatar.png",
};>>
<<set $Gabrielayoung = {
Name: "Gabriela Rodriguez",
img: "img/characters/rodriguez/avatar.png",
class: "Npc",
};>>
<<set $Gabriela = {
Name: "Gabriela Rodriguez",
img: "img/characters/rodriguez/avatar2.png",
class: "Npc",
};>>
<<set $Luke = {
Name: "Luke Rainbow",
img: "img/characters/luke/avatar.png",
class: "Npc",
};>>
<<set $Violet = {
Name: "Violet Rainbow",
img: "img/characters/violet/avatar.png",
class: "Npc",
};>>
<<set $Captain = {
Name: "Captain Henry Havook",
img: "img/characters/henry/avatar.png",
class: "Npc",
};>>
<<set $Mayor = {
Name: "Mayor Quentin",
img: "img/characters/mayor/mayorquentin.png",
class: "Npc",
};>>
<<set $Janitor = {
Name: "???",
img: "img/characters/dicki-avatar.jpg",
class: "Npc",
};>>
<<set $Franklin = {
Name: "Franklin Hayes",
img: "img/characters/dicki-avatar.jpg",
class: "Npc",
};>>
<<set $Rust = {
Name: "Rust Cohle",
img: "img/characters/rust/dicki-avatar.jpg",
class: "Npc",
};>>
<<set $Dina = {
Name: "Dina Carter",
img: "img/characters/dina/dicki-avatar.jpg",
class: "Npc",
};>>
<<set $Doc = {
Name: "???",
img: "img/characters/dochome/dochome.jpg",
class: "Npc",
};>>
<<set $DocHome = {
Name: "Doc. Arklich Home",
img: "img/characters/dochome/dochome.jpg",
class: "Npc",
};>>
<<set $Fei = {
Name: "Fei",
img: "img/characters/fei-avatar.jpg",
class: "Npc",
};>>
<<set $Sam = {
Name: "Samantha",
img: "img/characters/sam-avatar.jpg",
class: "Npc",
};>>
<<set $LbPatient = {
Name: "Lobotomized Patient",
img: "img/monsters/patients/lbpatient.jpg",
class: "Npc",
};>>
<<set $MadPatient = {
Name: "Lobotomized Patient",
img: "img/monsters/patients/madpatient.jpg",
class: "Npc",
};>>
<<set $Violator = {
Name: "Subject Alpha-IX",
img: "img/violator/violator-avatar.jpg",
class: "Npc",
};>><div id="ConversationBox">
<div id="Ntext">You feel a bit dizzy, with a slight headache that won’t go away. It's an uncomfortable sensation, like the fatigue from a long day finally catching up with you. You’ve barely gotten half an hour of rest in the car, and it doesn't seem to have been enough after two nights spent chasing Gulliver, that damn fast and elusive cat that keeps slipping away.</div>
<<say $Mc>>Damn Gulliver... my head’s spinning... I need a break. I’d better take one of my pills.<</say>>
<div class="links">
<th>[[Pick the pills|intropills]]</th>
</div>
</div>
<<set $wakeup = 1>>
<div id="ConversationBox">
<div id="Ntext">The form is in front of you. At the top, the logo of the New Veris Police Department is clearly visible. It's a Resign Form.</div>
<div id="documentointro">
<div id="textobox"><<textbox "$playerName" "Alina">> Casey
</div>
</div>
<div class="links">
<th>[[Sign|introexit]]</th>
</div>
</div>
<<SanityMessage "New archive">>
<<set $Mc = {
Name: $playerName,
img: "img/characters/casey/casey-avatar.png"
}>>
<<set $avt = 1>>
<<script>>
setup.phoneSystem.addFile("Resign form", "img/documents/documentointro1.png");
<</script>>
<style>
input, select, textarea {
color: #ffffff;
background-color: #091928;
border: 1px solid #444;
padding: .4em;
}
html[data-outlines] input:focus, html[data-outlines] select:focus, html[data-outlines] textarea:focus, input:hover, select:hover, textarea:hover {
background-color: #3e3423;
border-color: #eee;
}
.links {
left: 1em;
top: -9.8em;
}
.links a {
padding: 10px 15px;
color: white;
text-decoration: none;
border-radius: 5px;
display: inline-block;
font-size: 11px;
}
#textobox {
position: absolute;
top: 58.8em;
left: 18em;
color: #000000;
font-size: 15px;
font-weight: bold;
}
#documentointro {
background-image: url(img/documents/documentointro1.png);
background-size: cover;
position: relative;
top: 18%;
left: 50%;
transform: translate(-50%, -25%);
width: 48em;
height: 62em;
}
#Ntext {
top: -5em;
}
</style>
<<audio "papper" play volume 0.4>><div id="ConversationBoxAnimation">
<div id="Ntext">After more than two hours of driving, the journey has become long and monotonous. The sun begins to set as you leave the city behind, venturing into a more desolate landscape. The air in the car feels heavy, and the lonely roads seem to stretch endlessly. Finally, you reach the old parking lot of the psychiatric hospital. The worn asphalt creaks beneath the tires as you move forward, and in the distance, you see several abandoned cars scattered across the area.
You park in one of the empty spaces near the entrance, right next to one of the abandoned cars.</div>
<div class="links">
<th>[[Get out of the car|parkingintro]]</th>
</div>
</div>
<<set $introcase = 3>>
<script>
$(document).ready(() => {
setTimeout(() => {
const box = document.getElementById('ConversationBox');
if (box) {
box.classList.add('visible'); // Se agrega la clase para activar la transición
}
}, 2000); // Retraso de 2 segundos
});
</script>
<<audio "caseyDescent" stop>>
<<set $bag = 1>><div id="ConversationBox">
<div id="Ntext">You step out of the car, the sound of the door closing echoing in the empty parking lot. You remain still for a few moments, observing the psychiatric hospital, whose presence feels even more intimidating now that you’re outside the vehicle. The daylight slowly fades, giving way to the impending night. The parking lot is deserted, with several abandoned cars scattered around, covered in dust and rust. As the darkness advances, an uneasy feeling begins to weigh on you. Everything seems immersed in an eerie silence, and the stillness of the scene contrasts with the bad feeling creeping over you.</div>
<<say $Mc>>Great, another night of work... And this makes three in a row lost because of that damn cat. Once again, I have to spend the whole day sleeping.<</say>>
<div id="Ntext">The wind stirs some dry leaves on the ground, making a sound that causes you to glance again, hoping to see nothing more than shadows. The atmosphere feels oppressive, as though the very place is watching you.</div>
<div class="links">
<th>[[Let's go|Parking]]</th>
</div>
</div>
<<script>>
setup.phoneSystem.addObjective(
"New case",
"Enter in the Charles Francis and find some clues.",
'main',
'introQuest' // ID
);
<</script>>
<<SanityMessage "Main objective updated: New case">>
<<audio "lobbytheme" play loop volume 0.4>><div id="ConversationBox">
<div id="Ntext">The painted lines have almost vanished beneath the dirt and cracks in the asphalt. A couple of broken streetlights stand like silent specters, their shattered glass reflecting the faint glow of the moon. </div>
<div class="linksTwo">
<th>[[Check your car|YourCarParking]]</th>
<<if $carquest gte 1 && $FBIcar isnot true>>
<th>[[Check abandoned car|Carparking]]</th>
<</if>>
</div>
<div class="links">
<th>[[Other side of the parking|Parking2]]</th>
<<if $maindoorclosed is true>>
<th>[[Go to entrance|noenter]]</th>
<<else>>
<th>[[Go to entrance|PsiquiatricEntrance]]</th>
<</if>>
<th>[[Road to lake|Camino-derecha]]</th>
</div>
</div>
<div id="LocationName">Parking (near the entrance)</div><div id="ConversationBox">
<div id="Ntext">The lake stretches before you, its surface unsettlingly calm, like a dark mirror reflecting the darkness of the night. The fog covers the water, making it difficult to distinguish between the surface and the mist. The smell of stagnant water weighs heavily in the air, and the faint sound of water lapping against the shore is almost drowned out by the overwhelming silence.</div>
<div class="links">
<th>[[Road to parking|Camino-LagoParking]]</th>
<th>[[Lakeshore]]</th>
<th>[[Path to Forest|Camino-lagobosque]]</th>
</div>
</div>
<div id="LocationName">Lake</div>
<div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<div id="Ntext">The ground beneath your feet becomes softer, damp with the moisture rising from the lake. The fog thickens, curling around your ankles as you approach the shore. The faint whisper of the trees seems distant, swallowed by the dense air. The shore is almost within reach, but something about the stillness feels unnatural. The dark, cold water waits in silence, as if holding secrets just beneath its surface.</div>
<<default>>
<div id="Ntext">The fog thickens as you approach, partially covering the lake. The water appears more restless than usual, as if it were a sea or ocean instead of a lake. The air is dense, and the shore feels unnervingly silent.</div>
<</switch>>
<<if $CabinFind isnot 1>>
<div class="linksTwo">
<th>[[Explore the lake|CabinIntro]]</th>
</div>
<</if>>
<div class="links">
<<if $CabinFind gte 1>>
<th>[[Path to cabin|Camino-Cabin]]</th>
<</if>>
<th>[[Back to the lake|Lake]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">The fog swirls around the trunks, hiding what lies ahead. Though the lake isn't visible yet, the air already carries its cold, stagnant scent. In addition to the main path leading to the lake, there is a narrow, winding trail that seems to disappear into the mist.</div>
<div class="links">
<th>[[Road to parking|Camino-derecha]]</th>
<th>[[Winding Path|widingpath]]</th>
<th>[[Lake|Lake]]</th>
</div>
</div><div id="ConversationBox">
<<if $maindoorclosed is true>>
<div id="Ntext">The large entrance door remains closed, its heavy structure worn down by time.</div>
<<else>>
<div id="Ntext">The large entrance door is open, revealing a dark interior where the air seems to seep out carrying the scent of dust and decay.</div>
<</if>>
<div class="links">
<<if $intro is 1>>
<th>[[Enter in the psiquiatric|noenter]]</th>
<<else>>
<th>[[Enter in the psiquiatric|MainLobby]]</th>
<</if>>
<th>[[Go to parking|Parking]]</th>
</div>
</div>
<<if $DocHometalk is 1 && $mayorcall gte 1 && $maindooropen isnot true>>
<<goto "noenter">>
<</if>>
<<if $DocHometalk is 1 && $mayorcall isnot 1>>
<<goto "mayorcall">>
<</if>>
<div id="LocationName">Entrance</div>
<<if $maindoorclosed is true>>
<<goto "noenter">>
<</if>>
<<if $firstenter gte 1>>
<<audio "lobbytheme" stop>>
<<audio "outsidetheme" play loop volume 0.4>>
<</if>>
<div id="ConversationBox">
<div id="Ntext">The car is clearly abandoned. The body, covered in dust, and the broken windows suggest it’s been here for a long time. No one has been near it for quite a while.</div>
<<switch visited()>>
<<case 1>>
<<say $Mc>>There's nothing that can be done with this.<</say>>
<</switch>>
<div class="links">
<th>[[Back|Parking]]</th>
</div>
</div>
<<switch visited()>>
<<case 1>>
<div id="ConversationBox">
<div id="Ntext" class="two">You step onto the narrow path, surrounded by shadows and the crunch of earth and branches beneath your feet. As you move forward, the trail becomes more defined, and the air fills with a deep silence. At the end of the path, hidden among the vegetation, you discover a small shed, concealed and secluded, as if it had been waiting to be found.</div>
<div class="links">
<th>[[Path to lake|Camino-LagoParking]]</th>
<th>[[Old shed|shed]]</th>
</div>
<img id="event-image" src="img/events/shed.png">
</div>
<<default>>
<div id="ConversationBox">
<div id="Ntext">You return to the path, the earth crunching beneath your feet. The trail remains clear, and the silence deep. At the end, the shed is still there, hidden among the vegetation, as if waiting to be found again.</div>
<div class="links">
<th>[[Path to lake|Camino-LagoParking]]</th>
<th>[[Old shed|shed]]</th>
</div>
</div>
<</switch>>
<<switch visited()>>
<<case 1>>
<div id="ConversationBox">
<div id="Ntext">You push open the shed door, which creaks as it opens, stepping into the dimness. Inside, the air is thick, heavy with the scent of old wood and dust. Around you, several stacked boxes and a lone barrel sit on the floor, covered in cobwebs and signs of neglect, as if the place hadn't been touched in years.</div>
<div class="links">
<th>[[Old Vending machine|Vendingmachine]]</th>
<<if $CovertizoBuscar isnot 1>>
<th>[[Search in the crates|shedCrates]]</th>
<<else>>
<th>[[Search in the crates|shedNocrates]]</th>
<</if>>
</div>
<div class="links">
<th>[[Exit|widingpath]]</th>
</div>
</div>
<<default>>
<div id="ConversationBox">
<div id="Ntext">You return to the shed. The air is still heavy, and cobwebs cover the untouched boxes and barrel in their abandonment.</div>
<div class="links">
<th>[[Old Vending machine|Vendingmachine]]</th>
<<if $CovertizoBuscar isnot 1>>
<th>[[Search in the crates|shedCrates]]</th>
<<else>>
<th>[[Search in the crates|shedNocrates]]</th>
<</if>>
</div>
<div class="links">
<th>[[Exit|widingpath]]</th>
</div>
</div>
<</switch>>
<<set $Randomsearch = random(2)>>
<div id="ConversationBox">
<<if $Randomsearch is 0>>
<div id="Ntext">You find <span style="color: #22b22e;">3 cheap batteries</span>. </div>
<<script>>
window.addCheapBattery(3);
<</script>>
<<elseif $Randomsearch is 1>>
<div id="Ntext">You find <span style="color: #22b22e;">12 rounds 9mm</span> and <span style="color: #22b22e;">1 cheap battery</span>. </div>
<<script>>
window.addCheapBattery(1);
addAmmo('9mm', 12)
<</script>>
<<elseif $Randomsearch is 2>>
<div id="Ntext">You find <span style="color: #22b22e;">10 incendiary rounds 9mm</span> and <span style="color: #22b22e;">1 cheap battery</span>.</div>
<<script>>
window.addCheapBattery(1);
addAmmo('incendiary', 10)
<</script>>
<</if>>
<div class="links">
<th>[[Back|shed]]</th>
</div>
<img id="event-image" src="img/events/shedcrates.png">
</div>
<<set $CovertizoBuscar = 1>><div id="ConversationBox">
<<say $Mc>>Private Detective $Mc.fullName, what can I do for you?<</say>>
<<say $Mayor>>Casey? $Mc.fullName? It’s me, the mayor, Quentin. You remember, right?<</say>>
<div id="Pensamiento">The damn mayor, what the hell does he want? I should hang up.</div>
<<say $Mc>>It’s you, Quentin? How long has it been...? Tell me, why shouldn’t I hang up right now?<</say>>
<<say $Mayor>>Please, Casey, listen to me, this is important. I’m asking for your help, not just me, the whole city is counting on you...<</say>>
<<say $Mc>>Are you kidding me? Hmf... Okey I hear you...<</say>>
<<say $Mayor>>Something strange is happening in the city. I don’t know if you’ve heard, but several girls have gone missing. The families are all over me, damn it, I’m drowning here... coughs... Damn it… I need the best to solve this case, and you’re the best Detective in the city, or at least you were before... well, the tragic incident... you know...<</say>>
<<say $Mc>>Before Henry and you forced me to resign, right? And now you’re calling because you’re desperate?<</say>>
<<say $Mayor>>Listen, you made a lot of mistakes, but... ugh… that’s not why I’m calling you. I know I put you through a rough time, and I get that this isn’t easy. But believe me, this isn’t just another case. There are families on the brink of despair—lives at stake. And besides... I need to fix this before it gets any worse. I don’t know who else to trust.<</say>>
<div id="Pensamiento">He's desperate.</div>
<<say $Mc>>And what are you offering me in return?<</say>>
<<say $Mayor>>I’m offering you a substantial amount, $Mc.baseName. For this is the taxpayer's money. It's a good money, much more than you’ve received before. All I want is for you to solve this damn case. $150,000, what do you say?<</say>>
<div class="links">
<th>[[Accept the money|introphone1]]</th>
<th>[[I don't want your money|introphone2]]</th>
</div>
</div>
<div id="npc-container">
<img src="img/characters/mayor/mayor.png">
</div>
<<audio "codec" stop>><div id="ConversationBox">
<div id="Ntext">You hear the mayor hangs up before you, and you take hold of the phone, gripping it firmly. Adrenaline begins to course through your veins, awakening a feeling you thought you had forgotten. Perhaps, just perhaps, it’s time to become who you once were, even though the path ahead seems quite murky.
You sigh, straighten your shoulders, and focus your mind on what lies ahead.</div>
<div id="Pensamiento">This isn’t going to be easy. But when has it ever been? Two agents missing, a case no one wants to touch, and me... me, seeking redemption. This is straight out of a movie.</div>
<div id="Ntext">You walk around the room, trying to clear your thoughts, turning them into words.</div>
<<say $Mc>>Charles Francis. Psychiatric hospital. Young women kidnapped. It all points to a hell ahead, but I can’t ignore it. If there’s a chance to fix things, to become who I used to be... then there’s no choice. I have to do this.<</say>>
<<if $Naked is true>>
<div id="Ntext">You stop in front of the mirror, looking at your naked body, suppressing the urge to continue.</div>
<<say $Mc>>I'm afraid the good times are over for now... It's time to focus.<</say>>
<<else>>
<div id="Ntext">You stop in front of the mirror, staring at your own reflection with a mix of determination and doubt.</div>
<<say $Mc>>Are you ready for this? Because no one else seems to be.<</say>>
<</if>>
<div class="linksTwo">
<th>[[Check the desk|checkdesk]]</th>
</div>
<div class="links">
<th>[[Go to entrance|introflat2]]</th>
<th>[[Go to bathroom|introtoilet]]</th>
</div>
</div>
<<set $notes = 1>>
<<set $introcase = 2>>
<<script>>
setup.phoneSystem.addObjective(
"New case",
"Grab your gun from the desk drawer.",
'main',
'introQuest' // ID
);
<</script>>
<<SanityMessage "New main objective: Take your gun.">><div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<div id="Ntext">You are close to the forest, the tall, dark trees rising like silent sentinels. The air shifts, becoming cooler, filled with the scent of damp leaves and soil. As you move forward, the shadows seem to shift, as if the forest were alive, watching you.</div>
<<default>>
<div id="Ntext">The cool air and the whisper of leaves around you wrapping you in their presence. The shadows follow as you step between the trees.</div>
<</switch>>
<div class="links">
<th>[[Go through the forest|Forest]]</th>
<th>[[Path to parking|Camino-izquierda]]</th>
</div>
</div>
<div id="LocationName">Path between forest and parking</div><div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<div id="Ntext">The night cloaks the forest in an almost total darkness, interrupted only by the faint light of the moon filtering through the branches. The air is cold, and the deep, oppressive silence is suddenly broken by a distant howl. A shiver runs through you as the sound echoes among the trees, followed by other howls rising in response, creating a haunting symphony. The beasts are near, and the forest seems to breathe with them, wrapping you in a sense of imminent danger.</div>
<<say $Mc>>I have bad feelings...<</say>>
<<default>>
<div id="Ntext">The beasts are near, and the forest seems to breathe with them, wrapping you in a sense of imminent danger.</div>
<</switch>>
<div class="linksTwo">
<th>[[Explore the forest|ForestExplore]]</th>
</div>
<div class="links">
<th>[[Path to parking|Camino-bosque]]</th>
<<if $Cave is 1>>
<th>[[Go to the cave|Caveoutside]]</th>
<</if>>
<th>[[Road to lake|Camino-lagobosque]]</th>
</div>
</div>
<div id="LocationName">Forest</div><div id="ConversationBox">
<div id="Ntext">The path that connects the lake to the forest winds through the fog, narrowing as you venture deeper into the thicket. The ground is uneven, covered in damp leaves and fallen branches that crack under your steps. In the distance, you can hear the faint murmur of the water. The trees, tall and dark, seem to close in around you, their intertwined branches forming a canopy that barely lets through the light. The atmosphere is thick, as if the forest itself were watching every one of your movements.</div>
<div class="links">
<th>[[Forest|Forest]]</th>
<th>[[Lake|Lake]]</th>
</div>
</div>
<div id="LocationName">Path between the lake and the forest</div>
<div id="ConversationBox">
<div id="Ntext">You open one of the drawers and grab a bottle of pills. You look inside; <span style="color: #22b22e;">you take the 4 pills</span> from inside. Then you look at the table searching for some water, but you only see an empty glass and a bottle of whiskey close to you. There's still a bit of the alcoholic substance left inside.</div>
<div class="links">
<th>[[Drink whisky|introwhisky]]</th>
<th>[[Drink water|intropills2]]</th>
</div>
</div>
<<script>>
addSanityItem('calmingPills',4)
<</script>>
<div id="ConversationBox">
<div id="Ntext">The lobby is dark and dusty, with faint traces of burns on the walls. The wooden counter is covered with yellowed papers and debris. Light filtering through the broken skylights casts shadows on the cracked floor. The distant creak of the building is the only sound.</div>
<div class="linksTwo">
<<if $openleftdoor isnot true>>
<th>[[Check door at the left|DoorLeft]]</th>
<</if>>
<<if $maindoorclosed is true>>
<th>[[Check entrance door|maindoor]]</th>
<</if>>
<<if $DocHometalk is 1 && $mayorcall isnot 1>>
<th>[[Talk to doc. Home|doctalk]]</th>
<</if>>
</div>
<div class="links">
<<if $openleftdoor is true>>
<th>[[Left hallway|Left Corridor]]</th>
<</if>>
<th>[[Main hallway]]</th>
<<if $maindoorclosed isnot true>>
<th>[[Outside|PsiquiatricEntrance]]</th>
<</if>>
<th>[[Right hallway|closedcorridor]]</th>
</div>
</div>
<<if $corridorchek is 1 && $doorcorridorchek is 1 && $doorchek is 1 && $DocHometalk isnot 1 || $CabinCheck is true && $DocHometalk isnot 1>>
<<goto "DocHomemeet">>
<</if>>
<<if $firstenter isnot 1>>
<<goto "firstenter">>
<</if>>
<<if $openleftdoor is true && $mhr isnot true>>
<<goto "nodoc">>
<</if>>
<<audio "codec" stop>>
<<if $MHenemy is true && $MHfigth isnot 2>>
<<set $MHenemy = false>>
<<set $MHfigth = 0>>
<<removecountdown>>
<<audio "alert" stop>>
<</if>>
<div id="LocationName">Entrance hall</div>
<<audio "outsidetheme" stop>>
<<audio "darksituation" stop>>
<<audio "lobbytheme" play loop volume 0.4>>
<div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<div id="Ntext">The Path to cabin is surrounded by overgrown weeds, and the air feels heavier here. The faint light in the window remains, an unexpected presence in this forgotten place, leaving you with the feeling that something doesn't quite fit in the stillness of the surroundings.</div>
<<default>>
<div id="Ntext">The Path to cabin is surrounded by overgrown weeds, and the air feels heavier here. The cabin is near.</div>
<</switch >>
<div class="links">
<th>[[Road to parking|Camino-LagoParking]]</th>
<th>[[Go to cabin|CabinDoor]]</th>
<th>[[Go to lake|Lake]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">The cabin door is ajar, creaking softly as the wind pushes it. The faint light inside flickers, casting shadows in the dimness.</div>
<div class="links">
<th>[[Enter cabin|Cabin]]</th>
<th>[[Back to lake|Camino-Cabin]]</th>
</div>
</div>
<<if $CabinMeet is 1 && $carquest isnot 1>>
<<goto "carquest">>
<</if>><div id="ConversationBox">
<div id="Ntext">Franklin is in the cabin, standing by the table, carefully examining the scattered objects, unaware of your presence.</div>
<div class="linksTwo">
<th>[[Talk to Franklin|Conserje]]</th>
</div>
<div class="links">
<th>[[Exit|CabinDoor]]</th>
</div>
</div>
<div id="LocationName">Lake cabin</div>
<<if $CabinMeet isnot 1 && $DocHometalk is 1>>
<<goto "CabinMeet">>
<</if>>
<<if $DocHometalk isnot 1>>
<<goto "cabin">>
<</if>>
<<set $CabinCheck = true>><div id="ConversationBox">
<<if $NoMoreGirl is true>>
<<say $Franklin>>Hey Casey! Do you want something more? <</say>>
<<else>>
<<say $Franklin>>Hey girl! Do you want something more? <</say>>
<</if>>
<div class="links">
<th>[[Check the shop|Shop]]</th>
</div>
<div class="links">
<th>[[Questions]]</th>
<th>[[Bye|Cabin]]</th>
</div>
</div>
<<include "Frank">>
<<if $introgun is true>>
<div id="ConversationBox">
<div id="Ntext">You open the drawer again, but there’s nothing left of interest. The flashlight and gun are already in your hands. The drawer is now bare, the faint smell of dust lingering. Time to move on.</div>
<div class="links">
<th>[[Back|introflat]]</th>
</div>
<img id="event-image" src="img/events/homedesk.png">
</div>
<<else>>
<div id="ConversationBox">
<div id="Ntext">You approach the desk and open the drawer cautiously, letting your fingers explore its contents until you find what you’re looking for. You grip it with practiced familiarity, feeling the weight that has always been a part of you. You carefully draw it from its holster, making sure it’s ready. The sharp click of the safety switching off reminds you that the case has only just begun, and nothing here will be easy. Before moving on, you gather the <span style="color: #22b22e;">32 rounds 9mm</span> from inside. As you continue searching through the drawer, your fingers brush against something else: a flashlight.</div>
<<say $Mc>>This flashlight will surely come in handy.<</say>>
<div class="links">
<th>[[Take the flashlight|introlinterna]]</th>
</div>
<img id="event-image2" src="img/events/homedesk.png">
</div>
<<script>>
addWeapon('Pistol');
addAmmo('9mm', 50)
<</script>>
<</if>><div id="ConversationBox">
<div id="Ntext">You grab the bottle of whiskey and take a swig, the liquid burning your throat as it goes down.</div>
<<say $Mc>> ¡Cof, cof!<</say>>
<<if $Naked is true>>
<div id="Pensamiento">I know this only takes me further from what I really want. It's better not to fall back into those old habits, or everything I've rebuilt will crumble.</div>
<div id="Ntext">As you think, your hand glides gently over your body, brushing across your chest before slowly descending.</div>
<div id="Pensamiento">Hmm... I didn’t realize how desperate I was for action. It’s probably best if I focus on the Gulliver rescue case, but I’m so excited... I don’t even remember the last time.</div>
<<else>>
<div id="Pensamiento">A momentary relief. But I know this only takes me further from what I really want. It's better not to fall back into those old habits, or everything I've rebuilt will crumble.
It’s probably better I get to work on the Gulliver rescue case. The client is getting quite restless. </div>
<</if>>
<div class="links">
<<if $Naked is true>>
<th>[[Descend the hand|intromasturbation]]</th>
<</if>>
<th>[[Check the missing poster|introcaseold]]</th>
</div>
</div>
<<script>>
window.decreaseHealth(10);
<</script>>
<div id="ConversationBox">
<<say $Mc>>I'm not interested, Quentin. I don't want your money or your case.<</say>>
<<say $Mayor>>I understand, but let me offer you something else. If you take this case, I can pull some strings to get your badge back. I assure you that getting you back in the game will be the least of your worries.<</say>>
<div id="Pensamiento">Getting my badge back... That really changes things.</div>
<<say $Mayor>>The latest evidence points to the Charles Francis psychiatric hospital on the outskirts of the city. This is serious... Two of my best agents, Dina Carter and Rust Cohle, disappeared while investigating the place. It's as if they vanished into thin air. <</say>>
<div id="Pensamiento">I know Cohle, he's one of the good ones, I can't believe he's gone. The last I heard of Rust was that he joined the FBI, and I didn't know he worked directly for the mayor. Dina should be her partner.</div>
<<say $Mc>>Charles Francis? That place has been abandoned for over a decade. I didn't think anyone would be interested in it...<</say>>
<<say $Mayor>>I thought the same. But now, I don't know what to believe. Dina and Rust weren’t rookies, they were experienced agents. If they disappeared like this, something's wrong. I don't want to conduct a raid, at least not yet. That would be all over the news.<</say>>
<div id="Pensamiento">What a complete jerk.</div>
<<say $Mc>>So, you think the place is involved? Or maybe someone’s playing games with us?<</say>>
<<say $Mayor>>I don't know. But with all these disappearances and no answers, time is running out. The elections are right around the corner. I need someone who can think outside the box. Someone who can get answers where others have failed.<</say>>
<div id="Pensamiento">It's clear he's looking for someone expendable... But the truth is, the case has really piqued my interest.</div>
<<say $Mc>>I'll take a look at Charles Francis. If Dina and Rust are alive, I'll find them.<</say>>
<<say $Mayor>> I knew I could count on you Casey. I’ll send you the files, everything we have on the case, including the raid reports and any other details we’ve gathered. And I won’t forget about the badge, you’ll have it by tomorrow!<</say>>
<<say $Mc>>I’ll get started. This won’t be another dead-end.<</say>>
<<say $Mayor>>This can’t wait. Do you hear me, Casey? We need you to get moving immediately. And remember, this case has to stay completely under wraps. No one else can know.<</say>>
<<say $Mc>>I understand...<</say>>
<<say $Mayor>>Don’t let us down. <</say>>
<div class="links">
<th>[[Hang up the phone|introcase]]</th>
</div>
</div>
<div id="npc-container">
<img src="img/characters/mayor/mayor.png">
</div>
<<set $introcase = 1>>
<<set $InvestigatorRoad += 1>><div id="ConversationBox">
<div id="Ntext">You spot a flashlight tucked in the back of the drawer. It's small but sturdy, a good tool for dark places. You grab it, feeling the cool metal surface as you twist the cap to check the batteries. It’s good to go. With both <span style="color: #22b22e;">the gun and flashlight</span> in hand, you close the drawer, ready to face what lies ahead.</div>
<div class="links">
<th>[[Back|introflat]]</th>
</div>
<img id="event-image2" src="img/events/homedesk.png">
</div>
<<script>>
UIAnimations.showLantern();
<</script>>
<<script>>
UIAnimations.showBatteryQuickslot();
<</script>>
<<set $introgun = true>>
<<script>>
setup.phoneSystem.addObjective(
"New case",
"Travel to the abandoned mental institution Charles Francis.",
'main',
'introQuest' // ID
);
<</script>>
<<SanityMessage "New main objective: Travel to the Charles Francis mental institution.">><div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<div id="Ntext">When you return to the door, you find it closed. You approach and push, but it doesn’t move. It’s blocked from the other side.</div>
<<say $Mc>>What the hell?, Hey! Doctor Home, open the door! Home!<</say>>
<div id="Ntext">You yell and pound on the door, but it’s useless. You get no response, and the door remains shut.</div>
<<say $Mc>>God, how could I be so stupid?<</say>>
<div id="Pensamiento">Well, at least now I have a main suspect.</div>
<<say $Mc>>I need to find a way in and locate Home.<</say>>
<<script>>
setup.phoneSystem.addObjective(
"A way to enter",
"Inspect the surroundings and find a way to re-enter the building.",
'main',
'enterQuest' // ID
);
<</script>>
<<SanityMessage "Main objective updated: A way to enter">>
<<default>>
<div id="Ntext">The door is closed from the other side.</div>
<</switch>>
<div class="links">
<th>[[Go back|Parking]]</th>
</div>
</div>
<<set $maindoorclosed = true>><div id="ConversationBox">
<div id="Ntext">From here, you can only see two paths.
To your left, a trail leads into the forest. The trees form a natural canopy, and the ground is covered with fallen leaves. The path is dark and silent.
To your right, a simpler path leads back to the parking lot and goes around the building.</div>
<<if $mayorcall gte 1>>
<div class="linksTwo">
<th>[[Inspect the building|buildinginspect]]</th>
</div>
<</if>>
<div class="links">
<th>[[Path to Forest|Camino-bosque]]</th>
<th>[[Parking|Parking2]]</th>
<th>[[Go around the building|Camino-izquierda2]]</th>
</div>
</div>
<<if $Windowcrash is true && $bwinfight2 isnot true && $patientcome is 1>>
<<removecountdown>>
<<set $patientcome = 0>>
<<audio "alert" stop>>
<</if>>
<div id="LocationName">Left path</div>
<<audio "lobbytheme" stop>>
<<audio "outsidetheme" play loop volume 0.4>>
<div id="ConversationBox">
<div id="Ntext">He edges along the building to the right, its cracked pavement making the walk a little difficult. The walls, worn and covered in mold, have barred windows that seem to watch over the silent path. On one side, the bare trees rise like twisted shadows.</div>
<<if $mayorcall gte 1 && $Windowcrash isnot true>>
<div class="linksTwo">
<th>[[Inspect the building|buildinginspect2]]</th>
</div>
<</if>>
<div class="links">
<th>[[Parking|Parking]]</th>
<th>[[Go around the building|Camino-intermedio]]</th>
<th>[[Road to lake|Camino-LagoParking]]</th>
</div>
</div><div id="ConversationBox">
<<if $escalerarota isnot true>>
<div id="Ntext">The walls are covered in cracks and moss. A rusty staircase clings to the wall, its structure corroded by time. Each step looks fragile, as if it could give way under a single footstep.</div>
<<else>>
<div id="Ntext">The walls are covered in cracks and moss. Where there was once a staircase, only twisted remnants of rusted metal remain. The steps have collapsed, leaving a dangerous gap that blocks access to the upper floors.</div>
<</if>>
<div class="linksTwo">
<<if $mayorcall gte 1 && $ironbaritem isnot true>>
<th>[[Inspect the building|buildinginspect3]]</th>
<</if>>
<<if $escalerarota is true && $ironbaritem isnot true>>
<th>[[Inspect the broken stair|ironbarStair]]</th>
<</if>>
</div>
<div class="links">
<th>[[Path to forest|Camino-izquierda2]]</th>
<th>[[Road to lake|Camino-derecha2]]</th>
</div>
</div>
<div id="LocationName">Back side</div><div id="ConversationBox">
<div id="Ntext">As you explore the area near the lake, you move through the underbrush until your steps come to a halt. Through the branches and the water's reflection, you spot a small wooden cabin. At first glance, it seems as abandoned as the rest of the place, with a worn roof and walls covered in mold, but something makes you furrow your brow: a faint light is shining from one of the windows. You stand still, watching carefully.</div>
<div id="Pensamiento">Light? Here, in the middle of nowhere?</div>
<<say $Mc>>It could be Rust Cohle and his FBI partner... or maybe someone else. I don’t know, something about this place doesn’t sit right with me.<</say>>
<div class="links">
<th>[[Go to cabin|Cabin]]</th>
</div>
<img id="event-image" src="img/events/cabin.jpg">
</div>
<<set $CabinFind = 1>>
<div class="links">
<tr>
<th><<back>></th>
</tr>
</div>
<div class="archivo">
Imagen de un diario con la descripcion de los monstros, chicas y personajes.
</div>
<style>
.archivo {
background: black;
background-size: cover;
position: fixed;
top: 12em;
left: 37em;
width: 45em;
height: 45em;
color: white;
}
</style><div id="ConversationBox">
<div id="Ntext">You observe the building's facade. Its structure looks old and worn, with cracks in the walls and an air of abandonment. One of the windows catches your attention: the bars that should protect it are broken, leaving a space wide enough to pass through.</div>
<div class="links">
<th>[[Break the window|brokewindow]]</th>
<th>[[Back|Camino-izquierda]]</th>
</div>
<img id="event-image2" src="img/events/window.png">
</div>
<<if $Windowcrash is true>>
<<goto "buildinginspect1">>
<</if>>
<div id="ConversationBox">
<div id="Ntext">You jolted awake, your breathing ragged, and a deep sadness weighed heavily on your chest. The room was silent, but the echo of the nightmare still lingered in your mind.</div>
<<say $Mc>>After all this time, the nightmares still haunt me. But this one… was different. How strange it felt—as if I were explaining my life to someone. It was unsettling, surreal. 'Hah.' Anyway... <</say>>
<div id="Ntext">You sit up slowly, the late afternoon air brushing against your bare skin as the sheets slip away, revealing the curves of your body. The soft light of the setting sun streams through the window, tracing every line and casting warm, golden shadows across your form. The quiet rustle of fabric falling to the floor is the only sound as you rise. You glance down at yourself and smirk, a wry chuckle escaping your lips. Stretching lazily, you make your way toward the closet.</div>
<div id="Pensamiento">Well, at least I don’t have to worry about wrinkled clothes.</div>
<div class="links">
<th>[[Get dressed|dressed]]</th>
<th>[[Stay naked|intro3]]</th>
</div>
</div>
<<widget "Chaptertitle">>
<<set _mensaje to $args[0]>>
<<run setTimeout(function() {
var div = document.createElement("div");
div.id = "titulo-capitulo";
div.innerHTML = _mensaje;
div.style.position = "fixed";
div.style.top = "40%";
div.style.left = "50%";
div.style.transform = "translate(-50%, -50%)";
div.style.backgroundColor = "#000000f0";
div.style.color = "#f5f5f5";
div.style.padding = "100px 40px";
div.style.borderRadius = "16px";
div.style.transition = "opacity 3s ease-out";
div.style.fontSize = "100px";
div.style.fontWeight = "normal";
div.style.textAlign = "center";
div.style.letterSpacing = "3px";
div.style.opacity = "1";
div.style.cursor = "default";
div.style.width = "100%";
div.style.border = "2px solid #cbcbcb";
div.style.boxShadow = "0 0 15px rgba(255, 255, 255, 0.5)";
div.style.fontFamily = "'Merriweather', serif";
div.style.animation = "none";
div.style.zIndex = "1000";
document.body.appendChild(div);
// Desvanecer el mensaje después de 4 segundos
setTimeout(function() {
div.style.opacity = "0";
}, 3000);
// Eliminar el mensaje después de 7 segundos
setTimeout(function() {
div.remove();
}, 6000);
}, 100)>>
<!-- Estilos globales -->
<<run var style = document.createElement('style');
style.innerHTML = `
body {
margin: 0;
padding: 0;
overflow: hidden;
background-color: #1a1a1a;
}
/* Fuente Merriweather, más apropiada para un tono de misterio */
@import url('https://fonts.googleapis.com/css2?family=Merriweather&display=swap');
`;
document.head.appendChild(style);>>
<</widget>>
<div id="ConversationBox">
<div id="Pensamiento">My name is $Mc.fullName, but everyone calls me Casey. I was born in New Veris 25 years ago. At 18, I joined the police force, convinced I could make a difference. My analytical mind and knack for solving cases earned me a promotion to detective by the time I was 20, even before I finished my criminology degree. Intelligence agencies reached out with offers, but I turned them down. I believed my place was here, on the streets of the city I was born in. I thought I was ready for anything.
I wasn’t. Everything changed the night my parents were murdered and my sister, Angelica, was kidnapped. That night, unaware of what was happening in my home, I was spending the evening with.</div>
<div class="linksTwo">
<th>[[Luke Rainbow|malepartner]]</th>
<th>[[Violet Rainbow|femalepartner]]</th>
</div>
<div class="links">
<th>[[Gabriela (disable previous relationship)|nopartner]]</th>
</div>
</div>
<<set $Naked = true>>
<<run changeImage("img/characters/casey/nude.png")>>
<<script>>
setup.phoneSystem.unlockMedia("Me", "image", "img/characters/casey/nude.png");
<</script>>
<<set $bag = 1>>
<<script>>
setup.phoneSystem.addContact("Cap. Henry Havook", "Henry completely lost trust in you. You haven't heard from him since he made you resign from the police force two years ago.", "img/characters/henry/avatar.png");
<</script>>
<<script>>
window.healSanity(30);
<</script>><div id="ConversationBox">
<<say $Mc>>Alright, Quentin. You’ve got my attention. I’ll take the case. But you’d better make sure that money’s as good as you say it is, and I want to get my badge back too.<</say>>
<<say $Mayor>>You won’t regret it. I’m counting on you Casey. If you solve the case, I'll also make sure they return your badge.<</say>>
<<say $Mc>>Let’s get to it then. What exactly are we dealing with here?<</say>>
<<say $Mayor>>The latest evidence points to the Charles Francis psychiatric hospital on the outskirts of the city. This is serious... Two of my best agents, Dina Carter and Rust Cohle, disappeared while investigating the place.<</say>>
<div id="Pensamiento">I know Cohle, he's one of the good ones, I can't believe he's gone. The last I heard of Rust was that he joined the FBI, and I didn't know he worked directly for the mayor. Dina should be her partner..</div>
<<say $Mc>>Charles Francis? That place has been abandoned for over a decade. I didn’t think anyone was even interested in it...<</say>>
<<say $Mayor>>I thought the same. But now, I don’t know what to believe. Dina and Rust weren’t rookies—they were experienced agents. If they disappeared like this, something’s wrong. The raid turned up nothing, but I’ve got this gut feeling there’s something hidden there, something we’re not seeing.<</say>>
<div id="Pensamiento">What a complete jerk.</div>
<<say $Mc>>So you think the place is involved? Or maybe someone’s playing a game?<</say>>
<<say $Mayor>>I don’t know. But with all the disappearances and no answers, we’re running out of time. I need someone who can think outside the box. Someone who can get answers where everyone else has failed.<</say>>
<<say $Mc>>I’ll take a look. I’m not doing this for the money. If Dina and Rust are still alive, I’ll find them.<</say>>
<<say $Mayor>>I knew I could count on you. I’ll get the files to you—everything we have on the case, including the raid reports and any other details we’ve gathered.<</say>>
<<say $Mc>>Good. I’ll get started. This isn’t going to be another dead end.<</say>>
<<say $Mayor>>This can’t wait. Do you hear me? We need you to get moving immediately. And remember, this case has to stay completely under wraps. No one else can know.<</say>>
<<say $Mc>>I understand...<</say>>
<<say $Mayor>>Don’t let us down.<</say>>
<div class="links">
<th>[[Hang up the phone|introcase]]</th>
</div>
</div>
<div id="npc-container">
<img src="img/characters/mayor/mayor.png">
</div>
<<set $introcase = 1>>
<<set $MoneyElection = 1>>
<<set $InvestigatorRoad -= 1>><<if $intromedkit is true>>
<div id="ConversationBox">
<div id="Ntext">There’s nothing else that could be of use.</div>
<div class="links">
<th>[[Back|introtoilet]]</th>
</div>
<img id="event-image" src="img/events/homecabinet.png">
</div>
<<else>>
<div id="ConversationBox">
<div id="Ntext">You open the bathroom cabinet and find <span style="color: #22b22e;">3 packaged bandages</span>, along with a small, somewhat outdated <span style="color: #22b22e;">first aid kit</span>. The kit is slightly Rust, but it seems to still have the essentials: some band-aids, disinfectant, and a couple of other things. It's not much, but it could come in handy if something comes up.</div>
<<say $Mc>>Who knows, this could all be useful.<</say>>
<div class="links">
<th>[[Back|introtoilet]]</th>
</div>
<img id="event-image2" src="img/events/homecabinet.png">
</div>
<<script>>
addMedkit(1);
addBandages(3);
<</script>>
<<set $intromedkit = true>>
<</if>><div id="ConversationBox">
<<say $Casey>>Saving me? Really, Henry? If I lost control, it's because no one else had the balls to do what needed to be done. You, Rodríguez, the others—you all played it safe while I got my hands dirty. And now you have the nerve to tell me this is for my own good? To say you’re ‘taking care of me’? I don’t need you to take care of me, Henry!<</say>>
<<say $Captain>>Casey... this isn't easy for me to do. But your behavior... it just leaves me no other choice.<</say>>
<div id="Pensamiento">Is not easy? No choice? Fuck, Henry!</div>
<<say $Casey>>Don’t pretend this is hard for you. I’m sure it’s tearing you up inside, right? Just as much as it’s tearing me apart.<</say>>
<div id="Ntext">The captain's gaze hardens, and his tone grows more severe.</div>
<<say $Captain>>Enough! You’ve crossed too many lines. The arguments, the fights with other agents, showing up drunk at a crime scene… You’ve lost control. I could ask for the gun and the badge, but the gun is yours, so just hand over the badge.<</say>>
<<say $Casey>>Tsk...<</say>>
<div id="Ntext">You hesitate, your silence heavier than any words you could muster. Deep down, you know Henry is right. You stare at the badge in your hand, its weight suddenly unbearable. Finally, with a heavy heart, you place the badge on Henry's desk, the sound of it landing echoing in the quiet room.</div>
<<say $Captain>>I've spoken to mayor Quentin, and we've come to the conclusion that we can't give you any more chances. Please, we need you to sign the form.<</say>>
<div id="Ntext">Captain Henry slides a document toward you.</div>
<div class="links">
<th>[[Check the form|NameSelection]]</th>
</div>
</div>
<<include "Capitan">>
<<script>>
console.log("Captain passage loaded, current sanity:", State.variables.Sanity);
<</script>>
<<script>>
window.decreaseSanity(10);
<</script>>
<<SanityMessage "-10 Sanity">>
<div id="ConversationBox">
<div id="Ntext">Finally, you have arrived at your destination. The captain's office door stands before you. Captain Henry Havook has summoned you, and it’s certainly not for something good.</div>
<<say $Casey>>Well, here I am. This is probably the last time... I could check my old office before...<</say>>
<div class="links">
<th>[[Enter in the office|io]]</th>
<th>[[Go to Station's entrance|introC]]</th>
</div>
</div>
<<set $Ic = true>>
<<SanityMessage "Main objective updated: Check your former office">>
<<script>>
setup.phoneSystem.addObjective(
"Old office",
"Enter and check your former office",
'main',
'old_office'
);
<</script>>
<div id="LocationName">Police station</div><div id="ConversationBox">
<div id="Ntext">You step quickly into the office, and Captain Havook fixes his gaze on you with a serious expression. When his eyes meet yours, he lets out a weary sigh. Sensing the tension in the room, you decide to break the silence.</div>
<<say $Casey>>Captain...<</say>>
<<say $Captain>>Please, have a seat, Casey.<</say>>
<div id="Ntext">The captain gestures for you to sit, pointing to the empty chair in front of his desk.</div>
<div class="links">
<th>[[Sit in front of the captain|preintro1]]</th>
</div>
</div>
<<include "Capitan">>
<<if $Rodriguezintro isnot true>>
<<script>>
setup.phoneSystem.completeObjective('talk_gabi');
setup.phoneSystem.completeObjective('talk_havook');
<</script>>
<<else>>
<<script>>
setup.phoneSystem.completeObjective('talk_havook');
<</script>>
<</if>>
<<set $practique = 0>><div class="title"></div>
<div id="title1"></div>
<div class="links">
<th><a tabindex="0" role="button" id="save-button">Continue</a></th>
<th>[[New story|introA]]</th>
</div>
<<audio "pianoSonata" play loop volume 0.4>>
<<script>>
// Ensure SugarCube save functionality
$(document).ready(function() {
// Direct save method for SugarCube
$('#save-button').on('click', function() {
// Explicitly use SugarCube's save method
try {
// Open saves dialog
UI.saves();
} catch (error) {
// Fallback error handling
console.error("Save functionality error:", error);
alert("Save function could not be executed.");
}
});
});
<</script>>
<<include "ImageRotation">>
<style>
.stat-row {
display: none;
}
#save-button {
display: inline-block;
font-family: 'personal-services';
background: none;
color: white;
padding: 0.8em 1.5em;
border: none;
text-decoration: none;
font-size: 42px;
cursor: pointer;
transition: background-color 0.3s ease;
position: relative;
top: -4.5em;
left: -0.2em;
}
#ui-bar, #character-menu {
display: none;
}
#name {
display: none;
}
#musicButton {
display: grid;
cursor: pointer;
text-decoration: none;
transition-duration: .2s;
padding: 0.1em 1em;
background: white;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
border: none;
position: absolute;
left: 9.5em;
top: 0;
width: 7em;
text-align: center;
white-space: nowrap;
transition: background 0.3s ease;
font-family: 'personal-services', sans-serif;
}
a {
display: grid;
cursor: pointer;
text-decoration: none;
transition-duration: .2s;
padding: 0.1em 1em;
background: white;
-webkit-background-clip: text;
-webkit-text-fill-color: white;
position: absolute;
top: -2em;
left: 8em;
font-family: 'personal-services', sans-serif;
font-weight: 100;
max-width: 8em;
width: 8em;
border: none;
}
a:hover, button:hover, #musicButton:hover, #save-button:hover {
text-decoration: underline;
background: linear-gradient(to right, #ffabbe, #b6b6ff);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
.links a {
padding: 10px 15px;
background-color: transparent;
border: none;
color: #d9c27e;
text-decoration: none;
border-radius: 5px;
display: inline-block;
font-family: 'personal-services';
font-size: 41px;
/* text-shadow: 1px 1px 1px #000;*/
}
.links a:hover {
text-decoration: underline;
}
.links {
margin: 2em 0;
border-collapse: collapse;
font-size: 41px;
position: fixed;
top: 15em;
left: 12%;
transform: translateX(-50%);
width: 25em;
height: 1em;
text-align: center;
}
@keyframes subwoofer-pump {
0% {
transform: scale(1) translateZ(0);
filter: blur(0px);
}
20% {
transform: scale(1.08) translateZ(0);
filter: blur(1px);
}
40% {
transform: scale(0.96) translateZ(0);
filter: blur(0.5px);
}
60% {
transform: scale(1.04) translateZ(0);
filter: blur(0.7px);
}
80% {
transform: scale(0.98) translateZ(0);
filter: blur(0.3px);
}
100% {
transform: scale(1) translateZ(0);
filter: blur(0px);
}
}
.title {
background-image: url(img/title.png);
background-size: cover;
position: fixed;
top: -8.5em;
left: 49%;
transform: translateX(-50%);
width: 40em;
height: 40em;
z-index: 1;
}
#title1 {
background-image: url(img/title1.png);
background-size: cover;
position: relative;
top: 9em;
left: 17.5%;
transform: translateX(-50%);
width: 19em;
height: 5em;
animation: subwoofer-pump 2s cubic-bezier(0.455, 0.03, 0.515, 0.955) infinite;
transform-origin: center center;
will-change: transform;
backface-visibility: hidden;
perspective: 1000px;
z-index: 1;
}
/* Tablets (portrait and landscape) */
@media screen and (max-width: 1024px) {
#menu ul {
top: 25em;
}
#menu li a {
font-size: 35px;
left: -14em;
}
.links {
font-size: 35px;
top: 68vw;
left: 21vw;
width: 115vw;
}
.title {
width: 30em;
height: 30em;
}
#title1 {
width: 15em;
height: 4em;
top: 15em;
}
}
/* Mobile devices (portrait) */
@media screen and (max-width: 768px) {
#ui-bar {
height: 8em;
}
#musicButton {
left: 50%;
transform: translateX(-50%);
font-size: 14px;
width: 5em;
}
#menu ul {
top: 20em;
}
#menu li a {
font-size: 25px;
left: -10em;
top: -4em;
}
#menu li a::after {
font-size: 30px;
}
.links {
font-size: 25px;
top: 8em;
width: 15em;
}
.title {
width: 20em;
height: 20em;
top: -3em;
}
#title1 {
width: 12em;
height: 3em;
top: 12em;
}
}
/* Small mobile devices */
@media screen and (max-width: 480px) {
#menu li a {
font-size: 20px;
left: -8em;
top: -3em;
}
#menu li a::after {
font-size: 25px;
}
.links {
font-size: 20px;
top: 6em;
width: 12em;
}
.title {
width: 15em;
height: 15em;
top: -2em;
}
#title1 {
width: 10em;
height: 2.5em;
top: 10em;
}
}
/* Para asegurar que el contenido sea legible en dispositivos muy pequeños */
@media screen and (max-width: 320px) {
#menu li a {
font-size: 16px;
left: -6em;
}
#menu li a::after {
font-size: 20px;
}
.links {
font-size: 16px;
width: 10em;
}
.title {
width: 12em;
height: 12em;
}
#title1 {
width: 8em;
height: 2em;
}
</style>
<<set $startgame = true>><div id="imageContainer">
<img src="img/backgrounds/intromenu.png" id="currentImage">
</div>
<<script>>
$(document).ready(function () {
var images = State.variables.imageList; // Lista de imágenes
var currentIndex = State.variables.imageIndex; // Índice actual
var $imageContainer = $('#imageContainer'); // Contenedor de imágenes
var $currentImage = $('#currentImage'); // Imagen actual
setInterval(function () {
// Actualizar el índice para la próxima imagen
currentIndex = (currentIndex + 1) % images.length;
State.variables.imageIndex = currentIndex;
// Crear una nueva imagen para la transición
var $nextImage = $('<img>')
.attr('src', images[currentIndex])
.addClass('fade-in') // Clase CSS para la animación
.css({
position: 'absolute',
top: 0,
left: 0,
width: '100%',
height: '100%',
objectFit: 'cover',
});
// Agregar la nueva imagen al contenedor
$imageContainer.append($nextImage);
// Esperar a que la transición termine y eliminar la imagen anterior
setTimeout(function () {
$currentImage.remove(); // Eliminar la imagen anterior
$nextImage.removeClass('fade-in'); // Eliminar la clase para mantener la nueva imagen fija
$currentImage = $nextImage; // Actualizar la referencia
}, 2500); // Duración de la animación (2s)
}, 15000); // Cambiar cada 15 segundos
});
<</script>>
<style>
body {
--ui-bar-height: 0 !important;
}
#ui-bar {
background: transparent;
}
#story {
top: 0 !important;
}
#imageContainer {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
}
#imageContainer img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
opacity: 1;
transition: opacity 2s ease; /* Transición suave de opacidad */
}
#imageContainer img.fade-in {
opacity: 0;
animation: fadeIn 3s ease forwards;
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
</style><div id="ConversationBox">
<div id="Ntext">You step in the police station, and the weight of your coworkers’ stares presses into your back. You don’t need to see them to know what they’re thinking—you’ve heard the whispers, the muffled laughter, the words no one dares to say to your face.
You walk down the hallway, the echo of your footsteps sounding louder than it should. Rodríguez, your former partner, she is sitting at what you assume is her provisional desk.
Once, she’d have greeted you with a smile or a sharp joke only the two of you would get. Now, her eyes are cold, the camaraderie you once shared is now broken, and the silence between you weighs heavier than any word of reproach.</div>
<div id="Pensamiento">The captain told me to go to his office as soon as I arrived.</div>
<div class="linksTwo">
<th>[[Talk to Rodriguez|rt]]</th>
</div>
<div class="links">
<th>[[Go through the corridor|ci]]</th>
</div>
</div>
<<script>>
setup.phoneSystem.addObjective(
"Your partner Rodriguez",
"Talk to your colleague Gabriela Rodriguez (optional)",
'secondary',
'talk_gabi' // ID
);
<</script>>
<<SanityMessage "New secondary objective: Your partner Rodriguez">>
<div id="LocationName">Police station</div><div id="ConversationBox">
<div id="Ntext">You step out of Captain Havook's office with your shoulders slumped, feeling the weight of the decision you've just made—or rather, the decision that was imposed on you—pressing on your soul. The door to the captain's office slams shut behind you with a metallic sound, and for a moment, you stand there, frozen in the threshold, as if the world itself had stopped you in your tracks. The precinct, once your home, now feels foreign to you. Everything you've done, everything you've lived through, seems to crumble around you.
You walk down the hallway. The fluorescent light above you flickers, casting shadows that follow you, as if the building itself is chasing you. There's no turning back. You've been fired, and in doing so, you've lost more than just a job. You've lost your purpose, your identity, everything you once thought defined you.</div>
<div class="links">
<th>[[Exit|introexit1]]</th>
</div>
</div>
<<set $Mc2 = $Mc>>
<div id="ConversationBox">
<div id="Ntext">Two weeks. Fourteen full days since they told you, with that tense and professional smile, to "take a break." It wasn’t a suggestion, of course. It was an order. Everyone knew it, including you. A polite way to push you out of the way while they decided what to do with you. And now you're here, back, but not because things have improved. More like this is just the prelude to the inevitable.
The sky is darker than it should be at this time of day, as if even it knows that a chapter is about to close. You take a deep breath, as if that could ease the weight you carry.</div>
<div id="Pensamiento">It doesn’t matter how many nice words they use, it doesn’t matter how much they try to sugarcoat it, I know I’m done. And the worst part is, I can't even blame them. I'm alone.</div>
<div class="links">
<th>[[Enter in the police station|introB]]</th>
</div>
</div>
<<script>>
UIAnimations.showHealthBar();
UIAnimations.showHealthQuickslot();
UIAnimations.showSanityBar();
UIAnimations.showSanityQuickslot();
UIAnimations.showWeaponQuickslot();
UIAnimations.showBulletQuickslot();
UIAnimations.showCharacterImage()
<</script>>
<<script>>
setup.phoneSystem.addObjective(
"Back at the station",
"Go to captain's office and talk to him",
'main',
'talk_havook' // ID
);
<</script>>
<<script>>
setup.phoneSystem.addContact("Me", "Videos & photos of me.", "img/characters/casey/casey-avatar.png");
<</script>>
<<script>>
setup.phoneSystem.unlockMedia("Me", "image", "img/characters/casey/casey.png");
<</script>>
<<script>>
setup.phoneSystem.addContact("Gabi", "My partner and detective in New Veris.", "img/characters/rodriguez/avatar.png");
<</script>>
<<SanityMessage "New main objective: Back at the station">><div id="ConversationBox">
<<if $Rodriguezintro isnot true>>
<div id="Pensamiento">I don't want to talk to her right now.</div>
<div id="Ntext">You pretend not to notice and keep moving, Rodríguez gives you one last sorrowful look as you walk away, her own eyes reflecting a shared pain, as though she, too, carries the burden of this inevitable goodbye.
The place feels colder, emptier, like you brought a storm with you and everyone is doing their best to stay out of its path. At the end of the hall, the Captain’s office looms, silent and unyielding. Every step toward it feels heavier than the last, but stopping isn’t an option.</div>
<<else>>
<div id="Ntext">The place feels colder, emptier, like you brought a storm with you and everyone is doing their best to stay out of its path. At the end of the hall, the Captain’s office looms, silent and unyielding. Every step toward it feels heavier than the last, but stopping isn’t an option.</div>
<</if>>
<div class="links">
<th>[[Continue through the hallway|ci1]]</th>
</div>
</div>
<<run changeImage("img/characters/casey/casey.png")>><div id="ConversationBox">
<div id="Ntext">The air smells of stale coffee and aged paper, a scent you’ve come to associate with long nights of work and endless cases.</div>
<div class="linksTwo">
<th>[[Check the wall|wi]]</th>
<<if $bag is 1>>
<th>[[Check the desk|di2]]</th>
<<else>>
<th>[[Check the desk|di]]</th>
<</if>>
<th>[[Check the computer|introsave]]</th>
</div>
<div class="links">
<th>[[Go to hallway|ci2]]</th>
</div>
</div>
<div id="LocationName">Old office</div><div id="ConversationBox">
<div id="Ntext">The captain's office door stands before you.
</div>
<div class="links">
<<if $bag is 1>>
<th>[[Shooting range]]</th>
<th>[[Enter in the captain's office|preintro]]</th>
<</if>>
<th>[[Enter in the office|io]]</th>
<th>[[Go to Station's entrance|introC]]</th>
</div>
</div>
<div id="LocationName">Police station</div>
<<run changeImage("img/characters/casey/casey.png")>><div id="ConversationBox">
<div id="Ntext">As you look at the desk, you notice a pile of scattered papers, incomplete reports, and faded sticky notes. Among them, you recognize some documents from the last case, still unfiled, as if no one had dared to touch them since. The ink of the key words still stands out: homicide, failed rescue, Rodríguez.
Then, your eyes land on something familiar: your bag.</div>
<<say $Casey>>My bag... With all the commotion from the last case, I left it here.<</say>>
<div class="links">
<th>[[Take your bag|di1]]</th>
</div>
</div>
<<SanityMessage "Main objective updated: Talk to Captain Havook">>
<<script>>
setup.phoneSystem.completeObjective('old_office');
<</script>><div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<div id="Ntext">As you look at the wall, your eyes settle on an old board with remnants of notes and photos connected by frayed threads. It’s the last case you solved with Gabriela. The victim’s picture is still there, next to a date marked in red. It didn’t end well. A young woman lost her life before you could stop the killer, Daniel R. Harrington, and Gabriela had to Shoot him to save others victims.</div>
<div id="Pensamiento">I tried to negotiate, but I messed up. I couldn’t keep my cool… or maybe… I didn’t want to.</div>
<<default>>
<div id="Ntext">The last case you solved with Gabriela Rodriguez stills in the wall. The victim’s picture is still there, next to a date marked in red. It didn’t end well. A young woman lost her life before you could stop the killer, and Gabriela had to Shoot him to save others</div>
<</switch>>
<div class="links">
<th>[[Back|io]]</th>
</div>
</div>
<div id="ConversationBox">
<div id="Ntext">You approach Rodríguez; she tries not to look at you until your presence is too close to ignore. Then, she shoots you a look of disappointment that instantly shifts to indifference.</div>
<<if $introC is true>>
<<say $Gabrielayoung>>Casey, when I saw you enter, I thought you weren't going to talk to me...<</say>>
<<say $Casey>>Gabi, I...<</say>>
<<else>>
<<say $Gabrielayoung>>Casey...<</say>>
<<say $Casey>>Gabi, I...<</say>>
<</if>>
<<say $Gabrielayoung>>Don't say another word, Casey. I warned you. I told you what would happen if you kept going down this path, and you didn’t listen to me.<</say>>
<div id="Ntext">Your face shows the pain of the truth as you hear the words of your former partner.</div>
<<say $Casey>>I.. I'm sorry.<</say>>
<div id="Ntext">Rodríguez looks you straight in the eyes, then grimaces, revealing her sadness.</div>
<<say $Gabrielayoung>>I know, but unfortunately, that’s not going to change anything. I tried talking to Henry, but it wasn't enough...<</say>>
<div id="Pensamiento">I'm sure she talked to Henry...</div>
<<say $Casey>>I'm sure you did... Even so, though I know you're disappointed and angry with me, I couldn’t leave without saying goodbye.<</say>>
<div id="Ntext">Rodríguez looks at you once more. Her expression shifts once again, first to anger and then to sorrow again.</div>
<<say $Gabrielayoung>>Goodbye, Casey. I hope you can rebuild your life. I truly hope you can. Just go back to who you were before... Never give up.<</say>>
<div id="Pensamiento">I don't want to lose you, Gabi.</div>
<<say $Casey>>And I hope we can still be friends. I need you in my life. We've been through so much together. To me, you're my family, Gabi.<</say>>
<div id="Ntext">Rodríguez, still hurt, looks into your eyes one last time. Then, she gives a small nod but says nothing. Gabriela’s nod carries a faint glimmer of acknowledgment, as if to say, "Maybe someday"... It seems there’s nothing more to say. It’s time to move on to the captain’s office.</div>
<div class="links">
<<if $Ic isnot true>>
<th>[[Keep moving forward|ci]]</th>
<<else>>
<th>[[Keep moving forward|ci2]]</th>
<</if>>
</div>
</div>
<<set $Rodriguezintro = true>>
<<include "Gabi">>
<<run changeImage("img/characters/casey/sad.png")>>
<<script>>
setup.phoneSystem.completeObjective('talk_gabi');
<</script>>
<<script>>
setup.phoneSystem.addContact("Gabi", "My partner and detective in New Veris. I spoke with her, I think we can still be friends", "img/characters/rodriguez/avatar.png");
<</script>>
<<script>>
setup.phoneSystem.unlockMedia("Gabi", "image", "img/characters/rodriguez/rodriguez.png");
<</script>>
<<SanityMessage "Objective complete: Talk to Rodriguez">><div id="ConversationBox">
<div id="Ntext">You sit in front of Captain Henry, feeling the weight of the silence. His gaze cuts through you, full of disappointment, and the atmosphere fills with unbearable tension. He doesn’t say anything, but you don’t need to hear more to know what he’s thinking. Every second drags on, and the feeling of having let down someone who once trusted you becomes unbearable.
Finally, you can’t take it anymore. You break the silence, your voice sharp and filled with anger.</div>
<<say $Casey>>Two weeks for this, Henry? Really? You force me to stay at home, make me feel like a criminal, and now you call me here just to say goodbye? Is that it? That easy? You could’ve just fired me with a simple phone call.<</say>>
<<say $Captain>>You’re more than just another agent, Casey. I couldn’t say goodbye with a simple phone call. You’ve been through too much, and you’ve done so much for this city... you were a source of pride for our department. You deserve more than that, even if it’s hard for everyone, especially Rodríguez.<</say>>
<div id="Pensamiento">I do it to save lives.</div>
<<say $Casey>>You know that what I did was for the case, for the victims. Because no one else was going to get their hands dirty to do what was necessary! Not you, not Rodríguez, not any of the others! And now it turns out I'm the bad one? After everything I've given, everything I've lost, you're just throwing me away?<</say>>
<<say $Captain>>I couldn't let you keep going down this path. It's not just about your last case. It's your attitude that's changed. You've started crossing lines... You've adopted practices that, while perhaps not always visible to others, are still a violation of the very values we stand for as officers of the law. You're no longer the person you used to be. And that... I can't ignore that. I can't let you keep sinking further into this abyss. I'm trying to save you.<</say>>
<div id="Pensamiento">I don't need to be saved!</div>
<div class="links">
<th>[[Let the anger out|preintro2]]</th>
</div>
</div>
<<include "Capitan">>
<<SanityMessage "Objective complete: Talk to Captain Havook">><div id="ConversationBox">
<div id="Ntext">You reach the exit, now you leave behind forever what you once considered your homeand. As you open the front door, the cold air from the street hits your face, as if the outside world is greeting you with indifference. There are no celebrations, no applause. Just the emptiness of a decision made for you, or at least that's what you'd like to believe, because deep down, you know it's all your fault. The sound of your footsteps fades into the darkness of the night. Then you close your eyes, and the tears finally come, silent but heavy, slipping down your face as you stand alone in the cold.</div>
<div id="Pensamiento">Did I really want to follow this path? To lose everything because of decisions I couldn't avoid? Henry is right, maybe it's time to change. To leave behind this life that consumes me, this endless vicious circle. My next stop will be my own office, no rules imposed by others, no judgment from anyone. But this time, it will be different. I have to do it the right way. No more lies. No more excuses. It's time to start over. Casey, I know you can do it, I know I can do it...</div>
<div class="links">
<th>[[Good bye forever|intromessage]]</th>
</div>
</div>
<<run changeImage("img/characters/casey/sad.png")>>
<div id="ConversationBox">
<div id="Ntext">It’s been two years since your life changed completely. Two years since everything came crashing down.
You remember the person you used to be: sharp, analytical, always in control. The kind of Detective who could see the truth in the midst of lies. But after everything that happened, that part of you became hard to find. You drowned in darkness, in guilt, in self-destruction. You hit rock bottom and almost lost everything.
But you pulled yourself out. Slowly, you started to piece together what was left of you. With what little you had, you managed to open your own Detective agency—a way to rebuild your life, to make sense of what remained.
Now, your mind drifts. Memories and worries swirl like smoke, pulling you deeper.</div>
<div class="links">
<th>[[Continue dreaming|intro]]</th>
</div>
</div>
<<Chaptertitle "2 Years Later">>
<style>
.title2, .ptr, #credits {
opacity: 0;
}
#ConversationBox {
opacity: 0;
transition: opacity 5s ease-in;
animation-delay: 5s;
}
#ConversationBox.visible {
opacity: 0.6;
}
</style>
<script>
$(document).ready(() => {
setTimeout(() => {
const box = document.getElementById('ConversationBox');
if (box) {
box.classList.add('visible');
}
}, 5000);
});
</script>
<<script>>
State.variables.Sanity = State.variables.MaxSanity
<</script>>
<<audio "pianoSonata" stop>>
<<timed 3s>>
<<audio "newstart" play loop volume 0.4>>
<</timed>>
<style>
#Ntext {
max-height: 25em;
}
</style>
<<if $Rodriguezintro is true>>
<<script>>
setup.phoneSystem.addContact("Gabi", "Former coworker and detective in New Veris. Over a year ago, you managed to reconcile with Gabriela, restoring your relationship. You now stay in occasional contact and meet up from time to time.", "img/characters/rodriguez/avatar.png");
<</script>>
<<else>>
<<script>>
setup.phoneSystem.addContact("Gabi", "Former coworker and detective in New Veris. It’s been two years since you last saw or spoke to Gabriela.", "img/characters/rodriguez/avatar.png");
<</script>>
<</if>>
<style>
#character-menu, .phone-button, #character-inventory-toggle.ui-visible {
visibility: visible;
display: none;
}
</style>
<<script>>
State.variables.inventory.quickbar = Array(5).fill(null);
<</script>>
<<script>>
State.variables.inventory.main = Array(10).fill(null);
<</script>>
<<script>>
$(document).off(':passagerender', function() {
UIAnimations.showInventoryToggle();
});
<</script>>
<<set $intro = true>>
<<set $bag = 0>>/*Character menu initialize*/
Lantern
<<script>>
UIAnimations.showLantern();
<</script>>
Battery
<<script>>
UIAnimations.showBatteryQuickslot();
<</script>>
Inventory
<<script>>
$(document).on(':passagerender', function() {
UIAnimations.showInventoryToggle();
});
<</script>>
Avatar
<<script>>
UIAnimations.showCharacterImage()
<</script>>
Diary
<<script>>
$(document).on(':passagerender', function() {
UIAnimations.showDiaryToggle();
});
<</script>>
Health bar
<<script>>
UIAnimations.showHealthBar();
<</script>>
Health slot
<<script>>
UIAnimations.showHealthQuickslot();
<</script>>
Sanity bar
<<script>>
UIAnimations.showSanityBar();
<</script>>
Health slot
<<script>>
UIAnimations.showSanityQuickslot();
<</script>>
Weapon slot
<<script>>
UIAnimations.showWeaponQuickslot();
<</script>>
Bullet slot:
<<script>>
UIAnimations.showBulletQuickslot();
<</script>>
<<script>>
startBattle('shadowCreature', 100);
<</script>>
<<script>>
startBattle(
['nurseNaked', 'madPatient', 'diabolicWolf'],
[80, 120, 200]
);
<</script>> health and sanity inc
<<script>>
SugarCube.State.variables.Sanity
SugarCube.State.variables.Health
<</script>>
recover
<<script>>
window.healSanity(20);
<</script>>
<<script>>
window.healHealth(20);
<</script>>
decrease
<<script>>
window.decreaseSanity(20);
<</script>>
<<script>>
window.decreaseHealth(20);
<</script>>
ITEMS:
añadir objeto para vender
<script>
window.addMissionItem('lockpick');
Object.values(SugarCube.State.variables.inventory).forEach(slots => {
slots.forEach(item => {
if (item && item.missionItemId === 'lockpick') {
item.isSellable = true;
}
});
});
</script>
<<script>>
window.addMissionItem("lockpick");
<</script>>
remove items
<<discardItem "mission_lockpick">>
<<if $inventory.hasItem("someItem") && $inventory.getItem("brass_key").isKey>>
This is a key item - you can use it to unlock something
<<elseif $inventory.hasItem("someItem") && $inventory.getItem("someItem").isDocument>>
This is a document - you can read it for more information
<</if>>
<<script>>
addMedkit(3);
addBandages(3);
addAntiBiotics(2);
addStim(2);
<</script>>
<<script>>
addSanityItem('calmingPills',2)
addSanityItem('AntiDepressants',2)
<</script>>
<<script>>
window.addCheapBattery(2);
window.addMediumBattery(3);
window.addDuracellBattery(4);
<</script>>
Add weapons and ammo
Gun:
<<script>>
window.addWeapon('Pistol');
<</script>>
Shotgun
<<script>>
window.addWeapon('Shotgun')
<</script>>
Rifle:
<<script>>
window.addWeapon('Rifle')
<</script>>
Ammunition:
Gun:
<<script>>
window.addAmmo('9mm', 30) // Standard pistol ammo
<</script>>
<<script>>
window.addAmmo('expansive', 10) // High damage pistol ammo
<</script>>
<<script>>
window.addAmmo('incendiary', 7)
<</script>>
Shotgun:
<<script>>
window.addAmmo('shells', 8)
<</script>>
<<script>>
window.addAmmo('slug', 6)
<</script>>
<<script>>
window.addAmmo('dragon', 4)
<</script>>
Rifle:
<<script>>
window.addAmmo('rifle_rounds', 30)
<</script>>
<<script>>
window.addAmmo('piercing', 25)
<</script>>
<<script>>
window.addAmmo('tracer', 20)
<</script>>
// Add weapon upgrades
// Laser sight for pistol
<<script>>
window.addWeaponUpgrade('pistolAccuracy')
<</script>>
// Recoil compensator for pistol
<<script>>
window.addWeaponUpgrade('pistolRecoil')
<</script
// Extended magazine for pistol>>
<<script>>
window.addWeaponUpgrade('pistolMagazine')
<</script>>
// Match grade barrel for pistol
<<script>>
window.addWeaponUpgrade('pistolBarrel')
<</script>>
window.addWeaponUpgrade('shotgunChoke') // Adjustable choke for shotgun
window.addWeaponUpgrade('shotgunMagazine') // Extended tube for shotgun
window.addWeaponUpgrade('shotgunPump') // Speed pump for shotgun
window.addWeaponUpgrade('shotgunBarrel') // Extended barrel for shotgun
window.addWeaponUpgrade('rifleBipod') // Tactical bipod for rifle
window.addWeaponUpgrade('rifleMagazine') // Drum magazine for rifle
window.addWeaponUpgrade('rifleScope') // Advanced scope for rifle
window.addWeaponUpgrade('rifleBarrel') // Heavy barrel for rifle<<goto "io">>
<<set $bag = 1>>
<<script>>
setup.phoneSystem.addObjective(
"Talk to Captain Havook",
"Go to captain's office and talk to him",
'main',
'talk_havook' // ID
);
<</script>>
<<script>>
window.addWeapon('Pistol');
<</script>>
<<script>>
window.addAmmo('9mm', 50)
<</script>><div id="ConversationBox">
<div id="Ntext">You look at the desk again, but now it feels emptier, more distant. The papers are still there, scattered, but they no longer carry the same weight. Without your bag leaning against the leg, the place feels even more abandoned, as if the trace of your presence is slowly fading away. It’s strange how something so small can make everything feel so different.</div>
<div class="links">
<th>[[Back|io]]</th>
</div>
</div>
/*<<SanityMessage "-10 Sanity">>*/
<<widget "SanityMessage">>
<<set _mensaje to $args[0]>>
<<run setTimeout(function() {
var div = document.createElement("div");
div.classList.add("game-notification");
div.innerHTML = _mensaje;
// Agregar la clase de tipo (puedes personalizar este tipo si lo necesitas)
div.classList.add("info");
// Crear el contenedor de notificaciones si no existe
var container = document.getElementById("notification-container");
if (!container) {
container = document.createElement("div");
container.id = "notification-container";
document.body.appendChild(container);
}
// Añadir el mensaje al contenedor
container.appendChild(div);
// Agregar la animación de entrada
setTimeout(function() {
div.classList.add("fade-out");
}, 4000);
// Eliminar el mensaje después de que se desvanezca
setTimeout(function() {
div.remove();
}, 5000);
}, 200)>>
<</widget>>
<style>
/* Estilo para el mensaje */
.game-notification {
position: relative;
top: 20px;
right: 20px;
background: rgba(0, 0, 0, 0.9);
color: white;
padding: 12px 20px;
border-radius: 8px;
z-index: 9999;
animation: slideIn 0.5s ease-out;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
max-width: 300px;
backdrop-filter: blur(5px);
border: 1px solid rgba(255, 255, 255, 0.1);
}
/* Añadir borde azul claro para notificaciones */
.game-notification.info {
border-left: 4px solid #3498db;
}
/* Animación de entrada */
@keyframes slideIn {
from {
transform: translateX(-20px);
opacity: 0;
}
to {
transform: translateX(0);
opacity: 1;
}
}
/* Animación de salida */
@keyframes fadeOut {
from {
transform: translateX(0);
opacity: 1;
}
to {
transform: translateX(100%);
opacity: 0;
}
}
/* Contenedor para las notificaciones */
#notification-container {
position: fixed;
top: 20px;
right: 20px;
display: flex;
flex-direction: column;
gap: 10px;
z-index: 9999;
pointer-events: none;
}
.game-notification {
pointer-events: auto;
margin-bottom: 10px;
}
</style>
<div id="ConversationBox">
<div id="Ntext">You push the bottle of alcohol aside with determination, making it clear you don't need it. Instead, you reach out and take a glass of fresh water, feeling how the crystal-clear liquid offers a calm that alcohol could never provide.</div>
<<if $Naked is true>>
<div id="Pensamiento">It's better not to fall back into old habits. Every time you give in, you move further away from the person you're trying to be. Today, control is stronger than temptation.</div>
<div id="Ntext">As you think, your hand glides gently over your body, brushing across your chest before slowly descending.</div>
<div id="Pensamiento">Hmm... I didn’t realize how desperate I was for action. It’s probably best if I focus on the Gulliver rescue case, but I’m so excited... I don’t even remember the last time.</div>
<<else>>
<div id="Pensamiento">It's better not to fall back into old habits. Every time you give in, you move further away from the person you're trying to be. Today, control is stronger than temptation. It’s probably better I get to work on the Gulliver rescue case. The client is getting quite restless.</div>
<</if>>
<div class="links">
<<if $Naked is true>>
<th>[[Descend the hand|intromasturbation]]</th>
<</if>>
<th>[[Check the missing poster|introcaseold]]</th>
</div>
</div>
<div id="ConversationBox">
<div id="Ntext">You look at the sheet in front of you. The image of a gray cat with yellow eyes occupies the center, accompanied by the words "Missing." The $3,000 reward is written in bold, far too high for a lost cat.</div>
<div id="Pensamiento">$3,000 for a damn cat. Something doesn’t add up. A lost cat isn’t worth that much, right? Maybe there’s more to this. Why such a generous offer? And why am I so intrigued by this seemingly insignificant case? Maybe it’s the reward. Or maybe... I’m just getting hooked on the idea that not everything is as it seems again... </div>
<<say $Mc>>If what I thought, it’s just a cat that escaped.<</say>>
<div id="Ntext">With a sigh, you leave the paper on the desk and glance at the phone, thinking about what to do next.</div>
<div id="Pensamiento">The details are sparse: the cat, the reward, and an address. Nothing I haven't seen before. But that money... that's what's keeping me uneasy.</div>
<div class="links">
<th>[[Continue reading|introcaseold2]]</th>
</div>
<img id="event-image" src="img/documents/guli.png">
</div>
<<set $gulidocument = true>>
<<script>>
setup.phoneSystem.addFile("Missing Poster", "img/documents/guli.png");
<</script>>
<<audio "papper" play volume 0.4>>
<<SanityMessage "New archive">><<if $Rodriguezintro isnot true>>
<div id="ConversationBox">
<div id="Ntext">As you leave the hallway and return to the precinct lobby, the door opens again, and the hustle of the place immediately surrounds you. Your gaze stops on Gabriela, who is still at her temporary desk, studying some photos and notes.
</div>
<div id="Pensamiento">Maybe I should talk to her; I don’t like leaving things like this.</div>
<div class="linksTwo">
<th>[[Talk to Rodriguez|rt]]</th>
</div>
<div class="links">
<th>[[Go through the corridor|ci2]]</th>
</div>
</div>
<<else>>
<div id="ConversationBox">
<div id="Ntext">As you leave the hallway and return to the precinct lobby, the door opens again, and the hustle of the place immediately surrounds you. Your gaze stops on Gabriela, who is still at her temporary desk, studying some photos and notes.</div>
<div id="Pensamiento">I've already talked to Gabi, I don't think she wants to hear from me again.</div>
<div class="links">
<th>[[Go through the corridor|ci2]]</th>
</div>
</div>
<</if>>
<<set $introC = true>>
<div id="LocationName">Police station</div><div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<div id="Ntext">You decide to venture deeper into the forest, leaving behind any trace of safety. The tall, twisted trees form a natural canopy that blocks almost all light. The ground, covered in leaves and gnarled roots, crunches beneath your steps. A chilling wind blows through the branches, carrying distant whispers and the faint echo of howls. As you press on, the forest seems to close in around you, its stillness broken occasionally by the fleeting movement of something in the shadows.</div>
<<default>>
<div id="Ntext">Finds nothing of interest.</div>
<</switch>>
<div class="linksTwo">
<th>[[Continue exploring]]</th>
</div>
<div class="links">
<th>[[Back to the path|Forest]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">Finds nothing of interest.</div>
<div class="linksTwo">
<th>[[Continue exploring|Continue exploring2]]</th>
</div>
<div class="links">
<th>[[Back to the path|Forest]]</th>
</div>
</div>
<div id="LocationName">Forest</div><<switch visited()>>
<<case 1>>
<div id="ConversationBox">
<div id="Ntext">Distant howls break the silence of the night, a wild cry that chills your bones. The sound grows closer, more intense, until you can hear the crunch of leaves beneath heavy, purposeful footsteps. Two shadows emerge from the trees, their eyes glowing with deadly intensity. They move toward you with lethal agility, as if they know you've noticed them. There's no doubt, they've come for you.
Before you can react, one of the wolves lets out a low growl, while the other steps forward, eyes fixed on you. Suddenly, both of them lunge at you, their razor-sharp teeth gleaming in the moonlight. The danger is imminent, and you have no choice but to prepare to defend yourself.</div>
<<say $Mc>>Ohh, shit!<</say>>
<div class="links">
<th>[[Fight|ForestBattle]]</th>
</div>
</div>
<<timed 9s>>
<div id="npc-container">
<img src="img/monsters/wolf.png" style="
width: 100%;
height: 100%;
position: absolute;
top: 1px;
right: 1px;
border-radius: 10px;
">
</div>
<</timed>>
<<timed 9s>>
<<audio "wolf1" play volume 0.4>>
<</timed>>
<<audio "wolf1" play volume 0.1>>
<<default>>
<div id="ConversationBox">
<div id="Ntext">A fierce wolf approaches, baring its sharp teeth. It lets out a growl and lunges at you. The danger is imminent, and you must prepare to fight.</div>
<<set $Randomcoment = random(3)>>
<<if $Randomcoment gte 2>>
<<say $Mc>>Shit!<</say>>
<</if>>
<div class="links">
<th>[[Fight|ForestBattle]]</th>
</div>
</div>
<<timed 2s>>
<div id="npc-container">
<img src="img/monsters/wolf.png" style="
width: 100%;
height: 100%;
position: absolute;
top: 1px;
right: 1px;
border-radius: 10px;
">
</div>
<</timed>>
<<timed 2s>>
<<audio "wolf1" play volume 0.4>>
<</timed>>
<</switch>>
<<set $Fwolf = 1>><div id="ConversationBox"></div>
<<set $RandomWolf = random(10)>>
<<if $RandomWolf gte 0>>
<<audio "wolf2" play volume 0.2>>
<<script>>
startBattle('normalWolf', 18);
<</script>>
<<elseif $RandomWolf gt 5>>
<<audio "wolf2" play volume 0.2>>
<<script>>
startBattle('normalWolf', 20);
<</script>>
<<elseif $RandomWolf gt 8>>
<<audio "wolf2" play volume 0.2>>
<<script>>
startBattle('strongWolf', 20);
<</script>>
<</if>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacketpistol.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoatpistol.png")>>
<</if>>
<<set $RandomReward = random(3)>>
<div id="ConversationBox">
<<if $RandomReward is 0>>
<div id="Ntext">Searching through the forest, you find some boxes with:
<span style="color: #22b22e;">5 9mm bullets, 1 battery</span>.</div>
<<script>>
window.addCheapBattery(1);
addAmmo('9mm', 5)
<</script>>
<<elseif $RandomReward is 1>>
<div id="Ntext">Searching through the forest, you find some boxes with:
<span style="color: #22b22e;">2 batteries</span>.</div>
<<script>>
window.addCheapBattery(2);
<</script>>
<<elseif $RandomReward is 2>>
<div id="Ntext">Searching through the forest, you find some boxes with:
<span style="color: #22b22e;">2 bandages</span>.</div>
<<script>>
addBandages(2);
<</script>>
<<elseif $RandomReward is 3>>
<div id="Ntext">Searching through the forest, you find nothing.</div>
<</if>>
<div class="links">
<th>[[Continue exploring]]</th>
<th>[[Back to the path|Forest]]</th>
</div></div>
<<cacheaudio "wolf1" "media/enemies/wolf-howl.mp3">>
<<cacheaudio "wolf2" "media/enemies/wolves-howl.mp3">>
<<cacheaudio "wolf3" "media/enemies/monsterwolf-howl.mp3">>
<<cacheaudio "werewolf" "media/enemies/werewolf.mp3">>
<<cacheaudio "crazyNurse" "media/enemies/woman-scream.mp3">> imposibleAberration: {
name: 'Imposible Aberration',
hp: 200,
maxHp: 200,
image: 'img/monsters/1.png',
damage: { min: 100, max: 140 },
description: 'Its mere existence defies the laws of nature, genetics, physics... in fact, it violates all laws.',
speed: 15,
range: 0
},
demonSoldier: {
name: 'Demoniac Soldier',
hp: 150,
maxHp: 150,
image: 'img/monsters/1.png',
damage: { min: 30, max: 46 },
description: 'A stronger demon. It specializes in powerful attacks.',
speed: 10,
range: 0
},
demonRunner: {
name: 'Demonian Runner',
hp: 100,
maxHp: 100,
image: 'img/monsters/1.png',
damage: { min: 12, max: 18 },
description: 'A fast and agile demon, moving at high speed and attacking quickly.',
speed: 25,
range: 0
},
practiceTarget: {
name: 'Practice target.',
hp: 100,
maxHp: 100,
image: 'img/monsters/target.png',
damage: { min: 0, max: 0 },
description: 'A standard practice target',
speed: 0,
range: 0
},
shadowCreature: {
name: 'Shadow Creature',
hp: 100,
maxHp: 100,
image: 'img/monsters/1.png',
damage: { min: 25, max: 50 },
description: 'A dark entity that lurks in the shadows',
speed: 3,
range: 0
},
nurseNaked: {
name: 'Mad nurse',
hp: 150,
maxHp: 150,
image: 'img/monsters/nurses/naked_nurse1.png',
damage: { min: 10, max: 20 },
description: 'A former nurse who lost her mind',
speed: 1,
range: 0
},
madNurse: {
name: 'Mad nurse',
hp: 150,
maxHp: 150,
image: 'img/monsters/nurses/naked_nurse2.png',
damage: { min: 15, max: 25 },
description: 'A former nurse who lost her mind',
speed: 1,
range: 0
},
crazyNurse: {
name: 'Mad nurse',
hp: 150,
maxHp: 150,
image: 'img/monsters/nurses/naked_nurse3.png',
damage: { min: 30, max: 40 },
description: 'A former nurse who lost her mind',
speed: 1,
range: 0
},
strongNurse: {
name: 'Mad nurse',
hp: 150,
maxHp: 150,
image: 'img/monsters/nurses/naked_nurse4.png',
damage: { min: 10, max: 15 },
description: 'A former nurse who lost her mind',
speed: 1,
range: 0,
},
prgwoman: {
name: 'A woman pregnant',
hp: 120,
maxHp: 120,
image: 'img/monsters/patients/prgwoman.png',
damage: { min: 12, max: 18 },
description: 'A lobotomized patient',
speed: 1,
range: 0
},
lobotomizedPatient: {
name: 'Lobotomized patient',
hp: 120,
maxHp: 120,
image: 'img/monsters/patients/lbpatient.png',
damage: { min: 12, max: 18 },
description: 'A lobotomized patient',
speed: 1,
range: 0
},
madPatient: {
name: 'Lobotomized Patient',
hp: 130,
maxHp: 130,
image: 'img/monsters/patients/madpatient.png',
damage: { min: 18, max: 24 },
description: 'A mad patient',
speed: 1,
range: 0
},
locoPatient: {
name: 'Lobotomized Patient',
hp: 130,
maxHp: 130,
image: 'img/monsters/patients/madpatient3.png',
damage: { min: 18, max: 24 },
description: 'A mad patient',
speed: 1,
range: 0
},
fappingPatient: {
name: 'Lobotomized Patient',
hp: 130,
maxHp: 130,
image: 'img/monsters/patients/patient1.png',
damage: { min: 18, max: 24 },
description: 'A mad patient',
speed: 1,
range: 0
},
fastPatient: {
name: 'Lobotomized Runner',
hp: 130,
maxHp: 130,
image: 'img/monsters/patients/fast_patient.png',
damage: { min: 18, max: 24 },
description: 'A mad runner patient',
speed: 4,
range: 0
},
whelsMan: {
name: 'Rafaelus',
hp: 150,
maxHp: 150,
image: 'img/monsters/patients/whels_man.png',
damage: { min: 100, max: 130 },
description: 'A body in a whelchair',
speed: 8,
range: 0
},
normalWolf: {
name: 'Wolf',
hp: 70,
maxHp: 70,
image: 'img/monsters/wolf.png',
damage: { min: 12, max: 18 },
description: 'A wild wolf',
speed: 10,
range: 0
},
strongWolf: {
name: 'Wolf',
hp: 90,
maxHp: 90,
image: 'img/monsters/wolf2.png',
damage: { min: 12, max: 18 },
description: 'A wild wolf, looks strong',
speed: 10,
range: 0
},
werewolf: {
name: 'Cave Werewolf',
hp: 200,
maxHp: 200,
image: 'img/monsters/werewolf.png',
damage: { min: 50, max: 58 },
description: 'Looks like a demoniac mutation from a wolf and a human',
speed: 5,
range: 0
},<<switch visited()>>
<<case 1>>
<div id="ConversationBox">
<div id="Ntext">Suddenly, a sharp sound breaks the silence: a low, guttural growl that seems to echo through the entire forest. Emerging from the shadows before you is a creature that barely seems of this world. The air around it seems to pulse with a malevolent energy. Its presence is overwhelming, and every fiber of your being knows this is no ordinary animal—it’s a predator born from the depths of an unknown hell.</div>
<<say $Mc>>Oh my god! what the fuck is this? A werewolf?<</say>>
<div id="Pensamiento">What the... is that real?</div>
<div class="links">
<th>[[Fight|ForestBattleDW]]</th>
</div>
</div>
<<timed 9s>>
<div id="npc-container">
<img src="img/monsters/werewolf.png" style="
width: 100%;
height: 100%;
position: absolute;
top: 1px;
right: 1px;
border-radius: 10px;
">
</div>
<</timed>>
<<timed 9s>>
<<audio "wolf3" play volume 0.3>>
<</timed>>
<<audio "wolf3" play volume 0.05>>
<<default>>
<div id="ConversationBox">
<div id="Ntext"></div>
<<set $Randomcoment = random(5)>>
<<if $Randomcoment gt 3>>
<<say $Mc>>Shit! Again that wolf.<</say>>
<</if>>
<div class="links">
<th>[[Fight|ForestBattleDW]]</th>
</div>
</div>
<<timed 2s>>
<div id="npc-container">
<img src="img/monsters/werewolf.png" style="
width: 100%;
height: 100%;
position: absolute;
top: 1px;
right: 1px;
border-radius: 10px;
">
</div>
<</timed>>
<<timed 2s>>
<<audio "wolf3" play volume 0.3>>
<</timed>>
<</switch>>
<<set $Fdiabolicwolf = 1>><div id="ConversationBox"></div>
<<script>>
startBattle('diabolicWolf', 20);
<</script>>
<<audio "wolf3" play volume 0.05>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacketpistol.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoatpistol.png")>>
<</if>>
<div id="ConversationBox">
<div id="Pensamiento">Solitude has its advantages. I fell free...</div>
<div id="Ntext">Just as the thought settles, a sharp pain shoots through your head. It’s sudden and jarring, like a cruel reminder that the peace is fleeting. You press your fingers to your temples, trying to steady the thrum, but the ache lingers, gnawing at the edges of your focus.</div>
<<say $Mc>>Damn... my head’s spinning... I need a break. I’d better take one of my pills.<</say>>
<div class="links">
<th>[[Pick the pills|intropills]]</th>
</div>
</div>
<<set $wakeup = 1>><div id="ConversationBox">
<div id="Ntext">You lie down on your bed, letting the softness of the sheets wrap around you. Your fingers begin to glide over your skin, first slowly, but gradually picking up speed in an attempt to relieve a pent-up tension. You close your eyes, allowing your mind to wander through fleeting sensations and thoughts.</div>
<div id="Pensamiento">Oh... yes, right there... lick right there...</div>
<div id="Ntext">Time seemed to stand still for a moment, as if the outside world didn’t exist. A gentle current of electricity ran through your body, making you arch your back slightly.</div>
<<say $Mc>>Oh..! Hmm...<</say>>
<div id="videoPlaceholder"></div>
<<script>>
window.setupHorizontalVideo("videoPlaceholder", "media/casey/pussy.mp4", 90, "cover");
<</script>>
<div class="links">
<th>[[Faster|introPhone]]</th>
</div>
</div>
<<audio "newstart" stop>>
<<script>>
setup.phoneSystem.unlockMedia("Me", "video", "media/casey/pussy.mp4");
<</script>><div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<div id="Ntext">The bathroom is small but functional. A water-stained mirror hangs above the sink, alongside some scattered toiletries. The shower, with a half-rotten plastic curtain hanging precariously, and the worn-out tiled floor, give the bathroom an almost unsettling feel. In one corner, a small medicine cabinet is closed, its contents likely forgotten, but always within reach when needed.</div>
<<default>>
<div id="Ntext">The bathroom is small but functional. A water-stained mirror hangs above the sink, alongside some scattered toiletries. </div>
<</switch>>
<div class="linksTwo">
<th>[[Check the mirror|intromirror]]</th>
<th>[[Check the cabinet|intromedkit]]</th>
</div>
<div class="links">
<th>[[Exit|introflat]]</th>
</div>
</div>
<div id="LocationName">Bathroom</div><div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<div id="Ntext">The space is small but functional. A desk with a computer and an old printer, some disorganized papers, occupies one corner, while the bed, with a blanket thrown on carelessly, rests near a wardrobe with slightly misaligned doors. The dim lighting from a desk lamp creates an atmosphere that is both practical and messy, the perfect reflection of the pace of life in this place.</div>
<<say $Mc>>Everything I need to work and sleep...<</say>>
<div id="Pensamiento">Combining productivity and comfort in one space...</div>
<<say $Mc>>Sure, haha... That's what the guy who rented me the apartment told me.<</say>>
<<default>>
<div id="Ntext">The space is small but functional: a desk with everything you need to work and, right next to it, the bed, combining productivity and comfort in one space—or at least that's what you like to think.</div>
<</switch>>
<div class="linksTwo">
<th>[[Check the desk|checkdesk]]</th>
</div>
<div class="links">
<th>[[Go to entrance|introflat2]]</th>
<th>[[Go to bathroom|introtoilet]]</th>
</div>
</div>
<div id="LocationName">Office</div>
<<if $introbatteries is true>>
<div id="ConversationBox">
<div id="Ntext">You open the drawer again. There's nothing left inside, just emptiness.</div>
<div class="links">
<th>[[Back|introflat2]]</th>
</div>
<img id="event-image" src="img/events/homedrawers.png">
</div>
<<else>>
<div id="ConversationBox">
<div id="Ntext">You open the drawers of the entrance table. The only thing inside is a pack of <span style="color: #22b22e;">4 cheap batteries</span>. Nothing else interesting. A faint smell of dust rises as you close the drawer.</div>
<<say $Mc>>Well, some batteries could come in handy, especially if you're heading to a dark, abandoned place.<</say>>
<div class="links">
<th>[[Back|introflat2]]</th>
</div>
<img id="event-image2" src="img/events/homedrawers.png">
</div>
<<script>>
window.addCheapBattery(4);
<</script>>
<<set $introbatteries = true>>
<</if>><div id="ConversationBox">
<<if $Naked is true>>
<<switch visited()>>
<<case 1>>
<div id="Ntext">The entrance to the apartment is narrow, but just enough to give a sense of direct access to your life. The slightly worn wooden floor stretches into the small hallway that leads to the office and bathroom. An entry table rests against the wall, cluttered with items like keys, letters, and an unlit lamp. The dim light from a ceiling fixture barely illuminates the space, making the entry feel somewhat gloomy, as if it hasn't been updated in years. The atmosphere is simple, but as always, a reminder of what your life is like now.</div>
<<default>>
<div id="Ntext">The entrance to the apartment is narrow, but just enough to give a sense of direct access to your life. </div>
<<say $Mc>>It’s probably best if I get dressed before heading out into the streets.<</say>>
<</switch>>
<<else>>
<<switch visited()>>
<<case 1>>
<div id="Ntext">The entrance to the apartment is narrow, but just enough to give a sense of direct access to your life. The slightly worn wooden floor stretches into the small hallway that leads to the office. An entry table rests against the wall, cluttered with items like keys, letters, and an unlit lamp. The dim light from a ceiling fixture barely illuminates the space, making the entry feel somewhat gloomy, as if it hasn't been updated in years. The atmosphere is simple, but as always, a reminder of what your life is like now.</div>
<<default>>
<div id="Ntext">The entrance to the apartment is narrow, but just enough to give a sense of direct access to your life. </div>
<</switch>>
<</if>>
<<if $Naked is true>>
<div class="linksTwo">
<th>[[Check the drawers|introbatteries]]</th>
<th>[[Put your clothes on|dressed]]</th>
</div>
<div class="links">
<th>[[Go to office|introflat]]</th>
</div>
<<else>>
<div class="linksTwo">
<th>[[Check the drawers|introbatteries]]</th>
</div>
<div class="links">
<th>[[Go to office|introflat]]</th>
<<if $introgun is true>>
<th>[[Leave the apartment|intropasillo]]</th>
<</if>>
</div>
<</if>>
</div>
<div id="LocationName">Home entrance</div><div id="ConversationBox">
<<say $Mc>>Time to stop scandalizing the furniture and find something to wear.<</say>>
<div id="Ntext">With a sigh, you put on your underwear and then slip into a fitted black t-shirt that feels comfortable and versatile. You grab a pair of dark jeans—durable and practical—and lace up your boots firmly, preparing yourself for whatever lies ahead. You approach the wardrobe and open it, examining the clothing options in front of you. Your gaze settles on two items: a sleek, shiny new black leather jacket with a modern and bold look, and a light brown trench coat, worn by time but familiar, like an old friend that has always been there during the toughest moments.</div>
<div class="links">
<th>[[Black jacket|blackjacketIntro]]</th>
<th>[[Trench coat|trenchcoatIntro]]</th>
</div>
</div>
<<set $Naked = false>>
<<run changeImage("img/characters/casey/casey2.png")>>
<<set $Naked = false>>
<<script>>
setup.phoneSystem.unlockMedia("Me", "image", "img/characters/casey/casey2.png");
<</script>><div id="ConversationBox">
<div id="Ntext">The desk shows its age, with a surface scratched and dented from years of wear. A modest computer sits on one side. Scattered papers, a coffee mug with a faint ring at the bottom, and a cracked pen holder clutter the space. The drawers are slightly crooked, hinting at frequent use.</div>
<div class="links">
<th>[[Open the drawer|introgun]]</th>
<th>[[Check the computer|introsave2]]</th>
<th>[[Leave the desk|introflat]]</th>
</div>
<img id="event-image2" src="img/events/homedesk.png">
</div><div id="ConversationBox">
<div id="Ntext">The computer whirs softly as it powers on, the glow of the screen flickering weakly in the dim light. The interface is bare, a relic of simpler times.
The soft hum of the machine fills the silence, offering a moment of quiet focus.</div>
<div class="links">
<th><a tabindex="0" role="button" id="save-button">Save/Load</a></th>
<th>[[Go back|checkdesk]]</th>
</div>
<img id="event-image2" src="img/events/homedesk.png">
</div>
<<script>>
// Ensure SugarCube save functionality
$(document).ready(function() {
// Direct save method for SugarCube
$('#save-button').on('click', function() {
// Explicitly use SugarCube's save method
try {
// Open saves dialog
UI.saves();
} catch (error) {
// Fallback error handling
console.error("Save functionality error:", error);
alert("Save function could not be executed.");
}
});
});
<</script>><<switch visited()>>
<<case 1>>
<div id="ConversationBox">
<div id="Ntext">You step out of the apartment, and the door closes with a soft click behind you. The hallway is dimly lit, with the scent of old wood and dust in the air. Your footsteps resonate softly on the floor as you make your way toward the stairs.
As you descend toward the street, you notice that one of your neighbor's doors is slightly ajar. As you pass by the door, you think you hear faint, distant screams—almost imperceptible—reaching your ears. They sound like a woman's.</div>
<<say $Mc>>Was that?<</say>>
<div id="Pensamiento">Sneaking in just like that would be intrusive, but what if someone needs help?</div>
<div class="linksTwo">
<th>[[Check neighbours|neighbourspy]]</th>
</div>
<div class="links">
<th>[[Go to street|introstreet]]</th>
<th>[[My apartment|introflat2]]</th>
</div>
</div>
<<case 2>>
<<if $neighbourspy is true>>
<div id="ConversationBox">
<div id="Ntext">As you pass through the hallway again, your steps feel unsteady on the wooden floor. Your eyes settle on the neighbors' door, now firmly closed. You feel a slight shiver as a memory slips into your mind: the unexpected sight you encountered upon entering.</div>
<div id="Pensamiento">Why did I have to do it? I shouldn't have done it... but now it's in my head forever.</div>
<div id="Ntext">You pause for a moment in front of the door, the echo of your own thoughts pounding in your head. Did you really enter out of curiosity, or was it just an accident? The doubt torments you as you move toward the stairs, trying to push that image from your mind.</div>
<div class="links">
<th>[[Go to street|introstreet]]</th>
<th>[[My apartment|introflat2]]</th>
</div>
</div>
<<else>>
<div id="ConversationBox">
<div id="Ntext">You cross the hallway again, your steps faintly echoing on the wooden floor. As you pass in front of the neighbor's door, you notice that it's now closed.</div>
<div id="Pensamiento">It was probably nothing.</div>
<div class="links">
<th>[[Go to street|introstreet]]</th>
<th>[[My apartment|introflat2]]</th>
</div>
</div>
<</if>>
<<default>>
<div id="ConversationBox">
<div id="Ntext">You cross the hallway again, your steps faintly echoing on the wooden floor.</div>
<div class="links">
<th>[[Go to street|introstreet]]</th>
<th>[[Enter in your home|introflat2]]</th>
</div>
</div>
<</switch>>
<div id="LocationName">Apartment hallway</div><div id="ConversationBox">
<div id="Ntext">As you get closer the room, the screams break the silence once again, but you notice a subtle change in their tone. Although they clearly express pain, they also carry a faint hint of pleasure, like distant echoes of something you had forgotten. Even if only for a moment, they remind you of a time that now feels very far away.</div>
<<say $Mc>>Oh wow... I think it's...<</say>>
<div id="Pensamiento">It doesn’t seem like anyone needs help. I think I should leave.</div>
<div id="Ntext">
You try to turn and leave, but the moans hit you like a punch straight to the chest. A mix of anger and uncontrollable desire begins to burn inside you, rooting you to the spot as if chains were holding you in place. The door is slightly ajar, and no matter how hard you fight the urge, you can’t stop yourself from peeking inside.</div>
<div class="links">
<th>[[Glance|peekintro]]</th>
</div>
</div><<if $Rodriguezintro is true>>
<div id="ConversationBox">
<div id="Ntext">You descend the stairs of your building, the evening air thick with humidity, sticking to your skin like a heavy garment. It's hot, but not unbearable, just uncomfortable. The main door creaks as you push it open, and the slight coolness from outside hits you with a bit of relief. You don't take long to notice her.
She's leaning against a lamppost a few meters away, smiling slightly while fiddling with her phone. Gabriela, your friend, the Detective who always knows how to bring out a smile, even if she’s not the most extroverted. It’s been a year since you reconciled, and though the fight that separated you is now a distant memory, the ease between the two of you is evident. The wind moves the strands of her high ponytail as the sun reflects off her dark hair, giving her a relaxed air, almost as if there had never been any distance between you.
Gabriela lifts her head and sees you, her eyes light up immediately, as if the simple act of seeing you there makes her feel that everything is right again, she laughs and waves at you while stepping away from the streetlight and walking toward you
</div>
<<say $Gabriela>>I was just about to send you a message!<</say>>
<div class="links">
<th>[[Hey Gabi!|introgabifriend]]</th>
</div>
</div>
<<else>>
<<goto "introstreet2">>
<</if>>
<<script>>
setup.phoneSystem.unlockMedia("Gabi", "image", "img/characters/rodriguez/gabriela.png");
<</script>><div id="ConversationBox">
<<say $Mc>>Hey, Gabi.<</say>>
<<say $Gabriela>>It’s been a while since we’ve had coffee, huh? I thought today would be a good day to catch up, maybe take a walk. How’s everything going with you?<</say>>
<<say $Mc>>But it’s only been three days since we last saw each other, did you already miss me that much?<</say>>
<<say $Gabriela>>Alright, alright! I may have exaggerated a bit, but honestly, coffee with you is never too much. Although, I’ll admit I’ve been thinking we should go out more often. Once a week isn’t enough.<</say>>
<div id="Ntext">You can’t help but smile at her energy, but something inside you tells you that this conversation won’t be as light as it seems.</div>
<<say $Mc>>I’m not going to lie, I could really use more time for us. Work doesn’t give me a break.<</say>>
<<say $Gabriela>>You can say that again! I just closed a complicated case, but now... I’ve found out that women are disappearing around the city. And you know, I’ve always been curious about those kinds of cases. I want them to assign me the investigation. It’s exactly the type of work I enjoy.<</say>>
<div id="Ntext">You tense up for a moment. You know that’s the case you’ve been assigned to, but you can’t tell her anything. Not yet. The verbal confidentiality agreement with Mayor Quentin prevents you from doing so. You try to stay calm as you listen to her.</div>
<div class="links">
<th>[[Respond vaguely|FriendGabiNoLie]]</th>
</div>
</div>
<<include "Gabi2">><div id="ConversationBox">
<<say $Gabriela>>So you're here. I thought you had disappeared forever.<</say>>
<<say $Mc>>I don't have time to talk, Gabriela.<</say>>
<div id="Ntext">Gabriela furrows her brow, surprised by the coldness. Her concern is obvious, but you keep moving forward. Gabriela follows you with her gaze, more uneasy than she lets on. She can't help but notice that you're agitated, in a hurry.</div>
<<say $Gabriela>>Where are you going so fast? I haven't seen you in two years, and now, suddenly, I see you leaving like this... What's going on, Casey?<</say>>
<div id="Ntext">Her voice is softer, as if unsure how to approach the topic, but it's clear something is bothering her about the way you're acting.</div>
<div class="links">
<th>[[Keep your distance|introgabinofriend1]]</th>
<th>[[Reveal a little|introgabinofriend2]]</th>
</div>
</div>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/casey1.png")>>
<</if>>
<<include "Gabi1">><div id="ConversationBox">
<<say $Mc>>Well, I’m sure someone competent will end up taking the case. The city can’t afford to leave something like this unresolved.<</say>>
<div id="Ntext">Gabriela frowns slightly, studying you, as if trying to read between the lines of what you just said.</div>
<<say $Gabriela>>Someone competent, huh? Who? You?<</say>>
<<say $Mc>>I’m just saying don’t worry so much. I’m sure everything will turn out fine.<</say>>
<<say $Gabriela>>Relax, its just a joke. You know what? How about we grab a coffee? You say there’s nothing going on, but your face says otherwise. Maybe talking for a while will help you relax.<</say>>
<<say $Mc>>I appreciate it, Gabi, but I can’t. I’m in a hurry, got a pending case. You know how it is. I can’t stay and chat right now.<</say>>
<<say $Gabriela>>Really? Wouldn’t a coffee help, even just for a little while? Not everything in life has to be work.<</say>>
<<say $Mc>>I know, but it’s not that simple. We’ll talk another day, I promise. Right now, I have to go.<</say>>
<<say $Gabriela>>Are you that busy? Aren’t you going to tell me anything about the case? Come on, Casey, you know I’m interested. What are you investigating this time? Who has you so caught up?<</say>>
<div class="links">
<th>[[We will be partners again|introgabifriendend2]]</th>
</div>
</div>
<<include "Gabi2">><div id="ConversationBox">
<<say $Mc>>It's nothing important. I don't have time to talk.<</say>>
<div id="Ntext">Gabriela takes a step towards you, clearly worried, but you keep walking without stopping. She doesn't seem willing to let you go so easily. Her face shows concern, but she doesn't know how to make you stop and explain. The anguish is clear in her voice. </div>
<<say $Gabriela>>Casey, please! I was worried... And now I see you, running as if you're running from something.<</say>>
<div id="Ntext">She knows something is wrong, but has no idea what it is.</div>
<div class="links">
<th>[[Lie|LieToGabi]]</th>
<th>[[Be evasive|NoLieToGabi]]</th>
</div>
</div>
<<include "Gabi1">>
<div id="ConversationBox">
<<say $Mc>>I have work, Gabriela. The case I'm talking about is complicated.<</say>>
<div id="Ntext">Gabriela looks at you intently, as if searching for more details, but doesn't get any further information. Her face shows concern, but she doesn't know how to make you stop and explain.</div>
<<say $Gabriela>>Casey, please, what's going on? I was worried... And now I see you, running as if you're running from something.<</say>>
<<say $Mc>>Worried? And why haven't I heard from you all this time?<</say>>
<<say $Gabriela>>Come on, Casey! I was mad at you, and you didn’t even say goodbye to me. That hurt, you know?<</say>>
<div id="Ntext">She knows something is wrong, but has no idea what it is.</div>
<div class="links">
<th>[[Lie|LieToGabi]]</th>
<th>[[Be evasive|NoLieToGabi]]</th>
</div>
</div>
<<include "Gabi1">><div id="ConversationBox">
<div id="Ntext">With a quiet decision, you reach for the light brown trench coat and slip it on. The worn fabric feels familiar and comforting as it settles over your shoulders. You leave the buttons unfastened, the coat hanging loosely around you like an old, trusted friend. Ready and steady, you adjust the collar while looking at yourself in the mirror, preparing yourself for whatever comes next.</div>
<<say $Mc>>It's time to break in my new jacket.<</say>>
<div class="links">
<th>[[Put on the trench coat|trenchcoatIntro]]</th>
<th>[[Get moving|introflat2jacket]]</th>
</div>
</div>
<<run changeImage("img/characters/casey/caseyjacket.png")>>
<div id="ConversationBox">
<div id="Ntext">With a quiet decision, you reach for the light brown trench coat and slip it on. The worn fabric feels familiar and comforting as it settles over your shoulders. You leave the buttons unfastened, the coat hanging loosely around you like an old, trusted friend. Ready and steady, you adjust the collar while looking at yourself in the mirror, preparing yourself for whatever comes next.</div>
<div class="links">
<th>[[Put on the jacket|blackjacketIntro]]</th>
<th>[[Get moving|introflatcoat]]</th>
</div>
</div>
<<run changeImage("img/characters/casey/caseycoat.png")>><<if $introcase isnot 2>>
<<goto "intro2">>
<<else>>
<<goto "introflat">>
<</if>>
<<set $Mc = {
Name: $playerName,
img: "img/characters/casey/casey-avatar2.png"
}>>
<<set $CaseyJacket = true>>
<<script>>
setup.phoneSystem.unlockMedia("Me", "image", "img/characters/casey/caseyjacket.png");
<</script>><<if $introcase isnot 2>>
<<goto "intro2">>
<<else>>
<<goto "introflat">>
<</if>>
<<set $CaseyCoat = true>>
<<script>>
setup.phoneSystem.unlockMedia("Me", "image", "img/characters/casey/caseycoat.png");
<</script>><div id="ConversationBox">
<div id="Ntext">You're about to walk away when, suddenly, the moans intensify. Your heart leaps, and you feel a shiver inside. You try to ignore the sound, but you can't; each moan makes you shiver and triggers an unexpected reaction within you. Your mind begins to imagine, but you force yourself to act immediately, determined to leave before anyone sees you.</div>
<<say $Mc>>Dammit! Why did I have to go in there?<</say>>
<div id="Pensamiento">I was just checking to see if someone was in danger. Nothing more than that. It was a mistake. I didn't mean to see this...</div>
<div id="Ntext">You step back from the apartment, covering your face with your hands in shame.
You shake your head, trying to clear the image from your mind as you take a few trembling breaths. You then exit the apartment and leave your neighbors behind, forgetting to close the ajar door.</div>
<div class="links">
<th>[[Exit|introstreet]]</th>
</div>
</div><<set $McMoney = $McMoney || 0>>
<<set $FranklinMoney = $FranklinMoney || 200>>
<<script>>
window.shopSystem = {
prices: {
// Ammo
'9mm 115-grain': { buy: 60, sell: 2, buyQty: 20, img: 'img/items/ammo/pistol/9mm.png' },
'9mm 147-grain': { buy: 70, sell: 4, buyQty: 10, img: 'img/items/ammo/pistol/expansive.png' },
'9mm Incendiary': { buy: 90, sell: 5, buyQty: 10, img: 'img/items/ammo/pistol/incendiary.png' },
'Shotgun Shell': { buy: 40, sell: 2, buyQty: 10, img: 'img/items/ammo/shotgun/shells.png' },
'Slug Shells': { buy: 40, sell: 2, buyQty: 10, img: 'img/items/ammo/shotgun/slug.png' },
'Dragon's Breath': { buy: 40, sell: 2, buyQty: 10, img: 'img/items/ammo/shotgun/dragon.png' },
'Rifle Rounds': { buy: 30, sell: 1, buyQty: 10, img: 'img/items/ammo/rifle/rounds.png' },
'Armor Piercing': { buy: 40, sell: 2, buyQty: 10, img: 'img/items/ammo/rifle/piercing.png' },
'Tracer Rounds': { buy: 60, sell: 3, buyQty: 10, img: 'img/items/ammo/rifle/tracer.png' },
// Healing
'Medkit': { buy: 80, sell: 30, img: 'img/items/heal/medkit.png' },
'Bandages': { buy: 30, sell: 15, img: 'img/items/heal/bandages.png' },
'Antibiotics': { buy: 50, sell: 25, img: 'img/items/heal/antibio.png' },
'Stims': { sell: 30, img: 'img/items/heal/stim.png' },
// Sanity
'Calming Pills': { buy: 35, sell: 15, img: 'img/items/sanity/pills.png' },
'Antidepressants': { buy: 60, sell: 30, img: 'img/items/sanity/antidep.png' },
// Batteries
'Cheap Battery': { buy: 10, sell: 5, img: 'img/items/lantern/cheap.png' },
'Medium Battery': { buy: 30, sell: 15, img: 'img/items/lantern/medium.png' },
'Duracell Battery': { sell: 25, img: 'img/items/lantern/elite.png' },
// Keys
'Lockpick': { sell: 30, img: 'img/items/keys/lockpick.png' },
'Chemicals': { sell: 20, img: 'img/items/keys/chemicals.png' },
},
notify: function(message, isError = false) {
const notification = $(`
<div class="shop-notification" style="
position: fixed;
top: 20px;
right: 20px;
background: #1e1e1e;
color: #f5f5f5;
border: 2px solid ${isError ? '#8b0000' : '#b18d17'};
padding: 10px;
border-radius: 5px;
font-family: 'Cinzel', serif;
text-align: center;
z-index: 9999;
opacity: 0.9;
max-width: 300px;
">
${message}
</div>
`).appendTo('body');
setTimeout(() => {
notification.fadeOut(300, function() {
$(this).remove();
});
}, 2000);
},
buyItem: function(itemName) {
const itemConfig = this.prices[itemName];
if (!itemConfig) {
this.notify(`Error: Invalid item ${itemName}`, true);
return false;
}
if (State.variables.McMoney < itemConfig.buy) {
this.notify('Not enough money!', true);
return false;
}
let success = false;
const quantity = itemConfig.buyQty || 1;
switch(itemName) {
// Pistol ammo
case '9mm 115-grain':
success = window.addAmmo('9mm', quantity);
break;
case '9mm 147-grain':
success = window.addAmmo('expansive', quantity);
break;
case '9mm Incendiary':
success = window.addAmmo('incendiary', quantity);
break;
// Shotgun ammo
case 'Shotgun Shell':
success = window.addAmmo('shells', quantity);
break;
case 'Slug Shells':
success = window.addAmmo('slug', quantity);
break;
case 'Dragon's Breath':
success = window.addAmmo('dragon', quantity);
break;
// Rifle ammo
case 'Rifle Rounds':
success = window.addAmmo('rounds', quantity);
break;
case 'Armor Piercing':
success = window.addAmmo('piercing', quantity);
break;
case 'Tracer Rounds':
success = window.addAmmo('tracer', quantity);
break;
// Healing items
case 'Medkit':
success = window.addMedkit(1);
break;
case 'Bandages':
success = window.addBandages(1);
break;
case 'Antibiotics':
success = window.addAntiBiotics(1);
break;
// Sanity items
case 'Calming Pills':
success = window.addSanityItem('calmingPills', 1);
break;
case 'Antidepressants':
success = window.addSanityItem('AntiDepressants', 1);
break;
// Batteries
case 'Cheap Battery':
success = window.addCheapBattery(1);
break;
case 'Medium Battery':
success = window.addMediumBattery(1);
break;
}
if (success) {
// Update player and Franklin's money
State.variables.McMoney -= itemConfig.buy;
State.variables.FranklinMoney += itemConfig.buy;
// Update displays
$('#money-display').text(State.variables.McMoney + '$');
$('#franklin-money-display').text(State.variables.FranklinMoney + '$');
this.notify(`Bought ${itemName} for $${itemConfig.buy}`);
this.updateDisplay();
return true;
}
return false;
},
sellItem: function(itemId) {
Object.entries(State.variables.inventory).forEach(([section, slots]) => {
slots.forEach((item, index) => {
if (item && item.id === itemId) {
const price = this.prices[item.name]?.sell;
if (!price) {
this.notify(`Cannot sell ${item.name}`, true);
return;
}
if (State.variables.FranklinMoney < price) {
this.notify("Not enough money to buy this", true);
return;
}
if (item.type === 'bullet_pack') {
const ammoToSell = Math.min(item.count, 10);
const totalPrice = price * ammoToSell;
if (State.variables.FranklinMoney < totalPrice) {
this.notify("Not enough money to buy all of this", true);
return;
}
item.count -= ammoToSell;
State.variables.McMoney += totalPrice;
State.variables.FranklinMoney -= totalPrice;
this.notify(`Sold ${ammoToSell} ${item.name} for $${totalPrice}`);
} else {
item.count--;
State.variables.McMoney += price;
State.variables.FranklinMoney -= price;
this.notify(`Sold ${item.name} for $${price}`);
}
if (item.count <= 0) {
State.variables.inventory[section][index] = null;
// Add this block to remove quickslot references
Object.entries(State.variables.inventory).forEach(([t, s]) => {
s.forEach((slotItem, i) => {
if (slotItem && slotItem.isQuickslotReference &&
slotItem.originalType === section &&
slotItem.originalSlot === index) {
State.variables.inventory[t][i] = null;
}
});
});
}
$('#money-display').text(State.variables.McMoney + '$');
$('#franklin-money-display').text(State.variables.FranklinMoney + '$');
this.updateDisplay();
window.updateCharacterMenu();
window.updateRelatedSystems();
}
});
});
},
isItemSellable: function(item) {
if (!item || item.count <= 0) return false;
if (item.type === 'weapon') return false;
return ['bullet_pack', 'battery', 'healing', 'sanity'].includes(item.type) || item.isSellable === true;
},
updateDisplay: function() {
const sellList = $('#sell-list');
if (!sellList.length) {
return;
}
sellList.empty();
let totalValue = 0;
let hasSellableItems = false;
Object.values(State.variables.inventory).forEach(slots => {
slots.forEach(item => {
if (item && this.isItemSellable(item)) {
hasSellableItems = true;
const price = this.prices[item.name]?.sell;
const imgSrc = this.prices[item.name]?.img || 'img/items/unknown.png';
if (price) {
const ammoToSell = item.type === 'bullet_pack' ?
Math.min(item.count, 10) : 1;
const totalPrice = price * ammoToSell;
totalValue += totalPrice;
const displayText = item.type === 'bullet_pack' ?
`${item.name} (${item.count} rounds) - $${price}/round` :
`${item.name} (${item.count}) - $${price}`;
// Check if Franklin has enough money
const canAfford = State.variables.FranklinMoney >= totalPrice;
const buttonClass = canAfford ? 'sell-button' : 'sell-button disabled';
const buttonAttr = canAfford ?
`onclick="window.shopSystem.sellItem('${item.id}')"` :
'disabled';
sellList.append(`
<div class="item-card">
<div class="item-image">
<img src="${imgSrc}" alt="${item.name}" onerror="this.src='img/items/unknown.png'">
</div>
<div class="item-details">
<div class="item-name">${displayText}</div>
<button class="${buttonClass}" ${buttonAttr}>
Sell${item.type === 'bullet_pack' ? ` ${ammoToSell}` : ''}
</button>
</div>
</div>
`);
}
}
});
});
if (!hasSellableItems) {
sellList.append('<div class="no-items">No items to sell</div>');
}
$('#money-display').text(State.variables.McMoney + '$');
$('#franklin-money-display').text(State.variables.FranklinMoney + '$');
},
switchTab: function(tab) {
if (tab === 'buy') {
$('#buy-container').show();
$('#sell-container').hide();
$('#buy-tab').addClass('active');
$('#sell-tab').removeClass('active');
} else {
$('#buy-container').hide();
$('#sell-container').show();
$('#buy-tab').removeClass('active');
$('#sell-tab').addClass('active');
this.updateDisplay();
}
},
// Updated function to generate product grid with improved layout
generateProductGrid: function() {
const categories = {
"Ammunition": [
'9mm 115-grain', '9mm 147-grain', '9mm Incendiary',
'Shotgun Shell', 'Slug Shells', 'Dragon's Breath',
'Rifle Rounds', 'Armor Piercing', 'Tracer Rounds'
],
"Healing": ['Medkit', 'Bandages', 'Antibiotics'],
"Sanity": ['Calming Pills', 'Antidepressants'],
"Batteries": ['Cheap Battery', 'Medium Battery']
};
const container = $('#buy-container');
container.empty();
Object.entries(categories).forEach(([category, items]) => {
// Create a section header only for categories below Ammunition
if (category !== "Ammunition") {
const categoryHeader = $(`<h2 class="category-header">${category}</h2>`);
container.append(categoryHeader);
}
const grid = $('<div class="product-grid"></div>');
items.forEach(item => {
const itemData = this.prices[item];
if (!itemData || !itemData.buy) return; // Skip items that can't be bought
const qtyText = itemData.buyQty ? `(${itemData.buyQty} units)` : '';
const card = $(`
<div class="product-card">
<div class="product-title">${item}</div>
<div class="product-image">
<img src="${itemData.img || 'img/items/unknown.png'}" alt="${item}" onerror="this.src='img/items/unknown.png'">
</div>
<div class="product-price">$${itemData.buy} ${qtyText}</div>
<button class="buy-button" onclick="window.shopSystem.buyItem('${item}')">Buy</button>
</div>
`);
grid.append(card);
});
container.append(grid);
});
}
};
// Initialize shop when document is ready
$(document).ready(function() {
if ($('#shop-container').length) {
window.shopSystem.generateProductGrid();
window.shopSystem.updateDisplay();
// Initialize money displays
$('#money-display').text(State.variables.McMoney + '$');
$('#franklin-money-display').text(State.variables.FranklinMoney + '$');
}
});
<</script>>
<div id="BoxShop">
<div id="shop-container">
<div class="shop-header">
<div id="money-display"></div>
<h1>Franklin's Supplies</h1>
<div id="franklin-money-display"></div>
</div>
<div class="shop-tabs">
<button id="buy-tab" class="tab-button active" onclick="window.shopSystem.switchTab('buy')">Buy</button>
<button id="sell-tab" class="tab-button" onclick="window.shopSystem.switchTab('sell')">Sell</button>
</div>
<div id="buy-container">
<!-- Generated dynamically by JS -->
</div>
<div id="sell-container" style="display: none;">
<div id="sell-list" class="sell-grid">
<!-- Dynamically populated by JavaScript -->
</div>
</div>
</div>
<div class="links">
[[Back|Cabin]]
</div>
</div>
<<include "Frank">>
<style>
.links {
top: 0em;
}
#BoxShop {
position: relative;
top: -15em;
left: -9em;
}
#shop-container {
max-width: 95%;
min-width: 320px;
max-height: 80vh;
min-height: 460px;
margin: 30px auto;
padding: 0px 20px;
background: #140707d1;
border-radius: 3px;
border: 1px solid #690000;
box-shadow: 0 0 20px #000000, inset 0 0 20px rgb(0 0 0);
overflow-y: auto;
backdrop-filter: blur(3px);
}
.shop-header {
display: flex;
justify-content: space-between;
align-items: center;
border-bottom: 1px solid #690000;
padding: 10px 0;
margin-bottom: -20px;
}
h1 {
text-align: center;
font-size: 28px;
margin: 0;
color: #e5b600;
font-family: 'Cinzel', serif;
text-shadow: 0 0 8px rgba(139, 0, 0, 0.6);
letter-spacing: 2px;
flex-grow: 1;
position: relative;
top: -22px;
}
#money-display {
font-size: 22px;
font-weight: bold;
color: #e5b600;
text-shadow: 0 0 8px rgb(255 0 0 / 60%);
font-family: 'Cinzel', serif;
text-align: right;
padding: 0 10px;
min-width: 80px;
letter-spacing: 1px;
position: relative;
top: 10px;
}
#franklin-money-display {
font-size: 22px;
font-weight: bold;
color: #e5b600;
text-shadow: 0 0 8px rgb(255 0 0 / 60%);
font-family: 'Cinzel', serif;
text-align: right;
padding: 0 10px;
min-width: 80px;
letter-spacing: 1px;
position: relative;
top: 10px;
}
button {
background: #1a0000;
color: #d7a900;
border: 1px solid #3a0000;
padding: 8px 12px;
border-radius: 3px;
cursor: pointer;
font-family: "Cinzel", serif;
transition: all 0.3s ease;
box-shadow: 0 0 5px rgba(139, 0, 0, 0.3);
text-shadow: 0 0 3px rgba(197, 0, 0, 0.5);
}
button:hover {
background: #300000;
border: 1px solid #8b0000;
box-shadow: 0 0 8px rgba(139, 0, 0, 0.5);
color: #00e5dc;
}
button.disabled {
opacity: 0.5;
cursor: not-allowed;
background: #1a0000;
color: #c50000;
border: 1px solid #3a0000;
}
button.disabled:hover {
background: #1a0000;
border: 1px solid #3a0000;
box-shadow: 0 0 5px rgba(139, 0, 0, 0.3);
color: #c50000;
}
.shop-tabs {
display: flex;
justify-content: center;
gap: 15px;
margin-bottom: 20px;
}
.tab-button {
padding: 10px 20px;
background: #1a0000;
border-radius: 2px;
border: 1px solid #690000;
color: #d9c27e;
cursor: pointer;
transition: all 0.3s ease;
font-family: "Cinzel", serif;
letter-spacing: 1px;
width: 120px;
}
.tab-button:hover {
color: #e0b34d;
text-shadow: 0 0 10px #ffbf04b3, 0 0 20px rgba(0, 0, 0, 0.5);
background: #3e3423;
border-color: #634d23;
}
.tab-button.active {
color: #e0b34d;
background: #3e3423;
text-shadow: 0 0 10px rgba(255, 191, 4, 0.7), 0 0 20px rgba(0, 0, 0, 0.5);
border-color: #634d23;
}
#sell-container {
position: relative;
top: -5em;
}
.shop-notification {
position: fixed;
top: 20px;
right: 20px;
background: rgba(10, 10, 10, 0.95);
color: #e0e0e0;
border: 2px solid #3a0000;
padding: 12px 20px;
border-radius: 3px;
font-family: 'Cinzel', serif;
text-align: center;
z-index: 9999;
opacity: 0.95;
max-width: 300px;
animation: fadeInNotif 0.4s ease-out;
box-shadow: 0 0 15px rgba(139, 0, 0, 0.4);
text-shadow: 0 0 3px rgba(224, 224, 224, 0.3);
}
@keyframes textFlicker {
0%, 100% { opacity: 1; }
98% { opacity: 1; }
99% { opacity: 0.9; }
}
@keyframes fadeInNotif {
from {
transform: translateY(-10px);
opacity: 0;
}
to {
transform: translateY(0);
opacity: 0.95;
}
}
@keyframes glowPulse {
0% { box-shadow: 0 0 5px rgba(139, 0, 0, 0.3); }
50% { box-shadow: 0 0 10px rgba(139, 0, 0, 0.5); }
100% { box-shadow: 0 0 5px rgba(139, 0, 0, 0.3); }
}
#shop-container::-webkit-scrollbar {
width: 8px;
}
#shop-container::-webkit-scrollbar-track {
background: #0a0000;
}
#shop-container::-webkit-scrollbar-thumb {
background-color: #3a0000;
border-radius: 3px;
border: 2px solid #0a0000;
}
.category-header {
color: #e5b600;
font-family: 'Cinzel', serif;
font-size: 18px;
margin: 20px 0 10px 0;
text-shadow: 0 0 4px rgba(139, 0, 0, 0.4);
border-bottom: 1px solid #3a0000;
padding-bottom: 5px;
text-align: left;
}
.product-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
gap: 10px;
}
.product-card {
background: #1a0000;
border: 1px solid #690000;
border-radius: 3px;
padding: 10px;
display: flex;
flex-direction: column;
align-items: center;
text-align: center;
transition: all 0.3s ease;
height: 180px; /* Fixed height for all cards */
justify-content: space-between;
}
.product-card:hover {
transform: translateY(-2px);
box-shadow: 0 0 12px rgba(139, 0, 0, 0.4);
border: 1px solid #ffbf04b3;
background: #3e3423;
}
.product-title {
color: #e5b600;
font-size: 16px;
font-weight: bold;
margin-bottom: 5px;
text-align: center;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
}
.product-image {
width: 50px;
height: 50px;
margin: 5px 0;
display: flex;
align-items: center;
justify-content: center;
}
.product-image img {
max-width: 100%;
max-height: 100%;
object-fit: contain;
filter: drop-shadow(0 0 3px rgba(139, 0, 0, 0.4));
}
.product-price {
color: #ffbf04b3;
font-size: 14px;
margin: 5px 0;
font-family: 'Courier New', monospace;
}
.buy-button, .sell-button {
width: 80%;
padding: 5px 0;
font-size: 14px;
animation: glowPulse 4s infinite;
margin-top: 5px;
border: 1px solid #634d23;
}
.buy-button:hover, .sell-button:hover {
background-color: #3e3423;
color: #d9c27e;
border: 1px solid #634d23;
}
.sell-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
gap: 10px;
}
.item-card {
background: #1a0000;
border: 1px solid #3a0000;
border-radius: 3px;
padding: 10px;
display: flex;
flex-direction: column;
transition: all 0.3s ease;
height: 160px;
justify-content: space-between;
}
.item-card:hover {
transform: translateY(-2px);
box-shadow: 0 0 12px rgba(139, 0, 0, 0.4);
border: 1px solid #ffbf04b3;
background: #3e3423;
}
.item-image {
width: 50px;
height: 50px;
margin-bottom: 10px;
align-self: center;
}
.item-image img {
max-width: 100%;
max-height: 100%;
object-fit: contain;
}
.item-details {
display: flex;
flex-direction: column;
align-items: center;
flex-grow: 1;
justify-content: space-between;
}
.item-name {
color: #e5b600;
font-size: 14px;
font-weight: bold;
font-family: 'Courier New', monospace;
margin-bottom: 10px;
text-align: center;
}
.no-items {
grid-column: 1 / -1;
color: #c50000;
font-size: 16px;
text-align: center;
padding: 20px;
font-family: 'Cinzel', serif;
}
/* Responsive adjustments */
@media (max-width: 768px) {
#shop-container {
padding: 0 10px;
}
.product-grid {
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
}
.product-title {
font-size: 14px;
}
.product-card {
height: 160px;
}
h1 {
font-size: 24px;
}
}
@media (max-width: 480px) {
#BoxShop {
left: -5em;
}
.product-grid {
grid-template-columns: repeat(2, 1fr);
}
.sell-grid {
grid-template-columns: 1fr;
}
h1 {
font-size: 20px;
}
#franklin-money-display {
font-size: 18px;
}
.tab-button {
padding: 8px 15px;
width: 100px;
}
}
</style><<if $practique is 1>>
<<goto "practiquewin">>
<</if>>
<<if $cavefight is 1>>
<<goto "wincave">>
<</if>>
<<if $wolfcave is 1>>
<<goto "wincavebattle">>
<</if>>
<<if $diabolicwolfcave is 1>>
<<goto "wincavebattle2">>
<</if>>
<<if $Fwolf is 1>>
<<goto "WinForestWolf">>
<</if>>
<<if $Fdiabolicwolf is 1>>
<<goto "WinForestDwolf">>
<</if>>
<<if $bwfight is 1>>
<<goto "Winbwfight">>
<</if>>
<<if $bwfight2 is 1>>
<<goto "Winbwfight2">>
<</if>>
<<if $srcff is 1>>
<<goto "Winsrcff">>
<</if>>
<<if $srcsf is 1>>
<<goto "SRcorridor2">>
<<set $srcsf = 2>>
<</if>>
<<audio "alert" stop>>
<<if $Sroom2 is 1>>
<<goto "Sroom2win">>
<</if>>
<<if $MHfigth is 1>>
<<goto "winEnemydoor">>
<</if>>
<<if $aberrationFigth1 is 1>>
<<goto "Event-Aberration01">>
<</if>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacket.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoat.png")>>
<</if>>
<<goto "Forest">>
<<set $Fwolf = 0>>
<<goto "Forest">>
<<set $Fdiabolicwolf = 0>><div id="ConversationBox">
<div id="Ntext">You search the area carefully, your eyes scanning every corner and crevice, but find nothing of interest. The ground is bare, and the surrounding foliage offers no clues. A sense of unease settles over you as you realize there's nothing here that could help you. It's as if whatever you're looking for has been erased, hidden away, or simply never existed. The silence grows heavier, the absence of anything meaningful almost more unsettling than the unknown. You sigh, frustrated, and prepare to move on, but a lingering feeling of something missed nags at the back of your mind.</div>
<div class="linksTwo">
<th>[[Continue exploring]]</th>
</div>
<div class="links">
<th>[[Back to the road|Forest]]</th>
</div>
</div>
<<if $Cave isnot 1>>
<<goto "ExploreCave">>
<</if>><<if $practique is 1>>
<<goto "practiqueescape">>
<</if>>
<<if $cavefight is 1>>
<<goto "escapecavewolf">>
<</if>>
<<if $wolfcave is 1>>
<<goto "escapecavebattle">>
<</if>>
<<if $diabolicwolfcave is 1>>
<<goto "escapecavebattle2">>
<</if>>
<<if $Fwolf is 1>>
<<goto "EscapeForestWolf">>
<</if>>
<<if $Fdiabolicwolf is 1>>
<<goto "EscapeForestDwolf">>
<</if>>
<<if $bwfight is 1>>
<<goto "Escapebwfight">>
<</if>>
<<if $bwfight is 1>>
<<goto "Escapebwfight">>
<</if>>
<<if $bwfight2 is 1>>
<<goto "Escapebwfight2">>
<</if>>
<<if $srcff is 1>>
<<goto "srcffescape">>
<</if>>
<<if $Sroom2 is 1>>
<<goto "Sroom2escape">>
<</if>>
<<if $srcsf is 1>>
<<goto "srcsfescape">>
<</if>>
<<if $MHfigth is 1>>
<<set $MHenemy = false>>
<<goto "Main Hallway2">>
<</if>>
<<if $aberrationFigth1 is 1>>
<<goto "Main Hallway3">>
<<set $aberrationFigth1 = 0>>
<</if>>
<<audio "alert" stop>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacket.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoat.png")>>
<</if>><<set $Fwolf = 0>>
<<goto "Forest">>
<<set $Fdiabolicwolf = 0>>
<<goto "Forest">>
<<switch visited()>>
<<case 1>>
<div id="ConversationBox">
<div id="Ntext">You step closer to the mirror, your fingers grazing over your hair as you adjust it with a slow, deliberate motion. A fleeting touch on your skin, making sure every detail is perfect. You catch your reflection—eyes lingering a moment longer than usual—before you nod to yourself, feeling the confidence settle in. You're ready, but the allure lingers.</div>
<<say $Mc>>There's no time for more...<</say>>
<div class="links">
<th>[[Bathroom|introtoilet]]</th>
</div>
</div>
<<case 2>>
<div id="ConversationBox">
<div id="Ntext">You meet your own gaze in the mirror, your fingers lightly brushing through your hair, ensuring everything is just right before you move on.</div>
<div class="links">
<th>[[Bathroom|introtoilet]]</th>
</div>
</div>
<<default>>
<div id="ConversationBox">
<div id="Ntext">You glance at your reflection, making sure everything is in place before moving on.</div>
<div class="links">
<th>[[Bathroom|introtoilet]]</th>
</div>
</div>
<</switch>>
<div id="ConversationBox">
<div id="Ntext">The place has already been looted; there’s nothing left.</div>
<div class="links">
<th>[[Back|shed]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">You push open the cabin door, which creaks as it opens, and step into the dimness, where the air smells of dampness and aged wood. The lamp on the table flickers, casting dancing shadows on the walls. In front of you, sitting in a worn wooden chair, is a man with a face weathered by years and the harshness of time. His gaze is deep, tired, but something in it reveals that he has lived more than anyone should. He wears simple clothes, and his presence is almost as fixed as the cabin itself.
As you enter, the man slowly raises his gaze. His eyes scan your figure, evaluating you with an unsettling calm. The silence between you stretches, but it’s not uncomfortable, as if there’s something familiar in the air.</div>
<<say $Mc>>Excuse me, sir, may I ask you some questions?<</say>>
<div id="Ntext">The man watches you for a moment longer, his expression stern but not hostile, as if he had already anticipated your arrival. Then, with a deep and raspy voice, he responds.</div>
<<say $Janitor>>I suppose so, but I'll tell you the same thing I told the other two FBI agents who came. I can't help you<</say>>
<div class="links">
<th>[[Why not?|ConserjeIntro]]</th>
<th>[[I'm not FBI|ConserjeIntro2]]</th>
</div>
</div>
<<include "Frank">>
<<set $FranklinMeet = true>>
<<set $CabinMeet = 1>><div id="ConversationBox">
<div id="Pensamiento">It's not a bad thing if he thinks I'm with the FBI.</div>
<<say $Mc>>Why not? Maybe I can help you remember something you've been avoiding. I'm investigating Charles Francis Hospital, and I know something dark happened there. Would you mind telling me more?<</say>>
<<say $Janitor>>This... fucking place, ahem... is dead to everyone. No one wants to talk about it. What happened there... there's no coming back from that. People disappeared, yes. And if you keep digging, you might end up like them.<</say>>
<<say $Mc>>What happened in that hospital is connected to what's happening in the city now—missing women, FBI agents. It's all tied together. If you know anything, no matter how small, I need to hear it.<</say>>
<<say $Janitor>>You haven’t even told me your name, and you're already demanding answers. How do you expect me to help if you won’t even extend that courtesy? Everyone has their own mysteries, but some prefer to keep them until they know who they’re dealing with.<</say>>
<<say $Mc>>Hmm... Okay. You're right. I'm Casey, $Mc.fullName.<</say>>
<<say $Franklin>>Franklin Hayes. People call me Frank. And if you’re going to keep pressing me, you better be straight with me—I don’t have time for games.<</say>>
<div id="Ntext">Despite his words, time seems to be the only thing this man has.</div>
<<say $Franklin>>What happened there should never have been buried. But you don’t understand... you have no idea what lies beyond that lake. If you keep going down this path, you’ll be crossing a line you can’t come back from.<</say>>
<div class="links">
<th>[[I won’t go back|ConserjeIntro3]]</th>
</div>
</div>
<<include "Frank">>
<div id="ConversationBox">
<<say $Mc>>I’m not FBI, I’m a private Detective, my name is $Mc.fullName.<</say>>
<<say $Franklin>>Oh... Well, I don’t think there’s much difference whether you work for the FBI or not. My name is Franklin Hayes, but everyone calls me Frank.<</say>>
<<say $Mc>>I’m investigating the Charles Francis hospital, and I know something dark happened there. Would you mind talking a little more?<</say>>
<div id="Ntext">The man watches you cautiously, as if evaluating your words, but doesn’t seem surprised by your knowledge.</div>
<<say $Franklin>> That hospital is dead to everyone. No one wants to talk about it. What happened there... there’s no turning back. People disappeared, yes. And if you keep looking, you might end up like them.<</say>>
<<say $Mc>>What happened in that hospital is connected to what’s going on in the city now. Missing women, FBI agents. It’s all connected. If you know anything, no matter how small, I need to know.<</say>>
<<say $Franklin>>What happened there is something that should never have been left forgotten. But you don’t understand... you don’t even know what lies beyond that lake. If you keep going down this path, you’ll be crossing a line you can’t come back from.<</say>>
<div class="links">
<th>[[I won’t go back|ConserjeIntro3]]</th>
</div>
</div>
<<include "Frank">>
<div id="ConversationBox">
<<say $Mc>>I'm not backing down. I'm already too deep into this, and I can't afford to turn my back. If you know anything else, please, tell me.<</say>>
<div id="Ntext">Franklin sighs and crosshis arms.</div>
<<say $Franklin>>Look, girl, I don't have all the answers you're looking for. I worked at that hospital fifteen years ago, back when it was still running. Even then, strange things were happening, but what's going on now... it's on a whole different level.<</say>>
<<say $Mc>>What's happening now?<</say>>
<<say $Franklin>>In the past week, I've seen three girls arrive there. They're always brought in a car or a black van. They're taken out sedated or restrained, as if they were objects, not people.<</say>>
<div class="links">
<th>[[How does the vehicle look?]]</th>
<th>[[Who takes the girls?]]</th>
<th>[[Didn’t you do anything?]]</th>
</div>
</div>
<<include "Frank">>
<div id="ConversationBox">
<div id="Ntext">You descend the stairs of your building, the evening air thick with humidity, sticking to your skin like a heavy garment. It's hot, but not unbearable, just uncomfortable. The main door creaks as you push it open, and the slight coolness from outside hits you with a bit of relief.
You don't take long to notice her.
She's leaning against a lamppost a few meters away, arms crossed, her gaze fixed on the ground. Gabriela, your former colleague, the Detective who didn't hesitate to throw out an ironic comment every now and then.
It’s been two years since you last spoke, and despite the fight, you know her energy is still the same, but now she seems surrounded by a kind of contained calm. The wind moves the strands of her high ponytail as the sun reflects off her dark hair.
She hasn't called or sent a message. Still, there she is, lingering like a restless ghost. Gabriela lifts her head and sees you. For a moment, time seems to freeze. There’s something vulnerable in her gaze, a crack in her usual armor, something you didn’t expect.
—Casey... —she begins, her voice a mix of nostalgia and something more undefinable.</div>
<div class="links">
<th>[[Gabi...|introgabinofirend]]</th>
</div>
</div>
<<script>>
setup.phoneSystem.unlockMedia("Gabi", "image", "img/characters/rodriguez/gabriela.png");
<</script>><div id="ConversationBox">
<<say $Mc>>I just need to sort something out. Nothing serious.<</say>>
<div id="Pensamiento">She has a radar for my lies, as if she can see them before they even leave my mouth.</div>
<div id="Ntext">Gabriela stares at you intently, but something in her face shows that she still doesn’t believe what you’ve told her.</div>
<<say $Gabriela>>I know you, Casey. And I can tell when you're trying to hide something. I don’t like your silences. Why don’t you tell me what’s going on?<</say>>
<div id="Ntext">Her words are honest, full of concern. But you feel the weight of the mayor’s recent call. Gabriela doesn’t know anything about it, and you can’t tell her.</div>
<div id="Pensamiento">I need to be direct with her.</div>
<div class="links">
<th>[[Be direct|introgabinofriendend]]</th>
</div>
</div>
<<include "Gabi1">><div id="ConversationBox">
<<say $Mc>>I can’t tell you more. It’s complicated.<</say>>
<div id="Ntext">Gabriela stares at you intensely, her eyes filled with determination. She crosses her arms, a look of frustration on her face. She’s not going to let this go so easily.</div>
<<say $Gabriela>>Complicated? Don't do this to me, Casey! It's been two years. Two years without knowing anything about you, and now that I finally find you, I can't even understand what you're doing. You're running from something, I know it. But if you keep pushing me away, I won’t be able to help you!<</say>>
<div id="Pensamiento">I need to be direct with her.</div>
<div class="links">
<th>[[Be direct|introgabinofriendend]]</th>
</div>
</div>
<<include "Gabi1">><div id="ConversationBox">
<<say $Mc>>Look, I can't stay here. I have to go solve a case. It's all I can tell you. If I could, I would, but I can't.<</say>>
<div id="Ntext">Gabriela falls silent, her face filled with doubt. But she doesn’t let you walk away so easily.</div>
<<say $Gabriela>>I’m not going to sit here knowing you’re about to face something dangerous alone. Let me go with you. You know I’ve always been there when you need me, right?<</say>>
<<say $Mc>>I can't, Gabi. I can't take you with me. This case is... complicated. More than you think.<</say>>
<<say $Gabriela>>I’ve known you for years, you know I’m not just going to sit here and do nothing. If you don’t tell me, I’ll figure it out on my own.<</say>>
<div id="Ntext">You feel the weight of Gabriela’s insistence, but you know you can’t tell her anything. You look at your former partner, seeing a flash of nostalgia in her eyes, and then respond in a soft tone.</div>
<div class="links">
<th>[[We will be partners again|introgabinofriendend2]]</th>
</div>
</div>
<<include "Gabi1">>
<div id="ConversationBox">
<<say $Mc>>If I solve this case... I’ll get my badge back. I’ll rejoin the Detective unit, and we’ll have time to talk, to discuss everything you want. I’ll listen to every word, every reproach, everything you need to say to me. But right now, I can’t stay. I have to go. The case can’t wait. Understand that if I want to solve it, I need to act fast.<</say>>
<<say $Gabriela>>Are you saying you can get your badge back if you solve this case? What are you doing, Casey? This sounds like something much bigger than just a simple case. Are you being used by someone? Are they pushing you into this?<</say>>
<div id="Ntext">Her tone is incredulous, almost indignant, but her expression hardens, the concern turning into distrust. As a Detective, she knows that when something smells wrong, you need to act fast, and she doesn’t like how all of this sounds.</div>
<<say $Gabriela>>I know you want to get your life back, but you can’t let them deceive you. I don’t want to see you in the middle of a disaster again, in something you can’t control. This doesn’t feel right, and I’m sure it doesn’t feel right to you either, does it?<</say>>
<<say $Mc>>It’s not what you think, Gabi. I have to do this, there’s no other option. If I don’t solve this case, I won’t get another chance. When it’s over, we can talk, but right now, I can’t waste any more time.<</say>>
<div id="Ntext">You continue walking towards your car, your steps resolute. Gabriela watches you in silence, the worry clear on her face, but she knows you’ve already made your decision. There’s no turning back.</div>
<div class="links">
<th>[[Get in the car|introcar]]</th>
</div>
</div>
<<include "Gabi1">>
<<script>>
setup.phoneSystem.addContact("Gabi", "I ran into Gabi; it seems she was hanging around my apartment. She still cares about me, even after two years. Gabi was worried after our last conversation.", "img/characters/rodriguez/avatar.png");
<</script>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoat.png")>>
<</if>><div id="ConversationBox">
<div id="Pensamiento">What the hell was Gabriela doing at my doorstep after two years? Does she really care about me now? I know her well, I know she does, but… why does it have to be now, just when I need to focus the most?</div>
<<say $Mc>>Phew...<</say>>
<div id="Pensamiento">I have to keep going.</div>
<div id="Ntext">You get in the car, the roar of the engine filling the silence as you turn the key. The weight of the situation presses down on you, but there’s no time to stop and think about it. No time for doubt.</div>
<div class="links">
<th>[[Let's get going|introllegada]]</th>
</div>
</div>
<div id="ConversationBox">
<div id="Ntext">You want to tell her, but you feel the weight of the mayor’s recent call. Gabriela doesn’t know anything about it, and you can’t tell her.</div>
<<say $Mc>>I can't tell you much, Gabi. It's confidential. But... if everything goes well, I'll get my badge back. And when that happens, we’ll be working together again. I promise.<</say>>
<<say $Gabriela>>Are you sure you’re not on the case? Because, I don’t know, Casey… It’s not that I like to be suspicious, but all of this sounds really strange.<</say>>
<<say $Mc>>Gabi, I told you, I can’t tell you anything. It’s confidential.<</say>>
<<say $Gabriela>>‘Trust me,’ you say… How do you expect me to trust you if you won’t tell me anything? Casey, we’re talking about missing women. If you know something, tell me. We could solve this together.<</say>>
<<say $Mc>>I can’t, Gabi. The mayor has asked for total confidentiality. There’ll be time to talk, I promise you. But right now, I have to go.<</say>>
<div id="Ntext">Gabriela’s eyes widen in surprise, her brow furrowing instantly as she processes your words.</div>
<div id="Pensamiento">Shit, I let it slip!</div>
<<say $Gabriela>>The mayor? What the hell do you have to do with the mayor in all this? Casey!<</say>>
<<say $Mc>>Gabi, don’t start overthinking it. I can’t tell you anything else, alright? Just... trust me. When all of this is over, I’ll explain everything.<</say>>
<<say $Gabriela>>I don’t like this, Casey. If the mayor is involved, it means this is no ordinary case. And if he’s asked you... Just tell me one thing: are you taking care of yourself? Because I don’t want to find out that you’re getting into something you can’t handle.<</say>>
<<say $Mc>>I’m fine, Gabi. I can handle it. But now, seriously, I have to go.<</say>>
<div id="Ntext">Gabriela watches you for a few more seconds, clearly dissatisfied with your answers, but she nods with a mix of resignation and concern.</div>
<<say $Gabriela>>Alright, go. But listen to me, Casey: if you need help, don’t hesitate to ask. No matter what it is. Understood?<</say>>
<<say $Mc>>Okey, Gabi...<</say>>
<div id="Ntext">You turn halfway and you start walking towards your car, still feeling the weight of Gabriela’s gaze on you. You know she won’t rest. Not with that sharp instinct of hers for spotting trouble.</div>
<<say $Gabriela>>Be careful, Casey.<</say>>
<div id="Pensamiento">It feels so good to have a friend like you, someone I can count on. I wish I could tell you everything. But I can't. Not yet.</div>
<div class="links">
<th>[[Get in the car|introcar2]]</th>
</div>
</div>
<<include "Gabi2">><div id="ConversationBox">
<div id="Ntext">You get into the car, start the engine, and the sound reminds you that there’s no turning back. The mayor is waiting, and with him, the case that could change your future.</div>
<div id="Pensamiento">It’s strange how things have changed. Before, I used to share everything with Gabriela: the cases, the worries, the little jokes that eased the tension of the heaviest days. It’ll be like it was before, once I get my badge back.</div>
<div class="links">
<th>[[Let's get going|introllegada]]</th>
</div>
</div>
<div id="ConversationBox">
<div id="Ntext">This part of the parking lot stretches into a secluded corner, lying in silence under the night. A few old, rusted vehicles stand like motionless shadows, consumed by time. A narrow path extends from here, skirting the building to the left before vanishing into the depths of the forest. The wind howls in this area, dragging dry leaves across the cracked asphalt, breaking the unsettling silence</div>
<<if $carquest gte 1 && $FBIcar isnot true>>
<div class="linksTwo">
<<if $fbicarchek is true>>
<th>[[Check FBI's car|CarBlackCheck]]</th>
<<else>>
<th>[[Check abandoned black car|CarBlackCheck]]</th>
<</if>>
<th>[[Check abandoned car|CarGreyCheck]]</th>
<th>[[Check abandoned ambulance|AmbulanceCheck]]</th>
</div>
<</if>>
<div class="links">
<th>[[Path to forest|Camino-izquierda]]</th>
<th>[[Parking near the entrance|Parking]]</th>
</div>
</div>
<div id="LocationName">Parking</div><div id="ConversationBox">
<div id="Ntext">Your car is parked, waiting for the moment to leave the place.</div>
<div class="links">
<th>[[Back|Parking]]</th>
</div>
<img id="event-image" src="img/events/caseycar.png">
</div><div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<<say $Mc>>Let’s see if this wreck has anything useful...<</say>>
<div id="Ntext">The hood is caked in rust, and the windows are nothing but jagged shards. As the door creaks open, a foul stench of mildew and stale gasoline wafts out, revealing nothing but a mess of debris inside.</div>
<<say $Mc>>Perfect, nothing like a moldy seat and a trunk jammed shut.<</say>>
<div id="Ntext">The car is completely useless.</div>
<<default>>
<div id="Ntext">The hood is caked in rust, and the windows are nothing but jagged shards. As the door creaks open, a foul stench of mildew and stale gasoline wafts out, revealing nothing but a mess of debris inside.</div>
<</switch>>
<div class="links">
<th>[[Back|Parking2]]</th>
</div>
<img id="event-image" src="img/events/car1.png">
</div><div id="ConversationBox">
<div id="Ntext">When you look at the car again, everything remains the same. The layer of fallen leaves still partially covers it, and the armored windows keep the interior hidden. The door remains locked, with no signs that anyone has been near.</div>
<div id="Pensamiento">I need the car keys or something to pick the lock.</div>
<img id="event-image" src="img/events/fbicar.png">
<div class="links">
<<if $FBIcar isnot true>>
<th><<lockBreak "average" "openfbicar" "Parking2" true>></th>
<</if>>
<<if $ironbarStair is true && $FBIcar isnot true>>
<th>[[Break glass with iron bar|noblackcar]]</th>
<</if>>
<<if $hasCarKey && $FBIcar isnot true>>
<th>[[Open car|openfbicarKey]]</th>
<</if>>
<<if $FBIcar is true && $FBIsabotage isnot true>>
<th>[[Get in the car|FBIcar2]]</th>
<</if>>
</div>
<div class="links">
<th>[[Back|Parking2]]</th>
</div>
</div>
<<if $fbicarchek isnot true>>
<<goto "checkfbicar">>
<</if>><div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<div id="Ntext">You approach the abandoned ambulance, its paint faded and the doors slightly ajar. As you peer inside, the dust and stale odor hit you immediately.
Amid the scattered mess, something catches your eye: a small metal vial lying on the floor. You pick it up carefully and read the worn-out label.</div>
<<say $Mc>><span style="color: #22b22e;">A stimulant</span>! From back when they weren't banned yet. Quite the relic.<</say>>
<<script>>
addStim(1);
<</script>>
<<default>>
<div id="Ntext">You approach the ambulance again. The scene hasn’t changed.</div>
<<say $Mc>>There’s nothing left here. Just a memory of better times… or worse.<</say>>
<</switch>>
<img id="event-image" src="img/events/ambulance.png">
<div class="links">
<th>[[Back|Parking2]]</th>
</div>
</div><div id="ConversationBox">
<<say $Mc>>Who takes them?<</say>>
<<say $Franklin>>I don’t know exactly who they are. I’ve never seen their faces clearly. They’re always careful to stay in the shadows, but I know it’s not Doctor Home. He just waits at the entrance, like he’s receiving a package.<</say>>
<<say $Mc>>It sounds horrifying... Wait a minute, did you say Doctor Home?<</say>>
<div id="Pensamiento">The doctor is my main suspect, but now I have a witness.</div>
<<say $Franklin>>Yes, the Doctor... He just waits at the entrance of the hospital. He steps out to greet them, takes a quick look, and then disappears with them inside. It's like they're delivering a package.<</say>>
<<say $Mc>>A human package, you mean.<</say>>
<<say $Franklin>>Yes.<</say>>
<div class="links">
<<if $ask2 isnot 1>>
<th>[[How does the vehicle look?]]</th>
<</if>>
<<if $ask3 isnot 1>>
<th>[[Didn’t you do anything?]]</th>
<</if>>
<th>[[And the girls?]]</th>
</div>
</div>
<<include "Frank">>
<<script>>
setup.phoneSystem.addContact("Doc. Arklich Home", "A name barely mentioned in the records of the Charles Francis Psychiatric Institute. All evidence suggests he’s the mastermind behind the abductions, but the true extent of his involvement remains a mystery.", "img/characters/dochome/avatar.png");
<</script>>
<<set $ask1 = 1>><div id="ConversationBox">
<<say $Mc>>How does the vehicle look?<</say>>
<<say $Franklin>>It's a dark car or a black van, always with tinted windows. I've noticed that the engine never fully shuts off, as if they're ready to take off quickly if something goes wrong.<</say>>
<<say $Mc>>Undertand...<</say>>
<div id="Pensamiento">It's impossible to track this, for now. I should look for Rust and Dina's car.</div>
<div class="links">
<<if $ask1 isnot 1>>
<th>[[Who takes the girls?]]</th>
<</if>>
<<if $ask3 isnot 1>>
<th>[[Didn’t you do anything?]]</th>
<</if>>
<th>[[And the girls?]]</th>
</div>
</div>
<<include "Frank">>
<<script>>
setup.phoneSystem.addObjective(
"Check the fbi car",
"Find the FBI agents' car in the parking lot.",
'secondary',
'fbicar' // ID
);
<</script>>
<<SanityMessage "New secondary objective: Check the fbi car">>
<<set $ask2 = 1>>
<<set $CarQuest = true>>
<div id="ConversationBox">
<<say $Mc>>Didn’t you do anything?<</say>>
<<say $Franklin>>Of course I did something. I called the police several times. At first, they didn't take me seriously, but the last time two FBI agents came. They asked me questions, checked the place, but...<</say>>
<<say $Mc>>But what?<</say>>
<<say $Franklin>>They arrived two days ago. Since then, I haven’t seen them come out. Their car is still there, in the parking lot, gathering dust, like the hospital swallowed them whole.<</say>>
<div id="Pensamiento">Where could Rust and Dina have gone?</div>
<<say $Mc>>Did they say their names?<</say>>
<<say $Franklin>>Yes, the man introduced himself as Rust Cohle, and the woman as Dina Carter. They seemed sure of what they were doing, but now... I can’t help but think that place swallowed them up too.<</say>>
<div class="links">
<<if $ask1 isnot 1>>
<th>[[Who takes the girls?]]</th>
<</if>>
<<if $ask2 isnot 1>>
<th>[[How does the vehicle look?]]</th>
<</if>>
<th>[[And the girls?]]</th>
</div>
</div>
<<include "Frank">>
<<set $ask3 = 1>><div id="ConversationBox">
<<say $Mc>>And the girls? What can you tell me about them?<</say>>
<<say $Franklin>>Two of them... I don’t remember them well. It was night, and the place was dark. I could barely make out their faces, but what I do know is that they were completely sedated. One of them... I remember she was a redhead.<</say>>
<<say $Mc>>What else do you remember about her?<</say>>
<<say $Franklin>>Not much. Just that she was asleep. The truth is, the only thing that stuck with me was the color of her hair, so bright, even in the dark.<</say>>
<<say $Mc>>And the others?<</say>>
<<say $Franklin>>I didn’t get a good look at the first one. But the last one... the last one I remember perfectly.<</say>>
<div class="links">
<th>[[About the last girl]]</th>
</div>
</div>
<<include "Frank">>
<<script>>
setup.phoneSystem.addObjective(
"Find the kidnapped girls",
"Infiltrate the depths of the abandoned hospital and explore it to find the kidnapped girls. (No more content for now)",
'secondary',
'Find_girls' // ID
);
<</script>>
<<SanityMessage "New secondary objective: Find the kidnapped girls">><div id="ConversationBox">
<<say $Mc>>Franklin, I need to know something else. What do you know about Doctor Home?<</say>>
<<say $Franklin>>Doctor Home... I don't like that name at all.<</say>>
<<say $Mc>>That doesn't answer my question. Who is he?<</say>>
<<say $Franklin>>He was the one in charge of this place. A brilliant guy, they say... but there was always something off about him. The other staff avoided being around him, and the patients... well, sometimes they came out of his office worse than they went in.<</say>>
<<say $Mc>>Worse, how?<</say>>
<<say $Franklin>>The ones who stayed... some of them changed. They became stranger, more aggressive. Others just disappeared. After Charles Francis was shut down, the place was quiet for a while. At first, just some curious folks sneaking in—vandals, teenagers looking for a scare... you know how it is. But over the years...
I’ve been living here for over 15 years, girl. Nothing ever happened, and then, about three months ago, I started seeing lights in the building, movement in the windows. It only happens at night.<</say>>
<<say $Mc>>And the doctor?<</say>>
<<say $Franklin>>Yeah... I've seen him. And he wasn’t alone. A few months ago, I saw him go in, you know? He had people with him. Patients, or at least that’s what they looked like... some could barely walk, others seemed normal, calm. But what stood out the most were the women in nurse uniforms.
They walked strangely, like they were... I don’t know, out of it, maybe drugged. One thing’s for sure—I’ve never seen anyone come out.<</say>>
<<say $Mc>> And you didn’t do anything? You didn’t even think about calling someone?<</say>>
<<say $Franklin>>Who, girl? The police? Believe me, no one takes an old janitor living next to an abandoned hospital seriously. They’d say I’m crazy or, worse, tell me to mind my own business.<</say>>
<div id="Pensamiento">Girl, again? ...</div>
<<say $Mc>>Yeah, but still, didn’t you try to find out more? To go in and see what was happening?<</say>>
<<say $Franklin>>Look, girl, I already told you: what happens in there isn’t my business. I stay out of trouble and pick up what I can.<</say>>
<div class="links">
<th>[[Call him out]]</th>
<th>[[Let it go]]</th>
</div>
</div>
<<include "Frank">>
<<set $askdoc = 1>><div id="ConversationBox">
<<say $Mc>>What can you tell me about the last girl?<</say>>
<<say $Franklin>>The last one... I remember her well. She was blonde, with long, loose hair. Like the others, she was sedated, like a sack of potatoes. It was three days ago, the night before the two FBI agents disappeared.<</say>>
<<say $Mc>>And what else? Did you notice anything different about her?<</say>>
<<say $Franklin>>No. Same as always, girl. They were all in the same state, sedated, without a shred of consciousness. They were all very pretty, of course, but in the end, they were just empty bodies that someone brought to leave there. I only saw the last one for a few seconds, there wasn’t much to see.<</say>>
<<say $Mc>>But something must have caught your attention!<</say>>
<div id="Ntext">The man pauses for a long time, thoughtful. Then, his eyes scan you more carefully, as if noticing something about you. His gaze briefly lingers on your face, then quickly moves down yor figure, admiring your body for a moment before speaking.</div>
<<say $Franklin>>Well... now that you mention it... I can't really say. She was blonde, like you... I don't know why, but you make me think of... Wait a minute.<</say>>
<div class="links">
<th>[[What's worng?]]</th>
</div>
</div>
<<include "Frank">>
<<set $asksister = 1>><div id="ConversationBox">
<<say $Mc>>What's wrong?<</say>>
<<say $Franklin>>The girl... I don’t know. She was like the others, yeah, but now that I’m looking at you, your face made me think of her. She was younger, of course, but her face, her hair... She looked almost identical to you. Don’t you find that strange?<</say>>
<<say $Mc>>What do you mean, identical? What are you trying to say?<</say>>
<div id="Pensamiento">Identical to me? Is it possible that...? Angelica! Oh my God! It can’t be... I shouldn’t get my hopes up...</div>
<<say $Franklin>>I don’t know, girl. It’s not that I mistook you for her, but... when I looked at you, something about you reminded me of her. She wasn’t awake, of course, but even though she was younger, the resemblance is... striking. Almost like you were her. I can’t explain it, but it’s like everything just fits somehow. Maybe it’s a sign that you should leave this place, as soon as possible.<</say>>
<<say $Mc>>Are you sure about what you’re saying? It can’t be...<</say>>
<div id="Ntext">Your heart pounds fiercely, your mind racing with doubts.</div>
<div id="Pensamiento">Maybe... Yes! It’s Angelica! My poor little sister! Angi...</div>
<div id="Pensamiento">How did she end up here? Where has she been all this time?</div>
<div id="Pensamiento">I'm glad she's alive, but she's in danger. If she's here, I have to find her!</div>
<<say $Franklin>>Look, girl, I don’t know who she is or who you are. I’m just telling you what I saw and what I remember now. If you ask me, I’d say this is no coincidence. But whatever it is, staying here won’t do you any good.<</say>>
<div class="links">
<th>[[Never]]</th>
</div>
</div>
<<include "Frank">>
<<script>>
setup.phoneSystem.addObjective(
"Find your sister Angela",
"Investigate the psychiatric hospital and gather clues to locate Angela, your missing sister. (No more content for now)",
'secondary',
'Find_sister' // ID
);
<</script>>
<<SanityMessage "New secondary objective: Find your sister">><div id="ConversationBox">
<<say $Mc>>I’m not going to give up, no matter what happens. I won’t stop searching, even if it’s the last thing I do.<</say>>
<<say $Franklin>>You're playing with fire, girl. You can’t face all of this alone. There are things here you don’t understand—things no one understands.<</say>>
<<say $Mc>>What I don’t understand is why no one has done anything until now. If I have to be the one to put an end to this, then so be it.<</say>>
<<say $Franklin>>You're determined, huh? Fine… If you're really going through with this, I might have something that could help you. I’ve picked up a few things around here. I’m no saint, but I’ve learned how to survive. They're not free, of course.<</say>>
<div class="links">
<th>[[What things?|shoptalk]]</th>
</div>
</div>
<<include "Frank">><div id="ConversationBox">
<<say $Mc>>Things? What things?<</say>>
<<say $Franklin>>Some things that could be useful to you. I've picked up a few things here and there, in the forgotten corners. Drugs, ammo, first aid kits, and other items I've found in the hallways and around the area. It's not much, but it might help you keep going.<</say>>
<<say $Mc>>You do realize what you're doing isn't legal, right? Stealing and selling things you find in an abandoned hospital? I don't know what's worse, your business or the place you're doing it in... I could arrest you for that.<</say>>
<<say $Franklin>>Arrest me? Here, in the middle of all this? Hahaha, who would care, girl? If it weren’t for what I've “collected,” you’d be in much worse shape. You know how it goes. In this place, the laws are a joke.<</say>>
<<say $Mc>>I don't know what's worse—your business or the fact that you're doing it in a place like this. But... that's not why I'm here. I'll let it slide this time, but don’t get used to it. If you cause me any trouble, I won’t let you off so easily.<</say>>
<<say $Franklin>>Deal, girl. In here, everyone does what they need to survive. If you ever need anything, you know where to find me.<</say>>
<div id="Pensamiento">I’m getting tired of him calling me "girl."</div>
<<say $Mc>>I’m not a "girl." My name is $Mc.baseName, and I’d prefer you use it.<</say>>
<<say $Franklin>>Alright, $Mc.baseName. Whatever you say. If you need anything, you know where to find me.<</say>>
<div class="links">
<<if $askdoc isnot 1>>
<th>[[About Doctor Home]]</th>
<</if>>
<th>[[Bye|Cabin]]</th>
</div>
</div>
<<include "Frank">>
<div id="ConversationBox">
<<if $askdoc gte 1 && $safaplacetalk isnot true>>
<<if $NoMoreGirl is true>>
<<say $Franklin>>Girl... I mean, Casey, I'd like to tell you something.<</say>>
<<else>>
<<say $Franklin>>I'd like to tell you something, girl.<</say>>
<</if>>
<<else>>
<<say $Mc>>Maybe I have a few more questions.<</say>>
<<say $Franklin>>Alright, shoot.<</say>>
<</if>>
<div class="links">
<<if $askdoc gte 1 && $safaplacetalk isnot true>>
<th>[[Hear him|safaplacetalk]]</th>
<</if>>
<<if $askdoc isnot 1>>
<th>[[About Doctor Home]]</th>
<</if>>
<th>[[No questions|Conserje]]</th>
</div>
</div>
<<include "Frank">><<widget "fullscreenButton">>
<button id="fullscreenButton" style="background: none;
background: none;
background: none;
border: none;
cursor: pointer;
position: absolute;
top: -14px;
left: 8px;
z-index: 1000;" tabindex="0"><br> <img src="img/fullscreen.png" alt="" style="width: 28px; height: 28px;"><br> </button>
<script>
$(document).on('click', '#fullscreenButton', function() {
if (!document.fullscreenElement) {
if (document.documentElement.requestFullscreen) {
document.documentElement.requestFullscreen();
} else if (document.documentElement.mozRequestFullScreen) { // Firefox
document.documentElement.mozRequestFullScreen();
} else if (document.documentElement.webkitRequestFullscreen) { // Chrome, Safari y Opera
document.documentElement.webkitRequestFullscreen();
} else if (document.documentElement.msRequestFullscreen) { // Internet Explorer/Edge
document.documentElement.msRequestFullscreen();
}
} else {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
}
});
</script>
<</widget>><div id="ConversationBox">
<<if $escalerarota isnot true>>
<div id="Ntext">You observe the building's facade closely, searching for any signs of activity. The peeling paint and broken windows confirm that the place has been abandoned for years. As your gaze shifts to one side, you notice a metal staircase attached to the wall. It's rusty and looks fragile. It's the fire escape.</div>
<div id="Pensamiento">It might still hold my weight, but it's risky.</div>
<img id="event-image4" src="img/events/escalera.png">
<<else>>
<div id="Ntext">You return to the spot where the ladder gave way. The twisted metal remnants hang crookedly, swaying slightly in the wind, producing a constant, irritating creak that breaks the silence of the place.</div>
<</if>>
<div class="links">
<<if $escalerarota isnot true>>
<th>[[Climb up the staircase|brokenstairs]]</th>
<</if>>
<th>[[Back|Camino-intermedio]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">You observe the building's facade, searching for an entrance. The brick wall is weathered, but you don’t find any openings or signs of a visible entry. Everything seems locked and abandoned.</div>
<div id="Pensamiento">All the windows are barred, blocking any attempt to get in... or out.</div>
<div class="links">
<th>[[Back|Camino-derecha]]</th>
</div>
</div><div id="ConversationBox">
<<say $Mc>>Who are you?<</say>>
<<say $DocHome>>My name is Arklich Home. I worked here many years ago.<</say>>
<<say $Mc>>What are you doing here?<</say>>
<<say $DocHome>>I could ask you the same thing, Miss...<</say>>
<div id="Pensamiento">This guy... is not an idiot.</div>
<<say $Mc>>I'm a detective, my name is Casey, and I'm investigating a multiple abduction case.<</say>>
<<say $DocHome>>Hmm... Interesting... Glad to meet you, Detective Casey.<</say>>
<<say $Mc>>Now, could you answer my question, Doctor Home?<</say>>
<<say $DocHome>>I come by from time to time. This place... has something peculiar about it, don't you think?<</say>>
<div id="Pensamiento">He's lying or... maybe he's crazy.</div>
<<say $Mc>>And those documents? The folder was on the table, is it yours?<</say>>
<<say $DocHome>>Ah, those... They're my old cases. I kept them after the fire, though not everyone understands why. Some are too valuable to leave behind.<</say>>
<div id="Pensamiento">I don’t buy it. Something doesn’t add up with his answer.</div>
<<say $Mc>>Valuable? After all this time? And why are you carrying them? Did you come just to pick them up, 15 years later?<</say>>
<<say $DocHome>>There are things you don’t forget, Detective. Some documents are more durable than others, or simply better protected.<</say>>
<div id="Pensamiento">Better protected? Ah, after 15 years? I don't believe so.</div>
<<say $Mc>>But how can they still be relevant? After all this time... and the fire, why keep them?<</say>>
<<say $DocHome>>Some cases need to be revisited, even after time passes. The memory of what happened here... carries more weight than you might think. Only those who lived through it would understand why these documents are important.<</say>>
<div class="links">
<th>[[Ask about "incubation process"|TalkDocHome1]]</th>
</div>
</div>
<<include "DocHome">><div id="ConversationBox">
<div id="Ntext">The hallway near the entrance is in complete disarray, with the floor covered in dust and shattered glass fragments. The walls, chipped and deteriorated, seem to struggle to maintain their original shape, resisting collapse and threatening to take the entire building down with them.</div>
<<if $maindooropen is true>>
<div class="linksTwo">
<<if $MHRD isnot true>>
<th>[[Door at the right|MHrigthdoor1]]</th>
<</if>>
</div>
<</if>>
<div class="links">
<<if $livingroom isnot 1>>
<th>[[Move through hallway|Main Hallway2]]</th>
<<else>>
<th>[[Go to livingroom|Main Hallway2]]</th>
<</if>>
<th>[[Entrance|MainLobby]]</th>
<<if $MHRD is true>>
<th>[[Room at rigth|MHrigthroom1]]</th>
<</if>>
</div>
</div>
<div id="LocationName">Main hallway</div>
<<if $maindooropen is true && $abominationEvent isnot "complete">>
<<audio "lobbytheme" stop>>
<<audio "darksituation" play loop volume 0.3>>
<</if>><div id="ConversationBox">
<div id="Ntext">The door leading to the right hallway is closed from the other side.</div>
<div class="links">
<th>[[Back|MainLobby]]</th>
</div>
</div>
<<set $corridorchek = 1>>
<div id="ConversationBox">
<div id="Ntext">The door is locked.</div>
<div class="links">
<th>[[Back|MainLobby]]</th>
</div>
</div>
<<set $doorchek = 1>><div id="ConversationBox">
<div id="Ntext">The main hallway stretches in the dim light, with flickering lights barely illuminating the cracked walls. Closed doors on either side seem to hide forgotten secrets, while a heavy, damp air fills the space. The silence is eerie.</div>
<<if $maindooropen is true>>
<div class="linksTwo">
<<if $MHleftdoor isnot true>>
<th>[[Door at left|MHleftdoor]]</th>
<</if>>
<<if $MHrigthdoor isnot true>>
<th>[[Door at right|MHrigthdoor]]</th>
<</if>>
</div>
<</if>>
<div class="links">
<<if $MHleftdoor is true>>
<th>[[Room at left|MHleftroom]]</th>
<</if>>
<<if $livingroom isnot 1>>
<th>[[Move through hallway|Main Hallway3]]</th>
<<else>>
<th>[[Go to main room|Main Hallway3]]</th>
<</if>>
<th>[[Go to entrance|Main hallway]]</th>
<<if $MHrigthdoor is true>>
<th>[[Room at right|MHrigthroom]]</th>
<</if>>
</div>
</div>
<div id="LocationName">Main hallway</div><div id="ConversationBox">
<<if $openleftdoor isnot true>>
<div id="Ntext">The lights flicker erratically, their glow wavering as if on the verge of completely going out. Each flash casts shadows that slide and stretch along the passage, moving with an unsettling fluidity, as if they had a life of their own.</div>
<<else>>
<div id="Ntext">The lights are off, leaving the hallway in a faint gloom. The little light that filters in from the outside barely reveals the outlines of the walls and floor, casting vague shadows that stretch and shift subtly with each step.</div>
<</if>>
<div class="linksTwo">
<<if $MCDopen isnot true>>
<th>[[Check front door|corridorlobbyclosed]]</th>
<</if>>
</div>
<div class="links">
<<if $MCDopen is true>>
<th>[[Grand Hall]]</th>
<</if>>
<th>[[Go to entrance|Main Hallway2]]</th>
</div>
</div>
<div id="LocationName">Main hallway</div>
<<if $maindooropen is true && $MHenemy isnot true>>
<<goto "runenemy">>
<</if>>
<<audio "darksituation2" stop>>
<<if $maindooropen is true && $abominationEvent isnot "complete">>
<<audio "lobbytheme" stop>>
<<audio "darksituation" play loop volume 0.3>>
<<else>>
<<audio "darksituation" stop>>
<<audio "lobbytheme" play loop volume 0.4>>
<</if>><div id="ConversationBox">
<<if $MHenemy isnot true>>
<div id="Ntext">The door is locked.</div>
<<else>>
<div id="Ntext">Someone is banging on the door from the other side; it's about to open.</div>
<</if>>
<div class="links">
<th>[[Back|Main Hallway3]]</th>
</div>
</div>
<<set $doorcorridorchek = 1>>
<<if $MHfigth gte 2>>
<<goto "MCDopen">>
<</if>><div id="ConversationBox">
<div id="Ntext">You move cautiously, observing the surroundings. The room is shrouded in darkness, but the light from a broken lamp in the ceiling illuminates just enough for you to distinguish the details. Dust covers the floor, and the walls, a crumbling gray, seem to tell stories of abandonment. At what seems to be the reception desk, a broken chair is overturned, and where there was once nothing, now rests a folder, placed on the desk. The air is thick with the smell of mold, and an uneasy feeling washes over you, as if something is lurking in the shadows.</div>
<div id="Pensamiento">That’s strange, I’m sure this wasn’t here before.</div>
<div id="Ntext">The folder is surprisingly new, with the corners intact and the paper still crisp, as if someone had left it there recently.</div>
<div class="links">
<th>[[Check the folder|checkfolder]]</th>
</div>
</div>
<<set $DocHometalk = 1>><div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<div id="Ntext">As you step into the cabin, the air feels thick with humidity and dust, as if no one has been here in years. In the center of the room stands a table, the only notable piece of furniture, slightly dirty and with objects scattered around in apparent neglect. The light is on, but there’s no one around.</div>
<div id="Pensamiento">There’s no one here... but someone definitely lives here.</div>
<<say $Mc>>I should come back later.<</say>>
<<default>>
<div id="Ntext">There’s no one here.</div>
<<say $Mc>>I should come back later.<</say>>
<</switch>>
<div class="links">
<th>[[Exit|CabinDoor]]</th>
</div>
</div>
<div id="LocationName">Lake cabin</div><div id="ConversationBox">
<div id="Ntext">You push the main door cautiously, allowing the cold air inside to envelop you. You take your first steps and enter the Charles Francis with determination. Once you're in the middle of the room, you carefully observe your surroundings, noticing the dimness that fills the space. The faint light from a broken lamp in the ceiling doesn't help much, but it's enough to make out the details.
As you immerse yourself in the atmosphere, you begin to recall what was said about this place. The fire that destroyed the Charles Francis psychiatric hospital 15 years ago. The news spoke of a catastrophe, a fire that ravaged everything, leaving the place unrecognizable.</div>
<div id="Pensamiento">There are signs of fire, but not as severe as they described.</div>
<div id="Ntext">Some walls show smoke stains, and there are areas where the heat seems to have left its mark, but nothing like a "total destruction".</div>
<div id="Pensamiento">Typical sensationalism of the media. The fire wasn't as devastating as they said. The place is almost intact, well, after 15 years of abandonment... </div>
<<say $Mc>>It's not what I expected, but there's no turning back.<</say>>
<div class="links">
<th>[[Continue|MainLobby]]</th>
</div>
</div>
<<set $firstenter = 1>><div id="ConversationBox">
<div id="Ntext">You open the folder carefully, feeling a mix of curiosity and distrust. On the first page, you find what seems to be a medical record, with a name incomplete and crossed out. You can only partially make out the title: "Subject Alpha-IX." The document talks about its characteristics, with confusing details and phrases that repeat over and over. It mentions "unstable conditions," "continuous observation," "colossal strength", and a "special procedure," but there's not enough clarity on what exactly it's referring to. The information is sparse.</div>
<div id="Pensamiento">What the hell, it seems like it's talking about some sort of treatment.</div>
<div class="links">
<th>[[Next page|checkfolder2]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">On the next page, the section title immediately catches your attention: "Patient – Codename: Subject 38." The description is detailed, almost obsessive: "Blonde, fair skin, long hair, sky-blue eyes, pure..." But it's not just a superficial physical description. The report continues with medical details: "Ideal physical build, fast metabolism, excellent recovery capacity." It mentions that her skin is "unusually smooth," without signs of scars or marks, and specifies that her height and weight fall within normal parameters for her age. The blue eyes are described particularly, as a "striking feature that may influence the psychological reactions of the subjects." The way these observations are written seems like a clinical analysis that goes beyond mere appearance, as if they were evaluating something more than just the physical.
"Experimental process has not yet begun. She needs to be prepared and closely observed, her physical profile is ideal for the next phase of testing." Says the comment at the bottom.
The report doesn't stop there, as it continues with details of the other two patients. One of their descriptions catches your attention: "Red hair, fair skin, green eyes." The other is described as "dark hair, olive skin, brown eyes." Both subjects are in the preliminary stage, being observed and monitored to assess their suitability for the next step in the experiments. The language used is cold, technical, as if each of these details is just another characteristic on a clinical list. However, something stands out: a recurring mention of "enabled pregnancy," a cryptic term that appears several times in relation to both patients. You don’t fully understand what it refers to, but the term sounds disturbing, as if it’s related to some specific procedure, something that goes beyond simple medical care. The air grows heavier as you continue reading, a chill running down your spine.</div>
<div id="Pensamiento">I need to know more.</div>
<div class="links">
<th>[[Next page|checkfolder3]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">The next page stops you immediately with a title that makes you hesitate for a moment: "Subject 4 - Advanced Stage." Unlike the other reports, this one has fewer descriptive details about the patient's physical appearance. Instead, the report quickly delves into the details of their medical condition, much more concerning and disturbing.
"The preparation phase is complete. The incubation process has begun," you read in the first line. The report then describes how the subject is undergoing "accelerated cellular modification," implying a drastic change in their biology.</div>
<div id="Pensamiento">Incubation process? What the fuck is this?</div>
<div class="links">
<th>[[Continue reading|checkfolder4]]</th>
</div>
</div>
<div id="ConversationBox">
<<say $Mc>>But what does the "incubation process" have to do with all of this? That doesn't sound like something related to mental disorders.<</say>>
<<say $DocHome>>Ah, the "incubation process." It's a term sometimes used to describe certain aspects... of human physiology.<</say>>
<div id="Pensamiento">Another lie... He must think I'm stupid.</div>
<<say $Mc>>I see. But again, I don't understand how that connects to the patients' mental conditions.<</say>>
<<say $DocHome>>It's simply a matter of terminology, Detective. Not everything we deal with here is necessarily related to mental health. Physical or biological conditions can influence the mind. But, as I mentioned, these are... technical aspects that aren't always immediately understood.<</say>>
<div id="Pensamiento">He's clearly hiding something.</div>
<<say $Mc>>Hmm, "technical." I find it curious that something as specific as the "incubation process" appears in your documents.<</say>>
<<say $DocHome>>As I told you, Detective, these terms are used in contexts that not everyone comprehends. Some cases are so complex that their details become difficult to explain without losing focus. Sometimes, the darkest details provide the truest understanding of something as intricate as human behavior. But I doubt you would understand.<</say>>
<<say $Mc>>I don't appreciate being underestimated, Doctor. I'm here to uncover the truth, and vague explanations won't deter me.<</say>>
<<say $DocHome>>It's not my intention to underestimate you, Detective. Some things in life cannot be explained so simply, not even to those who believe every question has an immediate answer. But... I understand your curiosity.<</say>>
<div id="Ntext">At that moment, the doctor calmly extends his hand toward the folder, his movements unhurried, as if everything were proceeding exactly as planned.</div>
<<say $DocHome>>I believe you've seen enough, Detective. If you truly have more questions, it would be best to address them in a more formal setting... at another time and in a more... appropriate manner.<</say>>
<div class="links">
<th>[[I don't need your lessons|TalkDocHome2]]</th>
<th>[[Give the documents]]</th>
</div>
</div>
<<include "DocHome">><div id="ConversationBox">
<div id="Ntext">The doctor watches you with skepticism as you approach, raising an eyebrow.</div>
<<say $DocHome>>Oh, don't you have an urgent call to take, detective? I hope the line interferences doesn't interrupt your important investigation.<</say>>
<div id="Ntext">As he finishes his sentence, the doctor flashes a carefree smile.</div>
<div id="Pensamiento">I don't like that passive-aggressive tone... it gets on my nerves... it's hard to hold myself back.</div>
<<say $Mc>>Maybe, but there's no signal here.<</say>>
<<say $DocHome>>The lines tend to have... interference. But if you step outside, you might have better luck.<</say>>
<div class="links">
<th>[[Back|MainLobby]]</th>
</div>
</div>
<<include "DocHome">><div id="ConversationBox">
<div id="Ntext">Without hiding your resignation, you hand the documents over to the doctor.</div>
<<say $Mc>>Tsk... Okay, but don’t get excited, here you go.<</say>>
<<say $DocHome>>Thank you, Detective. I knew you would understand.<</say>>
<div id="Ntext">The tension in the air persists, but the doctor shows no signs of pressure. His calmness seems only to heighten the discomfort you feel. You realize that, although he has taken the documents from you, the answer you're searching for is still nowhere to be found.</div>
<div id="Pensamiento">Don't think we're done Doctor... This is just getting started.</div>
<div class="links">
<th>[[Ask about Subject Alpha-IX|nomorequestions]]</th>
</div>
</div>
<<include "DocHome">><div id="ConversationBox">
<<say $Mc>>Doctor Home, I want to ask you a couple of questions about the subject...<</say>>
<div id="Ntext">Just at that moment, the sound of your phone abruptly interrupts the conversation. The ringtone echoes powerfully through the empty room as you look at the phone in disbelief. On the screen, the name of Mayor Quentin appears.</div>
<<say $DocHome>>From your expression, I'd say it looks like an important call...<</say>>
<div id="Pensamiento">Who does this guy think he is?</div>
<<say $Mc>>Maybe...<</say>>
<div class="links">
<th>[[Answer the call|answercalldoctor]]</th>
</div>
</div>
<<include "DocHome">>
<<script>>
setup.phoneSystem.addContact("Doc. Arklich Home", "Former employee and doctor at the Charles Francis Mental Institution. A peculiar man, highly suspicious.", "img/characters/dochome/avatar.png");
<</script>>
<<timed 3s>>
<<audio "codec" play loop volume 0.4>>
<</timed>>
<<timed 9s>>
<<audio "codec" stop>>
<</timed>><div id="ConversationBox">
<div id="Ntext">You leave the building, leaving the doctor behind, waiting in the shadows. While you were inside, night has fully fallen. You make your way to the parking lot, searching for a secluded spot where you can have some privacy and where your words won’t echo throughout the area.</div>
<<say $Mc>>I don't think it’s a good idea to wait for him to call again.<</say>>
<div class="links">
<th>[[Go to parking|mayorcall2]]</th>
</div>
</div>
<<set $mayorcall = 1>>
<div id="ConversationBox">
<div id="Ntext">You dial the mayor's number quickly, but the call cuts off as soon as it starts to ring. Frustrated, you try again. The signal remains unstable, interrupted by static. Finally, the call connects, but Quentin's voice sounds distant, as if coming from somewhere far away.</div>
<div class="links">
<th>[[Quentin?|mayorcall3]]</th>
</div>
</div>
<div id="ConversationBox">
<<say $Mc>>Quentin?<</say>>
<<say $Mayor>>C@s3y... t3lls0m3th1ng...<</say>>
<<say $Mc>>Shit! I can't understand you, Quentin. You hear me?<</say>>
<div id="Ntext">His voice cuts out, and a series of incomprehensible noises invade the line. You focus, trying to catch whatever he might be saying, but all you manage to hear are fragments, like distorted echoes of a distant conversation.</div>
<<say $Mayor>>3x p@rt3r... R0dr1gu3z!<</say>>
<<say $Mc>>What’s going on?<</say>>
<div id="Ntext">You try adjusting the volume, but all you manage to hear is more static. The sound cuts off abruptly.</div>
<div class="links">
<th>[[Hang up the phone|mayorcall4]]</th>
</div>
</div>
<div id="npc-container">
<img src="img/characters/mayor/mayor.png">
</div><div id="ConversationBox">
<div id="Ntext">You hang up the phone, feeling a wave of discomfort.</div>
<div id="Pensamiento">The call was pointless. I think he said Rodríguez... although I'm not sure. Anyway... What does Gabriela have to do with the Mayor? It doesn't make sense, I couldn't hear anything.</div>
<<say $Mc>>I have no other choice. It's time to continue my investigation. I need to go back to the doctor.<</say>>
<div class="links">
<th>[[Continue|Parking]]</th>
</div>
</div>
<<audio "codec" stop>><div id="ConversationBox">
<<say $Mc>>I should start by checking the abandoned cars. And find the car Rust and Dina arrived in.<</say>>
<div id="Pensamiento">There might be a clue.</div>
<div class="links">
<th>[[Get moving|CabinDoor]]</th>
</div>
</div>
<<set $carquest = 1>><button class="phone-button">📱</button>
<div class="phone-container">
<div class="phone-notch"></div>
<button class="phone-close">◉</button>
<div class="phone-screen">
<div class="top-bar">
<div class="files-button">📁</div>
<div class="wallet-info">
<span class="wallet-icon"></span>
<span class="wallet-amount">$<<print $McMoney>></span>
</div>
<div class="battery-icon">🔋</div>
</div>
<div class="nav-bar">
<div class="nav-item active" data-screen="contacts">📞</div>
<div class="nav-item" data-screen="objectives">📓</div>
</div>
<div class="content">
<div id="contacts" class="screen active"></div>
<div id="objectives" class="screen"></div>
<div id="files" class="screen"></div>
</div>
<div id="contact-detail-window" class="contact-detail-window">
<div class="contact-detail-content"></div>
</div>
</div>
<div id="file-viewer" class="file-viewer">
<div class="file-viewer-content"></div>
<button class="close-file-button">❌</button>
</div>
</div>
<style>
video {
width: 356px;
height: 100%;
position: relative;
right: 0;
top: 6em;
}
.files-counter {
position: absolute;
bottom: 0px;
right: 8px;
color: white;
font-size: 12px;
font-weight: bold;
}
/* Updated wallet counter - no background */
.wallet-counter {
position: absolute;
bottom: 0px;
right: 0px;
color: #00ff37;
font-size: 12px;
font-weight: bold;
cursor: default;
}
/* Hide the regular wallet amount when counter is present */
.wallet-counter-active .wallet-amount {
display: none;
}
.battery-icon {
font-size: 11px;
color: white;
margin-left: auto;
position: relative;
top: -73px;
left: 118px;
cursor: default;
}
.phone-container {
background-image: url(img/phone.png);
background-size: cover;
position: fixed;
top: 49%;
left: 50%;
transform: translate(-50%, -50%);
width: 600px;
height: 950px;
border-radius: 45px;
padding: 15px;
display: none;
z-index: 1000;
}
.phone-notch {
position: absolute;
top: 95px;
right: 205px;
width: 162px;
height: 1.8em;
background-image: url(img/notch.png);
background-color: transparent;
border: none;
background-size: cover;
z-index: 1;
}
.phone-close {
position: absolute;
padding-bottom: 10px;
bottom: 95px;
right: 272px;
background: none;
border: none;
border-radius: 50%;
color: white;
font-size: 23px;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
transition: background 0.2s ease;
z-index: 1;
}
.phone-close:hover {
background: none;
border: none;
}
.phone-screen {
background-image: url(img/phoneback.png);
background-position: center;
background-size: cover;
background-repeat: no-repeat;
width: 330px;
height: 750px;
border-radius: 52px;
padding: 20px;
color: white;
font-family: 'Arial', sans-serif;
overflow: hidden;
border: 1px solid rgb(140 172 255);
position: absolute;
top: 494px;
left: 339px;
transform: translate(-49%, -50%);
}
.phone-screen::before {
content: '';
position: absolute;
top: 0;
left: -50%;
width: 200%;
height: 100%;
background: linear-gradient(
to bottom,
transparent,
rgba(0, 150, 255, 0.05),
transparent
);
transform: rotate(-45deg);
}
@keyframes screenGlow {
0% { transform: translateX(-50%) rotate(-45deg); }
100% { transform: translateX(50%) rotate(-45deg); }
}
.top-bar {
position: absolute;
top: 60px;
left: 35px;
display: flex;
align-items: center;
gap: 15px;
padding: 5px;
z-index: 1;
}
.files-button {
font-size: 25px;
position: relative;
}
.file-detail-window {
display: none;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
backdrop-filter: blur(2px);
background: rgba(91, 91, 91, 0.31);
z-index: 1000;
padding: 20px;
overflow-y: auto;
}
.media-viewer-content {
position: relative;
top: 3em;
max-width: 90%;
max-height: 90%;
}
.wallet-info {
display: flex;
align-items: center;
gap: 5px;
position: relative;
left: 10em;
}
.wallet-icon {
background-image: url(img/wallet.png);
background-size: cover;
width: 32px;
height: 32px;
display: block;
position: relative;
}
.wallet-amount {
color: #00ba2a;
font-family: Arial, sans-serif;
font-size: 14px;
font-weight: bold;
background: linear-gradient(90deg, #00ba64, #66d600);
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.2);
padding: 2px 6px;
border-radius: 4px;
position: relative;
top: 22px;
left: -50px;
cursor: default;
}
.files-button {
font-size: 24px;
cursor: pointer;
padding: 5px;
transition: transform 0.3s ease;
}
.files-button:hover {
transform: scale(1.1);
}
.nav-bar {
display: flex;
justify-content: space-around;
align-items: center;
padding: 15px;
background: rgb(0 4 12 / 29%);
border-radius: 20px;
margin: 30px 0 20px 0;
backdrop-filter: blur(10px);
height: 2em;
width: 365px;
position: relative;
top: 633px;
left: -30px;
gap: 55px;
}
.detail-navigation {
display: flex;
justify-content: space-around;
align-items: center;
padding: 15px;
background: rgb(29 44 89 / 61%);
border-radius: 5px;
margin: 30px 0 20px 0;
backdrop-filter: blur(10px);
height: 2em;
width: 343px;
position: relative;
top: 651px;
left: -23px;
color: black;
overflow: hidden;
}
.nav-item {
position: relative;
top: -1px;
padding: 15px;
cursor: pointer;
border-radius: 15px;
transition: all 0.3s ease;
font-size: 24px;
display: flex;
align-items: center;
justify-content: center;
width: 40px;
height: 10px;
left: -6px;
}
.nav-button {
position: relative;
left: -100px;
top: 3px;
border: none;
background: none;
color: #d7d7d7;
font-size: 35px;
z-index: 100;
}
.nav-button:hover {
transform: scale(1.1);
border: none;
background: none;
}
button:disabled {
background-color: transparent;
border: none;
}
.nav-item:hover {
transform: scale(1.1);
}
.nav-item::after {
content: attr(data-label);
position: absolute;
bottom: -25px;
left: 50%;
transform: translateX(-50%);
font-size: 12px;
opacity: 0;
transition: all 0.3s ease;
white-space: nowrap;
color: rgba(0, 150, 255, 0.8);
}
.nav-item:hover::after {
opacity: 1;
bottom: -20px;
}
.nav-item.active {
background: #1a669b45;
box-shadow: 0 0 10px #0096ff33;
}
.content {
height: calc(100% - 65px);
overflow-y: hidden;
padding: 10px;
position: relative;
top: -11em;
}
.screen {
display: none;
opacity: 0;
transform: translateY(100px);
transition: all 0.5s cubic-bezier(0.4, 0, 0.2, 1);
position: relative;
height: 100%;
overflow-y: scroll;
scrollbar-width: none;
-ms-overflow-style: none;
}
.screen.active {
display: block;
opacity: 1;
transform: translateY(0);
position: relative;
top: -2em;
height: 41em;
animation: slideUpFade 1s cubic-bezier(0.4, 0, 0.2, 1) forwards;
z-index: 1;
}
#files {
top: 22px;
}
@keyframes slideUpFade {
0% {
opacity: 0;
transform: translateY(100px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
.screen::-webkit-scrollbar {
display: none;
}
.screen.active .contact-card {
opacity: 0;
animation: cardSlideUp 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards;
animation-delay: calc(var(--card-index) * 0.5s);
}
@keyframes cardSlideUp {
0% {
opacity: 0;
transform: translateY(50px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
.screen.active .objective {
opacity: 0;
animation: objectiveSlideUp 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards;
animation-delay: calc(var(--objective-index) * 0.1s);
}
@keyframes objectiveSlideUp {
0% {
opacity: 0;
transform: translateY(50px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
.screen.active .file-card {
opacity: 0;
animation: fileSlideUp 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards;
animation-delay: calc(var(--file-index) * 0.1s);
}
@keyframes fileSlideUp {
0% {
opacity: 0;
transform: translateY(50px);
}
100% {
opacity: 1;
transform: translateY(0);
}
}
.contact-card {
background: #040404e0;
border-radius: 15px;
padding: 20px;
margin-bottom: 15px;
transition: all 0.3s ease;
border: 1px solid #667cb9;
box-shadow: 0px 0px 10px #000000;
backdrop-filter: blur(5px);
position: relative;
top: 0em;
height: fit-content;
backdrop-filter: blur(10px);
cursor: pointer;
}
.contact-card:hover {
transform: translateY(-5px) scale(1.02);
box-shadow: 0 0px 15px rgb(120 199 255 / 79%);
background: rgb(0 0 0 / 71%);
backdrop-filter: blur(5px);
}
.contact-header {
display: flex;
align-items: center;
gap: 15px;
}
.contact-image {
position: fixed;
top: 1px;
left: 1px;
width: 60px;
height: 60px;
border-radius: 15px;
overflow: hidden;
background: rgba(0, 0, 0, 0.2);
z-index: 1000;
}
.contact-image img {
width: 100%;
height: 100%;
object-fit: cover;
transition: transform 0.3s ease;
}
.contact-card:hover .contact-image img {
transform: scale(1.1);
}
.contact-info {
flex-grow: 1;
}
.contact-info h3 {
margin: 0 0 5px 0;
color: #ebb000;
font-size: 1.1em;
text-align: center;
}
.contact-info p {
margin-top: 15px;
font-size: 0.9em;
opacity: 0.8;
}
.objective {
padding: 20px;
margin-bottom: 15px;
border-radius: 15px;
transition: all 0.3s ease;
backdrop-filter: blur(10px);
cursor: default;
}
.main-objective {
background: #040404e0;
border: 2px solid #b98f66;
}
.secondary-objective {
background: #040404e0;
border: 2px solid #667db9;
}
.objective h3 {
margin: 0;
color: white;
font-size: 1.1em;
}
.objective p {
margin: 0;
opacity: 0.8;
}
.file-card {
background: #040404e0;
border-radius: 15px;
padding: 20px;
margin-bottom: 15px;
transition: all 0.3s ease;
border: 1px solid #667cb9;
box-shadow: 0px 0px 10px #000000;
backdrop-filter: blur(5px);
cursor: pointer;
}
.file-card:hover {
transform: translateY(-5px) scale(1.02);
box-shadow: 0 0 15px rgba(120, 199, 255, 0.79);
background: rgba(0, 0, 0, 0.71);
}
.file-header {
display: flex;
align-items: center;
gap: 15px;
}
.file-card:hover .file-icon img {
transform: scale(1.1);
}
.file-info h3 {
margin: 0 0 5px 0;
color: #ebb000;
font-size: 1.1em;
text-align: center;
}
.no-files-message {
background-color: rgba(255, 255, 255, 0.92);
text-align: center;
color: #000000;
border-radius: 10px;
padding: 0px 6px;
font-size: 23px;
}
.phone-button {
position: fixed;
top: 236px;
left: 265px;
width: 51px;
height: 51px;
background: #0d0d0d;
border: 1px solid #f5deb36e;
border-radius: 18%;
font-size: 24px;
cursor: pointer;
transition: all 0.3s ease;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
z-index: 1000;
display: flex;
align-items: center;
justify-content: center;
}
.phone-button:hover {
background: #5f5f5f;
border: 1px solid #f5deb36e;
}
.content::-webkit-scrollbar {
width: 5px;
}
.content::-webkit-scrollbar-track {
background: rgba(0, 150, 255, 0.05);
border-radius: 10px;
}
.content::-webkit-scrollbar-thumb {
background: rgba(0, 150, 255, 0.2);
border-radius: 10px;
}
.content::-webkit-scrollbar-thumb:hover {
background: rgba(0, 150, 255, 0.3);
}
.contact-detail-window {
display: none;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
backdrop-filter: blur(2px);
background: #5b5b5b4f;
z-index: 1000;
padding: 20px;
overflow-y: auto;
}
.gallery-grid {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 10px;
padding: 10px;
position: relative;
top: -7em;
height: calc(100% - 100px);
overflow-y: auto;
}
.gallery-item {
position: relative;
aspect-ratio: 1;
cursor: pointer;
border-radius: 10px;
overflow: hidden;
border: 1px solid rgba(255, 255, 255, 0.2);
transition: transform 0.2s ease;
display: flex;
justify-content: center;
align-items: center;
}
.gallery-item:hover {
transform: scale(1.05);
}
.gallery-thumbnail {
width: 100%;
height: 100%;
object-fit: cover;
display: block;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
.video-indicator {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background: rgba(0, 0, 0, 0.6);
color: white;
padding: 5px 10px;
border-radius: 50%;
font-size: 12px;
}
.media-viewer {
display: none;
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
background: rgba(0, 0, 0, 0.9);
z-index: 2000;
justify-content: center;
align-items: center;
}
.media-viewer-content {
position: relative;
top: 3em;
max-width: 90vw;
max-height: 90vh;
}
.full-media {
max-width: 100%;
object-fit: contain;
}
.close-media-button {
position: absolute;
bottom: 38px;
left: 55px;
width: 1px;
height: 1px;
background: none;
border: none;
border-radius: 50%;
color: white;
font-size: 34px;
cursor: pointer;
}
.close-media-button:hover {
transform: scale(1.1);
border: none;
background: none;
bottom: 44px;
left: 53px;
}
.no-media-message {
background-color: rgb(255 255 255 / 92%);
text-align: center;
color: #000000;
border-radius: 10px;
padding: 0px 6px;
font-size: 23px;
grid-column: 1 / -1;
}
.folder-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(100px, 1fr));
gap: 15px;
padding: 10px;
}
.file-icon {
display: flex;
justify-content: center;
cursor: pointer;
}
.icon-wrapper {
display: flex;
flex-direction: column;
align-items: center;
width: 80px;
}
.icon-wrapper img {
width: 60px;
height: 60px;
margin-bottom: 5px;
}
.icon-label {
background-color: rgba(0, 0, 0, 0.7);
color: white;
font-size: 12px;
text-align: center;
padding: 2px 5px;
border-radius: 3px;
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.file-icon img {
width: 60px;
height: 60px;
}
.file-name {
margin-top: 5px;
text-align: center;
font-size: 12px;
color: white;
}
.file-viewer {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
z-index: 2000;
display: none;
}
.full-file {
width: 600px;
height: auto;
position: absolute;
top: 50%;
left: 55%;
transform: translate(-50%, -50%);
}
#file-viewer .close-file-button {
position: absolute;
top: 92px;
left: 325px;
font-size: 20px;
color: red !important;
background: none;
border: none;
cursor: pointer;
}
#file-viewer .close-file-button:hover {
color: red !important;
background-color: transparent;
}
</style>
<<include "Diary">>
<<include "Diary">>
<<script>>
// Format money display with K notation for values over 999
function formatMoney(amount) {
if (amount >= 1000) {
// Format with one decimal place if it's not a round number of thousands
if (amount % 1000 !== 0) {
return (amount / 1000).toFixed(1) + 'k';
} else {
return (amount / 1000) + 'k';
}
}
return amount;
}
$(document).on(':passagerender', function() {
// Setup card indices for animations
$('.contact-card').each(function(index) {
$(this).css('--card-index', index);
});
$('.objective').each(function(index) {
$(this).css('--objective-index', index);
});
$('.file-icon').each(function(index) {
$(this).css('--file-index', index);
});
// Setup navigation
$('.nav-item').off('click').on('click', function() {
const targetScreen = $(this).data('screen');
$('.screen, .nav-item').removeClass('active');
$(this).addClass('active');
$(`#${targetScreen}`).addClass('active');
});
// Format money display
const walletAmount = $('.wallet-amount');
if (walletAmount.length) {
// Check if the content is a raw number (from the print tag)
const currentText = walletAmount.text();
if (/^$d+$/.test(currentText)) {
const numericValue = parseInt(currentText.replace('$', ''), 10);
if (!isNaN(numericValue)) {
const formattedMoney = formatMoney(numericValue);
walletAmount.text('$' + formattedMoney);
}
}
}
});
$(document).ready(function() {
// Make sure setup object exists
if (typeof setup === 'undefined') {
window.setup = {};
}
if (typeof setup.phoneSystem === 'undefined') {
setup.phoneSystem = {};
}
if (typeof setup.phoneSystem.updateMoneyDisplay !== 'function') {
setup.phoneSystem.updateMoneyDisplay = function() {
try {
// Get current money value
const money = State.variables.McMoney || 0;
const formattedMoney = formatMoney(money);
if (!$('.wallet-counter').length && $('.wallet-icon').length) {
$('.wallet-icon').append('<span class="wallet-counter">$' + formattedMoney + '</span>');
$('.wallet-info').addClass('wallet-counter-active');
} else if ($('.wallet-counter').length) {
$('.wallet-counter').text('$' + formattedMoney);
}
} catch (e) {
console.log("Error in updateMoneyDisplay:", e);
}
};
}
if (typeof setup.phoneSystem.updateFileCounter !== 'function') {
setup.phoneSystem.updateFileCounter = function() {
try {
const fileCount = State.variables.files ? State.variables.files.length : 0;
if (!$('.files-counter').length && $('.files-button').length) {
$('.files-button').append('<span class="files-counter">' + fileCount + '</span>');
} else if ($('.files-counter').length) {
$('.files-counter').text(fileCount);
}
} catch (e) {
console.log("Error in updateFileCounter:", e);
}
};
}
const originalInit = setup.phoneSystem.init || function() {};
setup.phoneSystem.init = function() {
try {
// Call original init if it exists
originalInit.call(this);
// Update money display and file counter
if (typeof this.updateMoneyDisplay === 'function') {
this.updateMoneyDisplay();
}
if (typeof this.updateFileCounter === 'function') {
this.updateFileCounter();
}
} catch (e) {
console.log("Error in phoneSystem.init:", e);
}
};
const originalRefreshFiles = setup.phoneSystem.refreshFiles || function() {};
setup.phoneSystem.refreshFiles = function() {
try {
// Call original refreshFiles if it exists
originalRefreshFiles.call(this);
const filesContainer = $('#files');
if (filesContainer.length) {
filesContainer.empty();
const files = State.variables.files || [];
if (!files.length) {
filesContainer.html('<div class="no-files-message">No files collected yet</div>');
} else {
const folderGrid = $('<div class="folder-grid"></div>');
files.forEach((file, index) => {
const fileItem = $('<div>')
.addClass('file-icon')
.attr('data-index', index)
.html(`
<div class="icon-wrapper">
<img src="img/documents/generic_file_icon.png" alt="${file.name}" />
<span class="icon-label">${file.name}</span>
</div>
`)
.on('click', () => {
if (typeof this.showFileDetail === 'function') {
this.showFileDetail(file);
}
});
folderGrid.append(fileItem);
});
filesContainer.append(folderGrid);
}
}
if (typeof this.updateFileCounter === 'function') {
this.updateFileCounter();
}
} catch (e) {
console.log("Error in phoneSystem.refreshFiles:", e);
}
};
$('.phone-button').off('click').on('click', function() {
try {
if ($('.phone-container').is(':hidden')) {
if (setup.phoneSystem && typeof setup.phoneSystem.createOpenSound === 'function') {
setup.phoneSystem.createOpenSound();
}
$('.phone-container').fadeIn(200);
if (setup.phoneSystem) {
if (typeof setup.phoneSystem.updateMoneyDisplay === 'function') {
setup.phoneSystem.updateMoneyDisplay();
}
if (typeof setup.phoneSystem.updateFileCounter === 'function') {
setup.phoneSystem.updateFileCounter();
}
}
} else {
if (setup.phoneSystem && typeof setup.phoneSystem.createCloseSound === 'function') {
setup.phoneSystem.createCloseSound();
}
$('.phone-container').fadeOut(200);
}
} catch (e) {
console.log("Error in phone-button click handler:", e);
// Fallback behavior if there's an error
$('.phone-container').fadeToggle(200);
}
});
$('.phone-close').off('click').on('click', function() {
try {
if (setup.phoneSystem && typeof setup.phoneSystem.createCloseSound === 'function') {
setup.phoneSystem.createCloseSound();
}
$('.phone-container').fadeOut(200);
} catch (e) {
console.log("Error in phone-close click handler:", e);
$('.phone-container').fadeOut(200);
}
});
$('.files-button').off('click').on('click', function() {
try {
const filesScreen = $('#files');
if (filesScreen.hasClass('active')) {
$('.screen, .nav-item').removeClass('active');
} else {
$('.screen, .nav-item').removeClass('active');
filesScreen.addClass('active');
}
} catch (e) {
console.log("Error in files-button click handler:", e);
}
});
// Update money and files on state changes
$(document).on(':stateupdate', function() {
try {
if (setup.phoneSystem) {
if (typeof setup.phoneSystem.updateMoneyDisplay === 'function') {
setup.phoneSystem.updateMoneyDisplay();
}
if (typeof setup.phoneSystem.updateFileCounter === 'function') {
setup.phoneSystem.updateFileCounter();
}
}
} catch (e) {
console.log("Error in stateupdate handler:", e);
}
});
setTimeout(function() {
try {
if (setup.phoneSystem) {
if (typeof setup.phoneSystem.updateMoneyDisplay === 'function') {
setup.phoneSystem.updateMoneyDisplay();
}
if (typeof setup.phoneSystem.updateFileCounter === 'function') {
setup.phoneSystem.updateFileCounter();
}
}
} catch (e) {
console.log("Error in delayed initialization:", e);
}
}, 300);
});
<</script>>Diary and characters
New main objective
<<script>>
setup.phoneSystem.addObjective(
"Talk to Captain Havook",
"Go to captain's office and talk to him",
'main',
'talkHavook' // ID
);
<</script>>
New secondary objective
<<script>>
setup.phoneSystem.addObjective(
"Investigar el crimen",
"Buscar pistas en la escena del crimen",
'secondary'
);
<</script>>
When complete objective (all)
<<script>>
setup.phoneSystem.completeObjective('talkHavook');
<</script>>
añadir contacto
<<script>>
setup.phoneSystem.addContact("Gabi", "Mi compañera detective en New Veris", "img/characters/rodriguez/avatar.png");
<</script>>
<<script>>
setup.phoneSystem.addContact("Name", "Description", "img/characters/path/avatar.png");
<</script>>
add image
<<script>>
setup.phoneSystem.unlockMedia("Gabi", "image", "img/characters/rodriguez/rodriguez.png");
<</script>>
add video
<<script>>
setup.phoneSystem.unlockMedia("Gabi", "video", "videos/rodriguez/video1.mp4");
<</script>>
add file
<<script>>
setup.phoneSystem.addFile("Resign form", "img/documents/documentointro1.png");
<</script>><<script>>
setup.phoneSystem = {
initialized: false,
audioContext: null,
objectives: { main: null, secondary: [] },
files: [],
createOpenSound: function() {
if (!this.audioContext) {
this.audioContext = new (window.AudioContext || window.webkitAudioContext)();
}
const osc1 = this.audioContext.createOscillator();
const osc2 = this.audioContext.createOscillator();
const gainNode1 = this.audioContext.createGain();
const gainNode2 = this.audioContext.createGain();
osc1.type = 'sine';
osc1.frequency.setValueAtTime(600, this.audioContext.currentTime);
osc1.frequency.exponentialRampToValueAtTime(800, this.audioContext.currentTime + 0.15);
osc2.type = 'triangle';
osc2.frequency.setValueAtTime(1200, this.audioContext.currentTime);
osc2.frequency.exponentialRampToValueAtTime(1000, this.audioContext.currentTime + 0.1);
gainNode1.gain.setValueAtTime(0.15, this.audioContext.currentTime);
gainNode1.gain.exponentialRampToValueAtTime(0.01, this.audioContext.currentTime + 0.15);
gainNode2.gain.setValueAtTime(0.08, this.audioContext.currentTime);
gainNode2.gain.exponentialRampToValueAtTime(0.01, this.audioContext.currentTime + 0.1);
osc1.connect(gainNode1);
osc2.connect(gainNode2);
gainNode1.connect(this.audioContext.destination);
gainNode2.connect(this.audioContext.destination);
osc1.start(this.audioContext.currentTime);
osc2.start(this.audioContext.currentTime);
osc1.stop(this.audioContext.currentTime + 0.15);
osc2.stop(this.audioContext.currentTime + 0.1);
},
createCloseSound: function() {
if (!this.audioContext) {
this.audioContext = new (window.AudioContext || window.webkitAudioContext)();
}
const osc1 = this.audioContext.createOscillator();
const osc2 = this.audioContext.createOscillator();
const gainNode1 = this.audioContext.createGain();
const gainNode2 = this.audioContext.createGain();
osc1.type = 'sine';
osc1.frequency.setValueAtTime(800, this.audioContext.currentTime);
osc1.frequency.exponentialRampToValueAtTime(400, this.audioContext.currentTime + 0.15);
osc2.type = 'triangle';
osc2.frequency.setValueAtTime(1000, this.audioContext.currentTime);
osc2.frequency.exponentialRampToValueAtTime(600, this.audioContext.currentTime + 0.1);
gainNode1.gain.setValueAtTime(0.15, this.audioContext.currentTime);
gainNode1.gain.exponentialRampToValueAtTime(0.01, this.audioContext.currentTime + 0.15);
gainNode2.gain.setValueAtTime(0.08, this.audioContext.currentTime);
gainNode2.gain.exponentialRampToValueAtTime(0.01, this.audioContext.currentTime + 0.1);
osc1.connect(gainNode1);
osc2.connect(gainNode2);
gainNode1.connect(this.audioContext.destination);
gainNode2.connect(this.audioContext.destination);
osc1.start(this.audioContext.currentTime);
osc2.start(this.audioContext.currentTime);
osc1.stop(this.audioContext.currentTime + 0.15);
osc2.stop(this.audioContext.currentTime + 0.1);
},
init: function() {
if (!this.initialized) {
State.variables.contacts = State.variables.contacts || [];
State.variables.unlockedMedia = State.variables.unlockedMedia || {};
State.variables.lastViewedMedia = State.variables.lastViewedMedia || {};
State.variables.objectives = State.variables.objectives || { main: null, secondary: [] };
State.variables.files = State.variables.files || [];
this.setupEventListeners();
this.initialized = true;
$('.phone-container').hide();
$('.screen').removeClass('active');
$('.nav-item').removeClass('active');
if (!$('#contacts').length) {
$('<div id="contacts" class="screen active"></div>').appendTo('.content');
}
if (!$('#contact-detail-window').length) {
$('<div id="contact-detail-window" class="contact-detail-window"><div class="contact-detail-content"></div></div>').appendTo('.phone-screen');
}
if (!$('#objectives').length) {
$('<div id="objectives" class="screen"></div>').appendTo('.content');
}
if (!$('#files').length) {
$('<div id="files" class="screen"></div>').appendTo('.content');
}
if (!$('#file-viewer').length) {
$('<div id="file-viewer" class="file-viewer"><div class="file-viewer-content"></div><button class="close-file-button">✖</button></div>').appendTo('.phone-container');
}
this.objectives = {
main: State.variables.objectives.main,
secondary: [...State.variables.objectives.secondary]
};
this.files = [...State.variables.files];
this.updateObjectivesDisplay();
this.refreshContacts();
this.refreshFiles();
}
},
setupEventListeners: function() {
if ($('.phone-button').length) {
$('.phone-button').off('click').on('click', () => {
if ($('.phone-container').is(':hidden')) {
this.createOpenSound();
$('.phone-container').fadeIn(200);
} else {
this.createCloseSound();
$('.phone-container').fadeOut(200, () => {
$('.screen').removeClass('active');
$('.nav-item').removeClass('active');
});
}
});
}
if ($('.phone-close').length) {
$('.phone-close').off('click').on('click', () => {
this.createCloseSound();
$('.phone-container').fadeOut(200, () => {
$('.screen').removeClass('active');
$('.nav-item').removeClass('active');
});
});
}
if ($('.nav-item').length) {
$('.nav-item').off('click').on('click', function() {
const targetScreen = $(this).data('screen');
if ($(this).hasClass('active')) {
$('.nav-item').removeClass('active');
$('.screen').removeClass('active');
} else {
$('.nav-item').removeClass('active');
$(this).addClass('active');
$('.screen').removeClass('active');
$(`#${targetScreen}`).addClass('active');
}
});
}
if ($('.files-button').length) {
$('.files-button').off('click').on('click', () => {
if ($('#files').hasClass('active')) {
$('.screen').removeClass('active');
$('.nav-item').removeClass('active');
} else {
$('.screen').removeClass('active');
$('.nav-item').removeClass('active');
$('#files').addClass('active');
}
});
}
},
unlockMedia: function(contactName, mediaType, mediaPath) {
if (!State.variables.unlockedMedia[contactName]) {
State.variables.unlockedMedia[contactName] = { images: [], videos: [] };
}
const media = State.variables.unlockedMedia[contactName];
if (mediaType === 'image' && !media.images.includes(mediaPath)) {
media.images.push(mediaPath);
} else if (mediaType === 'video' && !media.videos.includes(mediaPath)) {
media.videos.push(mediaPath);
}
const detailWindow = $('#contact-detail-window');
if (detailWindow.is(':visible')) {
const contact = State.variables.contacts.find(c => c.name === contactName);
if (contact) this.showContactDetail(contact);
}
},
showContactDetail: function(contact) {
const detailWindow = $('#contact-detail-window');
const detailContent = detailWindow.find('.contact-detail-content');
const unlockedMedia = State.variables.unlockedMedia[contact.name] || { images: [], videos: [] };
const allMedia = [...unlockedMedia.images, ...unlockedMedia.videos];
let contentHtml = `
<div class="detail-navigation">
<button class="nav-button back-button">◀</button>
</div>
<div class="gallery-grid">`;
if (allMedia.length > 0) {
allMedia.forEach((media, index) => {
const isVideo = unlockedMedia.videos.includes(media);
contentHtml += isVideo
? `<div class="gallery-item" data-media="${media}" data-type="video">
<video src="${media}" class="gallery-thumbnail">Your browser does not support the video tag.</video>
<div class="video-indicator">▶</div>
</div>`
: `<div class="gallery-item" data-media="${media}" data-type="image">
<img src="${media}" class="gallery-thumbnail" alt="${contact.name}" />
</div>`;
});
} else {
contentHtml += `<div class="no-media-message">No images or videos unlocked</div>`;
}
contentHtml += `</div>
<div class="media-viewer">
<div class="media-viewer-content"></div>
<button class="close-media-button">◀</button>
</div>`;
detailContent.html(contentHtml);
$('.back-button').off('click').on('click', () => detailWindow.fadeOut(200));
$('.gallery-item').off('click').on('click', function() {
const mediaPath = $(this).data('media');
const mediaType = $(this).data('type');
const mediaViewer = $('.media-viewer');
const mediaContent = $('.media-viewer-content');
mediaContent.html(mediaType === 'video'
? `<video src="${mediaPath}" class="full-media" controls playsinline>Your browser does not support the video tag.</video>`
: `<img src="${mediaPath}" class="full-media" alt="${contact.name}" />`);
mediaViewer.fadeIn(200);
});
$('.close-media-button').off('click').on('click', () => $('.media-viewer').fadeOut(200));
detailWindow.fadeIn(200);
},
addContact: function(name, description, imageUrl = 'img/characters/default.png') {
const existingContactIndex = State.variables.contacts.findIndex(contact => contact.name === name);
if (existingContactIndex !== -1) {
State.variables.contacts[existingContactIndex] = { name, description, imageUrl };
} else {
State.variables.contacts.push({ name, description, imageUrl });
}
this.refreshContacts();
},
refreshContacts: function() {
const contactsContainer = $('#contacts');
contactsContainer.empty();
State.variables.contacts.forEach(contact => {
const contactCard = $('<div>')
.addClass('contact-card')
.html(`
<div class="contact-header">
<div class="contact-image">
<img src="${contact.imageUrl}" alt="${contact.name}" />
</div>
<div class="contact-info">
<h3>${contact.name}</h3>
<p>${contact.description}</p>
</div>
</div>
`)
.on('click', () => this.showContactDetail(contact));
contactsContainer.append(contactCard);
});
},
addObjective: function(title, description, type = 'main', id = null) {
const objectiveId = id || Math.random().toString(36).substr(2, 9);
const objective = { id: objectiveId, title, description, type, completed: false };
if (type === 'main') {
this.objectives.main = objective;
State.variables.objectives.main = objective;
} else {
const existingIndex = this.objectives.secondary.findIndex(obj => obj.id === objectiveId);
if (existingIndex !== -1) {
this.objectives.secondary[existingIndex] = objective;
State.variables.objectives.secondary[existingIndex] = objective;
} else {
this.objectives.secondary.push(objective);
State.variables.objectives.secondary.push(objective);
}
}
this.updateObjectivesDisplay();
},
completeObjective: function(id) {
let objectives = State.variables.objectives;
if (objectives.main && objectives.main.id === id) {
objectives.main = null;
}
objectives.secondary = objectives.secondary.filter(obj => obj.id !== id);
State.variables.objectives = objectives;
this.objectives = { main: objectives.main, secondary: [...objectives.secondary] };
this.updateObjectivesDisplay();
},
updateObjectivesDisplay: function() {
const $objectives = $('#objectives');
$objectives.empty();
if (this.objectives.main) {
$objectives.append(`
<div class="objective main-objective" data-id="${this.objectives.main.id}">
<h3>${this.objectives.main.title}</h3>
<p>${this.objectives.main.description}</p>
</div>
`);
}
if (this.objectives.secondary && this.objectives.secondary.length > 0) {
this.objectives.secondary.forEach(obj => {
$objectives.append(`
<div class="objective secondary-objective" data-id="${obj.id}">
<h3>${obj.title}</h3>
<p>${obj.description}</p>
</div>
`);
});
}
},
addFile: function(name, imagePath) {
const fileExists = State.variables.files.some(file => file.name === name);
if (!fileExists) {
const file = { name, imagePath };
State.variables.files.push(file);
this.files = [...State.variables.files];
this.refreshFiles();
}
},
refreshFiles: function() {
const filesContainer = $('#files');
filesContainer.empty();
if (this.files.length === 0) {
filesContainer.html('<div class="no-files-message">No files collected yet</div>');
} else {
const folderGrid = $('<div class="folder-grid"></div>');
this.files.forEach(file => {
const fileItem = $('<div>')
.addClass('file-icon')
.html(`
<div class="icon-wrapper">
<img src="img/documents/generic_file_icon.png" alt="${file.name}" />
<span class="icon-label">${file.name}</span>
</div>
`)
.on('click', () => this.showFileDetail(file));
folderGrid.append(fileItem);
});
filesContainer.append(folderGrid);
}
},
showFileDetail: function(file) {
const fileViewer = $('#file-viewer');
const fileContent = fileViewer.find('.file-viewer-content');
fileContent.html(`<img src="${file.imagePath}" class="full-file" alt="${file.name}" />`);
fileViewer.fadeIn(200);
$('.close-file-button').off('click').on('click', () => {
fileViewer.fadeOut(200, () => {
$('#files').addClass('active'); // Volver a la pantalla de archivos
});
});
}
};
$(document).on(':passagestart', function() {
setTimeout(() => {
setup.phoneSystem.init();
setup.phoneSystem.refreshContacts();
setup.phoneSystem.refreshFiles();
}, 100);
});
$(document).on(':passagerender', function() {
setup.phoneSystem.setupEventListeners();
});
<</script>><div class="links-container">
<div class="title3"></div>
<div id="title4"></div>
<div class="links">
<th>[[Arrive|introllegada1]]</th>
</div>
</div>
<<audio "caseyoffice" stop>>
<<audio "caseyDescent" play loop volume 0.6>>
<<set $imageList to ["media/events/caseytrip/init.png", "media/events/caseytrip/uno.png", "media/events/caseytrip/dos.png", "media/events/caseytrip/tres.gif", "media/events/caseytrip/cuatro.png", "media/events/caseytrip/cinco.png", "media/events/caseytrip/seis.png", "media/events/caseytrip/siete.png","media/events/caseytrip/ocho.png", "media/events/caseytrip/nueve.gif", "media/events/caseytrip/diez.png", "media/events/caseytrip/once.png", "media/events/caseytrip/doce.png", "media/events/caseytrip/trece.png", "media/events/caseytrip/last.gif", "img/backgrounds/intro1.png"]>>
<<set $imageIndex to 0>>
<<script>>
window.changeImage = function (newImageSrc) {
const imgElement = document.getElementById('character-image');
if (!imgElement) {
console.error('No se encontró el elemento con id "character-image".');
return;
}
// Ocultar la imagen actual con opacidad y difuminado
imgElement.classList.add('hidden');
// Esperar a que la transición de opacidad termine
setTimeout(() => {
// Cambiar la fuente de la imagen
imgElement.src = newImageSrc;
// Asegurar que la imagen se muestre solo cuando esté completamente cargada
imgElement.onload = () => {
// Esperar un pequeño retraso antes de mostrar la nueva imagen
setTimeout(() => {
imgElement.classList.remove('hidden');
}, 50); // Retraso corto para asegurar la transición
};
}, 500); // Duración que coincide con la transición CSS
};
<</script>>
<<include "imgr2">>
<style>
.title2, .ptr, #credits {
opacity: 0;
}
#character-menu, .phone-button, #money {
visibility: visible;
display: none;
}
/* Estilos de los enlaces */
.links {
position: relative;
top: 55em;
text-align: left;
z-index: 10;
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: 8px;
margin-bottom: 3em;
font-size: 12px;
width: 100%;
}
/* Initial state - container starts hidden */
.links-container {
opacity: 0;
visibility: hidden;
position: fixed;
top: 38%;
left: 50%;
transform: translate(-50%, -50%);
text-align: center;
z-index: 100;
-webkit-animation: showDelayed 0.5s ease-in forwards;
-moz-animation: showDelayed 0.5s ease-in forwards;
-o-animation: showDelayed 0.5s ease-in forwards;
animation: showDelayed 0.5s ease-in forwards;
-webkit-animation-delay: 15s;
-moz-animation-delay: 15s;
-o-animation-delay: 15s;
animation-delay: 15s;
height: 49em;
}
/* Keyframes for the fade-in effect */
@-webkit-keyframes showDelayed {
0% {
opacity: 0;
visibility: hidden;
}
100% {
opacity: 1;
visibility: visible;
}
}
@-moz-keyframes showDelayed {
0% {
opacity: 0;
visibility: hidden;
}
100% {
opacity: 1;
visibility: visible;
}
}
@-o-keyframes showDelayed {
0% {
opacity: 0;
visibility: hidden;
}
100% {
opacity: 1;
visibility: visible;
}
}
@keyframes showDelayed {
0% {
opacity: 0;
visibility: hidden;
}
100% {
opacity: 1;
visibility: visible;
}
}
@keyframes subwoofer-pump {
0% {
transform: scale(1) translateZ(0);
filter: blur(0px);
}
20% {
transform: scale(1.08) translateZ(0);
filter: blur(1px);
}
40% {
transform: scale(0.96) translateZ(0);
filter: blur(0.5px);
}
60% {
transform: scale(1.04) translateZ(0);
filter: blur(0.7px);
}
80% {
transform: scale(0.98) translateZ(0);
filter: blur(0.3px);
}
100% {
transform: scale(1) translateZ(0);
filter: blur(0px);
}
}
.title3 {
background-image: url(img/title.png);
background-size: cover;
position: fixed;
top: -9em;
left: 40%;
transform: translateX(-50%);
width: 40em;
height: 40em;
z-index: 1;
}
#title4 {
background-image: url(img/title1.png);
background-size: cover;
position: fixed;
top: 15em;
left: -82%;
transform: translateX(-50%);
width: 17em;
height: 4em;
animation: subwoofer-pump 2s cubic-bezier(0.455, 0.03, 0.515, 0.955) infinite;
transform-origin: center center;
will-change: transform;
backface-visibility: hidden;
perspective: 1000px;
z-index: 1;
}
@media screen and (max-width: 1024px) {
.title3 {
width: 30em;
height: 30em;
}
#title4 {
width: 15em;
height: 4em;
top: 15em;
}
}
@media screen and (max-width: 768px) {
.title3 {
width: 20em;
height: 20em;
top: -3em;
}
#title4 {
width: 12em;
height: 3em;
top: 12em;
}
}
@media screen and (max-width: 480px) {
.title3 {
width: 15em;
height: 15em;
top: -2em;
}
#title4 {
width: 10em;
height: 2.5em;
top: 10em;
}
}
@media screen and (max-width: 320px) {
.title3 {
width: 12em;
height: 12em;
}
#title4 {
width: 8em;
height: 2em;
}
</style>
<style>
#container {
opacity: 0; /* Inicialmente invisible */
filter: blur(10px); /* Desenfoque inicial */
animation: fadeBlurIn 5s ease-in-out forwards; /* Animación combinada */
animation-delay: 3s; /* El inicio de la animación se retrasa 3 segundos */
}
/* Animación personalizada */
@keyframes fadeBlurIn {
0% {
opacity: 0;
filter: blur(10px);
}
50% {
opacity: 0.5;
filter: blur(5px);
}
100% {
opacity: 1;
filter: blur(0);
}
}
</style>
<<script>>
$(document).ready(function () {
setTimeout(function () {
$('#container').addClass('visible');
}, 5000); // 5 segundos
});
<</script>>
<<set $bag = 0>><div id="imageContainer">
<img src="media/events/caseytrip/init.png" id="currentImage">
</div>
<<script>>
$(document).ready(function () {
var images = State.variables.imageList; // Lista de imágenes
var currentIndex = State.variables.imageIndex; // Índice actual
var $imageContainer = $('#imageContainer'); // Contenedor de imágenes
var $currentImage = $('#currentImage'); // Imagen actual
setInterval(function () {
// Actualizar el índice para la próxima imagen
currentIndex = (currentIndex + 1) % images.length;
State.variables.imageIndex = currentIndex;
// Crear una nueva imagen para la transición
var $nextImage = $('<img>')
.attr('src', images[currentIndex])
.addClass('fade-in') // Clase CSS para la animación
.css({
position: 'absolute',
top: 0,
left: 0,
width: '100%',
height: '100%',
objectFit: 'cover',
});
// Agregar la nueva imagen al contenedor
$imageContainer.append($nextImage);
// Esperar a que la transición termine y eliminar la imagen anterior
setTimeout(function () {
$currentImage.remove(); // Eliminar la imagen anterior
$nextImage.removeClass('fade-in'); // Eliminar la clase para mantener la nueva imagen fija
$currentImage = $nextImage; // Actualizar la referencia
}, 2000); // Duración de la animación (2s)
}, 4000); // Cambiar cada 8 segundos
});
<</script>>
<style>
body {
--ui-bar-height: 0 !important;
}
#ui-bar {
background: transparent;
}
#story {
top: 0 !important;
}
#imageContainer {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: hidden;
}
#imageContainer img {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
opacity: 1;
transition: opacity 2s ease; /* Transición suave de opacidad */
}
#imageContainer img.fade-in {
opacity: 0;
animation: fadeIn 3s ease forwards;
}
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
</style>
<div id="ConversationBox">
<div id="Ntext">You decide to trust the old staircase, stepping cautiously onto the first rungs. The metal groans under your weight but seems to hold. Just as you begin climbing with more confidence, a sharp and terrifying sound stops you.
CRACK!
The metal gives way suddenly, and you plummet to the ground.</div>
<<say $Mc>>Damn it!<</say>>
<div id="Ntext">The impact knocks the wind out of you, and a sharp pain shoots through your side.</div>
<<say $Mc>>Oh, crap!<</say>>
<div id="Ntext">You slowly sit up, feeling the tender area. Luckily, it seems there are no serious injuries.</div>
<<say $Mc>>Alright... I'm fine. But I'll have to find another way forward.<</say>>
<img id="event-image" src="img/events/escalera.png">
<div class="links">
<th>[[Back|Camino-intermedio]]</th>
</div>
</div>
<<set $escalerarota = true>>
<<script>>
window.decreaseHealth(10);
<</script>><div id="ConversationBox">
<div id="Ntext">You stop in front of the vehicle. The body, covered by a few fallen leaves, suggests it’s been here for a while. The armored windows prevent you from seeing inside.</div>
<div id="Pensamiento">It’s the FBI car, no doubt about it.</div>
<div id="Ntext">You try to open it, but as you pull on the handle, you realize it won’t budge.
</div>
<<say $Mc>>And of course, it’s locked.<</say>>
<div id="Pensamiento">There’s no sign that anyone has been in the car recently.</div>
<<say $Mc>>Anyway, I have to find a way to open it; maybe I’ll find something important.<</say>>
<img id="event-image" src="img/events/fbicar.png">
<div class="links">
<<if $lockpick gte 1>>
<th>[[Try to open with lockpick|openfbicar]]</th>
<</if>>
<<if $ironbarStair is true>>
<th>[[Break glass with iron bar|noblackcar]]</th>
<</if>>
<<if $hasCarKey>>
<th>[[Open car with key|openfbicarKey]]</th>
<</if>>
</div>
<div class="links">
<th>[[Back|Parking2]]</th>
</div>
</div>
<<set $fbicarchek = true>>
<<script>>
setup.phoneSystem.completeObjective('fbicar');
<</script>>
<<script>>
setup.phoneSystem.addObjective(
"Get in the fbi car",
"Find a way to get inside and search the FBI agents' car.",
'secondary',
'fbicar',
);
<</script>>
<<SanityMessage "Objective updated: FBI car">>
<div id="ConversationBox">
<div id="Ntext">The scene before you is like a magnet for your senses. You try to look away, but your eyes remain locked, both fascinated and horrified. Each moan scrapes against your nerves like a match striking sandpaper, igniting a fire you shouldn't feel in a place like this. You swallow hard, trying to smother that uncomfortable heat, that misplaced desire that makes you hate yourself a little.
</div>
<div id="Pensamiento">This isn't right.</div>
<div id="Ntext">But you can't help but look again.</div>
<div id="videoPlaceholder"></div>
<<script>>
window.setupVerticalVideo("videoPlaceholder", "media/mambo/54.mp4", 177);
<</script>>
<div class="links">
<th>[[Look again|peekintro1]]</th>
</div>
</div>
<<script>>
window.decreaseSanity(10);
<</script>>
<<SanityMessage "-10 Sanity">>
<div id="ConversationBox">
<div id="Ntext">The window is broken just as you left it.</div>
<img id="event-image2" src="img/events/brokenwindow.png">
<div class="links">
<th>[[Enter through the window|Enterwindow]]</th>
<th>[[Back|Camino-izquierda]]</th>
</div><div id="ConversationBox">
<div id="Ntext">With a precise strike of the pistol’s butt, the glass shatters, exploding into a shower of sharp fragments. </div>
<div class="links">
<th>[[Enter through the window|Enterwindow]]</th>
</div>
<img id="event-image2" src="img/events/brokenwindow.png">
</div>
<<set $Windowcrash = true>><div id="ConversationBox">
<div id="Ntext">A dry crack echoes through the night as you slip into the abandoned psychiatric facility, landing on the cold, dust-covered floor. The first thing you notice is the sour stench of dampness and decay.</div>
<<say $Mc>>Ugh, what a stench...<</say>>
<div id="Ntext">A man emerges from the shadows, dressed in a torn and stained patient uniform. His head bears the crude scars of a botched lobotomy, leaving his gaze hollow and lost... until he sees you. In his hand, he clutches a strange, sharp object, its twisted form glinting in the dim light.</div>
<div id="Pensamiento">A patient! Maybe I can ask him a few questions.</div>
<div class="links">
<th>[[Talk to him|brokewindowtalk]]</th>
</div>
</div>
<<if $bwinfight gte 1>>
<<goto "Saveroom">>
<</if>>
<<timed 5s>>
<div id="npc-container">
<img src="img/monsters/patients/lbpatient.png" style="
background-repeat: no-repeat;
background-size: cover;
width: 25em;
position: relative;
top: -2em;
right: 2em;
">
</div>
<</timed>>
<<audio "outsidetheme" stop>>
<div id="ConversationBox"></div>
<<script>>
startBattle('lobotomizedPatient', 10);
<</script>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacketpistol.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoatpistol.png")>>
<</if>>
<div id="ConversationBox">
<div id="Ntext">The room is small and dark, though you can still see. The air is thick and dusty. In one corner, an old desk holds an ancient computer, its screen covered in dust. Against the wall, a metal locker stands tall.</div>
<div class="linksTwo">
<<if $SRdoor isnot true>>
<th>[[Check door|saveroomdoor]]</th>
<</if>>
<th>[[Check the computer|saveroom]]</th>
<th>[[Check the locker|SRlocker]]</th>
</div>
<div class="links">
<th>[[Exit through the window|Camino-izquierda]]</th>
<<if $SRdoor is true>>
<th>[[Exit to corridor|SRcorridor]]</th>
<</if>>
</div>
</div>
<<if $Windowcrash is true && $bwinfight2 isnot true && $patientcome isnot 1>>
<<goto "nosaveroom">>
<</if>>
<<if $bwinfight2 is true && $reflexionSR isnot true>>
<<goto "reflexionSR">>
<</if>>
<div id="LocationName">Little office</div>
<<audio "outsidetheme" stop>>
<<if $patientcome isnot 1>>
<<audio "lobbytheme" play loop volume 0.4>>
<</if>>
<<set $bwfight = 2>>
<<set $bwinfight = true>>
<<goto "Saveroom">>
<<set $bwfight = 0>>
<<goto "Camino-izquierda">><div id="ConversationBox">
<<say $Mc>>Hey, sorry, are you a patient of Dr. Home? <</say>>
<div id="Ntext">As soon as he hears your voice, something changes in his expression. His trembling lips curl into a grotesque smile, and his body starts to tremble with sickening excitement.</div>
<<say $LbPatient>>You... pretty... so... pretty...<</say>>
<div id="Pensamiento">What the hell is wrong with him?</div>
<<say $Mc>>Can I ask you a few questions?<</say>>
<<say $LbPatient>>Come here... come... touch... you... I like... a lot...<</say>>
<div id="Ntext">The stranger reaches out, trying to grab one of your breasts, but you quickly move away before he can touch you.</div>
<<say $Mc>>What the fuck are you trying to do?<</say>>
<<say $LbPatient>>No! give me... Give me!<</say>>
<div id="Ntext">The patient, visibly enraged by the rejection, growls with uncontrollable fury. His eyes fill with rage, and without warning, he lunges toward you, his hands outstretched, trying to grab you. His body, clumsy and disoriented, moves with an unexpected speed.</div>
<<say $LbPatient>>Argh!<</say>>
<<say $Mc>>Oh my god!<</say>>
<div class="links">
<th>[[Shoot him|brokewindowfight]]</th>
</div>
</div>
<<set $bwfight = 1>>
<div id="npc-container">
<img src="img/monsters/patients/lbpatient.png" style="
background-repeat: no-repeat;
background-size: cover;
width: 25em;
position: relative;
top: -2em;
right: 2em;
">
</div><div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<div id="Ntext">You find a computer covered in dust in a corner of the room. Against all odds, it appears to be working. The screen flickers faintly, indicating that it’s still receiving power.</div>
<<default>>
<div id="Ntext">The screen of the old computer flickers faintly, indicating that it’s still receiving power.</div>
<</switch>>
<div class="links">
<th><a tabindex="0" role="button" id="save-button">Save/Load</a></th>
<th>[[Go back|Saveroom]]</th>
</div>
</div>
<<script>>
// Ensure SugarCube save functionality
$(document).ready(function() {
// Direct save method for SugarCube
$('#save-button').on('click', function() {
// Explicitly use SugarCube's save method
try {
// Open saves dialog
UI.saves();
} catch (error) {
// Fallback error handling
console.error("Save functionality error:", error);
alert("Save function could not be executed.");
}
});
});
<</script>>
<<if $patientcome is 1>>
<div id="ConversationBox">
<div id="Ntext">Someone is about to enter through this door.</div>
<div id=Pensamiento>I'll wait here, or I'll leave through the window.</div>
<div class="links">
<th>[[Back|Saveroom]]</th>
</div>
</div>
<<else>>
<div id="ConversationBox">
<div id="Ntext">As you open the door, a dark and silent hallway greets you. The faint light filtering in from the room barely illuminates the first few meters before being swallowed by the shadows. The air is thick, carrying a slight scent of dampness and rust. In the distance, a mournful howl shatters the silence, echoing through the corridors like an omen of something lurking in the darkness, sending a chill through you.</div>
<<say $Mc>>Damn it, I can't see a thing...<</say>>
<div id=Pensamiento>Luckily, I brought my flashlight.</div>
<div class="links">
<th>[[Exit|SRcorridor]]</th>
<th>[[Back|Saveroom]]</th>
</div>
</div>
<<set $SRdoor = true>>
<</if>><<if setup.lantern.isOn>>
<<goto "SRcorridorLight">>
<<else>>
<div id="ConversationBox">
<div id="Ntext">The passage is completely dark. Although you can see the path ahead, everything else remains submerged in darkness. You can't distinguish anything else.</div>
<div class="links">
<th>[[Small office|Saveroom]]</th>
<<if $srhallway isnot true>>
<th>[[Move through hallway|SRcorridor1]]</th>
<<else>>
<th>[[Back through hallway|SRcorridor1]]</th>
<</if>>
</div>
</div>
<<script>>
window.decreaseSanity(10);
<</script>>
<<SanityMessage "-10 Sanity">>
<</if>>
<div id="LocationName">Left hallway</div><div id="ConversationBox"></div>
<<set $randomEnemy =random(2)>>
<<if $randomEnemy is 0>>
<<script>>
startBattle('lobotomizedPatient', 8);
<</script>>
<<elseif $randomEnemy is 1>>
<<script>>
startBattle('madPatient', 12);
<</script>>
<<elseif $randomEnemy is 2>>
<<script>>
startBattle('locoPatient', 10);
<</script>>
<</if>>
<<set $enemyPresent = false>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacketpistol.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoatpistol.png")>>
<</if>><<set $srcff = 0>>
<<goto "SRcorridor">>
<<set $srcff = 2>>
<<goto "SRcorridor">>
<div id="ConversationBoxlight">
<div id="Ntext">The light from your flashlight illuminates the area, revealing the deteriorated walls and some abandoned furniture. The atmosphere feels slightly less threatening.</div>
<div class="links">
<th>[[Small office|Saveroom]]</th>
<<if $srhallway isnot true>>
<th>[[Move through hallway|SRcorridor1]]</th>
<<else>>
<th>[[Back through hallway|SRcorridor1]]</th>
<</if>>
</div>
</div>
<<set $enemyPresent = false>>
<<set $srhallway = true>>
<div id="LocationName">Left hallway</div>
<<set $enemyChance = random(5)>>
<<if $enemyChance lte 1>>
<<goto "SRcorridorenemy">>
<</if>> <div id="ConversationBox">
<div id="Ntext">You rummage through the box and find a plastic bottle, opaque and unlabeled. The cloudy liquid inside looks dangerous. The strong chemical smell makes you step back for a moment. In the box, there are more similar jars, all with broken or crushed caps, as if hastily abandoned. You found <span style="color: #22b22e;">chemicals</span>.</div>
<div class="links">
<th>[[Take it|crateschem]]</th>
<th>[[Leave it|SRoom2]]</th>
</div>
<img id="event-image3" src="img/events/hospitalcrates.png">
</div><<script>>
// Define el widget de cuenta regresiva
Macro.add('countdown', {
handler: function () {
const duration = this.args[0] || 60; // Duración en segundos
const targetPassage = this.args[1] || 'NuevoPasaje'; // Pasaje al que redirigir
const countdownId = 'countdown'; // ID único para el temporizador
// Verifica si ya existe un temporizador activo
if (State.variables.countdownActive === true) {
// Si ya hay un temporizador activo, no hagas nada
return;
}
// Marca el temporizador como activo
State.variables.countdownActive = true;
// Verifica si el elemento de cuenta regresiva ya existe
let countdownContainer = document.getElementById(countdownId + '-container');
if (!countdownContainer) {
// Crea un contenedor para el cronómetro digital
countdownContainer = document.createElement('div');
countdownContainer.id = countdownId + '-container';
countdownContainer.style.position = 'fixed';
countdownContainer.style.top = '2%';
countdownContainer.style.left = '26%';
countdownContainer.style.zIndex = '1000';
// Crea el cronómetro digital (ahora más pequeño)
const digitalTimer = document.createElement('div');
digitalTimer.style.width = '80px'; // Reducido de 120px a 80px
digitalTimer.style.height = '30px'; // Reducido de 40px a 30px
digitalTimer.style.background = 'black';
digitalTimer.style.borderRadius = '3px'; // Reducido un poco
digitalTimer.style.border = '2px solid #444';
digitalTimer.style.boxShadow = '0 0 4px rgba(0,0,0,0.5)';
digitalTimer.style.padding = '2px';
digitalTimer.style.position = 'relative';
// Añade una pequeña "pantalla" para el cronómetro
const timerScreen = document.createElement('div');
timerScreen.style.width = '100%';
timerScreen.style.height = '100%';
timerScreen.style.background = '#222';
timerScreen.style.borderRadius = '2px';
timerScreen.style.boxShadow = 'inset 0 0 4px rgba(0,0,0,0.8)';
timerScreen.style.display = 'flex';
timerScreen.style.justifyContent = 'center';
timerScreen.style.alignItems = 'center';
digitalTimer.appendChild(timerScreen);
// Crea el elemento para mostrar los segundos
const secondsElement = document.createElement('div');
secondsElement.id = countdownId;
secondsElement.style.color = '#f00'; // Color rojo para los números digitales
secondsElement.style.fontSize = '20px'; // Reducido de 28px a 20px
secondsElement.style.fontWeight = 'bold';
secondsElement.style.fontFamily = 'monospace';
secondsElement.style.textShadow = '0 0 4px rgba(255,0,0,0.7)';
timerScreen.appendChild(secondsElement);
// Crea un separador
const separator = document.createElement('div');
separator.style.color = '#f00';
separator.style.fontSize = '20px'; // Reducido de 28px a 20px
separator.style.fontWeight = 'bold';
separator.style.fontFamily = 'monospace';
separator.style.textShadow = '0 0 4px rgba(255,0,0,0.7)';
separator.style.margin = '0 1px'; // Reducido margen
separator.textContent = '.';
timerScreen.appendChild(separator);
// Crea el elemento para mostrar los milisegundos
const msElement = document.createElement('div');
msElement.id = countdownId + '-ms';
msElement.style.color = '#f00';
msElement.style.fontSize = '20px'; // Reducido de 28px a 20px
msElement.style.fontWeight = 'bold';
msElement.style.fontFamily = 'monospace';
msElement.style.textShadow = '0 0 4px rgba(255,0,0,0.7)';
timerScreen.appendChild(msElement);
// Añade el cronómetro digital al contenedor
countdownContainer.appendChild(digitalTimer);
// Añade el contenedor al documento
document.body.appendChild(countdownContainer);
}
// Inicia el temporizador solo si no se ha iniciado antes
const startTimeKey = `countdownStartTime_${countdownId}`;
let startTime = State.variables[startTimeKey];
if (!startTime) {
startTime = Date.now();
State.variables[startTimeKey] = startTime;
}
// Función para actualizar la cuenta regresiva
const updateCountdown = () => {
const nowTime = Date.now();
const elapsed = (nowTime - startTime) / 1000; // Tiempo transcurrido en segundos (con decimales)
let remainingTime = Math.max(0, duration - elapsed);
// Separar segundos y milisegundos
const seconds = Math.floor(remainingTime);
const milliseconds = Math.floor((remainingTime - seconds) * 100); // Solo mostramos 2 dígitos de milisegundos
// Mostrar segundos y milisegundos
document.getElementById(countdownId).textContent = seconds;
document.getElementById(countdownId + '-ms').textContent = String(milliseconds).padStart(2, '0');
if (remainingTime <= 0) {
clearInterval(intervalId);
document.body.removeChild(document.getElementById(countdownId + '-container'));
Engine.play(targetPassage);
delete State.variables.countdownIntervalId;
delete State.variables[startTimeKey];
delete State.variables.countdownActive;
}
};
// Guarda el ID del temporizador en el estado
// Actualizamos cada 10ms para tener una cuenta precisa de milisegundos
const intervalId = setInterval(updateCountdown, 10);
State.variables.countdownIntervalId = intervalId;
// Actualiza la cuenta regresiva inmediatamente
updateCountdown();
}
});
// Define el widget para eliminar la cuenta regresiva
Macro.add('removecountdown', {
handler: function () {
const countdownContainer = document.getElementById('countdown-container');
if (countdownContainer) {
document.body.removeChild(countdownContainer);
}
// Limpia el temporizador si existe
let existingIntervalId = State.variables.countdownIntervalId;
if (existingIntervalId) {
clearInterval(existingIntervalId);
delete State.variables.countdownIntervalId;
const startTimeKey = `countdownStartTime_countdown`;
delete State.variables[startTimeKey];
delete State.variables.countdownActive;
}
}
});
<</script>><div id="ConversationBox"></div>
<<script>>
startBattle('madPatient', 10);
<</script>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacketpistol.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoatpistol.png")>>
<</if>><div id="ConversationBox">
<div id="Ntext">The footsteps grow closer, heavy and clumsy, until they stop at the doorway.
In the dim light, you see his silhouette—a tall, filthy man with tattered clothing and a vacant expression, as if his mind is trapped in some dark corner of his own madness. In his hand, he grips a crude butcher’s knife, the metal dulled and stained.
He stands there, motionless, breathing erratically as his eyes scan the scene.
He doesn’t step inside. He just watches. As if his mind is struggling to process what’s in front of him.</div>
<div class="links">
<th>[[Shoot him|brokewindowfight2]]</th>
<th>[[Try to talk|brokewindowtalk2-2]]</th>
</div>
</div>
<<set $bwfight2 = 1>>
<div id="npc-container">
<img src="img/monsters/patients/madpatient2.png" style="
background-repeat: no-repeat;
background-size: cover;
width: 25em;
position: relative;
top: -2em;
right: 2em;
">
</div>
<<audio "alert" stop>><<set $bwfight2 = 0>>
<<goto "Camino-izquierda">><<set $bwfight2 = 2>>
<<set $bwinfight2 = true>>
<<set $patientcome = 0>>
<<goto "Saveroom">><div id="ConversationBox">
<div id="Ntext">
<<switch visited()>>
<<case 1>>
The sound of the last gunshot echoes through the hallways like thunder, its deafening roar fading into the vast emptiness of the asylum. The patient’s body collapses heavily to the floor, but there’s no time to react.
<</switch>>
A sound shatters the silence. Rushed footsteps pound in the distance, accompanied by a low growl. The screech of a rusted door swinging open...</div>
<<say $Mc>>Shit, someone’s coming...<</say>>
<div class="links">
<th>[[Continue|patientcome]]</th>
</div>
</div>
<<set $patientcome = 1>>
<<script>>
setup.phoneSystem.addObjective(
"Find the doctor",
"Go back to the main hall and find Doctor Home.",
'main',
'enterQuest' // ID
);
<</script>>
<<SanityMessage "Main objective updated: Find the doctor">>
<<audio "outsidetheme" stop>>
<<audio "lobbytheme" stop>><<countdown 20 "brokewindowtalk2">>
<<goto "Saveroom">>
<<audio "lobbytheme" stop>>
<<audio "alert" play loop volume 0.15>>
<div id="ConversationBox">
<div id="Ntext">You take a deep breath, adrenaline still coursing through your body from the previous shot. You know that any wrong move could trigger another fight, and you've already drawn enough attention.</div>
<<say $Mc>>Listen... I don’t want to kill you. You don’t have to do this.<</say>>
<div id="Ntext">The man, motionless in the doorway, tilts his head with a spasmodic jerk. His eyes scan the room, lingering on the corpse at your feet. His breathing is uneven, ragged, and the chipped blade of his butcher knife catches the dim light of the room.
A guttural click escapes his throat, followed by a low, sickly chuckle. His fingers, clenched around the weapon’s handle, tremble with a mix of anxiety and perverse excitement.</div>
<<say $MadPatient>>You’re... pretty...<</say>>
<div id="Ntext">You take a step back as a gag rises in your throat and your stomach churns, triggered by a visceral revulsion.</div>
<div id="Pensamiento">Oh... fuck is another lobotomized rapist...</div>
<<say $Mc>>Stay back!<</say>>
<div id="Ntext">But the plea only excites him further. His grin stretches into something grotesque, yellowed teeth peeking through cracked lips.
Suddenly, his body convulses, and with a guttural roar, he lunges forward, raising the knife. </div>
<<say $MadPatient>>Mmm... This smell... Give me!<</say>>
<<say $Mc>>No time for talking now!<</say>>
<div class="links">
<th>[[Shoot him|brokewindowfight2-2]]</th>
</div>
</div>
<<set $bwfight2 = 1>>
<div id="npc-container">
<img src="img/monsters/patients/madpatient.png" style="
background-repeat: no-repeat;
background-size: cover;
width: 30em;
position: relative;
top: -2em;
">
</div><div id="ConversationBox">
<<say $Mc>>Shit, this isn’t starting well.<</say>>
<div id="Pensamiento">Doesn’t matter, what's done is done. But something’s becoming clear: this place isn’t abandoned.</div>
<<say $Mc>>Even though it looks like it.<</say>>
<div id=Pensamiento>There are still people here, even if they’re barely human anymore. They don’t seem capable of thinking beyond their instincts, but they’re still victims of something, or someone. Probably Doctor Home is involved. This place is still alive, in some twisted way.</div>
<<say $Mc>>And I... I’m stuck in its mess<</say>>
<div class="links">
<th>[[Continue|Saveroom]]</th>
</div>
</div>
<<set $reflexionSR = true>><div id="ConversationBox">
<div id="Ntext">The computer is on.</div>
<div class="links">
<th><a tabindex="0" role="button" id="save-button">Save/Load</a></th>
<th>[[Go back|io]]</th>
</div>
</div>
<<script>>
// Ensure SugarCube save functionality
$(document).ready(function() {
// Direct save method for SugarCube
$('#save-button').on('click', function() {
// Explicitly use SugarCube's save method
try {
// Open saves dialog
UI.saves();
} catch (error) {
// Fallback error handling
console.error("Save functionality error:", error);
alert("Save function could not be executed.");
}
});
});
<</script>><<if setup.lantern.isOn>>
<<goto "SRcorridor1Light">>
<<else>>
<div id="ConversationBox">
<div id="Ntext">You stop in the middle of the hallway. Ahead of you, two open doors lead into dark rooms on either side. One to the left, the other to the right, both shrouded in an unsettling darkness.</div>
<div class="linksTwo">
<th>[[Left room|SRoom1]]</th>
<th>[[Rigth room|SRoom2]]</th>
</div>
<div class="links">
<th>[[Move forward to the small office|SRcorridor]]</th>
<<if $srhallway2 isnot true>>
<th>[[Move through hallway|SRcorridor2]]</th>
<<else>>
<th>[[Back through hallway|SRcorridor2]]</th>
<</if>>
</div>
</div>
<<set $sanity -= 10>>
<</if>>
<<set $srhallway = true>>
<div id="LocationName">Left hallway</div>
<div id="ConversationBoxlight">
<div id="Ntext">You stop in the middle of the hallway. Ahead of you, two open doors lead into dark rooms on either side. One to the left, the other to the right, both shrouded in an unsettling darkness.</div>
<div class="links">
<th>[[Left room|SRoom1]]</th>
<th>[[Move forward to the small office|SRcorridor]]</th>
<<if $srhallway2 isnot true>>
<th>[[Move through hallway|SRcorridor2]]</th>
<<else>>
<th>[[Back through hallway|SRcorridor2]]</th>
<</if>>
<th>[[Rigth room|SRoom2]]</th>
</div>
</div>
<<set $srhallway = true>>
<<set $enemyPresent = false>>
<div id="LocationName">Left hallway</div><<if setup.lantern.isOn>>
<<goto "SRcorridor2Light">>
<<else>>
<div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<div id="Ntext">You move forward through the pitch-black hallway, each step cautious on the unseen floor. The darkness is absolute, swallowing everything—except for a faint outline ahead. A door stands at the end of the corridor, close enough to reach.</div>
<div id="Pensamiento">At least there's a way forward…</div>
<<default>>
<div id="Ntext">You move forward through the pitch-black hallway, each step cautious on the unseen floor. The darkness is absolute, swallowing everything—except for a faint outline ahead. </div>
<</switch>>
<div class="linksTwo">
<<if $srdoorcheck isnot true>>
<th>[[Check door|SRCdoor]]</th>
<</if>>
</div>
<div class="links">
<th>[[Move forward to the small office|SRcorridor1]]</th>
<<if $srdoorcheck is true>>
<th>[[Next corridor|Left Corridor]]</th>
<</if>>
</div>
</div>
<<script>>
window.decreaseSanity(10);
<</script>>
<<SanityMessage "-10 Sanity">>
<</if>>
<<set $srhallway2 = true>>
<div id="LocationName">Left hallway</div> <div id="ConversationBoxlight">
<div id="Ntext">You stop at the end of the hallway. You see a door at the far end.</div>
<div class="linksTwo">
<<if $srdoorcheck isnot true>>
<th>[[Check door|SRCdoor]]</th>
<</if>>
</div>
<div class="links">
<th>[[Move forward to the small office|SRcorridor1]]</th>
<<if $srdoorcheck is true>>
<th>[[Next corridor|Left Corridor]]</th>
<</if>>
</div>
</div>
<div id="LocationName">Left hallway</div>
<<set $srhallway2 = true>>
<<set $enemyPresent = false>>
<<set $enemyChance = random(5)>>
<<if $enemyChance lte 1>>
<<goto "SRcorridor2enemy">>
<</if>>
<div id="ConversationBox"></div>
<<set $randomEnemy =random(2)>>
<<if $randomEnemy is 0>>
<<script>>
startBattle('lobotomizedPatient', 8);
<</script>>
<<elseif $randomEnemy is 1>>
<<script>>
startBattle('madPatient', 10);
<</script>>
<<elseif $randomEnemy is 2>>
<<script>>
startBattle('locoPatient', 12);
<</script>>
<</if>>
<<set $enemyPresent = false>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacketpistol.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoatpistol.png")>>
<</if>>
<div id="ConversationBox">
<div id="Ntext">At the end of the hallway, a door stands before you. The handle turns slightly... it seems unlocked.</div>
<div class="linksTwo">
<th>[[Open door|Left Corridor]]</th>
</div>
<div class="links">
<th>[[Back|SRcorridor2]]</th>
</div>
</div>
<<set $srdoorcheck = true>><div id="ConversationBox">
<<say $Mc>>Okey I hear you.<</say>>
<<say $Franklin>>I was thinking about something I want to tell you.<</say>>
<<say $Mc>>Yeah? Spit it out.<</say>>
<<say $Franklin>>If you manage to get someone out of this hellhole alive, you can bring them to my cabin. It’s safe, nobody from the hospital comes around here… they’ll be fine.<</say>>
<div id="Pensamiento">This old man is well aware that they only bring women here.</div>
<<say $Mc>>"Someone," huh? …Of course, you mean one of those kidnapped girls, right?<</say>>
<<say $Franklin>>I'm just saying, if you need a place, it's there. No strings attached.<</say>>
<<say $Mc>>Sure, sure… And I bet the "good Samaritan" isn’t expecting anything in return.<</say>>
<div id="Ntext">Franklin can’t help but smirk slightly.</div>
<<say $Franklin>>Hey, don’t get me wrong. I’m no hero, but I’m not a monster either. I’m just offering help… and if the company happens to be pleasant, what’s the harm?<</say>>
<<say $Mc>>Whatever you say, Franklin. But if I do bring someone there, you better behave.<</say>>
<<say $Franklin>>Oh, come on! I’m not that bad.<</say>>
<div id="Pensamiento">I’d never trust a guy like him, especially when he says, "I’m not that bad." But maybe… I don’t have a choice.</div>
<<say $Mc>>We’ll see… First, I have to find them.<</say>>
<<say $Franklin>>Yeah… good luck with that. You’re gonna need it.<</say>>
<div class="links">
<th>[[Bye|Cabin]]</th>
</div>
</div>
<<set $safaplacetalk = true>>
<<set $SafePlace = true>>
<<include "Frank">><<if setup.lantern.isOn>>
<<goto "SRoom2Light">>
<<else>>
<div id="ConversationBox">
<<if $fapperisgone is true>>
<div id="Ntext">The darkness inside the room is absolute. You can't see.</div>
<<else>>
<<if $fapenemy is true>>
<div id="Ntext">The darkness is complete, and you continue hearing the gasps; the man keeps going.</div>
<<say $Mc>>Better get out of here.<</say>>
<<else>>
<div id="Ntext">As you take the first step into the room, a dense darkness engulfs you completely. There’s no trace of light—just an oppressive void that seems to swallow every last flicker of hope. Your eyes don’t adjust. There’s nothing to see.
Then, a sound breaks the silence: low, ragged breathing, irregular and skin-crawling. It comes from somewhere in the darkness, far too close for comfort. The breathing doesn’t sound normal. It’s coarse, laced with an unsettling tension you can’t quite identify.</div>
<div id="Pensamiento">I can’t move forward blindly.</div>
<<say $Mc>>I’m not taking another step without turning on the flashlight. Whatever that is… I don’t want to trip over it.<</say>>
<</if>>
<</if>>
<div class="links">
<th>[[Exit|SRcorridor1]]</th>
</div>
</div>
<<script>>
window.decreaseSanity(10);
<</script>>
<<SanityMessage "-10 Sanity">>
<</if>><<if setup.lantern.isOn>>
<<goto "SRoom1Light">>
<<else>>
<div id="ConversationBox">
<div id="Ntext">The darkness inside the room is absolute. You reach out your hand in front of your face, hoping to see at least an outline, but there’s nothing. The blackness is so deep it feels heavy, as if the void itself surrounds you—oppressive, suffocating.</div>
<div class="links">
<th>[[Exit|SRcorridor1]]</th>
</div>
</div>
<<script>>
window.decreaseSanity(10);
<</script>>
<<SanityMessage "-10 Sanity">>
<</if>><div id="ConversationBoxlight">
<div id="Ntext">As you step into the room, the beam of your flashlight cuts through the darkness, revealing worn walls and a floor coated in dust. In one corner, an old, half-open cabinet stands out, its wood splintered and covered in strange marks.</div>
<div class="linksTwo">
<th>[[Check cabinet|Srcabinet]]</th>
</div>
<div class="links">
<th>[[Exit|SRcorridor1]]</th>
</div>
</div>
<<if $fapperisgone isnot true>>
<<goto "SRfapenemy">>
<<else>>
<div id="ConversationBoxlight">
<div id="Ntext">The floor is covered in dark stains, the result of the struggle. The room, once oppressive, is now wrapped in an unsettling silence, broken only by your breathing.</div>
<<switch visited()>>
<<case 1>>
<div id="Pensamiento">I don't know if this is a relief or a nightmare that keeps chasing me.</div>
<</switch>>
<<if $srcrates isnot true>>
<div class="linksTwo">
<th>[[Search in the crates|cratesearch]]</th>
</div>
<</if>>
<div class="links">
<th>[[Exit|SRcorridor1]]</th>
</div>
</div>
<</if>>
<div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<div id="Ntext">As you rummage through the cabinet, your fingers stop at the touch of a small bottle. You find <span style="color: #22b22e;">2 antidepressant pills</span>. They’re small, white, and seem to have been there for a long time.</div>
<<say $Mc>>It’s not much, but it could help.<</say>>
<<script>>
addSanityItem('AntiDepressants',2)
<</script>>
<<default>>
<div id="Ntext">The shelves are empty, only a few crumpled papers and accumulated dust remain. Everything has been looted.</div>
<</switch>>
<div class="linksTwo">
<th>[[Get inside|SRLocker]]</th>
</div>
<div class="links">
<th>[[Back|SRoom1]]</th>
</div>
</div>
<div id="ConversationBoxlight">
<<switch visited()>>
<<case 1>>
<div id="Ntext">As you enter the room, the beam of the flashlight reveals a disturbing scene. The man is there, in a corner on the other side of the room, masturbating without the slightest reaction to your presence. The flashlight's light seems to have no effect on him; he continues as if you weren’t there.</div>
<<say $Mc>>I can’t believe what I’m seeing… What’s wrong with these people?<</say>>
<div id="Pensamiento">They seem lobotomized, but for what purpose? Uncontrolled reproduction? </div>
<<say $Mc>>This is just absurd...<</say>>
<<default>>
<div id="Ntext">The man is there, masturbating without the slightest reaction to your presence. The flashlight's light seems to have no effect on him; he continues as if you weren’t there.</div>
<<say $Mc>>Why the hell did I come back here?<</say>>
<</switch>>
<div class="linksTwo">
<th>[[Interrupt him|SRfapenemy2]]</th>
</div>
<div class="links">
<th>[[Exit|SRcorridor1]]</th>
</div>
</div>
<<set $fapenemy = true>>
<div id="npc-container">
<img src="img/monsters/patients/patient1.png">
</div>
<div id="ConversationBox">
<div id="Ntext">You approach the man cautiously, knowing it's unlikely he'll give you a coherent response. The light from the lantern illuminates his empty face, and his eyes barely seem to register your presence. The sound of his breathing and the patter of your steps are the only things you can hear in the room.</div>
<<say $Mc>>Who did this to you? Do you remember anything? Was it Doctor Home?<</say>>
<div id="Ntext">The man flinches at being interrupted, letting out a disoriented scream.</div>
<<say $LbPatient>>No! No... no! Aah!<</say>>
<div id="Ntext">Then, his eyes fixate on you. He watches you, as if finally noticing your presence. A strange gleam appears in his gaze.</div>
<<say $LbPatient>>You... real?<</say>>
<div id="Pensamiento">This guy can't think straight... He's completely lost. He's not going to know anything useful. But... what have they done to him? And why?</div>
<<say $Mc>>Yes, I'm real...<</say>>
<div id="Ntext">Before you can react, the man attacks, his movements erratic but filled with a sudden and violent energy.</div>
<<say $LbPatient>>Give me! Be mine!<</say>>
<<say $Mc>>Fuck!<</say>>
<div class="links">
<th>[[Fight|SRFenemy]]</th>
</div>
</div>
<<set $Sroom2 = 1>>
<div id="npc-container">
<img src="img/monsters/patients/patient1.png">
</div>
<div id="ConversationBox"></div>
<<script>>
startBattle('fappingPatient', 7);
<</script>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacketpistol.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoatpistol.png")>>
<</if>>
<div id="ConversationBox">
<div id="Ntext">The guy doesn't chase you and returns to his corner.</div>
<div class="links">
<th>[[Continue|SRcorridor1]]</th>
</div>
</div>
<<set $Sroom2 = 0>><<set $Sroom2 = 2>>
<<set $fapperisgone = true>>
<<goto "SRoom2">>
<<textbox "$cheatcodeb" "">>
<<button "Enter Code">>
<<script>>
var cheatcodeb = SugarCube.State.variables.cheatcodeb.trim().toLowerCase();
// Función helper para añadir múltiples mejoras de armas
function addMultipleUpgrades(upgrades) {
upgrades.forEach(upgrade => window.addWeaponUpgrade(upgrade));
}
// Función helper para añadir múltiples municiones
function addMultipleAmmo(ammoTypes) {
ammoTypes.forEach(ammo => window.addAmmo(ammo.type, ammo.amount));
}
if (cheatcodeb === "getmerich") {
SugarCube.State.variables.McMoney += 1000000;
SugarCube.Engine.play("Vendingmachine");
}
else if (cheatcodeb === "getmeduracell") {
window.addDuracellBattery(20);
SugarCube.Engine.play("Vendingmachine");
}
else if (cheatcodeb === "getmepills") {
addSanityItem('AntiDepressants', 10);
addMedkit(5);
addAntiBiotics(5);
SugarCube.Engine.play("Vendingmachine");
}
else if (cheatcodeb === "getmeshotgun") {
SugarCube.Engine.play("chetshotgun");
}
else if (cheatcodeb === "getmerifle") {
window.addWeapon('Rifle');
}
else if (cheatcodeb === "getmeammopistol") {
// Añadir munición de pistola
addMultipleAmmo([
{type: '9mm', amount: 50},
{type: 'expansive', amount: 50},
{type: 'incendiary', amount: 30}
]);
SugarCube.Engine.play("Vendingmachine");
}
else if (cheatcodeb === "getmeammoshotgun") {
// Añadir munición de escopeta
addMultipleAmmo([
{type: 'shells', amount: 50},
{type: 'slug', amount: 30},
{type: 'dragon', amount: 30}
]);
SugarCube.Engine.play("Vendingmachine");
}
else if (cheatcodeb === "getmeammorifle") {
// Añadir munición de rifle
addMultipleAmmo([
{type: 'rifle_rounds', amount: 50},
{type: 'piercing', amount: 25},
{type: 'tracer', amount: 20}
]);
SugarCube.Engine.play("Vendingmachine");
}
else if (cheatcodeb === "getmepistolupgrades") {
// Mejoras de pistola
addMultipleUpgrades([
'pistolAccuracy',
'pistolRecoil',
'pistolMagazine',
'pistolBarrel'
]);
SugarCube.Engine.play("Vendingmachine");
}
else if (cheatcodeb === "getmeshotgunupgrades") {
// Mejoras de escopeta
addMultipleUpgrades([
'shotgunChoke',
'shotgunMagazine',
'shotgunPump',
'shotgunBarrel'
]);
SugarCube.Engine.play("Vendingmachine");
}
else if (cheatcodeb === "getmerifleupgrades") {
// Mejoras de rifle
addMultipleUpgrades([
'rifleBipod',
'rifleMagazine',
'rifleScope',
'rifleBarrel'
]);
SugarCube.Engine.play("Vendingmachine");
}
else {
// Código inválido
SugarCube.Engine.play("Error");
}
<</script>>
<</button>><div id="ConversationBox">
<div id="Ntext">An old vending machine, the glass is so dirty that you can barely see anything, although it seems like there’s still something inside</div>
<img id="event-image2" src="img/vm.png">
<div class="links">
<<include "Passage">>
</div>
<div class="links">
<th>[[Back|shed]]</th>
</div>
</div>
<style>
button {
cursor: pointer;
color: #eee;
background-color: #89163c;
border: none;
line-height: normal;
width: fit-content;
height: fit-content;
padding: 10px;
border-radius: 5px;
-webkit-transition-duration: .2s;
-o-transition-duration: .2s;
transition-duration: .2s;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
button:hover {
text-decoration: none;
color: #e0b34d;
text-shadow: 0 0 10px rgba(255, 191, 4, 0.7), 0 0 20px rgba(0, 0, 0, 0.5);
background-color: #89163c;
}
input, select, textarea {
position: absolute;
top: -6em;
color: #eee;
background-color: #0013276b;
border: 1px solid #ffd800;
padding: .4em;
width: 32em;
height: 2em;
}
html[data-outlines] input:focus, html[data-outlines] select:focus, html[data-outlines] textarea:focus, input:hover, select:hover, textarea:hover {
background-color: #00160b75;
border-color: #ffd800;
color: green;
}
</style><div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<div id="Ntext">As you enter the shooting range, the few agents present glance at you. Without a word, they quickly gather their things and leave in silence, avoiding your gaze. The echo of their hurried footsteps fades, leaving only the faint hum of the flickering fluorescent lights. The scent of old gunpowder and cold metal lingers in the air, both familiar and distant at the same time.
You stand still for a moment, observing the empty booths and the targets riddled with dozens of bullet holes from the past.</div>
<div id="Pensamiento">I could shoot a little before finishing all of this.</div>
<<default>>
<div id="Ntext">No one is here.</div>
<</switch>>
<div class="links">
<th>[[Training shoot|TrainingShoot]]</th>
</div>
<div class="links">
<th>[[Exit|ci2]]</th>
</div>
</div>
<<set $practique = 1>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacketpistol.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoatpistol.png")>>
<</if>><div id="ConversationBox"></div>
<<script>>
startBattle('practiceTarget', 15);
<</script>>
<<goto "Shooting range">>
<<set $practique = 2>><<goto "Shooting range">>
<<set $practique = 0>><div id="ConversationBox">
<div id="Ntext">You approach the table in search of another target, but you only find scraps of torn-up targets and crumpled papers, too damaged to use. You sift through the mess, hoping to find something usable, but there's nothing. Only emptiness and the echo of your own breathing fill the room.</div>
<div id="Pensamiento">I guess it's time to move on...</div>
<div class="links">
<th>[[Back|Shooting range]]</th>
</div>
</div><<set $srcsf = 0>>
<<goto "SRcorridor2">><div id="ConversationBox">
<div id="Ntext">You enter the code, but nothing happens.</div>
<div class="links">
<th>[[Back|shed]]</th>
</div>
</div><div id="ConversationBox"></div>
<<script>>
startBattle('madPatient', 6);
<</script>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacketpistol.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoatpistol.png")>>
<</if>>
<<timed 6s>>
<<audio "codec" stop>>
<</timed>> <div id="ConversationBoxlight">
<div id="Ntext">The passage is completely dark. The light from your flashlight illuminates the path ahead, but everything else remains swallowed by shadows. You can't make out anything beyond it.
Suddenly, something moves in the darkness. Drawn to the glow of your flashlight, a man in a patient’s gown emerges from the shadows and lunges at you.</div>
<div class="links">
<th>[[Fight|SRCfight]]</th>
</div>
<<set $srcff =1>> <div id="ConversationBoxlight">
<div id="Ntext">Something is moving in the darkness, a man in a patient’s gown stepping out from the shadows attracted by the light of your flashlight.</div>
<div class="links">
<th>[[Fight|SRCfight2]]</th>
</div>
<<set $srcsf = 1>><div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<div id="Ntext">The fresh air of the forest mixes with the crunching of dry leaves beneath your boots. You move cautiously between the trees, each step taking you deeper into the darkness of the place. The shadows of the bare branches stretch long, creating strange shapes that seem to move on their own. The stillness is unsettling, but the need to keep moving pushes you forward.
Suddenly, something on the ground catches your attention. You crouch down, carefully observing the tracks that carve through the damp mud. They're fresh, deep, with sharp edges. They don't seem to belong to any common animal you've seen before. There's something odd about their shape, as if they're larger than what a normal animal would leave behind. The tracks seem to lead towards a denser part of the forest, where light is absent, almost as if the darkness swallows it whole.
You stop for a moment, your mind beginning to make connections.</div>
<div id="Pensamiento">What kind of animal leaves such large and perfectly marked tracks? Maybe a wolf... but these tracks aren't normal size. Perhaps something else, something bigger...</div>
<<say $Mc>>What am I getting myself into here?<</say>>
<div id="Ntext">Thinking about it causes a slight pressure in your chest, but you keep your gaze on the trail, following the tracks.
The sound of the wind rustling the leaves is now a distant echo. Each step seems to bring you closer to something, but you can’t shake the question: Closer to what exactly?</div>
<<default>>
<div id="Ntext">The tracks are still there, fresh and deep, as if the wolf passed by just moments ago. Their sharp edges make it clear they are recent, and the trail seems to lead deeper into the darker part of the forest. The sense that something is still nearby lingers, and with every step you take, you’re reminded that you're not alone. The tracks, so large and menacing, only confirm that the threat continues to stalk in the shadows.</div>
<</switch>>
<div class="linksTwo">
<th>[[Follow tracks|ExploreCave2]]</th>
</div>
<div class="links">
<th>[[Back to the path|Forest]]</th>
</div>
</div><<switch visited()>>
<<case 1>>
<div id="ConversationBox">
<div id="Ntext"></div>
<<say $Mc>>Ohh, shit!<</say>>
<div class="links">
<th>[[Fight|ForestBattle2]]</th>
</div>
</div>
<<timed 9s>>
<div id="npc-container">
<img src="img/monsters/wolf.png" style="
width: 100%;
height: 100%;
position: absolute;
top: 1px;
right: 1px;
border-radius: 10px;
">
</div>
<div id="npc-container">
<img src="img/monsters/wolf.png" style="
width: 100%;
height: 100%;
position: absolute;
top: 1px;
right: 1px;
border-radius: 10px;
">
</div>
<</timed>>
<<timed 9s>>
<<audio "wolf1" play volume 0.4>>
<</timed>>
<<audio "wolf1" play volume 0.1>>
<<default>>
<div id="ConversationBox">
<div id="Ntext">Two fierce wolf approaches, baring its sharp teeth. It lets out a growl and lunges at you. The danger is imminent, and you must prepare to fight.</div>
<<set $Randomcoment = random(3)>>
<<if $Randomcoment gte 2>>
<<say $Mc>>Shit!<</say>>
<</if>>
<div class="links">
<th>[[Fight|ForestBattle2]]</th>
</div>
</div>
<<timed 2s>>
<div id="npc-container">
<img src="img/monsters/wolf.png" style="
width: 100%;
height: 100%;
position: absolute;
top: 1px;
right: 1px;
border-radius: 10px;
">
</div>
<div id="npc-container">
<img src="img/monsters/wolf.png" style="
width: 100%;
height: 100%;
position: absolute;
top: 1px;
right: 1px;
border-radius: 10px;
">
</div>
<</timed>>
<<timed 2s>>
<<audio "wolf1" play volume 0.4>>
<</timed>>
<</switch>>
<<set $Fwolf = 1>><div id="ConversationBox"></div>
<<set $RandomWolf = random(10)>>
<<if $RandomWolf gte 0>>
<<audio "wolf2" play volume 0.2>>
<<script>>
startBattle('normalWolf', 18);
<</script>>
<<elseif $RandomWolf gt 5>>
<<audio "wolf2" play volume 0.2>>
<<script>>
startBattle('normalWolf', 20);
<</script>>
<<elseif $RandomWolf gt 8>>
<<audio "wolf2" play volume 0.2>>
<<script>>
startBattle('strongWolf', 20);
<</script>>
<</if>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacketpistol.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoatpistol.png")>>
<</if>><div id="ConversationBox">
<div id="Ntext">After what feels like an eternity, you arrive at the entrance of a cave. The air here is cooler, the faint smell of damp earth and something darker lingering in the stillness. The trees part to reveal the opening, a jagged maw in the side of the hill. The ground near the entrance is marked with deep paw prints, larger and more twisted than any wolf's track you've seen before.
A low growl echoes from inside, a sound that doesn’t belong to any creature you’ve encountered. It resonates through the cave’s mouth, sending a chill down your spine. You hesitate, your breath catching in your throat. The hairs on the back of your neck stand up as the growl grows louder, more distinct.</div>
<div class="linksTwo">
<th>[[Enter in the cave|ForestCave]]</th>
</div>
<div class="links">
<th>[[Back to the path|Forest]]</th>
</div>
</div>
<<set $Cave = 1>>
<div id="LocationName">Cave in the forest (entrance)</div><div id="ConversationBox">
<div id="Ntext">Just as you approach the entrance to the cave, a howl shatters the silence of the night, a wild cry that chills you to the core. The sound grows louder, clearer, until you can hear the crunch of dry leaves beneath heavy, purposeful footsteps. From the shadows, two figures emerge, their eyes gleaming with deadly intensity. They move with unsettling agility, as if they know you’ve seen them. There’s no doubt—they’ve come for you.
Before you can react, one of the wolves lets out a low growl, while the other steps forward, locking eyes with you. In the blink of an eye, both of them lunge toward you, their razor-sharp teeth gleaming under the moonlight. The danger is imminent, and you have no choice but to prepare for the attack.</div>
<<say $Mc>>Fuck!<</say>>
<div class="links">
<th>[[Shoot|caveShoot]]</th>
</div>
</div>
<<set $cavefight = 1>>
<<timed 2s>>
<<audio "wolf1" play volume 0.3>>
<</timed>><div id="ConversationBox">
<<if $SafePlaceCave isnot true>>
<div id="Ntext">You stand at the entrance of the cave, a dark fissure in the rock exhaling cold, heavy air. The silence is almost absolute, broken only by the wind whistling through the stones. Something inside seems to be watching you, waiting.</div>
<<else>>
<div id="Ntext">You stand at the entrance of the cave, a dark fissure in the rock exhaling cold, heavy air. The silence is almost absolute, broken only by the wind whistling through the stones.</div>
<</if>>
<div class="linksTwo">
<<if $cavefight is 2>>
<<if setup.lantern.isOn>>
<th>[[Enter in the cave|Cavelight]]</th>
<<else>>
<th>[[Enter in the cave|CaveNoenter]]</th>
<</if>>
<<else>>
<th>[[Enter in the cave|ForestCave]]</th>
<</if>>
</div>
<div class="links">
<th>[[Back to path|Forest]]</th>
</div>
</div>
<div id="LocationName">Cave in the forest (entrance)</div>
<<if setup.lantern.isOn>>
<<goto "Cavelight">>
<<else>>
<div id="ConversationBox">
<div id="Ntext">The darkness inside the cave is suffocating, but in the distance, a faint glow marks the exit. Without your flashlight, you have no choice but to move blindly, guided only by the dim light. Each step echoes in the silence until you finally cross the threshold, leaving the cavern behind and stepping back into the open air.</div>
<div class="links">
<th>[[Exit cave|Caveoutside]]</th>
</div>
</div>
<<script>>
window.decreaseSanity(10);
<</script>>
<<SanityMessage "-10 Sanity">>
<</if>>
<div id="LocationName">Cave in the forest</div><<script>>
startBattle(
['normalWolf', 'strongWolf'],
[20, 30]
);
<</script>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacketpistol.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoatpistol.png")>>
<</if>>
<<audio "wolf2" play volume 0.2>><<set $cavefight = 0>>
<<goto "Caveoutside">><<set $cavefight = 2>>
<<goto "Caveoutside">><div id="ConversationBoxlight">
<div id="Ntext"></div>
<div class="links">
<th>[[Go through the cave|Cave2]]</th>
<th>[[Exit cave|Caveoutside]]</th>
</div>
</div>
<div id="LocationName">Cave in the forest</div><<if setup.lantern.isOn>>
<<goto "Cave2light">>
<<else>>
<div id="ConversationBox">
<div id="Ntext">The darkness inside the cave is suffocating, but in the distance, a faint glow marks the exit. Without your flashlight, you have no choice but to move blindly, guided only by the dim light. Each step echoes in the silence until you finally cross the threshold, leaving the cavern behind and stepping back into the open air.</div>
<div class="links">
<th>[[Go to exit|Caveoutside]]</th>
</div>
</div>
<<script>>
window.decreaseSanity(10);
<</script>>
<<SanityMessage "-10 Sanity">>
<</if>>
<div id="LocationName">Cave in the forest</div><div id="ConversationBoxlight">
<div id="Ntext"></div>
<div class="links">
<th>[[Continue through the cave|Cave3]]</th>
<th>[[Go to exit|Caveoutside]]</th>
</div>
</div>
<<if $wolfcave isnot 2>>
<<goto "wolfcave">>
<</if>>
<div id="LocationName">Cave in the forest</div><<if setup.lantern.isOn>>
<<goto "Cave3light">>
<<else>>
<div id="ConversationBox">
<div id="Ntext">The darkness inside the cave is suffocating, but in the distance, a faint glow marks the exit. Without your flashlight, you have no choice but to move blindly, guided only by the dim light. Each step echoes in the silence until you finally cross the threshold, leaving the cavern behind and stepping back into the open air.</div>
<div class="links">
<th>[[Go to exit|Caveoutside]]</th>
</div>
</div>
<<script>>
window.decreaseSanity(10);
<</script>>
<<SanityMessage "-10 Sanity">>
<</if>>
<div id="LocationName">Cave in the forest</div><div id="ConversationBox">
<div id="Ntext">The air inside the cave is dense and humid. The dim light of your flashlight barely cuts through the darkness, casting irregular shadows on the rocky walls. You take a step forward, then a low, menacing growl shatters the silence.</div>
<div id="Pensamiento">Why the hell did I come here?</div>
<div id="Ntext">Your muscles tense. You turn the flashlight, and the beam reveals two silhouettes in the darkness—wolves. Their eyes gleam with a hungry glint, their slightly open jaws exposing sharp, yellowed fangs. One of them moves forward slowly, its body tense, ready to strike. The other circles around, trying to flank you.</div>
<<say $Mc>>Damn it!<</say>>
<div id="Ntext">You don’t have time to think. The first one leaps with a fierce snarl.</div>
<div class="links">
<th>[[Shoot|cavebattle]]</th>
</div>
</div>
<<timed 7s>>
<div id="npc-container">
<img src="img/monsters/twowolves.png" style="
width: 100%;
height: 100%;
position: absolute;
top: 1px;
right: 1px;
border-radius: 10px;
">
</div>
<</timed>>
<<timed 2s>>
<<audio "wolf1" play volume 0.3>>
<</timed>>
<style>
#npc-container {
position: fixed;
top: 28em;
right: 25px;
width: 530px;
height: 480px;
border-radius: 10px;
overflow: hidden;
}
#ConversationBox {
position: absolute;
top: 0%;
left: 50%;
transform: translateX(-50%);
padding: 2.5em 5.5em;
width: 98%;
max-width: 110em;
max-height: 93vh;
min-height: 93vh;
opacity: 0.6;
animation: fadeInBox 1.2s forwards;
animation-delay: 0.3s;
display: grid;
text-align: center;
overflow-y: auto;
background: radial-gradient(circle at center, rgb(255 230 186 / 12%) 0%, rgb(0 0 0 / 10%) 70%), #1717174a;
border-radius: 12px;
justify-content: center;
}
</style>
<<set $wolfcave = 1>><<script>>
startBattle(
['normalWolf', 'strongWolf'],
[20, 30]
);
<</script>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacketpistol.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoatpistol.png")>>
<</if>>
<<audio "wolf2" play volume 0.2>>
<div id="ConversationBox">
<div id="Ntext">You barely manage to escape the wolves, adrenaline fueling your every step. They don’t pursue you—instead, they remain at the cave’s entrance, standing their ground, as if warning you to never return.</div>
<div class="links">
<th>[[Continue|Caveoutside]]</th>
</div>
</div>
<<set $wolfcave = 0>><<set $wolfcave = 2>>
<<goto "Cave2">><div id="ConversationBoxlight">
<div id="Ntext"></div>
<div class="links">
<th>[[Go through the cave|Cave4]]</th>
<th>[[Go to exit|Cave2]]</th>
</div>
</div>
<div id="LocationName">Cave in the forest</div><div id="ConversationBox">
<div id="Ntext"></div>
<div class="links">
<th>[[Go to exit|Caveoutside]]</th>
</div>
</div>
<<if $safecave isnot true>>
<<goto "diabolicwolfcave">>
<</if>>
<div id="LocationName">Cave in the forest</div><div id="ConversationBox">
<div id="Ntext">The silence of the cave is shattered by a guttural sound, a low, deep growl that echoes off the rocky walls.
From the darkest shadow, a silhouette begins to emerge. First, two glowing red eyes pierce the gloom, locked onto you with an inhuman intensity. Then, the massive body advances, its blackened fur seeming to writhe with the very darkness that clings to it.
Its breath is heavy, each exhalation leaving a trail of mist in the cave’s freezing air. Its claws dig into the damp rock with every step, and an unnatural aura surrounds it, distorting the moonlight filtering through the crack above.</div>
<<say $Mc>>What… the hell is that? Oh my god! A... werewolf?<</say>>
<div id="Pensamiento">What the... is that real?</div>
<div id="Pensamiento">Your hand instinctively grips your weapon, all your senses tell you that the beast is real.</div>
<div id="Pensamiento">This isn’t a normal beast… </div>
<<say $Mc>>How can this thing even exist?<</say>>
<div id="Ntext">Your breathing quickens. Your muscles tense.
And the werewolf advances.</div>
<div class="links">
<th>[[Shoot|cavebattle2]]</th>
</div>
</div>
<<timed 12s>>
<div id="npc-container">
<img src="img/monsters/werewolf.png">
</div>
<</timed>>
<<set $diabolicwolfcave = 1>>
<<timed 12s>>
<<audio "wolf3" play volume 0.3>>
<</timed>>
<<timed 2s>>
<<audio "wolf3" play volume 0.05>>
<</timed>>
<<script>>
window.decreaseSanity(30);
<</script>>
<<SanityMessage "-30 Sanity">>
<<script>>
startBattle('werewolf', 20);
<</script>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacketpistol.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoatpistol.png")>>
<</if>>
<<timed 1s>>
<<audio "werewolf" play volume 0.5>>
<</timed>>
<<timed 20s>>
<<audio "werewolf" play volume 0.5>>
<</timed>>
<<timed 60s>>
<<audio "werewolf" play volume 0.5>>
<</timed>><div id="ConversationBox">
<div id="Ntext">You run without looking back, the echo of your footsteps resounding through the cave. You can feel its presence lurking, its gaze burning into your back, but it doesn’t chase you.
When you finally emerge from the tunnel, you stop, gasping for breath. You turn toward the darkness, and there it is—motionless at the entrance, its red eyes glowing like embers.
It doesn’t cross the threshold. It doesn’t follow you.</div>
<div class="links">
<th>[[Continue|Caveoutside]]</th>
</div>
</div>
<<set $diabolicwolfcave = 0>><div id="ConversationBox">
<div id="Ntext">The wolf lies on the ground, its body motionless, the threat it posed now extinguished. With its fall, the echoes of growls and the stealthy movements of the other wolves vanish, leaving the cave in an eerie silence.
The darkness feels less oppressive, though still heavy with mystery. The cave, once dominated by the beasts, is now free of their presence.
For a moment, only the sound of your breath breaks the silence. You've accomplished something, but a sense of unease still lingers.</div>
<<say $Mc>>Well... looks like this place is finally free of threats.<</say>>
<div id="Pensamiento">Not that I can call it a perfect refuge. But at least, for now... it seems safe.</div>
<div class="links">
<th>[[Examine remains|Examinecave]]</th>
</div>
</div>
<<set $safecave = true>>
<<set $diabolicwolfcave = 2>>
<<set $SafePlaceCave = true>><div id="ConversationBox">
<div id="Ntext">You crouch down, observing the wolf's remains. Its body lies motionless on the ground. Dark fur covers much of its form, and a light layer of dirt and blood has accumulated on it.
Something catches your attention in the remains—something shiny within its throat.</div>
<div class="links">
<th>[[Reach in|B2card]]</th>
</div>
</div><div id="ConversationBox">
<div id="Pensamiento">This man... I guess there's no helping him. Whatever.</div>
<<say $Mc>>Don’t make me repeat myself, Franklin. If you went in, you saw something. Don’t play games with me.<</say>>
<<say $Franklin>> What good would it do to talk about it? Huh? It wouldn’t change anything. You’re here now, so just do what you have to do. Anyway, I haven’t seen much... I saw what anyone would see in a place like this: ruins, forgotten things... garbage. Nothing worth mentioning...<</say>>
<<say $Mc>> I’m not stupid, Franklin. If you don’t want to say it, fine, but let it be clear: if there’s anything else and I get into trouble because of your silence, I won’t forget it.<</say>>
<<say $Franklin>>Alright, alright... Don’t get like that, Detective. Just... be careful. Inside, there are people... Some are... out of their minds, violent. And trust me, you don’t want to run into them. I think if you stay alert.<</say>>
<div class="links">
<th>[[Bye|Cabin]]</th>
</div>
</div>
<<include "Frank">><div id="ConversationBox">
<div id="Pensamiento">This man... really makes me angry.</div>
<<say $Mc>>Don’t make me repeat myself, Franklin. If you went in, you saw something. Don’t play games with me. And stop calling me "girl," damn it!<</say>>
<<say $Franklin>>Alright, sorry... uh, Casey. <</say>>
<div id="Pensamiento">That's how I like it.</div>
<<say $Franklin>>What good would it do to talk about it? Huh? It wouldn’t change anything. You’re here now, so just do what you have to do. Anyway, I haven’t seen much... I saw what anyone would see in a place like this: ruins, forgotten things... garbage. Nothing worth mentioning...<</say>>
<<say $Mc>> I’m not stupid, Franklin. If you don’t want to say it, fine, but let it be clear: if there’s anything else and I get into trouble because of your silence, I won’t forget it.<</say>>
<<say $Franklin>>Alright, alright... Don’t get like that, Detective. Just... be careful. Inside, there are people... Some are... out of their minds, violent. And trust me, you don’t want to run into them. I think if you stay alert, you’ll be fine. You seem strong, and like you know how to defend yourself.<</say>>
<<say $Mc>>I know how to take care of myself. But thanks... I’ll keep my eyes wide open.<</say>>
<div class="links">
<th>[[Bye|Cabin]]</th>
</div>
</div>
<<include "Frank">>
<<set $NoMoreGirl = true>><div id="ConversationBox">
<div class="links">
<th>[[Parking near the entrance|Parking]]</th>
</div>
</div>
<<silently>>
<<run window.addMissionItem('car_key')>>
<<set $hasCarKey = true>>
<</silently>><div id="ConversationBox">
<div id="Ntext">You push forward through the final stretch of the tunnel, feeling the humidity in the air grow heavier. The sound of dripping water blends with the echo of your footsteps until you finally emerge into a vast underground chamber.
In front of you, a small lake of dark waters stretches across the heart of the cave. From a crack high above, faint rays of moonlight pierce through the darkness, casting a shimmering glow on the rippling surface. For a moment, the scene feels calm, almost unreal.</div>
<div id="Ntext">With cautious steps, you move toward the edge of the small lake. The water is dark and impenetrable, reflecting distorted fragments of the moonlight filtering through the crack above. A deathly silence takes hold of the place, broken only by the steady dripping of water and the distant sound of your own breathing.
Then, you hear a noise. Your body tenses.</div>
<div id="Pensamiento">Something moves in the shadows.</div>
<div class="links">
<th>[[Await|diabolicwolfcave2]]</th>
</div>
</div><<if setup.lantern.isOn>>
<<goto "Left Corridorlight">>
<<else>>
<div id="ConversationBox">
<div id="Ntext">A long, dark hallway stretches ahead of you, the shadows dancing along the walls as if something is watching. At the end of the hallway, you can make out a door.</div>
<<if $openleftdoor isnot true>>
<div class="links">
<th>[[Check door|leftdoor]]</th>
</div>
<</if>>
<div class="links">
<th>[[Go to next coridor (small office)|SRcorridor2]]</th>
<th>[[Move through hallway|Left Corridor1]]</th>
<<if $openleftdoor is true>>
<th>[[Entrance|MainLobby]]</th>
<</if>>
</div>
</div>
<<script>>
window.decreaseSanity(10);
<</script>>
<<SanityMessage "-10 Sanity">>
<</if>>
<div id="LocationName">Left hallway</div><<if setup.lantern.isOn>>
<<goto "Left Corridor1light">>
<<else>>
<div id="ConversationBox">
<div id="Ntext"></div>
<<if $openA1door isnot true>>
<div class="links">
<th>[[Check door|cardA1door]]</th>
</div>
<</if>>
<div class="links">
<th>[[Move through hallway|Left Corridor]]</th>
</div>
</div>
<<script>>
window.decreaseSanity(10);
<</script>>
<<SanityMessage "-10 Sanity">>
<</if>>
<div id="LocationName">Left hallway</div> <div id="ConversationBox">
<div id="Ntext">You find yourself in front of a door with a magnetic lock. The slot clearly indicates that you need an A1 card to open it. The door seems sturdy, and there’s no way to force it open.</div>
<<if $cardA1 is true>>
<div class="links">
<th>[[Use card|cardA1dooropen]]</th>
</div>
<<else>>
<div class="links">
<th>[[Use card|magneticard]]</th>
</div>
<</if>>
<div class="links">
<th>[[Back|Left Corridor1]]</th>
</div>
<img id="event-image2" src="img/events/a1door.png">
</div><div id="ConversationBox">
<div id="Ntext">The door doesn't budge. You try pushing it again, but it remains firmly in place.</div>
<div id="Pensamiento">The latch is set from this side, I can open.</div>
<div class="links">
<th>[[Open door|leftdooropen]]</th>
</div>
<div class="links">
<th>[[Back|Left Corridor]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">You take a moment to examine the mechanism before sliding the latch with a dry click. You push again, and this time the door creaks open, revealing the room beyond.
Stepping forward, you immediately recognize the place: the main hall. The dim light from the flickering lamps casts shadows over the old seats and the dust-covered floor.</div>
<<say $Mc>>Looks like I’m back in the main hall.<</say>>
<div class="links">
<th>[[Continue|MainLobby]]</th>
</div>
</div>
<<set $openleftdoor = true>> <div id="ConversationBox">
<div id="Ntext">You don't have the access card.</div>
<div class="links">
<th>[[Back|cardA1door]]</th>
</div>
</div> <div id="ConversationBox">
<div id="Ntext">You don't have the key card.</div>
<<include "end">>
<div class="links">
<th>[[Back|cardA1door]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">You scan the main hall, your eyes sweeping across the room, but there's no sign of the doctor.</div>
<<say $Mc>>Damn it!<</say>>
<div id="Pensamiento">Not a single trace of that bastard Home. It was clear that he wasn’t going to be waiting for me to answer my questions.</div>
<<say $Mc>>But there’s no way he could’ve just vanished… He has to be somewhere.<</say>>
<div id="Ntext">You search every corner, every shadow, but nothing moves. No sound, no presence—just an unsettling emptiness.</div>
<div id="Pensamiento">If there’s one place he’d retreat to, it’s his office. He’s probably there.</div>
<<say $Mc>>I need to find that elusive rat.<</say>>
<div class="links">
<th>[[Continue|MainLobby]]</th>
</div>
</div>
<<set $mhr = true>>
<<script>>
setup.phoneSystem.addObjective(
"Find Doctor Home's office.",
"Doctor Home has vanished. Find his office to gather more clues about his whereabouts and uncover what’s really happening at the psychiatric facility (End of the content for now.)",
'main',
'enterQuest' // ID
);
<</script>>
<<SanityMessage "Main objective updated: Find Doctor Home's office">><<cacheaudio "codec" "media/codec.mp3">>
<<cacheaudio "alert" "media/alert.mp3">>
<<cacheaudio "nextpage" "media/nextpage.mp3">>
<<cacheaudio "abominationsound" "media/ab01.mp3">>
<<cacheaudio "darksituation" "media/darksituation.mp3">>
<<cacheaudio "darksituation2" "media/darksituation2.mp3">>
<<cacheaudio "lobbytheme" "media/lobbytheme.mp3">>
<<cacheaudio "outsidetheme" "media/outsidetheme.mp3">>
<<cacheaudio "papper" "media/events/page.mp3">>
<div id="ConversationBox">
<div id="Ntext">Just as the intensity was beginning to build, the shrill sound of the phone ringing pulls you out of your trance...</div>
<<say $Mc>>Shit! Dammed phone...<</say>>
<div id="Ntext">Seeing the unknown number, your instinct tells you it's something important. You answer, and before you can say anything, you hear, "Casey?" a deep, authoritative voice says.</div>
<div class="links">
<th>[[Detective Casey speaking|introPhone2]]</th>
</div>
</div>
<<timed 1s>>
<<audio "codec" play loop volume 0.4>>
<</timed>>
<div id="ConversationBox">
<div id="Ntext">Suddenly, the sound of the phone pulls you from your thoughts. Seeing the unknown number, your instinct tells you it's something important. You answer, and before you can say anything, you hear, "Casey?" a deep, authoritative voice says.</div>
<div class="links">
<th>[[Detective Casey speaking|introPhone2]]</th>
</div>
</div>
<<audio "newstart" stop>>
<<timed 2s>>
<<audio "codec" play loop volume 0.4>>
<</timed>><div id="ConversationBox">
<div id="Ntext">You stop in front of the main door, the same one the doctor shut in your face when you tried to get in. There’s no lock, no key—just a makeshift blockade meant to keep you from forcing your way inside.</div>
<div class="links">
<th>[[Open|maindooropen]]</th>
<th>[[Back|MainLobby]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">You slide your hand over the metal latch and pull it back with a sharp click. A chain dangles loosely from the handle, barely wrapped around it to slow you down. You push it aside with ease.</div>
<<say $Mc>>Alright, I’ll leave it open.<</say>>
<div id="Ntext">The door creaks slightly as you push it. Now, the main entrance is open again.</div>
<div class="links">
<th>[[Exit|PsiquiatricEntrance]]</th>
<th>[[Back|MainLobby]]</th>
</div>
</div>
<<set $maindoorclosed = false>>
<<set $maindooropen = true>><div class="title2"></div>
<div id="credits">Credits</div>
<<script>>
$(document).ready(function() {
$("#credits").click(function() {
Engine.play("credits");
});
});
<</script>><div class="ptr" id="rustlerButton"></div>
<div class="tooltip" id="rustlerTooltip">Support Rustlerman</div>
<style>
.ptr {
background-image: url(img/rustler2.png);
background-size: cover;
position: fixed;
top: 4em;
left: 17.9em;
width: 30px;
height: 30px;
z-index: 100;
cursor: pointer;
border: 1px solid white;
border-radius: 20px;
}
.tooltip {
position: fixed;
background-color: rgba(0, 0, 0, 0.8);
color: white;
padding: 5px 10px;
border-radius: 5px;
font-size: 14px;
opacity: 0;
transform: translateY(10px);
transition: all 0.3s ease;
pointer-events: none;
z-index: 101;
}
</style>
<script>
$(document).on('mouseover', '#rustlerButton', function() {
const buttonRect = this.getBoundingClientRect();
const tooltip = $('#rustlerTooltip');
// Posicionar el tooltip encima del botón
tooltip.css({
left: buttonRect.left + (buttonRect.width / 2) - (tooltip.width() / 2) + 'px',
top: buttonRect.top - tooltip.height() - 10 + 'px',
opacity: 1,
transform: 'translateY(0)'
});
});
$(document).on('mouseout', '#rustlerButton', function() {
$('#rustlerTooltip').css({
opacity: 0,
transform: 'translateY(10px)'
});
});
</script>
<script>
$(document).on("click", ".ptr", function() {
window.open("https://patreon.com/Rustlergame", "_blank");
});
</script>
<div id="ConversationBox">
<div id="Ntext">You answer the call, but the sound is distorted, a tangle of static filling the space. You adjust the volume, but no matter how many times you try, all you can hear are erratic, incomprehensible noises. There is no voice, only interference. The screen still shows Quentin's name, but his words never reach you.</div>
<<say $Mc>>What the...?<</say>>
<div id="Ntext">You hang up, frustrated by the failed call, and look at the phone in your hands. The doctor, with a calmness that seems almost calculated, watches you before offering a piece of advice.</div>
<<say $DocHome>>I'm afraid the signal inside here is... unstable, likely due to the deterioration of the place. I suggest you step outside, perhaps you'll have better luck and manage to catch the call.<</say>>
<div id="Pensamiento">How convenient... I’m not sure I should go outside... but I don’t think the mayor would call if it wasn’t important.</div>
<<say $Mc>>I’ll step outside to take the call. Please stay here. I’d like to ask you a few more questions.<</say>>
<div id="Ntext">The doctor smiles widely with satisfaction, as if he had just completed a puzzle by placing the final piece.</div>
<<say $DocHome>>Of course, Detective. I'll be here, waiting for your return. I’m looking forward to hearing your pertinent questions.<</say>>
<div id="Pensamiento">Anyway you wouldn't be able to get very far with your injured leg.</div>
<div class="links">
<th>[[I'll come back|MainLobby]]</th>
</div>
</div>
<<include "DocHome">>
<<audio "codec" stop>><<if setup.lantern.isOn>>
<<goto "Cavelight">>
<<else>>
<div id="ConversationBox">
<div id="Ntext">You step into the cave cautiously, but as soon as you take a few steps inside, the darkness becomes absolute. You can't see anything. You move forward a little more, feeling your way blindly, but the uncertainty fills you with unease.</div>
<<say $Mc>>It's impossible...<</say>>
<div id="Pensamiento">Without light, I can't go any further.</div>
<div id="Ntext">You grit your teeth and decide that the best choice is to turn back toward the exit.</div>
<div class="links">
<th>[[Exit cave|Caveoutside]]</th>
</div>
</div>
<<script>>
window.decreaseSanity(10);
<</script>>
<<SanityMessage "-10 Sanity">>
<</if>><div id="ConversationBox">
<div id="Ntext">Finally You shake your head and take a step back, snapping yourself out of the trance as if breaking a spell.</div>
<div id="Pensamiento">I need to leave.</div>
<div id="Ntext">With a mix of relief and shame, you turn and quietly head for the exit.</div>
<div id="videoPlaceholder"></div>
<<script>>
window.setupVerticalVideo("videoPlaceholder", "media/mambo/55.mp4", 177);
<</script>>
<div class="links">
<th>[[Leave stealthily|peekintro2]]</th>
</div>
</div>
<<script>>
window.decreaseSanity(10);
<</script>>
<<SanityMessage "-10 Sanity">><div id="ConversationBox">
<div id="Ntext"></div>
<div class="links">
<th><<back>></th>
</div>
</div><div id="ConversationBox">
<<switch visited>>
<<case 1>>
<div id="Ntext">As you arrive, your chest tightens. The car is a complete mess— all four tires have been slashed. The hood is slightly open, showing clear signs of tampering. You step closer, cautiously. As you examine the engine, your worst fears are confirmed: the system has been sabotaged. Someone took the starter motor.</div>
<<say $Mc>>Shit! I really didn’t see this one coming...<</say>>
<div id="Pensamiento"></div>
<<say $Mc>><</say>>
<<default>>
<div id="Ntext"></div>
<div id="Pensamiento"></div>
<</switch>>
<div class="links">
<th>[[Back|Parking]]</th>
</div>
<img id="event-image2" src="img/events/caseycar.png">
</div><div id="ConversationBox">
<div id="Ntext">You stop in front of the cloed door. A dull thud echoes against the wood… then another. There’s a brief pause, just a whisper of silence, before it happens again.</div>
<div id="Pensamiento">Doesn't seem like a rhythmic pattern...</div>
<<say $Mc>>Someone is trying to force its way through.<</say>>
<<timed 5s>>
<div class="links">
<th>[[Who’s there?]]</th>
<th>[[Stay silent|Main Hallway3]]</th>
</div>
<</timed>>
</div>
<<set $MHenemy = true>>
<<set $MHfigth = 1>>
<<timed 5s>>
<<countdown 20 "Enemydoor">>
<<audio "alert" play loop volume 0.15>>
<<audio "darksituation" stop>>
<</timed>><div id="ConversationBox">
<div id="Ntext">You open the locker, it's empty.</div>
<<switch visited>>
<<case 1>>
<div id="Ntext">Then, you think for a few seconds.</div>
<div id="Pensamiento">It's big enough for me.</div>
<<say $Mc>>I can get in here and hide.<</say>>
<</switch>>
<div class="links">
<th>[[Get inside|SRlockerinside]]</th>
<th>[[Back|Saveroom]]</th>
</div>
</div>
<div id="ConversationBox">
<div id="Ntext">You slip into the locker and carefully close the door. Inside, the space is tight but enough to hide. Darkness surrounds you, and the only sound is your own breathing. You stay still for a few seconds, but nothing happens. Everything is quiet.</div>
<<switch visited()>>
<<case 1>>
<div id="Pensamiento">If danger is near, this could be a good hiding spot.
But I can't stay here forever.</div>
<</switch>>
<div class="links">
<th>[[Leave|Saveroom]]</th>
</div>
</div>
<<if $Windowcrash is true && $bwinfight2 isnot true && $patientcome is 1>>
<<goto "patientcome2">>
<</if>><div id="ConversationBox">
<div id="Ntext">You slip into the locker just in time, carefully closing the door. You hold your breath.
The room's door creaks open. A patient enters, muttering incoherently, his bare feet slapping against the floor unevenly. He suddenly stops, sniffing the air as if he can sense your presence.
The sound of shuffling footsteps grows closer, his breathing heavy and ragged, like a wounded animal.</div>
<div id="Pensamiento">Come on… just keep moving.</div>
<div id="Ntext">For a few seconds, the patient lingers, glancing around, his head tilting unnaturally. Then, as if losing interest, he grunts and leaves, shutting the door behind him. You wait a few moments before finally exhaling.</div>
<<say $Mc>>God… that was close.<</say>>
<div id="Pensamiento">I can't stay here forever. I need to keep moving.</div>
<div class="links">
<th>[[Leave|Saveroom]]</th>
</div>
</div>
<<removecountdown>>
<<set $bwfight2 = 2>>
<<set $bwinfight2 = true>>
<<set $patientcome = 0>>
<<audio "alert" stop>>
<div id="ConversationBox">
<div id="Ntext">You slip into the locker and gently shut the door. The space is cramped, but enough to conceal yourself. Darkness wraps around you, and the only sound is your own breathing. You remain still for a few moments, but nothing happens.</div>
<div class="links">
<th>[[Leave|SRoom1]]</th>
</div>
</div> <div id="ConversationBoxlight">
<div id="Ntext">A long, dark hallway stretches ahead of you, with the light from your flashlight barely reaching the farthest corners. Shadows dance along the walls, as if something is watching. At the end of the hallway, you can make out a door.</div>
<<if $openleftdoor isnot true>>
<div class="links">
<th>[[Check door|leftdoor]]</th>
</div>
<</if>>
<div class="links">
<th>[[Go to next coridor (small office)|SRcorridor2]]</th>
<<if $openleftdoor is true>>
<th>[[Main hall|MainLobby]]</th>
<</if>>
<th>[[Move through hallway|Left Corridor1]]</th>
</div>
</div>
<div id="LocationName">Left hallway</div><div id="ConversationBoxlight">
<div id="Ntext">The hallway stretches into the darkness, illuminated only by the faint light of your flashlight. As you move forward, the shadows seem to take shape, casting fleeting figures of phantoms that quickly flee from the light, vanishing in an instant.</div>
<<if $openA1door isnot true>>
<div class="links">
<th>[[Check door|cardA1door]]</th>
</div>
<</if>>
<div class="links">
<th>[[Move through hallway|Left Corridor]]</th>
</div>
</div>
<div id="LocationName">Left hallway</div><div id="ConversationBox">
<div id="Ntext">A faint sound of footsteps breaks the silence in the room, and you quickly turn, alert. In the dim light, a tall figure emerges, with an elegant posture, wearing a black suit jacket and jeans that stand out against the decaying surroundings.
In one hand, he holds a cane with a decorated handle, but you notice that he isn't carrying it as a mere accessory. His posture and the way he leans on it reveal that he needs it. As he steps forward, his movement is stiff, as if each step causes him intense pain. The cane strikes the floor with a steady, almost heavy rhythm, echoing through the silent room. His expression remains calm, but there's a faint hint of discomfort on his face—a fleeting gesture that suggests the pain in his leg never truly leaves him.</div>
<<timed 9s>>
<<say $Doc>>Am I still surprising our new visitors after all this time? You weren't expecting company in this place, were you?<</say>>
<</timed>>
<div class="links">
<th>[[Who are you?|TalkDocHome]]</th>
</div>
</div>
<<timed 9s>>
<<include "DocHome">>
<</timed>><div id="ConversationBox">
<<say $Mc>>I'm not here for you to give me lessons on how to do my job, Doctor. I'm investigating, and what I've found in these documents... has nothing to do with what you've told me.<</say>>
<div id="Ntext">The look the doctor gives you hardens for a moment, a slight glimmer of annoyance flashing across his face, as if the situation is starting to make him uncomfortable.</div>
<<say $DocHome>>This isn't about lessons, Detective. It's about what's legal and what's not. Looking at patient records without a warrant... that's a crime. I shudder to think what that could mean for your investigation. You shouldn't have touched those documents, Detective. It's not just a lack of respect toward me, but also toward the patients who placed their trust in this institution.<</say>>
<div id="Pensamiento">Shit, he’s right, he’s got me cornered.</div>
<div id="Ntext">The doctor's gaze softens again, and without retracting his hand, he continues.</div>
<<say $DocHome>>If you return it now, I'll forget about the matter and be happy to continue answering your questions...<</say>>
<div class="links">
<th>[[Give the documents|Give the documents2]]</th>
</div>
</div>
<<include "DocHome">>
<<set $UnKindGirl = 1>>
<div id="ConversationBox">
<div id="Ntext">You can feel the weight of the moment bearing down on you, but with gritted teeth, you hand the documents over to Doctor Home.</div>
<<say $Mc>>Here. I’m done with this...<</say>>
<<say $DocHome>>I knew you’d come around, Detective. In the end, reason always wins.<</say>>
<div id="Ntext">The silence that follows is suffocating, almost unbearable. The air feels like it’s being sucked out of your lungs, yet the doctor remains calm, unaffected. His expression stays unreadable as you struggle internally, fighting the rising feeling of helplessness. You’ve given in, but something inside you refuses to break. The pieces of the game aren’t in place yet.</div>
<div id="Pensamiento">This isn’t over, Home. It’s just beginning.</div>
<div class="links">
<th>[[Ask about Subject Alpha-IX|nomorequestions]]</th>
</div>
</div>
<<include "DocHome">>Your legs give out as you try to walk...
[[Rest for a moment->RestPassage]]
[[Force yourself forward->ContinueExploring]]<<if $Health < 50 and not $variableNombre>>
<<checkHealthEvent>>
<<set $variableNombre to true>>
<<endif>>
<<if $Sanity = 0 and not $variableNombre>>
<<checkSanityEvent>>
<<set $variableNombre to true>>
<<endif>>
//Eventos
Sanity
<<script>>
window.SanityEventSystem.addEvent('EventoNombre', {
min: 0,
max: 0,
passage: 'EventoPasaje',
chance: 1,
explorationOnly: true
});
<</script>>
Health
<<script>>
window.HealthEventSystem.addEvent('EventoNombre', {
min: 20,
max: 40,
passage: 'EventoPasaje',
chance: 1,
explorationOnly: true
});
<</script>>
<<script>>
window.HealthEventSystem.addEvent('nearDeath', {
min: 0,
max: 15,
passage: 'NearDeathExperience',
chance: 0.4,
// Works in both combat and exploration
interruptBattle: true
});
window.HealthEventSystem.addEvent('combatCollapse', {
min: 10,
max: 25,
passage: 'CombatCollapseEvent',
chance: 0.35,
combatOnly: true,
interruptBattle: true
});
window.HealthEventSystem.addEvent('explorationStumble', {
min: 20,
max: 40,
passage: 'ExplorationStumbleEvent',
chance: 1,
explorationOnly: true
});
<</script>><div id="ConversationBox">
<div id="Ntext">The door, though not broken, shows clear signs of the violence it endured. The hallway leading to the next room is now accessible, and the dim light reveals its vast interior. Through the opening, the sound of echoes from the psychiatric facility mingles with an unsettling silence, as if the space is waiting for something more.</div>
<div class="links">
<th>[[Grand Hall]]</th>
<th>[[Back|Main Hallway3]]</th>
</div>
</div>
<<set $MCDopen = true>><div id="ConversationBox">
<<say $Mc>>Who's there?<</say>>
<div id="Ntext">You don't hear any response; the sound of the blows intensifies, and you can hear the door slowly giving way.</div>
<<say $Mc>>What do you want?<</say>>
<div id="Ntext">You still don’t hear any response; the door is giving way more and more, it’s about to open.</div>
<div id="Pensamiento">Shit, no answer. I have to brace myself for whatever comes next.</div>
<div class="links">
<th>[[Stay silent|Main Hallway3]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">The Hall looms like a massive prison of concrete and metal. Dark corridors stretch in every direction, and rusted staircases lead to the upper floors. The few flickering lights barely push back the shadows that engulf the space.</div>
<div class="links">
<th>[[Entrace hallway|Main Hallway3]]</th>
</div>
</div>
<<if $IntroVision isnot true>>
<<goto "Event1">>
<</if>>
<<if $IntroVision is true>>
<<audio "darksituation" play loop volume 0.4>>
<</if>><div id="ConversationBox">
<div id="Ntext">The door trembles with a creak as something pushes against it. The lock snaps with a sharp crack, and the door slowly swings open, revealing a staggering silhouette in the doorway.</div>
<div id="Pensamiento">It's a man, or what’s left of one.</div>
<<say $Mc>>Of course... what would a perfect night be without another damn walking corpse?<</say>>
<div id="Ntext">Without warning, the staggering figure lunges at you with a guttural growl, arms outstretched like claws. Its movements are clumsy yet relentless, driven by blind fury.</div>
<<say $MadPatient>>Graaagh!<</say>>
<div class="links">
<th>[[Shoot him|EnemydoorFigth]]</th>
</div>
</div>
<<audio "alert" stop>>
<<audio "darksituation" play loop volume 0.3>>
<<timed 6s>>
<div id="npc-container">
<img src="img/monsters/patients/madpatient.png">
</div>
<</timed>>
<div id="ConversationBox"></div>
<<script>>
startBattle('madPatient', 6);
<</script>>
<<set $enemyPresent = false>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacketpistol.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoatpistol.png")>>
<</if>>
<div id="ConversationBox">
<div id="Ntext">The body twitches one last time before collapsing to the floor with a dull thud. A heavy silence fills the air, broken only by your ragged breath.</div>
<div id="Pensamiento">I can't stay here... </div>
<<say $Mc>>I have to keep going, even... God, this is getting worse.<</say>>
<div class="links">
<th>[[Continue|Main Hallway3]]</th>
</div>
</div>
<<set $MHenemy = true>>
<<set $MHfigth = 2>><div id="ConversationBox">
<div id="Ntext">You push the door, and it shifts, indicating it's unlocked.</div>
<div class="links">
<th>[[Enter|MHrigthroom]]</th>
<th>[[Back|Main Hallway2]]</th>
</div>
</div>
<<set $MHrigthdoor = true>><<if setup.lantern.isOn>>
<<goto "MHrigthroomLight">>
<<else>>
<div id="ConversationBox">
<div id="Ntext">The darkness is absolute. You can't see anything.</div>
<div class="links">
<th>[[Exit|Main Hallway2]]</th>
</div>
</div>
<</if>><div id="ConversationBox">
<div id="Ntext">The door is open now.</div>
<div id="Pensamiento">Someone's been through here, opening doors...</div>
<div class="links">
<th>[[Enter|MHleftroom]]</th>
<th>[[Back|Main Hallway2]]</th>
</div>
</div>
<<set $MHleftdoor = true>><<if setup.lantern.isOn>>
<<goto "MHleftroomLight">>
<<else>>
<div id="ConversationBox">
<div id="Ntext">The darkness is absolute. You can't see anything.</div>
<div class="links">
<th>[[Exit|Main Hallway2]]</th>
</div>
</div>
<</if>><<if setup.lantern.isOn>>
<<goto "MHrigthroom1Light">>
<<else>>
<div id="ConversationBox">
<div id="Ntext">A narrow and cluttered space, with shelves filled with cleaning supplies in worn-out bottles. Dirty rags, buckets, and a broken mop rest in a corner. The air carries a faint smell of old chemicals and stagnant moisture.</div>
<<say $Mc>>I can't see anything useful.<</say>>
<div class="links">
<th>[[Exit|Main hallway]]</th>
</div>
</div>
<</if>><div id="ConversationBox">
<div id="Ntext">The door that was previously closed is now open.</div>
<div class="links">
<th>[[Enter|MHrigthroom1]]</th>
<th>[[Back|Main hallway]]</th>
</div>
</div>
<<set $MHRD = true>><div id="ConversationBoxlight">
<<if $MHSearch isnot true>>
<div id="Ntext">The storage room is a small, cluttered space with dust-covered shelves and boxes stacked in the corners. The light from your flashlight reveals old tools and remnants of forgotten materials.</div>
<<else>>
<div id="Ntext">You search every corner of the room, but everything is either empty or useless. You sigh in frustration. There’s nothing useful left here.</div>
<</if>>
<<if $MHSearch isnot true>>
<div class="linksTwo">
<th>[[Search something|MHSearch]]</th>
</div>
<</if>>
<div class="links">
<th>[[Exit|Main hallway]]</th>
</div>
</div>
<div id="ConversationBoxlight">
<<switch visited()>>
<<case 1>>
<div id="Ntext">You push the door open and step into a wide, silent room. To your left, you find yellow elevators with paint nearly worn away. To your right, several waiting chairs are lined up against the wall, covered in dust.
The windows, completely boarded up with old planks, block any trace of outside light, shrouding the room in an eerie gloom.</div>
<div id="Pensamiento">This place seems like paradise... </div>
<<say $Mc>>For those running from civilization.<</say>>
<<default>>
<div id="Ntext">You enter a silent room. To the left, the elevators stand still; to the right, dusty chairs are lined up against the wall. The boarded-up windows plunge the room into an eerie gloom.</div>
<</switch>>
<div class="linksTwo">
<th>[[Elevators|Yellowelevator]]</th>
</div>
<div class="links">
<th>[[Exit|Main Hallway2]]</th>
</div>
</div>
<div id="ConversationBoxlight">
<div id="Ntext">The small, cluttered room is filled with dust and old furniture. An aging table sits in the center, covered in crumpled papers, with a half-toppled chair beside it. Against the wall, rusted lockers and a worn-out filing cabinet with moisture-damaged documents complete the scene.</div>
<div class="linksTwo">
<th>[[Check first loocker|FLleftroom]]</th>
<th>[[Check second loocker|SLleftroom]]</th>
</div>
<div class="links">
<th>[[Exit|Main Hallway2]]</th>
</div>
</div>
<div id="ConversationBox">
<div id="Ntext">The locker door is jammed and cannot be opened.</div>
<<if $MHfigth is 1>>
<<say $Mc>>Shit!<</say>>
<</if>>
<div class="links">
<th>[[Back|MHleftroom]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">You open the locker, it's empty.</div>
<div class="links">
<th>[[Get inside|MHlockerinside1]]</th>
<th>[[Back|MHleftroom]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">You slip into the locker and carefully close the door. Inside, the space is tight but enough to hide. Darkness surrounds you, and the only sound is your own breathing. You stay still for a few seconds, but nothing happens. Everything is quiet.</div>
<div id="Pensamiento">If danger is near, this could be a good hiding spot.
But you can't stay here forever.</div>
<div class="links">
<th>[[Leave|MHleftroom]]</th>
</div>
</div>
<<if $MHfigth is 1>>
<<goto "MHpatientskip">>
<</if>><div id="ConversationBox">
<div id="Ntext">The door swings open slowly on its hinges. Through the gap in the locker, you see a shadow move in the dim light—a patient advancing slowly. Their footsteps echo through the room, unhurried, searching the space.</div>
<div id="Pensamiento">So close...</div>
<<say $MadPatient>>Nothing...<</say>>
<div id="Ntext">The patient walks for a few more seconds before turning around and leaving the way they came. Silence fills the room once again.</div>
<div class="links">
<th>[[Exit|MHleftroom]]</th>
</div>
</div>
<<if $MHenemy is true && $MHfigth isnot 2>>
<<set $MHfigth = 2>>
<<removecountdown>>
<<audio "alert" stop>>
<</if>><div id="ConversationBox">
<div id="Ntext">The air grows heavy, and a strange sensation fills your chest. Darkness seems to creep into every corner, and something in the atmosphere makes you feel watched. A sharp pain pierces your head, and your thoughts blur. Suddenly, your vision distorts, as if the world around you has twisted.</div>
<<say $Mc>>Agh! My head...!<</say>>
<div id="Ntext">You clutch your temple, feeling the pain intensify. The pressure in your skull is unbearable, as if something is trying to force its way into your mind. And then, a cold sensation takes hold of you… you feel a presence. It’s watching you.</div>
<div class="links">
<th>[[Continue|Event1b]]</th>
</div>
</div>
<<script>>
window.decreaseSanity(60);
<</script>>
<<SanityMessage "-60 Sanity">>
<<audio "darksituation" stop>>
<<audio "abominationsound" play loop volume 0.12>>
<<timed 8s>>
<<audio "abominationsound" stop>>
<</timed>>
<<audio "darksituation2" play loop volume 0.12>>
<div id="ConversationBoxlight">
<div id="Ntext">You search through the shelves, pushing aside worn-out bottles and you find <span style="color: #22b22e;">2 lockpick</span>.</div>
<div id="Pensamiento">The metal is rusted, and the handle is somewhat worn, but it might still be useful.</div>
<div class="links">
<th>[[Search more|MHSearch1]]</th>
<th>[[Back|MHrigthroom1]]</th>
</div>
</div>
<<giveLockpicks 2>>
<<set $MHSearch = true>><div id="ConversationBoxlight">
<div id="Ntext">As you continue exploring the dark halls of the asylum, something faintly glimmers on a dusty table. Approaching, you find a small bottle of chemicals, its label barely legible and the liquid inside murky. The pungent smell makes you wrinkle your nose; something about its appearance tells you it shouldn't be there.
You find <span style="color: #22b22e;">chemicals</span>.</div>
<div id="Pensamiento">They're not in the best condition...</div>
<<if $FranklinMeet isnot true>>
<<say $Mc>>I don't know why the hell I want this... anyway.<</say>>
<<else>>
<<say $Mc>>Maybe Franklin will be interested.<</say>>
<</if>>
<div class="links">
<th>[[Take it|MHSearch2]]</th>
<th>[[Leave it|MHrigthroom1]]</th>
</div>
</div>
<div id="ConversationBox">
<div id="Ntext">You spot the remains of the collapsed staircase—broken wooden planks and twisted metal scattered across the floor. The failed attempt still lingers in your mind, a reminder of how unstable this place truly is.</div>
<div id="Pensamiento">I could have really gotten hurt.</div>
<<say $Mc>> This place is falling apart.<</say>>
<div id="Ntext">You observe the remains of the collapsed staircase, with splintered planks and twisted metal scattered across the floor. Among the debris, something catches your eye—a metal bar still intact, sturdy enough to be useful.</div>
<div class="links">
<th>[[Take iron bar|ironbarStair1]]</th>
<th>[[Back|Camino-intermedio]]</th>
</div>
</div>
<div id="ConversationBox">
<div id="Ntext">You grab the <span style="color: #22b22e;">metal bar</span> in your hands. It’s cold and solid, and although slightly rusted, it seems sturdy enough to be useful.</div>
<<say $Mc>>Maybe it’ll come in handy.<</say>>
<div class="links">
<th>[[Back|Camino-intermedio]]</th>
</div>
</div>
<<run window.addMissionItem('iron_barStairs')>>
<<set $ironbarStair = true>>
<<set $ironbaritem = true>><<script>>
State.variables.MissionItems = State.variables.MissionItems || {
b2card: {
name: "Magnetic card (B2)",
description: "It’s an access card. It’s a little worn, but it seems to work.",
icon: '<img src="img/items/keys/b2card.png" alt="Magnetic Card">',
canDrop: false, // Cannot be dropped or sold
isKey: true
},
car_key: {
name: "Car Key",
description: "A small car key with the initials RC engraved on the metal part. The key has a simple plastic casing, designed for easy handling.",
icon: '<img src="img/items/keys/carkey.png" alt="Car Key">',
canDrop: false,
isKey: true
},
lockpick: {
name: "Lockpick",
description: "A thin piece of metal, slightly curved at the tip, designed to manipulate a lock's pins with precision and stealth.",
icon: '<img src="img/items/keys/lockpick.png" alt="Lockpick">',
canDrop: false,
isKey: true,
isSellable: true
},
chemicals: {
name: "Chemicals",
description: "A bottle of some chemical product, the label long corroded.",
icon: '<img src="img/items/keys/chemicals.png" alt="Chemicals">',
canDrop: true,
isKey: true,
isSellable: true
},
iron_barStairs: {
name: "Iron Bar",
description: "A twisted and rusted piece of metal, torn from the remains of the broken fire escape.",
icon: '<img src="img/items/keys/ironbarstair.png" alt="Iron Bar">',
canDrop: false,
isKey: true
},
crowbar: {
name: "Crowbar",
description: "A sturdy metal tool designed for prying open locks or structures.",
icon: '<img src="img/items/keys/crowbar01.png" alt="Crowbar">',
canDrop: false,
isKey: true
},
fbi_archive: {
name: "FBI File 02",
description: "Medical records detailing disturbing experiments.",
icon: '<img src="img/items/documents/patient_file.png" alt="Patient File">',
canDrop: true,
isDocument: true
},
patient_fileN1: {
name: "Patient File 01",
description: "Medical records detailing disturbing experiments.",
icon: '<img src="img/items/documents/patient_file.png" alt="Patient File">',
canDrop: true,
isDocument: true
},
patient_fileN2: {
name: "Patient File 02",
description: "Medical records detailing disturbing experiments.",
icon: '<img src="img/items/documents/patient_file.png" alt="Patient File">',
canDrop: true,
isDocument: true
},
};
// Enhanced addMissionItem function
window.addMissionItem = function(itemId) {
// Check if item exists
if (!State.variables.MissionItems[itemId]) {
console.error(`Mission item "${itemId}" not found`);
return false;
}
const missionItem = {
id: `mission_${itemId}`,
name: State.variables.MissionItems[itemId].name,
description: State.variables.MissionItems[itemId].description,
icon: State.variables.MissionItems[itemId].icon,
type: 'mission_item',
missionItemId: itemId,
count: 1,
canDrop: State.variables.MissionItems[itemId].canDrop || false,
isKey: State.variables.MissionItems[itemId].isKey,
isDocument: State.variables.MissionItems[itemId].isDocument
};
// Find an empty slot in the main inventory
const emptySlot = window.findEmptySlot(missionItem);
if (emptySlot) {
State.variables.inventory[emptySlot.type][emptySlot.index] = missionItem;
// Add visual feedback
NotificationSystem.show(`Obtained: ${missionItem.name}`, 'info');
// Update inventory display
window.updateInventoryDisplay();
return true;
} else {
NotificationSystem.show('No space in inventory for mission item', 'warning');
return false;
}
};
// Add check for mission items function
window.hasMissionItem = function(itemId) {
if (!State.variables.inventory.mission) return false;
return State.variables.inventory.mission.some(item =>
item && item.missionItemId === itemId
);
};
// Enhanced initialization to ensure mission array exists
window.initializeInventory = function() {
if (!State.variables.inventory) {
State.variables.inventory = {
main: Array(8).fill(null),
quickbar: Array(5).fill(null),
weapons: Array(4).fill(null),
mission: []
};
}
// Always ensure mission array exists
if (!Array.isArray(State.variables.inventory.mission)) {
State.variables.inventory.mission = [];
}
};
<</script>><div id="ConversationBox">
<div id="Ntext">With precise movements, you manipulate the internal pins until you feel a subtle click. The door unlocks with a faint snap, and the alarm remains silent.</div>
<<say $Mc>>Alright... Let's see what's inside.<</say>>
<div class="links">
<th>[[Inspect the car|FBIcar]]</th>
</div>
</div>
<<discardItem "mission_lockpick">><div id="ConversationBox">
<div id="Ntext">You grit your teeth and swing the iron bar with all your strength against the car window. The impact echoes through the night with a dull thud, but the glass barely reacts, leaving only a faint mark on the surface.</div>
<<say $Mc>>Tsk…<</say>>
<div id="Ntext">Frowning, you try again, this time with more force. The shock vibrates through your hands, but the glass remains unscathed.</div>
<div id="Pensamiento">Maybe one more time.</div>
<div id="Ntext">You take a deep breath, tighten your grip, and deliver one final strike, pouring all your pent-up rage into it. A sharp crack fills the air—but it's not the glass that gives way. The bar snaps in two.</div>
<<say $Mc>>I should’ve known bulletproof glass wouldn’t break so easily. Maybe if I were a 2-meter-tall NBA player…<</say>>
<div class="links">
<th>[[Back|Parking2]]</th>
</div>
</div>
<<set $ironbarStair = false>>
<<discardItem "mission_iron_barStairs">><div id="ConversationBox">
<div id="Ntext">You insert the key into the lock and turn it carefully. The door unlocks with a soft click, and the alarm remains silent.</div>
<<say $Mc>>Alright... Let's see what's inside.<</say>>
<div class="links">
<th>[[Inspect the car|FBIcar]]</th>
</div>
</div><div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<div id="Ntext">You approach the elevators. The button panel is somewhat worn, but still visible.</div>
<<default>>
<div id="Ntext">The yellow elevators stand right in front of you.</div>
<</switch>>
<div class="links">
<th>[[Call elevator|EYcall]]</th>
<<if $YellowElevatorInspect isnot true>>
<th>[[Inspect elevator|EYinspect]]</th>
<</if>>
</div>
<div class="links">
<th>[[Back|MHrigthroom]]</th>
</div>
</div><div id="ConversationBox">
<<switch visited()>>
<<case 1>>
<div id="Ntext">You press the button of one of the elevators, but nothing happens. No sound, no sign of it working. You repeat the motion on the other elevator. The same.</div>
<div id="Pensamiento">I should've figured as much...</div>
<<case 2>>
<div id="Ntext">You press the button of one of the elevators, but nothing happens. No sound, no sign of it working. You repeat the motion on the other elevator. The same.</div>
<div id="Pensamiento">I should've figured as much...</div>
<<say $Mc>>Maybe there's a way to restore the power.<</say>>
<<default>>
<div id="Ntext">You press the button of one of the elevators, but nothing happens.</div>
<</switch>>
<div class="links">
<th>[[Back|Yellowelevator]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">You approach the elevator, noticing something strange. On the frame, near the doors, you find recent marks, as if someone had tampered with the controls or the panel. A faint trail of disturbed dust...</div>
<div id="Pensamiento">Doctor Home... No doubt about it. The marks are too fresh. He was here, there's no question. If he used these elevators... That means they were working. It's possible they were operational just recently. But now, who cut the power? And why?</div>
<<say $Mc>>He probably ordered someone to do it...<</say>>
<div id="Pensamiento">He must've set this up to trap me here...</div>
<div class="links">
<th>[[Back|Yellowelevator]]</th>
</div>
</div>
<<set $YellowElevatorInspect = true>><div id="ConversationBox">
<div id="Ntext">Everything turns blurry. Liquid shadows slither across the walls, and reality flickers like a flame on the verge of dying out. And then, you see it.
A figure emerges from the darkness. It doesn’t walk, doesn’t move like anything of this world. Its form is wrong—an impossible amalgamation of existence and denial. Something that shouldn’t be here. Something that was never meant to be. An aberration.</div>
<<say $Mc>>No! Damn it! Not now!<</say>>
<div id="Ntext">As the creature approaches, the pain in your head vanishes quickly. But the absence is not relief… it’s worse. It’s as if something far greater has taken its place, something that devours every sensation, every thought.</div>
<<say $Mc>>This isn’t real… it can’t be real.<</say>>
<div id="Ntext">Your body feels light, distant, as if it no longer belongs to you, while the aberration keeps closing in. Its very existence warps reality around it, as if the world itself is trying to reject it. Its mere presence is nauseating—an error in creation, something that should have never been.</div>
<<say $Mc>>God… that’s disgusting.<</say>>
<div id="Pensamiento">I need to get out of here!</div>
<div id="Ntext">But you can’t move. Your instincts scream, and in a reflex, you draw your weapon.</div>
<div class="links">
<th>[[Shoot|monsterEvent1]]</th>
</div>
</div>
<<set $aberrationFigth1 = 1>>
<<script>>
window.HealthEventSystem.addEvent('Aberration01', {
min: 0,
max: 20,
passage: 'Event-Aberration01',
chance: 100,
// Works in both combat and exploration
interruptBattle: true
});
<</script>>
<<if $Health < 20>>
<<checkHealthEvent>>
<<endif>><div id="ConversationBox"></div>
<<script>>
startBattle('imposibleAberration', 20);
<</script>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacketpistol.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoatpistol.png")>>
<</if>>
<<audio "werewolf" play volume 0.2>>
<<timed 5s>>
<div id="ConversationBox">
<div id="Ntext">You fire, but the aberration doesn't even flinch. Its blackened flesh writhes like a mass of liquid shadows, deforming and reconstructing with each step it takes toward you.
You grit your teeth, pull the trigger again. And again.</div>
<<timed 10s>>
<div id="Pensamiento">Nothing... </div>
<<say $Mc>>What the hell?<</say>>
<div id="Ntext">The creature advances, your flashlight flickers in your hand, as if the very light is afraid to illuminate what crawls before you. It has no face, just a pulsing void where a head should be. Its torso expands and contracts unnaturally, as if breathing in every direction at once.
You take a step back. Another. Your back hits the wall.</div>
<<say $Mc>>Shit!<</say>>
<div id="Ntext">The monster lunges at you. You try to move, but it's too fast. Its dark tentacle pierces your chest like a spear.</div>
<<say $Mc>>Ah!<</say>>
<div id="Ntext">The pain is unbearable. It's as if an icy pressure takes hold of you from within, tearing you apart from the core of your being. The air escapes your lungs. You try to scream, but only manage a choked sound. </div>
<<say $Mc>>No... no... no...<</say>>
<div id="Ntext">Your hands grasp at the air, searching for something to hold onto, but everything seems to collapse. You feel something crawl across your chest, but when you look, there's no hole. No blood. You stagger, incredulous, looking down, terrified. But your chest is intact. There's no wound. Only the pain.</div>
<<say $Mc>>What... what is happening?<</say>>
<div id="Ntext">Barely audible, your voice is broken. </div>
<div id="Pensamiento">I can't... hold on anymore!</div>
<div id="Ntext">You gasp, trying to keep control, but you can't. Your mind begins to give in.
Your knees buckle, and you fall to the floor. The monster is no longer in front of you, it has disappeared completely, leaving no trace.
Finally, your mind shuts down. The cold invades you completely, and you fall, into the darkness.</div>
<</timed>>
<<timed 10s>>
<div class="links">
<<if $Fpartner is true>>
<th>[[Continue|Event-Flashback1-Female]]</th>
<<elseif $Mpartner is true>>
<th>[[Continue|Event-Flashback1-Male]]</th>
<<else>>
<th>[[Continue|Event-Flashback1-Solo]]</th>
<</if>>
</div>
<</timed>>
</div>
<</timed>>
<<script>>
window.BattleSystem.endBattle();
<</script>>
<<timed 10s>>
<<audio "abominationsound" play volume 0.12>>
<</timed>>
<<timed 20s>>
<<audio "abominationsound" play volume 0.12>>
<</timed>>
<<if $Fpartner is true || $Mpartner is true>>
<<run changeImage("img/characters/casey/nude.png")>>
<<else>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacket.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoat.png")>>
<</if>>
<</if>>
<style>
#character-menu, .phone-button, #character-inventory-toggle.ui-visible {
visibility: visible;
display: none;
}
.title2, .ptr, #credits {
opacity: 0;
</style>
<script>
hideInventoryButton();
</script><div id="ConversationBox">
<div id="Ntext">You slide into the driver's seat and glance around. You're not sure what you're looking for—just something useful, a clue. The car's interior is in good condition. You search the dashboard and seats until you find a document on the passenger seat. The FBI seal on the cover catches your attention. Flipping through it briefly, you spot a familiar name. </div>
<<say $Mc>>Arklich Home.<</say>>
<div id="Pensamiento">Okey, let's see what we have here.</div>
<div class="links">
<th>[[Take files|FBIcar1]]</th>
</div>
</div>
<<set $FBIcar = true>><div id="ConversationBox">
<div id="Ntext">You grab the document and begin to read it.</div>
<div id="documentofbi"></div>
<div class="links">
<th>[[Continue|fbicarThink]]</th>
</div>
</div>
<<SanityMessage "New archive">>
<<script>>
setup.phoneSystem.addFile("FBI file 01", "img/documents/fbifile_01.png");
<</script>>
<style>
#documentofbi {
background-image: url(img/documents/fbifile_01.png);
background-size: cover;
position: absolute;
top: 36%;
left: 50%;
transform: translate(-50%, -25%);
width: 43em;
height: 55em;
}
#Ntext {
top: -6em;
}
.links {
position: relative;
left: 10em;
top: 32em;
max-width: 55em;
text-align: left;
z-index: 100;
display: flex;
justify-content: center;
width: 15em;
height: 7em;
gap: 8px;
margin-bottom: 5em;
}
</style>
<<audio "papper" play volume 0.4>><div id="ConversationBox">
<<say $Mc>>I’ll borrow this...<</say>>
<div id="Pensamiento">There's no turning back now. The doctor is kidnapping people, and I have to stop him.</div>
<<say $Mc>>Let's get moving.<</say>>
<<if $hasCarKey is true>>
<div class="links">
<th>[[Start the car|sabotageFBI]]</th>
</div>
<</if>>
<div class="links">
<th>[[Exit|Parking2]]</th>
</div>
</div>
<<script>>
addAmmo('9mm', 38)
<</script>>
<<SanityMessage "Main objective updated: Find Doctor Home's office">>
<<script>>
setup.phoneSystem.addObjective(
"Find Doctor Home's office.",
"Go to the Doctor's office on the first floor, hallway B, room 202. (End of the content for now.)",
'main',
'enterQuest' // ID
);
<</script>><div id="ConversationBox">
<div id="Ntext">Taking the path around the building to avoid the forest, you reach the back. Roots cling to the cracked walls, and a dusty path leads to an old entrance. Some windows are boarded up, others broken, reflecting the moon. The silence is broken only by the creak of wood and the wind.</div>
<div class="links">
<th>[[Forest path|Camino-izquierda]]</th>
<th>[[Back of the building|Camino-intermedio]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">As you circle the building, you reach the back, where the windows are sealed and the walls are worn. Overgrown weeds cover old emergency exits, and the air smells of mildew. An abandoned courtyard stretches out in front of you, with sealed doors that seem forgotten.</div>
<div class="links">
<th>[[Back of the building|Camino-intermedio]]</th>
<th>[[Road tolake|Camino-derecha]]</th>
</div>
</div><script>
window.addMissionItem('chemicals');
Object.values(SugarCube.State.variables.inventory).forEach(slots => {
slots.forEach(item => {
if (item && item.missionItemId === 'chemicals') {
item.isSellable = true;
}
});
});
</script>
<<goto "MHrigthroom1">>
<<set $chemicals += 1>> <<set $srcrates = true>>
<<silently>>
<<run window.addMissionItem('chemicals')>>
<<set $chemicals += 1>>
<</silently>>
<<goto "SRoom2">><div id="ConversationBox">
<div id="Ntext">You press the button, and the code activates. A shotgun drops out of the vending machine, and you pick it up, somewhat surprised.</div>
<<say $Mc>>Well... I guess it's time to get serious.<</say>>
<div class="links">
<th>[[Shed|shed]]</th>
</div>
</div>
<<script>>
window.addWeapon('Shotgun');
<</script>><div id="ConversationBox">
<div id="Ntext">You slowly close the file, letting the information settle in your mind.</div>
<div id="Pensamiento">First floor, Hallway B, room 202. That's where Dr. Home's office is. Most likely, he's there.</div>
<div id="Ntext">You tuck the document into your pocket and look around. Next to your papers, you find a box of ammunition: <span style="color: #22b22e;">38 rounds 9mm</span>. The car is off, parked in the desolate place. Everything seems calm. As you sit behind the wheel, you take one last look at the hospital in front of you, the place where the pieces of the puzzle will finally come together.</div>
<div class="links">
<th>[[Take ammo|FBIcarAmmo]]</th>
</div>
</div>
<<script>>
setup.phoneSystem.completeObjective('fbicar');
<</script>>
<<SanityMessage "Objective completed: FBI car">>
<div id="ConversationBox">
<div id="Ntext">You reach into the wolf's throat, your fingers brushing against something hard and foreign. After a brief struggle to free it, you pull out a worn, grimy object. It's a card, caked in mud and streaked with blood. You hold it in your hands, wiping it clean with the edge of your jacket.
It's an access card. The magnetic strip is scratched and worn from use, but the printed text is still visible, albeit slightly faded: Access Level B2 – No entry without authorization.</div>
<<say $Mc>> Level B2. What does that mean?<</say>>
<div id="Ntext">With a soft exhale, you tuck the card into your jacket pocket. You don't know what door it opens, but something tells you this is no ordinary find.</div>
<div id="Pensamiento">It might be useful later.</div>
<div class="links">
<th>[[Continue|Cave4]]</th>
</div>
</div>
<<silently>>
<<run window.addMissionItem('b2card')>>
<<set $b2card = true>>
<</silently>><div id="npc-container">
<img src="img/characters/dochome/dochome.png">
</div><div id="npc-container">
<img src="img/characters/henry/captain.png">
</div><div id="npc-container">
<img src="img/characters/rodriguez/rodriguez.png">
</div><div id="npc-container">
<img src="img/characters/frank/frank.png">
</div>
<div id="npc-container">
<img src="img/characters/dina/dina.png">
</div><div id="npc-container">
<img src="img/characters/rust/rust.png">
</div><div id="npc-container">
<img src="img/characters/rodriguez/gabriela2.png">
</div><div id="npc-container">
<img src="img/characters/rodriguez/gabriela1.png">
</div>
<div id="ConversationBox">
<div id="Ntext">You insert the keys into the ignition and turn, but the engine doesn't respond. You try again, with more force, but all you hear is a faint buzz followed by a deathly silence.</div>
<div id="Pensamiento">The car won't start. Maybe someone sabotaged it.</div>
<div id="Ntext">You get out of the car and open the hood. A quick glance confirms your suspicions: a disconnected fuel line, cut wires, the entire electrical system tampered with.</div>
<div id="Pensamiento">The sabotage is obvious, though not very professional.</div>
<<say $Mc>>Someone didn’t want Rust and Dina to leave here.</say>
<div id="Ntext">You slam the hood shut in frustration, the loud bang echoing through the abandoned parking lot as you realize you also arrived by car.</div>
<<say $Mc>>Shit! I should check my car.</say>
<div class="links">
<th>[[Parking|Parking2]]</th>
</div>
</div>
<div id="ConversationBox">
<div id="Ntext">You open the car door and settle into the driver's seat, the air filled with the familiar scent of leather and metal.</div>
<<if $hasCarKey isnot true>>
<<switch visited()>>
<<case 3>>
<<say $Mc>> Why the hell am I here again? Maybe I should find the keys first.<</say>>
<</switch>>
<</if>>
<<if $hasCarKey is true>>
<div class="links">
<th>[[Start the car|sabotageFBI]]</th>
</div>
<</if>>
<div class="links">
<th>[[Exit|Parking2]]</th>
</div>
</div><<discardItem "mission_lockpick">><<if $CaseyJacket isnot true && $CaseyCoat isnot true>>
<<run changeImage("img/characters/casey/nude.png")>>
<</if>>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacket.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoat.png")>>
<</if>><div id="ConversationBox">
<div id="Ntext"></div>
<div class="links">
<th>[[Continue|PastEvent-a2]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext"></div>
<div class="links">
<th>[[Continue|Main Hallway3]]</th>
</div>
</div><<giveLockpicks 5>>
<<lockBreak "average" "LockPickUsual" "Failure" true>><<lockBreak "average" "LockPickUsual" "FailedToOpenChestPassage">>
easy, average,hard, veryhard<<lockBreak "average" "openfbicar" "Parking2" true>><div id="ConversationBox">
<div id="Pensamiento">That night, unaware of what was happening at home, I was with Luke, enjoying an evening together. I could never have imagined that, at that same moment, someone would break into my house. I never believed it was a random robbery; something inside me told me it had been planned, that there was more behind it all.
My parents were found dead and Angelica… Angelica was gone.
For months... no, for two years, I searched relentlessly, clinging to the hope of finding her alive. But it was all in vain. The police closed the case due to lack of evidence, leaving me alone with my grief.
From that moment on, my life unraveled. I sank into guilt and alcohol, trying to forget the emptiness inside me. I became reckless, crossing lines I swore I would never cross. My mistakes hurt those close to me, and in the end, I was thrown out of the police force.
Luke tried to help me at first, but I wasn’t the same person anymore. I pushed him away, locked myself in my own suffering, until he finally gave up. I don’t blame him. No one can carry the weight of someone who is destroying themselves.
But even at my worst, I’ve always been a rational person. When I hit rock bottom, I knew I couldn’t stay there. I opened a private detective agency to rebuild what little was left of my life, to keep searching for justice in a world that had taken everything from me.
Maybe it’s redemption. Maybe it’s revenge. Or maybe I’m just a broken woman chasing something I’ll never find.</div>
<div class="links">
<th>[[Wake up|intro1]]</th>
</div>
</div>
<<set $Mpartner = true>>
<<set $Fpartner = false>><div id="ConversationBox">
<div id="Pensamiento">That night, unaware of what was happening at home, I was with Violet, enjoying an evening together. I could never have imagined that, at that same moment, someone would break into my house. I never believed it was a random robbery; something inside me told me it had been planned, that there was more behind it all.
My parents were found dead and Angelica… Angelica was gone.
For months... no, for two years, I searched relentlessly, clinging to the hope of finding her alive. But it was all in vain. The police closed the case due to lack of evidence, leaving me alone with my grief.
From that moment on, my life unraveled. I sank into guilt and alcohol, trying to forget the emptiness inside me. I became reckless, crossing lines I swore I would never cross. My mistakes hurt those close to me, and in the end, I was thrown out of the police force.
Violet did everything she could to help me, but I wasn't the same. I pushed her away, locked myself in my own suffering, until she finally gave up. I don't blame her. No one can carry the weight of someone who is destroying themselves.
But even at my worst, I’ve always been a rational person. When I hit rock bottom, I knew I couldn’t stay there. I opened a private detective agency to rebuild what little was left of my life, to keep searching for justice in a world that had taken everything from me.
Maybe it’s redemption. Maybe it’s revenge. Or maybe I’m just a broken woman chasing something I’ll never find.</div>
<div class="links">
<th>[[Wake up|intro1]]</th>
</div>
</div>
<<set $Mpartner = false>>
<<set $Fpartner = true>><div id="ConversationBox">
<div id="Pensamiento">That night, I was working on a simple case with Gabriela Rodríguez. The investigation wasn't complicated, but the lack of a real challenge only made the fatigue more apparent. We had been reviewing reports, discussing potential suspects, and going through some notes, all in a relatively calm environment.
I never imagined that, while we were so focused on what seemed like a routine task, something much darker was happening at my home.
My parents were found dead, and Angelica... Angelica had disappeared.
For months... no, for two years, I searched for her relentlessly, holding on to the hope that I would find her alive. But it was in vain. The police closed the case due to a lack of evidence, leaving me alone with my grief.
From that moment, my life fell apart. I drowned in guilt and alcohol, trying to forget the emptiness I felt inside. I became reckless, crossed lines I swore I never would. My mistakes hurt those close to me, and eventually, I was thrown out of the police force.
But even at my lowest, I've always been a rational person. When I hit rock bottom, I knew I couldn't stay there. I opened a private detective agency to rebuild what little was left of my life, to keep searching for justice in a world that had taken everything from me.
Maybe it's redemption. Maybe it's revenge. Or maybe I'm just a broken woman chasing something I'll never find.</div>
<div class="links">
<th>[[Wake up|intro1]]</th>
</div>
</div>
<<set $Vpartner = false>>
<<set $Mpartner = false>>
<<set $Fpartner = false>>
<<set $Solo = true>><div id="npc-container">
<img src="img/characters/luke/luke.png">
</div><div id="npc-container">
<img src="img/characters/violet/violet.png">
</div><div id="ConversationBox">
<div id="Ntext">A warm sensation spreads through your body, slowly pulling you out of the darkness. The cold fades, replaced by the softness of sheets wrapping around you.
The faint scent of cologne and morning air lingers in the room. A golden, diffused light filters through the curtains, casting soft shadows on the walls.
Your body feels heavy, but there is no pain. Your breathing is slow and steady. For a moment, everything is peaceful.
You shift slightly, feeling the weight of an arm resting on your waist. The warmth of another body against your back sends a familiar sensation.</div>
<<say $Mc>>Mmm…<</say>>
<div id="Ntext">The mattress dips slightly as the person beside you moves and whispers into your ear.</div>
<<say $Violet>>Good morning. I'm going to take a shower.<</say>>
<div id="Ntext">Their tone is low, heavy with sleep. Before getting up, they press a slow kiss against your shoulder. Then, the warmth of their body fades, though their fingers still trace lightly along your arm before pulling away completely.</div>
<div class="links">
<th>[[Tell her to stay|Event-Flashback2-Female]]</th>
</div>
</div>
<<set $abominationEvent = "complete">>
<<set $IntroVision = true>>
<<audio "darksituation2" stop>>
<<audio "abominationsound" stop>>
<<timed 10s>>
<<include "Violet">>
<</timed>>
<<set $Health = 100>>
<<set $Sanity = 60>>
<<script>>
setup.phoneSystem.addContact("Violet", "My old lover, I haven't heard from her in a long time.", "img/characters/violet/avatar.png");
<</script>><div id="ConversationBox">
<div id="Ntext">A warm sensation spreads through your body, slowly pulling you out of the darkness. The cold fades, replaced by the softness of sheets wrapping around you.
The faint scent of cologne and morning air lingers in the room. A golden, diffused light filters through the curtains, casting soft shadows on the walls.
Your body feels heavy, but there is no pain. Your breathing is slow and steady. For a moment, everything is peaceful.
You shift slightly, feeling the weight of an arm resting on your waist. The warmth of another body against your back sends a familiar sensation.</div>
<<say $Mc>>Mmm…<</say>>
<div id="Ntext">The mattress dips slightly as the person beside you moves and whispers into your ear.</div>
<<say $Luke>>Good morning. I'm going to take a shower.<</say>>
<div id="Ntext">Their tone is low, heavy with sleep. Before getting up, they press a slow kiss against your shoulder. Then, the warmth of their body fades, though their fingers still trace lightly along your arm before pulling away completely.</div>
<div class="links">
<th>[[Tell him to stay|Event-Flashback2-Male]]</th>
</div>
</div>
<<set $abominationEvent = "complete">>
<<set $IntroVision = true>>
<<audio "darksituation2" stop>>
<<audio "abominationsound" stop>>
<<timed 10s>>
<<include "Luke">>
<</timed>>
<<set $Health = 100>>
<<set $Sanity = 60>>
<<script>>
setup.phoneSystem.addContact("Luke", "My old lover, I haven't heard from her in a long time.", "img/characters/luke/avatar.png");
<</script>><div id="ConversationBox">
<div id="Ntext">After the last blink.
Your reflection stares back at you from the police station bathroom mirror. For a second, your eyes seem unfamiliar, as if you're looking at yourself through someone else's gaze. The cold water you splash on your face does little to shake the feeling.</div>
<<say $Mc>>Must be the exhaustion... Ah...<</say>>
<div id="Pensamiento">I must to finish this soon...</div>
<div class="links">
<th>[[Back to the office|Event-Flashback2-Solo]]</th>
</div>
</div>
<<set $abominationEvent = "complete">>
<<set $IntroVision = true>>
<<audio "abominationsound" play volume 0.12>>
<<set $Health = 100>>
<<set $Sanity = 60>>
<<run changeImage("img/characters/casey/casey.png")>>
<<audio "darksituation2" stop>>
<<audio "abominationsound" stop>><div id="ConversationBox">
<div id="Ntext">You turn over in bed, reaching out with a lazy hand, brushing your fingers against their skin.</div>
<<say $Mc>>Stay a little longer…<</say>>
<div id="Ntext">You hear their soft laugh before their fingers gently caress your cheek.</div>
<<say $Violet>>It’s already late, I have to leave soon...<</say>>
<div id="Ntext">You let out a sigh, clinging a little longer to their warmth, but they’re already pulling away. The mattress dips slightly as they sit at the edge of the bed.
She stretches, running a hand through her hair before standing up. Her steps are slow, unhurried, as she makes her way toward the bathroom.</div>
<div class="links">
<th>[[Stop her|Event-sofa-Female]]</th>
</div>
</div>
<<include "Violet">><div id="ConversationBox">
<div id="Ntext">You turn over in bed, reaching out with a lazy hand, brushing your fingers against their skin.</div>
<<say $Mc>>Stay a little longer…<</say>>
<div id="Ntext">You hear their soft laugh before their fingers gently caress your cheek.</div>
<<say $Luke>>It’s already late, I have to leave soon...<</say>>
<div id="Ntext">You let out a sigh, clinging a little longer to their warmth, but they’re already pulling away. The mattress dips slightly as they sit at the edge of the bed.</div>
<<say $Luke>>But if you want… you can join me in the shower.<</say>>
<div class="links">
<th>[[Close your eyes for a few more minutes|Event-Flashback2b-Male]]</th>
<th>[[Go to the shower|Event-shower-Male]]</th>
</div>
</div>
<<include "Luke">><div id="ConversationBox">
<div id="Ntext">You sigh and step out of the bathroom. The office looks the same as always—piles of documents, cold coffee on the desks, dim lights flickering over the worn-out carpet. Rodríguez is there, slumped in her chair, one hand covering her face. Exhausted.</div>
<div class="links">
<th>[[I'm back|Event-Flashback3-Solo]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">You close your eyes and surrender completely to the warmth of the bed. The soft fragrance of the sheets and the distant echo of water falling in the shower surround you. </div>
<div id="Pensamiento">Just a few more minutes…</div>
<div id="Ntext">Your body relaxes again. Slow breathing and the steady rhythm of your heartbeat pull you back into that in-between state of sleep and wakefulness, where time feels hazy, floating in a comforting peace.
But eventually, reality calls you back. A shiver runs across your skin as the warmth trapped in the sheets begins to fade. You shift lazily, rolling onto your side before slowly opening your eyes.
The golden light filtering through the curtains bathes the room in a soft glow. Everything remains calm.
You stretch slowly, letting out a quiet sigh as your mind fully awakens. The sound of running water still echoes from the shower.</div>
<div id="Pensamiento">He’s still there.</div>
<div id="Ntext">For a moment, you simply stay in bed, listening to the murmur of the water and the tranquility of the space, savoring these last few seconds of stillness before getting up.</div>
<div class="links">
<th>[[Go to the shower|Event-showerb-Male]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">The sound of water falling on the tiles guides you to him. Without thinking twice, you slide the shower door open and step inside, letting the warmth of the steam wrap around your skin. Luck turns, surprised to see you there. A smirk crosses his face before his hands slowly slide down to your waist, pulling you closer.
You step in, pressing your chest against his wet torso, feeling the steady beat of his heart against yours. He lets out a soft chuckle and runs his fingers down your back, tracing over your damp skin.</div>
<div id="videoPlaceholder"></div>
<<script>>
window.setupHorizontalVideo("videoPlaceholder", "media/luke/kiss.mp4", 90, "cover");
<</script>>
<<say $Luke>>I thought you weren’t coming...<</say>>
<div class="links">
<th>[[Let him penetrate you|Event-shower-Male2]]</th>
</div>
</div>
<<include "Luke">>
<<script>>
setup.phoneSystem.unlockMedia("Luke", "video", "media/luke/kiss.mp4");
<</script>><div id="ConversationBox">
<div id="Ntext">You approach Luke before he can walk away and gently grab his wrist. He smiles, understanding your intent, and lets you lead him toward the bathroom.</div>
<<say $Luke>>Oh? Didn’t you want five more minutes of sleep?<</say>>
<<say $Casey>>I changed my mind.<</say>>
<div id="Ntext">Your lips meet in a deep, hungry kiss. His hands roam your skin, pulling you against him as desire takes over. With nothing to stop you, the heat between you ignites, consuming you both completely.</div>
<div id="videoPlaceholder"></div>
<<script>>
window.setupHorizontalVideo("videoPlaceholder", "media/luke/kiss.mp4", 90, "cover");
<</script>>
<div class="links">
<th>[[Let him penetrate you|Event-shower-Male2]]</th>
</div>
</div>
<<include "Luke">>
<<script>>
setup.phoneSystem.unlockMedia("Luke", "video", "media/luke/kiss.mp4");
<</script>><div id="ConversationBox">
<div id="Ntext">Before she can continue to the bathroom, you stand up and gently grasp her wrist. Violet turns, surprised, but there’s a mischievous spark in her eyes.</div>
<<say $Violet>>Casey... I'm in a hurry. I must to...<</say>>
<div id="Ntext">You pull her closer without a word. She lets out a soft laugh, but it fades the moment your lips meet hers. The kiss starts slow, unhurried, but as your hands trace over her bare skin, the air between you shifts.
Violet sighs against your mouth, her fingers tightening around your waist as she guides you toward the couch. You fall together onto the cushions, skin against skin, breathless. Her body moves against yours, each touch stoking the heat between you.</div>
<div class="links">
<th>[[Continue|Event-sofa-Female1]]</th>
</div>
</div>
<<include "Violet">><div id="ConversationBox">
<div id="Ntext">The fresh air of the forest mixes with the crunching of dry leaves beneath your boots. You move cautiously between the trees, each step taking you deeper into the darkness of the place. The shadows of the bare branches stretch long, creating strange shapes that seem to move on their own. The stillness is unsettling, but the need to keep moving pushes you forward.
Suddenly, something on the ground catches your attention. You crouch down, carefully observing the tracks that carve through the damp mud. They're fresh, deep, with sharp edges. They don't seem to belong to any common animal you've seen before. There's something odd about their shape, as if they're larger than what a normal animal would leave behind. The tracks seem to lead towards a denser part of the forest, where light is absent, almost as if the darkness swallows it whole.
You stop for a moment, your mind beginning to make connections.</div>
<div id="Pensamiento">What kind of animal leaves such large and perfectly marked tracks? Maybe a wolf... but these tracks aren't normal size. Perhaps something else, something bigger...</div>
<<say $Mc>>What am I getting myself into here?<</say>>
<div id="Ntext">Thinking about it causes a slight pressure in your chest, but you keep your gaze on the trail, following the tracks.
The sound of the wind rustling the leaves is now a distant echo. Each step seems to bring you closer to something, but you can’t shake the question: Closer to what exactly?</div>
<div class="links">
<th>[[Follow tracks|Combatdone2]]</th>
</div>
</div>
<script>
hideInventoryButton();
</script><div id="ConversationBox">
<<say $Mc>>I'm back.<</say>>
<<say $Gabrielayoung>>We should go get some rest.<</say>>
<div id="Pensamiento">She doesn't believe in her own words.</div>
<<say $Mc>>I'm not leaving until we finish this.<</say>>
<div id="Ntext">Rodríguez lets out a tired chuckle and stretches in her chair, making her stiff joints crack as she remains seated.</div>
<<say $Gabrielayoung>>Of course not.<</say>>
<div class="links">
<th>[[Work|Event-Flashback4-Solo]]</th>
</div>
</div>
<<include "Gabi">><div id="ConversationBox">
<div id="Ntext">The sound of keystrokes filled the office as you and Rodríguez scoured the FBI files. The screen casts a blue glow over your tired faces. Hours of searching, cold coffee, and eyes burning from fatigue, but finally…</div>
<<say $Gabrielayoung>>Here it is… here it is!<</say>>
<div id="Ntext">Her voice is full of triumph. You move closer, somewhat incredulous, as she scrolls through the document on the screen.</div>
<<say $Gabrielayoung>>I think we've got it, Casey. Look: Jackeline Harrington, the aunt of Daniel R. Harrington. She lives with her daughter, Marianne L. Harrington. According to the file, they are located at Luminara Avenue, Apartment 24, Central District of the city, on the second floor, left side of the Monteverde Building. It also says here that Daniel became an orphan at a very young age, though it doesn't specify what happened.<</say>>
<div id="Ntext">Rodríguez slides the cursor to highlight the information.</div>
<<say $Mc>>Second floor, left side... apartment 4... How did this get into the files?<</say>>
<<say $Gabrielayoung>>Check this out, in Daniel's history, it says that when he was 13, he was involved in a pretty messed-up incident—he burned the neighbor's kitten. It’s all recorded in the system. He already showed signs of psychopathy at a young age.<</say>>
<div class="links">
<th>[[You beat me to it!|Event-Flashback5-Solo]]</th>
<th>[[You're incredible!|Event-Flashback5b-Solo]]</th>
</div>
</div>
<<include "Gabi">><div id="ConversationBox">
<<say $Mc>>You beat me to it!<</say>>
<div id="Ntext">Rodríguez, holding back a small smile, nods and continues without slowing down.</div>
<<say $Gabrielayoung>>That's what I love about working with you, you never give up.<</say>>
<<say $Mc>>Well, now we know where Daniel's aunt is. He might be there, or maybe she knows something.<</say>>
<<say $Gabrielayoung>>Exactly. Daniel's house is abandoned, so he’s probably moved in with her, or at least she might know where he is.<</say>>
<div id="Pensamiento">Hmm... Why the hell couldn’t we find this information sooner?</div>
<<say $Gabrielayoung>>What are you thinking, Casey?<</say>>
<<say $Mc>>I wonder why it’s been so hard to find this information... Information about his aunt should have been available, damn it! I just found out this bastard has a aunt...<</say>>
<<say $Gabrielayoung>>I don’t know... Sometimes, the pieces take time to fall into place.<</say>>
<<say $Mc>>I don’t buy it... Something’s off. This should have been resolved days ago. Why is everything so hidden?<</say>>
<<say $Gabrielayoung>>Sometimes, the information is where you least expect it. Not everything is as it seems on the surface.<</say>>
<<say $Mc>>No, Rodríguez. I’m telling you, something’s wrong. There’s something that doesn’t add up. It’s not just the case, it’s everything. I have this feeling that someone inside the police... is tampering with evidence... Not just in this case, but in others too.<</say>>
<<say $Gabrielayoung>>Shh! Don’t raise your voice, alright? This is why everyone here hates you...<</say>>
<div class="links">
<th>[[I’m not yelling|Event-Flashback6-Solo]]</th>
</div>
<<include "Gabi">><div id="ConversationBox">
<<say $Mc>>You're incredible!<</say>>
<<say $Gabrielayoung>>I knew we'd pull it off, Casey!<</say>>
<div id="Ntext">Rodríguez slowly moves closer, and in a tender gesture, brushes his lips with yours. The surprise is reflected in your eyes, creating an awkward moment.</div>
<div id="videoPlaceholder"></div>
<<script>>
window.setupHorizontalVideo("videoPlaceholder", "media/gabi/kiss.mp4", 90, "cover");
<</script>>
<div id="Pensamiento">Wow... She got too excited.</div>
<<say $Gabrielayoung>>I'm sorry... I... got carried away...<</say>>
<<say $Mc>>Well, I understand but... we still have to catch him...<</say>>
<<say $Gabrielayoung>>Yes... you're right...<</say>>
<div class="links">
<th>[[Continue with the case|Event-Flashback5c-Solo]]</th>
</div>
</div>
<<set $GabiTryToKiss = true>>
<<include "Gabi">>
<<script>>
setup.phoneSystem.unlockMedia("Gabi", "video", "media/gabi/kiss.mp4");
<</script>>
<style>
#gif {
width: 400px;
height: 100%;
position: relative;
left: 15em;
}
</style><div id="ConversationBox">
<<say $Mc>> I’m not yelling, I’m just thinking out loud. And if that makes them hate me, let them hate me.<</say>>
<<say $Gabrielayoung>>Casey, it’s not that simple. If what you're saying is true, it’s dangerous to talk here... If there really is someone inside the police tampering with evidence, this is much bigger than it seems.<</say>>
<<say $Mc>>It's terrifying... But we can't keep ignoring it, Rodríguez. We’ve already seen how they’ve blocked us multiple times. What if they’re covering up someone bigger, or something?<</say>>
<<say $Gabrielayoung>>I'm not saying I don't believe you, but we have to be smart. We can't go around swinging blindly. If we make such an accusation without evidence, they’ll crush us.<</say>>
<<say $Mc>>I know. But if we don’t start moving, we’ll never discover anything.<</say>>
<<say $Gabrielayoung>>And what do you suggest?<</say>>
<div id="Ntext">The silence fills the room for a long moment. Rodríguez finally shrugs and gestures with her hands in a subtle, soft motion.</div>
<<say $Mc>>We keep working on the case, of course. But after that, we need to do something, maybe talk to Captain Havook.<</say>>
<<say $Gabrielayoung>>Yeah, after this case. But for now, let’s focus on finding Daniel’s aunt. We can’t let him slip away.<</say>>
<<say $Mc>>Exactly. First, we need to finish this. Let’s pay a visit to that address, Luminara Avenuea #23. Maybe we’ll find something else there, and if we're lucky, we’ll finally know where Daniel is.<</say>>
<<say $Gabrielayoung>>Let’s go then. We can’t waste any more time. If he’s with his aunt, we need to find him before he disappears again.<</say>>
<div id="Ntext">Both of you stand up, gathering your things with determination. As you head towards the door, the suspicion about corruption within the police continues to linger in your mind, while the fatigue begins to take its toll.</div>
<div id="Pensamiento">Damn it, I’m sure! I’m sure there’s someone here! Someone who’s been playing me. Since they killed my family and kidnapped my sister, someone has been playing with me... I swear on everything I have left, I’ll find them. I’ll find my sister. I’ll kill them all if necessary.</div>
<div class="links">
<th>[[Go to the car|Event-Flashback7-Solo]]</th>
</div>
</div>
<<include "Gabi">><div id="ConversationBox">
<<say $Mc>>Now we know where Daniel's aunt is. He might be there, or maybe she knows something.<</say>>
<<say $Gabrielayoung>>Exactly. Daniel's house is abandoned, so he’s probably moved in with her, or at least she might know where he is.<</say>>
<div id="Pensamiento">Hmm... Why the hell couldn’t we find this information sooner?</div>
<<say $Gabrielayoung>>What are you thinking, Casey?<</say>>
<<say $Mc>>I wonder why it’s been so hard to find this information... Information about his aunt should have been available, damn it! I just found out this bastard has a aunt...<</say>>
<<say $Gabrielayoung>>I don’t know... Sometimes, the pieces take time to fall into place.<</say>>
<<say $Mc>>I don’t buy it... Something’s off. This should have been resolved days ago. Why is everything so hidden?<</say>>
<<say $Gabrielayoung>>Sometimes, the information is where you least expect it. Not everything is as it seems on the surface.<</say>>
<<say $Mc>>No, Rodríguez. I’m telling you, something’s wrong. There’s something that doesn’t add up. It’s not just the case, it’s everything. I have this feeling that someone inside the police... is tampering with evidence... Not just in this case, but in others too.<</say>>
<<say $Gabrielayoung>>Shh! Don’t raise your voice, alright? This is why everyone here hates you...<</say>>
<div class="links">
<th>[[I’m not yelling|Event-Flashback6-Solo]]</th>
</div>
</div>
<<include "Gabi">><div id="ConversationBox">
<div id="Ntext">Both of you arrive quickly at the parking lot. The night is young, and the lights from the signs in front of the police station flicker slightly. You walk straight toward the driver’s seat, but Gabriela stops you with a hand on your arm.</div>
<<say $Gabrielayoung>>Casey, give me the keys.<</say>>
<<say $Mc>>What? No, I’m fine.<</say>>
<<say $Gabrielayoung>>No, you're not. Your eyes are closing. Come on, it's just a short drive.<</say>>
<<say $Mc>>That's exactly why. It's short. I'm not going to fall asleep in ten minutes.<</say>>
<<say $Gabrielayoung>>Oh, right, because you're one of those new robots—never gets tired.<</say>>
<<say $Mc>>You got it.<</say>>
<<say $Gabrielayoung>>Casey... how long has it been since you actually slept well?<</say>>
<div id="Pensamiento">I... don't know. Two days, maybe three...</div>
<<say $Mc>>I got some sleep last night.<</say>>
<<say $Gabrielayoung>>And how much is "some" for you?<</say>>
<div id="Ntext">Your response is so quiet that Rodríguez barely hears it.</div>
<<say $Mc>>About 3 hours, more or less...<</say>>
<<say $Gabrielayoung>>What? You can't keep going like this! At least close your eyes for a bit—Jesus, Casey...!<</say>>
<div id="Ntext">You run a hand over your face, feeling the burning in your eyelids. Until now, you had ignored the exhaustion, but Rodríguez's words seem to pull it out from where you had buried it, reminding you just how heavy it is.
Gabriela lets out a sharp sigh, clenching her fists tightly. Her patience has completely evaporated, and concern turns into frustration.</div>
<<say $Gabrielayoung>>You know what? No. I’m not going to argue about this. You’re not in condition, Casey. No way.<</say>>
<<say $Mc>>Don’t exaggerate Gabi...<</say>>
<div id="Ntext">Gabriela immediately extends her hand, palm open, demanding the keys.</div>
<<say $Gabrielayoung>>Give them to me. Now.<</say>>
<div class="links">
<th>[[Give her the keys|Event-Flashback8-Solo]]</th>
</div>
</div>
<<include "Gabi">><div id="ConversationBox">
<div id="Ntext">You bite your lips until they almost bleed, feeling your pride twist in your chest. But knowing that Rodríguez is right, you relent. With a heavy sigh, you take the keys out and hand them to her.</div>
<<say $Mc>>Just ten minutes.<</say>>
<<say $Gabrielayoung>>Whatever the drive takes.<</say>>
<div id="Ntext">She pauses, looking at you straight in the face, her expression rigid.</div>
<div id="Pensamiento">She is clearly angry,...</div>
<<say $Gabrielayoung>>This has to be the last time. Do you hear me? The last time we finish a case like this! I’m done! You always end up a wreck, always! How am I supposed to trust you to cover my back in that state? No way!<</say>>
<div id="Ntext">Her words hit you like a hammer. Your eyes widen for a few seconds as you listen to your partner’s words. The pain of the truth cuts deep, and you know she couldn’t be more right.</div>
<<say $Gabrielayoung>>I can’t keep working like this with you, Casey. You’re a great detective and... my best friend... but if you keep going like this, you’re dragging down, and me with you.<</say>>
<div id="Ntext">The anger mixes with discomfort, but you can't deny it. Gabriela's words cut through you, but you have no response.</div>
<div id="Pensamiento">God, Gabi, I...</div>
<<say $Mc>>I'm sorry...<</say>>
<<say $Gabrielayoung>>Just make sure you really rest next time, okay?<</say>>
<div class="links">
<th>[[Everything will be fine|Event-Flashback9-Solo]]</th>
</div>
</div>
<<include "Gabi">><div id="ConversationBox">
<div id="Ntext">Gabriela starts the car with a heavy sigh, her hands firmly gripping the steering wheel. The engine hums softly, and the sound of city traffic mixes with the dense silence between you both. Gabriela keeps her eyes on the road, her expression still tense, though a little calmer after what had just happened.
You lean back in the seat, feeling exhaustion overtake you completely. Though you know you shouldn’t fall asleep, your eyelids no longer respond. The hum of the engine, the soft vibration of the wheels on the asphalt, is almost hypnotic.
Gabriela glances at you quickly, noticing how your eyes seem to close completely, the weight of fatigue finally taking control of your body.</div>
<<say $Gabrielayoung>>Just ten minutes, huh?<</say>>
<div class="links">
<th>[[Sleep|Event-FlashbackEnd-Solo]]</th>
</div>
</div>
<<include "Gabi">><div id="ConversationBox">
<div id="Ntext">Finally, you can’t keep your eyes open any longer. The exhaustion weighs on you so heavily that, despite the persistent feeling that you should stay alert, your body betrays you. You lean back in the seat, surrendering to the comfort you feel. For a moment, it feels like peace, a brief respite from the storm of thoughts and the tension that overwhelms you.</div>
<div class="links">
<th>[[Wake up|Event-FlashbackEnd2-Solo]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">A sharp sensation pulls you out of sleep. It’s not a gentle awakening, but a jolt, a harsh return to reality. You open your eyes, but nothing feels familiar. The air is cold, damp, stale.
The smell of mold and decay fills your nostrils. You slowly rise, feeling how your body is stiff, as if you've been here much longer than you remember. Looking around, everything is dark, except for the faint light of the moon filtering through broken windows. The silence is complete, heavy.
The sense of disorientation consumes you as you stand, the cold, dusty floor beneath your feet. There’s no sign of the aberration that attacked you before.</div>
<div class="links">
<th>[[Get up|Event-FlashbackEnd3-Solo]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">The cold of the floor is the first thing you perceive upon waking. The rough, dusty stone presses against your skin as you clumsily push yourself up. The dense, humid air barely stirs, and a rancid stench clings to the atmosphere, invading your senses.
Shadows stretch around you, cast by the pale moonlight filtering through the broken windows. The room is completely silent, an unsettling void that offers no clues about what happened before.</div>
<div id="Pensamiento">Where…?</div>
<<say $Mc>>Shit. How long was I out?<</say>>
<div id="Ntext">Your fingers slowly trail to your chest, searching for the damage caused by the tentacle. No wounds. No blood.</div>
<div id="Pensamiento"> This isn’t possible. And the dream...</div>
<<say $Mc>>Shit… this dream...<</say>>
<div id="Ntext">You exhale sharply, pressing your hand to your temple. The past pulls at you like an unstoppable current, each memory unraveling the present.</div>
<div id="Pensamiento">It was my last case with Gabi. She was right… it didn’t end well.</div>
<div id="Ntext">The darkness around you surrounds you, the humidity seeps into your bones, and the echo of the past continues to resonate in your mind. You feel as if you are trapped, lost between two worlds. But the present is what matters most.</div>
<div id="Pensamiento">That thing… whatever it was… attacked me, and then… maybe it was a hallucination or… Shit, I need to focus.</div>
<div id="Ntext">You close your eyes for a moment, trying to gather strength, trying not to think about the creature.</div>
<<say $Mc>>This can't stop me. I have to keep going.<</say>>
<div id="Ntext">You pull away from the wall, and although your body still feels heavy, you force yourself to stand firm. Each movement is a reminder that you're still alive.</div>
<div class="links">
<th>[[Continue|Grand Hall]]</th>
</div>
</div>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacket.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoat.png")>>
<</if>><div id="ConversationBox">
<div id="Ntext">You lean between her legs, feeling her breath quicken as your tongue glides over her skin. Every movement of yours makes her tremble, surrendering to pleasure. Without hesitation, you bury your face between her thighs, devouring her with hunger, as if she were the most delicious feast you've ever tasted.</div>
<div id="videoPlaceholder"></div>
<<script>>
window.setupHorizontalVideo("videoPlaceholder", "media/violet/eatpussy.mp4", 90, "cover");
<</script>>
<div class="links">
<th>[[Let her lick you more|Event-sofa-Female3]]</th>
<th>[[Eat more pussy|Event-sofa-Female4]]</th>
</div>
</div>
<<script>>
setup.phoneSystem.unlockMedia("Violet", "video", "media/violet/eatpussy.mp4");
<</script>><div id="ConversationBox">
<div id="Ntext">You shudder, biting your lip as Violet continues licking with dedication. Your fingers grip her hair, guiding her gently.</div>
<<say $Mc>>Don’t stop...<</say>>
<div id="Ntext">She smiles against your skin before deepening her rhythm, savoring every sound she draws from you.</div>
<div id="videoPlaceholder"></div>
<<script>>
window.setupHorizontalVideo("videoPlaceholder", "media/violet/lickpussy.mp4", 90, "cover");
<</script>>
<div class="links">
<th>[[Lick her pussy|Event-sofa-Female2]]</th>
<th>[[Scissors|Event-sofa-Female5]]</th>
</div>
</div>
<<script>>
setup.phoneSystem.unlockMedia("Violet", "video", "media/violet/lickpussy.mp4");
<</script>><div id="ConversationBox">
<div id="Ntext">Violet settles on top of you, starting slowly, but soon her hips move with a desperate rhythm, seeking more friction between you both. </div>
<div id="videoPlaceholder"></div>
<<script>>
window.setupHorizontalVideo("videoPlaceholder", "media/violet/scissors.mp4", 90, "cover");
<</script>>
<div id="Ntext">The warmth of her skin blends with yours, the electric friction making each moan grow louder.</div>
<div id="videoPlaceholder"></div>
<<script>>
window.setupHorizontalVideo("videoPlaceholder", "media/violet/scissors2.mp4", 90, "cover");
<</script>>
<div class="links">
<th>[[End|Event-sofa-Female6]]</th>
</div>
</div>
<<script>>
setup.phoneSystem.unlockMedia("Violet", "video", "media/violet/scissors.mp4");
setup.phoneSystem.unlockMedia("Violet", "video", "media/violet/scissors2.mp4");
<</script>>
<div id="ConversationBox">
<div id="Ntext">Exhausted, both of you collapse onto the sofa. Violet sits up with a carefree air, her breath still rapid and a rebellious spark in her eyes. </div>
<<say $Violet>>I'm going to be late to see my parole officer because of you...<</say>>
<div id="Ntext">Her tone is mocking, as if she really doesn’t care.</div>
<<say $Mc>>Don’t worry, if he gives you trouble, I’ll pay him a visit to knock him down a peg.<</say>>
<div id="Ntext">Violet lets out a defiant laugh, a mix of teasing and fun, as she gets dressed in a slightly messy but effortlessly stylish way.</div>
<<say $Violet>>Don’t worry about me, detective; your chaos always shakes up my routine. <</say>>
<div id="Ntext">With those words, she rushes out. You’re left alone on the sofa, savoring the calm that contrasts with her energetic presence, as you slowly make your way to the bed, ready to enjoy your day off without any rush.</div>
<div class="links">
<th>[[Go to the bed|Event-sofa-FemaleEnd]]</th>
</div>
</div>
<<include "Violet">><div id="ConversationBox">
<div id="Ntext">Violet is on all fours on the couch, her back arched and her skin tingling under your hands. You grip her thighs and bury your head between her legs, devouring her with more intensity, making her moan in pleasure.</div>
<div id="videoPlaceholder"></div>
<<script>>
window.setupHorizontalVideo("videoPlaceholder", "media/violet/eatpussy2.mp4", 90, "cover");
<</script>>
<div class="links">
<th>[[Scissors|Event-sofa-Female5]]</th>
</div>
</div>
<<script>>
setup.phoneSystem.unlockMedia("Violet", "video", "media/violet/eatpussy2.mp4");
<</script>>
<div id="ConversationBox">
<div id="Ntext">Violet stands in front of you and then kneels in front of you, starting to touch you.</div>
<div id="videoPlaceholder"></div>
<<script>>
window.setupHorizontalVideo("videoPlaceholder", "media/violet/startplay.mp4", 90, "cover");
<</script>>
<div id="Ntext">She wraps her mouth around your pussy. Her warmth and softness make you shudder as she continues exploring you eagerly, savoring every reaction of yours.</div>
<<nobr>>
<div id="videoPlaceholder"></div>
<<script>>
window.setupHorizontalVideo("videoPlaceholder", "media/violet/startplay2.mp4", 90, "cover");
<</script>>
<</nobr>>
<div class="links">
<th>[[Eat her pussy|Event-sofa-Female2]]</th>
<th>[[Let her lick you more|Event-sofa-Female3]]</th>
</div>
</div>
<<script>>
setup.phoneSystem.unlockMedia("Violet", "video", "media/violet/startplay.mp4");
<</script>>
<<script>>
setup.phoneSystem.unlockMedia("Violet", "video", "media/violet/startplay2.mp4");
<</script>>
<div id="ConversationBox">
<div id="Ntext">The sun filters through the curtains, gently illuminating the room. It’s your day off—no rush, no cases to solve… at least for now. You curl up in the sheets, enjoying the lingering warmth on your skin and the peaceful morning.</div>
<<say $Mc>>Mmm… well, that was fun<</say>>
<div id="Ntext">Just as sleep begins to pull you back under, the insistent buzzing of your phone breaks the silence. You frown and reach for it: Captain Havook.</div>
<<say $Mc>>Not now… <</say>>
<div id="Ntext">You bury yourself a little deeper into the pillow. Closing your eyes again</div>
<<say $Mc>>Definitely better than any coffee…<</say>>
<div id="Pensamiento">He’d call again later...</div>
<div id="Ntext">You stretch lazily, feeling the pleasant heaviness in your body, a satisfied smile playing on your lips.</div>
<div class="links">
<th>[[Sleep|Event-End]]</th>
</div>
</div><div id="ConversationBox">
<div id="Ntext">The cold of the floor is the first thing you feel upon waking. The contact with the cold tiles makes you shiver as you try to push yourself up, the pain in your body is immediate, though it's nothing serious. The air is dense, humid, and somewhat stale, as if the place is holding onto unpleasant memories.
Long shadows stretch around you, shaped by the dim moonlight filtering through the broken windows. The room is completely silent, an unsettling stillness that leaves no clues about what happened before.</div>
<<say $Mc>>What... what happened here?<</say>>
<div id="Ntext">You try to stand, but your legs wobble, forcing you to lean against the nearest wall. Your fingers touch your skin, trailing over your chest, searching for any marks or wounds, but there’s nothing. No trace.</div>
<div id="Pensamiento">Shit... that dream... it felt so real.</div>
<div id="Ntext">You sigh deeply, your hand instinctively resting on your crotch as the memories of that night begin to flood your thoughts.</div>
<<if $Fpartner is true>>
<div id="Pensamiento">It was the last time with her... when we were still together, it ended badly. It was the day the captain called me, to inform me of what happened to... to my family.</div>
<<else>>
<div id="Pensamiento">It was the last time with him... when we were still together, it ended badly. It was the day the captain called me, to inform me of what happened to... to my family.</div>
<</if>>
<div id="Ntext">You stand there, your mind overwhelmed with questions.</div>
<<say $Mc>>What was that thing that attacked me? Was it even real?<</say>>
<div id="Ntext">You shake your head, pushing the confusing thoughts aside.</div>
<<say $Mc>>Shit, I'm losing my grip!<</say>>
<div id="Pensamiento">I have to keep going and find that damn doctor.</div>
<div class="links">
<th>[[Contiue|Grand Hall]]</th>
</div>
</div>
<<if $CaseyJacket is true>>
<<run changeImage("img/characters/casey/caseyjacket.png")>>
<</if>>
<<if $CaseyCoat is true>>
<<run changeImage("img/characters/casey/caseycoat.png")>>
<</if>><div id="ConversationBox">
<div id="Ntext">Luke holds you firmly as he guides you with ease, sinking into you in one slow, deliberate motion. A soft sigh escapes your lips as the heat of his body merges with yours. He moves gently at first, his hands exploring your skin, savoring every reaction you give him.</div>
<div id="videoPlaceholder"></div>
<<script>>
window.setupHorizontalVideo("videoPlaceholder", "media/luke/penetration.mp4", 90, "cover");
<</script>>
<div class="links">
<th>[[More|Event-shower-Male3]]</th>
</div>
</div>
<<script>>
setup.phoneSystem.unlockMedia("Luke", "video", "media/luke/penetration.mp4");
<</script>><div id="ConversationBox">
<div id="Ntext">The rhythm grows more intense. His hands grip your waist, setting a relentless pace. The sound of his ragged breaths mixes with yours as pleasure builds uncontrollably, igniting every nerve with each deep, fast thrust.</div>
<div id="videoPlaceholder"></div>
<<script>>
window.setupHorizontalVideo("videoPlaceholder", "media/luke/penetration2.mp4", 90, "cover");
<</script>>
<div class="links">
<th>[[Make him cum|Event-shower-Male4]]</th>
</div>
</div>
<<script>>
setup.phoneSystem.unlockMedia("Luke", "video", "media/luke/penetration2.mp4");
<</script>><div id="ConversationBox">
<div id="Ntext">Straddling him, you feel his body tense beneath you as you cling to his shoulders, surrendering to the intensity of the moment. Luke grits his teeth, his grip tightening. A deep groan escapes him before he finally gives in, both of you tumbling into a wave of pure ecstasy.</div>
<div id="videoPlaceholder"></div>
<<script>>
window.setupHorizontalVideo("videoPlaceholder", "media/luke/ride.mp4", 90, "cover");
<</script>>
<div class="links">
<th>[[End|Event-shower-Male5]]</th>
</div>
</div>
<<script>>
setup.phoneSystem.unlockMedia("Luke", "video", "media/luke/ride.mp4");
<</script>><div id="ConversationBox">
<div id="Ntext">As Luke cleans himself and steps out of the shower to get dressed, you remain under the hot water, feeling the stream flow over your skin, also washing away the remnants of his presence from within you. From the bathroom, you watch his clothes slide over his body.</div>
<<say $Luke>>I'm going to be late because of you...<</say>>
<<say $Mc>>It's not that big of a deal. It's just a few minutes. Besides, you're not going to complain after the sex, are you?<</say>>
<div id="Ntext">Luke lets out a frustrated sigh, runs a hand through his hair, and stands up quickly, moving swiftly to finish getting dressed. His movements are hurried, but he pauses for a moment to look at you with a mischievous smile. He puts on his jacket before approaching the door. He stops for a moment and gives you one last quick glance.</div>
<<say $Luke>>You can stay as long as you want, $McName.<</say>>
<<say $Mc>>Don't worry, Luke. I'm in no rush. I'll see you later.<</say>>
<<say $Luke>>I'd like that. I'll see you later...<</say>>
<div id="Ntext">Luke leaves the room. The door clicks softly as it closes behind him. You sigh, letting the silence settle for a moment. You turn off the shower, step out, and wrap yourself in a towel, slowly making your way back to the bed. </div>
<div class="links">
<th>[[Go to bed|Event-shower-Male6]]</th>
</div>
</div>
<<include "Luke">><div id="ConversationBox">
<div id="Ntext">The air is still heavy with his presence, and the bed feels emptier without him. You slide back into the sheets, savoring the residual warmth from the shower, as sleep begins to envelop you once again.</div>
<<say $Mc>>Mmm… well, that was fun.<</say>>
<div id="Ntext">Just as sleep begins to pull you back under, the insistent buzzing of your phone breaks the silence. You frown and reach for it: Captain Havook.</div>
<<say $Mc>>Not now… <</say>>
<div id="Ntext">You bury yourself a little deeper into the pillow. Closing your eyes again</div>
<<say $Mc>>Definitely better than any coffee…<</say>>
<div id="Pensamiento">He’d call again later...</div>
<div id="Ntext">You stretch lazily, feeling the pleasant heaviness in your body, a satisfied smile playing on your lips.</div>
<div class="links">
<th>[[Sleep|Event-End]]</th>
</div>
</div><<widget "verticalVideo">>
<div id="vertical-video-container" style="width: 100%; max-width: 540px; margin: 0 auto;">
<<= '<video id="vertical-video" style="width: 100%; height: auto;" controls><source src="' + $args[0] + '" type="video/mp4">Your browser does not support the video tag.</video>'>>
</div>
<<endwidget>><<widget "horizontalVideo">>
<div id="horizontal-video-container" style="width: 100%; max-width: 960px; margin: 0 auto;">
<video id="horizontal-video" style="width: 100%; height: auto;" controls>
<source src="$args[0]" type="video/mp4">
Your browser does not support the video tag.
</video>
</div>
<<endwidget>><<script>>
setup.phoneSystem.addContact("Cap. Henry Havook", "Henry Havook, the police captain, is a seasoned and strict leader, known for his commitment to justice and his protective attitude toward his team.", "img/characters/henry/avatar.png");
<</script>>
<<script>>
setup.phoneSystem.addContact("Mayor Quentin", "The mayor has hired you to investigate a case of multiple kidnappings at the old Charles Francis mental institution, abandoned 15 years ago.", "img/characters/mayor/avatar.png");
<</script>>
<<button "Mute ALL Sound">>
<<script>>
window.muteAllAudio();
<</script>>
<</button>><div id="ConversationBox">
<<say $Mc>>Everything will be fine. But next time... next time I'll rest.<</say>>
<div id="Ntext">Gabriela doesn't respond immediately. Her expression softens, but her eyes are still full of concern. She takes a step back, giving you a moment to process everything she just said.
The air between you two feels thick, as if you both can sense the weight of the truth hanging in the space. Those moments of silence, though uncomfortable, seem inevitable.</div>
<<say $Gabrielayoung>>You never talk about it, you know?<</say>>
<<say $Mc>>What?<</say>>
<<say $Gabrielayoung>>Your family... your parents. Your sister.<</say>>
<div id="Ntext">Her voice is soft, but the question falls heavy between the two of you. As if, by mentioning it, a space you’ve kept closed briefly opens.</div>
<<say $Mc>>You know what happened...<</say>>
<<say $Gabrielayoung>>Casey, I mean...<</say>>
<div id="Ntext">She looks at you with a mixture of concern and understanding. It’s as if she wants to say more, but doesn’t know how, as if the anguish in your words isn’t only yours, but hers too.</div>
<<say $Mc>>I know, Gabi. I know.<</say>>
<div id="Ntext">Her eyes don’t leave you. Those uncomfortable silences fill the air again. Gabriela seems to be waiting for you to speak, for you to take the next step.</div>
<<say $Gabrielayoung>>If you ever need to talk about them... you know I’m here, right?<</say>>
<<say $Mc>>I know... I’m just not ready yet.<</say>>
<<say $Gabrielayoung>>It’s okay. Let’s get moving.<</say>>
<div class="links">
<th>[[Get in the car|Event-Flashback10-Solo]]</th>
</div>
</div>
<<include "Gabi">>