Kanma / MPQExtractor

A command-line tool to extract files from MPQ archives
Other
126 stars 37 forks source link

How can I patch Warcraft 3 with this? #23

Open grepwood opened 2 months ago

grepwood commented 2 months ago

First of all, thank you so much! This is a great tool! So far the best I've tried when handling MPQ archives.

My use case is that I would like to use the original Warcraft 3 RoC CD, one of the free official patches, and free and open source tools, in order to install and patch Warcraft 3 RoC. The end goal of this exercise is to fix a package for Gentoo I made a couple years ago.

So here is my procedure so far:

  1. Locate a viable Warcraft 3 RoC CD. For posterity, I'm using the Polish release and it has a sha256 of e5369553b4e9752eed239aeeecef2ca7133c42e6eb66fe7a32ff60a9b9f428d9 once when it's dumped to a separate ISO9660 file. The inserted CD gets a different checksum for some reason, and trying to dump the thing with dd yields 4 sectors less than the ISO header claims the disc should have. Probably some SecuROM/TAO codgery at work here. For the sake of continuity, let's refer to this image later with the file path /var/tmp/war3roc-pl.iso.
  2. Run the following commands inside an empty directory workspace, to extract files that interest us:
    mkdir -p Movies Maps/Scenario redist/miles
    isoinfo -i /var/tmp/war3roc-pl.iso -x '/WAR3.MPQ;1' > war3.mpq
    isoinfo -i /var/tmp/war3roc-pl.iso -x '/SETUP.MPQ;1' > setup.mpq
    isoinfo -i /var/tmp/war3roc-pl.iso -x '/MOVIES/HUMANED.MPQ;1' > Movies/HumanEd.mpq
    isoinfo -i /var/tmp/war3roc-pl.iso -x '/MOVIES/HUMANOP.MPQ;1' > Movies/HumanOp.mpq
    isoinfo -i /var/tmp/war3roc-pl.iso -x '/MOVIES/NIGHTELFED.MPQ;1' > Movies/NightElfEd.mpq
    isoinfo -i /var/tmp/war3roc-pl.iso -x '/MOVIES/ORCED.MPQ;1' > Movies/OrcEd.mpq
    isoinfo -i /var/tmp/war3roc-pl.iso -x '/MOVIES/UNDEADED.MPQ;1' > Movies/UndeadEd.mpq
    isoinfo -i /var/tmp/war3roc-pl.iso -x '/MOVIES/TUTORIALIN.MPQ;1' > Movies/TutorialIn.mpq
    isoinfo -i /var/tmp/war3roc-pl.iso -x '/MOVIES/TUTORIALOP.MPQ;1' > Movies/TutorialOp.mpq
    MPQExtractor -e 'File00000060.exe' -o . setup.mpq
    mv File00000060.exe 'Warcraft III.exe'
    MPQExtractor -e 'File00000061.exe' -o . setup.mpq
    mv File00000061.exe 'World Editor.exe'
    MPQExtractor -e 'File00000062.exe' -o . setup.mpq
    mv File00000062.exe War3.exe
    MPQExtractor -e 'File00000063.exe' -o . setup.mpq
    mv File00000063.exe WorldEdit.exe
    MPQExtractor -e 'File00000064.exe' -o . setup.mpq
    mv File00000064.exe Mss32.dll
    MPQExtractor -e 'File00000065.exe' -o . setup.mpq
    mv File00000065.exe ijl15.dll
    MPQExtractor -e 'File00000066.exe' -o . setup.mpq
    mv File00000066.exe Game.dll
    MPQExtractor -e 'File00000067.exe' -o . setup.mpq
    mv File00000067.exe Storm.dll
    MPQExtractor -e 'File00000069.w3x' -o . setup.mpq
    mv File00000069.w3x Maps/(10)DustwallowKeys.w3m
    MPQExtractor -e 'File00000070.w3x' -o . setup.mpq
    mv File00000070.w3x Maps/(12)DivideAndConquer.w3m
    MPQExtractor -e 'File00000071.w3x' -o . setup.mpq
    mv File00000071.w3x Maps/(12)IceCrown.w3m
    MPQExtractor -e 'File00000072.w3x' -o . setup.mpq
    mv File00000072.w3x Maps/(2)BootyBay.w3m
    MPQExtractor -e 'File00000073.w3x' -o . setup.mpq
    mv File00000073.w3x Maps/(2)Harrow.w3m
    MPQExtractor -e 'File00000074.w3x' -o . setup.mpq
    mv File00000074.w3x Maps/(2)HillsOfGlory.w3m
    MPQExtractor -e 'File00000075.w3x' -o . setup.mpq
    mv File00000075.w3x Maps/(2)OgreMound.w3m
    MPQExtractor -e 'File00000076.w3x' -o . setup.mpq
    mv File00000076.w3x Maps/(2)PlunderIsle.w3m
    MPQExtractor -e 'File00000077.w3x' -o . setup.mpq
    mv File00000077.w3x Maps/(3)Forestwalk.w3m
    MPQExtractor -e 'File00000078.w3x' -o . setup.mpq
    mv File00000078.w3x Maps/(3)IsleOfDread.w3m
    MPQExtractor -e 'File00000079.w3x' -o . setup.mpq
    mv File00000079.w3x Maps/(3)Nighthaven.w3m
    MPQExtractor -e 'File00000080.w3x' -o . setup.mpq
    mv File00000080.w3x Maps/(4)Adrenaline.w3m
    MPQExtractor -e 'File00000081.w3x' -o . setup.mpq
    mv File00000081.w3x Maps/(4)Borderlands.w3m
    MPQExtractor -e 'File00000082.w3x' -o . setup.mpq
    mv File00000082.w3x Maps/(4)Deadwaterdrop.w3m
    MPQExtractor -e 'File00000083.w3x' -o . setup.mpq
    mv File00000083.w3x Maps/(4)DragonMountain.w3m
    MPQExtractor -e 'File00000084.w3x' -o . setup.mpq
    mv File00000084.w3x Maps/(4)Duskwood.w3m
    MPQExtractor -e 'File00000085.w3x' -o . setup.mpq
    mv File00000085.w3x Maps/(4)Frostsabre.w3m
    MPQExtractor -e 'File00000086.w3x' -o . setup.mpq
    mv File00000086.w3x Maps/(4)HarvestMoon.w3m
    MPQExtractor -e 'File00000087.w3x' -o . setup.mpq
    mv File00000087.w3x Maps/(4)Legends.w3m
    MPQExtractor -e 'File00000088.w3x' -o . setup.mpq
    mv File00000088.w3x Maps/(4)LostTemple.w3m
    MPQExtractor -e 'File00000089.w3x' -o . setup.mpq
    mv File00000089.w3x Maps/(4)MysticIsles.w3m
    MPQExtractor -e 'File00000090.w3x' -o . setup.mpq
    mv File00000090.w3x Maps/(4)TranquilPaths.w3m
    MPQExtractor -e 'File00000091.w3x' -o . setup.mpq
    mv File00000091.w3x Maps/(5)TheGlaive.w3m
    MPQExtractor -e 'File00000092.w3x' -o . setup.mpq
    mv File00000092.w3x Maps/(6)DarkForest.w3m
    MPQExtractor -e 'File00000093.w3x' -o . setup.mpq
    mv File00000093.w3x Maps/(6)DragonFire.w3m
    MPQExtractor -e 'File00000094.w3x' -o . setup.mpq
    mv File00000094.w3x Maps/(6)DrywaterGulch.w3m
    MPQExtractor -e 'File00000095.w3x' -o . setup.mpq
    mv File00000095.w3x Maps/(6)GnollWood.w3m
    MPQExtractor -e 'File00000096.w3x' -o . setup.mpq
    mv File00000096.w3x Maps/(6)Moonglade.w3m
    MPQExtractor -e 'File00000097.w3x' -o . setup.mpq
    mv File00000097.w3x Maps/(6)ScorchedBasin.w3m
    MPQExtractor -e 'File00000098.w3x' -o . setup.mpq
    mv File00000098.w3x Maps/(6)Stromguarde.w3m
    MPQExtractor -e 'File00000099.w3x' -o . setup.mpq
    mv File00000099.w3x Maps/(6)SwampOfSorrows.w3m
    MPQExtractor -e 'File00000100.w3x' -o . setup.mpq
    mv File00000100.w3x Maps/(6)TimbermawHold.w3m
    MPQExtractor -e 'File00000101.w3x' -o . setup.mpq
    mv File00000101.w3x Maps/(8)Battleground.w3m
    MPQExtractor -e 'File00000102.w3x' -o . setup.mpq
    mv File00000102.w3x Maps/(8)BlastedLands.w3m
    MPQExtractor -e 'File00000103.w3x' -o . setup.mpq
    mv File00000103.w3x Maps/(8)BloodvenomFalls.w3m
    MPQExtractor -e 'File00000104.w3x' -o . setup.mpq
    mv File00000104.w3x Maps/(8)GardenOfWar.w3m
    MPQExtractor -e 'File00000105.w3x' -o . setup.mpq
    mv File00000105.w3x Maps/(8)GolemsInTheMist.w3m
    MPQExtractor -e 'File00000106.w3x' -o . setup.mpq
    mv File00000106.w3x Maps/(8)PetrifiedForest.w3m
    MPQExtractor -e 'File00000107.w3x' -o . setup.mpq
    mv File00000107.w3x Maps/(8)Plaguelands.w3m
    MPQExtractor -e 'File00000108.w3x' -o . setup.mpq
    mv File00000108.w3x Maps/(8)PlainsOfSnow.w3m
    MPQExtractor -e 'File00000109.w3x' -o . setup.mpq
    mv File00000109.w3x Maps/(8)TheCrucible.w3m
    MPQExtractor -e 'File00000110.w3x' -o . setup.mpq
    mv File00000110.w3x Maps/(9)Riverrun.w3m
    MPQExtractor -e 'File00000111.w3x' -o . setup.mpq
    mv File00000111.w3x Maps/Scenario/(1)TheDeathSheep.w3m
    MPQExtractor -e 'File00000112.w3x' -o . setup.mpq
    mv File00000112.w3x Maps/Scenario/(4)WarChasers.w3m
    MPQExtractor -e 'File00000113.exe' -o . setup.mpq
    mv File00000113.exe redist/miles/Mp3dec.asi
    MPQExtractor -e 'File00000114.exe' -o . setup.mpq
    mv File00000114.exe redist/miles/Mssdolby.m3d
    MPQExtractor -e 'File00000115.exe' -o . setup.mpq
    mv File00000115.exe redist/miles/Msseax2.m3d
    MPQExtractor -e 'File00000116.exe' -o . setup.mpq
    mv File00000116.exe redist/miles/Mssfast.m3d
    MPQExtractor -e 'File00000117.exe' -o . setup.mpq
    mv File00000117.exe redist/miles/Reverb3.flt
  3. Get the patch. Unfortunately at the moment it's offline because I uploaded a crack for WC3 RoC 1.0 to archive.org and it had false positives with 4-5 noname security companies that virustotal.com includes in their scanner matrix. For what it's worth this is a Polish 1.26a patch that should be still easily available.

At this point I'm left scratching my head because Warcraft 3 patches are self-extracting MPQ files with a PE32 stub. Here are the contents:

As we can see, inside the patch file there's more MPQ files and from studying the contents it appears that not all of them are even used.

Prepatch.lst reads:

extract BNUpdate.exe
extract Patch.txt
execute BNUpdate

At this point I'm not sure which way I should continue. Obviously Patch_War3.mpq contains the files I want to use, but some of them are not useful in patching War3.mpq. Like for instance:

How should I go about this if I want to continue using MPQExtractor?

grepwood commented 2 months ago

I've tracked the process and it appears that when RoC 1.0 installs, it copies war3.mpq from the CD to the install destination and later adds some files to war3.mpq. Strange. The difference is 19971722 bytes. I'll have to take a look at that.