Three Miles Past Read online

Page 8


  I shut my eyes, rubbed a cold beer against my face, and I’m sure it goes without saying here that, when we got to her place, her parents were gone like she’d said—that was never the part anybody lied about—but four of her friends were there, and they had brought movies.

  They held their hands over the back of the couch for the beer, laughed and giggled, and I slept in Lindsay’s little brother’s bedroom, could at least say now that I had spent the night at Lindsay’s, even if it was in dinosaur sheets. But I walked home the next morning without waking any of them, telling myself in my head that this was part of it, that this is how you grow up, that you can’t be a complete adult until you’ve acquired the requisite amount of shame, and all I was doing was placing one foot in front of the other, so that I heard that distinct little pop at nearly the exact moment I realized I’d just stepped up onto my driveway.

  That pop, that shot, it had come from next door. From RJ’s. It was the sound the counselors and principals and police had all seen coming, that they were probably all ready for.

  I stepped back to the middle of our yard, could feel the parentheses forming around my eyes, the hole starting in my chest, in my life, and then, like he’d been listening for this to happen for nine years now, like he could already see RJ’s dad slumping down against the wall by his bedroom, my dad straight-armed our door out, was walking down our flagstones with purpose.

  Down along his right leg was the revolver he kept tucked into the seat of his no-nonsense chair.

  In the bushes then, I heard something, a rustling, and my face prickled, my eyes caught on fire, and I knew as true as I’ve ever known anything that Cedric was about to push through, that his mouth was going to be bright with jewelry, and for a moment I even saw just that—the gold, splintering the early morning light—but then it was RJ, half his face dark with blown-back blood, his chest rising and falling, his dad’s small pistol already raised, his pace quick behind it, like he’d told himself he couldn’t do this, but maybe he could if he just walked really fast and pretended it was all a movie.

  He was already pulling the trigger too, and it was soundless, or, all I could hear, it was all the women’s rings he was wearing, clacking against the trigger guard.

  The first shot hit our brick wall where the roses used to grow, and the second whipped into the grass by my right foot, and the third slapped into my dad’s shoulder, spun him around a little, this sideways red plume hanging behind him now, just like a paintball that had gone all the way through somehow.

  This had been coming too long for that to slow him down, though.

  He was walking and shooting as well, pointing his gun like a finger at RJ, like it was some hard-earned truth he was telling him here. Like this lecture wasn’t over yet, son.

  They met on the oil-stained concrete of our driveway, almost gun-to-gun, and neither stopped until they were empty, and just before RJ slumped over, back into the bushes, the best parts of him spread all over my yard, he looked over to me like he was seeing me over Cedric’s grave for the first time, seeing that he wasn’t going to have do this alone after all, and I could see in his eyes that he was saving me, with this. From my dad. That our summer romance wasn’t over yet.

  And then the rest.

  Our app, dead. Our web page, dead. RJ and my dad, dead. Cedric’s grave empty. The school in mourning, extra counselors bussing in, news vans lurking. My mom getting a triangle flag she just put in the top of the closet. Somebody down at the grocery store saluting me so that I had to duck down an aisle I didn’t even want.

  Over, done with, gone, end of program, reboot.

  Except.

  Three days ago, thumbing through my app drawer, I lucked onto ours. The last version RJ had rigged, the black-backgrounded one, with the maroon letters so faint you had to kind of just trust they were there.

  It was a terrible design. The old people would hate it.

  It was going to go viral.

  I’d never even tried it, though.

  I hovered the pad of my thumb over it, knew I was going to light it up, that I had to, for RJ, that I owed him that, but then made the command decision that if I could see the scaffolding first, the haunted house wouldn’t get to me.

  I sucked the app onto my laptop, scrolled through the code, lost myself in the elegance again, the simplicity. The innocence, right? All it was was a camera with a different trigger, then a bit of post-capture image processing, a harmless call out to a hidden directory. It might get us into some school for marketing, but, as far as programming went, it was practically juvenile.

  It might get me into marketing school, I meant.

  And then I found RJ’s last fix.

  He’d commented it out, even, in case we wanted to go back. Our routine was, when combing each other’s lines, the second one through would erase the notations as he went.

  It meant this version, technically, it wasn’t complete yet.

  I arrowed my cursor up to his trailing escape slash, highlighted the whole note, inverting the text of the last thing he’d said in here . . . what? Two weeks ago? I unpacked his cryptic timestamp in my head. The first week of school, yeah. When I was in Life Science, getting a lab partner. I bit my lower lip in, shook my head. Who even timestamps their comments, right? RJ, that’s who. He always did it, for—his words—his posterity’s sake. And then he’d reach back into his pants, for his ass, and try to slap me on the shoulder, really rub his hand in.

  I backspaced the comment, left the cursor blinking there at his new line, his last innovation.

  All it did was pull a horizontal flip on the image. The easiest thing in the world.

  It was why his hall had started turning up backwards. It was software, not the mirror, not the hardware.

  I saved it, then saved it again to make it stick. The cursor just blinking up at me like I was being stupid here.

  It was right.

  But still—something didn’t fit. It wasn’t Area 51, either. Area 51 had been hidden in the hidden directory, and the hidden directory was gone, burned down by the police to keep sickos from leaving digital roses on its stoop.

  At first I thought it was that one line of code—code that was explicitly just reversing whatever the camera had captured—it wasn’t nearly enough to scrub RJ from the image, from the reflection he was backed up against to reverse his hall, but then I had to thump my temples with the heels of my hands: there was no mirror, idiot. Get off that horse already.

  And then one of those moments of calmness hit me, where I could feel myself breathing, could feel the rasp of all those air molecules diving down my throat.

  Yes.

  I fumbled my phone up, my fingers shaking, and peeled through the texts he’d sent. The images. They were all in our forever-long thread. I snapped it off to give me a useable scrollbar and paged through, holding all those air molecules in now.

  It couldn’t be, though.

  Each image, each snap he’d taken of that long hall behind him, each time, the lateral was perfect. The center of focus, the bullseye, it was that back wall where they’d found his dad. In every image, there was the exact same amount of wall on each side, like the perspective, it had to be perfect to tunnel through this.

  Had he—had he cropped all the images, then loaded them back on his phone to blast to me and the rest of the senior class? But, he would know that the same angle, the same positioning, that would kill the scare just the same as using the same five stock images.

  Then it must mean he’d masking-taped around his feet on the carpet, stood in the exact same place each time, and, I don’t know, used a magic marker on his mom’s mirror, one that would match up with the back of his hand to get the phone in the same place time after time.

  Except there was no mirror.

  Stupid, stupid, stupid.

  And even if he’d done that, still, it would take fifty images to get one that had the exact same angle as last time.

  I was breathing hard now. Too hard.

