Kian Wootton
Coming Soon
Genre: Fast-Paced Survival Horror
Platform: PC
Perspective: First Person gameplay
Core Pillar: Evasion instead of Confrontation
Playtime Target: 5-15 minute prototype experience
Quebec Underground is a fast-paced horror prototype focused on survival by awareness, movement and decision-making rather than combat. The player explores an abandoned train station while being hunted by an unkillable creature that moves faster than the player.
The game is created around tension by pursuit. The creature cannot be defeated, only avoided through outmanoeuvring or temporarily escaping. To survive, the player must remember the environment, manage their noise and use hiding spots.
Gameplay takes place in a single connected level designed around loops, corridors and line-of-sight breaks that allow players to escape the creature despite its speed advantage. Environmental interactions such as doors, puzzles, and navigational choices become the player’s main ways to survive.
The creature operates using semi-unpredictable behaviour. While players can learn its general rules and responses, they cannot fully predict its actions. This helps fear and replayability while making sure encounters remain fair and readable.
The desired experience is one of constant pressure. Players should always feel hunted, briefly safe, but never secure. Progress comes from learning the space and improving decision making rather than gaining power or upgrades.
The project is scoped as a focused, polished prototype designed to explore how high-intensity horror gameplay can remain balanced, readable and enjoyable when the threat is faster, constant and impossible to kill. The goal is to demonstrate strong core systems, clear design reasoning and iterative development rather than large amounts of content.
Quebec Underground is a high intensity horror experience where the player explores an abandoned underground train station while being hunted by an unkillable creature which is faster than the player. Survival depends on awareness, movement decisions and environmental navigation rather than combat.
The player cannot defeat the monster. Progress comes from learning the level layout, understanding puzzles and escaping.
This prototype explores how a faster than player enemy can remain fair, readable and enjoyable through design decisions.
The project aims to demonstrate the following:
Target Player Experience
Players should feel:
Fear comes from decision making under stress, not surprise attacks.
The loop repeats with increasing player knowledge rather than increased player power, which helps players to develop strategies and adapt their gameplay to overcome challenges in the environment.
The creature is our primary gameplay system due to the creature needing to feel unbeatable but predictable enough for the player to learn.
The creature moves significantly faster than the players' sprint speed, with direct confrontation leading to player failure.
Key Methods:
Checks whether the NPC can detect the player within a given range - ignoring hidden players, optionally detecting through walls, and making crouching players harder to notice.
Processes incoming sound stimuli by checking range, updating the NPC’s current investigation target based on priority or proximity, and triggering the Investigate state if needed.
Idle – Enemy remains still, checks for player on a fixed interval with a small radius.
Roam - The NPC wanders the NavMesh by choosing pseudo-random roam points, with increasing directional bias toward the player the farther away they are.
If the player is hiding and nearby, it temporarily shifts into an avoidance pattern and moves away instead of approaching to encourage the usage of hiding spaces and reduce lingering around hiding players, which in testing had led to some frustration.
While roaming, it periodically checks for the player to transition into Hunt and recovers by selecting a new path if it gets stuck.
Investigate - The NPC reacts to sound events within the sound’s alert radius, storing the most relevant target based on priority and proximity, and immediately switches into an investigation state if not already investigating. (Hooked in with events invoked by our AudioManager system)
In Investigate, it navigates toward the sound source and dynamically updates its destination if a new, higher-priority sound is heard, allowing it to redirect mid-search.
Once it reaches the target, it pauses to search the area, evaluates the player’s visibility and stealth state (hidden, crouching, exposed), and either escalates into a hunt or abandons the search and returns to idle or roaming.
Hunt - The NPC enters Hunt when it has confirmed the player’s presence, increasing movement speed and pathing directly to the player’s last known position while playing alert audio cues.
During the hunt, it periodically checks if it can still detect the player; if successful, it refreshes the chase target and resets its “lost target” timer to maintain pursuit.
If the player remains undetected for a set duration, the NPC assumes they have escaped, abandons the chase, and transitions back into its roaming behaviour.
Player abilities are intentionally limited in what they can do.
Player movement is made using Unity's new input system allowing us to add access for consoles as well as PC players. The movement itself is broken down into four modes: walking, sprinting, backpedalling and crouch walking.
Players can hide using two different methods. The first is service holes, which can be found inside tunnels throughout the stations, allowing the player to hide completely from the creature. These holes are just big enough for the player to hide in, allowing us to create tension when the creature passes by, as there is no cover to the front of these holes. These are created using colliders and the OnTriggerEnter method, allowing us to set the player's height, speed and if they are hidden.
The second method is using the three safe rooms around the map. These rooms need to be unlocked by completing a puzzle. Once unlocked, the player can continuously use these rooms to hide, and the creature is unable to enter these rooms. Hiding will break the visibility from the creature.
Environmental interactions are designed to create tension by making the player make decisions under pressure. Players must interact with the environment to progress and avoid the creature, but most interactions come with risk through noise, delay or reduced mobility.
Doors: Doors have been made to be one way; this forces the player to commit to movement choices during chases as well as explore new areas of the map. These doors will also open at a fixed speed to prevent the player from instantly escaping the creature’s range.
Puzzles: most puzzles are set outside of safe rooms with no safety around; the player is not forced to stay at each puzzle until completion or failure. Each puzzle makes a low range amount of noise which can draw in the creature. If the player enters the wrong code, a loud alarm will be sounded throughout the map, allowing the creature to head straight for the alarm. This makes players plan escape rooms before interacting with the safe rooms but also allows the players to distract the creature in certain areas of the map. This allows us to continue creating tension without pausing the gameplay.
The map is designed to have two kinds of play spaces:
The core challenge of this project is balancing a creature which is faster and unkillable whilst ensuring that the experience remains fair and enjoyable. The creature is intentionally not fully predictable, preventing players from reducing encounters to simple patterns or creating ideal strategies.
Fairness is made through the player understanding the risks of certain actions. This should help players to feel unsafe and uncertain but not cheated out of a win.
The game balances fear and fairness through unpredictability. We do this by making the creature behave consistently enough to learn but never fully predictably; this means the player cannot control encounters but can influence outcomes instead. This means that our game works more on awareness, preparation and adaptation to certain scenarios. The uncertainty keeps tension in our game whilst learnable rules maintain fairness.
The NPC wanders the NavMesh by choosing pseudo-random roam points, with increasing directional bias toward the player the farther away they are. This allows for the creature's pathing to be randomised when roaming the scene; however, it also leans towards going towards the player based on distance from the player. This also means that the creature may occasionally recheck areas it has previously checked. This prevents the players from memorising safe solutions while maintaining believable behaviour.
The creature's unpredictability is controlled to set rules as to not remove the player agency. The creature, for example, will not appear directly on top of the player, change its rules for player detection or be able to find hidden players for unknown reasons. This allows for the player to not be able to know what the creature will do; however, they will be able to understand why the monsters’ actions happen.
Due to the monster not being fully predictable, level design itself adds to the fairness of the game. This is created using multiple escape routes from the creature’s hunt state. You are also able to break the creature's hunt state using the multiple lines of sight breaks, allowing you to recover from surprise encounters. We have also added certain areas with looped layouts that prevent unavoidable captures from the creature. This allows the environment to act as a defence for the player.
The uncertainty of the creature increases the tension for the player, but we have multiple fail-safes to maintain fairness and keep player frustration low. We have clear feedback from the creature depending on which state it is in. Death occurs because of risks taken by the player, not the randomness of the creature. This allows players to learn from their mistakes; however, players are also able to recover from mistakes if they react quickly. This should lead to players feeling outplayed by the creature, not unlucky with options.
The playtesting and iteration will mainly focus on the creature AI. How the map helps the player to survive and about the tension throughout the game. We will be doing this through playtest questions, which will allow us to evaluate the following:
The intended player experience is created through uncertainty and the vulnerability of the player. Players should feel continuously aware that the creature could appear at any moment, creating a sense of unease throughout the exploration of the tunnels.
Rather than using scripted scares, this experience uses the player to create moments of tension with their situational awareness. As the player begins to read the environmental cues, like audio signals and how the creature behaves, player survival should rely on the player's decision-making rather than the player's reflexes in the moment.
The moments of escape from the creature are designed to provide small moments of relief, allowing the players to recover before being hunted again. These moments will help players feel like they are progressing while keeping the player from feeling fully safe. All while the creature remains unpredictable enough to keep tension but maintains the fairness needed.
We use three main light colours to telegraph information to the player
Approach:
The audio system uses a data-driven approach built around Unity ScriptableObjects and a centralised AudioManager singleton to keep audio implementation modular and scalable. Each sound is stored in its own AudioDataSO, containing all relevant playback settings such as multiple clips, volume, pitch variation, looping, randomisation, etc., as well as gameplay behaviour settings such as whether it alerts the enemy or not, etc.
This separates audio data from gameplay code, allowing sounds to be easily implemented and edited in the inspector. The AudioManager singleton acts as a single access point for all sound playback, using a dictionary lookup system for fast retrieval and an audio pooling system, which improves performance and reduces memory overhead.
Additional features such as positional audio, enemy tracking, and enemy alert events make the system more immersive and scalable.
The game uses a minimal user interface to allow for stronger immersion and maintains tension. Information is shown to the player through the environment, audio cues and player observations rather than a traditional HUD system.
Players are given only the necessary information needed to interact with the world. A small crosshair will appear only when the player is looking at an object which they can interact with; this tells the player that an interaction is possible without being on screen all the time. This approach allows for the player to be more enveloped in the scene and must rely on environmental awareness.
The lack of a HUD allows us to add to the tension and uncertainty of the environment. The player must use audio cues and creature behaviour to navigate the dangers and the environment, leading to the game being a more immersive and tension-building horror game.
The game also uses a minimal amount of interface screens. These are a start menu, a pause menu and two end menus depending on win or lose. The menus are simple and have been made to keep with the tone of the game without breaking immersion.
The starting area has been redesigned to be much more linear.
The intention was to have the first puzzle (keypad puzzle) be linear so that players have a formula to get used to. It was also intended to be the first puzzle a player encounters.
This was not how playtesters were tackling it, often ignoring the green lights and backside of one-way doors in favour of exploring to the other side of the map, often getting lost and unsure what to do.
To combat this, one of the tunnels has been completely removed, and the grate allowing access to the keypad has also been removed. The thought process is that this will funnel players to seeing the keypad first, incentivising them to explore the local area for a code.
Areas of the map feature more unique elements
Playtesters often found themselves lost due to the modular map assets. Despite layouts being repetitive, players were more focused on evading the monster or figuring out what to do.
To negate this, we’ve begun to add props around the map, such as wooden boxes, as well as utilising the decal system to add different types of graffiti around the map. We’ve found the most success with words, often being more memorable and forming patterns in a player’s head after seeing it more than once.
Moreover, we also added a map (albeit a very simplified version of it). Players find themselves using this early to get a mental image of the layout of the map.
Much playtesting found the dithering effect applied to the screen made it hard to make out important details.
While this was an intentional effect, it often frustrated playtesters when they had to be closer to things than they thought before they could make it out. Playtesters also complained that it often made recognising parts of the map they’ve been to before difficult.
To remedy this, we kept the Bayer matrix overlay the same but increased the resolution from 320x160 to 480x240 (the Bayer matrix scales with the screen, making it “appear smaller"). This reported well with playtesters, although the number of tests run with it is minimal, so we’ll need more feedback to finetune it further.
After playtesting, there were several pain points noted regarding the enemy AI and behaviour; these were iterated on to reduce issues of frustration and unpredictability.
Roam State
Hunt State
Investigate State