Template:GRAFTemplate1
{{{file_extension}}}
Format Type: {{{format_type}}}
Endian Order: {{{endian_order}}}
Date Posted: {{{date_posted}}}
Format Specifications
{{{format_specifications}}}
Notes and Comments
6. "uint32 {4} - Unknown (1)" is a switch: 0="file is not compressed" 1="file is compressed"; compression method is zlib (*.gz). The same switch is in the "BXP.FILE" section. I suguest that to modify the structure of "BXP.SDIR" to:
{
char {8} - Header ("BXP" + (byte)2 + "SDIR")
uint64 {8} - Unknown Length/Offset
byte {16} - null
uint32 {4} - Number Of Sub-Directories in this directory
uint32 {4} - Number Of Files in this directory
uint64 {8} - Length Of Filename Directory Component (length of subDirName+null + fileNames+nulls)
byte {16} - null
for (each file)
{
uint64 {8} - Filename Offset (relative to the start of the filename directory)
uint64 {8} - null
byte {16} - CRC?
uint32 {4} - null
uint32 {4} - A switch indicating if the file is compressed. 0=no, 1=yes //compression method: zlib (*.gz)
uint64 {8} - null
uint64 {8} - File Length (not including the file header fields?)
uint64 {8} - File Offset (relative to the start of the file data)
}
for (each sub-directory)
{
uint32 {4} - null // Filename Offset (relative to the start of the filename directory)
uint32 {4} - Relative Offset To This Directory? (32) (relative to the start of this subDirEntry)
}
for (each entry) // entry is file or sub-directory
{
uint32 {4} - Hash?
}
for (each entry)
{
char {X} - Filename // XOR 0xBE in version 24
byte {1} - null Filename Terminator // 0xBE in version 24
}
}
7. First 32 bytes of each file if "File Data" is a header of checksum, which is not necessary for file extraction.
{
// FILE DATA
char {8} - Header ("BXP" + (byte)2 + "DATA")
uint64 {8} - Total Length Of File Data (length of everything in "// for each file")
uint64 {8} - Padding (88,39,255,135,206,225,196,1)
uint64 {8} - null
for (each file)
{
char {8} - Header ("BXP" + (byte)2 + "FILE")
uint64 {8} - File Length (length of "X - File Data" only) [+30]
uint64 {8} - CRC?
uint32 {4} - null
uint32 {4} - A switch indicating if the file is compressed. 0=no, 1=yes //compression method: zlib (*.gz)
byte (16) - A header or check-sum?
byte (16) - For uncompressed file the same as previous byte (16), for copressed different. Maybe check-sum of decompressed file?
byte {X} - File Data
byte {X} - null Padding to a multiple of 32 bytes
}
}
- by Gregory
MultiEx BMS Script
{{{bms_script}}}
Supported by Programs
{{{programs}}}
Documentation
{{{documentation}}}
Games
{{{games}}}