&
nbsp; Was he using one shot of the empty hall as backdrop to them all?

  It was the only thing that made any kind of sense.

  I dove into the code again, deeper than deep, looking for any routine that would allow sampling from the same background.

  Nothing.

  Of course he could have done it all on his laptop, right? To what purpose, though? He was more careful than that, would never make a background come off re-used and tired.

  Then there was only one other option.

  He’d cracked the side-to-side thing, just not commented it out. Or he’d lucked into it, maybe pasted one algorithm before instead of after another, so that it got first bite at the variables, and that had made all the difference.

  There was nothing in the code, though, even when I used some ancient Perl to compare the old app to the new one.

  Except for that one line, and the style junk with the colors, which was in the stylesheet anyway, they were the same.

  I slammed the laptop, paced my room, pushed my phone against my forehead like I could force myself to think, here.

  If you’ve never cried a bit from coding, then you’ve never really coded.

  It goes the other way too, though.

  The rush of cracking it, of cueing into the Beauty, the Truth, it’s all the heroin any junkie could ever need.

  And I was so close.

  And RJ, he’d been there already, I could see that now. It was where all his calmness had come from. Take my dad’s beer, it doesn’t matter. Go with her. Let’s take it live, infect the world with it.

  I stopped pacing, stared into my phone.

  That was it.

  I was just looking at the scaffolding, was stuck behind the curtain. Maybe the key was in the product, though.

  I touched the app, breathed life into it, and was going for the living room, to snap a takeback pic from the front window, see if it would lateral up with the one I’d taken before, but of course that one was gone, deleted once and then deleted again, when it showed back up, ha ha, RJ.

  And the living room would probably be too big anyway.

  Instead, I just stepped out of my bedroom, into the hall. It wasn’t as long as RJ’s, but it had to be the standard width. There had to be a standard width. Maybe that mattered.

  I pulled my door shut, turned around to face it, lowered my phone to vertical and let the shutter snap.

  Then I cocked my wrist forward, disturbing the gyroscope, and dropped it down straight again, the camera burring completion in my palm.

  Of course.

  I did it again, to be sure, and again.

  We’d never built in a kill switch. I was going to have to go back in, release the gyroscope after the first pic. If I didn’t, the processor would lag, trying to run post-production on a stack of polaroids.

  You can’t think of everything, though.

  Before opening my door again, I checked behind me. Just to be sure.

  Nothing.

  I crashed on my bed, my back wedged into the corner like always, headphones cupping my ears, and checked the images.

  They were empty.

  I mean, my hall was there, and there was a smudge of disturbance at about chest-level, telling me something had tried to load in there. But it had aborted.

  This is the way it goes, yeah. You duck in for a quick-fix, just to see how something works, and then nothing’s working.

  It was probably the banner’s feed slot that was jacking with the fade-in, too. I was strict with always using all jpeg or all png or all gif in whatever I wrote, but RJ always said he could keep it straight, it’s not like he was going to do something global with them all at once, right?

  Except the app was doing something global with the array it was pulling from the hidden directory.

  Oh, wait: the hidden directory that wasn’t there.

  Of course it couldn’t load the images.

  Still, the way we’d written it, there should have been a big distortion in the hall, not a small, unenlarged one. And, if this app was going to work, if it was going to generate revenue, then that banner needed to quit jacking with things.

  And, because we didn’t have sponsors yet, the banner RJ had dummied in, just to make sure it fit, it was Zelda. The old one.

  It made me lean over, see if my NES console was still in the corner somewhere, tangled in its cords. Maybe one last turn through Hyrule would be the right send-off for RJ. The right thank you. Because—it’s stupid, but we’d never really left it behind. That first day RJ’s dad had mentioned red light, green light to us in the kitchen? Why I’d been the one sitting on the island, not RJ, it was because of Zelda. In the NES version he’d introduced me to in third grade, he’d always been fascinated with the boulders, with how, if you walked around some of them three times, then came back the other way, a door would open up.

  For us in elementary, the same way the floor lamp in my living room had always been the robber, come to take me away, his kitchen island had always been our boulder. One time, spending the night, he even told me that’s where his mom had really gone, he was pretty sure. That he had walked wrong to the refrigerator, gone back for the butter he’d forgot by the toaster, then gone back the other way around the island, made some secret door swing open in her closet, and she had just reached through, fallen the rest of the way.

  It’s stupid, but it’s real. Or, it was to us.

  “You shit,” I said to him, just out loud, for making me think of all that again, but then . . . could that be it? This app had lived on RJ’s rig at the end, after all. What if the little image-reverse he’d built in, what if that was Link, turning back to go the opposite way around the boulder now? What if the doubletwist plus one necessary to open whatever door, what if it was just holding your phone upside down (1), backwards (2), and then flipping that image (3), which was already under so much strain just to stay straight?

  That was just three things, though.

  The boulders always required a fourth.

  I checked my phone just before it shook in my hand, reminding me the images were ready—RJ’s idea.

  I scrolled through them, still empty, and then the phone shook again, which was one more time than we’d coded for. Had RJ sneaked a reminder vibration in as well? But where? It would be scary, though, like the app was insisting, was trying to warn the user.

  But one thing at a time.

  I slammed the pics onto my laptop to try to figure if that distortion in the air could help me diagnose things.

  It didn’t.

  The scaled-back pictures that shouldn’t have been there, as their directory had been burned—there they were, stacked on my desktop. I clicked the top one, had a bigger screen now, and could zoom, see that it was just the crawling girl, scaled back to bug-size, hanging there in the air of the hall, not even remotely scary.

  “Are you local or what?” I asked the top one, and thumbed through my phone’s cache.

  No.

  I wheeled the crawling girl close then far, close then far, like she was coming for me.

  It wasn’t scary.

  Still, before getting back to the real work of the night—it was completely possible my phone had cached those hundred images in some way I was too tired to lock onto—I decided to make sure the sampling was truly random, anyway, wasn’t just the first few from the array. Because that wouldn’t be nearly so easy a fix. Cracking RJ’s fake randomness, the 128 bit keys he liked to paste in, pretend he was hinging stuff on—it would be easier to just start over.

  And maybe those keys were the source of the problem, even. Or the secret to keeping the lateral straight.

  The top pic I’d already been seeing, of course. Crawling girl. Next was the shadow fingers we’d rigged reaching around a corner, but, just like all the sneak_up images in RJ’s hall, the app had placed them perfectly somehow, right on the edge of the doorway opening onto the living room.

  Maybe the width of the hall did matter.

  I nodded, went to the next.<
