Re: My quickBMS scripts
Posted: Mon Sep 17, 2012 2:14 pm
Just made a really extensive update for both the EA ast extractor and func_getTYPE.bms (faster and more sophisticated)! Extreme enhancements FTW! 
Yay!Mr.Mouse wrote:Also put a spot light on Facebook http://www.facebook.com/permalink.php?s ... 8469022795
Code: Select all
# raw Activision BAF extractor
# this script only extracts the raw data from baf files (header, cue markers, stream data)
# to be used for later post-processing of the contained audio files (saved as *.wavl)
# (c) 2012-09-25 by AlphaTwentyThree of XeNTaX
idstring "BANK"
get SINFO long
if SINFO != 0x34
endian big
reverselong SINFO
endif
get UNK long
get FILES long
goto SINFO
savepos HOFF
for i = 1 <= FILES
idstring "WAVE"
get HSIZE long
get UNK0 long
getDstring NAME 0x20
get SOFF long # stream start
math SOFF -= 8
get SSIZE long
set COFF HOFF
math COFF += HSIZE
goto COFF
getDstring CID 4
if CID == "CUE "
get CSIZE long
else
set CSIZE 0
endif
set SIZE HSIZE
math SIZE += CSIZE
math SIZE += SSIZE
putVarChr MEMORY_FILE SIZE 0
log MEMORY_FILE 0 0
goto HOFF
getDstring HDATA HSIZE
putDstring HDATA HSIZE MEMORY_FILE
if CSIZE != 0
goto COFF
getDstring CDATA CSIZE
putDstring CDATA CSIZE MEMORY_FILE
else
set CSIZE 0
endif
goto SOFF
getDstring SDATA SSIZE
putDstring SDATA SSIZE MEMORY_FILE
string NAME += ".wavel"
log NAME 0 SIZE MEMORY_FILE
math HSIZE += CSIZE
math HOFF += HSIZE
goto HOFF
next iTime traveling now, are we?AlphaTwentyThree wrote:Code: Select all
# (c) 2021-09-25 by AlphaTwentyThree of XeNTaX
See, THAT'S how advanced my scripts are!Dinoguy1000 wrote:Time traveling now, are we?AlphaTwentyThree wrote:Code: Select all
# (c) 2021-09-25 by AlphaTwentyThree of XeNTaX
Code: Select all
# extracts the contents of the big STREE0.TRE archive from Turok: Evolution (PS2)
# note: CORRECT NAMES!!!
# (c) 2012-10-02 by AlphaTwentyThree of XeNTaX
get FILES long
for i = 0 < FILES
get OFFSET long
get SIZE long
get DATA_CRC long
get NAME_CRC long
putArray 0 i OFFSET
putArray 1 i SIZE
next i
print "sorting array"
sortarray 0 1
getArray NAMEOFF 0 2
goto NAMEOFF
for i = 0 < FILES
getCT NAME string 0x0d
get DUMMY byte
getArray OFFSET 0 i
getArray SIZE 1 i
log NAME OFFSET SIZE
next iCode: Select all
# extracts *.TRE archives from Turok: Evolution (PS2)
# note: for the main STREE.TRE use my other script!
# (c) 2012-10-02 by AlphaTwentyThree of XeNTaX
include "func_getTYPE.bms"
get FILES long
for i = 0 < FILES
get OFFSET long
get SIZE long
get DATA_CRC long
get NAME_CRC long
putArray 0 i OFFSET
putArray 1 i SIZE
putarray 2 i NAME_CRC
next i
print "sorting array"
sortarray 0 1
get BNAME basename
string BNAME += "_"
for i = 0 < FILES
getArray OFFSET 0 i
getArray SIZE 1 i
getArray CRC 2 i
putVarChr MEMORY_FILE SIZE 0
log MEMORY_FILE 0 0
append
log MEMORY_FILE OFFSET SIZE
append
string CRC p= "_0x%08x" CRC
set NAME BNAME
string NAME += i
string NAME += CRC
callfunction getTYPE 1
if EXT != ""
string NAME += EXT
endif
log NAME 0 SIZE MEMORY_FILE
next iCode: Select all
# stereo vag to SS2 converter for PS2 games
# (c) 2012-10-02 by AlphaTwentyThree of XeNTaX
include "func_header_SS2.bms"
idstring "AAAp"
get INTERLEAVE short
get CH short
goto 0x1a
get FREQ short
reverseshort FREQ
set OFFSET 0x68
get SIZE asize
math SIZE -= OFFSET
set NAME ""
callfunction SS2 1Code: Select all
# extracts EA big archives with "EB" identifier
# tested with NHL 13 (X360)
# (c) 2012-10-08 by AlphaTwentyThree of XeNTaX
comtype xmemdecompress
idstring \x45\x42\x00\x03
endian big
goto 4
get FILES long
get UNK long # some size
get OFF_NAMES long # plus random bias of zeros
get SIZE_NAMES long
get NAMEL_FILE byte
get NAMEL_FOLDER byte
get ZERO byte
get FOLDERS byte
set OFF_FOLDERS FILES
math OFF_FOLDERS *= NAMEL_FILE
math OFF_FOLDERS += OFF_NAMES
math OFF_FOLDERS x= 0x10 # round to next 0x10 bytes
math NAMEL_FILE -= 2 # short for folder number
goto 0x30
for i = 1 <= FILES
get OFFSET long
math OFFSET *= 0x10
get ZERO long
get SIZE long
get HASH long
putArray 0 i OFFSET
putArray 1 i SIZE
next i
goto OFF_NAMES
for i = 1 <= FILES
get FOLDER_NUMBER short
getDstring NAME NAMEL_FILE
savepos MYOFF
set OFF_FOLDERNAME FOLDER_NUMBER
math OFF_FOLDERNAME *= NAMEL_FOLDER
math OFF_FOLDERNAME += OFF_FOLDERS
goto OFF_FOLDERNAME
getDstring FOLDER NAMEL_FOLDER
set FNAME FOLDER
string FNAME += "/"
string FNAME += NAME
getArray OFFSET 0 i
getArray SIZE 1 i
goto OFFSET
getDstring COMP 8
if COMP == "chunklzx"
callfunction unpack 1
log FNAME 0 SIZE MEMORY_FILE
else
log FNAME OFFSET SIZE
endif
goto MYOFF
next i
startfunction unpack # (c) Luigi Auriemma
get DUMMY long
get FULLSIZE long
get SIZE long
get CHUNKS long
get DUMMY long
get DUMMY long
get DUMMY long
get DUMMY long
log MEMORY_FILE 0 0
append
savepos OFFSET
for j = 0 < CHUNKS
math OFFSET x= 0x8
for # very lame, made on the fly
math T = OFFSET
math T %= 0x10
if T == 8
break
endif
math OFFSET += 8
next
goto OFFSET
get ZSIZE long
get DUMMY long
savepos OFFSET
clog MEMORY_FILE OFFSET ZSIZE SIZE
math OFFSET += ZSIZE
next j
append
get MYSIZE asize MEMORY_FILE
if MYSIZE != FULLSIZE
print "Alert: MEMORY_FILE %MYSIZE% != %FULLSIZE%"
endif
set SIZE FULLSIZE
endfunctionCode: Select all
# decompresses the *.pkz files from The Amazing Spider-Man (PC)
# no extraction of individual files at the moment (TOC offsets don't fit)
# (c) 2012-10-09 by AlphaTwentyThree of XeNTaX
comtype zlib_noerror
get IDENT long
if IDENT == 0xb0b1bEbA
endian big
elif IDENT == 0xbabeb1b0
else
cleanexit
endif
get DATA_OFF long # start of compressed data
get NAME basename
string NAME += ".header"
log NAME 0 DATA_OFF # write header to disk for later research
get BLOCKSIZE long # length of one zlib block
get LOOPS asize # calculate the number of loops
math LOOPS -= DATA_OFF
math LOOPS /= BLOCKSIZE
# memory pre-allocation
get SIZE asize
math SIZE -= DATA_OFF
math SIZE *= 10
putVarChr MEMORY_FILE SIZE 0
log MEMORY_FILE 0 0
set OFFSET DATA_OFF # initialize first offset
set SIZE BLOCKSIZE
math SIZE *= 10 # set decompressed size to some default
append
for i = 1 <= LOOPS
clog MEMORY_FILE OFFSET BLOCKSIZE SIZE # decompress block to memory
math OFFSET += BLOCKSIZE # jump to next block
next i
append
get NAME basename
string NAME += ".decomp"
get SIZE asize MEMORY_FILE
log NAME 0 SIZE MEMORY_FILEI have a feeling that there's some better way to do this (since, according to my understanding, it's basically just a ceil() function with a custom "cutoff"), but my maths isn't strong enough to pick it out (I think bit-shifting would play a role, though... does QuickBMS actually support bit-wise manipulations?). =/AlphaTwentyThree wrote:Code: Select all
set BIAS OFF_FOLDERS math BIAS %= 0x10 if BIAS != 0 math OFF_FOLDERS /= 0x10 math OFF_FOLDERS += 1 math OFF_FOLDERS *= 0x10 endif