Growlanser 1 (PSX/PSP): Need assistance with file extraction quickBMS script

Doubts, help and support about QuickBMS and other game research tools
Risae
Posts: 21
Joined: Wed Nov 18, 2015 1:35 pm

Growlanser 1 (PSX/PSP): Need assistance with file extraction quickBMS script

Post by Risae »

Dear Forum,

currently i'm trying to extract the files from the PSP version of Growlanser 1:

DATA.DAT
GLB.DAT
MAGD.BIN
MAP.DAT
MSYS.DAT
NEFF.BIN
SCEN.DAT
UPD.UPD
VOICE.DAT

But compared to Growlanser 5/6, these files seems very differently build up.
Heres what the start of DATA.DAT, GLB.DAT, MAP.DAT, SCEN.DAT and VOICE.DAT looks like in a HEX Editor:

DATA.DAT https://i.imgur.com/4FLrkis.png
GLB.DAT https://i.imgur.com/DsEkSMC.png
MAP.DAT https://i.imgur.com/z1pRIue.png
SCEN.DAT https://i.imgur.com/6dKPOjd.png
VOICE.DAT https://i.imgur.com/2qArGUL.png

I can't really seem to figure out how the file table is build up, but i noticed that inside SCEN.DAT (this is the one that stores the script) the files seem to be placed in either 0x000 or 0x800:

https://imgur.com/a/osKtVdh

So, i thought maybe i could just let quickBMS dump the files that have lots of 00s before a 0x000 or 0x800, but i am not sure if this is actually possible.
Does anyone know if its possible to make a quickBMS script that could dump the files?
Here are the .DAT files mentioned:

https://anonfiles.com/vducNcbbp8/SCEN_rar
https://anonfiles.com/31u4Neb5p2/MAP_rar
https://anonfiles.com/59vaN2b3p3/DATA_rar
https://anonfiles.com/X7v3N2b0p2/GLB_rar
https://anonfiles.com/T822N7bdpb/VOICE_rar
Last edited by Risae on Sat Oct 03, 2020 4:46 pm, edited 2 times in total.
Risae
Posts: 21
Joined: Wed Nov 18, 2015 1:35 pm

Re: Growlanser 1: Need assistance with file extraction quickBMS script

Post by Risae »

A buddy of mine also looks into the files right now, and might have figured something out from the SCEN.DAT:

Basically,
Red is amount of files (unverified),
green is position (multiply by LBA size, 0x800, to get the real position)
and blue is size (multiply by LBA size, 0x800, to get the real size)

Image

For SCEN.DAT at least

Risae
Posts: 21
Joined: Wed Nov 18, 2015 1:35 pm

Re: Growlanser 1: Need assistance with file extraction quickBMS script

Post by Risae »

My buddy made 2 quickBMS script for the SCEN.DAT:

Code: Select all

# Growlanser VI: Precarious World
# script for QuickBMS http://quickbms.aluigi.org

get FILES long
for i = 0 < FILES
    get OFFSET short
    get SIZE short
    math OFFSET *= 0x800
    math SIZE *= 0x800
    log "" OFFSET SIZE
next i


The script above is able to dump all of the 1140 files inside SCEN.DAT, but most of those are 0kb so he adjusted the script a little bit:

Code: Select all

# Growlanser VI: Precarious World
# script for QuickBMS http://quickbms.aluigi.org

get FILES long
for i = 0 < FILES
    get OFFSET short
    get SIZE short
    math OFFSET *= 0x800
    math SIZE *= 0x800

    if SIZE != 0
        savepos POS
        goto OFFSET
        get ID long
       
        string FILE_NAME = ""
        string FILE_NAME + i
        if ID == 0x64
            string FILE_NAME + ".SCEN"
            log FILE_NAME OFFSET SIZE
        else
            string FILE_NAME + ".DAT"
            log FILE_NAME OFFSET SIZE
        endif
        goto POS
    endif
