The past

I grew up watching my older siblings play Atari, Sega and Nintendo almost on a daily basis, which obviously sparked my love for video games as well. In addition however, the thought of being able to put my own fantasy world behind the TV screen quickly became much more desirable than the possibility of flying through space as an astronaut. I was probably around eleven when I started creating Super Mario World rom hacks using Lunar Magic. Even before that, I made my siblings play custom Giana Sisters levels. Then, the RPG Maker era began. First it was only clicking with RM2k and RM2k3, but with the arrival of RMXP, I got introduced to the Ruby based scripting language RGSS - my first encounter with code. I went on spending my entire childhood with this application...

The years after that have basically been all about JavaScript. Lot's of JavaScript. While building websites all day, I eventuelly learned that JS could be used to build games as well. Since however I want to comprehend every bit of Game Programming and preferably have a complete mental map of the entire code base of my project, I avoided frameworks and engines, and went on by building my own game engines in JS. In the indie scene, that's considered a common mistake by many, as in most cases, writing your own engine leads to you never really getting to develop an actual game. And having gone through the process, I kind of have to agree: Aside from a little multiplayer version of Pong (just send the same link to one or several friends for the game to start), I have little to show in terms of finished games. I am however convinced that just by considering all the things I learned from this process, time certainly hasn't been wasted.

The present

A few months ago, I dived into the world of low-level programming with C/C++, and I am really enjoying it. Most of the reason I haven't done this earlier has simply been the fear of not being capable enough, driven by the general consensus in the indie scene: "There are incredible people working on this stuff for years already. Just don't reinvent the wheel!". And while this is true, I still came to the conclusion that it is absolutely worthwhile to learn low-level programming.

You see, those incredibly powerful general-purpose solutions are brilliant to get something moving on the screen with very little effort and time, but as time goes on and your project slowly matures, you will most likely reach a point where you realise that the developers of the engine you use have made certain assumptions and design decisions that turn out to be really really difficult to get to work hand in hand with what you want. And you never really know what it is that you want from the get-go: The true wants and needs of yourself and your project are always something you figure out only after getting your hands dirty, and not during some sort of initial planning phase.

Now with that, you find yourself in a situation where you have put LOTS of time and energy into reading the documentation of the engine you went with several months or even years ago, but for some reason, it seems to become harder and harder to work with said engine. More and more frequently, you feel like you have to fight the 3rd party code with work-arounds and other nasty hacks. That's not a good place to be in.

Compare that to someone who went with his or her own implementation. It's true that this person most likely needed much longer to take off, but he or she is now much more powerful for it, and with that power, it is almost impossible to run into a dead-end like the poor guy of the previous scenario did. Also consider that with your own implementations, your code will always be 100% optimized to tackle the one problem you actually want to solve, whereas the implementations in general-purpose solutions are designed to be able to handle has many different use-cases as possible, which in turn brings obvious costs in terms of readability and optimization potential - basically MUCH more code than is required to solve your problem. Furthermore, the comprehensive understanding of low-level implementations is even relevant in high-level scripting, because you know what the computer does at the end of the day, and that's always useful when writing program code.

My conclusion: If there actually is a perfect engine match already, like for example, I want to make a traditional ego-shooter void of unique features, then - obviosuly - it's best to go with the solution for exactly that one problem and use the existing engine. However, in any other case, I will always be better off writing my own stuff.

The future

I guess it's obvious that I plan to keep going with low-level programming: A game engine written in C++ or Nim to be specific. I already made quite significant progress. Next up is going to be an implementation of a OpenGL renderer. I already implemented both 2D and 3D rendering with WebGL in the past - so that shouldn't be too hard.

But where should I draw the line? Obviosuly, I am not going to invent and build my own hardware, nor do I want to build an Operating System from scratch. So what's the platform-layer going to look like? I actually already implemented a platform layer for Windows - which has been a great learning experience and really wasn't all that difficult - however, I am still planning on going with the Simple DirectMedia Layer for my multi-platform support. I don't feel like SDL obstructs too much control, and since otherwise I'd have to deal with the respective platform APIs anyways, I am fine with this extra layer between me and the hardware.

I will then build a topdown 2D action game on top of my engine. It's going to be about exploration and risk. Inspirations are Terraria, Stardew Valley and Hyper Light Drifter to name just a few. The design is already pretty solid, but of course we are fully aware now that the actual design is taking place only mid-development. ;)

Eventually, my goal will be to join a small group of like-minded developers and to start working on a larger project together (I am in desperate need of some artist friends).

At some point, I'd like to toy around with VR as well. Pretty exciting stuff!