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
agentwithGetAgent(needed by any device method that takes anagent)
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. message ≠ string — 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_device ≠ fort_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.