- Migrate from bracket attributes to ui() function calls - Enhance chunk parsing with improved structure definitions - Add additional metadata fields to chunk handlers - Update Xbox 360 texture and archive definitions Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
166 lines
3.1 KiB
Plaintext
166 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("chunk_id", "Chunk ID");
|
|
chunk_size = chunk_size;
|
|
|
|
ui("chunk_size", "Chunk Size");
|
|
version = version;
|
|
|
|
ui("version", "Version");
|
|
flags = flags;
|
|
|
|
ui("flags", "Flags");
|
|
|
|
// Calculate remaining data size
|
|
data_size = chunk_size - 16;
|
|
|
|
if (data_size > 0) {
|
|
data = read(data_size);
|
|
ui("data", "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("chunk_id", "Chunk ID");
|
|
chunk_size = chunk_size;
|
|
|
|
ui("chunk_size", "Chunk Size");
|
|
version = version;
|
|
|
|
ui("version", "Version");
|
|
flags = flags;
|
|
|
|
ui("flags", "Flags");
|
|
|
|
// Resource info
|
|
u32 resource_type;
|
|
u32 unknown1;
|
|
u32 resource_size;
|
|
|
|
resource_type = resource_type;
|
|
|
|
|
|
ui("resource_type", "Resource Type");
|
|
unknown1 = unknown1;
|
|
|
|
ui("unknown1", "Unknown1");
|
|
resource_size = resource_size;
|
|
|
|
ui("resource_size", "Resource Size");
|
|
|
|
// Read null-terminated name
|
|
name = cstring();
|
|
name = name;
|
|
|
|
ui("name", "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("chunk_id", "Chunk ID");
|
|
chunk_size = chunk_size;
|
|
|
|
ui("chunk_size", "Chunk Size");
|
|
version = version;
|
|
|
|
ui("version", "Version");
|
|
flags = flags;
|
|
|
|
ui("flags", "Flags");
|
|
|
|
// Number of entries
|
|
u32 entry_count;
|
|
entry_count = entry_count;
|
|
|
|
ui("entry_count", "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("chunk_id", "Chunk ID");
|
|
chunk_size = chunk_size;
|
|
|
|
ui("chunk_size", "Chunk Size");
|
|
version = version;
|
|
|
|
ui("version", "Version");
|
|
flags = flags;
|
|
|
|
ui("flags", "Flags");
|
|
|
|
// Texture count
|
|
u32 texture_count;
|
|
texture_count = texture_count;
|
|
|
|
ui("texture_count", "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("chunk_id", "Chunk ID");
|
|
chunk_size = chunk_size;
|
|
|
|
ui("chunk_size", "Chunk Size");
|
|
version = version;
|
|
|
|
ui("version", "Version");
|
|
flags = flags;
|
|
|
|
ui("flags", "Flags");
|
|
|
|
// File count
|
|
u32 file_count;
|
|
file_count = file_count;
|
|
|
|
ui("file_count", "File Count");
|
|
}
|