VerseIsland
Feed Learn Leaderboard Guides Reference Explore Search Docs Verse Library
Sign in
Feed Learn 📖 Codex Leaderboard Guides Reference Explore Search Docs Verse Library
Verse Library › Materials/VFX
Browse Verse Library

Library

Devices 634
  • Devices171
  • Triggers & Logic118
  • UI & HUD40
  • Audio39
  • Items & Inventory29
  • Events27
  • Scoring & Objectives25
  • Spawning19
  • Classes & Interfaces18
  • Game Modes17
  • Props & Meshes14
  • Variables & Mutability12
  • Player Management11
  • Modules & Structure10
  • Round Flow8
  • Animation6
  • Concurrency6
  • Functions6
  • Getting Started6
  • Teams & Classes6
  • NPCs & AI5
  • Tutorials5
  • VFX & Particles5
  • Arrays & Maps4
  • Cameras4
  • Debugging4
  • Control Flow3
  • Cinematics2
  • Other2
  • Persistence2
  • Scene Graph2
  • Structs & Enums2
  • Building1
  • Physics1
  • Publishing & Islands1
  • Syntax & Types1
  • Vehicles1
  • Weapons1
Verse Language 257
  • Control Flow35
  • Functions26
  • Arrays & Maps25
  • Classes & Interfaces22
  • Variables & Mutability22
  • Concurrency21
  • Syntax & Types18
  • Modules & Structure12
  • Debugging8
  • Devices8
  • Events7
  • Player Management6
  • Structs & Enums6
  • Triggers & Logic6
  • Game Modes5
  • Failure & Options4
  • Scene Graph4
  • UI & HUD4
  • Getting Started3
  • Round Flow3
  • Spawning3
  • VFX & Particles3
  • Reference2
  • Animation1
  • Best Practices1
  • Other1
  • Props & Meshes1
Materials/VFX 154
  • Triggers & Logic27
  • UI & HUD17
  • Devices16
  • VFX & Particles14
  • Props & Meshes11
  • Scoring & Objectives9
  • Game Modes7
  • Items & Inventory7
  • Functions6
  • Arrays & Maps5
  • Animation3
  • Cinematics3
  • Classes & Interfaces3
  • Control Flow3
  • Events3
  • Modules & Structure3
  • Round Flow3
  • Spawning3
  • Getting Started2
  • Scene Graph2
  • Variables & Mutability2
  • Concurrency1
  • Persistence1
  • Player Management1
  • Structs & Enums1
  • Syntax & Types1
General 153
  • Devices22
  • Events20
  • Triggers & Logic20
  • Classes & Interfaces10
  • Variables & Mutability8
  • Round Flow6
  • Scoring & Objectives6
  • UI & HUD6
  • Functions5
  • Player Management5
  • Game Modes4
  • Getting Started4
  • Props & Meshes4
  • Control Flow3
  • Syntax & Types3
  • VFX & Particles3
  • Arrays & Maps2
  • Best Practices2
  • NPCs & AI2
  • Other2
  • Physics2
  • Scene Graph2
  • Spawning2
  • Structs & Enums2
  • Tutorials2
  • Building1
  • Cameras1
  • Cinematics1
  • Failure & Options1
  • Items & Inventory1
  • Teams & Classes1
Player 133
  • Player Management22
  • Teams & Classes19
  • Classes & Interfaces12
  • Devices11
  • Events9
  • Persistence7
  • Triggers & Logic7
  • Arrays & Maps6
  • Functions4
  • Game Modes4
  • Items & Inventory4
  • Round Flow4
  • Debugging3
  • Getting Started3
  • Modules & Structure3
  • Concurrency2
  • Control Flow2
  • Scoring & Objectives2
  • Spawning2
  • Structs & Enums2
  • Physics1
  • Props & Meshes1
  • UI & HUD1
  • Variables & Mutability1
  • Weapons1
Building & Props 131
  • Variables & Mutability15
  • Props & Meshes14
  • Triggers & Logic12
  • Classes & Interfaces10
  • Devices10
  • UI & HUD10
  • Events7
  • Teams & Classes7
  • Animation5
  • Building5
  • Functions5
  • VFX & Particles5
  • Structs & Enums4
  • Control Flow3
  • Game Modes3
  • Items & Inventory3
  • Round Flow3
  • Scene Graph3
  • Arrays & Maps2
  • Concurrency2
  • Reference2
  • Modules & Structure1
