Dialogue Modding – pt 3 – Dialogue Wheel
✱ updated August 2024
Dialogue Wheel and Line Types
The Dialogue Wheel
The major change between DAO and DA2 conversations is the addition of the dialogue wheel and voiced player lines. Despite this big surface-level change, the underlying conversation structure changed very little. The whole thing is still just alternating owner/speaker lines and player/listener lines connected by child lines. Note that while the player character is indeed now also speaking, user-selected lines are still player/listener lines – though there will be a few weird exceptions detailed later in the post.
Everything Hawke or the Warden can say in response to a line is linked as a child of the speaker line they’re responding to. Unfortunately, this means that copies of the same dialogue wheel can be scattered all over a conversation branch if the NPC you’re talking to has a few variations in dialogue, or if there are investigate options that loop through several branches of conversation before returning to the wheel again. A single edit to a single dialogue wheel could require more hunting around the GFF than any other change.
If a player line has a condition that is not met, that line will not appear among the other options, as in DAO.
- 30204 CONVERSATION_LINE_CHILDREN_LIST [LINK] (3 items) - 0 LINK 30100 CONVERSATION_CHILD_LINE UINT16 11 30101 CONVERSATION_WHEEL_PARAPHRASE TlkString 6195813, 0 30301 CONVERSATION_WHEEL_CATEGORY UINT8 6 30300 CONVERSATION_WHEEL_ICON UINT8 255 30303 CONVERSATION_WHEEL_FOLLOWER UINT32 4294967295 - 1 LINK 30100 CONVERSATION_CHILD_LINE UINT16 22 30101 CONVERSATION_WHEEL_PARAPHRASE TlkString 6195830, 0 30300 CONVERSATION_WHEEL_CATEGORY UINT8 8 30301 CONVERSATION_WHEEL_ICON UINT8 255 30303 CONVERSATION_WHEEL_FOLLOWER UINT32 4294967295 - 2 LINK 30100 CONVERSATION_CHILD_LINE UINT16 27 30101 CONVERSATION_WHEEL_PARAPHRASE TlkString 6195838, 0 30300 CONVERSATION_WHEEL_CATEGORY UINT8 7 30301 CONVERSATION_WHEEL_ICON UINT8 255 30303 CONVERSATION_WHEEL_FOLLOWER UINT32 4294967295
You may recall from the GFF orientation that while child links in DAO dialogue files are a single integer, child links in DA2 conversation files are far more complex. The dialogue wheel is the reason for this.
30100 – this part, the ID of the line being linked, we’ve already covered.
30101 – on links to speaker lines this doesn’t matter (and is usually 4294967295, or 32 bits of “nope”), but on links to player lines, this is the string reference for the paraphrase that appears on the dialogue wheel. If you wish to simply rewrite a paraphrase without making any other changes, you can do so by adding a local string, as shown earlier.
In my experience, the paraphrase typically immediately follows Hawke’s spoken line in the talktable, because new lines are added to the talktable at the time the conversation file is saved, and the paraphrase and spoken line were usually added at the same time. There will, however, be exceptions if several lines of dialogue share a single paraphrase or, less often, if one line of dialogue has multiple paraphrases depending on the preceding line in the conversation.
30300 – this dictates both the position and icon of the dialogue wheel, and corresponds to entries in conversation_categories.gda. The “position” column in conversation_categories itself corresponds to entries in conversation_wheel_pos.gda.
30301 – normally 255, if you wish to override the icon in the center of the conversation wheel for that option, you can change it to a number corresponding to an entry in conversation_icons.gda.
30303 – Normally 4294967295, this otherwise corresponds with a number in conversation_followers.gda. It is not often, as far as I can tell, relevant, except where it is infrequently utilized to determine which follower should take the COOLEST FOLLOWER stage place in the cinematics.
GDAs can be extracted from packages\data\core\2da.rim
Hawke’s Personality
Hawke’s blue/purple/red personality is tracked by the genpt_personality plot (GUID D1C4E624FFF54413AD7DADD63B1CC2F3), which shows up in dialogue a lot. (A lot).
The following flags are frequently set as actions:
0 – adds a point to red personality
1 – adds a point to blue personality
2 – adds a point to purple personality
Sometimes Hawke has different lines that can play as the same response, based on their dominant personality. The following flags are used as conditions in that case:
3 – if red personality
4 – if blue personality
5 – if purple personality
These lines can autoplay, like when Hawke interjects in ambient party banter. Or the lines can all be attached to the same response on the dialogue wheel. If this is the case, that dialogue wheel option links to an “empty” player continue line, which itself has links to the personality-dependent responses. Remember when I said there are edge cases where Hawke’s dialogue will be a speaker rather than player line? This is what I meant. Generally Hawke’s lines are structured as player lines when they’re player selected and speaker lines when Hawke is speaking autonomously.
Remember that even in cases like this the last line linked should not have a condition set so it will never be possible to fall out of the conversation early if something goes wrong.
Fun fact: Hawke’s personality variables are stored in the save game with the other module variables (corresponding to lines in var_module.gda), which can be found under SAVEGAME_CAMPAIGN > SCRIPTVARTABLE.
1034 – PER_AGGRESSIVE_TOTAL (red personality)
1035 – PER_HELPFUL_TOTAL (blue personality)
1036 – PER_HUMOROUS_TOTAL (purple personality)
- 16000 SAVEGAME_CAMPAIGN - 17000 SCRIPTVARTABLE (68 items) - 0 *SVI1 17001 SCRIPTVARTABLE_NAME ECString 1034 17003 SCRIPTVARTABLE_VALUE INT32 11 - 1 *SVI1 17001 SCRIPTVARTABLE_NAME ECString 1035 17003 SCRIPTVARTABLE_VALUE INT32 58 - 2 *SVI1 17001 SCRIPTVARTABLE_NAME ECString 1036 17003 SCRIPTVARTABLE_VALUE INT32 37
I have published a console mod which displays this information in game in my Exodus Mini Mods collection on the Nexus.
Line Types
This section is incomplete, but it will only very rarely be relevant. If you discover more information about these flags than what is covered here please contact me!
You may recall from GFF orientation that there were a lot of options located in each line of a DAO dialogue file that are not present in DA2 conversation files. While a lot of those were either removed or externalized to a .cl file which handles cinematics, some of them were collapsed into a single bitwise flag at the start of each line. I will be calling this the line type.
Bitwise flags are binary, where each bit position represents a different flag. If multiple flags are true, the values are combined and appear as a single number. In binary and decimal, the flags look like this:
binary = decimal
000000001 = 1
000000010 = 2
000000100 = 4
000001000 = 8
000010000 = 16
000100000 = 32
001000000 = 64
010000000 = 128
100000000 = 256
If flags 64, 8, 4, and 2 are set, then the flag will be this:
001001110 = 78
Line type flags that I have been able to confidently identify are as follows:
1 – owner/speaker line
2 – player/listener line
8 – skip line
32 – once line (once per game)
64 – ambient line
Flags 1 and 2 are the only flags that will ever appear on their own, as every single line will be flagged at the very least as either a speaker or player line.
Continues, or empty player lines between multiple speaker lines, may be flagged as 10 (2 + 8 or player line + skip).
Traditional “skip lines” in the DAO sense – lines which are included in the dialogue structure but are actually played in a cutscene, and thus are “skipped” within the dialogue so they don’t play twice – may be flagged as 9 (1 + 8 or speaker line + skip). Skip lines in DA2 will lack their own .cl, and their cinematics are instead included in the .cl for a preceding line in the conversation. (Which will be covered in the next part.)
Ambient lines – dialogue that doesn’t play in a conversation and lacks cinematics, but rather appears in forms like party banter, party barks, or other NPCs talking to each other without involving the player in their conversation – may be flagged as 69 (1 + 4 + 64 or speaker line + ? + ambient).
Continues between ambient lines may be flagged as 78 (2 + 4 + 8 + 64 or player line + ? + skip + ambient)
“Once lines” correspond with the DAO option for line visibility – lines that will only play once per conversation or once per game. If these are player responses, they will be removed from the dialogue wheel after you have selected them. I suspect that 16 represents a “once per conversation” line (vs 32’s “once per game” line), but I have never gone out of my way to test this.
The empty line at the start of an ambient that is only supposed to play once per game may have a flag of 105 (1 + 8 + 32 + 64 or speaker line + skip + once + ambient)
I have no idea what flag 256 could be but 257 (256+1) and 258 (256+2) show up constantly, and how and where it appears doesn’t seem to form any sort of pattern whatsoever across conversations. In all of the dialogue edits I have ever made, whether or not this flag is present has never once mattered to anything… but I have been wrong before and I can always be wrong again.