Quad Clash
Inspiration
I was inspired by the dynamic team fights of League of Legends' Arena mode and saw an opportunity to bring a similar fast-paced, multi-team combat experience to Fortnite.
Goal
The goal was to create a highly replayable 2v2v2v2 arena game within UEFN, focusing on fast combat, meaningful progression, and fair matchmaking with NPC replacements that keeps players engaged even with fluctuating lobby sizes.
Frame
- Platform: Fortnite
- Time: 3-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 out yourself here!
Breakdown
Gameplay Design
The first thing I did was study the core loop and underlying matchmaking system of LoL's Arena mode and adjust them to my needs.

The core gameplay in LoL Arena is pretty straightforward. Eight teams of two players each face off in a series of combat rounds, with the goal of depleting other teams' health pools. Every team begins with 20 health, and losing a round deducts points from the losing teams' total. The health lost per defeat increases as the match progresses.

Between combat rounds, teams enter a preparation phase. During this phase, players gain gold and typically get to choose from powerful champion upgrades called augments. Gold is spent here to acquire stronger items, while augments provide unique passive effects or new abilities. Combat and preparation rounds alternate until only one team remains, winning the game. Image credit: https://www.leagueoflegends.com/de-de/news/dev/dev-arena-the-grand-reckoning/

For my game, I adjusted the number of teams to four instead of eight. In my opinion, smaller lobbies create a more intimate experience and offer quicker chances to get revenge on opponents and build personal narratives. I also removed team life pools. This means that even if you lose multiple rounds, it doesn't feel discouraging. You can keep playing to unlock better weapons, which gives you a stronger shot at winning later on. This should also help with player retention, as it allows for longer sessions without needing to start a new game every 20 minutes.

To further support retention, there's a persistent scoreboard that tracks eliminations and round wins for all players. This motivates players to push their high score past others in the lobby and claim the top spot on the leaderboard.

Another change I made was shifting all gold rewards to eliminations. This encourages players to actively engage with enemies instead of going AFK to passively collect gold by simply surviving rounds. It also makes unlocking a high-tier weapon feel more earned.

The final major change is replacing augments with random round modifiers, which can give either team an advantage or a disadvantage during the round. As custom abilities aren't possible in UEFN yet, I chose to implement this to create chaotic and fun fights instead.

As shown in the loop at the top of this section, the gold you earn can be used to purchase upgrades. In Quad Clash, this means two things. First, you can buy weapons of different tiers. Higher-tier weapons are stronger but also more expensive, so it takes more time to acquire one. When you leave the game, your progress is saved, and you keep the weapons, gold, and score you had. This means players don't always start from zero and can grind for higher-tier weapons over multiple sessions. The weapons range from Tier 1 all the way up to the Exotic Tier.

The second way to purchase upgrades is by using a Mod Bench to add better scopes, larger magazines, and other enhancements to your weapons. This option is significantly cheaper than buying a higher-tier weapon and can be a great help when you're low on gold and struggling during your rounds. It also lets you make a weapon you've purchased feel truly "yours" by customizing it to match your playstyle.

A fun little detail I added is that the player with the most eliminations is shown as a hologram at the top center of the hub, mimicking their emotes for everyone to see. It gives players a reason to go after that "throne," showing off their status as the best in the lobby in a way that goes beyond just numbers on a scoreboard. Fortnite is all about player retention, and the more elements you add to keep players engaged, the better.

Last but not least, for matchmaking, I kept the system similar to how it works in LoL Arena because I think it works really well. The key idea is that winners face winners and losers face losers. The arenas rotate each round to add variety and support different playstyles. I built this system from scratch in Verse, which turned out to be a fun challenge. More on that in the next section.
Technical Design
Now that we have an idea of how the game should work, it's time to look at how it's implemented.

The game runs primarily through a central Game Manager device that uses over 500 lines of Verse. This includes all the logic for matchmaking, arena cycling, score tracking, UI, and more. Looking back, I should've split the responsibilities across multiple devices, but at the time, I didn't realize it was possible to access functions from other creative devices.

Before we dive into some of the Verse code, I want to give a quick overview of the other devices I used. The Team Settings Device handled team creation, including size, names, base stats, and color. I used a Score Manager Device along with an Elimination Manager Device to track eliminations and manage gold distribution. Timer Devices and HUD Message Devices were used to display things like the time until the next round, round results, and round duration. Finally, HUD Controller Devices let me disable unnecessary UI elements, like building materials and the map.
Now for the heart of the game: the Verse code. My general approach is practical: I start by mapping out a flexible architecture, then build the game iteratively, starting with the core features and then adding everything I need on top. I make testing, refactoring, and clear commenting a part of the development loop from the beginning because it keeps the codebase healthy and adaptable. Unfortunately, even the most advanced LLMs today don't know anything about Verse, since it's such a niche language, so most of my time on this project went into programming and refactoring.
I won't go through every detail, but to get a better understanding of what makes the game tick, here's a breakdown of the most important code:

To provide some context, here are the main global variables used in my game manager. Each one is documented with its purpose and how it's used. Things will become clearer as we go through the following functions.

These two functions handle player transitions within the round-based game loop. At the start of each combat round, TeleportAllToArenas sends players to their designated arenas, dividing teams into winner-vs-winner and loser-vs-loser brackets based on previous performance. To add variety, the system cycles through different arena pairs each round using an ArenaCycler offset, and periodically swaps the starting teleporter groups for winners and losers (teleporters determine arenas). At the end of the round, TeleportAllToLobby returns all players from their respective arenas to team-specific locations in the central lobby, resetting their positions and setting the stage for the next pre-round phase.

In combination with the functions above, these functions handle the transitions between game phases, triggered by timer completion events. OnLobbyTimerSuccess executes when the pre-round lobby time ends; it performs setup actions like activating random modifiers, removes lobby UI, resets its own timer, teleports players to combat arenas, commands AI, and starts the round timer. Conversely, OnRoundTimerSuccess fires when the combat round time expires; it awards participation points, teleports everyone back to the lobby, resets the round timer, and immediately starts the lobby timer, initiating the next intermission phase. Together, they automate the core game loop's progression.

These functions manage player presence within the overall game and handles the AI guard replacements. When a player enters (OnAgentEntersGame), it increments the LobbySize counter, which tracks the total number of players, and disables the AI guard spawner for that player's team, as it is no longer needed. Conversely, when a player leaves (OnAgentExitsGame), it decrements the player count, re-enables the guard spawner for the player's team, and immediately spawns new guards to take the place of the missing player. This way, there's never an empty lobby.

This function identifies the player with the highest score and display their avatar at the top of the hub. It starts by retrieving all players and assigning each player's score to an index in the Scores[] array. Using a bubble sort, it repeatedly checks and swaps scores until they're sorted in descending order. Once sorted, the top player (Scores[0]) is displayed by the DanceMannequin device. If no high score is found, the default mannequin preset is shown. This loop runs every 5 seconds, making sure it stays up to date.
Level Design
I designed five arenas for this game, each with a unique layout to encourage different play styles. Most follow a 3-lane style, making them easy to understand and play while still offering various approaches and angles. They are all designed to be fast-paced in order to align with our original goal.

This map is built for fast-paced, close-quarters combat. The pit together with the bipyramid above it give players plenty of tactical options and encourages creative movement. There's also an underground area that can be used to quickly drop out of sight or to surprise opponents from an unexpected angle.

Inside the underground area.

The blue arena is more chaotic than the orange one but still offers three lanes for players to choose from. You can get a shot at the enemy fairly quickly after spawning on this map, so make sure you move fast.

Angle from left side spawn.

This arena has plenty of ways to flank and surprise opponents. It features indoor spaces on both the top and bottom levels of the central building. You can even climb up to the roof for an overview of the entire map.

Indoor area at the bottom.

This map is structured like a tent with entrances on every side, making camping difficult (pun intended) since you need to cover a lot of angles. You can choose to either rush over the top or find an angle from below for your best chances at winning.

Inside the tent.

The final map is larger and more complex than the others, offering players more possibilities and angles to engage.

It also features a half-open bottom area with windows and doors, as well as a more enclosed top area with entrances on each side.
Challenges
Developing Quad Clash within the 3-week timeframe presented several interesting hurdles. One of the primary challenges stemmed from working extensively with Verse. As a relatively niche language, resources and community support were limited compared to more established languages. This meant much of the complex logic, including the matchmaking system that pairs winners with winners, the dynamic AI guard replacement for fluctuating lobby sizes, and the score tracking, had to be figured out through the Verse documentation, and the example projects which Epic provides. Luckily, both the documentation and the example projects are very good and easy to digest, which speeded up development.
Another big challenge involved navigating the constraints of the UEFN platform itself. For instance, the inability to create truly custom player abilities (like the Augments in LoL Arena) required a workaround where I implemented random round modifiers to inject similar elements of unpredictability and strategic adaptation into the combat rounds. Some custom functionality in Verse also requires workarounds by using specific devices like volumes or a combination of trackers which is often not as clean and efficient as using C++ and Blueprints in UE5.
I briefly mentioned this before but on the technical architecture side, the central Game Manager script grew considerably as development progressed, eventually encompassing over 500 lines of Verse code. While functional, managing all core logic (matchmaking, arena cycling, UI updates, AI commands, etc.) within a single device became increasingly complex. In retrospect, modularizing the codebase by distributing responsibilities across multiple, interconnected devices earlier in the process would have improved maintainability and scalability.
Finally, balancing the five distinct arenas and the overall gameplay loop was an iterative process. Ensuring each map offered fair starting points, encouraged fast-paced combat without allowing exploits or easy camping, and catered to slightly different playstyles involved multiple rounds of testing and adjustment. Similarly, tuning the gold economy required careful balancing to create a satisfying sense of progression without making the game feel overly punishing or grindy.
Post Mortem
Epic provides detailed Analytics that allow Creators to get insights into how well their games performed. While Quad Clash attracted over 5.500 unique players, it ultimately failed to keep players engaged long enough to call this project a success. Players usually played only 2 or 3 sessions with an average length of 15-20 minutes. I attribute this mostly to two things: First, I didn't do enough to keep players engaged. There are no ranks you can achieve, no global leaderboard (only a local one), no milestones the player can hit. Unlocking better weapons just isn't enough to keep players wanting to come back over and over again. They've clicked on it, played it, and even gave quite a few positive ratings but ultimitately didn't get hooked. Second, for a long time there was no XP reward on the map. I wasn't aware of the Accolade device at the time the game showed up in Discover and so players didn't get anything out of playing my map which ties in to the first point that this is very counter-productive when it comes to retention. Even though it didn't do as well as I'd hoped, it achieved the goal I set at the start and was still a great learning opportunity for me and a fun project to work on. I'd love for you to give it a try and share any feedback you have on the systems or level design. I'm always looking to improve!