The basics: StormFront is the client/protocol used for DR2 and GS4. It's loosely XML-based. It is not well-formed/valid XML, so you cannot use an XML parser on it.
Weird detail: newlines after tags are ignored if the tag is on a line by itself.
The client sends their key followed by a line break Then give it a string contain version info, which in reality I believe is more for statistics server side, so being honest helps Simu.
__ Examples __
Genie (Pro) Client gives: ##/FE: WIZARD /VERSION:126.96.36.199 /P:WIN_XP /XML## Warlock2 gives: ##/FE: WARLOCK /XML## StormFront gives: ##/FE:WIZARD /VERSION:188.8.131.52 /P:WIN_XP /XML##
After this, the server sends back two lines (at least it does for DR, if there is different behavior for other games, please let me know) the first of which we display, the second is a Wizard code which we ignore.
Unsorted XML TagsEdit
<mode>: gives id="GAME" or id="CMGR". In standard "GAME" mode, it is ok to buffer text until a newline is received (thus making game-response faster), but in "CMGR" mode, the game widget should act more like a console, displaying text immediately as it's received, and allowing for input.
<playerID>: gives the player's (internal?) unique id. This is used by StormFront and Warlock to save server settings in a raw XML file. See more in StormfrontServerSettings
id: the unique id
<settingsInfo>: gives version and crc information for the client. If the client does not have a copy of the server's settings XML, the client should send <sendSettings/>.
client: the client version major: the client major version (?) crc: the crc sum of the client executable (??) instance: the type of client, I've only ever seen this be "DR" (probably "GS" too)
<settings> ... </settings>: A potentially large XML document that describes the player's server settings. For a breakdown of the XML file, see StormfrontServerSettings.
<sentSettings/>: Sent after <settings/> info is finished.
<streamWindow>: defines a window (aka view)?
id: assuming a unique name title: the title to put on the window location: which column to put the window in resident: whether or not to actually show the window? styleIfClosed: If the window isn't open, the text goes to the story window with this style timestamp: on/off? whether to show a timestamp with each line? nameFilterOption: true/false? whether to filter out lines that don't contain a name
<spell>: The current spell being prepared.
exist: ?? (this has only ever been "spell")
the text of this tag is the spell being prepared i.e <spell exist="spell">Harm Evil</spell>
<openDialog>: used for the links above the command entry box
<dialogData>: mostly the same as openDialog, but it's nested inside. these should probably only be one tag
<sep>: a separator?
<link>: the links above the text bar in stormfront
id: the link's unique id value: the text of the link cmd: the URL the link takes you to (usually prefixed with 'url:/', signify 'http://www.play.net/')
<switchQuickBar>: something to do with the above... not sure what it does.
<endSetup>: empty tag, probably the end tag for settingsInfo
<app>: gives info specific to the app
char: character name game: DR, etc (probably determines something about the layout) title: probably title of the app, we can ignore this
<indicator>: defines the indicators
id: can be IconKNEELING, IconPRONE, IconSITTING, IconSTANDING, IconSTUNNED, IconHIDDEN, IconINVISIBLE, IconDEAD, IconWEBBED, IconJOINED visible: y/n
<left>: contents of the left hand
<right>: contents of the right hand
for <left> and <right>, the contents of that hand is the text within the tag, i.e. <left>a scimitar</left>
exist: seems to be some kind of ID noun: the noun part of the object
<clearStream>: empty tag, clears the window, I think.
id: the window id
<pushStream>: empty tag, redirects output to that window
id: the window id
<nav>: notifies that you arrived in a room. (for move in scripts, etc)
<compDef>: (probably) stands for component definition. it seems <compDef> and <component> are interchangeable (?)
id: the id of the component. the common ones we've seen are "room players", "room exits", "room objs", "room desc"
<compass>: gives us the directions to highlight on the compass with embedded <dir> tags
<dir>: an available direction on the compass (only embedded within a top level <compass> tag)
value: the value of the direction (out, down, up, n, s, e, w, ne, se, nw, sw)