Cold Silence

About the Project

Cold Silence was for a college project in Unity, where the brief detailed a 3D horror game with keys and doors, simple interactions, some form of escaping through a puzzle and a monster chase sequence. After some idea generation I decided to move forwards with Cold Silence, a game set in a lethally cold bunker after the air conditioning system broke, where the only safe room is where they had managed to group together a few heaters. The objective for the player it to navigate the maze that is the bunker, full of dead ends and more, and get to the lift up to the warm, safe surface. Also, on the way the player will run into locked doors to figure out how to open as well as heat packs to prolong their survival. To add an extra layer of challenge to this college project to ultimately help myself improve I decided to treat this college project as a game jam. This meant getting the entire project finished in around a week; focusing on implementing all of the mechanics as well and bug free as I could (something I achieved) and focusing less on creating visuals, which is all Sketchfab assets, some textures off google images and a maze designed and modelled by myself using Probuilder. This is because atmosphere is very important in crafting a horror game but those skills weren’t what I was trying to improve or display in this project, therefore with the self imposed time crunch it didn’t make sense to spend lots of time trying.

Development Overview

AI

AI was going to be fundamental for the horror element of making a horror game as not only was a monster chase sequence specifically required by the brief but also in my opinion enemies are more fun when they can dynamically alter their behaviour and force the player to outsmart them to find safety. That requirement of having to constantly be on edge about whether you are about to be chased is heightened in my opinion with the added threat of having to make life or death decisions to evade the monster successfully. Another great tool to utilise when building up fear in a horror game is mystery, because something everyone is afraid of is the unknown. To aim to achieve this, the only element of the monster you can ever see is it’s glowing eyes whilst listening to it’s ear-piercing screech, made by shining some very intense spotlights at a couple of stretched floating circles that blend nicely in the thick fog. However the most important thing is its ability to chase the player, and it’s ability to know when it can chase the player. To achieve this I first set up the monster to use Unity’s Navmesh system by giving it a Navmesh Agent component and baking a Navmesh in my bunker. Then I gave the monster line of sight capabilities using an overlap sphere to generate an array of potential targets, checking if its the player, before using a combination of vector maths and a linecast to determine whether the player is actually in sight and not either behind the monster or obstructed. Finally I used a state machine to differentiate between the 2 different behaviours the monster has. Firstly, if the player gets below a certain temperature the monster will start moving towards them to try to intercept them from anywhere in the bunker. Outside of that the monster is waiting until the player enters it’s line of sight, at which point it will chase the player screeching until it can no longer see them, at which point it will stop screeching, return to it’s ‘post’ and face the correct direction. 

Heatpacks

After some testing and feedback from a tutor, I decided that game didn’t fully explore the possibilities that the heat mechanic brought and that there needed to be a way to warm up / not cool down outside of the starting room. A solution I came up with was a few heatpacks scattered around the bunker randomly that can be picked up by the player, providing enough heat to stop them from freezing but not enough heat to warm them up again. This would therefore provide some potentially vital seconds of warmth while exploring to either get back to the heaters or find the exit. It also isn’t automatically picked up by the player allowing them to memorise the locations of different heatpacks to return to them if needed, forcing the player to use problem solving to either run to the heatpack or the starting room. To achieve this, I started by making a basic texture using an icon off of google and photoshop and applying it to a adequately shaped cube in unity. I then made a subroutine in my game manager, where all of my heat mechanics are handled, to control the functionality of the heatpacks to be run when one is picked up. This uses some booleans to stop the subroutine from being called multiple times as well as to control some UI elements, before recording the initial rate of heat loss and setting it to zero. It then waits a few seconds before resetting the rate to the recorded initial value and again setting a boolean. More interestingly however was the spawning logic I designed to ensure it could only spawn where I intended and not touching walls or in inaccessible / important areas. First I realised that I had already configured all of these locations using Unity’s Navmesh system so I researched and found an inbuilt method called SamplePosition which allowed me to check if a randomly generated location was on the Navmesh. I could then use a for loop to test random locations and spawn a heatpack if acceptable until there were enough heatpacks throughout the bunker. Finally I use a trigger box and a script on the heatpack; using a bool to control whether the player is in range and waiting for an input before setting a bool to true in the game manager, which triggers the function and everything else.

Bunker

The final pivotal component to making this a good horror game was an environment to match. From the start I knew I wanted it to be set in a bunker and referring to the puzzle element required by the brief I decided to make this bunker a literal maze. I very quickly figured out this was something that would need to be planned to be successful so I went to virtual-graph-paper.com and made a scale drawing of the floorplan of the bunker as well as the doors and their buttons. Armed with my flawless plan, I returned to Unity where I used a tool I had heard about from a friend a few days prior called Probuilder. This allowed me to construct the entire bunker as just 2 objects and line up all of the textures perfectly, along with the added bonus that the default texture is very useful for keeping scale. Also, after finishing the entire maze and seeing it in 3D, I spotted some dead space that could be turned into more dead ends to confuse and challenge the player, two key aims in the design of this game, which I swiftly corrected. I then found a concrete texture on google which I applied to everything to give the feeling of a cold bunker before heading to sketchfab to find some models to populate the bunker with. This included a heavy, industrial door, some heaters, some buttons and a door for the lift to the surface. After placing these models in the correct places and ensuring they correctly interact with the Navmesh or player, I added started with the finishing touch to the bunker. I added thick white fog to the level and fine tuned the settings on the skybox to craft the perfect atmosphere for a horror game.