The dialogue systems I designed, built and maintained:
Gameplay conversation
An unobtrusive conversation system which lets players move around freely at all times. This was already designed when I started the project, so the focus was a close collaboration with Narrative Animation (all conversation NPCs are fully mo-capped) and UI (dialogue choices appearing on screen and performing the correct callbacks when selected).
Biggest challenges:
- Player movement and interruption – we had to descope the interruption system as we didn’t have the time to smoothly handle re-entering a conversation after leaving its “active radius”. We now confine the player to the “choice radius”, the range at which choices are displayed, during dialogue (should have done this from the start!)
- Animation – transitioning characters from AI locomotion or to/from non-conversation idles; handling players coming and going; item exchange animations
- Persistence – this was a challenge for all systems and always required careful thought about what needed to be saved and when
Triggered dialogue
The meat and potatoes of the dialogue in Alan Wake 2, triggered dialogue is any dialogue played in response to player action, position or story development (outside of NPC combat barks and cinematics). I split this into two streams of dialogue: the Queue and the Hub.
Dialogue Queue
The queue is for any player-facing dialogue. We only ever want one piece of critical path dialogue to play at a time, and the queue ensures this dialogue is played as defined by dialogue priority and order of its queue addition. The queue ensures dialogue relevance, salience and persistence, so that only dialogue which is appropriate in that moment will play and will never play again.
Dialogue Hub
The hub is for any other dialogue which plays but is not essential for player comprehension of the story. Generally this is NPC chatter which might overlap with narration or a PC conversation. The hub also ensures relevance, salience and persistence of the dialogue.
Due to the overlapping nature of the Queue and the Hub, I would put them both in the same system in the future, but this wasn’t possible in the time constraints of the project.
Biggest challenges:
- Dialogue chains – we couldn’t use timelines for this dialogue as our timelines couldn’t change length when localised, and were not persistent. So we had to use dialogue chains, a C++ system which calculates the duration of a dialogue event and will fire the next in the chain after that period. It’s a horrible Frankenstein’s system built on top of a dialogue bark system which had perhaps the worst UX I have ever experienced.
- Unreliability – triggered dialogue relied on this old, arcane dialogue system which no coder at the company was familiar with any longer and this meant that often start and end callbacks (the events from C++ which drive the system) wouldn’t fire. This was more of an embarrassment than a challenge but, as you can imagine, in a game whose logic is so often driven by the completion of dialogue, this was a huge blocker at times
- Animation – making a relatively non-technical, user-friendly Lua template for all narrative designers to add animations to dialogue chains; ensuring timing, transitions and attachment of animations at the correct times and across saves
- Timing – dialogue pacing is everything and so triggered dialogue required many different timing techniques to ensure dialogue played when and how we want. Concepts like playback delay, minimum delay, countdown, expiration duration and completion loop became essential grammar in our dialogue Lua script
Ambient dialogue
Non-critical path NPC conversations which play when the player is within a large radius around them. Only one ambient dialogue conversation plays at a time but, optionally, a group’s conversation can be triggered instantly when the PC enters the radius for the first time.
more coming very shortly…
Generic dialogue
The generic dialogue system contains two sub-systems: reactions and prompts.
Reactions
Reaction dialogue is player character dialogue in response to common PC actions, such as failing to open doors, going out of bounds, or an incorrect answer to a puzzle. The system makes sure this dialogue is not played too often and is only played when relevant. Contained in the Reaction sub-system is the PC combat bark logic, which ensures individual player combat lines are only played once per encounter, only when relevant and not too often.
Prompts
The prompt stream systemically plays player character suggestions to push the story forward, prompting players to engage with whatever is relevant to the current mission (e.g. case board, profiling, plot board etc.).
more coming very shortly…
Other systems, features and responsibilities:
Generic animation
Simple way for any narrative, level or mission designer to play generic animations on the player character (e.g. scared reaction, phone call animations, pass under obstacle etc.)
more coming very shortly…
Echo scenes
A wonderfully thematic piece of design I had to implement in close collaboration with a wonderful VFX artist. Players have to align two halves of an eclipse to unlock story elements. The alignment requires finding the correct angle and position. A surprising amount of math was required to calculate all the values to determine all this!
more coming very shortly…
Complex setups
coming very shortly…
Onboarding
coming very shortly