Eating an elephant in record time

2018-01-31 by Kelketek

It’d been a long time since I’d done game development. My time has been taken up building my new project Artconomy, so I’ve been holed up in my home most days coding for hours on end. This, combined with scheduling issues meant that my best friend Nate and I had not really gotten to hang out for weeks.

My best friend is an experienced game developer who is really into making games. Last year he went to the Global Game Jam and I did not. When hitting the gym with him last week, he proposed we go together. I’m happy I said yes– the jam was a ton of fun and I’m proud of the work I did.

What is the Global Game Jam?

The Global Game Jam is a challenge to create a game in a 48 hour span. Most of the people in attendance are artists are programmers (though there are some who are neither and want to test or observe, support or what have you).

The Jam is free to attend and is sponsored by Unity and Soylent among other companies. As a result, they have plenty of Soylent (along with normal food) on hand and most of the games developed use Unity as the engine. You’re not required to drink the chalky milk or use the engine if you don’t want to, though.

The Jam is not set up as a contest, but they do choose to feature a few games after the event is done, which means on some level you can view it as a contest anyway, but they try to avoid fostering a competitive spirit and instead make it a cooperative one. They turned out to be pretty good about that.

Before the event

The Game Jam encourages you to form your team on site and come up with the game idea on the spot using the theme.

You might recognize these rules as ‘completely unenforceable’ which is why they’re more guidelines than rules. Nate and I already decided ahead of time we’d work together and we had some vague idea of what we might want to make. The end result ended up being a bit different than we originally envisioned, but that was the same for every game that was built.

Knowing we’d be spending a lot of time there and that whatever food they provided was not going to be on our diet, we stocked up on stuff we could eat, loaded up a cooler, and headed over on Friday evening to start the event.

Friday, Day 1

The first day of the event involved a fairly long intro video with several seconds that all of the sponsors got to put their names on and which had a few feel-good moments, a lot of boring ones, and one pretty funny one from Extra Credits. Most of the time I was watching I was feeling eager to get started.

At the end of the video they announced the theme: ‘Transmission’. Once they announced it, they handed out 'idea forms’ where people could write down their ideas using the theme to build a game. Nate submitted his idea, which was mostly the idea we’d come up with earlier. We felt it might need a bit more work to fit the theme, though, and so had to change it up when we got started.

Once all the ideas were collected, they were presented one after another and everyone voted on the ideas they liked most. Ours did not place, but we decided we’d make it anyway. That meant we had just the two of us to build a game in 48 hours (though, as I’ll note later, we did get help at the end!)

We decided that to make this game we’d use Python and Pygame. Python’s a language the two of us already knew and it didn’t require figuring out something like Unity in a short span. Pygame does not provide things like a physics engine but does provide interfaces for graphics, sound, joysticks, and rendering.

We probably could have made more use of its sprite features and other cool abilities, but since we were on a time crunch, I just grabbed whatever I could first find (in this case, image management tools) that looked helpful and began building something. Nate began rolling his own mini-physics engine while I worked on getting the video display and controls working.

By the end of the night, we had a ball that you could move around on the screen using the keyboard.

Saturday, Day 2

Some people like to spend the entire 48 hours at the jam. Nate and I decided we’d head home and get some sleep to rest up and attack the problem full force tomorrow.

He slept alright. I did not. I woke at around 2:48AM and tried to go back to sleep unsuccessfully. I got up, spent a bit of time online and making some food to bring to the cooler and some coffee to quaff. I hadn’t had coffee in two weeks (to reset tolerance) but I downed a few cups, poured the rest in a thermos. Eight cups in all.

I began getting the XBox controller working, and when Nate came over we headed back to the jam and I finished that up. By the time I’d finished that I’d downed all the coffee and felt like a wired zombie, but I was having so much fun that despite the sleep deprivation I was knocking things out left and right. Soon we had as many players as we had controllers plugged in, and then we had our transmitters that would fire waves at each other.

I’d never coded a video game before. Text games, sure, and I fooled around with things like Game Maker and Klick and Play when I was younger, but now having become a veteran software engineer and being unleashed on this project with an experienced game dev by my side, the two of us were tearing through it. We could tell, by the end of the night, that we would definitely have something playable next morning.

We took a break around dinner time to get some wings at a place nearby, headed back for a bit more work, and then headed home knowing that we would definitely have a game built for the deadline– the only question was how much refinement we could work in.

This night I slept way better.

Sunday, Day 3

I loaded up some more coffee (I may have slept well but I still had sleep debt) and we headed back to the jam. We had a handful of things to fix and finish before it was a playable game– the win condition needed to be coded, some work handling what direction objects were facing was needed, and soon we had these in place. After we had what would be enough to play the game, we spent a little more time in refinement– I worked on making it to where you could reset the game after a round so we could play more and test faster, while Nate managed to find some artists and flag them down to make the music, sound effects, and art while he built some temporary assets.

Once we had the temporary assets in place, we started testing the game properly, found several improvements to make and put them in place. As we refined and tested, the assets came over, one after another, until the very last minute. I had made a mistake in the middle here– increasing our resolution without telling Nate, who then did not tell the artists. This made our graphics a bit stretchy.

Just in time, we had a solid, playable, and fun game. They had us go and present all of our games one at a time.

Now, being a 48 hour challenge, most of the entries were not well refined. In fact one of them wound up being only a demo of a game mechanic idea (but which looked like a lot of fun). Another was fully playable but despite its pitch did not look especially fun to play. Still, it was an impressive amount of work to do it. There were even a couple of VR entries– which were a bit less buggy than you might expect a two day VR demo to be!

We went up to present our game and found that when we hooked up to the projector, the game wouldn’t run– the new resolution I made was too high! So we had to go in and change all the constants back. It only took a few minutes while another group presented, but soon we were up and showing the game off with four players.

Of all the games that were presented at our location of the jam, I felt ours was the best. I am, of course, biased, but I think the mechanics and its completeness were better than the other entries. Where we didn’t do as well was on the artwork, since we grabbed artists at the very last moment who had to do very quick work. Next year we’ll want to bring along a dedicated artist.

(You can read more about Pain Wave and get the code at the Global Game Jam website.)