Note: This project is meant to demonstrate the implementation of various FPS mechanics and systems and is not meant as a cohesive game.
Much of this is migrated from Prototypes, currently keeping both pages active to preserve published links to the Prototypes page.
Core Systems and Mechanics:
Wall-Running (Blueprint)
Goal: Create wall-running.
Process: Limited pawn movement to a plane, created a collision-based approach with a tag check for runnable walls. Added walls resetting player jump count for greater mobility and gun angle change to indicate wall-running.
Weapon Recoil (Blueprint)
Goal: Add a customizable bullet spread system. Begin with random recoil, iterate recoil models and explore styles of handling spray.
Process: Rewrote weapon from wall-running into a base weapon class and Rifle subclass. Added reload, fire rate, bullet spread and debug line tracing. Added counter for number of bullets in current spray as input to Fire function, multiplied this by spread. Exposed Max Bullet Spread (bullet at which recoil will no longer increase).
Once donut recoil was achieved, I researched UE Curves and integrated a recoil curve into Blueprint. This resulted in the Set Recoil model, which would allow for perfect spray control. To increase variance, I added a fuzzy randomness in a range around the curve (X and Y components).
This is meant to illustrate different approaches rather than be game-ready, but I am still actively updating this (and all) prototypes with animations/FX as time allows.
Recon System
Goal: Add a recon system, experiment with different solutions to seeing enemies through walls.
Process: Gathered reference from FPS games, primarily Apex Legends and VALORANT. Got basic functionality down first (see enemy through walls), then narrowed in on visual representation.
I began with a material-based approach, reasoning that a change in materials to Translucent would allow for immediate vision through walls as well as manipulation via Blueprint. While this produced a decent effect, the change in materials even when unobstructed appeared distracting.
The second iteration focused on a depth-pass. Diving into post-process and material interaction as well as custom render passes, I was able to create a post-process material and trigger enemy actors to render with custom depth when the recon object was activated. This fell more in line with reference material, providing greater visual clarity in a FPS setting.
Gravity Cannon System
Goal: Create Gravity Cannon system allowing LD to place two cannons, pair them and auto-compute their launch velocities
Process: Gathered reference from FPS games (Apex and Halo). Wrote construction script for pairing cannons in-editor, created Launch function to handle physics for launching between cannons, added visuals and adjusted timing for improved game-feel.
I knew I wanted to create cannons that could be placed around a map and paired with one another, adjusting their orientation automatically based on that pairing. To accomplish this, I delved into Construction scripts in Unreal Engine, working out the vector math behind orienting objects to one another. Thinking about cannons as tools for the player to move around a large map, I created and exposed a 'parity' variable. This allowed designers to quickly switch which cannons were paired, altering travel course around any created map and updating cannon orientation accordingly.
Once cannons were paired, I worked out general projectile physics, letting each cannon solve for the launch vector needed to shoot a player from one cannon to the base of another. The launch function was then paired with a triggering volume attached to the cannon blueprint.
Finally, I added a delay to the launch and a red to green light indicator to communicate this timing to the player. To keep the player from automatically launching back and forth, I exposed this value as well as a post-launch cooldown, allowing the launched player to land successfully.