@Kvellen I thought I'd write down some discoveries about Chatters and show some progress:
Nodes - Chatters only have 2 noteworthy Node types - ChatterNode and ChatterEventData.
ChatterEventData each act like a "Root Node" (see the video below ) and will contain one or more ChatterNode children. Each ChatterEventData is connected to a specific event (such as casting a spell or being given a unique item by the Watcher) that could trigger a voice line.
ChatterNode - defines a specific voice line that could be played. Each ChatterNode has a corresponding .wem audio file. ChatterNodes can't have children.
ScriptNode - may be inserted between ChatterEventData and ChatterNode children to add common Conditionals to several children.
StringTableFilenames - Defines which StringTables the Chatter should fetch entries from. Each Chatter will utilize its own unique table (should be the first in the StringTableFilenames list), but also has the option to fetch entries from other "generic" tables.
Which table in StringTableFilenames a ChatterNode should fetch text from will be determined from the NodeID.
Nodes with a NodeID starting with X0'000 will fetch the table with (zero-based) index X in StringTableFilenames.
If we have for example "NodeID": 20017, then the from the tables below it should fetch "chatter/parents/chp_chanter_casts.stringtable" (the 3rd entry in the list)
"StringTableFilenames": [
"chatter/00_companions/ch_companion_pallegina_voice_set.stringtable",
"chatter/parents/chp_barbarian_shout.stringtable",
"chatter/parents/chp_chanter_casts.stringtable",
"chatter/parents/chp_cipher_casts.stringtable",
"chatter/parents/chp_common.stringtable",
"chatter/parents/chp_ko.stringtable",
"chatter/parents/chp_paladin_commands.stringtable",
"chatter/parents/chp_wizard_casts.stringtable"
],
As you can see in the video below, I've removed the "edit text button" from Nodes with IDs greater than 10'000, so that the user is only able to edit the Chatter's own string table entries.
AudioLookup - These can be auto-generated and refreshed when the Chatter is edited, how the strings are calculated is similar to .wem paths which is described below.
Manifests - From what I looked at the decompiled code, Chatters will require a manifest file similar to Conversations, though the contents seem to be a bit different.
It's something I'll have to look a bit more into.
.wem paths - The path to the .wem file of a ChatterNode will be determined by
The character's SpeakerGameData -> SpeakerComponent -> ChatterPrefix
The EventType value of the ChatterNode's ChatterEventData parent. (The exact EventType -> string mappings are defined in the ChatterEventsGameData named "chatter" available under "Audio").
The ChatterNode ID
<SpeakerComponent.ChatterPrefix>\ch_<SpeakerComponent.ChatterPrefix>_<EventType>_<NodeID>.wem
eder\ch_eder_item_purchase_rare_0153.wem
\PillarsOfEternityII_Data\StreamingAssets\Audio\Windows\Voices\English(US)\eder\ch_eder_item_purchase_rare_0153.wem
I added a button for opening and highlighting a ChatterNode's .wem file in the users file manager. (Though not included in the preview video...)