bigianb / bgda-explorer

Code written to try and figure out the data files used in Baldur's Gate Dark Alliance for the PS2
11 stars 6 forks source link

Extracting ui text/dialog/translations from Baldurs Gate Dark Alliance #24

Open ghostlyghastly opened 1 year ago

ghostlyghastly commented 1 year ago

Thank you for this tool! This opens some files in the PC version but crashes often, for example when trying to open load_fr.lmp on the 3rd or so level.

res/ contains:

act1tran.lmp     crypt1.tex    gnoll.lmp     pot.lmp       test.vat
act1tran.smg     crypt1.va1    gtext.lmp     powderk.lmp   test2.lmp
act1trap.lmp     crypt1.vat    gtext_uk.lmp  pporko.lmp    thief.lmp
act1trap.smg     crypt1.vbf    gtman1.lmp    pporko.smg    thief1.lmp
act2tran.lmp     crypt1.vbg    gtube.lmp     ptrio.smg     thief2.lmp
act2tran.smg     crypt1.vbi    guns.lmp      pwater.smg    thief3.lmp
act2trap.lmp     crypt1.vbs    hardwood.lmp  pwotc.smg     thieves1.gob
act2trap.smg     crypt2.gob    hoochie.lmp   pwotclog.lmp  thieves1.tex
act3tran.lmp     crypt2.tex    horn.lmp      ratgiant.lmp  thieves1.va1
act3tran.smg     crypt2.va1    hud.lmp       ratsmall.lmp  thieves1.vat
act3trap.lmp     crypt2.vat    human.lmp     rolldoor.lmp  thieves2.gob
act3trap.smg     crypt2.vbf    human_fr.lmp  rottrees.lmp  thieves2.lmp
acttrans1.xmv    crypt2.vbg    human_ge.lmp  sackburl.lmp  thieves2.tex
acttrans2.xmv    crypt2.vbi    human_it.lmp  sessth.lmp    thieves2.va1
acttrans3.xmv    crypt2.vbs    human_sp.lmp  sewer1.gob    thieves2.vat
add_text.lmp     crypt3.vat    hutcloth.lmp  sewer1.tex    thieves2.vbf
add_texture.lmp  cryptpal.lmp  icebarel.lmp  sewer1.va1    thieves2.vbg
alien1.lmp       crystal.lmp   icecave1.gob  sewer1.vat    thieves2.vbi
alien2.lmp       cs_town.va1   icecave1.tex  sewer1.vbf    thieves2.vbs
all.txt          csewer1.gob   icecave1.va1  sewer1.vbg    thieves3.gob
armor.yak        csewer1.tex   icecave1.vat  sewer1.vbi    thieves3.tex
barrel.lmp       csewer1.va1   icecave2.gob  sewer1.vbs    thieves3.va1
bartend.lmp      csewer1.vat   icecave2.tex  sewer1m.va1   thieves3.vat
bartley.lmp      csewer1.vbf   icecave2.va1  sewer2.gob    title.lmp
baskets.lmp      csewer1.vbg   icecave2.vat  sewer2.tex    tkarne.lmp
baskets2.lmp     csewer1.vbi   icecave3.gob  sewer2.va1    tman1.lmp
bat.lmp          csewer1.vbs   icecave3.tex  sewer2.vat    tman2.lmp
behold.ico       cube.lmp      icecave3.va1  sewer3.vat    torch.lmp
beholder.lmp     cuttown.gob   icecave3.vat  shells1.gob   torrgeir.lmp
bis.smg          cuttown.tex   icechst1.lmp  shells1.tex   tower1.gob
bislogo.lmp      cuttown.va1   icecrate.lmp  shells2.tex   tower1.tex
bislogo.xmv      cuttown.vat   icesheet.lmp  shells2.vat   tower1.va1
bog1.gob         cuttown.vbf   icon.lmp      shop.lmp      tower1.vat
bog1.tex         cuttown.vbg   icon.vat      sigtower.gob  tower2.gob
bog1.va1         cuttown.vbi   icons.lmp     sigtower.tex  tower2.tex
bog1.vat         cuttown.vbs   inventry.lmp  sigtower.va1  tower2.va1
bogtree.lmp      d_burn.lmp    jfont.lmp     sigtower.vat  tower2.vat
branoch.lmp      d_cave.lmp    karne.lmp     skeleton.lmp  tower3.gob
brogan.lmp       d_night.lmp   keledon.lmp   sleyvas.lmp   tower3.tex
bthrone.gob      d_swamp.lmp   kelp.lmp      slime.lmp     tower3.va1
bthrone.tex      darktest.gob  kobold.lmp    smlcave.va1   tower3.vat
bthrone.va1      darktest.tex  kolgrim.lmp   smlcave1.gob  tower4.gob
bthrone.vat      darktest.vat  kshaman.lmp   smlcave1.tex  tower4.tex
bthrone.vbf      dbeast.lmp    kveg.lmp      smlcave1.va1  tower4.va1
bthrone.vbg      demo.lmp      langmenu.lmp  smlcave1.vat  tower4.vat
bthrone.vbi      democave.gob  legal.lmp     smlcave2.gob  towerb.gob
bthrone.vbs      democave.tex  lever.lmp     smlcave2.tex  towerb.tex
bthrone2.vat     democave.vat  lghtbeam.lmp  smlcave2.va1  towerb.va1
btube.lmp        demomark.lmp  lilvarra.lmp  smlcave2.vat  towerb.vat
bugbear.lmp      dialogj.lmp   lizardm.lmp   smlcave3.anm  towerf.va1
bulette.lmp      dragon.lmp    load_fr.lmp   smlcave3.gob  towerh.gob
bullfrog.lmp     drizz.lmp     load_gr.lmp   smlcave3.tex  towerh.tex
burneye1.gob     drizz_fr.lmp  load_it.lmp   smlcave3.va1  towerh.va1
burneye1.tex     drizz_ge.lmp  load_sp.lmp   smlcave3.vat  towerh.vat
burneye1.va1     drizz_it.lmp  loading.lmp   smlcave3.vbf  towerh.vbf
burneye1.vat     drizz_sp.lmp  mainmenu.lmp  smlcave3.vbg  towerh.vbg
burneye2.gob     drow_f.lmp    mainmenu.va1  smlcave3.vbi  towerh.vbi
burneye2.tex     drow_m.lmp    mapicons.lmp  smlcave3.vbs  towerh.vbs
burneye2.va1     drow_r.lmp    medalion.lmp  smlcave4.gob  towert.gob
burneye2.vat     drunk.lmp     mine1.gob     smlcave4.tex  towert.tex
burneye3.gob     dwarf.lmp     mine1.tex     smlcave4.va1  towert.va1
burneye3.tex     dwarf_d.lmp   mine1.va1     smlcave4.vat  towert.vat
burneye3.va1     dwarf_f.lmp   mine1.vat     snobarel.lmp  towert.vbf
burneye3.vat     dwarf_fr.lmp  mine2.gob     snowflag.lmp  towert.vbg
burneye4.gob     dwarf_ge.lmp  mine2.lmp     snowpeak.gob  towert.vbi
burneye4.tex     dwarf_it.lmp  mine2.tex     snowpeak.tex  towert.vbs
burneye4.va1     dwarf_m.lmp   mine2.va1     snowpeak.va1  towertop.va1
burneye4.vat     dwarf_sp.lmp  mine2.vat     snowpeak.vat  town.gob
burnfrst.gob     eldrith.lmp   mine3.gob     snowpkeg.lmp  town.tex
burnfrst.tex     elf.lmp       mine3.tex     snowtest.tex  town.va1
burnfrst.va1     elf_fr.lmp    mine3.va1     snowtest.vat  town.vat
burnfrst.vat     elf_ge.lmp    mine3.vat     soundseq.lmp  town.vbf
bush.lmp         elf_it.lmp    mine3.vbf     spicebox.lmp  town.vbg
cantent1.lmp     elf_sp.lmp    mine3.vbg     spider.lmp    town.vbi
cantent2.lmp     empty.smg     mine3.vbi     spore.lmp     town.vbs
canvtent.lmp     end.lmp       mine3.vbs     square.xmv    treepine.lmp
cat.lmp          end.smg       minecamp.gob  start.lmp     trees.lmp
cellar1.gob      ending.xmv    minecamp.tex  start.smg     trio.smg
cellar1.tex      endingf.xmv   minecamp.va1  stonejar.lmp  tutor.gob
cellar1.va1      endingg.xmv   minecamp.vat  swamp1.gob    tutor.tex
cellar1.vat      endingi.xmv   minecamp.vbf  swamp1.tex    tutor.va1
cemetary.lmp     endings.xmv   minecamp.vbg  swamp1.va1    tutor.vat
cguard.lmp       env_def.lmp   minecamp.vbi  swamp1.vat    twoman1.lmp
chapel.gob       env_ice.lmp   minecamp.vbs  swamp1.vbf    twoman2.lmp
chapel.tex       env_shll.lmp  minedoor.lmp  swamp1.vbg    uhulk.lmp
chapel.va1       env_sink.lmp  minotaur.lmp  swamp1.vbi    uncle.lmp
chapel.vat       env_thv.lmp   mouth.lmp     swamp1.vbs    urns.lmp
chekeep1.gob     env_twr.lmp   mouth.vat     swamp2.gob    vines.lmp
chekeep1.tex     equipmnt.lmp  mouth.vbf     swamp2.tex    w_cellar.lmp
chekeep1.va1     ethon.lmp     mouth.vbg     swamp2.va1    w_chapel.lmp
chekeep1.vat     fayed.lmp     mouth.vbi     swamp2.vat    w_chelim.lmp
chekeep2.gob     fgiant.lmp    mouth.vbs     swamp2.vbf    w_forge.lmp
chekeep2.tex     fireele.lmp   mpgs.lmp      swamp2.vbg    w_green.lmp
chekeep2.va1     flag.lmp      mtlcrate.lmp  swamp2.vbi    w_swamp.lmp
chekeep2.vat     flint.lmp     nebbish.lmp   swamp2.vbs    w_tower.lmp
chekeep2.vbf     font.lmp      ogre.lmp      tavern.gob    waplants.lmp
chekeep2.vbg     forcedr.lmp   oilcan.lmp    tavern.tex    watcher.lmp
chekeep2.vbi     forestbe.lmp  onyxhr.lmp    tavern.va1    watchmen.lmp
chekeep2.vbs     frontend.lmp  onyxl1.lmp    tavern.vat    water.smg
chelimb1.gob     fx.lmp        onyxl2.lmp    tavern.vbf    waterst.lmp
chelimb1.tex     g_brass.lmp   orb.lmp       tavern.vbg    windwalk.gob
chelimb1.va1     g_bronze.lmp  ox_chest.lmp  tavern.vbi    windwalk.tex
chelimb1.vat     g_bsteel.lmp  ox_plt.lmp    tavern.vbs    windwalk.va1
chelimb2.va1     g_onyx.lmp    pbis.smg      temple1.gob   windwalk.vat
chelobs.lmp      g_steel.lmp   pbislogo.lmp  temple1.tex   wine.lmp
chest.lmp        gargoyle.lmp  pempty.smg    temple1.va1   wisp.lmp
chest2.lmp       garik.lmp     pend.lmp      temple1.vat   wolf.lmp
chest3.lmp       gauntlet.gob  pend.smg      temple1.vbf   wotc.smg
config.lmp       gauntlet.tex  plegal.lmp    temple1.vbg   wotc.xmv
cratea.lmp       gauntlet.va1  pmainmnu.lmp  temple1.vbi   wotclogo.lmp
crateb.lmp       gauntlet.vat  porko.lmp     temple1.vbs   yeti.lmp
crusher.lmp      gears.lmp     porko.smg     test.gob      zombie.lmp
crypt1.gob       globsnd.lmp   porko.xmv     test.tex

