Skip to main content

Responses and Options

Responses are how the player makes choices during a conversation.

When a chat node finishes its beat groups and has multiple outgoing connections marked as displayable options, the ResponseService presents them as a selectable list.

How options appear

Not every outgoing connection becomes a visible option. A connection appears as an option when:

  • it is marked as displayable within options
  • its requirements are met (if it has any)

Connections that fail their requirements are hidden entirely. The player only sees choices that are currently valid.

Option labels

Each option displays a text label drawn from the connection data. Option text supports localisation through the same service used for beat text, so labels can change per locale.

Selecting an option

The player navigates through options using input actions:

  • NavigateUp and NavigateDown move the selection highlight
  • Advance confirms the current selection

Mouse input is also supported. Each option item has a DialogueOptionInteractionHandler that forwards click and hover events to the IDialogueInputService. Clicking an option selects it immediately. Hovering highlights it.

When the player confirms a selection:

  1. progression is stopped (if a countdown timer was running)
  2. the OptionSelected event fires
  3. blackboard effects on the chosen connection are applied
  4. the conversation navigates to the target node

Keyboard, mouse, and gamepad

The input service auto-detects whether the player is using keyboard and mouse or a gamepad. Display labels for input hints update accordingly.

You can configure the input mode preference in DialogueInputSettingsData:

  • AutoDetect -- switches based on the last input device used
  • KeyboardMouse -- always shows keyboard bindings
  • Gamepad -- always shows gamepad bindings

Dead ends

If no outgoing connections are available (all fail their requirements or the node has none), the system handles this as a dead end. The conversation bails out safely with a warning rather than freezing.

The options UI

Options are displayed through DialogueOptionsView, which manages a pooled list of DialogueOptionItemView items. The view activates or deactivates items from the pool as needed, sets labels, and highlights the currently selected option.

The visual styling is controlled through the dialogue theme. See UI and Theming for details.

Practical advice

For your first branching tree:

  • create a chat node with two or three outgoing connections
  • mark each connection as displayable
  • give each a clear label
  • test that selecting each option leads to the correct target node

Add requirement-gated options once basic branching works. That way you can tell whether a missing option is caused by a logic error or a requirement that is not being met.

Next step

Continue to Progression and Timing.