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 Jan 25, 2022 7:30 pm (69359)


Lemony Snicket's A Series of Unfortunate Events (GC)

Code:
# Lemony Snicket's A Series of Unfortunate Events (GC) - streams.res

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

idstring "res"
endian big
goto 8
get INFO long
get INFO_SIZE long
get DATA_START long
get UNK long
get HEADERS long
xmath TOC "INFO HEADERS"
goto TOC
get FILES long
savepos OFF
for i = 0 < FILES
   goto INFO
   get CODEC short
   get CH short
   get FREQ long
   get SIZE long
   get OFFSET long
   math OFFSET = DATA_START
   savepos C1
   xmath C2 "C1 0x2e"
   math INFO = 0x70
   putArray 0 i CODEC
   putArray 1 i CH
   putArray 2 i FREQ
   putArray 3 i SIZE
   putArray 4 i OFFSET
   putArray 5 i C1
   putArray 6 i C2
next i

for i = 0 < FILES
   goto OFF
   get NAMEOFF long
   get DUMMY longlong
   savepos OFF
   xmath NAMEOFF "OFF - 0xc NAMEOFF"
   goto NAMEOFF
   get NAME string
   getArray CH 1 i
   getArray FREQ 2 i
   getArray SIZE 3 i
   getArray OFFSET 4 i
   getArray C1 5 i
   getArray C2 6 i
   callfunction DSP 1
next i

startfunction DSP
   xmath SAMPLES "SIZE - (SIZE/8)"
   xmath PSIZE "SIZE 0xc0"
   putVarChr MEMORY_FILE SIZE 0
   log MEMORY_FILE 0 0
   putVarChr MEMORY_FILE 0 SAMPLES long
   putVarChr MEMORY_FILE 4 SIZE long
   putVarChr MEMORY_FILE 8 FREQ long
   putVarChr MEMORY_FILE 0x10 CH long
   putVarChr MEMORY_FILE 0x14 SIZE long
   putVarChr MEMORY_FILE 0x18 0 long
   append
   log MEMORY_FILE C1 0x24
   append
   putVarChr MEMORY_FILE 0x50 0xc5233200 long
   putVarChr MEMORY_FILE 0x54 0x90913200 long
   putVarChr MEMORY_FILE 0x58 0x90913200 long
   putVarChr MEMORY_FILE 0x5c 0x90913200 long
   putVarChr MEMORY_FILE 0x60 SAMPLES long
   putVarChr MEMORY_FILE 0x64 SIZE long
   putVarChr MEMORY_FILE 0x68 FREQ long
   putVarChr MEMORY_FILE 0x70 CH long
   putVarChr MEMORY_FILE 0x74 SIZE long
   putVarChr MEMORY_FILE 0x78 2 long
   append
   log MEMORY_FILE C2 0x24
   append
   putVarChr MEMORY_FILE 0xa8 0x3200 long
   putVarChr MEMORY_FILE 0xbf 0 byte
   append
   log MEMORY_FILE OFFSET SIZE
   append
   string NAME = ".dsp"
   log NAME 0 PSIZE MEMORY_FILE
endfunction


Lemony Snicket's A Series of Unfortunate Events (PS2)

Code:
# Lemony Snicket's A Series of Unfortunate Events (PS2) - streams.res

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

idstring "res"
goto 8
get INFO long
get UNK long
get DATA_START long
get UNK long
get FILES long
math FILES /= 0x70
goto INFO
for i = 0 < FILES
   get CODEC short
   get CH short
   get FREQ long
   get SIZE long
   get OFFSET long
   math OFFSET = DATA_START
   getDstring DUMMY 0x60
   putArray 0 i CODEC
   putArray 1 i CH
   putArray 2 i FREQ
   putArray 3 i SIZE
   putArray 4 i OFFSET
next i
get FILES long
get UNK long
savepos OFF
for i = 0 < FILES
   goto OFF
   get NAMEOFF long
   get DUMMY longlong
   savepos OFF
   xmath NAMEOFF "OFF - 0xc NAMEOFF"
   goto NAMEOFF
   get NAME string
   getArray CH 1 i
   getArray FREQ 2 i
   getArray SIZE 3 i
   getArray OFFSET 4 i
   set INTERLEAVE 0x10
   callfunction SS2 1
next i

startfunction SS2
   xmath PSIZE "SIZE 0x28"
   putVarChr MEMORY_FILE PSIZE 0
   log MEMORY_FILE 0 0
   set MEMORY_FILE binary "\x53\x53\x68\x64\x18\x00\x00\x00\x10\x00\x00\x00\xb0\x36\x00\x00\x02\x00\x00\x00\xc0\x2f\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x53\x53\x62\x64\x00\xe8\x11\x00"
   append
   log MEMORY_FILE OFFSET SIZE
   append
   putVarChr MEMORY_FILE 0x24 SIZE long
   putVarChr MEMORY_FILE 0xc FREQ long
   putVarChr MEMORY_FILE 0x14 INTERLEAVE long
   putVarChr MEMORY_FILE 0x10 CH byte
   get SIZE asize MEMORY_FILE
   string NAME = ".ss2"
   log NAME 0 SIZE MEMORY_FILE
endfunction


