I have decided to do a thing. A big thing. I'm going to make a game completely from scratch. Start to finish. Not only the game logic, but the engine which runs it, as well as the art. Possibly even the music.
It's something I've wanted to do for years, and I think I am finally ready to do it. It is going to take a long time, and will be extremely frustrating, but it is time.
I do not yet have a full vision for what the end product will be yet, but I do have a lot of inspiration and a general direction. I'm planning on doing several things:
- Keep a running log of the entire process from start to finish. Some of it may be here, some will likely be in the form of video down the road, but it will be logged along the way. At least on a high level. I will try to keep here updated as much as possible.
- I will be working on all aspects of it, as mentioned above. This will include the engine, asset pipeline/tools, story, sound, music, art, modeling, texturing, game logic... all of it.
- I will be documenting my findings and things I learn along the way in hopes that it helps someone who someday wishes to do the same.
- The tech stack, at least initially, will be pretty straightforward. It will be written in C++, use OpenGL as its initial backend (with a flexible design to allow the plugging in of other APIs down the road such as Vulkan), and initially be written for Windows, but with other platforms in mind. OS and Renderer API logic will be abstracted from the rest of the engine to allow for easier porting later on.
Where I am at right now
Currently, the project is in the infancy stage. This is probably the most progress I'll make between posts going forward. I've created the project in Visual Studio, split into two main parts - the engine core library and a "sandbox" application that consumes it.
I have created most of the super low level systems already:
- OS Abstraction Layer - includes file system, windowing, threads, system console, and a graphics API loader for OpenGL.
- Custom Memory Allocators
- Custom String class and hashed StringId class for fast comparisons during runtime
- Logging/Low-level debugging and assertions (and even some very basic unit tests)
- Engine Configurability via Game Variables (or GVars) - globally accessible from anywhere in the system
- Basic Math Library (vectors, matrices, etc.)
- Containers (List, Stack, Queue, etc.) - designed to be lighter weight than STL types.
- Begun work on the renderer.
As of the time of writing, the engine has a loop, is capable of writing to the console and opens a window. The OpenGL backend is also capable of clearing the screen to a solid colour for now (woooo, big deal, right? Well it's a lot more than you think to get to that point alone when you roll all the platform code yourself).
Anyway, the Game Engine being built is called GameKit, and I do not yet have a name for the game that I'm ready to share. Hopefully soon. To document my progress, here's the very first screen shot I've taken:
Again, nothing impressive yet. But, looking back on this in a few years will feel rewarding (I think/hope). Anyway, off to coding now!