Page 1 of 1

Starship Troopers SLAK

Posted: Sat Sep 10, 2005 9:53 pm
by KorNet
Help extract SLAK archives for game Starship Troopers
thx :)

Posted: Sat Sep 10, 2005 11:39 pm
by PXR

Code: Select all

char   (16)  - GRAIS (SlackPackFile) ("null"-terminated)
uint32 (04)  - Absolute Offset to Directory
uint32 (04)  - Unknown
uint32 (04)  - Unknown (4608)
uint32 (04)  - Unknown (4)
uint32 (04)  - Amount of Files
uint32 (04)  - Unknown
uint32 (04)  - Unknown


 // For each file

uint32 (04)  - Relative Offset to correct Relative Path - from the start of the path entries.
uint32 (04)  - Unknown (3131961357)
uint32 (04)  - Unknown
uint32 (04)  - Unknown (29724392)
uint32 (04)  - Compressed File Length
uint32 (04)  - Uncompressed File Length
uint32 (04)  - Absolute File Offset
uint32 (04)  - Null
uint32 (04)  - Null Terminator Length for the file's relative path?
uint32 (04)  - Unknown


 // For each file

char   (x) - relative path with filename (null terminated)


byte   (x) - file data
Something like that I guess.. but it might not be fully correct. :?
It seems to use zlib-compression btw.

Posted: Sun Sep 11, 2005 3:10 pm
by friendsofwatto
Hi mate,

Yep, these are the specs I made - looks kinda the same as the specs above.

Code: Select all

+--------------------------+
| Starship Troopers *.slak |
+--------------------------+

// Uses ZLib compression

// ARCHIVE HEADER
  16 - Header ("SlackPackFile  " + null)
  4 - Directory Offset
  4 - File Entry length (40)
  4 - Unknown
  4 - Unknown
  4 - Number Of Files
  4 - Filename Directory Length
  4 - Unknown

// DIRECTORY
  // for each file (40 bytes for each entry)
    4 - Filename Offset (relative to the start of the filename directory)
    4 - Unknown
    8 - Hash?
    4 - Compressed File Length
    4 - Decompressed File Length
    4 - File Offset
    4 - null
    4 - Unknown (1)
    4 - Unknown
    
// FILENAME DIRECTORY
  // for each file
    X - Filename
    1 - null Filename Terminator

// FILE DATA
  // for each file
    X - File Data
Will hopefully have a plugin or something for this format within a few days - just need to finish some university work off first.

WATTO
watto@watto.org
http://www.watto.org

Posted: Tue Sep 20, 2005 6:57 am
by friendsofwatto
OK, I have attached a Game Extractor plugin for this archive - I'm still pretty busy though so I don't have a MexCom script, and I havn't put this plugin into a Game Extractor update yet.

The plugin should work if you unzip it into your "GameExtractor/Plugins" directory, or the "GameExtractor/" directory. If not, you can do the following...

1. Unzip the attachment
2. Open GameExtractor.jar in a zip program like WinZip
3. Put the new plugin into the zip
4. Save it (as GameExtractor.jar , NOT GameExtractor.zip)
5. Run Game Extractor.

Good luck - when I get some more time I will try to get some scripts done and a new Game Extractor update.

WATTO
watto@watto.org
http://www.watto.org

Posted: Tue Sep 20, 2005 9:05 am
by KorNet
thx Watooo :D

Re: Starship Troopers SLAK

Posted: Fri Apr 01, 2011 11:19 pm
by aluigi
yeah I know it's a jurassic thread but my post comes from a request I received via mail.
in short an user needed a way to reinject some files so with quickbms 0.4.10b and the following script this is possible and that's the reason I have decided to update this thread:

Code: Select all

# SlackPackFile (script 0.1.1)
# script for QuickBMS http://quickbms.aluigi.org

idstring "SlackPackFile  \0"
get DIRECTORY_OFFSET long
get FILE_ENTRY_LENGTH long
get DUMMY long
get DUMMY long
get FILES long
get FILENAME_DIRECTORY_LENGTH long
get DUMMY long

math FILENAME_DIRECTORY_LENGTH = FILES
math FILENAME_DIRECTORY_LENGTH *= 40
math FILENAME_DIRECTORY_LENGTH += DIRECTORY_OFFSET

goto DIRECTORY_OFFSET
for i = 0 < FILES
    get NAME_OFF long
    get DUMMY long
    get DUMMY longlong
    get ZSIZE long
    get SIZE long
    get OFFSET long
    get DUMMY long
    get DUMMY long  # not the zip!
    get DUMMY long
    savepos TMP
    math NAME_OFF += FILENAME_DIRECTORY_LENGTH
    goto NAME_OFF
    get NAME string
    goto TMP
    if SIZE == ZSIZE
        log NAME OFFSET SIZE
    else
        clog NAME OFFSET ZSIZE SIZE
    endif
next i
*updated*