def repackRom(romfile, rompatch, workfolder, patchfile="", banksize=0x4000): common.logMessage("Repacking ROM", rompatch, "...") filesize = os.path.getsize(romfile) banknum = filesize // banksize common.logMessage("Repacking", banknum, "banks ...") with common.Stream(rompatch, "wb") as fout: for i in range(banknum): bankname = "bank_" if i < 0x10: bankname += "0" bankname += format(i, 'x') with common.Stream(workfolder + bankname + ".bin", "rb") as f: fout.write(f.read()) # Calculate and write the global checksum with common.Stream(rompatch, "rb+", False) as fout: checksum = sum(fout.read(0x14e)) fout.seek(0x150) checksum += sum(fout.read(filesize - 0x150)) fout.seek(0x14e) fout.writeUShort(checksum & 0xffff) common.logMessage("Done!") # Create patch if patchfile != "": common.xdeltaPatch(patchfile, romfile, rompatch) common.ipsPatch(patchfile.replace(".xdelta", ".ips"), romfile, rompatch)
def repackRom(romfile, rompatch, workfolder, patchfile=""): common.logMessage("Repacking ROM", rompatch, "...") ndstool = common.bundledExecutable("ndstool.exe") if not os.path.isfile(ndstool): common.logError("ndstool not found") return common.execute(ndstool + " -c {rom} -9 {folder}arm9.bin -7 {folder}arm7.bin -y9 {folder}y9.bin -y7 {folder}y7.bin -t {folder}banner.bin -h {folder}header.bin -d {folder}data -y {folder}overlay". format(rom=rompatch, folder=workfolder), False) common.logMessage("Done!") # Create xdelta patch if patchfile != "": common.xdeltaPatch(patchfile, romfile, rompatch)
def repackIso(isofile, isopatch, workfolder, patchfile=""): common.logMessage("Repacking ISO", isopatch, "...") common.copyFile(isofile, isopatch) iso = pycdlib.PyCdlib() iso.open(isopatch, "r+b") files = common.getFiles(workfolder) for file in common.showProgress(files): filelen = os.path.getsize(workfolder + file) with open(workfolder + file, "rb") as f: iso.modify_file_in_place(f, filelen, "/" + file) iso.close() common.logMessage("Done!") # Create xdelta patch if patchfile != "": common.xdeltaPatch(patchfile, isofile, isopatch)
def repackBIN(binfile, binpatch, cuefile, patchfile="", data="data/"): common.logMessage("Repacking BIN", binpatch, "...") if not os.path.isfile("psximager\\psxbuild.exe"): common.logError("psximager not found") return common.execute( "psximager\\psxbuild.exe \"{cat}\" \"{bin}\"".format( cat=data + "repack.cat", bin=binpatch), False) with open(cuefile, "w") as fout: fout.write("FILE \"" + binpatch.replace(data, "") + "\" BINARY\r\n") fout.write(" TRACK 01 MODE2/2352\r\n") fout.write(" INDEX 01 00:00:00\r\n") common.logMessage("Done!") # Create xdelta patch if patchfile != "": common.xdeltaPatch(patchfile, binfile, binpatch)
def repackUMD(isofile, isopatch, workfolder, patchfile=""): common.logMessage("Repacking ISO", isopatch, "...") common.copyFile(isofile, isopatch) umdreplace = common.bundledExecutable("UMD-replace.exe") if not os.path.isfile(umdreplace): common.logError("UMD-replace not found") return files = common.getFiles(workfolder) for file in common.showProgress(files): common.execute( umdreplace + " \"{imagename}\" \"/{filename}\" \"{newfile}\"".format( imagename=isopatch, filename=file, newfile=workfolder + file), False) common.logMessage("Done!") # Create xdelta patch if patchfile != "": common.xdeltaPatch(patchfile, isofile, isopatch)
def patchdump(): patchfile = "data/bad_to_good.xdelta" common.xdeltaPatch(patchfile, romfile.replace(".nds", "_bad.nds"), romfile)
def patchdump(): patchfile = "data/bad_to_good.xdelta" ndsfile = romfile if os.path.isfile(romfile) else romfile.replace( "holo", "holo2") common.xdeltaPatch(patchfile, ndsfile.replace(".nds", "_bad.nds"), ndsfile)