Skip to content

Format: Arc archive

Robert Jordan edited this page May 16, 2021 · 2 revisions

Format: MajiroArc archive

Archive type for all Majiro files of a specific category. Uses the .arc extension.

File structure

Type Value Description
char[16] "MajiroArcV1.000"
"MajiroArcV2.000"
"MajiroArcV3.000"
File Signature and Version
uint32 Count Number of file entries in archive
uint32 NamesOffset Absolute offset to file NamesBuffer
uint32 DataOffset Absolute offset to file DataBuffer
Entry[NV] Entries File entries table
cstring[N] NamesBuffer File names buffer
byte[] DataBuffer File data buffer
arc.Version = (int)(arc.Signature[10] - '0');
uint N  = arc.Count;
uint NV = arc.Count + (arc.Version==1 ? 1 : 0);
uint namesSize = arc.DataOffset - arc.NamesOffset;

Entry table

Entry V1

Unlike higher versions, V1 contains arc.Count + 1 table entries, where arc.Entries[arc.Count].Offset is used exclusively to calculate arc.Entries[arc.Count - 1].Length.

For arc.Entries[arc.Count], Hash = 0 and Offset = file.Length.

Type Value Description
uint32 Hash CRC-32 hash of file name
uint32 Offset Absolute offset to file data
entry.Length = arc.Entries[i+1].Offset - entry.Offset;

Entry V2

Type Value Description
uint32 Hash CRC-32 hash of file name
uint32 Offset Absolute offset to file data
uint32 Length Length of file data

Entry V3

Type Value Description
uint64 Hash CRC-64¹ hash of file name
uint32 Offset Absolute offset to file data
uint32 Length Length of file data

Names buffer

A null-terminated list of entry names. With each name starting immediately after the previous name's null terminator.

Data buffer

Data is store uncompressed and decrypted[citation needed], each file can be read by seeking to entry.Offset and reading entry.Length bytes.


See also