def import_patch_rom(Patch, Path, OVERLAYOffset): ''' Import patch and write to an Overlay0 in the ROM ''' try: ROM = open(Path, mode='r+b') except IOError: return 'Invalid ROM Path' ROM = mmap.mmap(ROM.fileno(), 20772366) for Sprite in Patch.keys(): ClassID = database.lookup(Patch, Sprite) if (libmisc.Spritenumchk(Sprite) != 'UNK') & (libmisc.ClassIDcheck(ClassID) != 'UNK'): ClassID = hex(ClassID)[2:] ZeroAdd = (4 - len(ClassID)) * '0' ClassID = ''.join([ZeroAdd, ClassID]) ROM.seek(OVERLAYOffset + Sprite * 2 - 2) ROM.write_byte(int(ClassID[2:], 16)) ROM.seek(OVERLAYOffset + Sprite * 2 - 1) ROM.write_byte(int(ClassID[:2], 16)) else: return "INVCLASSIDSPRITE" ROM.flush() ROM.close() return 'Done'
def import_patch(Patch, Path, Region): ''' Write a patch to an external Overlay0 ''' try: Overlay = open(Path, mode='r+b') except IOError: return 'Invalid Overlay Path' Overlay = mmap.mmap(Overlay.fileno(), 0) for Sprite in Patch.keys(): ClassID = database.lookup(Patch, Sprite) if (libmisc.Spritenumchk(Sprite) != 'UNK') & (libmisc.ClassIDcheck(ClassID) != 'UNK'): ClassID = hex(ClassID)[2:] ZeroAdd = (4 - len(ClassID)) * '0' ClassID = ''.join([ZeroAdd, ClassID]) Overlay.seek(ovproc.ovoffset(Region) + Sprite * 2 - 2) Overlay.write_byte(int(ClassID[2:], 16)) Overlay.seek(ovproc.ovoffset(Region) + Sprite * 2 - 1) Overlay.write_byte(int(ClassID[:2], 16)) else: return "INVCLASSIDSPRITE" Overlay.flush() Overlay.close() return 'Done'
def write_patch(PatchPath, Sprite, ClassID): ''' Write a patch line to the patch file ''' if (libmisc.Spritenumchk(Sprite) != 'UNK') & (libmisc.ClassIDcheck(ClassID) != 'UNK'): with open(PatchPath, mode='a') as Patch: Patch.write(''.join( ['{', str(Sprite), '#', str(ClassID), '}', '\n'])) return 'Done'
def ClassIDread(ROMPath, Sprite, OVERLAYOffset): ''' Read the Class ID from the Overlay 0 from the ROM ''' if libmisc.Spritenumchk(Sprite) != 'UNK': try: ROM = open(ROMPath, mode='rb') except IOError: return 'Invalid ROM Path' ROM.seek(OVERLAYOffset + Sprite * 2 - 2) Byte2 = binascii.hexlify(ROM.read(1)) Byte1 = binascii.hexlify(ROM.read(1)) ROM.close() Value = b''.join([Byte1, Byte2]) Value = int(Value, 16) return Value else: return 'INVSPRITE'
def ClassIDread(OVPath, Sprite, Region): ''' Read the ClassID of a specific Sprite and return a decimal representation of it ''' if libmisc.Spritenumchk(Sprite) != 'UNK': try: Overlay = open(OVPath, mode='rb') except IOError: return 'Invalid Overlay Path' Overlay.seek(ovoffset(Region) + Sprite * 2 - 2) Byte2 = binascii.hexlify(Overlay.read(1)) Byte1 = binascii.hexlify(Overlay.read(1)) Overlay.close() Value = b''.join([Byte1, Byte2]) Value = int(Value, 16) return Value else: return 'INVSPRITE'
def ClassIDwrite(ROMPath, Sprite, ClassID, OVERLAYOffset): ''' Write the decimal representation of a ClassID for a sprite to the ROM ''' if (libmisc.Spritenumchk(Sprite) != 'UNK') & (libmisc.ClassIDcheck(ClassID) != 'UNK'): ClassID = hex(ClassID)[2:] ZeroAdd = (4 - len(ClassID)) * '0' ClassID = ''.join([ZeroAdd, ClassID]) try: ROM = open(ROMPath, mode='r+b') except IOError: return 'Invalid ROM Path' ROM = mmap.mmap(ROM.fileno(), 20772366) ROM.seek(OVERLAYOffset + Sprite * 2 - 2) ROM.write_byte(int(ClassID[2:], 16)) ROM.seek(OVERLAYOffset + Sprite * 2 - 1) ROM.write_byte(int(ClassID[:2], 16)) ROM.flush() ROM.close() return "Done" else: return "INVCLASSIDSPRITE"
def ClassIDwrite(OVPath, Sprite, Region, ClassID): ''' Write the decimal representation of a ClassID for a sprite to the overlay ''' if (libmisc.Spritenumchk(Sprite) != 'UNK') & (libmisc.ClassIDcheck(ClassID) != 'UNK'): ClassID = hex(ClassID)[2:] ZeroAdd = (4 - len(ClassID)) * '0' ClassID = ''.join([ZeroAdd, ClassID]) try: Overlay = open(OVPath, mode='r+b') except IOError: return 'Invalid Overlay Path' Overlay = mmap.mmap(Overlay.fileno(), 0) Overlay.seek(ovoffset(Region) + Sprite * 2 - 2) Overlay.write_byte(int(ClassID[2:], 16)) Overlay.seek(ovoffset(Region) + Sprite * 2 - 1) Overlay.write_byte(int(ClassID[:2], 16)) Overlay.flush() Overlay.close() return "Done" else: return "INVCLASSIDSPRITE"