// 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"]; }