The N.R.P.T Project
Unreal Engine
Game's High Concept
The N.R.P.T. Project is a first-person puzzle game where the player controls a newly turned 18-year-old in a dystopian future where all newly 18-year-olds must partake in The National Randomised Proficiency. The proficiency tests are government-mandated tests to evaluate whether the participant is worthy enough to live in the country. The player must prove their worth by completing a series of puzzles and escaping the facility in which they have been trapped. However, if they are to fail, they are to be deemed unnecessary and will be dealt with accordingly.
Overview of Features
The N.R.P.T project was a solo-developed project with the main goal to answer the question "Do Different Level Navigation Techniques In Linear-Based Story Games Affect Character Immersion in Worldbuilding?". As such, the development of the project primarily focused on level design and Narrative design built up with the use of voice lines.
However, different puzzle elements were created for the game with inspiration drawn from the Portal games. Additionally, methods of analysing the player were created to determine the effect of different Level Design techniques.
Primary Mechanics developed
-
Pressure plate
-
Weighted Cube
-
Cube/Player laser grid
-
Narrative-based dialogue
-
Heat map, area timers and incorrect are timers
-
CSV based data exporter
-
Interface based button system
​

Overview of Implemented Mechanics
Pressure plate
The pressure plate is one method by which the player can open the test chamber doors. Once an object with the correct tag is on top of the pressure plate, it loops through an array of actors to trigger an interface-based event on each actor within the array. Additionally, to signal to the player that the pressure plate has been activated, the pad of the pressure plate lowers into the base of the object. Additionally, if either the object or the player leaves the pressure plate a check is run to asses if any other object remains on the pressure plate. If there is still something in the trigger area, the pressure plate will interface with all objects in the array with a true value. Otherwise, the interface will call the event with a false value, and the pad is reset to its original state.
​
Heat map
The heat map system's main purpose is to create a graphic that displays where the player has been and shows how long they have been in that area by changing the intensity of the colour on the graphic in the same relative position. The system consists of multiple parts, the first being the dynamic material used to draw the player's path. The second part of the Heat Map is the blueprint itself. The blueprint draws to a render target every frame using the dynamic material. Secondly, the blueprint is responsible for clearing the render target when the game starts to avoid inaccurate data presentation. Once the player has completed the game or when a player quits via the pause menu, the run timer render target will be converted to a baked coloured material and exported as a JPEG alongside the data recorded by the Game Manager.
Area Trigger Timing data (Basic player performance telemetry)
Once the player has entered the section timer zone, the updateSectionTimer will be called in the game manager. Then, it will destroy itself so it cannot be triggered again, as the area trigger is intended to record the first time the player has reached the designated area.
When the area triggers, it will first see if the sectionID passed in is a valid index within the sectionTimerArray, since the array size is predefined at the start, to improve performance by ensuring that the array does not grow during gameplay. If the sectionID is a valid index, it will update the index with the rawSecodns variable. Otherwise, it will add a new entry for the interaction. This will also trigger an error message to inform the programmer or designer that they have set the array to the wrong size. (Note: The release build used to collect the required data does not trigger the error message at any point. This error is included as a form of testing to ensure the system is set up as intended.)
​
The incorrect actor behaves very similarly to the area trigger. However, it does not delete itself when the player enters it; it is designed to update every time the user enters and exits it. Additionally, the trigger detects when the player leaves the area and calls the leftIncorectArea function within the Game Manager.
​
When the player has entered an incorrect area, it records three different values: the number of times the player has entered the area, the first time the player entered the area in raw seconds, and the last time the player entered the area in raw seconds. This function also has the same error checking process for the array index as seen in the updateSectionTimerArray.
The final function responsible for recording data is the leftIncorectArea function. This function records the same three values as the enteredIncorectArea function but stores those values in the left area variant of the arrays. Additionally, this section records the total time the player has spent in the area by subtracting the last time they entered the area and the last time they entered the area variables stored in their respective arrays.

System used to export multiple integer based arrays into a single CSV file



Full system used for the pressure plate system