br />
  It was the smoke. Like a progression.

  Maybe that was a good idea, too, if we ever did that fake animation on the paid version: sequence the stock images, build some logic in that wouldn’t let this one pop unless that one had.

  I clicked ahead, looking at my door instead of the screen for no real reason, and, when I came back to the laptop I felt a new hollowness in the deadspace behind my jaws, pushed the screen away so hard it shut.

  My lungs were trying to hyperventilate or something.

  No, my head, my head was doing that.

  Same difference.

  I looked to the door again. It was still shut.

  I came back to the laptop, its side-light telling me it wasn’t asleep yet, no. That it was waiting for me.

  What I’d seen, what was there, it was—but it couldn’t be.

  A boy, about twelve. Washed-out and black and white. Skinny, shirtless, his pants just hanging off him.

  RJ in sixth grade?

  I wanted it be him, yes, because our summer romance wasn’t over. Then he could be the fourth time around the boulder, right? The app only hits hyperdrive or whatever after satisfying 1, 2, 3, and a strange fourth, which, like Cedric had been for him, could be somebody close to you, dead. A blood sacrifice, to lubricate those doors that shouldn’t open.

  But it wasn’t RJ.

  RJ would never pull a lampshade over his head and stand there like that, just waiting for me to see him.

  It was my dad when he was a kid. I knew. All his anger, his rules, his haircuts and talks, it was all there in the empty spaces between his ribs. The muscles that hadn’t grown in. The bruises, the white lines of old cuts, burns above the sleeve lines.

  I shook my head no, please, not him, not this.

  Anybody but him.

  But it couldn’t be, either.

  I was still being stupid, like with the mirror. Had to be.

  I breathed down to a rate that didn’t scream panic, watched my hand cross that bedspread space between me and the laptop, and opened it.