-
Notifications
You must be signed in to change notification settings - Fork 28
Download file
Download file contains the list of files that need to be downloaded in order to install the game. The only files not on this list (that end up being included in the CASC storage) are the [encoding](Encoding file), [install](Install file) and the download file itself.
To download this file, one has to get the file's content hash from the build-config file, use the [encoding](Encoding file) to find the corresponding CDN hash, and plug it into the data URL:
http://blzddist1-a.akamaihd.net/tpr/d3/data/04/a1/04a1fc384eab31bd3c0a58d55ce9b4e1
Download files have the following structure:
- Header
- Entries
- Tags
- Header (11 bytes)
Offset | Type | Name | Description |
---|---|---|---|
0x00 | char[2] | Signature | "DL" |
0x02 | char[3] | Unknown | ??? |
0x05 | uint32 [BE] | NumEntries | Number of download entries in the file |
0x09 | uint16 [BE] | NumTags | Number of tags in the file |
- Entry (26 bytes)
Offset | Type | Name | Description |
---|---|---|---|
0x00 | char[16] | Hash | File CDN hash |
0x10 | char[10] | Unknown | ??? |
- Tag (variable size)
Offset | Type | Name | Description |
---|---|---|---|
0x00 | string | Name | Tag name as a zero terminated string |
0x?? | uint16 [BE] | Type | Tag type |
0x?? | char[] | Mask | Bit mask of length ceil(NumEntries / 8); bit order is backwards (highest bit of the first byte corresponds to the first entry) |
Every build has a number of tags associated with it, that can be used to select the files required for download. For example, Windows clients do not need Mac files, and vice versa. Most common tags include platform and language.
Tags for all installed files can be found in the .build.info
file as the Tags
variable, for example:
Windows EU? enUS speech?:Windows EU? enUS text?
To get the list of required files, we need to combine (AND) masks for Windows, EU, enUS and speech tags (EU and speech tags are optional, and they are actually not present in the download file for Diablo III), then do the same for Windows+EU+enUS+text, and then add (OR) the two resulting masks together.