top of page


This is an assortment of notes on the code work I've done on my Unreal projects. If you're interested in the specifics of any given implementation, let me know through my Contact page and I'll get it to you as soon as possible!


In the early prototype phases of Recoil Riot, I was responsible for a lot of the early game-play implementation and iteration - including it's network functionality. This included, but is not limited to:

  • HUD implementation

  • Deathmatch game-mode

  • Unique ability implementation for:

    • Grappling hook

    • Ground-pound ("Mic Drop")

    • Shield ball ("Stress Ball")

While much of this code was replaced over time with more extensible C++, the core logic for most elements remained. If I were to name what I was most proud of, however, it would be the wall-jump logic: it takes into account your current direction and any nearby walls to adjust your current direction, rather than adding a force or overriding your current velocity. This makes it blend more cleanly into the rocketjump-based movement of Recoil Riot.


Savior of Nothing is a project where I decided to push myself in terms of scope, and the technical implementation needed to allow me to make content quickly and easily. As such, it was my first foray into data-driven game-play implementation.

The engine behind it all is the wave-based game mode, which holds a large number of variables driven by the current wave, such as the rate the game creates enemies, the base damage of new guns, and more. Additionally, each gun is also driven by a set of stats: base gun type stats are modified by each of the 5 gun parts on the gun whenever the gun is "built". This makes it easy to implement each gun part: it's a set of stats on an actor component, with some parts subscribing to game events.

Knowing what I've learned from working on Project Rushdown, I would probably set the game up to build gun parts from a spreadsheet rather than doing individual implementation. However, that would make some gun-part specific functionality more difficult to implement, so it will have to wait until another time.

bottom of page