Any idea which might contain text and how to extract?

Some file format research (3d models) has been going on in https://forum.xentax.com/viewtopic.php?t=18924

bigianb commented 1 year ago

The code assumes the PS2 PAL version because that's what I have. I expect that the format would be different for the PC version because the files are very PS2 specific ... the vid and tex files are basically VIF DMA packets dumped to a file.

ghostlyghastly commented 1 year ago

Thanks for replying so quickly. Perhaps the PC version is just the PS2 version with some kind of emulator? There happens to be a ~280MB zip with one each of the file types from the PC version at https://mega.nz/file/bIs3XCiI#6yLtlFye2uEtWTBYuRA-3j5dXxOEyKu2HBO9eZN7xsI (this is not even close to the whole game, which is 3.86GB)

bgtools - "The bgtools directory contains java code to mainly dump decodes files as text." could this be useful for extracting dialog/ui text? If so, is there a .jar available?

bigianb commented 1 year ago

I'm not going to download something I don't own ... maybe I'll look on eBay for the PC version, but no time soon. The java code can decode the dialog files - there's not a jar because it's very much experimental code. You need to open it in something like intellij IDEA, find the class you want to run, update the main call to point to the relevant file and run it. The c# code may be able to decode them too - I can't remember if it was implemented. If it is, it would log to the output pane.

RoseIlanga commented 1 year ago

I don't think you'll be able to find the PC versions on eBay, since the PC releases (Windows, Mac OS, Linux on GOG and Steam) are digital only as far as I know.

If it's any help (I don't really know how to program much of anything), I compared the files from all the versions and it seems the PC ones are identical to the Xbox ones, and the Gamecube files are yet again distinct from the rest. The LMP files seem to be the same between PAL and NTSC versions, though.

I think the main differences between PC/Xbox and PS2 are the file formats contained in the files. (The Gamecube files also have a different byte order.)