Add internal key data
Adds forced keys (enemy and pot drops) to regions, adds key doors within supertiles.
This commit is contained in:
@@ -655,9 +655,10 @@ class RegionType(Enum):
|
|||||||
|
|
||||||
class Region(object):
|
class Region(object):
|
||||||
|
|
||||||
def __init__(self, name, type, hint, player):
|
def __init__(self, name, type, forced_keys, hint, player):
|
||||||
self.name = name
|
self.name = name
|
||||||
self.type = type
|
self.type = type
|
||||||
|
self.forced_keys = forced_keys
|
||||||
self.entrances = []
|
self.entrances = []
|
||||||
self.exits = []
|
self.exits = []
|
||||||
self.locations = []
|
self.locations = []
|
||||||
@@ -809,6 +810,7 @@ class DoorType(Enum):
|
|||||||
Open = 5
|
Open = 5
|
||||||
Hole = 6
|
Hole = 6
|
||||||
Warp = 7
|
Warp = 7
|
||||||
|
Interior = 8
|
||||||
|
|
||||||
|
|
||||||
@unique
|
@unique
|
||||||
|
|||||||
@@ -143,24 +143,27 @@ def connect_one_way(world, entrancename, exitname, player, skipSpoiler=False):
|
|||||||
|
|
||||||
def within_dungeon(world, player):
|
def within_dungeon(world, player):
|
||||||
# TODO: Add dungeon names to Regions so we can just look these lists up
|
# TODO: Add dungeon names to Regions so we can just look these lists up
|
||||||
dungeon_region_names_es = ['Hyrule Castle Lobby', 'Hyrule Castle West Lobby', 'Hyrule Castle East Lobby', 'Hyrule Castle East Hall', 'Hyrule Castle West Hall', 'Hyrule Castle Back Hall', 'Hyrule Castle Throne Room', 'Hyrule Dungeon Map Room', 'Hyrule Dungeon North Abyss', 'Hyrule Dungeon North Abyss Catwalk', 'Hyrule Dungeon South Abyss', 'Hyrule Dungeon South Abyss Catwalk', 'Hyrule Dungeon Guardroom', 'Hyrule Dungeon Armory', 'Hyrule Dungeon Staircase', 'Hyrule Dungeon Cellblock', 'Sewers Behind Tapestry', 'Sewers Rope Room', 'Sewers Dark Cross', 'Sewers Water', 'Sewers Key Rat', 'Sewers Secret Room', 'Sewers Secret Room Blocked Path', 'Sewers Pull Switch', 'Sanctuary']
|
# TODO: The "starts" regions need access logic
|
||||||
|
dungeon_region_starts_es = ['Hyrule Castle Lobby', 'Hyrule Castle West Lobby', 'Hyrule Castle East Lobby', 'Sewers Secret Room']
|
||||||
|
dungeon_region_names_es = ['Hyrule Castle Lobby', 'Hyrule Castle West Lobby', 'Hyrule Castle East Lobby', 'Hyrule Castle East Hall', 'Hyrule Castle West Hall', 'Hyrule Castle Back Hall', 'Hyrule Castle Throne Room', 'Hyrule Dungeon Map Room', 'Hyrule Dungeon North Abyss', 'Hyrule Dungeon North Abyss Catwalk', 'Hyrule Dungeon South Abyss', 'Hyrule Dungeon South Abyss Catwalk', 'Hyrule Dungeon Guardroom', 'Hyrule Dungeon Armory Main', 'Hyrule Dungeon Armory North Branch', 'Hyrule Dungeon Staircase', 'Hyrule Dungeon Cellblock', 'Sewers Behind Tapestry', 'Sewers Rope Room', 'Sewers Dark Cross', 'Sewers Water', 'Sewers Key Rat', 'Sewers Secret Room', 'Sewers Secret Room Blocked Path', 'Sewers Pull Switch', 'Sanctuary']
|
||||||
|
dungeon_region_starts_ep = ['Eastern Lobby']
|
||||||
dungeon_region_names_ep = ['Eastern Lobby', 'Eastern Cannonball', 'Eastern Cannonball Ledge', 'Eastern Courtyard Ledge', 'Eastern Map Area', 'Eastern Compass Area', 'Eastern Courtyard', 'Eastern Fairies', 'Eastern Map Valley', 'Eastern Dark Square', 'Eastern Big Key', 'Eastern Darkness', 'Eastern Attic Start', 'Eastern Attic Switches', 'Eastern Eyegores', 'Eastern Boss']
|
dungeon_region_names_ep = ['Eastern Lobby', 'Eastern Cannonball', 'Eastern Cannonball Ledge', 'Eastern Courtyard Ledge', 'Eastern Map Area', 'Eastern Compass Area', 'Eastern Courtyard', 'Eastern Fairies', 'Eastern Map Valley', 'Eastern Dark Square', 'Eastern Big Key', 'Eastern Darkness', 'Eastern Attic Start', 'Eastern Attic Switches', 'Eastern Eyegores', 'Eastern Boss']
|
||||||
dungeon_region_lists = [dungeon_region_names_es, dungeon_region_names_ep]
|
dungeon_region_lists = [(dungeon_region_starts_es, dungeon_region_names_es), (dungeon_region_starts_ep, dungeon_region_names_ep)]
|
||||||
for region_list in dungeon_region_lists:
|
for start_list, region_list in dungeon_region_lists:
|
||||||
shuffle_dungeon(world, player, region_list)
|
shuffle_dungeon(world, player, start_list, region_list)
|
||||||
|
|
||||||
def shuffle_dungeon(world, player, dungeon_region_names):
|
def shuffle_dungeon(world, player, start_region_names, dungeon_region_names):
|
||||||
logger = logging.getLogger('')
|
logger = logging.getLogger('')
|
||||||
|
# Part one - generate a random layout
|
||||||
available_regions = []
|
available_regions = []
|
||||||
for name in dungeon_region_names:
|
for name in dungeon_region_names:
|
||||||
available_regions.append(world.get_region(name, player))
|
available_regions.append(world.get_region(name, player))
|
||||||
random.shuffle(available_regions)
|
random.shuffle(available_regions)
|
||||||
|
|
||||||
# Pick a random region and make its doors the open set
|
# Pick a random region and make its doors the open set
|
||||||
# TODO: It would make sense to start with the entrance but I'm not sure it's needed.
|
|
||||||
available_doors = []
|
available_doors = []
|
||||||
region = available_regions.pop()
|
region = available_regions.pop()
|
||||||
print("Starting in " + region.name)
|
logger.info("Starting in %s", region.name)
|
||||||
available_doors.extend(get_doors(world, region, player))
|
available_doors.extend(get_doors(world, region, player))
|
||||||
|
|
||||||
# Loop until all available doors are used
|
# Loop until all available doors are used
|
||||||
@@ -188,16 +191,24 @@ def shuffle_dungeon(world, player, dungeon_region_names):
|
|||||||
available_doors.remove(connect_door)
|
available_doors.remove(connect_door)
|
||||||
# Check that we used everything, and retry if we failed
|
# Check that we used everything, and retry if we failed
|
||||||
if len(available_regions) > 0 or len(available_doors) > 0:
|
if len(available_regions) > 0 or len(available_doors) > 0:
|
||||||
logger.info('Failed to add all regions to dungeon, trying again.')
|
logger.info('Failed to add all regions to dungeon, trying again.')
|
||||||
shuffle_dungeon(world, player, dungeon_region_names)
|
shuffle_dungeon(world, player, start_region_names, dungeon_region_names)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
# Connects a and b. Or don't if they're an unsupported connection type.
|
# Connects a and b. Or don't if they're an unsupported connection type.
|
||||||
# TODO: This is gross, don't do it this way
|
# TODO: This is gross, don't do it this way
|
||||||
def maybe_connect_two_way(world, a, b, player):
|
def maybe_connect_two_way(world, a, b, player):
|
||||||
if a.type == DoorType.Open or a.type == DoorType.StraightStairs or a.type == DoorType.Hole or a.type == DoorType.Warp:
|
# Return on unsupported types.
|
||||||
|
if a.type == DoorType.Open or a.type == DoorType.StraightStairs or a.type == DoorType.Hole or a.type == DoorType.Warp or a.type == DoorType.Interior:
|
||||||
return
|
return
|
||||||
connect_two_way(world, a.name, b.name, player)
|
# Connect supported types
|
||||||
|
if a.type == DoorType.Normal or a.type == DoorType.SpiralStairs:
|
||||||
|
connect_two_way(world, a.name, b.name, player)
|
||||||
|
return
|
||||||
|
# If we failed to account for a type, panic
|
||||||
|
raise RuntimeError('Unknown door type ' + a.type)
|
||||||
|
|
||||||
# Finds a compatible door in regions, returns the region and door
|
# Finds a compatible door in regions, returns the region and door
|
||||||
def find_compatible_door_in_regions(world, door, regions, player):
|
def find_compatible_door_in_regions(world, door, regions, player):
|
||||||
for region in regions:
|
for region in regions:
|
||||||
@@ -230,6 +241,8 @@ def doors_compatible(a, b):
|
|||||||
return doors_fit_mandatory_pair(falldown_pits_as_doors, a, b)
|
return doors_fit_mandatory_pair(falldown_pits_as_doors, a, b)
|
||||||
if a.type == DoorType.Warp:
|
if a.type == DoorType.Warp:
|
||||||
return doors_fit_mandatory_pair(dungeon_warps_as_doors, a, b)
|
return doors_fit_mandatory_pair(dungeon_warps_as_doors, a, b)
|
||||||
|
if a.type == DoorType.Interior:
|
||||||
|
return doors_fit_mandatory_pair(interior_doors, a, b)
|
||||||
return a.direction == switch_dir(b.direction)
|
return a.direction == switch_dir(b.direction)
|
||||||
|
|
||||||
def doors_fit_mandatory_pair(pair_list, a, b):
|
def doors_fit_mandatory_pair(pair_list, a, b):
|
||||||
@@ -664,8 +677,6 @@ def experiment(world, player):
|
|||||||
# DATA GOES DOWN HERE
|
# DATA GOES DOWN HERE
|
||||||
|
|
||||||
mandatory_connections = [('Hyrule Dungeon North Abyss Catwalk Dropdown', 'Hyrule Dungeon North Abyss'),
|
mandatory_connections = [('Hyrule Dungeon North Abyss Catwalk Dropdown', 'Hyrule Dungeon North Abyss'),
|
||||||
('Hyrule Dungeon Key Door S', 'Hyrule Dungeon North Abyss'),
|
|
||||||
('Hyrule Dungeon Key Door N', 'Hyrule Dungeon Map Room'),
|
|
||||||
('Sewers Secret Room Push Block', 'Sewers Secret Room Blocked Path')
|
('Sewers Secret Room Push Block', 'Sewers Secret Room Blocked Path')
|
||||||
]
|
]
|
||||||
|
|
||||||
@@ -714,6 +725,8 @@ falldown_pits_as_doors = [('Eastern Courtyard Potholes', 'Eastern Fairy Landing'
|
|||||||
dungeon_warps = [('Eastern Fairies\' Warp', 'Eastern Courtyard')]
|
dungeon_warps = [('Eastern Fairies\' Warp', 'Eastern Courtyard')]
|
||||||
dungeon_warps_as_doors = [('Eastern Fairies\' Warp', 'Eastern Courtyard Warp End')]
|
dungeon_warps_as_doors = [('Eastern Fairies\' Warp', 'Eastern Courtyard Warp End')]
|
||||||
|
|
||||||
|
interior_doors = [('Hyrule Dungeon Armory Interior Key Door S', 'Hyrule Dungeon Armory Interior Key Door N'), ('Hyrule Dungeon Map Room Key Door S', 'Hyrule Dungeon North Abyss Key Door N')]
|
||||||
|
|
||||||
default_door_connections = [('Hyrule Castle Lobby W', 'Hyrule Castle West Lobby E'),
|
default_door_connections = [('Hyrule Castle Lobby W', 'Hyrule Castle West Lobby E'),
|
||||||
('Hyrule Castle Lobby E', 'Hyrule Castle East Lobby W'),
|
('Hyrule Castle Lobby E', 'Hyrule Castle East Lobby W'),
|
||||||
('Hyrule Castle Lobby WN', 'Hyrule Castle West Lobby EN'),
|
('Hyrule Castle Lobby WN', 'Hyrule Castle West Lobby EN'),
|
||||||
|
|||||||
4
Doors.py
4
Doors.py
@@ -44,6 +44,8 @@ def create_doors(world, player):
|
|||||||
|
|
||||||
# hyrule dungeon level
|
# hyrule dungeon level
|
||||||
create_spiral_stairs(player, 'Hyrule Dungeon Map Room Up Stairs', DoorType.SpiralStairs, Direction.Up, 0x72, 0, High, A, 0x4f, 0xf8),
|
create_spiral_stairs(player, 'Hyrule Dungeon Map Room Up Stairs', DoorType.SpiralStairs, Direction.Up, 0x72, 0, High, A, 0x4f, 0xf8),
|
||||||
|
create_small_key_door(player, 'Hyrule Dungeon Map Room Key Door S', DoorType.Interior, Direction.South, 0x71, Right, High),
|
||||||
|
create_small_key_door(player, 'Hyrule Dungeon North Abyss Key Door N', DoorType.Interior, Direction.North, 0x71, Right, High),
|
||||||
create_dir_door(player, 'Hyrule Dungeon North Abyss South Edge', DoorType.Open, Direction.South, 0x72, None, Low),
|
create_dir_door(player, 'Hyrule Dungeon North Abyss South Edge', DoorType.Open, Direction.South, 0x72, None, Low),
|
||||||
create_dir_door(player, 'Hyrule Dungeon North Abyss Catwalk Edge', DoorType.Open, Direction.South, 0x72, None, High),
|
create_dir_door(player, 'Hyrule Dungeon North Abyss Catwalk Edge', DoorType.Open, Direction.South, 0x72, None, High),
|
||||||
create_dir_door(player, 'Hyrule Dungeon South Abyss North Edge', DoorType.Open, Direction.North, 0x82, None, Low),
|
create_dir_door(player, 'Hyrule Dungeon South Abyss North Edge', DoorType.Open, Direction.North, 0x82, None, Low),
|
||||||
@@ -54,6 +56,8 @@ def create_doors(world, player):
|
|||||||
create_dir_door(player, 'Hyrule Dungeon Guardroom Abyss Edge', DoorType.Open, Direction.West, 0x81, None, High),
|
create_dir_door(player, 'Hyrule Dungeon Guardroom Abyss Edge', DoorType.Open, Direction.West, 0x81, None, High),
|
||||||
create_dir_door(player, 'Hyrule Dungeon Guardroom N', DoorType.Normal, Direction.North, 0x81, Left, Low), # todo: is this a toggle door?
|
create_dir_door(player, 'Hyrule Dungeon Guardroom N', DoorType.Normal, Direction.North, 0x81, Left, Low), # todo: is this a toggle door?
|
||||||
create_dir_door(player, 'Hyrule Dungeon Armory S', DoorType.Normal, Direction.South, 0x71, Left, Low), # not sure what the layer should be here
|
create_dir_door(player, 'Hyrule Dungeon Armory S', DoorType.Normal, Direction.South, 0x71, Left, Low), # not sure what the layer should be here
|
||||||
|
create_small_key_door(player, 'Hyrule Dungeon Armory Interior Key Door N', DoorType.Interior, Direction.North, 0x71, Left, High),
|
||||||
|
create_small_key_door(player, 'Hyrule Dungeon Armory Interior Key Door S', DoorType.Interior, Direction.South, 0x71, Left, High),
|
||||||
create_spiral_stairs(player, 'Hyrule Dungeon Armory Down Stairs', DoorType.SpiralStairs, Direction.Down, 0x71, 0, Low, A, 0x1e, 0xa0, True),
|
create_spiral_stairs(player, 'Hyrule Dungeon Armory Down Stairs', DoorType.SpiralStairs, Direction.Down, 0x71, 0, Low, A, 0x1e, 0xa0, True),
|
||||||
create_spiral_stairs(player, 'Hyrule Dungeon Staircase Up Stairs', DoorType.SpiralStairs, Direction.Up, 0x70, 2, High, A, 0x36, 0xa0, True),
|
create_spiral_stairs(player, 'Hyrule Dungeon Staircase Up Stairs', DoorType.SpiralStairs, Direction.Up, 0x70, 2, High, A, 0x36, 0xa0, True),
|
||||||
create_spiral_stairs(player, 'Hyrule Dungeon Staircase Down Stairs', DoorType.SpiralStairs, Direction.Down, 0x70, 1, High, A, 0x1f, 0x50),
|
create_spiral_stairs(player, 'Hyrule Dungeon Staircase Down Stairs', DoorType.SpiralStairs, Direction.Down, 0x70, 1, High, A, 0x1f, 0x50),
|
||||||
|
|||||||
22
Regions.py
22
Regions.py
@@ -296,13 +296,14 @@ def create_regions(world, player):
|
|||||||
create_dungeon_region(player, 'Hyrule Castle Back Hall', 'A dungeon', None, ['Hyrule Castle Back Hall E', 'Hyrule Castle Back Hall W', 'Hyrule Castle Back Hall Down Stairs']),
|
create_dungeon_region(player, 'Hyrule Castle Back Hall', 'A dungeon', None, ['Hyrule Castle Back Hall E', 'Hyrule Castle Back Hall W', 'Hyrule Castle Back Hall Down Stairs']),
|
||||||
create_dungeon_region(player, 'Hyrule Castle Throne Room', 'A dungeon', None, ['Hyrule Castle Throne Room N', 'Hyrule Castle Throne Room South Stairs']),
|
create_dungeon_region(player, 'Hyrule Castle Throne Room', 'A dungeon', None, ['Hyrule Castle Throne Room N', 'Hyrule Castle Throne Room South Stairs']),
|
||||||
|
|
||||||
create_dungeon_region(player, 'Hyrule Dungeon Map Room', 'A dungeon', ['Hyrule Castle - Map Chest'], ['Hyrule Dungeon Key Door S', 'Hyrule Dungeon Map Room Up Stairs']),
|
create_forced_key_region(player, 'Hyrule Dungeon Map Room', 'A dungeon', 1, ['Hyrule Castle - Map Chest'], ['Hyrule Dungeon Map Room Key Door S', 'Hyrule Dungeon Map Room Up Stairs']),
|
||||||
create_dungeon_region(player, 'Hyrule Dungeon North Abyss', 'A dungeon', None, ['Hyrule Dungeon North Abyss South Edge', 'Hyrule Dungeon Key Door N']),
|
create_dungeon_region(player, 'Hyrule Dungeon North Abyss', 'A dungeon', None, ['Hyrule Dungeon North Abyss South Edge', 'Hyrule Dungeon North Abyss Key Door N']),
|
||||||
create_dungeon_region(player, 'Hyrule Dungeon North Abyss Catwalk', 'A dungeon', None, ['Hyrule Dungeon North Abyss Catwalk Edge', 'Hyrule Dungeon North Abyss Catwalk Dropdown']),
|
create_dungeon_region(player, 'Hyrule Dungeon North Abyss Catwalk', 'A dungeon', None, ['Hyrule Dungeon North Abyss Catwalk Edge', 'Hyrule Dungeon North Abyss Catwalk Dropdown']),
|
||||||
create_dungeon_region(player, 'Hyrule Dungeon South Abyss', 'A dungeon', None, ['Hyrule Dungeon South Abyss North Edge', 'Hyrule Dungeon South Abyss West Edge']),
|
create_dungeon_region(player, 'Hyrule Dungeon South Abyss', 'A dungeon', None, ['Hyrule Dungeon South Abyss North Edge', 'Hyrule Dungeon South Abyss West Edge']),
|
||||||
create_dungeon_region(player, 'Hyrule Dungeon South Abyss Catwalk', 'A dungeon', None, ['Hyrule Dungeon South Abyss Catwalk North Edge', 'Hyrule Dungeon South Abyss Catwalk West Edge']),
|
create_dungeon_region(player, 'Hyrule Dungeon South Abyss Catwalk', 'A dungeon', None, ['Hyrule Dungeon South Abyss Catwalk North Edge', 'Hyrule Dungeon South Abyss Catwalk West Edge']),
|
||||||
create_dungeon_region(player, 'Hyrule Dungeon Guardroom', 'A dungeon', None, ['Hyrule Dungeon Guardroom Catwalk Edge', 'Hyrule Dungeon Guardroom Abyss Edge', 'Hyrule Dungeon Guardroom N']),
|
create_dungeon_region(player, 'Hyrule Dungeon Guardroom', 'A dungeon', None, ['Hyrule Dungeon Guardroom Catwalk Edge', 'Hyrule Dungeon Guardroom Abyss Edge', 'Hyrule Dungeon Guardroom N']),
|
||||||
create_dungeon_region(player, 'Hyrule Dungeon Armory', 'A dungeon', ['Hyrule Castle - Boomerang Chest'], ['Hyrule Dungeon Armory S', 'Hyrule Dungeon Armory Down Stairs']),
|
create_forced_key_region(player, 'Hyrule Dungeon Armory Main', 'A dungeon', 1, ['Hyrule Castle - Boomerang Chest'], ['Hyrule Dungeon Armory S', 'Hyrule Dungeon Armory Interior Key Door N']),
|
||||||
|
create_dungeon_region(player, 'Hyrule Dungeon Armory North Branch', 'A dungeon', None, ['Hyrule Dungeon Armory Interior Key Door S', 'Hyrule Dungeon Armory Down Stairs']),
|
||||||
create_dungeon_region(player, 'Hyrule Dungeon Staircase', 'A dungeon', None, ['Hyrule Dungeon Staircase Up Stairs', 'Hyrule Dungeon Staircase Down Stairs']),
|
create_dungeon_region(player, 'Hyrule Dungeon Staircase', 'A dungeon', None, ['Hyrule Dungeon Staircase Up Stairs', 'Hyrule Dungeon Staircase Down Stairs']),
|
||||||
create_dungeon_region(player, 'Hyrule Dungeon Cellblock', 'A dungeon', ['Hyrule Castle - Zelda\'s Chest'], ['Hyrule Dungeon Cellblock Up Stairs']),
|
create_dungeon_region(player, 'Hyrule Dungeon Cellblock', 'A dungeon', ['Hyrule Castle - Zelda\'s Chest'], ['Hyrule Dungeon Cellblock Up Stairs']),
|
||||||
|
|
||||||
@@ -367,19 +368,22 @@ def create_regions(world, player):
|
|||||||
world.intialize_regions()
|
world.intialize_regions()
|
||||||
|
|
||||||
def create_lw_region(player, name, locations=None, exits=None):
|
def create_lw_region(player, name, locations=None, exits=None):
|
||||||
return _create_region(player, name, RegionType.LightWorld, 'Light World', locations, exits)
|
return _create_region(player, name, RegionType.LightWorld, 'Light World', 0, locations, exits)
|
||||||
|
|
||||||
def create_dw_region(player, name, locations=None, exits=None):
|
def create_dw_region(player, name, locations=None, exits=None):
|
||||||
return _create_region(player, name, RegionType.DarkWorld, 'Dark World', locations, exits)
|
return _create_region(player, name, RegionType.DarkWorld, 'Dark World', 0, locations, exits)
|
||||||
|
|
||||||
def create_cave_region(player, name, hint='Hyrule', locations=None, exits=None):
|
def create_cave_region(player, name, hint='Hyrule', locations=None, exits=None):
|
||||||
return _create_region(player, name, RegionType.Cave, hint, locations, exits)
|
return _create_region(player, name, RegionType.Cave, hint, 0, locations, exits)
|
||||||
|
|
||||||
def create_dungeon_region(player, name, hint='Hyrule', locations=None, exits=None):
|
def create_dungeon_region(player, name, hint='Hyrule', locations=None, exits=None):
|
||||||
return _create_region(player, name, RegionType.Dungeon, hint, locations, exits)
|
return _create_region(player, name, RegionType.Dungeon, hint, 0, locations, exits)
|
||||||
|
|
||||||
def _create_region(player, name, type, hint='Hyrule', locations=None, exits=None):
|
def create_forced_key_region(player, name, hint='Hyrule', keys=0, locations=None, exits=None):
|
||||||
ret = Region(name, type, hint, player)
|
return _create_region(player, name, RegionType.Dungeon, hint, keys, locations, exits)
|
||||||
|
|
||||||
|
def _create_region(player, name, type, hint='Hyrule', keys=0, locations=None, exits=None):
|
||||||
|
ret = Region(name, type, keys, hint, player)
|
||||||
if locations is None:
|
if locations is None:
|
||||||
locations = []
|
locations = []
|
||||||
if exits is None:
|
if exits is None:
|
||||||
|
|||||||
2
Rules.py
2
Rules.py
@@ -951,7 +951,7 @@ def swordless_rules(world, player):
|
|||||||
set_rule(world.get_location('Bombos Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has('Hammer', player))
|
set_rule(world.get_location('Bombos Tablet', player), lambda state: state.has('Book of Mudora', player) and state.has('Hammer', player))
|
||||||
|
|
||||||
def standard_rules(world, player):
|
def standard_rules(world, player):
|
||||||
add_rule(world.get_entrance('Sewers Door', player), lambda state: state.can_kill_most_things(player))
|
# add_rule(world.get_entrance('Sewers Door', player), lambda state: state.can_kill_most_things(player))
|
||||||
|
|
||||||
set_rule(world.get_entrance('Hyrule Castle Exit (East)', player), lambda state: state.can_reach('Sanctuary', 'Region', player))
|
set_rule(world.get_entrance('Hyrule Castle Exit (East)', player), lambda state: state.can_reach('Sanctuary', 'Region', player))
|
||||||
set_rule(world.get_entrance('Hyrule Castle Exit (West)', player), lambda state: state.can_reach('Sanctuary', 'Region', player))
|
set_rule(world.get_entrance('Hyrule Castle Exit (West)', player), lambda state: state.can_reach('Sanctuary', 'Region', player))
|
||||||
|
|||||||
Reference in New Issue
Block a user