Dungeon Siege

Documentation

Type System (1.1 and 1.11)

This is what happens if you are in the dev build of the game and type /help.all then /help.enums( true ) in the console. It dumps the type system and enum constants for the game to the console - here I rerouted it to a file using "report filelog generic". It contains prototypes for all skrit and RPC functions (compressed so it fits on my tiny web site).

Exported function parameters (1.1 and 1.11)

I threw this together really quickly at the request of the community. It's a simple scan of all our .h files looking for anything that has been exported, and includes the name of the function and the parameter list which includes the param names. Notes:

  1. I filtered out all RC functions, and anything that takes no params to keep the list short. [RC functions are not supposed to be called from skrit, it's an internal multiplayer thing that unfortunately gets exposed to skrit because it shares the same type system.]
     

  2. My cheapo script didn't put class names on anything, so they're just function names. It also doesn't pay attention to precompiler directives so it scanned everything, including debug, test, and disabled functions that don't exist in public versions of the game. I'll make a better script later when I get some time to keep that clutter out.

Type System and Parameters (1.09.2)

Older type system dump - keeping it up here so people can 'diff' against the new stuff to see what's changed.

Type System (pre-1.09b)

I took this snapshot after the 1.0 so it's not exactly the RTM build, but it's close. Keeping it up here so people can 'diff' against the new stuff to see what's changed.

TankStructure.h

If you can read C code, this file defines the structures you need if you're wanting to talk to tank files. This file is the same .h file used to compile the game and our tank tools.

Important: if you are constructing a tank builder of your own, make sure that it decompresses properly with no memory overrun. Dungeon Siege decompresses its resources in place, and zlib requires some extra room to fully extract its data. Make sure to thoroughly read the section "Decompression of chunked compression formats" in the TankStructure.h file.

FuBiPersistBinary.h

This is the format used by save game. While it's relatively easy to parse, the problem you're going to run into is deducing the schema, which is wired into the game directly. For example, you can't really tell from the data file which is an integer and which is a float. In a future build of the game I hope to add an option to output the schema as it writes the text version. This should make it easier to edit save games.

RapiRawReader.cpp

This is the format of our .raw files for textures. It is a custom format specific to Dungeon Siege and has no relation to the .raw files that Photoshop or other image-processing tools may output. If you're messing with texture formats, you will probably also want to read this note on the layout of the mipmap images for all imported (non-raw) formats.

gpstring_std.h

Some people were wondering what the data representation of a gpstring is in memory. DS uses a hacked up version of the STL that comes with Visual C++ 6, and here it is. I changed it to substitute heap memory for stack memory usage - the same thing that MFC's CString does. The gpstring is derived from this base, but only adds utility functions, so everything you need for the data layout is here.

PContent Query Grammar

PContent, or "parameterized content" consists of two main parts - the query language that lets you request a pcontent item, and the inventory system that chooses what to drop on a higher level.

This grammar I pulled straight from my comments in the code. It's sort of BNF based, but you'll get the idea. Also note that it may be out of date. For example, the "ornate" idea was dropped.

Goids and Scids

This is just a segment of a .h file that contains the definitions of Goids and Scids, just in case you wondered what they look like inside the engine. Nothing fancy, but here you go just in case you're curious!

Skrit Manual

A primitive, incomplete doc on skrit, written late at night (in bed, usually). This doc is now sealed and will not be updated further (far better materials are already available from the Dungeon Siege online community).