First game jam reflections

Let me start off by saying that, at this point in my life, I have not ever finished any serious attempt at making a video game. There have been attempts – creative exercises – here and there, at home and at uni. Since then, a whole lot of life happened, and it has become clear to me that I needed to give those old passions a nudge. To create the right conditions for growth, I needed to tap into my creative energy through a short novel project, with a quick turnaround and limited time for analysis.

What better way to reignite that spark than joining a game jam? A focused, time-limited event to create a game, within given specifications, and with an element of competition – perfect. I had actually joined one earlier in the year, and spent a few hours on a prototype, but withdrew after my file corrupted. Apparently the world was not ready for a 3D PowerPoint dungeon crawler. Fortunately I got my second chance in July and took it.

The Game Maker’s Toolkit is a YouTube video series that dissects and analyses games. For the last three years, the series creator Mark Brown has also hosted a game jam – one of the largest of its kind. GMTK Game Jam 2020 ended up with 5,416 entries this year uploaded to the game sharing marketplace itch.io.

Prep

I had a bit over two weeks to prepare. With my last Java software build two years ago and most of my job focused on querying languages (and a fair amount of VBA), I’d need a refresher. I had done a few Unity tutorials a few years prior, but this time I felt like trying out a dedicated 2D engine.

I was already dabbling in writing a pong-like game in pure JavaScript, but that was much too slow for a 48h jam. I could pick up a library such as Phaser.js to speed things up (and I will eventually), but with lack of experience, I worried that I could get stuck on debugging JavaScript rather than refining gameplay.

YoyoGames, the company behind GameMaker Studio, have kindly collaborated with GMTK to provide a temporary license for the jam. I used GameMaker around fifteen years ago and it made a lasting impression on me with the way it organised resources into sprites, objects, rooms and views and allowed me to focus on object behaviour and level design without worrying about scaffolding.

Looking into its modern version, GameMaker Studio 2, I do like how it allows users to mix and match between its visual drag and drop interface and proprietary (but very intuitive) GameMaker Language. A built-in debugger was a huge plus. At present, I have some thoughts about both the advantages and limitations of GameMaker, but for a game jam I believe it was a good choice.

(If I’d spent more time on research I would have also considered Godot.)

Two weeks of YouTube tutorials later I was as ready as I was ever going to be.

Jam

The theme was announced as “Out of Control”. I had my weekend cleared and snacks ready.

Friday night

I knew I wanted to spend a fair amount of time on the design itself without touching any code, so I decided I’d spend the entirety of Friday evening just on brainstorming and design.

I settled on the idea of a 2D platformer, where gravity would turn on and off constantly. In zero-g, the player would need to commit to their jumps as they would be unable to change directions once they bounce off the ground or a wall. Objects such as sparks, that would normally have a limited range due to gravity, would fly off in all directions during zero-g moments and hurt the player. The player would not be expected to change the environment, but to adapt to it and use opportunities created by the changing gravity.

It was also during that time I had realised I could probably pull off some simple rotating hair strands. I felt that spending a bit of extra on this could really help:

  • as an extra visual detail that would give the impression of polish;
  • as a useful visual indicator of the state of gravity on the station.

Inspired, I started drawing the main character in Inkscape (an open-source vector graphics program). Again, this is something I haven’t used in a while, so I’m sticking to basics before calling it a night and feeling pretty good about day 1.

Saturday

This is hard.

I don’t know why I thought I wouldn’t get tired, but I got really tired. I’m enjoying working with GameMaker, and I’m remembering a whole lot of trigonometry.

Getting the character movement right is proving to be a real challenge, and outside of a jam’s timescales this is something I’d imagine spending a lot more time on. After a certain point, I just need to stop and move on.

Sunday

I spend nearly half of the day working on hastily drawn graphics and almost lose four hours of work due to Inkscape crashing. I move on to creating all of the levels. I am definitely feeling the pressure of time as I am starting to run out of it. Rushing whatever I could and dropping anything I couldn’t manage on time, I create a game executable.

