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:
- progression is stopped (if a countdown timer was running)
- the
OptionSelectedevent fires - blackboard effects on the chosen connection are applied
- 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.