This morning I read a post on Tom Francis blog about conversations in games and I realized that all the iterations that I’ve done for dialogues in TWELVE MINUTES could make an interesting post.
As with everything else, the task of creating a dialog system, became much bigger than I ever expected. Here are some of the iterations it went through:
At the start I always imagined that the interactions would be through a world cloud. In this concept not only the dialogues but all the interactions with the environment would be based on this cloud. It would hover around the player, and change dynamically, based on the objects around. If starting a dialog, you would get a new set of words for the possible answers.
As the player progressed and learned new things, the words in the cloud would update accordingly.
Here are some of the mockups I had when the game was on a 24 hour cycle.
It felt like a great idea. The size of the words and color would change depending on the importance, and you could also jump from one word to another to select different topics (that is a concept I ended up using later on).
I had also decided that you could access the dialog cloud outside a conversation, almost like a organic notebook that would allow you to know how much you have unlocked and to refresh your memory in case you were lost in the puzzles/story.
I implemented a working version, only to realize it wasn’t working as I expected. The cloud was too overpowering, always telling you what to do just because it was there. You would no longer feel you are make any decisions but just waiting for the cloud to show you what is available.
Also, if you need the cloud to remind you of the puzzles and what to do, that means there are some major problems with the game design.
My next thought was to have something similar to Façade or the old Leisure Suit Larry games, where you just type what you want to say.
I assumed that the player would love the idea of being able to type whatever they wanted…but then how likely am I to be able to write a non generic answer to everything you try to ask?
And, does the player really want infinite possibilities? Also, do you really want to type the same questions, over and over again?
Now I understand why so many games before me do dialogues a certain way, it’s because it works well.
In the end I went with a more classical set of dialog options with some slight variations since you are living the same day and you will repeat the same question over and over.
Here are some of the rules of the current system:
Provide what I believe are the things the player wants to ask. If I end up having more than 4 questions at a time, make sure I subdivide into topics and make sure that each topic never has more than 4 questions. If it does, it means I’m over complicating somewhere.
The player acquires Knowledge throughout the game. Every time you unlock that Knowledge, the dialogues will be updated / unlocked / removed.
The dialogues are also updated based on how many times they’ve been spoken. Asking the same thing, without any new Knowledge, the character will try, for example, to say it faster or show frustration in repeating the same lines.
Instead of options like “Say you like it.” or “Say you don’t like it.” I provide something like “Say what you think.”. This allows the player to clearly understand how the main character feels and creates a good sense of progression. You can still choose what to talk about but not decide how the main character feels about it. This makes the player feel more connected with the main character.
Conversations are always in real-time. You can fast forward a dialog line but you are actually speeding up time. This means that everything you do will always take the same time, creating some interesting dynamics where you need to start saying things faster to be able to have time to do other tasks.
I also always provide the option to “Leave Conversation” so you don’t feel stuck.
Specific dialogues can only be initiated by dragging certain objects to the character you want to speak with. This allows the player to be more expressive and show intention when wanting to speak about certain topics.
Tools of the trade
The last thing worth mentioning is the tools I’m using to create these.
I originally started with the obvious choice of ChatMapper but soon realized that it wasn’t doing quite what I wanted. It has too many options to play with, and its not that fast when I just want to quickly draft concepts.
I then decided to try flow charts/mind maps programs.
I tried Microsoft Vizio, Smart Draw and a couple of others but they were also too slow and clunky for my needs.
Finally I stumbled on yEd Graph Editor and wow…it just blew every other program out of the water. It’s fast, super intuitive and smooth. I was very surprise of how quickly I was able to write ideas and re-shuffle them over and over. It always looks good, clean and organized.
In the end I decided to also use yEd for defining the NPC routines and tasks or anything that required a logical flow.
Here is a screenshot of how a draft of a bunch of dialogues looks (texts are blank to avoid spoilers):
And a close up of one single dialog:
Each Dialog (purple pointy boxes) is a class and contains a list of Scripts (the very light blue boxes in the background).Depending on how many times that dialog was spoken, it loads a different Script from the list. If the player Knowledge changes then a new dialog set gets loaded.
In the example above we have 2 possible replies to a question. The 3 columns on the left are one single answer that changes Dialogues depending on the Knowledge and each Dialog has 2 sets of Scripts. The column on the right is a reply that currently only has 1 possible Script. (I try to only add complexity to answers as I see players using them more).
Each Script is a set of different instructions. The first one is the title (in orange), then how it displays on screen (white box), then the text lines, one per character (the yellow and bright purple ones), and finally extra instructions in dark purple (e.g. play an audio file, load a character task).At the end, the pointy orange boxes, define what happens at the end of the dialog (e.g. does the conversation end, go to another Script, moves to the parent topic etc.).
The whole system ended up being custom. At the start it felt like a daunting task but now I’m happy that I know it like the back of my hand. It does only what it needs to do and the way I want it!