Reference Devices compiles

overlord_spire_device: Scripting a Boss Encounter in Verse

The Overlord Spire is a built-in, boss-like environmental encounter that hammers your players with beams, homing projectiles, ground slams, and screams. With Verse you can listen to each phase of its attack cycle and choreograph the rest of your level — opening safe zones during slams, playing cinematics on a scream, or scoring players who survive a beam.

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

Overview

The overlord_spire_device is a pre-built boss encounter. You drop it in your level, set an Activation Distance, and when players get close it spawns and begins cycling through attacks: a charged beam, homing projectiles, a ground slam (with a recover phase when its appendage weakpoint gets stuck), and a scream.

What makes it powerful for creators is that every phase fires a listenable event. You don't control the Spire's attacks from Verse with methods — instead you react to its built-in behavior to drive the rest of your encounter. Reach for it when you want a dramatic arena fight where the environment itself responds: a damage zone that activates during the scream, a cinematic camera that plays when the slam lands, score awarded for surviving a beam, or a teleporter that yanks players to a safe room when the boss is about to slam.

One important note: this device exposes events only in the surface you'll subscribe to. The interesting work is wiring those events to other devices (timers, cinematics, score managers, damage volumes) that you DO call methods on.

API Reference

overlord_spire_device

A boss-like environmental encounter that will attack players with different abilities

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

overlord_spire_device<public> := class<concrete><final>(creative_device_base, has_spire_functionality):

Events (subscribe a handler to react):

Event Signature Description
SpawnEvent SpawnEvent<public>:listenable(tuple()) Triggers when the Spire is spawned, either from players entering the Activation Distance or by events.
BeginBeamEvent BeginBeamEvent<public>:listenable(tuple()) Triggers when the Spire begins charging up its beam attack
EndBeamEvent EndBeamEvent<public>:listenable(tuple()) Triggers when the Spire finishes shooting its beam attack
BeginHomingProjectileEvent BeginHomingProjectileEvent<public>:listenable(tuple()) Triggers when the Spire starts spawning homing projectiles to fire
EndHomingProjectileEvent EndHomingProjectileEvent<public>:listenable(tuple()) Triggers when the last homing projectile has exploded
BeginSlamEvent BeginSlamEvent<public>:listenable(tuple()) Triggers when the Spire begins its slam attack
EndSlamEvent EndSlamEvent<public>:listenable(tuple()) Triggers when the Spire has finished recovering from the slam attack
BeginSlamRecoverEvent BeginSlamRecoverEvent<public>:listenable(tuple()) Triggers when the Spire begins trying to recover from the slam attack, when the appendage weakpoint is stuck in the ground.
EndSlamRecoverEvent EndSlamRecoverEvent<public>:listenable(tuple()) Triggers when the Spire finishes recovering from the slam attack and the appendage weakpoint is no longer stuck in the ground.
BeginScreamEvent BeginScreamEvent<public>:listenable(tuple()) Triggers when the Spire begins to perform the scream.
EndScreamEvent EndScreamEvent<public>:listenable(tuple()) Triggers when the Spire has finished performing the scream

Walkthrough

Let's build a complete arena. When the Spire spawns, we start an encounter timer. When it begins a slam, we activate a damage volume on the ground (so players must jump or move). When the slam recover phase begins (the weakpoint is exposed and stuck), we play a cinematic to telegraph the opening. When it screams, we award score to everyone who is still alive in the arena, and when the scream ends we turn the damage volume back off.

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

overlord_arena := class(creative_device):

    @editable
    Spire : overlord_spire_device = overlord_spire_device{}

    @editable
    EncounterTimer : timer_device = timer_device{}

    @editable
    SlamDamageZone : damage_volume_device = damage_volume_device{}

    @editable
    WeakpointCinematic : cinematic_sequence_device = cinematic_sequence_device{}

    @editable
    SurvivorScore : score_manager_device = score_manager_device{}

    OnBegin<override>()<suspends>:void =
        # The damage zone starts disabled — only dangerous during slams.
        SlamDamageZone.Disable()

        # Wire each phase of the boss to our arena logic.
        Spire.SpawnEvent.Subscribe(OnSpireSpawned)
        Spire.BeginSlamEvent.Subscribe(OnSlamBegin)
        Spire.EndSlamEvent.Subscribe(OnSlamEnd)
        Spire.BeginSlamRecoverEvent.Subscribe(OnRecoverBegin)
        Spire.BeginScreamEvent.Subscribe(OnScreamBegin)
        Spire.EndScreamEvent.Subscribe(OnScreamEnd)

    # Spire spawned (players entered Activation Distance) — start the clock.
    OnSpireSpawned():void =
        EncounterTimer.Start()
        SlamDamageZone.SetDamage(50)

    # Slam beginning — make the ground dangerous.
    OnSlamBegin():void =
        SlamDamageZone.Enable()

    # Slam fully recovered — ground is safe again.
    OnSlamEnd():void =
        SlamDamageZone.Disable()

    # Weakpoint exposed (appendage stuck) — telegraph the opening with a cinematic.
    OnRecoverBegin():void =
        WeakpointCinematic.Play()

    # Scream beginning — reward everyone still standing in the arena.
    OnScreamBegin():void =
        Survivors := SlamDamageZone.GetAgentsInVolume()
        for (Survivor : Survivors):
            SurvivorScore.Activate(Survivor)

    # Scream over — safe again.
    OnScreamEnd():void =
        SlamDamageZone.Disable()

