From 4aff460b22b1fe1af0ec9997b3d447b1aaa4f1d9 Mon Sep 17 00:00:00 2001 From: aerinon Date: Tue, 30 Aug 2022 13:51:12 -0600 Subject: [PATCH] Fix for crossed doors with ambrosia Fix for ER + OWG in crossed doors Fix for Small Key shuffle --- DoorShuffle.py | 11 ++++++++--- EntranceShuffle.py | 5 +++-- Fill.py | 7 ++++--- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/DoorShuffle.py b/DoorShuffle.py index ecb1b503..380193d5 100644 --- a/DoorShuffle.py +++ b/DoorShuffle.py @@ -988,11 +988,16 @@ def cross_dungeon(world, player): paths = determine_required_paths(world, player) check_required_paths(paths, world, player) + hc_compass = ItemFactory('Compass (Escape)', player) + at_compass = ItemFactory('Compass (Agahnims Tower)', player) + at_map = ItemFactory('Map (Agahnims Tower)', player) + if world.restrict_boss_items[player] != 'none': + hc_compass.advancement = at_compass.advancement = at_map.advancement = True hc = world.get_dungeon('Hyrule Castle', player) - hc.dungeon_items.append(ItemFactory('Compass (Escape)', player)) + hc.dungeon_items.append(hc_compass) at = world.get_dungeon('Agahnims Tower', player) - at.dungeon_items.append(ItemFactory('Compass (Agahnims Tower)', player)) - at.dungeon_items.append(ItemFactory('Map (Agahnims Tower)', player)) + at.dungeon_items.append(at_compass) + at.dungeon_items.append(at_map) assign_cross_keys(dungeon_builders, world, player) all_dungeon_items_cnt = len(list(y for x in world.dungeons if x.player == player for y in x.all_items)) diff --git a/EntranceShuffle.py b/EntranceShuffle.py index 82aa6a75..f67c089b 100644 --- a/EntranceShuffle.py +++ b/EntranceShuffle.py @@ -63,9 +63,10 @@ def link_entrances(world, player): connect_caves(world, lw_entrances, [], hyrule_castle_exits, player) elif world.doorShuffle[player] != 'vanilla': # sanc is in light world, so must all of HC if door shuffle is on - connect_mandatory_exits(world, lw_entrances, - [('Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)', 'Hyrule Castle Exit (South)')], + hyrule_castle_exits = [('Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)', 'Hyrule Castle Exit (South)')] + connect_mandatory_exits(world, lw_entrances, hyrule_castle_exits, list(LW_Dungeon_Entrances_Must_Exit), player) + connect_caves(world, lw_entrances, [], hyrule_castle_exits, player) else: connect_mandatory_exits(world, lw_entrances, dungeon_exits, list(LW_Dungeon_Entrances_Must_Exit), player) connect_mandatory_exits(world, dw_entrances, dungeon_exits, list(DW_Dungeon_Entrances_Must_Exit), player) diff --git a/Fill.py b/Fill.py index e2ea4726..5a414c98 100644 --- a/Fill.py +++ b/Fill.py @@ -48,9 +48,10 @@ def fill_dungeons_restrictive(world, shuffled_locations): bigs, smalls, others = [], [], [] for i in dungeon_items: (bigs if i.bigkey else smalls if i.smallkey else others).append(i) + unplaced_smalls = list(smalls) for i in world.itempool: if i.smallkey and world.keyshuffle[i.player]: - smalls.append(i) + unplaced_smalls.append(i) def fill(base_state, items, key_pool): fill_restrictive(world, base_state, shuffled_locations, items, key_pool, True) @@ -59,12 +60,12 @@ def fill_dungeons_restrictive(world, shuffled_locations): big_state_base = all_state_base.copy() for x in smalls + others: big_state_base.collect(x, True) - fill(big_state_base, bigs, smalls) + fill(big_state_base, bigs, unplaced_smalls) random.shuffle(shuffled_locations) small_state_base = all_state_base.copy() for x in others: small_state_base.collect(x, True) - fill(small_state_base, smalls, list(smalls)) + fill(small_state_base, smalls, unplaced_smalls) random.shuffle(shuffled_locations) fill(all_state_base, others, None)