Here’s my approach to writing complex, branching, and meaningful conversations in my indie adventure game Postmortem: one must die. Took many attempts to figure out a good way so sharing the lessons!
Our Game got often complimented for its intricate dialog:
“… example of how to write nuanced characters with a reach into complex late-game branching narratives … which happens little elsewhere in videogameland.”
– PCGamer.com, Cara Ellison
“… magnificent game for politically interested people and players who enjoy getting shown the consequences of their actions.”
– Rebell.at, Tom Schaffer
… so I thought we’d share our “secret”!
0. The Editor – setting yourself up right
For writing the conversations, I wanted something visual and node based, but did not want to reinvent the wheel. So I used the awesome free yED Graph Editor for the task, using the “node description” field as sort of metadata about the node type (i.e. nodetype=”npc_says” or nodetype=”player_response”). I then created several templates with distinct visual styles to help differentiate. I used pugiXML to parse the actual .graphml files used by yED and pretty quickly I had a workable, yet powerful, node-based, scripting-supporting conversation editor.
1. General Concept
Start off with just general idea of who the character is, his background, how they fit in the world etc. Refine and flesh out until you have a clear idea of the person. Also consider how picking/not picking them affects the endgame results and concepts and how the character can be influenced by the player or in-game events.
For example, Seldon can be influenced to be more pro-Oldager which passes Connely 5-Point Plan but lowers Life Quality overall (higher production costs = higher prices), or more pro-Newager which angers TFF spiking violence, but prevents Franz from becoming his HR head and thus does not hold back women empowerment as much.
2. Distill and Make game-ready
Now that you have a wealth of notes, it’s time to get them ready for in-game! Distill all your notes into bullet points of “things that need to be communicated” at some point in the game (via conversation with them, conversing with others about them, notes, journals, cutscenes, etc.) Also include how they affect the ending and others.
3. Conversation Outline
My general approach for a conversation is having one or two main long “branches” of a convo that the player is almost forced to go through. This ensures that:
a) the player gets all the key information they need; and
b) the player makes choices that influence the character.
This is an important design principle that ensures player does not miss key points (if they decide to converse with a character). If you look at the “big view” of the conversations you can clearly see those branches.
4. Narrative Beats and Branching Filler
Start off writing key nodes – nodes that will either convey the essential bits of information (each bullet!) or ask the player a question that will influence the character. To the right is an example of how how my bullet list translated to key nodes.
Now it’s time to add branching filler nodes to string the key beat nodes into a properly flowing conversation while offering different, meaningful choices. The best way I found it is to add a few brief, but branching nodes between and use scripting to have the NPC “remember” what was said, impacting ending. But bring the branches back on the same topic in time for the next key node (narrative beat).
You may need to reword, reorder or split nodes to make this work. Also use this branching filler as opportunity to reveal more about the character, get him arguing with the player, etc.
5. Non-essential side branches
Now that the core of the conversation is done, you can add other branches like “ask about somebody” or “ask about conflict.” This is usually much briefer and draws directly from your notes.
Note: Avoid important plot or endgame-influencing nodes in these auxiliary branches as the player is far more likely to miss or forget them if they are buried somewhere.
6. Test, Refine, Repeat
Now that you got the conversation down, run through it ingame picking different options to see if it flows. Find bits that are jarring and smooth them out, maybe separate a big chunk into a different branch, maybe take away a few boring nodes. Have others look at it too for some clean, unbiased feedback.
Read about our OTHER Tools and Resources right here!
Thanks for this article! It’s awesome!
I am currently working on a point and click adventure and yEd Graph is exactly what I was looking for,
Awesome, I’ve been looking into similar software over the last couple of weeks but I always felt that the various solutions were too complicated or simply lacking vital functions, so this is perfect!
(I am currently working on an action/adventure-game with tons of dialogue.)