Genre First-person shooter

Engine Unreal Engine 4

Role Everything everywhere all at once

Date Winter 2022

Video

https://www.youtube.com/watch?v=3f0OHdKwjII

<aside> ❓ PROJECT_PEW is a first-person shooter game entirely developed by myself. As an armed to the teeth dreamer roaming the dream dimension, you must eliminate every nightmarish threat that is on your way.

</aside>


⚒️ What I worked on

<aside> ❗ The goal was to refine my programming skills in a new engine (Unreal Engine 4) and to be self-sufficient. Except most of the audio, I created everything I needed for the game.

</aside>

🧗 Character Controller

<aside> 💡 One of the main focus was to give the player many ways to move around in the game. The character was programmed to jump, dash, crouch slide and mantle. I adjusted the values in each mechanic so that it would fit the fast pace of the game. You have to be quick and always be on the move.

The mantle was the most challenging ability to code because of its complex mathematical logic. I had to resort to many tutorials to finally understand its functionality. In the end, I found more ways to make use of TraceByChannel.

</aside>

Code used for mantling

Code used for mantling

First-person sprites for mantling

First-person sprites for mantling

Showcase of the movement abilities

Showcase of the movement abilities


🔫 Weapons

<aside> 💡 There are 3 weapons that can be used : the shotgun, the SMG and the slap. The shotgun deals high damage, but only at close range because of the spread. The SMG deals relatively low damage with the trade-off being its high rate of fire.

At first, there were 4 weapons planned but I chose to omit the sniper because there was no use for it in a fast-paced and close-combat environment.

I used struct to store the data of every weapon and a SwitchOnEnum to easily set and get the values.

</aside>

Sprites made for the game

Sprites made for the game

Sprites for shotgun reload

Sprites for shotgun reload


🌆 Level Design

Layout of every area of the game

Layout of every area of the game

HighresScreenshot00005.png

Untitled

HighresScreenshot00001.png

HighresScreenshot00002.png

<aside> 💡 At the start of the project, I planned to build 4 zones which would all be accessible as the player progressed through the game. In the end, 3 out of 4 was added while the remaining one was left out because of the time budget.

The Room is actually a replica of my real-life bedroom 👀. It was created to narratively justify the later events of the game which all occur in another dimension because the player has to sleep to dream.

The player the spawns in the Void which serves as a movement tutorial. No enemies spawn there to give them time to get acquainted with the movement basics. The zone mainly consists of tall structures that is surrounded by fog and emissive lighting. I was aiming for a dreamy atmosphere which would put the player at ease. Towers in the background amplify the physical scale of the player’s surroundings.

Upon arriving in the City, a horde of enemies rush towards the player. This is the part where we learn about the combat mechanics. The area features many skyscrapers, buildings and cranes.

The Under resembles the city sewers and is made of several narrow tunnels which lead into a big room where a boss fight would happen. After the fight, the player would be forced to parkour through a room made of floating platforms to escape and finally wake up from their dream.

</aside>


💀 AI

<aside> 💡 I first tried to learn Unreal Engine’s behaviour tree system to control the enemies, but the lack of time I could allocate to the project lead its abandonment. Consequently, I used a simpler system of AI to control the enemies such as the AI MoveTo node and the PawnSensing & AIPerception components.

An enemy is able to track the player by sight (if they’re in their sight) and by hearing their footsteps (with the ReportNoiseEvent node).

When no player is detected, the AI roams around the area in a random given radius. When it detects the player, it runs towards them to deal damage and then goes back to roaming after a short delay.

</aside>

AI hearing detection

AI hearing detection

Untitled

enemies_death.jpg

Art of the enemies

Art of the enemies

Overview of the AI parent blueprint

Overview of the AI parent blueprint