The Red Room - In Development

Overview

About the project

The Red Room is currently in production. This story is based on an urban legend from Japan in the early 2000s revolving around the Internet. -- In 2003, a rumor is being spread of a mysterious link being used as a tool for revenge. What happens when you click the link? What does the link contain? No one is certain. The only thing we do know is, anyone who has received that link has never been heard from again...

Date
July 16, 2022
My Role
Project Lead & Lead programmer
See this Project & More!
The Game

An Emotional Horror Story

The Red Room is the fourth game developed LegionSoft and the second game developed with a team. We wanted to make a unique horror game for players to experience. We love the traditional horror model in games, but we wanted to also give players a unique and emotional story that players have never experienced before. For this project we grew our team to five individuals. The team included a designer, tech artist, audio engineer, programmer and writer. I took the role of project lead and lead programmer. The game is currently in production. However, utilizing my experiences from the past three games, I have been able to make massive improvements in my gameplay mechanics, AI behavioral states, UI implementation, etc.

The Red Room is currently being developed for PC and is set to be released on Steam, Itch.io and other PC platforms.

LegionSoft's team has grown and this game is our biggest yet. Therefore implemented an agile development methodology to organize our project and improve productivity. The project's major goals have been split into two week sprints. During these two weeks, my producer and I meet with the different departments each week and have meetings discussing game mechanics, design, art and story. At the end of the sprint we meet, play test and discuss what works and what doesn't. This helps us create the next sprint goal.

Although this project is still in development, I have learned so much more about planning a project much more efficiently, defining scope (and not over scoping), and leading, communicating and motivating my team. My programming skills have also seen a huge improvement due to the complexity of this project. Gameplay mechanics and AI state machines are much more complicated in this game and therefore I have been improving day by day.

The Challenges & Impact

Challenges I Overcame

As this is LegionSoft's biggest game yet, we have faced many challenges. However, solving these challenges as a team has been extremely fun and exciting. It has also given us the opportunity to learn new skills and improve our existing ones. Here are some of the challenges we faced as a team and overcame:

  • Developing and continually updating complex AI using a state machine to create much more tense and scary moments for the player.
  • Creating fun and interactive gameplay mechanics by continually play testing and determining what works and what doesn't.
  • Prototyping often to test early gameplay mechanics and features efficiently without wasting development time.
  • Quickly finding and fixing bugs in the code by testing regularly
  • Creating a coding standard for the team by consulting resources and deciding on one that works for us.
  • Creating functional and efficient code to help reduce bugs, improve readability and to optimize the game.
  • Creating levels to make fun and interactive experiences for players.
  • Learning how to implement audio by working with LegionSoft's audio engineer.
  • Defining the scope of the game by communicating with LegionSoft's producer and deciding first what the fundamentals of our game are and separating those from optional mechanics and features.

My Impact

During the development of this game, each person has worked together as a team to think of new ideas, mechanics, design, etc. Everyone on this team is extremely talented and due to that talent, I have been able to focus mainly on programming, gameplay mechanics and project management. Here are some of the things I did for the project.

  • Coding various gameplay mechanics & systems, such as:
    -
    Character controller.
    - AI State Machine.
    - Kill Cam.
    - Hiding system.
    - Puzzle systems.
    - Implementing UI.
    - Working with the audio engineer to implement audio.
    - Non-Euclidean based system to constantly change the environment.
    - Creating a task based system to keep players engaged.
    - General bug fixing and resolving other Unity engine issues using C#.
  • Leading the project by Implementing an agile development model, holding SCRUM meetings and overseeing the development process.
  • Creating an interesting and interactive world by Implementing physics based mechanics for items in the game.
  • Managing the project by Working with LegionSoft's producer to document the development process to ensure the project stays organized and maintain productivity.
  • Continually keeping contact with LegionSoft's team to discuss ideas they have, maintaining a healthy working environment and keeping motivation high.

Gameplay & AI Code Examples

This game is still in development. However, my team and I would still like to show off our game in it's current build. This video showcases gameplay, music & level design that we have been working on. I've implemented all of the gameplay, AI, lighting and assets in the game. My talented audio engineer created the music and then I implemented it through code.

  • NOTE: Please understand that this is still an early build. The enemy models are currently being implemented along with their animations. More gameplay mechanics will be added and much more! I hope you like what you see and I hope you are excited for what's to come!

Gameplay & AI Code Examples

The Red Room - Breakdown

The Red Room has been in development for around 3 months as of writing this. It is being developed using C# in Unity as well as other third party software such as FMOD Studio and Blender. This section is to showcase some parts of the game such as code & sketches that LegionSoft have created.

Here are some examples of gameplay mechanics, features & AI code that I've been working on!

AI State Machine Script

Here is a code snippet of the A.I. state machine I have made for this project. The AI uses both raycasting and a vision cone. The raycast determines if the player is visible to the A.I. The vision cone talks with the raycast and determines if the player is in range to activate the next state which would be "Chase". The A.I. then changes it's destination to the player's position. If the A.I. gets close enough, it changes states to "kill". At this point the game would be over. Other A.I. states this code includes are "idle", "walk", "find" and "search". Each state gives the A.I. new instructions as well as smoothly transitions between each other.

Note: Because the game is still in development, you can see comments in the code that show us testing new mechanics. The A.I. is continually being updated and improved for better gameplay.

A.I. State Machine
Inventory _ PickUp Script

This script is one of four scripts that make up the inventory system for the game. This specific script is used for the item pick up function. Other scripts that complete this system create the item list and determine the item's name & ID. This pick up script uses a OnTriggerEnter and OnTriggerExit to determine if the player's "Eyes" are in range to allow for a pickup. Once the player interacts with the item, it is destroyed and added to the Item list.

Inventory Pick Up
Light Flicker Control Script

This is a simple script I created to create a light flickering animation. I have experience working with animations in unity, however by manually creating this animation through code I have more control over how much the light can flicker and how fast. To do this, I implemented an IEnumerator that uses a bool to determine if the light is flickering or not. If not, the coroutine is started. In the coroutine, a timer using Random.range is used to turn the lights on or off. At the end of the coroutine the bool is again set to False and the process begins again.

Light Flicker Animation
Player Controller Script

The player in The Red Room has too many scripts to share on this site. However, this is the player controller for movement. The character currently is only accepting WASD inputs. However, we are soon going to be adding controller inputs as well. In addition to using the basic movement keys, this character controller takes into account that the the player's velocity. We had found in the debug menu that the player's Y velocity was continually increasing. To fix this, we added a condition that checks if the player velocity is below 0. If so, the Y velocity is set to a specific integer. This Y velocity integer is also used for the jump mechanic.

Note: As the game continues production we will be changing this code. The picture you see here will be updated along with development.

Character Controller
Player Controller Script

The Red Room uses non-Euclidean mechanics to change the environment around the player. These environment change mechanics include loading and unloading certain parts of the map and/or teleporting the player. This allows the game to stay unexpected and keep the tension high for the player. We have been testing several ways to transition these changes in a smooth way. Some of our solutions have included one way triggers, blinking and for certain story elements, passing out. This script represents the teleportation of the player & passing out mechanic.

This script uses the Animator to call the black out animation. Once the player enters the trigger area, the animation is initiated just as long as the animation isn't already playing. However, the player teleporting is too quick for the animation. To solve this, I implemented a coroutine that waits 0.5 seconds. This gives the animation enough time to block the player's sight and transition the character to a new area.

Player teleportation