My final year project (FYP) is a stealth game where the player will be able to mantle, climb and teleport around the environment. The teleportation mechanic will be done through the use of a knife, however once they throw the knife they can either teleport straight away or have can wait until they are forcibly teleported to the location by the knife. I pushed myself to code everything within Unreal Engine 4 myself without using any workshop content.
Before starting on any form of coding or in-engine work I decided that I was going to have a look at games that had similar mechanics and actions I wanted in my own game. I did this so that when I went into the engine I’d have a solid grasp of how I was going to tackle each of my mechanics.
When creating my mechanics, I knew the hardest one to do would be to create my characters mantle and climbing movement system. Going into it I decided that I would use a line trace system that would set off a different number of checks to see if the surface was valid or not to climb over, grab or stand-up underneath.

Through this system I was able to create some code that would detect the object’s height and placement towards the player and whether or not they should be able to mantle, climb or go into a hanging animation when the player got close enough and pressed the interaction button.
My first major problem I came across was trying to figure out a system that allowed me to catch and keep the player in the air, to mimic that of a ledge grab in real life. Through my mechanic breakdowns I had come up with a few ideas which I then tried to use.
My first one was to have the player spawn a box below them (this object would be invisible) It’d catch the player and then they’d be able to “Hang on to the ledge”. However, when I tried to do this the way I set up the spawning meant that the box would be always spawn just below the player which meant the player never got caught.
My second idea was to constrain the plane of the player character. Similar to what the engine does in a top-down game I was going to restrict the players Z axis so they could fall. However, when I did this the player would be caught in a constant fall state so all the movement was floaty and felt like you were on ice.
My third idea was to override the characters velocity. I’d set it to 0 when a ledge was detected and then update it from there. This however ended up with me no longer being able to give the character any input, they would be frozen in place.
After all this I decided to go back and try and combine the plane and velocity idea since both of them seemed to solve the others issue and I ended up with a working ledge grab system.
This is the mentality I tried to take into all my problems and decisions such as with the method I went about creating the enemy detection system
When creating the AI’s ability to see the player I found that they could see the player no matter if they were behind cover or not. So I changed it to a line trace system that would have to make sure direct line of sight was made before the detection system would start to move up. However I found that when the player crouched behind cover they would still get detected. After reviewing my code I found that it was because of the target location within the player actor itself that was the problem, since I had made the players face the target point for the line trace. However, when crouched the head would just poke over the walls allowing the AI to still get a line trace success, so I did the easy fix of having the line trace check if the player is crouching when a successful hit event happened before then seeing if the player should still be able to be seen.
After sorting out the AI’s sight lines I gave them all a basic spatial UI that would show the player how close detection they were. I also coded the detection to be done through a line trace. This was because I wanted to make sure that if the player was hiding behind cover the camera wouldn’t be pulling a false positive. To help optimise everything I had the line trace event only activate when the player moved into the CCTV’s line of site.
I would then use this code for the enemy AI’s ability to see and detect the player. I was also going to use the same detection mechanic with the lights, however rather than detect the player they would simply increase the detection multiplier of the character to the AI.

Overall I enjoyed designing and creating all the mechanics for my Project within the first half of the year however what I found myself lacking in ability was when it came to crafting a map/environment for the player to move around and play with their abilities.
When reviewing my project at the end of my year I came to what I realised I would have done differently
Lose the stealth aspect
Designing the mechanics behind stealth was enjoyable and I found I could get that down, however designing a game with stealth, also involves crafting a level that pushes the player to think outside of the box while testing them with moment to moment puzzle solving. Something that within itself would have been a Final year project within itself.
Expand on player movement
I loved making the player movement and giving the player more options to move about. I’d spend a lot of my time running around my little test map finding a squashing bugs I’d run into. I had a large amount of pride behind the fact that I coded it all myself and had iterated on top of my code to get to where I had it.
Change the map
When designing my map for the Final project I tried to create a bank heist stealth map. However I found that I never felt like the map made full use of my players movement compared to the test map I had. I also found that my system had been created around very uniform shapes and placements of assets within the environment. I also found that the environment just felt so plain and flat and with hindsight this was probably because the environment and everything in it didn’t feel truly interactable.
I realised that because of my next point I’d want to change the environment to more of a shipment yard. Somewhere I could have fun with height and the size of the map while making it easier for me to iterate and change the look of it because of the smaller size of asset use compared to a bank map.
Just focus on movement and player
As stated above I enjoyed crafting the movement of my character the most. I enjoyed trying to figure out how to make my interactions deeper and easier to use both on a player level and on a optimisation level. I know if I was to move the movement further I’d want to add a wall running, sliding and a system where I tried to have a form of continued momentum through different actions.