owg start

This commit is contained in:
qadan
2020-01-02 13:08:01 -04:00
parent 0de0467b5c
commit 901b25952d
2 changed files with 58 additions and 360 deletions

View File

@@ -38,6 +38,8 @@ def set_rules(world, player):
if world.logic[player] == 'noglitches':
no_glitches_rules(world, player)
elif world.logic[player] == 'owglitches':
overworld_glitches_rules(world, player)
elif world.logic[player] == 'minorglitches':
logging.getLogger('').info('Minor Glitches may be buggy still. No guarantee for proper logic checks.')
else:
@@ -357,7 +359,6 @@ def default_rules(world, player):
set_rule(world.get_entrance('Kings Grave Mirror Spot', player), lambda state: state.has_Pearl(player) and state.has_Mirror(player))
# Caution: If king's grave is releaxed at all to account for reaching it via a two way cave's exit in insanity mode, then the bomb shop logic will need to be updated (that would involve create a small ledge-like Region for it)
set_rule(world.get_entrance('Bonk Fairy (Light)', player), lambda state: state.has_Boots(player))
set_rule(world.get_entrance('Bat Cave Drop Ledge', player), lambda state: state.has('Hammer', player))
set_rule(world.get_entrance('Lumberjack Tree Tree', player), lambda state: state.has_Boots(player) and state.has('Beat Agahnim 1', player))
set_rule(world.get_entrance('Bonk Rock Cave', player), lambda state: state.has_Boots(player))
set_rule(world.get_entrance('Desert Palace Stairs', player), lambda state: state.has('Book of Mudora', player))
@@ -625,6 +626,7 @@ def no_glitches_rules(world, player):
set_rule(world.get_entrance('Dark Lake Hylia Teleporter', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player) and (state.has('Hammer', player) or state.can_lift_rocks(player)))
set_rule(world.get_entrance('Dark Lake Hylia Ledge Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
else:
set_rule(world.get_entrance('Bat Cave Drop Ledge', player), lambda state: state.has('Hammer', player))
set_rule(world.get_entrance('Zoras River', player), lambda state: state.has_Pearl(player) and (state.has('Flippers', player) or state.can_lift_rocks(player)))
set_rule(world.get_entrance('Lake Hylia Central Island Pier', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) # can be fake flippered to
set_rule(world.get_entrance('Lake Hylia Island', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
@@ -691,6 +693,61 @@ def no_glitches_rules(world, player):
add_lamp_requirement(world.get_entrance('Throne Room', player), player)
def overworld_glitches_rules(world, player):
# spots that are immediately accessible
set_rule(world.get_location('Zoras River', player), lambda state: True)
set_rule(world.get_location('Hobo Bridge', player), lambda state: True)
set_rule(world.get_location('Lake Hylia Central Island', player), lambda state: True)
# lw boots-accessible locations
lw_boots_accessible_locations = [
'Bat Cave Drop Ledge',
'Zora\'s Ledge',
]
lw_boots_accessible_entrances = [
'Death Mountain Return Ledge',
'Cave 45 Ledge',
'Graveyard Ledge',
'Lake Hylia Island'
'Desert Ledge',
'Desert Ledge (Northeast)',
'Desert Palace Entrance (North) Spot',
'Death Mountain',
'East Death Mountain (Bottom)',
'East Death Mountain (Top)',
'Death Mountain (Top)',
'Spectacle Rock',
'Death Mountain Floating Island (Light World)',
'Turtle Rock Teleporter',
]
# dw boots-accessible regions
dw_boots_accessible_regions = [
'Northeast Dark World',
'Dark Lake Hylia',
'Dark Lake Hylia Ledge',
'West Dark World',
'Hammer Peg Area',
'Bumper Cave Ledge',
'Dark Desert',
'Dark Death Mountain (Top)',
'Dark Death Mountain Ledge',
'Dark Death Mountain (East Bottom)',
'Death Mountain Floating Island (Dark World)',
'Turtle Rock (Top)',
'Ganons Tower',
]
needs_boots = lambda state: state.has_Boots(player)
needs_boots_and_pearl = lambda state: state.has_Boots(player) and state.has_Pearl(player)
for spot in lw_boots_accessible_regions:
add_rule(world.get_region(spot, player), needs_boots_and_pearl if world.mode[player] == 'inverted' else needs_boots, 'or')
for spot in dw_boots_accessible_regions:
add_rule(world.get_region(spot, player), needs_boots if world.mode[player] == 'inverted' else needs_boots_and_pearl, 'or')
# couple other random spots
if world.mode[player] != 'inverted':
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_entrance('Waterfall of Wishing', player), lambda state: state.has('Flippers', player) or state.has_Pearl(player))
else:
def open_rules(world, player):
# softlock protection as you can reach the sewers small key door with a guard drop key
set_rule(world.get_location('Hyrule Castle - Boomerang Chest', player), lambda state: state.has_key('Small Key (Escape)', player))