From 7333a15f1fc63bf00511d6f5cb1b45dde786e0b0 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 17 Jan 2021 06:54:38 +0100 Subject: [PATCH] handle merge conflicts after plando update --- Fill.py | 4 ++-- Mystery.py | 1 + Patch.py | 19 +++++++++++++------ worlds/alttp/ItemPool.py | 2 +- worlds/alttp/Rom.py | 2 +- 5 files changed, 18 insertions(+), 10 deletions(-) diff --git a/Fill.py b/Fill.py index 47038a31..f0961059 100644 --- a/Fill.py +++ b/Fill.py @@ -2,8 +2,8 @@ import logging import typing from BaseClasses import CollectionState, PlandoItem -from Items import ItemFactory -from Regions import key_drop_data +from worlds.alttp.Items import ItemFactory +from worlds.alttp.Regions import key_drop_data class FillError(RuntimeError): diff --git a/Mystery.py b/Mystery.py index 8d820f41..53daffc7 100644 --- a/Mystery.py +++ b/Mystery.py @@ -18,6 +18,7 @@ from worlds.alttp.Main import main as ERmain from worlds.alttp.Main import get_seed, seeddigits from worlds.alttp.Items import item_name_groups, item_table from worlds.alttp import Bosses +from worlds.alttp.Text import TextTable def mystery_argparse(): diff --git a/Patch.py b/Patch.py index a46fde63..2a2a7e73 100644 --- a/Patch.py +++ b/Patch.py @@ -14,6 +14,7 @@ from worlds.alttp.Rom import JAP10HASH current_patch_version = 1 + def get_base_rom_path(file_name: str = "") -> str: options = Utils.get_options() if not file_name: @@ -43,7 +44,8 @@ def generate_yaml(patch: bytes, metadata: Optional[dict] = None) -> bytes: patch = yaml.dump({"meta": metadata, "patch": patch, "game": "alttp", - "compatible_version": 1, # minimum version of patch system expected for patching to be successful + "compatible_version": 1, + # minimum version of patch system expected for patching to be successful "version": current_patch_version, "base_checksum": JAP10HASH}) return patch.encode(encoding="utf-8-sig") @@ -64,9 +66,10 @@ def create_patch_file(rom_file_to_patch: str, server: str = "", destination: str write_lzma(bytes, target) return target -def create_rom_bytes(patch_file: str) -> Tuple[dict, str, bytearray]: + +def create_rom_bytes(patch_file: str, ignore_version: bool = False) -> Tuple[dict, str, bytearray]: data = Utils.parse_yaml(lzma.decompress(load_bytes(patch_file)).decode("utf-8-sig")) - if data["compatible_version"] > current_patch_version: + if not ignore_version and data["compatible_version"] > current_patch_version: raise RuntimeError("Patch file is incompatible with this patcher, likely an update is required.") patched_data = bsdiff4.patch(get_base_rom_bytes(), data["patch"]) rom_hash = patched_data[int(0x7FC0):int(0x7FD5)] @@ -74,6 +77,7 @@ def create_rom_bytes(patch_file: str) -> Tuple[dict, str, bytearray]: target = os.path.splitext(patch_file)[0] + ".sfc" return data["meta"], target, patched_data + def create_rom_file(patch_file: str) -> Tuple[dict, str]: data, target, patched_data = create_rom_bytes(patch_file) with open(target, "wb") as f: @@ -143,6 +147,7 @@ if __name__ == "__main__": for romname in multidata['roms']: Utils.persistent_store("servers", "".join(chr(byte) for byte in romname[2]), address) from Utils import get_options + multidata["server_options"] = get_options()["server_options"] multidata = zlib.compress(json.dumps(multidata).encode("utf-8"), 9) with open(rom + "_updated.archipelago", 'wb') as f: @@ -151,7 +156,8 @@ if __name__ == "__main__": elif rom.endswith(".zip"): print(f"Updating host in patch files contained in {rom}") - def _handle_zip_file_entry(zfinfo : zipfile.ZipInfo, server: str): + + def _handle_zip_file_entry(zfinfo: zipfile.ZipInfo, server: str): data = zfr.read(zfinfo) if zfinfo.filename.endswith(".apbp"): data = update_patch_data(data, server) @@ -163,7 +169,8 @@ if __name__ == "__main__": futures = [] with zipfile.ZipFile(rom, "r") as zfr: updated_zip = os.path.splitext(rom)[0] + "_updated.zip" - with zipfile.ZipFile(updated_zip, "w", compression=zipfile.ZIP_DEFLATED, compresslevel=9) as zfw: + with zipfile.ZipFile(updated_zip, "w", compression=zipfile.ZIP_DEFLATED, + compresslevel=9) as zfw: for zfname in zfr.namelist(): futures.append(pool.submit(_handle_zip_file_entry, zfr.getinfo(zfname), address)) for future in futures: @@ -171,6 +178,6 @@ if __name__ == "__main__": except: import traceback + traceback.print_exc() input("Press enter to close.") - diff --git a/worlds/alttp/ItemPool.py b/worlds/alttp/ItemPool.py index 75fc22eb..d83d6de6 100644 --- a/worlds/alttp/ItemPool.py +++ b/worlds/alttp/ItemPool.py @@ -7,7 +7,7 @@ from worlds.alttp.Dungeons import get_dungeon_item_pool from worlds.alttp.EntranceShuffle import connect_entrance from Fill import FillError, fill_restrictive from worlds.alttp.Items import ItemFactory -from Rules import forbid_items_for_player +from worlds.alttp.Rules import forbid_items_for_player # This file sets the item pools for various modes. Timed modes and triforce hunt are enforced first, and then extra items are specified per mode to fill in the remaining space. # Some basic items that various modes require are placed here, including pendants and crystals. Medallion requirements for the two relevant entrances are also decided. diff --git a/worlds/alttp/Rom.py b/worlds/alttp/Rom.py index 36a06939..81a5d112 100644 --- a/worlds/alttp/Rom.py +++ b/worlds/alttp/Rom.py @@ -124,7 +124,7 @@ class LocalRom(object): return if os.path.isfile(local_path('data', 'basepatch.apbp')): - _, target, buffer = Patch.create_rom_bytes(local_path('data', 'basepatch.apbp')) + _, target, buffer = Patch.create_rom_bytes(local_path('data', 'basepatch.apbp'), ignore_version=True) if self.verify(buffer): self.buffer = bytearray(buffer) with open(local_path('basepatch.sfc'), 'wb') as stream: