About Perdition
Perdition is a first-person shooter made in Unreal Engine 4, inspired by Half Life and Doom. Use a range of powerful weaponry with unique alternate fire modes to blast through robotic foes across five levels.
Perdition was a multi-semester DigiPen student team project focused on learning Unreal Engine and implementing core action gameplay features.
What I worked on
• Prototyped and implemented FPS gameplay systems
• Scripted UI logic for menus, HUD, spatial elements
• Designed UI layouts with mockups, implemented in UMG with icons created in Photoshop and Illustrator
• Crafted game feel with procedural animations for recoil, melee, weapon sway, interactions, and more
Menu Design
I was responsible for UI design, and implementation of all interface elements and menus.
I created icons, art assets, and UI materials in addition to blueprint scripted logic controlling menu navigation.
Animations I created in UMG add feedback to various interactions like a bullet hitting an enemy unit triggering an animating hit marker around the player's reticle.
I authored in-game icons using Adobe Illustrator and Adobe Photoshop. I also created all weapons including models, textures, animations, and icon renders using Blender.
I animated widgets using UMG timelines and a few custom UI materials.
Combat Design and Game Feel
Animation blueprint logic I scripted causes the player character's arms and weapon to sway with camera movement.
Weapons lead ahead of the camera rather than swaying behind to give a sense of urgency and professionalism to the character. Scripted logic interpolates between default idle and max speed turning offsets applied to the player's upper body animations.
A shell-casing ejection system I created supports different ammunition types with varying meshes, ejection forces, casing impact sound effects, and more. A particle system would have been easier but this custom mesh-based approach gave me more control over the timing, sense of speed, and motion blur around ejected cartridges.
Sparking particle systems flash on impact when bullets collide with the environment, scorched impact decals are left behind. I worked on the design and implementation of these weapon feedback systems using Blueprint script.
Melee combat I helped implement randomizes punch animations played by the player and transitions between a single punch or consecutive punches if the player repeats input quickly.
3D Scope
I created this 3D scope effect by rendering the player's current camera view to a texture displayed on a mesh with a custom material.
The render target approach allows for magnification only in the scope instead of increasing the player's field of view and/or adding black borders to the screen.
This implementation helped the sniper rifle standout from the rest of the weapons and has a unique look and feel.
Overdrive Mode
I designed and implemented the overdrive mechanic which encourages the player to collect fuel from fallen robotic enemies. When the blue gauge attached to weapons is maxed out with fuel, unleash a shockwave and, for a limited time, get a massive flaming damage boost.
I worked on gameplay scripting and visual feedback implementation for this system including post-process materials and the spatial 3D UI attached to the player's weapon.
Directional Damage Indicators
First-person perspective makes it difficult to locate the source of incoming damage. Without consideration, being shot from behind can feel the same as being shot from the left or right.
To address this issue, I created a directional damage indicator UI element that rotates a red wedge around the screen edge relative to the location of a damage source after the player gets hit.
If a bullet hits the player from the right side, the right side of their screen will receive the red damage effect and that red portion will counter-rotate to point towards the enemy as the player turns their camera.
This effect was achieved through a UI material and blueprint script to handle damage events and update material parameters.
This effect scales across various display sizes. The indicator can even change in size based on the amount of damage the player is taking, inspired by damage indicators in Overwatch.
Additional info available in this LinkedIn article I wrote about the feature:
linkedin.com/pulse/making-directional-damage-indicator-unreal-engine-4
linkedin.com/pulse/making-directional-damage-indicator-unreal-engine-4
An additional edge vignette layer appears and flashes when the player is at critically low health.
Community Gameplay Example