Metro-Engine screenshot
Metro-Engine screenshot
Metro-Engine screenshot
Metro-Engine screenshot

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.

role icon

Engine Programmer
Console Programmer

team icon

7 people

time icon

8 weeks

platform icon

Windows
Nintendo Switch

platform icon

Custom Engine

platform icon

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.

Code snippit of the resource manager unit tests using Google Test and Google Mock