Reference Devices compiles

reboot_van_device: Bringing Teammates Back from the Brink

The Reboot Van is one of Fortnite's most iconic comeback mechanics — a glowing van that lets teammates resurrect eliminated players. In UEFN, the `reboot_van_device` (and its drivable sibling `vehicle_spawner_drivable_reboot_van_device`) expose a full Verse API so you can enable or disable rebooting mid-match, gate revival behind custom conditions, and react to every card purchase or successful revive. Whether you're building a last-squad-standing mode or a wave-defense where rebooting costs res

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

Overview

The Reboot Van device lets players bring eliminated teammates back into the game by collecting and cashing in Reboot Cards at the van. In Verse, the device is represented by reboot_van_device, which inherits from reboot_van_interface. Its drivable variant, vehicle_spawner_drivable_reboot_van_device, extends this with additional controls for the revival seat and the underlying vehicle.

When to reach for it:

  • You want to enable or disable rebooting at specific moments (e.g., rebooting is only allowed during a 30-second window between waves).
  • You need to react to a Reboot Card purchase — for example, to deduct gold from a player's score.
  • You want to detect when a revive completes — for example, to grant the revived player a shield potion.
  • You need to configure decay, recharge timers, or purchase options at runtime.

The core interface is reboot_van_interface, which provides:

  • EnableReboot() / DisableReboot() — toggle the van on/off.
  • IsEnabledReboot[] — a failable check for current state.
  • RebootCardPurchaseEvent — fires when a player buys a Reboot Card.

The drivable variant (vehicle_spawner_drivable_reboot_van_device) adds:

  • EnableRevive() / DisableRevive() — toggle the revival seat independently.
  • IsEnabledRevive[] — check revival seat state.
  • ReviveCompleteEvent — fires when a player is fully revived from DBNO.
  • Configurable vars: CanPurchaseRebootCard, DecayRateMultiplier, RebootProgressDecay, RechargeTimer, RechargeTimerLength.

API Reference

reboot_van_device

Allow players to bring eliminated teammates back into the game.

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

reboot_van_device<public> := class<concrete><final>(creative_device_base, reboot_van_interface):

Walkthrough

Scenario: A wave-defense mode where the Reboot Van is disabled by default. After each wave ends (simulated here by a trigger), the van becomes active for 20 seconds so teammates can revive fallen squadmates. When a Reboot Card is purchased, a message is broadcast. When a revive completes, the revived player is noted.

wave_reboot_manager_device := class(creative_device):

    # The drivable Reboot Van placed in your level
    @editable
    RebootVan : vehicle_spawner_drivable_reboot_van_device = vehicle_spawner_drivable_reboot_van_device{}

    # A trigger_device the designer fires to signal "wave complete"
    @editable
    WaveEndTrigger : trigger_device = trigger_device{}

    # A hud_message_device to show status text
    @editable
    StatusHUD : hud_message_device = hud_message_device{}

    # How long the van stays active between waves (seconds)
    @editable
    RebootWindowSeconds : float = 20.0

    OnBegin<override>()<suspends> : void =
        # Start with the van disabled — no rebooting during combat
        RebootVan.DisableReboot()
        RebootVan.DisableRevive()

        # Subscribe to the wave-end trigger
        WaveEndTrigger.TriggeredEvent.Subscribe(OnWaveEnded)

        # Subscribe to reboot card purchases
        RebootVan.RebootCardPurchaseEvent.Subscribe(OnCardPurchased)

        # Subscribe to revive completions
        RebootVan.ReviveCompleteEvent.Subscribe(OnReviveComplete)

    # Called when the wave-end trigger fires
    OnWaveEnded(Agent : ?agent) : void =
        spawn { RunRebootWindow() }

    # Opens the van for RebootWindowSeconds, then closes it again
    RunRebootWindow()<suspends> : void =
        RebootVan.EnableReboot()
        RebootVan.EnableRevive()
        Sleep(RebootWindowSeconds)
        RebootVan.DisableReboot()
        RebootVan.DisableRevive()

    # Fires when any player purchases a Reboot Card
    OnCardPurchased(Buyer : agent) : void =
        # React to the purchase — e.g., log it, deduct currency, etc.
        # Here we just confirm the van is still enabled before acting
        if (RebootVan.IsEnabledReboot[]):
            # Van is active; purchase is valid
            spawn { AcknowledgePurchase(Buyer) }

    AcknowledgePurchase(Buyer : agent)<suspends> : void =
        # Brief pause, then check state again
        Sleep(0.1)
        # Additional logic (e.g., deduct score) would go here

    # Fires when a player finishes being revived
    OnReviveComplete(RevivedPlayer : agent) : void =
        # Grant the revived player a bonus or log the event
        spawn { HandleRevived(RevivedPlayer) }

    HandleRevived(RevivedPlayer : agent)<suspends> : void =
        Sleep(0.5)
        # e.g., trigger an item granter for the revived player
        # ItemGranter.GrantItem(RevivedPlayer)  ← wire up your own granter

