
Metroidvania Game Engine
The project was developed by a team of students, including myself, designed with a focus on spline-based level creation. The engine emphasized ease of use, allowing designers to create dynamic, interconnected spaces.
The engine was developed as a cross-platform game engine for both Windows and the PS5.
-
Role: Tools Programmer
-
Responsibilities:
-
Spline editor tool for level design
-
Enemy AI
-
-
Team size: 7
-
Tools/Language:
-
Custom engine
-
C++
-
Final Result
To showcase our engine, we created a small demo where all features were showcased. The demo can run on both Windows and the PS5, but I am not able to share the PS5 footage due to an NDA regarding the devkit. All the geometry in the level is created using splines.
Spline collider
-
Dividing the spline into evenly sized quads was challenging because a straight segment length doesn't match the curved spline length.
-
After reviewing how Unreal and Unity handle it, I allowed users to set a desired segment length.
-
Internally, the algorithm finds a segment length close to the user’s input that results in even quads.
-
This ensures consistency for texture mapping.
-
The quad width is also adjustable for creating thinner or thicker splines.
Creating a level design tool using splines
My main responsibility was developing the spline editor, crucial for designing interconnected levels in a metroidvania.
-
Used cardinal splines for their intuitive control points.
-
Users can draw a spline and then add, remove, or move points to modify it (Fig. 1).
-
Includes settings for tension (Fig. 1) and quad segmentation length.
-
Objects can be snapped to the spline and remain positioned even after edits (Fig. 2).
-
Splines are also used for enemy patrol paths.
-
The whole workflow can be in seen in Fig. 3.
-
I did not work on texture mapping for the spline.
Fig. 3
Fig. 2
Fig. 1
Enemy AI
-
Managed enemy behavior using the previously developed Behavior Tree Tool (Fig. 1).
-
Created two enemy types: one that chases the player until contact is lost, and another that stays on its spline path and shoots the player (Fig. 2).
Fig. 2

Fig. 1