DatabasePackedFile
Most simcity Data is as you probably know stored in various types of archive files that all have the same internal format such as DAT, SC4, SC4lot, etc. This format is proprietary to maxis and has been used in the Sims 2, and Sims online as well as this one.
Entries may be compressed with QFS compression depending on their entry data.
Header (96 bytes) File 1 File 2 File n Index Entry 1 (20 bytes) Index Entry 2 Index Entry n
Header first, individual files following with no filenames and a small file header area at the beginning of each followed by an index of all the files in the archive at 20 bytes per entry.
Header:
Offset 00 - Identifier (DBPF - the type of dat) Offset 04 - Version Major (1 in SC4/Ts2 Dats) Offset 08 - Version Minor (0 in sc4 dats, 1 in most TS2 packages) Offset 12 - DWORD[3] Reserved (Users can store DBPF info data here if they want) Offset 24 - Date Created in Hex (Unused in Version 1.1) Offset 28 - Date Modified in Hex (Unused in Version 1.1) Offset 32 - Index Type/Version (Always 7 in SC4/TS2 dats) Offset 36 - Number of entries in the index Offset 40 - Location of first index entry Offset 44 - Size of index Offset 48 - Number of Hole entries in the Hole Record Offset 52 - Location of the hole Record Offset 56 - Size of the hole Record Offset 60 - Index Version 01 = 7.0, 02 = 7.1 (Version 1.1+ in TS2 only) Offset 64 - 32 Bytes reserved for Future Use in other versions.
File: (If files are uncompressed, they start at offset 0, if they are compressed, there are 9 byte headers of this format)
Offset 00 - Compressed Size of file Offset 04 - Compression ID (0x10FB) QFS Compression. (Compression spec is seperate covered on the packages page) Offset 06 - Uncompressed Size of file Offset 09 - Start of compressed/uncompressed file data
There are now 2 known formats of indexes in the game. To determine your version, read offset 60 in version 1.1 or use 7.0 for version 1.0 DBPFs.
The size of an index entry in version 1.0 is 20 bytes, like this: (Version 1.0 and some 1.1's) (7.0)
Offset 00 - Type ID (main type of file. picture, texture, model etc) Offset 04 - Group ID (group of the file by purpose or type) Offset 08 - Instance ID (marker used by the format for finding a specific file) Offset 12 - Location of the file in the archive Offset 16 - Size of the file
And 24 bytes in many 1.1 DBPFs (7.1)
Offset 00 - Type ID (main type of file. picture, texture, model etc) Offset 04 - Group ID (group of the file by purpose or type) Offset 08 - Instance ID (marker used by the format for finding a specific file) Offset 12 - Instance ID 2 (Second Instance ID for GUID Based systems in TS2) Offset 16 - Location of the file in the archive Offset 20 - Size of the file
HOLE RECORD
A Hole record contains the location and size of all holes in a DBPF file. Its format is as follows
(repeating) DWORD - Hole Location DWORD - Hole size
Holes are created when the game deletes something from a DBPF. The holes themselves are simply junk data of the appropriate length to fill the hole.