Masters Year


Group Project – Deaths Rebuke
(C++, DirectX12)

Repo Link: Click Me!
Playable ZIP: Click Me!

My final group project was as a team of 3 programmers to produce a 2D, wave-based, bullet-hell game. This was one of the most complete, successful and game-playable experience so far, with the capstone of being nominated for TIGAs Creative Assembly Best Student Game 2023, and invitation to Game Republic 2023 where we won 3rd Best Team from Rockstar and an honourable mention on Game Tech from Red Kite Games.

This was my most involved project by far, acting as a pseudo team lead (through project direction in-lieu of a designer), “lead programmer”, and scrum manager, on top being of the most technically involved so far. As my underlying engine was involved, I had a lot of responsibility to make sure it provided what we needed, on top of my obligations to provide directly to the game specific code.

Overall I had a lot of contributions, some fully and some partial, to significant portions of the game. There is a lot I would change and improve on with more iterations, but here are some of the key contributions(beyond just the engine):
– Pipelining (Engine, Gameplay, Entity Data)
– JSON file design (Spawning, Entity Data, Weapons)
– UI Implementation
– Underlying Weapon/Projectile systems
– Several Weapons/Projectiles + Refactors
– All Enemies
– Ability System
– Spawning System
– Resource Management (Texture creation, animation defining)
– Game Balance (Entities, Weapons, Spawning etc)


Dissertation – Fuzzy Logic & Behaviour Tree Implementation
(C++, DirectX12)

Repo Link: Click Me!

My dissertation involved using Fuzzy Logic (Sugeno model) and the Behaviour Tree techniques to test their uses in behaviour regulation for NPCs (Non-Player Characters) in a turn-based game. On the technical aspects, this involved researching, developing and testing first-hand implementations of the techniques, and then integrating them into a slightly modified version of a previous Y3 project (which also included using A* and Monte-Carlo techniques, which are still present here).

Both techniques came with a host of problems to overcome in implementation. FL namely had problems with translation of several different set outcomes into a unique key, and required more external resources (through excel and companion custom program). BT was certainly the most code complex to execute on, between implementing different node types, communication between them, and appropriate navigation.

I managed to get both working reasonably well, especially considering the complexities and time constraints. Some of the solutions weren’t perfect, and some functionality wasn’t implemented (like Decorators as compared to Unreal), but both managed to accurately reflect the purposes of each. Both techniques are something I would like to clean up and turn into evergreen features/tools for use in the engine in future.


Solo Project – SIMD Optimisation (C++)

Repo Link: Click Me!

This project covered taking an existing scenario of shooters and bullets and applying the SIMD technique to improve its performance. This task required learning what was available with the SIMD instructions sets and understanding the key differences between OOP (Object-Orientated Programming) vs DOD (Data-Orientated Design).

To utilise the technique, I initially began with translating the bullet class into a new container that hosted a collection of arrays that mirrored its original data (position, scale etc). I then recreated the main functions, most notably Update(), with SIMD calls to re-produce the original logical, executing branchless logic by utilising Masks. This was then applied to the shooters logic in much the same way, and as I became more comfortable with using the technique this was extended to even the animation as the last area of optimisation.

As a result, I managed to reduce the update time from ~30ms down to ~1ms with more than twice as many bullets being active and updating, with the rendering time being the only major performance drag.