More code for Swapped ER implementation
This commit is contained in:
@@ -209,6 +209,10 @@ def do_main_shuffle(entrances, exits, avail, mode_def):
|
|||||||
if not avail.coupled:
|
if not avail.coupled:
|
||||||
avail.decoupled_entrances.remove('Agahnims Tower')
|
avail.decoupled_entrances.remove('Agahnims Tower')
|
||||||
avail.decoupled_exits.remove('Ganons Tower Exit')
|
avail.decoupled_exits.remove('Ganons Tower Exit')
|
||||||
|
if avail.swapped:
|
||||||
|
connect_swap('Agahnims Tower', 'Ganons Tower Exit', avail)
|
||||||
|
entrances.remove('Ganons Tower')
|
||||||
|
exits.remove('Agahnims Tower Exit')
|
||||||
elif 'Ganons Tower' in entrances:
|
elif 'Ganons Tower' in entrances:
|
||||||
connect_two_way('Ganons Tower', 'Ganons Tower Exit', avail)
|
connect_two_way('Ganons Tower', 'Ganons Tower Exit', avail)
|
||||||
entrances.remove('Ganons Tower')
|
entrances.remove('Ganons Tower')
|
||||||
@@ -384,7 +388,10 @@ def do_old_man_cave_exit(entrances, exits, avail, cross_world):
|
|||||||
random.shuffle(om_cave_options)
|
random.shuffle(om_cave_options)
|
||||||
om_cave_choice = None
|
om_cave_choice = None
|
||||||
while not om_cave_choice:
|
while not om_cave_choice:
|
||||||
om_cave_choice = om_cave_options.pop()
|
if not len(om_cave_options) and 'Old Man Cave (East)' in entrances:
|
||||||
|
om_cave_choice = 'Old Man Cave (East)'
|
||||||
|
else:
|
||||||
|
om_cave_choice = om_cave_options.pop()
|
||||||
choice_region = avail.world.get_entrance(om_cave_choice, avail.player).parent_region.name
|
choice_region = avail.world.get_entrance(om_cave_choice, avail.player).parent_region.name
|
||||||
if 'West Death Mountain (Bottom)' not in build_accessible_region_list(avail.world, choice_region, avail.player, True, True):
|
if 'West Death Mountain (Bottom)' not in build_accessible_region_list(avail.world, choice_region, avail.player, True, True):
|
||||||
om_cave_choice = None
|
om_cave_choice = None
|
||||||
@@ -1076,15 +1083,18 @@ def do_cross_world_connectors(entrances, caves, avail):
|
|||||||
if swap_ent:
|
if swap_ent:
|
||||||
entrances.remove(swap_ent)
|
entrances.remove(swap_ent)
|
||||||
if chosen_entrance not in single_entrance_map:
|
if chosen_entrance not in single_entrance_map:
|
||||||
for c in caves:
|
if swap_ext in cave:
|
||||||
if swap_ext == c:
|
cave.remove(swap_ext)
|
||||||
caves.remove(swap_ext)
|
else:
|
||||||
break
|
for c in caves:
|
||||||
if swap_ext in c:
|
if swap_ext == c:
|
||||||
c.remove(swap_ext)
|
caves.remove(swap_ext)
|
||||||
if len(c) == 0:
|
break
|
||||||
caves.remove(c)
|
if not isinstance(c, str) and swap_ext in c:
|
||||||
break
|
c.remove(swap_ext)
|
||||||
|
if len(c) == 0:
|
||||||
|
caves.remove(c)
|
||||||
|
break
|
||||||
|
|
||||||
|
|
||||||
def do_fixed_shuffle(avail, entrance_list):
|
def do_fixed_shuffle(avail, entrance_list):
|
||||||
@@ -1297,7 +1307,8 @@ def do_mandatory_connections(avail, entrances, cave_options, must_exit):
|
|||||||
invalid_connections[entrance] = set()
|
invalid_connections[entrance] = set()
|
||||||
if entrance in must_exit:
|
if entrance in must_exit:
|
||||||
must_exit.remove(entrance)
|
must_exit.remove(entrance)
|
||||||
entrances.append(entrance)
|
if entrance not in entrances:
|
||||||
|
entrances.append(entrance)
|
||||||
if avail.swapped:
|
if avail.swapped:
|
||||||
swap_forbidden = [e for e in entrances if combine_map[e] in must_exit]
|
swap_forbidden = [e for e in entrances if combine_map[e] in must_exit]
|
||||||
for e in swap_forbidden:
|
for e in swap_forbidden:
|
||||||
@@ -1345,7 +1356,10 @@ def do_mandatory_connections(avail, entrances, cave_options, must_exit):
|
|||||||
# all caves are sorted so that the last exit is always reachable
|
# all caves are sorted so that the last exit is always reachable
|
||||||
rnd_cave = list(cave)
|
rnd_cave = list(cave)
|
||||||
shuffle_connector_exits(rnd_cave) # should be the same as unbiasing some entrances...
|
shuffle_connector_exits(rnd_cave) # should be the same as unbiasing some entrances...
|
||||||
entrances.remove(exit)
|
if avail.swapped and exit in swap_forbidden:
|
||||||
|
swap_forbidden.remove(exit)
|
||||||
|
else:
|
||||||
|
entrances.remove(exit)
|
||||||
connect_two_way(exit, rnd_cave[-1], avail)
|
connect_two_way(exit, rnd_cave[-1], avail)
|
||||||
if avail.swapped:
|
if avail.swapped:
|
||||||
swap_ent, _ = connect_cave_swap(exit, rnd_cave[-1], cave)
|
swap_ent, _ = connect_cave_swap(exit, rnd_cave[-1], cave)
|
||||||
@@ -1546,6 +1560,8 @@ def connect_swap(entrance, exit, avail):
|
|||||||
swap_exit = combine_map[entrance]
|
swap_exit = combine_map[entrance]
|
||||||
if swap_exit != exit:
|
if swap_exit != exit:
|
||||||
swap_entrance = next(e for e, x in combine_map.items() if x == exit)
|
swap_entrance = next(e for e, x in combine_map.items() if x == exit)
|
||||||
|
if swap_entrance in ['Pyramid Entrance', 'Pyramid Hole'] and avail.world.is_tile_swapped(0x1b, avail.player):
|
||||||
|
swap_entrance = 'Inverted ' + swap_entrance
|
||||||
if entrance in entrance_map:
|
if entrance in entrance_map:
|
||||||
connect_two_way(swap_entrance, swap_exit, avail)
|
connect_two_way(swap_entrance, swap_exit, avail)
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user