Hello everyone! After having developed the game’s quest system I’m now mostly done with the dialog system; the interface which lets you communicate with the game’s Non-Playable-Characters. Such an example of NPC is Kerold, an old inmate in the bowels of Dwindling Height’s prison (don’t mind him, he’s a bit mad 😀 ).
The dialog system of course deals with displaying the NPC’s dialog on screen (as there are no voiceovers in the game). Text is supported by a 2D portrait of the character’s expressions and sound effects. It’s a pretty tried-and-true approach which works quite nicely in the game.
But the dialog system also has to fulfill many other functions. In fact it can get pretty tricky to manage in the long run and it’s very important to make it modular and simple enough to maintain and/or expand. Here’s an overview example of a dialog tree structure (just a few branches actually):
NPCs can greet you with several different lines depending on the current situation. But through dialog they must also be able to interact with the game’s quest system I mentioned at the beginning.
They can query the state of some quests or tasks (quests are made of a certain number of tasks), they can start a new quest, trigger the completion of some others, check if Tilo has some items in his possession, or even give him some items, accomplish an action, etc…
At the heart of the dialog system lies a test-machine parsing many different conditions and displaying dialog nodes depending on the results. Dialog nodes are only revealed if their conditions are fulfilled and some nodes should only be displayed once and never again. The system needs to keep track of all this information and it is obviously crucial that everything stays synchronized!
Paul and I have spent a LOT of time talking about finding the “voice” of the characters and Paul has already written quite a few spiffy dialogs. So I have to say that adding at last this level of interaction to the game feels great…