admoore.xyz

GMTK Game Jam 2024 Retrospective

Tags: game_dev

Last year, I made a post talking about my experience making a game for the GMTK Game Jam. Despite that being our third year working as a team, we still learned a few hard lessons about development for jams. So, naturally, when it came time for this year’s jam, we were excited to put those lessons to good use. Did we succeed? Well, keep reading the rest of this article to find out!

If you don’t care about how we made the game and just want to jump in and play it, click here.

Background 🔗

For those unaware, a game jam is an event where teams across the world create video games in a short period of time. These games have to fit a theme, which is revealed at the start of the jam, and they have to upload whatever they have onto the jam website by the deadline. This year’s jam was longer than ones we’ve participated in previously. Instead of 48 hours, teams were given 96 hours, with the intention that teams would take things at a slower pace and not be quite as frenzied as they usually are. This meant that for us, the jam laster from around noon on Friday, to around noon on Tuesday in our timezone.

A few weeks before the jam, Kyle said that he got a few people at his work interested in helping our team out this year. Crucially this included a few actual artists who could do art that is orders of magnitude better than anything I could make (remember the disaster that was last year’s submission?). He also managed to convince his boss to let us use their office space in downtown Boston as a work space for that weekend. All in all the plan was to have 4 programmers, 3 artists, and a producer-manager type. We were all super pumped to start working.

Friday 🔗

I woke up on Friday morning on a plane. I was on my way back to Boston from Hawaii, so I knew that the game jam/jet lag combination would be wreaking some serious havoc on my sleep schedule. Midway through my second flight from Denver to Boston, I used 800 of my precious United miles to purchase in-flight Wi-Fi so I could start brainstorming the moment the theme was released.

The theme this year was:

We started brainstorming right away. We had a lot of good ideas that would be great, if only we had more than a few days to make the entire thing. One concept that we hit over and over was the idea of doing some sort of strategy at multiple layers of detail. The classic example of this is Ultimate Tic-Tac-Toe.

Tic-Tac-Toe on its own is boring and always ends in a draw, but with Ultimate Tic-Tac-Toe you’re forced to think on multiple layers in order to win. We had a bunch of ideas that fit this multiple-scale strategy concept. Unfortunately, we just didn’t feel there was going to be enough time to flesh out that idea enough to complete a game. I did get some ideas that I might develop further in the future, though.

What we ended up deciding on that felt pretty doable was a 2-D platformer/puzzler. The idea was you play as a small robot navigating a big space, solving puzzles to fix machinery. Through the level design, and eventually, the narrative, you discover that the space you’ve been moving around fixing things in is actually a huge Gundam-style robot that you take control of. For the final act you take the helm of this giant robot and blow up the moon. Why blow up the moon? I don’t know, but it makes for one hell of an ending, right? Right.

While this is a cool concept in theory, we didn’t realize it would require a level of competence to pull off that we just didn’t have time for. I’ll get into this more later, but the theme wasn’t coming across like we had hoped, which brings me to my first lesson:

When it comes to the theme, think simpler.

A lot of games that I saw took one core idea, and expanded on in in different ways to create good gameplay. One submission I played had just one mechanic: portals that shrink or grow objects that went inside of them. That ended up being a much more straightforward way to meet the theme, while still allowing for complexity in puzzle design. Something simple like that is a much better choice for a game jam game than what we came up with.

Saturday 🔗

I took the commuter rail into North Station in the morning. MBTA commuter rail and its 2-hour off-peak headways are an absolute disgrace, but that’s a rant for another time. Anyway, I got to Kyle’s office around 10:30 in the morning. This is later than we would usually start, but since we had the extra time, we figured we could relax a bit and not stress so much.

We had decided on having points in the level that you’d interact with to bring up individual puzzles. This made it so that development of the platforming parts and the puzzle parts could happen basically independently. This was a big step up from last year, when everything was so interconnected we kept stepping on each other’s toes all the time. I took charge of the puzzles, and Kyle started work on the character controller. Meanwhile, one of our artists started creating animations for the player character and tile-sets for the levels and the other worked on a background.

Originally, we were going to have multiple types of puzzles. I did end up writing the code for them, but we settled on only one type for the jam, a clone of the mobile puzzle game Flow.

