Recently, I decided to go down the route of writing my very own video game engine. Now you may be wondering, "Why not just use one of the many game engines available to you via the World Wide Web?" and that's a fair question. I mean after all I could use:
Unity, Gamemaker, Construct, Godot, Unreal, Cocos2d, CryEngine, Lumberyard, Flixel, Gamebyro, Gamesalad, Source Engine, id Tech, MonoGame, RPG Maker, WorldForge and many, many, many, many more.
As many people better than myself has said, now is probably one of the better times to be able to create a video game. I mean the barrier to entry is low and no matter where your strength lies, there will generally be an engine that will work for you. Now I personally have no probelm with any of the engines I have listed, in fact way back in the day I mucked around in Gamemaker and eventually became "okay" in using Unity that I feel with some confidence if I spent the time, I could make a game. Except, I don't really want to make a game. Well that's not entirely true, I do want to make a game but I currently feel I'm not quite in the right space to make a game. I feel my time would be better suited elsewhere, more importantly, in how a game is made. I personally feel we're in this very odd time when it comes to the creation of software. It's always a race to release something that can be sold, we live in a time where we have more resources available to us than ever before in terms of computational power, but is currently being squandered with the creation of inefficient software.
This could be for any number of reasons and I don't think I'm particularly qualified to state a definitive reason, but I partially feel it's a case of some not knowing what's going on under the hood. Personally, I want to rectify that. I don't think about garbage collection, I don't think about the cost associated with calling a constructor for a variable, these are just things that don't enter my mind. However, if I want to become good if not great I feel this is knowledge that is very important to have some understanding of. Now for the most part, I could simply read a book but that's never really been my style of learning, I want to dive in and work on something see how everything ticks and have intimate knowledge over what is going on in my code base how my changes are affecting the program for better or for worse.
Work has already begun on the engine, this is just the first time I am actually documenting my progress. What I'm doing, what I'm learning and hopefully with throwing these things out there people can see my thinking, pick up on things or perhaps point me in a different direction should I perhaps be making a foolish mistake. I want to understand the technicalities of it all, I want to understand how to draw things on screen, create pathfinding etc. It won't be a short amount of time but I'm sure it will be an educational time.
So what will I use?
Currently I'm using C++ and have CLion as my IDE just to help me out a bit, which uses CMake to manage the build process. I have SDL2 set up to help with the windowing and input (for now) which also handles an OpenGL context. I have imgui integrated in already as a means to create quick and dirty dev menus and a console to track information, and do debug commands. I'll go in greater detail about the progress completed, how these things have been integrated in a later blog post.
This seems like a mistake.
Yeah. Yeah, it might just be. I'm hopefully going to be doing semi-weekly blog post (lets be real probably monthly) but I'm curious how this will go. Perhaps terribly, perhaps amazingly! Who knows!?
i do, it will probably be terrible