# Condemned 2 for Xbox360 (script 0.2.1a) # script for QuickBMS http://quickbms.aluigi.org comtype xmemdecompress getdstring SIGN 4 if SIGN == "RATL" endian big elif SIGN == "LTAR" else cleanexit endif get RATL_FULLSIZE asize get DUMMY long get INFO_OFFSET long get FOLDERS long get FILES long get DUMMY long get DUMMY long get DUMMY long getdstring DUMMY 16 math INFO_OFFSET += 0x30 math FOLDER_OFFSET = FILES math FOLDER_OFFSET *= 0x20 math FOLDER_OFFSET += INFO_OFFSET for i = 0 < FOLDERS goto FOLDER_OFFSET get NAME_OFF long get PREV_ID long get NEXT_ID long get SUB_FILES long savepos FOLDER_OFFSET math NAME_OFF += 0x30 goto NAME_OFF get FOLDER string string FOLDER += / for j = 0 < SUB_FILES goto INFO_OFFSET get NAME_OFF long get NAME_OFF64 long get OFFSET long get OFFSET64 long get ZSIZE long get ZSIZE64 long get SIZE long get SIZE64 long savepos INFO_OFFSET math NAME_OFF += 0x30 goto NAME_OFF get NAME string set FULLNAME string FOLDER string FULLNAME += NAME set SKIP_FILE long 0 #if SIZE u>= RATL_FULLSIZE # long story, global.snd has the # set SKIP_FILE long 1 # latest files like snd/global.snd and #endif # those in the worlds folder that in if ZSIZE u>= RATL_FULLSIZE # reality don't exist or are the same set SKIP_FILE long 1 # archive... so ignore them endif if OFFSET u> RATL_FULLSIZE set SKIP_FILE long 1 endif if SKIP_FILE == 0 if SIZE == ZSIZE log FULLNAME OFFSET SIZE else callfunction unpack endif else print "Alert: skipped file %FULLNAME% (%OFFSET% %ZSIZE% %SIZE%)" endif next j next i startfunction unpack savepos TMP goto OFFSET set LIMIT long OFFSET math LIMIT += ZSIZE set CHUNK_SIZE long 0x10000 putvarchr MEMORY_FILE SIZE 0 log MEMORY_FILE 0 0 append for OFFSET = OFFSET u< LIMIT get CHUNK_ZSIZE long savepos OFFSET if CHUNK_ZSIZE & 0xf0000000 math CHUNK_ZSIZE ^= 0xf0000000 log MEMORY_FILE OFFSET CHUNK_ZSIZE else math CHUNK_ZSIZE += 8 # work-around clog MEMORY_FILE OFFSET CHUNK_ZSIZE CHUNK_SIZE math CHUNK_ZSIZE -= 8 # work-around endif math OFFSET += CHUNK_ZSIZE math OFFSET ux= 4 goto OFFSET next append #get SIZE asize MEMORY_FILE log FULLNAME 0 SIZE MEMORY_FILE # lame bug, I forgot it :) goto TMP endfunction