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