Universal Strife Dialog Format
The Universal Strife Dialog Format (USDF for short) is an agreed upon standard format for scripting Strife dialogs. As of this writing it has very little support outside dialog editing tools at BitOwl.
The lastest version of the standard is printed below and is designed around the UDMF standard.
=============================================================================== Universal Strife Dialog Format Specification v2.1 - 01/06/13 Written by Braden "Blzut3" Obrzut - admin@maniacsvault.net Defined with input from: CodeImp Gez Graf Zahl Quasar et al. Copyright (c) 2013 Braden Obrzut. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. =============================================================================== ======================================= Changes in v2.1 ======================================= * Pages are specified as starting as being indexed from 1 instead of 0. While this technically renders the spec incompatible, all known implementations used this convention as it was inline with the binary format. ======================================= I. Grammar / Syntax ======================================= The grammar and syntax is similar to that of UDMF. A compliant UDMF parser should be applyable to the USDF. However, it will need to be capable of handling sub-blocks. Unknown sub-blocks should be skipped. ======================================= II. Implementation Semantics ======================================= ------------------------------------ II.A : Storage and Retrieval of Data ------------------------------------ This is the same as in UDMF. ----------------------------------- II.B : Storage Within Archive Files ----------------------------------- There are two options for the USDF lump placement. This can either be a part of the UDMF lump list or standalone. If used stand alone the lump name DIALOGXY is used corresponding with MAPXY. For UDMF the lump shall be called "DIALOGUE". -------------------------------- II.C : Implementation Dependence -------------------------------- USDF also implements the namespace statement. This has all the same requirements as UDMF. ======================================= III. Standardized Fields ======================================= The following are required for all USDF complient implementations. Like UDMF, any unknown field/function should be ignored and not treated as an error. NOTE: "mobj" refers to Strife's conversationIDs and not doom editor numbers or Hexen's spawnids. A valid mobj value is any positive integer greater than or equal to 1. --------------------- III.A : Conversations --------------------- Conversations are groups of pages that can be assigned to a particular object. Implementors should preserve the IDs to allow for dynamic reassignment through scripting although this is not a requirement. conversation // Starts a dialog. { actor = <integer>; // mobj for this conversation's actor. If previously // used, this will override the previous conversation. page // Starts a new page. Pages are automatically numbered starting at 1. { name = <string>; // Name that goes in the upper left hand corner panel = <string>; // Name of lump to render as the background. voice = <string>; // Narration sound lump. dialog = <string>; // Dialog of the page. drop = <integer>; // mobj for the object to drop if the actor is // killed. link = <integer>; // Page to jump to if all ifitem conditions are // satisified. // jumps to the specified page if the player has the specified amount // or more of item in their inventory. This can be repeated as many // times as the author wants, all conditions must be met for the // jump to occur. ifitem { item = <integer>; // mobj of item to check. amount = <integer>; // amount required to be in inventory. } // Choices shall be automatically numbered. choice { text = <string>; // Name of the choice. // The amount of an item needed to successfully pick this option. // This can be repeated, but only the first will be shown (provided // diaplaycost is true). All costs must be satisfied for success. cost { item = <integer>; // Item that is required for this option. amount = <integer>; // Minimum amount of the item needed. } displaycost = <bool>; // Weather the cost should be // displayed with the option. // If no cost is specified this should // be ignored. yesmessage = <string>; // Text to add to console when choice // is accepted. nomessage = <string>; // Text to add to console when choice // is denied. log = <string>; // LOG entry to use on success. giveitem = <integer>; // Gives the specified item upon // success. // The following are the same as the special for linedefs in UDMF. // They are executed on success. special = <integer>; arg0 = <integer>; arg1 = <integer>; arg2 = <integer>; arg3 = <integer>; arg4 = <integer>; nextpage = <integer>; // Sets the next page. closedialog = <bool>; // Should the dialog be closed upon // selecting this choice? // Default: false } } } ------------------------------- III.B : Including Other Dialogs ------------------------------- Unlike the original Strife dialog format. The lump "SCRIPT00" should not be included automatically. Instead the user must specify this behavior by using the include function, which takes the name of a lump to include. Include only needs to be available in the global scope and for compatibility reasons, must include the result of the script and not act like a preprocessor statement. include = <string>; =============================================================================== EOF ===============================================================================