The Colosseum
Preface
The Colosseum is a round-based survival game where players face waves of creatures that grow stronger and faster each round. The goal is to survive as long as possible by using the environment, unlocking gear, or the defeating the champions of the arena. For those who enjoy exploring, there are multiple Easter eggs and plenty of options for different high-round strategies. Check out the trailer below or play it for yourself here!
Trailer
Details
System 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. This keeps the creatures constantly on the hunt, pushing players to stay alert and adapt as the horde grows.
Code Snippets
If you want to use a similar system for your game, here's the most important code you'll need:

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. It first retrieves the team members from the game's Playspace, then calculates the distance between the creature and each active player using their 3D coordinates. These distances are stored in a map, which is then sorted to find the player with the smallest distance. Finally, the function checks if the closest player is still active and returns that player. If no active player is found, it returns the creature itself.

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 (alive) 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 two 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.
Map 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.
That's it! This was such a fun project to work on. It was partly inspired by the Call of Duty: Black Ops 4 Zombies map, IX. It's one of my favorite Zombies maps of all time, and I wanted to create something that captured a similar vibe while offering a unique experience. It took me around two weeks to make and throughout the process, I learned a lot about programming AI in Verse, designing exciting rewards and challenges for players, and integrating fiction with mechanics to create a cohesive experience. I'm happy I got to share this with the Fortnite player base, and I hope you enjoyed it as much as I enjoyed creating it!