Data Table (V3)

From Spiral Framework
(Redirected from DAT)
Jump to navigation Jump to search
Data Table (V3)
TypeData Table
SystemVita & Steam
Applicable TitlesDanganronpa V3: Killing Harmony (Vita, PS4 & Steam)
CreditCaptainSwag101
Default SignednessUnsigned
Default EndiannessLittle-Endian
Implementation Status100% (still tinkering)

DAT files are a new file type introduced in Danganronpa V3: Killing Harmony, they are used both for global lookup tables and to store room objects. Functionally they are similar to a database or spreadsheet, except the data is internally represented as raw binary data rather than plaintext.

They are comprised of one or more "columns" of data, each of which has a name and a fixed data type, such as signed/unsigned integer numbers, ASCII/Unicode text, or floating-point numbers. The data itself is stored in rows aligned with these columns (again, think of a spreadsheet). Every "cell" in a column must conform to its respective column's data type. To store multiple types of data in a given row, multiple columns are required.


The file starts with a header describing the number of columns per row, and the number of rows.

After the header is a list containing the name and data type of each column. Every row has the same number of columns.

Next, the actual row data. This data is stored in order of the columns and repeats for however many rows are defined in the header. The data values are stored as a raw binary representation of the value in whatever data type the column is. This data is typically stored inline, however in the case of ASCII or UTF-16 data, an unsigned 16-bit integer is used instead, which indicates the text string ID that goes in that place.

Finally, any ASCII and UTF-16 string data is stored after the raw row data, respectively.

Specification

DAT File
Offset Size Data Type Function Example Value Notes
0x00 4 Bytes Int Structure Count 88
0x04 4 Bytes Int Structure Size 40
0x08 4 Bytes Int Var Count 12 (NOTE: The following 2 entries repeat for each Var in VarCount)
0x0C Variable Length UTF-8 String Var Name float1 May be in English or Japanese text, so the string must be treated as UTF-8 and not ASCII
0x0C + (length of previous string + 1) Variable Length UTF-8 String Var Type f32 Always ASCII, but I imagine the string is still UTF-8
After Var Names/Types Variable Length String/Data Data Structures Comprised of each var type listed above, in order. Repeats until StructureCount.