Data Table

A data table file typically uses the .dat file extension. It uses a table structure with columns and rows. The content is split in a fixed size and variable size data section. There is no header.

Each data table has up to four variations, differentiated by their file extensions:

  • .dat: 32-bit reference addresses, UTF-16LE strings
  • .dat64: 64-bit reference addresses, UTF-16LE strings
  • .datl: 32-bit reference addresses, UTF-32LE strings
  • .datl64: 64-bit reference addresses, UTF-32LE strings

Fixed size data

The fixed size data starts with the 32-bit amount of rows followed by the actual rows. The size of each row depends on the columns defined by the data table. There is no metadata for the columns in the file, thus it has to be reverse-engineered by the community.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           Row Count                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                       Row [0] (variable)                      +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                               ...                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                 Row [Row Count - 1] (variable)                +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

<!-- protocol "Row Count: 32, Row [0] (variable): 64, ...: 32, Row [Row Count - 1] (variable): 64" -->

Variable size data

The variable size data starts with the 64-bit magic number 0xBBBB 0xBBBB 0xBBBB 0xBBBB and is then filled with arbitrary data until the end of the file. Individual columns reference segments of that data.

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                  0xBBBB 0xBBBB 0xBBBB 0xBBBB                  +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                                                               +
|                                                               |
+                    Arbitrary Data (variable)                  +
|                                                               |
+                                                               +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

<!-- protocol "0xBBBB 0xBBBB 0xBBBB 0xBBBB: 64, Arbitrary Data (variable): 128" -->

Column types

Base types

Type Size Value
Bool 8 LSB as true or false
Byte 8 Unsigned integer
Short 16 Signed integer
Int 32 Signed integer
UInt 32 Unsigned integer
Long 64 Signed integer
ULong 64 Unsigned integer
Float 32 Single-precision floating-point
Edit

Pub: 01 Oct 2020 22:07 UTC

Views: 59