StormFront Protocol

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.

Initial
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:1.0.1.19 /P:WIN_XP /XML## Warlock2 gives: ##/FE: WARLOCK /XML## StormFront gives: ##/FE:WIZARD /VERSION:1.0.1.22 /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 Tags
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.

: 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

: 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 . 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)

... : A potentially large XML document that describes the player's server settings. For a breakdown of the XML file, see StormfrontServerSettings.

: Sent after info is finished.

: 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

exist: ?? (this has only ever been "spell") the text of this tag is the spell being prepared i.e Harm Evil

: used for the links above the command entry box

: mostly the same as openDialog, but it's nested inside. these should probably only be one tag



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/') : something to do with the above... not sure what it does.

: empty tag, probably the end tag for settingsInfo

char: character name game: DR, etc (probably determines something about the layout) title: probably title of the app, we can ignore this

id: can be IconKNEELING, IconPRONE, IconSITTING, IconSTANDING, IconSTUNNED, IconHIDDEN, IconINVISIBLE, IconDEAD, IconWEBBED, IconJOINED visible: y/n





for and, the contents of that hand is the text within the tag, i.e. a scimitar : exist: seems to be some kind of ID noun: the noun part of the object

: empty tag, clears the window, I think. id: the window id

: empty tag, redirects output to that window id: the window id

(for move in scripts, etc)

: (probably) stands for component definition. it seems  and are interchangeable (?) id: the id of the component. the common ones we've seen are "room players", "room exits", "room objs", "room desc"



value: the value of the direction (out, down, up, n, s, e, w, ne, se, nw, sw)