Reference Devices compiles

prop_o_matic_manager_device: Running a Prop Hunt Round

Prop Hunt is the classic hide-and-seek mode: one team disguises as everyday props while the other team hunts them down. The prop_o_matic_manager_device is the brain of that mode — it tells you when a player enters or exits a disguise, lets you ping hidden props to reveal them, and controls the HUD hints hunters see. This article shows how to wire it up in Verse.

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

Overview

The prop_o_matic_manager_device customizes the Prop-O-Matic weapon (the tool that lets a player disguise as a prop) and the rules around it. It's the connective tissue of a Prop Hunt game mode: it fires events as players slip into and out of disguises, and it exposes methods to ping (briefly reveal) hidden props so hunters aren't stuck forever.

Reach for this device when you are building a prop hunt round and need Verse logic to react to disguise state — for example, awarding survival points when a prop finishes disguising, dropping ping frequency as the round gets tense, or manually blasting a ping when only a few props remain.

The device does not handle team assignment or elimination itself — pair it with team settings, an elimination manager, and a hiding prop device. What it gives you is the disguise lifecycle (BeginEnteringDisguiseEvent, FinishEnteringDisguiseEvent, ExitingDisguiseEvent), the ping hooks (PingPlayerPropEvent, PingAllPlayerPropsEvent, PingPlayerProps, PingPlayerProp), and the tuning knobs (SetPingProps, SetPingFrequency, SetShowPropsRemaining, SetShowPropPingCooldown, plus the IsPlayerProp query).

API Reference

prop_o_matic_manager_device

Allows customization of the Prop-o-Matic weapon functions and how the game reacts to players using it.

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

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

Events (subscribe a handler to react):

Event Signature Description
BeginEnteringDisguiseEvent BeginEnteringDisguiseEvent<public>:listenable(agent) Signaled when an agent begins entering a disguise. Sends the agent that began entering the disguise.
FinishEnteringDisguiseEvent FinishEnteringDisguiseEvent<public>:listenable(agent) Signaled when an agent finishes entering a disguise. Sends the agent that finished entering the disguise.
ExitingDisguiseEvent ExitingDisguiseEvent<public>:listenable(agent) Signaled when an agent exits a disguise. Sends the agent that exited the disguise.
PingPlayerPropEvent PingPlayerPropEvent<public>:listenable(agent) Signaled when a player prop has been pinged. Sends the agent that was pinged.
PingAllPlayerPropsEvent PingAllPlayerPropsEvent<public>:listenable(tuple()) Signaled when all player props have been pinged.

Methods (call these to make the device act):

Method Signature Description
SetPingProps SetPingProps<public>(On:logic):void Toggle Pinging props on/off.
SetPingFrequency SetPingFrequency<public>(Time:float):void Adjust the ping time.
SetShowPropsRemaining SetShowPropsRemaining<public>(On:logic):void Toggle showing the props remaining on the UI.
SetShowPropPingCooldown SetShowPropPingCooldown<public>(On:logic):void Toggle showing the prop ping cooldown.
PingPlayerProps PingPlayerProps<public>():void Manually ping all players that are currently hiding as props.
PingPlayerProp PingPlayerProp<public>(Agent:agent):void Manually ping a specific player if they are currently a prop.
IsPlayerProp IsPlayerProp<public>(Agent:agent)<transacts><decides>:void Returns whether a player is currently hiding or not.

Walkthrough

Let's build a mini round manager. When a player finishes entering a disguise we congratulate them; when they exit a disguise (they got spotted or the round ended) we log it. A trigger — think of it as the hunter's "reveal" button on a pedestal — manually pings every hidden prop. We also configure the manager at startup so pings happen on a sensible interval and the HUD shows how many props remain.

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

