Dialogue & Quest Editor

Workflows

Working With Dialogues

Demonstrating simple dialogue

For constructing dialogue, I decided to go with a node-based visualization since it would be easy to follow the flow of conversations, especially for dialogue that can branch out and jump around. To save development time, I imported a node-based plugin called xNode that would take care of nodes and graph views in the back end.

In the video demonstrating a simple conversation, you can see that as the dialogue advances, the graph view snaps to the current line, which makes testing dialogue simple. This was a feature I implemented with the help of xNode’s API.

Dialogue Commands

Another feature I implemented was dialogue commands. As a dialogue line is being read, a command is executed once the message reader reaches the command’s index in the message string.

This table displays the supported commands.

NameDescriptionCommandExample
Type Delaydelay of character typed in messaget[t=0.5]
SFXsound effect to plays[s=thump]
Animationanimation to play on the speaker objecta[a=Jump]
Usage of commands in dialogue
Usage of commands in dialogue

Global Variables

Since entities in stories can change in many ways, I needed to architect a solution that would allow global access to entity attributes, whose dynamic values could then be reflected in dialogue in runtime.

A global variable consists of a variable domain and the actual variable. In the image displaying the Variables tab, you can see that the view is displaying the variable domain PlayerInfo. This example domain consists of variables related to player information such as how many coins they have, their ID, and their name.

The tool allows you to generate variables, which means auto-generating a static class in which you can access those variables anywhere in your codebase as well as dialogue graphs.

In dialogue graphs, you can access global variables with the following syntax: {VariableDomain.variableName}

Customizable variables which can be initialized for dialogue
Customizable variables which can be initialized for dialogue
Accessing global variables in dialogue
Accessing global variables in dialogue
Global variables in action

Searching Dialogue & Quest Assets

Filtering dialogues in project
Filtering quests in project
Quests can be filtered by label

Validation

For massive projects containing a massive repository of dialogue and quests, validation is extremely useful in instantly detecting errors and missing data. So, I implemented some rules for the validator to check.

Sample console message for validating a search task asset
Sample console message for validating a search task asset
Thanks to our validator, we find out our target was missing
Thanks to our validator, we find out our target was missing
Tony Nguyen
Tony Nguyen
Technical Game Designer

Tenacious game developer with an unwavering passion for overcoming game development challenges.