Coders and would-be coders alike, this is the place to talk about programming.
-
AlphaTwentyThree
- double-veteran

- Posts: 984
- Joined: Mon Aug 24, 2009 10:55 pm
- Has thanked: 75 times
- Been thanked: 640 times
Post
by AlphaTwentyThree » Mon Sep 02, 2013 9:32 am
DARK (2013) PC - *.darkpack
Very very easy archive format.
Code: Select all
# extracts the *.darkpack archives from "DARK" (PC, 2013)
# (c) 2013-09-02 by AlphaTwentyThree of XeNTaX
# script for QuickBMS http://quickbms.aluigi.org
idstring "DARKPACK"
goto 8
get TOC_SIZE long
get FILES long
for i = 1 <= FILES
get OFFSET long
get ZERO long
get CRC long
get ZERO long
get SIZE long
get NAMEL long
getDstring NAME NAMEL
log NAME OFFSET SIZE
next i
-
arg274
- beginner
- Posts: 27
- Joined: Sun Aug 25, 2013 8:05 pm
- Location: Dacca, BD
- Has thanked: 7 times
- Been thanked: 2 times
Post
by arg274 » Tue Sep 03, 2013 7:13 pm
Hey alphatwentythree,can u whip off a bms for scanning and ripping *.pmf files from an unknown archive?or,can you at least tell me the read size at offset value so that i can use it with JN?

-
AlphaTwentyThree
- double-veteran

- Posts: 984
- Joined: Mon Aug 24, 2009 10:55 pm
- Has thanked: 75 times
- Been thanked: 640 times
Post
by AlphaTwentyThree » Tue Sep 03, 2013 8:59 pm
arg274 wrote:Hey alphatwentythree,can u whip off a bms for scanning and ripping *.pmf files from an unknown archive?or,can you at least tell me the read size at offset value so that i can use it with JN?

Here's my old PMF scanner.
Code: Select all
for i = 1
FindLoc OFFSET string "PSMF00" 0 ""
if OFFSET == ""
cleanexit
endif
goto OFFSET
get DUMMY long
get DUMMY long
get DUMMY long
get SIZE long
get NAME basename
string NAME += "_"
string NAME += i
string NAME += ".pmf"
log NAME OFFSET SIZE
math OFFSET += SIZE
goto OFFSET
next i
-
arg274
- beginner
- Posts: 27
- Joined: Sun Aug 25, 2013 8:05 pm
- Location: Dacca, BD
- Has thanked: 7 times
- Been thanked: 2 times
Post
by arg274 » Wed Sep 04, 2013 5:00 pm
thnx man,thumbs up!
-
AlphaTwentyThree
- double-veteran

- Posts: 984
- Joined: Mon Aug 24, 2009 10:55 pm
- Has thanked: 75 times
- Been thanked: 640 times
Post
by AlphaTwentyThree » Sun Sep 08, 2013 1:20 pm
AFL Live 2 (2013) X360 - .wad0/.wad1
Be sure to get the latest func_getTYPE.bms for this one!
Code: Select all
# extracts the game data from "AFL Live 2" (X360, 2013)
# (c) 2013-09-08 by AlphaTwentyThree of XeNTaX
# script for QuickBMS http://quickbms.aluigi.org
include "func_getTYPE.bms"
open FDDE wad0 0
open FDDE wad1 1
endian big
get FILES long 0
get UNK long 0
set BIAS files
math BIAS *= 0x10
math BIAS += 8
for i = 1 <= FILES
get NAME long # crc
string NAME p= "0x%08x" NAME
get SIZE long
get FILE long
get OFFSET long
putVarChr MEMORY_FILE SIZE 0
log MEMORY_FILE 0 0
append
append
if FILE == 0
math OFFSET += BIAS
log MEMORY_FILE OFFSET SIZE 0
elif FILE == 1
log MEMORY_FILE OFFSET SIZE 1
endif
callfunction getType 1
endian big
string NAME += EXT
log NAME 0 SIZE MEMORY_FILE
next i
-
AlphaTwentyThree
- double-veteran

