Cache Format

From RuneWiki
Revision as of 09:07, 13 August 2009 by Graham (talk | contribs) (New page: == General Information == The old engine cache is made up two types of files. === Data file === The data file holds all of the files in the cache and is named '''main_file_cache.dat'''....)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

General Information

The old engine cache is made up two types of files.

Data file

The data file holds all of the files in the cache and is named main_file_cache.dat. It is therefore very big, typically ~10-20 megabytes.

Index file

There are several index files, named main_file_cache.idx and then postfixed with a number. Each index file holds 'pointers' to where a file is located in the main cache. Each index file represents a type of file.

Index file format

The index file is made up of 6 byte blocks which hold information about where a file can be located in the data file. The format of a single block is as follows:

tribyte fileSize
tribyte initialDataBlockId

The first block represents file 0, the second block represents file 1, and so on.

The fileSize is the file size in bytes. The initialDataBlockId is the id of the first block in the data file which represents the specified file.

Data file format

The data file is made up of 520 byte blocks. The format of each of these blocks is as follows:

short nextFileId
short currentFilePartId
tribyte nextDataBlockId
byte nextFileTypeId
byte[512] blockData

Files, if necessary, are split up into multiple parts (i.e. if a single file is bigger than 512 bytes).

The nextFileId is the id of the next file in the block. The currentFilePartId is the part id of the current file. The first 520 byte block of a file will have id 0, the second will have 1, and so on. The nextDataBlockId is the id of the next 520 byte block of the file. The nextFileTypeId is the id of the next file type. This should remain the same over a whole file.

The blockData is the part of the file data itself. It is always 512 bytes even if the part of the file is smaller.