NPCs & AI 76
  • NPCs & AI35
  • Spawning7
  • Animation5
  • Variables & Mutability5
  • Classes & Interfaces3
  • Debugging3
  • UI & HUD3
  • Audio2
  • Concurrency2
  • Game Modes2
  • Props & Meshes2
  • Triggers & Logic2
  • Devices1
  • Functions1
  • Getting Started1
  • Reference1
  • VFX & Particles1
Spawning 73
  • Spawning31
  • Events7
  • Concurrency6
  • Player Management6
  • Vehicles5
  • Props & Meshes4
  • Devices3
  • Scene Graph3
  • Items & Inventory2
  • Teams & Classes2
  • Control Flow1
  • Publishing & Islands1
  • Reference1
  • Scoring & Objectives1
Cinematics 71
  • Cameras19
  • Cinematics15
  • Devices11
  • Audio5
  • Animation4
  • Triggers & Logic4
  • Functions2
  • Game Modes2
  • UI & HUD2
  • Classes & Interfaces1
  • Concurrency1
  • Control Flow1
  • Items & Inventory1
  • Modules & Structure1
  • Scene Graph1
  • Templates1
UI 57
  • UI & HUD35
  • Devices5
  • Scoring & Objectives4
  • Classes & Interfaces3
  • Round Flow2
  • Scene Graph2
  • Arrays & Maps1
  • Props & Meshes1
  • Structs & Enums1
  • Templates1
  • Triggers & Logic1
  • Variables & Mutability1
Scene Graph 40
  • Scene Graph9
  • Items & Inventory8
  • Classes & Interfaces3
  • Events3
  • Props & Meshes3
  • Functions2
  • Arrays & Maps1
  • Building1
  • Control Flow1
  • Debugging1
  • Modules & Structure1
  • Player Management1
  • Reference1
  • Structs & Enums1
  • Syntax & Types1
  • Triggers & Logic1
  • UI & HUD1
  • VFX & Particles1
Vehicles 38
  • Spawning11
  • Devices7
  • Vehicles7
  • Props & Meshes4
  • Functions2
  • Game Modes2
  • Failure & Options1
  • Items & Inventory1
  • Reference1
  • Teams & Classes1
  • Tutorials1
Tutorials 37
  • Game Modes6
  • Triggers & Logic5
  • Classes & Interfaces4
  • Events4
  • Props & Meshes3
  • Building2
  • Devices2
  • Items & Inventory2
  • Scoring & Objectives2
  • Animation1
  • Arrays & Maps1
  • Cameras1
  • Concurrency1
  • Physics1
  • Player Management1
  • Structs & Enums1
Weapons 30
  • Game Modes6
  • Weapons6
  • Devices5
  • Items & Inventory3
  • Scoring & Objectives3
  • Spawning2
  • Teams & Classes2
  • Best Practices1
  • Functions1
  • Triggers & Logic1
Items 28
  • Items & Inventory23
  • Devices2
  • Triggers & Logic2
  • Spawning1
Assets 20
  • Modules & Structure6
  • Arrays & Maps3
  • Functions3
  • Scene Graph2
  • Best Practices1
  • Devices1
  • Events1
  • Failure & Options1
  • Physics1
  • Variables & Mutability1
Animation 19
  • Animation10
  • Variables & Mutability4
  • Devices1
  • Player Management1
  • Props & Meshes1
  • Scene Graph1
  • Syntax & Types1
Release Notes 17
  • Classes & Interfaces5
  • Modules & Structure3
  • Concurrency2
  • Control Flow2
  • Variables & Mutability2
  • Debugging1
  • Devices1
  • Items & Inventory1
Input & Controls 16
  • Functions4
  • UI & HUD3
  • Control Flow2
  • Animation1
  • Arrays & Maps1
  • Cinematics1
  • Debugging1
  • Devices1
  • Events1
  • Items & Inventory1
Publishing 8
  • Control Flow5
  • Arrays & Maps1
  • Devices1
  • Syntax & Types1
Audio 7
  • Audio5
  • UI & HUD2
Landscape 7
  • Other4
  • VFX & Particles2
  • Scene Graph1
Persistence 6
  • Structs & Enums2
  • Items & Inventory1
  • Persistence1
  • Publishing & Islands1
  • Variables & Mutability1
