Depending on the game, various versions of the archive format are present, but they all follow the same basic format:
Code: Select all
header:
uint32 magic // '\0ARC'
uint16 version //(or flags?)
uint16 fileCountfor each fileCount:
Code: Select all
entry:
char[64] name
uint32 typeHash
uint32 compressedSize
uint32 flags
uint32 offsetThus, the values, if the flags are in the lower 3 bits:
Code: Select all
uncompressedSize = (flags & 0xFFFFFFF8) >> 3;
unknownFlags = (flags & 0x00000007) >> 0;Code: Select all
uncompressedSize = (flags & 0x1FFFFFFF) >> 0;
unknownFlags = (flags & 0xE0000000) >> 29;If compressedSize is equal to uncompressedSize, the data is not compressed.
Compression in the archives depends on game and platform as well, Resident Evil 5 (PC) uses zlib, Dragon's Dogma (Xenon) uses XCompress, Dragon's Dogma (PS3) uses zlib (but with non-default settings).
The main reason I'm opening this thread isn't about any of the above though, it's about the typeHash value.
typeHash value is a crc32 hash of a string, masked by 0x7FFFFFFF (dropping the uppermost bit).
You can find complete (barring guessed file extensions) type lists for Dragon's Dogma and Resident Evil 5 on my MT repository:
Dragon's Dogma, Resident Evil 5
I can't help you with other games, but the type lists for those games should give you some idea of what to look for.
My repository can be found at: http://svn.gib.me/public/mt/
There are no binaries or a Pack tool (yet, if ever).

