Reference Devices compiles

map_indicator_device: Custom Map Markers That React to Your Game

The `map_indicator_device` lets you stamp custom icons onto the minimap and overview map — and control them entirely from Verse. Whether you need a bomb-site marker that lights up when armed, a VIP beacon that pulses toward a fleeing target, or a capture-point icon that disappears when the point is taken, this device is your tool. Four focused methods give you full runtime control: show it, hide it, and fire a directional pulse at any agent.

Updated Examples verified on the live UEFN compiler
Watch the Knotmap_indicator_device in ~90 seconds.

Overview

The map_indicator_device is a placeable Creative device that renders a custom point-of-interest icon on both the minimap and the full overview map. You position it in the level editor, configure its icon, color, and label in the Details panel, and then drive its visibility and pulse behavior entirely from Verse at runtime.

When to reach for it:

  • Marking bomb sites, capture points, or VIP targets that should appear or disappear based on game state.
  • Guiding players toward an objective with a directional pulse arrow (like a waypoint).
  • Toggling map markers on/off as rounds progress (e.g., reveal the extraction zone only after a key event).

The device has no events — it is purely output. You react to other devices (triggers, capture areas, buttons) and call map_indicator_device methods to update the map accordingly.

API Reference

map_indicator_device

Used to create custom points of interest and markers on the minimap and overview map.

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

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

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.
ActivateObjectivePulse ActivateObjectivePulse<public>(Agent:agent):void Activates an objective pulse at Agent's location pointing toward this device.
DeactivateObjectivePulse DeactivateObjectivePulse<public>(Agent:agent):void Deactivates the objective pulse at Agent's location.

Walkthrough

Scenario: A two-phase heist. Phase 1 — the vault marker is hidden. When a player steps on a pressure plate, the vault map_indicator_device enables and every player receives a directional objective pulse pointing toward it. Phase 2 — when the same player steps off (or a second plate is triggered), the pulse deactivates and the marker is disabled again.

using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }

# heist_map_controller — place this Verse device in your level,
# then wire up the editable fields in the Details panel.
heist_map_controller := class(creative_device):

    # The map indicator sitting above the vault door in the level.
    @editable
    VaultIndicator : map_indicator_device = map_indicator_device{}

    # A trigger plate the player steps on to "discover" the vault.
    @editable
    DiscoveryPlate : trigger_device = trigger_device{}

    # A second plate (or the same plate's exit) that resets the state.
    @editable
    ResetPlate : trigger_device = trigger_device{}

    # Track the agent who triggered the discovery so we can deactivate their pulse.
    var ActiveAgent : ?agent = false

    OnBegin<override>()<suspends> : void =
        # Start with the vault hidden — players don't know where it is yet.
        VaultIndicator.Disable()

        # Subscribe to both plates.
        DiscoveryPlate.TriggeredEvent.Subscribe(OnVaultDiscovered)
        ResetPlate.TriggeredEvent.Subscribe(OnVaultReset)

    # Called when a player steps on the discovery plate.
    # TriggeredEvent sends ?agent, so we unwrap it before use.
    OnVaultDiscovered(MaybeAgent : ?agent) : void =
        if (A := MaybeAgent?):
            # Show the vault icon on every player's map.
            VaultIndicator.Enable()

            # Fire a directional pulse FROM the triggering player TOWARD the vault.
            VaultIndicator.ActivateObjectivePulse(A)

            # Remember who triggered so we can clean up later.
            set ActiveAgent = option{A}

    # Called when the reset plate fires — hide the vault again.
    OnVaultReset(MaybeAgent : ?agent) : void =
        # Deactivate the pulse for whoever currently has it.
        if (A := ActiveAgent?):
            VaultIndicator.DeactivateObjectivePulse(A)

        # Hide the marker entirely.
        VaultIndicator.Disable()

        set ActiveAgent = false

Line-by-line explanation:

Lines What's happening
@editable VaultIndicator Binds to the map_indicator_device you placed in the level. Without @editable the device reference is unknown at runtime.
VaultIndicator.Disable() in OnBegin Hides the marker immediately when the round starts — players start blind.
DiscoveryPlate.TriggeredEvent.Subscribe(OnVaultDiscovered) Wires the plate's fire event to our handler.
OnVaultDiscovered(MaybeAgent : ?agent) TriggeredEvent delivers ?agent (an optional). We must unwrap it with if (A := MaybeAgent?): before passing it to ActivateObjectivePulse.
VaultIndicator.Enable() Makes the icon appear on the map for all players.
VaultIndicator.ActivateObjectivePulse(A) Draws a directional arrow on A's screen pointing toward the indicator's world position.
set ActiveAgent = option{A} Stores the agent so the reset path can deactivate the correct pulse.
VaultIndicator.DeactivateObjectivePulse(A) Removes the pulse arrow from that player's HUD.

Common patterns

Pattern 1 — Round-based visibility toggle

Enable a capture-point marker at round start and disable it when the round ends. Uses Enable and Disable.

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

capture_point_marker_controller := class(creative_device):

    @editable
    CapturePointIndicator : map_indicator_device = map_indicator_device{}

    # A trigger that fires when the round starts (e.g., from a Class Designer or Game Manager).
    @editable
    RoundStartTrigger : trigger_device = trigger_device{}

    # A trigger that fires when the round ends.
    @editable
    RoundEndTrigger : trigger_device = trigger_device{}

    OnBegin<override>()<suspends> : void =
        # Hidden until the round officially begins.
        CapturePointIndicator.Disable()
        RoundStartTrigger.TriggeredEvent.Subscribe(OnRoundStart)
        RoundEndTrigger.TriggeredEvent.Subscribe(OnRoundEnd)

    OnRoundStart(MaybeAgent : ?agent) : void =
        # Reveal the capture point on the map for everyone.
        CapturePointIndicator.Enable()

    OnRoundEnd(MaybeAgent : ?agent) : void =
        # Hide it once the round is over — clean slate for the next round.
        CapturePointIndicator.Disable()