Lemony Snicket's A Series of Unfortunate Events (Xbox)

Code:
# Lemony Snicket's A Series of Unfortunate Events (Xbox) - streams.res

# (c) 2022-01-17 by AlphaTwentyThree of Zenhax
# script for QuickBMS http://quickbms.aluigi.org
idstring "res"
goto 8
get INFO long
get UNK long
get DATA_START long
get UNK long
get FILES long
math FILES /= 0x70
goto INFO
for i = 0 < FILES
   get CODEC short
   get CH short
   get FREQ long
   get SIZE long
   get OFFSET long
   math OFFSET = DATA_START
   getDstring DUMMY 0x60
   putArray 0 i CODEC
   putArray 1 i CH
   putArray 2 i FREQ
   putArray 3 i SIZE
   putArray 4 i OFFSET
next i
get FILES long
get UNK long
savepos OFF
for i = 0 < FILES
   goto OFF
   get NAMEOFF long
   get DUMMY longlong
   savepos OFF
   xmath NAMEOFF "OFF - 0xc NAMEOFF"
   goto NAMEOFF
   get NAME string
   getArray CODEC 0 i
   getArray CH 1 i
   getArray FREQ 2 i
   getArray SIZE 3 i
   getArray OFFSET 4 i
   set BLOCKALIGN 4
   set BITS 16
   callfunction PCM 1
next i

startfunction PCM
   xmath PSIZE "SIZE 0x2c"
   putVarChr MEMORY_FILE PSIZE 0
   log MEMORY_FILE 0 0
   set MEMORY_FILE binary "\x52\x49\x46\x46\x20\xC0\xB1\x00\x57\x41\x56\x45\x66\x6D\x74\x20\x10\x00\x00\x00\x01\x00\x02\x00\x44\xAC\x00\x00\x10\xB1\x02\x00\x04\x00\x10\x00\x64\x61\x74\x61\xFC\xBF\xB1\x00"
   append
   log MEMORY_FILE OFFSET SIZE
   append
   set RIFFSIZE SIZE
   math RIFFSIZE = 36
   set AVGBYTES FREQ
   if CODEC != 2
      math AVGBYTES *= BLOCKALIGN
   endif
   
   putvarchr MEMORY_FILE 0x04 RIFFSIZE long
   putvarchr MEMORY_FILE 0x14 CODEC short          # wFormatTag: Microsoft PCM Format (0x0001)
   putvarchr MEMORY_FILE 0x16 CH short   # wChannels
   putvarchr MEMORY_FILE 0x18 FREQ short   # dwSamplesPerSec
   putvarchr MEMORY_FILE 0x1c AVGBYTES long    # dwAvgBytesPerSec
   putvarchr MEMORY_FILE 0x20 BLOCKALIGN short # wBlockAlign
   putvarchr MEMORY_FILE 0x22 BITS short       # wBitsPerSample
   putvarchr MEMORY_FILE 0x28 SIZE long
   string NAME = ".wav"
   log NAME 0 PSIZE MEMORY_FILE
endfunction

lsasoue_Xbox.bms

lsasoue_PS2.bms

lsasoue_GC.bms

  • Replies 54
  • Views 99
  • Created
  • Last Reply

Top Posters In This Topic

  • Author
  • Localization

AlphaTwentyThree, posted Thu Jan 27, 2022 7:15 pm (69388)


The Elder Scrolls III: Morrowind (PC/Xbox)

Code:
# The Elder Scrolls III: Morrowind (PC/Xbox) - Morrowind.bsa
#
# (c) 2022-01-27 by AlphaTwentyThree of ZenHAX
# script for QuickBMS http://quickbms.aluigi.org

get DUMMY long # 0x100
get TOC_SIZE long
xmath BIAS "TOC_SIZE 0xc"
get FILES long
get BNAME basename
xmath TEST "TOC_SIZE - (8*FILES)"
if TEST == 0
   callfunction simple 1
   cleanexit
endif

for i = 0 < FILES
    get SIZE long
    get OFFSET long
   putArray 0 i OFFSET
   putArray 1 i SIZE
next i
for i = 0 < FILES
   get NAMEOFF long
   putarray 2 i NAMEOFF
next i
savepos NAME_BIAS
for i = 0 < FILES
   getArray OFFSET 0 i
   math OFFSET = BIAS
   getArray SIZE 1 i
   getArray NAMEOFF 2 i
   math NAMEOFF = NAME_BIAS
   goto NAMEOFF
   get NAME string
   log NAME OFFSET SIZE
next i

startfunction simple
   for i = 1 <= FILES
      get SIZE long
      get OFFSET long
      math OFFSET = BIAS
      string NAME p "%s_%d" BNAME i
      log NAME OFFSET SIZE
   next i
endfunction

tes3_bsa.bms

  • Author
  • Localization

AlphaTwentyThree, posted Sun Jun 12, 2022 8:53 am (71979)


Disney Infinity 2.0 (PSP)

Code:
# game: Disney Infinity 2.0
# file: MasterFile.dat/ManifestFile.dat
# script type: extractor
#
# (c) 2022-06-11 by AlphaTwentyThree of ZenHax
# (with contribution: DKDave of ZenHax)
# script for QuickBMS http://quickbms.aluigi.org