Line-by-line highlights:

Line What it does
RebootVan.DisableReboot() Shuts off the van at match start — no rebooting during combat.
RebootVan.DisableRevive() Also disables the revival seat (DBNO revive).
WaveEndTrigger.TriggeredEvent.Subscribe(OnWaveEnded) Listens for the designer-placed trigger that signals a wave ended.
RebootVan.RebootCardPurchaseEvent.Subscribe(OnCardPurchased) Subscribes to card purchases — agent is the buyer.
RebootVan.ReviveCompleteEvent.Subscribe(OnReviveComplete) Subscribes to completed revives — agent is the player who was revived.
RebootVan.IsEnabledReboot[] Failable check — only succeeds if the van is currently enabled.
spawn { RunRebootWindow() } Runs the timed window asynchronously so OnWaveEnded returns immediately.
Sleep(RebootWindowSeconds) Waits the configured duration, then disables the van again.

Common patterns

Pattern 1 — Conditional reboot: only allow rebooting if a team has fewer than 2 players alive

This snippet checks the van's enabled state and toggles it based on a custom game condition. Wire TeamCheckTrigger to a repeating trigger or a score event.

conditional_reboot_device := class(creative_device):

    @editable
    RebootVan : vehicle_spawner_drivable_reboot_van_device = vehicle_spawner_drivable_reboot_van_device{}

    # A trigger that fires periodically or when a player is eliminated
    @editable
    TeamCheckTrigger : trigger_device = trigger_device{}

    # Minimum alive count below which rebooting is allowed
    @editable
    MinAliveToAllowReboot : int = 2

    # Track alive count (set by your elimination logic)
    var AliveCount : int = 4

    OnBegin<override>()<suspends> : void =
        RebootVan.DisableReboot()
        TeamCheckTrigger.TriggeredEvent.Subscribe(OnCheckTeam)

    OnCheckTeam(Agent : ?agent) : void =
        if (AliveCount < MinAliveToAllowReboot):
            # Team is small — allow rebooting
            if (not RebootVan.IsEnabledReboot[]):
                RebootVan.EnableReboot()
        else:
            # Team has enough players — no rebooting
            if (RebootVan.IsEnabledReboot[]):
                RebootVan.DisableReboot()

Pattern 2 — Recharge timer manipulation: reset the recharge timer when a VIP player is eliminated

This pattern shows writing to RechargeTimer and RechargeTimerLength at runtime.

vip_reboot_reset_device := class(creative_device):

    @editable
    RebootVan : vehicle_spawner_drivable_reboot_van_device = vehicle_spawner_drivable_reboot_van_device{}

    # A trigger that fires when the VIP is eliminated
    @editable
    VIPEliminatedTrigger : trigger_device = trigger_device{}

    # How long the recharge takes normally (seconds)
    @editable
    NormalRechargeLength : float = 60.0

    # Penalty recharge when VIP is eliminated (seconds)
    @editable
    PenaltyRechargeLength : float = 120.0

    OnBegin<override>()<suspends> : void =
        # Set the default recharge length
        RebootVan.RechargeTimerLength = NormalRechargeLength
        VIPEliminatedTrigger.TriggeredEvent.Subscribe(OnVIPEliminated)

    OnVIPEliminated(Agent : ?agent) : void =
        # Punish the team: extend the recharge and reset the timer
        RebootVan.RechargeTimerLength = PenaltyRechargeLength
        RebootVan.RechargeTimer = PenaltyRechargeLength

