Over the years, I have embarked on various programming projects. Quite a few of those were the result of spontaneous thinking, none of them however, saw the light of day. Why? Because I moved to the next wonderful and shiny idea. Over the past couple of years I have managed to reign myself in and have managed to focus on this one project solely, and this post is about that project, Project Symmetry. Sounds pretty fancy right? Well, not quite.
What’s in a name anyway?
The naming of this project was actually the result of me not being able to come up with an interesting or descriptive name and there are two reasons for that. The first, I feel most programmers will relate with the experience that naming things can be really hard sometimes, you are constantly naming imaginary constructs and sometimes you just can’t think of something that is succint enough to do the job. Consequently, you end up with names that might make sense in a certain context but end up not being very descriptive.
This brings me to the second reason, I started this project with the intention of learning more about C, low level programming and getting closer to the metal. I abandoned the project I was already working on at the time and started working on this project which would replicate whatever I was already doing but I intented to do most of the things from scratch. So that’s where the symmetry in the name comes from because it would be a clone of this other thing, get it? Yeah, it’s contrived I know but I had to call it something and this was good enough. That’s all great but you might be wondering…
What does it do?
I’m glad you asked. I’ve always been fascinated by video games and how they are made. To the uninitiated, games are made using complicated software called Game Engines. These days, most people use off the shelf game engines like Unity or Unreal to make games. On the other end of the spectrum, we have people who would prefer to write every single line of their code by themselves. I fall somewhere in between these two extremes. While I like writing my own engines I’m interested in some aspects of it more than others so I end up incorporating some pre-existing modules like using a physics library for detecting if objects in our world are colliding and how they should respond to those collisions. Having this modular approach allows me to focus on things I find interesting like rendering and the over-arching design and flow of data from one sub-system to another.
I try to keep most aspects of the engine and the code as simple as possible, only adding complexity where necessary. Choosing to write in a spartan, bare-bones language like C really helps with that. It does not have a lot of features and if you really want something, you’ll just have to write it yourself even containers like a resizeable arrays or hashmaps do not exist. To be fair, I did break some of these guidelines over the years and parts of the code-base reflect that but on the whole, I’d say that the code is very lean and although it could do with some improvements (isn’t that a truism with regards to any creative endeavor?) it’s my best effort to date.
So far I’ve only been speaking about the engine but not the actual game. What’s the game about? That’s the thing that I’ve always struggled with and for a long time, I worked on little “engines” that weren’t about a particular game. But that’s the same as travelling without any destination in mind and sure, it’s about the journey(getting better at understanding and creating games and game engines) and not the destination(some particular game) however that is also a good recipie to not get anything done. Creating even simple games can become a non-trivial undertaking and going in without any kind of plan or direction means you’ll keep wandering without actually reaching anywhere.
And that’s essentially what would always happen and even ended up happening in this instance until I decided I should have some sort of direction to aim towards. All software is created to solve some particular problem and the characteristics of the problem define what the solution is going to be and I feel the same goes for engines. I’m aiming for a game with very simple mechanics, walking around in first person and solving simple puzzles in order to progress to the next area. I’m also aiming for very simple visuals partly due to my lack of talent in that department but also because I feel that constraints can result interesting things. So all in all, a game similar to quake in looks and gameplay but without all the violence.
I hope to keep writing more about the project here as I add more intersting things to it. At the moment I’m at a point where I’m very close to really flesh out the gameplay related aspects of the game. Stay tuned, I have a lot more about this project in the pipeline.