if os.path.isdir(updateDir): #First, extract all DLC. for dir in os.listdir(updateDir): if dir == "Patch": continue print("Extracting DLC %s..." % dir) dumpRoot(os.path.join(updateDir, dir, "Data"), patchDir, targetDirectory) #Now extract the base game. print("Extracting main game...") dumpRoot(dataDir, patchDir, targetDirectory) #Write GUID table. print("Writing EBX GUID table...") ebx.writeGuidTable(targetDirectory) #MOH:WF hack: extract driving levels assets. if os.path.isdir(os.path.join(gameDirectory, "game", "Speed")): print("Extracting MOH:WF driving assets...") gameDirectory = os.path.join(gameDirectory, "game") dataDir = os.path.join(gameDirectory, "Speed") updateDir = os.path.join(gameDirectory, "Update") patchDir = os.path.join(updateDir, "Patch", "Speed") dumpRoot(dataDir, patchDir, os.path.join(targetDirectory, "speed")) #Write GUID table. print("Writing EBX GUID table...") ebx.writeGuidTable(os.path.join(targetDirectory, "speed"))
#New version with multiple cats split into install groups, seen in 2015 and later games. #Appears to always use cas.cat and never use delta bundles, patch just replaces bundles fully. dataDir=os.path.join(gameDirectory,"Data") updateDir=os.path.join(gameDirectory,"Update") patchDir=os.path.join(gameDirectory,"Patch") #Detect cat version. if tocLayout.getSubObject("installManifest").get("maxTotalSize")!=None: readCat=cas.readCat2 else: readCat=cas.readCat3 if os.path.isdir(updateDir): #First, extract all DLC. for dir in os.listdir(updateDir): print("Extracting DLC %s..." % dir) dir=os.path.join(updateDir,dir,"Data") findCats(dir,patchDir,readCat) dumpRoot(dir,patchDir,targetDirectory) #Now extract the base game. print("Extracting main game...") findCats(dataDir,patchDir,readCat) dumpRoot(dataDir,patchDir,targetDirectory) #Write GUID table. print("Writing EBX GUID table...") ebx.writeGuidTable(targetDirectory) payload.zstdCleanup()