- Posts: 984
- Joined: Mon Aug 24, 2009 10:55 pm
- Has thanked: 75 times
- Been thanked: 640 times
Post
by AlphaTwentyThree » Sat Oct 05, 2013 4:41 pm
9 Clues: The Secret of Serpent Creek - Game.cub
xor150 first, then apply this script.
Code: Select all
# extracts the Game.cub from "9 Clues: The Secret of Serpent Creek" (2013, PC)
# (c) 2013-10-05 by AlphaTwentyThree of XeNTaX
# script for QuickBMS http://quickbms.aluigi.org
idstring \x63\x75\x62\x00\x31\x2E\x30\x00
get FILES long
goto 0x10c
for i = 1 <= FILES
getDstring NAME 0x100
get OFFSET long
get SIZE long
log NAME OFFSET SIZE
next i
-
AlphaTwentyThree
- double-veteran

- Posts: 984
- Joined: Mon Aug 24, 2009 10:55 pm
- Has thanked: 75 times
- Been thanked: 640 times
Post
by AlphaTwentyThree » Sun Oct 06, 2013 12:07 am
Full Mojo Rampage (2013) PC - DataPC.pak
Code: Select all
# extract the DataPC.pak of "Full Mojo Rampage" (PC, 2013)
# (c) 2013-10-06 by AlphaTwentyThree of XeNTaX
# script for QuickBMS http://quickbms.aluigi.org
idstring KCAP
endian big
goto 0xc
get FILES long
set BIAS FILES
math BIAS *= 0x120
math BIAS += 0x20
get OFF asize
math OFF -= BIAS
goto OFF
for i = 1 <= FILES
getDstring NAME 0x100
get ZSIZE long
get SIZE long
get OFFSET long
get IDENT long
getDstring DUMMY 0x10
if IDENT == 1
clog NAME OFFSET SIZE ZSIZE
else
log NAME OFFSET SIZE
endif
next i
-
arg274
- beginner
- Posts: 27
- Joined: Sun Aug 25, 2013 8:05 pm
- Location: Dacca, BD
- Has thanked: 7 times
- Been thanked: 2 times
Post
by arg274 » Sat Oct 12, 2013 11:53 am
can u do a GZip scanning bms,alpha?i only need a scanner one,no need to create a decomprssor too.
-
AlphaTwentyThree
- double-veteran

- Posts: 984
- Joined: Mon Aug 24, 2009 10:55 pm
- Has thanked: 75 times
- Been thanked: 640 times
Post
by AlphaTwentyThree » Sat Oct 12, 2013 2:41 pm
arg274 wrote:can u do a GZip scanning bms,alpha?i only need a scanner one,no need to create a decomprssor too.
Well... I don't know the specs, but maybe offzip works? You can also try to use my generic splitter.
-
arg274
- beginner
- Posts: 27
- Joined: Sun Aug 25, 2013 8:05 pm
- Location: Dacca, BD
- Has thanked: 7 times
- Been thanked: 2 times
Post
by arg274 » Sat Oct 12, 2013 4:31 pm
AlphaTwentyThree wrote:arg274 wrote:can u do a GZip scanning bms,alpha?i only need a scanner one,no need to create a decomprssor too.
Well... I don't know the specs, but maybe offzip works? You can also try to use my generic splitter.
meh,tried offzip quite some time ago but somehow,didnt work for me.i'll give your splitter a try.
-
AlphaTwentyThree
- double-veteran

- Posts: 984
- Joined: Mon Aug 24, 2009 10:55 pm
- Has thanked: 75 times
- Been thanked: 640 times
Post
by AlphaTwentyThree » Sun Oct 20, 2013 7:50 pm
Alien Rage Unlimited (2013) PC - SNDTABLE.AFB/SNDCACHE.AFB
Code: Select all
# Alien Rage Unlimited (2013) PC
# extracts the sounds from the SNDTABLE.AFB/SNDCACHE.AFB
# (c) 2013-10-20 by AlphaTwentyThree of XeNTaX
# script for QuickBMS http://quickbms.aluigi.org
open FDSE "SNDTABLE.AFB" 0
open FDSE "SNDCACHE.AFB" 1
get FILES long 0
for i = 1 <= FILES
get OFFSET long 0
get SIZE long 0
get NAMEL long 0
math NAMEL *= 2
getDstring UNINAME NAMEL 0
set NAME unicode UNINAME
callfunction transname 1
string NAME += ".ogg"
log NAME OFFSET SIZE 1
next i
startfunction transname
math NAMEL /= 2
for k = 0 < NAMEL
getVarChr TEST NAME k
if TEST == 0x2e
putVarChr NAME k 0x2f
endif
next k
endfunction
-
AlphaTwentyThree
- double-veteran

