示例#1
0
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'
示例#2
0
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'
示例#3
0
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'
示例#4
0
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'
示例#5
0
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'
示例#6
0
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"
示例#7
0
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"