Skip to content
View in the app

A better way to browse. Learn more.

ResHax

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.
Help us keep the site running.

007 Everything or Nothing

Featured Replies

  • Author
  • Localization

Not Available, posted Wed May 18, 2016 6:36 pm (13498)


Just a parallel post of something I posted on xentax.

N/A wrote:
Yes there are filenames, 8 byte filename field in the 2nd table to be precise. (kinda like fsh texure files in a way)

I unpacked it to the correct file offset within each data stream, simple nested for loop. (and memory file)
Took me longer to debug than to add new code though..
Code:
# James Bond 007 Everything or Nothing
# script for QuickBMS http://aluigi.org/papers.htm#quickbms
#
# initially coded by Alugi, further documentation of .chk file and expansion of functionality by N/A

set INCLUDEARCHIVENAME 0 //boolean to avoid name conflicts if unpacking 2 or more .chk files

comtype dk2 //quickbms.txt doesn't list ea type, I tried dk2 from on quickbms.txt comments, did a byte-by-byte comparison, identical.
get DUMMY long
if DUMMY > 0xffff
    endian big
endif
get DUMMY long
get TABLEWIDTH long //possibly clarified width of table throughout file.
get DATSTREAMCOUNT long //clarified purpose of integer
get OFFSET long
get XFILES long
math TMP = XFILES
math TMP *= TABLEWIDTH
math OFFSET = TMP
for i = 0 < DATSTREAMCOUNT
    get fileTablePtr long //abs offset of first table pointer.
    get filesInStream long //number of files in each stream
    get XSIZE long
    get SIZE long
    get ZERO long
    get FLAGS long
    math OFFSET x= 0x800
    putvarchr MEMORY_FILE XSIZE 0  //allocates internal memory
    if FLAGS & 0x04000000 //little end
        clog MEMORY_FILE OFFSET SIZE XSIZE
    elif FLAGS & 0x00000400 //big end
        clog MEMORY_FILE OFFSET SIZE XSIZE
    else
        log MEMORY_FILE OFFSET SIZE
    endif
    savepos dataStreamTablePtr 0 //saves pointer to revert to after finish parsing datastream
    goto fileTablePtr 0
    for j = 0 < filesInStream
        getdstring NAME 8 0 //gets filename
        //assembles filename to export, to prevent naming conflicts with 2 or more .chk files
        if INCLUDEARCHIVENAME > 0
            get ChkFN BASENAME 0
            String EXPNAME = ChkFN
            String EXPNAME "."
            String EXPNAME NAME
        else
            String EXPNAME = NAME
        endif
        get DUMMY long 0
        get DUMMY long 0 //value = compressed file size it seems
        get FILEOFFSET long 0
        get FILESIZE long 0
        log EXPNAME FILEOFFSET FILESIZE -1
    next j
    goto dataStreamTablePtr 0
    //no need to keep fileTablePtr as next dataStream gives the offset for the first file in next data stream.
    math OFFSET = SIZE
next i


So now I'm trying to read the .spt files now.
Other than finding the long value that tells the size of each data chunk, I noticed the Filename directory seems to be compressed along with the data. (look at master.def)
  • Author
  • Localization

aluigi, posted Sun May 29, 2016 9:44 pm (13798)


Maybe post a sample spt file.
  • Author
  • Localization

AnonBaiter, posted Sun Mar 26, 2017 10:37 am (21771)


I'll probably have one by the time I have all three versions of the game(PS2, GC, XBOX).
Guest
This topic is now closed to further replies.

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.