Press R to Reload

Made for: ARU 3rd Year

Duration: 7 Months

Engine: Unreal Engine 4.25

Language: C++/Blueprint

Position: Solo

Brief:

“Students will engage in a substantial piece of individual research and/or product development work, focused on a topic relevant to Computer Games.”

“The chosen topic will require you to identify / formulate problems and issues, conduct literature reviews, evaluate information, investigate and adopt suitable development methodologies, determine solutions, develop hardware, software and/or media artefacts as appropriate, process data, critically appraise your findings, and present your research using a variety of media.

Download Link


Press R to Reload is an experimental first-person shooter. As an artifact for my dissertation piece, it served as a test-bed to gather data. Since I was able to submit the project for multiple modules throughout my final year, I was able to put a substantial amount of time into creating a sufficient result.

 

The Dissertation

A short summary of the document can be found here.

For my dissertation I chose to research player agency and choices though obfuscated ethical decisions. Some games obscure their choices for a variety of reasons, with a lot of these drawing on moral quandaries. However, hiding a decision incurs a development cost for content that may not be experienced.

A lot of prior research focused on overt choices, how they are interacted with and their impact on the player. I found a lack of data on what happens when these decisions aren’t explicit along with a lack of games that explore this concept to the fullest.

In order to test this concept I created an FPS game with two endings based on whether the player kills any enemies. Various contextual clues are given to hint towards the passive option but it isn’t overtly presented. This game was then given to two test groups, one of which was made aware of the decision before they played.

The Game

When the games starts the player picks up a weapon and an enemy appears from a portal. Exiting via the portal leads to the main level.

Within the level are pipes and liquid that change colour depending on whether any enemies were killed. When green it heals the player, red deals damage instead. A percentage value also appears after combat, increasing by 100% for each kill.

Combat consists of killing enemies to gain health stacks which heal the player on the next reload. Ammo is found throughout the level. In a non-lethal run the player can use the green objects instead to heal while avoiding enemies.

At the end of the level is a room for the player to pick up a magazine. In a lethal run, it will turn into a sword. Picking it up leads back to the beginning area where the player is either killed in the bad ending or survives.

The main takeaway from the bad ending is what would happen at the end if the enemy doesn’t get killed in the beginning? This was all done in favor of a binary choice, with the sudden point of realization at the end.

AI

For the first semester I put a lot of time into the combat in a basic level to fulfill a module on AI. To start with I took the controller system I made for the Live and Kicking project and moved it entirely into C++ with more functionality. I wanted the enemies to act a bit more believably than the robots so more behaviors were added like reloading, crouching and evading. More accurate path-finding, location checks and attack priority made them react quicker to what the player was doing. Specific cover positions were also defined to allow for repositioning beyond the local checks around the player. As an extension of the base class, I also added a sniper enemy which finds a stationary position to fire from afar.

Since the game was linear in nature, these enemies were given specific strategies which changed the location evaluation curves. When the player passed certain points or dealt damage, these strategies would be changed. One example is distant enemies that would defend a position until the player passes beyond them, causing them to attack from a new position.

Animation

I had never really done any intense animation work before so jumping into an FPS project was quite a big step. To simplify my workflow I used the same skeleton in Blender for both the first and third person animations. While I was never limited by the rig, it took a fair bit longer to get some of the more advanced results that I wanted.

Basic player motion was driven through blueprint and I animated the neck bone to create camera movement, read from the bone rotation relative to its parent.

For the cinematics I took the bone position directly, lerping in and out for transitions.

Third person animations required lots of aim and movement poses to represent all the enemy actions. Root motion was used for evasion, impact and death anims. The animbp was made as generic as possible for the upper-body, allowing for both the sniper and pistol to be held.

Level Design

This was my first real experience with designing an FPS game. I found creating the levels especially difficult when accounting for all the enemy AI, player movement and overall flow. The layout went through many iterations with version after version thrown out trying to get an acceptable result.

Earlier versions had more elaborate set pieces and a grander scope. Since creating environment assets was time consuming, I made use of spline meshes and simple objects to fill out smaller areas.

The final layout is far from perfect but I’m happy with how it fulfills the requirements for this project.

There are many logic elements in the map to trigger events and perform certain tasks. Checkpoints, enemy spawns, music transitions to name a few. Since I was impressed by the Source 2 entities in the HL:A tools, I decided to use a similar system with additional arrows to show the flow of events.

This gets very busy in certain areas but for a solo project it worked well. Interactions that would’ve been relegated to the level blueprint were given a presence in the scene.

Audio

The audio requirements for this project were relatively slim, with cinematic sequences and weapon sounds taking precedent.

I had the resources to get more professional samples which I threw together with royalty free stuff in Audacity. I left most of the created samples separate and modulated them together in engine to get more varied sounds outside of the cinematics.

Music was originally ripped from Mirror’s Edge: Catalyst as separated tracks and layered up as areas progress in a similar fashion to that game. After the submission a music student created original tracks to replace them.

Overall, this project took a great deal of effort over the good part of a year to get over the finish line. While I’m certainly not entirely happy with the overall quality of it as a product, it more than makes up for how it worked as an accompaniment for my dissertation.

It also gave me an opportunity to create something truly my own (aside from the music) that pushed me to explore new arenas of development. I was able to spend a great deal of time on level design, audio mixing, AI and animation beyond any work I’d done previously.