-Disallowed Swamp Lobby in Hyrule Castle in Standard mode
-Prevent defeating Aga 1 before Zelda is delivered to the Sanctuary. (He can't take damage) -Fix for Ice Jelly room when going backward and enemizer is on -Fix for inverted - don't start as a bunny in Dark Sanctuary -Fix for non-ER Inverted with Lobby shuffle. Aga Tower's exit works properly now.
This commit is contained in:
@@ -357,6 +357,7 @@ def choose_portals(world, player):
|
||||
if world.doorShuffle[player] in ['basic', 'crossed']:
|
||||
cross_flag = world.doorShuffle[player] == 'crossed'
|
||||
bk_shuffle = world.bigkeyshuffle[player]
|
||||
std_flag = world.mode[player] == 'standard'
|
||||
# roast incognito doors
|
||||
world.get_room(0x60, player).delete(5)
|
||||
world.get_room(0x60, player).change(2, DoorKind.DungeonEntrance)
|
||||
@@ -369,13 +370,14 @@ def choose_portals(world, player):
|
||||
region_map = defaultdict(list)
|
||||
reachable_portals = []
|
||||
inaccessible_portals = []
|
||||
hc_flag = std_flag and dungeon == 'Hyrule Castle'
|
||||
for portal in portal_list:
|
||||
placeholder = world.get_region(portal + ' Portal', player)
|
||||
portal_region = placeholder.exits[0].connected_region
|
||||
name = portal_region.name
|
||||
if portal_region.type == RegionType.LightWorld:
|
||||
world.get_portal(portal, player).light_world = True
|
||||
if name in world.inaccessible_regions[player]:
|
||||
if name in world.inaccessible_regions[player] or (hc_flag and portal != 'Hyrule Castle South'):
|
||||
name_key = 'Desert Ledge' if name == 'Desert Palace Entrance (North) Spot' else name
|
||||
region_map[name_key].append(portal)
|
||||
inaccessible_portals.append(portal)
|
||||
@@ -397,7 +399,8 @@ def choose_portals(world, player):
|
||||
portal_assignment = defaultdict(list)
|
||||
for dungeon, info in info_map.items():
|
||||
outstanding_portals = list(dungeon_portals[dungeon])
|
||||
if dungeon == 'Hyrule Castle' and world.mode[player] == 'standard':
|
||||
hc_flag = std_flag and dungeon == 'Hyrule Castle'
|
||||
if hc_flag:
|
||||
sanc = world.get_portal('Sanctuary', player)
|
||||
sanc.destination = True
|
||||
clean_up_portal_assignment(portal_assignment, dungeon, sanc, master_door_list, outstanding_portals)
|
||||
@@ -425,7 +428,7 @@ def choose_portals(world, player):
|
||||
the_rest = info.total - len(portal_assignment[dungeon])
|
||||
for i in range(0, the_rest):
|
||||
candidates = find_portal_candidates(master_door_list, dungeon, crossed=cross_flag,
|
||||
bk_shuffle=bk_shuffle)
|
||||
bk_shuffle=bk_shuffle, standard=hc_flag)
|
||||
choice, portal = assign_portal(candidates, outstanding_portals, world, player)
|
||||
clean_up_portal_assignment(portal_assignment, dungeon, portal, master_door_list, outstanding_portals)
|
||||
|
||||
@@ -536,23 +539,20 @@ def disconnect_portal(portal, world, player):
|
||||
chosen_door.entranceFlag = False
|
||||
|
||||
|
||||
def find_portal_candidates(door_list, dungeon, need_passage=False, dead_end_allowed=False, crossed=False, bk_shuffle=False):
|
||||
filter_list = [x for x in door_list if bk_shuffle or not x.bk_shuffle_req]
|
||||
if need_passage:
|
||||
if crossed:
|
||||
return [x for x in filter_list if x.passage and (x.dungeonLink is None or x.entrance.parent_region.dungeon.name == dungeon)]
|
||||
else:
|
||||
return [x for x in filter_list if x.passage and x.entrance.parent_region.dungeon.name == dungeon]
|
||||
elif dead_end_allowed:
|
||||
if crossed:
|
||||
return [x for x in filter_list if x.dungeonLink is None or x.entrance.parent_region.dungeon.name == dungeon]
|
||||
else:
|
||||
return [x for x in filter_list if x.entrance.parent_region.dungeon.name == dungeon]
|
||||
def find_portal_candidates(door_list, dungeon, need_passage=False, dead_end_allowed=False, crossed=False,
|
||||
bk_shuffle=False, standard=False):
|
||||
ret = [x for x in door_list if bk_shuffle or not x.bk_shuffle_req]
|
||||
if crossed:
|
||||
ret = [x for x in ret if not x.dungeonLink or x.entrance.parent_region.dungeon.name == dungeon]
|
||||
else:
|
||||
if crossed:
|
||||
return [x for x in filter_list if (not x.dungeonLink or x.entrance.parent_region.dungeon.name == dungeon) and not x.deadEnd]
|
||||
else:
|
||||
return [x for x in filter_list if x.entrance.parent_region.dungeon.name == dungeon and not x.deadEnd]
|
||||
ret = [x for x in ret if x.entrance.parent_region.dungeon.name == dungeon]
|
||||
if need_passage:
|
||||
ret = [x for x in ret if x.passage]
|
||||
if not dead_end_allowed:
|
||||
ret = [x for x in ret if not x.deadEnd]
|
||||
if standard:
|
||||
ret = [x for x in ret if not x.standard_restrict]
|
||||
return ret
|
||||
|
||||
|
||||
def assign_portal(candidates, possible_portals, world, player):
|
||||
|
||||
Reference in New Issue
Block a user