Workflows
Working With Dialogues
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.
Name | Description | Command | Example |
---|---|---|---|
Type Delay | delay of character typed in message | t | [t=0.5] |
SFX | sound effect to play | s | [s=thump] |
Animation | animation to play on the speaker object | a | [a=Jump] |
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}
Searching Dialogue & Quest Assets
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.