GMTK Game Jam: Theatrum Infinitum
18/7/2023
In case you don't know, the GMTK Game Jam is an annual event hosted by Mark Brown from Game Maker's Toolkit, challenging game developers all around the world to create a game in just 48 hours! So let's take a look at how it went for me!
Before the jam
I have partaken in a fair share of game jams, but this time around, I decided I wanted to do something new. Specifically, I wanted to team up with other people. So, I headed to amazing team finder website the community put together for this jam, perhaps a bit too close to the start of the jam. I started skimming through the posts, looking mainly for someone who could do art assets, as that's something I really couldn't do. Messages were sent, and the start of the jam was drawing nearer. None of the artists I contacted replied, so I ended up in a team composed of me and just another programmer. Now all we could do was eagerly await the announcement of the theme.
During the jam
The First Day
This year's theme was set to be announced at 18:00 BST, on Friday 7th. So, by that time, I tuned in to the video on YouTube. The chosen theme was Roles Reversed. Because of time limitations on my side, me and my teammate had only a single hour on this first day, so we decided to use it for brainstorming and settling on an idea we both like. So, we hoped on to a Google Docs and started writing down ideas. We ended up deciding to make "a puzzle game, where the player's character is an actor way too focused in playing his role to perfection, so much so that he starts becoming his role" (actually, that isn't exactly our initial idea - throughout the jam we changed it a bit to better fit the theme). Although it needed some more fleshing out, it was a pretty nice concept. While I had to stop here, my teammate started setting up a Unity project and found a nice player controller.
The Second Day
Now that we had an idea, it was time to start coding. Since we already had a player controller in place, we jumped straight into implementing the role swapping mechanic, which was simple enough. We just had to detect a button press and react to it by changing a parameter in the player controller (looking back, all of this functionality should have been in a separate script, but this kind of bad practice is generally acceptable in a game jam). After a few tweaks, including limiting the number of times the player can change in and out of role, to bump the difficulty slightly up, we started drafting an introduction level to teach the player the game mechanics. In trying to design the level, we realised we really needed some interesting puzzle elements. So, we started working on special surfaces that would damage the player only if he was out-of-role, or only if he was in-role (later, we actually discarded this feature in favour of enemies). The next puzzle element was a simple door and button mechanic, but which turned out really nice. Meanwhile, we also started working on simple attack logic for the player to deal with his (yet to implement) foes. We got back to working on the introduction level, adding a door and a few enemies, as well as some text to tell the player what to do. And with all this, we were nearing the end of the day. We'd both been doing different tasks, on our own branches. So, we decided to merge everything before calling it a day. Thankfully there weren't too many conflicts, so it wasn't very hard to do.
The Last Day
For us, the last day started with just 8 hours to go. We still had only one level, and that was our biggest concern. But we still had many features to implement and ideas were scarce, so we kept postponing making levels again and again, which was probably our worst mistake during this jam. Also, we had no artist, and everything was still looking very much like a prototype. So, we started pumping out scripts at an amazing pace. Enemy controller, check; a trigger to go to the next level, check; sanity counter (more on that later), check. By this time, an idea hit and we finally started making a new level, which turned out quite interesting, and definitely leaned more on the puzzle aspect we were looking for. But in doing it we realized we needed something more to make the game interesting. That's when we thought about sanity. Going back to our concept, the player character is an actor playing a role, and slowly becoming that role, getting trapped deeper and deeper in his madness. So, it makes sense that the more time he spends playing his role, the less sane he becomes. With this new idea, we implemented a simple timer that'd tick down while the in-role. After another round of merging, with approximately two hours to go before the end of the jam, we started making a build and uploading it to itch.io. Building took a lot of time though, so we ended up with one hour left, and a heap of bugs! We started fixing them as we found them, and also trying to do something about the graphics. We decided to stick with the programmer art we already had in place, but we added some post processing and a nice effect linked to losing sanity (I really think that effect turned out great, and others who've played the game seem to think the same, so, graphically, it might have been what saved the game). We also found a nice song and added some distortion that creeps in when the player's sanity gets low, which really adds a lot to the atmosphere. We also added an ending scene after the last level (which was still the second one, we hadn't made more in the meantime, unfortunately). We fixed the last round of bugs, pushed everything and started making a fresh build. We were getting really close to the submission deadline, and the build was taking forever. The pressure was building up and for a moment I feared we'd miss the time. But, just as the counter was ticking down close to zero, I got a notification from Discord.
Turns out itch's servers were under a lot of stress, and many people were having a hard time publishing their game, so the jam was extended by one hour. However, during this period we could only fix bugs and upload to itch (which means no new levels). So, we got to work fixing some pretty bad bugs, and we uploaded a build to itch. We still had some issues with the resolution, but we managed to fix them and uploaded the final version about 10 minutes before the deadline. Then, just for fun, we decided to speedrun the game. I managed to get 36.81 seconds (at the time of writing, I've managed to get it to 20.89), but my teammate got an amazing 14.67 seconds!
Final thoughts
In my view, there are two purposes to game jams, those being having fun and learning some new things. I feel I've accomplished both of those, so I'm already pretty satisfied with the result. As for the actual result - that is, how well our game placed overall - we ranked 4810 out of 6842, which ins't too bad at all. So, I'll let you know in a comment as soon as it's announced. Further on, it was much more fun working with someone else than alone, so that's surely something I want to repeat. That being said, I hope you've liked the post, and till the next one, goodbye!