Resident Evil 3 DAT

From XentaxWiki
Jump to: navigation, search

Back to index | Edit this page


Format Specifications

// Header data
uint32 {5}   - Unknown1
char {1}     - Unknown2
byte {x}     - Top level directory filename (null padded)
uint32 {1}   - Absolute offset to subdirectory data (value read here must be multiplied by 8)
uint32 {1}   - Length in bytes of subdirectory data
byte {x}     - Subdirectory filename (null padded)

// Subdirectory data

uint32 {5}   - Number of files
// For each file
uint32 {1}   - Absolute offset to file data (value read here must be multiplied by 8)
uint32 {1}   - Length in bytes of file data
byte {x}     - Filename (null padded)

// File data

uint16 {1}   - Relative offset to file content
uint16 {1}   - Number of blocks
uint32 {1}   - Length in bytes of file content (length of decompressed file if compression is set)
char {8}     - XOR encrypted string Null padded string. The latest byte is the value to use to 'decrypt' the other bytes of this string using XOR. The string is either "NotComp\0" (non compressed file) or "Hi_Comp\0" (compressed file).
// File block data
uint32 {number of blocks}   - Start value for decryption
uint32 {number of blocks}   - Length in bytes of a file block
byte {x}     - Crypted and compressed file content To read the file content: for each block, decryption must be performed first, then optional decompression.

Notes and Comments

  • Decryption is done using a simple XOR, byte per byte. The tricky part is to know which byte to use as a key.
  • Decompression is a modified LZSS routine.

MultiEx BMS Script

Not written yet

Supported by Programs



Decryption and decompression routines are available on the associated REwiki page.


  • Resident Evil 3 (PC)