Overview
The support_a_creator_device was intended to let island creators promote a Support-A-Creator (SAC) code to players. When a player activated the device in-game, it would open the same SAC dialog box they would see in the Creative hub, showing the creator's SAC information.
Current status: DEPRECATED. Epic Games has officially retired this device. It is no longer supported, and it exposes zero Verse API surface — no methods, no events, nothing to call or subscribe to. If you place one in a level and reference it from Verse, your code will compile (the class exists in the type system), but you cannot make it do anything programmatically.
When would you encounter this?
- You inherited an older UEFN project that already has one placed in the level.
- You are reading older tutorials or documentation that reference it.
- You are auditing a project for deprecated device usage before publishing.
What to do instead
Epic's current recommendation is to rely on the standard Fortnite Support-A-Creator flow built into the platform itself. There is no direct Verse-powered replacement device for in-island SAC dialogs at this time. Remove the device from your level and let the platform handle SAC attribution naturally.
API Reference
support_a_creator_device
DEPRECATED This device is no longer supported.Used to inform players of other content made by a creator using a Support-A-Creator code. When players activate the device, it will bring up the same Support-A-Creator dialog box they would see in the Creative hub. The Support-A-Creator information shows when the dialog box opens for the player.
Full public surface, resolved verbatim from the live Epic digest (Fortnite.digest.verse).
support_a_creator_device<public> := class<concrete><final>(creative_device_base):
Walkthrough
Because support_a_creator_device has no methods or events, the most practical "walkthrough" is a deprecation audit device — a real, compilable Verse creative device that demonstrates the correct pattern for referencing a placed device, while logging a clear warning to remind your team that the referenced device is deprecated and should be removed.
Imagine you are cleaning up an older island project. You want a Verse device that:
- Holds an
@editablereference to the legacysupport_a_creator_devicestill sitting in the level. - Runs at game start and prints a clear audit message so any playtester or developer sees the warning immediately.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# Audit device: flags deprecated support_a_creator_device placements at runtime.
# Place this in your level alongside any legacy support_a_creator_device instances.
sac_audit_device := class(creative_device):
# Wire this to the legacy support_a_creator_device in your level via the Details panel.
@editable
LegacySACDevice : support_a_creator_device = support_a_creator_device{}
# Localized audit message helper
AuditWarning<localizes>(S : string) : message = "{S}"
OnBegin<override>()<suspends> : void =
# The support_a_creator_device is fully deprecated.
# It has NO methods or events — we cannot call Enable, Disable, or subscribe to anything.
# This block exists solely to surface the audit warning at runtime.
Print("[SAC AUDIT] support_a_creator_device is DEPRECATED and has no Verse API.")
Print("[SAC AUDIT] Remove this device from your level before publishing.")
# If you need to reference the device object itself (e.g. to log its presence),
# the variable LegacySACDevice holds the reference — but nothing can be called on it.
# Example of a no-op reference (type-checks fine, does nothing useful):
var DeviceRef : support_a_creator_device = LegacySACDevice
Print("[SAC AUDIT] Device reference confirmed. No API surface available.")
Line-by-line explanation:
@editable LegacySACDevice— This is the mandatory pattern for referencing ANY placed Creative device from Verse. You wire it in the UEFN Details panel. Even though the device has no API, the reference is valid.AuditWarning<localizes>— Demonstrates the correct way to pass a string as amessagetype. Verse requires localized values formessageparameters; there is noStringToMessagefunction.OnBegin<override>()<suspends>— The standard entry point for acreative_device. All startup logic lives here.var DeviceRef— Shows that holding a typed reference to a deprecated device is syntactically valid; it simply offers nothing to call.
Common patterns
Pattern 1 — Detecting and logging deprecated devices during a level audit
This pattern shows how you might build a more general audit tool that checks multiple legacy devices and reports their presence, useful when inheriting large projects.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# General legacy-device audit logger.
# Add @editable slots for every deprecated device type in your project.
legacy_device_auditor := class(creative_device):
@editable
SACDevice : support_a_creator_device = support_a_creator_device{}
# Helper for localized messages
Msg<localizes>(S : string) : message = "{S}"
OnBegin<override>()<suspends> : void =
# Report the SAC device — no methods exist to call on it
Print("[AUDIT] support_a_creator_device found in level. Status: DEPRECATED. Action: Remove before publishing.")
# Continue auditing other legacy devices here...
Print("[AUDIT] Audit complete.")
Pattern 2 — Guarding new code paths so they never depend on the deprecated device
This pattern shows the correct architecture: use a button_device to drive SAC-adjacent UI flows yourself, completely bypassing the deprecated device.
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
# Replacement flow: use a button to show creator info via HUD message
# instead of relying on the deprecated support_a_creator_device.
creator_info_button_device := class(creative_device):
# A standard button the player interacts with
@editable
InfoButton : button_device = button_device{}
# The deprecated device is referenced only to satisfy a legacy level layout —
# we deliberately call NOTHING on it.
@editable
LegacySAC : support_a_creator_device = support_a_creator_device{}
CreatorMsg<localizes>(S : string) : message = "{S}"
OnBegin<override>()<suspends> : void =
# Subscribe to the button — this is the REAL interaction
InfoButton.InteractedWithEvent.Subscribe(OnInfoRequested)
Print("[INIT] Creator info button ready. Legacy SAC device ignored.")
# Handler receives ?agent from listenable(?agent)
OnInfoRequested(Agent : ?agent) : void =
if (A := Agent?):
Print("[INFO] Player requested creator info. Handle via platform SAC flow.")
else:
Print("[INFO] Creator info triggered (no agent).")
Gotchas
1. Zero API surface — nothing to call
The support_a_creator_device class body is completely empty. It inherits from creative_device_base, not the richer creative_device. There is no Enable(), no Disable(), no events. Any attempt to call a method on it will fail at compile time with "Unknown identifier" or "No member found".
2. @editable is still required for any device reference
Even though you can't do anything with the device, if you need to hold a reference to a placed instance (e.g. for an audit tool), you must declare it as an @editable field inside your class(creative_device). A bare support_a_creator_device{} in a local variable is a default-constructed value, not your placed instance.
3. Deprecation ≠ compile error (yet)
The device still exists in the type system and your code will compile. Deprecation in UEFN means "no longer supported and may be removed in a future release" — not "removed today". Do not rely on this. Remove it from your levels proactively.
4. No Verse replacement exists
There is currently no Verse-powered equivalent device for triggering an in-island SAC dialog. The platform's native SAC attribution handles this outside of island code. Do not search for an alternative API — route players to the standard Fortnite SAC flow instead.
5. message vs string — always use <localizes>
If you build any audit or notification logic around this (or any) device, remember: Verse does not accept raw string values where a message is expected. Always declare a <localizes> helper: MyMsg<localizes>(S:string):message = "{S}" and pass MyMsg("your text"). There is no StringToMessage function.