body { background-color: lightblue; }
top of page

About the project
___________________________________

Epilogue is an FPS roguelike game where players can discover weapon upgrades, combining and mixing them to craft powerful arsenals. These upgrades manifest as shiny objects scattered throughout each level, ranging from those in plain sight to cleverly hidden ones

Project Info

  • Main roles: Systems programmer and AI QA

  • 4 weeks in September 2023

  • Team Size: 9

  • Unreal Engine 5.2

About
Wave Manager

Wave Manager
___________________________________

In the early stages of development, I envisioned a roguelike experience with intense enemy encounters. To bring this vision to life, I implemented a robust system that dynamically spawns enemies around the player. This system was designed to be modular, allowing for easy integration with additional systems alongside the Wave Manager.

​

My decision to undertake this task was driven by my previous experience in a similar domain, seeking areas for improvement. However, the process was anything but simple. I engaged in numerous revisions and significant refactoring to align the system with the evolving needs of both my designers and the overall game. In the upcoming sections, I'll delve into these transformative changes and the iterative process that led to a more refined and effective implementation

I meticulously designed the code to accommodate various enemy types using an Enum. This flexible system enables the dynamic spawning of enemies at random positions surrounding the player. A crucial aspect of this implementation is its consideration for the boundaries of the navigation mesh, ensuring that spawned enemies seamlessly navigate within the designated play area.

How the blueprint code looks like for the WaveManager

My designer requested that we work with DataTables, and he meticulously laid out an extensive system in an Excel sheet. Everything needed to be compatible with blueprints for the convenience of our designers. Initially, I intended to implement everything in C++, but with that mindset discarded, almost everything had to be refactored to align with the blueprint. Frankly, it was a fun and rewarding challenge to overcome.

QA AI
___________________________________

In later development, I was assigned to assist our AI designer, who was tackling this task for the first time. Unfortunately, none of our team members had prior experience in AI development. Consequently, we decided to create a basic AI, which presented its own set of challenges. One significant hurdle was implementing a pooling system to efficiently manage the large number of enemies. Even after respawning, these enemies needed to perform actions such as moving, shooting, and standing still, adding an extra layer of complexity to the task.

Enemy projectile still fired away even after it died. Which caused some huge headache for our AI designer. 

While there were numerous instances where I had to debug, unfortunately, there isn't enough material to showcase as these issues were relatively small, and I wasn't able to record the debugging process.

QA AI

Pooling System
___________________________________

I find great satisfaction in pooling elements to achieve optimal performance, continuously exploring the expansive realm of optimization. The concept of pooling allows for a more efficient utilization of resources, contributing to an enhanced overall performance.

The BeginPool method is integrated within the BeginPlay method, ensuring that the pooling mechanism is initiated at the start. On the other hand, the SpawnEnemy method is dedicated solely to spawning enemies. It includes a check to verify the availability of existing reserves before placing them in the world.

PoolsEnemy.cpp

PoolsEnemy.h

Pooling System

Summary
___________________________________

This project has been incredibly eventful and stands as my proudest accomplishment to date. Our success can be attributed to clear communication and well-defined goals. My primary contributions involved crafting a robust pooling system, implementing a WaveManager to handle enemy spawning, and taking on the role of Quality Assurance (QA) for the AI aspects.

Summary
CV
bottom of page