It is finally time for me to step out of the shadows and make my work public for the programming enthusiasts out there. Today I have finally merged one of the biggest PRs I’ve ever made to my engine and it is now in what I consider a useable state.
For the ones who have not followed me since before, welcome! This is a post that I produced in addition to my first devlog.
I am an aspiring indie game developer, for my indie games, I am developing my general-purpose game engine from scratch without any libraries. While working on my games and the engine I released it to a close set of friends and all of them gave me very positive feedback (in addition to a big bag full of bugs to fix) and mentioned that they felt very productive in it because of how easy it is to get started and make fast iterations on your project.
I always knew I sometimes wanted to release the engine but I didn’t know in what way or capacity but decided before I release it there are a couple of things I wanted to polish. This was mainly the UI system and the built-in renderer.
So what I’ve done is rewrite the renderer as well as the UI system for the engine to allow users to be more modular and not be as restrictive. The new renderer doesn’t force users to rely on it and users can use the OpenGL wrapper that comes with the project to write their things. Same with the UI system that I have prepared a more in-depth and lengthy post about.
My main answer to this question is that I want to learn, I want to open the black box and not rely on any “magic” instead I want to understand every single part of how a game engine works and with this engine, I want to encourage everyone else to also not be afraid and learn it just like me.
The engine is built in a low-level language C++ but utilizes a more C-like coding style for simplicity. This makes the codebase very lightweight and built in a way where you are not limited to modifying the engine for specialized games. This can be very powerful, while this is also possible in a game engine like unreal it has a much steeper curve while in Maraton you can modify the engine very quickly once you’ve grasped the basics.
I’m sure you can talk to other developers using their custom engine and they will say the same regarding productivity. They know every single part of the engine like the back of their hands and it does show when you’re going to produce and ship something. Maraton is a great oupportunity for developers that want to use their own engine to have a good base or starting point. There is nothing wrong with using Maraton for learning or as a stepping stone to start making your own specialized engine.
Above is a simplified diagram of the different submodules available in this initial release. I didn’t make it very fine-grained to keep it simple. In most cases, the APIs that you will consume is for the UI, Renderer, Debug, and Audio. The way these modules are documented is in their respective header files where forward declarations have been placed. I hope that for now, the function signatures will be enough to get a grasp of what the functions do but knowing that sometimes it is not enough I have also prepared a set of examples. I am also in the process of preparing some tutorials for working in the engine as well.
The examples itself is a list of example projects that links to source files that show in code how to produce what is shown in the screenshots. This is something I am going to build over time, my hope is also for other users to engage with the community and share their examples.
If you are uncertain of what you can produce with this engine I have examples published on youtube for two games built in the engine.
While this may seem simple I am also producing a full game called Brainroll using this engine that will be complete so the possibilities are not limiting instead very open for tinkerers to build what they want.
Moving forward I will have a different format of the release posts that is more focused on the changelogs. Full set of changes for the earlier versions also ship with each release of the engine.
My goal with this release and moving forwards is to build a community of like-minded people interested in developing games. I have created this engine as a base for people wanting to get into development and also created a discord server where I encourage people to post their questions and help each other learn and become better at what we do.
Moving forward I will also post new devlogs not only for the engine but also for my indie game. On my website, I will also produce more posts explaining the engine and valuable information on how to build interesting things.
If you are interested in supporting my projects, me becoming an indie game developer or just want access to my games as well as the Maraton game engine it is available to my patreons here.
You can also follow my work on theese other places: