The Brain Dead Guide to `fort_round_manager`: Stop Your Island From Crashing Every 30 Seconds
Tutorial beginner

The Brain Dead Guide to `fort_round_manager`: Stop Your Island From Crashing Every 30 Seconds

Updated beginner

The Brain Dead Guide to fort_round_manager: Stop Your Island From Crashing Every 30 Seconds

So, you want to make a game mode where rounds happen. You know, like when the timer hits zero, everyone respawns, the loot changes, and the storm resets. It’s the backbone of every competitive match, every prop hunt, and every "last man standing" chaos zone.

But here’s the problem: if you just slap a timer on a switch and hope for the best, your island will eventually glitch out, memory will leak like a sieve, and your players will rage-quit because the game feels "broken."

Enter fort_round_manager. This isn’t just a device; it’s the Game Master of your island. It’s the referee that tells the engine, "Hey, round over. Reset the board. Start the clock again." In Verse (Epic’s new programming language), managing rounds isn’t about guessing; it’s about subscribing to events.

In this tutorial, we’re going to build a simple Infinite Arena. Every time a player dies or the timer hits zero, the round resets, everyone heals, and a new wave of enemies spawns. No crashes. No glitches. Just pure, unadulterated chaos.

What You'll Learn

  • The Scene Graph: Why your code needs to live on a specific object (the "Simulation Entity") to talk to the game engine.
  • Subscriptions: How to listen for "Round Started" and "Round Ended" events without writing messy, broken loops.
  • State Management: How to track whether a round is currently active using a boolean flag.
  • The fort_round_manager Interface: The official way to hook into Fortnite’s core game loop.

How It Works

Imagine you’re playing a custom game mode. You don’t manually click "reset map" every time someone dies. The game does it automatically. How? Because there’s a central authority keeping track of the game state.

In traditional UEFN (Blueprints), you might have used a bunch of linked devices. In Verse, we use Interfaces and Subscriptions.

1. The Interface: A Contract

Think of an interface like a job description. fort_round_manager is a job description that the Fortnite engine has already filled. It says, "I have a SubscribeRoundStarted method and a SubscribeRoundEnded method." You don’t write the engine; you just sign the contract (implement the interface) and tell the engine what to do when those events fire.

2. Subscriptions: The "Ring the Bell" System

A subscription is like subscribing to a YouTube channel. You don’t check the channel every second to see if a new video is up. You just wait for the notification.

  • Event: RoundStarted
  • Subscription: Your code that says, "When this event happens, heal everyone and spawn enemies."

3. The Scene Graph: Where Does the Code Live?

This is the most critical part for beginners. In Verse, code doesn’t just float in the void. It lives on Entities (objects in the world).

  • The Problem: If you put your round manager code on a random barrel, the game doesn’t know you’re trying to manage the whole game.
  • The Solution: You must put your code on the Simulation Entity. This is a special, invisible object in the Scene Graph that represents the "brain" of your island. It’s always there, and it’s always listening.

4. The Boolean Flag: The "Is It On?" Switch

We need to know if a round is currently happening. We use a variable (a container for data that changes) called IsRoundActive.

  • If IsRoundActive is true, the round is going.
  • If IsRoundActive is false, the round hasn’t started or has ended.

Let's Build It

We are building a Chaos Arena.

  1. Start: Round begins. All players are healed. Enemies spawn.
  2. Play: Players fight.
  3. End: When the round ends (we’ll simulate this with a simple timer for now, but in a real game, it might be when everyone dies), the round resets.

Step 1: Set Up Your Island

  1. Open UEFN.
  2. Create a new project or use an empty island.
  3. Place a Player Spawn in the center.
  4. Place a Prop Spawner (set it to spawn a simple enemy or dummy).
  5. Place a Healer (set it to heal 100 health).

Step 2: The Verse Code

In the Content Browser, right-click -> Create New -> Verse Script. Name it ChaosRoundManager.

Here is the complete, annotated code. Copy this into your script.

using /Fortnite.com/Game
using /Verse.org/SceneGraph
using /Verse.org/Simulation