Physics 5
  • Functions2
  • Classes & Interfaces1
  • Devices1
  • Syntax & Types1
Creator Economy 3
  • Publishing & Islands2
  • Modules & Structure1
Discovery 3
  • Devices1
  • NPCs & AI1
  • Structs & Enums1
Editor & Project 3
  • Other1
  • Props & Meshes1
  • Tutorials1

Custom Game Loop

Module — 9 files
These files compile together (same module folder).
file_1.verse
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /Fortnite.com/Playspaces }

using {GamePhases}
using {GameConfigs}

bootstrap_device<public> := class(creative_device):
    # Here is a reference to any config that can be shared
    # between the phases.
    @editable 
    Config<public>:game_config = game_config{}

    # This is used to end the experience if any player data is invalid
    # or if the user chooses to on game over.
    @editable
    EndGameDevice<private>:end_game_device = end_game_device{}

    # Set the phase you want the game to start in
    # This can help when you want to test a specific phase
    @editable
    StartingPhase<private>:phase_type = phase_type.Intro

    # This exposes all the phase data that can be edited in the editor
    # via this bootstrap device
    @editable
    PhasesData<private>:phases = phases{}

    # Track the current phase
    var CurrentPhase<private>:?game_phase = false
    
    # Local reference to the playspace to allow phases to access
    var Playspace<public>:?fort_playspace = false

    # After a phase is initialised it is stored in this map for ease of lookup
    var PhaseInstances<private>:[phase_type]game_phase = map{}

    # Runs when the device is started in a running game
    OnBegin<override>()<suspends>:void =
        # Store a reference to the playspace as phases can use the 
        # bootstrap reference to access any playspace data 
        set Playspace = option{GetPlayspace()}

        # Loop through phases that are in the phase array and initialise with a reference to the bootstrap
        # insert them into a map for quick access when switching phases.
        # If you want a phase to be in the game it must be in the array from the GetPhases function
        for (Phase : PhasesData.GetPhases(), set PhaseInstances[Phase.PhaseType()] = Phase):
            Phase.Init(Self)
            Print("Data setup for Phase {Phase.PhaseType().ToString()}")

        # subscribe to players leaving and joining the sessions
        if (PS := Playspace?):
            PS.PlayerAddedEvent().Subscribe(OnAgentJoin)
            PS.PlayerRemovedEvent().Subscribe(OnAgentLeave)

        # Set the phase to the starting phase
        ChangePhase(StartingPhase, false)

        # Start the GameLoop
        if (CurrentPhase?):
            GameLoop()

    GameLoop<private>()<suspends>:void =
        loop:
            # Whilst waiting for the current phase to end
            # Continue to update the current phase
            # The result of this race will be the new phase to change to
            PhaseChangeResult := race:
                PhaseEndListener()
                BeginPhaseLoop()

            ChangePhase(PhaseChangeResult)

    # Listens for the End Event of Each Phase
    # If this event is triggered it will end the race expression and
    # moving the logic to the next phase or ending the experience
    PhaseEndListener<private>()<suspends>:tuple(phase_type, logic) =
        if (CP := CurrentPhase?):
            CP.PhaseEndEvent.Await()
        else:
            (phase_type.Invalid, true)

    # Start the Update of the current selected phase
    # If the Phases Update doesn't have any loop logic
    # It will return to the next phase to transition to
    BeginPhaseLoop<private>()<suspends>:tuple(phase_type, logic) =
        if (CP:= CurrentPhase?):
            CP.PhaseUpdate()
        else:
            (phase_type.Invalid, true)
    
    # Responsible for changing the Currently Selected State.
    # It will also do a validation to check if the New State is initialised and
    # Available in the Phase Map. If the new state is invalid the experience will end.
    ChangePhase<private>(PhaseChange:tuple(phase_type, logic)):void =
        Print("Changing phase to: {PhaseChange(0).ToString()}")

        # End the Current Phase
        if (CP:= CurrentPhase?):
            CP.PhaseEnd()

            # Clear the Current Phase to the initial state if required
            if (PhaseChange(1)?):
                CP.ResetToInitalState()
            
        # Find the new phase being changed to
        if (Phase := PhaseInstances[PhaseChange(0)]):
            
            #Cache a reference to the current phase and begin the phase
            set CurrentPhase = option {Phase}
            Phase.PhaseBegin()
        else:
            Print("Phase {PhaseChange(0).ToString()}, is not registered in phase array. Ending Experience please check game loop PhaseInstances or Follow Phases for each game_phase")
            # End the experience

            for (Agent: Playspace?.GetParticipants()):
                EndGameDevice.Activate(Agent)
            
    # Handles passing the data of the joining player into the current selected phase.
    # Each state is responsible for the required logic for a player joining that state. 
    OnAgentJoin<private>(Agent:agent):void =
       Print("AGENT JOINED")

        if (CP:= CurrentPhase?):
            CP.HandleOnAgentJoin(Agent)

    # Handles passing the data of the leaving player into the current selected phase.
    # Each state is responsible for the required logic for a player leaving that state. 
    OnAgentLeave<private>(Agent:agent):void =
       Print("AGENT LEFT")

        if (CP:= CurrentPhase?):
            CP.HandleOnAgentLeave(Agent)
