2026-01-07 16:36:02 -05:00
|
|
|
// Asset Resource file (Big Endian, Sniper Elite, AVP, etc.)
|
2026-01-08 00:38:33 -05:00
|
|
|
// Can be raw Asura archive or XMemCompressed
|
2026-01-07 16:36:02 -05:00
|
|
|
|
|
|
|
|
type asrBE [root, display="Asset Resource (Big Endian)"] byteorder BE
|
|
|
|
|
{
|
|
|
|
|
criteria {
|
|
|
|
|
require _ext == "asrbe";
|
2026-01-08 00:38:33 -05:00
|
|
|
// Accept either Asura signature or XMemCompress signature
|
|
|
|
|
sig = u32at(0);
|
|
|
|
|
is_xmem = (sig == 0x0FF512ED || sig == 0x0FF512EE);
|
|
|
|
|
is_asura = (ascii(bytesat(0, 8)) == "Asura ");
|
|
|
|
|
require (is_xmem || is_asura);
|
2026-01-07 16:36:02 -05:00
|
|
|
}
|
|
|
|
|
|
2026-01-08 00:38:33 -05:00
|
|
|
// Check if XMemCompressed
|
|
|
|
|
sig = u32at(0);
|
|
|
|
|
is_compressed = (sig == 0x0FF512ED || sig == 0x0FF512EE);
|
|
|
|
|
is_compressed = is_compressed [ui, readonly, display="XMem Compressed"];
|
|
|
|
|
|
|
|
|
|
if (is_compressed) {
|
|
|
|
|
// 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"];
|
|
|
|
|
|
|
|
|
|
compressed_size = size();
|
|
|
|
|
compressed_size = compressed_size [ui, readonly, display="Compressed Size"];
|
|
|
|
|
|
|
|
|
|
// Read entire file and decompress
|
|
|
|
|
seek(0);
|
|
|
|
|
compressed_data = read(EOF);
|
|
|
|
|
decompressed_data = compressed_data |> xmem;
|
|
|
|
|
|
|
|
|
|
decompressed_size = len(decompressed_data);
|
|
|
|
|
decompressed_size = decompressed_size [ui, readonly, display="Decompressed Size"];
|
|
|
|
|
|
|
|
|
|
// Export decompressed data
|
|
|
|
|
write_file(_basename + ".asura", decompressed_data);
|
|
|
|
|
|
|
|
|
|
// Parse decompressed archive
|
|
|
|
|
if (decompressed_size > 8) {
|
|
|
|
|
dec_sig = ascii(bytesof(decompressed_data, 0, 8));
|
|
|
|
|
if (dec_sig == "Asura ") {
|
|
|
|
|
archive = decompressed_data |> parse asura_archive;
|
|
|
|
|
archive = archive [ui, display="Archive Contents"];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
// Parse as raw Asura archive
|
|
|
|
|
archive = parse_here("asura_archive");
|
|
|
|
|
archive = archive [ui, display="Asura Archive"];
|
|
|
|
|
}
|
2026-01-07 16:36:02 -05:00
|
|
|
}
|