Reference Fortnite API compiles

fort_character: Reading the Player Behind the Avatar

Every player on your island is represented by a `fort_character` — the living, breathing avatar that runs, jumps, and gets eliminated. Knowing how to grab that reference unlocks a whole tier of gameplay: you can react to jumps, query ground state, check who interacted with a dockside mannequin, and flash personalised HUD messages to exactly that player. This article shows you how to wire `fort_character` together with `character_device` and `hud_message_device` in a sunny cove setting.

Updated Examples verified on the live UEFN compiler

Overview

fort_character is the core interface that represents a Fortnite player's in-world avatar. It is not a device you place — it is a runtime object you obtain from an agent reference (usually delivered by a device event). Once you have it you can:

  • Query state: IsOnGround, IsCrouching, IsActive
  • Read view direction: GetViewLocation, GetViewRotation
  • React to lifecycle events: EliminatedEvent, JumpedEvent, CrouchedEvent, SprintedEvent
  • Convert back to agent with GetAgent (needed by any device method that takes an agent)

Reach for fort_character whenever you need to inspect or react to what the player's body is doing, rather than just that a player exists.

API Reference

fort_character

Main API implemented by Fortnite characters.

Full public surface, resolved verbatim from the live Epic digest (Fortnite.digest.verse).

fort_character<native><public> := interface<unique><epic_internal>(positional, healable, healthful, damageable, shieldable, game_action_instigator, game_action_causer):

character_device

Used to configure a single interactive mannequin, that can visualize characters, clothing, and perform emotes.

Full public surface, resolved verbatim from the live Epic digest (Fortnite.digest.verse).

character_device<public> := class<concrete>(creative_device_base):

Events (subscribe a handler to react):

Event Signature Description
InteractedWithEvent InteractedWithEvent<public>:listenable(agent) Signaled when an agent interacts with this device. Sends the agent that interacted with this device.

Methods (call these to make the device act):

Method Signature Description
Enable Enable<public>():void Enables this device.
Disable Disable<public>():void Disables this device.
Show Show<public>():void Shows this device.
Hide Hide<public>():void Hides this device.
PlayEmote PlayEmote<public>():void Plays an emote on the character created by this device.

hud_message_device

Used to show custom HUD messages to one or more agents.

Full public surface, resolved verbatim from the live Epic digest (Fortnite.digest.verse).

hud_message_device<public> := class<concrete><final>(creative_device_base):

Events (subscribe a handler to react):

Event Signature Description
ShowMessageEvent ShowMessageEvent<public>:listenable(agent) Called when a Message has been Shown on-screen. Returns an Agent if it was Shown on a specified Agent's screen.
HideMessageEvent HideMessageEvent<public>:listenable(agent) Called when a Message has been Hidden on-screen. Returns an Agent if it was Hidden from a specified Agent's screen.
ClearAllMessagesEvent ClearAllMessagesEvent<public>:listenable(agent) Called when all queued Messages from all players that are affected by this HUD Message Device have been cleared.

Methods (call these to make the device act):