prop_hunt_round := class(creative_device):

    @editable
    PropManager : prop_o_matic_manager_device = prop_o_matic_manager_device{}

    @editable
    RevealButton : trigger_device = trigger_device{}

    Logger : log = log{Channel := prop_hunt_channel}

    OnBegin<override>()<suspends> : void =
        # Configure the manager for the round.
        PropManager.SetPingProps(true)          # allow automatic pinging
        PropManager.SetPingFrequency(20.0)      # ping hidden props every 20 seconds
        PropManager.SetShowPropsRemaining(true) # show "props remaining" on the HUD
        PropManager.SetShowPropPingCooldown(true)

        # React to the disguise lifecycle.
        PropManager.FinishEnteringDisguiseEvent.Subscribe(OnPropDisguised)
        PropManager.ExitingDisguiseEvent.Subscribe(OnPropRevealed)

        # A hunter pressing the reveal pedestal pings ALL hidden props.
        RevealButton.TriggeredEvent.Subscribe(OnRevealPressed)

        # React whenever a prop is pinged (auto or manual).
        PropManager.PingPlayerPropEvent.Subscribe(OnPropPinged)

    OnPropDisguised(Agent : agent) : void =
        Logger.Print("A player finished disguising as a prop.")

    OnPropRevealed(Agent : agent) : void =
        Logger.Print("A player exited their disguise.")

    OnRevealPressed(MaybeAgent : ?agent) : void =
        # The trigger hands us an optional agent; we don't need it here,
        # we just ping every hidden prop on the map.
        PropManager.PingPlayerProps()
        Logger.Print("Reveal pedestal pressed — pinging all props!")

    OnPropPinged(Agent : agent) : void =
        Logger.Print("A prop was pinged and briefly revealed.")

prop_hunt_channel := class(log_channel){}

