In my previous post, I mentioned that I have recently started making a simple game without an engine, using only C++ and the SDL library.
For a quick refresher, here are videos of the prototypes I have been working on.
You can also check the code for all of these prototypes on this GitHub repository.
Why am I making a game?
Well, for a while now, I have been really interested in game development. For years, I followed a lot of game developers on social media and their work has always fascinated me. Additionally, as someone who likes art, storytelling and programming, game development always offered a great blend of all of my interests. So, making games has always been one of the goals I have aspired to achieve.
Earlier this year, I finally decided to start pursuing this dream. My first attempt at game development was a simple flappy bird clone that I developed, but haven’t released yet. I have some interesting ideas for this clone that I would like to pursue at some point, but I wanted to put it on hold for now and start with a completely original game.
This is when I came up with this idea of a simple game for PCs and mobile phones, where the player tries to keep a ball from falling. Over time, the ball’s size gets smaller making it move faster. The goal of the player is to try and keep the ball as long as possible. It is a very simple idea, but it seemed like a fun simple game that people could just play to pass some time.
But why not use a game engine?
Let me start by saying that there is nothing wrong with using a game engine. In fact, for a beginner like me, using a game engine is probably the better choice for developing and releasing games relatively quickly.
I actually developed the flappy bird clone using the Godot game engine. The process was very smooth and getting the game done literally took a couple of hours.
On top of that, Godot as an engine has a lot of qualities that I like. It is open source, which means that there is no chance of repeating The Machinery fiasco. It also means that I can easily check and edit the source code if I like.
Additionally, Godot is a small engine compared to something like Unity or Unreal, two very powerful but very mammoth-like engines that take ages to download and start. Godot, on the other hand, comes in a 37MB binary that downloads and starts in seconds.
Why then have I decided to drop Godot in favour of writing a game mostly from scratch? It all came down to personal taste.
I like learning things on a deeper level. I don’t enjoy taking things at face value and just using tools without really understanding them. Using a game engine abstracts away all of the things that are needed to make a game. That would have made the whole process of making a game less fun to me.
One might argue that, since Godot’s source code is available, I could have used it as a learning resource and avoided making my own engine. This may be true but I find that I learn best by doing. Building a game from scratch would teach me a lot more than just looking at the source code of an existing engine.
The tech I am using and learning resources
As I mentioned above, I am developing the game using the C++ programming language. I was already familiar with C++ before I decided to use it for the game, but I worked through the Learn C++ material to refresh my knowledge. I personally find that written material tend to offer a lot more depth than video tutorials. But if you prefer video tutorials, you can start by checking some of the courses offered by freeCodeCamp.
Next on the list of my tech stack is the SDL library. SDL is a library that offers cross-platform low level access to input and output devices such as mouse, keyboard, sound, etc. It works on Windows, Mac OS X, Linux, Android and iOS. This variety of supported platforms is what made me choose SDL.
In order to have my game available on several platforms, I had two options:
- Write my own platform layers for each of the platforms I would like to support. This would have been a great learning exercise and something that I would have enjoyed a lot.
- Choose a library like SDL that offers me these platform layers and rely on it.
For the time being, I chose to go with the second option. As much as I would have enjoyed writing my own platform layers, it felt like it would be too much to take on, while at the same time trying to learn how to build an entire game from scratch. So, I decided that it would be better to use SDL for now, and revisit the platform-specific code at some point later in the future.
If you are interested in learning more about SDL, you can visit their wiki. However, if you want step-by-step guide to using SDL, I highly recommend LazyFoo’s tutorials.
Before you go…
This is just the first of many posts to come about the game. I will try to document the process of making this game as thoroughly as possible, so make sure to keep an eye on the website, as well as my social media (Twitter, LinkedIn), for future posts.