Project Postmortem


What went well

At the time, this was the largest scale project I'd worked on, and as this was a solo project, that only added to the challenge. But during the development of this project, I learned a lot about Unreal Engine, and it was a good opportunity to refine my knowledge of games development. Overall, I thoroughly enjoyed this project. 

I believe the pick-up mechanic turned out very well. This was a mechanic I had programmed in another project - "Shhhh". This time around, the mechanic was programmed more efficiently, and I encountered less bugs with the mechanic. The mechanic allows the player to pick up certain objects, hold them, throw them, and pick them up again.

This was my first attempt at implementing AI in one of my games. But I'm happy with the results. It's a simple AI, that makes an actor patrol the area, then when it sees the player character within a certain distance, it wilI chase them. I used behaviour trees and blackboards to do this.

Other aspects of the game such as UI elements and menus worked well in my opinion. The HUD animations, icons that appear over the crosshair to indicate different actions, and the end screen animation/menu provided subtle, but impactful additions that improve the game's overall polish.

What to improve

One thing I would like to improve on is the exterior walls/design of the house in the level. In some places, there are paper thin gaps in the walls, or in some places, the shape of the house can look odd. This is largely due to the fact that the house was kept from the prototype, and the way it was built - using static meshes. To improve this, I would recreate the house using geometry and the brush editing tool.

The lighting is also something I struggled with at times. Lighting in Unreal Engine was new to me, and despite looking through documentation and several tutorials, I couldn't get it perfect. I also had to scale down lighting and shadows so that my personal computer could actually run the game. In the end however, the lighting in the game was functional and it doesn't look that bad.

Bugs and issues

One bug that I encountered was a bug with the AI. If the player character was being chased, and exited the AI's sensing range, the AI would freeze in place and remain broken for the rest of the game. To fix this, I made a custom event inside the actors being controlled by the AI that triggers if the player character exits the sensing range during chase. The event would then make the AI resume chase.

There were also several occasions where I encountered bugs with crosshair icons either appearing at the wrong time, or not disappearing when they were supposed to. This took a lot of tweaking, but eventually I fixed it by running multiple checks when the mouse hovers over an interactable object to see what is below the crosshair, and to display the corresponding icon.

Another bug I encountered was preventing player values such as score from being accessed from other maps/scenes. To fix this, I researched possible solutions, and eventually found out about game instances. After implementing a game instance into my game, I was able to access player values from any map, which was needed to display the player's score on the game over screen.

Design choices and iterations

Level design: I wanted the level design to fit the diegesis of the game - a thief burgling a house. So I decided it would fit best if the level included a house that belonged to a rich owner. I tried to reinforce this idea through props in the level such as artwork, and expensive items. As for how the player interacts with the level, the level includes verticality as to not make the level flat, which would be less interesting. I also included two entrances/exits to the house, giving the player a bit more of a choice on how they want to maneuver through the house. I also made rooms with the most value inside riskier to take from by reducing hiding places, and making the area more open, therefore making it more likely to be detected - high risk, high reward. The opposite is also true, for example, the upstairs rooms typically have less value, but are also less likely to be patrolled, therefore they also contain more hiding places. Each room also is designed to not let the player character get cornered easily when being chased by both the resident and the officer. This was achieved by adding geometry that the player can maneuver around or jump over. This way the player always has a chance to escape so long as they can successfully outmaneuver the AI.

Stealth: As this game is about taking the role of a thief, I wanted stealth to be an important feature of the game. To implement this, there are hiding places that the player can interact with, where they cannot be detected, but their vision is also restricted, which is why the resident of the house has audible footsteps, allowing the player to tell roughly where they are, but not giving away the precise location. I also designed the level to give the player cover in places where they may be detected, some of this cover requires the player to crouch for it to work (this links to the previous paragraph). However, I also wanted to allow the player to choose how to approach the game, if they want to just move quickly through the house, they can. This is another reason why the resident has footsteps, it provides a way to know the rough whereabouts of the resident without having to risk peeking around a corner and getting detected. Playing the game this way however, does make it more likely that the player will get caught, as the only way to know exactly where the resident is, is by seeing him. The resident himself moves unpredictably as well, reinforcing the risk of this playstyle. If the player is detected, they also forfeit bonus points if they manage to escape without getting caught.

Graphics: The decision to use low-poly assets is a rather simple one. Firstly, this was a 6 week project, so saving time when gathering assets was important. Secondly, it makes the game less performance intensive, allowing it to run smoother especially on low-end PCs. Lastly, I felt that it complimented the silly nature of the game by giving it a 'cartoonish' look.

One iteration of the game I experimented with was having one more resident inside the house, and having one more officer spawn when the player character is detected. But this ended up being too much and frankly unnecessary. Another iteration was adding pick ups inside hiding places. Originally, this wasn't a feature, but I thought that it could add some depth to the game, offering another way to acquire pickups. It also rewards the player for exploring the map and interacting with hiding places - reinforcing the stealth aspect of the game. 

Get Thief!

Leave a comment

Log in with itch.io to leave a comment.