Line by line:

  • The two @editable fields let you drop the placed Prop-O-Matic Manager and a Trigger into the slots in the UEFN Details panel. Without an @editable field you cannot call a placed device from Verse.
  • In OnBegin, the four Set... calls tune the round: SetPingProps(true) enables pinging at all, SetPingFrequency(20.0) sets the automatic ping cadence (a float — note the .0), and the two SetShow... calls turn on HUD hints.
  • FinishEnteringDisguiseEvent.Subscribe(OnPropDisguised) wires the "a player is now fully disguised" moment to our handler. Each disguise event is a listenable(agent), so the handler takes an agent directly.
  • RevealButton.TriggeredEvent.Subscribe(OnRevealPressed) gives hunters a physical button that calls PingPlayerProps() — the manual, ping-everyone method.
  • OnRevealPressed receives ?agent (the trigger's optional instigator). We ignore it and just fire PingPlayerProps().
  • PingPlayerPropEvent fires once per pinged prop, whether that ping came from the timer or from our button — great for scoring or SFX.

Common patterns

Ping one specific player when they stop moving

Use PingPlayerProp(Agent) to reveal a single player — e.g. a hunter's scanner locks onto whoever triggered a volume. We guard with IsPlayerProp so we never try to ping a hunter.

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

single_ping_device := class(creative_device):

    @editable
    PropManager : prop_o_matic_manager_device = prop_o_matic_manager_device{}

    @editable
    ScannerVolume : trigger_device = trigger_device{}

    Logger : log = log{Channel := single_ping_channel}

    OnBegin<override>()<suspends> : void =
        ScannerVolume.TriggeredEvent.Subscribe(OnScanned)

    OnScanned(MaybeAgent : ?agent) : void =
        if (Agent := MaybeAgent?):
            if (PropManager.IsPlayerProp[Agent]):
                PropManager.PingPlayerProp(Agent)
                Logger.Print("Scanner locked onto a hidden prop!")
            else:
                Logger.Print("Scanner found a hunter — ignoring.")

single_ping_channel := class(log_channel){}

Note IsPlayerProp is <decides>, so it's used in a failable context with square brackets: if (PropManager.IsPlayerProp[Agent]):.

React to a player beginning to disguise, and to the all-props ping

BeginEnteringDisguiseEvent fires the instant the disguise animation starts (before it finishes), and PingAllPlayerPropsEvent fires when every hidden prop was pinged at once. The all-props event carries a tuple(), so its handler takes no meaningful payload.

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

disguise_watch_device := class(creative_device):

    @editable
    PropManager : prop_o_matic_manager_device = prop_o_matic_manager_device{}

    Logger : log = log{Channel := disguise_watch_channel}

    OnBegin<override>()<suspends> : void =
        PropManager.BeginEnteringDisguiseEvent.Subscribe(OnBeginDisguise)
        PropManager.PingAllPlayerPropsEvent.Subscribe(OnAllPinged)

    OnBeginDisguise(Agent : agent) : void =
        Logger.Print("A player started slipping into a disguise.")

    OnAllPinged() : void =
        Logger.Print("Every hidden prop was pinged this cycle!")

disguise_watch_channel := class(log_channel){}

Tighten ping frequency as the round heats up

Call SetPingFrequency again at any time to change the cadence — here we start slow and speed up after a delay, so late-round props get exposed more often.

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

pacing_device := class(creative_device):

    @editable
    PropManager : prop_o_matic_manager_device = prop_o_matic_manager_device{}

    Logger : log = log{Channel := pacing_channel}

    OnBegin<override>()<suspends> : void =
        PropManager.SetPingProps(true)
        PropManager.SetPingFrequency(30.0) # relaxed early game
        Logger.Print("Round start: slow pings.")
        Sleep(120.0)                        # after two minutes...
        PropManager.SetPingFrequency(10.0)  # crank up the pressure
        Logger.Print("Late game: fast pings!")

pacing_channel := class(log_channel){}

Gotchas

  • Floats need a decimal. SetPingFrequency and SetTargetSpeed-style methods take float. Pass 20.0, not 20. Verse does not auto-convert int to float.
  • IsPlayerProp is failable, not a boolean return. Its signature is IsPlayerProp(Agent:agent)<transacts><decides>:void. Use it in a failable context with brackets: if (PropManager.IsPlayerProp[Agent]):. Do not write if (PropManager.IsPlayerProp(Agent)): or try to store a logic from it.
  • SetPingProps must be on for auto-pings. If you call SetPingFrequency but never SetPingProps(true), the timer won't fire automatic pings. Manual PingPlayerProps() / PingPlayerProp() still work regardless.
  • The all-props event carries tuple(), not an agent. PingAllPlayerPropsEvent handlers take no useful payload — write OnAllPinged() : void. Only the single-prop PingPlayerPropEvent gives you the agent.
  • Trigger instigators are optional. TriggeredEvent hands you ?agent; unwrap with if (Agent := MaybeAgent?): before using it. The disguise/ping events, by contrast, are listenable(agent) and hand you the agent directly.
  • The manager doesn't grant the Prop-O-Matic. You grant the weapon and assign teams via item granters / team settings. This device only customizes behavior and reports state.
  • HUD toggles are cosmetic hints. SetShowPropsRemaining and SetShowPropPingCooldown change what hunters see; they don't change the underlying ping logic.

Device Settings & Options

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

Prop O Matic Manager Device settings and options panel in the UEFN editor — Ping Hidden Props On Interval, Prop Ping Frequency, Should Show Props Remaining, Allow Disguise to be Canceled, Allow Changing Disguises, Prop Health Behavior, Equip Pickaxe After Cancelling Dis., Disguise Animation Duration
Prop O Matic Manager Device — User Options (1 of 2) in the UEFN editor: Ping Hidden Props On Interval, Prop Ping Frequency, Should Show Props Remaining, Allow Disguise to be Canceled, Allow Changing Disguises, Prop Health Behavior, Equip Pickaxe After Cancelling Dis., Disguise Animation Duration
Prop O Matic Manager Device settings and options panel in the UEFN editor — Ping Hidden Props On Interval, Prop Ping Frequency, Should Show Props Remaining, Allow Disguise to be Canceled, Allow Changing Disguises, Prop Health Behavior, Equip Pickaxe After Cancelling Dis., Disguise Animation Duration
Prop O Matic Manager Device — User Options (2 of 2) in the UEFN editor: Ping Hidden Props On Interval, Prop Ping Frequency, Should Show Props Remaining, Allow Disguise to be Canceled, Allow Changing Disguises, Prop Health Behavior, Equip Pickaxe After Cancelling Dis., Disguise Animation Duration
⚙️ Settings on this device (8)

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

Ping Hidden Props On Interval
Prop Ping Frequency
Should Show Props Remaining
Allow Disguise to be Canceled
Allow Changing Disguises
Prop Health Behavior
Equip Pickaxe After Cancelling Dis.
Disguise Animation Duration

Guides & scripts that use prop_o_matic_manager_device

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

Build your own lesson with prop_o_matic_manager_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 →