next i


No progress on the other files so far. If anybody has some recommendations on how to improve the quickBMS script, please do tell!

Edit: The script seems to work on the GL1 PSP + PS1 SCEN.DAT and MAP.DAT
Risae
Posts: 21
Joined: Wed Nov 18, 2015 1:35 pm

Re: Growlanser 1 (PSX/PSP): Need assistance with file extraction quickBMS script

Post by Risae »

Update:

It seems like both the SCEN quickBMS script don't work properly. There are still cases when there are files that do not have the proper file length:

Image

My buddy was able to make a sort of working quickBMS script for DATA.DAT and GLB.DAT:

Code: Select all

# Growlanser I (PSP) - DATA.DAT
# script for QuickBMS http://quickbms.aluigi.org

getdstring FILE_NAME_1 0x1C

goto 0x1C
get OFFSET_1 long

savepos POS
xmath POS_2 "POS + 0x1C"
goto POS_2

get OFFSET_2 long
reverselong OFFSET_2
reverselong OFFSET_1

xmath SIZE "OFFSET_2 - OFFSET_1"
log FILE_NAME_1 OFFSET_1 SIZE

goto POS

do
getdstring FILE_NAME 0x1C
xmath POS "POS + 0x1C"

get OFFSET long

savepos POS
xmath POS_2 "POS + 0x1C"
goto POS_2

get OFFSET_2 long
reverselong OFFSET_2
reverselong OFFSET

xmath SIZE "OFFSET_2 - OFFSET"
log FILE_NAME OFFSET SIZE

goto POS

while POS != OFFSET_1


And here for GLB.DAT:

Code: Select all

# Growlanser I (PSP) - GLB.DAT
# script for QuickBMS http://quickbms.aluigi.org

getdstring FILE_NAME_1 0xA

goto 0xA
get OFFSET_1 long

savepos POS
xmath POS_2 "POS + 0xA"
goto POS_2

get OFFSET_2 long
reverselong OFFSET_2
reverselong OFFSET_1

xmath SIZE "OFFSET_2 - OFFSET_1"
log FILE_NAME_1 OFFSET_1 SIZE

goto POS

do
getdstring FILE_NAME 0xA
xmath POS "POS + 0xA"

get OFFSET long

savepos POS
xmath POS_2 "POS + 0xA"
goto POS_2

get OFFSET_2 long
reverselong OFFSET_2
reverselong OFFSET

xmath SIZE "OFFSET_2 - OFFSET"
log FILE_NAME OFFSET SIZE

goto POS

while POS != OFFSET_1



Anybody got a clue what could be wrong with the SCEN.DAT script?

Additional Information:

GL1 PSP is a remake from the PS1 version.
For comparison, here are the files from GL1 PS1 and PSP:

PS1:

Code: Select all

Growlanser (Japan) (Disc 1).bin
>SLPS_023.80
>MAGD.BIN
>NEFF.BIN
>SYSTEM.CNF
>FTIM.DAT
>MAP.DAT
>MSYS.DAT
>SCEN.DAT
>SND.DAT
>XATBL.DAT
>MOVIE0.STR
>MOVIE1.STR
>UPD.UPD
>VOICE.XA


PSP:

Code: Select all

