From f078750b72a8770812581d5ef30c9d17655cd669 Mon Sep 17 00:00:00 2001 From: alwaysintreble Date: Tue, 14 Feb 2023 15:22:39 -0600 Subject: [PATCH] LTTP: make the enemizer check a property and only check for it once instead of per world (#1448) * LTTP: do the enemizer check in `stage_assert_generate` and break after checking any world for enemizer succeeds * use multiworld * catch a missed `used_enemizer` check and add typing * more typing --- worlds/alttp/Rom.py | 4 ++-- worlds/alttp/__init__.py | 25 ++++++++++++++----------- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/worlds/alttp/Rom.py b/worlds/alttp/Rom.py index a55946ba..6b0ad9ad 100644 --- a/worlds/alttp/Rom.py +++ b/worlds/alttp/Rom.py @@ -20,7 +20,7 @@ import concurrent.futures import bsdiff4 from typing import Optional, List -from BaseClasses import CollectionState, Region, Location +from BaseClasses import CollectionState, Region, Location, MultiWorld from worlds.alttp.Shops import ShopType, ShopPriceType from worlds.alttp.Dungeons import dungeon_music_addresses from worlds.alttp.Regions import location_table, old_location_address_to_new_location_address @@ -765,7 +765,7 @@ def get_nonnative_item_sprite(item: str) -> int: # https://discord.com/channels/731205301247803413/827141303330406408/852102450822905886 -def patch_rom(world, rom, player, enemized): +def patch_rom(world: MultiWorld, rom: LocalRom, player: int, enemized: bool): local_random = world.per_slot_randoms[player] # patch items diff --git a/worlds/alttp/__init__.py b/worlds/alttp/__init__.py index 5c899f4b..d9250484 100644 --- a/worlds/alttp/__init__.py +++ b/worlds/alttp/__init__.py @@ -5,7 +5,7 @@ import threading import typing import Utils -from BaseClasses import Item, CollectionState, Tutorial +from BaseClasses import Item, CollectionState, Tutorial, MultiWorld from .Dungeons import create_dungeons from .EntranceShuffle import link_entrances, link_inverted_entrances, plando_connect, \ indirect_connections, indirect_connections_inverted, indirect_connections_not_inverted @@ -151,16 +151,18 @@ class ALTTPWorld(World): super(ALTTPWorld, self).__init__(*args, **kwargs) @classmethod - def stage_assert_generate(cls, world): + def stage_assert_generate(cls, multiworld: MultiWorld): rom_file = get_base_rom_path() if not os.path.exists(rom_file): raise FileNotFoundError(rom_file) - if world.is_race: + if multiworld.is_race: import xxtea + for player in multiworld.get_game_players(cls.game): + if multiworld.worlds[player].use_enemizer: + check_enemizer(multiworld.worlds[player].enemizer_path) + break def generate_early(self): - if self.use_enemizer(): - check_enemizer(self.enemizer_path) player = self.player world = self.multiworld @@ -369,19 +371,20 @@ class ALTTPWorld(World): def stage_post_fill(cls, world): ShopSlotFill(world) - def use_enemizer(self): + @property + def use_enemizer(self) -> bool: world = self.multiworld player = self.player - return (world.boss_shuffle[player] or world.enemy_shuffle[player] - or world.enemy_health[player] != 'default' or world.enemy_damage[player] != 'default' - or world.pot_shuffle[player] or world.bush_shuffle[player] - or world.killable_thieves[player]) + return bool(world.boss_shuffle[player] or world.enemy_shuffle[player] + or world.enemy_health[player] != 'default' or world.enemy_damage[player] != 'default' + or world.pot_shuffle[player] or world.bush_shuffle[player] + or world.killable_thieves[player]) def generate_output(self, output_directory: str): world = self.multiworld player = self.player try: - use_enemizer = self.use_enemizer() + use_enemizer = self.use_enemizer rom = LocalRom(get_base_rom_path())