Tiger Archive
Tiger archive files are the newer archive files used since Tomb Raider 2013, they are the replacement for bigfiles.
File names
File names are only stored in the form of a hash, just like with Bigfiles.
Until Shadow the same CRC-32 algorithm was used. In Shadow the hash switched to a 64-bit hash with the FNV-1A algorithm.
Specialisation
See the explanation on Bigfiles for more information.
Format
The file will start with a magic and the version number. The magic is TAFS (Tiger Archive FileSystem) or 0x53464154
.
struct TigerArchive
{
uint32_t magic;
uint32_t version;
}
Version 3
This is the first iteration of the Tiger format, used in Tomb Raider and Temple of Osiris.
struct TigerArchiveEntry
{
uint32_t hash; // Filename hash
uint32_t specMask; // Specialisation mask
uint32_t size;
uint32_t packedOffset;
}
struct TigerArchive
{
uint32_t magic;
uint32_t version;
uint32_t numArchives;
uint32_t numRecords;
uint32_t dlcIndex;
// Config name/build dir such as pcx64-w, scarlett-w
char configName[32];
// All file records
TigerArchiveEntry records[numRecords];
}
The following code can be used to decode the packed offset.
auto bigfile = packedOffset & 0xF;
auto offset = packedOffset & 0xFFFFF800;
Version 4
This is the second iteration used in Rise of the Tomb Raider.
struct TigerArchiveEntry
{
uint32_t hash; // Filename hash
uint32_t specMask; // Specialisation mask
uint32_t size;
uint32_t pad;
uint64_t packedOffset;
}
struct TigerArchive
{
uint32_t magic;
uint32_t version;
uint32_t numArchives;
uint32_t numRecords;
uint32_t dlcIndex;
// Config name/build dir such as pcx64-w, scarlett-w
char configName[32];
// All file records
TigerArchiveEntry records[numRecords];
}
Use the following code to decode the packed offset.
auto bigfile = packedOffset & 0xffff;
auto offset = (packedOffset >> 32) & 0xFFFFFFFF;
Version 5
This is the version used since Shadow of the Tomb Raider.
struct TigerArchiveEntry
{
uint64_t hash; // Filename hash
uint64_t specMask; // Specialisation mask
uint32_t size;
uint32_t unknown;
uint64_t packedOffset;
}
struct TigerArchive
{
uint32_t magic;
uint32_t version;
uint32_t numArchives;
uint32_t numRecords;
uint32_t dlcIndex;
uint32_t language;
// Config name/build dir such as pcx64-w, scarlett-w
char configName[32];
// All file records
TigerArchiveEntry records[numRecords];
}
Use the following code to decode the packed offset.
auto bigfile = packedOffset & 0xffff;
auto offset = (packedOffset >> 32) & 0xFFFFFFFF;