top of page

Paranoia

Set in 1996, the story follows a journalist who was given an anonymous tip about a fresh murder in an office building. There's more to the story than meets the eye...

 

  • Genre: First person psychological horror

  • Engine & Platform: Unity 2022 for PC 
  • Development Context: University module assessment
  • Development Duration: 4 weeks
  • Team Size: Solo project
  • Total Grade of Module: 91% (A)

Introduction

This is the 2nd assessment of a 3-part assessment series for my university module: Gameplay Scripting. In this module, we had to playtest other games made by our peers. This time, I wanted to create a short horror game as I noticed the rest were creating games similar to the other and I felt the need to stand out. My favourite type of horror is psychological, where fear and unease are generated through mental and emotional states, rather than relying solely on physical threats or gore or even physical monsters. I decided that the player character should feel a sense of dread or paranoia when navigating dark spaces. The game is themed around the classic VHS aesthetics where the screen is lightly blurred with a chromatic aberration and filled with noise, and also inspired by the Dead Space Trilogy.

Mechanics

1. Sanity System

Player's sanity is drained in the darkness then regenerates when player nears a light source, but with varying effectiveness. For example, ceiling lights restore sanity quicker than the torch the player carries. This is achieved through a system that reacts dynamically to light sources in the player's environment. In other words, sanity is the player's health. Through a foreach loop, I kept a list all light sources in the world then automatically check the player's proximity to them.

Screenshot 2025-10-18 213629.png

Base sanity system

2. Sanity Effects

To simulate the flight-or-fight response, I implemented visual and auditory distortions that worsen when sanity drops. Including a narrowing field of view, shaky camera, increasing vignette intensity, and an eerie constant heartbeat audio. The effects were created to transition smoothly to make them feel more organic.

3. Dialogue System

All text in the dialogue is placed in a dictionary to allow the player to skip forward when being presented with it through a typewriter effect. This effect also supports multi-line text without warping or going over the intended boundaries of the text box.

Screenshot 2025-10-18 222952.png

4. Sound Effects

Lightning and thunder effects are added that can be called using trigger boxes for mini jumpscares. There is also a muffled rain audio to simulate rain outside the building. Mundane environmental sound effects like door opening, torch clicking, item interactions were also added. The sanity effects hallucination also includes an audio cue.

5. Notes System

For the most part, the story is told using the environment. Instantiated written notes have been placed throughout the map where the player can interact with and read through each entry.

6. Controls & Interactions

The game uses a standard first person movement without the ability to crouch or jump.

Features

1. Torch

Player can pick up a torch that helps with increasing sanity in dark places or when the player has had a dip in sanity from a scary event. The torch has an "overheating" mechanic with a slider bar that mimics heat. If held for too long, the light turns off and there's a short cooldown period before being able to turn it on again. Press Q to equip or unequip the torch.

Screenshot 2025-10-18 215307.png

UI for torch and sanity bar

2. Enemy, or lack thereof

There's no physical enemy! Instead, there are visions of enemies as though the character experiences hallucinations. However there's an NPC that you interact with for a short dialogue where they explain part of the story to the player.

Screenshot 2025-10-18 215930.png

A glimpse of the "enemy".

Challenges

1. Inconsistent Lights

The torch wasn't being instantiated properly upon pick up therefore wasn't added into the list of all light sources, as the list somehow ignores new lights. Meaning, it didn't increase the player's sanity when equipped. For this, I explicitly had to add the Light component of the torch into the list upon pick up.

2. Memory Leaks

The thunder and lightning audio scripts were causing memory leaks where it drastically reduced performance. I was playing the audio clips individually. At first, I couldn't find the script that was causing the issue, therefore, I painstakingly narrowed down each script and found that using Object Lists for audio instead improves performance.

3. Scene Reload Breaks Probuilder (Plugin) Meshes

I created the bulk of the map's layout using a handy Unity plugin called Probuilder where it simplifies object creation without needing additional 3D modelling tools like Blender or Maya. When reloading the level for when the player dies for example, Probuilder meshes would not load in. I then solved this by using AsyncOperation and setting allowSceneActivation to true upon player's death.

Planning

Most of the planning was done on the Excalidraw app and Microsoft Paint.

Iteration 1

Screenshot 2025-02-16 185451.png

Iteration 2

Screenshot 2025-02-22 213442.png

Iteration 3

Screenshot 2025-02-22 215732.png
Screenshot 2025-10-18 222715.png
bottom of page