METRO ENGINE
The Metro Engine is a custom engine written in C++ designed for metroidvania games.
The engine makes use of various libraries and supports windows machines as well as the Nintendo Switch console.
The goal of this project was to get more familiar with engine designs while trying to focus on a specific
genre of games.
Engine Programmer
Console Programmer
7 people
8 weeks
Windows
Nintendo Switch
Custom Engine
OpenGL - FMod
Box2D - ImGui
gtest - gmock
Switch
One of my most interesting tasks was to add Nintendo Switch support to our custom engine.
As I had never worked with this console before, I was very excited to see if I could get
our engine to run on it.
Since I was responsible for the entire implementation of the Switch platform, I struggled
quite a bit to get it working. This was mainly due to me having to rely on the documentation.
Despite this difficult challenge however, I was able to completely add switch support to our
custom engine and was able to use it during development.
Resource Manager
One of the more interesting parts of the custom engine that I worked on was the resource manager.
The challenge that I had here was to avoid loading in duplicate resources, and to make sure to unload
the resources that were no longer used.
To do this, we would make use of a resource database that would keep track of all the assets that were
currently loaded in. Before loading in resources, we would start with a check to see what resources
were already loaded in, and which ones were not.
After this was done, we would check which resources were no longer used, so we could start unloading
these. This was done by checking the file extension to know what type of unloader we had to call
within the engine. Once unloaded, a similar process would start that would load in the newly added
resources based on their extension.
Code snippit of the resource manager in C++
Unit Testings
Within the project, I had to make sure that each part of the engine that I wrote was stable
and did what I expected it to do. To make sure of this, I wrote unit tests that would go
over my parts of the engine and make sure that everything is in order.
To ensure that no parts of the engine would change the result of the unit tests themselves,
I also made use of mock classes that would set up the environment used for testing the individual unit.
The unit tests themselves were written using the Google Test API, whereas the mock classes made use of Google Mock.