Check if flute can be activated for more logic conditions
This commit is contained in:
parent
c1d7b33b4f
commit
e452180790
30
Rules.py
30
Rules.py
|
@ -11,7 +11,7 @@ def set_rules(world, player):
|
||||||
if world.players > 1:
|
if world.players > 1:
|
||||||
locality_rules(world, player)
|
locality_rules(world, player)
|
||||||
if world.logic[player] == 'nologic':
|
if world.logic[player] == 'nologic':
|
||||||
logging.getLogger('').info(
|
logging.info(
|
||||||
'WARNING! Seeds generated under this logic often require major glitches and may be impossible!')
|
'WARNING! Seeds generated under this logic often require major glitches and may be impossible!')
|
||||||
if world.players == 1:
|
if world.players == 1:
|
||||||
world.get_region('Menu', player).can_reach_private = lambda state: True
|
world.get_region('Menu', player).can_reach_private = lambda state: True
|
||||||
|
@ -448,9 +448,9 @@ def default_rules(world, player):
|
||||||
set_rule(world.get_entrance('50 Rupee Cave', player), lambda state: state.can_lift_rocks(player))
|
set_rule(world.get_entrance('50 Rupee Cave', player), lambda state: state.can_lift_rocks(player))
|
||||||
set_rule(world.get_entrance('Death Mountain Entrance Rock', player), lambda state: state.can_lift_rocks(player))
|
set_rule(world.get_entrance('Death Mountain Entrance Rock', player), lambda state: state.can_lift_rocks(player))
|
||||||
set_rule(world.get_entrance('Bumper Cave Entrance Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Bumper Cave Entrance Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Flute Spot 1', player), lambda state: state.has('Flute', player))
|
set_rule(world.get_entrance('Flute Spot 1', player), lambda state: state.can_flute(player))
|
||||||
set_rule(world.get_entrance('Lake Hylia Central Island Teleporter', player), lambda state: state.can_lift_heavy_rocks(player))
|
set_rule(world.get_entrance('Lake Hylia Central Island Teleporter', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||||
set_rule(world.get_entrance('Dark Desert Teleporter', player), lambda state: state.has('Flute', player) and state.can_lift_heavy_rocks(player))
|
set_rule(world.get_entrance('Dark Desert Teleporter', player), lambda state: state.can_flute(player) and state.can_lift_heavy_rocks(player))
|
||||||
set_rule(world.get_entrance('East Hyrule Teleporter', player), lambda state: state.has('Hammer', player) and state.can_lift_rocks(player) and state.has_Pearl(player)) # bunny cannot use hammer
|
set_rule(world.get_entrance('East Hyrule Teleporter', player), lambda state: state.has('Hammer', player) and state.can_lift_rocks(player) and state.has_Pearl(player)) # bunny cannot use hammer
|
||||||
set_rule(world.get_entrance('South Hyrule Teleporter', player), lambda state: state.has('Hammer', player) and state.can_lift_rocks(player) and state.has_Pearl(player)) # bunny cannot use hammer
|
set_rule(world.get_entrance('South Hyrule Teleporter', player), lambda state: state.has('Hammer', player) and state.can_lift_rocks(player) and state.has_Pearl(player)) # bunny cannot use hammer
|
||||||
set_rule(world.get_entrance('Kakariko Teleporter', player), lambda state: ((state.has('Hammer', player) and state.can_lift_rocks(player)) or state.can_lift_heavy_rocks(player)) and state.has_Pearl(player)) # bunny cannot lift bushes
|
set_rule(world.get_entrance('Kakariko Teleporter', player), lambda state: ((state.has('Hammer', player) and state.can_lift_rocks(player)) or state.can_lift_heavy_rocks(player)) and state.has_Pearl(player)) # bunny cannot lift bushes
|
||||||
|
@ -1121,52 +1121,52 @@ def set_big_bomb_rules(world, player):
|
||||||
elif bombshop_entrance.name in Isolated_DW_entrances:
|
elif bombshop_entrance.name in Isolated_DW_entrances:
|
||||||
# 1. mirror then flute then basic routes
|
# 1. mirror then flute then basic routes
|
||||||
# -> M and Flute and BR
|
# -> M and Flute and BR
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has_Mirror(player) and state.has('Flute', player) and basic_routes(state))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has_Mirror(player) and state.can_flute(player) and basic_routes(state))
|
||||||
elif bombshop_entrance.name in Isolated_LW_entrances:
|
elif bombshop_entrance.name in Isolated_LW_entrances:
|
||||||
# 1. flute then basic routes
|
# 1. flute then basic routes
|
||||||
# Prexisting mirror spot is not permitted, because mirror might have been needed to reach these isolated locations.
|
# Prexisting mirror spot is not permitted, because mirror might have been needed to reach these isolated locations.
|
||||||
# -> Flute and BR
|
# -> Flute and BR
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has('Flute', player) and basic_routes(state))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.can_flute(player) and basic_routes(state))
|
||||||
elif bombshop_entrance.name in West_LW_DM_entrances:
|
elif bombshop_entrance.name in West_LW_DM_entrances:
|
||||||
# 1. flute then basic routes or mirror
|
# 1. flute then basic routes or mirror
|
||||||
# Prexisting mirror spot is permitted, because flute can be used to reach west DM directly.
|
# Prexisting mirror spot is permitted, because flute can be used to reach west DM directly.
|
||||||
# -> Flute and (M or BR)
|
# -> Flute and (M or BR)
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has('Flute', player) and (state.has_Mirror(player) or basic_routes(state)))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.can_flute(player) and (state.has_Mirror(player) or basic_routes(state)))
|
||||||
elif bombshop_entrance.name in East_LW_DM_entrances:
|
elif bombshop_entrance.name in East_LW_DM_entrances:
|
||||||
# 1. flute then basic routes or mirror and hookshot
|
# 1. flute then basic routes or mirror and hookshot
|
||||||
# Prexisting mirror spot is permitted, because flute can be used to reach west DM directly and then east DM via Hookshot
|
# Prexisting mirror spot is permitted, because flute can be used to reach west DM directly and then east DM via Hookshot
|
||||||
# -> Flute and ((M and Hookshot) or BR)
|
# -> Flute and ((M and Hookshot) or BR)
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has('Flute', player) and ((state.has_Mirror(player) and state.has('Hookshot', player)) or basic_routes(state)))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.can_flute(player) and ((state.has_Mirror(player) and state.has('Hookshot', player)) or basic_routes(state)))
|
||||||
elif bombshop_entrance.name == 'Fairy Ascension Cave (Bottom)':
|
elif bombshop_entrance.name == 'Fairy Ascension Cave (Bottom)':
|
||||||
# Same as East_LW_DM_entrances except navigation without BR requires Mitts
|
# Same as East_LW_DM_entrances except navigation without BR requires Mitts
|
||||||
# -> Flute and ((M and Hookshot and Mitts) or BR)
|
# -> Flute and ((M and Hookshot and Mitts) or BR)
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has('Flute', player) and ((state.has_Mirror(player) and state.has('Hookshot', player) and state.can_lift_heavy_rocks(player)) or basic_routes(state)))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.can_flute(player) and ((state.has_Mirror(player) and state.has('Hookshot', player) and state.can_lift_heavy_rocks(player)) or basic_routes(state)))
|
||||||
elif bombshop_entrance.name in Castle_ledge_entrances:
|
elif bombshop_entrance.name in Castle_ledge_entrances:
|
||||||
# 1. mirror on pyramid to castle ledge, grab bomb, return through mirror spot: Needs mirror
|
# 1. mirror on pyramid to castle ledge, grab bomb, return through mirror spot: Needs mirror
|
||||||
# 2. flute then basic routes
|
# 2. flute then basic routes
|
||||||
# -> M or (Flute and BR)
|
# -> M or (Flute and BR)
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has_Mirror(player) or (state.has('Flute', player) and basic_routes(state)))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.has_Mirror(player) or (state.can_flute(player) and basic_routes(state)))
|
||||||
elif bombshop_entrance.name in Desert_mirrorable_ledge_entrances:
|
elif bombshop_entrance.name in Desert_mirrorable_ledge_entrances:
|
||||||
# Cases when you have mire access: Mirror to reach locations, return via mirror spot, move to center of desert, mirror anagin and:
|
# Cases when you have mire access: Mirror to reach locations, return via mirror spot, move to center of desert, mirror anagin and:
|
||||||
# 1. Have mire access, Mirror to reach locations, return via mirror spot, move to center of desert, mirror again and then basic routes
|
# 1. Have mire access, Mirror to reach locations, return via mirror spot, move to center of desert, mirror again and then basic routes
|
||||||
# 2. flute then basic routes
|
# 2. flute then basic routes
|
||||||
# -> (Mire access and M) or Flute) and BR
|
# -> (Mire access and M) or Flute) and BR
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: ((state.can_reach('Dark Desert', 'Region', player) and state.has_Mirror(player)) or state.has('Flute', player)) and basic_routes(state))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: ((state.can_reach('Dark Desert', 'Region', player) and state.has_Mirror(player)) or state.can_flute(player)) and basic_routes(state))
|
||||||
elif bombshop_entrance.name == 'Old Man Cave (West)':
|
elif bombshop_entrance.name == 'Old Man Cave (West)':
|
||||||
# 1. Lift rock then basic_routes
|
# 1. Lift rock then basic_routes
|
||||||
# 2. flute then basic_routes
|
# 2. flute then basic_routes
|
||||||
# -> (Flute or G) and BR
|
# -> (Flute or G) and BR
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.has('Flute', player) or state.can_lift_rocks(player)) and basic_routes(state))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.can_flute(player) or state.can_lift_rocks(player)) and basic_routes(state))
|
||||||
elif bombshop_entrance.name == 'Graveyard Cave':
|
elif bombshop_entrance.name == 'Graveyard Cave':
|
||||||
# 1. flute then basic routes
|
# 1. flute then basic routes
|
||||||
# 2. (has west dark world access) use existing mirror spot (required Pearl), mirror again off ledge
|
# 2. (has west dark world access) use existing mirror spot (required Pearl), mirror again off ledge
|
||||||
# -> (Flute or (M and P and West Dark World access) and BR
|
# -> (Flute or (M and P and West Dark World access) and BR
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.has('Flute', player) or (state.can_reach('West Dark World', 'Region', player) and state.has_Pearl(player) and state.has_Mirror(player))) and basic_routes(state))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.can_flute(player) or (state.can_reach('West Dark World', 'Region', player) and state.has_Pearl(player) and state.has_Mirror(player))) and basic_routes(state))
|
||||||
elif bombshop_entrance.name in Mirror_from_SDW_entrances:
|
elif bombshop_entrance.name in Mirror_from_SDW_entrances:
|
||||||
# 1. flute then basic routes
|
# 1. flute then basic routes
|
||||||
# 2. (has South dark world access) use existing mirror spot, mirror again off ledge
|
# 2. (has South dark world access) use existing mirror spot, mirror again off ledge
|
||||||
# -> (Flute or (M and South Dark World access) and BR
|
# -> (Flute or (M and South Dark World access) and BR
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.has('Flute', player) or (state.can_reach('South Dark World', 'Region', player) and state.has_Mirror(player))) and basic_routes(state))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.can_flute(player) or (state.can_reach('South Dark World', 'Region', player) and state.has_Mirror(player))) and basic_routes(state))
|
||||||
elif bombshop_entrance.name == 'Dark World Potion Shop':
|
elif bombshop_entrance.name == 'Dark World Potion Shop':
|
||||||
# 1. walk down by lifting rock: needs gloves and pearl`
|
# 1. walk down by lifting rock: needs gloves and pearl`
|
||||||
# 2. walk down by hammering peg: needs hammer and pearl
|
# 2. walk down by hammering peg: needs hammer and pearl
|
||||||
|
@ -1178,11 +1178,11 @@ def set_big_bomb_rules(world, player):
|
||||||
# (because otherwise mirror was used to reach the grave, so would cancel a pre-existing mirror spot)
|
# (because otherwise mirror was used to reach the grave, so would cancel a pre-existing mirror spot)
|
||||||
# to account for insanity, must consider a way to escape without a cave for basic_routes
|
# to account for insanity, must consider a way to escape without a cave for basic_routes
|
||||||
# -> (M and Mitts) or ((Mitts or Flute or (M and P and West Dark World access)) and BR)
|
# -> (M and Mitts) or ((Mitts or Flute or (M and P and West Dark World access)) and BR)
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.can_lift_heavy_rocks(player) and state.has_Mirror(player)) or ((state.can_lift_heavy_rocks(player) or state.has('Flute', player) or (state.can_reach('West Dark World', 'Region', player) and state.has_Pearl(player) and state.has_Mirror(player))) and basic_routes(state)))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.can_lift_heavy_rocks(player) and state.has_Mirror(player)) or ((state.can_lift_heavy_rocks(player) or state.can_flute(player) or (state.can_reach('West Dark World', 'Region', player) and state.has_Pearl(player) and state.has_Mirror(player))) and basic_routes(state)))
|
||||||
elif bombshop_entrance.name == 'Waterfall of Wishing':
|
elif bombshop_entrance.name == 'Waterfall of Wishing':
|
||||||
# same as the Normal_LW_entrances case except in insanity it's possible you could be here without Flippers which
|
# same as the Normal_LW_entrances case except in insanity it's possible you could be here without Flippers which
|
||||||
# means you need an escape route of either Flippers or Flute
|
# means you need an escape route of either Flippers or Flute
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.has('Flippers', player) or state.has('Flute', player)) and (basic_routes(state) or state.has_Mirror(player)))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.has('Flippers', player) or state.can_flute(player)) and (basic_routes(state) or state.has_Mirror(player)))
|
||||||
|
|
||||||
|
|
||||||
def set_inverted_big_bomb_rules(world, player):
|
def set_inverted_big_bomb_rules(world, player):
|
||||||
|
|
Loading…
Reference in New Issue