rework as region connectors (inverted will be broken)
This commit is contained in:
parent
2b44792f70
commit
aa569d1c3d
|
@ -546,8 +546,17 @@ class CollectionState(object):
|
|||
return self.has_Boots(player) and self.has_Pearl(player)
|
||||
return self.has_Boots(player)
|
||||
|
||||
def can_bunny_dmd(self, player):
|
||||
return self.world.get_region('Death Mountain', player).can_reach(self) and self.has_Mirror(player)
|
||||
def can_get_glitched_speed_lw(self, player):
|
||||
rules = [self.has_Boots(player), any([self.has('Hookshot', player), self.has_sword(player)])]
|
||||
if self.world.mode[player] == 'inverted':
|
||||
rules.append(self.has_Pearl(player))
|
||||
return all(rules)
|
||||
|
||||
def can_get_glitched_speed_dw(self, player):
|
||||
rules = [self.has_Boots(player), any([self.has('Hookshot', player), self.has_sword(player)])]
|
||||
if self.world.mode[player] != 'inverted':
|
||||
rules.append(self.has_Pearl(player))
|
||||
return all(rules)
|
||||
|
||||
def collect(self, item, event=False, location=None):
|
||||
if location:
|
||||
|
|
|
@ -2880,6 +2880,8 @@ mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia Central
|
|||
('East Dark World River Pier', 'East Dark World'),
|
||||
('West Dark World Gap', 'West Dark World'),
|
||||
('East Dark World Broken Bridge Pass', 'East Dark World'),
|
||||
('Catfish Exit Rock', 'Northeast Dark World'),
|
||||
('Catfish Entrance Rock', 'Catfish'),
|
||||
('Northeast Dark World Broken Bridge Pass', 'Northeast Dark World'),
|
||||
('Bumper Cave Entrance Rock', 'Bumper Cave Entrance'),
|
||||
('Bumper Cave Entrance Drop', 'West Dark World'),
|
||||
|
@ -2985,7 +2987,39 @@ mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia Central
|
|||
('Ganons Tower Moldorm Door', 'Ganons Tower (Moldorm)'),
|
||||
('Ganons Tower Moldorm Gap', 'Agahnim 2'),
|
||||
('Ganon Drop', 'Bottom of Pyramid'),
|
||||
('Pyramid Drop', 'East Dark World')
|
||||
('Pyramid Drop', 'East Dark World'),
|
||||
('Light World DMA Clip Spot', 'Death Mountain'),
|
||||
('Hera Ascent', 'Death Mountain (Top)'),
|
||||
('Spectacle Rock Clip Spot', 'Spectacle Rock'),
|
||||
('Death Mountain Return Ledge Clip Spot', 'Death Mountain Return Ledge'),
|
||||
('Death Mountain Glitched Bridge', 'East Death Mountain (Top)'),
|
||||
('Floating Island Clip Spot', 'Death Mountain Floating Island (Light World)'),
|
||||
('Dark Death Mountain Ledge Clip Spot', 'Dark Death Mountain Ledge'),
|
||||
('Zora Descent Clip Spot', 'Zoras River'),
|
||||
('Graveyard Ledge Clip Spot', 'Graveyard Ledge'),
|
||||
('Desert Northern Cliffs', 'Desert Ledge'),
|
||||
('Desert Northern Cliffs', 'Desert Ledge (Northeast)'),
|
||||
('Desert Northern Cliffs', 'Desert Palace Entrance (North) Spot'),
|
||||
('Lake Hylia Island Clip Spot', 'Lake Hylia Island'),
|
||||
('Dark World DMA Clip Spot', 'Dark Death Mountain (West Bottom)'),
|
||||
('Ganons Tower Ascent', 'Dark Death Mountain (Top)'),
|
||||
('Bumper Cave Ledge Clip Spot', 'Bumper Cave Ledge'),
|
||||
('Dark Death Mountain Glitched Bridge', 'Dark Death Mountain (Top)'),
|
||||
('Dark Death Mountain Bunny Descent Mirror Spot', 'Dark Death Mountain Bunny Descent Area'),
|
||||
('Hookshot Cave Island Clip Spot', 'Death Mountain Floating Island (Dark World)'),
|
||||
('Catfish Descent', 'Catfish'),
|
||||
('Dark Death Mountain Offset Mirror', 'East Dark World'),
|
||||
('Hammer Pegs River Clip Spot', 'Hammer Peg Area'),
|
||||
('Dark Lake Hylia Ledge Clip Spot', 'Dark Lake Hylia Ledge'),
|
||||
('Dark Desert Cliffs Clip Spot', 'Dark Desert'),
|
||||
('Bumper Cave Ledge Clip Drop', 'Bumper Cave Entrance'),
|
||||
('Death Mountain Return Ledge Clip Drop', 'Death Mountain Entrance'),
|
||||
('Bumper Cave Entrance Clip (Broken Camera)', 'Bumper Cave Entrance'),
|
||||
('Death Mountain Entrance Clip (Broken Camera)', 'Death Mountain Entrance'),
|
||||
('West Dark World Bunny Descent', 'West Dark World'),
|
||||
('Dark Death Mountain (East Bottom) Jump', 'Dark Death Mountain (East Bottom)'),
|
||||
('Bat Cave River Clip Spot', 'Bat Cave Drop Ledge'),
|
||||
('Turtle Rock (Top) Clip Spot', 'Turtle Rock (Top)'),
|
||||
]
|
||||
|
||||
inverted_mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia Central Island'),
|
||||
|
|
244
OWGSets.py
244
OWGSets.py
|
@ -11,184 +11,10 @@ def get_immediately_accessible_entrances(world, player):
|
|||
entrances = [
|
||||
'Hobo Bridge',
|
||||
'Zoras River',
|
||||
'Capacity Upgrade',
|
||||
'Lake Hylia Central Island Pier',
|
||||
]
|
||||
return entrances
|
||||
|
||||
def get_lw_boots_accessible_entrances(world, player):
|
||||
'''
|
||||
Light World entrances that can be accessed with boots clips.
|
||||
'''
|
||||
entrances = [
|
||||
'Bat Cave Drop Ledge',
|
||||
'Desert Ledge Return Rocks',
|
||||
'Desert Palace Entrance (West)',
|
||||
'Desert Palace Entrance (North)',
|
||||
'Broken Bridge (East)',
|
||||
'Death Mountain Drop',
|
||||
'Old Man Cave (East)',
|
||||
'Old Man House (Bottom)',
|
||||
'Old Man House (Top)',
|
||||
'Death Mountain Return Cave (East)',
|
||||
'Spectacle Rock Cave',
|
||||
'Spectacle Rock Cave Peak',
|
||||
'Spectacle Rock Cave (Bottom)',
|
||||
'Broken Bridge (West)',
|
||||
'Broken Bridge (East)',
|
||||
'East Death Mountain Drop',
|
||||
'Spiral Cave Ledge Drop',
|
||||
'Fairy Ascension Drop',
|
||||
'Fairy Ascension Cave (Bottom)',
|
||||
'East Death Mountain (Top)',
|
||||
'Death Mountain (Top)',
|
||||
'Death Mountain Return Cave (West)',
|
||||
'Paradox Cave (Bottom)',
|
||||
'Paradox Cave (Middle)',
|
||||
'Hookshot Fairy',
|
||||
'Spiral Cave (Bottom)',
|
||||
'Paradox Cave (Top)',
|
||||
'Spiral Cave Ledge Access',
|
||||
'Bumper Cave Ledge Mirror Spot',
|
||||
'Floating Island Mirror Spot',
|
||||
]
|
||||
if world.mode[player] != 'inverted':
|
||||
entrances.append('Flute Spot 1')
|
||||
entrances.append('Spectacle Rock Drop')
|
||||
entrances.append('Fairy Ascension Ledge')
|
||||
return entrances
|
||||
|
||||
|
||||
def get_lw_boots_accessible_locations():
|
||||
'''
|
||||
Light World locations that can be reached using boots clips.
|
||||
'''
|
||||
return [
|
||||
'Lake Hylia Island',
|
||||
'Desert Ledge',
|
||||
'Spectacle Rock',
|
||||
'Floating Island',
|
||||
]
|
||||
|
||||
|
||||
def get_dw_boots_accessible_entrances(world, player):
|
||||
'''
|
||||
Dark World entrances that can be accessed with boots clips.
|
||||
'''
|
||||
entrances = [
|
||||
'Northeast Dark World Broken Bridge Pass',
|
||||
'Peg Area Rocks',
|
||||
'Grassy Lawn Pegs',
|
||||
'West Dark World Gap',
|
||||
'Bumper Cave Ledge Drop',
|
||||
'Turtle Rock Drop',
|
||||
'Floating Island Drop',
|
||||
'Dark Death Mountain Drop (East)',
|
||||
'Village of Outcasts Drop',
|
||||
'Hype Cave',
|
||||
'Dark World Potion Shop',
|
||||
'Archery Game',
|
||||
'Brewery',
|
||||
'C-Shaped House',
|
||||
'Chest Game',
|
||||
'Thieves Town',
|
||||
'Bumper Cave Entrance Rock',
|
||||
'Red Shield Shop',
|
||||
'Fortune Teller (Dark)',
|
||||
'Dark World Lumberjack Shop',
|
||||
'Misery Mire',
|
||||
'Mire Shed',
|
||||
'Dark Desert Hint',
|
||||
'Dark Desert Fairy',
|
||||
]
|
||||
if world.mode[player] != 'inverted':
|
||||
entrances.append('Dark Lake Hylia Ledge')
|
||||
entrances.append('Big Bomb Shop')
|
||||
entrances.append('Kings Grave Mirror Spot')
|
||||
entrances.append('Dark Sanctuary Hint')
|
||||
return entrances
|
||||
|
||||
|
||||
def get_dw_boots_accessible_locations():
|
||||
'''
|
||||
Dark World locations accessible using boots clips.
|
||||
'''
|
||||
return [
|
||||
'Catfish',
|
||||
'Dark Blacksmith Ruins',
|
||||
'Bumper Cave Ledge',
|
||||
]
|
||||
|
||||
|
||||
def get_dw_bunny_inaccessible_locations():
|
||||
'''
|
||||
Locations that the bunny cannot access.
|
||||
'''
|
||||
return [
|
||||
'Thieves Town',
|
||||
'Graveyard Ledge Mirror Spot',
|
||||
'Kings Grave Mirror Spot',
|
||||
'Bumper Cave Entrance Rock',
|
||||
'Brewery',
|
||||
'Village of Outcasts Pegs',
|
||||
'Village of Outcasts Eastern Rocks',
|
||||
'Dark Lake Hylia Drop (South)',
|
||||
'Hype Cave',
|
||||
'Village of Outcasts Heavy Rock',
|
||||
'East Dark World Bridge',
|
||||
'Bonk Fairy (Dark)',
|
||||
]
|
||||
|
||||
|
||||
def get_dmd_and_bunny_regions():
|
||||
'''
|
||||
Dark World regions accessible using Link and Bunny DMD methods.
|
||||
'''
|
||||
return [
|
||||
'West Dark World',
|
||||
'South Dark World',
|
||||
'East Dark World',
|
||||
]
|
||||
|
||||
|
||||
def get_dmd_non_bunny_regions():
|
||||
'''
|
||||
Dark World regions accessible using only Link DMD methods.
|
||||
'''
|
||||
return [
|
||||
'Dark Desert',
|
||||
'Northeast Dark World',
|
||||
]
|
||||
|
||||
|
||||
def get_boots_accessible_regions_lw():
|
||||
'''
|
||||
Light World regions that can be accessed using boots clips.
|
||||
'''
|
||||
return [
|
||||
'Desert Ledge (Northeast)',
|
||||
'Desert Ledge',
|
||||
'Desert Palace Entrance (North) Spot',
|
||||
'Cave 45 Ledge',
|
||||
'Graveyard Ledge',
|
||||
'Lake Hylia Island',
|
||||
'Death Mountain',
|
||||
'Death Mountain Return Ledge',
|
||||
'Bombos Tablet Ledge',
|
||||
]
|
||||
|
||||
|
||||
def get_mirror_hookshot_accessible_dw_locations(world, player):
|
||||
'''
|
||||
Locations accessible potentially using weird mirror hookshot boots setups.
|
||||
'''
|
||||
locations = [
|
||||
'Pyramid Fairy',
|
||||
'Pyramid Entrance',
|
||||
'Pyramid Drop',
|
||||
]
|
||||
locations.extend(world.get_region('Dark Death Mountain Ledge', player).locations)
|
||||
return locations
|
||||
|
||||
|
||||
def get_sword_required_superbunny_mirror_regions():
|
||||
'''
|
||||
|
@ -268,3 +94,71 @@ def get_superbunny_accessible_locations():
|
|||
'Superbunny Cave - Top',
|
||||
'Superbunny Cave - Bottom',
|
||||
]
|
||||
|
||||
|
||||
def get_boots_clip_exits_lw():
|
||||
'''
|
||||
Special Light World region exits that require boots clips.
|
||||
'''
|
||||
return [
|
||||
'Bat Cave River Clip Spot',
|
||||
'Light World DMA Clip Spot',
|
||||
'Hera Ascent',
|
||||
'Spectacle Rock Clip Spot',
|
||||
'Death Mountain Return Ledge Clip Spot',
|
||||
'Death Mountain Glitched Bridge',
|
||||
'Floating Island Clip Spot',
|
||||
'Zora Descent Clip Spot',
|
||||
'Graveyard Ledge Clip Spot',
|
||||
'Desert Northern Cliffs',
|
||||
'Lake Hylia Island Clip Spot',
|
||||
'Death Mountain Entrance Clip (Broken Camera)',
|
||||
]
|
||||
|
||||
|
||||
def get_boots_clip_exits_dw():
|
||||
'''
|
||||
Special Dark World region exits that require boots clips.
|
||||
'''
|
||||
return [
|
||||
'Dark World DMA Clip Spot',
|
||||
'Ganons Tower Ascent',
|
||||
'Bumper Cave Ledge Clip Spot',
|
||||
'Dark Death Mountain Glitched Bridge',
|
||||
'Hookshot Cave Island Clip Spot',
|
||||
'Catfish Descent',
|
||||
'Hammer Pegs River Clip Spot',
|
||||
'Dark Lake Hylia Ledge Clip Spot',
|
||||
'Dark Desert Cliffs Clip Spot',
|
||||
'Bumper Cave Entrance Clip (Broken Camera)',
|
||||
'Turtle Rock (Top) Clip Spot',
|
||||
]
|
||||
|
||||
|
||||
def get_glitched_speed_drops_lw():
|
||||
'''
|
||||
Light World drop-down ledges that require glitched speed.
|
||||
'''
|
||||
return [
|
||||
'Death Mountain Return Ledge Clip Drop',
|
||||
]
|
||||
|
||||
|
||||
def get_glitched_speed_drops_dw():
|
||||
'''
|
||||
Dark World drop-down ledges that require glitched speed.
|
||||
'''
|
||||
return [
|
||||
'Dark Death Mountain Ledge Clip Spot',
|
||||
'Bumper Cave Ledge Clip Drop',
|
||||
]
|
||||
|
||||
|
||||
def get_mirror_clip_spots_dw():
|
||||
'''
|
||||
Mirror shenanigans that are in logic even if the player is a bunny.
|
||||
'''
|
||||
return [
|
||||
'Dark Death Mountain Offset Mirror',
|
||||
'Dark Death Mountain Bunny Descent Mirror Spot',
|
||||
]
|
||||
|
|
32
Regions.py
32
Regions.py
|
@ -14,7 +14,8 @@ def create_regions(world, player):
|
|||
'Sanctuary', 'Sanctuary Grave', 'Death Mountain Entrance Rock', 'Flute Spot 1', 'Dark Desert Teleporter', 'East Hyrule Teleporter', 'South Hyrule Teleporter', 'Kakariko Teleporter',
|
||||
'Elder House (East)', 'Elder House (West)', 'North Fairy Cave', 'North Fairy Cave Drop', 'Lost Woods Gamble', 'Snitch Lady (East)', 'Snitch Lady (West)', 'Tavern (Front)',
|
||||
'Bush Covered House', 'Light World Bomb Hut', 'Kakariko Shop', 'Long Fairy Cave', 'Good Bee Cave', '20 Rupee Cave', 'Cave Shop (Lake Hylia)', 'Waterfall of Wishing', 'Hyrule Castle Main Gate',
|
||||
'Bonk Fairy (Light)', '50 Rupee Cave', 'Fortune Teller (Light)', 'Lake Hylia Fairy', 'Light Hype Fairy', 'Desert Fairy', 'Lumberjack House', 'Lake Hylia Fortune Teller', 'Kakariko Gamble Game', 'Top of Pyramid']),
|
||||
'Bonk Fairy (Light)', '50 Rupee Cave', 'Fortune Teller (Light)', 'Lake Hylia Fairy', 'Light Hype Fairy', 'Desert Fairy', 'Lumberjack House', 'Lake Hylia Fortune Teller', 'Kakariko Gamble Game', 'Top of Pyramid',
|
||||
'Light World DMA Clip Spot', 'Death Mountain Return Ledge Clip Spot', 'Desert Northern Cliffs', 'Lake Hylia Island Clip Spot', 'Death Mountain Entrance Clip (Broken Camera)', 'Bat Cave River Clip Spot']),
|
||||
create_lw_region(player, 'Death Mountain Entrance', None, ['Old Man Cave (West)', 'Death Mountain Entrance Drop']),
|
||||
create_lw_region(player, 'Lake Hylia Central Island', None, ['Capacity Upgrade', 'Lake Hylia Central Island Teleporter']),
|
||||
create_cave_region(player, 'Blinds Hideout', 'a bounty of five items', ["Blind\'s Hideout - Top",
|
||||
|
@ -117,9 +118,9 @@ def create_regions(world, player):
|
|||
create_cave_region(player, 'Old Man Cave', 'a connector', ['Old Man'], ['Old Man Cave Exit (East)', 'Old Man Cave Exit (West)']),
|
||||
create_cave_region(player, 'Old Man House', 'a connector', None, ['Old Man House Exit (Bottom)', 'Old Man House Front to Back']),
|
||||
create_cave_region(player, 'Old Man House Back', 'a connector', None, ['Old Man House Exit (Top)', 'Old Man House Back to Front']),
|
||||
create_lw_region(player, 'Death Mountain', None, ['Old Man Cave (East)', 'Old Man House (Bottom)', 'Old Man House (Top)', 'Death Mountain Return Cave (East)', 'Spectacle Rock Cave', 'Spectacle Rock Cave Peak', 'Spectacle Rock Cave (Bottom)', 'Broken Bridge (West)', 'Death Mountain Teleporter']),
|
||||
create_lw_region(player, 'Death Mountain', None, ['Old Man Cave (East)', 'Old Man House (Bottom)', 'Old Man House (Top)', 'Death Mountain Return Cave (East)', 'Spectacle Rock Cave', 'Spectacle Rock Cave Peak', 'Spectacle Rock Cave (Bottom)', 'Broken Bridge (West)', 'Death Mountain Teleporter', 'Death Mountain Glitched Bridge', 'Graveyard Ledge Clip Spot', 'Hera Ascent']),
|
||||
create_cave_region(player, 'Death Mountain Return Cave', 'a connector', None, ['Death Mountain Return Cave Exit (West)', 'Death Mountain Return Cave Exit (East)']),
|
||||
create_lw_region(player, 'Death Mountain Return Ledge', None, ['Death Mountain Return Ledge Drop', 'Death Mountain Return Cave (West)']),
|
||||
create_lw_region(player, 'Death Mountain Return Ledge', None, ['Death Mountain Return Ledge Drop', 'Death Mountain Return Cave (West)', 'Death Mountain Return Ledge Clip Drop']),
|
||||
create_cave_region(player, 'Spectacle Rock Cave (Top)', 'a connector', ['Spectacle Rock Cave'], ['Spectacle Rock Cave Drop', 'Spectacle Rock Cave Exit (Top)']),
|
||||
create_cave_region(player, 'Spectacle Rock Cave (Bottom)', 'a connector', None, ['Spectacle Rock Cave Exit']),
|
||||
create_cave_region(player, 'Spectacle Rock Cave (Peak)', 'a connector', None, ['Spectacle Rock Cave Peak Drop', 'Spectacle Rock Cave Exit (Peak)']),
|
||||
|
@ -136,7 +137,7 @@ def create_regions(world, player):
|
|||
['Paradox Cave Push Block', 'Paradox Cave Bomb Jump']),
|
||||
create_cave_region(player, 'Paradox Cave', 'a connector', None, ['Paradox Cave Exit (Middle)', 'Paradox Cave Exit (Top)', 'Paradox Cave Drop']),
|
||||
create_cave_region(player, 'Light World Death Mountain Shop', 'a common shop'),
|
||||
create_lw_region(player, 'East Death Mountain (Top)', None, ['Paradox Cave (Top)', 'Death Mountain (Top)', 'Spiral Cave Ledge Access', 'East Death Mountain Drop', 'Turtle Rock Teleporter', 'Fairy Ascension Ledge']),
|
||||
create_lw_region(player, 'East Death Mountain (Top)', None, ['Paradox Cave (Top)', 'Death Mountain (Top)', 'Spiral Cave Ledge Access', 'East Death Mountain Drop', 'Turtle Rock Teleporter', 'Fairy Ascension Ledge', 'Floating Island Clip Spot', 'Zora Descent Clip Spot']),
|
||||
create_lw_region(player, 'Spiral Cave Ledge', None, ['Spiral Cave', 'Spiral Cave Ledge Drop']),
|
||||
create_cave_region(player, 'Spiral Cave (Top)', 'a connector', ['Spiral Cave'], ['Spiral Cave (top to bottom)', 'Spiral Cave Exit (Top)']),
|
||||
create_cave_region(player, 'Spiral Cave (Bottom)', 'a connector', None, ['Spiral Cave Exit']),
|
||||
|
@ -145,19 +146,22 @@ def create_regions(world, player):
|
|||
create_cave_region(player, 'Fairy Ascension Cave (Drop)', 'a connector', None, ['Fairy Ascension Cave Pots']),
|
||||
create_cave_region(player, 'Fairy Ascension Cave (Top)', 'a connector', None, ['Fairy Ascension Cave Exit (Top)', 'Fairy Ascension Cave Drop']),
|
||||
create_lw_region(player, 'Fairy Ascension Ledge', None, ['Fairy Ascension Ledge Drop', 'Fairy Ascension Cave (Top)']),
|
||||
create_lw_region(player, 'Death Mountain (Top)', ['Ether Tablet'], ['East Death Mountain (Top)', 'Tower of Hera', 'Death Mountain Drop']),
|
||||
create_lw_region(player, 'Death Mountain (Top)', ['Ether Tablet'], ['East Death Mountain (Top)', 'Tower of Hera', 'Death Mountain Drop', 'Spectacle Rock Clip Spot']),
|
||||
create_lw_region(player, 'Spectacle Rock', ['Spectacle Rock'], ['Spectacle Rock Drop']),
|
||||
create_dungeon_region(player, 'Tower of Hera (Bottom)', 'Tower of Hera', ['Tower of Hera - Basement Cage', 'Tower of Hera - Map Chest'], ['Tower of Hera Small Key Door', 'Tower of Hera Big Key Door', 'Tower of Hera Exit']),
|
||||
create_dungeon_region(player, 'Tower of Hera (Basement)', 'Tower of Hera', ['Tower of Hera - Big Key Chest']),
|
||||
create_dungeon_region(player, 'Tower of Hera (Top)', 'Tower of Hera', ['Tower of Hera - Compass Chest', 'Tower of Hera - Big Chest', 'Tower of Hera - Boss', 'Tower of Hera - Prize']),
|
||||
|
||||
create_dw_region(player, 'East Dark World', ['Pyramid'], ['Pyramid Fairy', 'South Dark World Bridge', 'Palace of Darkness', 'Dark Lake Hylia Drop (East)', 'Dark Lake Hylia Teleporter',
|
||||
'Hyrule Castle Ledge Mirror Spot', 'Dark Lake Hylia Fairy', 'Palace of Darkness Hint', 'East Dark World Hint', 'Pyramid Hole', 'Northeast Dark World Broken Bridge Pass']),
|
||||
create_dw_region(player, 'Northeast Dark World', ['Catfish'], ['West Dark World Gap', 'Dark World Potion Shop', 'East Dark World Broken Bridge Pass']),
|
||||
'Hyrule Castle Ledge Mirror Spot', 'Dark Lake Hylia Fairy', 'Palace of Darkness Hint', 'East Dark World Hint', 'Pyramid Hole', 'Northeast Dark World Broken Bridge Pass',
|
||||
'Hammer Pegs River Clip Spot', 'Dark Lake Hylia Ledge Clip Spot']),
|
||||
create_dw_region(player, 'Catfish', ['Catfish'], ['Catfish Exit Rock']),
|
||||
create_dw_region(player, 'Northeast Dark World', None, ['West Dark World Gap', 'Dark World Potion Shop', 'East Dark World Broken Bridge Pass', 'Catfish Entrance Rock']),
|
||||
create_cave_region(player, 'Palace of Darkness Hint', 'a storyteller'),
|
||||
create_cave_region(player, 'East Dark World Hint', 'a storyteller'),
|
||||
create_dw_region(player, 'South Dark World', ['Stumpy', 'Digging Game'], ['Dark Lake Hylia Drop (South)', 'Hype Cave', 'Swamp Palace', 'Village of Outcasts Heavy Rock', 'Maze Race Mirror Spot',
|
||||
'Cave 45 Mirror Spot', 'East Dark World Bridge', 'Big Bomb Shop', 'Archery Game', 'Bonk Fairy (Dark)', 'Dark Lake Hylia Shop', 'Bombos Tablet Mirror Spot']),
|
||||
'Cave 45 Mirror Spot', 'East Dark World Bridge', 'Big Bomb Shop', 'Archery Game', 'Bonk Fairy (Dark)', 'Dark Lake Hylia Shop',
|
||||
'Bombos Tablet Mirror Spot', 'Dark Desert Cliffs Clip Spot']),
|
||||
create_lw_region(player, 'Bombos Tablet Ledge', ['Bombos Tablet']),
|
||||
create_cave_region(player, 'Big Bomb Shop', 'the bomb shop'),
|
||||
create_cave_region(player, 'Archery Game', 'a game of skill'),
|
||||
|
@ -169,7 +173,8 @@ def create_regions(world, player):
|
|||
create_cave_region(player, 'Hype Cave', 'a bounty of five items', ['Hype Cave - Top', 'Hype Cave - Middle Right', 'Hype Cave - Middle Left',
|
||||
'Hype Cave - Bottom', 'Hype Cave - Generous Guy']),
|
||||
create_dw_region(player, 'West Dark World', ['Frog'], ['Village of Outcasts Drop', 'East Dark World River Pier', 'Brewery', 'C-Shaped House', 'Chest Game', 'Thieves Town', 'Graveyard Ledge Mirror Spot', 'Kings Grave Mirror Spot', 'Bumper Cave Entrance Rock',
|
||||
'Skull Woods Forest', 'Village of Outcasts Pegs', 'Village of Outcasts Eastern Rocks', 'Red Shield Shop', 'Dark Sanctuary Hint', 'Fortune Teller (Dark)', 'Dark World Lumberjack Shop']),
|
||||
'Skull Woods Forest', 'Village of Outcasts Pegs', 'Village of Outcasts Eastern Rocks', 'Red Shield Shop', 'Dark Sanctuary Hint', 'Fortune Teller (Dark)', 'Dark World Lumberjack Shop',
|
||||
'Dark World DMA Clip Spot', 'Bumper Cave Ledge Clip Spot', 'Bumper Cave Entrance Clip (Broken Camera)']),
|
||||
create_dw_region(player, 'Dark Grassy Lawn', None, ['Grassy Lawn Pegs', 'Dark World Shop']),
|
||||
create_dw_region(player, 'Hammer Peg Area', ['Dark Blacksmith Ruins'], ['Bat Cave Drop Ledge Mirror Spot', 'Dark World Hammer Peg Cave', 'Peg Area Rocks']),
|
||||
create_dw_region(player, 'Bumper Cave Entrance', None, ['Bumper Cave (Bottom)', 'Bumper Cave Entrance Mirror Spot', 'Bumper Cave Entrance Drop']),
|
||||
|
@ -186,7 +191,7 @@ def create_regions(world, player):
|
|||
create_cave_region(player, 'Red Shield Shop', 'the rare shop'),
|
||||
create_cave_region(player, 'Dark Sanctuary Hint', 'a storyteller'),
|
||||
create_cave_region(player, 'Bumper Cave', 'a connector', None, ['Bumper Cave Exit (Bottom)', 'Bumper Cave Exit (Top)']),
|
||||
create_dw_region(player, 'Bumper Cave Ledge', ['Bumper Cave Ledge'], ['Bumper Cave Ledge Drop', 'Bumper Cave (Top)', 'Bumper Cave Ledge Mirror Spot']),
|
||||
create_dw_region(player, 'Bumper Cave Ledge', ['Bumper Cave Ledge'], ['Bumper Cave Ledge Drop', 'Bumper Cave (Top)', 'Bumper Cave Ledge Mirror Spot', 'Bumper Cave Ledge Clip Drop']),
|
||||
create_dw_region(player, 'Skull Woods Forest', None, ['Skull Woods First Section Hole (East)', 'Skull Woods First Section Hole (West)', 'Skull Woods First Section Hole (North)',
|
||||
'Skull Woods First Section Door', 'Skull Woods Second Section Door (East)']),
|
||||
create_dw_region(player, 'Skull Woods Forest (West)', None, ['Skull Woods Second Section Hole', 'Skull Woods Second Section Door (West)', 'Skull Woods Final Section']),
|
||||
|
@ -194,9 +199,9 @@ def create_regions(world, player):
|
|||
'Desert Palace Entrance (North) Mirror Spot', 'Dark Desert Hint', 'Dark Desert Fairy']),
|
||||
create_cave_region(player, 'Mire Shed', 'a cave with two chests', ['Mire Shed - Left', 'Mire Shed - Right']),
|
||||
create_cave_region(player, 'Dark Desert Hint', 'a storyteller'),
|
||||
create_dw_region(player, 'Dark Death Mountain (West Bottom)', None, ['Spike Cave', 'Spectacle Rock Mirror Spot', 'Dark Death Mountain Fairy']),
|
||||
create_dw_region(player, 'Dark Death Mountain (West Bottom)', None, ['Spike Cave', 'Spectacle Rock Mirror Spot', 'Dark Death Mountain Fairy', 'Ganons Tower Ascent', 'Dark Death Mountain Glitched Bridge', 'Dark Death Mountain Bunny Descent Mirror Spot', 'Dark Death Mountain Offset Mirror']),
|
||||
create_dw_region(player, 'Dark Death Mountain (Top)', None, ['Dark Death Mountain Drop (East)', 'Dark Death Mountain Drop (West)', 'Ganons Tower', 'Superbunny Cave (Top)',
|
||||
'Hookshot Cave', 'East Death Mountain (Top) Mirror Spot', 'Turtle Rock']),
|
||||
'Hookshot Cave', 'East Death Mountain (Top) Mirror Spot', 'Turtle Rock', 'Hookshot Cave Island Clip Spot', 'Catfish Descent', 'Dark Death Mountain Ledge Clip Spot', 'Turtle Rock (Top) Clip Spot']),
|
||||
create_dw_region(player, 'Dark Death Mountain Ledge', None, ['Dark Death Mountain Ledge (East)', 'Dark Death Mountain Ledge (West)', 'Mimic Cave Mirror Spot', 'Spiral Cave Mirror Spot']),
|
||||
create_dw_region(player, 'Dark Death Mountain Isolated Ledge', None, ['Isolated Ledge Mirror Spot', 'Turtle Rock Isolated Ledge Entrance']),
|
||||
create_dw_region(player, 'Dark Death Mountain (East Bottom)', None, ['Superbunny Cave (Bottom)', 'Cave Shop (Dark Death Mountain)', 'Fairy Ascension Mirror Spot']),
|
||||
|
@ -291,7 +296,8 @@ def create_regions(world, player):
|
|||
create_dungeon_region(player, 'Agahnim 2', 'Ganon\'s Tower', ['Ganons Tower - Validation Chest', 'Agahnim 2'], None),
|
||||
create_cave_region(player, 'Pyramid', 'a drop\'s exit', ['Ganon'], ['Ganon Drop']),
|
||||
create_cave_region(player, 'Bottom of Pyramid', 'a drop\'s exit', None, ['Pyramid Exit']),
|
||||
create_dw_region(player, 'Pyramid Ledge', None, ['Pyramid Entrance', 'Pyramid Drop'])
|
||||
create_dw_region(player, 'Pyramid Ledge', None, ['Pyramid Entrance', 'Pyramid Drop']),
|
||||
create_dw_region(player, 'Dark Death Mountain Bunny Descent Area', None, ['West Dark World Bunny Descent', 'Dark Death Mountain (East Bottom) Jump']),
|
||||
]
|
||||
|
||||
world.initialize_regions()
|
||||
|
|
79
Rules.py
79
Rules.py
|
@ -398,7 +398,8 @@ def default_rules(world, player):
|
|||
set_rule(world.get_entrance('Turtle Rock Teleporter', player), lambda state: state.can_lift_heavy_rocks(player) and state.has('Hammer', player))
|
||||
set_rule(world.get_entrance('East Death Mountain (Top)', player), lambda state: state.has('Hammer', player))
|
||||
|
||||
set_rule(world.get_location('Catfish', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Catfish Exit Rock', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Catfish Entrance Rock', player), lambda state: state.can_lift_rocks(player))
|
||||
set_rule(world.get_entrance('Northeast Dark World Broken Bridge Pass', player), lambda state: state.has_Pearl(player) and (state.can_lift_rocks(player) or state.has('Hammer', player) or state.has('Flippers', player)))
|
||||
set_rule(world.get_entrance('East Dark World Broken Bridge Pass', player), lambda state: state.has_Pearl(player) and (state.can_lift_rocks(player) or state.has('Hammer', player)))
|
||||
set_rule(world.get_entrance('South Dark World Bridge', player), lambda state: state.has('Hammer', player) and state.has_Pearl(player))
|
||||
|
@ -467,6 +468,20 @@ def default_rules(world, player):
|
|||
|
||||
set_rule(world.get_entrance('Ganons Tower', player), lambda state: state.has_crystals(world.crystals_needed_for_gt[player], player))
|
||||
|
||||
|
||||
def forbid_overworld_glitches(world, player):
|
||||
for exit in OWGSets.get_boots_clip_exits_lw():
|
||||
set_rule(world.get_entrance(exit, player), lambda state: False)
|
||||
for exit in OWGSets.get_boots_clip_exits_dw():
|
||||
set_rule(world.get_entrance(exit, player), lambda state: False)
|
||||
for exit in OWGSets.get_glitched_speed_drops_lw():
|
||||
set_rule(world.get_entrance(exit, player), lambda state: False)
|
||||
for exit in OWGSets.get_glitched_speed_drops_dw():
|
||||
set_rule(world.get_entrance(exit, player), lambda state: False)
|
||||
for exit in OWGSets.get_mirror_clip_spots_dw():
|
||||
set_rule(world.get_entrance(exit, player), lambda state: False)
|
||||
|
||||
|
||||
def inverted_rules(world, player):
|
||||
# s&q regions. link's house entrance is set to true so the filler knows the chest inside can always be reached
|
||||
world.get_region('Inverted Links House', player).can_reach_private = lambda state: True
|
||||
|
@ -644,6 +659,7 @@ def no_glitches_rules(world, player):
|
|||
add_rule(world.get_entrance('Ganons Tower (Double Switch Room)', player), lambda state: state.has('Hookshot', player))
|
||||
set_rule(world.get_entrance('Paradox Cave Push Block Reverse', player), lambda state: False) # no glitches does not require block override
|
||||
forbid_bomb_jump_requirements(world, player)
|
||||
forbid_overworld_glitches(world, player)
|
||||
add_conditional_lamps(world, player)
|
||||
|
||||
|
||||
|
@ -731,46 +747,22 @@ def overworld_glitches_rules(world, player):
|
|||
set_rule(world.get_entrance(entrance, player), lambda state: True)
|
||||
|
||||
# Boots-accessible locations.
|
||||
for entrance in OWGSets.get_lw_boots_accessible_entrances(world, player):
|
||||
add_rule(world.get_entrance(entrance, player), lambda state: state.can_boots_clip_lw(player), 'or')
|
||||
for location in OWGSets.get_lw_boots_accessible_locations():
|
||||
add_rule(world.get_location(location, player), lambda state: state.can_boots_clip_lw(player), 'or')
|
||||
for entrance in OWGSets.get_dw_boots_accessible_entrances(world, player):
|
||||
add_rule(world.get_entrance(entrance, player), lambda state: state.can_boots_clip_dw(player), 'or')
|
||||
for location in OWGSets.get_dw_boots_accessible_locations():
|
||||
add_rule(world.get_location(location, player), lambda state: state.can_boots_clip_dw(player), 'or')
|
||||
for entrance in OWGSets.get_boots_clip_exits_lw():
|
||||
set_rule(world.get_entrance(entrance, player), lambda state: state.can_boots_clip_lw(player))
|
||||
for entrance in OWGSets.get_boots_clip_exits_dw():
|
||||
set_rule(world.get_entrance(entrance, player), lambda state: state.can_boots_clip_dw(player))
|
||||
|
||||
# Boots-accessible regions.
|
||||
boots_and_mirror = lambda state: state.has_Boots(player) and state.has_Mirror(player)
|
||||
if world.mode[player] != 'inverted':
|
||||
for boots_accessible_region in OWGSets.get_boots_accessible_regions_lw():
|
||||
region = world.get_region(boots_accessible_region, player)
|
||||
region.can_reach_private = lambda state: region.can_reach(state) or state.has_Boots(player)
|
||||
# DMD with and without bunny.
|
||||
for dmd_bunny_region in OWGSets.get_dmd_and_bunny_regions():
|
||||
region = world.get_region(dmd_bunny_region, player)
|
||||
region.can_reach_private = lambda state: region.can_reach(state) or (state.can_boots_clip_dw(player) or state.can_bunny_dmd(player))
|
||||
for non_dmd_bunny_region in OWGSets.get_dmd_non_bunny_regions():
|
||||
region = world.get_region(non_dmd_bunny_region, player)
|
||||
region.can_reach_private = lambda state: region.can_reach(state) or state.can_boots_clip_dw(player)
|
||||
edmb = world.get_region('Dark Death Mountain (East Bottom)', player)
|
||||
edmb.can_reach_private = lambda state: edmb.can_reach(state) or state.can_bunny_dmd(player)
|
||||
# Glitched speed drops.
|
||||
for drop in OWGSets.get_glitched_speed_drops_lw():
|
||||
set_rule(world.get_entrance(drop, player), lambda state: state.can_get_glitched_speed_lw(player))
|
||||
for drop in OWGSets.get_glitched_speed_drops_dw():
|
||||
set_rule(world.get_entrance(drop, player), lambda state: state.can_get_glitched_speed_dw(player))
|
||||
# Dark Death Mountain Ledge Clip Spot also accessible with mirror.
|
||||
add_rule(world.get_entrance('Dark Death Mountain Ledge Clip Spot', player), lambda state: state.has_Mirror(player), 'or')
|
||||
|
||||
# Set up some mirror-accessible DW entrances.
|
||||
for spot in world.get_region('West Dark World', player).exits + world.get_region('South Dark World', player).exits:
|
||||
if spot.name not in OWGSets.get_dw_bunny_inaccessible_locations():
|
||||
add_rule(world.get_entrance(spot, player), boots_and_mirror, 'or')
|
||||
# DW entrances accessible with mirror and hookshot.
|
||||
for spot in OWGSets.get_mirror_hookshot_accessible_dw_locations(world, player):
|
||||
add_rule(world.get_entrance(spot, player), lambda state: state.has_Boots(player) and state.has_Mirror(player) and state.has('Hookshot', player), 'or')
|
||||
# DW entrances accessible with mirror and titans.
|
||||
boots_mirror_titans = lambda state: state.has_Boots(player) and state.has_Mirror(player) and state.can_lift_heavy_rocks(player)
|
||||
add_rule(world.get_entrance('Mire Shed', player), boots_mirror_titans, 'or')
|
||||
# Plus the mirror superbunny version.
|
||||
add_rule(world.get_entrance('Mire Shed', player), lambda state: state.has('Ocarina', player) and state.has_Mirror(player) and state.can_lift_heavy_rocks(player), 'or')
|
||||
add_rule(world.get_location('Frog', player), boots_mirror_titans, 'or')
|
||||
else:
|
||||
add_rule(world.get_entrance('East Death Mountain Mirror Spot (Bottom)', player), boots_and_mirror, 'or')
|
||||
# Mirror clip spots.
|
||||
for clip_spot in OWGSets.get_mirror_clip_spots_dw():
|
||||
set_rule(world.get_entrance(clip_spot, player), lambda state: state.has_Mirror(player))
|
||||
|
||||
# Locations that you can superbunny mirror into, but need a sword to clear.
|
||||
superbunny_mirror_weapon = lambda state: state.has_Mirror(player) and state.has_sword(player)
|
||||
|
@ -783,10 +775,11 @@ def overworld_glitches_rules(world, player):
|
|||
|
||||
# Regions that require the boots and some other stuff.
|
||||
if world.mode[player] != 'inverted':
|
||||
set_rule(world.get_entrance('Dark Desert Teleporter', player), lambda state: state.has('Ocarina', player) or (state.has_Boots(player) and state.can_lift_heavy_rocks(player)))
|
||||
add_rule(world.get_entrance('Ganons Tower', player), lambda state: state.has_Boots(player) and state.has_Pearl(player), 'or')
|
||||
add_rule(world.get_entrance('East Death Mountain Teleporter', player), lambda state: state.can_lift_heavy_rocks(player) and state.has_Boots(player), 'or')
|
||||
add_rule(world.get_entrance('Turtle Rock Teleporter', player), lambda state: state.has_Boots(player) and state.has('Hammer', player), 'or')
|
||||
set_rule(world.get_entrance('Dark Desert Teleporter', player), lambda state: state.has('Ocarina', player) or (state.can_boots_clip_dw(player) and state.can_lift_heavy_rocks(player)))
|
||||
set_rule(world.get_entrance('Turtle Rock Teleporter', player), lambda state: (state.can_boots_clip_dw(player) or state.can_lift_heavy_rocks(player)) and state.has('Hammer', player))
|
||||
add_rule(world.get_entrance('Catfish Exit Rock', player), lambda state: state.can_boots_clip_dw(player), 'or')
|
||||
add_rule(world.get_entrance('East Dark World Broken Bridge Pass', player), lambda state: state.can_boots_clip_dw(player), 'or')
|
||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.can_reach('Dark Death Mountain (West Bottom)', 'Region', player) and state.has_Mirror(player))
|
||||
else:
|
||||
add_rule(world.get_entrance('South Dark World Teleporter', player), lambda state: state.has_Boots(player) and state.can_lift_rocks(player), 'or')
|
||||
|
||||
|
|
Loading…
Reference in New Issue