Grow_Lanser_JPN.iso
>UMD_DATA.BIN
>PSP_GAME
>>ICON0.PNG
>>PARAM.SFO
>>PIC0.PNG
>>PIC1.PNG
>>SYSDIR
>>>BOOT.BIN
>>>EBOOT.BIN
>>>UPDATE
>>>>DATA.BIN
>>>>EBOOT.BIN
>>>>PARAM.SFO
>>USRDIR
>>>DATA_BOOT.DAT
>>>GR_SAVE_ICON0.PNG
>>>GR_SAVE_PIC1.PNG
>>>logo.bmp
>>>op1.pmf
>>>op2.pmf
>>>TMP.DAT
>>>gr_data1
>>>>MAGD.BIN
>>>>NEFF.BIN
>>>>DATA.DAT
>>>>GLB.DAT
>>>>MAP.DAT
>>>>MSYS.DAT
>>>>SCEN.DAT
>>>>VOICE.DAT
>>>>UPD.UPD
>>>kmodule
>>>>audiocodec.prx
>>>>audiocodec_back.prx
>>>>ifhandle.prx
>>>>memab.prx
>>>>mpegbase.prx
>>>>mpegbase_.prx
>>>>pspnet_adhoc_auth.prx
>>>>videocodec.prx
>>>>videocodec_.prx
>>>module
>>>>libatrac3plus.prx
>>>>libatrac3plus_back.prx
>>>>mpeg.prx
>>>>mpeg_.prx
>>>>pspnet.prx
>>>>pspnet_adhoc.prx
>>>>pspnet_adhoc_download.prx
>>>>pspnet_adhoc_matching.prx
>>>>pspnet_adhocctl.prx
>>>>pspnet_apctl.prx
>>>>pspnet_inet.prx
aluigi
Site Admin
Posts: 12984
Joined: Wed Jul 30, 2014 9:32 pm

Re: Growlanser 1 (PSX/PSP): Need assistance with file extraction quickBMS script

Post by aluigi »

Just gave a quick look at SCEN.DAT and the script of your friend is correct, there are indeed 0bytes files since the coverage is 99% and the offset doesn't advance with these files.
Risae
Posts: 21
Joined: Wed Nov 18, 2015 1:35 pm

Re: Growlanser 1 (PSX/PSP): Need assistance with file extraction quickBMS script

Post by Risae »

aluigi wrote:Just gave a quick look at SCEN.DAT and the script of your friend is correct, there are indeed 0bytes files since the coverage is 99% and the offset doesn't advance with these files.


Hi Aluigi,

thank you very much for taking a look at it.
A quick update: 2 file that are only present in the PSP version of the game, "DATA.DAT" and "GLB.DAT" have a sort of working script now too:

Code: Select all

# Growlanser I (PSP) - DATA.DAT
# script for QuickBMS http://quickbms.aluigi.org

getdstring FILE_NAME_1 0x1C

goto 0x1C
get OFFSET_1 long

savepos POS
xmath POS_2 "POS + 0x1C"
goto POS_2

get OFFSET_2 long
reverselong OFFSET_2
reverselong OFFSET_1

xmath SIZE "OFFSET_2 - OFFSET_1"
log FILE_NAME_1 OFFSET_1 SIZE

goto POS

do
getdstring FILE_NAME 0x1C
xmath POS "POS + 0x1C"

get OFFSET long

savepos POS
xmath POS_2 "POS + 0x1C"
goto POS_2

get OFFSET_2 long
reverselong OFFSET_2
reverselong OFFSET

xmath SIZE "OFFSET_2 - OFFSET"
log FILE_NAME OFFSET SIZE

goto POS

while POS != OFFSET_1


Code: Select all

# Growlanser I (PSP) - GLB.DAT
# script for QuickBMS http://quickbms.aluigi.org

getdstring FILE_NAME_1 0xA

goto 0xA
get OFFSET_1 long

savepos POS
xmath POS_2 "POS + 0xA"
goto POS_2

get OFFSET_2 long
reverselong OFFSET_2
reverselong OFFSET_1

xmath SIZE "OFFSET_2 - OFFSET_1"
log FILE_NAME_1 OFFSET_1 SIZE

goto POS

do
getdstring FILE_NAME 0xA
xmath POS "POS + 0xA"

get OFFSET long

savepos POS
xmath POS_2 "POS + 0xA"
goto POS_2

get OFFSET_2 long
reverselong OFFSET_2
reverselong OFFSET

xmath SIZE "OFFSET_2 - OFFSET"
log FILE_NAME OFFSET SIZE

goto POS

while POS != OFFSET_1