106 lines
3.1 KiB
Plaintext
106 lines
3.1 KiB
Plaintext
|
|
// Asura Engine chunk structure
|
||
|
|
// Used by Rebellion games: Sniper Elite, AVP 2010, etc.
|
||
|
|
|
||
|
|
type asura_chunk [display="Asura Chunk"] byteorder BE
|
||
|
|
{
|
||
|
|
// Chunk header: 4-byte ID + 4-byte size + 4-byte version + 4-byte flags
|
||
|
|
chunk_id = ascii(read(4));
|
||
|
|
u32 chunk_size;
|
||
|
|
u32 version;
|
||
|
|
u32 flags;
|
||
|
|
|
||
|
|
chunk_id = chunk_id [ui, readonly, display="Chunk ID"];
|
||
|
|
chunk_size = chunk_size [ui, readonly, display="Chunk Size"];
|
||
|
|
version = version [ui, readonly, display="Version"];
|
||
|
|
flags = flags [ui, readonly, display="Flags"];
|
||
|
|
|
||
|
|
// Calculate remaining data size
|
||
|
|
data_size = chunk_size - 16;
|
||
|
|
|
||
|
|
if (data_size > 0) {
|
||
|
|
data = read(data_size);
|
||
|
|
data = data [ui, display="Chunk Data"];
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
type asura_fcsr_chunk [display="FCSR Resource Chunk"] byteorder BE
|
||
|
|
{
|
||
|
|
// FCSR chunk header
|
||
|
|
chunk_id = ascii(read(4));
|
||
|
|
u32 chunk_size;
|
||
|
|
u32 version;
|
||
|
|
u32 flags;
|
||
|
|
|
||
|
|
chunk_id = chunk_id [ui, readonly, display="Chunk ID"];
|
||
|
|
chunk_size = chunk_size [ui, readonly, display="Chunk Size"];
|
||
|
|
version = version [ui, readonly, display="Version"];
|
||
|
|
flags = flags [ui, readonly, display="Flags"];
|
||
|
|
|
||
|
|
// Resource info
|
||
|
|
u32 resource_type;
|
||
|
|
u32 unknown1;
|
||
|
|
u32 resource_size;
|
||
|
|
|
||
|
|
resource_type = resource_type [ui, readonly, display="Resource Type"];
|
||
|
|
unknown1 = unknown1 [ui, readonly, display="Unknown1"];
|
||
|
|
resource_size = resource_size [ui, readonly, display="Resource Size"];
|
||
|
|
|
||
|
|
// Read null-terminated name
|
||
|
|
name = cstring();
|
||
|
|
name = name [ui, readonly, display="Resource Name"];
|
||
|
|
}
|
||
|
|
|
||
|
|
type asura_lfsr_chunk [display="LFSR List Resource Chunk"] byteorder BE
|
||
|
|
{
|
||
|
|
// LFSR chunk header (list of file references)
|
||
|
|
chunk_id = ascii(read(4));
|
||
|
|
u32 chunk_size;
|
||
|
|
u32 version;
|
||
|
|
u32 flags;
|
||
|
|
|
||
|
|
chunk_id = chunk_id [ui, readonly, display="Chunk ID"];
|
||
|
|
chunk_size = chunk_size [ui, readonly, display="Chunk Size"];
|
||
|
|
version = version [ui, readonly, display="Version"];
|
||
|
|
flags = flags [ui, readonly, display="Flags"];
|
||
|
|
|
||
|
|
// Number of entries
|
||
|
|
u32 entry_count;
|
||
|
|
entry_count = entry_count [ui, readonly, display="Entry Count"];
|
||
|
|
}
|
||
|
|
|
||
|
|
type asura_tsxt_chunk [display="TSXT Texture Set Chunk"] byteorder BE
|
||
|
|
{
|
||
|
|
// TSXT chunk header (texture set)
|
||
|
|
chunk_id = ascii(read(4));
|
||
|
|
u32 chunk_size;
|
||
|
|
u32 version;
|
||
|
|
u32 flags;
|
||
|
|
|
||
|
|
chunk_id = chunk_id [ui, readonly, display="Chunk ID"];
|
||
|
|
chunk_size = chunk_size [ui, readonly, display="Chunk Size"];
|
||
|
|
version = version [ui, readonly, display="Version"];
|
||
|
|
flags = flags [ui, readonly, display="Flags"];
|
||
|
|
|
||
|
|
// Texture count
|
||
|
|
u32 texture_count;
|
||
|
|
texture_count = texture_count [ui, readonly, display="Texture Count"];
|
||
|
|
}
|
||
|
|
|
||
|
|
type asura_stsa_chunk [display="STSA Asset List Chunk"] byteorder BE
|
||
|
|
{
|
||
|
|
// STSA chunk header (asset list - reversed ASTS)
|
||
|
|
chunk_id = ascii(read(4));
|
||
|
|
u32 chunk_size;
|
||
|
|
u32 version;
|
||
|
|
u32 flags;
|
||
|
|
|
||
|
|
chunk_id = chunk_id [ui, readonly, display="Chunk ID"];
|
||
|
|
chunk_size = chunk_size [ui, readonly, display="Chunk Size"];
|
||
|
|
version = version [ui, readonly, display="Version"];
|
||
|
|
flags = flags [ui, readonly, display="Flags"];
|
||
|
|
|
||
|
|
// File count
|
||
|
|
u32 file_count;
|
||
|
|
file_count = file_count [ui, readonly, display="File Count"];
|
||
|
|
}
|