MLAHelper – A tool for easier ML in Unity

MLAHelper is the shared result of me and my colleague Toto Christensen, as our Master Thesis. It is a suite made for Unity, particularly for project that make use of Unity’s ML-Agents package.

Due to the package’s lack of transparency regarding the inner structure of the agent’s model, the tool presents a clear visualization of such model overlayed on the same screen where the game is shown. Additionally, the suite provides its users with components and systems that speed up the overall setup process of ML-Agents in a project.

The main features are the visualization, the observation manager, and the action-mask manager.

The Old Ones – An immersive boss-battler

The Old Ones is a boss-battler top-down game with a deep focus on immersion. The art direction is heavily inspired by H.P. Lovecraft and the goal of the game is to eradicate ancient monstrosities that have been plaguing the lands.

The one presented in this post is a prototype of the game and its development was part of the DADIU Project, during which, the Creative Catacombs team (18 members) worked on it for 6 months.

My role in the team was that of Game Programmer and Audio Programmer and, given the time available, I was able to implement and work on a lot of different systems. However, due to organization issues among several team members, the end-product did not live up to our expectations and some systems ended up not being used. That said, I am still proud of these systems and I will proceed to showcase the main ones, particularly the HAESystem, the Ability System, and the Enemy AI.


The HAESystem (Hysse’s Audio and Event System) was a comprehensive system I developed to fit the needs of the Audio Designer of the team. At its core, it is an Event System that allows for easy creation and management of events in the game through an intuitive user interface realized with Unity’s Odin Inspector plugin. Once events are created in the Event System they are automatically visible by all of the Audio Components that can be slotted on objects in the game. This enables the Audio Designer to effortlessly add complex audio logic to game elements and tie said logic to events that can happen during the game. All of the Audio Components of the HAESystem interface automatically to the Wwise infrastructure, helping other programmers that don’t have any experience with it in achieving satisfactory results with their audio management. The system also enabled me to easily create an event-based animation system to simplify the work of our tech artist in building dynamic animations.


The Ability System was the second main system I worked on during the DADIU project. It consists of a modular interface in which designers can slot in abilities on the player character, change properties of said abilities and create combo abilities that use multiple sub-abilities in a row. This was achieved through the use of both Scriptable Objects and Unity’s Odin Custom Inspector. The Ability System was also connected to the HAESystem unlocking even more complex possibilities, such as abilities that go on cooldown until a specific event is fired in the game world, fire events when a specific ability is used, etc.


Finally, the Enemy AI was the last game element I worked on during the project, consisting of a modular system that allowed designers to visually edit the behavior of the enemies present in the game and add new abilities to their arsenal. The system also enabled designers to differentiate logic depending on whether the enemy is a normal encounter or a boss-fight. In case of bosses, the system would provide the designers with phase management, phase transitions, transition conditions, routines of abilities to fire in a specific order, delay and timeouts for transitions and abilities, and many other features.


Link to the game’s Itch.io page: https://dadiu.itch.io/the-old-ones

Giant’s Rest – A mystery-driven adventure game

Giant’s Rest is an unfinished prototype for a third-person adventure game that was created during the DADIU Project by the Creative Catacombs team. The protagonist of the game is nomadic forest creature that found itself lost in a forest. Last of its kind and aided by a small floating companion they find a gigantic seemingly broken robot at the heart of it. The goal of the game is to then find the robot cores and bring the robot back to life. The prototype also features a core that is deep underground, and the player will have to dig down in order to get it.

During the development process of the prototype I mainly worked on the character movement system and inventory, as well as the audio system that will later grow to become the HAESystem (see The Old Ones). I also implemented the main quest logic and the companion behavior to enable it to guide the player by hovering in the direction of the next core to pick up.

Relevo – Relaxing in the desert

Relevo is an unfinished prototype for a third-person game focusing around relaxation that was created during the DADIU Project by the Creative Catacombs team. The protagonist of the game is a gecko riding a floating stick through a deserted land accompanied by a soothing lo-fi atmospheric music. The stick has the power to control the ground beneath, being able to carve in it or lift it at will. The gecko uses this power to create ramps and slopes to drift on.

