top of page

Fuse

Concept

Fuse is a puzzle game where the player switches between two characters to solve challenges and uncover a deep, personal story. One relies on stealth and distractions, while the other is fast, jumps high, and glides across distances. Coordinating their abilities is key to progression.

2024

9 people

Ongoing

FuseTopGif

Key Contribution - Enemy AI

1. Behavior Tree: Used Behavior Trees with decorators to manage state transitions, allowing reactions to perception changes.

 

2. Detection: Set up AI Perception for visual and auditory detection, triggering investigation and chase behaviors.

 

3. EQS System: Used the EQS system to make enemies search around corners.

FuseTree

Behavior Tree

I built the AI using Unreal's Behavior Trees, where state transitions are managed through decorators checking if blackboard keys are set or not. This allows the tree to react dynamically to perception changes, such as losing sight of the target or detecting noise.

FuseDetection

Sight & Sound Detection

For detection I used the AI Perception component which allowed me to setup different logic for visual detection of player and noise hearing. When a noise is sensed within the hearing range, they will move there to investigate, then go back to paroling.

Fuse_SoundDistraction.gif

When the player is spotted, the enemy follows them until line of sight is lost, then moves to the last seen location. Using the Environmental Query System (EQS), the enemy searches around corners by identifying reachable, occluded locations and selecting the closest one. To reduce predictability, it randomly selects one point from the top 5% of hits.

Noise only triggers the investigate state if the player is out of sight, preventing distractions while the enemy is already chasing the player.

Fuse_PlaneNoReaction.gif

Enemy AI controller (with AIPerception component)

Screenshot 2025-01-31 175338.png

AI controller handle sight sense

AI controller handle sound sense

FusePatrol

Patrol Spline

I designed a spline system to let team members easily add enemies and customize patrol routes. If an enemy should roam randomly, designers just leave the patrol spline reference empty for that enemy.

Fuse_Spline.gif

Patrol spline actor

Patrol spline behavior tree task

FuseEnemySounds

Enemy Sounds

The sound of the enemy has three stages of intensity corresponding to Idle, investigating and chasing player. I use an enum to represent these states, set through a Behavior Tree task. The task sends the enum to the enemy, triggering an event that updates the MetaSound to match the current state.

Behavior Task to switch state sound

SoundSwitchTask

Sound switching in enemy actor

FuseReflections

Reflections

This project gave me the chance to dive deeper into stealth mechanics for enemy AI. I had tried implementing a last known location before but struggled. With more experience in the engine, I was able to create a more dynamic and customizable AI behavior.

 

Using decorators to check if blackboard keys are set was a powerful tool, and I’ll definitely use this in the future. The EQS system, which I have used a few times now,  also improved enemy behavior. This added tension, as hiding spots could become the next area the enemy targets.

 

I’m excited to keep improving both the design and functionality.

bottom of page