Skip to content

Messenger Subsystems

Two messenger systems let you wire the simulated OS to gameplay without tight coupling.

SubsystemScopeIdentifiersBest for
Global MessengerEntire UWorldGameplay tagsTerminal → door, switch → level sequence
Device MessengerOne running deviceFName eventsMail badge, battery UI, program ↔ program
flowchart TB
  subgraph global["Global Messenger — world scope"]
    direction LR
    Term["UOperatingSystemTerminalCommand"] --> GM["UGlobalMessageSubsystem"] --> Door["Level actor listener"]
  end
  subgraph device["Device Messenger — device scope"]
    direction LR
    Mail["BP_Prog_Mail"] --> DM["FOperatingSystemDeviceMessengerSystem"] --> Taskbar["UOperatingSystemTaskbarButton"]
  end
TutorialFocus
Using Global MessengerDoor toggle from terminal
Using Device MessengerIn-device program events
sequenceDiagram
  participant T as UOperatingSystemTerminalCommand
  participant G as UGlobalMessageSubsystem
  participant A as Any world listener
  participant D as FOperatingSystemDeviceMessengerSystem
  participant P as UOperatingSystemBaseProgram
  Note over T,A: World scope
  T->>G: BroadcastMessage(gameplay tag)
  G->>A: ListenToMessage callback
  Note over D,P: Device scope only
  P->>D: Broadcast(FName event)
  D->>P: BeginListening callback

The standalone demo opens a roof door via Global Messenger with zero direct references between Terminal and actors.