XP3 archives

An XP3 file begins with an 11-byte magic number, followed by an 8-byte offset from the start of the header (usually the start of the file), info_offset. All numbers are little-endian.

offset length contents notes
0x00 11 magic XP3\x0D\x0A\x20\x0A\x1A\x8B\x67\x01
0x0B 8 info_offset  
0x?? ?? file_data  
info_offset 17 + compressed_size file_info  

At info_offset there are two possibilities. The first byte may be 0x80 (in case of a file generated by KiriKiri Z), in which case skip 8 bytes and read the true info offset. Jump there and continue.

info_offset + x length contents notes
0x00 1 version 0x80
0x01 8 ??? unknown
0x09 8 info_offset true info offset

Otherwise, the first byte should be 0x01:

info_offset + x length contents notes
0x00 1 version 0x01
0x01 8 compressed_size  
0x09 8 original_size  
0x0A compressed_size file_table if compressed, decompress with zlib

The end of the file_table should be the end of the file.

Title Type Date Platform Names Characters Series