XPlor/definitions/asura/asura_chunk.xscript
njohnson 381b28c11f Add Asura engine XScript definitions
Add XScript definitions for Rebellion's Asura engine formats:
- Archive chunks (fcsr, acsr, rcsr)
- Texture chunks (tsxt, xbtx2d_chunk)
- Resource chunks and headers

Used by games like Sniper Elite V2 on Xbox 360.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-07 16:36:02 -05:00

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