I hit the submission button at 7.45pm, 14 minutes and 3 seconds before the deadline.

The result

What I have:

  • An animated character that can move, jump and float through 2D levels.
  • Collisions and level warps.
  • Very basic graphics.
  • 5 rooms:
    • A simple starting chamber with stable gravity, to introduce the basic walking mechanics.
    • A corridor with a gravity indicator in the middle; the first room to introduce changing gravity.
    • A room with a ledge – the first challenge where the player is expected to time their jump to the gravity change.
    • A room with a broken panel emitting sparks. At first, the player is blocked by a plant and can observe the behaviour of sparks. Once gravity is switched off, sparks are emitted in all directions and hit the plant, burning it and freeing up the path ahead. However, the player is now unprotected and must time their next jump to avoid the second wave of sparks.
    • A room with a gas leak. With gravity switched off, sparks are able to reach the gas and produce an explosion (albeit with a missing sprite).

What I’m missing:

  • Levels, levels, levels. Specifically, challenges that those levels could present. This is, in my opinion, where the “game” falls apart – as it is over before the player can do anything interesting with the floating mechanics. There was a final level planned where the player would need to launch themselves into an explosion.
  • Any additional signifiers of changing gravity – I had hoped to add a screen tint, for example. So far, this is only communicated through small monitor objects and the player’s hair, but those signals do not convey the change well enough and might seem misleading (monitors are not interactable; and the change is not about the player, but the environment).
  • Sound in any form.
  • General movement polish. In its current state it does not feel particularly good.

Lessons learned

  1. First thing when setting up software – check the autosave settings. Save your poor heart. Apparently, Inkscape is not suppose to have autosaving enabled by default – but by some miracle, I found a temporary backup file hidden in my user data.
  2. Think of a small scope, and make it smaller. I planned to make the game minimal from the beginning and still got carried away. This made me run out of time which had an impact on every other aspect of the game and prevented me from making the central idea clear. At the very least, features should be prioritised from as early as possible. This is obvious for large projects, but it wouldn’t have hurt me to apply it to a 48 hour one, either.
  3. Having a “kind of” idea how the game was going to play and refining it as I went along had a negative impact on the experience of playing it. Designing levels on the fly wasn’t bad given the time constraints. But I could have used a more solid understanding of what I wanted from player movement.
  4. I clearly needed more experience creating tilesets. The end result was simply poor, with unintended lines and missing corners. I am glad I tried creating my own graphics, but it came at the cost of valuable time that could have been spent on more levels.
  5. Speaking of levels, I underestimated how much time it would take to create them. I believe I implemented things in the right order – following the creation of tilesets and essential objects, levels were compartatively quick and easy to create – the problems with tilesets and final rush towards the deadline made me have to cut too many corners.

The above issues made it difficult for the central idea to show, and with barely any challenge and clear lack of polish, it has earned itself a solid 2 stars out of 5 on the submission page, after 20 ratings from kind strangers. To be honest, I was hoping for 2.5.

In addition to the above, my experience with GameMaker Studio 2, although generally positive, gives me the impression that I would need top be much more careful about project organisation. The lack of public and private scoping, or interfaces (alrernatively, multiple inheritance), present a different paradigm than the one I am used to and I have concerns that projects can grow very messy, very quickly. For projects with a small scope though, it seems perfectly fine.

So – did I enjoy myself? Absolutely. Not all the time throughout – I got tired, even discouraged. But I’m very glad to have participated. These are certainly rough beginnings for me – but thatnks to that, the experience is invaluable. I am positive that next time I can do better.

2 thoughts on “First game jam reflections

  1. Hi, fellow MA here :-) Nice write-up. I sadly didn’t get to participate, but will definitely next time. In fact, I have a feeling we have many jams coming our way over the next 2 years…

Leave a comment