Line by line:

  • The @editable fields are how Verse gets a handle on devices placed in your level. The Spire itself, plus the four helper devices we drive. You assign each in the Details panel after the script compiles.
  • In OnBegin we first Disable() the damage zone so the floor is safe until a slam happens.
  • Each Subscribe call connects one of the Spire's phase events to a handler method. Because every Spire event is a listenable(tuple()), the handler takes no parameterstuple() is the empty tuple, so there's no agent to unwrap.
  • OnSpireSpawned starts the encounter timer and presets the per-tick slam damage with SetDamage(50).
  • OnSlamBegin enables the damage volume; OnSlamEnd disables it again so the danger window matches the attack.
  • OnRecoverBegin plays a cinematic when the weakpoint is exposed — a classic boss tell.
  • OnScreamBegin calls GetAgentsInVolume() to find every agent still inside the arena zone and grants each one points with SurvivorScore.Activate(Survivor).
  • OnScreamEnd re-disables the zone as a safety net.

Common patterns

Beam phase → teleport players to a bunker

When the Spire charges its beam, yank everyone in the danger zone to a safe teleporter; bring them back when the beam ends.

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

beam_dodge_manager := class(creative_device):

    @editable
    Spire : overlord_spire_device = overlord_spire_device{}

    @editable
    DangerZone : damage_volume_device = damage_volume_device{}

    @editable
    Bunker : teleporter_device = teleporter_device{}

    OnBegin<override>()<suspends>:void =
        Spire.BeginBeamEvent.Subscribe(OnBeamCharge)
        Spire.EndBeamEvent.Subscribe(OnBeamDone)

    OnBeamCharge():void =
        Caught := DangerZone.GetAgentsInVolume()
        for (A : Caught):
            Bunker.Teleport(A)

    OnBeamDone():void =
        # Beam over — nothing to do here, players walk back out.
        DangerZone.Enable()

Homing projectiles → drive an urgency timer

Start a tight countdown when projectiles spawn and reset it once the last one detonates.

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

homing_phase_manager := class(creative_device):

    @editable
    Spire : overlord_spire_device = overlord_spire_device{}

    @editable
    DodgeTimer : timer_device = timer_device{}

    OnBegin<override>()<suspends>:void =
        Spire.BeginHomingProjectileEvent.Subscribe(OnProjectilesOut)
        Spire.EndHomingProjectileEvent.Subscribe(OnProjectilesGone)

    OnProjectilesOut():void =
        DodgeTimer.Start()

    OnProjectilesGone():void =
        DodgeTimer.Reset()

Scream phase → play a cinematic stinger

Use the scream's begin/end to bookend a dramatic camera move.

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

scream_stinger := class(creative_device):

    @editable
    Spire : overlord_spire_device = overlord_spire_device{}

    @editable
    ScreamCam : cinematic_sequence_device = cinematic_sequence_device{}

    OnBegin<override>()<suspends>:void =
        Spire.BeginScreamEvent.Subscribe(OnScream)
        Spire.EndScreamEvent.Subscribe(OnScreamOver)

    OnScream():void =
        ScreamCam.Play()

    OnScreamOver():void =
        ScreamCam.Stop()

Gotchas

  • Every Spire event is listenable(tuple()). That means your handler methods take no arguments — do NOT write OnSlamBegin(Agent:?agent). There is no instigating agent on these events. (The ActivateEvent overload in the broader API does carry ?agent, but the spawn/attack phase events in this surface do not.)
  • The device has no attack methods. You can't Spire.BeginBeam() — you only react. The attack cadence is controlled by the device's own AI and its Activation Distance setting. To get agents, query a helper device like a damage_volume_device with GetAgentsInVolume().
  • Subscribe in OnBegin, not at field-init time. Event subscriptions must happen inside the running OnBegin<override>()<suspends> body so the device handles exist.
  • SetDamage is clamped 1–500. Calling SlamDamageZone.SetDamage(50) is fine, but values outside that range are silently clamped — don't expect SetDamage(9999) to one-shot players.
  • score_manager_device.Activate needs an agent overload when Activating Team is restricted. We call SurvivorScore.Activate(Survivor) per-agent so each survivor is credited; if you used the no-arg Activate() it scores the device's configured target instead.
  • Don't forget to assign every @editable in the Details panel. An unassigned device reference compiles but does nothing at runtime — a common reason 'the Spire script isn't working'.

Device Settings & Options

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

Overlord Spire Device settings and options panel in the UEFN editor — Spawned at Game Start, Enabled at Game Start, Maximum Health, Weakpoint Health, Activation Distance, Show Visualization Range, Show Preview Clouds, Show Map lcon, Can Perform Beam Attack, Can Perform Homing Projectile, Can Perform Slam Attack, Can Perform Scream Attack
Overlord Spire Device — User Options in the UEFN editor: Spawned at Game Start, Enabled at Game Start, Maximum Health, Weakpoint Health, Activation Distance, Show Visualization Range, Show Preview Clouds, Show Map lcon, Can Perform Beam Attack, Can Perform Homing Projectile, Can Perform Slam Attack, Can Perform Scream Attack
⚙️ Settings on this device (12)

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

Spawned at Game Start
Enabled at Game Start
Maximum Health
Weakpoint Health
Activation Distance
Show Visualization Range
Show Preview Clouds
Show Map lcon
Can Perform Beam Attack
Can Perform Homing Projectile
Can Perform Slam Attack
Can Perform Scream Attack

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