Design Process

Instead of waiting for the levels to be designed and implemented before I could create the gameplay experiences and other functionality I made a test level to add this before the respective levels were done. This meant I was able to efficiently implement the gameplay experiences when the levels were ready and I could be productive throughout development. Early on, I used a dancing mannequin as a placeholder for objectives being completed.

Player blueprint including item interaction and shooting functionality
Test version of shooting mechanic with placeholder assets
First Level Gameplay Mechanics

An Unreal Engine plugin was used called Apex Destruction to add the destruction effects to multiple assets within the project as it allowed the gun to have realistic interaction with these assets.

First Level Blueprint
Implementation of a system used for the second level which only allowed an action to be performed when an item has been obtained
Second Level Gameplay Mechanics
Second Level Blueprint
Implementation of the gameplay mechanics of a platforming level that wasn’t implemented due to time constraints
Example of the ending sequence and the UI that I programmed to appear after it has concluded
Ending Blueprint

I was responsible for the UI size, content and implementation but the visuals were made by another team member. The wording used in the UI is intended to match “cowboy-speak” to match the setting of the game.

Example showing the illusion of the train moving to make the environment make sense
Environment Blueprint

To create asset animations I used a feature in Unreal Engine known as level sequences. This allowed me to keyframe properties of the assets and control the timings of when these changed. The level sequences are activated from within the blueprints but I also used blueprinting methods to change the properties of some assets if the level sequence wouldn’t work for them.

Example showing the level sequencer interface animating the camera for the ending
Example of the safe animation using mathematical values