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>
39 lines
1.2 KiB
Plaintext
39 lines
1.2 KiB
Plaintext
// Xbox 360 compressed archive (Sniper Elite, AVP, etc.)
|
|
// XMemCompressed data containing Asura archive
|
|
|
|
type xbox360 [root, display="Xbox 360 Archive"] byteorder BE
|
|
{
|
|
criteria {
|
|
require _ext == "xbox360";
|
|
// XMemCompress signature: 0x0FF512ED or 0x0FF512EE followed by 0x01000000
|
|
sig1 = u32at(0);
|
|
sig2 = u32at(4);
|
|
require (sig1 == 0x0FF512ED || sig1 == 0x0FF512EE);
|
|
require sig2 == 0x01000000;
|
|
}
|
|
|
|
// Read signature info for display
|
|
u32 xmem_signature;
|
|
u32 xmem_flags;
|
|
xmem_signature = xmem_signature [ui, readonly, display="XMem Signature"];
|
|
xmem_flags = xmem_flags [ui, readonly, display="XMem Flags"];
|
|
|
|
seek(0);
|
|
|
|
// Read entire file and decompress
|
|
compressed_data = read(EOF);
|
|
decompressed_data = compressed_data |> xmem;
|
|
|
|
// Export decompressed data
|
|
write_file(_basename + ".decompressed", decompressed_data);
|
|
|
|
// Check if decompressed data is an Asura archive
|
|
dec_sig = ascii(bytesof(decompressed_data, 0, 8));
|
|
is_asura = (dec_sig == "Asura ") [ui, readonly, display="Is Asura Archive"];
|
|
|
|
if (is_asura) {
|
|
archive = decompressed_data |> parse asura_archive;
|
|
archive = archive [ui, display="Asura Archive"];
|
|
}
|
|
}
|