maybe broken stuff oh boy
This commit is contained in:
parent
bcb509937a
commit
c20fe90c0f
|
@ -2922,6 +2922,7 @@ mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia Central
|
||||||
('Spiral Cave Mirror Spot', 'Spiral Cave Ledge'),
|
('Spiral Cave Mirror Spot', 'Spiral Cave Ledge'),
|
||||||
('Mimic Cave Mirror Spot', 'Mimic Cave Ledge'),
|
('Mimic Cave Mirror Spot', 'Mimic Cave Ledge'),
|
||||||
('Cave 45 Mirror Spot', 'Cave 45 Ledge'),
|
('Cave 45 Mirror Spot', 'Cave 45 Ledge'),
|
||||||
|
('Bombos Tablet Mirror Spot', 'Bombos Tablet Ledge')
|
||||||
('Graveyard Ledge Mirror Spot', 'Graveyard Ledge'),
|
('Graveyard Ledge Mirror Spot', 'Graveyard Ledge'),
|
||||||
|
|
||||||
('Swamp Palace Moat', 'Swamp Palace (First Room)'),
|
('Swamp Palace Moat', 'Swamp Palace (First Room)'),
|
||||||
|
|
|
@ -0,0 +1,195 @@
|
||||||
|
class OWGSets(self):
|
||||||
|
'''
|
||||||
|
Helper class to deliver entrance/exit/region sets to OWG rules.
|
||||||
|
'''
|
||||||
|
|
||||||
|
def get_immediately_accessible_entrances(self):
|
||||||
|
'''
|
||||||
|
Entrances that are available with no items at all.
|
||||||
|
|
||||||
|
At this point, these are fake flipper spots.
|
||||||
|
'''
|
||||||
|
return [
|
||||||
|
'Hobo Bridge',
|
||||||
|
'Zoras River',
|
||||||
|
'Lake Hylia Island Mirror Spot',
|
||||||
|
'Capacity Upgrade',
|
||||||
|
]
|
||||||
|
|
||||||
|
def get_lw_boots_accessible_entrances(self, 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)',
|
||||||
|
'Flute Spot 1',
|
||||||
|
'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)',
|
||||||
|
'Spectacle Rock Mirror Spot',
|
||||||
|
'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)',
|
||||||
|
'Spectacle Rock Drop',
|
||||||
|
'Death Mountain Return Cave (West)',
|
||||||
|
'Paradox Cave (Bottom)',
|
||||||
|
'Paradox Cave (Middle)',
|
||||||
|
'Hookshot Fairy',
|
||||||
|
'Spiral Cave (Bottom)',
|
||||||
|
'Paradox Cave (Top)',
|
||||||
|
'Spiral Cave Ledge Access',
|
||||||
|
'Fairy Ascension Ledge',
|
||||||
|
'Cave 45 Mirror Spot',
|
||||||
|
'Graveyard Ledge Mirror Spot',
|
||||||
|
'Bumper Cave Ledge Mirror Spot',
|
||||||
|
'Desert Ledge (Northeast) Mirror Spot',
|
||||||
|
'Desert Ledge Mirror Spot',
|
||||||
|
'Desert Palace Entrance (North) Mirror Spot',
|
||||||
|
'East Death Mountain (Top) Mirror Spot',
|
||||||
|
'Spiral Cave Mirror Spot',
|
||||||
|
'Fairy Ascension Mirror Spot',
|
||||||
|
'Floating Island Mirror Spot',
|
||||||
|
]
|
||||||
|
|
||||||
|
if world.mode[player] != 'inverted':
|
||||||
|
entrances.append('Cave 45')
|
||||||
|
entrances.append('Graveyard Cave')
|
||||||
|
|
||||||
|
return entrances
|
||||||
|
|
||||||
|
|
||||||
|
def get_lw_boots_accessible_locations(self):
|
||||||
|
'''
|
||||||
|
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(self):
|
||||||
|
'''
|
||||||
|
Dark World entrances that can be accessed with boots clips.
|
||||||
|
'''
|
||||||
|
return [
|
||||||
|
'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',
|
||||||
|
'Dark Lake Hylia Ledge',
|
||||||
|
'Hype Cave',
|
||||||
|
'Dark World Potion Shop',
|
||||||
|
'Big Bomb Shop',
|
||||||
|
'Archery Game',
|
||||||
|
'Brewery',
|
||||||
|
'C-Shaped House',
|
||||||
|
'Chest Game',
|
||||||
|
'Thieves Town',
|
||||||
|
'Kings Grave Mirror Spot',
|
||||||
|
'Bumper Cave Entrance Rock',
|
||||||
|
'Red Shield Shop',
|
||||||
|
'Dark Sanctuary Hint',
|
||||||
|
'Fortune Teller (Dark)',
|
||||||
|
'Dark World Lumberjack Shop',
|
||||||
|
'Misery Mire',
|
||||||
|
'Mire Shed',
|
||||||
|
'Dark Desert Hint',
|
||||||
|
'Dark Desert Fairy',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def get_dw_boots_accessible_locations(self):
|
||||||
|
'''
|
||||||
|
Dark World locations accessible using boots clips.
|
||||||
|
'''
|
||||||
|
return [
|
||||||
|
'Catfish',
|
||||||
|
'Dark Blacksmith Ruins',
|
||||||
|
'Bumper Cave Ledge',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def get_dw_bunny_inaccessible_locations(self):
|
||||||
|
'''
|
||||||
|
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(self):
|
||||||
|
'''
|
||||||
|
Dark World regions accessible using Link and Bunny DMD methods.
|
||||||
|
'''
|
||||||
|
return [
|
||||||
|
'West Dark World',
|
||||||
|
'South Dark World',
|
||||||
|
'Northeast Dark World',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def get_dmd_non_bunny_regions(self):
|
||||||
|
'''
|
||||||
|
Dark World regions accessible using only Link DMD methods.
|
||||||
|
'''
|
||||||
|
return [
|
||||||
|
'Dark Desert',
|
||||||
|
'East Dark World',
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def get_mirror_hookshot_accessible_dw_locations(self, 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 sword_required_superbunny_mirror_regions(self):
|
||||||
|
'''
|
||||||
|
Cave regions that superbunny can get through - but only with a sword.
|
||||||
|
'''
|
||||||
|
return [
|
||||||
|
'Mini Moldorm Cave',
|
||||||
|
'Spiral Cave (Top)',
|
||||||
|
]
|
|
@ -156,8 +156,9 @@ def create_regions(world, player):
|
||||||
create_dw_region(player, 'Northeast Dark World', ['Catfish'], ['West Dark World Gap', 'Dark World Potion Shop', 'East 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']),
|
||||||
create_cave_region(player, 'Palace of Darkness Hint', 'a storyteller'),
|
create_cave_region(player, 'Palace of Darkness Hint', 'a storyteller'),
|
||||||
create_cave_region(player, 'East Dark World Hint', 'a storyteller'),
|
create_cave_region(player, 'East Dark World Hint', 'a storyteller'),
|
||||||
create_dw_region(player, 'South Dark World', ['Stumpy', 'Digging Game', 'Bombos Tablet'], ['Dark Lake Hylia Drop (South)', 'Hype Cave', 'Swamp Palace', 'Village of Outcasts Heavy Rock', 'Maze Race Mirror Spot',
|
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']),
|
'Cave 45 Mirror Spot', 'East Dark World Bridge', 'Big Bomb Shop', 'Archery Game', 'Bonk Fairy (Dark)', 'Dark Lake Hylia Shop', 'Bombos Tablet Mirror Spot']),
|
||||||
|
create_lw_region(player, 'Bombos Tablet Ledge', ['Bombos Tablet'])
|
||||||
create_cave_region(player, 'Big Bomb Shop', 'the bomb shop'),
|
create_cave_region(player, 'Big Bomb Shop', 'the bomb shop'),
|
||||||
create_cave_region(player, 'Archery Game', 'a game of skill'),
|
create_cave_region(player, 'Archery Game', 'a game of skill'),
|
||||||
create_dw_region(player, 'Dark Lake Hylia', None, ['Lake Hylia Island Mirror Spot', 'East Dark World Pier', 'Dark Lake Hylia Ledge']),
|
create_dw_region(player, 'Dark Lake Hylia', None, ['Lake Hylia Island Mirror Spot', 'East Dark World Pier', 'Dark Lake Hylia Ledge']),
|
||||||
|
|
236
Rules.py
236
Rules.py
|
@ -1,5 +1,6 @@
|
||||||
import collections
|
import collections
|
||||||
import logging
|
import logging
|
||||||
|
import OWGSets
|
||||||
from BaseClasses import CollectionState
|
from BaseClasses import CollectionState
|
||||||
|
|
||||||
|
|
||||||
|
@ -405,7 +406,7 @@ def default_rules(world, player):
|
||||||
set_rule(world.get_entrance('Hyrule Castle Ledge Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Hyrule Castle Ledge Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Hyrule Castle Main Gate', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Hyrule Castle Main Gate', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Dark Lake Hylia Drop (East)', player), lambda state: (state.has_Pearl(player) and state.has('Flippers', player) or state.has_Mirror(player))) # Overworld Bunny Revival
|
set_rule(world.get_entrance('Dark Lake Hylia Drop (East)', player), lambda state: (state.has_Pearl(player) and state.has('Flippers', player) or state.has_Mirror(player))) # Overworld Bunny Revival
|
||||||
set_rule(world.get_location('Bombos Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has_beam_sword(player) and state.has_Mirror(player))
|
set_rule(world.get_location('Bombos Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has_beam_sword(player))
|
||||||
set_rule(world.get_entrance('Dark Lake Hylia Drop (South)', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) # ToDo any fake flipper set up?
|
set_rule(world.get_entrance('Dark Lake Hylia Drop (South)', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) # ToDo any fake flipper set up?
|
||||||
set_rule(world.get_entrance('Dark Lake Hylia Ledge Fairy', player), lambda state: state.has_Pearl(player)) # bomb required
|
set_rule(world.get_entrance('Dark Lake Hylia Ledge Fairy', player), lambda state: state.has_Pearl(player)) # bomb required
|
||||||
set_rule(world.get_entrance('Dark Lake Hylia Ledge Spike Cave', player), lambda state: state.can_lift_rocks(player) and state.has_Pearl(player))
|
set_rule(world.get_entrance('Dark Lake Hylia Ledge Spike Cave', player), lambda state: state.can_lift_rocks(player) and state.has_Pearl(player))
|
||||||
|
@ -418,6 +419,7 @@ def default_rules(world, player):
|
||||||
set_rule(world.get_entrance('Skull Woods Second Section Hole', player), lambda state: state.has_Pearl(player)) # bunny cannot lift bush
|
set_rule(world.get_entrance('Skull Woods Second Section Hole', player), lambda state: state.has_Pearl(player)) # bunny cannot lift bush
|
||||||
set_rule(world.get_entrance('Maze Race Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Maze Race Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Cave 45 Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Cave 45 Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
|
set_rule(world.get_entrance('Bombos Tablet Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('East Dark World Bridge', player), lambda state: state.has_Pearl(player) and state.has('Hammer', player))
|
set_rule(world.get_entrance('East Dark World Bridge', player), lambda state: state.has_Pearl(player) and state.has('Hammer', player))
|
||||||
set_rule(world.get_entrance('Lake Hylia Island Mirror Spot', player), lambda state: state.has_Pearl(player) and state.has_Mirror(player) and state.has('Flippers', player))
|
set_rule(world.get_entrance('Lake Hylia Island Mirror Spot', player), lambda state: state.has_Pearl(player) and state.has_Mirror(player) and state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Lake Hylia Central Island Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Lake Hylia Central Island Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
|
@ -714,117 +716,68 @@ def add_conditional_lamps(world, player):
|
||||||
|
|
||||||
|
|
||||||
def overworld_glitches_rules(world, player):
|
def overworld_glitches_rules(world, player):
|
||||||
# spots that are immediately accessible due to fake flippering
|
# @TODO: Waterfall fairy and Zora ledge could use some logic to determine
|
||||||
set_rule(world.get_entrance('Hobo Bridge', player), lambda state: True)
|
# if we can water walk and/or stored water walk in; currently it's omitted
|
||||||
set_rule(world.get_entrance('Zoras River', player), lambda state: True)
|
# in case no interiors provide a water walk, but one could be kicking
|
||||||
set_rule(world.get_entrance('Lake Hylia Island Mirror Spot', player), lambda state: True)
|
# around. We could detect a path to determine if one can be stored.
|
||||||
set_rule(world.get_entrance('Capacity Upgrade', player), lambda state: True)
|
|
||||||
|
|
||||||
# boots-accessible stuff
|
# Spots that are immediately accessible.
|
||||||
lw_boots_accessible_entrances = [
|
for entrance in OWGSets.get_immediately_accessible_entrances():
|
||||||
'Bat Cave Drop Ledge',
|
set_rule(world.get_entrance(entrance, player), lambda state: True)
|
||||||
'Desert Ledge Return Rocks',
|
|
||||||
'Desert Palace Entrance (West)',
|
# Boots-accessible locations.
|
||||||
'Desert Palace Entrance (North)',
|
needs_boots = lambda state: state.has_Boots(player)
|
||||||
'Flute Spot 1',
|
needs_boots_and_pearl = lambda state: state.has_Boots(player) and state.has_Pearl(player)
|
||||||
'Broken Bridge (East)',
|
for entrance in OWGSets.get_lw_boots_accessible_entrances(world, player):
|
||||||
'Death Mountain Drop',
|
add_rule(world.get_entrance(entrance, player), needs_boots_and_pearl if world.mode[player] == 'inverted' else needs_boots, 'or')
|
||||||
'Old Man Cave (East)',
|
for location in OWGSets.get_lw_boots_accessible_locations():
|
||||||
'Old Man House (Bottom)',
|
add_rule(world.get_location(location, player), needs_boots_and_pearl if world.mode[player] == 'inverted' else needs_boots, 'or')
|
||||||
'Old Man House (Top)',
|
for entrance in OWGSets.get_dw_boots_accessible_entrances():
|
||||||
'Death Mountain Return Cave (East)',
|
add_rule(world.get_entrance(entrance, player), needs_boots_and_pearl if world.mode[player] != 'inverted' else needs_boots, 'or')
|
||||||
'Spectacle Rock Cave',
|
for location in OWGSets.get_dw_boots_accessible_locations():
|
||||||
'Spectacle Rock Cave Peak',
|
add_rule(world.get_location(location, player), needs_boots_and_pearl if world.mode[player] != 'inverted' else needs_boots, 'or')
|
||||||
'Spectacle Rock Cave (Bottom)',
|
|
||||||
'Spectacle Rock Mirror Spot',
|
# Boots-accessible regions due to DMD.
|
||||||
'Broken Bridge (West)',
|
if world.mode[player] != 'inverted':
|
||||||
'Broken Bridge (East)',
|
# DMD with and without bunny.
|
||||||
'East Death Mountain Drop',
|
can_bunny_dmd = lambda state: world.get_region('Death Mountain').can_reach(state, player) and state.has_Mirror(player)
|
||||||
'Spiral Cave Ledge Drop',
|
for dmd_bunny_region in OWGSets.get_dmd_and_bunny_regions():
|
||||||
'Fairy Ascension Drop',
|
region = world.get_region(dmd_bunny_region, player)
|
||||||
'Fairy Ascension Cave (Bottom)',
|
region.can_reach_private = lambda state: region.can_reach(state) or (needs_boots_and_pearl or can_bunny_dmd)
|
||||||
'East Death Mountain (Top)',
|
for non_dmd_bunny_region in OWGSets.get_dmd_non_bunny_regions():
|
||||||
'Death Mountain (Top)',
|
region = world.get_region(non_dmd_bunny_region, player)
|
||||||
'Spectacle Rock Drop',
|
region.can_reach_private = lambda state: region.can_reach(state) or (needs_boots_and_pearl)
|
||||||
'Death Mountain Return Cave (West)',
|
edmb = world.get_region('Dark Death Mountain (East Bottom)', player)
|
||||||
'Paradox Cave (Bottom)',
|
edmb.can_reach_private = lambda state: edmb.can_reach(state) or can_bunny_dmd
|
||||||
'Paradox Cave (Middle)',
|
|
||||||
'Hookshot Fairy',
|
# Set up some mirror-accessible DW entrances.
|
||||||
'Spiral Cave (Bottom)',
|
boots_and_mirror = lambda state: state.has_Boots(player) and state.has_Mirror(player)
|
||||||
'Paradox Cave (Top)',
|
for spot in world.get_region('West Dark World', player).exits + world.get_region('South Dark World', player).exits:
|
||||||
'Spiral Cave Ledge Access',
|
if spot.name not in OWGSets.get_dw_bunny_inaccessible_locations():
|
||||||
'Fairy Ascension Ledge',
|
add_rule(world.get_entrance(spot, player), boots_and_mirror, 'or')
|
||||||
'Cave 45 Mirror Spot',
|
for spot in world.get_region('Dark Death Mountain (East Bottom)', player).locations:
|
||||||
'Graveyard Ledge Mirror Spot',
|
add_rule(world.get_location(spot, player), boots_and_mirror, 'or')
|
||||||
'Bumper Cave Ledge Mirror Spot',
|
# DW entrances accessible with mirror and hookshot.
|
||||||
'Desert Ledge (Northeast) Mirror Spot',
|
for spot in OWGSets.get_mirror_hookshot_accessible_dw_locations(world, player):
|
||||||
'Desert Ledge Mirror Spot',
|
add_rule(world.get_entrance(spot, player), lambda state: state.has_Boots(player) and state.has_Mirror(player) and state.has('Hookshot', player), 'or')
|
||||||
'Desert Palace Entrance (North) Mirror Spot',
|
# DW entrances accessible with mirror and titans.
|
||||||
'East Death Mountain (Top) Mirror Spot',
|
boots_mirror_titans = lambda state: state.has_Boots(player) and state.has_Mirror(player) and state.can_lift_heavy_rocks(player)
|
||||||
'Spiral Cave Mirror Spot',
|
add_rule(world.get_entrance('Mire Shed', player), boots_mirror_titans, 'or')
|
||||||
'Fairy Ascension Mirror Spot',
|
# Plus the mirror superbunny version.
|
||||||
'Floating Island Mirror Spot',
|
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')
|
||||||
lw_boots_accessible_locations = [
|
|
||||||
'Lake Hylia Island',
|
# Locations that you can superbunny mirror into, but need a sword to clear.
|
||||||
'Desert Ledge',
|
superbunny_mirror_weapon = lambda state: state.has_Mirror(player) and state.has_sword(player)
|
||||||
'Spectacle Rock',
|
mini_moldorm_cave = world.get_region('Mini Moldorm Cave', player)
|
||||||
'Floating Island',
|
for superbunny_mirror_weapon_region in OWGSets.get_sword_required_superbunny_mirror_regions():
|
||||||
]
|
region = world.get_region(superbunny_mirror_weapon_region, player)
|
||||||
dw_boots_accessible_entrances = [
|
if check_is_dark_world(region):
|
||||||
'Northeast Dark World Broken Bridge Pass',
|
for spot in region.locations:
|
||||||
'Peg Area Rocks',
|
add_rule(world.get_location(spot, player), superbunny_mirror_weapon, 'or')
|
||||||
'Grassy Lawn Pegs',
|
|
||||||
'West Dark World Gap',
|
# Regions that require the boots and some other stuff.
|
||||||
'Bumper Cave Ledge Drop',
|
|
||||||
'Turtle Rock Drop',
|
|
||||||
'Floating Island Drop',
|
|
||||||
'Dark Death Mountain Drop (East)',
|
|
||||||
'Village of Outcasts Drop',
|
|
||||||
'Dark Lake Hylia Ledge',
|
|
||||||
'Hype Cave',
|
|
||||||
'Dark World Potion Shop',
|
|
||||||
'Big Bomb Shop',
|
|
||||||
'Archery Game',
|
|
||||||
'Brewery',
|
|
||||||
'C-Shaped House',
|
|
||||||
'Chest Game',
|
|
||||||
'Thieves Town',
|
|
||||||
'Kings Grave Mirror Spot',
|
|
||||||
'Bumper Cave Entrance Rock',
|
|
||||||
'Red Shield Shop',
|
|
||||||
'Dark Sanctuary Hint',
|
|
||||||
'Fortune Teller (Dark)',
|
|
||||||
'Dark World Lumberjack Shop',
|
|
||||||
'Misery Mire',
|
|
||||||
'Mire Shed',
|
|
||||||
'Dark Desert Hint',
|
|
||||||
'Dark Desert Fairy',
|
|
||||||
]
|
|
||||||
dw_boots_accessible_locations = [
|
|
||||||
'Catfish',
|
|
||||||
'Dark Blacksmith Ruins',
|
|
||||||
'Bumper Cave Ledge',
|
|
||||||
]
|
|
||||||
dw_bunny_inaccessible_locations = [
|
|
||||||
'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)',
|
|
||||||
]
|
|
||||||
# set up boots-accessible regions
|
|
||||||
if world.mode[player] != 'inverted':
|
if world.mode[player] != 'inverted':
|
||||||
lw_boots_accessible_entrances.append('Cave 45')
|
|
||||||
lw_boots_accessible_entrances.append('Graveyard Cave')
|
|
||||||
# couple other random spots
|
|
||||||
set_rule(world.get_location('Bombos Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has_beam_sword(player) and (state.has_Mirror(player) or state.has_Boots(player)))
|
set_rule(world.get_location('Bombos Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has_beam_sword(player) and (state.has_Mirror(player) or state.has_Boots(player)))
|
||||||
set_rule(world.get_location('Ether Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has_beam_sword(player) and (state.has_Mirror(player) or state.has_Boots(player)))
|
set_rule(world.get_location('Ether Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has_beam_sword(player) and (state.has_Mirror(player) or state.has_Boots(player)))
|
||||||
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)))
|
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)))
|
||||||
|
@ -837,66 +790,7 @@ def overworld_glitches_rules(world, player):
|
||||||
else:
|
else:
|
||||||
add_rule(world.get_entrance('South Dark World Teleporter', player), lambda state: state.has_Boots(player) and state.can_lift_rocks(player), 'or')
|
add_rule(world.get_entrance('South Dark World Teleporter', player), lambda state: state.has_Boots(player) and state.can_lift_rocks(player), 'or')
|
||||||
|
|
||||||
# ton of boots-accessible locations.
|
# Add darkness conditions.
|
||||||
needs_boots = lambda state: state.has_Boots(player)
|
|
||||||
needs_boots_and_pearl = lambda state: state.has_Boots(player) and state.has_Pearl(player)
|
|
||||||
for entrance in lw_boots_accessible_entrances:
|
|
||||||
add_rule(world.get_entrance(entrance, player), needs_boots_and_pearl if world.mode[player] == 'inverted' else needs_boots, 'or')
|
|
||||||
for location in lw_boots_accessible_locations:
|
|
||||||
add_rule(world.get_location(location, player), needs_boots_and_pearl if world.mode[player] == 'inverted' else needs_boots, 'or')
|
|
||||||
for entrance in dw_boots_accessible_entrances:
|
|
||||||
add_rule(world.get_entrance(entrance, player), needs_boots_and_pearl if world.mode[player] != 'inverted' else needs_boots, 'or')
|
|
||||||
for location in dw_boots_accessible_locations:
|
|
||||||
add_rule(world.get_location(location, player), needs_boots_and_pearl if world.mode[player] != 'inverted' else needs_boots, 'or')
|
|
||||||
|
|
||||||
# standard dmd rules, also feat. bunny
|
|
||||||
if world.mode[player] != 'inverted':
|
|
||||||
can_bunny_dmd = lambda state: world.get_region('Death Mountain').can_reach(state, player) and state.has_Mirror(player)
|
|
||||||
wdw = world.get_region('West Dark World', player)
|
|
||||||
wdw.can_reach_private = lambda state: wdw.can_reach(state) or (needs_boots_and_pearl or can_bunny_dmd)
|
|
||||||
sdw = world.get_region('South Dark World', player)
|
|
||||||
sdw.can_reach_private = lambda state: sdw.can_reach(state) or (needs_boots_and_pearl or can_bunny_dmd)
|
|
||||||
dd = world.get_region('Dark Desert', player)
|
|
||||||
dd.can_reach_private = lambda state: dd.can_reach(state) or needs_boots_and_pearl
|
|
||||||
nedw = world.get_region('Northeast Dark World', player)
|
|
||||||
nedw.can_reach_private = lambda state: nedw.can_reach(state) or (needs_boots_and_pearl or can_bunny_dmd)
|
|
||||||
edw = world.get_region('East Dark World', player)
|
|
||||||
edw.can_reach_private = lambda state: edw.can_reach(state) or needs_boots_and_pearl
|
|
||||||
edmb = world.get_region('Dark Death Mountain (East Bottom)', player)
|
|
||||||
edmb.can_reach_private = lambda state: edmb.can_reach(state) or can_bunny_dmd
|
|
||||||
# set up some mirror-accessible dw entrances.
|
|
||||||
boots_and_mirror = lambda state: state.has_Boots(player) and state.has_Mirror(player)
|
|
||||||
for spot in world.get_region('West Dark World', player).exits + world.get_region('South Dark World', player).exits:
|
|
||||||
if spot.name not in dw_bunny_inaccessible_locations:
|
|
||||||
add_rule(world.get_entrance(spot, player), boots_and_mirror, 'or')
|
|
||||||
for spot in world.get_region('Dark Death Mountain (East Bottom)', player).locations:
|
|
||||||
add_rule(world.get_location(spot, player), boots_and_mirror, 'or')
|
|
||||||
# dw entrances accessible with mirror and hookshot
|
|
||||||
mirror_hookshot_accessible_dw_locations = [
|
|
||||||
'Pyramid Fairy',
|
|
||||||
'Pyramid Entrance',
|
|
||||||
'Pyramid Drop',
|
|
||||||
]
|
|
||||||
mirror_hookshot_accessible_dw_locations.extend(world.get_region('Dark Death Mountain Ledge', player).locations)
|
|
||||||
for spot in mirror_hookshot_accessible_dw_locations:
|
|
||||||
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')
|
|
||||||
|
|
||||||
# also, you can do mini moldorm cave and spiral cave - but requiring a sword.
|
|
||||||
superbunny_mirror_weapon = lambda state: state.has_Mirror(player) and state.has_sword(player)
|
|
||||||
mini_moldorm_cave = world.get_region('Mini Moldorm Cave', player)
|
|
||||||
if check_is_dark_world(mini_moldorm_cave):
|
|
||||||
for spot in mini_moldorm_cave.locations:
|
|
||||||
add_rule(world.get_location(spot, player), superbunny_mirror_weapon, 'or')
|
|
||||||
if check_is_dark_world(world.get_region('Spiral Cave (Top)', player)):
|
|
||||||
add_rule(world.get_location('Spiral Cave', player), superbunny_mirror_weapon, 'or')
|
|
||||||
|
|
||||||
# add darkness condition.
|
|
||||||
add_conditional_lamps(world, player)
|
add_conditional_lamps(world, player)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1531,7 +1425,7 @@ def set_inverted_bunny_rules(world, player):
|
||||||
# Note spiral cave may be technically passible, but it would be too absurd to require since OHKO mode is a thing.
|
# Note spiral cave may be technically passible, but it would be too absurd to require since OHKO mode is a thing.
|
||||||
bunny_impassable_caves = ['Bumper Cave', 'Two Brothers House', 'Hookshot Cave', 'Skull Woods First Section (Right)', 'Skull Woods First Section (Left)', 'Skull Woods First Section (Top)', 'Turtle Rock (Entrance)', 'Turtle Rock (Second Section)', 'Turtle Rock (Big Chest)', 'Skull Woods Second Section (Drop)',
|
bunny_impassable_caves = ['Bumper Cave', 'Two Brothers House', 'Hookshot Cave', 'Skull Woods First Section (Right)', 'Skull Woods First Section (Left)', 'Skull Woods First Section (Top)', 'Turtle Rock (Entrance)', 'Turtle Rock (Second Section)', 'Turtle Rock (Big Chest)', 'Skull Woods Second Section (Drop)',
|
||||||
'Turtle Rock (Eye Bridge)', 'Sewers', 'Pyramid', 'Spiral Cave (Top)', 'Desert Palace Main (Inner)', 'Fairy Ascension Cave (Drop)', 'The Sky']
|
'Turtle Rock (Eye Bridge)', 'Sewers', 'Pyramid', 'Spiral Cave (Top)', 'Desert Palace Main (Inner)', 'Fairy Ascension Cave (Drop)', 'The Sky']
|
||||||
bunny_accessible_locations = ['Link\'s Uncle', 'Sahasrahla', 'Sick Kid', 'Lost Woods Hideout', 'Lumberjack Tree', 'Checkerboard Cave', 'Potion Shop', 'Spectacle Rock Cave', 'Pyramid', 'Hype Cave - Generous Guy', 'Peg Cave', 'Bumper Cave Ledge', 'Dark Blacksmith Ruins', 'Bombos Tablet', 'Ether Tablet', 'Purple Chest']
|
bunny_accessible_locations = ['Link\'s Uncle', 'Sahasrahla', 'Sick Kid', 'Lost Woods Hideout', 'Lumberjack Tree', 'Checkerboard Cave', 'Potion Shop', 'Spectacle Rock Cave', 'Pyramid', 'Hype Cave - Generous Guy', 'Peg Cave', 'Bumper Cave Ledge', 'Dark Blacksmith Ruins', 'Bombos Tablet Ledge', 'Ether Tablet', 'Purple Chest']
|
||||||
invalid_mirror_bunny_entrances_lw = ['Bonk Rock Cave', 'Bonk Fairy (Light)', 'Blinds Hideout', '50 Rupee Cave', '20 Rupee Cave', 'Checkerboard Cave', 'Light Hype Fairy', 'Waterfall of Wishing', 'Light World Bomb Hut', 'Mini Moldorm Cave', 'Ice Rod Cave', 'Hyrule Castle Secret Entrance Stairs', 'Sanctuary Grave', 'Kings Grave', 'Tower of Hera']
|
invalid_mirror_bunny_entrances_lw = ['Bonk Rock Cave', 'Bonk Fairy (Light)', 'Blinds Hideout', '50 Rupee Cave', '20 Rupee Cave', 'Checkerboard Cave', 'Light Hype Fairy', 'Waterfall of Wishing', 'Light World Bomb Hut', 'Mini Moldorm Cave', 'Ice Rod Cave', 'Hyrule Castle Secret Entrance Stairs', 'Sanctuary Grave', 'Kings Grave', 'Tower of Hera']
|
||||||
|
|
||||||
def path_to_access_rule(path, entrance):
|
def path_to_access_rule(path, entrance):
|
||||||
|
|
Loading…
Reference in New Issue