Dialogue System

How to author and play back branching dialogue in GS_Play — the Dialogue Editor, node types, conditions, effects, performances, and the runtime sequencer.

The Dialogue System is the authoring and runtime core of GS_Cinematics. Dialogue is authored visually in the Dialogue Editor — a node graph tool where sequences are built from Text, Selection, Effects, and Performance nodes inside a .dialoguedatabase container file. At runtime, GS_DialogueManagerComponent manages the active database and maps performer names to entities in the level, while DialogueSequencerComponent drives playback — walking the graph, evaluating conditions, executing effects, and emitting events that UI components consume.

For architecture details, component properties, and extending the system in C++, see the Framework API reference.

Dialogue Manager component in the O3DE Inspector

 

Contents


Dialogue Editor

Dialogue is authored in the Dialogue Editor — a visual node graph tool opened from GS Tools > Dialogue Editor. Each .dialoguedatabase file is a container holding all actors and sequences for a dialogue database. Sequences are built as directed node graphs: connect Text, Selection, Random, Effects, and Performance nodes to define the conversation flow. The editor saves the entire container as one file — individual sequences are not separate assets.

Conditions, effects, and performance types from any gem are discovered automatically at startup and appear in the editor without modifying GS_Cinematics.

Dialogue Editor in the O3DE Editor


Database Model

A .dialoguedatabase file is a container managed entirely through the Dialogue Editor:

Container ContentsPurpose
Actors / PerformersCharacter definitions with portrait and metadata. Defined on the Performers page.
SequencesEach sequence is an independent graph, opened as a tab via the Sequence Sidebar.
System settingsDatabase-level defaults, on the System page.

The editor saves and loads the entire container as one file. Individual sequences are not separate assets. Switch the active database at runtime via DialogueManagerRequestBus::ChangeDialogueDatabase.

Authoring a Sequence

  1. Open GS Tools > Dialogue Editor
  2. File > New → save as .dialoguedatabase
  3. Define performers on the Performers page
  4. On the Sequences page, click Add in the sidebar, name the sequence
  5. Build the graph: drag nodes from the palette, connect FlowOut → FlowIn
  6. Ctrl+S to save the database

Node Types

Each sequence is a directed graph of nodes connected by FlowOut → FlowIn slots.

NodeWhat It Does
StartEntry point. Auto-spawned, one per sequence.
TextDisplays a line of dialogue from a speaker. Supports localization.
SelectionPresents the player with choices. One FlowOut slot per option.
RandomSelects a random outgoing branch. Supports weighted randomization.
EffectsExecutes one or more DialogueEffect objects.
PerformanceTriggers a DialoguePerformance action, optionally waits for it to complete.
EndTerminates the sequence.

Dialogue Nodes in the Dialogue Editor


Conditions

Conditions are polymorphic objects added to any node. The sequencer evaluates all conditions before entering a node — failed conditions cause the evaluator to skip it and try the next valid path.

Condition TypeWhat It Evaluates
Boolean_DialogueConditionA base boolean comparison.
Record_DialogueConditionChecks a game record via the RecordKeeper system.

Custom conditions from any gem are discovered automatically — subclass DialogueCondition, reflect it, and it appears in the inspector type picker.

Effects Node with Conditions in the Dialogue Editor


Effects

Effects are polymorphic objects executed when the sequencer reaches an Effects node.

Effect TypeWhat It Does
SetRecords_DialogueEffectSets one or more game records via the RecordKeeper system.
ToggleEntitiesActive_DialogueEffectActivates or deactivates entities in the level.

Custom effects follow the same discovery pattern as conditions.


Performances

Performances are polymorphic actions executed at Performance nodes. The sequencer can optionally wait for completion before advancing.

Performance TypeWhat It Does
MoveTo_DialoguePerformanceSmoothly moves a performer to a named stage marker.
PathTo_DialoguePerformanceNavigates a performer to a marker via NavMesh.
RepositionPerformer_DialoguePerformanceInstantly teleports a performer to a marker (non-blocking).

Custom performance types are discovered automatically.


Runtime Playback

GS_DialogueManagerComponent

The top-level manager for all dialogue. Holds the active database, maps performer names to level entities, and is the entry point for starting sequences.

BusMethodWhat It Does
DialogueManagerRequestBusStartDialogueSequenceByNameStarts a named sequence from the active database.
DialogueManagerRequestBusChangeDialogueDatabaseLoads a different .dialoguedatabase asset.
DialogueManagerRequestBusRegisterPerformerMarkerRegisters a performer entity by name for the current level.
DialogueManagerRequestBusGetPerformerReturns the entity for a named performer.

DialogueSequencerComponent

Drives sequence playback. Walks the graph, evaluates conditions, executes effects, triggers performances, and emits notifications for the UI layer.

BusMethod / EventPurpose
DialogueSequencerRequestBusStartDialogueBySequenceBegins playback of a sequence object directly.
DialogueSequencerNotificationBusOnDialogueTextBeginFires when a Text node executes — carries speaker and text data.
DialogueSequencerNotificationBusOnDialogueSequenceCompleteFires when the sequence reaches its End node.

Localization

Text nodes store lines as LocalizedStringId references — a key plus default fallback text. At runtime Resolve() looks up the key in the active LocalizedStringTable and returns the localized string. If no table is loaded or the key is absent, the fallback text is used.


ScriptCanvas Usage

Starting a Dialogue Sequence

Performer Marker Setup


Quick Reference

NeedBusMethod / Event
Start a sequence by nameDialogueManagerRequestBusStartDialogueSequenceByName
Load a different databaseDialogueManagerRequestBusChangeDialogueDatabase
Register a performerDialogueManagerRequestBusRegisterPerformerMarker
Get a performer entityDialogueManagerRequestBusGetPerformer
Start a sequence directlyDialogueSequencerRequestBusStartDialogueBySequence
React to a text lineDialogueSequencerNotificationBusOnDialogueTextBegin
React to sequence endDialogueSequencerNotificationBusOnDialogueSequenceComplete

Glossary

TermMeaning
Dialogue EditorThe visual gs_graphcanvas-based tool for authoring dialogue sequences
DialogueDatabaseA .dialoguedatabase container asset holding actors and sequences
DialogueSequenceA graph of nodes defining a single dialogue conversation
DialogueConditionA polymorphic evaluator gating node entry
DialogueEffectA polymorphic action executed at Effects nodes
DialoguePerformanceA polymorphic action that moves or repositions performers; optionally blocking
PerformerA named actor entity in the level mapped from the database via DialoguePerformerMarkerComponent

For full definitions, see the Glossary.


See Also


Get GS_Cinematics

GS_Cinematics — Explore this gem on the product page and add it to your project.