# NHL 2K11 / College Hoops 2K8 0xaa00b3bf (Script 0.3.1) # script for QuickBMS http://quickbms.aluigi.org endian big idstring "\xaa\x00\xb3\xbf" get ALIGN long get ARCHIVES long get ZERO long get FILES long get ZERO long # guess the size of the archive names: 4 or 32 utf16 characters # unfortunatley there is no version or flag, we must guess the 3 or more formats available savepos TMP2 get ARCHIVE_SIZE long get ZERO long savepos TMP get NAME unicode savepos i math i - TMP for i = i < 0x40 get TMP short if TMP != 0 break endif next i + 2 if i > 10 # in case of little endian math NAMESZ = 0x40 else math NAMESZ = 8 endif goto TMP2 for i = 0 < ARCHIVES get ARCHIVE_SIZE long math ARCHIVE_SIZE >> 1 get ZERO long getdstring NAME NAMESZ # 0A, 0B set NAME unicode NAME putarray 10 i NAME # unused putarray 11 i ARCHIVE_SIZE # unused next i # guess more math WORKAROUND = 0 savepos TMP if NAMESZ == 0x40 else get SOME_CRC long get OFFSET long get SIZE long if SIZE == 0 math WORKAROUND = 1 endif endif goto TMP for i = 0 < FILES if NAMESZ == 0x40 get ZERO long # compression? ever zero get SIZE long get SOME_CRC long get OFFSET long else get SOME_CRC long get OFFSET long if WORKAROUND == 0 get SIZE long math SIZE * ALIGN else get ZERO long get SIZE long endif endif putarray 0 i ZERO putarray 1 i SIZE putarray 2 i SOME_CRC putarray 3 i OFFSET next i print "sorting offsets, please wait..." sortarray 3 1 math ARCHIVE_OFF = 0 for i = 0 < FILES getarray ZERO 0 i getarray SIZE 1 i getarray SOME_CRC 2 i getarray OFFSET 3 i math OFFSET * ALIGN math OFFSET - ARCHIVE_OFF get ARCHIVE_SIZE asize xmath TMP "OFFSET + SIZE" if TMP u> ARCHIVE_SIZE xmath SIZE1 "ARCHIVE_SIZE - OFFSET" xmath SIZE2 "SIZE - SIZE1" putvarchr MEMORY_FILE SIZE 0 log MEMORY_FILE OFFSET SIZE1 math ARCHIVE_OFF + ARCHIVE_SIZE get NAME filename string NAME p "0x%s" NAME math NAME + 1 string NAME p "%02X" NAME open FDSE NAME 0 append log MEMORY_FILE 0 SIZE2 append log "" 0 SIZE MEMORY_FILE else log "" OFFSET SIZE endif next i