# Asura engine (script 0.2.2a) # Sniper Elite # Rogue Trooper # Guard Shield # possibly other Rebellion's games # thanx to Terry Butler for having solved the mistery of the filenames in ASTS # script for QuickBMS http://aluigi.org/papers.htm#quickbms get PACK_SIZE asize getdstring SIGN 8 if SIGN == "AsuraCmp" get ZSIZE long get SIZE long math ZSIZE = PACK_SIZE math ZSIZE -= 8 comtype huffboh clog TEMPORARY_FILE 8 ZSIZE SIZE open "." TEMPORARY_FILE get PACK_SIZE asize getdstring SIGN 8 elif SIGN == "AsuraZlb" get ZERO long get ZSIZE long get SIZE long savepos OFFSET math ZSIZE = PACK_SIZE math ZSIZE -= OFFSET comtype zlib clog TEMPORARY_FILE OFFSET ZSIZE SIZE open "." TEMPORARY_FILE get PACK_SIZE asize getdstring SIGN 8 endif if SIGN != "Asura " cleanexit endif for x = 0 savepos CHUNK_OFFSET math TMP = CHUNK_OFFSET math TMP += 16 if TMP >= PACK_SIZE cleanexit endif getdstring CHUNK 4 get CHUNKSZ long get DUMMY long get DUMMY long if CHUNK == RSCF get TYPE long get DUMMY long get SIZE long get NAME string math OFFSET = CHUNK_OFFSET math OFFSET += CHUNKSZ math OFFSET -= SIZE log NAME OFFSET SIZE elif CHUNK == ASTS get FILES long for i = 0 < FILES callfunction padded_name 1 get DUMMY byte get SIZE long get OFFSET long log NAME OFFSET SIZE next i else savepos OFFSET math SIZE = CHUNK_OFFSET math SIZE += CHUNKSZ math SIZE -= OFFSET set NAME string CHUNK string NAME += "_chunk/" string NAME += x string NAME += ".dat" log NAME OFFSET SIZE # comment here if you don't want to extract these useless chunks endif math CHUNK_OFFSET += CHUNKSZ goto CHUNK_OFFSET next x startfunction padded_name set NAME string "" set NAME_POS long 0 do get DUMMY long string NAME += "PADD" putvarchr NAME NAME_POS DUMMY long math NAME_POS += 4 strlen NAMESZ NAME while NAMESZ >= NAME_POS endfunction