// GUI file (Big Endian, Sniper Elite, AVP, etc.) // XMemCompressed data containing Asura archive type guiBE [root, display="GUI (Big Endian)"] byteorder BE { criteria { require _ext == "guibe"; // 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 + ".gui.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"]; } }