Rom: fix enemizer patching
This commit is contained in:
parent
ad278f91d6
commit
71cd0b917c
4
Main.py
4
Main.py
|
@ -161,9 +161,7 @@ def main(args, seed=None):
|
||||||
if use_enemizer and (args.enemizercli or not args.jsonout):
|
if use_enemizer and (args.enemizercli or not args.jsonout):
|
||||||
patch_enemizer(world, player, rom, args.rom, args.enemizercli, args.shufflepots[player], sprite_random_on_hit)
|
patch_enemizer(world, player, rom, args.rom, args.enemizercli, args.shufflepots[player], sprite_random_on_hit)
|
||||||
if not args.jsonout:
|
if not args.jsonout:
|
||||||
patches = rom.patches
|
rom = LocalRom.fromJsonRom(rom, args.rom, 0x400000)
|
||||||
rom = LocalRom(args.rom)
|
|
||||||
rom.merge_enemizer_patches(patches)
|
|
||||||
|
|
||||||
if args.race:
|
if args.race:
|
||||||
patch_race_rom(rom)
|
patch_race_rom(rom)
|
||||||
|
|
25
Rom.py
25
Rom.py
|
@ -25,9 +25,9 @@ JAP10HASH = '03a63945398191337e896e5771f77173'
|
||||||
|
|
||||||
class JsonRom(object):
|
class JsonRom(object):
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, name=None, hash=None):
|
||||||
self.name = None
|
self.name = name
|
||||||
self.hash = None
|
self.hash = hash
|
||||||
self.orig_buffer = None
|
self.orig_buffer = None
|
||||||
self.patches = {}
|
self.patches = {}
|
||||||
self.addresses = []
|
self.addresses = []
|
||||||
|
@ -71,9 +71,9 @@ class JsonRom(object):
|
||||||
|
|
||||||
class LocalRom(object):
|
class LocalRom(object):
|
||||||
|
|
||||||
def __init__(self, file, patch=True):
|
def __init__(self, file, patch=True, name=None, hash=None):
|
||||||
self.name = None
|
self.name = name
|
||||||
self.hash = None
|
self.hash = hash
|
||||||
self.orig_buffer = None
|
self.orig_buffer = None
|
||||||
with open(file, 'rb') as stream:
|
with open(file, 'rb') as stream:
|
||||||
self.buffer = read_rom(stream)
|
self.buffer = read_rom(stream)
|
||||||
|
@ -92,6 +92,14 @@ class LocalRom(object):
|
||||||
with open(file, 'wb') as outfile:
|
with open(file, 'wb') as outfile:
|
||||||
outfile.write(self.buffer)
|
outfile.write(self.buffer)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def fromJsonRom(rom, file, rom_size = 0x200000):
|
||||||
|
ret = LocalRom(file, True, rom.name, rom.hash)
|
||||||
|
ret.buffer.extend(bytearray([0x00] * (rom_size - len(ret.buffer))))
|
||||||
|
for address, values in rom.patches.items():
|
||||||
|
ret.write_bytes(int(address), values)
|
||||||
|
return ret
|
||||||
|
|
||||||
def patch_base_rom(self):
|
def patch_base_rom(self):
|
||||||
# verify correct checksum of baserom
|
# verify correct checksum of baserom
|
||||||
basemd5 = hashlib.md5()
|
basemd5 = hashlib.md5()
|
||||||
|
@ -116,11 +124,6 @@ class LocalRom(object):
|
||||||
# if RANDOMIZERBASEHASH != patchedmd5.hexdigest():
|
# if RANDOMIZERBASEHASH != patchedmd5.hexdigest():
|
||||||
# raise RuntimeError('Provided Base Rom unsuitable for patching. Please provide a JAP(1.0) "Zelda no Densetsu - Kamigami no Triforce (Japan).sfc" rom to use as a base.')
|
# raise RuntimeError('Provided Base Rom unsuitable for patching. Please provide a JAP(1.0) "Zelda no Densetsu - Kamigami no Triforce (Japan).sfc" rom to use as a base.')
|
||||||
|
|
||||||
def merge_enemizer_patches(self, patches):
|
|
||||||
self.buffer.extend(bytearray([0x00] * (0x400000 - len(self.buffer))))
|
|
||||||
for address, values in patches.items():
|
|
||||||
self.write_bytes(int(address), values)
|
|
||||||
|
|
||||||
def write_crc(self):
|
def write_crc(self):
|
||||||
crc = (sum(self.buffer[:0x7FDC] + self.buffer[0x7FE0:]) + 0x01FE) & 0xFFFF
|
crc = (sum(self.buffer[:0x7FDC] + self.buffer[0x7FE0:]) + 0x01FE) & 0xFFFF
|
||||||
inv = crc ^ 0xFFFF
|
inv = crc ^ 0xFFFF
|
||||||
|
|
Loading…
Reference in New Issue