One game, one room, only a matter of time — LD37 Post Mortem
Game Jam Post Mortem
The Ludum Dare 37 surprised me with a simple, yet powerful theme that helped me get back to gamedev and work solo on art, music and gameplay. This LD was also different since it was the first time I’ve moved away from LibGDX in favor of using Unity to develop a full game from beginning to the end. This post mortem will show the walkthrough of my game progress, and the perspectives of developing a game in C# with Unity versus using Java with LibGDX, the solo experience and what should you have in mind when working on game jams.
Energy drinks, pizza, new people and the usual routine
So as usual, I tend to prepare myself from the day before. I think it’s very important to have control of the first hours because as soon as the theme drops you can either do two things:
- Think about what to do for one hour and sleep, or
- Develop the core concept of the game for about 6 to 8 hours and take a little rest.
I’ve seen people briefly discuss for one hour, go to bed and have incredible results when they wake up. I, on the other hand, have only worked using the second method and wasn’t thinking about changing that.
So I prepared the drinks and sugar snacks. We have lunch and dinner where I work, and I already planned on participating there. Mainly because it’s just a great place for silence and focus, and also because my boss got me a mattress. So what else did I need?
I’m currently working as a private game programming teacher and friday is one of my classes. My students were working on a game to showcase to their family for the past three weeks. When the class was over at around 5 PM, I started to think about the tools I was going to use. I knew I didn’t want to innovate because I was going to work with Unity, yet I didn’t want to make something too straightforward. In the end it doesn’t even matter.
The theme was going to be announced at midnight, and about three to four hours before that, someone knocked at our office talking about Ludum Dare, that’s when I met Erico Porto, a great programmer who is crazy enough to work on his own JS game engine. He said he couldn’t stay there or focus too much on LD, yet he still managed to finish his game. We’ve shared programming experiences and pizza for hours before the theme announcement. It was good to ease my mind.
So midnight kicks in and the theme “One Room” was announced. I wasn’t disappointed, I was kind of happy, but it didn’t seem to give me a lot of ideas, I only knew I prepared myself to work on something. Erico went on to design a platformer that showed all levels as layers on the screen, which I thought was interesting. After he left a little before 1 AM, I kept thinking on what could create, I was a little bit tired, only slept for 6 hours on the previous night, which is a terrible mistake. But after procrastinating on some pixel art gifs, I remembered a concept I had with some friends back in 2015 of a game which had only bosses and it would keep saying “This ain’t even my final form”. We even joked that it could be a neverending boss battle where we would keep updating the game adding more and more bosses to the experience. Unfortunately, we only worked on it for two weeks and put it on hold. I thought that was the perfect excuse to bring it back and see if it could be cool and funny after all.
Ranged attacks vs. melee attacks
When we originally thought about the design of the game back in 2015, we used Dark Souls as a template, which is a melee based game for the most part. For this game jam however, I wanted to optimize the work I was making since I didn’t know if I was going to have some technical issues with Unity. Here’s another important game jam lesson: if you’re not familiar with the platform you’re coding in, even if you’re experienced, stick to what you’re absolutely sure it’s going to work. I had already worked with melee based attacks on Unity and I remember it getting a little bit complicated, so I opted for a ranged based attack game. This was the best idea I had and saved me from having an absolute unfinished game.
After booting Unity three hours after the theme release and sorta knowing what do do, I started with the movement of the player by creating a Quad with a Rigid Body 2D and a Box Collider 2D. Then I created a small Box Collider2D for the bottom of my player to be his foot and allowed my player to have variable height jump.
With LibGDX I’d probably still be setting up the rendering process and the basic physics rules of the world. With Unity, the player movement was made in less than three hours and two hours later I had an enemy following and stomping on the player’s head, felt good. I went to bed for two hours before working some more.
The fundamentals are nearly done, now make it into a game already
A golden rule of game jams is that you have to have the core game done somewhere between 4 to 8 hours. By having the game done, we mean the core mechanics. If it’s a text RPG, then the dialogue and scene placement should be already done. If it’s a platformer, then the player should be able to jump , do whatever it’s supposed to do (stomp on enemies, shoot, teleport, etc.), die and respawn. That means at 10 hours after the beginning I was behind my schedule.
My game still was pretty blurried to me. I wasn’t sure if the enemy was supposed to follow the player or have a pattern, but I went on again to simplify the game by picking the latter. I ended up thinking about a game where the enemy moved back and forth and after killing him, he’d jump, then he’d shoot forward, then downwards, and so on and so forth. So I got it working.
Ok, it still not quite there, the entities still don’t die. So I decided to add this feature with the GUI, which I’m not fully familiar in Unity, and have the dying animations to be as simple as possible. So I thought about a comic effect to make the player and the enemy explode on the screen. Four hours later:
With this, I considered the game done. If anything went wrong, I had something to show to others. Knowing my tools better would’ve probably saved me some 5 or 6 hours. At this point, it was 6 PM of saturday, I had only 30 more hours to finish the game. I felt like I was pretty advanced, but not having a good night of sleep on the day before the jam would take its toll. I headed home to finish the jam there.
When the bed’s more comfy than usual, art issues and compo give up
After I headed home, I decided to make my game bug free and usable with all the boss patterns and ended up with bosses that jump, shoot forward, upwards, downwards and dash. With that, I could get some sleep, I was hoping to get about four hours of sleeping, but ended up sleeping for seven hours (ouch) which cut my advantages a little bit.
With 14 hours left for compo, I kept thinking about the characters I was going to use for my game and without too much insight, I opted on using references to older games and pop culture. I started drawing what would be Casey Neistat on a boosted board holding a camera on a gorillapod and the best dank meme on the internet, Dat Boi. As I polished their animations and attack items (Casey throws mail packages and Dat Boi throws Mountain Dew cans), I decided to add it to the game.
I have always struggled with Unity’s 2D Animator, so for this jam, I decided to build my own basic animator since the animations were simple. I worked with spritesheets and here comes my first technical issue surprise, Unity can slice and create references to individual sprites, but it cannot reference and load them in real time. So you need to initialize them one by one on the inspector. WTF Unity?
So, I finished the game with only Casey and Dat Boi animations. I thought about adding some music, but I was bringing high expectations to the music and everything I started composing just sucked and it felt like a waste of time since I had to add the other bosses. This was a mismanagement from my part and, alongside with the lack of sleep prior to the jam, contributed to the lack of time I had at that point to finish the game. There was two options for me, either release the game like this and have tons of features missing or go jam (the 72h LD). I went with jam, because the game would be incomplete if it didn’t change the bosses. But I had to work on monday, so subtract some possible extra hours from the deadline.
The last day, feedback from my students and the moment of truth
I felt dead tired trying to finish the sprites for the game, but as I woke up, it was time to just polish them. I needed to make one frame for the attacks and I’d be all set for more. As I reached class time, my students liked the concept for the game and said it could get a little bit addictive to reach the last boss. I felt like I was on the right track. It was far from what I wanted, but I was happy with it.
I decided to stay at my workplace again so I that didn’t waste time on traffic and I kept working on finishing the animations. With three hours left, I still had no sound, so I decided to work on that. For the music, I made a quick chiptune with some small variations to the same melody that repeats throughout the game. After being quite satisfied with everything, I recalled that one of my friends said it would be pretty straightforward and easy to beat, so I decided to add an extra final boss to the list. After adding it, I thought it was silly of me to think that I would have time for a complete new boss, so I kept it in the game, but he can’t damage you. As of the moment of this writing, nobody has ever seen him and I’m not gonna tell you who it is.
The moment of release. Relief?
So it was all good, midnight kicks in and it’s time to submit the game. I always wanted to have a web release, so I focused on exporting that, but to my surprise, the game had no background. WTF Unity part 2?! I tried several things to make the game have its background again, but to no avail. Some intuition of mine decided to change the width of the image and make it fill the entire camera space exactly. Only after that it appeared, but I still didn’t know what caused the bug in the first place. I spent the entire tuesday fixing some other bugs that appeared as I played over and over again. During this time, nobody played my game, so no biggies. I was kind of happy and felt productive in this game jam, since it’s the first one I managed to do all the departments by myself. The feedbacks are being great and I’m enjoying playing everyone’s games so far.
What went right:
- Having the idea of what game to make in less than two hours is good, it could be better, but there’s not that much to complain;
- Having the game’s core mechanics and flow done in 22 hours is kinda neat;
- Making a nice boss theme in somewhere like an hour was also good. Starting with the drums, then bass notes, moving to the lead is an approach I’ll definitely use on all of my game jam music where I wear a lot of hats;
- Simplifying the animations and the art style were also a great idea. All of the characters were instantly recognized by everyone;
- Not wasting time learning too many things I didn’t know how to do on Unity.
What went wrong:
- Taking 10 hours to have the basic core mechanic working was too long;
- Focus on audio prior to critical concepts of the game was also a mistake;
- Not taking the chance to do trivial work faster wasted a lot of time;
- Not having a Board of what to do and a version control system is certainly not cool;
- The lack of sleep on the day before the jam was a terrible mistake.
From LibGDX to Unity
I come from a Java/LibGDX background and have been flirting with Unity for the entirety of 2016, I even taught beginner’s Unity/C# for an entire month. I must say that it felt much more productive. Of course being experienced with such similar programming language helps a lot. When I started with LibGDX I didn’t know anything about game programming. Having to work with Game Objects instead of preparing classes with properties is also pretty cool. And luckily the Physics2D was enough, but I still have nightmares with my old Box2D platformers. Unity’s interesting for letting us almost shut our brains when developing them.
Unity changes everything about the project, you really have to know your way around it. On a few other times, you can just brute force your way. The spritesheet issue I mentioned is something that really needs to be improved. Our open source counterpart for LibGDX was way easier to use and set up. So Some of Unity’s 2D stuff still not quite there, but a little extra work will certainly help them. The codebase is hard to structure from head, everything became quite messed up for this jam, but I’m sure some experience will change that.
What about the future for me and A Matter of Time?
I really enjoyed working on this game for this LD, it was the least stressful jam I’ve ever been into and since it’s finale, I’ve been watching some Mega Man boss battles gameplay, maybe I’ll work on some more bosses? I’m always tweaking something here and there which is pretty unusual for me to make after a jam ends. You can expect at least some graphics and visual effects enhancements for this project. Even though it’s not a hit nor anything, I think it has some potential to gather some laughs from others, so I might just open a new canvas and rework it.
As for me, I’ll create a whole lot more with Unity to gain proficiency and work on any idea that pops into my head, so expect more games in the near future.
I hope you’ve found this article insightful and helpful for your own games. Any thoughts about game jams in general? Leave a comment! I’d love to read what you think.
Special thanks to my girlfriend, my students and some friends that gave insightful thoughts to the project during the game jam!