My first game jam (with an intro to Godot)

on 2024-05-01

In an unexpected turn of events, I found myself participating in my first ever game jam. I never tried to make a game before, I wasn't even a frequent gamer until a year or two ago. So how did I go (in two-ish months) from nothing to making my first ever working prototype in Godot for the Beginner's Jam April 2024?

First of all, if you would like to check out the game you can find it here. It runs in the browser and I recommend using Chrome to run it (it's the fastest one to load, although the game does work in any browser). Alternatively, you can access it from the widget below (it's not an ad, but the world we live in unfortunately made it so any widget like that looks like an ad).

Why make a game now?

For a bit of context, in the past few months I've tried to explore as many avenues as possible - both in terms of career options and just things I've wanted to try out for a while. One of those things I've been pursuing is programming, in some form of another. I have no dreams of becoming a software engineer, but I do like the challenge of programatically building something. I am also a very visual person. Programming in the classical sense unfortunately doesn't support that part of my learning experience, so I've more or less gravitated towards visual applications of programming. This is also the reason I found p5js to be so cool (and you can check some of my work with that here).

Whilst watching random YouTube I stumbled upon this video, a short tutorial for building a 2D platformer in Godot. Now, my husband and I have been joking for a while about one day making 'an indie game' – it ticks off all the creative and technical hobbies we have, from programming to music, art, design and everything in between. I would say that the video was the catalyst for finally going down the path of trying to build my own game. The same day I downloaded Aseprite (a beautiful piece of software for making pixel art) and started my adventure with this new project.

some snippets from the finished game

About Godot

Godot is a free and open-source game engine, and honestly very beginner-friendly. It uses GDScript as its scripting language, but it has integrated support for C# and bindings for a variety of other languages. I'm not going to go too deep into Godot's philosophy or inner workings (you may read about it on their website), but rather I will talk a bit about my experience with it.

My only real programming experience so far has been with Python, and in that regard GDScript is very easy to pick up since the syntax is similar. In Godot, everything is a node, and each node or a collection of nodes can become a scene and have a script. Different types of nodes have different methods they inherit from their parents. The way Godot works is very OO (object-oriented) so I had my first learning hump while trying to understand inheritance and how the nodes connect to each other. If you're already experienced with classes and OOP, you won't have any issues.

Some general notes on Godot:

| • Syntax is easy to pick up and documentation is pretty good;

| • However, if you are used to a bigger engine like Unity, you should know you won't find as many detailed tutorials (although that is changing fast as more people adopt Godot as their preferred engine);

| • The UI is quite intuitive and snappy, but you can also do everything you need with code (which is what I like to do for the most part)

the 2D editor in Godot, you can see the scene tree on the left hand side

The trials and tribulations of learning game dev

Armed with curiosity, patience and a good tutorial, I started working on my own thing. I've implemented everything the tutorial showed me and a bit more, replaced the art with my own assets (which I meticulously made in Aseprite) and I was good to go with my basic platformer. From there on for about a month I tried to explore all kinds of new mechanics and elements that would enrich my very basic game.

1. I added background music and sound effects. The difference it made was incredible! It taught me a lot about the importance of feedback when designing any experience. My pesky background in UX kind of took the lead on this one and allowed to me evaluate the progress of my game with a design eye, so to speak.

2. I tried making up new mechanics such as picking up a 'balloon' or using some sort of 'slide' motion. This was tricky and it's something I'm still working on as I learn more about how physics work in Godot (and how I can use that to my advantage).

3. Order (and priority) of operations is very important! While true of everything programming related, with the added complication of frame-rate, the order of processes is crucial in ensuring the event gets triggered at the right time. If two things are happening at the same time, but one blocks the execution of another, you might be in trouble (Actual case - I added SFX to a button click, the button was supposed to change the scene. Because the change of scene happened so quickly and that process took priority the sound of the button clicking was cut short)

