Extended new entrance/exit pool to all other connect functions

This commit is contained in:
codemann8
2021-10-02 13:38:30 -05:00
parent ae5a7906a6
commit 9bff9e010d

View File

@@ -5,11 +5,12 @@ from collections import defaultdict
entrance_pool = list()
exit_pool = list()
ignore_pool = False
def link_entrances(world, player):
invFlag = world.mode[player] == 'inverted'
global entrance_pool, exit_pool
global entrance_pool, exit_pool, ignore_pool
entrance_pool = Entrance_Pool_Base.copy()
exit_pool = Exit_Pool_Base.copy()
default_drops = default_drop_connections.copy()
@@ -18,16 +19,16 @@ def link_entrances(world, player):
# modifications to lists
if invFlag == (0x1b in world.owswaps[player][0] and world.owMixed[player]):
default_drops.append(tuple(('Pyramid Hole', 'Pyramid')))
default_dropexits.append(tuple(('Pyramid Entrance', 'Pyramid Exit')))
drop_connections.append(tuple(('Pyramid Hole', 'Pyramid')))
dropexit_connections.append(tuple(('Pyramid Entrance', 'Pyramid Exit')))
connect_simple(world, 'Other World S&Q', 'Pyramid Area', player)
else:
entrance_pool.remove('Pyramid Hole')
entrance_pool.add('Inverted Pyramid Hole')
entrance_pool.remove('Pyramid Entrance')
entrance_pool.add('Inverted Pyramid Entrance')
default_drops.append(tuple(('Inverted Pyramid Hole', 'Pyramid')))
default_dropexits.append(tuple(('Inverted Pyramid Entrance', 'Pyramid Exit')))
drop_connections.append(tuple(('Inverted Pyramid Hole', 'Pyramid')))
dropexit_connections.append(tuple(('Inverted Pyramid Entrance', 'Pyramid Exit')))
connect_simple(world, 'Other World S&Q', 'Hyrule Castle Ledge', player)
Dungeon_Exits = Dungeon_Exits_Base.copy()
@@ -54,18 +55,20 @@ def link_entrances(world, player):
# if we do not shuffle, set default connections
if world.shuffle[player] in ['vanilla', 'dungeonssimple', 'dungeonsfull']:
for entrancename, exitname in default_connections + default_drops + default_item_connections + default_shop_connections:
for entrancename, exitname in default_connections + drop_connections + default_item_connections + default_shop_connections:
connect_logical(world, entrancename, exitname, player, False)
for entrancename, exitname in default_connector_connections + default_dropexits:
for entrancename, exitname in default_connector_connections + dropexit_connections:
connect_logical(world, entrancename, exitname, player, True)
if not invFlag:
for entrancename, exitname in open_default_connections:
connect_logical(world, entrancename, exitname, player, True)
ignore_pool = True
connect_exit(world, 'Chris Houlihan Room Exit', 'Links House', player)
else:
for entrancename, exitname in inverted_default_connections:
connect_logical(world, entrancename, exitname, player, True)
ignore_pool = True
connect_exit(world, 'Chris Houlihan Room Exit', 'Big Bomb Shop', player)
# inverted entrance mods
@@ -83,6 +86,7 @@ def link_entrances(world, player):
elif invFlag != (0x0a in world.owswaps[player][0] and world.owMixed[player]) and \
invFlag == (0x03 in world.owswaps[player][0] and world.owMixed[player]):
connect_two_way(world, 'Bumper Cave (Top)', 'Death Mountain Return Cave Exit (West)', player)
ignore_pool = False
# dungeon entrance shuffle
if world.shuffle[player] == 'vanilla':
@@ -153,9 +157,6 @@ def link_entrances(world, player):
old_man_entrances.remove(links_house)
if invFlag:
if links_house in old_man_entrances:
old_man_entrances.remove(links_house)
# place dark sanc
sanc_doors = [door for door in Inverted_Dark_Sanctuary_Doors if door in bomb_shop_doors]
sanc_door = random.choice(sanc_doors)
@@ -185,6 +186,7 @@ def link_entrances(world, player):
connect_two_way(world, old_man_entrance if invFlag == (0x0a in world.owswaps[player][0] and world.owMixed[player]) else 'Bumper Cave (Bottom)', 'Old Man Cave Exit (West)', player)
connect_two_way(world, old_man_exit, 'Old Man Cave Exit (East)', player)
if invFlag and old_man_exit == 'Spike Cave':
bomb_shop_doors.remove('Spike Cave')
bomb_shop_doors.extend(old_man_entrances)
@@ -245,10 +247,7 @@ def link_entrances(world, player):
if world.mode[player] == 'standard' or not world.shufflelinks[player]:
links_house = 'Links House'
else:
if not invFlag:
links_house_doors = [i for i in lw_entrances if i not in Isolated_LH_Doors_Open]
else:
links_house_doors = [i for i in lw_entrances if i not in Inverted_Dark_Sanctuary_Doors + Isolated_LH_Doors]
links_house_doors = [i for i in LW_Single_Cave_Doors if i not in isolated_entrances + ([] if not invFlag else Inverted_Dark_Sanctuary_Doors)]
links_house = random.choice(links_house_doors)
connect_two_way(world, links_house, 'Links House Exit', player)
connect_exit(world, 'Chris Houlihan Room Exit', links_house, player) # should always match link's house, except for plandos
@@ -404,10 +403,7 @@ def link_entrances(world, player):
if world.mode[player] == 'standard' or not world.shufflelinks[player]:
links_house = 'Links House'
else:
if not invFlag:
links_house_doors = [i for i in lw_entrances + lw_must_exits if i not in Isolated_LH_Doors_Open]
else:
links_house_doors = [i for i in dw_entrances if i not in Inverted_Dark_Sanctuary_Doors + Isolated_LH_Doors]
links_house_doors = [i for i in LW_Single_Cave_Doors if i not in isolated_entrances + ([] if not invFlag else Inverted_Dark_Sanctuary_Doors)]
links_house = random.choice(links_house_doors)
connect_two_way(world, links_house, 'Links House Exit', player)
connect_exit(world, 'Chris Houlihan Room Exit', links_house, player) # should always match link's house, except for plandos
@@ -589,10 +585,7 @@ def link_entrances(world, player):
if world.mode[player] == 'standard' or not world.shufflelinks[player]:
links_house = 'Links House'
else:
if not invFlag:
links_house_doors = [i for i in entrances + must_exits if i not in Isolated_LH_Doors_Open]
else:
links_house_doors = [i for i in entrances + must_exits if i not in Inverted_Dark_Sanctuary_Doors + Isolated_LH_Doors]
links_house_doors = [i for i in LW_Single_Cave_Doors if i not in isolated_entrances + ([] if not invFlag else Inverted_Dark_Sanctuary_Doors)]
if not invFlag and world.doorShuffle[player] == 'crossed' and world.intensity[player] >= 3:
exclusions = DW_Entrances + DW_Dungeon_Entrances + DW_Single_Cave_Doors\
+ DW_Entrances_Must_Exit + DW_Dungeon_Entrances_Must_Exit + ['Ganons Tower']
@@ -662,6 +655,7 @@ def link_entrances(world, player):
connect_doors(world, entrances, door_targets, player)
elif world.shuffle[player] == 'insanity':
# beware ye who enter here
ignore_pool = True
if not invFlag:
entrances_must_exits = DW_Entrances_Must_Exit + DW_Dungeon_Entrances_Must_Exit + LW_Dungeon_Entrances_Must_Exit + ['Skull Woods Second Section Door (West)']
@@ -781,10 +775,7 @@ def link_entrances(world, player):
if world.mode[player] == 'standard' or not world.shufflelinks[player]:
links_house = 'Links House'
else:
if not invFlag:
links_house_doors = [i for i in doors if i not in Isolated_LH_Doors_Open]
else:
links_house_doors = [i for i in doors if i not in Inverted_Dark_Sanctuary_Doors + Isolated_LH_Doors]
links_house_doors = [i for i in LW_Single_Cave_Doors if i not in isolated_entrances + ([] if not invFlag else Inverted_Dark_Sanctuary_Doors)]
if not invFlag and world.doorShuffle[player] == 'crossed' and world.intensity[player] >= 3:
exclusions = DW_Entrances + DW_Dungeon_Entrances + DW_Single_Cave_Doors \
+ DW_Entrances_Must_Exit + DW_Dungeon_Entrances_Must_Exit + ['Ganons Tower']
@@ -906,12 +897,14 @@ def connect_simple(world, exitname, regionname, player):
def connect_logical(world, entrancename, exitname, player, isTwoWay = False):
if entrancename not in entrance_pool:
x = 9
if exitname not in exit_pool:
x = 9
assert entrancename in entrance_pool, 'Entrance not in pool: ' + entrancename
assert exitname in exit_pool, 'Exit not in pool: ' + exitname
if not ignore_pool:
if entrancename not in entrance_pool:
x = 9
if exitname not in exit_pool:
x = 9
assert entrancename in entrance_pool, 'Entrance not in pool: ' + entrancename
assert exitname in exit_pool, 'Exit not in pool: ' + exitname
try:
region = world.get_region(exitname, player)
exit = None
@@ -924,11 +917,20 @@ def connect_logical(world, entrancename, exitname, player, isTwoWay = False):
region = world.get_entrance(entrancename, player).parent_region
connect_simple(world, exitname, region.name, player)
entrance_pool.remove(entrancename)
exit_pool.remove(exitname)
if not ignore_pool:
entrance_pool.remove(entrancename)
exit_pool.remove(exitname)
def connect_entrance(world, entrancename, exitname, player):
if not ignore_pool:
if entrancename not in entrance_pool:
x = 9
if exitname not in exit_pool:
x = 9
assert entrancename in entrance_pool, 'Entrance not in pool: ' + entrancename
assert exitname in exit_pool, 'Exit not in pool: ' + exitname
entrance = world.get_entrance(entrancename, player)
# check if we got an entrance or a region to connect to
try:
@@ -947,10 +949,22 @@ def connect_entrance(world, entrancename, exitname, player):
entrance.connect(region, addresses, target)
if not ignore_pool:
entrance_pool.remove(entrancename)
exit_pool.remove(exitname)
if world.shuffle[player] not in ['vanilla', 'dungeonssimple', 'dungeonsfull']:
world.spoiler.set_entrance(entrance.name, exit.name if exit is not None else region.name, 'entrance', player)
def connect_exit(world, exitname, entrancename, player):
if not (ignore_pool or exitname == 'Chris Houlihan Room Exit'):
if entrancename not in entrance_pool:
x = 9
if exitname not in exit_pool:
x = 9
assert entrancename in entrance_pool, 'Entrance not in pool: ' + entrancename
assert exitname in exit_pool, 'Exit not in pool: ' + exitname
entrance = world.get_entrance(entrancename, player)
exit = world.get_entrance(exitname, player)
@@ -960,11 +974,23 @@ def connect_exit(world, exitname, entrancename, player):
exit.connect(entrance.parent_region, door_addresses[entrance.name][1], exit_ids[exit.name][1])
if not (ignore_pool or exitname == 'Chris Houlihan Room Exit'):
entrance_pool.remove(entrancename)
exit_pool.remove(exitname)
if world.shuffle[player] not in ['vanilla', 'dungeonssimple', 'dungeonsfull']:
world.spoiler.set_entrance(entrance.name, exit.name, 'exit', player)
def connect_two_way(world, entrancename, exitname, player):
if not ignore_pool:
if entrancename not in entrance_pool:
x = 9
if exitname not in exit_pool:
x = 9
assert entrancename in entrance_pool, 'Entrance not in pool: ' + entrancename
assert exitname in exit_pool, 'Exit not in pool: ' + exitname
entrance = world.get_entrance(entrancename, player)
exit = world.get_entrance(exitname, player)
@@ -977,6 +1003,10 @@ def connect_two_way(world, entrancename, exitname, player):
entrance.connect(exit.parent_region, door_addresses[entrance.name][0], exit_ids[exit.name][0])
exit.connect(entrance.parent_region, door_addresses[entrance.name][1], exit_ids[exit.name][1])
if not ignore_pool:
entrance_pool.remove(entrancename)
exit_pool.remove(exitname)
if world.shuffle[player] not in ['vanilla', 'dungeonssimple', 'dungeonsfull']:
world.spoiler.set_entrance(entrance.name, exit.name, 'both', player)