file_2.verse
using {VerseDevices}
using { /Verse.org/Simulation }

# This is the base class that all phases inherit from
game_phase<public> := class<abstract>():

    # This is the next Phase the current Phase will transition to
    # A default phase is given here but this can be overridden in the instance
    # of a phase having multiple ending routes.
    # For example a game-over phase might allow a user to end the whole experience or
    # restart the game
    @editable
    var DefaultFollowOnPhase:phase_type = phase_type.Invalid

    # This is a reference to the bootstrap device. Where you can access the config
    # of the experience. Or access any devices that are referenced in the bootstrap device
    var BootstrapDevice:?bootstrap_device = false

    # The init function sets the reference to the bootstrap device whilst also resetting 
    # phases to their initial state.
    Init<public>(InGameLoopDevice:bootstrap_device):void =
        set BootstrapDevice = option{InGameLoopDevice}
        ResetToInitalState()

    # This Method is called first when switching to a new phase
    # It should be used for initialising the Phase before the update loop starts
    PhaseBegin<public>():void
    # This Method will be called continuously until an End Phase Signal is triggered.
    # The majority of the phases' logic will be written here
    PhaseUpdate<public>()<suspends>:tuple(phase_type, logic)
    # This Phase is called after an End Signal has been triggered and just before new phases
    # Begin is called.
    PhaseEnd<public>():void

    # You can use this method to handle any cleanup you didn't want to occur during the PhaseEnd but 
    # need to cleanup when the whole experience loop completes.
    ResetToInitalState<public>():void

    # This returns the enum type of the Phase
    PhaseType<public>()<transacts>:phase_type
    
    # This method is used to end the current Phase and progress to the next one. Either using the DefaultFollowOnPhase
    # or one override in code
    NextPhase<public>(__:phase_type, ?ResetInitalState:logic = false):tuple(phase_type, logic) = {__, ResetInitalState}

    # This event controls the ending flow of the round system. When this event triggers the current Phase will end and the
    # follow Phase will begin
    PhaseEndEvent<public>:event(tuple(phase_type, logic)) = event(tuple(phase_type, logic)){}

    # Handles the logic on players joining whilst the game is in a particular phase
    HandleOnAgentJoin<public>(Agent:agent):void
    # Handles the logic on players leaving whilst the game is in a particular phase
    HandleOnAgentLeave<public>(Agent:agent):void
file_3.verse
using { /Verse.org/Simulation }

