Code:
# JX3 Online new (script 0.1.2)
# This script is completely heuristic because there is a sort of padding (0xce byte) between the files
# If you use quickbms.exe the tool will use a particular way to guess if the current position is
# correct, while if you use quickbms_4gb_files it will use another one... yes it's a total work-around.
# script for QuickBMS http://quickbms.aluigi.org
comtype lzo1x
get FULLSIZE asize
get NAME basename
strlen i NAME
for i -= 1 >= 0
getvarchr TMP NAME i
if TMP < '0' || TMP > '9'
break
endif
next i -= 1
math i += 1
string NAME <<= i
math BASE_GUESS = NAME # not used at the moment
math TMP = 0x10000000
math TMP *= 16
math QUICKBMS64 = 0
if TMP != 0
math QUICKBMS64 = 1
endif
math BASE_OFF = 0
math FILE_NUM = 0
math CHECK_SIZE = FULLSIZE
math CHECK_SIZE -= 40
for OFFSET = 0 u< CHECK_SIZE
# you will receive an error, ignore it
goto OFFSET
do
get TMP byte
while TMP == 0xce
goto -1 0 SEEK_CUR
savepos MYENTRY_OFF
# offset guessed, this is a work-around used in both quickbms64 and 32
for
getdstring DUMMY 0xc
getdstring SIZE 5
get SIZE2 threebyte
getdstring ENTRY_OFF 5
get ENTRY_OFF2 threebyte # 40 bits grants over 1500 package.dat
if SIZE2 == 0 && ENTRY_OFF2 == 0
break
endif
math MYENTRY_OFF -= 1
goto MYENTRY_OFF
next
goto MYENTRY_OFF
# offset guessed, this is a work-around
for
getdstring DUMMY 0xc
get SIZE longlong
get ENTRY_OFF longlong
math ENTRY_OFF -= BASE_OFF
if ENTRY_OFF == 0
break
elif ENTRY_OFF == MYENTRY_OFF
break
elif ENTRY_OFF u>= FULLSIZE # multi packages
break
endif
math MYENTRY_OFF -= 1
goto MYENTRY_OFF
next
if ENTRY_OFF u>= FULLSIZE
if FILE_NUM == 0
if QUICKBMS64 != 0
math BASE_OFF = ENTRY_OFF
endif
endif
endif
get ZSIZE longlong
get ZIP long
getdstring DUMMY 0x10
savepos OFFSET
if ZIP == 0
log "" OFFSET SIZE
elif ZIP == 1
clog "" OFFSET ZSIZE SIZE
else
# unknown
log "" OFFSET ZSIZE
endif
math OFFSET += ZSIZE
math FILE_NUM += 1
next