A DIALOGUE lump holds Strife conversation data in a UDMF map. In binary map formats, this data is held outside of the map lumps, in a SCRIPTxx or DIALOGxx lump placed in the general namespace instead, where xx matches the number of a MAPxx map. For this reason, Strife conversations are only possible in maps named using the MAPxx convention; whereas in UDMF the name of the map is irrelevant.
Conversation scripts written in USDF do not need to be compiled to be accepted by ZDoom. Those written in ZSDF cannot be compiled at all. Compiled lumps are called DIALOGUE (UDMF) or SCRIPTxx (binary formats), text lumps are called DIALOGUE (UDMF) or DIALOGxx (binary formats). For readability, DIALOGUE is also used here as the generic name of these lumps in the rest of this article.
A compiled DIALOGUE lump contains a number of conversation nodes which are all exactly the same size: 1516 bytes. (Note: conversation nodes in the Strife teasers are a bit shorter: 1488 bytes. However there is no reason to create teaser-format conversations, since loading additional content is disabled when playing a non-complete version of a game.)
The following structure corresponds to a Strife node. Multi-byte values are little-endian. A null string is one whose first byte is 0x00.
|0x0000||4||speaker||An unsigned value corresponding to the talker's ConversationID.|
|0x0004||4||droptype||A signed value corresponding to the ConversationID of an item that the talker will drop if killed. This is not the same as the DropItem property. A negative value means no item is dropped.|
|0x0008||4*3||itemcheck||Three signed values to the ConversationID of items that, if they are in the player's inventory, will provoke the conversation to jump to a different node instead of this one. A negative value means no items can trigger this jump.|
|0x0014||4||link||A signed value corresponding to the node to which the conversation must jump if at least one of the itemchecks is successful.|
|0x0018||1*16||name||A string corresponding to the talker's displayed name, if any. The default value if the string is null is the actor's Tag, and if that property is not defined, "Person" will be used instead.|
|0x0028||1*8||sound||A string corresponding to the sound name of the text's sound lump, if any. It must be declared in SNDINFO as svox/xxx, where xxx is the name contained in this string.|
|0x0030||1*8||backdrop||A string corresponding to a picture lump to display as the backdrop for the conversation. If not found, no picture is used.|
|0x0038||1*320||dialogue||A string corresponding to what the talker says.|
|0x0178||228*5||responses||five response structures defining the possible choices:|
|x+0x00||4||givetype||A signed value corresponding to the ConversationID of an item that the talker will give if this reply is chosen and successful. A negative value means no item is given.|
|x+0x04||4*3||item||Three signed values corresponding to the ConversationID of items the player must have in his inventory for the reply to be successful if chosen. The first value, if not null, is reserved for gold.|
|x+0x10||4*3||count||Three signed values corresponding to the minimum amount of the items that the player must have in inventory. Again, the first is reserved for gold.|
|x+0x1C||1*32||choice||A string corresponding to the text the player says if choosing this reply. A null string means no message. If both this and link are null, the reply is entirely ignored. If the first count value is positive, " for <count>" is automatically appended to the string.|
|x+0x3C||1*80||yes||A string displayed if the reply is successfully chosen.|
|x+0x8C||4||link||A signed value corresponding to the node to which this reply leads. A value of zero means that the conversation stops. If both this and choice are null, the reply is entirely ignored.|
|x+0x90||4||log||An unsigned value corresponding to the ID of the message that will be recorded in the log if the reply is successfully chosen, printing the content of the LOG<number> lump and playing the VOC<number> sound. See also SendToCommunicator.|
|x+0x94||1*80||no||A string displayed if the reply is unsuccessfully chosen.|