Last weekend, Glitch Games (creators of the popular Forever Lost adventure game series) hosted a 48-hour Game Jam just for Corona SDK developers called “GIGJam48.” I’m happy to say that I was a participant in the jam, and wanted to write a sort of “post-mortem” for my experience with the event.
Game Jams are “hackathon”-style events where developers are given a topic or set of specific limitations, and tasked with creating an original game that adheres to those limitations in a short period of time – in this case, 48 hours. On any given week or month, it’s easy to find somebody somewhere hosting one of these events — (Ludlum Dare is an industry stalwart, and the #1GAM (“One Game a Month”) project has really picked up steam this year — but game jams specifically for the Corona community are still pretty rare, and it was exciting to see one put together by a team like Glitch, who are big players in the Coronasphere. Their open-source libraries are very popular with a lot of Corona devs, and I think it’s safe to say that most of us are jealous of the success they’ve seen with “Forever Lost.” 🙂
Luckily, GIGJam was running on UK time, which meant that instead of receiving the jam’s theme (“the elements”) at midnight on Friday, the theme was announced at 7pm Friday night in NYC. I did very little actual coding on Friday night – I brainstormed and laid some groundwork that was applicable no matter what form my game took (i.e. making 118 audio files of a robot voice reading element names). From the start, I decided that I wanted to avoid interpreting “elements” to mean “earth, fire, wind, and water” but rather as chemical elements from the periodic table. This was partly to help make my game stand out from the pack, and partly because it gave me a broader set of raw material to work with (hey, if you can create everything in the whole world out of these elements, making a simple video game should be easy, right?!). Part of my Friday night preparation was to create a lua table that organized all the data for all 118 elements – something that was invaluable as I experimented with different game ideas on Saturday. (You can view that table here if you’re so inclined.) And I went to bed at a semi-reasonable time Friday night, with a head full of ideas, a hard drive full of mp3s and Lua tables, and a title that I knew I liked: “Elementropy,” which is a mixture of the words “element” and “entropy.” One definition of entropy is “lack of order or predictability; gradual decline into disorder,” which is a pretty good description of the last time I played “Pac-Man.” I was clearly inspired.
I have to admit, my commitment to seeing this thing through was not as steady as I’d have liked — my wife and I are expecting twins later this month, and the weekends are often busy preparing for their imminent arrival, so I didn’t have the luxury of retreating to some isolated corner for a full 48 hours. My wife was beyond understanding, though, and graciously allowed me to zone out at the computer for hours when I probably should have been baby-proofing the apartment or something (thanks, Leslie!). But on more than one occasion I considered packing it in, thinking that there was no way I’d have something presentable by Sunday night. This was especially true on Saturday, when my ideas were running rampant without any clear winner taking hold. At one point, I was building a quiz-style game to see if you could match an element’s symbol with it’s name — but I scrapped that because it felt too simple…and an “edutainment” title didn’t seem very “game jam-y” to me. Then I was considering some sort of “Magic: The Gathering”-style card game where each element was represented by a card, with combat stats pulled from data like atomic weight. I still think that second one is a pretty cool idea, but since I never actually played any card trading games as a kid, I didn’t know where to begin implementing it! At times I felt lost, and very nearly threw in the towel so that I could launder more baby onesies. But inevitably, after a 60- or 90-minute break, I’d be back at the laptop.
By Saturday night I was hard at work building a game that resembles my final product aesthetically, but that worked in a vastly different way. Element “bubbles” would drop from the sky using Corona’s physics engine and stick to the first other element they touched, sort of like a chemical compound. The idea was that as your compound grows, you’d need to be careful to keep it balanced so that it doesn’t fall off the platform it sits on, at which point the game would be over. The bigger the compound you create, the higher your score. This idea is workable, and it was fun to watch the physics engine create a “World of Goo”-style compound that would jiggle and stretch every time a new element was added. But ultimately I didn’t have enough time to fine-tune certain aspects that would make it playable: I was able to make it waaaay too hard to build a compound bigger than 3 or 4 elements successfully, and I was able to make it so easy that it became a challenge to make the compound fall off the platform at all, but I was having trouble finding a middle-ground. And even though I had a working “camera” that could track any display object seamlessly as it moved through virtual space, there were maddening logistical concerns that presented themselves: as the compound grew, how would the user keep an eye on lower levels of their compound, that could fall off the platform without a visual warning? The solution was probably to zoom the camera out as the compound grows, but with less than 24 hours to go, I didn’t have sufficient time to make that work. Zooming is possible using Box2D physics, but it’s not easy to make it play nice, and I didn’t have tons of time to teach myself. I went to bed very late on Saturday night feeling discouraged and unsure if I’d be submitting anything.
On Sunday morning I woke up and started playing with my code. I mean that quite literally – I was modifying code piece by piece, a bit aimlessly, trying it out in the simulator, and seeing if anything grabbed my fancy. At some point I ended up adding a touch listener to the element bubbles that allowed me to fling them around the screen, and into one another. “Hey, that was fun!” It also reminded me of Puk, yet another Corona-made game that I’m quite fond of. With that bit of inspiration, I set about building a single-screen playing field (goodbye, camera management!) not unlike the kind seen in Puk. I also recycled some abandoned graphics from that “edutainment” version of the game I was working on the day before to create a target zone that resembles a Scrabble tile. An arcade-style game! Eureka! By the time this all really started to gel, I was only 3 or 4 hours away from the submission deadline, but it’s amazing what an impending deadline can do to focus your mind. In no time I’d created a rough level progression system that begins with just one element bubble on the screen, and grows that number by one each time you clear the screen. As the number of bubbles increases, gameplay becomes more difficult because your score diminishes if you hit the target with the wrong element. To keep things varied, each element’s density is determined by it’s actual real-life atomic density, resulting in some bubbles that zip across the screen with barely a touch, and others that require constant force to move up the screen (this was easy to implement because of my Friday night prep work, translating the periodic table into a Lua table). I implemented a game clock so that the game doesn’t run on endlessly — and rewarded players for hitting the target correctly by adding a few seconds to the clock in addition to increasing their score. I quickly implemented a rudimentary scoring system where the player’s score is increased by the target element’s atomic number. Holy crap, I think I’ve made a game here!
With just over an hour left before the submission deadline, I had a game that felt like a game, and that had a clear beginning, middle, and end. But it needed a little window dressing. When the game ended, it just ended. No bells or whistles, no “post-game report.” It also had no introduction or menu screen. With the clock running, I only had time to implement one of these elements, and I opted to build a menu screen — my post-game report would have to make do with a simple native system alert. But in just a few minutes I was able to whip up a decent-looking menu page that fits nicely with the feel of the game, as element bubbles are tossed across the screen randomly. I even had time to make a quick “how to play” screen, so that the judges wouldn’t be left to their own devices. I’m bummed about the lack of a nice-looking post-game report, but I think under the circumstances I made the right call. I put in a quick 10-minute gameplay test on an actual device, zipped up my project folder and uploaded it to the Jam’s organizers. Success!So now that I’ve had time to sleep on it, how do I feel about my GIGJam experience? Most of all, I’m just really glad that I stuck it through and kept working until I had something to submit. It would have been so easy to assume that it wasn’t going to happen and give up. But I think that’s the point of a Game Jam: it’s not about making something perfect, it’s just about making something. And hey — I think I’ve actually made something that is decently fun to play. I may even put a little extra polish on it and send it to the app stores. I think it deserves a place there. And I definitely learned (or re-learned) a thing or two about the value of placing constraints on yourself. I’ve got a couple of game projects I’ve been kicking around for months that probably have more potential than “Elementropy,” but because I don’t have any deadlines lurking for them, I continue to tinker, and tinker, and tinker…so that the damn things are never actually finished. But in just 48 hours, because I had to make fast and hard choices about what was possible, I managed to create something that is very nearly ready for the App Store. There’s a valuable lesson there. I think it’s time to start setting some limitations and real constraints on my other projects, lest they turn into endless exercises with no finish line.
But perhaps most importantly, I had a lot of fun this weekend! I’d like to extend my sincere thanks to Glitch Games for organizing the GIGJam, and I can’t wait for the next one.
Did you participate in GIGJam48? Please share your thoughts in the comments, and if your game is available for download, share a link!
Awesome write-up, Jason! I agree, the game Jam was a blast. I plan on making a blog post, or a video as well. Hit me up for an .apk of my entry: ‘Ard: The Elementalist’, either by email, or in the #corona irc chatroom at irc.freenode.net 🙂