diff --git a/InitialSram.py b/InitialSram.py index 8d1685fc..0aa25bc2 100644 --- a/InitialSram.py +++ b/InitialSram.py @@ -115,8 +115,7 @@ class InitialSram: starting_magic = 0x80 if world.mode[player] == 'standard' and world.logic[player] not in ['noglitches', 'minorglitches']: - if (startingstate.has('Ocarina', player) and world.flute_mode[player] == 'active') \ - or startingstate.has('Ocarina (Activated)', player): + if startingstate.has('Ocarina (Activated)', player): self.pre_set_overworld_flag(0x18, 0x20) if startingstate.has('Return Old Man', player): diff --git a/Main.py b/Main.py index 122ca5ba..1e64d179 100644 --- a/Main.py +++ b/Main.py @@ -619,6 +619,7 @@ def copy_world(world): ret.inaccessible_regions = world.inaccessible_regions.copy() ret.damage_table = world.damage_table ret.data_tables = world.data_tables # can be changed... + ret.settings = world.settings for player in range(1, world.players + 1): create_regions(ret, player) @@ -832,6 +833,7 @@ def copy_world_premature(world, player): ret.damage_table = world.damage_table ret.data_tables = world.data_tables # can be changed... ret.key_logic = world.key_logic.copy() + ret.settings = world.settings ret.is_copied_world = True diff --git a/OverworldShuffle.py b/OverworldShuffle.py index 235849aa..d7fca96c 100644 --- a/OverworldShuffle.py +++ b/OverworldShuffle.py @@ -1384,11 +1384,10 @@ def can_reach_smith(world, player): region = world.get_region(region_name, player) for exit in region.exits: if not found and exit.connected_region is not None: - if exit.spot_type == 'Flute': - if any(map(lambda i: i.name == 'Ocarina (Activated)' and i.player == player, world.precollected_items)): - for flutespot in exit.connected_region.exits: - if flutespot.connected_region and flutespot.connected_region.name not in explored_regions: - explore_region(flutespot.connected_region.name, flutespot.connected_region) + if starting_flute and exit.spot_type == 'Flute': + for flutespot in exit.connected_region.exits: + if flutespot.connected_region and flutespot.connected_region.name not in explored_regions: + explore_region(flutespot.connected_region.name, flutespot.connected_region) elif exit.connected_region.name == 'Blacksmiths Hut' and exit.access_rule(blank_state): found = True return @@ -1410,6 +1409,7 @@ def can_reach_smith(world, player): found = False explored_regions = list() + starting_flute = any(map(lambda i: i.name == 'Ocarina (Activated)' and i.player == player, world.precollected_items)) if not world.is_bombshop_start(player): start_region = 'Links House' else: @@ -1494,7 +1494,7 @@ def build_accessible_region_list(world, start_region, player, build_copy_world=F region = base_world.get_region(region_name, player) for exit in region.exits: if exit.connected_region is not None: - if any(map(lambda i: i.name == 'Ocarina (Activated)' and i.player == player, base_world.precollected_items)) and exit.spot_type == 'Flute': + if starting_flute and exit.spot_type == 'Flute': fluteregion = exit.connected_region for flutespot in fluteregion.exits: if flutespot.connected_region and flutespot.connected_region.name not in explored_regions: @@ -1504,7 +1504,7 @@ def build_accessible_region_list(world, start_region, player, build_copy_world=F or (cross_world and exit.name in (OWExitTypes['Portal'] + OWExitTypes['Mirror']))) \ and (not region_rules or exit.access_rule(blank_state)) \ and (not restrictive_follower or exit.spot_type != 'OWG') \ - and (not ignore_ledges or exit.name not in (OWExitTypes['Ledge'] + OWExitTypes['OWG'])): + and (not ignore_ledges or not (exit.spot_type == 'OWG' or exit.name in OWExitTypes['Ledge'])): explore_region(exit.connected_region.name, exit.connected_region) if build_copy_world: @@ -1520,6 +1520,7 @@ def build_accessible_region_list(world, start_region, player, build_copy_world=F if base_world.mode[player] == 'standard': blank_state.collect(ItemFactory('Zelda Delivered', player), True) explored_regions = list() + starting_flute = any(map(lambda i: i.name == 'Ocarina (Activated)' and i.player == player, base_world.precollected_items)) explore_region(start_region) return explored_regions diff --git a/source/overworld/EntranceShuffle2.py b/source/overworld/EntranceShuffle2.py index d693eae6..e3e15854 100644 --- a/source/overworld/EntranceShuffle2.py +++ b/source/overworld/EntranceShuffle2.py @@ -878,6 +878,8 @@ def get_accessible_entrances(start_region, avail, assumed_inventory=[], cross_wo blank_state = CollectionState(base_world) if base_world.mode[avail.player] == 'standard': blank_state.collect(ItemFactory('Zelda Delivered', avail.player), True) + if base_world.logic[avail.player] in ['owglitches', 'hybridglitches', 'nologic']: + blank_state.collect(ItemFactory('Pegasus Boots', avail.player), True) for item in assumed_inventory: blank_state.collect(ItemFactory(item, avail.player), True)