Examples of My Work
Enemy Spawn System
Design Intent
-
Allow full and detailed control by the level/encounter designers on what enemies spawn and when.
-
Make a system that allows for enemy specific spawners while allowing for randomness regarding the spawn points.
-
Avoid Enemies spawning in front of the player.
Technical Implementation and System Overview​
The system used a data table populated by the level designers as input. The data table was broken into arrays of custom structs that were processed by a custom macro that allowed for loops with delayed inputs of variable delay (as dictated by the data table).
The system spawned one enemy at a time using a "wave manager" actor in the level that processed all the information and communicated to the spawners on what enemies to spawn and when.
Iteration
It quickly became apparent that the level designers making the encounters had a hard time tracking holistic metrics about the waves. In response, I developed an in engine tool that would take the data table as input and would output all the useful metrics. This was also used later to assist balancing the scoring system.
Result and Learnings
Working on this system taught me a lot about usability of tools made for developers.
If I were to make this system again I would apply all the technical knowledge I acquired to make it easier to use and more efficient.



Images of the different enemies.
Spawners were specialized for specific enemies.
Scoring System
Design Intent
-
Improve replayability
-
Encourage competition
-
Incentivize fast-paced gameplay
-
Make the game feel more rewarding
System Overview​
The time score was the main source of points, to incentivize fast, aggressive gameplay. The time score decreased gradually using a formula of this type Y=a*(b/(X+b)) where Y equals the score reward, X the time and a and b being balancing variables.
The enemy score was small but very visible to reward the player in the moment to moment gameplay.
There were a set number of enemies per wave that would drop score pickups where they died, incentivizing the player to move around the level more without adding RNG.
Iteration
Balancing score rewards was hard since the time score should always be more than the enemy score, but the enemies per level, and the expected duration of the levels, kept increasing.
To deal with this I used the tools of the spawning system for the enemies to calculate these variables instead, automating the process almost completely.
End of game screen

The time score bonus math in Unreal Engine
End Result
In the end we ran some events that had players compete.
Players behaved as expected and the system was improved using their behaviors and results as feedback.
This was an incredible experience for me as it allowed me to improve my math skills and iterate rapidly.
From this project I improved my technical skills, learned the importance of readability of development tools and improved at focusing on design intent and player experience.
I always like sharing my experience so if you want to know more contact me at odysseastsiridis@gmail.com or linked in



