pre-game character selection and customisation. [[robin, 22, they/them]]you sit in front of the screen. a cursor blinks. waiting. choose difficulty: [[easy]]: fewer layers. simpler hacking challenges (ctfs). more guidance. [[normal]]: standard obfuscation. regular misdirection. [[hard]]: complex architecture. red herrings. no hand-holding. *timed ctfs might be implemented but not sure yetyou’re inside the hospital network. old software. loose security. they’re running openEMR. unpatched. fragile. your friend/roommate used to be a hacktivist. loud. brilliant. relentless. they exposed systematic coverups of police brutality. three days later, their medical records were dumped on a forum. diagnoses, prescriptions, scans. all of it. real names. real consequences. they stopped leaving the apartment, even their room. now they just lay in bed and chainsmoke. you hit a snag. (details depending on difficulty level) you could brute force it. or ask for help. [[keep pushing alone]] [[message your friend for help]]difficulty levels are not implemented in this text based version, sorry [[start]]difficulty levels are not implemented in this text based version, sorry [[start]]difficulty levels are not implemented in this text based version, sorry [[start]]you dig deeper. no backup. no lifeline. just you and the code. hashes. encrypted fields. someone bolted extra security onto a crumbling system. it smells like guilt. you almost crack it when suddenly -ping. [[open message]]you type fast. <p class="robin">hey. need your eyes on an encrypted table. might be linked to your leak. openEMR. same build.</p> you keep digging. then- your roommate replies. <p class="cillian">damn. ok. give me a sec. that sounds familiar.</p> you send the dump. more silence. cursor blinks. <p class="cillian">yep. this table wasn’t standard. someone added it post-deploy. dirty. rushed.</p> <p class="cillian">look at this table. there’s a nested payload under the billing id field. obfuscation, not real encryption. check for repeated salt.</p> <p class="robin">thank you, you're the best</p> no reply for a while. you wait. hands off the keyboard. screen burning into your eyes. then- another message. short. [[open message]] (set: $seenChars to $seenChars + (a:"cillian"))roomie <p class="cillian">hey. sorry. can’t do this anymore. thanks for being there. this isn't your fault.</p> your fingers hover. <p class="robin">what do you mean?</p> you wait. no reply. <p class="robin">are you okay?</p> still nothing. you check their status. green. online. same as always. you stare at the screen a little longer. the blinking cursor feels louder than it should. they’re in the next room. [[go check]] (set: $seenChars to $seenChars + (a:"cillian"))you open the door. stillness. window open. chair tipped. the air smells wrong. you see them. a rope around their neck. body suspended. you lunge. hands on the rope, tearing at the knot. useless. it doesn't give. your hand finds their wrist. skin damp. no pulse. you keep holding on like grip alone could change it. [[sink down beside them]] [[turn off their monitor]] [[call 999 anyway]] [[say nothing]] [[leave the room]]you lower yourself to the floor. you stay anyway. [[aftermath]]you don’t move. don’t speak. just let the silence stay full. [[aftermath]]you close the door behind you. soft. like you’re afraid of waking them. [[aftermath|aftermath2]]the screen clicks dark. your reflection stares back. you look unfamiliar. [[aftermath]]days pass. maybe more. you don't go home much. don’t touch their things. don't check your inbox. tonight you're in a bar they used to like. blurry lights. muffled punk music. everything too loud. you sit alone. hood up. ghost in the corner. then someone slides into the seat across from you. no hesitation. like this was always their table. aviators. indoors. too old for the crowd. too calm for the noise. he sets down two drinks. lets one just sit there untouched. he takes the seat opposite to you. <p class="dev">"mind if i sit here?"</p> [[you already are.]] [[do i know you?]] [[shrug]] (set: $seenChars to $seenChars + (a:"dev"))he smiles. not smug. just a quiet twitch of the mouth like he expected that. dev <p class="dev">“you're not wrong.”</p> no apology. no correction. he respects the edge. [[just sip your drink]]he smiles a little. not evasive. not threatening. just calm. <p class="dev">no. but you looked like someone who wouldn’t mind not being alone for a bit.</p> he doesn’t offer more. doesn’t ask your name. just sips his drink, like this is nothing. like silence is the deal. [[just sip your drink]]he nods, like that was a full sentence. <p class="dev">same.</p> leans back slightly. sips his drink. stays quiet for a moment. like he’s just… keeping you company. [[just sip your drink]]you stay for a while. longer than you should. then you get up. you go through the motions. 999. police. coroner. you don’t remember most details. some things don’t need to be remembered. [[timeskip bar]] he doesn’t ask for your name. doesn’t give his. just sits there. sips his drink. lets the silence stretch without fraying. after a while, he says: <p class="dev">funeral?</p> [[they were my friend.]]<p class="dev">i figured.</p> not smug. not guessing. just reading the air right. <p class="dev">sorry. i’ve been to too many of those.</p> you don’t ask. he doesn’t offer. <p class="dev">what happened to them?</p> [[tell the full truth]] [[give the short version]] [[why do you want to know?]]you don’t even think about lying. <p class="robin">they were a hacktivist. pissed off the wrong people. someone leaked their medical records. the internet did the rest.</p> you sip your drink. it tastes like metal. <p class="robin">i tried to keep them safe. after. before too, probably. but it wasn’t enough.</p> he watches you. quiet. doesn’t say sorry again. doesn’t need to. he listens. doesn’t flinch. just says: <p class="dev">yeah. i remember a few ops that went dark like that. lot of ghosts in the signal.</p> pause <p class="dev">they were good, whoever they were. you don’t shake systems like that without knowing what you’re doing.</p> [[i code too]]you swirl the drink. say: <p class="robin">they got doxxed. records leaked. didn’t survive the fallout.</p> that’s all you give. he nods. doesn’t press. just lets it hang. <p class="dev">rough way to go, worse when it’s not your fault, but it still feels like it is.</p> [[i code too]]he nods, like that explains a few things. <p class="dev">you look like someone who talks to machines better than people.</p> no judgment in his voice. maybe he means himself, too. he leans back, studies you over the rim of his glass. <p class="dev">you still doing it?</p> [[nod]]<p class="dev">good. you ever get stuck on something, and your brain just won’t let go until you crack it open?</p> you raise an eyebrow. <p class="dev">figured. you’ve got that posture. syntax running behind your eyes.</p> then the grin— <p class="dev">wanna prove it?</p> [[prove what?]]he shrugs. <p class="dev">just a challenge. pick your flavor.</p> he pulls out a phone. slides it across the table. screen already lit. no apps. just six categories glowing soft against black: <div style="border: 1px solid #555; padding: 0.5em 1.5em; background-color: #111; border-radius: 6px; width: fit-content;"> <ul style="list-style: none; padding: 0; margin: 0; line-height: 1.1;"> <li><p class="storm">▸ reverse engineering</p></li> <li><p class="mayhem">▸ web</p></li> <li><p class="soph">▸ pwn</p></li> <li><p class="michael">▸ forensics</p></li> <li><p class="dev">▸ misc</p></li> <li><p class="nova">▸ crypto</p></li> </ul> </div> <p class="dev">take your time. i’m not here to rush you.</p> he leans back. hands off. eyes on everything. [[placeholder ctf1]] placeholder: player selects challenge category. resume story after task complete. [[after challenge]]you pass the phone back. he glances at the screen. nods. nothing showy—just a quiet kind of approval. <p class="dev">you think sharp. fast. careful when it counts. i'm dev by the way.</p> he finishes his drink. sets the glass down like punctuation. <p class="dev">i’ve got a project. nothing official. just… work that matters.</p> a pause. <p class="dev">it overlaps with what your friend used to care about.</p> he doesn’t say their name. doesn’t need to. <p class="dev">not asking for anything now. just… if you ever feel like doing something with all that fire still in your chest—</p> then— he swings his backpack into his lap. unzips it. pulls out a battered notebook, corners chewed, pages warped with time. rips out a sheet. scribbles something down in fast, slanted writing. no name. just a phone number. <p class="dev">that’s me.</p> he taps the table once. <p class="dev">use the pain. just don’t let it do the driving.</p> then he’s gone. like he was never really there. you sit there for a bit. then you leave. [[start heading home]]the street’s cold. quiet in a way that doesn’t feel peaceful. just… emptied. you walk. past the same storefronts. same flickering bus stop sign. same ads pretending to care. dev didn’t say much. but the card in your pocket feels heavier than it should. like it’s carrying something you're not ready to touch yet. you think about your friend. the way they used to fix broken things without asking. the way they filled up the room without meaning to. you think about their room. what’s still in it. what has to be packed. you breathe in. cold air, metal in the throat. no big decisions. just forward. you're in front of the flat. [[head inside]]you open the door slow. the air inside feels paused. like it’s waiting for someone who isn’t coming back. the landlord left a note. something about timelines, contracts. you don’t read it all. you get the shape: “clear the room.” you stand in their doorway for too long. not sure where to start. not sure you want to. their desk still smells like coffee and thermal paste. monitor covered with a scarf you forgot they owned. drawers full of adapters no one uses anymore. you move through it like walking underwater. start packing small: loose screws, an old soldering iron, badges from protests they barely talked about. you keep the important tech. their backup drives. a custom board they never finished. the one you helped debug at 2am once. it still smells faintly of ozone. in the drawer: a printed-out meme with a note on the back a cracked enamel pin from when you met. you take those too. and the scarf. not because you need them. because you don’t want to forget the texture of them. halfway through, your phone buzzes. <p class="dev">i'm going for lunch with a couple mates. you wanna come by? you need real food and better company.</p> you stare at the message. no pressure in the words. but the weight shifts in the room anyway. you seal the last box. leave the desk bare. pocket the scarf. then you lock the door. quiet. final. [[meet up with dev]]outside: cold light. your reflection in the glass looks like someone else. inside: warmth. steam, oil, old tile. the kind of heat that clings to your coat and doesn’t let go. the bell chimes soft as you push the door open. smells like vinegar and stories— the kind passed between bites, never written down. the woman behind the counter glances up. nods once. not a greeting. just: you’re with him. dev waves from the back booth. <p class="dev">“oi. over here.”</p> you cross the floor. tile underfoot. air thick with salt and memory. more people than you expected. tight circle around one table. only one of them has a laptop open. ginger hair, hoodie half-zipped, eyes that flick across the screen like they’re parsing the world as code. she doesn’t look up. just types. next to her, someone leans back like gravity doesn’t apply. curly buzzcut dyed a violent violet, chain glinting under warm light. tattoos peek out under a black tank. dev starts to speak - <p class="dev">“this is the—”</p> <p class="mayhem">“oh my god, you’re—wait, can i ask your name?”</p> mayhem’s already half across the table. bright eyes, faster than sense. dev stays quiet. lets you speak or stay silent. nova leans in, smirking. <p class="nova">“or do you prefer the air of mystery?”</p> you answer. or you don’t. either way—dev doesn’t fill in the gap. <p class="mayhem">“i’m mayhem. not that that means anything to you- hi!”</p> she shuffles over, drags you into the booth. too much energy. but honest. nova gives you a long look. <p class="nova">“thought you were a myth.”</p> you don’t reply. dev does, calm: <p class="dev">“they’re here.”</p> you sit. someone sets a drink down in front of you. mayhem’s already spiraling into questions—half-finished, all at once. nova’s quiet now, just watching. no one’s digging deep. not yet. but the room’s full of static, warmth, life. <p class="dev">“they like you. even if they’re not showing it yet.”</p> he stands. shrugs on his jacket. <p class="dev">“you’re coming with us, yeah?”</p> mayhem’s already got your sleeve in her hand: <p class="mayhem">“got something to show you. way cooler than this place.”</p> [[follow them]] (set: $seenChars to $seenChars + (a:"mayhem")) (set: $seenChars to $seenChars + (a:"nova"))inside the hackerspace. the door clicks behind you. mayhem’s the first through— spins once in the middle of the room like she’s greeting it, hood down, hair bouncing, already humming something under her breath. she tosses her bag near her workspace— yellow-coded, scattered with little glowing trinkets and wires that blink like they’re listening. starts dancing. no music. just her. behind her, soph heads straight to her corner— teal glow catching sharp on her cheekbones. she doesn’t say anything. doesn’t need to. drops into the chair like it’s muscle memory, opens her laptop, already mid-thought. hoodie off now, hair catching the light. screens flicker on around her—ordered, exact. michael walks in slower. eyes scan, not for people—familiar already—but for shift. puts the kettle on. doesn’t say why. you’ll understand when he hands you a mug later without a word. his space—blue-tinted—silent but steady. a nest of drives and quiet hums. nova flops backwards onto a brutal-looking chair, boots up on a plastic crate, purple buzzcut catching LED stutter. <p class="nova">“still smells like solder and bad decisions in here. love it.”</p> dev stays back by the door, hands in jacket pockets, watching them all take root. <p class="dev">“not what you expected, eh?”</p> you enter. door closes soft behind you. the space stretches ahead—glow, noise, faint smell of machines that have been on too long. you pause. take it in. then storm steps in last. shuts the door with the same care you’d use to disable a tripwire. eyes sweep once—top corners, entry points, angles. not paranoia. just protocol. storm doesn’t say anything. just sits down. [[look around]]the space doesn’t ask anything of you. but it’s alive now. and you’re in it. you stay where you are a moment longer. scan the room. mayhem’s in her corner already mid-ramble, hands flying, half of it nonsense—half of it genius. cords everywhere. snack wrappers. chaos. she makes eye contact. grins like a challenge. soph hasn’t moved. still locked in—fingers dancing. monitor glow catching the edge of a screwdriver near her elbow. there’s a quiet to her focus. sharp. bladed. michael leans against the counter, mug in hand. kettle refilled. he looks up briefly, like he’s about to say something, then doesn’t. lets the steam talk instead. nova’s still sprawled in the armchair, head tilted back. one hand flipping a coin, the other scrolling something on their cracked phone. they notice you watching. wink. go back to whatever cipher they’re thinking through. dev’s near the door, still half in observer mode. one ear on the group, the other on you. he nods. once. gives nothing away. storm’s still. seated. not idle—watching the way the room shifts. like reading system logs by instinct. [[pick a direction]] you breathe in the room. they're all here. wired into the space like extensions of it. once you take on a job from someone and complete it, they become your focus. that means more time with them, more story, more missions. it also means your challenges will follow their domain. you won’t be locked out of the others’ stories. but you will be committing to a way of thinking. <ul style="list-style: none; padding: 0; margin: 0; line-height: 1.2;"> <li><p class="storm">▸ storm — reverse engineering</p></li> <li><p class="mayhem">▸ mayhem — web exploitation</p></li> <li><p class="soph">▸ soph — binary exploitation (PWN)</p></li> <li><p class="michael">▸ michael — forensics & networking</p></li> <li><p class="dev">▸ dev — misc / unpredictable</p></li> <li><p class="nova">▸ nova — cryptography</p></li> </ul> choose who to talk to. you can look around, but the first challenge you complete will set your path. <p class="choice-storm">[[quietly join storm’s line of sight]]</p> <p class="choice-mayhem">[[walk toward mayhem’s cluttered desk]]</p> <p class="choice-soph">[[check out soph’s glowing setup]]</p> <p class="choice-michael">[[join michael by the kettle]]</p> <p class="choice-dev">[[lean back near dev]]</p> <p class="choice-nova">[[sit across from nova]]</p> (set: $seenChars to $seenChars + (a:"storm")) (set: $seenChars to $seenChars + (a:"michael")) (set: $seenChars to $seenChars + (a:"soph"))(set: $focus to "storm") he studies your work for a while. doesn’t praise it. doesn’t dismiss it either. just… sees it. <p class="storm">“alright.”</p> he pushes a second keyboard your way. screen lights up—half-disassembled binary, nothing urgent. <p class="storm">“this one’s old. government-level, maybe. been sitting on it. watching.”</p> a pause. then— <p class="storm">“someone’s using the same structure overseas. different flag. same teeth.”</p> he looks at you, steady. <p class="storm">“we track it. quietly. you in?”</p> you nod. he doesn’t smile. just turns back to the monitor, and types. <p class="storm">“grab everything with this signature.”</p> <p class="storm">“scrape their infrastructure. trace reuse. i’ll handle the pivot.”</p> you sit beside him. old binary, new victims. same rot. [[run the scraper|storm ctf1]](set: $focus to "mayhem") she claps softly when you finish. <p class="mayhem">“ok ok, you’re not just vibes and eyeliner. nice.”</p> grins. nudges a usb key toward you. <p class="mayhem">“this next thing—real light. mirror a couple protest blogs. maybe archive a forum before it vanishes.”</p> a pause. quieter, but still upbeat. <p class="mayhem">“they’re trying to wipe the story. figured you might want to help keep it alive.”</p> [[start archiving|mayhem ctf1]](set: $focus to "soph") she doesn't look up when you finish. but she saw. you can tell. <p class="soph">“that was alright.”</p> she slides a tablet toward you. <p class="soph">“so. say you’re being watched. say everything you touch is compromised.”</p> beat. <p class="soph">“how do you upload a video of state violence, on the move, with no metadata, through three proxies?”</p> her tone’s not cruel. just fast. <p class="soph">“help me test something.”</p> [[soph ctf1]](set: $focus to "michael") he watches you work without interrupting. just sips his tea. soft smile when you finish. <p class="michael">“clean.”</p> nods once. he gestures to his screen, where a set of exit nodes hums through logs. <p class="michael">“this one’s live. used by folks trying to get word out. sometimes gets sniffed. i usually run traffic checks—want to take a look?”</p> he hands you the keyboard. no pressure. just trust. [[start checking|michael ctf1]](set: $focus to "dev") he leans back, arms folded, watching the screen fade. <p class="dev">“alright. you’ve got teeth.”</p> he nods once when you finish. then he leans over to his screen. a map. signal routes. red blocks creeping in from the corners. <p class="dev">“they’re shutting things down. not all at once—piecemeal. easy to miss unless you know what to look for.”</p> he clicks through a few tabs. spreadsheets. logs. crowd reports. <p class="dev">“i need someone to help verify signal blackouts. crosscheck ISP reports, ping trails, real-time chatter.”</p> he glances at you, calculating. <p class="dev">“feel like doing something useful?”</p> [[sure|dev ctf1]](set: $focus to "nova") they don’t clap. but the smirk’s real this time. <p class="nova">“you cracked that faster than i expected. respect.”</p> they open a second terminal. <p class="nova">“soph’s tool’s solid. mostly. but i don’t trust encryption unless i’ve made it scream.”</p> they gesture toward the screen. <p class="nova">“you wanna help me tear it apart?”</p> [[help nova|nova ctf1]]<p class="nova">“some kid made a cipher and thinks it’s unbreakable. wanna prove them wrong?”</p> a goofy monoalphabetic substitution, trying too hard. [[back]] [[complete nova's ctf]]<p class="dev">“got a weird little script from a burner. not dangerous—just strange. want to break it down with me?”</p> half logic puzzle, half vibe check. you debug it together, like a quiet rhythm. no pressure. just two minds clicking. [[back]] [[complete dev's ctf]]<p class="michael">“log files and pcap. something’s off. tell me what.”</p> nothing fancy—just eyes and instinct. a pattern in the noise, hiding where it shouldn’t. spot it, and you’re in. [[back]] [[complete michael's ctf]]<p class="soph">“got a buffer i don’t trust. can you crash it cleanly?”</p> simple program. no obfuscation. she’s already staring at the disasm, waiting. all she wants is proof you know how memory bends. [[back]] [[complete soph's ctf]]<p class="mayhem">“sandboxed admin panel. cookie with weird flags. see anything fun?”</p> one page, one function, one place to pivot. a tiny vuln with a big echo. you don’t have to wreck anything—just open the door. [[back]] [[complete mayhem's ctf]]<p class="storm">“someone’s hiding malware in a firmware update. want to take a look?”</p> he slides a binary your way—commented, half-obvious. you just need to find the payload and explain how it works. no tricks. just thinking. [[back]] [[complete storm's ctf]]choose who to talk to. you can look around, but the first challenge you complete will set your path. <p class="choice-storm">[[quietly join storm’s line of sight]]</p> <p class="choice-mayhem">[[walk toward mayhem’s cluttered desk]]</p> <p class="choice-soph">[[check out soph’s glowing setup]]</p> <p class="choice-michael">[[join michael by the kettle]]</p> <p class="choice-dev">[[lean back near dev]]</p> <p class="choice-nova">[[sit across from nova]]</p>the code’s brittle. whoever copied it didn’t bother to clean up. you find five matches. two are honeypots. three? real. you tag them. <p class="storm">“nice pull. now we make noise.”</p> [[continue|storm ctf2 intro]]storm’s quiet for a long time. <p class="storm">“they’ve adapted. new key exchange. same payload, different casing.”</p> a folder appears on your screen. encrypted. barely. <p class="storm">“reverse it. build a dummy they’ll eat. make them choke on it.”</p> [[start the teardown|storm ctf2]]disassembly takes time. you map their control flow- burn away junk branches. peel off the obfuscation like bad skin. it’s the same spyware. patched, not fixed. you build a decoy, inject a surprise, send it back. storm watches the logs. <p class="storm">“they bit.”</p> he doesn’t say good job. he doesn’t need to. there’s a beat. then— **mayhem (offscreen)** <p class="mayhem">“storm. robin. now.”</p> a flicker of something crosses storm’s face. not surprise. just calculation. <p class="storm">“come.”</p> [[follow mayhem]]the projector is buzzing loudly mayhem’s already at the board. she seems nervous as fuck. her voice is too fast. <p class="mayhem">“it's from one of my contacts. she can’t reach her kid. he was in the car with his aunt and uncle when the tanks came in, but he's the only one still alive. ”</p> storm’s already scanning the board. face blank. calculating entry vectors, signal boosts, fallback routes. trying to think of any way to get help in. not hope. just action. the look on his face says he’s been here before. not exactly this— but close enough. mayhem presses play. the clip stutters. low breathing. some kind of scraping. far-off gunfire. and then— a voice, small. barely audible. <p class="child">“…mama?”</p> silence. [[...]]you dig in. the tablet's already mid-script— barebones OS, routing packets through chained proxies. she's set up a mock capture: compressed footage with randomized hashes. one wrong call, and metadata bleeds. you tweak the header sanitizer. push dummy frames to obscure timing. build a nested tunnel that collapses on itself after upload. soph’s laptop blinks. <p class="soph">“it made it.”</p> a pause. <p class="soph">“and no fingerprint.”</p> still no smile. but her fingers stop moving. <p class="soph">“not bad.”</p> she closes the tab. <p class="soph">“i’ve got another test. if you’re not just guessing.”</p> [[accept|soph ctf2 intro]]she passes you a USB. <p class="soph">“this was dropped at a protest. encrypted partition, wiped label, fat-fingered a salt passphrase.”</p> screen shows hex. file structure looks intact—but something's wrong. <p class="soph">“if they planted it, what would they hide inside?”</p> a pause. <p class="soph">“not rhetorical.”</p> [[decrypt and check|soph ctf2]]you mount the volume. hashes match common distros—red flag. inside: two folders. one empty. one nested twelve layers deep. at the bottom: a single .mp4 file. thumbnail shows static. you sandbox it. run it inside a jailed loopback with traffic trace. the moment it plays, a connection pings out. soph kills it. too late. <p class="soph">“…tracking beacon.”</p> quiet. <p class="soph">“embedded in video container metadata. not the file.”</p> she runs the cleanup, scorched earth. <p class="soph">“you spotted it.”</p> that’s rare from her. you keep the USB anyway. then the door. too fast. no knock. <p class="mayhem">“soph. robin. you need to come. now.”</p> no sparkle in her voice. no bounce. just clipped breath and something like panic. soph stands. not a word. follows, eyes already calculating. [[follow mayhem]] the pcap’s dense. five hours of noise, looped across mirrors. you trace a pattern— icmp bursts layered between harmless dns. not exfil. a signal. something routing traffic around censorship triggers. you isolate the signal. decode the pattern. tag the clean path. michael watches. doesn’t speak until it’s done. <p class="michael">“you saw what it wasn’t. most don’t.”</p> he logs the session. slow, deliberate. <p class="michael">“next one’s harder. you’ll take point.”</p> [[keep going|michael ctf2 intro]] he opens a new window. <p class="michael">“got this from a backdoor we forgot we had. surveillance dump. raw.”</p> waveform data. location tags. no index. <p class="michael">“some of it’s bait. some of it’s real. find out which is which.”</p> <p class="michael">“nova tried to analyze this once. good job, but got stuck. let's finish where they left off”</p> he leans back. lets you in. [[begin filter pass|michael ctf2]]you run filters. trace voices. search for false echoes—loops too perfect to be real. in one segment: a voice repeats a location three times, same phrasing, same cadence. generated. but right after— another voice, muffled, shaky. real. you flag it. reconstruct path. michael nods once. quiet, like respect. <p class="michael">“they’re alive. we can warn them.”</p> he moves to send the alert— the door crashes open. <p class="mayhem">“michael—robin—get upstairs. now.”</p> she’s out of breath. [[follow mayhem]] dev hands you a phone. <p class="dev">“found this in a dumpster behind a police van.”</p> screen’s cracked. battery’s taped in. storage’s encrypted—but only halfway. <p class="dev">“guess what’s still alive.”</p> you dig in. system logs show crash loops— but the secure folder’s untouched. you spoof the boot key. dump the partition. start piecing files together. recordings. location trails. internal chat logs. <p class="dev">“yep. that’s their op log.”</p> he lights a cigarette. <p class="dev">“cooked and served. ready for round two?”</p> [[yeah.|dev ctf2 intro]] he drops a tangle of drives on the table. bare boards, no labels, one’s still warm. <p class="dev">“these came from a kid in Jenin. said he got ‘em from a tower before it got leveled.”</p> one spins up. barely. <p class="dev">“they were syncing to something. not cloud. mesh, maybe.”</p> he grins, a little too wide. <p class="dev">“think you can trace a ghost network?”</p> [[i'll try|dev ctf2]] you isolate the signal. no IPs—just local broadcast identifiers, bouncing packet chains. something decentralized. cooperative storage, peer-to-peer fallback. you rebuild a few hops. extract a file map. logs from protest comms, local footage, compressed and chunked. one node's still live. you mark it. ping it with a decoy handshake. dev chuckles. <p class="dev">“someone just blinked back. they’re still online.”</p> you start pulling the safe chunks out— until the door slams. <p class="mayhem">“dev. robin. you’re needed. upstairs.”</p> no jokes this time. eyes wide. <p class="mayhem">“now.”</p> dev doesn’t smile. <p class="dev">“let's go.”</p> [[follow mayhem]] (set: $focus to "nova") soph’s encryption tool’s already open. clean interface. lean code. she knows what she’s doing. nova doesn’t touch the mouse. they live in terminal. <p class="nova">“strong cipher. weak salt. standard fallback.”</p> they crack knuckles. you start testing edge cases— nonce collisions, padding oracle stabs, malformed headers. one injection hits. a test payload decrypts wrong, but *predictably* wrong. nova nods. <p class="nova">“thought so. we’ll patch it after we break it properly.”</p> they open a directory full of captured payloads. <p class="nova">“help me run them through. see if anything leaks.”</p> [[start sweep|nova ctf2 intro]] they’ve already queued test vectors. <p class="nova">“these went out encrypted last week. sent through her pipeline. real footage. maybe.”</p> you recognize the file structure— camera firmware tags, device model hashes, GPS fragments. <p class="nova">“we’re not cracking the files. we’re cracking the wrapper.”</p> <p class="nova">“soph’s pipeline scrubbed the headers, but not the wrapping format.”</p> <p class="nova">“i'm not fixing it. just showing where it leaks.”</p> they pause. <p class="nova">“if metadata survived the pipe, we’re burning sources.”</p> [[run the check|nova ctf2]] you strip the wrappers. on the third file: a firmware watermark survived. matched to a device seized last month. you scrub it. flag the codec flaw. patch the wrapper to zero out identifiers. nova marks it clean. <p class="nova">“tell soph. she’ll want to fix the pipeline.”</p> a pause. <p class="nova">“she’s good. but crypto’s my language.”</p> before you can say more— the door. <p class="mayhem">“nova. robin. upstairs. now.”</p> short breath. attempted softness, but she's just too distraught. <p class="mayhem">“hurry.”</p> nova shuts the terminal. one clean command. <p class="nova">“…let’s go.”</p> [[follow mayhem]](set: $focus to "mayhem") <p class="mayhem">“there’s this forum. used by student protest groups. mods are pulling the plug tonight.”</p> she tosses you a drive. <p class="mayhem">“no clean dump. no API. just raw scrape. want to help me mirror it before it vanishes?”</p> you’re in. you write a crawler, fast and dirty. thread IDs loop inconsistently. some posts 404 mid-pull. mayhem’s next to you, patching requests, faking user agents. you rebuild the post tree. archive the last thread: **“they can’t arrest all of us.”** <p class="mayhem">“got it.”</p> soft. real. then she pulls up a secondary list. <p class="mayhem">“there’s a blogroll too. personal journals. protest updates. if their sites go dark, we lose names. faces.”</p> you mirror all of it. every broken jpeg. every misspelled post. <p class="mayhem">“you’re fast. that helps.”</p> she doesn’t smile. not yet. <p class="mayhem">“storm archived half this blog in 2020. he missed the forum links.”</p> <p class="mayhem">“that’s why we double-check each other.”</p> <p class="mayhem">“sigh, okay, now let's fix the broken stuff.”</p> [[start fixing|mayhem ctf2 intro]] she’s sprawled across a chair backwards, poking at a half-broken clone of a protest site. <p class="mayhem">“someone tried to remake the whole forum in wordpress.”</p> she gestures at the mess on screen. <p class="mayhem">“three different fonts. posts rendering in reverse order. i love it. it’s cursed.”</p> you’re helping her patch the scrape logic. half the links are dead, half loop infinitely. <p class="mayhem">“figured we’d clean it up, host a backup. archive the chaos before it disappears.”</p> she grins, tired. <p class="mayhem">“not everything’s urgent. some stuff’s just… worth keeping.”</p> you’re halfway through fixing the media links when her terminal pings. [[keep going|mayhem ctf2]] you and mayhem are halfway through debugging a broken site clone— some activist mirror that’s eating its own CSS. <p class="mayhem">“i swear if i see one more unclosed div i’m gonna scream.”</p> you snort. she's digging through malformed media queries when her screen flickers. a ping. soft. irregular. she freezes. <p class="mayhem">“…that’s the fallback form.”</p> you glance over. it’s a simple post. plain text. no encryption. just a subject line: > **“he’s still inside”** and a message: > **tanks are outside. we can’t move. > please. if you get this.** she scrolls down. last field: sender name. mayhem blinks once. then again. <p class="mayhem">“…she’s alive.”</p> she stands too fast. chair skids back. <p class="mayhem">“it’s her. from rafah. she got a message through. her kid’s still in the house—”</p> she fumbles for her tablet. nearly drops it. <p class="mayhem">“i need to get the others.”</p> she grabs your shoulder. <p class="mayhem">“go to the meeting room. i’ll bring them. just—go.”</p> then she’s running. [[go to meeting room|follow mayhem]] no one speaks. you want to look away. you don’t. you just sit there, listening to a child ask for someone who can’t come. soph freezes. hands hover just above her keyboard, fingers twitching. doesn’t speak. michael doesn’t move. just stares at the screen. horrified. like he doesn’t know where to put what he just heard. dev exhales—slow, steady. centering himself. storm’s already in motion. not visibly—but you can feel it. he’s shifted into functioning mode. the kind you don’t come back from the same. nova’s the first to break the silence. they spiral. words tripping out too fast, too much. <p class="nova">“okay—where was it? did they send images? i can work with dev to map the area—if we know the street maybe we can trace movement, plan a way out— but if it’s still active he’d have to run through gunfire and that’s—fuck, maybe some kind of shielding, or decoy—but it probably wouldn’t hold, not with tanks—”</p> soph shoots them a sharp look. not cruel. just razor-clear. they stop. <p class="mayhem">“we’re not broadcasting it yet. but people are talking. he’s still in there. no one’s reached him.”</p> storm doesn’t hesitate. <p class="storm">“we boost now. someone out there might still be close enough to matter.”</p> dev stands a little back. just nods. like he’s seen this before. because he has. his voice is low. <p class="dev">“okay. i’ll run the audio with nova—see what we can pull. michael—if you're up for it, come with.”</p> michael nods. [[go with dev, nova and michael. work the data.]] [[stay with storm and mayhem. hold what’s breaking.]] [[turn to soph]]nova’s already at the screen, voice sharp. <p class="nova">“i isolated the waveform—it’s low quality, compressed through two layers of encrypted relays— but there’s a mechanical echo in the left channel. might be tank treads.”</p> dev’s on a second terminal, calm. <p class="dev">“watch out for any sounds of bombs, we can correlate that to other reports. and drone sounds. match that to any other audio or video from __. filter anything irrelevant.”</p> michael doesn’t say anything. but he’s watching. tracking sound placement. matching patterns. nova types frantically. they're searching for any other reports from the rough area. NOVA OVERWHELM MOMENT dev slides over. doesn’t touch the keyboard. just anchors. DEV GENTLE HELP MOMENT nova blinks. recalibrates. <p class="michael">“…that chirp. mid-right of the clip. it’s one of the broken crossing sensors. same sound from that checkpoint near the flattened clinic.”</p> [[trace ctf]]you turn to soph. she's already stepping back, pulling her hoodie tighter. eyes distant. jaw tense. <p class="soph">“…i just need a sec.”</p> not cold. not unkind. just someone managing internal overload the only way she knows how. she slips out without waiting for your response. door closes behind her. soft click. you’re left with the others. [[go with dev, nova and michael. work the data.]] [[join storm and mayhem. hold what's breaking..|stay with storm and mayhem. hold what’s breaking.]]the others leave. footsteps fade. no one says anything. you stay. not because you know what to say— because something told you you shouldn’t leave her alone. silence. thick. not peace—just pressure. mayhem doesn’t sit. she paces. feeds flick past her fingers, tabs blur. nothing sticks. storm stays still. watching her. not studying—*tracking.* you stand nearby. not in the way. not out of reach. <p class="mayhem">“he’s still in there.”</p> she says it like a fact. like a scream wrapped in code. storm doesn’t reply. neither do you. <p class="mayhem">“i can’t— just sit here. i *have* to do something.”</p> her voice cracks at “have.” she clenches her jaw. swallows it. storm stands. slow. measured. he doesn’t move toward her. not yet. <p class="storm">“mayhem.”</p> just her name. low. controlled. anchoring. she turns— not angry, just breaking. <p class="mayhem">“…what if we wait and he dies.”</p> storm steps closer. still careful. his voice barely above a whisper. <p class="storm">“what if we rush and get someone else killed.”</p> the silence after presses down. you can feel it in your chest. <p class="storm">“you don’t have to do it alone.”</p> mayhem doesn’t answer. just sinks into a chair. elbows on knees. hands shaking. you don’t move. but you’re here. and that matters more than you thought it would. storm watches her. one more second. then— a slow inhale. exhale. soft. <p class="storm">“do you want me to stay.”</p> not a command. not even a question. just space. offered. mayhem nods. once. he sits beside her. close. not touching. but there. a few breaths pass. then— carefully— a gesture. halfway between opening his arms and bracing for impact. she leans into it. just for a moment. you look away. not out of shame— just to give them some privacy. <p class="mayhem">“…when we act. i want it to *matter.*”</p> <p class="storm">“it will. but not yet.”</p> he doesn’t let go. not until she pulls away. <p class="storm">“we wait. we get the intel. then we move.”</p> the silence after feels less like suffocation. more like grounding. [[wait for the others|meet again]] goal: isolate the child’s current location based solely on environmental clues in an audio clip. files: audio file (no visual, includes: tank tread reverb, siren sweep, background voice echo, sensor chirp) map of rough area (tagged with recent strikes, collapsed buildings, blocked roads) incident logs (sparse, inconsistent messages sent by civilians across patchy networks) objectives: identify two unique sound markers (tank tread resonance + chirp) correlate with nearby urban features (clinic, wall, checkpoint sensor) filter by known strike reports in the last 2 hours approximate final signal position within 50m margin result: you isolate the signal— southeast corner, behind a pharmacy that collapsed three days ago. signal bounce confirms obstruction. you don’t know if the kid’s alive. but if anyone’s close— this might help them reach him. [[report in|meet again2]]the sound of footsteps again. quieter this time. slower. nova comes in first— still wired from the work, but eyes scanning the room before they speak. dev follows, steady. michael behind them, expression unreadable. they stop when they see storm and mayhem - still seated. you, nearby. the air, still heavy. no one says anything. not yet. mayhem sits up. wipes her face with the sleeve of her hoodie. nods once. storm looks at dev. <p class="storm">“what did you find.”</p> dev doesn’t answer right away. just sets down the map overlay, tags still flickering with noise and shape. <p class="dev">“we’ve got it. best guess—southeast, near the collapsed pharmacy. audio confirms obstruction. someone might still be alive in there.”</p> mayhem exhales. something between relief and grief and ignition. <p class="mayhem">“…then we move.”</p> storm shakes his head. <p class="storm">“not yet. we plan first. we do this right.”</p> nova pulls up the logs. their voice low for once. <p class="nova">“the window’s closing.”</p> storm nods. once. <p class="storm">“then we don’t waste time.”</p> michael hasn’t spoken. but his hands are on his keyboard, ready to take notes. he’s ready. dev glances around. <p class="dev">“…where’s soph.”</p> you answer. quiet. <p class="robin">“she needed a moment.”</p> no one questions it. no one follows. mayhem stands again. less frantic. but sharper now. focused. <p class="mayhem">“we start planning. now.”</p> [[begin plan|rescue plan]] the map flickers. overlays stack—routes, debris, strike zones. every path feels like a risk. <p class="nova">“south grid—if anyone’s near, we can ping them. guide them in.”</p> dev leans in. traces a narrow line with the stylus. no margin. <p class="dev">“debris choke points. but if the signal’s bouncing, there’s still a path.”</p> storm’s eyes stay on the screen. quiet. then— <p class="storm">“i know someone.”</p> you don’t ask who. no one does. he sends the location. encrypted. short. the contact responds. just one word: <p class="contact">“going.”</p> and they’re gone. [[next|rescue attempt]]the contact’s signal comes through. low-strength. stable. you track her through the map. each pulse marks a breath. each delay means dust, debris, collapse. <p class="medic">“approaching site. pharmacy’s gone, rubble now.”</p> brief static. then— <p class="medic">“you're right, the kid is there. but the square’s sealed. soldiers everywhere. no cover.”</p> nova leans in. dev doesn’t speak. storm watches the feed like it owes him an answer. <p class="medic">“drone’s circling above. if i go they'll find me.”</p> you hear it in her breath now. not fear. calculation. <p class="medic">“if they find me they'll shoot me before i get to him</p> pause. <p class="medic">i can't reach him... i’m sorry</p> no clicks. no soft signoff. just cut. mayhem’s jaw tightens. she says nothing. just stares past the screen into something only she sees. storm doesn't move. his hand stays flat on the desk. you see his knuckles pale. <p class="storm">“we tried.”</p> <p class="mayhem">“and it wasn’t enough.”</p> [[next|after attempt]] time crawls. night hums through the wires. storm hasn’t left his desk. hands still. screen lit. map open. comms logs. signal metadata. <p class="storm">“triangulation’s dirty. signal bounced. but it’s real.”</p> he drags a line across the screen—three faint pings. last one weaker. maybe underground. maybe blocked. maybe breathing. mayhem’s already compiling voice samples. running audio filters to isolate noise—boots, engines, wind direction. her voice is quiet but relentless. <p class="mayhem">“he was alive ten hours ago. the last breath was clear. shallow, but steady.”</p> soph’s building an interference packet. false GPS beacons. staged radio traffic. dev pipes in from the roof, voice rough on the secure line. <p class="dev">“weather’s on our side. clouds thick. radio bounce is messy. we can slip some noise through.”</p> <p class="soph">“already injected phantom patrols. staged a gunfight two blocks east. enemy comms are splitting focus.”</p> nova’s sourcing a thermal map from an old signal dump. layering drone footage scraped from open channels. civilian hobbyist networks. barely-legal archives. chaos goldmines. <p class="nova">“if he’s under rubble, he’ll still bleed heat. this might catch it.”</p> michael’s got contacts. aid orgs, grey-zone runners. he doesn’t name them. just nods once. <p class="michael">“got two women near the perimeter. older. trusted faces. they’re prepping papers. need burner sims.”</p> mayhem hands them over without looking. no one asks if this will work. they just move. you— you watch storm trace one last ping. his eyes flicker once. just once. then still again. for now there’s still hope. [[next|day two – the walls close in]]you close the door behind you. soft. like you’re afraid of waking them. you stand in the hallway. the light feels too bright. your hands don’t feel like yours. you look at the wall. at nothing. for a long time. then the weight hits. you go through the motions. 999. police. coroner. you don’t remember most details. some things don’t need to be remembered. [[timeskip bar]] br. you press the numbers slow. hand shaking. voice steadier than it should be. you say: “i think my roommate is dead.” they keep you on the line. you just sit there. and wait. [[aftermath|aftermath1]] they tell you not to hang up. you don’t. you sit there, phone to your ear, staring at the floor. they ask questions. you answer. you don’t remember what you said. at some point you unlock the door. at some point they arrive. you don’t look at their faces. the room fills with footsteps. gloves. voices. zipped bags. your home becomes a scene. you stay in the hallway. hands clenched. not from emotion—just trying to stay solid. when they take him away, you feel lighter. not in a good way. [[timeskip bar]]you return. nova’s first— boots heavy against the floor, energy coiled too tight for this room. dev’s just behind. steady. reading the air before speaking. michael walks in last. silent. still carrying the weight of the audio message. storm and mayhem sit close. his arm rests over her shoulder. her eyes are red. neither of them speaks. storm doesn’t stand. just looks up. sees you all. his voice is level. <p class="storm">“what did you find.”</p> dev places the map. no drama. just data—routes, overlays, noise filters. <p class="dev">“collapsed pharmacy. southeast. signal’s obstructed, but bouncing clean. someone’s still in there.”</p> mayhem exhales— a sound caught between grief and motion. <p class="mayhem">“…then we move.”</p> storm cuts in. not unkind. just absolute. <p class="storm">“not yet. we plan first.”</p> nova’s already scanning logs. voice quieter now. <p class="nova">“window’s closing.”</p> storm nods. once. <p class="storm">“then we don’t waste time.”</p> michael’s already typing. no wasted motion. he’s ready. dev glances around. <p class="dev">“…soph?”</p> storm answers. soft. final. <p class="storm">“she needed a moment.”</p> you don’t ask. no one does. mayhem stands. sharper now. tempered. <p class="mayhem">“we start planning. now.”</p> [[begin plan|rescue plan]] it's morning but no sunlightis coming through. basement air. stale with waiting. but mayhem’s still moving. <p class="mayhem">“the crawlspace under block eleven’s still intact. and here—drone footage from last year. there’s space. enough to breathe.”</p> she doesn’t check if anyone’s listening. just keeps talking. storm stands behind her. quiet. watching. he keeps sliding her data. clean packet captures. decrypted bursts. never says they’re his. <p class="storm">“transmit this.”</p> a short message, buried in code. <p class="storm">“maybe someone hears it.”</p> nova’s in the corner. still. arms around knees. laptop closed. eyes not. <p class="nova">“this isn’t a rescue anymore. it’s surveillance. watching a signal fade.”</p> soph doesn’t look up. <p class="soph">“my process is done. no new data.”</p> voice flat. not cold. just finished. michael didn’t come in. but someone replaced the frayed cable on the backup server. someone uploaded a sealed archive at 03:42. no message. just a name. dev marks the date on the wall. red circle. starts typing. <p class="dev">“if the kid’s gone, we don’t let it end quiet.”</p> mayhem’s still building paths. like if she doesn’t stop, he won’t either. <p class="mayhem">“they haven’t said anything. that means he’s still there.”</p> storm doesn’t argue. just sets a charged power bank next to her elbow. no one else’s is plugged in anymore. [[next|day 3]]evening. the air feels thinner. like the machines are exhaling. mayhem’s still at the desk. shoulders tight. eyes red— not from crying. just tired. from hope. storm approaches. slow. sits beside her. not looming. not formal. just there. he watches her screen. waits. lets her finish the line. lets her breathe. [[next|storm tells her]]then— <p class="storm">“i asked her to try again.”</p> low voice. careful. almost warm. <p class="storm">“the medic from day one. i told her—if the checkpoint shifted, go back. look for him. no promises.”</p> mayhem doesn’t look at him. but her fingers stop moving. [[next|payload]]<p class="storm">“she got through. sector cleared. just for a minute.”</p> he pauses. then says it, holding the words like glass: <p class="storm">“she found him. the boy’s gone.”</p> [[next|reaction]]nothing breaks. mayhem stares ahead. screen too bright. silence too loud. <p class="mayhem">“…how?”</p> <p class="storm">“fast. concrete. he didn’t suffer.”</p> she shuts the laptop. soft. like tucking something in. [[next|sit there]]<p class="mayhem">“i should’ve been the one to go.”</p> storm doesn’t argue. doesn’t offer logic. just says: <p class="storm">“you stayed. that counts for something.”</p> long pause. she leans forward. hands in her lap. head low. not crying. just quiet. storm stays. doesn’t fill the silence. doesn’t lead. just sits. someone who cared, too.(set: $seenChars to (a:)) (live:0.05s)[<div id="legend"> [<span class="char"><span class="swatch" style="background:#fff"></span> robin</span>](if: "cillian" is in $seenChars)[<span class="char"><span class="swatch" style="background:#e38b6f"></span> cillian</span>](if: "storm" is in $seenChars)[<span class="char"><span class="swatch" style="background:#cf0015"></span> storm</span>](if: "mayhem" is in $seenChars)[<span class="char"><span class="swatch" style="background:#f3d900"></span> mayhem</span>](if: "soph" is in $seenChars)[<span class="char"><span class="swatch" style="background:#00c5de"></span> soph</span>](if: "michael" is in $seenChars)[<span class="char"><span class="swatch" style="background:#0052c7"></span> michael</span>](if: "dev" is in $seenChars)[<span class="char"><span class="swatch" style="background:#ff7300"></span> dev</span>](if: "nova" is in $seenChars)[<span class="char"><span class="swatch" style="background:#7257ab"></span> nova</span>] </div> ]you push back. he lowers his eyes, doesn’t bristle. <p class="dev">didn’t mean to press. just figured it’s better if you get to say it. or not.</p> silence stretches. not awkward—just giving you room. he doesn’t sip, doesn’t stare, just waits. you study the glass, the table, anywhere but him. the words come out smaller than you expect. <p class="robin">he really liked computers. i do too… tech. systems. nothing fancy.</p> [[take another sip|i code too]]