We’re boarding the train at Chicago’s Union Station. It’s February. Snowing. A dozen of us wait for sleeper car assignments here on the platform. We chat about our homes. I’ve already met game developers from the UK, Australia, California, and Chicago. Conversation is light; under the surface, we’re all champing at the bit.
We’ve come from all corners for the second annual Train Jam, a special game jam that occurs entirely on a train from Chicago to San Francisco. Game jams are intense, time-limited hackathons that call on writers, artists, musicians, and coders to create something new and playable from scratch. Most jams have no material reward, only a sense of accomplishment and a chance for feedback.
I have a two-person cabin to myself after my roommate, Arun, discovers his ticket only covers a seat in coach. He’s one of a cabal of students from Rochester Institute of Technology en route to the Game Developers Conference in San Francisco the following week.
Arun and his RIT friends end up recruiting me. I meet Ben and Bryan, a pair of affable, bearded, bespectacled programmers. The three of them have pooled their ideas and settled on a sort of slot-car racing game. You drive a train on a randomly-generated curving track, going as fast as possible to get to the next checkpoint without flying off the rails, and you need to throw track switches to keep your train away from hazards. It sounds straightforward and doable in the 48 hours we have left.
We scribble designs on note cards in a cramped diner-style booth in the lower level of the lounge car. A few feet away, Mark the effervescent shopkeep vends candy, chips, and drinks provided by one of the event’s sponsors, Unity3D. Mark tallies the treats on a scrap of cardboard. This is our initial design meeting.
Arun describes his vision for the branching track subsystem. Ben’s excited about the music, which will keep pace with the train’s speed and switch tracks when the player—wink, wink—switches tracks. Bryan accepts art and menu design with some trepidation; he thinks of himself as a programmer. I volunteer to work on the in-game HUD and record sound effects because I’ve been spending a lot of time in both areas for my own radio DJ game.
Ben pitches an idea for the code that controls train speed. Instead of tracking the speed of the train moving on the screen, let’s make the train move at a fixed speed and bend time to make it look like it speeds up and slows down. To be clear: this is a terrible idea for a real game. So many things in games depend on clock time; animations, controls, even sound effects. But hey, this is a game jam, so what’s a little technical debt? It’ll keep Arun’s work on animating the train cleanly separated from Ben’s input code, which means less coordination and fewer headaches making their code work together. “Fuck it, ship it” is never truer than during a jam.
From that point on, we’re semi-autonomous. We head up to the observation deck of the lounge car, settle into some plush chairs facing the windows, and tap at our laptops until the sun’s well below the horizon on the first day.
The sleeper cabins are very small, about the size of a closet. They have just enough room to seat two people across from each other with a sliding door on one side and a window on the other. When the bunks are folded out, they fill the cabin and only the lower bunkmate has a view outside.
PA announcements are suspended overnight as a courtesy to sleepy passengers. I wake in the morning before they resume. The sleep was pleasant once I tamed the thermostat to keep me from freezing or burning. I peer out the window to see where we are, but I don’t recognize the bare landscape. I head to the train’s shower, which works like the faucets: press a button, get about 30 seconds of water. It works well enough. I can see daylight through the drain. I think I’m leaving a trail of suds on the rail ties below.
I share meals in the dining car with jammers and other passengers, which is how I meet Jim. Jim’s an older gent who sits with two other developers and me for dinner one night. That dinner might be the best dinner of my life. Jim tells us he’s an air marshal who’s sick of flying all over the world, so he takes trains when he’s not on duty. He’s had a long career in foreign intelligence and regales us with stories of his times in Afghanistan, Vietnam, and Turkey many decades ago. He describes recruiting locals who would radio in when they saw caravans along the Caspian Sea—which, at the time, was usually poppies headed out of Afghanistan—so they could be intercepted. He recalls learning Arabic from a Kurdish princess such that the generals in Afghanistan were put off by his accent and he transferred to an area with more Kurds instead. I spend close to two hours listening at the table before excusing myself. Another hour later the other two devs are still there, still chatting with Jim, several more half-bottles of wine emptied on the table. I don’t know how many of Jim’s stories are true, but he tells them so well that it doesn’t matter.
We make steady progress on our game, though our labor divisions are imperfect. It’s hard to make sure nobody runs out of things to do when you have more than two people on a team and the time frame is so compressed. I’m doing some de facto project manager stuff, but Arun’s load is too heavy and Ben’s is too light.
It’s also a challenge to write code without easy access to the Internet. There are a handful of cellular-powered wifi access points onboard for the jam but they’re unreliable. I can tether my phone to my PC for Internet access, but of course my phone usually has little or no data signal. Pre-downloading documentation and code before the event helps, but you can’t know exactly what you’ll need. Luckily there are plenty of knowledgeable people to turn to if you get stuck on something.
Partway through the second day, I leave my laptop to wander around the train and take a look at other works-in-progress. One developer, Lisa, is making a concentration game that challenges you to keep your gaze focused on something mundane while distractions appear at the margins. It uses special eye-tracking hardware to judge the player. A couple of high-profile indies, Rami and Adriaan, are working on a stylish game about inspecting improbably-engineered train bridges and guessing whether a train would succeed or hilariously fail to cross them.
We’re in Colorado for hours and hours. There’s fresh snowfall and the mountains are really pretty. So are the dusty areas in the plains, Utah, and Nevada. Plenty of landscapes I might’ve seen in photos or movies but never before in person.
There is never enough time in a game jam. We’ve entered California and we still don’t really have the core gameplay working. Arun’s code is generating bits of track and then stitching them together, but the stitching isn’t working properly. Track segments won’t line up, or the train warps across the map inexplicably. Ben swoops in again to help get the track working or cut features until we have something playable. I work on composing sound effects from recordings I made around the train the night before, layering toilet flushes into explosions, cropping sliding doors into menu transitions.
In the last hour we decide to scrap track-switching because the branches were too hard to manage. We give up on integrating Bryan’s art for hazards and stations, and we never do get the game to detect when you go too fast through a curve. We don’t have checkpoints. I barely have time to add sound effects. Our final product is a nice menu system with credits and a volume control and 30 seconds of controlling a train’s speed around a generated track with no penalties or win state. When the timer runs dry, your train explodes and you go back to the menu.
There’s no meeting room on the train that holds a hundred audience members, so we form a line into the belly of a coach car to pitch our games over the intercom. Then we spread out across the coach and observatory cars to play each other’s games. The mood is light but weary.
There are some real gems in the mix. I sit down at the keyboard for Monologue, trying to type out a villain’s wordy speech, but I keep taking too long and the track-bound hero breaks free before the approaching train can finish him off. Typing difficulty spikes when you’re sitting in a room that shakes and sways side-to-side. I move over to play Crazy Cart Chaos, a competitive four-player game, against the team who built it. It’s about collecting passengers and delivering them to your station on a Pac-Man-esque grid of train tracks. I’m terrible at this one; the developers are really skilled at stealing my passengers before I can bring them home.
Not long after, the conductor tells us we’re about to pull into the Emeryville station near our final destination. We scramble to gather our things, leave the train, pose for a big group photo, then scatter in the wind to buses and cabs and light rail. I’m sure most of the crowd is attending GDC over the next week, but I’m on a plane back home tomorrow.
It’s an abrupt ending. Our project feels incomplete though we’ve agreed to put our pencils down. I’ve only seen a tiny fraction of the new games produced. And now it feels like I’m walking out of the theater at intermission. Not that I’d trade the experience, mind you, but maybe next year will be different.
Tim is a hobbyist game developer, serial game jammer, and founding member of the RunJumpDev organization in Lexington, Kentucky. He’s currently working on Disc Jockey Jockey, an audio game that puts you in the signal chain between radio DJs and their broadcast audiences, managing microphones. Tim will be riding the rails again for Train Jam 2016 and attending GDC to exhibit Disc Jockey Jockey.