<div style="text-align:center; margin-top:60px;">
<h1 style="font-size:3em; margin-bottom:0.2em;">Sanctum</h1>
<p style="font-size:1.3em; margin-top:0; margin-bottom:1.5em;">by J. Wolfe</p>
</div>
<p style="font-size:1.2em; line-height:1.8; text-align:center; margin-top:30px;">
Welcome to //Sanctum//—a psychological horror interactive fiction about control, conditioning, and the slow, careful erasure of self.
There are no happy endings here. Only the ones where you crawl out alive, or don’t.
</p>
<hr style="margin:40px 0; border: none; border-top:1px solid #6B1E1E;">
<p><b>Please beware that you'll experience:</b></p>
<ul style="list-style-type:disc; margin-left:40px; line-height:1.8;">
<li>Kidnapping</li>
<li>Imprisonment and isolation</li>
<li>Gaslighting and psychological manipulation</li>
<li>Forced obedience and control</li>
<li>Threats, violence, and physical punishment</li>
<li>Power-imbalanced sexual tension</li>
<li>Mentions of past trauma, including addiction, suicide ideation, and family abuse</li>
<li>Trauma bonding</li>
<li>Helplessness, dread, and hopeless emotional states</li>
<li>Distorted intimacy that is unhealthy by design</li>
<li>Death</li>
</ul>
<div style="text-align:center; margin-top:50px;">
[[Begin.|begin]]
</div>
<<set $gender = "">>
<<set $firstName = "">>
<<set $lastName = "">>
<<set $trust = 0>>
<<set $obedience = 0>>
<<set $profession = "">>
<<set $strength = 0>>
<<set $dexterity = 0>>
<<set $intelligence = 0>>
<<set $charisma = 0>>
<<set $wisdom = 0>>
<<set $smoker = false>>
<<set $withdrawal = false>>
<<set $pots = false>>
<<set $celiac = false>>
<<set $hrt = false>>
<<set $peeChoice = "" >>
<<set $waterChoice ="">>
<<set $introTone = "">>
<<set $foodTone = "">><div style="text-align: center; font-size: 2.8em; font-family: 'Georgia', serif; color: #5e0e0e; letter-spacing: 0.1em; margin-bottom: 0.2em;">
PROLOGUE
</div>
<div style="text-align: center; font-size: 1.1em; font-style: italic; color: #3b3b3b; margin-bottom: 2em;">
“I hurt myself today, to see if I still feel."
<br>– Nine Inch Nails, <i>Hurt</i>
</div>
It was one of those crisp Montreal nights that made the city hum low, as if the streets themselves were breathing. Your apartment window stood open just enough to let in the faint buzz of traffic and the smell of late‑night bagels from the shop downstairs. For now, life was yours. Peaceful. Normal.
You sit at your little kitchen table, pen resting between your fingers, filling out the last page of an application—anything to keep busy. The blank line at the top stares back at you, waiting for your name.
[[You can write it down.|custom_name]]
[[You seem to have forgotten it.|pick_name]]Your first name is...
<<textbox "$firstName" "">>
And your //last// name?
<<textbox "$lastName" "">>
[[Confirm|confirm_name]]How did you forget your //own name//? It must have been...
[[Masculine|male_names]]
[[Feminine|female_names]]
[[Gender neutral|neutral_names]]Ah, yes. That’s right. Your name is //<<print $firstName>>//.
You set the pen down for a second, flexing your fingers. The apartment’s radiator clicks, a sound you’ve grown used to, like a clock with no sense of time. Outside, the hum of traffic drifts through the cracked window, tangled with the faint, yeasty smell of the late‑night bagel shop.
The rest of the form waits: little boxes, empty blanks asking who you are, what you are.
Next question: //Gender//.
<<link "You check the box for male.">>
<<set $gender = "male">>
<<run Engine.play("gender_confirm")>>
<</link>>
<<link "You check the box for female.">>
<<set $gender = "female">>
<<run Engine.play("gender_confirm")>>
<</link>>
<<link "You leave it blank for a second, then write in your own answer.">>
<<set $gender = "nonbinary">>
<<run Engine.play("gender_confirm")>>
<</link>>A name comes back to you—sharp, certain, like it’s always been there.
<<link "Julien Mercier">>
<<set $firstName = "Julien">>
<<set $lastName = "Mercier">>
<<goto "confirm_name">>
<</link>>
<<link "Félix Tremblay">>
<<set $firstName = "Félix">>
<<set $lastName = "Tremblay">>
<<goto "confirm_name">>
<</link>>
<<link "Mathieu Gagnon">>
<<set $firstName = "Mathieu">>
<<set $lastName = "Gagnon">>
<<goto "confirm_name">>
<</link>>
<<link "Lucas Bouchard">>
<<set $firstName = "Lucas">>
<<set $lastName = "Bouchard">>
<<goto "confirm_name">>
<</link>>
<<link "Samuel Lavoie">>
<<set $firstName = "Samuel">>
<<set $lastName = "Lavoie">>
<<goto "confirm_name">>
<</link>>
<<link "Gabriel Fortin">>
<<set $firstName = "Gabriel">>
<<set $lastName = "Fortin">>
<<goto "confirm_name">>
<</link>>
<<link "Olivier Beaudoin">>
<<set $firstName = "Olivier">>
<<set $lastName = "Beaudoin">>
<<goto "confirm_name">>
<</link>>
<<link "Nathan Pelletier">>
<<set $firstName = "Nathan">>
<<set $lastName = "Pelletier">>
<<goto "confirm_name">>
<</link>>
<<link "Alex Moreau">>
<<set $firstName = "Alex">>
<<set $lastName = "Moreau">>
<<goto "confirm_name">>
<</link>>
<<link "Étienne Rousseau">>
<<set $firstName = "Étienne">>
<<set $lastName = "Rousseau">>
<<goto "confirm_name">>
<</link>>
[[← Back|pick_name]]A name surfaces, soft at the edges but sharp enough to cut through the haze.
<<link "Camille Desjardins">>
<<set $firstName = "Camille">>
<<set $lastName = "Desjardins">>
<<run Engine.play("confirm_name")>>
<</link>>
<<link "Amélie Gauthier">>
<<set $firstName = "Amélie">>
<<set $lastName = "Gauthier">>
<<run Engine.play("confirm_name")>>
<</link>>
<<link "Léa Boucher">>
<<set $firstName = "Léa">>
<<set $lastName = "Boucher">>
<<run Engine.play("confirm_name")>>
<</link>>
<<link "Chloé Martel">>
<<set $firstName = "Chloé">>
<<set $lastName = "Martel">>
<<run Engine.play("confirm_name")>>
<</link>>
<<link "Marianne Caron">>
<<set $firstName = "Marianne">>
<<set $lastName = "Caron">>
<<run Engine.play("confirm_name")>>
<</link>>
<<link "Jade Fontaine">>
<<set $firstName = "Jade">>
<<set $lastName = "Fontaine">>
<<run Engine.play("confirm_name")>>
<</link>>
<<link "Maude Clément">>
<<set $firstName = "Maude">>
<<set $lastName = "Clément">>
<<run Engine.play("confirm_name")>>
<</link>>
<<link "Sabrina Nguyen">>
<<set $firstName = "Sabrina">>
<<set $lastName = "Nguyen">>
<<run Engine.play("confirm_name")>>
<</link>>
<<link "Zoé Leblanc">>
<<set $firstName = "Zoé">>
<<set $lastName = "Leblanc">>
<<run Engine.play("confirm_name")>>
<</link>>
<<link "Audrey-Anne Giroux">>
<<set $firstName = "Audrey-Anne">>
<<set $lastName = "Giroux">>
<<run Engine.play("confirm_name")>>
<</link>>
[[← Back|pick_name]]
You search your mind, reaching for something that fits anywhere and everywhere.
<<link "Alex Dubois">>
<<set $firstName = "Alex">>
<<set $lastName = "Dubois">>
<<run Engine.play("confirm_name")>>
<</link>>
<<link "Jamie Pelletier">>
<<set $firstName = "Jamie">>
<<set $lastName = "Pelletier">>
<<run Engine.play("confirm_name")>>
<</link>>
<<link "Morgan Lévesque">>
<<set $firstName = "Morgan">>
<<set $lastName = "Lévesque">>
<<run Engine.play("confirm_name")>>
<</link>>
<<link "Riley Thibault">>
<<set $firstName = "Riley">>
<<set $lastName = "Thibault">>
<<run Engine.play("confirm_name")>>
<</link>>
<<link "Jordan Beaulieu">>
<<set $firstName = "Jordan">>
<<set $lastName = "Beaulieu">>
<<run Engine.play("confirm_name")>>
<</link>>
<<link "Casey Tremblay">>
<<set $firstName = "Casey">>
<<set $lastName = "Tremblay">>
<<run Engine.play("confirm_name")>>
<</link>>
<<link "Taylor Martins">>
<<set $firstName = "Taylor">>
<<set $lastName = "Martins">>
<<run Engine.play("confirm_name")>>
<</link>>
<<link "Sam Ouellet">>
<<set $firstName = "Sam">>
<<set $lastName = "Ouellet">>
<<run Engine.play("confirm_name")>>
<</link>>
<<link "Maxime Fournier">>
<<set $firstName = "Maxime">>
<<set $lastName = "Fournier">>
<<run Engine.play("confirm_name")>>
<</link>>
<<link "Jules Landry">>
<<set $firstName = "Jules">>
<<set $lastName = "Landry">>
<<run Engine.play("confirm_name")>>
<</link>>
[[← Back|pick_name]]The ink catches slightly on the cheap paper.
Next section: //Previous experience.// You stare at it a moment. The job market’s been chewing people up and spitting them back out, and you’re just another bite.
<<link "Military – Logistics and field coordination">>
<<set $profession = "veteran">>
<<set $strength = 50>>
<<run Engine.play("job_confirm")>>
<</link>>
<<link "Urban photography and freelance media">>
<<set $profession = "urbanEx">>
<<set $dexterity = 50>>
<<run Engine.play("job_confirm")>>
<</link>>
<<link "Restaurant kitchen – prep and line work">>
<<set $profession = "lineCook">>
<<set $dexterity = 50>>
<<run Engine.play("job_confirm")>>
<</link>>
<<link "Community-based work with vulnerable groups">>
<<set $profession = "streetRat">>
<<set $wisdom = 50>>
<<run Engine.play("job_confirm")>>
<</link>>
<<link "Forensics and administrative support (internship)">>
<<set $profession = "forensic">>
<<set $intelligence = 50>>
<<run Engine.play("job_confirm")>>
<</link>>
<<link "Bar service and customer-facing roles">>
<<set $profession = "bartender">>
<<set $charisma = 50>>
<<run Engine.play("job_confirm")>>
<</link>>
<<link "“Personal” and “emotional” services">>
<<set $profession = "sexWorker">>
<<set $charisma = 50>>
<<run Engine.play("job_confirm")>>
<</link>>
<<link "Emergency medical services – field experience">>
<<set $profession = "paramedic">>
<<set $strength = 50>>
<<run Engine.play("job_confirm")>>
<</link>>
<<link "Theatre and voice acting (contract-based)">>
<<set $profession = "actor">>
<<set $charisma = 50>>
<<run Engine.play("job_confirm")>>
<</link>>
<<link "Science & Engineering student">>
<<set $profession = "stemStudent">>
<<set $intelligence = 50>>
<<run Engine.play("job_confirm")>>
<</link>>
<<if $profession == "veteran">>
Concordia was just a blip before you signed the dotted line. You thought it would give you stability, structure, maybe even meaning. Instead, you got sand in your lungs and enough noise in your head to last a lifetime.
You spent years running supply, keeping people alive, watching others vanish in places you can’t even pronounce anymore. Civilians hear “logistics” and think about shipping. You know it means body bags, barricades, and the constant grind of not breaking under pressure.
Employers don’t line up for veterans these days. Too much baggage, not enough buzzwords.<</if>><<if $profession == "urbanEx">>
You started in architecture at Concordia, convinced you’d build something lasting. Instead, you crawled through half-collapsed buildings and climbed rooftops for the perfect shot. You called it “urban documentation” when pitching to sponsors, but when the cops caught you, it was just trespassing.
There was a time when your following meant something. Then the sponsorships dried up, the views slowed to a trickle, and the only thing that stayed was the adrenaline—right up until your ankle gave out on a rusted fire escape.
Even now, you can still hear the hollow echoes inside abandoned hospitals, like your own name being forgotten by the world.<</if>><<if $profession == "lineCook">>
Concordia didn’t stick, but the kitchen did. There was something almost comforting about the heat, the smoke, the chaos of a full dinner rush. You learned how to move fast and stay invisible, to keep your head down while orders piled up.
You spent years bouncing between restaurants, running sauté stations, working the line in places that chewed through people like meat. Your arms carry the scars, your wrists the tendonitis, and you’ve developed a sixth sense for when a ticket’s about to go bad.
The managers never remembered your name, but the crew did—usually with a curse or a muttered thanks when you saved their night. Now the knives are dull, the shifts are gone, and your fridge is almost as empty as your savings.<</if>><<if $profession == "streetRat">>
That’s how you wrote it: “community-based work.” Because “survived on the streets” doesn’t get you an interview.
You’d started at Concordia with good intentions, but it didn’t last. Instead, you learned in shelters and squats, picking up more from whispered conversations and back-alley trades than any lecture ever taught you.
When you needed help, no one came. So you became the help, at least for the people who needed it more than you did. Not every method was legal. It didn’t matter. You still keep your head on a swivel like a stray looking for the next danger.<</if>><<if $profession == "forensic">>
You wanted answers. Maybe justice. Psychology and criminology at Concordia felt like a way to get them.
You spent long nights under buzzing fluorescent lights, cataloguing evidence and scrubbing flecks of bone dust from your sleeves, pretending the sharp sting of disinfectant and the faint sweetness of decay didn’t get under your skin. It did. It always does.
You started waking at 3 a.m. with someone else’s name in your mouth and crime scene photos burned into your eyelids. Eventually, you stopped showing up. No one called. They already knew.<</if>><<if $profession == "bartender">>
On paper, it’s “hospitality.” That sounds better than bartender with a nicotine habit and a useless degree.
Concordia faded fast, but the bar was sharp. You poured drinks, talked people down from fights, learned the regulars’ traumas by heart, and smiled until it felt like your cheeks would crack.
The tips started decent and then dried up. The patrons got meaner. The nights got longer. After a while, you couldn’t tell if you left the job or if the job left you. Either way, you didn’t go back.<</if>><<if $profession == "sexWorker">>
You never write that it was escorting. Instead, you call it “personal services,” “freelance emotional labor,” something polite enough to slide past HR filters.
Tuition didn’t pay itself. Neither did rent. You learned fast—boundaries, safety, control. You also learned how quickly people can pretend you’re not real after they’re done with you.
Some nights felt powerful, like you held all the cards. Other nights felt hollow, like you’d stepped out of your own skin. You got out last winter. Mostly. Bills don’t care about exits.<</if>><<if $profession == "paramedic">>
Concordia didn’t last, but EMT training did. Being a paramedic gave you a purpose, at least for a while.
You saw more than you wanted to: car crashes, overdoses, blood on tile floors. You learned how to keep your hands steady even when your heart wasn’t.
Burnout crept in slowly. One day you realized you didn’t even care if the person in front of you lived. These days, when something shatters, you don’t flinch. You just grab tape and fix it.<</if>><<if $profession == "actor">>
Concordia’s theatre program taught you how to cry on cue. Real life taught you how to stop, even when you shouldn’t.
You chased auditions, took indie gigs, even tried voice work. For a while, the applause kept you going. Then it got quieter.
You still dream in dialogue, and sometimes you catch yourself performing grief instead of feeling it. Turns out art doesn’t pay, not unless you’re born into money. You weren’t<</if>><<if $profession == "stemStudent">>
You’re still at Concordia. Barely. Engineering, robotics, something technical enough to sound impressive on paper and miserable in practice.
You were supposed to be one of the smart ones. The kind of person who builds the future or fixes the world. Lately, you’ve been struggling just to get out of bed.
The labs are cold. The deadlines are tighter. And you’re pretty sure you’ve forgotten what it feels like to be proud of anything you make. You’re still enrolled—but something’s slipping.<</if>>
There’s no room on the line for explanations—not that they’d care.
You close the pen. The document lies flat on the table like a confession no one will ever read.
The night outside hums low, and the bagel shop downstairs finally kills its lights. You stand, stretch the stiffness from your shoulders, and wander to the bathroom.
The mirror catches you under buzzing light as you brush your teeth. You pause, toothpaste foaming, and really look at yourself. You see...
<<link "A sharp undercut with dark roots showing">>
<<set $appearance = "undercut">>
<<run Engine.play("appearance_done")>>
<</link>>
<<link "A bleached buzzcut with old dye clinging on">>
<<set $appearance = "buzzcut">>
<<run Engine.play("appearance_done")>>
<</link>>
<<link "Fresh twist-out still holding shape">>
<<set $appearance = "twistout">>
<<run Engine.play("appearance_done")>>
<</link>>
<<link "A messy wolfcut dyed black over pink">>
<<set $appearance = "wolfcut">>
<<run Engine.play("appearance_done")>>
<</link>>
<<link "Soft curls tucked under a thrifted beanie">>
<<set $appearance = "beanie">>
<<run Engine.play("appearance_done")>>
<</link>>
<<link "Grown-out box braids under a satin wrap">>
<<set $appearance = "braids">>
<<run Engine.play("appearance_done")>>
<</link>>
<<link "Shaved sides with uneven bangs you trimmed at 3a.m.">>
<<set $appearance = "bangs">>
<<run Engine.play("appearance_done")>>
<</link>>
<<link "Faded pastel dye that’s almost grown out">>
<<set $appearance = "pastel">>
<<run Engine.play("appearance_done")>>
<</link>>
<<link "A tight fade, clean and sharp">>
<<set $appearance = "fade">>
<<run Engine.play("appearance_done")>>
<</link>>
<<link "Shoulder‑length hair streaked with DIY bleach">>
<<set $appearance = "shoulderbleach">>
<<run Engine.play("appearance_done")>>
<</link>><<nobr>>
<<if $appearance == "undercut">>
The sides are buzzed close, the top grown out with dark roots threading through an old attempt at platinum. A hoodie with fraying cuffs slouches off one shoulder, and your sweatpants have a paint stain near the knee—evidence of a project you never finished.<</if>>
<<if $appearance == "buzzcut">>
Your buzzcut is short enough to feel every draft. A halo of faded teal clings stubbornly to the stubble. The oversized sweatshirt you’re wearing is soft and worn thin at the elbows, paired with mismatched pajama pants that have seen better years.
<</if>>
<<if $appearance == "twistout">>
Your twist-out’s still defined, fluffy and soft in the mirror light. You did it two nights ago—took your time, parted clean, oiled each section like ritual. It paid off.
You’ve got on a bleach-splattered graphic tee and soft shorts with the waistband rolled. There’s a bonnet on the counter, waiting for you to stop stalling.<</if>>
<<if $appearance == "wolfcut">>
The layered cut falls unevenly, streaks of pink ghosting beneath the black dye. You’re in an old band tee, sleeves hacked off, with loose joggers that sag just enough to feel lived in.<</if>>
<<if $appearance == "beanie">>
Your curls push out from under a stretched beanie, each lock catching the light. A thrift‑store cardigan hangs over a faded graphic tee, and your sweatpants are speckled with lint from too many dryer cycles.<</if>>
<<if $appearance == "braids">>
Your braids are neat where they count, but the roots are telling on you. The satin wrap’s half-on, half-slipping, but you’re too tired to fix it right now.
You’re wearing a tank with one loose strap and the same pair of lounge pants you swore you’d throw out last year. The mirror knows better.<</if>>
<<if $appearance == "bangs">>
The bangs hang jagged, some strands too short, others almost in your eyes. You wear an old flannel button‑down, the cuffs rolled and fraying, paired with lounge shorts that have pockets deep enough to hide your hands.<</if>>
<<if $appearance == "pastel">>
The once‑mint hue has faded to a whisper, roots showing strong and healthy beneath. A zip‑up hoodie with a broken drawstring rests over a threadbare tank, with soft cotton pants that carry faint bleach marks near the thigh.<</if>>
<<if $appearance == "fade">>
The fade is crisp enough to catch the light, edges lined like you sat in the chair yesterday. The top is brushed forward in tight curls, healthy and low‑maintenance but with that unmistakable “I know I look good” energy.
You’ve got on a fitted tank layered under a worn zip‑up hoodie, the kind with faint bleach spots on one sleeve. Your track pants are soft from years of washing, still hugging just right without trying too hard.<</if>>
<<if $appearance == "shoulderbleach">>
Uneven stripes of bleached blond slash through darker locks. You wear an old college crewneck with the lettering cracked and peeling, along with sweatpants that cling just enough to remind you they used to fit better.<</if>>
<</nobr>>
You spit out the toothpaste and rinse the sink. The mirror stares back—tired, familiar, and somehow still yours.
The apartment feels smaller at night. The hum of the radiator blends with the distant traffic, the kind that never really stops in this part of Montreal. You pad back to the kitchen long enough to flick off the light, then drift through the dim hallway toward your bedroom.
Your sheets are clean but old, soft from years of use. You climb in, letting the mattress dip under your weight, and pull the blanket up until it settles around your shoulders. The glow from a streetlamp outside slants through the blinds, painting pale stripes across the ceiling.
You reach over and set your phone facedown on the nightstand. No notifications. No calls to return. Just the low buzz of the city and the steady rhythm of your own breathing.
For now, life is still yours.
<center>✦ ✦ ✦</center>
The dream breaks before it can form.
A voice outside—ragged and sharp—cuts through the dark like a blade through thin ice.
“Laisse‑moi tranquille, ostie de chien! Y’ont pris tout c’que j’avais, tabarnak! Tu m’entends? TU M’ENTENDS?”
There’s a shuffle, a thump against a dumpster, then more muffled shrieking swallowed by the alley. The words tumble together, part fury, part terror, part nonsense.
You lie still for a moment, heart hammering, staring at the ceiling as the woman's voice cracks into sobs.
“Y m’regardent! Y m’REGARDENT… j’le sais! Calisse… calisse…”
Then silence—only the distant hiss of tires on wet pavement.
You sit up slowly, rubbing the sleep from your face. The light creeping through the blinds feels thin and reluctant, like the day isn’t sure it wants to start either.
The radiator clanks once and goes quiet. Outside, someone scrapes ice off a windshield, the sound sharp and hollow in the early air.
What’s your routine this morning? You’ve got time—at least a little—and habits that keep you stitched together.
<<link "Make coffee and scroll aimlessly on your phone">>
<<set $routine = "coffee">>
<<run Engine.play("routine_done")>>
<</link>>
<<link "Take a long shower and just… stand there">>
<<set $routine = "shower">>
<<run Engine.play("routine_done")>>
<</link>>
<<link "Write in a battered journal at the kitchen table">>
<<set $routine = "journal">>
<<run Engine.play("routine_done")>>
<</link>>
<<link "Do a few push‑ups and stretches on the floor">>
<<set $routine = "workout">>
<<run Engine.play("routine_done")>>
<</link>>
<<link "Watch the street from the window while eating a stale bagel">>
<<set $routine = "bagel">>
<<run Engine.play("routine_done")>>
<</link>>
<<nobr>>
<<if $routine == "coffee">>
You shuffle to the kitchen, the tiles cold under your feet. The coffee maker sputters and hisses while you scroll through endless feeds—job boards, memes, the same bad news dressed in new headlines. It’s not comforting, exactly, but it fills the silence.
<</if>>
<<if $routine == "shower">>
Steam fogs the mirror while the water runs hot over your shoulders. You stand still, letting the heat unknot your back while your thoughts drift—somewhere between memories and worries. When you finally step out, the room feels like another world.
<</if>>
<<if $routine == "journal">>
You dig out a notebook, the spine soft from years of abuse, and let the pen wander. Half grocery list, half confession, it spills out onto the page until your hand cramps and you feel lighter. No one will read it. That’s the point.
<</if>>
<<if $routine == "workout">>
The apartment’s too small for real workouts, but you clear a corner and drop to the floor. Push‑ups, crunches, stretches that creak your spine until it feels alive again. Your body warms, your pulse steadies, and for a moment, you feel ready.
<</if>>
<<if $routine == "bagel">>
You lean on the windowsill, bagel in hand, chewing absently as you watch the city. A neighbor drags recycling bins to the curb. Someone walks a dog in a jacket. The world spins, indifferent but steady. The bagel’s chewy, but it fills you up enough to keep moving.
<</if>>
<</nobr>>
Outside, the day begins to hum louder. You fold your CVs into a beat‑up canvas tote, sling it over your shoulder, and step into the city.
The sidewalks are slick with last night’s freezing rain, thin sheets of slush melting into puddles that catch the glow of dépanneur signs and flickering restaurant LEDs. The mural of Leonard Cohen still watches over you from downtown, solemn and steady.
You slip into a dépanneur near Rachel, one of those narrow ones stacked with lottery tickets and instant ramen, and leave a CV with the owner. He barely looks up from his scratch pad, eyes magnified behind thick glasses. A few blocks east on Rue Saint‑Denis, you hand another over at a small café with chipped tables and students tapping at laptops. The barista, apron dusted with flour, smiles without much hope and tacks your paper onto a corkboard already layered with résumés.
Farther west, near Avenue du Parc, you duck into a vintage shop that smells of dust and leather. They take your CV without a word. Around the corner, a cramped used bookstore accepts another—its owner nodding politely and saying, “On va vous rappeler... peut‑être.” Maybe. Probably not.
Buses groan down the streets. A snowplow clatters over patched asphalt. Pigeons dive at a discarded bagel half‑buried in slush, scattering when a car honks too close to the curb.
You keep moving, handing over little paper versions of yourself until the tote grows lighter. The cold chews at your ears, but you don’t stop.
<center>✦ ✦ ✦</center>
The hours thin out without you noticing. Streetlights buzz alive one by one, their halos flickering. A loose flyer slaps against a lamppost in the wind—an ad for a band you’ve never heard of.
You pass an alley that shouldn’t feel as narrow as it does. A single light burns at the far end, too dim to be useful, just enough to carve long shadows from a stack of trash bins. You don’t slow down, but you feel the prickle at the back of your neck anyway, like someone stepped close and then stepped away before you could turn.
Your breath fogs in the cold as you decide what to do.
<<link "Stop and actually look down the alley">>
<<set $alleyChoice = "look">>
<<run Engine.play("alley_done")>>
<</link>>
<<link "Pull out your phone, pretend to text">>
<<set $alleyChoice = "text">>
<<run Engine.play("alley_done")>>
<</link>>
<<link "Cut through the alley, just to get home faster">>
<<set $alleyChoice = "cut">>
<<run Engine.play("alley_done")>>
<</link>>
<<link "Ready your pepper spray in your pocket">>
<<set $alleyChoice = "spray">>
<<run Engine.play("alley_done")>>
<</link>><<if $alleyChoice == "look">>
You slow your steps until you’re almost still, head turning just enough to let your eyes trace the line of shadow and brick. There’s nothing there—just trash bins and a door chained shut.
Yet the air feels heavier here, damp with something other than melting snow. A drop falls from a bent gutter, loud as a clock tick, and you realize you’ve been holding your breath.<</if>><<if $alleyChoice == "text">>
You dig your hand into your pocket, screen lighting your face as you thumb nonsense into a blank note. Anyone watching would hopefully think you’re busy, connected, not worth the trouble.
The light from your phone catches the puddles on the street, and for a second you think you see movement in the reflection—just a shift, gone before you can focus.<</if>><<if $alleyChoice == "cut">>
Your tote feels lighter than ever, and the shortcut is right there. You step off the main drag, the cold shifting to something wetter and still.
The light at the far end hums as you pass under it, trash bins looming closer than they should. The air smells like rust. You tell yourself it’s fine—just a shorter walk.<</if>><<if $alleyChoice == "spray">><<if $profession == "veteran">>
Your hand slides into your coat pocket, fingers closing around the canister. Civilians might call it illegal. You call it common sense. After years carrying things far deadlier, a little pepper spray feels almost quaint.
The safety switch is right where your thumb expects it to be. There’s no target, no confirmed threat, just that low hum of tension threading through your shoulders.
You keep your stride steady and your head level, eyes scanning storefronts and passing cars with the same quiet vigilance you swore you’d leave behind. The alley fades from view, but the readiness stays with you, a habit carved so deep it might as well be bone.<</if>><<if $profession == "streetRat">>
You’ve been caught with worse. If the city wants to fine you for carrying something that keeps you alive, they can go right ahead.
Your hand slips into your coat pocket. You run your thumb along the safety, feeling the tiny resistance.
You look at everything else—storefront glass, passing silhouettes, shadows that move just a little too quick. You’ve lived in places where help never came, and the law was just another predator. Pepper spray might not stop the world, but it’s something between you and it.<</if>><<if $profession == "forensic">>
On paper, you know better. The law’s clear, the regulations precise. But paper doesn’t bleed. People do. You’ve seen it firsthand—files stacked high with victims who didn’t get a chance to defend themselves.
Your fingers curl around it. You don’t break stride. Your reflection in the darkened shop windows looks calm, but your jaw aches from clenching.
Every step past the alley feels like walking through a memory you can’t quite place: dim rooms, unsolved cases, names you couldn’t forget if you tried. Illegal or not, this little thing in your pocket feels like the only fair advantage left.<</if>><<if $profession == "sexWorker">>
Illegal? Maybe. But you’ve lived enough nights to know that laws don’t keep hands off your body—only //you// do.
The pepper spray is warm from your pocket when you grip it, thumb stroking the safety switch. You keep walking, spine straight, chin up, like you’ve done a thousand times after a shift when the streets felt meaner than usual.
You’ve had people follow too close, talk too sweet, step in too far. Some backed off at the sight of spray. Some didn’t, but at least you had something in your hand when the mask slipped. Tonight, the street hums low, and you’re not taking chances.<</if>><<if $profession != "veteran" and $profession != "streetRat" and $profession != "forensic" and $profession != "sexWorker">>
Your hand slips into your coat pocket, fingers curling around the small canister. Your thumb brushes the safety switch.
You keep your gaze forward, steps even, but there’s a new tension in your shoulders—a readiness that wasn’t there a moment ago. The alley remains silent behind you, but your breath only eases out when the street widens and the shadows thin.<</if>><</if>>
The street opens wider, brighter, safer—or that’s what you tell yourself.
You let your shoulders loosen. Streetlights hum overhead, and a half‑burned cigarette smolders near a curb, the smoke curling up like a ghost with nowhere to be.
You take one breath, then another. The rhythm of the city is steady, predictable. A car door slams somewhere behind you. A bus wheezes at a stop. A dog barks twice and is gone. Normal. Completely normal.
<center>✦ ✦ ✦</center>
The smell hits you like a punch: sweet, cloying, a faint fruit note drowned in something chemical, sharp enough to sting the back of your throat. The cloth is slammed over your mouth and nose before you even register the arm snaking in from behind.
You jerk back hard, your shoulder ramming into whoever’s behind you. They grunt and the cloth shifts, but it doesn’t come off. Your hand claws at their wrist, nails biting skin, but their grip only tightens.
Your free elbow drives back once, twice, hitting something solid, maybe a rib. A hiss, but no release.
You try to scream and suck half the cloth into your mouth instead, pulling more of that sick sweetness deep into your lungs.
At first it’s just a buzzing behind your eyes, like you stood up too fast. Then the air thickens, syrupy. Your feet don’t feel like yours, stuttering on the slick sidewalk.
<<if $profession == "veteran">>
For a second, it’s diesel. It’s desert heat. You’re nineteen again, choking on a cloud of engine exhaust and burning plastic.
Somewhere, someone’s yelling to put on your mask, but this time there’s no gear, no squad, no warning. Just you and the sting.<</if>><<if $profession == "paramedic">>
The symptoms clock in like a checklist you never wanted to memorize: Inhalation—check. Disorientation—check. Motor coordination starting to decay. You know what this is. You’ve seen it in reports, in ER intakes, once in the field.
But knowing doesn’t stop your knees from locking. It just makes the fear feel sharper.<</if>><<if $profession == "forensic">>
Your brain flips straight to evidence. A report—Montreal, 2017, female, 24, attacked on her walk home. Cloth soaked in chloroform. Took nine minutes to fully knock her out.
She bit her attacker. That’s how they got DNA. That’s how they found the body three weeks later.
You remember the photos. The bruising. You remember wondering if she knew she was going to die.
And now you wonder if you’re about to find out.<</if>>
You twist, drop your weight, try to hook a leg around theirs. A move, any move—but your coordination’s going soft, your hands slick with sweat. Your vision tilts and jerks. Streetlights smear into double halos.
Another breath drags more of that cloying fog down into your chest. Your stomach pitches. Your lungs start to burn. You can feel your own pulse hammering, too loud, drowning out the city.
Your legs buckle and you fight it, knees scraping pavement. The taste of iron and fruit coats your tongue. The hand over your face is steady, patient, like they’ve done this before.
The buzzing becomes a roar. Black creeps in from the corners, slow and steady, drowning color. Your thoughts slip, break apart. A cold nausea coils low in your gut.
You swing again, weak, barely more than a twitch. Another breath—your body betrays you, dragging it in—and the world narrows to the cloth, the smell, and the heartbeat hammering in your ears.
There’s a sound—someone speaking low, calm, almost gentle—but the words don’t stick.
Your arms go heavy. Your knees fold.
The light fractures, melts, and finally gives way.
<center>✦ ✦ ✦</center>
You come back wrong, barely aware and in pieces.
Your head throbs like it’s full of water and static. Your stomach lurches with every bump in the road, pressed sideways against something hard and cold.
Plastic? Metal? It doesn’t matter. You’re not upright. You’re not free.
Something’s digging into your wrists. Tight. Plastic. It's not rope. Zip-ties?
You try to move, but your limbs are heavy, your hands numb, your body slow to remember how anything works. Your skin feels too far away from your bones.
The car hits a pothole. Your shoulder slams into the wall of the trunk. The pain cuts through the fog just enough to make you gag, dry and weak.
Then you hear it.
♫ //“Well, I don't know why I came here tonight…”//♫
A voice—not a real one. A song. Cheery, playing from bad speakers up front.
♫ //“I got the feeling that something ain't right…”//♫
You blink in the dark, but your eyes won’t focus. The only light seeps in through a seam in the lid above you—dim, jittery. Headlights? Nothing stays long enough to pin down.
Your pulse is everywhere. In your ears, your throat, your wrists. It throbs against the plastic binding you like it wants out.
Your mouth tastes chemical, metal, spit. You try to speak, but it’s just a rasp. There’s no one to hear you anyway.
♫ //“Yes, I'm stuck in the middle with you…”//
The sound is far too cheerful, as if you’re not tied up in the dark, drugged, and going somewhere you didn’t choose.
You fade again.
<center>✦ ✦ ✦</center>
The car slows. Stops. The music dies mid‑verse. The engine ticks in the silence, heat bleeding into cold air.
A door opens. Boots crunch on gravel. You try to shift, but your wrists scream against the zip‑ties. The trunk latch clicks.
Light stabs your eyes. A shadow fills the frame.
Hands reach in, strong and sure. You try to kick, but your legs barely move. He hauls you out like you weigh nothing. Your head lolls against his shoulder. You catch a faint scent of soap and animal fur—clean but lived‑in.
“Easy,” he mutters, not unkind, not kind either. “Don’t make this harder than it needs to be.”
Your cheek brushes his jacket. Canvas, worn thin. His grip tightens under your knees and back as he carries you, steady, patient, like moving furniture. Your surroundings blur. A garage? A hallway? Somewhere dim and close, smelling of old wood and detergent.
“You’re lucky I found you first,” he says quietly, conversational, as if you’d asked. “People out there… they don’t take care of things.”
Your pulse thunders. Your stomach rolls again. You manage a sound—half cough, half plea—but he doesn’t respond. A door clicks open, air shifts. Warmer here. Quieter.
He lowers you onto something soft. A mattress. The sheets are clean but smell faintly of storage—laundry soap and dust.
Your arms are tugged behind you—his fingers quick, efficient, threading rope around your wrists, cinching it tight against the headboard with a practiced knot. He double‑checks the tension before letting go, the rope biting in just enough to remind you how little you can move.
“Hold still,” he says, tone flat, matter‑of‑fact. “If you fight it, you’ll make it worse.”
There’s a pause, the sound of him fishing something from his pocket. A click of metal on plastic. Cold air brushes your skin as the zip‑ties snap free one by one, the sting in your wrists flooding into a dull throb as circulation returns.
“Better,” he murmurs, almost to himself, like adjusting a piece of equipment. “No point in wrecking your hands. You’re going to need them.”
He gives the rope one last tug—checking, testing—then steps back, satisfied.
The silence thickens after he leaves. You’re alone now, in a room you don’t recognize, bound to a bed like it’s the most normal thing in the world. The mattress shifts under you every time you breathe.
A dull pressure builds low in your gut. The kind you can't ignore forever. You have to pee.
It’s humiliating. Annoying. Stupidly human. And unfortunately, urgent.
Eventually, you hear footsteps. Then the click of the door unlocking again.
Mateo steps in, casual as ever—sleeves rolled, eyes calm, like this is just housekeeping.
<<link "“Hey. So. Not to ruin the vibe, but unless you’re into piss stuff…”">>
<<set $trust += 5>>
<<set $obedience += 0>>
<<set $peeChoice = "joke">>
<<run Engine.play("needs_response")>>
<</link>>
<<link "“Untie me, asshole. I’m not pissing myself for you.”">>
<<set $trust -= 3>>
<<set $obedience -= 10>>
<<set $peeChoice = "angry">>
<<run Engine.play("needs_response")>>
<</link>>
<<link "“Sorry, but… I really need to use the bathroom.”">>
<<set $trust += 7>>
<<set $obedience += 5>>
<<set $peeChoice = "polite">>
<<run Engine.play("needs_response")>>
<</link>>
<<link "“I have to pee, like, now. Do whatever you want after, I don’t care...”">>
<<set $trust += 10>>
<<set $obedience += 0>>
<<set $peeChoice = "blunt">>
<<run Engine.play("needs_response")>>
<</link>><<if $peeChoice == "joke">>
The words rasp out of your throat like gravel, but the humor’s there—thin, bitter, maybe half‑hinged.
Your captor pauses near the foot of the bed, one brow slightly raised.
“No,” he says simply. “I’m not.”
He doesn’t look disgusted. Just... thoughtful.<</if>><<if $peeChoice == "angry">>
Your voice cracks through the room like a strike of flint—angry, sharp, no patience left.
Mateo tilts his head, arms folding. “Bold.”
There’s no heat in his tone. If anything, it’s almost amused, like he’s cataloging your reaction.
“But you’re not in a position to make demands.”<</if>><<if $peeChoice == "polite">>
You keep your tone even, almost apologetic, like you’re asking for a favor in someone else’s apartment.
Your captor doesn’t blink. “That’s fair,” he says, as if this is a perfectly reasonable conversation to have while tied to a bed.<</if>><<if $peeChoice == "blunt">>
No pretense. No careful wording. Just the raw need, spat out like a truth you don’t care how it lands.
Your captor stands still for a second, studying you like he’s weighing a tool in his hand. There’s no offense taken—only a faint, unreadable twitch at the corner of his mouth.
“Alright,” he says finally, as if it’s the simplest thing in the world.<</if>>
He doesn’t say anything for a second—just watches you, like he’s mentally checking a box.
Then he nods, turns, and walks out of the room. No rush.
The door clicks shut behind him, leaving you in a silence that hums too loud in your ears. Your wrists shift slightly against the rope, aching but secure. You don’t bother struggling. You’re too full of adrenaline and humiliation.
A few minutes later, the door opens again. Mateo returns with a plain white plastic container—something you recognise from hospital beds. He doesn’t speak.
You tense. Your breath catches.
He sets the container on the nightstand, then moves to your side and crouches. There’s no hesitation, no announcement. Just a quiet, methodical motion—fingers at your waistband, tugging your pants down over your hips and thighs.
You flush so fast it burns. Your cheeks go hot, your stomach cold. You twist slightly, instinctively trying to turn away, but there’s nowhere to go. The rope holds firm. You’re exposed. Helpless.
He doesn’t react. His expression stays blank, clinical, like this is part of a job.
“Don’t tense,” he says, not unkind. “You’ll make it harder.”
He lifts the cup and places it carefully between your legs, adjusting it with calm precision—making sure it fits, angled properly, held steady.
Everything in your body screams against it.
But he’s just... unnervingly calm.
“Go ahead,” he says. “I’ll empty it after.”
You don’t respond. There’s nothing to say.
Eventually, your body gives in—shaky, reluctant. You look anywhere but at him.
He doesn’t move. He holds the container steady until you’re done, unfazed, like this means nothing to him. Maybe it doesn’t.
When it’s over, he removes the cup without a word, moves to the side table, and sets it down like any other object. His movements are smooth, practiced, disturbingly normal.
“You’ll get used to the routine,” he says, as he pulls your pants back up, careful not to snag the rope or your skin.
He checks the bindings one last time with the same detached focus.
You swallow hard, the chemical aftertaste still clinging to the back of your throat. Your tongue feels heavy, dry, and you hate how small your voice sounds when you manage to speak.
“Can I get some water?”
He doesn’t answer. His eyes rest on you, calm and unreadable, as if he’s measuring something you can’t see.
You try again, and this time it comes out differently.
<<link "“Unless dehydrating me is part of the kink, I’d really like a glass.”">>
<<set $trust += 2>>
<<set $obedience += 0>>
<<set $waterChoice = "freaky">>
<<run Engine.play("water_response")>>
<</link>>
<<link "“What, do you only listen when I beg? That what gets you off?”">>
<<set $trust -= 8>>
<<set $obedience -= 12>>
<<set $waterChoice = "rebel">>
<<run Engine.play("water_response")>>
<</link>>
<<link "“I’m sorry. Could I have some water, please?”">>
<<set $trust += 6>>
<<set $obedience += 5>>
<<set $waterChoice = "pleaser">>
<<run Engine.play("water_response")>>
<</link>><<if $waterChoice == "freaky">>
The words slip out rough but laced with that crooked humor that comes when you have nothing left to lose. Mateo’s gaze lingers, head tilting slightly as though you’ve said something in a language he almost understands. His lips twitch, not enough to form a smile, and his voice stays even when he finally answers.
“No. But thanks for asking like this is mutual.”
He leaves without hurry. When he returns, a plain glass of water rests in his hand. He sets it on the nightstand just out of reach, his expression unreadable, and without another word he steps back.
“You’ll get it later. If you still deserve it.”<</if>><<if $waterChoice == "rebel">>
Your tone is low and sharp, the words carrying more weight than you expect. Mateo doesn’t answer at first; he simply watches you, and for a moment you think he might let it slide.
Then his hand snaps across your face so fast it feels like the air itself moved before you did. The impact stings deep, a rush of heat spreading across your cheek, your head turning with the force. There is no anger in his expression, no raised voice or threat, only a calm that feels colder than violence.
“Don’t mistake patience for permission,” he says, steady as a metronome.
He leaves the room as though nothing happened, the door clicking softly behind him while your cheek throbs and your pulse beats unevenly in your ears.<</if>><<if $waterChoice == "numb">>
Your voice barely rises above a whisper, nothing but a single word pushed out through a throat that feels like sandpaper. Your captor studies you for a long moment, eyes steady and patient, then turns and disappears through the doorway. When he comes back, he holds a glass of water and tips it carefully to your lips, watching the slow swallow without comment. The water is lukewarm and tastes faintly of dust, but it soothes something raw inside you. He sets the glass aside and stands, still silent, as if that is all there is to say.<</if>><<if $waterChoice == "pleaser">>
The words spill out soft and apologetic, your eyes lowered like you are asking permission to exist. Mateo’s gaze settles on you and stays there, quiet and assessing, and after a long pause he gives a single small nod.
“I’ll allow it soon,” he says, as though granting a minor request in a place where nothing belongs to you.
He leaves without hurry. When he returns, a plain glass of water rests in his hand. He sets it on the nightstand just out of reach, his expression unreadable, and without another word he steps back.
<</if>>
Your pulse is still hammering, and the quiet in the room feels like it’s pressing in on you. You try to get a grip on yourself, but the thoughts won’t stop colliding.
What’s actually going through your head?
[[This is fine. I can handle this. I just need to… think. Just think.|freakout]]
[[I can’t breathe. I can’t breathe. I need out right now.|freakout]]
[[He’s going to come back in here. He’s going to do something worse. I know it.|freakout]]
[[If I keep it together, I’ll figure a way out. Just stay calm. Stay. Calm.|freakout]]You tell yourself one thing and feel another. Your chest tightens until every breath feels shallow and wrong, like the air itself has weight. The ropes scrape your skin as you pull without meaning to, wrists already sore, shoulders straining against knots that don’t give at all. The pressure in your throat builds until it feels like you might be sick, or scream, or both.
The room is too still. The mattress dips beneath you, sheets soft and wrong against your skin. You can feel the faint warmth of where his hands were on you, clinical and cold at the same time, and the memory of it makes your stomach flip.
Your mind keeps replaying it—the flat sound of his voice, the way he looked at you like you were an object that disappointed him. You think about the door, the footsteps that might return, the calm way he tied the rope like he’d done it before, like he’d do it again.
You try to picture a way out, any way out, but all you see is the same door, the same bed, the same steady hand lifting the cup, the same voice telling you how things will be. Your thoughts stumble over themselves, spinning faster and faster until all that’s left is a single raw pulse of fear thudding behind your ribs.
<<nobr>><<if $profession == "veteran">>
You think of desert mornings with the sun cutting low over tents, the familiar weight of gear on your back, the bark of someone calling your name over the comms. Even the stink of diesel and sweat would be a mercy now—anything but this room.
<</if>>
<<if $profession == "urbanEx">>
You think of half‑collapsed stairwells and city wind humming through broken windows, the click of your camera shutter echoing in empty spaces that felt dangerous but yours. Even the sting of rusted metal under your hands would be better than these ropes.
<</if>>
<<if $profession == "lineCook">>
You think of the kitchen’s roar, the hiss of oil, the burn of steam on your arm and the slam of a ticket line printer spitting out orders. You’d give anything to feel a knife in your hand again, slicing through herbs instead of air you can’t control.
<</if>>
<<if $profession == "streetRat">>
You think of nights leaning against brick walls, trading stories with people who knew how to vanish when things got ugly, the hum of a city that didn’t care but at least felt alive. Even the bite of cold concrete would be freedom compared to this.
<</if>>
<<if $profession == "forensic">>
You think of fluorescent-lit labs, the sterile smell of gloves and ethanol, the shuffle of paperwork that at least meant you were still moving, still useful. You’d take the chill of a morgue drawer over the way this mattress holds you down.
<</if>>
<<if $profession == "bartender">>
You think of sticky counters and the weight of a glass in your hand, the rhythm of pouring drinks while music pounded low in your chest, voices rising and falling. Even the worst drunk leaning over the bar would be a welcome ghost right now.
<</if>>
<<if $profession == "sexWorker">>
You think of nights where at least you chose who touched you, where you set the terms even if they blurred later. Even those moments when you forced yourself to smile feel safer than this place and his quiet, steady hands.
<</if>>
<<if $profession == "paramedic">>
You think of sirens and split-second decisions, of pressing gauze to wounds and shouting vitals over the chaos. You’d give anything for the back of an ambulance, the reek of antiseptic, the sense that at least someone might live because of you.
<</if>>
<<if $profession == "actor">>
You think of stage lights and muffled applause, of losing yourself in someone else’s words under a hot spotlight. Even the sharp bite of rejection at auditions feels kinder than this room that won’t let you leave yourself behind.
<</if>>
<<if $profession == "stemStudent">>
You think of late-night labs and screens glowing with code or schematics, a mug of coffee cooling by your hand. Even the ache of pulling all-nighters over impossible projects would be easier than the stillness pressing on you now.
<</if>><</nobr>>
You shut your eyes against the ceiling, against the thought of him standing there again, but the darkness only makes the panic feel closer. It presses in on you until it feels like the room itself is shrinking, until every sound in the house becomes a warning, until you can’t tell if you’re shaking from cold, rage, or the simple, animal terror of knowing you are not in control.
Your mind won’t stop spinning, but the panic starts to narrow, latching onto smaller, sharper worries—mundane things that suddenly feel enormous in this room, tied down and helpless.
What’s clawing at you the most right now?
<<link "God, you need a smoke. Just one cigarette, anything to take the edge off.">>
<<set $smoker = true>>
<<run Engine.play("stress_response")>>
<</link>>
<<link "You were trying to get clean, but your body’s already starting to ache. Withdrawal's going to be a bitch in here.">>
<<set $withdrawal = true>>
<<run Engine.play("stress_response")>>
<</link>>
<<link "You feel that familiar lightheaded pull. You've got no meds. No beta-blockers, no salt tabs. You're fucked.">>
<<set $pots = true>>
<<run Engine.play("stress_response")>>
<</link>>
<<link "You think about food, whatever he might bring you, and the panic spikes when you remember gluten. One wrong bite and you’ll be wrecked for days.">>
<<set $celiac = true>>
<<run Engine.play("stress_response")>>
<</link>>
<<link "You try not to think about HRT, but time’s slipping. Every missed dose pulls you further from yourself.">>
<<set $hrt = true>>
<<run Engine.play("stress_response")>>
<</link>><<if $smoker>>
It’s ridiculous how fast the craving digs in. You can almost feel the shape of a cigarette between your fingers, the dry paper, the bitter burn in your lungs that always made your shoulders drop a little.
You tell yourself it’s stupid, that a smoke wouldn’t fix anything, but your nerves are screaming anyway. Your jaw aches from clenching, your hands twitch like they’re reaching for something that isn’t there, and the thought of never having that hit again makes your stomach tighten until you almost gag. It’s not just a want—it feels like your skin is crawling inside out.<</if>><<if $withdrawal>>
It hasn’t started yet, not really. But you can feel it waiting at the edges, like a storm you know is coming. Your body remembers the timetable even if you don’t want it to. In a few hours it’ll start—the crawling under your skin, the sweats, the cramping—and there’s nothing you can do to stop it. The knowledge alone is enough to make your stomach turn, knowing you’re stuck here with nowhere to hide when it hits.<</if>><<if $pots>>
You’re lying flat, but your body doesn’t care. The dizziness creeps in slow, that foggy lightheadedness that makes your hands go clammy and your vision swim when you move even a little. Your heart is thudding too fast for nothing, and you can already feel the heaviness in your legs like gravity just doubled.
You know what helps—you //have// it, usually—but all of that might as well be on the moon right now. You picture yourself trying to stand here, your body dropping you before you hit the door, and the helplessness tastes metallic on your tongue.<</if>><<if $celiac>>
You think about food because you can’t not, and the thought turns sour fast. Bread. Pasta. A breadcrumb on a countertop. Gluten is everywhere, and if he doesn’t know or doesn’t care, you’re screwed.
You picture your gut knotting itself in agony, the cramping sharp enough to make you see stars, and then the humiliation of what comes next—explosive diarrhea in some bucket he shoves under you, your body punishing you for trying to stay alive. Your throat tightens. It’s not just hunger you’re scared of. It’s losing control of even this most basic thing and knowing he’s going to see it.<</if>><<if $hrt>>
It hasn’t been long yet, but you can already feel the panic in your chest, and it’s not just fear of him. You had a way of staying in your own skin without wanting to claw your way out. Every hour without it feels like a countdown to a body that will start to feel wrong in ways that can't be explained to anyone who hasn’t lived it.
You think about the changes creeping back—slow, insidious, like body horror in real time—and you can’t even touch your own wrists to comfort yourself. The idea of that clock ticking while you’re tied here makes your throat close.<</if>>
You lie still a moment longer, then slowly start checking yourself—not with your hands, obviously, but with whatever range of motion the rope allows. You're not hoping for a key. Just... anything. A thread to hold onto.
<<if $veteran>>
You’ve done gear checks in worse places than this. Your body runs the mental checklist before your brain catches up. Everything obvious is gone—boots, jacket, belt. But he missed something.
Years ago, you stitched a sleeve cuff with a flap, just wide enough to hold what you needed most on bad days. You flex your wrist subtly—yeah. Still there. The tiny blade, no longer than your pinky, wrapped tight in a band of medical tape. Dull, but it can cut.
You breathe in, sharp and quiet. Your captor didn’t find it. You’ve got a weapon. Not much, but enough.<</if>><<nobr>>
<<if $urbanEx>>
You were always hiding things where cameras couldn’t catch them. You tilt your foot, twisting your ankle just enough to feel the pressure—yeah. There, tucked into the insole, still stuck with tape: a flattened, half-bent tension wrench. Not useful yet, but it means your captor didn’t find //everything//. That thought is worth something.
<</if>>
<<if $lineCook>>
Your apron’s gone, pockets empty, knife roll missing. But your pants—your old work pants—have that busted inner hem you never fixed. You wiggle slightly, rubbing cloth against cloth until you feel it: a flattened restaurant locker key, small enough to pass unnoticed. Doesn’t help here, but you kept it for a reason. A reminder of something real. Of a time you //could// leave.
<</if>><</nobr>>
<<if $streetRat>>
You learned young to hide shit where no one dares check. Cops. Foster homes. Dealers. You shift your hips, tense your core just enough to press against it—there. Still tucked behind the inner waistband, right along the stitching: a broken-off zipper pull filed into a shiv. Small. Rusty. But sharp.
You smirk. Barely. It’s stupid, but it’s yours. And if it comes to it, it can draw blood.<</if>><<if $stemStudent>>
You weren’t expecting this. Of course you weren’t. You kept a safety pin in your sleeve for fidgeting, stress relief, little sewing emergencies. Your captor took the hoodie, but still, your brain spirals—cataloguing, indexing, planning.
But there's nothing left to sort. Just fear, sterile and sharp.<</if>><<if $forensic>>
You remember stashing a magnet strip inside your belt lining—leftover from a training seminar, meant to detect trace metals. You doubt it’ll save your life, but it’s still there, and somehow knowing that detail didn’t slip past him gives you a shred of ground to stand on. Not much, but enough to feel a little less skinned alive.<</if>><<if $bartender>><<if $gender == "female">>
You used to wedge a lighter in your bra for protection. It was a thing. Something to grip when walking home. <</if>><<if $gender == "male">>
Your old jeans had a tiny rip along the waistband seam, where you hid cash tips and emergency aspirin. Habit. Survival instinct. <</if>><<if $gender == "nonbinary">>
You got good at hiding things in between seams. A bar spoon one week, a razor the next. Every shift was a surprise. <</if>>
It’s gone now. Your captor stripped you down to the bones of yourself. But your septum ring—you always flip it up when things get rough. You scrunch your nose slightly. Still there, nestled just inside the curve. Smooth metal. It’s not much, but it's a hidden bit of self no one’s taken yet.<</if>><<if $sexWorker>>
You taped a razor blade under your waistband last week. You shift slightly—nothing sharp now, unfortunately.
Still, you know how to make something out of nothing. You've survived... not worse, but some shit.<</if>><<if $paramedic>>
Your uniform’s gone, but you used to keep a flat CPR mask in a sock cuff.
You try not to think about what it meant that your captor knew to take it. You feel like you’re being triaged. Only you’re the patient //and// the medic, and everything is failing under your hands.<</if>><<if $actor>><<if $gender == "female">>You used to hide pills in tampon cases and safety pins in your bra strap. <</if>><<if $gender == "male">>You used to carry gum in your boot and eyeliner behind your badge.<</if>><<if $gender == "nonbinary">>You used to carry gum in your boot and eyeliner behind your badge. <</if>>
You check for any trace of theater left in you. Nothing. Just raw skin and the empty echo of performance. And for once, you can’t pretend.<</if>>
The door opens again. There's just the sound of your captor stepping inside, calm and deliberate.
When you look up, you see him fully now.
He's dressed like he doesn’t expect to be looked at. Henley shirt, sleeves shoved up to his elbows. Washed-out jeans, fraying at the pockets. There’s fur clinging to his cuffs and the chest of his shirt, like he sat with cats that morning and didn’t bother to brush it off.
He smells faintly like something domestic. Like... laundry soap and animal dander. Something warm, human, used to being trusted.
His dark hair is slightly long, falling forward in a way that would look soft if it weren’t for the flatness of his gaze. His face is average. Approachable. The kind of face you wouldn’t remember in a crowd—until you’d seen it hovering over you, deciding if you eat today.
There’s something wrong about how normal he looks.
His eyes flick from your face to your hands, your breathing, how you’re lying. A man scanning for answers without needing to ask the questions out loud.
Then, finally, he speaks.
“My name is Mateo Kwon,” he says. “I figured you’d want to know.”
A pause. A long one. He steps closer to the bed but doesn’t sit.
“I’m going to stand here and give you a minute,” he says. “And see how you choose to use it.”
He says nothing else and waits.
<<link "“Can we braid each other’s hair?”">>
<<set $trust += 1>>
<<set $obedience -= 3>>
<<set $introTone = "freaky">>
<<run Engine.play("intro_response")>>
<</link>>
<<link "You just stare at the wall.">>
<<set $trust += 0>>
<<set $obedience += 0>>
<<set $introTone = "numb">>
<<run Engine.play("intro_response")>>
<</link>>
<<link "“…Yes, Mateo.”">>
<<set $trust += 7>>
<<set $obedience += 8>>
<<set $introTone = "pleaser">>
<<run Engine.play("intro_response")>>
<</link>>
<<link "“You gonna monologue next, or are you done?”">>
<<set $trust -= 5>>
<<set $obedience -= 10>>
<<set $introTone = "rebel">>
<<run Engine.play("intro_response")>>
<</link>><<if $introTone == "freaky">>
“Can braid each other’s hair?”
It’s casual. Mocking. Just enough teeth behind the smile.
Mateo folds his arms, cocks his head like he’s trying to understand a puzzle.
“I know what you’re doing,” he says softly. “If you turn this into a game, you don’t have to feel scared.”
You shrug—barely. “If the shoe fits.”
He walks to the edge of the bed. Not close enough to touch, but just close enough to be a presence.
“I’ll take that from you too,” he murmurs. “When I’m ready.”
You swallow the laugh. It sticks on the way down.<</if>><<if $introTone == "rebel">>
“You gonna monologue next, or are you done?”
It hits like a thrown bottle—loud, useless, satisfying.
Mateo moves faster than you expect. He leans in, not touching, but close enough you feel his breath.
“I’m not here to perform for you,” he says. “I’m here to reshape you.”
Your mouth opens—snark half-loaded—but he cuts in again.
“And I’m patient. You’ll break yourself on your own time.”
You glare. “Maybe I’ll break you first.”
He smiles, and it’s the kind that should come with a warning label. “//Try it.//”
It doesn’t feel like you won that one.<</if>><<if $introTone == "numb">>
You just stare at the wall, just static behind the eyes.
Mateo doesn’t fill the silence. He lowers himself to your level—just crouched, studying you like a broken piece of tech.
“This again,” he murmurs. “You go quiet when it hurts too much.”
You blink once, showing no other movement.<</if>><<if $introTone == "pleaser">>
“…Yes, Mateo.”
It slips out before you think about it. It feels dirty in your mouth—but effective.
He nods, slow, like a trainer rewarding a trick done right.
“There. See how easy that was?”
You exhale through your nose, trying not to let him see your stomach turn.
“I said the words. Doesn’t mean I meant them.”
Mateo leans in just slightly. “Doesn’t matter. Say them enough times, and your body won’t know the difference.”
Your jaw clenches. You hate that part of you believes him.<</if>>
He doesn't say anything for a long time, just watches you with that same unreadable patience.
Then, without a word, Mateo lifts a plastic cup—white, flimsy, hospital-style—and steps closer.
You brace instinctively, but he only tilts it toward your lips. One hand under your chin, not rough, not kind. Steady.
“Don’t bite it,” he says quietly.
The water hits your tongue, lukewarm and flat, but it might as well be holy. You drink because you have to. Because your throat feels like scorched sandpaper and refusing would be stupid.
Mateo watches you swallow. Watches how much you take.
Then he pulls the cup away, just short of satisfaction.
“That’s enough.”
He sets it back down and doesn’t explain himself.
Your throat's still wet when your stomach makes a noise so loud it feels like betrayal.
It curls up from your gut—raw, hollow, impossible to ignore. Your body doesn't care about pride. It wants food. Anything.
Mateo hears it. Of course he does. His eyes shift down your torso, then back up to your face, slow and assessing, like he’s checking for bruises on a fruit he’s thinking of buying.
“You’re hungry.”
You nod. There’s no point denying it.
His expression doesn’t change. No warmth. No cruelty either. Just... calculation.
“I could bring you something,” he says. “But first—”
He crouches slightly, just enough that your eyes are level again.
“Tell me why you deserve it.”
He doesn’t blink.
The room feels smaller. //You// feel smaller.
<<link "“Because I’m being good.”">>
<<set $trust += 6>>
<<set $obedience += 8>>
<<set $foodTone = "pleaser">>
<<run Engine.play("intro_food_response")>>
<</link>>
<<link "“...Because I’m hungry, Mateo.”">>
<<set $trust += 4>>
<<set $obedience += 2>>
<<set $foodTone = "open">>
<<run Engine.play("intro_food_response")>>
<</link>>
<<link "“You don’t want me dead... right?”">>
<<set $trust += 2>>
<<set $obedience -= 1>>
<<set $foodTone = "freaky">>
<<run Engine.play("intro_food_response")>>
<</link>>
<<link "“You just want to see me beg, don't you?”">>
<<set $trust -= 3>>
<<set $obedience -= 5>>
<<set $foodTone = "rebel">>
<<run Engine.play("intro_food_response")>>
<</link>><<if $foodTone == "pleaser">>
“Because I’m being good.”
Mateo doesn’t blink.
“Are you?” he asks, like it’s a real question. “Or are you just saying what you think I want to hear?”
You freeze, throat dry.
“I don’t need a parrot. I need someone who understands.” His voice is quiet, like he’s teaching a child how to spell a word they don’t understand yet. “You say you’re being good—but do you know what good means here?”
You nod, instinctively.
“//Wrong//,” he says, flat. “You’re guessing.”
He stands, brushing off invisible dust from his knee. “I’ll bring you food when I see something worth rewarding. Not before.”<</if>><<if $foodTone == "open">>
“…Because I’m hungry, Mateo.”
It’s honest, and it lands.
Mateo tilts his head, like a dog hearing a strange noise. “That’s not an answer,” he says. “That’s a symptom.”
He steps closer—too close now. You feel it in your skin.
“You think hunger is a reason to be fed. It’s not. Hunger is just noise. Everyone wants. Everyone needs.”
He lifts a hand like he might touch you, but stops short. Just the threat of gesture.
“The only thing that matters here is whether I think you’ve earned it.”
A pause. Then: “Do you think you have?”<</if>><<if $foodTone == "freaky">>
“You don’t want me dead... right?”
It’s flippant, meant to deflect, but Mateo doesn’t rise to it.
He just watches you, eyes steady.
“No,” he says after a moment. “Dead is easy. I don’t want easy.”
He crouches, slow and quiet, like someone examining something half-broken.
“Hunger’s useful. It keeps you listening.” He doesn’t blink. “You’ll get used to needing things.”
<</if>><<if $foodTone == "rebel">>
“You just want to see me beg, don’t you?”
Mateo’s expression doesn’t shift—but his eyes sharpen.
“No,” he says. “That’s not it.”
He crosses the space between you in two unhurried steps. Close now.
“If I wanted you to beg, I’d make you.”
He places a hand briefly on the wall near your head. A cage without contact.
“What I want is for you to ask yourself why this matters so much to you. Why food. Why //now//.”<</if>>
Your stomach growls again. Humiliatingly loud.
You hate how much silence can feel like bait.
<<link "“…Please.”">>
<<set $trust += 6>>
<<set $obedience += 10>>
<<run Engine.play("food_pleaser")>>
<</link>>
<<link "“Oh, go fuck yourself.”">>
<<set $trust -= 4>>
<<set $obedience -= 6>>
<<run Engine.play("food_rebel")>>
<</link>>“...Please.”
The word comes out small, but intact. No defiance. No teeth. Just the shape of surrender, handed over willingly.
Mateo studies your face for a long beat. He doesn’t look surprised. He just nods slowly, as if confirming something he already suspected.
“Good,” he says, voice low. “See how easy that was?”
He leaves without another word, door closing quietly behind him. You lie there, listening to the air rearrange itself in his absence. Your stomach growls again, like it knows what’s coming.
When he returns, he’s carrying a sandwich—plastic-wrapped, convenience-store style, the kind with the little diagonal cut and the soft white bread pressed into itself. He sets it on the table near the bed like a peace offering. Or a prize.
Mateo peels the plastic back, then lifts half toward your mouth with his bare hand.
<<if $celiac>>
You blink. Something sour rises in your chest. The bread. The soft, pale bread.
“I... I can’t,” you mutter. “I’m celiac.”
The words come out tangled. Quiet. Embarrassed.
Mateo pauses. Just slightly. Like someone who’s been handed a piece that doesn’t fit the puzzle they built.
“What?” he asks—not sharp, but genuinely caught off-guard. “You’re what?”
“Celiac,” you repeat. “I’ll get really sick if I eat gluten.”
There’s a beat of silence. A subtle shift. He lowers the sandwich a few inches, eyes narrowing—not in anger, but in calculation. Like he's just realized your body has rules he didn’t write.
He stares at the sandwich like it betrayed him, then sets it down on the table again.
“I’ll bring you something else,” he says finally. The neutrality in his tone is chilling.
Mateo returns with something in hand: a small plastic bowl and a disposable spoon. He sets them down on the edge of the table like he’s feeding a stray animal he’s not sure won’t bite again.
You crane your neck to see it. Inside: steamed rice, a sliced hard-boiled egg, and a few pieces of steamed zucchini. No sauce. No seasoning. Barely warm. The kind of food they give patients on their third day of surgery recovery.
Mateo crouches beside you again. He picks up the spoon and scoops a small bite
<</if>>
“Open,” he says, the word simple and direct.
You realize with slow horror that he’s going to feed you like this. Not because you can’t do it yourself—but because now he doesn’t want you to.
“You earned this,” he says. “Don’t forget that.”
[[You open your mouth.|feeding]]“Oh, go fuck yourself.”
It’s reflexive, hot in your mouth before you even feel the weight of it. The defiance feels sharp for exactly a breath—and then Mateo moves.
There’s no warning. His hand clamps the back of your neck, the grip precise and practiced, like he’s done this before to someone who thought they still had a choice.
His thumb presses into the base of your skull, right at that spot where pain turns into static, and your vision swims without mercy.
“You don’t bark at me,” he says, his voice utterly unshaken. “You don’t snarl. You don’t bite.”
You try to twist away, but your body’s working on instinct, and instinct is failing you. Mateo shifts his weight forward and shoves your face into the mattress. He holds you down with the indifference of a farmer breaking in livestock.
Breathing turns to labor. The fabric scratches your cheek and the muffled air makes your panic rise like bile. You kick, legs skimming uselessly off the edge of the bed, wrists pulling tight against the ropes keepnig you here.
Mateo doesn't let up. Not when you start gasping. Not when your strength begins to drain out in slow collapse. He waits—not out of cruelty, but calculation. He waits until your fight bleeds into futility, until all your flailing quiets into stillness and your body remembers it's trapped.
Only then does he let go.
You drag in a breath like it might be your last. Your face is damp from spit, heat, and something else you don't want to name. The outline of his grip pulses against your neck and scalp—an invisible leash carved in pressure.
Mateo crouches beside you again, calm as before, the entire moment treated with the same emotional weight as brushing lint off a shirt.
“You’re not feral,” he says, as if stating a dull fact. “And I don’t train animals that pretend they are.”
He reaches out and taps your forehead once with two fingers. The touch is insultingly gentle.
“You want food?” he asks. “Then show me you know what that means.”
His eyes stay on you, waiting.
[[...Please.|food_rebel2]] The word barely leaves your mouth. Ragged. Hoarse. Half-swallowed by the sting in your throat.
Mateo watches your face for a moment that stretches just a little too long. Then he smiles, just satisfied in that way people smile when a machine finally starts working again.
“Good,” he says. “See? You’re learning.”
He stands and leaves without ceremony, the door closing with the same soft click you’re starting to dread more than a slam.
Minutes pass. Enough to make your body wonder if it imagined the promise. Enough to make your stomach growl again and your shame churn in time with it.
Then, the door opens.
Mateo returns with something in hand: a small plastic bowl and a disposable spoon. He sets them down on the edge of the table like he’s feeding a stray animal he’s not sure won’t bite again.
You crane your neck to see it. Inside: steamed rice, a sliced hard-boiled egg, and a few pieces of steamed zucchini. No sauce. No seasoning. Barely warm. The kind of food they give patients on their third day of surgery recovery.
Mateo crouches beside you again. He picks up the spoon and scoops a small bite.
“Open,” he says, the word simple and direct.
He doesn’t move to untie you. He doesn’t hand you the spoon.
You realize with slow horror that he’s going to feed you like this. Not because you can’t do it yourself—but because now he doesn’t want you to.
“You earned this,” he says. “Don’t forget that.”
He raises the spoon again. And waits.
[[You open your mouth.|feeding]]You open your mouth.
There’s a second—just one—where you think he might hesitate. That he might offer you the food like a person.
But no. He doesn’t hand it to you. He brings the bite to your lips like you’re a child who hasn’t earned that privilege, like your hands are decorative and your will is optional.
The food touches your tongue—warm, soft, wet in places it shouldn’t be. It’s bland. Something between starch and protein, like it was engineered to be eaten without tasting it. Not enough seasoning to name. Just enough salt to remind you it’s real.
You chew because the alternative is worse. You swallow because your body wants to survive more than it wants to be proud.
Mateo watches the whole thing. Every bite is a performance for one.
He brings the next mouthful the same way. No napkin. No plate. Just his hand and the rhythm of feeding. Like this is what you’re for now. Being fed.
By the third bite, your throat feels tight from swallowing around your shame.
You don't know where to look. His eyes never leave your face.
“You're lucky,” he says, almost gently. “Not everyone gets this much kindness their first day.”
You want to laugh. You want to spit. You want to be anywhere but here, but none of that matters. Your body opens its mouth again without asking you.
And Mateo smiles like he owns that too.
<center>✦ ✦ ✦</center>
When it’s over, Mateo wipes his fingers on a paper towel, folds it with casual precision, and walks out without looking back.
The door closes.
You don’t move. You barely breathe.
Silence swells in the room like mold—quiet, suffocating, alive. Your throat still tastes like starch and shame. Your stomach is full, but you can’t tell if it’s food or bile or the weight of what he just made you do.
You let him feed you.
That thought lands like a stone in your chest.
You let him feed you.
You opened your mouth. You took it. You swallowed every bite like it was nothing, like it meant nothing, like you didn’t feel your body fold inward with every chew.
Your eyes sting. From the heat behind them. From humiliation held too long under your skin.
This can’t be real.
This can’t be happening.
You hear it again—your own voice, in your head now, repeating again and again.
//This can’t be happening.//
//This can’t be happening.//
//This can’t be—//
But it is.
It //is//.
He touched you. He talked to you like you were a thing. He made you say “please” and you said it. You said it. You meant it. You wanted it. You were hungry and scared and weak and you said it like it would save you.
You shake your head, like you can rattle the thoughts loose. They stick. They stick like paste behind your eyes.
//Why me?//
//Why //me//?//
//What did I do?//
//Why this? Why now? Why him?//
//What the fuck did I do to deserve this?//
The words blur together, break apart, swirl back into themselves.
Maybe it was random. Maybe it wasn’t. Maybe you were easy. Maybe you were marked. Maybe none of it matters because now you’re here and he’s won and you’re still lying here, still tied, still filthy with the feeling of being //handled//.
He fed you like an owner feeds a pet.
You didn’t bite.
You didn’t scream.
You said “please.”
You said //“please.”//
And you’ll say it again.
The thought crawls across your skull like an insect.
You’ll say it again. You’ll say it again, and again, and //again//, because now you know what happens when you don’t. And now you know it doesn’t even take that much to break.
You don’t know if you’re going to cry or scream or vomit.
You don’t know who you are right now.
But you know what you are.
You’re his.
You’re //his//.
And no one knows.