The Colosseum
Inspiration
I was inspired by the Call of Duty: Black Ops 4 Zombies map, IX, one of my favorite Zombies maps of all time. I wanted to create something that captured a similar vibe while offering a unique experience in the Fortnite ecosystem.
Goal
The goal was to create a round-based survival game where players face waves of creatures that grow stronger and faster each round, with multiple Easter eggs and various high-round strategies for replayability.
Frame
- Platform: Fortnite
- Time: 2-week personal project
- Tools: Unreal Editor for Fortnite, Verse
Gameplay Showcase
Here's a short gameplay trailer showcasing the core elements of the game.
You can also try the game yourself here!
Breakdown
Gameplay Design
The two most important loops in this game are the core gameplay loop and the creature behavior loop.

Players take down waves of creatures to earn gold, which they can use to upgrade and buy new weapons and gear. These upgrades help them survive as the creatures get stronger each round, creating a continuous cycle of fighting, earning gold, and gearing up.

Each creature follows a simple pattern: it finds the nearest player, moves toward them, and attacks when close enough.
Technical Design
Here's the most important code I wrote for the game:

The creature_behavior class defines the behavior of the creatures. It inherits from the npc_behavior class and interacts with the game manager creative device to manage its actions. When the game starts, the OnBegin function is called, which triggers the StartPathing function. In this function, the creature first retrieves its own agent, character, and navigation components. The creature then continuously checks for the closest target using the game manager. If the closest target (a player) is found and is not the creature itself, and if the game manager allows pathing, the creature starts navigating toward this target. If it successfully reaches the target, it plays an attack animation and triggers a sound effect, while also dealing damage to the player. If the creature fails to find a valid target, it stops navigation. The process loops with a small delay, allowing the creature to continuously look for and engage with nearby players.

This is the GetClosestTarget function that you just saw the creature_behavior use to find the closest player. It's universally usable for any agent that needs to find the closest active (alive) player. If you want to use this code, you can find it on my Github.

To give some context for the next snippet, these are my variables. Creatures have defined base stats, and with each round, they become faster and more numerous, with stats like health and speed scaling to increase the challenge. However, there is a speed cap to keep things fair. Creature spawners generate a set number of enemies per round, but there's a limit on how many creatures can be active at the same time to ensure stable performance. Players' progress is tracked by the total eliminations, which is part of the UI that is stored in the UIPerAgent variable. The ShouldPath variable is very important because it stops creatures from targeting the location of dead players and dealing damage when they reach that spot.

These functions handle the end of a round. When a round ends, an audio cue plays, creature stats are buffed, the round number is increased, and creature-related counters (ActiveCreatures, CreaturesSpawnedThisRound) are reset. Additionally, the maximum number of creatures for the next round is adjusted based on the number of players on the team and the UI is updated to reflect the new round for each team member. Afterwards, a timer starts to count down to the next round.
Level Design
Below, you'll find details about the map and its specific sections. Please note that some details may vary in future versions of the game.

This is the starting area of the map. It's where the player, this round's contender, spawns in. The exits are blocked by iron gates and will only open once the player picks up a weapon, showing they've accepted the challenge. The final boss and champion of the colosseum which you saw in the trailer spawns here as well.

As soon as the gates open, creatures start spawning in. They emerge from dedicated holes in the walls, dropping down and starting to chase the player.

One of the things the player can find on the map is four god ritual sites. These can be initiated by touching a dark skull on the front of a ritual pillar. Once it's touched, the player has to hold the area and defend it from ancient monsters that spawn in periodically and attack until the god is satisfied.

When the god is pleased, a colored ray of magic bursts from their eyes, bringing the water in one of the four pots to a boil. This makes a sphere with the same color as the ray appear from the pot. The player can then shoot the sphere to earn a powerful weapon.

Once all four rituals are complete, one of the colosseum gates opens, and a Descendent of the Underworld emerges. It blocks the way to a treasure that can only be accessed after defeating it.

There are also two god temples in the colosseum. The first is the Halls of Hades, which houses the powerful Chains of Hades, one of the most powerful weapons in the game. The temple can be unlocked by sacrificing 1,000 gold at the shrine in front of it.

The other temple is the Temple of Zeus, which also houses a powerful weapon and can be unlocked the same way as the Halls of Hades, except the gold needs to be brought to the statues in front of the temple.

The next area is the graveyard. In ancient times, the gods sent down mighty creatures to challenge the strongest contenders. Now, only their bones remain.

The graveyard also acts as an altar where players can unlock the second gate in the arena. This gate reveals another treasure but also summons a horde of wolves that guard it fiercely.

Lastly, the labyrinth is where consumables can be bought. It needs to be unlocked by sacrificing 1,000 gold at the statues by the door. Once open, all players can purchase powerful buffs and items, for a price.
Challenges
Since Quad Clash was a purely multiplayer-driven game, I wanted to experiment with a single-player experience using Fortnite's NPC Spawner device. One of the biggest challenges came from working extensively with Verse for AI behavior programming. As a relatively niche language, it lacks the resources and community support of more established languages. This meant much of the complex creature AI logic, including pathfinding, target acquisition, and attack behaviors, had to be developed by studying the Verse documentation and Epic's example projects. Thankfully, the Verse documentation is quite strong, something I had already noticed while building Quad Clash. Some elements, like implementing a sorting algorithm, were familiar to me from other languages and weren't too difficult to translate into Verse. What was challenging, however, was eliminating unintended NPC behavior and making the game logic more robust. For example, creatures would often target spots where a player had died, dealing damage even after the player had respawned elsewhere. In other cases, they couldn't find a player standing in certain positions. It took a lot of testing and iteration to get the system to a stable state, but I'm happy with how it works now. In addition to the technical hurdles, I also had to consider the game's economy and scaling. I've always wondered what gives weapons and upgrades their price in games like Call of Duty: Zombies, so I created a spreadsheet listing each weapon's damage, damage type, ammunition, and other attributes. I then assigned prices that balanced player expectations with logical progression. Game design often comes down to doing the math and aligning it with player experience, especially in a game like The Colosseum.
Post Mortem
This was such a fun project to work on! In addition to all the programming and level design, I created the music for the game myself and even did the voice acting, which was a first for me. I don't think I'll be pursuing a voice acting career, but it was fun to try it out. Every decision I made was aimed at capturing the feeling of stepping into the arena for the first time in Call of Duty: Black Ops 4 Zombies IX, and I'm pretty happy with the result. Throughout the process, I learned a lot about programming AI in Verse, designing exciting rewards, secrets, and challenges for players, and integrating fiction with mechanics to create a cohesive experience. In terms of metrics, the game performed similarly to Quad Clash, though it attracted slightly fewer players. I wasn't expecting anything different, since single-player experiences tend to appeal to a smaller portion of the Fortnite audience, which is primarily focused on multiplayer and shared gameplay. Around 5% of players actually defeated the final boss, which might not sound like much, but to me it was more than expected, especially considering it usually takes an hour or more of playtime just to reach that point. UEFN also gave me the opportunity to view detailed statistics and data using the Analytics devices, which I used for the first time in this map. They proved invaluable for learning from this release and I will continue to use them religiously. All in all, this was a great project to work on, and I learned a lot about Verse and how to use npc_behavior within it to create engaging experiences. I'm looking forward to exploring this further in my next project.