intro_phase<public> := class<concrete>(game_phase):

    PhaseBegin<override>():void = ()
    # Put all the game logic you want to happen when this phase starts here.
    # For example any initialisation of variables or subscriptions to any device events

    PhaseUpdate<override>()<suspends>:tuple(phase_type, logic) =
        (DefaultFollowOnPhase, true)
    # This Update is an example of a single run with no looping.
    # It doesn't return the end signal to end the phase and will
    # Returns the next phase to follow on to
    # Put all your game logic you want to occur in this phase here.
    # Example updating scores or UI when an action is performed

    PhaseEnd<override>():void = ()
    # This is the exit of the phase
    # Put any logic you want to happen when the phase is finished.
    # Example putting players into stasis or making sure all cinematics have stopped playing
    # for all players

    # This is an example of sending a PhaseEnd Signal
    # Note the ResetInitialState is optional and explained in the ResetToInitalState method
    # PhaseEndEvent.Signal(NextPhase(DefaultFollowOnPhase, ?ResetInitalState := true))

    ResetToInitalState<override>()<transacts>:void = ()
    # This function is optional and only called if the ResetInitalState flag is true when 
    # calling the NextPhase method.
    # You can use this method to set any variables back to their initial state.
    # This is separate from the PhaseEnd because you may want phases to repeat i.e Main Phase can move to another Main Phase, and keep
    # any internal variables set until specified

    # Important Make sure this returns the correct enum 
    # This Function Returns the associated enum type of the phase
    PhaseType<override>()<reads>:phase_type =
        phase_type.Intro
        
    HandleOnAgentJoin<override>(Agent:agent):void = ()
    # This function is called when a player joins the game mid-progress
    # You can handle any state-specific logic here for when a player joins.
    # e.g. making sure a cinematic sequence plays for a later joiner.
     
    HandleOnAgentLeave<override>(Agent:agent):void = ()
    # This function is called when a player leaves the game mid-progress
    # You can handle any state-specific logic here for when a player Leaves.
    # e.g updating all player data to remove a player from the score UI
file_4.verse
using { /Verse.org/Simulation }

main_phase<public> := class<concrete>(game_phase):

    PhaseBegin<override>():void = ()
    # Put all the game logic you want to happen when this phase starts here.
    # For example any initialisation of variables or subscriptions to any device events

    PhaseUpdate<override>()<suspends>:tuple(phase_type, logic) =
        loop:
            Sleep(0.0)
        (DefaultFollowOnPhase, true)
    # This example update function will continuously loop until an End Signal is sent
    # Put all your game logic you want to occur in this phase here.
    # Example updating scores or UI when an action is performed

    PhaseEnd<override>():void = ()
    # This is the exit of the phase
    # Put any logic you want to happen when the phase is finished.
    # Example putting players into stasis or making sure all cinematics have stopped playing
    # for all players

    # This is an example of sending a PhaseEnd Signal
    # Note the ResetInitialState is optional and explained in the ResetToInitalState method
    # PhaseEndEvent.Signal(NextPhase(DefaultFollowOnPhase, ?ResetInitalState := true))

    ResetToInitalState<override>()<transacts>:void = ()
    # This function is optional and only called if the ResetInitalState flag is true when 
    # calling the NextPhase method.
    # You can use this method to set any variables back to their initial state.
    # This is separate from the PhaseEnd because you may want phases to repeat i.e Main Phase can move to another Main Phase, and keep
    # any internal variables set until specified

    # Important Make sure this returns the correct enum 
    # This Function Returns the associated enum type of the phase
    PhaseType<override>()<reads>:phase_type =
        phase_type.Main
        
    HandleOnAgentJoin<override>(Agent:agent):void = ()
    # This function is called when a player joins the game mid-progress
    # You can handle any state-specific logic here for when a player joins.
    # e.g. making sure a cinematic sequence plays for a later joiner.
        
    HandleOnAgentLeave<override>(Agent:agent):void = ()
    # This function is called when a player leaves the game mid-progress
    # You can handle any state-specific logic here for when a player Leaves.
    # e.g updating all player data to remove a player from the score UI
file_5.verse
using { /Verse.org/Simulation }

gameover_phase<public> := class<concrete>(game_phase):

    PhaseBegin<override>():void = ()
    # Put all the game logic you want to happen when this phase starts here.
    # For example any initialisation of variables or subscriptions to any device events

    PhaseUpdate<override>()<suspends>:tuple(phase_type, logic) =
        (DefaultFollowOnPhase, true)
    # Put all your game logic you want to occur in this phase here.
    # Example updating scores or UI when an action is performed
        
    PhaseEnd<override>():void = ()
    # This is the exit of the phase
    # Put any logic you want to happen when the phase is finished.
    # Example putting players into stasis or making sure all cinematics have stopped playing
    # for all players

    # This is an example of sending a PhaseEnd Signal
    # Note the ResetInitialState is optional and explained in the ResetToInitalState method
    # PhaseEndEvent.Signal(NextPhase(DefaultFollowOnPhase, ?ResetInitalState := true))

    ResetToInitalState<override>()<transacts>:void = ()
    # This function is optional and only called if the ResetInitalState flag is true when 
    # calling the NextPhase method.
    # You can use this method to set any variables back to their initial state.
    # This is separate from the PhaseEnd because you may want phases to repeat i.e Main Phase can move to another Main Phase, and keep
    # any internal variables set until specified

    # Important Make sure this returns the correct enum 
    # This Function Returns the associated enum type of the phase
    PhaseType<override>()<reads>:phase_type =
        phase_type.GameOver
        
    HandleOnAgentJoin<override>(Agent:agent):void = ()
    # This function is called when a player joins the game mid-progress
    # You can handle any state-specific logic here for when a player joins.
    # e.g. making sure a cinematic sequence plays for a later joiner.
        
    HandleOnAgentLeave<override>(Agent:agent):void = ()
    # This function is called when a player leaves the game mid-progress
    # You can handle any state-specific logic here for when a player Leaves.
    # e.g updating all player data to remove a player from the score UI
