310-308-1896
Lucky Limbo (Unreal Engine 5.0)
Role: AI and VFX Programmer.
Lucky Limbo is a deck-building FPS game set at a casino in purgatory. The player must survive waves of enemies while collecting new cards and exploring the map.
I was the sole AI programmer on the project, being responsible for making three of the enemy types and developing a wave system that used bursts of enemies.
Gameplay Video
Behavior Tree
Each enemy type in the project shares a common behavior tree which is used to create an overall, general sequence of behaviors that enemies share. A common behavior tree was used to reduce code reuse, speed up the implementation of any changes to the general behaviors, and help keep a level of consistency between enemy types. Inheritance is used instead of unique behavior trees to give each enemy type uniqueness, having these individual behaviors located on the different enemy blueprints.
Bouncer
The bouncer is the brute-type enemy in Lucky Limbo. Having more health and a larger attack radius than the other enemies, it is meant to be a larger threat that forces the player to move. The main difference in behavior for the bouncer is how it paces in front of the player, eventually quickly sprinting forward to attack the player. This is intended to make the bouncer feel smarter than if it always ran directly for the player and to help prevent the player from getting overwhelmed by constant attacks.
Briefcase
The standard enemy in Lucky Limbo, the briefcase is a ranged enemy that throws flaming skulls at the player. Between attacks, the briefcase will move positions, trying to keep distance from the player. Attacks are on a timer, never letting too much time pass between them. This helps keep the player engaged by minimizing the player's time to react to changing situations. The behaviors of the briefcase are what acted as a base for the other enemies.
Tiger
The tiger is an enemy that jumps at the player and requires the player to dodge using their dash. Tigers are meant to feel more dangerous when there are more enemies by distracting the player from other threats. Instead of running directly for the player, the tigers attempt to run to a point near the player before leaping. This is to make them less predictable and more interesting to engage with.
Wave System
Waves in Lucky Limbo are made up of bursts of enemies, and the goal of the wave system is to manage the bursts and spawning of enemies. A wave is used to describe what bursts are possible, how many enemies can be alive at one time, and how many bursts are in the wave. These are the essential settings for making the overall wave feel interesting without overwhelming the player. A sequence of waves is created inside a CSV file which is then read into a data table in Unreal.
Burst System
Bursts are what define the information of enemy spawns. Each burst contains the number of each type of enemy that will be used, how long before another burst can happen, what direction enemies come from, the chance a burst will spawn, and the priority of spawn order.