By sheer coincidence, the past few weeks I was working on a level editor for our old game Unweighted, and had to implement the exact same type of Godot Tilemap search algorithm for the wires in that game that I needed for this puzzle. That was some great forethought by past me there.

We got lunch at the Fisherman’s Feast which was happening just a few blocks from Kyle’s office, which was amazing. Coming from exurban office park hell, having good dining options and events right by your place of work is something completely foreign to me.

By the end of the day, we had the character controller mostly working, and the puzzle framework pretty much complete. That night after I went home I composed some music for the game, which I think fit the theme of “exploring a giant robot” pretty well. Give it a listen, if you’d like.

Sunday 🔗

The next day was another full day of work. Terry imported the tile-set and made a small test level to start tying things together. Like last year, here was the point where we started making decisions that weren’t the highest quality. By the end of the jam we ended up re-writing most of this “glue” code. Meanwhile, Kyle worked on adding some hazards (i.e. spikes) and finished ironing out some bugs in the character controller.

Another crucial thing that I took care of, and that we neglected last year, was sound effects. I used jsfxr, which is a free web-based sound effect generator that works pretty well for simple sounds. Finally, I created the entire set of puzzles used in the game. There were only eight total, and they cover a pretty good range of difficulties.

We ate dinner right on the waterfront, which was really nice, and then headed back home. Before I slept I made the title screen look fancy. The background consists of multiple layers that are all scrolling at different rates to create parallax, which is a really cool effect. I only wish I had time to make the title itself look more interesting, as opposed to just a pixel font on a black background.

Monday 🔗

If you’ve been paying close attention, you might notice that I failed to mention creating a pretty critical aspect of the game. That would be the levels. After a day of unproductive work at my real job (game jam + jet lag + monday = a brain turned to mush), we still didn’t really have any levels for people to play. If you recall from earlier in this article, the level design was to play a pivotal role in setting the environment. It had to feel like the inside of a robot to really sell the theme. A few hours of development was just not enough to pull that off.

There were two lessons I learned from the level design process here:

If something is a core part of the theme, don't leave it to the last day.
When designing a platformer, create a platforming test level early on.

I think the first one is self-explanatory, but the second requires more context. Our character had things like a double jump and a dash. The double jump was just barely strong enough to gain a height of exactly 4 units. But this requires execution: you need to hold the jump button down for a while and then double jump right at the apex of your first jump. For me, since I had been controlling the character the whole time, this was already in my muscle memory. Brand new players, however, had a much harder time making those tight jumps.

So I think adding a level that’s just a bunch of test area with gaps and ledges of various widths and heights is a good idea early on. It would allow us to better fine-tune our character. We could see how easy and hard it is to navigate those known obstacles and design levels with that in mind as well.

After creating the levels, there was just one more thing to do: the final cutscene. We got an amazing ending comic drawn by one of our artists, that shows you controlling your giant robot and, crucially, exploding the moon. Terry animated the panels to scroll across the screen, and it looks really amazing. I’m not going to post it here though, you’ll just have to finish the game to see it 😉.

At around 1:00 AM we finally exported our builds, and published them to itch.io. We were done.

Post-Jam 🔗

Learning from our past year’s experience, we actually spent some time showing our game to other people. Kyle showed it to more people at his work, and I had a couple twitch streamers check it out. That was how I realized the platforming was harder than I thought. But anyway, let’s talk results. Here is the rating breakdown for our past three entries:

2022

2023

2024

In terms of ratings, this is the best distribution we’ve ever received. In terms of placement, it’s about as good as our best overall as well. Both this game and Unweighted had overall placements right around the 80th percentile. We got more reviews than last year too, which I think helped our scores.

Despite the platforming being a bit unforgiving, our enjoyment score was really good, in the top 10% of all entries. A lot of people mentioned enjoying the puzzles in their reviews, which made me especially proud, since I was the one responsible for that.

One thing that hurt us was our creativity score. A lot of the comments said that the theme didn’t really come across. Frankly, I agree with them. If we had a few more days to refine the levels to look more like an actual robot, and throw in some more narrative hints, I think it would’ve really tied things together.

Did you play the game? What did you think? Feel free to let me know.

Anyway, that’s all for this post. I’ll be back at some point to talk about the level editor for Unweighted that I mentioned. I had to solve some interesting problem, and I think it’ll make for a good write-up. Until then, peace out.