Pattern 3 — Enable/disable the revival seat independently from rebooting

Some modes want players to be able to revive DBNO teammates but NOT cash in Reboot Cards (or vice versa). EnableRevive / DisableRevive are separate from EnableReboot / DisableReboot.

revive_only_mode_device := class(creative_device):

    @editable
    RebootVan : vehicle_spawner_drivable_reboot_van_device = vehicle_spawner_drivable_reboot_van_device{}

    # Trigger to switch into "revive only" mode
    @editable
    ReviveOnlyTrigger : trigger_device = trigger_device{}

    # Trigger to restore full reboot capability
    @editable
    FullRebootTrigger : trigger_device = trigger_device{}

    OnBegin<override>()<suspends> : void =
        # Start fully enabled
        RebootVan.EnableReboot()
        RebootVan.EnableRevive()

        ReviveOnlyTrigger.TriggeredEvent.Subscribe(OnReviveOnly)
        FullRebootTrigger.TriggeredEvent.Subscribe(OnFullReboot)

        # React to every completed revive
        RebootVan.ReviveCompleteEvent.Subscribe(OnReviveDone)

    OnReviveOnly(Agent : ?agent) : void =
        # Allow DBNO revives, but block card purchases
        RebootVan.DisableReboot()
        RebootVan.EnableRevive()

    OnFullReboot(Agent : ?agent) : void =
        RebootVan.EnableReboot()
        RebootVan.EnableRevive()

    OnReviveDone(RevivedPlayer : agent) : void =
        # Check revival seat is still enabled before acting
        if (RebootVan.IsEnabledRevive[]):
            spawn { PostReviveBonus(RevivedPlayer) }

    PostReviveBonus(RevivedPlayer : agent)<suspends> : void =
        Sleep(1.0)
        # e.g., grant a shield — wire your item_granter here

Gotchas

1. reboot_van_device vs vehicle_spawner_drivable_reboot_van_device

The plain reboot_van_device class (the static prop van) exposes only the reboot_van_interface methods. The drivable variant (vehicle_spawner_drivable_reboot_van_device) is a full vehicle spawner and adds EnableRevive, DisableRevive, IsEnabledRevive[], ReviveCompleteEvent, and all the configurable vars. If you need ReviveCompleteEvent or ReviveCompleteEvent, you must use vehicle_spawner_drivable_reboot_van_device as your field type.

2. IsEnabledReboot[] and IsEnabledRevive[] are failable — use them inside if

These are <decides> functions. Calling them outside a failure context is a compile error. Always write:

if (RebootVan.IsEnabledReboot[]):
    # van is on

Never call them as plain statements.

3. RebootCardPurchaseEvent sends agent, not ?agent

Unlike some device events that send ?agent, RebootCardPurchaseEvent sends a concrete agent. Your handler signature should be OnCardPurchased(Buyer : agent) : void = — no optional unwrap needed.

4. ReviveCompleteEvent also sends a concrete agent

Same as above — the revived player is a non-optional agent. No if (A := Agent?) unwrap required.

5. DecayRateMultiplier is ?float — check before setting

The var is typed ?float. If the device is configured without custom decay, this may be false (none). When writing to it, assign an option: RebootVan.DecayRateMultiplier := option{1.5}. Reading it requires an unwrap: if (Rate := RebootVan.DecayRateMultiplier?):.

6. RechargeTimer clamps between 0.0 and 3600.0

Setting RechargeTimer to a value outside that range is silently clamped. If there is no active timer, setting it does nothing. Make sure the van is in a recharging state before you try to manipulate the timer.

7. Always declare the device as an @editable field

You cannot write vehicle_spawner_drivable_reboot_van_device{}.EnableReboot() inline — that creates a detached instance with no connection to the placed device. The device must be declared as an @editable field and wired in the UEFN editor's Details panel.

Device Settings & Options

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

Reboot Van Device settings and options panel in the UEFN editor — Enabled on Game Start, Recharge Time
Reboot Van Device — User Options in the UEFN editor: Enabled on Game Start, Recharge Time
⚙️ Settings on this device (2)

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

Enabled on Game Start
Recharge Time

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