open FDSE ManifestFile.dat 0
open FDSE MasterFile.dat 1
get TOC_SIZE asize 0
goto 1 0

For i = 0
   getCT HASH string 0x2c
   getCT OFFSET string 0x2c
   getCT SIZE string 0x2c
   math HASH = HASH
   math OFFSET = OFFSET
   math SIZE = SIZE
   savepos TEMP
   
   goto OFFSET 1
   getDstring TEST 4 1
   if TEST == "FSB5"
      set EXT "fsb"
   elif TEST == "KB2i"
      set EXT "bik"
   elif TEST == "RIFF"
      set EXT "fev"
   elif TEST == "NAME"
      set EXT "nam"
   elif TEST == "SMAP"
      set EXT "map"
   else
      goto OFFSET 1
      getDstring TEST 3 1
      if TEST == "DLG"
         set EXT "dlg"
      else
         goto OFFSET 1
         getDstring TEST 2 1
         if TEST == "PK"
            set EXT "zip"
         endif
      endif
   endif
   string FNAME P "%EXT%\%HASH%.%EXT%"
   log FNAME OFFSET SIZE 1
   goto TEMP 0
   if TEMP == TOC_SIZE
      cleanexit
   endif
next i

disney_infinity_2.0.bms

  • Author
  • Localization

AlphaTwentyThree, posted Mon Jun 13, 2022 5:04 am (72012)


Astonishia 2/Crimson Gem Saga (PSP)

Code:
# Astonishia 2/Crimson Gem Saga (PSP) - asto2.dat

# (c) 2022-06-12 by AlphaTwentyThree of zenhax
# (contribution by spiritovod of zenhax)
# script for QuickBMS http://quickbms.aluigi.org

comtype unzip_dynamic
get FILES long

for i = 0 < FILES
   savepos MYOFF
   get NAME unicode
   math MYOFF = 0x100
   goto MYOFF
   get OFFSET long
   get SIZE long
   savepos MYOFF
   goto OFFSET
   getDstring TEST 4
   if TEST == "zlib"
      callfunction extract 1
   else
      log NAME OFFSET SIZE
   endif
   goto MYOFF
next i

startfunction extract
   log MEMORY_FILE 0 0
   xmath ENDOFF "OFFSET SIZE"
   savepos OFFSET
   append
   for OFFSET = OFFSET < ENDOFF
      get SIZE long
      savepos OFFSET
      clog MEMORY_FILE OFFSET SIZE SIZE
      math OFFSET SIZE
      goto OFFSET
   next
   append
   get SIZE asize MEMORY_FILE
   log NAME 0 SIZE MEMORY_FILE
endfunction

atonishia_story_2.bms

  • Author
  • Localization

AlphaTwentyThree, posted Mon Jun 13, 2022 5:13 am (72014)


Burnout Dominator (PSP)

Code:
# Burnout Dominator - fxp extractor

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

idstring FX1?

goto 0xc
get FILES long
get FSIZE long
get DUMMY long
get TOCSIZE long
get UNK long
savepos OFF
math OFF = 0x80
xmath NAMESOFF "0xa0 TOCSIZE"
goto OFF
for i = 0 < FILES
   get NAMEPOS long
   math NAMEPOS = NAMESOFF
   get SIZE long
   get OFFSET long
   math OFFSET *= 0x800
   getDstring DUMMY 0x18
   savepos OFF
   goto NAMEPOS
   get NAME string
   goto OFF
   log NAME OFFSET SIZE
next i

burnout_dominator_fxp.bms

  • Author
  • Localization

AlphaTwentyThree, posted Tue Jun 14, 2022 8:52 am (72041)


DJMax Dechnika Tune (PS Vita)

Code:
# DJMax Dechnika Tune (PS Vita) - *.pak

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

goto 0xc
get ENTRIES long # includes folder commands
goto 0x24
get TOC long
goto TOC
set D -1 # folder deepness
for i = 1 <= ENTRIES
   get NAMEL short
   getDstring TNAME NAMEL # temporary name
   math NAMEL -= 1
   getVarChr TEST TNAME NAMEL
   if TEST == 0x2f # /
      getVarChr TEST TNAME 0
      if TEST != 0x2e
         math D = 1 # deepness 1
         putArray D 0 TNAME # enter current folder
         getArray TEMP D 0
      else # ../
         putArray D 0 "" # delete last array entry
         math D -= 1 # deepness-1
      endif
   else
      set NAME ""
      for f = 0 <= D
         getArray FOLDER f 0
         string NAME = FOLDER
      next f
      string NAME = TNAME
      get OFFSET long
      get ZERO long
      savepos MYOFF
         goto OFFSET
         get TEMP long
         get ZERO long
         get SIZE long
         math OFFSET = 0x28
         log NAME OFFSET SIZE
      goto MYOFF
   endif
next i

djmax_technika_tune_pak.bms

  • Author
  • Localization

AlphaTwentyThree, posted Tue Jun 14, 2022 10:45 am (72045)


Astonishia Story 2/Crimson Gem Saga (PSP)

Code:
# Astonishia 2/Crimson Gem Saga (PSP) - *.evp/*.bvp

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

