Playing games almost all my life was meant to lead to a career in video gaming. It so far hasn’t happened. But I’m proud to announce that I have completed my first Godot game. This was part of the Open Jam 2022. The objective was to build a game using only open-source software and assets. So before I could even get started I needed to select the core of the game and learn it. Enter Godot.
Godot Game Engine
There are many ways I could build a game. I could programme the game from scratch using one of many programming languages out there such as C++. Upon investigation, I only had 2 weeks to learn the basics of the language and choose a framework. Now I am pretty quick at learning new languages now (coding languages only, I’m awful at other spoken languages). But there was no way I could pick up a language and then learn the ins and outs of a framework in the 2 weeks. So my next option was a game engine.
There were many engines available. There was an RPG Maker open source clone, however, that only worked on Linux. I wasn’t going to go to the hassle of picking a version of Linux and then learn the new software. But, it is something I will try in a few weeks. As I now have a spare laptop. Then I found Godot. Godot is the closest game engine you can get to Unity without it being closed. It allows you to create both 2D and 3D games.
Godot isn’t limited to a game genre. The only downside was that compared to Unity and Unreal, there weren’t a lot of resources to learn the tool. And debug any issues I may come across. But I was running out of time so I search YouTube and followed the below tutorial:
By the end of the 2 week learning process I managed to get pretty far in the tutorial confident enough to be able to create a 2D platformer of my own.
Game Jam Begins
On the 28th October at 18:00 GMT, the game Jam began. I logged straight on to the Itch.io website and on to the game jam (Click here for a link) to find the theme:
If we rewind a week before the Game Jam, I didn’t realise there would be a theme. So I had tons of ideas of the game I wanted to make. One of them was a landlord chasing his tenants for rent. As the game progresses, if you maintain a high score the world starts to stagnate and it becomes harder to collect rent. While if you have a low score, the end game becomes a lot easier and you get a nicer ending. But Light in the Darkness doesn’t really fit into that game. Though looking back I could have taken the theme metaphorically.
In the end I came up with a platformer where the player has a torch (So original), which loses charge quickly. There are batteries that can be used to recoup your charge and keep the light on. But because of how dark it is, it would be very difficult to maneuver onto platforms. I did have an idea that once the torch went out, more enemies would appear, but I never got that far.
One of the constraints of this Open Jam is that you had to use Open-Source assets or your own. I knew that if I restricted myself to just my own assets the game would never get completed in time. So instead, I designed the main character myself. But I would externally source the rest of the assets graphics and sounds. One of my favourite sources of assets was opengameart.org.
This sped up the game development, and all I had to then do is code the movement of the character and how the player interacts with the world. Which took a long time to get right.
I ran into multiple issues while coding the game. The torch mechanic was the most challenging. The first issue was making sure that the rest of the world remained dark. After some tinkering and a lucky Google search I found CanvasModulate node could be used to turn everything one colour. Then, when a Light2D node was applied the character could only see up to the end of the light beam. It worked a treat. However, there were some issues with shadows being cast when they shouldn’t have. I’ve identified the issue now, but back then I didn’t have the time to resolve it.
The next part was trying to apply a timer function to the torch. There’s a timer node for that, so that should have been simple, right? Well, yes and no. The real issue was that once you entered the cave area, the torch wouldn’t turn on until the timer finished. Easy turn the torch on by default in the scene node and it should be fine. Except I used the variable that determines the strength of the light instead of just turning on the light. I figured it out eventually.
The next issue I had was that when the player’s character came into contact with an enemy blob, they should damage and eventually kill the player. I checked my code multiple times and it still wouldn’t register as a hit. The issue was that the 2D collider did not stretch far enough so that it would trigger its signal.
My final issue was making the enemy AI somewhat smarter. When an enemy gets to the edge of platform they should turn around, but by default they don’t To get this function you need to use a Raycast2D. Raycasts check for collisions, and if there is no collision, it then sends a signal that can be used to trigger events. I followed a tutorial and the enemies just span around constantly. I checked the code, the position of the Raycasts2D, the platforms masks, etc. But I made the dumbest mistake. I didn’t turn the Raycast on. So it was constantly signalling it can’t detect a collision because I did not turn it on.
The Final Product
Due to the time constraints, I limited the game to 4 levels, and only one enemy. I’m pretty happy with the way it turned out. All the mechanics seem to work. I haven[t received any comments that there were game breaking bugs. And it just works. Ideally, there are some changes I would make if I had more time. Such as a GUI and more levels. But that’s not the point of this game jam. It was to use open-source applications and assets to make an open-source game. If you want to check it out, see below:
Godot and Game Jams
If you want to get into game development I would recommend taking part in a game jam. By having deadlines it has helped me finish a game rather than constantly update one and then drop it when I get bored. Godot on the other hand I have mixed feelings for. The platform is still quite new compared to its competitors. But it stacks up quite well against them. I’ll be more than happy to use it for my next open jam. But possibly that’s it.
I’m currently learning Unity and will see how I feel about that game engine. I’m also going 3D rather than 2D, as I feel like I’m a better sculptor than a 2D artist. But this game jam has certainly sparked my interest in game development. Maybe it will be my future career?