Template:GRAFTemplate1: Difference between revisions

From XentaxWiki
Jump to navigation Jump to search
imported>Dinoguy1000
(try this instead)
 
(48 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{Format_Navigation}}
{{GRAFPageHeader}}


[[GRAFs|Back to index]]
== {{{file_extension}}} ==
{{GRAFPageMisc{{ {{{|subst:}}}#if: {{{format_type|}}} | {{{{{|subst:}}}!}}{{{format_type}}} }}{{ {{{|subst:}}}#if: {{{endian_order|}}} | {{{{{|subst:}}}!}}{{{endian_order}}} }}}}


== {{{file_extension}}} ==
=== Format Specifications ===
 
{{GRAFPageFormat|1=<nowiki/>
''' Format Type: ''' &nbsp; {{{format_type}}} <br>
''' [http://en.wikipedia.org/wiki/Endianness Endian Order]: ''' &nbsp; {{{endian_order}}} <br>
''' Date Posted: ''' &nbsp; {{{date_posted}}}
 
=== Format Specifications ===  
<tt><b>
{{{format_specifications}}}
{{{format_specifications}}}
</b></tt>
}}
 
 
=== Notes and Comments ===
1.
In the version 24, the file names are encrypted as XOR 0xBE.
 
2.
"BXP" + (byte) in all headers: In the version 24, the (byte)=3. 
 
3.
// ARCHIVE INDEX
    char {8}     - Header ("BXP" + (byte)2 + "INDX")
    uint64 {8}  - Unknown  '''<-----  this shuld be relative offset to the first "BXP.FILE"'''
I have used folloxing piece of C++ code:
  ArchiveOffset = 0x00;
  IndexOffset = 0x20;
  TreeOffset = 0x60;
  DirOffset = 0x80;
  DataOffset = DirOffset + (__int64*) &buffer[TreeOffset + 8];
  FileOffset = DirOffset + (__int64*) &buffer[IndexOffset + 8];
 
4.
There are some directories containing both files and sub-directories. In such case, the files are listed prior to the sub-directories.
I guess that the structure of directory // see 6.
 
5. I have successfuly extracted all files from the archive. Sound (*.ogg) files play well, however some other files (scripts) seems to be encrypted. Further I am wholly confused with CRCs, HASHs and Paddings for now, so I can not build an modified archive.
 
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
=== Notes and Comments ===
{{{notes}}}


=== MultiEx BMS Script ===  
=== MultiEx BMS Script ===
{{{bms_script}}}
{{{bms_script}}}


=== Supported by Programs ===  
=== Supported by Programs ===
{{{programs}}}
{{{programs}}}


=== Documentation ===
=== Documentation ===
{{{documentation}}}
{{{documentation}}}


=== Games ===
=== Games ===
{{{games}}}
{{{games}}}
{{GRAFPageFooter}}<noinclude>[[Category:Templates|GRAFTemplate1]]</noinclude>

Latest revision as of 03:24, 22 October 2011