Page 1 of 1

HeroesX Online

Posted: Fri Feb 10, 2012 12:04 pm
by iaw
The contents of this post was deleted because of possible forum rules violation.

Re: HeroesX Online

Posted: Fri Feb 10, 2012 12:58 pm
by chrrox
the fomrat looks fairly easy do you have one more sample just so i can confirm th estarting header.

Re: HeroesX Online

Posted: Fri Feb 10, 2012 1:31 pm
by iaw
chrrox wrote:the fomrat looks fairly easy do you have one more sample just so i can confirm th estarting header.
sample:

http://www.mediafire.com/?z9dqzprwws6sg ... 3e23vje1qf

Re: HeroesX Online

Posted: Fri Feb 10, 2012 1:38 pm
by Ekey

Code: Select all

# FEAR / FEAR2 / ARCH00 archives (script 0.3)
# script for QuickBMS http://quickbms.aluigi.org

comtype deflate
idstring "LTAR"
get VERSION long

# it's possible to make the check on the version or using this solution
savepos TMP
get FULL_SIZE asize
get DUMMY1 long
get DUMMY2 long
math AUTOGUESS = 0
if DUMMY1 u> FULL_SIZE
    math AUTOGUESS = 1
endif
if DUMMY2 u> FULL_SIZE
    math AUTOGUESS = 1
endif
goto TMP
if AUTOGUESS == 0
    get NAMESSZ long
    get FOLDERS long
    get FILES long
    get DUMMY long      # 1
    get DUMMY long      # 0
    get DUMMY long      # 0
    getdstring HASH 16
else
    getdstring HASH 16
    get DUMMY long      # 1
    get DUMMY long      # 0
    get DUMMY long      # 0
    get FILES long
    get FOLDERS long
    get NAMESSZ long
endif

savepos OFFSET
log MEMORY_FILE OFFSET NAMESSZ

math OFFSET += NAMESSZ
set FILESSZ long FILES
math FILESSZ *= 32
log MEMORY_FILE2 OFFSET FILESSZ

math OFFSET += FILESSZ
set FOLDERSSZ long FOLDERS
math FOLDERSSZ *= 16
log MEMORY_FILE3 OFFSET FOLDERSSZ

set FOLDER string ""
callfunction EXTRACT

startfunction EXTRACT
    savepos CURR_OFF MEMORY_FILE3
    if CURR_OFF >= FOLDERSSZ
        cleanexit
    endif
    get NAME_OFF long MEMORY_FILE3
    get SUB_FOLDERS long MEMORY_FILE3
    get NEXT_FOLDERS long MEMORY_FILE3
    get NUM_FILES long MEMORY_FILE3

    goto NAME_OFF MEMORY_FILE
    get NAME string MEMORY_FILE

    # don't have the minimal idea if it's correct, it's an update of the old script
    if AUTOGUESS == 0
        string FOLDER = NAME
    else
        string FOLDER += NAME
    endif
    string FOLDER += /

    for i = 0 < NUM_FILES
        savepos CURR_OFF MEMORY_FILE2
        if CURR_OFF >= FILESSZ
            cleanexit
        endif
        get NAME_OFF long MEMORY_FILE2
        get OFFSET  longlong MEMORY_FILE2
        get ZSIZE   longlong MEMORY_FILE2
        get SIZE    longlong MEMORY_FILE2
        get ZIP     long MEMORY_FILE2

        goto NAME_OFF MEMORY_FILE
        get NAME string MEMORY_FILE

        if FOLDER != "CRC/" # they are not files
            set FNAME string FOLDER
            string FNAME += NAME
            if ZIP == 0
                log FNAME OFFSET SIZE
            else
                # compression 9
                callfunction ZIP_DUMP 1 # 1 only for being faster
            endif
        endif
    next i

    for i = 0 < SUB_FOLDERS
        callfunction EXTRACT
    next i

    set FOLDER string ""
    for i = 0 < NEXT_FOLDERS
        callfunction EXTRACT
    next i
endfunction

startfunction ZIP_DUMP
    log MEMORY_FILE4 0 0
    append
    for j = 0 < SIZE
        math TMP = OFFSET
        math TMP += j
        goto TMP
        get CHUNK_ZSIZE long
        get CHUNK_SIZE long
        savepos TMP
        if CHUNK_ZSIZE == CHUNK_SIZE
            log MEMORY_FILE4 TMP CHUNK_SIZE
        else
            clog MEMORY_FILE4 TMP CHUNK_ZSIZE CHUNK_SIZE
        endif
        math j += 8
        math j += CHUNK_ZSIZE
        math j x= 4
    next
    append
    get SIZE asize MEMORY_FILE4
    log FNAME 0 SIZE MEMORY_FILE4
endfunction
Work fine :)