feat: updated maze race/hobo clips
refactor: bunny pocket assumes a connector/dungeon_revive entrance is available, for now fix: mirrorless_moat_rule no longer allows flippers in swamp fix: problems from merge
This commit is contained in:
@@ -115,81 +115,77 @@ open_non_mandatory_exits = [
|
||||
|
||||
|
||||
# Special Light World region exits that require boots clips.
|
||||
|
||||
inverted_boots_clip_exits_lw = [
|
||||
("Light World DMA Clip Spot", "Light World", "West Death Mountain (Bottom)"),
|
||||
("Hera Ascent", "West Death Mountain (Bottom)", "West Death Mountain (Top)"),
|
||||
("Death Mountain Return Ledge Clip Spot", "Light World", "Death Mountain Return Ledge"),
|
||||
("Death Mountain Entrance Clip Spot", "Light World", "Death Mountain Entrance"),
|
||||
("Death Mountain Glitched Bridge", "West Death Mountain (Bottom)", "East Death Mountain (Top)"),
|
||||
("Zora Descent Clip Spot", "East Death Mountain (Top)", "Zoras Domain"),
|
||||
("Desert Northern Cliffs", "Light World", "Desert Northern Cliffs"),
|
||||
("Desert Ledge Dropdown", "Desert Northern Cliffs", "Desert Ledge"),
|
||||
("Desert Palace Entrance Dropdown", "Desert Northern Cliffs", "Desert Palace Entrance (North) Spot"),
|
||||
("Lake Hylia Island Clip Spot", "Light World", "Lake Hylia Island"),
|
||||
("Death Mountain Descent", "West Death Mountain (Bottom)", "Light World"),
|
||||
("Kings Grave Clip Spot", "West Death Mountain (Bottom)", "Kings Grave Area"),
|
||||
boots_clip_exits_lw = [
|
||||
('Lumberjack DMA Clip', 'Lumberjack Area', 'West Death Mountain (Bottom)'),
|
||||
('Spectacle Rock Clip', 'West Death Mountain (Top)', 'Spectacle Rock Ledge'),
|
||||
('Hera Ascent Clip', 'West Death Mountain (Bottom)', 'West Death Mountain (Top)'),
|
||||
('Death Mountain Glitched Bridge Clip', 'West Death Mountain (Bottom)', 'East Death Mountain (Top East)'),
|
||||
('Sanctuary DMD Clip', 'West Death Mountain (Bottom)', 'Sanctuary Area'),
|
||||
('Graveyard Ledge Clip', 'West Death Mountain (Bottom)', 'Graveyard Ledge'),
|
||||
('Kings Grave Clip', 'West Death Mountain (Bottom)', 'Kings Grave Area'),
|
||||
('Floating Island Clip', 'East Death Mountain (Top East)', 'Death Mountain Floating Island'),
|
||||
('Zora DMD Clip', 'Death Mountain TR Pegs Area', 'Zoras Domain'),
|
||||
('TR Pegs Ledge Clip', 'Death Mountain TR Pegs Area', 'Death Mountain TR Pegs Ledge'),
|
||||
('Mountain Pass Ledge Clip', 'Mountain Pass Area', 'Mountain Pass Ledge'),
|
||||
('Mountain Pass Entry Clip', 'Kakariko Pond Area', 'Mountain Pass Entry'),
|
||||
('Bat Cave River Clip', 'Blacksmith Area', 'Blacksmith Ledge'),
|
||||
('Desert Keep Clip', 'Maze Race Area', 'Desert Ledge Keep'),
|
||||
('Desert Ledge Clip', 'Maze Race Area', 'Desert Ledge'),
|
||||
('Maze Race Prize Clip', 'Maze Race Area', 'Maze Race Prize'),
|
||||
('Stone Bridge To Cliff Clip', 'Stone Bridge South Area', 'Central Cliffs'),
|
||||
('Hobo Clip', 'Stone Bridge South Area', 'Stone Bridge Water'),
|
||||
('Bombos Tablet Clip', 'Desert Area', 'Bombos Tablet Ledge'),
|
||||
('Desert Teleporter Clip', 'Desert Area', 'Desert Teleporter Ledge'),
|
||||
('Cave 45 Clip', 'Flute Boy Approach Area', 'Cave 45 Ledge'),
|
||||
('Desert Northern Cliffs Clip', 'Flute Boy Approach Area', 'Desert Northern Cliffs')
|
||||
]
|
||||
|
||||
open_boots_clip_exits_lw = [
|
||||
("Graveyard Ledge Clip Spot", "West Death Mountain (Bottom)", "Graveyard Ledge"),
|
||||
("Desert Ledge (Northeast) Dropdown", "Desert Northern Cliffs", "Desert Checkerboard Ledge"),
|
||||
("Spectacle Rock Clip Spot", "West Death Mountain (Top)", "Spectacle Rock"),
|
||||
("Bombos Tablet Clip Spot", "Light World", "Bombos Tablet Ledge"),
|
||||
("Floating Island Clip Spot", "East Death Mountain (Top)", "Death Mountain Floating Island"),
|
||||
("Cave 45 Clip Spot", "Light World", "Cave 45 Ledge"),
|
||||
] + inverted_boots_clip_exits_lw
|
||||
|
||||
# Special Dark World region exits that require boots clips.
|
||||
boots_clip_exits_dw = [
|
||||
("Dark World DMA Clip Spot", "West Dark World", "West Dark Death Mountain (Bottom)"),
|
||||
("Bumper Cave Ledge Clip Spot", "West Dark World", "Bumper Cave Ledge"),
|
||||
("Bumper Cave Entrance Clip Spot", "West Dark World", "Bumper Cave Entrance"),
|
||||
("Catfish Descent", "Dark Death Mountain (Top)", "Catfish Area"),
|
||||
("Hammer Pegs River Clip Spot", "East Dark World", "Hammer Peg Area"),
|
||||
("Dark Lake Hylia Ledge Clip Spot", "East Dark World", "Southeast Dark World"),
|
||||
("Dark Desert Cliffs Clip Spot", "South Dark World", "Dark Desert"),
|
||||
("DW Floating Island Clip Spot", "East Dark Death Mountain (Bottom)", "Dark Death Mountain Floating Island"),
|
||||
('Dark World DMA Clip', 'Dark Lumberjack Area', 'West Dark Death Mountain (Bottom)'),
|
||||
('Dark Death Mountain Descent', 'West Dark Death Mountain (Bottom)', 'Dark Chapel Area'),
|
||||
('Ganons Tower Ascent', 'West Dark Death Mountain (Bottom)', 'GT Stairs'), # This only gets you to the GT entrance
|
||||
('Dark Death Mountain Glitched Bridge', 'West Dark Death Mountain (Bottom)', 'East Dark Death Mountain (Top)'),
|
||||
('DW Floating Island Clip', 'East Dark Death Mountain (Bottom)', 'Dark Death Mountain Floating Island'),
|
||||
('Turtle Rock (Top) Clip', 'Turtle Rock Area', 'Turtle Rock Ledge'),
|
||||
('Catfish DMD', 'Turtle Rock Area', 'Catfish Area'),
|
||||
('Bumper Cave Ledge Clip', 'Bumper Cave Area', 'Bumper Cave Ledge'),
|
||||
('Bumper Cave Entry Clip', 'Outcast Pond Area', 'Bumper Cave Entry'),
|
||||
('Broken Bridge Hammer Rock Skip Clip', 'Qirn Jump East Bank', 'Broken Bridge Area'),
|
||||
('Dark Witch Rock Skip Clip', 'Dark Witch Area', 'Dark Witch Northeast'),
|
||||
('Hammer Pegs River Clip', 'Dark Dunes Area', 'Hammer Pegs Area'),
|
||||
('Hammer Bridge To Cliff Clip', 'Hammer Bridge South Area', 'Dark Central Cliffs'),
|
||||
('Mire Cliffs Clip', 'Stumpy Approach Area', 'Mire Northern Cliffs'),
|
||||
('Dark Lake Hylia Ledge Clip', 'Darkness Nook Area', 'Shopping Mall Area'),
|
||||
('Mire Teleporter Clip', 'Mire Area', 'Mire Teleporter Ledge')
|
||||
]
|
||||
|
||||
open_boots_clip_exits_dw = [
|
||||
("Dark Death Mountain Descent", "West Dark Death Mountain (Bottom)", "West Dark World"),
|
||||
("Ganons Tower Ascent", "West Dark Death Mountain (Bottom)", "Dark Death Mountain (Top)"),
|
||||
("Dark Death Mountain Glitched Bridge", "West Dark Death Mountain (Bottom)", "Dark Death Mountain (Top)"),
|
||||
("Turtle Rock (Top) Clip Spot", "Dark Death Mountain (Top)", "Turtle Rock (Top)"),
|
||||
] + boots_clip_exits_dw
|
||||
|
||||
inverted_boots_clip_exits_dw = [
|
||||
("Dark Desert Teleporter Clip Spot", "Dark Desert", "Dark Desert Ledge")
|
||||
] + boots_clip_exits_dw
|
||||
|
||||
|
||||
# Dark World drop-down ledges that require glitched speed.
|
||||
glitched_speed_drops_dw = [
|
||||
("Dark Death Mountain Ledge Clip Spot", "Dark Death Mountain (Top)", "Dark Death Mountain Ledge")
|
||||
('Dark Death Mountain Ledge Clip', 'East Dark Death Mountain (Top)', 'Dark Death Mountain Ledge')
|
||||
]
|
||||
|
||||
|
||||
# Out of bounds transitions using the mirror
|
||||
mirror_clip_spots_dw = [
|
||||
("Dark Death Mountain Bunny Descent Mirror Spot", "West Dark Death Mountain (Bottom)", "West Dark World"),
|
||||
('Bunny DMD Mirror Spot', 'West Dark Death Mountain (Bottom)', 'Qirn Jump Area'),
|
||||
(
|
||||
"Dark Death Mountain Bunny Mirror To East Jump",
|
||||
"West Dark Death Mountain (Bottom)",
|
||||
"East Dark Death Mountain (Bottom)",
|
||||
'Dark Death Mountain Bunny Mirror To East Jump',
|
||||
'West Dark Death Mountain (Bottom)',
|
||||
'East Dark Death Mountain (Bottom)',
|
||||
),
|
||||
("Desert East Mirror Clip", "Dark Desert", "Desert Palace Mouth"),
|
||||
('Desert East Mirror Clip', 'Mire Area', 'Desert Mouth'),
|
||||
]
|
||||
|
||||
# Mirror shenanigans placing a mirror portal with a broken camera
|
||||
mirror_offset_spots_dw = [("Dark Death Mountain Offset Mirror", "West Dark Death Mountain (Bottom)", "East Dark World")]
|
||||
mirror_offset_spots_dw = [('Dark Death Mountain Offset Mirror', 'West Dark Death Mountain (Bottom)', 'Pyramid Area')]
|
||||
|
||||
# Mirror shenanigans placing a mirror portal with a broken camera
|
||||
|
||||
mirror_offset_spots_lw = [
|
||||
("Death Mountain Offset Mirror", "West Death Mountain (Bottom)", "Light World"),
|
||||
("Death Mountain Uncle Offset Mirror", "West Death Mountain (Bottom)", "Hyrule Castle Secret Entrance Area"),
|
||||
("Death Mountain Castle Ledge Offset Mirror", "West Death Mountain (Bottom)", "Hyrule Castle Ledge"),
|
||||
('Death Mountain Offset Mirror', 'West Death Mountain (Bottom)', 'Hyrule Castle Area'),
|
||||
('Death Mountain Uncle Offset Mirror', 'West Death Mountain (Bottom)', 'Hyrule Castle Courtyard Northeast'),
|
||||
('Death Mountain Castle Ledge Offset Mirror', 'West Death Mountain (Bottom)', 'Hyrule Castle Ledge'),
|
||||
]
|
||||
|
||||
|
||||
@@ -199,20 +195,19 @@ def create_owg_connections(world, player):
|
||||
"""
|
||||
if world.mode[player] == "inverted":
|
||||
connections = (
|
||||
inverted_boots_clip_exits_dw
|
||||
+ inverted_boots_clip_exits_lw
|
||||
boots_clip_exits_dw
|
||||
+ boots_clip_exits_lw
|
||||
+ glitched_speed_drops_dw
|
||||
+ mirror_offset_spots_lw
|
||||
)
|
||||
else:
|
||||
connections = (
|
||||
open_boots_clip_exits_dw
|
||||
+ open_boots_clip_exits_lw
|
||||
boots_clip_exits_dw
|
||||
+ boots_clip_exits_lw
|
||||
+ glitched_speed_drops_dw
|
||||
+ mirror_clip_spots_dw
|
||||
+ mirror_offset_spots_dw
|
||||
)
|
||||
|
||||
create_no_logic_connections(player, world, connections)
|
||||
|
||||
|
||||
@@ -223,13 +218,13 @@ def overworld_glitches_rules(world, player):
|
||||
set_owg_rules(
|
||||
player,
|
||||
world,
|
||||
inverted_boots_clip_exits_lw if inverted else open_boots_clip_exits_lw,
|
||||
boots_clip_exits_lw,
|
||||
lambda state: state.can_boots_clip_lw(player),
|
||||
)
|
||||
set_owg_rules(
|
||||
player,
|
||||
world,
|
||||
inverted_boots_clip_exits_dw if inverted else open_boots_clip_exits_dw,
|
||||
boots_clip_exits_dw,
|
||||
lambda state: state.can_boots_clip_dw(player),
|
||||
)
|
||||
# Glitched speed drops.
|
||||
@@ -239,10 +234,10 @@ def overworld_glitches_rules(world, player):
|
||||
glitched_speed_drops_dw,
|
||||
lambda state: state.can_get_glitched_speed_dw(player),
|
||||
)
|
||||
# Dark Death Mountain Ledge Clip Spot also accessible with mirror.
|
||||
# Dark Death Mountain Ledge Clip also accessible with mirror.
|
||||
if not inverted:
|
||||
add_alternate_rule(
|
||||
world.get_entrance("Dark Death Mountain Ledge Clip Spot", player), lambda state: state.has_Mirror(player)
|
||||
world.get_entrance('Dark Death Mountain Ledge Clip', player), lambda state: state.has_Mirror(player)
|
||||
)
|
||||
|
||||
# Mirror clip spots.
|
||||
@@ -264,45 +259,26 @@ def overworld_glitches_rules(world, player):
|
||||
|
||||
# Regions that require the boots and some other stuff.
|
||||
if not inverted:
|
||||
world.get_entrance("Turtle Rock Teleporter", player).access_rule = lambda state: (
|
||||
state.can_boots_clip_lw(player) or state.can_lift_heavy_rocks(player)
|
||||
) and state.has("Hammer", player)
|
||||
|
||||
add_alternate_rule(
|
||||
world.get_entrance("Waterfall Fairy Access", player),
|
||||
world.get_entrance('Zora Waterfall Approach', player),
|
||||
lambda state: state.has_Pearl(player) or state.has_Boots(player),
|
||||
) # assumes access to Waterwalk ability (boots case)
|
||||
else:
|
||||
add_alternate_rule(world.get_entrance("Waterfall Fairy Access", player), lambda state: state.has_Pearl(player))
|
||||
add_alternate_rule(
|
||||
world.get_entrance('Zora Waterfall Approach', player),
|
||||
lambda state: state.has_Pearl(player)
|
||||
)
|
||||
|
||||
world.get_entrance("Dark Desert Teleporter", player).access_rule = lambda state: (
|
||||
state.can_flute(player) or state.can_boots_clip_dw(player)
|
||||
) and state.can_lift_heavy_rocks(player)
|
||||
|
||||
add_alternate_rule(
|
||||
world.get_entrance("Dark Witch Rock (North)", player), lambda state: state.can_boots_clip_dw(player)
|
||||
)
|
||||
add_alternate_rule(
|
||||
world.get_entrance("Broken Bridge Pass (Top)", player), lambda state: state.can_boots_clip_dw(player)
|
||||
)
|
||||
add_alternate_rule(
|
||||
world.get_location("Zora's Ledge", player), lambda state: state.can_boots_clip_lw(player)
|
||||
) # assumes access to Waterwalk ability
|
||||
|
||||
add_alternate_rule(
|
||||
world.get_location('Maze Race', player), lambda state: state.can_boots_clip_lw(player)
|
||||
)
|
||||
|
||||
# This is doable even with bad enemies
|
||||
add_alternate_rule(world.get_location("Hobo", player), lambda state: state.can_boots_clip_lw(player))
|
||||
|
||||
# Bunny pocket
|
||||
if not inverted:
|
||||
add_alternate_rule(world.get_entrance("Skull Woods Final Section", player), lambda state: state.can_bunny_pocket(player) and state.has("Fire Rod", player))
|
||||
add_alternate_rule(world.get_entrance("Dark World Shop", player), lambda state: state.can_bunny_pocket(player) and state.has("Hammer", player))
|
||||
|
||||
|
||||
|
||||
def add_alternate_rule(entrance, rule):
|
||||
old_rule = entrance.access_rule
|
||||
entrance.access_rule = lambda state: old_rule(state) or rule(state)
|
||||
|
||||
Reference in New Issue
Block a user