file_6.verse
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }

# This class exposes the phases you would like for your experience to the editor
# You are able to change any editable values within each phase from the editor 
# on the associated creative device. In this example that device is the bootstrap_device
phases <public> := class<concrete>():
    @editable
    IntroPhase<private> : intro_phase = intro_phase{}
    @editable
    MainPhase<private> : main_phase = main_phase{}
    @editable
    GameOverPhase<private> : gameover_phase = gameover_phase{}

    # The phases that are in this array are the ones that are initialised within the boot_strap_device
    # If a phase exists but is not in this array, then it will not be used in the game.
    GetPhases<public>()<transacts>:[]game_phase =
        array{
            IntroPhase,
            MainPhase,
            GameOverPhase
            }
file_7.verse
|  |  |
| --- | --- |
|  | phase_type<public> := enum: |
|  | Invalid, |
|  | Intro, |
|  | Main, |
|  | GameOver |
file_8.verse
|  |  |
| --- | --- |
|  | # Helper Function to convert an enum into a string to allow for easier logging information |
|  | (PhaseType:phase_type).ToString<public>():string = |
|  | case(PhaseType): |
|  | phase_type.Invalid =>   "invalid" |
|  | phase_type.Intro => "intro" |
|  | phase_type.Main => "main" |
|  | phase_type.GameOver => "game_over" |
file_9.verse
using { /Verse.org/Simulation }

# This is an example of what a global config structure
# A global config is data that is used in 2 or more phases
# For example if a gameplay phase or game-over phase needs to know the 
# number of rounds
game_config<public> := class<concrete>():
    @editable
    NumberOfRounds<public>:int = 8
    @editable
    RoundLength<public>:int = 60
Sign in to download module

Copy-paste each file above is always free.

Comments

    Sign in to vote, comment, or suggest an edit. Sign in
    📄
    Source
    Epic Games Community

    Created by a member of the Epic Games community. Rights remain with the original author, under Epic's community content terms. Terms ↗

    View original Sources & licensing
    Request removal
    Last updated Jun 23, 2026
    Verse module (9 files)
    Build failed · 1 error

    Download the full module (zip) from the code panel above.

    Keep exploring
    More in Verse Language · 14 of 106
    Prev
    fortnite hdri by position
    Next
    fortnite fornitr
    Related topics
    • Verse Starter 06 Managing The Game Loop For In Unreal Editor For Fortnite Tutorials
    • Fortnite Fort Round Gameplay Interface For Scene Graph Components Ui
    • Fortnite Custom Afk Device Devices
    • Fortnite Procedural Generator Device Devices
    • Verse Starter Template 6 Managing Game Loop In Unreal Editor For Fortnite Tutorials

    Related

    Open in graph →

    Related topics

    • Verse Starter 06 Managing The Game Loop For In Unreal Editor For Fortnite
    • Fortnite Fort Round Gameplay Interface For Scene Graph Components
    • Fortnite Custom Afk Device
    • Fortnite Procedural Generator Device
    • Verse Starter Template 6 Managing Game Loop In Unreal Editor For Fortnite
    VerseIsland · an archipelago of Verse & UEFN knowledge
    🗺️ Island atlas Learn Guides History About & Press Sources & Licensing Status

    Not affiliated with Epic Games. Fortnite, UEFN, Unreal Engine, and Verse are trademarks of Epic Games, Inc. Content is attributed to its source — see Sources & Licensing.

    🦜

    Scout · your island guide

    The Isle of Verse