Posted on

Designing a new “dialogue” pipeline

With each new episode of The Last Door, programmers find some “spare” time at the beggining of the cycle, while the artist are concentrated in the preproduction of the new episode (writing the script, designing the puzles, and so on). Our goal for this part of the process is to enhance our engine and our production pipeline, to fix those aspects that we found more problematic while crafting the previous episode.

This time around, one of the main objectives was to replace the tool we used to create the dialogue trees of “The Playwright”.  For this episode, we used a Unity plugin called “Dialoguer” which enabled us to have the engine ready in time. In the end,  it turned out to be a bad choice for us: it was not as robust or easy to use (specially everything related to dialogue variables was really tedious). Iterating the conversations of this episodes, in the last weeks of the development cycle was indeed painful.

So, before anything else for the new episode, we knew the dialogue tree editor in our pipeline needed to be replaced. This time around, we knew better what to look for: support for multiple node selection and support for “undo”. We took a closer look at the state of the art in the Asset Store, and finally settled for “Dialogue System” by PixelCrushers.

This awesome plugin is full of features, althouh many of them won’t be needed for our pourposes. After trying a demo version, we were convinced that it met our new requirements, particularly the editor beign really robust and easy to use, and fast to work with.

The strategy to migrate the game engine to the new dialogue pipeline was:

  1. Recreate some of the most complex dialogues tree from ‘The Playwright’ inside Dialogue System, to make sure its does support all the required features.
  2. Use the previous experience to identify customization oportunities in Dialogue System’s functionality. It’s very powerfull an generic, and we’d rather need it to be exactly and only what we need for TLD.
  3. Port the dialogue manager of our game to read dialogues from the new Dialogue System’s data model. Test dialogues made with the new plugin do run ok in the game.
  4. Replace Dialogue Manager own’s localization with our engine-wide one.
  5. Port the rest of dialogues from ‘The Playwright’ using the new and now customized editor.
  6. Remove the previous dialogue tool from our code base.
  7. Simplify Dialogue System by removing everything not explcitly needed in our game, thus making the tool simpler to use, and reducing the overall code base.

This are the features we ended up customizing in Dialogue System:

  • Clasify entries by type, with our stablished set of node types: phrase, group, group choice, variable set, variable check, & event.
  • Integration with our localization system, so you can enter/modify localized text directly from Dialogue System’s inspectors.
  • Customization of the size, color and presentation of entries depending on type. Make the dialogue more readable in the diagram.
  • Limit conections from ‘variable check’ entries to two, one for ‘condition met’, and other ‘condition not met’. Make then green and red to make them easy to discern.
  • Remove from DialogueEntry class all fields that we were no longer of use.
  • Customize the context menu to create new nodes specifying the type. Make ‘group’ types only create children of type ‘group choice’.
  • Simplify the inspector of entries, so only relevant fields are shown depending of entry type.


First and most importantly, we’d like to recommend Dialogue System to anyone looking for a dialogue and quest editor plugin. It’s simply great, and has plenty of features ready to be used. Additionally, full source code it’s included, so you can customize it to your needs. I’d like to add a very personal note to this: the code is remarkably well written, at least to my standards. It was really easy to undertake customizations even as deep and heavy as the ones we did.

This post describe the work of a whole week for me. The result has been not only a remarkable improvement in the time required to make new dialogues, but also in how easy and affordable is to make iterations in dialogues to improve the gameplay once we’re in playtesting and beta stages. This is specially important for The Last Door, since we really need to make plenty of adjustments iterating the gameplay, looking for the perfect look and feel for the episode.