get FSIZE asize

get EXT extension
if EXT == "evp"
   callfunction proc_evp
elif EXT == "bvp"
   callfunction proc_bvp
endif

startfunction proc_evp
   set OFFSET 0x20
   do
      goto OFFSET
      get SIZE long
      savepos OFFSET
      callfunction write 1
      math OFFSET = SIZE
   while OFFSET != FSIZE
endfunction

startfunction proc_bvp
   set OFFSET 0
   xmath GO "FSIZE - 0x30"
   goto GO
   for i = 1
      get SIZE long
      if SIZE == 0
         break
      endif
      savepos MYOFF
      callfunction write 1
      math OFFSET = SIZE
      goto MYOFF
   next i
endfunction

startfunction write
   goto OFFSET
   getDstring TEMP 0x20
   getDstring NAME 0x20
   string NAME = ".vag"
   log NAME OFFSET SIZE
endfunction

astonishia2_evp_bvp.bms

  • Author
  • Localization

AlphaTwentyThree, posted Tue Jun 14, 2022 12:28 pm (72049)


Tt Fusion Ltd. games
(https://www.mobygames.com/company/tt-fusion-ltd)

Code:
# Tt Fusion Ltd. games - fmv audio extractor
# resulting files can be played with vgmstream (txth is always needed)
# https://www.mobygames.com/company/tt-fusion-ltd

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

log MEMORY_FILE 0 0
get FSIZE asize
idstring FMV!
set PRE 1
callfunction demux 1

set MEMORY_FILE binary "\x63\x6F\x64\x65\x63\x20\x3D\x20\x44\x56\x49\x5F\x49\x4D\x41\x0D\x0A\x73\x61\x6D\x70\x6C\x65\x5F\x72\x61\x74\x65\x20\x3D\x20\x40\x30\x24\x34\x0D\x0A\x63\x68\x61\x6E\x6E\x65\x6C\x73\x20\x3D\x20\x40\x36\x24\x31\x0D\x0A\x73\x74\x61\x72\x74\x5F\x6F\x66\x66\x73\x65\x74\x20\x3D\x20\x30\x78\x38\x0D\x0A\x6E\x75\x6D\x5F\x73\x61\x6D\x70\x6C\x65\x73\x20\x3D\x20\x64\x61\x74\x61\x5F\x73\x69\x7A\x65\x20\x2D\x20\x73\x74\x61\x72\x74\x5F\x6F\x66\x66\x73\x65\x74"
string NAME = ".txth"
log NAME 0 0x70 MEMORY_FILE

startfunction demux
   set SIZE 8 # plus header
   if PRE == 0
      goto 0x20
      getDstring DATA 8
      putDstring DATA 8 MEMORY_FILE
   endif
   goto 0x28
   for i = 1
      getDstring IDENT 4
      get BLOCKSIZE long
      savepos MYOFF
      math MYOFF = BLOCKSIZE
      if IDENT == "FMA" && PRE == 0
         getDstring DATA BLOCKSIZE
         putDstring DATA BLOCKSIZE MEMORY_FILE
      elif IDENT == "FMA" && PRE == 1
         math SIZE = BLOCKSIZE
      endif
      goto MYOFF
      if MYOFF == FSIZE
         break
      endif
   next i
   if PRE == 1
      putVarChr MEMORY_FILE SIZE 0
      log MEMORY_FILE 0 0
      set PRE 0
      callfunction demux 1
   else
      get SIZE asize MEMORY_FILE
      get NAME basename
      string NAME = ".ima"
      log NAME 0 SIZE MEMORY_FILE
   endif
endfunction

Tt_fusion_fmv_audio.bms

  • Author
  • Localization

AlphaTwentyThree, posted Tue Jun 14, 2022 3:21 pm (72055)


Gust Co.
(https://www.mobygames.com/company/gust-co-ltd)

Code:
# Ayesha no Atelier: Tasogare no Daichi no Renkinjutsushi (PSP)
# - gvd.dat
# - *.gvd

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

endian big
getdstring IDENT 4
if IDENT == "TGDT"
   callfunction TGDT 0
elif IDENT == "GVEW"
   callfunction GVEW 0
else
   print "Unsupported archive format!"
endif

startfunction TGDT
   getDstring VER 4
   get FILES long
   get BIAS long
   for i = 0 < FILES
      get NAMEPOS long
      math NAMEPOS = BIAS
      get UNK long
      get OFFSET long
      math OFFSET = BIAS
      get SIZE long
      savepos MYOFF
      goto NAMEPOS
      getDstring NAME 0x400
      goto MYOFF
      log NAME OFFSET SIZE
   next i
endfunction

startfunction GVEW
   get FSIZE asize
   get BNAME basename
   goto 0x1c
   get TOC_SIZE long
   xmath FILES "(TOC_SIZE - 8) / 0x20"
   xmath OFFSET "TOC_SIZE 0x38"
   goto 0x30
   for i = 0 < FILES
      get ID1 long
      get ID2 long
      get ID3 long
      get SIZE long
      get ID5 long
      get ZERO long
      get x_dim long
      get y_dim long
      string NAME p "%s/%s_%s_%s_%s.jpg" BNAME ID1 ID2 ID3 ID5
      savepos MYOFF
      goto OFFSET
      do
         savepos OFFSET
         get TEST byte
      while TEST == 0xff
      math OFFSET -= 1
      goto MYOFF
      log NAME OFFSET SIZE
      math OFFSET = SIZE
   next i
endfunction

anatndnr_gvd.bms

  • Author
  • Localization

AlphaTwentyThree, posted Tue Jun 14, 2022 4:40 pm (72057)


Mahou Shoujo Lyrical Nanoha A's Portable DLCs (PSP)

Code:
# Mahou Shoujo Lyrical Nanoha A's Portable (PSP)
#
# (c) 2022-06-14 by AlphaTwentyThree of Zenhax
# script for QuickBMS http://quickbms.aluigi.org

idstring GPDA
get FSIZE long
get ZERO long
get FILES long
get BNAME basename
for i = 0 < FILES
   get OFFSET long
   get DUMMY long
   get SIZE long
   get NAMEPOS long
   savepos MYOFF
   goto NAMEPOS
   get NAMEL long
   getDstring FNAME NAMEL
   goto MYOFF
   string NAME p "%s/%s" BNAME FNAME
   log NAME OFFSET SIZE
next i

gpd.bms

  • Author
  • Localization

AlphaTwentyThree, posted Wed Jun 15, 2022 2:45 pm (72090)


WAVE scanner

file type: any
script type: scanne
notes:
- new version with more name retrieval support and type recognition
- wave headers MUST begin with RIFF/RIFFX
- stream sizes automatically corrected in header (otherwise certain files aren't playable with vgmstream)
- script still fully commented

wav_scanner.bms

  • Author
  • Localization

AlphaTwentyThree, posted Wed Jun 15, 2022 2:52 pm (72093)


???????~???????? (Imperial Navy Love Affection - Meiji Yokosuka March) (PS Vita)

note: resulting at9 files need to be run through the above scanner to play with vgmstream (headers have wrong sizes)!

Code:
# ???????~???????? - *.hpac/*.hph
# (c) 2022-06-15 by AlphaTwentyThree of Zenhax
# script for QuickBMS http://quickbms.aluigi.org

open FDDE hpb 1 EXIST
getDstring IDENT 4
if IDENT == "HLZS"
   comtype LZSS0
   get UNK long
   get CSIZE long
   get SIZE long
   clog TEMPORARY_FILE 0x20 CSIZE SIZE
   open FDSE TEMPORARY_FILE 0
endif
callfunction HPAC 1

startfunction HPAC
   goto 0
   getDstring IDENT 4
   if IDENT == "HGTC"
      callfunction HGTC 1
   elif IDENT == "HPAC"
   else
      print "Unsupported archive format, please contact me."
   endif
   get UNK long
   get FILES long
   get HSIZE long
   get NAMEOFF long
   goto 0x20
   for i = 1 <= FILES
      get HASH1 long
      get OFFSET long
      get SIZE long
      get UNK1 long
      get HASH2 long
      get UNK2 long
      getDstring ZERO 8
      savepos MYOFF
      goto NAMEOFF
      get NAME string
      savepos NAMEOFF
      goto MYOFF
      log NAME OFFSET SIZE EXIST
   next i
endfunction

startfunction HGTC
   get BNAME basename
   get UNK long
   get FILES long
   goto 0x20
   for i = 1 <= FILES
      get HASH long
      get UNK1 long
      get UNK2 long
      get DUMMY long
      get OFFSET1 long
      get OFFSET2 long
      getDstring ZERO 8
      xmath SIZE "OFFSET2 - OFFSET1"
      string NAME p "%s_%d_x_%d_%d_1" BNAME i HASH UNK1 UNK2
      log NAME OFFSET1 SIZE EXIST
      savepos MYOFF
      getDstring DUMMY 0x10
      if i != FILES
         get SIZE long
      else
         get SIZE asize
      endif
      math SIZE -= OFFSET2
      string NAME p "%s_%d_x_%d_%d_2" BNAME i HASH UNK1 UNK2
      log NAME OFFSET2 SIZE EXIST
      goto MYOFF
   next i
endfunction

hpac.bms

  • Author
  • Localization

AlphaTwentyThree, posted Wed Jun 15, 2022 5:13 pm (72102)


Adventures to Go! (PSP)

note: no file names available, func_getTYPE.bms is needed

Code:
# Adventures to Go! (PSP) - data.dat

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

get BNAME basename
for i = 1
   get OFFSET long
   if OFFSET == 0
      break
   endif
   math OFFSET *= 0x800
   get SIZE long
   putVarChr MEMORY_FILE SIZE 0
   log MEMORY_FILE 0 0
   log MEMORY_FILE OFFSET SIZE
   callfunction getTYPE 1
   string NAME p "%s_%d.%s" BNAME i EXT
   log NAME OFFSET SIZE
next i

adventures_to_go.bms

  • Author
  • Localization

AlphaTwentyThree, posted Wed Jun 15, 2022 5:49 pm (72103)


After Burner: Black Falcon (PSP)

Code:
# After Burner: Black Falcon (PSP) - *.bag

# note: remove line 20 to disable subfolders
# (c) 2021-12-21 by AlphaTwentyThree of Zenhax
# script for QuickBMS http://quickbms.aluigi.org

get FSIZE asize
get FNAME basename
getDstring VER 4
getDstring NAMESOFF 8
math NAMESOFF = NAMESOFF
goto NAMESOFF
do
   getCT NAME binary 0x2c
   getCT SIZE binary 0x2c
   getCT OFFSET binary 0x0a
   math SIZE = SIZE
   math OFFSET = OFFSET
   savepos TEST
   string NAME p "%s/%s" FNAME NAME
   log NAME OFFSET SIZE
while TEST != FSIZE

bag.bms

  • Author
  • Localization

AlphaTwentyThree, posted Wed Jun 15, 2022 10:06 pm (72112)


Army of Two: The 40th Day (PSP)

Code:
# Army of Two: The 40th Day (PSP) - bigfile.dat
#
# (c) 2022-06-15 by AlphaTwentyThree of Zenhax
# script for QuickBMS http://quickbms.aluigi.org
#
# notes:
# - some *.mul files aren't identified correctly by getTYPE -> rename
# - duplicate CRC references (same file name) are different languages

include func_getTYPE.bms
get BNAME basename

get FILES long
for i = 0 < FILES
   get CRC long
   putArray 0 i CRC
next i

for i = 0 < FILES
   get SIZE long
   get OFFSET long
   get DUMMY long
   get DUMMY long
   math OFFSET *= 0x800
   getArray CRC 0 i
   putVarChr MEMORY_FILE SIZE 0
   log MEMORY_FILE 0 0
   log MEMORY_FILE OFFSET SIZE
   callfunction getTYPE 1
   string NAME p "x.%s" CRC EXT
   log NAME OFFSET SIZE
next i

ao2_dat.7z

  • Author
  • Localization

AlphaTwentyThree, posted Fri Jun 17, 2022 8:32 am (72136)


Arthur and the Invisibles (PSP)

Code:
# Arthur and the Invisibles (aka. Arthur and the Minimoys) *.kpp
# extracts the audio streams from KPP files

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


set SEARCH 0

for i = 1
   goto SEARCH
   FindLoc S_OFF string \x64\x3A\x5C 0 "" # d:\
   if S_OFF == ""
      break
   endif
   xmath OFFSET "S_OFF - 0x40"
   putArray i 0 OFFSET
   xmath SEARCH "S_OFF 0x10" # jump random forward
next i

xmath FILES "i - 1"

for i = 1 <= FILES
   getArray OFFSET i 0
   if i != FILES
      xmath k "i 1"
      getArray SIZE k 0
   else
      get SIZE asize
   endif
   math SIZE -= OFFSET
   if SIZE > 0x80
      putVarChr MEMORY_FILE SIZE 0
      log MEMORY_FILE 0 0
      append
      log MEMORY_FILE OFFSET SIZE
      append
      callfunction getVAG 1
   endif
next i

startfunction getVAG
   goto 0 MEMORY_FILE
   get FREQ long MEMORY_FILE
   if FREQ != 22050
      break
   endif
   goto 0x40 MEMORY_FILE
   get NAME string MEMORY_FILE
   padding 0x10 MEMORY_FILE
   savepos MYOFF MEMORY_FILE
   getDstring HASH 0x20 MEMORY_FILE
   get UNK long MEMORY_FILE
   get SIZE long MEMORY_FILE
   get UNK long MEMORY_FILE
   savepos OFFSET MEMORY_FILE
   string NAME -= 4
   callfunction VAG 1
endfunction

startfunction VAG
   xmath PSIZE "SIZE 0x30"
   putVarChr MEMORY_FILE2 PSIZE 0
   log MEMORY_FILE2 0 0
   set MEMORY_FILE2 binary "\x56\x41\x47\x70\x00\x00\x00\x06\x00\x00\x00\x00\x00\x00\x04\x50\x00\x00\x22\x56\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
   append
   log MEMORY_FILE2 OFFSET SIZE MEMORY_FILE
   append
   reverselong SIZE
   reverselong FREQ
   putVarChr MEMORY_FILE2 0xc SIZE long
   putVarChr MEMORY_FILE2 0x10 FREQ long
   string NAME = ".vag"
   get SIZE asize MEMORY_FILE2
   log NAME 0 SIZE MEMORY_FILE2
endfunction

aati_kpp.bms

  • Author
  • Localization

AlphaTwentyThree, posted Fri Jun 17, 2022 9:39 am (72139)


Asterix & Obelix XXL 2 (PSP)

Code:
# Asterix & Obelix XXL 2 (PSP) - *.pak
#
# (c) 2022-06-17 by AlphaTwentyThree of Zenhax
# script for QuickBMS http://quickbms.aluigi.org

idstring TATE
get FSIZE asize
set OFF 0x80
for i = 0
   goto OFF
   getDstring TYPE 4
   get SIZE long
   get DUMMY longlong
   getDstring NAME 0x70
   savepos OFFSET
   log NAME OFFSET SIZE
   math OFFSET = SIZE
   goto OFFSET
   do
      get TEST byte
      savepos OFF
      if OFF == FSIZE
         cleanexit
      endif
   while TEST == 0
   math OFF -= 1
next i

aoxxl2_psp_tate.bms

  • Author
  • Localization

AlphaTwentyThree, posted Sun Jun 19, 2022 11:18 am (72160)


Blood Bowl (PSP)

Code:
# Blood Bowl (PSP) - *.cat

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

get FILES long
for i = 0 < FILES
   get NAMEL long
   getDstring NAME NAMEL
   padding 4
   get SIZE long
   savepos OFFSET
   #print "%OFFSET% %SIZE%"
   log NAME OFFSET SIZE
   math OFFSET = SIZE
   goto OFFSET
next i

blood_bowl_cat.bms

  • Author
  • Localization

AlphaTwentyThree, posted Sun Jun 19, 2022 1:53 pm (72165)


Battle Dodge Ball 3 (PSP)

note: resulting files are Visual C project files

Code:
# Battle Dodge Ball 3 (PSP) - def_arc.irarc/.irlst

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

open FDDE irlst 0
open FDDE irarc 1

get BNAME basename
get FILES long
for i = 1 <= FILES
   get ID long
   get OFFSET long
   get SIZE long
   get TYPE long
   if TYPE == 7
      set EXT "iobj"
   elif TYPE == 0
      set EXT "ipdb"
   endif
   math OFFSET = 0x14
   math SIZE -= 0x14
   string NAME p "%s_%d.%s" BNAME ID EXT
   log NAME OFFSET SIZE 1
next i

bdb_def_arc.bms

  • Author
  • Localization

AlphaTwentyThree, posted Sun Jun 19, 2022 2:50 pm (72166)


The Bigs/The Bigs 2 (PSP) - *.big

Code:
# The Bigs/The Bigs 2 (PSP) - *.big
# note: uncomment line 27 to enable archive subfolders
#
# (c) 2022-06-19 by AlphaTwentyThree of Zenhax
# script for QuickBMS http://quickbms.aluigi.org

idstring \x04\x03\x02\x01

get UNK long
get FSIZE long
get FILES long
get UNK long
get NAMEPOS long
get BNAME basename

for i = 0 < FILES
   get UNK1 long
   get SIZE long
   get OFFSET long
   get UNK2 long
   get UNK3 long
   savepos MYOFF
   goto NAMEPOS
   get NAME string
   savepos NAMEPOS
   goto MYOFF
#   string NAME p "%s/%s" BNAME NAME
   log NAME OFFSET SIZE
next i

the_bigs_big.bms

  • Author
  • Localization

AlphaTwentyThree, posted Mon Jun 20, 2022 8:18 am (72178)


Astro Boy: The Video Game (PSP) - FILE1/FILE2/FILE3

note: probably also works with other games using this engine

Code:
# Astro Boy: The Video Game (PSP)
# extracts the block files created by DKDave's BIGB script
# (https://zenhax.com/viewtopic.php?f=6&t=17035#p72153)
# note: only works for the music

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

get BNAME basename
string BNAME -= 1
string F1 P "%BNAME%1"
string F2 P "%BNAME%2"
string F3 P "%BNAME%3"
OPEN FDSE F2 0
OPEN FDSE F1 1
OPEN FDSE F3 3 EXIST
if EXIST == 0 # no sound files
   cleanexit
endif

get FSIZE asize
set i 1
for t = 1
   get TYPE short
   get IDENT short
   savepos TEST
   if TEST == FSIZE
      break
   endif
   get OFFSET long
   if IDENT == 0x8000 # streams only
      putArray i 0 OFFSET
      putArray i 1 TYPE
      math i = 1
   endif
next t
xmath FILES "i - 1"
set w 1
for i = 1 <= FILES
   getArray OFFSET i 0
   getArray TYPE i 1
   if i != FILES
      xmath n "i 1"
      getArray SIZE n 0
   else
      xmath SIZE "OFFSET 0x20" # last control file
   endif
   math SIZE -= OFFSET
   if TYPE == 275 # RIFF file
      goto OFFSET 1
      getDstring TEMP 4 1 # RIFF
      get SIZE long 1
      math SIZE = 8
      getDstring TEST 4 1
      if TEST == "WAVS"
         xmath NAMEPOS "OFFSET 0x2c"
         goto NAMEPOS 1
         getCT NAME binary 0x2e 1
         putArray w 0 NAME
         string NAME P "%NAME%.wavs"
         log NAME OFFSET SIZE 1
         math w = 1
      endif
   endif
next i
xmath FILES "w - 1"
set SEARCH 0
for i = 1 <= FILES # _should_ be correct
   goto SEARCH 3
   FindLoc OFFSET string \x57\x41\x56\x45\x66\x6D\x74\x20 3 "" # WAVEfmt
   math OFFSET -= 8
   goto OFFSET 3
   get DUMMY long 3 # RIFF
   get SIZE long 3
   math SIZE = 8
   getDstring DUMMY 0xc 3
   get CODEC short 3
   if CODEC == 0xfffe || CODEC == 0x720
      set EXT ".at3"
   elif CODEC == 1
      set EXT ".wav"
   else
      set EXT ".lwav"
   endif
   getArray NAME i 0
   string NAME = EXT
   log NAME OFFSET SIZE 3
   xmath SEARCH "OFFSET SIZE"
next i

bigb_struct.bms

  • Author
  • Localization

AlphaTwentyThree, posted Mon Jun 20, 2022 8:43 am (72179)


Brian Lara 2007 Pressure Play (PSP) - *.tar

Code:
# Brian Lara 2007 Pressure Play (PSP) - *.tar
#
# (c) 2022-06-20 by AlphaTwentyThree of Zenhax
# script for QuickBMS http://quickbms.aluigi.org

get FILES long
for i = 0 < FILES
   get NAMEL long
   getDstring NAME NAMEL
   get SIZE long
   get OFFSET long
   putArray i 0 NAME
   putArray i 1 OFFSET
   putArray i 2 SIZE
next i
savepos BIAS
for i = 0 < FILES
   getArray NAME i 0
   getArray OFFSET i 1
   getArray SIZE i 2
   math OFFSET = BIAS
   log NAME OFFSET SIZE
next i

blpp_tar.bms

  • Author
  • Localization

AlphaTwentyThree, posted Mon Jun 20, 2022 9:59 am (72181)


Brunswick Pro Bowling (PSP) - *.wad

Code:
# Brunswick Pro Bowling (PSP) - *.wad

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

get FSIZE asize
get FOLDER string
goto 0x1a
get FILES short
if FILES == 0
   callfunction VAR 0
endif
for i = 1 <= FILES
   get UNK long
   getDstring BNAME 0x10
   getDstring EXT 4
   get OFFSET long
   get SIZE long
   get ID long
   string NAME P "%FOLDER%/%BNAME%.%EXT%"
   putArray i 0 OFFSET
   putArray i 1 NAME
next i
sortArray 0 0
for i = 1 <= FILES
   getArray OFFSET i 0
   getArray NAME i 1
   if i != FILES
      xmath n "i 1"
      getArray SIZE n 0
   else
      get SIZE asize
   endif
   math SIZE -= OFFSET
   log NAME OFFSET SIZE
next i

startfunction VAR
   goto 0x24
   get FILES long
   get UNK long
   savepos NAMEPOS
   xmath NAMEPOS "NAMEPOS FILES * 0x10"
   for i = 1 <= FILES
      get OFFSET long
      math OFFSET = 0x20
      get ZERO long
      get SIZE long
      get UNK long
      savepos OFF
      goto NAMEPOS
      get NAME string
      savepos NAMEPOS
      goto OFFSET
      getDstring TYPE 4
      if TYPE == "VAGp"
         set EXT "vag"
      endif
      goto OFF
      string NAME P "%FOLDER%/%NAME%.%EXT%"
      log NAME OFFSET SIZE
      goto OFF
   next i
endfunction

wad.bms

  • Author
  • Localization

AlphaTwentyThree, posted Mon Jun 20, 2022 11:27 am (72184)


The Bigs/The Bigs 2 (PSP) - *.bcv

Code:
# The Bigs/The Bigs 2 (PSP) - *.bcv

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

idstring BCVA
get BNAME basename
get FILES long
if FILES != 2
   cleanexit
endif
get TEMP long
get INTERLEAVE long
math INTERLEAVE -= 0x30
xmath PSIZE "2*INTERLEAVE"
putVarChr MEMORY_FILE PSIZE 0
log MEMORY_FILE 0 0
set MEMORY_FILE binary "\x53\x53\x68\x64\x18\x00\x00\x00\x10\x00\x00\x00\xb0\x36\x00\x00\x02\x00\x00\x00\xc0\x2f\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x53\x53\x62\x64\x00\xe8\x11\x00"
goto 0xc
append
for i = 1 <= 2
   get SIZE long
   get OFFSET long
   math OFFSET = 0x30
   math SIZE -= 0x30
   log MEMORY_FILE OFFSET SIZE
next i
append
xmath OFF "OFFSET - 0x20"
goto OFF
get FREQ long
reverselong FREQ
set CH 2
putVarChr MEMORY_FILE 0x24 PSIZE long
putVarChr MEMORY_FILE 0xc FREQ long
putVarChr MEMORY_FILE 0x14 INTERLEAVE long
putVarChr MEMORY_FILE 0x10 2 byte
get SIZE asize MEMORY_FILE
string NAME P "%BNAME%.ss2"
log NAME 0 SIZE MEMORY_FILE

bcva.bms

  • Author
  • Localization

AlphaTwentyThree, posted Tue Jun 21, 2022 6:35 am (72204)


Blitz: Overtime (PSP) - *.ms2/*.ms4

Code:
# Blitz: Overtime (PSP) - *.ms2/*.ms4

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

include func_getTYPE.bms

get BNAME basename
for i = 1
   get ID short
   get UNK2 short # 0x2000 or 0
   get OFFSET long
   get SIZE long
   savepos MYOFF
      putVarChr MEMORY_FILE SIZE 0
      log MEMORY_FILE 0 0
      append
      log MEMORY_FILE OFFSET SIZE
      append
      callfunction getTYPE 1
   goto MYOFF
   string NAME P "%BNAME%_%ID%.%EXT%"
   if OFFSET != 0
      log NAME OFFSET SIZE
   else
      cleanexit
   endif
next i

ms2_4.bms

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.