StagedFright
In StagedFright, you play as Mallow, a ghost entertainer. The players goal is to make money and become a world famous scarer by spooking the inhabitants of the house in a comedic fashion. As such the core gameplay loop encourages chaining scares together with both crowd feedback, providing a dash of horror and comedy!
Gameplay Video
Skills Showcased
I was the team lead, which meant I needed to coordinate meetings and integrate the work of the other three members.
Creating an open ended scaring system that encouraged player creativity.
Designing a system to possess a wide variety of objects, and making each one feel different through gameplay and aesthetics.
Building a robust AI behavior tree that allowed for the player to combine the possessable objects in a myriad of ways.
Turning Horror to Comedy
The core of StagedFright is the concept of turning a horror game into a comedy game by shifting the perspective of the player to the one doing the scaring. Screams are met by a ghostly chorus of laughter along with screams. To make this shift feel natural, a number of decisions were made.
First, we built every scare with a focus on having some sort of humorous component. Was it funny because it was violent? Was it funny cause it was absurd? Was it somewhere between the two? This was extremely important to get right, as the gameplay loop hinged on the entertainment value of the scares. Getting a large chain scare off on an unsuspecting victim simply isn't fun if game doesn't provide that visual and auditorial feedback.
To accomplish this, we created multiple systems to deliver that feedback. First, we implemented a crowd system that responds to the players actions. For example, when the player is taking too long to scare the residents, the crowd will boo. But when the player gets more points, the crowd will become progressively louder and louder. The second system is the NPC AI. The NPC's have a massive library of sounds they can draw from. Based on their state, they will scream, whimper, or argue. This reinforces scare chains, while punishing the player for taking too long.
Creating emergant gameplay
The Possession System
In order for the game to function, I had to build a robust system of possessable objects that could be used to manipulate and scare the NPCs, each with their own distinct flair. Each possessable object needs to have a distinct use that can be combined with other objects to create chains of scares. In addition, we wanted players to slowly learn how each object works on their own through trial and error, which creates a form of exploration as they learn how each object interacts not just with the NPCs, but also with the other possessable objects. We settled on a total of five types of possessable objects, with an array of dials we could turn on each.
Haunts: These objects can haunt the NPCs, sending them into a scared state.
Smaller haunts can be moved around, while larger ones are stationary.
These are great to initiate scare chains. These can range from small dolls, to large armoires.
Investigable: These objects, when used, will cause an NPCs in the same room to become interested in the object.
The NPCs will then hang around the object for a short while, allowing the player to set up for a scare.
Throwables: As the name implies, these objects can be thrown to scare the NPCs.
They are all movable, making them effective tools to easily scare or chain scares.
Throwables are consumed upon hitting an NPCs.
These usually have the lowest score, but come with their own entertainment value. After all, everyone enjoys splatting a tomato on a poor fool's face.
Traps: These objects will cause the NPCs to slip an fall if they run over these while scared.
These are the hardest to setup, but provide the biggest payoff in terms of score.
Attackers: These objects will physically assault the NPCs when they are very close, knocking them to the ground and scaring them.
In addition, some of these can also double as an investigable, and some can trigger the argue state if multiple NPCs are nearby.
The door, oven, and shower are some examples of the attackers in the game.
The Crowd
For the crowd, I used the behavior tree because there were multiple states which were used to control the audio feedback. There are three major states; murmuring, cheering, and booing. In addition, the method for winning the game and the score are stored on the crowd.
Murmuring is the default state, providing the player ambiance as long as the crowd is not cheering and the enjoyment is above 0.
In addition it drops the enjoyment variable by one each time it runs. If the Enjoyment value gets too low the player will lose score.
Cheering is triggered whenever an AI is scared, and has three different levels which coincide with the current score.
This allows the crowd to give audio feedback on how well the player is doing even if they don't look at the score. In addition cheering resets the enjoyment of the crowd.
The third tree causes the crowd to boo if the enjoyment drops to 0, and plays a booing audio track.
This exists to encourage the player to keep scaring and not allow their audience to get bored, since the player is an entertainer.
The NPCs
The NPCs have eight distinct states, with four to control the phases of being scared. This was necessary because we wanted the AI to reset to the start of the Scared tree when another object scared them. Overall, the behavior tree is stable, and works effectively. However, If I could redo the behavior tree, I would control states with integers instead of Booleans, since it reduces visual clutter and is much easier to manage.
Default State: The NPC will always choose a location to walk to, then wait a short amount of time before moving again. In addition, there is a chance for the AI to randomly choose an object in the room to investigate, while will activate the investigation tree
Investigation State: This state is triggered by an invesitagatable object being used in the same room as the NPC. Following this trigger, the AI would walk up to the object, play an animation, and wait for a decent amount of time. This provided players with an easy way to control the actions of an NPC, setting it up for a big chain of scares.
Attacked State: In this state, the NPC will be knocked down before transitioning into the Scared state. The reason why this is it's own state is because the animation blend state required a variable to be set.
Scared State: In this state, the NPC lets out a scream, and then goes to the Running state. This is it's own state so it's easy to transition to if the NPC is scared while running.
Running State: The NPC chooses a new room somewhere in the house, and runs away towards it. It then transisitions to the Calming down state.
Calming State: Here the NPC cowers in place for a short while. Afterwards the score accumulated from scaring this specific NPC is multiplied by X*0.5 where X is the number of times scared before calming down. Afterwards, the NPC reverts to it's default state.
Argue State: This is a unique state triggered by knocking down an NPC with a door while another NPC is on the other side. This is a complex function that is handled by the door itself. The NPCs remain in place for a long time playing an audio clip. Afterwards they reset to their default state. The unique aspect of this state is it allows the player to both gain score and lock two NPC's in place close together. While this is the hardest and least common state, it is by far the most rewarding of them to achieve.