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.

My QuickBMS scripts [AlphaTwentyThree]

Featured Replies

  • Author
  • Localization

AlphaTwentyThree, posted Tue Jun 21, 2022 7:10 am (72206)


Bounty Hounds (PSP) - *.xpk

Code:
# Bounty Hounds (PSP) - *.xpk

# (c) 2022-06-21 by AlphaTwentyThree of Zenhax
# script for QuickBMS http://quickbms.aluigi.org

comtype gzip
idstring XPK
getDstring VER 4
goto 8
get FILES long
for i = 0 < FILES
   getDstring NAME 0x44
   get DUMMY threebyte
   get C byte
   get OFFSET long
   math OFFSET *= 0x800
   get SIZE long
   get CSIZE long
   getDstring DUMMY 0x2c
   if C != 0
      clog NAME OFFSET CSIZE SIZE
   else
      log NAME OFFSET CSIZE
   endif
next i

xpk.bms

  • Replies 54
  • Views 99
  • Created
  • Last Reply

Top Posters In This Topic

  • Author
  • Localization

AlphaTwentyThree, posted Tue Jun 21, 2022 12:46 pm (72212)


Curve Studios Limited - *.pak
(https://www.mobygames.com/company/curve-studios-limited)

Code:
# Curve Studios Limited - *.pak

# (c) 2022-06-21 by AlphaTwentyThree of Zenhax
# script for QuickBMS http://quickbms.aluigi.org

idstring \xcd\xcd\xcd\xcd

get FILES long
get TOC long
xmath NAMEOFF "TOC FILES*0xc"
goto TOC
for i = 0 < FILES
   get CRC long
   get OFFSET long
   get SIZE long
   savepos OFF
   goto NAMEOFF
   get NAME string
   savepos NAMEOFF
   goto OFF
   log NAME OFFSET SIZE
next i

pak.bms

  • Author
  • Localization

AlphaTwentyThree, posted Tue Jun 21, 2022 2:20 pm (72215)


Buzz! Concurso Universal (PSP) - *.flz

Code:
# Buzz! Concurso Universal (PSP) - *.flz

# (c) 2022-06-21 by AlphaTwentyThree of Zenhax
# script for QuickBMS http://quickbms.aluigi.org

get BNAME basename
get FSIZE asize
set OFFSET 0
for i = 1
   goto OFFSET
   getDstring TYPE 3
   if TYPE == "TEX"
      set EXT "tex"
   elif TYPE == "VAG"
      set EXT "vag"
   elif TYPE == "ANK"
      set EXT "ank"
   else
      set EXT "dat"
   endif
   FindLoc SIZE binary \x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55 0 ""
   math SIZE -= OFFSET
   string NAME P "%BNAME%/%i%.%EXT%"
   log NAME OFFSET SIZE
   math OFFSET = SIZE
   goto OFFSET
   padding 0x10
   savepos OFFSET
   callfunction NXT 1
next i

startfunction NXT
   do
      math OFFSET = 0x10
      if OFFSET >= FSIZE
         cleanexit
      endif
      goto OFFSET
      get TEST long
   while TEST == 0x55555555
endfunction

flz.bms

  • Author
  • Localization

sanderson169, posted Tue Aug 30, 2022 6:53 pm (73261)


[quote="AlphaTwentyThree"]Wwise sound engine

file types: archives with AKPK identifier and *.bnk / *.txt and soundbanks.xml
script type: extractor / parser

Second script is for extraction, first script for name parsing.
To parse, keep all extracted files in the same folder as the *.txt and soundbanks.xml. Priority in parsing is always the soundbanks.xml. You can parse again with the txt files afterwards. After parsing, ALWAYS check with Anti-Twin (or similar) if there are files without name (which still have their IDX).

PARTLY REDUNDANT DUE TO Wwiser!!! (https://github.com/bnnm/wwiser)

Code:
# file types: Wwise sound engine AKPK and BNK archives
# script type: extractor
# note 1: all files extracted as *.wem
# note 2: after extraction, parse with script
# for the soundbanks.xml or *.txt (if available)
#
# (c) by AlphaTwentyThree of Zenhax
# script for QuickBMS http://quickbms.aluigi.org

get BNAME basename
getDstring IDENT 4
if IDENT == "AKPK"
   callfunction AKPK 1
elif IDENT == "1KCP" # The Saboteur (PC)
   callfunction AKPK 1
elif IDENT == "BKHD"
   callfunction BKHD 1
else
   print "Error: no valid Wwise sound pack"
   cleanexit
endif

startfunction AKPK
   set PC 0
   endian big
   get SIZE_HEADER long # data start offset
   get TEST long
   get FSIZE asize
   if TEST != 1
      reverselong SIZE_HEADER
      endian little
      set PC 1
   endif
   get BNAME basename
   string BNAME = " "

   goto 0xc
   get IDENT long
   set FOLDER_NAMES 1
   if IDENT == 0xc6
      set NBIAS 0x18
   elif IDENT == 0x14
      set NBIAS 0x1c
      set PC 1
   else
      set NBIAS 0x1c # also in PC versions
   endif
   goto NBIAS
   get NUM_FOLDERS long
   if NUM_FOLDERS > 10
      math NBIAS -= 4
      goto NBIAS
      get NUM_FOLDERS long
   endif
   savepos MYOFF
   set INFO NUM_FOLDERS
   math INFO *= 8
   math INFO = MYOFF # = start of names, will hold offset to jump to for TOC
   set ALLNAMES 0 # for ceil after names

   for i = 0 < NUM_FOLDERS
      goto MYOFF
      get OFF_NAME_FOLDER long
      math OFF_NAME_FOLDER = NBIAS
      get ID_FOLDER long
      savepos MYOFF
      goto OFF_NAME_FOLDER
      if PC == 0
         get NAME_FOLDER string
      else
         callfunction getPCstring 1
      endif
         strlen LENGTH NAME_FOLDER
         math ALLNAMES = LENGTH
         math ALLNAMES = 1
      string NAME_FOLDER = "/"
      string NAME_FOLDER = BNAME
      putArray 0 ID_FOLDER NAME_FOLDER
   next i
   if PC == 1
      math ALLNAMES *= 2
      math INFO = ALLNAMES
   else
      savepos INFO
      math INFO x= 4
   endif
   goto INFO
   set RUNS 1
   callfunction extract 1
   cleanexit
endfunction

startfunction BKHD
   get TEST short
   set REV 0
   if TEST == 0
      set REV 1
      endian big
   endif
   goto 4
   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 p= "%s.wem" DIDX EXT
      log NAME OFFSET SIZE
   next i
endfunction

startfunction getPCstring
   set NAME_FOLDER ""
   for s = 0
      get CHAR byte
      get NULL byte
      putVarChr NAME_FOLDER s CHAR
      if CHAR == 0
         break
      endif
   next s
endfunction
   
startfunction extract
   savepos INFO
   get NUM_FILES long
   if NUM_FILES == 0
      if RUNS == 1
         get NUM_FILES long
      else
         cleanexit
      endif
   endif
   print "extracting %NUM_FILES% files (number at offset %INFO%)"
   for i = 1 <= NUM_FILES
      get NAME_CRC long
      get MULTI long # in certain cases only
      get SIZE long
      if SIZE == 0
         get SIZE long
      endif
      get OFFSET long
      get ID_FOLDER long
      if OFFSET == 0
         set OFFSET ID_FOLDER
         get ID_FOLDER long
      endif
      #string NAME_CRC p= "0xx" NAME_CRC      
      if MULTI != 0
         math OFFSET *= MULTI
      endif
      savepos MYOFF
      if PC == 0
         endian big
      endif
      string NAME_CRC = ".wem"
      log NAME_CRC OFFSET SIZE
   next i
   math RUNS = 1
   callfunction extract 1
endfunction


any update about the WWISE PARSE? :3

I have introduced .json or .txt files and it does not recognize them, only with xml.

i am ussing this for dead by daylight audios and get the names parser but it's too slow...
  • Author
  • Localization

Rocher, posted Tue Sep 27, 2022 10:07 am (73601)


I ve been trying to use this bms script to open arc file from the Dissidia 012 game. But i don t know what to look out for in order to edit the script to display the data contained in the file.
What kind of methodology did you use in order to know how to parse the arc files ?
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.