# Trophy Hunter 2003 (demo and retail) # script for QuickBMS http://aluigi.org/papers.htm#quickbms idstring "APK" get PACK_NUMBER byte get INFO_OFFSET long get CRYPT_INIT long goto INFO_OFFSET get INFO_SIZE asize math INFO_SIZE -= INFO_OFFSET log MEMORY_FILE INFO_OFFSET INFO_SIZE set TMP_x10194eac long CRYPT_INIT math TMP_x10194eac *= INFO_OFFSET for i = 0 < INFO_SIZE set TMP long TMP_x10194eac math TMP >>= 16 math TMP_x10194eac &= 0xffff math TMP_x10194eac *= 0x6054 math TMP_x10194eac += TMP getvarchr CHR MEMORY_FILE i math CHR ^= TMP_x10194eac putvarchr MEMORY_FILE i CHR next i set OUT_INFO_SIZE long INFO_SIZE math OUT_INFO_SIZE *= 8 # more than enough clog MEMORY_FILE2 0 INFO_SIZE OUT_INFO_SIZE MEMORY_FILE get TABLE_SIZE asize MEMORY_FILE2 for savepos TABLE_OFFSET MEMORY_FILE2 # regular if TABLE_OFFSET >= TABLE_SIZE cleanexit endif get NAME string MEMORY_FILE2 get OFFSET long MEMORY_FILE2 get ZSIZE long MEMORY_FILE2 get XTYPE byte MEMORY_FILE2 get SIZE long MEMORY_FILE2 get CRYPT_INIT long MEMORY_FILE2 savepos TABLE_OFFSET MEMORY_FILE2 # it's needed here in this game if TABLE_OFFSET >= TABLE_SIZE cleanexit endif get DUMMY long MEMORY_FILE2 log MEMORY_FILE OFFSET ZSIZE if XTYPE & 1 set TMP_x10194eac long OFFSET math TMP_x10194eac *= SIZE math TMP_x10194eac ^= CRYPT_INIT for i = 0 < ZSIZE set TMP long TMP_x10194eac math TMP >>= 16 math TMP_x10194eac &= 0xffff math TMP_x10194eac *= 0x6054 math TMP_x10194eac += TMP getvarchr CHR MEMORY_FILE i math CHR ^= TMP_x10194eac putvarchr MEMORY_FILE i CHR next i endif if XTYPE & 2 clog NAME 0 ZSIZE SIZE MEMORY_FILE else log NAME 0 SIZE MEMORY_FILE endif next