GRAF:Act Of War DAT: Difference between revisions

From XentaxWiki
Jump to navigation Jump to search
imported>Mr.Mouse
imported>Mr.Mouse
(No difference)

Revision as of 12:55, 23 October 2006

Choose archive extension:

DAT


Format Specifications

char {4}     - Header (edat)
uint32 {4}   - Length of the header after the 10 nulls (18)
uint32 {4}   - Unknown
byte {10}    - null
uint16 {2}   - Unknown (1)
byte {1}     - null
uint32 {4}   - Directory Offset
uint32 {4}   - Directory Length
byte {7}     - null

byte {X}     - File Data

// Directory

// for each group
uint32 {4}   - Group/File Indicator (0=file, #=length of this group entry, -#=offset to a previous file entry)


if (group){
uint32 {4}   - Length of this group, including the file entries (ie relative offset to next group) (or null)
char {X}     - Group Name
byte {X}     - null Group Name Terminator
byte {0-1}   - null Padding to a multiple of 2 bytes (ie only exists if groupnameLength+1 is odd)
}


else if (file){
uint32 {4}   - Last File Indicator (0=last file in this group, #=length of this file entry)
uint32 {4}   - File Offset
uint32 {4}   - File Length
byte {1}     - Unknown (0) // something to do with the Filename position?
char {X}     - Filename
byte {X}     - null Filename Terminator
byte {0-1}   - null Padding to a multiple of 2 bytes (ie only exists if filenameLength+2 is odd)
}


else if (previous offset (negative number)){
uint32 {4}   - Last File Indicator (0=last file in this group, #=length of this file entry)
uint32 {4}   - File Offset
uint32 {4}   - File Length
uint16 {2}   - null
}


MultiEx BMS Script

Not written yet

Notes and Comments

  • The files are stored in a special way so as to reduce the amount of space needed to store the filenames. It does this by grouping the files together that share a common first-part of their name, and then building up the actual filename of each file by joinging a whole lot of group names together.


For example, if we have 2 files called "sound11.wav" and "sound22.wav", you can see that they both share 5 common letters at the beginning of the filename (ie "sound"). This archive would have a group with the name "sound" and each of the 2 files would be saved with names "11.wav" and "22.wav" within that group, thus saving space. This space saving is only really benificial for storing directorie names though, as there is a lot of overhead.


Groups can be nested inside each other, so there is no boundary as to the number of groups that can exist in a nested way.


Also, filenames can be reused by using a negative number for the Group/File ID. In this case, take the offset just before the negative Group/File ID, subtract the negative number, and it will point to the filename that will be reused.



Compatable Programs