Uniform Category Convention
CustomThunk Morphing Pins
Zero Subsystem Access

Uniform Category Convention

Every system follows the same 4-level category pattern: Core (3–4 most used) → Query (read-only) → Advanced (batch, cache) → Debug (history, telemetry).

PGX|{System}
Core
3–4 most-used functions. The essentials.
PGX|{System}|Query
Read-only
Getters, state inspection, validation checks.
PGX|{System}|Advanced
Batch
Batch operations, registration, cache, config.
PGX|{System}|Debug
Telemetry
History, telemetry, snapshots, statistics.

Blueprint Libraries

Each system exposes its full API through a single UPGXFooBlueprintLibrary. Representative nodes shown below.

Save

SaveContext
Write a context to a named slot
Core
GetSaveGame
Read a domain object
Data|Read
QuickSave
Save now, blocking
Core
DoesSlotExist
Check a slot exists
Data|Read
SetActiveSlot
Choose the active slot
Core
TriggerAutoSave
Run autosave now
Core

Audio

PlaySound2D
Play a 2D sound
Playback
PlayMusic
Play music with fade-in
Music
SetChannelVolume
Set a channel volume
Volume
StopMusic
Stop music with fade-out
Music
GetActiveSoundCount
Count active sounds
Query
SwitchBackend
Switch the audio backend
Backend

GameFlow

SetStateByTag
Change state by tag
Core
GetCurrentFlowTag
Read the current state
Core
RevertToPreviousFlow
Go back one state
Core
IsCurrentFlowTag
Test the current state
Query
GetChannelHistory
Read state history
Query

EventHandler

QuickExecute
Fire an event now
Core
RegisterHandler
Register a handler class
Advanced
CanExecuteEvent
Test if an event runs
Query
IsEventRegistered
Test if an event exists
Query
MakeEventContext
Build an event context
Query

Message

Broadcast PGX Message
Send a struct message
Core
Listen for PGX Messages
Subscribe by channel
Core
GetPayload
Read the typed payload
Core

Data Registry

FindRegistryEntry
Find one entry by tag
Query
GetAllRegistryEntries
List a database
Query
ResolveRegistryAsset
Resolve an asset by tag
Core
HasRegistryDatabase
Test a database exists
Query
QueryByTag
List entries by tag
Query

PSO

RequestPSOWarmUp
Start PSO warm-up
Core
GetPSOWarmUpState
Read warm-up state
Query
GetPSOProgress
Read warm-up progress
Query
IsPSOWarmUpComplete
Test if warm-up finished
Query
SavePSOCacheToDisk
Persist the PSO cache
Advanced

Profile

GetProjectProfile
Read the project profile
Core
GetBudgetValue
Read a budget value
Budgets
IsCapabilityEnabled
Test a capability
Capabilities
IsProfileResolved
Test if profile resolved
Query
GetProjectMode
Read the project mode
Identity

Loading

RequestLoading
Show a loading screen
Core
ForceCloseLoading
Force-close loading
Core
IsLoadingActive
Test if loading shows
Query
GetLoadingProgress
Read load progress
Query
RequestSkip
Request skip
Core

LevelFlow

RequestLevelTransition
Change level by tag
Core
CancelLevelTransition
Cancel the transition
Core
GetCurrentLevelTag
Read the current level
Core
IsLevelTransitionActive
Test if transitioning
Query
RequestSubLevelLoad
Load a sublevel
SubLevel

Log

PGXLog
Log a message
Core
PGXLogWarning
Log a warning
Core
GetEntryCount
Count session entries
Query
GetCurrentSessionEntries
Read session entries
Query

Blueprint Workflow Examples

Pseudocode showing typical Blueprint node flows. Nodes call the same operations as C++.

// Blueprint: Save a counter to a slot (PGXDemo flow)

PGX Save
  SaveContext(
    ContextTag: "PGX.Save.Context.Demo",
    SlotName:   "DemoSlot"
  )
  GetSaveGame(
    DomainTag: "PGX.Save.Domain.Progress"
  ) → Data
  QuickSave(
    ContextTag: "PGX.Save.Context.Demo"
  )
  DoesSlotExist(
    ContextTag: "PGX.Save.Context.Demo",
    SlotName:   "DemoSlot"
  ) → bool

// Data values are written in C++ (WriteInt). Nodes read them back.
// Blueprint: Play background music + sound effect

PGX Audio | Playback
  PlayMusic(
    Music:  MusicAsset,
    FadeIn: 2.0
  )

  PlaySound2D(
    Sound:  ConfirmSound,
    Params: MakeParams
  )

PGX Audio | Volume
  SetChannelVolume(
    ChannelTag: "PGX.Audio.Channel.Music",
    Volume:     0.7
  )

  GetChannelVolume(
    ChannelTag: "PGX.Audio.Channel.SFX"
  ) → float CurrentVolume
// Blueprint: Execute an event, register a handler

PGX EventHandler
  QuickExecute(
    EventTag: "PGX.Event.Ability.Cast"
  ) → EPGXEventResult

PGX EventHandler | Advanced
  RegisterHandler(
    EventTag:     "PGX.Event.Ability.Cast",
    HandlerClass: MyHandler,
    Lifecycle:    Cached
  )

// Query: CanExecuteEvent, IsEventRegistered
Save System

PGX|Save — The Convention in Practice

The 4-level pattern above isn’t theory. Here it is in the actual editor: Data, Data|Read, Data|Write, Query, Advanced, Debug — organized so you find the right node without scrolling a flat list.

Sub-categories · Zero ambiguity
Blueprint Palette — PGX|Save
Live in Editor
Blueprint Palette — PGX Save system nodes organized in 6 sub-categories
EventHandler

PGX|EventHandler — Same Pattern, Every System

Fire events, register handlers, query execution history. The same Core/Query/Advanced/Debug pattern you already know from Save. Learn one, know them all.

Consistent convention · Predictable discovery
Blueprint Palette — PGX|EventHandler
Live in Editor
Blueprint Palette — PGX EventHandler nodes showing Core, Query, Advanced, Debug categories
← Back to Core Overview Explore Systems →