Block Sizes / Version Order:
Artwork
0x10000 blocks
Tiledata
0x400 blocks
Item Anim
0x800 blocks
Hues
0x80 blocks
Regions
0x2000 blocks
Skills
0x32 blocks
Multis
0x1ff6 blocks
Terrain
0x60000 blocks (=768 * 512)
Statics
0x60000 blocks (=768 * 512)
Length: 0xD4CA8
For the following files, the "extra" field in their corresponding index is the version number:
Artwork, Skills, Multis, Statics
For the following files, the "header" or "group header" is the version number:
Tiledata, Animdata, Hues, Terrain
The regions file format is attached.
Relevant packet formats are attached.
These formats are from the god client era. I'm sure modern clients have changed some of the packets (like tiledata). I'm investigating that.
VersionTable.cs shows how the version table/tree/whatever is calculated.
The "uint[] versions" used to initialize the table is the collection of versions listed above. So, you'd have something like:
Code:
uint[] versions = new uint[0xD4CA8];
// Load the versions in the order listed...
VersionTable vt = new VersionTable(versions);
For files that have a number of entries that is less than the size listed above, the value 0xFFFFFFFF is used for the missing entry's version.
packets.zip contains formats for:
0x0A - Edit
0x0C - Tiledata
0x3E - Versions
0x3F - Update Statics
0x40 - Update Terrain
0x41 - Update Tiledata
0x42 - Update Art
0x43 - Update Anim
0x44 - Update Hues
0x45 - Ver OK
0x46 - New Artwork
0x47 - New Terrain
0x48 - New Anim
0x49 - New Hues
0x4A - Destroy Artwork
0x4B - Check Version
0x57 - Update Regions
0x58 - New Region
0x5C - Restart Ver
0x61 - Destroy Static
0x62 - Move Static
0x92 - Update Multi
0x94 - Update Skill
I'm working on making more readable documents (lol...), but I'm posting this for now to get it out of my head. So, consider this a preamble of sorts I suppose.