From Dragon Age Toolset Wiki
Jump to: navigation, search

GDA files contain 2DAs that have been converted from their Excel-format source into a form that can be used by the toolset and the game.

GDAs are GFF files and can be opened with the GFF editor. See compiling 2DAs for methods for converting XLS source files into GDAs.

The headers of 2DA files are stored as a numeric hash, generated with the CRC32 hash algorithm used on the lowercase of the UTF16 string (so it is case independent).

Format info

GDA V0.2 files have two gtop GFF structs and two colm (column list) structs. The rows (row list) structs are the same amount as columns in the 2DA. The v0.2 format is quite fixed in the beginning, so 7C is the location for the four rows struct's description (see GFF).

The struct descriptor can give you the size as GDApp doesn't pad bools and UINT8s in general. The size of each element can be aqcurired through size[n - 1] = offset[n] - offset[n - 1] and the last one size[last n] = totalRowsSize - offset[n]. If you intend on only using ExcelProcessor's GDAs, which is unwise, you can assume the size for everyone as 4 bytes.

In the raw data part you will after 12 bytes, come across a hash number (default CRC32 hash) and a type identifier. Here it is string (0), int (1), float (2), boolean (3) and resource (4). Excelprocessor's ones leave a three-byte padding, but don't take it for granted.

Then you get a UINT32 with the amount of rows. Strings and resources are handled differently. They leave an uint32 that is the local pointer to the string. The way of getting the string to read the pointer, keep your position and move to the (raw data beginning + number just read) and there you'll have e length-prefixed null-terminated unicode string.

Boolean values are padded in ExcelProcessor, but not in GDApp. Thus, the description part is important in knowing the size of each of them.

(I have little experience in editing Wikis, anyone that can should clean it up and put some of it in tables.)

Language: English  • русский