Ruckus & Rascal

Couch Co-Op game

About this project

Ruckus & Rascal is a chaotic couch co-op adventure where two players have to use their characters strengths to make it to the end of the level. The diner’s staff don’t like you walking around in their kitchen and will try to catch you when they see you! Can you make it to the end of the level without being caught?

This is a student project made during my 2nd year at Breda University of Applied Sciences.

My contributions to the project

During this project, I mostly worked on the enemies and tools to customize their behavior. My biggest contributions will be listed below:
Enemy AI: I implemented the enemies and their AI. The enemies, which are employees of the Deviants diner, try their hardest to find and catch the players.
The enemies use sight perception, which means that the AI characters will only start to chase the player when they can see them. The AI characters also use audio perception. When one of the players throws an object, it will produce a sound, and if the AI character hears that sound, it will try to investigate the area of the audio source. This enables the players to distract the enemies.
AI Perception: AI characters use audio and sight perception. This means that if the enemies see or hear the players, they will try to chase after them. 
Multiple AI behavior states: The enemy AI has three states: wandering, chasing and searching. The wandering state is used when the player cannot see/hear the players. The behavior exhibited during wandering can be customized using the AI routine editor tool, as discussed further below. When the enemy has a direct line-of-sight with one of the players, it enters the chase state, where it tries to catch the player. If the enemy loses direct line-of-sight with a player or only hears a player, it transitions to the searching state. During this phase, the enemy navigates to the location of the last perceived stimulus and tries to search the surrounding area by moving to random positions. After a while, the enemy will go back to the wandering state.
Enemies try to catch players: Enemies chase players in order to catch them. When a player is caught by one of the enemies, the player is picked up and carried to a trash can, where they will be stuck until they're released by another player.
Tool for creating and customizing routines for AI characters during wandering state:  In early prototypes, the wandering state behavior was simplistic, merely moving AI characters to random locations. This resulted in enemies feeling very unnatural and unpredictable, making them too challenging to evade. To solve this, I implemented a tool that allowed designers to create and customize the wandering routines for when the enemies weren’t chasing the player. AI tasks could be added to a character's routine, allowing every enemy to have a predictable and unique behavior. All routine tasks can be reordered and customized in the editor tool. These routine tasks include inspecting items (picking them up and looking at them), moving along a predefined path and walking in random directions in small areas. Through playtests, we found that this solved the earlier issues of enemies feeling unnatural and too unpredictable.
Move-to random location task:  A simple task that makes the enemy pick a random point within a radius which it will move to. The amount of random positions that the enemy needs to move to before moving on to the next task can be customized in the editor tool.
Inspect-object task:   In order to make enemies interact with objects in the level, the inspect-object task was added. This makes enemies move to a specific object in the level, where they proceed to pick it up and examine it. While this is happening, the enemy plays an animation to indicate that it's interacting with the object. After a couple of seconds, the enemy puts down the object and moves on to the next task. 
Spline movement task:   In order to make the enemy's movement more predictable, a task was added for enemies to walk along a spline. Users can create spline paths using a spline tool. After setting up the spline, users can pick the spline object in the AI routine editor. The amount of loops around the spline can also be customized. After the enemy has finished all of its loops, it moves on to the next task.
Level interactables: In order to make the level feel more alive, objects were added for the players to mess around with. Some objects could also be used against the enemies. The objects that I worked on are listed below:
Flammable stove: A one-time use only object that the players can use. When turned on, the flammable stove shoots out fire, blocking the path of the enemies. This object can be used to temporarily prevent enemies from reaching you. After a couple of seconds, the flames disappear, allowing enemies to pass again.
Heavy objects for squashing the enemies: Enemies can be killed by dropping heavy objects on top of them. This will squash the enemies, permanently disabling them.
Jukebox object: The jukebox plays background music. The players can start/stop the background music by interacting with the jukebox. When a song is finished, a new song is played. The jukebox has a total of three songs.
The video below demonstrates two of the interactive items that I worked on.
During this project, I also took on the role as lead programmer. This meant that I actively contributed to our Scrum processes, as well as ensuring that all other programmers on our team were aligned and knew what to work on next.

Quick overview

Project Type:  Game Project
Platform:  Windows (itch.io)
Tools:  Unreal Engine 5.1
Role in Team:  Lead Programmer
Project Duration:  16 weeks
Release Date:  June 23, 2023
Team size:  12
Role in Team:  Engine programmer and Lead