- Posts: 984
- Joined: Mon Aug 24, 2009 10:55 pm
- Has thanked: 75 times
- Been thanked: 640 times
Post
by AlphaTwentyThree » Mon Oct 28, 2013 3:00 pm
Wwise *.bnk soundbank extractor
Somehow I never posted this...
Code: Select all
# extracts sound files from Wwise *.bnk soundbanks
# (c) 2013-10-28 by AlphaTwentyThree of Xentax
# script for QuickBMS http://quickbms.aluigi.org
include "func_getTYPE.bms"
idstring "BKHD"
get SIZE_HEADER long
savepos MYOFF
math MYOFF += SIZE_HEADER
get FSIZE asize
if MYOFF == FSIZE
print "bnk is empty"
cleanexit
endif
goto MYOFF
idstring "DIDX"
get SIZE_DIDX long
set FILES SIZE_DIDX
math FILES /= 0xc
set BIAS MYOFF # complete header
math BIAS += SIZE_DIDX
math BIAS += 16
get BNAME basename
for i = 1 <= FILES
get DIDX long
get OFFSET long
math OFFSET += BIAS
get SIZE long
set NAME DIDX
string NAME += " ("
string NAME += BNAME
string NAME += ")"
putVarChr MEMORY_FILE SIZE 0
log MEMORY_FILE 0 0
append
log MEMORY_FILE OFFSET SIZE
append
callfunction getTYPE 1
string NAME += EXT
log NAME OFFSET SIZE
next i
-
AlphaTwentyThree
- double-veteran

- Posts: 984
- Joined: Mon Aug 24, 2009 10:55 pm
- Has thanked: 75 times
- Been thanked: 640 times
Post
by AlphaTwentyThree » Tue Oct 29, 2013 9:23 pm
Simple audio file sorter
This could come in helpful when you rip a game with the Wwise engine and have thousands of files but don't know what type of sound the file is (music, sfx, ambience, speech etc.).
Just run all the files through the script, it will sort them according to their frequency and channels. Will save you a LOT of time when it comes to music processing!
Also: Good script for beginners.
Code: Select all
getDstring IDENT 4
if IDENT == "OggS"
goto 0x27
get CH byte
get FREQ short
elif IDENT == "RIFF"
goto 0x16
get CH short
get FREQ long
endif
get FNAME filename
string NAME p= "%d_%d/%s" FREQ CH FNAME
get SIZE asize
log NAME 0 SIZE
-
AlphaTwentyThree
- double-veteran

- Posts: 984
- Joined: Mon Aug 24, 2009 10:55 pm
- Has thanked: 75 times
- Been thanked: 640 times
Post
by AlphaTwentyThree » Wed Oct 30, 2013 11:34 am
UPDATE
Just updated my generic file splitter with an additional option that makes it a generic filetype
scanner (!!!).
Funny thing is that it was really easy to implement, I just didn't see the obvious.

-
AlphaTwentyThree
- double-veteran

- Posts: 984
- Joined: Mon Aug 24, 2009 10:55 pm
- Has thanked: 75 times
- Been thanked: 640 times
Post
by AlphaTwentyThree » Sun Jan 05, 2014 5:14 pm
Reservoir Dogs (PS2) - *.PS2
The sounds in this game are wav/wav.str pairs. Maybe I'll take a look at these some other time.
Code: Select all
# Reservoir Dogs (PS2) - *.PS2 extractor
# (c) 2014-01-05 by AlphaTwentyThree of XeNTaX
# script for QuickBMS http://quickbms.aluigi.org
goto 0xc
get FILES long
get OFF_INFO long
math OFF_INFO *= 0x800
goto 0x28
get OFF_NAMES long
math OFF_NAMES *= 0x800
goto OFF_INFO
for i = 1 <= FILES
get OFFSET long
get CRC long
get SIZE long
get NAMEPOS long
math NAMEPOS += OFF_NAMES
get UNK long # always 1
get UNK long # 0 or 4
get UNK long
get UNK long
math OFFSET *= 0x800
savepos MYOFF
goto NAMEPOS
get NAME string
goto MYOFF
get WNAME basename
string WNAME += "/"
string WNAME += NAME
log WNAME OFFSET SIZE
next i