
Bartholomew
Gameplay GIFs
Overview

Bartholomew.exe is a maze thriller where reality shifts between terror and control. In the Nightmare State, you are powerless—lost in the dark, relentlessly hunted by a monstrous presence. But when the Dream State takes hold, the roles reverse. Wield newfound strength with your trusty revolver and turn the hunt against your pursuer.
This project was made as part of the UKIE 2025 Student Game Jam and my friends and I won the Technical Achievement Category!​
Role: Programmer & Designer
Genre: Horror, Survival
Engine: Unreal Engine 5
Team Size: 5
Duration: 32 Hours (Initially)
Platform: PC
Year: 2024/2025

With it being a short game jam, I worked on various other aspects of the game's development in small sections but I will cover my main contributions.
​
Here are my primary contributions to this game jam:
-
Bartholomew AI & Pacing - Designed and developed the AI behaviour and Pacing of the monster - Bartholomew.
-
Shop System - Created the shop system for buying traps and weapon upgrades with coins.
-
Dream/Nightmare State Transition - Co-developed the system for the atmospheric blending between the nightmare and dream states.
Bartholomew AI & Pacing
Designing Bartholomew was a quick process as we only had 32 hours to complete our game. The design of Bartholomew was simple, it always tracks the players location and constantly runs them down. Once Bartholomew is very close to the player it will deal damage and "bite" them. As the game goes on, the boss gets faster and deals more damage.
​
The scaling of Bartholomew is logarithmic so boss' difficulty scales up fast and then begins to slow down.
For example, the formula for the boss speed is as follows:
Nightmare Speed = Dream Speed + 400 Log (NightmareDays + 2)
​
Nightmare Speed - this is the speed of the boss during the nightmare state
Dream Speed - the base speed of the boss in the dream state
Log - this log is of base 10
Nightmare Days - this is the amount of times the game has entered the nightmare state
​
Fig. 1 shows this formula in action within blueprints:
​
​

Fig. 1
Click images to view in greater detail
Additionally, Fig. 2 shows this formula put into a graphing calculator.
Bartholomew's scaling is as follows:
Day 1: 390
Day 2: 440
Day 3: 480
Day 4: 511
Day 5: 538
Day 6: 561
Day 7: 581
Day 8: 600...
​
​So as you can see Bartholowmew gets rapidly faster. This is by design as the game is meant to be a horror game and it's not going to be scary if the boss can hardly catch the player.
​
The player's default movement speed is actually 600 so they are actually faster than Bartholomew until day 8 while also having the ability to sprint as well! This was a learning point for me as I initially made Bartholomew faster but it quickly became clear after testing that it was too hard!
​
​
​

Fig. 2
This was due to three main reasons:
1. The Labyrinth was confusing and easy to get lost in, with the nightmare state lasting over 30 seconds, the players needed room for error.
2. AI navigation uses the NavMesh system and hence always takes the most optimal path, the players do not do this.
​3. The boss needed to start slow so that the players could ease into their run. This gave players time to understand what is going on before getting killed and becoming frustrated.
​​
Lastly, the damage scaling works in an almost identical way.
​
​​​
Bartholomew's AI was implemented using Unreal Engine's Behaviour Trees and Nav Mesh systems. The basic logic was:
​
If Nightmare State:
- If close to player attack (if also off cooldown).
- Else chase player.
​
If Dream State:
- Find furthest pre-set flee location and move towards there.
- If flee location is reached, find new one.
​​​
This logic can be seen in the Behaviour Tree below:

Lastly, I programmed the bosses animations, sound effects like the footsteps, screeches, and more. This brought the boss to life and I feel we really succeeded in creating a scary monster AI.
Shop System
This sections covers the creation of the shop system for Bartholomew.exe. ​​​​​​​​​
​
​

There are shops dotted around the map which allow the players to spend their coins on 1 of 3 items:
1. A slow trap - represented by a rusty bear trap : Cost 3
2. A stun trap - represented by a clean bear trap : Cost 5
3. A weapon upgrade - represented by the revolver with a green upgrade arrow : Cost 8
​
The traps are there to help the player escape Bartholomew in a tight space where he may be close on their tail. The weapon upgrades are there to allow players to risk power in the dream state over safety in the nightmare state. This provides players with a risk-reward strategy allowing them the choice of how to spend their coins. The items available at each shop are randomly generated at the start of each nightmare state.
​
Upon looking at an item in the shop there will be a UI pop-up and a white outline around the currently viewed item:
​

This system actually got iterated upon after the submission. We improved the game after the jam to now have the prices of items shown diegetically:

We decided upon this as feedback indicated the players were struggling to buy from the shop and run away at the same time. Having the coins required shown without needing to hover the item reduces decision-making time, allowing the players to make decisions more effectively without being killed.
​
Furthermore, additional changes included:
-
The dream state no longer hides items, instead allowing players a moment to buy items if they want instead of shooting Bartholomew.
-
Shop given an ambient noise so that it can be heard through the labyrinth walls as players were struggling to find them.
-
A closed sign drops down when everything is purchased to clearly show the player there are no items remaining.
​
State Transitions
Transitioning between the two states, Dream and Nightmare, was a core part of Bartholomew.exe. The contrast had to be high, and it had to feel natural. ​​​​​​​​​​​
​
Note : To be clear, I did not make the visuals for these states, rather I implemented the blending between them.
​​
During the game jam the way we implemented this was via turning specific groups of lighting on and off and then smoothly blending the post processing. This was the only way we knew we could do it during the game jam and hence had to rush to fit this in.​​​ The difficult part was thinking about how we could make a sudden transition of lighting even work without feeling jarring?
The solution:
Have the screen blink when transitioning states, when the blink happens, have it stay fully black for a split second and right at that moment transition! This hides the sudden jump from the player hence making it feel natural and as if they were really entering these states!
​
Here it is in action:
The implementation for this was very rushed, as you can see below, it literally was just two arrays of actors to turn on and off. So this was primarily sky lights, directional lights and fogs. Then the two post processes just get blended between via a timeline.
Click images to view in greater detail

Improved Version:
Again, to improve on our game we implemented a more professional way of transitioing states via Unreal Engine's Level Streaming capabilities. My teammate Dan had used the system before and hence showed us how it works and how it is implemented.
​
Visually it doesn't make too much different but it is just a lot more professional and a cool new system we now understand the basics of.