# We define a script that will live on an Entity.
# The 'Simulation' entity is the brain of the island.
class ChaosRoundManagerScript is Script():
    # This variable tracks if the round is currently active.
    # It's a 'boolean' (logic): true or false.
    var is_round_active: logic = false

    # This is the main function that runs when the script starts.
    # It sets up the subscriptions (the "listeners").
    OnBegin<override>()<suspends>: void =
        # Get the round manager interface from the game.
        # This is how we talk to the Fortnite engine.
        round_manager := GetFortRoundManager()

        # Subscribe to the "Round Started" event.
        # When a round starts, run the StartRound function.
        # We store the subscription in a variable so we can cancel it later if needed.
        round_manager.SubscribeRoundStarted(StartRound)

        # Subscribe to the "Round Ended" event.
        # When a round ends, run the EndRound function.
        round_manager.SubscribeRoundEnded(EndRound)

        # Print a message to the debug console to confirm it's working.
        print("Chaos Arena: Subscriptions Active!")

    # This function runs when a round STARTS.
    StartRound<override>(Round: Round)<suspends>: void =
        # Only do this if the round isn't already active.
        # This prevents double-healing or double-spawning.
        if (is_round_active == false):
            is_round_active = true

            # 1. HEAL EVERYONE
            # We get all players and heal them.
            # (In a real game, you'd use a Healer device or broadcast heal)
            for player := GetPlayers():
                player.Heal(100)

            # 2. SPAWN ENEMIES
            # For this demo, we'll just print a message.
            # In a real script, you'd trigger a Prop Spawner here.
            print("Chaos Arena: Round Started! Enemies Spawning!")

            # 3. START THE TIMER (Simulated)
            # We'll wait 10 seconds, then end the round.
            # In a real game, you might wait for all players to die.
            Wait(10.0)
            EndRound()

    # This function runs when a round ENDS.
    EndRound<override>()<suspends>: void =
        if (is_round_active == true):
            is_round_active = false

            # 1. RESET THE STATE
            print("Chaos Arena: Round Ended! Resetting...")

            # 2. CLEAR ENEMIES (Simulated)
            # In a real game, you'd destroy enemy props here.

            # 3. START THE NEXT ROUND
            # We call StartRound again to loop the game.
            StartRound()

Step 3: Attaching the Script

  1. In the World Outliner, find the Simulation entity. (It’s usually named Simulation or GameInstance).
  2. Drag your ChaosRoundManagerScript onto the Simulation entity in the Details panel (under "Verse Script").
  3. Play your island.

What Happens?

  1. When you start, the console prints: Chaos Arena: Subscriptions Active!
  2. The StartRound function fires. It heals you (if the healer is set up correctly) and prints "Round Started."
  3. After 10 seconds, EndRound fires, prints "Round Ended," and immediately calls StartRound again.
  4. The loop continues infinitely until you stop the game.

Try It Yourself

The current code just waits 10 seconds. That’s boring. Let’s make it more like Fortnite.

Challenge: Modify the StartRound function so that instead of waiting 10 seconds, it waits until all players are eliminated.

Hint: You can check if players are alive using player.IsAlive(). You’ll need to loop through all players and check if any of them are still alive. If no one is alive, call EndRound().

Don't forget:

  • You need to import GetPlayers() correctly.
  • You might need a while loop to keep checking every second.
  • Use Wait(1.0) inside the loop so you don’t freeze the game.

Recap

  • fort_round_manager is the official interface for controlling game rounds in Verse.
  • Subscriptions let you react to events like RoundStarted and RoundEnded without polling the game constantly.
  • The Simulation Entity is the correct place to put your round management code because it’s the "brain" of the island.
  • Booleans (is_round_active) help you prevent bugs like double-starting a round.

Now go build an island that doesn’t crash when the round resets. Your players (and your RAM) will thank you.

References

  • https://dev.epicgames.com/community/snippets/558p/fortnite-fort-round-gameplay-interface-for-scene-graph-components
  • https://dev.epicgames.com/documentation/en-us/fortnite/prop-hunt-05-game-loop-and-round-management-in-unreal-editor-for-fortnite
  • https://github.com/vz-creates/uefn
  • https://dev.epicgames.com/documentation/en-us/fortnite/fortnite-glossary
  • https://dev.epicgames.com/documentation/en-us/fortnite-creative/using-prop-o-matic-manager-devices-in-fortnite-creative

Verse source files

Turn this into a guided course

Add fort_round_manager to your free study plan — we'll suggest related pages and stitch the lot into one compile-checked, self-guided lesson with worked examples and quizzes.

Original tutorial generated by Verse Island from the Verse/UEFN knowledge base, with references to the Epic Games sources above. Code is validated against the knowledge base.

Comments

    Sign in to vote, comment, or suggest an edit. Sign in