4. Good level design is at the sweet spot between difficult and fun. After finalising the mechanics, I took a good amount of time tweaking the position of every tile in my level to make sure that each part was challenging (but doable) and rewarding. If it's too difficult to achieve, it becomes incredibly frustrating and downright bad. If it's too easy, there's no deep sense of satisfaction when getting to the other side.

this is from the practice game I worked on before the jam - the assets are all mine

The actual Game Jam

My husband encouraged me to find a game jam so I can put my skills to use in a more organised setting, with a deadline. And so it happened that the Beginner's Jam in April was just about to start, so I did the only imaginable thing - signed up for it! It has proven to be a great way to hold myself accountable and do a little something everyday to arrive to a finished product.

The game jam lasted exactly one week, and so I started the project with a detailed(ish) plan of the work I wanted to do. The theme of this jam was 'Going Deeper' and in an effort to be somewhat original but not burden myself with unrealistic expectations I choose to do a little platformer about a mouse who goes down in a well to retrieve a lost toy.

Planning stage

I spent almost the entirety of the first day ideating and planning, with a rough timeline for when I wanted to get things done. Cue a nice hand drawn chart of the stages of development – I chose to focus on the programming first (my least developed skill) and leave the art last, whilst thinking about the overall design of the game as I went.

I blocked out:

  1. The development elements (mechanics, levels, transitions, etc)
  2. The design elements (level design, UI, sound, colour scheme)
  3. The art elements (colour palette, assets, textures, tiles)

some photos of my process - it can be a bit messy, but it's good for 'seeing' the thinking

With these laid out I commenced a week of trial and error, with many frustrating bugs and very rewarding challenges. Out of it came Downwell Run (a cliche name).

In the end, the backend was a bit hacky (when is it not really?), but the game was working, it looked somewhat polished and I felt ready to show it to the world.

Note: even if I wasn't ready, I would have uploaded it anyways. Part of the challenge is also committing to crossing the finish line, even if the project is not ready or polished, and accepting the feedback as it comes.

Key takeaways

I learned a lot. It was a great experience not only to actually finish and deliver one fully-functional level, but also to get to review other people's work. The community around the jam was very positive, encouraging and helpful, and I strongly believe it is environments like these that foster great work and creativity.

After the results of the review process (which was all done by the participants for other participants) I came in at number 18 out of 84 entries. For a first jam, I was incredibly happy I even managed to come in near the top and that was a lovely morale boost. However, more than the ranking, I was positively surprised by the amount of detailed feedback I received on the game. I was even more happy because all the suggestions I received were things I was already thinking of improving, which led me believe I was on the right track.

Am I going to do it again? Yes, absolutely. It was an exciting learning opportunity, and while I was shy and a bit worried at the beginning, I am now more confident in my abilities to deliver.

So, the takeaways:

1. Plan VERY WELL and don't overreach. It's great to be ambitious, but when you put too much on your own plate you are bound to not finish anything. Some of the greatest games I played were simple, but very well done.

2. Participation is very important even if it's just to motivate yourself to get something done. It's also good as a comparison tool (not the bad kind, the kind by which you evaluate yourself to see where you are among the people with your same level and find areas of improvement).

3. I liked doing the art and design the most, but I'm growing ever more fond of programming with all these new visual tools.

4. I have the utmost respect for game makers, from small indie developers to big studios, artists, designers and programmers alike. Making games is an all encompassing process that takes a long time and a lot of effort to get right.

We often take for granted that things just work in all the games we play. Things just work because someone out there spent a ton of time getting it right , in a way in which you as the player don't even notice the interaction, it just happens. What I've learned, philosophy of design wise, is that something (anything) is designed well when you, the person interacting with it, are not burdened with the complexity of its inner workings. While I am a maker at heart and I want to know how everything works, I also believe that when the goal is to let someone play and immerse themselves in a different world, they should believe it just works. It's part of the magic.

'Till the next game!