diff --git a/DoorShuffle.py b/DoorShuffle.py index 635923ef..c8ccb54d 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -1861,12 +1861,12 @@ def check_required_paths(paths, world, player): if dungeon_name in world.dungeon_layouts[player].keys(): builder = world.dungeon_layouts[player][dungeon_name] if len(paths[dungeon_name]) > 0: - states_to_explore = {} + states_to_explore = defaultdict(list) for path in paths[dungeon_name]: if type(path) is tuple: states_to_explore[tuple([path[0]])] = path[1] else: - states_to_explore[tuple(builder.path_entrances)] = path + states_to_explore[tuple(builder.path_entrances)].append(path) cached_initial_state = None for start_regs, dest_regs in states_to_explore.items(): if type(dest_regs) is not list: @@ -1935,13 +1935,14 @@ def check_if_regions_visited(state, check_paths): if state.visited_at_all(region_target): valid = True break - else: + elif not breaking_region: breaking_region = region_target return valid, breaking_region def check_for_pinball_fix(state, bad_region, world, player): pinball_region = world.get_region('Skull Pinball', player) + # todo: lobby shuffle if bad_region.name == 'Skull 2 West Lobby' and state.visited_at_all(pinball_region): # revisit this for entrance shuffle door = world.get_door('Skull Pinball WS', player) room = world.get_room(door.roomIndex, player) diff --git a/DungeonGenerator.py b/DungeonGenerator.py index 6d70eada..7c52e0f7 100644 --- a/DungeonGenerator.py +++ b/DungeonGenerator.py @@ -1575,6 +1575,8 @@ def assign_crystal_switch_sectors(dungeon_map, crystal_switches, crystal_barrier valid = global_pole.is_valid_choice(dungeon_map, builder_choice, test_set) assign_sector(switch_choice, builder_choice, crystal_switches, global_pole) return crystal_switches + if len(crystal_switches) == 0: + raise GenerationException('No crystal switches to assign') sector_list = list(crystal_switches) choices = random.sample(sector_list, k=len(population)) for i, choice in enumerate(choices): diff --git a/Main.py b/Main.py index aaed4a61..4b34e9e2 100644 --- a/Main.py +++ b/Main.py @@ -25,7 +25,7 @@ from Fill import distribute_items_cutoff, distribute_items_staleness, distribute from ItemList import generate_itempool, difficulties, fill_prizes, fill_specific_items from Utils import output_path, parse_player_names -__version__ = '0.2.0.18u' +__version__ = '0.2.0.19u' class EnemizerError(RuntimeError): pass diff --git a/Rom.py b/Rom.py index 620470e9..f495b32d 100644 --- a/Rom.py +++ b/Rom.py @@ -27,7 +27,7 @@ from EntranceShuffle import door_addresses, exit_ids JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '185a0f74ab0e2ce8899c8d7d309ca68c' +RANDOMIZERBASEHASH = '7264ffb7c430dde5d6bfe6030b79a575' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index 61323175..c0d427e8 100644 Binary files a/data/base2current.bps and b/data/base2current.bps differ