Pattern 2 — Per-player objective pulse on item pickup

When a player picks up a flag (simulated here by a trigger), activate a pulse pointing them toward the drop-off zone. Uses ActivateObjectivePulse and DeactivateObjectivePulse.

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

flag_carrier_pulse_controller := class(creative_device):

    # Indicator placed at the drop-off zone.
    @editable
    DropOffIndicator : map_indicator_device = map_indicator_device{}

    # Fires when a player picks up the flag item.
    @editable
    FlagPickupTrigger : trigger_device = trigger_device{}

    # Fires when the flag is scored or dropped.
    @editable
    FlagScoredTrigger : trigger_device = trigger_device{}

    var CarryingAgent : ?agent = false

    OnBegin<override>()<suspends> : void =
        DropOffIndicator.Enable()  # Drop-off is always visible on the map.
        FlagPickupTrigger.TriggeredEvent.Subscribe(OnFlagPickedUp)
        FlagScoredTrigger.TriggeredEvent.Subscribe(OnFlagScored)

    OnFlagPickedUp(MaybeAgent : ?agent) : void =
        if (A := MaybeAgent?):
            # Show a directional pulse arrow on the carrier's screen toward the drop-off.
            DropOffIndicator.ActivateObjectivePulse(A)
            set CarryingAgent = option{A}

    OnFlagScored(MaybeAgent : ?agent) : void =
        if (A := CarryingAgent?):
            # Remove the pulse now that the flag has been scored or dropped.
            DropOffIndicator.DeactivateObjectivePulse(A)
        set CarryingAgent = false

Pattern 3 — Multi-site bomb markers (enable/disable independently)

Two bomb sites, each with its own map_indicator_device. Enable both at match start; disable a site's marker when it is defused. Demonstrates calling Enable and Disable on multiple independent indicators.

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

bomb_site_marker_controller := class(creative_device):

    @editable
    SiteAIndicator : map_indicator_device = map_indicator_device{}

    @editable
    SiteBIndicator : map_indicator_device = map_indicator_device{}

    # Triggers wired to defuse completion logic for each site.
    @editable
    SiteADefusedTrigger : trigger_device = trigger_device{}

    @editable
    SiteBDefusedTrigger : trigger_device = trigger_device{}

    OnBegin<override>()<suspends> : void =
        # Both sites visible from match start.
        SiteAIndicator.Enable()
        SiteBIndicator.Enable()

        SiteADefusedTrigger.TriggeredEvent.Subscribe(OnSiteADefused)
        SiteBDefusedTrigger.TriggeredEvent.Subscribe(OnSiteBDefused)

    OnSiteADefused(MaybeAgent : ?agent) : void =
        # Remove Site A from the map — it's no longer a threat.
        SiteAIndicator.Disable()

    OnSiteBDefused(MaybeAgent : ?agent) : void =
        SiteBIndicator.Disable()

Gotchas

1. Always declare the device as @editable

You cannot write map_indicator_device{} inline and call methods on it at runtime — the instance must be the one you placed in the UEFN level. Declare it as an @editable field and assign it in the Details panel. A bare map_indicator_device{} in code creates a detached, non-functional object.

2. TriggeredEvent delivers ?agent, not agent

trigger_device.TriggeredEvent is a listenable(?agent). Your handler signature must be (MaybeAgent : ?agent), and you must unwrap with if (A := MaybeAgent?): before passing A to ActivateObjectivePulse or DeactivateObjectivePulse. Passing the raw ?agent directly is a compile error.

3. ActivateObjectivePulse is per-agent

ActivateObjectivePulse(Agent) attaches the directional pulse to one specific player. If you want every player to see a pulse, you must iterate over all players and call it for each one. Similarly, DeactivateObjectivePulse only removes the pulse for the agent you pass — other players keep theirs.

4. Enable/Disable affect all players simultaneously

Unlike the pulse methods, Enable and Disable are global — they show or hide the marker on everyone's map at once. There is no per-player visibility toggle in the current API.

5. Devices start in the state you set in the Details panel

If you leave the device Enabled in the editor and call Disable() in OnBegin, there will be one frame where the marker is visible. For a clean hidden-at-start experience, also set the device to Disabled in the Details panel so it never flickers on.

6. No events on this device

map_indicator_device has zero events — it cannot tell you when a player looks at the marker or interacts with it. Combine it with trigger_device, capture_area_device, or button_device to react to player actions.

Device Settings & Options

The map_indicator_device User Options panel in the UEFN editor — every setting you can tune.

Map Indicator Device settings and options panel in the UEFN editor — Enabled on Game Start, lcon, Icon Color, Text, Text Color, Icon Scale
Map Indicator Device — User Options (1 of 2) in the UEFN editor: Enabled on Game Start, lcon, Icon Color, Text, Text Color, Icon Scale
Map Indicator Device settings and options panel in the UEFN editor — Enabled on Game Start, lcon, Icon Color, Text, Text Color, Icon Scale
Map Indicator Device — User Options (2 of 2) in the UEFN editor: Enabled on Game Start, lcon, Icon Color, Text, Text Color, Icon Scale
⚙️ Settings on this device (6)

Setting names read from the panel above — may be partial; the screenshots are the source of truth.

Enabled on Game Start
lcon
Icon Color
Text
Text Color
Icon Scale

Guides & scripts that use map_indicator_device

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

Build your own lesson with map_indicator_device

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 →