The prototype is majorly incomplete, but I still enjoyed working on the character controller and the terrain editing features. The character controller uses raycasts angled downwards from the stick to check the distance from the ground and add an upwards force to the stick to keep it floating. The terrain editing through the marching cubes technique also proved to be challenging but ended up being quite successful in the end. The real problem was the lack of polish in the interaction between the stick’s ray-casts and the low-poly slopes and ramps that the terrain editing creates.

Tempest – An atmospheric walking simulator

Tempest is an atmospheric walking simulator / interactive fiction game created in Unity during the World Game Design course at I.T. University (ITU) in Copenhagen, Denmark, 2022. The game was completed over the span of 3 months by a team of seven students. It is meant as a demo to showcase the potential of its atmosphere and it lasts for about 20-30 minutes.

My role in its development was that of a Game Programmer but due to the reduced size of the development team I also ended up helping in other areas of production.

  • I worked on the character controller and the inventory system for collecting memories.
  • I helped in designing the narrative and world-building of the game.
  • I implemented the interaction system and the event system that drives it.
  • I worked on the player UI and the menus in the game.

Link to the game’s Itch.io page: https://neenn.itch.io/tempest

Bézier Drive – A time-trial race game

Bézier Drive is the resulting game from the Game Programming exam at the IT University of Copenhagen. I worked with my colleague Toto Christensen in order to build a time-trial car racing game.

The game was built on a custom engine written in C++ that offered the bare minimum to render meshes and update them, so we had to build our own physics system. After the physics system was set and ready we created a controller for the car that handled all of the car’s physics. Once the car was able to move around and drift, we created a Bézier-based map generator that would create random tracks and checkpoints for the player to race in.

I AM HAPPY – A Narrative Heavy Roguelike

I AM HAPPY is a project I worked on as a Game Programmer during my MSc in Games, consisting in a top-down rogue like with heavy emphasis on its narrative aspects. The story follows Eve diving into her own mind and “literally” fighting her insecurities and fears.

The game was completed over the span of 4 weeks, during which I worked on different systems:

  • I started with the character controller and the ability system, allowing the player to dash over gaps and obstacles and shield themselves from incoming projectiles.
  • I helped tweaking the projectile controller as well as creating new patterns for the projectiles themselves.
  • I implemented the inventory system and the stats manager, which enable the player to collect power-ups and get stronger throughout the run.
  • I designed plenty of different rooms via a map-builder tool that was implemented by other members of the team
  • I worked on the enemy controller and the enemy AI in general to allow for an increasing difficulty whenever the player beats a level.

Link to the game’s Itch.io page: https://salomes-crescent.itch.io/i-am-happy

Tankoop- A multiplayer cooperative VR/PC game

Tankoop is the results of my Bachelor’s Thesis and it consists of a multiplayer game that connects two players from two different platforms (being VR and PC) in the same lobby.

The PC player has a clear top-down view of the game area and is in charge of controlling a tank around the circular map. The VR player impersonates a soldier in the tank’s turret, and has a first-person view of the game area, making it much more chaotic. The VR player is also able to aim and shoot with the turret.

The goal of the game is to have the players coordinate in order to survive the multiple calamities that appear as the match goes on. To each calamity a floating sphere is connected, floating around the map, out of the PC player’s sight. The VR player has to spot these spheres and tell the PC player how to turn the tank in order to shoot the sphere and make the calamity disappear. There are also calamities only visible by the PC player and the two will have to work together to overcome these challenges.

The main challenge of the game was setting up the networking, since it was my first time approaching multiplayer experiences. Fortunately, Unity’s Mirror package came in handy in doing just that and simplifying the whole networking process. Another challenging aspect of project was the VR side of the game, which was mainly reduced by the great VR support of the Unity engine.


The following is the Bachelor’s Thesis, though it is unfortunately in Italian.