Method Signature Description
Show Show<public>(Agent:agent):void Shows the currently set HUD Message on Agents screen. Will replace any previously active message. Use this when the device is setup to target specific agents.
Show Show<public>():void Shows the currently set Message HUD message on screen. Will replace any previously active message.
Hide Hide<public>():void Hides the HUD message.
Hide Hide<public>(Agent:agent):void Hides the currently set HUD Message on Agents screen. Use this when the device is setup to target specific agents.
Show Show<public>(Agent:agent, Message:message, ?DisplayTime:float Displays a Custom message to a specific Agent that you define.Setting DisplayTime to 0.0 will display the HUD message persistently.If not defined, or less than 0.0 the message will show for the time set on the device.
Show Show<public>(Message:message, ?DisplayTime:float Displays a Custom message that you define for all PlayersSetting DisplayTime to 0.0 will display the HUD message persistently.If not defined, or less than 0.0 the message will show for the time set on the device.
SetDisplayTime SetDisplayTime<public>(Time:float):void Sets the time (in seconds) the HUD message will be displayed. 0.0 will display the HUD message persistently.
GetDisplayTime GetDisplayTime<public>()<transacts>:float Returns the time (in seconds) for which the HUD message will be displayed. 0.0 means the message is displayed persistently.
SetText SetText<public>(Text:message):void Sets the Message to be displayed when the HUD message is activated. Text is clamped to 150 characters.
ClearAllMessages ClearAllMessages<public>():void Clears all queued Messages from all players that are affected by this HUD Message Device.

team

Full public surface, resolved verbatim from the live Epic digest (Verse.digest.verse).

team<native><public> := class<unique><epic_internal>:

Walkthrough

Scenario — The Cove Lookout: A cel-shaded pirate cove has a weathered mannequin standing on the dock. When a player walks up and interacts with it, the mannequin plays a wave emote and a personalised HUD message appears: "Ahoy, Sailor! Mind your step on the dock." If the player is already crouching (sneaking), the message changes to "Sneaky one, aren't ye?"

Place these devices in UEFN:

  • Character Device — the dockside mannequin (DockMannequin)
  • HUD Message Device — for the personalised greeting (GreetingHUD)
using { /Fortnite.com/Characters }
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }

# Localised message helpers
AhoyMessage<localizes>(S : string) : message = "{S}"

cove_lookout_device := class(creative_device):

    # The interactive mannequin standing on the dock
    @editable
    DockMannequin : character_device = character_device{}

    # HUD message device — set to target Specific Agent in its properties
    @editable
    GreetingHUD : hud_message_device = hud_message_device{}

    OnBegin<override>()<suspends> : void =
        # Subscribe to the mannequin's interaction event
        DockMannequin.InteractedWithEvent.Subscribe(OnPlayerInteracted)

    # Called whenever an agent interacts with the dockside mannequin
    OnPlayerInteracted(Agent : agent) : void =
        # Play the wave emote on the mannequin
        DockMannequin.PlayEmote()

        # Obtain the fort_character so we can query body state
        if (FortChar := Agent.GetFortCharacter[]):
            # Pick the greeting based on whether the player is sneaking
            var GreetText : message = AhoyMessage("Ahoy, Sailor! Mind your step on the dock.")
            if (FortChar.IsCrouching[]):
                set GreetText = AhoyMessage("Sneaky one, aren't ye?")

            # Show the personalised message to exactly this agent
            GreetingHUD.Show(Agent, GreetText, ?DisplayTime := 4.0)

Line-by-line breakdown:

Lines What's happening
DockMannequin.InteractedWithEvent.Subscribe(OnPlayerInteracted) Hooks our handler to fire every time a player presses the interact button on the mannequin.
OnPlayerInteracted(Agent : agent) The event delivers a plain agent; we work from there.
DockMannequin.PlayEmote() Immediately triggers the emote animation configured in the Character Device properties.
Agent.GetFortCharacter[] Converts the agent into a fort_character interface — this is a failable call, hence the [] and the surrounding if.
FortChar.IsCrouching[] A failable query — succeeds only when the character is actually crouching.
GreetingHUD.Show(Agent, GreetText, ?DisplayTime := 4.0) Shows a custom message to this specific player for 4 seconds, using the overload that accepts an agent, a message, and an optional display time.

Common patterns

Pattern 1 — Hide the mannequin until a player jumps off the clifftop

The mannequin starts hidden. The moment the player's character jumps, it reveals itself as a surprise NPC.

using { /Fortnite.com/Characters }
using { /Fortnite.com/Devices }
using { /Fortnite.com/Playspaces }
using { /Verse.org/Simulation }

clifftop_reveal_device := class(creative_device):

    # Mannequin hidden by default in its device properties
    @editable
    SurpriseNPC : character_device = character_device{}

    OnBegin<override>()<suspends> : void =
        # Grab every player currently in the playspace and listen for their jump
        AllPlayers := GetPlayspace().GetPlayers()
        for (P : AllPlayers):
            if (FortChar := P.GetFortCharacter[]):
                FortChar.JumpedEvent().Subscribe(OnAnyoneJumped)

    OnAnyoneJumped(Jumper : fort_character) : void =
        # Reveal the hidden clifftop NPC the first time anyone leaps
        SurpriseNPC.Show()
        SurpriseNPC.Enable()

Key point: JumpedEvent() is a method that returns a listenable(fort_character), so the handler receives the fort_character directly — no unwrapping needed.


Pattern 2 — Broadcast a crew-wide HUD alert when a player is eliminated near the lagoon

When any player goes down, flash a message to everyone and clear it after a moment.

using { /Fortnite.com/Characters }
using { /Fortnite.com/Devices }
using { /Fortnite.com/Playspaces }
using { /Verse.org/Simulation }

CrewAlert<localizes>(S : string) : message = "{S}"

lagoon_alert_device := class(creative_device):

    @editable
    CrewHUD : hud_message_device = hud_message_device{}

    OnBegin<override>()<suspends> : void =
        AllPlayers := GetPlayspace().GetPlayers()
        for (P : AllPlayers):
            if (FortChar := P.GetFortCharacter[]):
                FortChar.EliminatedEvent().Subscribe(OnEliminated)

    OnEliminated(Result : elimination_result) : void =
        # Show a broadcast message to all players for 5 seconds
        CrewHUD.Show(CrewAlert("A crew member has fallen in the lagoon!"), ?DisplayTime := 5.0)

        # After the round, clear the slate
        CrewHUD.ClearAllMessages()

Key point: EliminatedEvent() delivers an elimination_result struct containing both EliminatedCharacter and an optional EliminatingCharacter. The no-agent Show(Message, ?DisplayTime) overload broadcasts to all players.


Pattern 3 — Disable the mannequin interaction once used, re-enable after a delay

Prevents players from spamming the dock mannequin interaction.

using { /Fortnite.com/Characters }
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }

CooldownMsg<localizes>(S : string) : message = "{S}"

dock_cooldown_device := class(creative_device):

    @editable
    DockNPC : character_device = character_device{}

    @editable
    CooldownHUD : hud_message_device = hud_message_device{}

    OnBegin<override>()<suspends> : void =
        DockNPC.InteractedWithEvent.Subscribe(OnInteracted)

    OnInteracted(Agent : agent) : void =
        # Lock the mannequin immediately
        DockNPC.Disable()

        # Tell the interacting player how long to wait
        CooldownHUD.Show(Agent, CooldownMsg("The sailor needs a moment to rest..."), ?DisplayTime := 3.0)

        # Re-enable after the cooldown on a background task
        spawn { ReEnableAfterDelay() }

    ReEnableAfterDelay()<suspends> : void =
        Sleep(5.0)
        DockNPC.Enable()

Key point: Disable() / Enable() on character_device control whether the mannequin accepts interactions. Sleep requires a <suspends> context, so we spawn a separate async task.

Gotchas

1. GetFortCharacter[] is failable — always wrap in if

agent.GetFortCharacter[] uses the [] failable-call syntax. If you call it without an if (or block) guard the compiler will reject it. NPCs and spectators may not have a fort_character, so the guard is semantically correct too.

# WRONG — compile error
FortChar := Agent.GetFortCharacter[]

# CORRECT
if (FortChar := Agent.GetFortCharacter[]):
    # safe to use FortChar here

2. State queries like IsCrouching[] are also failable

They succeed only when the condition is true. Use them inside if — don't expect a bool return.

# WRONG — IsCrouching[] returns void on success, not bool
IsCrouching := FortChar.IsCrouching[]

# CORRECT
if (FortChar.IsCrouching[]):
    # player is crouching

3. messagestring — use a localised wrapper

hud_message_device.Show and SetText take a message, not a raw string. Declare a thin localisation helper:

MyMsg<localizes>(S : string) : message = "{S}"
# then pass: MyMsg("Hello, sailor!")

There is no StringToMessage function in Verse.

4. JumpedEvent() is a method, not a property

Note the parentheses: FortChar.JumpedEvent() — calling it returns the listenable. Omitting () is a type error.

5. EliminatedEvent() is also a method

Same pattern: FortChar.EliminatedEvent().Subscribe(Handler). The handler receives an elimination_result struct, not an agent.

6. DisplayTime := 0.0 means persistent

Passing ?DisplayTime := 0.0 to hud_message_device.Show keeps the message on screen indefinitely. Call Hide(Agent) or ClearAllMessages() explicitly to remove it.

7. character_devicefort_character

character_device is the placed prop/mannequin device. fort_character is the runtime player avatar interface. They are completely separate types — don't try to cast one to the other.

Guides & scripts that use fort_character

Step-by-step tutorials that put this object to work.

Build your own lesson with fort_character

Generate a personalized, step-by-step lesson plan built around this object — grounded in this exact reference and our compile-verified knowledge base.

Build a lesson →