From 7a4e903906ccd64b655e7836d3bccf5747976896 Mon Sep 17 00:00:00 2001 From: t3hf1gm3nt <59876300+t3hf1gm3nt@users.noreply.github.com> Date: Sat, 24 Jun 2023 19:58:54 -0400 Subject: [PATCH] TLOZ: APworld support (#1884) - Remove a relative import in Rules.py - Clean up a few unused imports in __init__.py - Use pkgutil instead of open when applying base patch - make sure rom_name is initialized correctly in modify_multidata * use os.path.join() instead of explicit "/" --- worlds/tloz/Rules.py | 2 +- worlds/tloz/__init__.py | 18 +++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/worlds/tloz/Rules.py b/worlds/tloz/Rules.py index 1e66e5a8..12bf466b 100644 --- a/worlds/tloz/Rules.py +++ b/worlds/tloz/Rules.py @@ -1,6 +1,6 @@ from typing import TYPE_CHECKING -from ..generic.Rules import add_rule +from worlds.generic.Rules import add_rule from .Locations import food_locations, shop_locations from .ItemPool import dangerous_weapon_locations from .Options import StartingPosition diff --git a/worlds/tloz/__init__.py b/worlds/tloz/__init__.py index 356f9e5f..2af92a79 100644 --- a/worlds/tloz/__init__.py +++ b/worlds/tloz/__init__.py @@ -1,8 +1,7 @@ -import logging import os import threading -import pkgutil -from typing import NamedTuple, Union, Dict, Any +from pkgutil import get_data +from typing import Dict, Any import bsdiff4 @@ -168,9 +167,8 @@ class TLoZWorld(World): # Remove map/compass check so they're always on # Removing a bit from the boss roars flags, so we can have more dungeon items. This allows us to # go past 0x1F items for dungeon items. - base_patch_location = os.path.dirname(__file__) + "/z1_base_patch.bsdiff4" - with open(base_patch_location, "rb") as base_patch: - rom_data = bsdiff4.patch(rom.read(), base_patch.read()) + base_patch = get_data(__name__, os.path.join(os.path.dirname(__file__), "z1_base_patch.bsdiff4")) + rom_data = bsdiff4.patch(rom.read(), base_patch) rom_data = bytearray(rom_data) # Set every item to the new nothing value, but keep room flags. Type 2 boss roars should # become type 1 boss roars, so we at least keep the sound of roaring where it should be. @@ -275,8 +273,10 @@ class TLoZWorld(World): def modify_multidata(self, multidata: dict): import base64 self.rom_name_available_event.wait() - new_name = base64.b64encode(bytes(self.rom_name)).decode() - multidata["connect_names"][new_name] = multidata["connect_names"][self.multiworld.player_name[self.player]] + rom_name = getattr(self, "rom_name", None) + if rom_name: + new_name = base64.b64encode(bytes(self.rom_name)).decode() + multidata["connect_names"][new_name] = multidata["connect_names"][self.multiworld.player_name[self.player]] def get_filler_item_name(self) -> str: if self.filler_items is None: @@ -320,4 +320,4 @@ class TLoZItem(Item): class TLoZLocation(Location): - game = 'The Legend of Zelda' \ No newline at end of file + game = 'The Legend of Zelda'