Merge remote-tracking branch 'remotes/origin/Dev-owg' into DoorDevUnstable
This commit is contained in:
@@ -65,6 +65,8 @@ class World(object):
|
|||||||
self.custom = custom
|
self.custom = custom
|
||||||
self.customitemarray = customitemarray
|
self.customitemarray = customitemarray
|
||||||
self.can_take_damage = True
|
self.can_take_damage = True
|
||||||
|
self.hints = hints
|
||||||
|
|
||||||
self.hints = hints.copy()
|
self.hints = hints.copy()
|
||||||
self.dynamic_regions = []
|
self.dynamic_regions = []
|
||||||
self.dynamic_locations = []
|
self.dynamic_locations = []
|
||||||
@@ -109,7 +111,7 @@ class World(object):
|
|||||||
set_player_attr('can_access_trock_front', None)
|
set_player_attr('can_access_trock_front', None)
|
||||||
set_player_attr('can_access_trock_big_chest', None)
|
set_player_attr('can_access_trock_big_chest', None)
|
||||||
set_player_attr('can_access_trock_middle', None)
|
set_player_attr('can_access_trock_middle', None)
|
||||||
set_player_attr('fix_fake_world', True)
|
set_player_attr('fix_fake_world', logic not in ['owglitches', 'nologic'] or shuffle in ['crossed', 'insanity', 'madness_legacy'])
|
||||||
set_player_attr('mapshuffle', False)
|
set_player_attr('mapshuffle', False)
|
||||||
set_player_attr('compassshuffle', False)
|
set_player_attr('compassshuffle', False)
|
||||||
set_player_attr('keyshuffle', False)
|
set_player_attr('keyshuffle', False)
|
||||||
@@ -752,6 +754,31 @@ class CollectionState(object):
|
|||||||
def has_turtle_rock_medallion(self, player):
|
def has_turtle_rock_medallion(self, player):
|
||||||
return self.has(self.world.required_medallions[player][1], player)
|
return self.has(self.world.required_medallions[player][1], player)
|
||||||
|
|
||||||
|
def can_boots_clip_lw(self, player):
|
||||||
|
if self.world.mode == 'inverted':
|
||||||
|
return self.has_Boots(player) and self.has_Pearl(player)
|
||||||
|
return self.has_Boots(player)
|
||||||
|
|
||||||
|
def can_boots_clip_dw(self, player):
|
||||||
|
if self.world.mode != 'inverted':
|
||||||
|
return self.has_Boots(player) and self.has_Pearl(player)
|
||||||
|
return self.has_Boots(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 == '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 != 'inverted':
|
||||||
|
rules.append(self.has_Pearl(player))
|
||||||
|
return all(rules)
|
||||||
|
|
||||||
|
def can_superbunny_mirror_with_sword(self, player):
|
||||||
|
return self.has_Mirror(player) and self.has_sword(player)
|
||||||
|
|
||||||
def collect(self, item, event=False, location=None):
|
def collect(self, item, event=False, location=None):
|
||||||
if location:
|
if location:
|
||||||
self.locations_checked.add(location)
|
self.locations_checked.add(location)
|
||||||
|
|||||||
@@ -59,7 +59,9 @@ def link_entrances(world, player):
|
|||||||
|
|
||||||
if world.mode[player] == 'standard':
|
if world.mode[player] == 'standard':
|
||||||
# rest of hyrule castle must be in light world, so it has to be the one connected to east exit of desert
|
# rest of hyrule castle must be in light world, so it has to be the one connected to east exit of desert
|
||||||
connect_mandatory_exits(world, lw_entrances, [('Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)')], list(LW_Dungeon_Entrances_Must_Exit), player)
|
hyrule_castle_exits = [('Hyrule Castle Exit (West)', 'Hyrule Castle Exit (East)')]
|
||||||
|
connect_mandatory_exits(world, lw_entrances, hyrule_castle_exits, list(LW_Dungeon_Entrances_Must_Exit), player)
|
||||||
|
connect_caves(world, lw_entrances, [], hyrule_castle_exits, player)
|
||||||
elif world.doorShuffle[player] != 'vanilla':
|
elif world.doorShuffle[player] != 'vanilla':
|
||||||
# sanc is in light world, so must all of HC if door shuffle is on
|
# sanc is in light world, so must all of HC if door shuffle is on
|
||||||
connect_mandatory_exits(world, lw_entrances,
|
connect_mandatory_exits(world, lw_entrances,
|
||||||
@@ -1933,9 +1935,7 @@ def connect_random(world, exitlist, targetlist, player, two_way=False):
|
|||||||
|
|
||||||
|
|
||||||
def connect_mandatory_exits(world, entrances, caves, must_be_exits, player):
|
def connect_mandatory_exits(world, entrances, caves, must_be_exits, player):
|
||||||
"""This works inplace"""
|
|
||||||
random.shuffle(entrances)
|
|
||||||
random.shuffle(caves)
|
|
||||||
# Keeps track of entrances that cannot be used to access each exit / cave
|
# Keeps track of entrances that cannot be used to access each exit / cave
|
||||||
if world.mode == 'inverted':
|
if world.mode == 'inverted':
|
||||||
invalid_connections = Inverted_Must_Exit_Invalid_Connections.copy()
|
invalid_connections = Inverted_Must_Exit_Invalid_Connections.copy()
|
||||||
@@ -1943,6 +1943,18 @@ def connect_mandatory_exits(world, entrances, caves, must_be_exits, player):
|
|||||||
invalid_connections = Must_Exit_Invalid_Connections.copy()
|
invalid_connections = Must_Exit_Invalid_Connections.copy()
|
||||||
invalid_cave_connections = defaultdict(set)
|
invalid_cave_connections = defaultdict(set)
|
||||||
|
|
||||||
|
if world.logic in ['owglitches', 'nologic']:
|
||||||
|
import OverworldGlitchRules
|
||||||
|
for entrance in OverworldGlitchRules.get_non_mandatory_exits(world.mode == 'inverted'):
|
||||||
|
invalid_connections[entrance] = set()
|
||||||
|
if entrance in must_be_exits:
|
||||||
|
must_be_exits.remove(entrance)
|
||||||
|
entrances.append(entrance)
|
||||||
|
|
||||||
|
"""This works inplace"""
|
||||||
|
random.shuffle(entrances)
|
||||||
|
random.shuffle(caves)
|
||||||
|
|
||||||
# Handle inverted Aga Tower - if it depends on connections, then so does Hyrule Castle Ledge
|
# Handle inverted Aga Tower - if it depends on connections, then so does Hyrule Castle Ledge
|
||||||
if world.mode == 'inverted':
|
if world.mode == 'inverted':
|
||||||
for entrance in invalid_connections:
|
for entrance in invalid_connections:
|
||||||
@@ -2990,6 +3002,8 @@ mandatory_connections = [('Links House S&Q', 'Links House'),
|
|||||||
('East Dark World River Pier', 'East Dark World'),
|
('East Dark World River Pier', 'East Dark World'),
|
||||||
('West Dark World Gap', 'West Dark World'),
|
('West Dark World Gap', 'West Dark World'),
|
||||||
('East Dark World Broken Bridge Pass', 'East 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'),
|
('Northeast Dark World Broken Bridge Pass', 'Northeast Dark World'),
|
||||||
('Bumper Cave Entrance Rock', 'Bumper Cave Entrance'),
|
('Bumper Cave Entrance Rock', 'Bumper Cave Entrance'),
|
||||||
('Bumper Cave Entrance Drop', 'West Dark World'),
|
('Bumper Cave Entrance Drop', 'West Dark World'),
|
||||||
@@ -3032,6 +3046,7 @@ mandatory_connections = [('Links House S&Q', 'Links House'),
|
|||||||
('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'),
|
||||||
('Ganon Drop', 'Bottom of Pyramid'),
|
('Ganon Drop', 'Bottom of Pyramid'),
|
||||||
('Pyramid Drop', 'East Dark World')
|
('Pyramid Drop', 'East Dark World')
|
||||||
@@ -3046,6 +3061,8 @@ inverted_mandatory_connections = [('Links House S&Q', 'Inverted Links House'),
|
|||||||
('Lake Hylia Warp', 'Northeast Light World'),
|
('Lake Hylia Warp', 'Northeast Light World'),
|
||||||
('Northeast Light World Warp', 'Light World'),
|
('Northeast Light World Warp', 'Light World'),
|
||||||
('Zoras River', 'Zoras River'),
|
('Zoras River', 'Zoras River'),
|
||||||
|
('Waterfall of Wishing Cave', 'Waterfall of Wishing Cave'),
|
||||||
|
('Northeast Light World Return', 'Northeast Light World'),
|
||||||
('Kings Grave Outer Rocks', 'Kings Grave Area'),
|
('Kings Grave Outer Rocks', 'Kings Grave Area'),
|
||||||
('Kings Grave Inner Rocks', 'Light World'),
|
('Kings Grave Inner Rocks', 'Light World'),
|
||||||
('Kakariko Well (top to bottom)', 'Kakariko Well (bottom)'),
|
('Kakariko Well (top to bottom)', 'Kakariko Well (bottom)'),
|
||||||
@@ -3082,6 +3099,8 @@ inverted_mandatory_connections = [('Links House S&Q', 'Inverted Links House'),
|
|||||||
('Dark Lake Hylia Teleporter', 'Dark Lake Hylia'),
|
('Dark Lake Hylia Teleporter', 'Dark Lake Hylia'),
|
||||||
('Dark Lake Hylia Ledge Pier', 'Dark Lake Hylia Ledge'),
|
('Dark Lake Hylia Ledge Pier', 'Dark Lake Hylia Ledge'),
|
||||||
('Dark Lake Hylia Ledge Drop', 'Dark Lake Hylia'),
|
('Dark Lake Hylia Ledge Drop', 'Dark Lake Hylia'),
|
||||||
|
('Ice Palace Missing Wall', 'Dark Lake Hylia Central Island'),
|
||||||
|
('Dark Lake Hylia Shallows', 'Dark Lake Hylia'),
|
||||||
('East Dark World Pier', 'East Dark World'),
|
('East Dark World Pier', 'East Dark World'),
|
||||||
('South Dark World Bridge', 'South Dark World'),
|
('South Dark World Bridge', 'South Dark World'),
|
||||||
('East Dark World Bridge', 'East Dark World'),
|
('East Dark World Bridge', 'East Dark World'),
|
||||||
@@ -3095,6 +3114,8 @@ inverted_mandatory_connections = [('Links House S&Q', 'Inverted Links House'),
|
|||||||
('West Dark World Gap', 'West Dark World'),
|
('West Dark World Gap', 'West Dark World'),
|
||||||
('East Dark World Broken Bridge Pass', 'East Dark World'),
|
('East Dark World Broken Bridge Pass', 'East Dark World'),
|
||||||
('Northeast Dark World Broken Bridge Pass', 'Northeast Dark World'),
|
('Northeast Dark World Broken Bridge Pass', 'Northeast Dark World'),
|
||||||
|
('Catfish Exit Rock', 'Northeast Dark World'),
|
||||||
|
('Catfish Entrance Rock', 'Catfish'),
|
||||||
('Bumper Cave Entrance Rock', 'Bumper Cave Entrance'),
|
('Bumper Cave Entrance Rock', 'Bumper Cave Entrance'),
|
||||||
('Bumper Cave Entrance Drop', 'West Dark World'),
|
('Bumper Cave Entrance Drop', 'West Dark World'),
|
||||||
('Bumper Cave Ledge Drop', 'West Dark World'),
|
('Bumper Cave Ledge Drop', 'West Dark World'),
|
||||||
@@ -3148,7 +3169,7 @@ inverted_mandatory_connections = [('Links House S&Q', 'Inverted Links House'),
|
|||||||
('Desert Palace Stairs Mirror Spot', 'Dark Desert'),
|
('Desert Palace Stairs Mirror Spot', 'Dark Desert'),
|
||||||
('Desert Palace North Mirror Spot', 'Dark Desert'),
|
('Desert Palace North Mirror Spot', 'Dark Desert'),
|
||||||
('Maze Race Mirror Spot', 'West Dark World'),
|
('Maze Race Mirror Spot', 'West Dark World'),
|
||||||
('Lake Hylia Central Island Mirror Spot', 'Dark Lake Hylia'),
|
('Lake Hylia Central Island Mirror Spot', 'Dark Lake Hylia Central Island'),
|
||||||
('Hammer Peg Area Mirror Spot', 'Hammer Peg Area'),
|
('Hammer Peg Area Mirror Spot', 'Hammer Peg Area'),
|
||||||
('Bumper Cave Ledge Mirror Spot', 'Bumper Cave Ledge'),
|
('Bumper Cave Ledge Mirror Spot', 'Bumper Cave Ledge'),
|
||||||
('Bumper Cave Entrance Mirror Spot', 'Bumper Cave Entrance'),
|
('Bumper Cave Entrance Mirror Spot', 'Bumper Cave Entrance'),
|
||||||
@@ -3164,7 +3185,7 @@ inverted_mandatory_connections = [('Links House S&Q', 'Inverted Links House'),
|
|||||||
('West Dark World Mirror Spot', 'West Dark World'),
|
('West Dark World Mirror Spot', 'West Dark World'),
|
||||||
('South Dark World Mirror Spot', 'South Dark World'),
|
('South Dark World Mirror Spot', 'South Dark World'),
|
||||||
('Potion Shop Mirror Spot', 'Northeast Dark World'),
|
('Potion Shop Mirror Spot', 'Northeast Dark World'),
|
||||||
('Northeast Dark World Mirror Spot', 'Northeast Dark World'),
|
('Catfish Mirror Spot', 'Catfish'),
|
||||||
('Shopping Mall Mirror Spot', 'Dark Lake Hylia Ledge'),
|
('Shopping Mall Mirror Spot', 'Dark Lake Hylia Ledge'),
|
||||||
('Skull Woods Mirror Spot', 'Skull Woods Forest (West)'),
|
('Skull Woods Mirror Spot', 'Skull Woods Forest (West)'),
|
||||||
('DDM Flute', 'The Sky'),
|
('DDM Flute', 'The Sky'),
|
||||||
@@ -3327,10 +3348,10 @@ default_connections = [('Waterfall of Wishing', 'Waterfall of Wishing'),
|
|||||||
('Dark Desert Fairy', 'Dark Desert Healer Fairy'),
|
('Dark Desert Fairy', 'Dark Desert Healer Fairy'),
|
||||||
('Spike Cave', 'Spike Cave'),
|
('Spike Cave', 'Spike Cave'),
|
||||||
('Hookshot Cave', 'Hookshot Cave'),
|
('Hookshot Cave', 'Hookshot Cave'),
|
||||||
('Superbunny Cave (Top)', 'Superbunny Cave'),
|
('Superbunny Cave (Top)', 'Superbunny Cave (Top)'),
|
||||||
('Cave Shop (Dark Death Mountain)', 'Cave Shop (Dark Death Mountain)'),
|
('Cave Shop (Dark Death Mountain)', 'Cave Shop (Dark Death Mountain)'),
|
||||||
('Dark Death Mountain Fairy', 'Dark Death Mountain Healer Fairy'),
|
('Dark Death Mountain Fairy', 'Dark Death Mountain Healer Fairy'),
|
||||||
('Superbunny Cave (Bottom)', 'Superbunny Cave'),
|
('Superbunny Cave (Bottom)', 'Superbunny Cave (Bottom)'),
|
||||||
('Superbunny Cave Exit (Top)', 'Dark Death Mountain (Top)'),
|
('Superbunny Cave Exit (Top)', 'Dark Death Mountain (Top)'),
|
||||||
('Superbunny Cave Exit (Bottom)', 'Dark Death Mountain (East Bottom)'),
|
('Superbunny Cave Exit (Bottom)', 'Dark Death Mountain (East Bottom)'),
|
||||||
('Hookshot Cave Exit (South)', 'Dark Death Mountain (Top)'),
|
('Hookshot Cave Exit (South)', 'Dark Death Mountain (Top)'),
|
||||||
@@ -3461,9 +3482,9 @@ inverted_default_connections = [('Waterfall of Wishing', 'Waterfall of Wishing'
|
|||||||
('Dark Desert Fairy', 'Dark Desert Healer Fairy'),
|
('Dark Desert Fairy', 'Dark Desert Healer Fairy'),
|
||||||
('Spike Cave', 'Spike Cave'),
|
('Spike Cave', 'Spike Cave'),
|
||||||
('Hookshot Cave', 'Hookshot Cave'),
|
('Hookshot Cave', 'Hookshot Cave'),
|
||||||
('Superbunny Cave (Top)', 'Superbunny Cave'),
|
('Superbunny Cave (Top)', 'Superbunny Cave (Top)'),
|
||||||
('Cave Shop (Dark Death Mountain)', 'Cave Shop (Dark Death Mountain)'),
|
('Cave Shop (Dark Death Mountain)', 'Cave Shop (Dark Death Mountain)'),
|
||||||
('Superbunny Cave (Bottom)', 'Superbunny Cave'),
|
('Superbunny Cave (Bottom)', 'Superbunny Cave (Bottom)'),
|
||||||
('Superbunny Cave Exit (Bottom)', 'Dark Death Mountain (East Bottom)'),
|
('Superbunny Cave Exit (Bottom)', 'Dark Death Mountain (East Bottom)'),
|
||||||
('Hookshot Cave Exit (North)', 'Death Mountain Floating Island (Dark World)'),
|
('Hookshot Cave Exit (North)', 'Death Mountain Floating Island (Dark World)'),
|
||||||
('Hookshot Cave Back Entrance', 'Hookshot Cave'),
|
('Hookshot Cave Back Entrance', 'Hookshot Cave'),
|
||||||
|
|||||||
2
Fill.py
2
Fill.py
@@ -274,7 +274,7 @@ def distribute_items_restrictive(world, gftower_trash=False, fill_locations=None
|
|||||||
|
|
||||||
# fill in gtower locations with trash first
|
# fill in gtower locations with trash first
|
||||||
for player in range(1, world.players + 1):
|
for player in range(1, world.players + 1):
|
||||||
if not gftower_trash or not world.ganonstower_vanilla[player] or world.doorShuffle[player] == 'crossed':
|
if not gftower_trash or not world.ganonstower_vanilla[player] or world.doorShuffle[player] == 'crossed' or world.logic[player] in ['owglitches', 'nologic']:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
gftower_trash_count = (random.randint(15, 50) if world.goal[player] == 'triforcehunt' else random.randint(0, 15))
|
gftower_trash_count = (random.randint(15, 50) if world.goal[player] == 'triforcehunt' else random.randint(0, 15))
|
||||||
|
|||||||
@@ -30,7 +30,8 @@ def create_inverted_regions(world, player):
|
|||||||
"Blind\'s Hideout - Right",
|
"Blind\'s Hideout - Right",
|
||||||
"Blind\'s Hideout - Far Left",
|
"Blind\'s Hideout - Far Left",
|
||||||
"Blind\'s Hideout - Far Right"]),
|
"Blind\'s Hideout - Far Right"]),
|
||||||
create_lw_region(player, 'Northeast Light World', None, ['Zoras River', 'Waterfall of Wishing', 'Potion Shop Outer Rock', 'Northeast Dark World Mirror Spot', 'Northeast Light World Warp']),
|
create_lw_region(player, 'Northeast Light World', None, ['Zoras River', 'Waterfall of Wishing Cave', 'Potion Shop Outer Rock', 'Catfish Mirror Spot', 'Northeast Light World Warp']),
|
||||||
|
create_lw_region(player, 'Waterfall of Wishing Cave', None, ['Waterfall of Wishing', 'Northeast Light World Return']),
|
||||||
create_lw_region(player, 'Potion Shop Area', None, ['Potion Shop', 'Potion Shop Inner Bushes', 'Potion Shop Inner Rock', 'Potion Shop Mirror Spot', 'Potion Shop River Drop']),
|
create_lw_region(player, 'Potion Shop Area', None, ['Potion Shop', 'Potion Shop Inner Bushes', 'Potion Shop Inner Rock', 'Potion Shop Mirror Spot', 'Potion Shop River Drop']),
|
||||||
create_lw_region(player, 'Graveyard Cave Area', None, ['Graveyard Cave', 'Graveyard Cave Inner Bushes', 'Graveyard Cave Mirror Spot']),
|
create_lw_region(player, 'Graveyard Cave Area', None, ['Graveyard Cave', 'Graveyard Cave Inner Bushes', 'Graveyard Cave Mirror Spot']),
|
||||||
create_lw_region(player, 'River', None, ['Light World Pier', 'Potion Shop Pier']),
|
create_lw_region(player, 'River', None, ['Light World Pier', 'Potion Shop Pier']),
|
||||||
@@ -148,14 +149,16 @@ def create_inverted_regions(world, player):
|
|||||||
|
|
||||||
create_dw_region(player, 'East Dark World', ['Pyramid'], ['Pyramid Fairy', 'South Dark World Bridge', 'Palace of Darkness', 'Dark Lake Hylia Drop (East)',
|
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 Fairy', 'Palace of Darkness Hint', 'East Dark World Hint', 'Northeast Dark World Broken Bridge Pass', 'East Dark World Teleporter', 'EDW Flute']),
|
'Dark Lake Hylia Fairy', 'Palace of Darkness Hint', 'East Dark World Hint', 'Northeast Dark World Broken Bridge Pass', 'East Dark World Teleporter', 'EDW Flute']),
|
||||||
create_dw_region(player, 'Northeast Dark World', ['Catfish'], ['West Dark World Gap', 'Dark World Potion Shop', 'East Dark World Broken Bridge Pass', 'NEDW Flute', 'Dark Lake Hylia Teleporter']),
|
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', 'NEDW Flute', 'Dark Lake Hylia Teleporter', 'Catfish Entrance Rock']),
|
||||||
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'], ['Dark Lake Hylia Drop (South)', 'Hype Cave', 'Swamp Palace', 'Village of Outcasts Heavy Rock', 'East Dark World Bridge', 'Inverted Links House', 'Archery Game', 'Bonk Fairy (Dark)',
|
create_dw_region(player, 'South Dark World', ['Stumpy', 'Digging Game'], ['Dark Lake Hylia Drop (South)', 'Hype Cave', 'Swamp Palace', 'Village of Outcasts Heavy Rock', 'East Dark World Bridge', 'Inverted Links House', 'Archery Game', 'Bonk Fairy (Dark)',
|
||||||
'Dark Lake Hylia Shop', 'South Dark World Teleporter', 'Post Aga Teleporter', 'SDW Flute']),
|
'Dark Lake Hylia Shop', 'South Dark World Teleporter', 'Post Aga Teleporter', 'SDW Flute']),
|
||||||
create_cave_region(player, 'Inverted Big Bomb Shop', 'the bomb shop'),
|
create_cave_region(player, 'Inverted 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, ['East Dark World Pier', 'Dark Lake Hylia Ledge Pier', 'Ice Palace', 'Dark Lake Hylia Central Island Teleporter']),
|
create_dw_region(player, 'Dark Lake Hylia', None, ['East Dark World Pier', 'Dark Lake Hylia Ledge Pier', 'Ice Palace Missing Wall']),
|
||||||
|
create_dw_region(player, 'Dark Lake Hylia Central Island', None, ['Dark Lake Hylia Shallows', 'Ice Palace', 'Dark Lake Hylia Central Island Teleporter']),
|
||||||
create_dw_region(player, 'Dark Lake Hylia Ledge', None, ['Dark Lake Hylia Ledge Drop', 'Dark Lake Hylia Ledge Fairy', 'Dark Lake Hylia Ledge Hint', 'Dark Lake Hylia Ledge Spike Cave', 'DLHL Flute']),
|
create_dw_region(player, 'Dark Lake Hylia Ledge', None, ['Dark Lake Hylia Ledge Drop', 'Dark Lake Hylia Ledge Fairy', 'Dark Lake Hylia Ledge Hint', 'Dark Lake Hylia Ledge Spike Cave', 'DLHL Flute']),
|
||||||
create_cave_region(player, 'Dark Lake Hylia Ledge Hint', 'a storyteller'),
|
create_cave_region(player, 'Dark Lake Hylia Ledge Hint', 'a storyteller'),
|
||||||
create_cave_region(player, 'Dark Lake Hylia Ledge Spike Cave', 'a spiky hint'),
|
create_cave_region(player, 'Dark Lake Hylia Ledge Spike Cave', 'a spiky hint'),
|
||||||
@@ -193,8 +196,8 @@ def create_inverted_regions(world, player):
|
|||||||
create_dw_region(player, 'Turtle Rock (Top)', None, ['Dark Death Mountain Teleporter (East)', 'Turtle Rock Drop']),
|
create_dw_region(player, 'Turtle Rock (Top)', None, ['Dark Death Mountain Teleporter (East)', 'Turtle Rock Drop']),
|
||||||
create_dw_region(player, 'Dark Death Mountain Isolated Ledge', None, ['Turtle Rock Isolated Ledge Entrance']),
|
create_dw_region(player, 'Dark Death Mountain Isolated Ledge', None, ['Turtle Rock Isolated Ledge Entrance']),
|
||||||
create_dw_region(player, 'Dark Death Mountain (East Bottom)', None, ['Superbunny Cave (Bottom)', 'Cave Shop (Dark Death Mountain)', 'Dark Death Mountain Teleporter (East Bottom)', 'EDDM Flute']),
|
create_dw_region(player, 'Dark Death Mountain (East Bottom)', None, ['Superbunny Cave (Bottom)', 'Cave Shop (Dark Death Mountain)', 'Dark Death Mountain Teleporter (East Bottom)', 'EDDM Flute']),
|
||||||
create_cave_region(player, 'Superbunny Cave', 'a connector', ['Superbunny Cave - Top', 'Superbunny Cave - Bottom'],
|
create_cave_region(player, 'Superbunny Cave (Top)', 'a connector', ['Superbunny Cave - Top', 'Superbunny Cave - Bottom'], ['Superbunny Cave Exit (Top)']),
|
||||||
['Superbunny Cave Exit (Top)', 'Superbunny Cave Exit (Bottom)']),
|
create_cave_region(player, 'Superbunny Cave (Bottom)', 'a connector', None, ['Superbunny Cave Climb', 'Superbunny Cave Exit (Bottom)']),
|
||||||
create_cave_region(player, 'Spike Cave', 'Spike Cave', ['Spike Cave']),
|
create_cave_region(player, 'Spike Cave', 'Spike Cave', ['Spike Cave']),
|
||||||
create_cave_region(player, 'Hookshot Cave', 'a connector', ['Hookshot Cave - Top Right', 'Hookshot Cave - Top Left', 'Hookshot Cave - Bottom Right', 'Hookshot Cave - Bottom Left'],
|
create_cave_region(player, 'Hookshot Cave', 'a connector', ['Hookshot Cave - Top Right', 'Hookshot Cave - Top Left', 'Hookshot Cave - Bottom Right', 'Hookshot Cave - Bottom Left'],
|
||||||
['Hookshot Cave Exit (South)', 'Hookshot Cave Exit (North)']),
|
['Hookshot Cave Exit (South)', 'Hookshot Cave Exit (North)']),
|
||||||
@@ -203,10 +206,13 @@ def create_inverted_regions(world, player):
|
|||||||
|
|
||||||
create_cave_region(player, 'Pyramid', 'a drop\'s exit', ['Ganon'], ['Ganon Drop']),
|
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_cave_region(player, 'Bottom of Pyramid', 'a drop\'s exit', None, ['Pyramid Exit']),
|
||||||
create_dw_region(player, 'Pyramid Ledge', None, ['Pyramid Drop']), # houlihan room exits here in inverted
|
create_dw_region(player, 'Pyramid Ledge', None, ['Pyramid Drop']), # houlihan room exits here in inverted
|
||||||
|
|
||||||
# to simplify flute connections
|
# to simplify flute connections
|
||||||
create_cave_region(player, 'The Sky', 'A Dark Sky', None, ['DDM Landing','NEDW Landing', 'WDW Landing', 'SDW Landing', 'EDW Landing', 'DD Landing', 'DLHL Landing'])
|
create_cave_region(player, 'The Sky', 'A Dark Sky', None, ['DDM Landing','NEDW Landing', 'WDW Landing', 'SDW Landing', 'EDW Landing', 'DD Landing', 'DLHL Landing']),
|
||||||
|
|
||||||
|
create_lw_region(player, 'Desert Northern Cliffs'),
|
||||||
|
create_lw_region(player, 'Death Mountain Bunny Descent Area')
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -641,6 +641,12 @@ def get_pool_core(progressive, shuffle, difficulty, treasure_hunt_total, timer,
|
|||||||
def want_progressives():
|
def want_progressives():
|
||||||
return random.choice([True, False]) if progressive == 'random' else progressive == 'on'
|
return random.choice([True, False]) if progressive == 'random' else progressive == 'on'
|
||||||
|
|
||||||
|
# provide boots to boots glitch dependent modes
|
||||||
|
if logic in ['owglitches', 'nologic']:
|
||||||
|
precollected_items.append('Pegasus Boots')
|
||||||
|
pool.remove('Pegasus Boots')
|
||||||
|
pool.extend(['Rupees (20)'])
|
||||||
|
|
||||||
if want_progressives():
|
if want_progressives():
|
||||||
pool.extend(progressivegloves)
|
pool.extend(progressivegloves)
|
||||||
else:
|
else:
|
||||||
|
|||||||
30
Main.py
30
Main.py
@@ -335,6 +335,32 @@ def main(args, seed=None, fish=None):
|
|||||||
return world
|
return world
|
||||||
|
|
||||||
|
|
||||||
|
def copy_dynamic_regions_and_locations(world, ret):
|
||||||
|
for region in world.dynamic_regions:
|
||||||
|
new_reg = Region(region.name, region.type, region.hint_text, region.player)
|
||||||
|
new_reg.world = ret
|
||||||
|
ret.regions.append(new_reg)
|
||||||
|
ret.dynamic_regions.append(new_reg)
|
||||||
|
|
||||||
|
# Note: ideally exits should be copied here, but the current use case (Take anys) do not require this
|
||||||
|
|
||||||
|
if region.shop:
|
||||||
|
new_reg.shop = Shop(new_reg, region.shop.room_id, region.shop.type, region.shop.shopkeeper_config, region.shop.replaceable)
|
||||||
|
ret.shops.append(new_reg.shop)
|
||||||
|
|
||||||
|
for location in world.dynamic_locations:
|
||||||
|
new_reg = ret.get_region(location.parent_region.name, location.parent_region.player)
|
||||||
|
new_loc = Location(location.player, location.name, location.address, location.crystal, location.hint_text, new_reg)
|
||||||
|
# todo: this is potentially dangerous. later refactor so we
|
||||||
|
# can apply dynamic region rules on top of copied world like other rules
|
||||||
|
new_loc.access_rule = location.access_rule
|
||||||
|
new_loc.always_allow = location.always_allow
|
||||||
|
new_loc.item_rule = location.item_rule
|
||||||
|
new_reg.locations.append(new_loc)
|
||||||
|
|
||||||
|
ret.clear_location_cache()
|
||||||
|
|
||||||
|
|
||||||
def copy_world(world):
|
def copy_world(world):
|
||||||
# ToDo: Not good yet
|
# ToDo: Not good yet
|
||||||
ret = World(world.players, world.shuffle, world.doorShuffle, world.logic, world.mode, world.swords,
|
ret = World(world.players, world.shuffle, world.doorShuffle, world.logic, world.mode, world.swords,
|
||||||
@@ -382,6 +408,7 @@ def copy_world(world):
|
|||||||
ret.keydropshuffle = world.keydropshuffle.copy()
|
ret.keydropshuffle = world.keydropshuffle.copy()
|
||||||
ret.mixed_travel = world.mixed_travel.copy()
|
ret.mixed_travel = world.mixed_travel.copy()
|
||||||
ret.standardize_palettes = world.standardize_palettes.copy()
|
ret.standardize_palettes = world.standardize_palettes.copy()
|
||||||
|
ret.boss_shuffle = world.boss_shuffle
|
||||||
|
|
||||||
for player in range(1, world.players + 1):
|
for player in range(1, world.players + 1):
|
||||||
if world.mode[player] != 'inverted':
|
if world.mode[player] != 'inverted':
|
||||||
@@ -429,10 +456,11 @@ def copy_world(world):
|
|||||||
for location in world.get_locations():
|
for location in world.get_locations():
|
||||||
new_location = ret.get_location(location.name, location.player)
|
new_location = ret.get_location(location.name, location.player)
|
||||||
if location.item is not None:
|
if location.item is not None:
|
||||||
item = Item(location.item.name, location.item.advancement, location.item.priority, location.item.type, player = location.item.player)
|
item = Item(location.item.name, location.item.advancement, location.item.priority, location.item.type, player=location.item.player)
|
||||||
new_location.item = item
|
new_location.item = item
|
||||||
item.location = new_location
|
item.location = new_location
|
||||||
item.world = ret
|
item.world = ret
|
||||||
|
item.world = ret
|
||||||
if location.event:
|
if location.event:
|
||||||
new_location.event = True
|
new_location.event = True
|
||||||
if location.locked:
|
if location.locked:
|
||||||
|
|||||||
292
OverworldGlitchRules.py
Normal file
292
OverworldGlitchRules.py
Normal file
@@ -0,0 +1,292 @@
|
|||||||
|
"""
|
||||||
|
Helper functions to deliver entrance/exit/region sets to OWG rules.
|
||||||
|
"""
|
||||||
|
|
||||||
|
from BaseClasses import Entrance
|
||||||
|
|
||||||
|
|
||||||
|
def get_sword_required_superbunny_mirror_regions():
|
||||||
|
"""
|
||||||
|
Cave regions that superbunny can get through - but only with a sword.
|
||||||
|
"""
|
||||||
|
yield 'Spiral Cave (Top)'
|
||||||
|
|
||||||
|
def get_boots_required_superbunny_mirror_regions():
|
||||||
|
"""
|
||||||
|
Cave regions that superbunny can get through - but only with boots.
|
||||||
|
"""
|
||||||
|
yield 'Two Brothers House'
|
||||||
|
|
||||||
|
def get_boots_required_superbunny_mirror_locations():
|
||||||
|
"""
|
||||||
|
Cave locations that superbunny can access - but only with boots.
|
||||||
|
"""
|
||||||
|
yield 'Sahasrahla\'s Hut - Left'
|
||||||
|
yield 'Sahasrahla\'s Hut - Middle'
|
||||||
|
yield 'Sahasrahla\'s Hut - Right'
|
||||||
|
|
||||||
|
|
||||||
|
def get_invalid_mirror_bunny_entrances():
|
||||||
|
"""
|
||||||
|
Entrances that can't be superbunny-mirrored into.
|
||||||
|
"""
|
||||||
|
yield 'Skull Woods Final Section'
|
||||||
|
yield 'Hype Cave'
|
||||||
|
yield 'Bonk Fairy (Dark)'
|
||||||
|
yield 'Thieves Town'
|
||||||
|
yield 'Dark World Hammer Peg Cave'
|
||||||
|
yield 'Brewery'
|
||||||
|
yield 'Hookshot Cave'
|
||||||
|
yield 'Dark Lake Hylia Ledge Fairy'
|
||||||
|
yield 'Dark Lake Hylia Ledge Spike Cave'
|
||||||
|
yield 'Bonk Rock Cave'
|
||||||
|
yield 'Bonk Fairy (Light)'
|
||||||
|
yield '50 Rupee Cave'
|
||||||
|
yield '20 Rupee Cave'
|
||||||
|
yield 'Checkerboard Cave'
|
||||||
|
yield 'Light Hype Fairy'
|
||||||
|
yield 'Waterfall of Wishing'
|
||||||
|
yield 'Light World Bomb Hut'
|
||||||
|
yield 'Mini Moldorm Cave'
|
||||||
|
yield 'Ice Rod Cave'
|
||||||
|
yield 'Sanctuary Grave'
|
||||||
|
yield 'Kings Grave'
|
||||||
|
|
||||||
|
|
||||||
|
def get_superbunny_accessible_locations():
|
||||||
|
"""
|
||||||
|
Interior locations that can be accessed with superbunny state.
|
||||||
|
"""
|
||||||
|
|
||||||
|
yield 'Waterfall of Wishing - Left'
|
||||||
|
yield 'Waterfall of Wishing - Right'
|
||||||
|
yield 'King\'s Tomb'
|
||||||
|
yield 'Floodgate'
|
||||||
|
yield 'Floodgate Chest'
|
||||||
|
yield 'Cave 45'
|
||||||
|
yield 'Bonk Rock Cave'
|
||||||
|
yield 'Brewery'
|
||||||
|
yield 'C-Shaped House'
|
||||||
|
yield 'Chest Game'
|
||||||
|
yield 'Mire Shed - Left'
|
||||||
|
yield 'Mire Shed - Right'
|
||||||
|
yield 'Secret Passage'
|
||||||
|
yield 'Ice Rod Cave'
|
||||||
|
yield 'Pyramid Fairy - Left'
|
||||||
|
yield 'Pyramid Fairy - Right'
|
||||||
|
yield 'Superbunny Cave - Top'
|
||||||
|
yield 'Superbunny Cave - Bottom'
|
||||||
|
yield 'Blind\'s Hideout - Left'
|
||||||
|
yield 'Blind\'s Hideout - Right'
|
||||||
|
yield 'Blind\'s Hideout - Far Left'
|
||||||
|
yield 'Blind\'s Hideout - Far Right'
|
||||||
|
yield 'Kakariko Well - Left'
|
||||||
|
yield 'Kakariko Well - Middle'
|
||||||
|
yield 'Kakariko Well - Right'
|
||||||
|
yield 'Kakariko Well - Bottom'
|
||||||
|
yield 'Kakariko Tavern'
|
||||||
|
yield 'Library'
|
||||||
|
yield 'Spiral Cave'
|
||||||
|
for location in get_boots_required_superbunny_mirror_locations():
|
||||||
|
yield location
|
||||||
|
|
||||||
|
|
||||||
|
def get_non_mandatory_exits(inverted):
|
||||||
|
"""
|
||||||
|
Entrances that can be reached with full equipment using overworld glitches and don't need to be an exit.
|
||||||
|
The following are still be mandatory exits:
|
||||||
|
|
||||||
|
Open:
|
||||||
|
Turtle Rock Isolated Ledge Entrance
|
||||||
|
Skull Woods Second Section Door (West) (or Skull Woods Final Section)
|
||||||
|
|
||||||
|
Inverted:
|
||||||
|
Two Brothers House (West)
|
||||||
|
Desert Palace Entrance (East)
|
||||||
|
"""
|
||||||
|
|
||||||
|
yield 'Bumper Cave (Top)'
|
||||||
|
yield 'Death Mountain Return Cave (West)'
|
||||||
|
yield 'Hookshot Cave Back Entrance'
|
||||||
|
|
||||||
|
if inverted:
|
||||||
|
yield 'Desert Palace Entrance (North)'
|
||||||
|
yield 'Desert Palace Entrance (West)'
|
||||||
|
yield 'Inverted Ganons Tower'
|
||||||
|
yield 'Hyrule Castle Entrance (West)'
|
||||||
|
yield 'Hyrule Castle Entrance (East)'
|
||||||
|
else:
|
||||||
|
yield 'Dark Death Mountain Ledge (West)'
|
||||||
|
yield 'Dark Death Mountain Ledge (East)'
|
||||||
|
yield 'Mimic Cave'
|
||||||
|
yield 'Desert Palace Entrance (East)'
|
||||||
|
|
||||||
|
|
||||||
|
def get_boots_clip_exits_lw(inverted = False):
|
||||||
|
"""
|
||||||
|
Special Light World region exits that require boots clips.
|
||||||
|
"""
|
||||||
|
|
||||||
|
yield ('Bat Cave River Clip Spot', 'Light World', 'Bat Cave Drop Ledge')
|
||||||
|
yield ('Light World DMA Clip Spot', 'Light World', 'Death Mountain')
|
||||||
|
yield ('Hera Ascent', 'Death Mountain', 'Death Mountain (Top)')
|
||||||
|
yield ('Death Mountain Return Ledge Clip Spot', 'Light World', 'Death Mountain Return Ledge')
|
||||||
|
yield ('Death Mountain Entrance Clip Spot', 'Light World', 'Death Mountain Entrance')
|
||||||
|
yield ('Death Mountain Glitched Bridge', 'Death Mountain', 'East Death Mountain (Top)')
|
||||||
|
yield ('Zora Descent Clip Spot', 'East Death Mountain (Top)', 'Zoras River')
|
||||||
|
yield ('Desert Northern Cliffs', 'Light World', 'Desert Northern Cliffs')
|
||||||
|
yield ('Desert Ledge Dropdown', 'Desert Northern Cliffs', 'Desert Ledge')
|
||||||
|
yield ('Desert Palace Entrance Dropdown', 'Desert Northern Cliffs', 'Desert Palace Entrance (North) Spot')
|
||||||
|
yield ('Lake Hylia Island Clip Spot', 'Light World', 'Lake Hylia Island')
|
||||||
|
yield ('Death Mountain Descent', 'Death Mountain', 'Light World')
|
||||||
|
yield ('Kings Grave Clip Spot', 'Death Mountain', 'Kings Grave Area')
|
||||||
|
|
||||||
|
if not inverted:
|
||||||
|
yield ('Graveyard Ledge Clip Spot', 'Death Mountain', 'Graveyard Ledge')
|
||||||
|
yield ('Desert Ledge (Northeast) Dropdown', 'Desert Northern Cliffs', 'Desert Ledge (Northeast)')
|
||||||
|
yield ('Spectacle Rock Clip Spot', 'Death Mountain (Top)', 'Spectacle Rock')
|
||||||
|
yield ('Bombos Tablet Clip Spot', 'Light World', 'Bombos Tablet Ledge')
|
||||||
|
yield ('Floating Island Clip Spot', 'East Death Mountain (Top)', 'Death Mountain Floating Island (Light World)')
|
||||||
|
yield ('Cave 45 Clip Spot', 'Light World', 'Cave 45 Ledge')
|
||||||
|
|
||||||
|
|
||||||
|
def get_boots_clip_exits_dw(inverted):
|
||||||
|
"""
|
||||||
|
Special Dark World region exits that require boots clips.
|
||||||
|
"""
|
||||||
|
|
||||||
|
yield ('Dark World DMA Clip Spot', 'West Dark World', inverted and 'Dark Death Mountain' or 'Dark Death Mountain (West Bottom)')
|
||||||
|
yield ('Bumper Cave Ledge Clip Spot', 'West Dark World', 'Bumper Cave Ledge')
|
||||||
|
yield ('Bumper Cave Entrance Clip Spot', 'West Dark World', 'Bumper Cave Entrance')
|
||||||
|
yield ('Catfish Descent', inverted and 'Dark Death Mountain' or 'Dark Death Mountain (Top)', 'Catfish')
|
||||||
|
yield ('Hammer Pegs River Clip Spot', 'East Dark World', 'Hammer Peg Area')
|
||||||
|
yield ('Dark Lake Hylia Ledge Clip Spot', 'East Dark World', 'Dark Lake Hylia Ledge')
|
||||||
|
yield ('Dark Desert Cliffs Clip Spot', 'South Dark World', 'Dark Desert')
|
||||||
|
yield ('DW Floating Island Clip Spot', 'Dark Death Mountain (East Bottom)', 'Death Mountain Floating Island (Dark World)')
|
||||||
|
|
||||||
|
if not inverted:
|
||||||
|
yield ('Dark Death Mountain Descent', 'Dark Death Mountain (West Bottom)', 'West Dark World')
|
||||||
|
yield ('Ganons Tower Ascent', 'Dark Death Mountain (West Bottom)', 'Dark Death Mountain (Top)') # This only gets you to the GT entrance
|
||||||
|
yield ('Dark Death Mountain Glitched Bridge', 'Dark Death Mountain (West Bottom)', 'Dark Death Mountain (Top)')
|
||||||
|
yield ('Turtle Rock (Top) Clip Spot', 'Dark Death Mountain (Top)', 'Turtle Rock (Top)')
|
||||||
|
else:
|
||||||
|
yield ('Dark Desert Teleporter Clip Spot', 'Dark Desert', 'Dark Desert Ledge')
|
||||||
|
|
||||||
|
|
||||||
|
def get_glitched_speed_drops_dw(inverted = False):
|
||||||
|
"""
|
||||||
|
Dark World drop-down ledges that require glitched speed.
|
||||||
|
"""
|
||||||
|
yield ('Dark Death Mountain Ledge Clip Spot', inverted and 'Dark Death Mountain' or 'Dark Death Mountain (Top)', 'Dark Death Mountain Ledge')
|
||||||
|
|
||||||
|
|
||||||
|
def get_mirror_clip_spots_dw():
|
||||||
|
"""
|
||||||
|
Out of bounds transitions using the mirror
|
||||||
|
"""
|
||||||
|
yield ('Dark Death Mountain Bunny Descent Mirror Spot', 'Dark Death Mountain (West Bottom)', 'Dark Death Mountain Bunny Descent Area')
|
||||||
|
yield ('West Dark World Bunny Descent', 'Dark Death Mountain Bunny Descent Area', 'West Dark World')
|
||||||
|
yield ('Dark Death Mountain (East Bottom) Jump', 'Dark Death Mountain Bunny Descent Area', 'Dark Death Mountain (East Bottom)')
|
||||||
|
yield ('Desert East Mirror Clip', 'Dark Desert', 'Desert Palace Lone Stairs')
|
||||||
|
|
||||||
|
|
||||||
|
def get_mirror_offset_spots_dw():
|
||||||
|
"""
|
||||||
|
Mirror shenanigans placing a mirror portal with a broken camera
|
||||||
|
"""
|
||||||
|
yield ('Dark Death Mountain Offset Mirror', 'Dark Death Mountain (West Bottom)', 'East Dark World')
|
||||||
|
|
||||||
|
|
||||||
|
def get_mirror_offset_spots_lw(player):
|
||||||
|
"""
|
||||||
|
Mirror shenanigans placing a mirror portal with a broken camera
|
||||||
|
"""
|
||||||
|
yield ('Death Mountain Offset Mirror', 'Death Mountain', 'Light World')
|
||||||
|
yield ('Death Mountain Offset Mirror (Houlihan Exit)', 'Death Mountain', 'Hyrule Castle Ledge', lambda state: state.has_Mirror(player) and state.can_boots_clip_dw(player) and state.has_Pearl(player))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def get_invalid_bunny_revival_dungeons():
|
||||||
|
"""
|
||||||
|
Dungeon regions that can't be bunny revived from without superbunny state.
|
||||||
|
"""
|
||||||
|
yield 'Tower of Hera (Bottom)'
|
||||||
|
yield 'Swamp Palace (Entrance)'
|
||||||
|
yield 'Turtle Rock (Entrance)'
|
||||||
|
yield 'Sanctuary'
|
||||||
|
|
||||||
|
|
||||||
|
def no_logic_rules(world, player):
|
||||||
|
"""
|
||||||
|
Add OWG transitions to no logic player's world
|
||||||
|
"""
|
||||||
|
create_no_logic_connections(player, world, get_boots_clip_exits_lw(world.mode == 'inverted'))
|
||||||
|
create_no_logic_connections(player, world, get_boots_clip_exits_dw(world.mode == 'inverted'))
|
||||||
|
|
||||||
|
# Glitched speed drops.
|
||||||
|
create_no_logic_connections(player, world, get_glitched_speed_drops_dw(world.mode == 'inverted'))
|
||||||
|
|
||||||
|
# Mirror clip spots.
|
||||||
|
if world.mode != 'inverted':
|
||||||
|
create_no_logic_connections(player, world, get_mirror_clip_spots_dw())
|
||||||
|
create_no_logic_connections(player, world, get_mirror_offset_spots_dw())
|
||||||
|
else:
|
||||||
|
create_no_logic_connections(player, world, get_mirror_offset_spots_lw(player))
|
||||||
|
|
||||||
|
|
||||||
|
def overworld_glitches_rules(world, player):
|
||||||
|
|
||||||
|
# Boots-accessible locations.
|
||||||
|
create_owg_connections(player, world, get_boots_clip_exits_lw(world.mode == 'inverted'), lambda state: state.can_boots_clip_lw(player))
|
||||||
|
create_owg_connections(player, world, get_boots_clip_exits_dw(world.mode == 'inverted'), lambda state: state.can_boots_clip_dw(player))
|
||||||
|
|
||||||
|
# Glitched speed drops.
|
||||||
|
create_owg_connections(player, world, get_glitched_speed_drops_dw(world.mode == 'inverted'), lambda state: state.can_get_glitched_speed_dw(player))
|
||||||
|
# Dark Death Mountain Ledge Clip Spot also accessible with mirror.
|
||||||
|
if world.mode != 'inverted':
|
||||||
|
add_alternate_rule(world.get_entrance('Dark Death Mountain Ledge Clip Spot', player), lambda state: state.has_Mirror(player))
|
||||||
|
|
||||||
|
# Mirror clip spots.
|
||||||
|
if world.mode != 'inverted':
|
||||||
|
create_owg_connections(player, world, get_mirror_clip_spots_dw(), lambda state: state.has_Mirror(player))
|
||||||
|
create_owg_connections(player, world, get_mirror_offset_spots_dw(), lambda state: state.has_Mirror(player) and state.can_boots_clip_lw(player))
|
||||||
|
else:
|
||||||
|
create_owg_connections(player, world, get_mirror_offset_spots_lw(player), lambda state: state.has_Mirror(player) and state.can_boots_clip_dw(player))
|
||||||
|
|
||||||
|
# Regions that require the boots and some other stuff.
|
||||||
|
if world.mode != 'inverted':
|
||||||
|
world.get_entrance('Turtle Rock Teleporter', player).access_rule = lambda state: (state.can_boots_clip_lw(player) or state.can_lift_heavy_rocks(player)) and state.has('Hammer', player)
|
||||||
|
add_alternate_rule(world.get_entrance('Waterfall of Wishing', player), lambda state: state.has('Moon Pearl', player) or state.has_Boots(player))
|
||||||
|
else:
|
||||||
|
add_alternate_rule(world.get_entrance('Waterfall of Wishing Cave', player), lambda state: state.has('Moon Pearl', player))
|
||||||
|
|
||||||
|
world.get_entrance('Dark Desert Teleporter', player).access_rule = lambda state: (state.can_flute(player) or state.has_Boots(player)) and state.can_lift_heavy_rocks(player)
|
||||||
|
add_alternate_rule(world.get_entrance('Catfish Exit Rock', player), lambda state: state.can_boots_clip_dw(player))
|
||||||
|
add_alternate_rule(world.get_entrance('East Dark World Broken Bridge Pass', player), lambda state: state.can_boots_clip_dw(player))
|
||||||
|
|
||||||
|
# Zora's Ledge via waterwalk setup.
|
||||||
|
add_alternate_rule(world.get_location('Zora\'s Ledge', player), lambda state: state.has_Boots(player))
|
||||||
|
|
||||||
|
|
||||||
|
def add_alternate_rule(entrance, rule):
|
||||||
|
old_rule = entrance.access_rule
|
||||||
|
entrance.access_rule = lambda state: old_rule(state) or rule(state)
|
||||||
|
|
||||||
|
|
||||||
|
def create_no_logic_connections(player, world, connections):
|
||||||
|
for entrance, parent_region, target_region, *rule_override in connections:
|
||||||
|
parent = world.get_region(parent_region, player)
|
||||||
|
target = world.get_region(target_region, player)
|
||||||
|
connection = Entrance(player, entrance, parent)
|
||||||
|
parent.exits.append(connection)
|
||||||
|
connection.connect(target)
|
||||||
|
|
||||||
|
def create_owg_connections(player, world, connections, default_rule):
|
||||||
|
for entrance, parent_region, target_region, *rule_override in connections:
|
||||||
|
parent = world.get_region(parent_region, player)
|
||||||
|
target = world.get_region(target_region, player)
|
||||||
|
connection = Entrance(player, entrance, parent)
|
||||||
|
parent.exits.append(connection)
|
||||||
|
connection.connect(target)
|
||||||
|
rule = rule_override[0] if len(rule_override) > 0 else default_rule
|
||||||
|
connection.access_rule = rule
|
||||||
19
Regions.py
19
Regions.py
@@ -136,13 +136,16 @@ def create_regions(world, player):
|
|||||||
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']),
|
||||||
create_lw_region(player, 'Spectacle Rock', ['Spectacle Rock'], ['Spectacle Rock Drop']),
|
create_lw_region(player, 'Spectacle Rock', ['Spectacle Rock'], ['Spectacle Rock Drop']),
|
||||||
|
|
||||||
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',
|
create_dw_region(player, 'East Dark World', ['Pyramid'], ['Pyramid Fairy', 'South Dark World Bridge', 'Palace of Darkness', 'Dark Lake Hylia Drop (East)',
|
||||||
'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']),
|
'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']),
|
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', 'Dark Lake Hylia Teleporter']),
|
||||||
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']),
|
||||||
@@ -184,8 +187,8 @@ def create_regions(world, player):
|
|||||||
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 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 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']),
|
create_dw_region(player, 'Dark Death Mountain (East Bottom)', None, ['Superbunny Cave (Bottom)', 'Cave Shop (Dark Death Mountain)', 'Fairy Ascension Mirror Spot']),
|
||||||
create_cave_region(player, 'Superbunny Cave', 'a connector', ['Superbunny Cave - Top', 'Superbunny Cave - Bottom'],
|
create_cave_region(player, 'Superbunny Cave (Top)', 'a connector', ['Superbunny Cave - Top', 'Superbunny Cave - Bottom'], ['Superbunny Cave Exit (Top)']),
|
||||||
['Superbunny Cave Exit (Top)', 'Superbunny Cave Exit (Bottom)']),
|
create_cave_region(player, 'Superbunny Cave (Bottom)', 'a connector', None, ['Superbunny Cave Climb', 'Superbunny Cave Exit (Bottom)']),
|
||||||
create_cave_region(player, 'Spike Cave', 'Spike Cave', ['Spike Cave']),
|
create_cave_region(player, 'Spike Cave', 'Spike Cave', ['Spike Cave']),
|
||||||
create_cave_region(player, 'Hookshot Cave', 'a connector', ['Hookshot Cave - Top Right', 'Hookshot Cave - Top Left', 'Hookshot Cave - Bottom Right', 'Hookshot Cave - Bottom Left'],
|
create_cave_region(player, 'Hookshot Cave', 'a connector', ['Hookshot Cave - Top Right', 'Hookshot Cave - Top Left', 'Hookshot Cave - Bottom Right', 'Hookshot Cave - Bottom Left'],
|
||||||
['Hookshot Cave Exit (South)', 'Hookshot Cave Exit (North)']),
|
['Hookshot Cave Exit (South)', 'Hookshot Cave Exit (North)']),
|
||||||
@@ -198,6 +201,8 @@ def create_regions(world, player):
|
|||||||
create_cave_region(player, 'Pyramid', 'a drop\'s exit', ['Ganon'], ['Ganon Drop']),
|
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_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_lw_region(player, 'Desert Northern Cliffs'),
|
||||||
|
create_dw_region(player, 'Dark Death Mountain Bunny Descent Area')
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
5
Rom.py
5
Rom.py
@@ -1131,7 +1131,7 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False):
|
|||||||
rom.write_byte(0x180211, gametype) # Game type
|
rom.write_byte(0x180211, gametype) # Game type
|
||||||
|
|
||||||
# assorted fixes
|
# assorted fixes
|
||||||
rom.write_byte(0x1800A2, 0x01) # remain in real dark world when dying in dark world dungeon before killing aga1
|
rom.write_byte(0x1800A2, 0x01 if world.fix_fake_world else 0x00) # remain in real dark world when dying in dark world dungeon before killing aga1
|
||||||
rom.write_byte(0x180169, 0x01 if world.lock_aga_door_in_escape else 0x00) # Lock or unlock aga tower door during escape sequence.
|
rom.write_byte(0x180169, 0x01 if world.lock_aga_door_in_escape else 0x00) # Lock or unlock aga tower door during escape sequence.
|
||||||
if world.mode[player] == 'inverted':
|
if world.mode[player] == 'inverted':
|
||||||
rom.write_byte(0x180169, 0x02) # lock aga/ganon tower door with crystals in inverted
|
rom.write_byte(0x180169, 0x02) # lock aga/ganon tower door with crystals in inverted
|
||||||
@@ -1291,6 +1291,9 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False):
|
|||||||
if item.name != 'Piece of Heart' or equip[0x36B] == 0:
|
if item.name != 'Piece of Heart' or equip[0x36B] == 0:
|
||||||
equip[0x36C] = min(equip[0x36C] + 0x08, 0xA0)
|
equip[0x36C] = min(equip[0x36C] + 0x08, 0xA0)
|
||||||
equip[0x36D] = min(equip[0x36D] + 0x08, 0xA0)
|
equip[0x36D] = min(equip[0x36D] + 0x08, 0xA0)
|
||||||
|
elif item.name == 'Pegasus Boots':
|
||||||
|
rom.write_byte(0x183015, 0x01)
|
||||||
|
ability_flags |= 0b00000100
|
||||||
else:
|
else:
|
||||||
raise RuntimeError(f'Unsupported item in starting equipment: {item.name}')
|
raise RuntimeError(f'Unsupported item in starting equipment: {item.name}')
|
||||||
|
|
||||||
|
|||||||
290
Rules.py
290
Rules.py
@@ -1,14 +1,17 @@
|
|||||||
import logging
|
import logging
|
||||||
from collections import deque
|
from collections import deque
|
||||||
|
|
||||||
|
import OverworldGlitchRules
|
||||||
from BaseClasses import CollectionState, RegionType, DoorType, Entrance, CrystalBarrier
|
from BaseClasses import CollectionState, RegionType, DoorType, Entrance, CrystalBarrier
|
||||||
from RoomData import DoorKind
|
from RoomData import DoorKind
|
||||||
|
from OverworldGlitchRules import overworld_glitches_rules, no_logic_rules
|
||||||
|
|
||||||
|
|
||||||
def set_rules(world, player):
|
def set_rules(world, player):
|
||||||
|
|
||||||
if world.logic[player] == 'nologic':
|
if world.logic[player] == 'nologic':
|
||||||
logging.getLogger('').info('WARNING! Seeds generated under this logic often require major glitches and may be impossible!')
|
logging.getLogger('').info('WARNING! Seeds generated under this logic often require major glitches and may be impossible!')
|
||||||
|
no_logic_rules(world, player)
|
||||||
world.get_region('Menu', player).can_reach_private = lambda state: True
|
world.get_region('Menu', player).can_reach_private = lambda state: True
|
||||||
for exit in world.get_region('Menu', player).exits:
|
for exit in world.get_region('Menu', player).exits:
|
||||||
exit.hide_path = True
|
exit.hide_path = True
|
||||||
@@ -32,6 +35,13 @@ def set_rules(world, player):
|
|||||||
no_glitches_rules(world, player)
|
no_glitches_rules(world, player)
|
||||||
elif world.logic[player] == 'minorglitches':
|
elif world.logic[player] == 'minorglitches':
|
||||||
logging.getLogger('').info('Minor Glitches may be buggy still. No guarantee for proper logic checks.')
|
logging.getLogger('').info('Minor Glitches may be buggy still. No guarantee for proper logic checks.')
|
||||||
|
elif world.logic == 'owglitches':
|
||||||
|
logging.getLogger('').info('There is a chance OWG has bugged edge case rulesets, especially in inverted. Definitely file a report on GitHub if you see anything strange.')
|
||||||
|
# Initially setting no_glitches_rules to set the baseline rules for some
|
||||||
|
# entrances. The overworld_glitches_rules set is primarily additive.
|
||||||
|
no_glitches_rules(world, player)
|
||||||
|
fake_flipper_rules(world, player)
|
||||||
|
overworld_glitches_rules(world, player)
|
||||||
else:
|
else:
|
||||||
raise NotImplementedError('Not implemented yet')
|
raise NotImplementedError('Not implemented yet')
|
||||||
|
|
||||||
@@ -46,6 +56,9 @@ def set_rules(world, player):
|
|||||||
|
|
||||||
if world.mode[player] != 'inverted':
|
if world.mode[player] != 'inverted':
|
||||||
set_big_bomb_rules(world, player)
|
set_big_bomb_rules(world, player)
|
||||||
|
if world.logic == 'owglitches' and world.shuffle not in ('insanity', 'insanity_legacy'):
|
||||||
|
path_to_courtyard = mirrorless_path_to_castle_courtyard(world, player)
|
||||||
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.world.get_entrance('Dark Death Mountain Offset Mirror', player).can_reach(state) and all(rule(state) for rule in path_to_courtyard), 'or')
|
||||||
else:
|
else:
|
||||||
set_inverted_big_bomb_rules(world, player)
|
set_inverted_big_bomb_rules(world, player)
|
||||||
|
|
||||||
@@ -58,6 +71,32 @@ def set_rules(world, player):
|
|||||||
else:
|
else:
|
||||||
set_inverted_bunny_rules(world, player)
|
set_inverted_bunny_rules(world, player)
|
||||||
|
|
||||||
|
set_trock_key_rules(world, player)
|
||||||
|
|
||||||
|
set_rule(ganons_tower, lambda state: state.has_crystals(world.crystals_needed_for_gt, player))
|
||||||
|
if world.mode != 'inverted' and world.logic == 'owglitches':
|
||||||
|
add_rule(world.get_entrance('Ganons Tower', player), lambda state: state.world.get_entrance('Ganons Tower Ascent', player).can_reach(state), 'or')
|
||||||
|
|
||||||
|
set_bunny_rules(world, player, world.mode == 'inverted')
|
||||||
|
|
||||||
|
|
||||||
|
def mirrorless_path_to_castle_courtyard(world, player):
|
||||||
|
# If Agahnim is defeated then the courtyard needs to be accessible without using the mirror for the mirror offset glitch.
|
||||||
|
# Only considering the secret passage for now (in non-insanity shuffle). Basically, if it's Ganon you need the master sword.
|
||||||
|
start = world.get_entrance('Hyrule Castle Secret Entrance Drop', player)
|
||||||
|
target = world.get_region('Hyrule Castle Courtyard', player)
|
||||||
|
seen = {start.parent_region, start.connected_region}
|
||||||
|
queue = collections.deque([(start.connected_region, [])])
|
||||||
|
while queue:
|
||||||
|
(current, path) = queue.popleft()
|
||||||
|
for entrance in current.exits:
|
||||||
|
if entrance.connected_region not in seen:
|
||||||
|
new_path = path + [entrance.access_rule]
|
||||||
|
if entrance.connected_region == target:
|
||||||
|
return new_path
|
||||||
|
else:
|
||||||
|
queue.append((entrance.connected_region, new_path))
|
||||||
|
|
||||||
def set_rule(spot, rule):
|
def set_rule(spot, rule):
|
||||||
spot.access_rule = rule
|
spot.access_rule = rule
|
||||||
|
|
||||||
@@ -448,7 +487,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('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_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('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('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))
|
set_rule(world.get_entrance('South Dark World Bridge', player), lambda state: state.has('Hammer', player) and state.has_Pearl(player))
|
||||||
@@ -458,7 +498,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))
|
||||||
@@ -471,6 +511,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))
|
||||||
@@ -502,13 +543,10 @@ def default_rules(world, player):
|
|||||||
set_rule(world.get_entrance('Spiral Cave Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Spiral Cave Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Fairy Ascension Mirror Spot', player), lambda state: state.has_Mirror(player) and state.has_Pearl(player)) # need to lift flowers
|
set_rule(world.get_entrance('Fairy Ascension Mirror Spot', player), lambda state: state.has_Mirror(player) and state.has_Pearl(player)) # need to lift flowers
|
||||||
set_rule(world.get_entrance('Isolated Ledge Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Isolated Ledge Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Superbunny Cave Exit (Bottom)', player), lambda state: False) # Cannot get to bottom exit from top. Just exists for shuffling
|
|
||||||
set_rule(world.get_entrance('Floating Island Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Floating Island Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Turtle Rock', player), lambda state: state.has_Pearl(player) and state.has_sword(player) and state.has_turtle_rock_medallion(player) and state.can_reach('Turtle Rock (Top)', 'Region', player)) # sword required to cast magic (!)
|
set_rule(world.get_entrance('Turtle Rock', player), lambda state: state.has_Pearl(player) and state.has_sword(player) and state.has_turtle_rock_medallion(player) and state.can_reach('Turtle Rock (Top)', 'Region', player)) # sword required to cast magic (!)
|
||||||
|
|
||||||
set_rule(world.get_entrance('Pyramid Hole', player), lambda state: state.has('Beat Agahnim 2', player) or world.open_pyramid[player])
|
set_rule(world.get_entrance('Pyramid Hole', player), lambda state: state.has('Beat Agahnim 2', player) or world.open_pyramid[player])
|
||||||
set_rule(world.get_entrance('Ganons Tower', player), lambda state: False) # This is a safety for the TR function below to not require GT entrance in its key logic.
|
|
||||||
|
|
||||||
if world.swords[player] == 'swordless':
|
if world.swords[player] == 'swordless':
|
||||||
swordless_rules(world, player)
|
swordless_rules(world, player)
|
||||||
|
|
||||||
@@ -523,10 +561,11 @@ def inverted_rules(world, player):
|
|||||||
set_rule(world.get_location('Ice Rod Cave', player), lambda state: state.has_Pearl(player))
|
set_rule(world.get_location('Ice Rod Cave', player), lambda state: state.has_Pearl(player))
|
||||||
set_rule(world.get_location('Maze Race', player), lambda state: state.has_Pearl(player))
|
set_rule(world.get_location('Maze Race', player), lambda state: state.has_Pearl(player))
|
||||||
set_rule(world.get_entrance('Mini Moldorm Cave', player), lambda state: state.has_Pearl(player))
|
set_rule(world.get_entrance('Mini Moldorm Cave', player), lambda state: state.has_Pearl(player))
|
||||||
|
set_rule(world.get_entrance('Ice Rod Cave', player), lambda state: state.has_Pearl(player))
|
||||||
set_rule(world.get_entrance('Light Hype Fairy', player), lambda state: state.has_Pearl(player))
|
set_rule(world.get_entrance('Light Hype Fairy', player), lambda state: state.has_Pearl(player))
|
||||||
set_rule(world.get_entrance('Potion Shop Pier', player), lambda state: state.has('Flippers', player) and state.has_Pearl(player))
|
set_rule(world.get_entrance('Potion Shop Pier', player), lambda state: state.has('Flippers', player) and state.has_Pearl(player))
|
||||||
set_rule(world.get_entrance('Light World Pier', player), lambda state: state.has('Flippers', player) and state.has_Pearl(player))
|
set_rule(world.get_entrance('Light World Pier', player), lambda state: state.has('Flippers', player) and state.has_Pearl(player))
|
||||||
set_rule(world.get_entrance('Kings Grave', player), lambda state: state.has_Boots(player) and state.can_lift_heavy_rocks(player) and state.has_Pearl(player))
|
set_rule(world.get_entrance('Kings Grave', player), lambda state: state.has_Boots(player) and state.has_Pearl(player))
|
||||||
set_rule(world.get_entrance('Kings Grave Outer Rocks', player), lambda state: state.can_lift_heavy_rocks(player) and state.has_Pearl(player))
|
set_rule(world.get_entrance('Kings Grave Outer Rocks', player), lambda state: state.can_lift_heavy_rocks(player) and state.has_Pearl(player))
|
||||||
set_rule(world.get_entrance('Kings Grave Inner Rocks', player), lambda state: state.can_lift_heavy_rocks(player) and state.has_Pearl(player))
|
set_rule(world.get_entrance('Kings Grave Inner Rocks', player), lambda state: state.can_lift_heavy_rocks(player) and state.has_Pearl(player))
|
||||||
set_rule(world.get_entrance('Potion Shop Inner Bushes', player), lambda state: state.has_Pearl(player))
|
set_rule(world.get_entrance('Potion Shop Inner Bushes', player), lambda state: state.has_Pearl(player))
|
||||||
@@ -537,7 +576,6 @@ def inverted_rules(world, player):
|
|||||||
set_rule(world.get_entrance('Graveyard Cave Outer Bushes', player), lambda state: state.has_Pearl(player))
|
set_rule(world.get_entrance('Graveyard Cave Outer Bushes', player), lambda state: state.has_Pearl(player))
|
||||||
set_rule(world.get_entrance('Secret Passage Inner Bushes', player), lambda state: state.has_Pearl(player))
|
set_rule(world.get_entrance('Secret Passage Inner Bushes', player), lambda state: state.has_Pearl(player))
|
||||||
set_rule(world.get_entrance('Secret Passage Outer Bushes', player), lambda state: state.has_Pearl(player))
|
set_rule(world.get_entrance('Secret Passage Outer Bushes', player), lambda state: state.has_Pearl(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) and state.has_Pearl(player))
|
set_rule(world.get_entrance('Bonk Fairy (Light)', player), lambda state: state.has_Boots(player) and state.has_Pearl(player))
|
||||||
set_rule(world.get_entrance('Bat Cave Drop Ledge', player), lambda state: state.has('Hammer', player) and state.has_Pearl(player))
|
set_rule(world.get_entrance('Bat Cave Drop Ledge', player), lambda state: state.has('Hammer', player) and state.has_Pearl(player))
|
||||||
set_rule(world.get_entrance('Lumberjack Tree Tree', player), lambda state: state.has_Boots(player) and state.has_Pearl(player) and state.has('Beat Agahnim 1', player))
|
set_rule(world.get_entrance('Lumberjack Tree Tree', player), lambda state: state.has_Boots(player) and state.has_Pearl(player) and state.has('Beat Agahnim 1', player))
|
||||||
@@ -557,7 +595,8 @@ def inverted_rules(world, player):
|
|||||||
set_rule(world.get_location('Flute Spot', player), lambda state: state.has('Shovel', player) and state.has_Pearl(player))
|
set_rule(world.get_location('Flute Spot', player), lambda state: state.has('Shovel', player) and state.has_Pearl(player))
|
||||||
|
|
||||||
set_rule(world.get_location('Zora\'s Ledge', player), lambda state: state.has('Flippers', player) and state.has_Pearl(player))
|
set_rule(world.get_location('Zora\'s Ledge', player), lambda state: state.has('Flippers', player) and state.has_Pearl(player))
|
||||||
set_rule(world.get_entrance('Waterfall of Wishing', player), lambda state: state.has('Flippers', player) and state.has_Pearl(player)) # can be fake flippered into, but is in weird state inside that might prevent you from doing things. Can be improved in future Todo
|
set_rule(world.get_entrance('Waterfall of Wishing Cave', player), lambda state: state.has('Flippers', player) and state.has_Pearl(player))
|
||||||
|
set_rule(world.get_entrance('Northeast Light World Return', player), lambda state: state.has('Flippers', player) and state.has_Pearl(player))
|
||||||
set_rule(world.get_location('Frog', player), lambda state: state.can_lift_heavy_rocks(player) and
|
set_rule(world.get_location('Frog', player), lambda state: state.can_lift_heavy_rocks(player) and
|
||||||
(state.has_Pearl(player) or state.has('Beat Agahnim 1', player)) or (state.can_reach('Light World', 'Region', player)
|
(state.has_Pearl(player) or state.has('Beat Agahnim 1', player)) or (state.can_reach('Light World', 'Region', player)
|
||||||
and state.has_Mirror(player))) # Need LW access using Mirror or Portal
|
and state.has_Mirror(player))) # Need LW access using Mirror or Portal
|
||||||
@@ -567,6 +606,7 @@ def inverted_rules(world, player):
|
|||||||
set_rule(world.get_entrance('Bush Covered Lawn Outer Bushes', player), lambda state: state.has_Pearl(player))
|
set_rule(world.get_entrance('Bush Covered Lawn Outer Bushes', player), lambda state: state.has_Pearl(player))
|
||||||
set_rule(world.get_entrance('Bomb Hut Inner Bushes', player), lambda state: state.has_Pearl(player))
|
set_rule(world.get_entrance('Bomb Hut Inner Bushes', player), lambda state: state.has_Pearl(player))
|
||||||
set_rule(world.get_entrance('Bomb Hut Outer Bushes', player), lambda state: state.has_Pearl(player))
|
set_rule(world.get_entrance('Bomb Hut Outer Bushes', player), lambda state: state.has_Pearl(player))
|
||||||
|
set_rule(world.get_entrance('Light World Bomb Hut', player), lambda state: state.has_Pearl(player)) # need bomb
|
||||||
set_rule(world.get_entrance('North Fairy Cave Drop', player), lambda state: state.has_Pearl(player))
|
set_rule(world.get_entrance('North Fairy Cave Drop', player), lambda state: state.has_Pearl(player))
|
||||||
set_rule(world.get_entrance('Lost Woods Hideout Drop', player), lambda state: state.has_Pearl(player))
|
set_rule(world.get_entrance('Lost Woods Hideout Drop', player), lambda state: state.has_Pearl(player))
|
||||||
set_rule(world.get_location('Potion Shop', player), lambda state: state.has('Mushroom', player) and (state.can_reach('Potion Shop Area', 'Region', player))) # new inverted region, need pearl for bushes or access to potion shop door/waterfall fairy
|
set_rule(world.get_location('Potion Shop', player), lambda state: state.has('Mushroom', player) and (state.can_reach('Potion Shop Area', 'Region', player))) # new inverted region, need pearl for bushes or access to potion shop door/waterfall fairy
|
||||||
@@ -584,7 +624,7 @@ def inverted_rules(world, player):
|
|||||||
set_rule(world.get_entrance('Dark Death Mountain Teleporter (East)', player), lambda state: state.can_lift_heavy_rocks(player) and state.has('Hammer', player) and state.has_Pearl(player)) # bunny cannot use hammer
|
set_rule(world.get_entrance('Dark Death Mountain Teleporter (East)', player), lambda state: state.can_lift_heavy_rocks(player) and state.has('Hammer', player) and state.has_Pearl(player)) # bunny cannot use hammer
|
||||||
set_rule(world.get_entrance('East Death Mountain (Top)', player), lambda state: state.has('Hammer', player) and state.has_Pearl(player)) # bunny can not use hammer
|
set_rule(world.get_entrance('East Death Mountain (Top)', player), lambda state: state.has('Hammer', player) and state.has_Pearl(player)) # bunny can not use hammer
|
||||||
|
|
||||||
set_rule(world.get_location('Catfish', player), lambda state: state.can_lift_rocks(player) or (state.has('Flippers', player) and state.has_Mirror(player) and state.has_Pearl(player) and state.can_reach('Light World', 'Region', 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.can_lift_rocks(player) or state.has('Hammer', player)) or state.has('Flippers', player)))
|
set_rule(world.get_entrance('Northeast Dark World Broken Bridge Pass', player), lambda state: ((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.can_lift_rocks(player) or state.has('Hammer', player)))
|
set_rule(world.get_entrance('East Dark World Broken Bridge Pass', player), lambda state: (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))
|
set_rule(world.get_entrance('South Dark World Bridge', player), lambda state: state.has('Hammer', player))
|
||||||
@@ -595,7 +635,8 @@ def inverted_rules(world, player):
|
|||||||
set_rule(world.get_entrance('Dark Lake Hylia Drop (South)', player), lambda state: 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('Flippers', player)) # ToDo any fake flipper set up?
|
||||||
set_rule(world.get_entrance('Dark Lake Hylia Ledge Pier', player), lambda state: state.has('Flippers', player))
|
set_rule(world.get_entrance('Dark Lake Hylia Ledge Pier', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Dark Lake Hylia Ledge Spike Cave', player), lambda state: state.can_lift_rocks(player))
|
set_rule(world.get_entrance('Dark Lake Hylia Ledge Spike Cave', player), lambda state: state.can_lift_rocks(player))
|
||||||
set_rule(world.get_entrance('Dark Lake Hylia Teleporter', player), lambda state: state.has('Flippers', player) and (state.has('Hammer', player) or state.can_lift_rocks(player))) # Fake Flippers
|
set_rule(world.get_entrance('Dark Lake Hylia Teleporter', player), lambda state: state.has('Flippers', player)) # Fake Flippers
|
||||||
|
set_rule(world.get_entrance('Dark Lake Hylia Shallows', player), lambda state: state.has('Flippers', player))
|
||||||
set_rule(world.get_entrance('Village of Outcasts Heavy Rock', player), lambda state: state.can_lift_heavy_rocks(player))
|
set_rule(world.get_entrance('Village of Outcasts Heavy Rock', player), lambda state: state.can_lift_heavy_rocks(player))
|
||||||
set_rule(world.get_entrance('East Dark World Bridge', player), lambda state: state.has('Hammer', player))
|
set_rule(world.get_entrance('East Dark World Bridge', player), lambda state: state.has('Hammer', 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))
|
||||||
@@ -622,7 +663,6 @@ def inverted_rules(world, player):
|
|||||||
set_rule(world.get_entrance('Dark Death Mountain Ledge Mirror Spot (East)', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Dark Death Mountain Ledge Mirror Spot (East)', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Dark Death Mountain Ledge Mirror Spot (West)', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Dark Death Mountain Ledge Mirror Spot (West)', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Laser Bridge Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Laser Bridge Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Superbunny Cave Exit (Bottom)', player), lambda state: False) # Cannot get to bottom exit from top. Just exists for shuffling
|
|
||||||
set_rule(world.get_entrance('Floating Island Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Floating Island Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Turtle Rock', player), lambda state: state.has_sword(player) and state.has_turtle_rock_medallion(player) and state.can_reach('Turtle Rock (Top)', 'Region', player)) # sword required to cast magic (!)
|
set_rule(world.get_entrance('Turtle Rock', player), lambda state: state.has_sword(player) and state.has_turtle_rock_medallion(player) and state.can_reach('Turtle Rock (Top)', 'Region', player)) # sword required to cast magic (!)
|
||||||
|
|
||||||
@@ -634,7 +674,7 @@ def inverted_rules(world, player):
|
|||||||
set_rule(world.get_entrance('East Dark World Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('East Dark World Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('West Dark World Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('West Dark World Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('South Dark World Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('South Dark World Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Northeast Dark World Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Catfish Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Potion Shop Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Potion Shop Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
set_rule(world.get_entrance('Shopping Mall Mirror Spot', player), lambda state: state.has_Mirror(player))
|
set_rule(world.get_entrance('Shopping Mall 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('Maze Race Mirror Spot', player), lambda state: state.has_Mirror(player))
|
||||||
@@ -658,8 +698,6 @@ def inverted_rules(world, player):
|
|||||||
set_rule(world.get_entrance('Hammer Peg Area Flute', player), lambda state: state.can_flute(player))
|
set_rule(world.get_entrance('Hammer Peg Area Flute', player), lambda state: state.can_flute(player))
|
||||||
|
|
||||||
set_rule(world.get_entrance('Inverted Pyramid Hole', player), lambda state: state.has('Beat Agahnim 2', player) or world.open_pyramid[player])
|
set_rule(world.get_entrance('Inverted Pyramid Hole', player), lambda state: state.has('Beat Agahnim 2', player) or world.open_pyramid[player])
|
||||||
set_rule(world.get_entrance('Inverted Ganons Tower', player), lambda state: False) # This is a safety for the TR function below to not require GT entrance in its key logic.
|
|
||||||
|
|
||||||
if world.swords[player] == 'swordless':
|
if world.swords[player] == 'swordless':
|
||||||
swordless_rules(world, player)
|
swordless_rules(world, player)
|
||||||
|
|
||||||
@@ -694,19 +732,49 @@ def no_glitches_rules(world, player):
|
|||||||
# for location in DMs_room_chests:
|
# for location in DMs_room_chests:
|
||||||
# add_rule(world.get_location(location, player), lambda state: state.has('Hookshot', player))
|
# add_rule(world.get_location(location, 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
|
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)
|
||||||
|
add_conditional_lamps(world, player)
|
||||||
|
|
||||||
|
|
||||||
|
def fake_flipper_rules(world, player):
|
||||||
|
if world.mode != 'inverted':
|
||||||
|
set_rule(world.get_entrance('Zoras River', player), lambda state: True)
|
||||||
|
set_rule(world.get_entrance('Lake Hylia Central Island Pier', player), lambda state: True)
|
||||||
|
set_rule(world.get_entrance('Hobo Bridge', player), lambda state: True)
|
||||||
|
set_rule(world.get_entrance('Dark Lake Hylia Drop (East)', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player))
|
||||||
|
set_rule(world.get_entrance('Dark Lake Hylia Teleporter', player), lambda state: state.has_Pearl(player))
|
||||||
|
set_rule(world.get_entrance('Dark Lake Hylia Ledge Drop', player), lambda state: state.has_Pearl(player))
|
||||||
|
else:
|
||||||
|
set_rule(world.get_entrance('Zoras River', player), lambda state: state.has_Pearl(player))
|
||||||
|
set_rule(world.get_entrance('Lake Hylia Central Island Pier', player), lambda state: state.has_Pearl(player))
|
||||||
|
set_rule(world.get_entrance('Lake Hylia Island Pier', player), lambda state: state.has_Pearl(player))
|
||||||
|
set_rule(world.get_entrance('Lake Hylia Warp', player), lambda state: state.has_Pearl(player))
|
||||||
|
set_rule(world.get_entrance('Northeast Light World Warp', player), lambda state: state.has_Pearl(player))
|
||||||
|
set_rule(world.get_entrance('Hobo Bridge', player), lambda state: state.has_Pearl(player))
|
||||||
|
set_rule(world.get_entrance('Dark Lake Hylia Drop (East)', player), lambda state: state.has('Flippers', player))
|
||||||
|
set_rule(world.get_entrance('Dark Lake Hylia Teleporter', player), lambda state: True)
|
||||||
|
set_rule(world.get_entrance('Dark Lake Hylia Ledge Drop', player), lambda state: True)
|
||||||
|
set_rule(world.get_entrance('East Dark World Pier', player), lambda state: True)
|
||||||
|
|
||||||
|
|
||||||
|
def forbid_bomb_jump_requirements(world, player):
|
||||||
|
DMs_room_chests = ['Ganons Tower - DMs Room - Top Left', 'Ganons Tower - DMs Room - Top Right', 'Ganons Tower - DMs Room - Bottom Left', 'Ganons Tower - DMs Room - Bottom Right']
|
||||||
|
for location in DMs_room_chests:
|
||||||
|
add_rule(world.get_location(location, player), lambda state: state.has('Hookshot', player))
|
||||||
set_rule(world.get_entrance('Paradox Cave Bomb Jump', player), lambda state: False)
|
set_rule(world.get_entrance('Paradox Cave Bomb Jump', player), lambda state: False)
|
||||||
|
|
||||||
# Light cones in standard depend on which world we actually are in, not which one the location would normally be
|
# Light cones in standard depend on which world we actually are in, not which one the location would normally be
|
||||||
# We add Lamp requirements only to those locations which lie in the dark world (or everything if open
|
# We add Lamp requirements only to those locations which lie in the dark world (or everything if open
|
||||||
DW_Entrances = ['Bumper Cave (Bottom)', 'Superbunny Cave (Top)', 'Superbunny Cave (Bottom)', 'Hookshot Cave', 'Bumper Cave (Top)', 'Hookshot Cave Back Entrance', 'Dark Death Mountain Ledge (East)',
|
DW_Entrances = ['Bumper Cave (Bottom)', 'Superbunny Cave (Top)', 'Superbunny Cave (Bottom)', 'Hookshot Cave', 'Bumper Cave (Top)', 'Hookshot Cave Back Entrance', 'Dark Death Mountain Ledge (East)',
|
||||||
'Turtle Rock Isolated Ledge Entrance', 'Thieves Town', 'Skull Woods Final Section', 'Ice Palace', 'Misery Mire', 'Palace of Darkness', 'Swamp Palace', 'Turtle Rock', 'Dark Death Mountain Ledge (West)']
|
'Turtle Rock Isolated Ledge Entrance', 'Thieves Town', 'Skull Woods Final Section', 'Ice Palace', 'Misery Mire', 'Palace of Darkness', 'Swamp Palace', 'Turtle Rock', 'Dark Death Mountain Ledge (West)']
|
||||||
|
|
||||||
def check_is_dark_world(region):
|
def check_is_dark_world(region):
|
||||||
for entrance in region.entrances:
|
for entrance in region.entrances:
|
||||||
if entrance.name in DW_Entrances:
|
if entrance.name in DW_Entrances:
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def add_conditional_lamps(world, player):
|
||||||
def add_conditional_lamp(spot, region, spottype='Location'):
|
def add_conditional_lamp(spot, region, spottype='Location'):
|
||||||
if spottype == 'Location':
|
if spottype == 'Location':
|
||||||
spot = world.get_location(spot, player)
|
spot = world.get_location(spot, player)
|
||||||
@@ -1361,6 +1429,9 @@ def set_inverted_big_bomb_rules(world, player):
|
|||||||
elif bombshop_entrance.name == 'Capacity Upgrade':
|
elif bombshop_entrance.name == 'Capacity Upgrade':
|
||||||
# You must Mirror but then can use either Ice Palace return path.
|
# You must Mirror but then can use either Ice Palace return path.
|
||||||
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.has('Flippers', player) or state.can_flute(player)) and state.has_Mirror(player))
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.has('Flippers', player) or state.can_flute(player)) and state.has_Mirror(player))
|
||||||
|
elif bombshop_entrance.name == 'Two Brothers House (West)':
|
||||||
|
# First you must Mirror. Then you can either Flute, cross the peg bridge, or use the Agah 1 portal to Mirror again.
|
||||||
|
add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: (state.can_flute(player) or state.has('Hammer', player) or state.has('Beat Agahnim 1', player)) and state.has_Mirror(player))
|
||||||
elif bombshop_entrance.name in LW_inaccessible_entrances:
|
elif bombshop_entrance.name in LW_inaccessible_entrances:
|
||||||
# You can't get to the pyramid from these entrances without bomb duping.
|
# You can't get to the pyramid from these entrances without bomb duping.
|
||||||
raise Exception('No valid path to open Pyramid Fairy. (Could not route from %s)' % bombshop_entrance.name)
|
raise Exception('No valid path to open Pyramid Fairy. (Could not route from %s)' % bombshop_entrance.name)
|
||||||
@@ -1371,7 +1442,7 @@ def set_inverted_big_bomb_rules(world, player):
|
|||||||
raise Exception('No logic found for routing from %s to the pyramid.' % bombshop_entrance.name)
|
raise Exception('No logic found for routing from %s to the pyramid.' % bombshop_entrance.name)
|
||||||
|
|
||||||
|
|
||||||
def set_bunny_rules(world, player):
|
def set_bunny_rules(world, player, inverted):
|
||||||
|
|
||||||
# regions for the exits of multi-entrace caves/drops that bunny cannot pass
|
# regions for the exits of multi-entrace caves/drops that bunny cannot pass
|
||||||
# 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.
|
||||||
@@ -1381,90 +1452,7 @@ def set_bunny_rules(world, player):
|
|||||||
'Checkerboard Cave', 'Potion Shop', 'Spectacle Rock Cave', 'Pyramid',
|
'Checkerboard Cave', 'Potion Shop', 'Spectacle Rock Cave', 'Pyramid',
|
||||||
'Hype Cave - Generous Guy', 'Peg Cave', 'Bumper Cave Ledge', 'Dark Blacksmith Ruins']
|
'Hype Cave - Generous Guy', 'Peg Cave', 'Bumper Cave Ledge', 'Dark Blacksmith Ruins']
|
||||||
|
|
||||||
def path_to_access_rule(path, entrance):
|
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', 'Spectacle Rock', 'Bombos Tablet', 'Ether Tablet', 'Purple Chest', 'Blacksmith', 'Missing Smith', 'Master Sword Pedestal', 'Bottle Merchant', 'Sunken Treasure', 'Desert Ledge']
|
||||||
return lambda state: state.can_reach(entrance) and all(rule_func(state) for rule_func in path)
|
|
||||||
|
|
||||||
def options_to_access_rule(options):
|
|
||||||
return lambda state: any(rule_func(state) for rule_func in options)
|
|
||||||
|
|
||||||
def get_rule_to_add(start_region):
|
|
||||||
if not start_region.is_light_world:
|
|
||||||
return lambda state: state.has_Pearl(player)
|
|
||||||
# in this case we are mixed region.
|
|
||||||
# we collect possible options.
|
|
||||||
|
|
||||||
# The base option is having the moon pearl
|
|
||||||
possible_options = [lambda state: state.has_Pearl(player)]
|
|
||||||
|
|
||||||
# We will search entrances recursively until we find
|
|
||||||
# one that leads to an exclusively light world region
|
|
||||||
# for each such entrance a new option is added that consist of:
|
|
||||||
# a) being able to reach it, and
|
|
||||||
# b) being able to access all entrances from there to `region`
|
|
||||||
seen = {start_region}
|
|
||||||
queue = deque([(start_region, [])])
|
|
||||||
while queue:
|
|
||||||
(current, path) = queue.popleft()
|
|
||||||
for entrance in current.entrances:
|
|
||||||
new_region = entrance.parent_region
|
|
||||||
if new_region in seen:
|
|
||||||
continue
|
|
||||||
new_path = path + [entrance.access_rule]
|
|
||||||
seen.add(new_region)
|
|
||||||
if not new_region.is_light_world:
|
|
||||||
continue # we don't care about pure dark world entrances
|
|
||||||
if new_region.is_dark_world:
|
|
||||||
queue.append((new_region, new_path))
|
|
||||||
else:
|
|
||||||
# we have reached pure light world, so we have a new possible option
|
|
||||||
possible_options.append(path_to_access_rule(new_path, entrance))
|
|
||||||
return options_to_access_rule(possible_options)
|
|
||||||
|
|
||||||
# Add requirements for bunny-impassible caves if they occur in the dark world
|
|
||||||
for region in [world.get_region(name, player) for name in bunny_impassable_caves]:
|
|
||||||
|
|
||||||
if not region.is_dark_world:
|
|
||||||
continue
|
|
||||||
rule = get_rule_to_add(region)
|
|
||||||
for ext in region.exits:
|
|
||||||
add_rule(ext, rule)
|
|
||||||
|
|
||||||
paradox_shop = world.get_region('Light World Death Mountain Shop', player)
|
|
||||||
if paradox_shop.is_dark_world:
|
|
||||||
add_rule(paradox_shop.entrances[0], get_rule_to_add(paradox_shop))
|
|
||||||
|
|
||||||
for ent_name in bunny_impassible_doors:
|
|
||||||
bunny_exit = world.get_entrance(ent_name, player)
|
|
||||||
if bunny_exit.parent_region.is_dark_world:
|
|
||||||
add_rule(bunny_exit, get_rule_to_add(bunny_exit.parent_region))
|
|
||||||
|
|
||||||
doors_to_check = [x for x in world.doors if x.player == player and x not in bunny_impassible_doors]
|
|
||||||
doors_to_check = [x for x in doors_to_check if x.type in [DoorType.Normal, DoorType.Interior] and not x.blocked]
|
|
||||||
for door in doors_to_check:
|
|
||||||
room = world.get_room(door.roomIndex, player)
|
|
||||||
if door.entrance.parent_region.is_dark_world and room.kind(door) in [DoorKind.Dashable, DoorKind.Bombable, DoorKind.Hidden]:
|
|
||||||
add_rule(door.entrance, get_rule_to_add(door.entrance.parent_region))
|
|
||||||
|
|
||||||
# Add requirements for all locations that are actually in the dark world, except those available to the bunny
|
|
||||||
for location in world.get_locations():
|
|
||||||
if location.player == player and location.parent_region.is_dark_world:
|
|
||||||
|
|
||||||
if location.name in bunny_accessible_locations:
|
|
||||||
continue
|
|
||||||
|
|
||||||
add_rule(location, get_rule_to_add(location.parent_region))
|
|
||||||
|
|
||||||
|
|
||||||
def set_inverted_bunny_rules(world, player):
|
|
||||||
|
|
||||||
# regions for the exits of multi-entrace caves/drops that bunny cannot pass
|
|
||||||
# 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',
|
|
||||||
'Pyramid', 'Spiral Cave (Top)', 'Fairy Ascension Cave (Drop)', 'The Sky']
|
|
||||||
bunny_accessible_locations = ['Link\'s House', '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']
|
|
||||||
|
|
||||||
def path_to_access_rule(path, entrance):
|
def path_to_access_rule(path, entrance):
|
||||||
return lambda state: state.can_reach(entrance) and all(rule_func(state) for rule_func in path)
|
return lambda state: state.can_reach(entrance) and all(rule_func(state) for rule_func in path)
|
||||||
@@ -1472,9 +1460,39 @@ def set_inverted_bunny_rules(world, player):
|
|||||||
def options_to_access_rule(options):
|
def options_to_access_rule(options):
|
||||||
return lambda state: any(rule_func(state) for rule_func in options)
|
return lambda state: any(rule_func(state) for rule_func in options)
|
||||||
|
|
||||||
def get_rule_to_add(start_region):
|
# Helper functions to determine if the moon pearl is required
|
||||||
if not start_region.is_dark_world:
|
def is_bunny(region):
|
||||||
return lambda state: state.has_Pearl(player)
|
if inverted:
|
||||||
|
return region.is_light_world
|
||||||
|
else:
|
||||||
|
return region.is_dark_world
|
||||||
|
def is_link(region):
|
||||||
|
if inverted:
|
||||||
|
return region.is_dark_world
|
||||||
|
else:
|
||||||
|
return region.is_light_world
|
||||||
|
|
||||||
|
def get_rule_to_add(region, location = None, connecting_entrance = None):
|
||||||
|
# In OWG, a location can potentially be superbunny-mirror accessible or
|
||||||
|
# bunny revival accessible.
|
||||||
|
if world.logic == 'owglitches':
|
||||||
|
# TODO: Fix dungeon revive logic for door rando
|
||||||
|
if region.name == 'Swamp Palace (Entrance)':
|
||||||
|
return lambda state: state.has_Pearl(player)
|
||||||
|
if region.name == 'Tower of Hera (Bottom)': # Need to hit the crystal switch
|
||||||
|
return lambda state: state.has_Mirror(player) and state.has_sword(player) or state.has_Pearl(player)
|
||||||
|
if region.name in OverworldGlitchRules.get_invalid_bunny_revival_dungeons():
|
||||||
|
return lambda state: state.has_Mirror(player) or state.has_Pearl(player)
|
||||||
|
if region.type == RegionType.Dungeon:
|
||||||
|
return lambda state: True
|
||||||
|
if (((location is None or location.name not in OverworldGlitchRules.get_superbunny_accessible_locations())
|
||||||
|
or (connecting_entrance is not None and connecting_entrance.name in OverworldGlitchRules.get_invalid_bunny_revival_dungeons()))
|
||||||
|
and not is_link(region)):
|
||||||
|
return lambda state: state.has_Pearl(player)
|
||||||
|
else:
|
||||||
|
if not is_link(region):
|
||||||
|
return lambda state: state.has_Pearl(player)
|
||||||
|
|
||||||
# in this case we are mixed region.
|
# in this case we are mixed region.
|
||||||
# we collect possible options.
|
# we collect possible options.
|
||||||
|
|
||||||
@@ -1496,9 +1514,24 @@ def set_inverted_bunny_rules(world, player):
|
|||||||
continue
|
continue
|
||||||
new_path = path + [entrance.access_rule]
|
new_path = path + [entrance.access_rule]
|
||||||
seen.add(new_region)
|
seen.add(new_region)
|
||||||
if not new_region.is_dark_world:
|
if not is_link(new_region):
|
||||||
continue # we don't care about pure light world entrances
|
# For OWG, establish superbunny and revival rules.
|
||||||
if new_region.is_light_world:
|
if world.logic == 'owglitches' and entrance.name not in OverworldGlitchRules.get_invalid_bunny_revival_dungeons():
|
||||||
|
if region.name in OverworldGlitchRules.get_sword_required_superbunny_mirror_regions():
|
||||||
|
possible_options.append(lambda state: path_to_access_rule(new_path, entrance) and state.has_Mirror(player) and state.has_sword(player))
|
||||||
|
elif (region.name in OverworldGlitchRules.get_boots_required_superbunny_mirror_regions()
|
||||||
|
or location is not None and location.name in OverworldGlitchRules.get_boots_required_superbunny_mirror_locations()):
|
||||||
|
possible_options.append(lambda state: path_to_access_rule(new_path, entrance) and state.has_Mirror(player) and state.has_Boots(player))
|
||||||
|
elif location is not None and location.name in OverworldGlitchRules.get_superbunny_accessible_locations():
|
||||||
|
if new_region.name == 'Superbunny Cave (Bottom)' or region.name == 'Kakariko Well (top)':
|
||||||
|
possible_options.append(lambda state: path_to_access_rule(new_path, entrance))
|
||||||
|
else:
|
||||||
|
possible_options.append(lambda state: path_to_access_rule(new_path, entrance) and state.has_Mirror(player))
|
||||||
|
if new_region.type != RegionType.Cave:
|
||||||
|
continue
|
||||||
|
else:
|
||||||
|
continue
|
||||||
|
if is_bunny(new_region):
|
||||||
queue.append((new_region, new_path))
|
queue.append((new_region, new_path))
|
||||||
else:
|
else:
|
||||||
# we have reached pure dark world, so we have a new possible option
|
# we have reached pure dark world, so we have a new possible option
|
||||||
@@ -1508,14 +1541,14 @@ def set_inverted_bunny_rules(world, player):
|
|||||||
# Add requirements for bunny-impassible caves if they occur in the light world
|
# Add requirements for bunny-impassible caves if they occur in the light world
|
||||||
for region in [world.get_region(name, player) for name in bunny_impassable_caves]:
|
for region in [world.get_region(name, player) for name in bunny_impassable_caves]:
|
||||||
|
|
||||||
if not region.is_light_world:
|
if not is_bunny(region):
|
||||||
continue
|
continue
|
||||||
rule = get_rule_to_add(region)
|
rule = get_rule_to_add(region)
|
||||||
for ext in region.exits:
|
for ext in region.exits:
|
||||||
add_rule(ext, rule)
|
add_rule(ext, rule)
|
||||||
|
|
||||||
paradox_shop = world.get_region('Light World Death Mountain Shop', player)
|
paradox_shop = world.get_region('Light World Death Mountain Shop', player)
|
||||||
if paradox_shop.is_light_world:
|
if is_bunny(paradox_shop):
|
||||||
add_rule(paradox_shop.entrances[0], get_rule_to_add(paradox_shop))
|
add_rule(paradox_shop.entrances[0], get_rule_to_add(paradox_shop))
|
||||||
|
|
||||||
for ent_name in bunny_impassible_doors:
|
for ent_name in bunny_impassible_doors:
|
||||||
@@ -1530,15 +1563,22 @@ def set_inverted_bunny_rules(world, player):
|
|||||||
if door.entrance.parent_region.is_light_world and room.kind(door) in [DoorKind.Dashable, DoorKind.Bombable, DoorKind.Hidden]:
|
if door.entrance.parent_region.is_light_world and room.kind(door) in [DoorKind.Dashable, DoorKind.Bombable, DoorKind.Hidden]:
|
||||||
add_rule(door.entrance, get_rule_to_add(door.entrance.parent_region))
|
add_rule(door.entrance, get_rule_to_add(door.entrance.parent_region))
|
||||||
|
|
||||||
# Add requirements for all locations that are actually in the light world, except those available to the bunny
|
# Add requirements for all locations that are actually in the dark world, except those available to the bunny, including dungeon revival
|
||||||
for location in world.get_locations():
|
for entrance in world.get_entrances():
|
||||||
if location.player == player and location.parent_region.is_light_world:
|
if entrance.player == player and is_bunny(entrance.connected_region):
|
||||||
|
if world.logic == 'owglitches':
|
||||||
if location.name in bunny_accessible_locations:
|
if entrance.connected_region.type == RegionType.Dungeon:
|
||||||
continue
|
if entrance.parent_region.type != RegionType.Dungeon and entrance.connected_region.name in OverworldGlitchRules.get_invalid_bunny_revival_dungeons():
|
||||||
|
add_rule(entrance, get_rule_to_add(entrance.connected_region, None, entrance))
|
||||||
add_rule(location, get_rule_to_add(location.parent_region))
|
continue
|
||||||
|
if entrance.connected_region.name == 'Turtle Rock (Entrance)':
|
||||||
|
add_rule(world.get_entrance('Turtle Rock Entrance Gap', player), get_rule_to_add(entrance.connected_region, None, entrance))
|
||||||
|
for location in entrance.connected_region.locations:
|
||||||
|
if world.logic == 'owglitches' and entrance.name in OverworldGlitchRules.get_invalid_mirror_bunny_entrances():
|
||||||
|
continue
|
||||||
|
if location.name in bunny_accessible_locations:
|
||||||
|
continue
|
||||||
|
add_rule(location, get_rule_to_add(entrance.connected_region, location))
|
||||||
|
|
||||||
bunny_impassible_doors = {
|
bunny_impassible_doors = {
|
||||||
'Hyrule Dungeon Armory S', 'Hyrule Dungeon Armory ES', 'Sewers Secret Room Push Block', 'Sewers Pull Switch S',
|
'Hyrule Dungeon Armory S', 'Hyrule Dungeon Armory ES', 'Sewers Secret Room Push Block', 'Sewers Pull Switch S',
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
description: Example door rando weights
|
description: Example door rando weights
|
||||||
door_shuffle:
|
door_shuffle:
|
||||||
vanilla: 2
|
vanilla: 0
|
||||||
basic: 1
|
basic: 2
|
||||||
crossed: 1
|
crossed: 2
|
||||||
intensity:
|
intensity:
|
||||||
1: 1
|
1: 2
|
||||||
2: 1
|
2: 2
|
||||||
3: 4
|
3: 4
|
||||||
keydropshuffle:
|
keydropshuffle:
|
||||||
on: 1
|
on: 1
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
fast_ganon: 2
|
fast_ganon: 2
|
||||||
dungeons: 1
|
dungeons: 1
|
||||||
pedestal: 2
|
pedestal: 2
|
||||||
triforce-hunt: 0
|
triforce-hunt: 2
|
||||||
triforce_goal_min: 10
|
triforce_goal_min: 10
|
||||||
triforce_goal_max: 30
|
triforce_goal_max: 30
|
||||||
triforce_pool_min: 20
|
triforce_pool_min: 20
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
default: 5
|
default: 5
|
||||||
experimental:
|
experimental:
|
||||||
on: 1
|
on: 1
|
||||||
off: 0
|
off: 1
|
||||||
glitches_required:
|
glitches_required:
|
||||||
none: 1
|
none: 1
|
||||||
no_logic: 0
|
no_logic: 0
|
||||||
@@ -90,23 +90,23 @@
|
|||||||
random: 1
|
random: 1
|
||||||
enemy_shuffle:
|
enemy_shuffle:
|
||||||
none: 3
|
none: 3
|
||||||
shuffled: 1
|
shuffled: 2
|
||||||
random: 0
|
random: 1
|
||||||
hints:
|
hints:
|
||||||
on: 1
|
on: 1
|
||||||
off: 0
|
off: 1
|
||||||
weapons:
|
weapons:
|
||||||
randomized: 2
|
randomized: 5
|
||||||
assured: 1
|
assured: 3
|
||||||
vanilla: 1
|
vanilla: 3
|
||||||
swordless: 0
|
swordless: 1
|
||||||
item_pool:
|
item_pool:
|
||||||
normal: 1
|
normal: 3
|
||||||
hard: 0
|
hard: 1
|
||||||
expert: 0
|
expert: 0
|
||||||
item_functionality:
|
item_functionality:
|
||||||
normal: 1
|
normal: 3
|
||||||
hard: 0
|
hard: 1
|
||||||
expert: 0
|
expert: 0
|
||||||
enemy_damage:
|
enemy_damage:
|
||||||
default: 3
|
default: 3
|
||||||
|
|||||||
50
test/TestBase.py
Normal file
50
test/TestBase.py
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
import unittest
|
||||||
|
|
||||||
|
from BaseClasses import CollectionState
|
||||||
|
from Items import ItemFactory
|
||||||
|
|
||||||
|
|
||||||
|
class TestBase(unittest.TestCase):
|
||||||
|
|
||||||
|
_state_cache = {}
|
||||||
|
|
||||||
|
def get_state(self, items):
|
||||||
|
if (self.world, tuple(items)) in self._state_cache:
|
||||||
|
return self._state_cache[self.world, tuple(items)]
|
||||||
|
state = CollectionState(self.world)
|
||||||
|
for item in items:
|
||||||
|
item.advancement = True
|
||||||
|
state.collect(item)
|
||||||
|
state.sweep_for_events()
|
||||||
|
self._state_cache[self.world, tuple(items)] = state
|
||||||
|
return state
|
||||||
|
|
||||||
|
def run_location_tests(self, access_pool):
|
||||||
|
for location, access, *item_pool in access_pool:
|
||||||
|
items = item_pool[0]
|
||||||
|
all_except = item_pool[1] if len(item_pool) > 1 else None
|
||||||
|
with self.subTest(location=location, access=access, items=items, all_except=all_except):
|
||||||
|
if all_except and len(all_except) > 0:
|
||||||
|
items = self.world.itempool[:]
|
||||||
|
items = [item for item in items if item.name not in all_except and not ("Bottle" in item.name and "AnyBottle" in all_except)]
|
||||||
|
items.extend(ItemFactory(item_pool[0], 1))
|
||||||
|
else:
|
||||||
|
items = ItemFactory(items, 1)
|
||||||
|
state = self.get_state(items)
|
||||||
|
|
||||||
|
self.assertEqual(self.world.get_location(location, 1).can_reach(state), access)
|
||||||
|
|
||||||
|
def run_entrance_tests(self, access_pool):
|
||||||
|
for entrance, access, *item_pool in access_pool:
|
||||||
|
items = item_pool[0]
|
||||||
|
all_except = item_pool[1] if len(item_pool) > 1 else None
|
||||||
|
with self.subTest(entrance=entrance, access=access, items=items, all_except=all_except):
|
||||||
|
if all_except and len(all_except) > 0:
|
||||||
|
items = self.world.itempool[:]
|
||||||
|
items = [item for item in items if item.name not in all_except and not ("Bottle" in item.name and "AnyBottle" in all_except)]
|
||||||
|
items.extend(ItemFactory(item_pool[0], 1))
|
||||||
|
else:
|
||||||
|
items = ItemFactory(items, 1)
|
||||||
|
state = self.get_state(items)
|
||||||
|
|
||||||
|
self.assertEqual(self.world.get_entrance(entrance, 1).can_reach(state), access)
|
||||||
@@ -6,10 +6,10 @@ from ItemList import generate_itempool, difficulties
|
|||||||
from Items import ItemFactory
|
from Items import ItemFactory
|
||||||
from Regions import mark_light_world_regions
|
from Regions import mark_light_world_regions
|
||||||
from Rules import set_rules
|
from Rules import set_rules
|
||||||
from test.TestVanilla import TestVanilla
|
from test.TestBase import TestBase
|
||||||
|
|
||||||
|
|
||||||
class TestInverted(TestVanilla):
|
class TestInverted(TestBase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.world = World(1, 'vanilla', 'noglitches', 'inverted', 'random', 'normal', 'normal', 'none', 'on', 'ganon', 'balanced',
|
self.world = World(1, 'vanilla', 'noglitches', 'inverted', 'random', 'normal', 'normal', 'none', 'on', 'ganon', 'balanced',
|
||||||
True, False, False, False, False, False, False, False, False, None,
|
True, False, False, False, False, False, False, False, False, None,
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from test.inverted.TestInverted import TestInverted
|
|||||||
class TestInvertedDeathMountain(TestInverted):
|
class TestInvertedDeathMountain(TestInverted):
|
||||||
|
|
||||||
def testNorthWest(self):
|
def testNorthWest(self):
|
||||||
self.run_tests([
|
self.run_location_tests([
|
||||||
["Brewery", True, []],
|
["Brewery", True, []],
|
||||||
|
|
||||||
["C-Shaped House", True, []],
|
["C-Shaped House", True, []],
|
||||||
@@ -45,7 +45,7 @@ class TestInvertedDeathMountain(TestInverted):
|
|||||||
])
|
])
|
||||||
|
|
||||||
def testNorthEast(self):
|
def testNorthEast(self):
|
||||||
self.run_tests([
|
self.run_location_tests([
|
||||||
["Catfish", False, []],
|
["Catfish", False, []],
|
||||||
["Catfish", False, [], ['Progressive Glove', 'Flippers']],
|
["Catfish", False, [], ['Progressive Glove', 'Flippers']],
|
||||||
["Catfish", False, [], ['Progressive Glove', 'Magic Mirror']],
|
["Catfish", False, [], ['Progressive Glove', 'Magic Mirror']],
|
||||||
@@ -80,7 +80,7 @@ class TestInvertedDeathMountain(TestInverted):
|
|||||||
])
|
])
|
||||||
|
|
||||||
def testSouth(self):
|
def testSouth(self):
|
||||||
self.run_tests([
|
self.run_location_tests([
|
||||||
["Hype Cave - Top", True, []],
|
["Hype Cave - Top", True, []],
|
||||||
|
|
||||||
["Hype Cave - Middle Right", True, []],
|
["Hype Cave - Middle Right", True, []],
|
||||||
@@ -99,7 +99,7 @@ class TestInvertedDeathMountain(TestInverted):
|
|||||||
])
|
])
|
||||||
|
|
||||||
def testMireArea(self):
|
def testMireArea(self):
|
||||||
self.run_tests([
|
self.run_location_tests([
|
||||||
["Mire Shed - Left", False, []],
|
["Mire Shed - Left", False, []],
|
||||||
["Mire Shed - Left", False, [], ['Ocarina', 'Magic Mirror']],
|
["Mire Shed - Left", False, [], ['Ocarina', 'Magic Mirror']],
|
||||||
["Mire Shed - Left", True, ['Moon Pearl', 'Ocarina', 'Progressive Glove', 'Progressive Glove']],
|
["Mire Shed - Left", True, ['Moon Pearl', 'Ocarina', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from test.inverted.TestInverted import TestInverted
|
|||||||
class TestInvertedDeathMountain(TestInverted):
|
class TestInvertedDeathMountain(TestInverted):
|
||||||
|
|
||||||
def testWestDeathMountain(self):
|
def testWestDeathMountain(self):
|
||||||
self.run_tests([
|
self.run_location_tests([
|
||||||
["Old Man", False, []],
|
["Old Man", False, []],
|
||||||
["Old Man", False, [], ['Progressive Glove', 'Ocarina']],
|
["Old Man", False, [], ['Progressive Glove', 'Ocarina']],
|
||||||
["Old Man", False, [], ['Lamp']],
|
["Old Man", False, [], ['Lamp']],
|
||||||
@@ -23,7 +23,7 @@ class TestInvertedDeathMountain(TestInverted):
|
|||||||
])
|
])
|
||||||
|
|
||||||
def testEastDeathMountain(self):
|
def testEastDeathMountain(self):
|
||||||
self.run_tests([
|
self.run_location_tests([
|
||||||
["Spiral Cave", False, []],
|
["Spiral Cave", False, []],
|
||||||
["Spiral Cave", False, [], ['Moon Pearl']],
|
["Spiral Cave", False, [], ['Moon Pearl']],
|
||||||
["Spiral Cave", False, [], ['Progressive Glove', 'Ocarina']],
|
["Spiral Cave", False, [], ['Progressive Glove', 'Ocarina']],
|
||||||
@@ -158,7 +158,7 @@ class TestInvertedDeathMountain(TestInverted):
|
|||||||
])
|
])
|
||||||
|
|
||||||
def testEastDarkWorldDeathMountain(self):
|
def testEastDarkWorldDeathMountain(self):
|
||||||
self.run_tests([
|
self.run_location_tests([
|
||||||
["Superbunny Cave - Top", False, []],
|
["Superbunny Cave - Top", False, []],
|
||||||
["Superbunny Cave - Top", False, [], ['Progressive Glove', 'Ocarina']],
|
["Superbunny Cave - Top", False, [], ['Progressive Glove', 'Ocarina']],
|
||||||
["Superbunny Cave - Top", True, ['Progressive Glove', 'Lamp']],
|
["Superbunny Cave - Top", True, ['Progressive Glove', 'Lamp']],
|
||||||
@@ -204,7 +204,7 @@ class TestInvertedDeathMountain(TestInverted):
|
|||||||
])
|
])
|
||||||
|
|
||||||
def testWestDarkWorldDeathMountain(self):
|
def testWestDarkWorldDeathMountain(self):
|
||||||
self.run_tests([
|
self.run_location_tests([
|
||||||
["Spike Cave", False, []],
|
["Spike Cave", False, []],
|
||||||
["Spike Cave", False, [], ['Progressive Glove']],
|
["Spike Cave", False, [], ['Progressive Glove']],
|
||||||
["Spike Cave", False, [], ['Hammer']],
|
["Spike Cave", False, [], ['Hammer']],
|
||||||
|
|||||||
118
test/inverted/TestInvertedEntrances.py
Normal file
118
test/inverted/TestInvertedEntrances.py
Normal file
@@ -0,0 +1,118 @@
|
|||||||
|
from test.inverted.TestInverted import TestInverted
|
||||||
|
|
||||||
|
|
||||||
|
class TestEntrances(TestInverted):
|
||||||
|
|
||||||
|
def testDungeonEntrances(self):
|
||||||
|
self.run_entrance_tests([
|
||||||
|
["Hyrule Castle Entrance (South)", False, []],
|
||||||
|
["Hyrule Castle Entrance (South)", False, [], ["Beat Agahnim 1", "Moon Pearl"]],
|
||||||
|
["Hyrule Castle Entrance (South)", False, [], ["Beat Agahnim 1", "Progressive Glove"]],
|
||||||
|
["Hyrule Castle Entrance (South)", False, ["Progressive Glove"], ["Beat Agahnim 1", "Hammer", "Progressive Glove"]],
|
||||||
|
["Hyrule Castle Entrance (South)", True, ["Beat Agahnim 1"]],
|
||||||
|
["Hyrule Castle Entrance (South)", True, ["Moon Pearl", "Hammer", "Progressive Glove"]],
|
||||||
|
["Hyrule Castle Entrance (South)", True, ["Moon Pearl", "Progressive Glove", "Progressive Glove"]],
|
||||||
|
|
||||||
|
["Eastern Palace", False, []],
|
||||||
|
["Eastern Palace", False, [], ["Beat Agahnim 1", "Moon Pearl"]],
|
||||||
|
["Eastern Palace", False, [], ["Beat Agahnim 1", "Progressive Glove"]],
|
||||||
|
["Eastern Palace", False, ["Progressive Glove"], ["Beat Agahnim 1", "Hammer", "Progressive Glove"]],
|
||||||
|
["Eastern Palace", True, ["Beat Agahnim 1"]],
|
||||||
|
["Eastern Palace", True, ["Moon Pearl", "Hammer", "Progressive Glove"]],
|
||||||
|
["Eastern Palace", True, ["Moon Pearl", "Progressive Glove", "Progressive Glove"]],
|
||||||
|
|
||||||
|
["Desert Palace Entrance (South)", False, []],
|
||||||
|
["Desert Palace Entrance (South)", False, [], ["Book of Mudora"]],
|
||||||
|
["Desert Palace Entrance (South)", False, [], ["Beat Agahnim 1", "Moon Pearl"]],
|
||||||
|
["Desert Palace Entrance (South)", False, [], ["Beat Agahnim 1", "Progressive Glove"]],
|
||||||
|
["Desert Palace Entrance (South)", False, ["Progressive Glove"], ["Beat Agahnim 1", "Hammer", "Progressive Glove"]],
|
||||||
|
["Desert Palace Entrance (South)", True, ["Book of Mudora", "Beat Agahnim 1"]],
|
||||||
|
["Desert Palace Entrance (South)", True, ["Book of Mudora", "Moon Pearl", "Hammer", "Progressive Glove"]],
|
||||||
|
["Desert Palace Entrance (South)", True, ["Book of Mudora", "Moon Pearl", "Progressive Glove", "Progressive Glove"]],
|
||||||
|
["Desert Palace Entrance (North)", False, []],
|
||||||
|
["Desert Palace Entrance (North)", False, [], ["Book of Mudora"]],
|
||||||
|
["Desert Palace Entrance (North)", False, [], ["Progressive Glove"]],
|
||||||
|
["Desert Palace Entrance (North)", False, [], ["Moon Pearl"]],
|
||||||
|
["Desert Palace Entrance (North)", False, ["Progressive Glove"], ["Beat Agahnim 1", "Hammer", "Progressive Glove"]],
|
||||||
|
["Desert Palace Entrance (North)", True, ["Moon Pearl", "Book of Mudora", "Progressive Glove", "Hammer"]],
|
||||||
|
["Desert Palace Entrance (North)", True, ["Moon Pearl", "Book of Mudora", "Progressive Glove", "Progressive Glove"]],
|
||||||
|
["Desert Palace Entrance (North)", True, ["Moon Pearl", "Book of Mudora", "Progressive Glove", "Beat Agahnim 1"]],
|
||||||
|
|
||||||
|
["Tower of Hera", False, []],
|
||||||
|
["Tower of Hera", False, [], ["Moon Pearl"]],
|
||||||
|
["Tower of Hera", False, [], ["Hammer"]],
|
||||||
|
["Tower of Hera", False, ["Progressive Glove"], ["Hookshot", "Progressive Glove"]],
|
||||||
|
["Tower of Hera", False, [], ["Ocarina", "Lamp"]],
|
||||||
|
["Tower of Hera", False, [], ["Ocarina", "Progressive Glove"]],
|
||||||
|
["Tower of Hera", True, ["Moon Pearl", "Hammer", "Progressive Glove", "Progressive Glove", "Lamp"]],
|
||||||
|
["Tower of Hera", True, ["Moon Pearl", "Hammer", "Hookshot", "Progressive Glove", "Lamp"]],
|
||||||
|
["Tower of Hera", True, ["Moon Pearl", "Hammer", "Hookshot", "Progressive Glove", "Ocarina"]],
|
||||||
|
["Tower of Hera", True, ["Moon Pearl", "Hammer", "Beat Agahnim 1", "Ocarina", "Hookshot"]],
|
||||||
|
|
||||||
|
["Inverted Agahnims Tower", False, []],
|
||||||
|
["Inverted Agahnims Tower", False, [], ["Ocarina", "Lamp"]],
|
||||||
|
["Inverted Agahnims Tower", False, [], ["Ocarina", "Progressive Glove"]],
|
||||||
|
["Inverted Agahnims Tower", False, [], ["Moon Pearl", "Lamp"]],
|
||||||
|
["Inverted Agahnims Tower", False, [], ["Moon Pearl", "Progressive Glove"]],
|
||||||
|
["Inverted Agahnims Tower", True, ["Lamp", "Progressive Glove"]],
|
||||||
|
["Inverted Agahnims Tower", True, ["Ocarina", "Beat Agahnim 1", "Moon Pearl"]],
|
||||||
|
["Inverted Agahnims Tower", True, ["Ocarina", "Progressive Glove", "Progressive Glove", "Moon Pearl"]],
|
||||||
|
["Inverted Agahnims Tower", True, ["Ocarina", "Progressive Glove", "Hammer", "Moon Pearl"]],
|
||||||
|
|
||||||
|
["Palace of Darkness", False, []],
|
||||||
|
["Palace of Darkness", False, [], ["Hammer", "Flippers", "Magic Mirror", "Ocarina"]],
|
||||||
|
["Palace of Darkness", True, ["Hammer"]],
|
||||||
|
["Palace of Darkness", True, ["Flippers"]],
|
||||||
|
["Palace of Darkness", True, ["Progressive Glove", "Progressive Glove", "Moon Pearl", "Ocarina"]],
|
||||||
|
["Palace of Darkness", True, ["Progressive Glove", "Progressive Glove", "Moon Pearl", "Magic Mirror"]],
|
||||||
|
["Palace of Darkness", True, ["Beat Agahnim 1", "Moon Pearl", "Ocarina"]],
|
||||||
|
["Palace of Darkness", True, ["Beat Agahnim 1", "Moon Pearl", "Magic Mirror"]],
|
||||||
|
|
||||||
|
["Swamp Palace", True, []],
|
||||||
|
|
||||||
|
["Thieves Town", True, []],
|
||||||
|
|
||||||
|
["Skull Woods First Section Door", True, []],
|
||||||
|
|
||||||
|
["Skull Woods Final Section", False, []],
|
||||||
|
["Skull Woods Final Section", False, [], ["Fire Rod"]],
|
||||||
|
["Skull Woods Final Section", True, ["Fire Rod"]],
|
||||||
|
|
||||||
|
["Ice Palace", False, []],
|
||||||
|
["Ice Palace", False, [], ["Flippers"]],
|
||||||
|
["Ice Palace", True, ["Flippers"]],
|
||||||
|
|
||||||
|
["Misery Mire", False, []],
|
||||||
|
["Misery Mire", False, [], ["Ocarina", "Magic Mirror"]],
|
||||||
|
["Misery Mire", False, [], ["Moon Pearl", "Magic Mirror"]],
|
||||||
|
["Misery Mire", False, [], ["Ether"]],
|
||||||
|
["Misery Mire", False, [], ["Progressive Sword"]],
|
||||||
|
["Misery Mire", True, ["Progressive Sword", "Ether", "Beat Agahnim 1", "Magic Mirror"]],
|
||||||
|
["Misery Mire", True, ["Progressive Sword", "Ether", "Beat Agahnim 1", "Moon Pearl", "Ocarina"]],
|
||||||
|
["Misery Mire", True, ["Progressive Sword", "Ether", "Moon Pearl", "Hammer", "Progressive Glove", "Magic Mirror"]],
|
||||||
|
["Misery Mire", True, ["Progressive Sword", "Ether", "Moon Pearl", "Hammer", "Progressive Glove", "Ocarina"]],
|
||||||
|
["Misery Mire", True, ["Progressive Sword", "Ether", "Moon Pearl", "Progressive Glove", "Progressive Glove", "Magic Mirror"]],
|
||||||
|
["Misery Mire", True, ["Progressive Sword", "Ether", "Moon Pearl", "Progressive Glove", "Progressive Glove", "Ocarina"]],
|
||||||
|
|
||||||
|
["Turtle Rock", False, []],
|
||||||
|
["Turtle Rock", False, [], ["Quake"]],
|
||||||
|
["Turtle Rock", False, [], ["Progressive Sword"]],
|
||||||
|
["Turtle Rock", False, [], ["Lamp", "Ocarina"]],
|
||||||
|
["Turtle Rock", False, [], ["Progressive Glove", "Ocarina"]],
|
||||||
|
["Turtle Rock", True, ["Quake", "Progressive Sword", "Progressive Glove", "Lamp"]],
|
||||||
|
["Turtle Rock", True, ["Quake", "Progressive Sword", "Progressive Glove", "Progressive Glove", "Moon Pearl", "Ocarina"]],
|
||||||
|
["Turtle Rock", True, ["Quake", "Progressive Sword", "Progressive Glove", "Hammer", "Moon Pearl", "Ocarina"]],
|
||||||
|
["Turtle Rock", True, ["Quake", "Progressive Sword", "Beat Agahnim 1", "Moon Pearl", "Ocarina"]],
|
||||||
|
|
||||||
|
["Inverted Ganons Tower", False, []],
|
||||||
|
["Inverted Ganons Tower", False, [], ["Crystal 1"]],
|
||||||
|
["Inverted Ganons Tower", False, [], ["Crystal 2"]],
|
||||||
|
["Inverted Ganons Tower", False, [], ["Crystal 3"]],
|
||||||
|
["Inverted Ganons Tower", False, [], ["Crystal 4"]],
|
||||||
|
["Inverted Ganons Tower", False, [], ["Crystal 5"]],
|
||||||
|
["Inverted Ganons Tower", False, [], ["Crystal 6"]],
|
||||||
|
["Inverted Ganons Tower", False, [], ["Crystal 7"]],
|
||||||
|
["Inverted Ganons Tower", True, ["Beat Agahnim 1", "Crystal 1", "Crystal 2", "Crystal 3", "Crystal 4", "Crystal 5", "Crystal 6", "Crystal 7"]],
|
||||||
|
["Inverted Ganons Tower", True, ["Moon Pearl", "Progressive Glove", "Progressive Glove", "Crystal 1", "Crystal 2", "Crystal 3", "Crystal 4", "Crystal 5", "Crystal 6", "Crystal 7"]],
|
||||||
|
["Inverted Ganons Tower", True, ["Moon Pearl", "Hammer", "Progressive Glove", "Progressive Glove", "Crystal 1", "Crystal 2", "Crystal 3", "Crystal 4", "Crystal 5", "Crystal 6", "Crystal 7"]],
|
||||||
|
])
|
||||||
@@ -6,7 +6,7 @@ class TestInvertedLightWorld(TestInverted):
|
|||||||
super().setUp()
|
super().setUp()
|
||||||
|
|
||||||
def testLostWoods(self):
|
def testLostWoods(self):
|
||||||
self.run_tests([
|
self.run_location_tests([
|
||||||
["Master Sword Pedestal", False, []],
|
["Master Sword Pedestal", False, []],
|
||||||
["Master Sword Pedestal", False, [], ['Green Pendant']],
|
["Master Sword Pedestal", False, [], ['Green Pendant']],
|
||||||
["Master Sword Pedestal", False, [], ['Red Pendant']],
|
["Master Sword Pedestal", False, [], ['Red Pendant']],
|
||||||
@@ -37,7 +37,7 @@ class TestInvertedLightWorld(TestInverted):
|
|||||||
])
|
])
|
||||||
|
|
||||||
def testKakariko(self):
|
def testKakariko(self):
|
||||||
self.run_tests([
|
self.run_location_tests([
|
||||||
["Kakariko Tavern", False, []],
|
["Kakariko Tavern", False, []],
|
||||||
["Kakariko Tavern", False, [], ['Moon Pearl']],
|
["Kakariko Tavern", False, [], ['Moon Pearl']],
|
||||||
["Kakariko Tavern", True, ['Moon Pearl', 'Beat Agahnim 1']],
|
["Kakariko Tavern", True, ['Moon Pearl', 'Beat Agahnim 1']],
|
||||||
@@ -171,7 +171,7 @@ class TestInvertedLightWorld(TestInverted):
|
|||||||
])
|
])
|
||||||
|
|
||||||
def testSouthLightWorld(self):
|
def testSouthLightWorld(self):
|
||||||
self.run_tests([
|
self.run_location_tests([
|
||||||
["Desert Ledge", False, []],
|
["Desert Ledge", False, []],
|
||||||
["Desert Ledge", False, [], ['Book of Mudora']],
|
["Desert Ledge", False, [], ['Book of Mudora']],
|
||||||
["Desert Ledge", False, [], ['Moon Pearl']],
|
["Desert Ledge", False, [], ['Moon Pearl']],
|
||||||
@@ -251,7 +251,7 @@ class TestInvertedLightWorld(TestInverted):
|
|||||||
])
|
])
|
||||||
|
|
||||||
def testZoraArea(self):
|
def testZoraArea(self):
|
||||||
self.run_tests([
|
self.run_location_tests([
|
||||||
["King Zora", False, []],
|
["King Zora", False, []],
|
||||||
["King Zora", False, [], ['Progressive Glove', 'Flippers']],
|
["King Zora", False, [], ['Progressive Glove', 'Flippers']],
|
||||||
["King Zora", False, [], ['Moon Pearl']],
|
["King Zora", False, [], ['Moon Pearl']],
|
||||||
@@ -284,7 +284,7 @@ class TestInvertedLightWorld(TestInverted):
|
|||||||
])
|
])
|
||||||
|
|
||||||
def testLightWorld(self):
|
def testLightWorld(self):
|
||||||
self.run_tests([
|
self.run_location_tests([
|
||||||
["Link's Uncle", False, []],
|
["Link's Uncle", False, []],
|
||||||
["Link's Uncle", False, [], ['Moon Pearl']],
|
["Link's Uncle", False, [], ['Moon Pearl']],
|
||||||
["Link's Uncle", True, ['Moon Pearl', 'Beat Agahnim 1']],
|
["Link's Uncle", True, ['Moon Pearl', 'Beat Agahnim 1']],
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ from test.inverted.TestInverted import TestInverted
|
|||||||
class TestInvertedTurtleRock(TestInverted):
|
class TestInvertedTurtleRock(TestInverted):
|
||||||
|
|
||||||
def testTurtleRock(self):
|
def testTurtleRock(self):
|
||||||
self.run_tests([
|
self.run_location_tests([
|
||||||
["Turtle Rock - Compass Chest", False, []],
|
["Turtle Rock - Compass Chest", False, []],
|
||||||
["Turtle Rock - Compass Chest", False, [], ['Cane of Somaria']],
|
["Turtle Rock - Compass Chest", False, [], ['Cane of Somaria']],
|
||||||
["Turtle Rock - Compass Chest", False, [], ['Quake', 'Magic Mirror']],
|
["Turtle Rock - Compass Chest", False, [], ['Quake', 'Magic Mirror']],
|
||||||
|
|||||||
78
test/inverted_owg/TestDarkWorld.py
Normal file
78
test/inverted_owg/TestDarkWorld.py
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
from test.inverted_owg.TestInvertedOWG import TestInvertedOWG
|
||||||
|
|
||||||
|
|
||||||
|
class TestDarkWorld(TestInvertedOWG):
|
||||||
|
|
||||||
|
def testSouthDarkWorld(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Hype Cave - Top", True, []],
|
||||||
|
|
||||||
|
["Hype Cave - Middle Right", True, []],
|
||||||
|
|
||||||
|
["Hype Cave - Middle Left", True, []],
|
||||||
|
|
||||||
|
["Hype Cave - Bottom", True, []],
|
||||||
|
|
||||||
|
["Hype Cave - Generous Guy", True, []],
|
||||||
|
|
||||||
|
["Stumpy", True, []],
|
||||||
|
|
||||||
|
["Digging Game", True, []],
|
||||||
|
])
|
||||||
|
|
||||||
|
def testWestDarkWorld(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Brewery", True, []],
|
||||||
|
|
||||||
|
["C-Shaped House", True, []],
|
||||||
|
|
||||||
|
["Chest Game", True, []],
|
||||||
|
|
||||||
|
["Peg Cave", False, []],
|
||||||
|
["Peg Cave", False, [], ['Hammer']],
|
||||||
|
["Peg Cave", True, ['Hammer', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Bumper Cave Ledge", False, []],
|
||||||
|
["Bumper Cave Ledge", True, ['Pegasus Boots']],
|
||||||
|
|
||||||
|
["Blacksmith", False, []],
|
||||||
|
["Blacksmith", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Blacksmith", True, ['Progressive Glove', 'Progressive Glove', 'Pegasus Boots', 'Moon Pearl']],
|
||||||
|
|
||||||
|
["Purple Chest", False, []],
|
||||||
|
["Purple Chest", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Purple Chest", True, ['Progressive Glove', 'Progressive Glove', 'Pegasus Boots', 'Moon Pearl']],
|
||||||
|
])
|
||||||
|
|
||||||
|
def testEastDarkWorld(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Catfish", False, []],
|
||||||
|
["Catfish", True, ['Pegasus Boots']],
|
||||||
|
|
||||||
|
#todo: Qirn Jump
|
||||||
|
#["Pyramid", True, []],
|
||||||
|
["Pyramid", False, []],
|
||||||
|
["Pyramid", True, ['Pegasus Boots']],
|
||||||
|
["Pyramid", True, ['Flippers']],
|
||||||
|
|
||||||
|
["Pyramid Fairy - Left", False, []],
|
||||||
|
["Pyramid Fairy - Left", False, [], ['Magic Mirror']],
|
||||||
|
["Pyramid Fairy - Left", False, [], ['Crystal 5']],
|
||||||
|
["Pyramid Fairy - Left", False, [], ['Crystal 6']],
|
||||||
|
["Pyramid Fairy - Left", True, ['Crystal 5', 'Crystal 6', 'Magic Mirror', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Pyramid Fairy - Right", False, []],
|
||||||
|
["Pyramid Fairy - Right", False, [], ['Magic Mirror']],
|
||||||
|
["Pyramid Fairy - Right", False, [], ['Crystal 5']],
|
||||||
|
["Pyramid Fairy - Right", False, [], ['Crystal 6']],
|
||||||
|
["Pyramid Fairy - Right", True, ['Crystal 5', 'Crystal 6', 'Magic Mirror', 'Pegasus Boots']],
|
||||||
|
])
|
||||||
|
|
||||||
|
def testMireArea(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Mire Shed - Left", False, []],
|
||||||
|
["Mire Shed - Left", True, ['Pegasus Boots']],
|
||||||
|
|
||||||
|
["Mire Shed - Right", False, []],
|
||||||
|
["Mire Shed - Right", True, ['Pegasus Boots']],
|
||||||
|
])
|
||||||
113
test/inverted_owg/TestDeathMountain.py
Normal file
113
test/inverted_owg/TestDeathMountain.py
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
from test.inverted_owg.TestInvertedOWG import TestInvertedOWG
|
||||||
|
|
||||||
|
|
||||||
|
class TestDeathMountain(TestInvertedOWG):
|
||||||
|
|
||||||
|
def testWestDeathMountain(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Old Man", False, []],
|
||||||
|
["Old Man", False, [], ['Lamp']],
|
||||||
|
["Old Man", True, ['Pegasus Boots', 'Lamp']],
|
||||||
|
|
||||||
|
["Spectacle Rock Cave", False, []],
|
||||||
|
["Spectacle Rock Cave", True, ['Pegasus Boots']],
|
||||||
|
])
|
||||||
|
|
||||||
|
def testEastDeathMountain(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Spiral Cave", False, []],
|
||||||
|
["Spiral Cave", False, [], ['Moon Pearl', 'Magic Mirror']],
|
||||||
|
["Spiral Cave", False, [], ['Moon Pearl', 'Progressive Sword']],
|
||||||
|
["Spiral Cave", True, ['Magic Mirror', 'Progressive Glove', 'Progressive Glove', 'Lamp', 'Progressive Sword']],
|
||||||
|
["Spiral Cave", True, ['Magic Mirror', 'Progressive Glove', 'Progressive Glove', 'Pegasus Boots', 'Progressive Sword']],
|
||||||
|
["Spiral Cave", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Paradox Cave Lower - Far Left", False, []],
|
||||||
|
["Paradox Cave Lower - Far Left", False, [], ['Moon Pearl']],
|
||||||
|
["Paradox Cave Lower - Far Left", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Paradox Cave Lower - Left", False, []],
|
||||||
|
["Paradox Cave Lower - Left", False, [], ['Moon Pearl']],
|
||||||
|
["Paradox Cave Lower - Left", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Paradox Cave Lower - Middle", False, []],
|
||||||
|
["Paradox Cave Lower - Middle", False, [], ['Moon Pearl']],
|
||||||
|
["Paradox Cave Lower - Middle", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Paradox Cave Lower - Right", False, []],
|
||||||
|
["Paradox Cave Lower - Right", False, [], ['Moon Pearl']],
|
||||||
|
["Paradox Cave Lower - Right", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Paradox Cave Lower - Far Right", False, []],
|
||||||
|
["Paradox Cave Lower - Far Right", False, [], ['Moon Pearl']],
|
||||||
|
["Paradox Cave Lower - Far Right", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Paradox Cave Upper - Left", False, []],
|
||||||
|
["Paradox Cave Upper - Left", False, [], ['Moon Pearl']],
|
||||||
|
["Paradox Cave Upper - Left", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Paradox Cave Upper - Right", False, []],
|
||||||
|
["Paradox Cave Upper - Right", False, [], ['Moon Pearl']],
|
||||||
|
["Paradox Cave Upper - Right", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Mimic Cave", False, []],
|
||||||
|
["Mimic Cave", False, [], ['Moon Pearl']],
|
||||||
|
["Mimic Cave", False, [], ['Hammer']],
|
||||||
|
["Mimic Cave", True, ['Moon Pearl', 'Hammer', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Ether Tablet", False, []],
|
||||||
|
["Ether Tablet", False, ['Progressive Sword'], ['Progressive Sword']],
|
||||||
|
["Ether Tablet", False, [], ['Book of Mudora']],
|
||||||
|
["Ether Tablet", False, [], ['Moon Pearl']],
|
||||||
|
["Ether Tablet", True, ['Pegasus Boots', 'Moon Pearl', 'Book of Mudora', 'Progressive Sword', 'Progressive Sword']],
|
||||||
|
|
||||||
|
["Spectacle Rock", False, []],
|
||||||
|
["Spectacle Rock", False, [], ['Moon Pearl']],
|
||||||
|
["Spectacle Rock", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
])
|
||||||
|
|
||||||
|
|
||||||
|
def testWestDarkWorldDeathMountain(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Spike Cave", False, []],
|
||||||
|
["Spike Cave", False, [], ['Progressive Glove']],
|
||||||
|
["Spike Cave", False, [], ['Hammer']],
|
||||||
|
["Spike Cave", False, [], ['Cape', 'Cane of Byrna']],
|
||||||
|
# ER doesn't put in an extra potion
|
||||||
|
#["Spike Cave", True, ['Bottle', 'Hammer', 'Progressive Glove', 'Pegasus Boots', 'Cape']],
|
||||||
|
["Spike Cave", True, ['Bottle', 'Hammer', 'Progressive Glove', 'Pegasus Boots', 'Cape', 'Moon Pearl']],
|
||||||
|
["Spike Cave", True, ['Bottle', 'Hammer', 'Progressive Glove', 'Pegasus Boots', 'Cane of Byrna']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/2)', 'Hammer', 'Progressive Glove', 'Pegasus Boots', 'Cape']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/2)', 'Hammer', 'Progressive Glove', 'Pegasus Boots', 'Cane of Byrna']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/4)', 'Hammer', 'Progressive Glove', 'Pegasus Boots', 'Cape']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/4)', 'Hammer', 'Progressive Glove', 'Pegasus Boots', 'Cane of Byrna']],
|
||||||
|
])
|
||||||
|
|
||||||
|
def testEastDarkWorldDeathMountain(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Superbunny Cave - Top", False, []],
|
||||||
|
["Superbunny Cave - Top", True, ['Pegasus Boots']],
|
||||||
|
|
||||||
|
["Superbunny Cave - Bottom", False, []],
|
||||||
|
["Superbunny Cave - Bottom", True, ['Pegasus Boots']],
|
||||||
|
|
||||||
|
["Hookshot Cave - Bottom Right", False, []],
|
||||||
|
["Hookshot Cave - Bottom Right", False, [], ['Hookshot', 'Pegasus Boots']],
|
||||||
|
["Hookshot Cave - Bottom Right", False, [], ['Progressive Glove', 'Pegasus Boots', 'Magic Mirror']],
|
||||||
|
["Hookshot Cave - Bottom Right", True, ['Pegasus Boots']],
|
||||||
|
|
||||||
|
["Hookshot Cave - Bottom Left", False, []],
|
||||||
|
["Hookshot Cave - Bottom Left", False, [], ['Hookshot']],
|
||||||
|
["Hookshot Cave - Bottom Left", False, [], ['Progressive Glove', 'Pegasus Boots', 'Magic Mirror']],
|
||||||
|
["Hookshot Cave - Bottom Left", True, ['Pegasus Boots', 'Hookshot']],
|
||||||
|
|
||||||
|
["Hookshot Cave - Top Left", False, []],
|
||||||
|
["Hookshot Cave - Top Left", False, [], ['Hookshot']],
|
||||||
|
["Hookshot Cave - Top Left", False, [], ['Progressive Glove', 'Pegasus Boots', 'Magic Mirror']],
|
||||||
|
["Hookshot Cave - Top Left", True, ['Pegasus Boots', 'Hookshot']],
|
||||||
|
|
||||||
|
["Hookshot Cave - Top Right", False, []],
|
||||||
|
["Hookshot Cave - Top Right", False, [], ['Hookshot']],
|
||||||
|
["Hookshot Cave - Top Right", False, [], ['Progressive Glove', 'Pegasus Boots', 'Magic Mirror']],
|
||||||
|
["Hookshot Cave - Top Right", True, ['Pegasus Boots', 'Hookshot']],
|
||||||
|
])
|
||||||
115
test/inverted_owg/TestDungeons.py
Normal file
115
test/inverted_owg/TestDungeons.py
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
from test.inverted_owg.TestInvertedOWG import TestInvertedOWG
|
||||||
|
|
||||||
|
class TestDungeons(TestInvertedOWG):
|
||||||
|
|
||||||
|
def testFirstDungeonChests(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Hyrule Castle - Map Chest", False, []],
|
||||||
|
["Hyrule Castle - Map Chest", True, ['Beat Agahnim 1']],
|
||||||
|
["Hyrule Castle - Map Chest", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Hyrule Castle - Map Chest", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Sanctuary", False, []],
|
||||||
|
["Sanctuary", False, ['Beat Agahnim 1']],
|
||||||
|
["Sanctuary", True, ['Magic Mirror', 'Beat Agahnim 1']],
|
||||||
|
["Sanctuary", True, ['Lamp', 'Beat Agahnim 1', 'Small Key (Escape)']],
|
||||||
|
["Sanctuary", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Sanctuary", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Sewers - Secret Room - Left", False, []],
|
||||||
|
["Sewers - Secret Room - Left", True, ['Moon Pearl', 'Progressive Glove', 'Pegasus Boots']],
|
||||||
|
["Sewers - Secret Room - Left", True, ['Moon Pearl', 'Pegasus Boots', 'Lamp', 'Small Key (Escape)']],
|
||||||
|
["Sewers - Secret Room - Left", True,
|
||||||
|
['Magic Mirror', 'Pegasus Boots', 'Lamp', 'Small Key (Escape)']],
|
||||||
|
["Sewers - Secret Room - Left", True, ['Beat Agahnim 1', 'Lamp', 'Small Key (Escape)']],
|
||||||
|
|
||||||
|
["Eastern Palace - Compass Chest", False, []],
|
||||||
|
["Eastern Palace - Compass Chest", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Eastern Palace - Compass Chest", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Eastern Palace - Compass Chest", True, ['Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Desert Palace - Map Chest", False, []],
|
||||||
|
["Desert Palace - Map Chest", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Desert Palace - Map Chest", True, ['Book of Mudora', 'Magic Mirror', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Desert Palace - Boss", False, []],
|
||||||
|
["Desert Palace - Boss", False, [], ['Small Key (Desert Palace)']],
|
||||||
|
["Desert Palace - Boss", False, [], ['Big Key (Desert Palace)']],
|
||||||
|
["Desert Palace - Boss", False, [], ['Lamp', 'Fire Rod']],
|
||||||
|
["Desert Palace - Boss", True, ['Progressive Sword', 'Small Key (Desert Palace)', 'Big Key (Desert Palace)', 'Moon Pearl', 'Pegasus Boots', 'Lamp']],
|
||||||
|
["Desert Palace - Boss", True, ['Progressive Sword', 'Small Key (Desert Palace)', 'Big Key (Desert Palace)', 'Moon Pearl', 'Pegasus Boots', 'Fire Rod']],
|
||||||
|
|
||||||
|
["Tower of Hera - Basement Cage", False, []],
|
||||||
|
["Tower of Hera - Basement Cage", False, [], ['Moon Pearl']],
|
||||||
|
["Tower of Hera - Basement Cage", True, ['Pegasus Boots', 'Moon Pearl']],
|
||||||
|
|
||||||
|
["Castle Tower - Room 03", False, []],
|
||||||
|
["Castle Tower - Room 03", False, [], ['Progressive Sword', 'Hammer', 'Progressive Bow', 'Fire Rod', 'Ice Rod', 'Cane of Somaria', 'Cane of Byrna']],
|
||||||
|
["Castle Tower - Room 03", True, ['Pegasus Boots', 'Progressive Sword']],
|
||||||
|
["Castle Tower - Room 03", True, ['Pegasus Boots', 'Progressive Bow']],
|
||||||
|
|
||||||
|
#todo: Qirn Jump
|
||||||
|
#["Palace of Darkness - Shooter Room", True, []],
|
||||||
|
["Palace of Darkness - Shooter Room", True, ['Pegasus Boots']],
|
||||||
|
["Palace of Darkness - Shooter Room", True, ['Hammer']],
|
||||||
|
["Palace of Darkness - Shooter Room", True, ['Flippers']],
|
||||||
|
["Palace of Darkness - Shooter Room", True, ['Pegasus Boots', 'Progressive Glove']],
|
||||||
|
["Palace of Darkness - Shooter Room", True, ['Pegasus Boots', 'Magic Mirror']],
|
||||||
|
|
||||||
|
["Swamp Palace - Entrance", False, []],
|
||||||
|
["Swamp Palace - Entrance", False, [], ['Magic Mirror']],
|
||||||
|
["Swamp Palace - Entrance", False, [], ['Flippers']],
|
||||||
|
["Swamp Palace - Entrance", True, ['Magic Mirror', 'Flippers', 'Pegasus Boots']],
|
||||||
|
["Swamp Palace - Entrance", True, ['Magic Mirror', 'Flippers', 'Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Skull Woods - Compass Chest", True, []],
|
||||||
|
|
||||||
|
["Skull Woods - Big Chest", False, []],
|
||||||
|
["Skull Woods - Big Chest", False, [], ['Big Key (Skull Woods)']],
|
||||||
|
["Skull Woods - Big Chest", True, ['Big Key (Skull Woods)']],
|
||||||
|
|
||||||
|
["Skull Woods - Big Key Chest", True, []],
|
||||||
|
|
||||||
|
["Skull Woods - Bridge Room", False, []],
|
||||||
|
["Skull Woods - Bridge Room", False, [], ['Fire Rod']],
|
||||||
|
["Skull Woods - Bridge Room", True, ['Fire Rod']],
|
||||||
|
|
||||||
|
["Thieves' Town - Map Chest", True, []],
|
||||||
|
|
||||||
|
["Ice Palace - Compass Chest", False, []],
|
||||||
|
["Ice Palace - Compass Chest", False, [], ['Fire Rod', 'Bombos', 'Progressive Sword']],
|
||||||
|
#todo: Qirn Jump
|
||||||
|
#["Ice Palace - Compass Chest", True, ['Fire Rod']],
|
||||||
|
#["Ice Palace - Compass Chest", True, ['Bombos', 'Progressive Sword']],
|
||||||
|
["Ice Palace - Compass Chest", True, ['Pegasus Boots', 'Fire Rod']],
|
||||||
|
["Ice Palace - Compass Chest", True, ['Pegasus Boots', 'Bombos', 'Progressive Sword']],
|
||||||
|
|
||||||
|
["Misery Mire - Bridge Chest", False, []],
|
||||||
|
["Misery Mire - Bridge Chest", False, [], ['Ether']],
|
||||||
|
["Misery Mire - Bridge Chest", False, [], ['Progressive Sword']],
|
||||||
|
["Misery Mire - Bridge Chest", True, ['Pegasus Boots', 'Ether', 'Progressive Sword']],
|
||||||
|
|
||||||
|
["Turtle Rock - Compass Chest", False, []],
|
||||||
|
["Turtle Rock - Compass Chest", False, [], ['Cane of Somaria']],
|
||||||
|
["Turtle Rock - Compass Chest", True, ['Pegasus Boots', 'Magic Mirror', 'Moon Pearl', 'Cane of Somaria', 'Small Key (Turtle Rock)', 'Small Key (Turtle Rock)', 'Small Key (Turtle Rock)', 'Small Key (Turtle Rock)']],
|
||||||
|
["Turtle Rock - Compass Chest", True, ['Pegasus Boots', 'Quake', 'Progressive Sword', 'Cane of Somaria']],
|
||||||
|
|
||||||
|
["Turtle Rock - Chain Chomps", False, []],
|
||||||
|
["Turtle Rock - Chain Chomps", True, ['Pegasus Boots', 'Magic Mirror', 'Moon Pearl']],
|
||||||
|
|
||||||
|
["Turtle Rock - Crystaroller Room", False, []],
|
||||||
|
["Turtle Rock - Crystaroller Room", True, ['Pegasus Boots', 'Magic Mirror', 'Moon Pearl', 'Big Key (Turtle Rock)']],
|
||||||
|
["Turtle Rock - Crystaroller Room", True, ['Pegasus Boots', 'Magic Mirror', 'Moon Pearl', 'Lamp', 'Cane of Somaria']],
|
||||||
|
|
||||||
|
["Ganons Tower - Hope Room - Left", False, []],
|
||||||
|
["Ganons Tower - Hope Room - Left", False, [], ['Crystal 1']],
|
||||||
|
["Ganons Tower - Hope Room - Left", False, [], ['Crystal 2']],
|
||||||
|
["Ganons Tower - Hope Room - Left", False, [], ['Crystal 3']],
|
||||||
|
["Ganons Tower - Hope Room - Left", False, [], ['Crystal 4']],
|
||||||
|
["Ganons Tower - Hope Room - Left", False, [], ['Crystal 5']],
|
||||||
|
["Ganons Tower - Hope Room - Left", False, [], ['Crystal 6']],
|
||||||
|
["Ganons Tower - Hope Room - Left", False, [], ['Crystal 7']],
|
||||||
|
["Ganons Tower - Hope Room - Left", True, ['Beat Agahnim 1', 'Hookshot', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7']],
|
||||||
|
["Ganons Tower - Hope Room - Left", True, ['Pegasus Boots', 'Magic Mirror', 'Hookshot', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7']],
|
||||||
|
["Ganons Tower - Hope Room - Left", True, ['Pegasus Boots', 'Moon Pearl', 'Hookshot', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7']],
|
||||||
|
])
|
||||||
30
test/inverted_owg/TestInvertedOWG.py
Normal file
30
test/inverted_owg/TestInvertedOWG.py
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
from BaseClasses import World
|
||||||
|
from Dungeons import create_dungeons, get_dungeon_item_pool
|
||||||
|
from EntranceShuffle import link_inverted_entrances
|
||||||
|
from InvertedRegions import create_inverted_regions
|
||||||
|
from ItemList import generate_itempool, difficulties
|
||||||
|
from Items import ItemFactory
|
||||||
|
from Regions import mark_light_world_regions
|
||||||
|
from Rules import set_rules
|
||||||
|
from test.TestBase import TestBase
|
||||||
|
|
||||||
|
|
||||||
|
class TestInvertedOWG(TestBase):
|
||||||
|
def setUp(self):
|
||||||
|
self.world = World(1, 'vanilla', 'owglitches', 'inverted', 'random', 'normal', 'normal', 'none', 'on', 'ganon', 'balanced',
|
||||||
|
True, False, False, False, False, False, False, False, False, None,
|
||||||
|
'none', False)
|
||||||
|
self.world.difficulty_requirements = difficulties['normal']
|
||||||
|
create_inverted_regions(self.world, 1)
|
||||||
|
create_dungeons(self.world, 1)
|
||||||
|
link_inverted_entrances(self.world, 1)
|
||||||
|
generate_itempool(self.world, 1)
|
||||||
|
self.world.required_medallions[1] = ['Ether', 'Quake']
|
||||||
|
self.world.itempool.extend(get_dungeon_item_pool(self.world))
|
||||||
|
self.world.itempool.extend(ItemFactory(['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], 1))
|
||||||
|
self.world.get_location('Agahnim 1', 1).item = None
|
||||||
|
self.world.get_location('Agahnim 2', 1).item = None
|
||||||
|
self.world.precollected_items.clear()
|
||||||
|
self.world.itempool.append(ItemFactory('Pegasus Boots', 1))
|
||||||
|
mark_light_world_regions(self.world)
|
||||||
|
set_rules(self.world, 1)
|
||||||
312
test/inverted_owg/TestLightWorld.py
Normal file
312
test/inverted_owg/TestLightWorld.py
Normal file
@@ -0,0 +1,312 @@
|
|||||||
|
from test.inverted_owg.TestInvertedOWG import TestInvertedOWG
|
||||||
|
|
||||||
|
|
||||||
|
class TestLightWorld(TestInvertedOWG):
|
||||||
|
|
||||||
|
def testLightWorld(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Master Sword Pedestal", False, []],
|
||||||
|
["Master Sword Pedestal", False, [], ['Green Pendant']],
|
||||||
|
["Master Sword Pedestal", False, [], ['Red Pendant']],
|
||||||
|
["Master Sword Pedestal", False, [], ['Blue Pendant']],
|
||||||
|
["Master Sword Pedestal", True, ['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Master Sword Pedestal", True, ['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Magic Mirror', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Link's Uncle", False, []],
|
||||||
|
["Link's Uncle", False, [], ['Moon Pearl']],
|
||||||
|
["Link's Uncle", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Secret Passage", False, []],
|
||||||
|
["Secret Passage", False, [], ['Moon Pearl']],
|
||||||
|
["Secret Passage", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["King's Tomb", False, []],
|
||||||
|
["King's Tomb", False, [], ['Pegasus Boots']],
|
||||||
|
["King's Tomb", False, [], ['Moon Pearl']],
|
||||||
|
["King's Tomb", True, ['Pegasus Boots', 'Magic Mirror', 'Moon Pearl']],
|
||||||
|
|
||||||
|
["Floodgate Chest", False, []],
|
||||||
|
["Floodgate Chest", False, [], ['Moon Pearl', 'Magic Mirror']],
|
||||||
|
["Floodgate Chest", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Floodgate Chest", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Kakariko Tavern", False, []],
|
||||||
|
["Kakariko Tavern", False, [], ['Moon Pearl', 'Magic Mirror']],
|
||||||
|
["Kakariko Tavern", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Kakariko Tavern", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Kakariko Tavern", True, ['Beat Agahnim 1', 'Moon Pearl']],
|
||||||
|
["Kakariko Tavern", True, ['Beat Agahnim 1', 'Magic Mirror']],
|
||||||
|
|
||||||
|
["Chicken House", False, []],
|
||||||
|
["Chicken House", False, [], ['Moon Pearl']],
|
||||||
|
["Chicken House", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Aginah's Cave", False, []],
|
||||||
|
["Aginah's Cave", False, [], ['Moon Pearl']],
|
||||||
|
["Aginah's Cave", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Sahasrahla's Hut - Left", False, []],
|
||||||
|
["Sahasrahla's Hut - Left", False, [], ['Moon Pearl', 'Magic Mirror']],
|
||||||
|
["Sahasrahla's Hut - Left", False, [], ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Sahasrahla's Hut - Left", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Sahasrahla's Hut - Left", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
##todo: Damage boost superbunny not in logic
|
||||||
|
#["Sahasrahla's Hut - Left", True, ['Beat Agahnim 1', 'Pegasus Boots']],
|
||||||
|
["Sahasrahla's Hut - Left", True, ['Moon Pearl', 'Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Sahasrahla's Hut - Middle", False, []],
|
||||||
|
["Sahasrahla's Hut - Middle", False, [], ['Moon Pearl', 'Magic Mirror']],
|
||||||
|
["Sahasrahla's Hut - Middle", False, [], ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Sahasrahla's Hut - Middle", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Sahasrahla's Hut - Middle", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
#["Sahasrahla's Hut - Middle", True, ['Beat Agahnim 1', 'Pegasus Boots']],
|
||||||
|
["Sahasrahla's Hut - Middle", True, ['Moon Pearl', 'Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Sahasrahla's Hut - Right", False, []],
|
||||||
|
["Sahasrahla's Hut - Right", False, [], ['Moon Pearl', 'Magic Mirror']],
|
||||||
|
["Sahasrahla's Hut - Right", False, [], ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Sahasrahla's Hut - Right", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Sahasrahla's Hut - Right", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
#["Sahasrahla's Hut - Right", True, ['Beat Agahnim 1', 'Pegasus Boots']],
|
||||||
|
["Sahasrahla's Hut - Right", True, ['Moon Pearl', 'Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Kakariko Well - Top", False, []],
|
||||||
|
["Kakariko Well - Top", False, [], ['Moon Pearl']],
|
||||||
|
["Kakariko Well - Top", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Kakariko Well - Left", False, []],
|
||||||
|
["Kakariko Well - Left", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Kakariko Well - Left", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Kakariko Well - Left", True, ['Progressive Glove', 'Progressive Glove', 'Pegasus Boots']],
|
||||||
|
["Kakariko Well - Left", True, ['Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Kakariko Well - Middle", False, []],
|
||||||
|
["Kakariko Well - Middle", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Kakariko Well - Middle", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Kakariko Well - Middle", True, ['Progressive Glove', 'Progressive Glove', 'Pegasus Boots']],
|
||||||
|
["Kakariko Well - Middle", True, ['Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Kakariko Well - Right", False, []],
|
||||||
|
["Kakariko Well - Right", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Kakariko Well - Right", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Kakariko Well - Right", True, ['Progressive Glove', 'Progressive Glove', 'Pegasus Boots']],
|
||||||
|
["Kakariko Well - Right", True, ['Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Kakariko Well - Bottom", False, []],
|
||||||
|
["Kakariko Well - Bottom", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Kakariko Well - Bottom", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Kakariko Well - Bottom", True, ['Progressive Glove', 'Progressive Glove', 'Pegasus Boots']],
|
||||||
|
["Kakariko Well - Bottom", True, ['Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Blind's Hideout - Top", False, []],
|
||||||
|
["Blind's Hideout - Top", False, [], ['Moon Pearl']],
|
||||||
|
["Blind's Hideout - Top", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Blind's Hideout - Left", False, []],
|
||||||
|
["Blind's Hideout - Left", False, [], ['Moon Pearl', 'Magic Mirror']],
|
||||||
|
["Blind's Hideout - Left", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Blind's Hideout - Left", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Blind's Hideout - Left", True, ['Magic Mirror', 'Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Blind's Hideout - Right", False, []],
|
||||||
|
["Blind's Hideout - Right", False, [], ['Moon Pearl', 'Magic Mirror']],
|
||||||
|
["Blind's Hideout - Right", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Blind's Hideout - Right", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Blind's Hideout - Right", True, ['Magic Mirror', 'Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Blind's Hideout - Far Left", False, []],
|
||||||
|
["Blind's Hideout - Far Left", False, [], ['Moon Pearl', 'Magic Mirror']],
|
||||||
|
["Blind's Hideout - Far Left", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Blind's Hideout - Far Left", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Blind's Hideout - Far Left", True, ['Magic Mirror', 'Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Blind's Hideout - Far Right", False, []],
|
||||||
|
["Blind's Hideout - Far Right", False, [], ['Moon Pearl', 'Magic Mirror']],
|
||||||
|
["Blind's Hideout - Far Right", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Blind's Hideout - Far Right", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Blind's Hideout - Far Right", True, ['Magic Mirror', 'Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Bonk Rock Cave", False, []],
|
||||||
|
["Bonk Rock Cave", False, [], ['Pegasus Boots']],
|
||||||
|
["Bonk Rock Cave", False, [], ['Moon Pearl']],
|
||||||
|
["Bonk Rock Cave", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Mini Moldorm Cave - Far Left", False, []],
|
||||||
|
["Mini Moldorm Cave - Far Left", False, [], ['Moon Pearl']],
|
||||||
|
["Mini Moldorm Cave - Far Left", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Mini Moldorm Cave - Left", False, []],
|
||||||
|
["Mini Moldorm Cave - Left", False, [], ['Moon Pearl']],
|
||||||
|
["Mini Moldorm Cave - Left", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Mini Moldorm Cave - Right", False, []],
|
||||||
|
["Mini Moldorm Cave - Right", False, [], ['Moon Pearl']],
|
||||||
|
["Mini Moldorm Cave - Right", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Mini Moldorm Cave - Far Right", False, []],
|
||||||
|
["Mini Moldorm Cave - Far Right", False, [], ['Moon Pearl']],
|
||||||
|
["Mini Moldorm Cave - Far Right", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Mini Moldorm Cave - Generous Guy", False, []],
|
||||||
|
["Mini Moldorm Cave - Generous Guy", False, [], ['Moon Pearl']],
|
||||||
|
["Mini Moldorm Cave - Generous Guy", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Ice Rod Cave", False, []],
|
||||||
|
["Ice Rod Cave", False, [], ['Moon Pearl']],
|
||||||
|
["Ice Rod Cave", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
#I don't think so
|
||||||
|
#["Ice Rod Cave", True, ['Magic Mirror', 'Pegasus Boots', 'BigRedBomb']],
|
||||||
|
#["Ice Rod Cave", True, ['Magic Mirror', 'Beat Agahnim 1', 'BigRedBomb']],
|
||||||
|
|
||||||
|
["Bottle Merchant", False, []],
|
||||||
|
["Bottle Merchant", True, ['Pegasus Boots', 'Magic Mirror']],
|
||||||
|
["Bottle Merchant", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Bottle Merchant", True, ['Progressive Glove', 'Progressive Glove', 'Pegasus Boots']],
|
||||||
|
["Bottle Merchant", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Sahasrahla", False, []],
|
||||||
|
["Sahasrahla", False, [], ['Green Pendant']],
|
||||||
|
["Sahasrahla", True, ['Green Pendant', 'Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Sahasrahla", True, ['Green Pendant', 'Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Sahasrahla", True, ['Green Pendant', 'Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Sahasrahla", True, ['Green Pendant', 'Progressive Glove', 'Progressive Glove', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Magic Bat", False, []],
|
||||||
|
["Magic Bat", False, [], ['Magic Powder']],
|
||||||
|
["Magic Bat", False, [], ['Moon Pearl']],
|
||||||
|
["Magic Bat", True, ['Magic Powder', 'Pegasus Boots', 'Moon Pearl']],
|
||||||
|
|
||||||
|
["Sick Kid", False, []],
|
||||||
|
["Sick Kid", False, [], ['AnyBottle']],
|
||||||
|
["Sick Kid", False, ['Bottle (Bee)']],
|
||||||
|
["Sick Kid", False, ['Bottle (Fairy)']],
|
||||||
|
["Sick Kid", False, ['Bottle (Red Potion)']],
|
||||||
|
["Sick Kid", False, ['Bottle (Green Potion)']],
|
||||||
|
["Sick Kid", False, ['Bottle (Blue Potion)']],
|
||||||
|
["Sick Kid", False, ['Bottle']],
|
||||||
|
["Sick Kid", False, ['Bottle (Good Bee)']],
|
||||||
|
["Sick Kid", True, ['Bottle (Bee)', 'Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Sick Kid", True, ['Bottle (Bee)', 'Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Sick Kid", True, ['Bottle (Fairy)', 'Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Sick Kid", True, ['Bottle (Fairy)', 'Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Sick Kid", True, ['Bottle (Red Potion)', 'Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Sick Kid", True, ['Bottle (Red Potion)', 'Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Sick Kid", True, ['Bottle (Green Potion)', 'Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Sick Kid", True, ['Bottle (Green Potion)', 'Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Sick Kid", True, ['Bottle (Blue Potion)', 'Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Sick Kid", True, ['Bottle (Blue Potion)', 'Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Sick Kid", True, ['Bottle (Good Bee)', 'Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Sick Kid", True, ['Bottle (Good Bee)', 'Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Sick Kid", True, ['Bottle', 'Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Sick Kid", True, ['Bottle', 'Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Sick Kid", True, ['Bottle', 'Progressive Glove', 'Progressive Glove', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Hobo", False, []],
|
||||||
|
["Hobo", False, [], ['Moon Pearl']],
|
||||||
|
["Hobo", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Hobo", True, ['Moon Pearl', 'Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Bombos Tablet", False, []],
|
||||||
|
["Bombos Tablet", False, ['Progressive Sword'], ['Progressive Sword']],
|
||||||
|
["Bombos Tablet", False, [], ['Book of Mudora']],
|
||||||
|
["Bombos Tablet", True, ['Moon Pearl', 'Book of Mudora', 'Pegasus Boots', 'Progressive Sword', 'Progressive Sword']],
|
||||||
|
["Bombos Tablet", True, ['Magic Mirror', 'Book of Mudora', 'Pegasus Boots', 'Progressive Sword', 'Progressive Sword']],
|
||||||
|
["Bombos Tablet", True, ['Progressive Glove', 'Progressive Glove', 'Book of Mudora', 'Pegasus Boots', 'Progressive Sword', 'Progressive Sword']],
|
||||||
|
|
||||||
|
["King Zora", False, []],
|
||||||
|
["King Zora", False, [], ['Moon Pearl']],
|
||||||
|
["King Zora", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Lost Woods Hideout", False, []],
|
||||||
|
["Lost Woods Hideout", False, [], ['Moon Pearl']],
|
||||||
|
["Lost Woods Hideout", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Lumberjack Tree", False, []],
|
||||||
|
["Lumberjack Tree", False, [], ['Beat Agahnim 1']],
|
||||||
|
["Lumberjack Tree", False, [], ['Pegasus Boots']],
|
||||||
|
["Lumberjack Tree", False, [], ['Moon Pearl']],
|
||||||
|
["Lumberjack Tree", True, ['Pegasus Boots', 'Moon Pearl', 'Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Cave 45", False, []],
|
||||||
|
["Cave 45", False, [], ['Moon Pearl', 'Magic Mirror']],
|
||||||
|
["Cave 45", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Cave 45", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Cave 45", True, ['Magic Mirror', 'Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Graveyard Cave", False, []],
|
||||||
|
["Graveyard Cave", False, [], ['Moon Pearl']],
|
||||||
|
["Graveyard Cave", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Checkerboard Cave", False, []],
|
||||||
|
["Checkerboard Cave", False, [], ['Progressive Glove']],
|
||||||
|
["Checkerboard Cave", False, [], ['Moon Pearl']],
|
||||||
|
["Checkerboard Cave", True, ['Progressive Glove', 'Pegasus Boots', 'Moon Pearl']],
|
||||||
|
|
||||||
|
["Library", False, []],
|
||||||
|
["Library", False, [], ['Pegasus Boots']],
|
||||||
|
["Library", False, [], ['Moon Pearl', 'Magic Mirror']],
|
||||||
|
["Library", True, ['Pegasus Boots', 'Moon Pearl']],
|
||||||
|
["Library", True, ['Pegasus Boots', 'Magic Mirror']],
|
||||||
|
|
||||||
|
["Mushroom", False, []],
|
||||||
|
["Mushroom", False, [], ['Moon Pearl']],
|
||||||
|
["Mushroom", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Potion Shop", False, []],
|
||||||
|
["Potion Shop", False, [], ['Mushroom']],
|
||||||
|
["Potion Shop", False, [], ['Moon Pearl']],
|
||||||
|
["Potion Shop", True, ['Mushroom', 'Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Maze Race", False, []],
|
||||||
|
["Maze Race", False, [], ['Moon Pearl']],
|
||||||
|
["Maze Race", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Desert Ledge", False, []],
|
||||||
|
["Desert Ledge", True, ['Book of Mudora', 'Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Desert Ledge", True, ['Book of Mudora', 'Progressive Glove', 'Progressive Glove', 'Pegasus Boots']],
|
||||||
|
["Desert Ledge", True, ['Book of Mudora', 'Beat Agahnim 1']],
|
||||||
|
["Desert Ledge", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Lake Hylia Island", False, []],
|
||||||
|
["Lake Hylia Island", False, [], ['Moon Pearl']],
|
||||||
|
["Lake Hylia Island", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Sunken Treasure", False, []],
|
||||||
|
["Sunken Treasure", False, [], ['Moon Pearl', 'Magic Mirror']],
|
||||||
|
["Sunken Treasure", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Sunken Treasure", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Sunken Treasure", True, ['Magic Mirror', 'Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Zora's Ledge", False, []],
|
||||||
|
["Zora's Ledge", False, [], ['Moon Pearl']],
|
||||||
|
["Zora's Ledge", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Flute Spot", False, []],
|
||||||
|
["Flute Spot", False, [], ['Shovel']],
|
||||||
|
["Flute Spot", False, [], ['Moon Pearl']],
|
||||||
|
["Flute Spot", True, ['Shovel', 'Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Waterfall Fairy - Left", False, []],
|
||||||
|
["Waterfall Fairy - Left", False, [], ['Moon Pearl']],
|
||||||
|
["Waterfall Fairy - Left", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Waterfall Fairy - Left", True, ['Moon Pearl', 'Beat Agahnim 1']],
|
||||||
|
["Waterfall Fairy - Left", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Waterfall Fairy - Left", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
|
||||||
|
["Waterfall Fairy - Right", False, []],
|
||||||
|
["Waterfall Fairy - Right", False, [], ['Moon Pearl']],
|
||||||
|
["Waterfall Fairy - Right", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Waterfall Fairy - Right", True, ['Moon Pearl', 'Beat Agahnim 1']],
|
||||||
|
["Waterfall Fairy - Right", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Waterfall Fairy - Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
|
||||||
|
# Bomb Merchant is not a separate check, and is only used as part of the Pyramid Fairy rules
|
||||||
|
# ["Bomb Merchant", False, []],
|
||||||
|
# ["Bomb Merchant", False, [], ['Crystal 5']],
|
||||||
|
# ["Bomb Merchant", False, [], ['Crystal 6']],
|
||||||
|
# ["Bomb Merchant", True, ['Crystal 5', 'Crystal 6', 'Moon Pearl', 'Pegasus Boots']],
|
||||||
|
# ["Bomb Merchant", True, ['Crystal 5', 'Crystal 6', 'Magic Mirror', 'Pegasus Boots']],
|
||||||
|
# ["Bomb Merchant", True, ['Crystal 5', 'Crystal 6', 'Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Ganon", False, []],
|
||||||
|
])
|
||||||
0
test/inverted_owg/__init__.py
Normal file
0
test/inverted_owg/__init__.py
Normal file
206
test/owg/TestDarkWorld.py
Normal file
206
test/owg/TestDarkWorld.py
Normal file
@@ -0,0 +1,206 @@
|
|||||||
|
from test.owg.TestVanillaOWG import TestVanillaOWG
|
||||||
|
|
||||||
|
|
||||||
|
class TestDarkWorld(TestVanillaOWG):
|
||||||
|
|
||||||
|
def testSouthDarkWorld(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Hype Cave - Top", False, []],
|
||||||
|
["Hype Cave - Top", False, [], ['Moon Pearl']],
|
||||||
|
["Hype Cave - Top", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Hype Cave - Top", True, ['Moon Pearl', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Hype Cave - Top", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Hype Cave - Top", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Hype Cave - Top", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Hype Cave - Top", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Hype Cave - Middle Right", False, []],
|
||||||
|
["Hype Cave - Middle Right", False, [], ['Moon Pearl']],
|
||||||
|
["Hype Cave - Middle Right", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Hype Cave - Middle Right", True, ['Moon Pearl', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Hype Cave - Middle Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Hype Cave - Middle Right", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Hype Cave - Middle Right", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Hype Cave - Middle Right", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Hype Cave - Middle Left", False, []],
|
||||||
|
["Hype Cave - Middle Left", False, [], ['Moon Pearl']],
|
||||||
|
["Hype Cave - Middle Left", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Hype Cave - Middle Left", True, ['Moon Pearl', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Hype Cave - Middle Left", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Hype Cave - Middle Left", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Hype Cave - Middle Left", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Hype Cave - Middle Left", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Hype Cave - Bottom", False, []],
|
||||||
|
["Hype Cave - Bottom", False, [], ['Moon Pearl']],
|
||||||
|
["Hype Cave - Bottom", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Hype Cave - Bottom", True, ['Moon Pearl', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Hype Cave - Bottom", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Hype Cave - Bottom", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Hype Cave - Bottom", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Hype Cave - Bottom", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Hype Cave - Generous Guy", False, []],
|
||||||
|
["Hype Cave - Generous Guy", False, [], ['Moon Pearl']],
|
||||||
|
["Hype Cave - Generous Guy", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Hype Cave - Generous Guy", True, ['Moon Pearl', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Hype Cave - Generous Guy", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Hype Cave - Generous Guy", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Hype Cave - Generous Guy", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Hype Cave - Generous Guy", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Stumpy", False, []],
|
||||||
|
["Stumpy", False, [], ['Moon Pearl']],
|
||||||
|
["Stumpy", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Stumpy", True, ['Moon Pearl', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Stumpy", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Stumpy", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Stumpy", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Stumpy", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Digging Game", False, []],
|
||||||
|
["Digging Game", False, [], ['Moon Pearl']],
|
||||||
|
["Digging Game", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Digging Game", True, ['Moon Pearl', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Digging Game", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Digging Game", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Digging Game", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Digging Game", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']]
|
||||||
|
])
|
||||||
|
|
||||||
|
def testEastDarkWorld(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Catfish", False, []],
|
||||||
|
["Catfish", False, [], ['Moon Pearl']],
|
||||||
|
["Catfish", False, [], ['Progressive Glove', 'Pegasus Boots']],
|
||||||
|
["Catfish", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Catfish", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove']],
|
||||||
|
["Catfish", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Catfish", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Flippers']],
|
||||||
|
|
||||||
|
["Pyramid", False, []],
|
||||||
|
["Pyramid", False, [], ['Beat Agahnim 1', 'Moon Pearl', 'Magic Mirror']],
|
||||||
|
["Pyramid", False, [], ['Beat Agahnim 1', 'Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Pyramid", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Pyramid", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Pyramid", True, ['Beat Agahnim 1']],
|
||||||
|
["Pyramid", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Pyramid", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Flippers']],
|
||||||
|
|
||||||
|
["Pyramid Fairy - Left", False, []],
|
||||||
|
["Pyramid Fairy - Left", False, [], ['Pegasus Boots', 'Moon Pearl', 'Beat Agahnim 1']],
|
||||||
|
["Pyramid Fairy - Left", False, [], ['Pegasus Boots', 'Moon Pearl', 'Crystal 5']],
|
||||||
|
["Pyramid Fairy - Left", False, [], ['Pegasus Boots', 'Moon Pearl', 'Crystal 6']],
|
||||||
|
["Pyramid Fairy - Left", False, [], ['Magic Mirror', 'Crystal 5']],
|
||||||
|
["Pyramid Fairy - Left", False, [], ['Magic Mirror', 'Crystal 6']],
|
||||||
|
["Pyramid Fairy - Left", False, [], ['Magic Mirror', 'Moon Pearl']],
|
||||||
|
["Pyramid Fairy - Left", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Pyramid Fairy - Left", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Pyramid Fairy - Left", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Pyramid Fairy - Left", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Progressive Glove', 'Progressive Glove', 'Magic Mirror']],
|
||||||
|
["Pyramid Fairy - Left", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot', 'Magic Mirror']],
|
||||||
|
["Pyramid Fairy - Left", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Flippers', 'Hookshot', 'Magic Mirror']],
|
||||||
|
["Pyramid Fairy - Left", True, ['Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Ocarina', 'Magic Mirror']],
|
||||||
|
["Pyramid Fairy - Left", True, ['Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
|
||||||
|
["Pyramid Fairy - Right", False, []],
|
||||||
|
["Pyramid Fairy - Right", False, [], ['Pegasus Boots', 'Moon Pearl', 'Beat Agahnim 1']],
|
||||||
|
["Pyramid Fairy - Right", False, [], ['Pegasus Boots', 'Moon Pearl', 'Crystal 5']],
|
||||||
|
["Pyramid Fairy - Right", False, [], ['Pegasus Boots', 'Moon Pearl', 'Crystal 6']],
|
||||||
|
["Pyramid Fairy - Right", False, [], ['Magic Mirror', 'Crystal 5']],
|
||||||
|
["Pyramid Fairy - Right", False, [], ['Magic Mirror', 'Crystal 6']],
|
||||||
|
["Pyramid Fairy - Right", False, [], ['Magic Mirror', 'Moon Pearl']],
|
||||||
|
["Pyramid Fairy - Right", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Pyramid Fairy - Right", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Pyramid Fairy - Right", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Pyramid Fairy - Right", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Progressive Glove', 'Progressive Glove', 'Magic Mirror']],
|
||||||
|
["Pyramid Fairy - Right", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot', 'Magic Mirror']],
|
||||||
|
["Pyramid Fairy - Right", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Flippers', 'Hookshot', 'Magic Mirror']],
|
||||||
|
["Pyramid Fairy - Right", True, ['Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Ocarina', 'Magic Mirror']],
|
||||||
|
["Pyramid Fairy - Right", True, ['Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
|
||||||
|
["Ganon", False, []],
|
||||||
|
["Ganon", False, [], ['Moon Pearl']],
|
||||||
|
["Ganon", False, [], ['Beat Agahnim 2']],
|
||||||
|
])
|
||||||
|
|
||||||
|
def testWestDarkWorld(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Brewery", False, []],
|
||||||
|
["Brewery", False, [], ['Moon Pearl']],
|
||||||
|
["Brewery", False, [], ['Pegasus Boots', 'Magic Mirror', 'Hookshot', 'Progressive Glove']],
|
||||||
|
["Brewery", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Brewery", True, ['Moon Pearl', 'Ocarina', 'Magic Mirror']],
|
||||||
|
["Brewery", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Brewery", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Brewery", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Brewery", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["C-Shaped House", False, []],
|
||||||
|
["C-Shaped House", False, [], ['Moon Pearl', 'Magic Mirror']],
|
||||||
|
["C-Shaped House", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["C-Shaped House", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["C-Shaped House", True, ['Magic Mirror', 'Ocarina']],
|
||||||
|
["C-Shaped House", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["C-Shaped House", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["C-Shaped House", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["C-Shaped House", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Chest Game", False, []],
|
||||||
|
["Chest Game", False, [], ['Moon Pearl', 'Magic Mirror']],
|
||||||
|
["Chest Game", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Chest Game", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Chest Game", True, ['Magic Mirror', 'Ocarina']],
|
||||||
|
["Chest Game", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Chest Game", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Chest Game", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Chest Game", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Peg Cave", False, []],
|
||||||
|
["Peg Cave", False, [], ['Moon Pearl']],
|
||||||
|
["Peg Cave", False, [], ['Hammer']],
|
||||||
|
["Peg Cave", False, ['Progressive Glove'], ['Pegasus Boots', 'Progressive Glove']],
|
||||||
|
["Peg Cave", True, ['Moon Pearl', 'Hammer', 'Pegasus Boots']],
|
||||||
|
["Peg Cave", True, ['Moon Pearl', 'Hammer', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
|
||||||
|
["Bumper Cave Ledge", False, []],
|
||||||
|
["Bumper Cave Ledge", False, [], ['Moon Pearl']],
|
||||||
|
["Bumper Cave Ledge", False, [], ['Cape', 'Pegasus Boots']],
|
||||||
|
["Bumper Cave Ledge", False, [], ['Progressive Glove', 'Pegasus Boots']],
|
||||||
|
["Bumper Cave Ledge", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Bumper Cave Ledge", True, ['Moon Pearl', 'Cape', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Bumper Cave Ledge", True, ['Moon Pearl', 'Cape', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Bumper Cave Ledge", True, ['Moon Pearl', 'Cape', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
|
||||||
|
["Blacksmith", False, []],
|
||||||
|
["Blacksmith", False, ['Progressive Glove'], ['Progressive Glove']],
|
||||||
|
["Blacksmith", False, [], ['Moon Pearl']],
|
||||||
|
["Blacksmith", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
|
||||||
|
["Purple Chest", False, []],
|
||||||
|
["Purple Chest", False, ['Progressive Glove'], ['Progressive Glove']],
|
||||||
|
["Purple Chest", False, [], ['Moon Pearl']],
|
||||||
|
["Purple Chest", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']]
|
||||||
|
|
||||||
|
|
||||||
|
])
|
||||||
|
|
||||||
|
def testMireArea(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Mire Shed - Left", False, []],
|
||||||
|
["Mire Shed - Left", False, ['Progressive Glove'], ['Progressive Glove', 'Pegasus Boots']],
|
||||||
|
["Mire Shed - Left", False, [], ['Moon Pearl', 'Magic Mirror']],
|
||||||
|
["Mire Shed - Left", False, [], ['Ocarina', 'Pegasus Boots']],
|
||||||
|
["Mire Shed - Left", True, ['Moon Pearl', 'Ocarina', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Mire Shed - Left", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Mire Shed - Left", True, ['Magic Mirror', 'Ocarina', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
|
||||||
|
["Mire Shed - Right", False, []],
|
||||||
|
["Mire Shed - Right", False, [], ['Moon Pearl', 'Magic Mirror']],
|
||||||
|
["Mire Shed - Right", False, ['Progressive Glove'], ['Progressive Glove', 'Pegasus Boots']],
|
||||||
|
["Mire Shed - Right", False, [], ['Ocarina', 'Pegasus Boots']],
|
||||||
|
["Mire Shed - Right", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Mire Shed - Right", True, ['Magic Mirror', 'Ocarina', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Mire Shed - Right", True, ['Moon Pearl', 'Ocarina', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
])
|
||||||
201
test/owg/TestDeathMountain.py
Normal file
201
test/owg/TestDeathMountain.py
Normal file
@@ -0,0 +1,201 @@
|
|||||||
|
from test.owg.TestVanillaOWG import TestVanillaOWG
|
||||||
|
|
||||||
|
|
||||||
|
class TestDeathMountain(TestVanillaOWG):
|
||||||
|
|
||||||
|
def testWestDeathMountain(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Ether Tablet", False, []],
|
||||||
|
["Ether Tablet", False, ['Progressive Sword'], ['Progressive Sword']],
|
||||||
|
["Ether Tablet", False, [], ['Book of Mudora']],
|
||||||
|
["Ether Tablet", False, [], ['Pegasus Boots', 'Progressive Glove', 'Ocarina']],
|
||||||
|
["Ether Tablet", False, [], ['Pegasus Boots', 'Lamp', 'Ocarina']],
|
||||||
|
["Ether Tablet", False, [], ['Pegasus Boots', 'Magic Mirror', 'Hookshot']],
|
||||||
|
["Ether Tablet", False, [], ['Pegasus Boots', 'Magic Mirror', 'Hammer']],
|
||||||
|
["Ether Tablet", True, ['Pegasus Boots', 'Book of Mudora', 'Progressive Sword', 'Progressive Sword']],
|
||||||
|
["Ether Tablet", True, ['Ocarina', 'Magic Mirror', 'Book of Mudora', 'Progressive Sword', 'Progressive Sword']],
|
||||||
|
["Ether Tablet", True, ['Progressive Glove', 'Lamp', 'Magic Mirror', 'Book of Mudora', 'Progressive Sword', 'Progressive Sword']],
|
||||||
|
["Ether Tablet", True, ['Ocarina', 'Hammer', 'Hookshot', 'Book of Mudora', 'Progressive Sword', 'Progressive Sword']],
|
||||||
|
["Ether Tablet", True, ['Progressive Glove', 'Lamp', 'Hammer', 'Hookshot', 'Book of Mudora', 'Progressive Sword', 'Progressive Sword']],
|
||||||
|
|
||||||
|
["Old Man", False, []],
|
||||||
|
["Old Man", False, [], ['Lamp']],
|
||||||
|
["Old Man", False, [], ['Pegasus Boots', 'Progressive Glove', 'Ocarina']],
|
||||||
|
["Old Man", True, ['Pegasus Boots', 'Lamp']],
|
||||||
|
["Old Man", True, ['Ocarina', 'Lamp']],
|
||||||
|
["Old Man", True, ['Progressive Glove', 'Lamp']],
|
||||||
|
|
||||||
|
["Spectacle Rock Cave", False, []],
|
||||||
|
["Spectacle Rock Cave", False, [], ['Pegasus Boots', 'Progressive Glove', 'Ocarina']],
|
||||||
|
["Spectacle Rock Cave", False, [], ['Pegasus Boots', 'Lamp', 'Ocarina']],
|
||||||
|
["Spectacle Rock Cave", True, ['Pegasus Boots']],
|
||||||
|
["Spectacle Rock Cave", True, ['Ocarina']],
|
||||||
|
["Spectacle Rock Cave", True, ['Progressive Glove', 'Lamp']],
|
||||||
|
|
||||||
|
["Spectacle Rock", False, []],
|
||||||
|
["Spectacle Rock", False, [], ['Pegasus Boots', 'Progressive Glove', 'Ocarina']],
|
||||||
|
["Spectacle Rock", False, [], ['Pegasus Boots', 'Lamp', 'Ocarina']],
|
||||||
|
["Spectacle Rock", False, [], ['Pegasus Boots', 'Magic Mirror']],
|
||||||
|
["Spectacle Rock", True, ['Pegasus Boots']],
|
||||||
|
["Spectacle Rock", True, ['Ocarina', 'Magic Mirror']],
|
||||||
|
["Spectacle Rock", True, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
])
|
||||||
|
|
||||||
|
def testEastDeathMountain(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Mimic Cave", False, []],
|
||||||
|
["Mimic Cave", False, [], ['Magic Mirror']],
|
||||||
|
["Mimic Cave", False, [], ['Hammer']],
|
||||||
|
["Mimic Cave", False, [], ['Pegasus Boots', 'Ocarina', 'Lamp']],
|
||||||
|
["Mimic Cave", False, [], ['Pegasus Boots', 'Ocarina', 'Progressive Glove']],
|
||||||
|
["Mimic Cave", True, ['Magic Mirror', 'Hammer', 'Pegasus Boots']],
|
||||||
|
["Mimic Cave", True, ['Magic Mirror', 'Hammer', 'Progressive Glove', 'Lamp']],
|
||||||
|
["Mimic Cave", True, ['Magic Mirror', 'Hammer', 'Ocarina']],
|
||||||
|
|
||||||
|
["Spiral Cave", False, []],
|
||||||
|
["Spiral Cave", False, [], ['Pegasus Boots', 'Progressive Glove', 'Ocarina']],
|
||||||
|
["Spiral Cave", False, [], ['Pegasus Boots', 'Magic Mirror', 'Hookshot']],
|
||||||
|
["Spiral Cave", True, ['Pegasus Boots']],
|
||||||
|
["Spiral Cave", True, ['Ocarina', 'Hookshot']],
|
||||||
|
["Spiral Cave", True, ['Progressive Glove', 'Lamp', 'Hookshot']],
|
||||||
|
["Spiral Cave", True, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
["Spiral Cave", True, ['Ocarina', 'Magic Mirror']],
|
||||||
|
|
||||||
|
["Paradox Cave Lower - Far Left", False, []],
|
||||||
|
["Paradox Cave Lower - Far Left", False, [], ['Pegasus Boots', 'Progressive Glove', 'Ocarina']],
|
||||||
|
["Paradox Cave Lower - Far Left", False, [], ['Pegasus Boots', 'Magic Mirror', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Far Left", True, ['Pegasus Boots']],
|
||||||
|
["Paradox Cave Lower - Far Left", True, ['Ocarina', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Far Left", True, ['Progressive Glove', 'Lamp', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Far Left", True, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Lower - Far Left", True, ['Ocarina', 'Magic Mirror']],
|
||||||
|
|
||||||
|
["Paradox Cave Lower - Left", False, []],
|
||||||
|
["Paradox Cave Lower - Left", False, [], ['Pegasus Boots', 'Progressive Glove', 'Ocarina']],
|
||||||
|
["Paradox Cave Lower - Left", False, [], ['Pegasus Boots', 'Magic Mirror', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Left", True, ['Pegasus Boots']],
|
||||||
|
["Paradox Cave Lower - Left", True, ['Ocarina', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Left", True, ['Progressive Glove', 'Lamp', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Left", True, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Lower - Left", True, ['Ocarina', 'Magic Mirror']],
|
||||||
|
|
||||||
|
["Paradox Cave Lower - Middle", False, []],
|
||||||
|
["Paradox Cave Lower - Middle", False, [], ['Pegasus Boots', 'Progressive Glove', 'Ocarina']],
|
||||||
|
["Paradox Cave Lower - Middle", False, [], ['Pegasus Boots', 'Magic Mirror', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Middle", True, ['Pegasus Boots']],
|
||||||
|
["Paradox Cave Lower - Middle", True, ['Ocarina', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Middle", True, ['Progressive Glove', 'Lamp', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Middle", True, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Lower - Middle", True, ['Ocarina', 'Magic Mirror']],
|
||||||
|
|
||||||
|
["Paradox Cave Lower - Right", False, []],
|
||||||
|
["Paradox Cave Lower - Right", False, [], ['Pegasus Boots', 'Progressive Glove', 'Ocarina']],
|
||||||
|
["Paradox Cave Lower - Right", False, [], ['Pegasus Boots', 'Magic Mirror', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Right", True, ['Pegasus Boots']],
|
||||||
|
["Paradox Cave Lower - Right", True, ['Ocarina', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Right", True, ['Progressive Glove', 'Lamp', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Right", True, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Lower - Right", True, ['Ocarina', 'Magic Mirror']],
|
||||||
|
|
||||||
|
["Paradox Cave Lower - Far Right", False, []],
|
||||||
|
["Paradox Cave Lower - Far Right", False, [], ['Pegasus Boots', 'Progressive Glove', 'Ocarina']],
|
||||||
|
["Paradox Cave Lower - Far Right", False, [], ['Pegasus Boots', 'Magic Mirror', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Far Right", True, ['Pegasus Boots']],
|
||||||
|
["Paradox Cave Lower - Far Right", True, ['Ocarina', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Far Right", True, ['Progressive Glove', 'Lamp', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Far Right", True, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Lower - Far Right", True, ['Ocarina', 'Magic Mirror']],
|
||||||
|
|
||||||
|
["Paradox Cave Upper - Left", False, []],
|
||||||
|
["Paradox Cave Upper - Left", False, [], ['Pegasus Boots', 'Progressive Glove', 'Ocarina']],
|
||||||
|
["Paradox Cave Upper - Left", False, [], ['Pegasus Boots', 'Magic Mirror', 'Hookshot']],
|
||||||
|
["Paradox Cave Upper - Left", True, ['Pegasus Boots']],
|
||||||
|
["Paradox Cave Upper - Left", True, ['Ocarina', 'Hookshot']],
|
||||||
|
["Paradox Cave Upper - Left", True, ['Progressive Glove', 'Lamp', 'Hookshot']],
|
||||||
|
["Paradox Cave Upper - Left", True, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Upper - Left", True, ['Ocarina', 'Magic Mirror']],
|
||||||
|
|
||||||
|
["Paradox Cave Upper - Right", False, []],
|
||||||
|
["Paradox Cave Upper - Right", False, [], ['Pegasus Boots', 'Progressive Glove', 'Ocarina']],
|
||||||
|
["Paradox Cave Upper - Right", False, [], ['Pegasus Boots', 'Magic Mirror', 'Hookshot']],
|
||||||
|
["Paradox Cave Upper - Right", True, ['Pegasus Boots']],
|
||||||
|
["Paradox Cave Upper - Right", True, ['Ocarina', 'Hookshot']],
|
||||||
|
["Paradox Cave Upper - Right", True, ['Progressive Glove', 'Lamp', 'Hookshot']],
|
||||||
|
["Paradox Cave Upper - Right", True, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Upper - Right", True, ['Ocarina', 'Magic Mirror']],
|
||||||
|
])
|
||||||
|
|
||||||
|
def testWestDarkWorldDeathMountain(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Spike Cave", False, []],
|
||||||
|
["Spike Cave", False, [], ['Progressive Glove']],
|
||||||
|
["Spike Cave", False, [], ['Moon Pearl']],
|
||||||
|
["Spike Cave", False, [], ['Hammer']],
|
||||||
|
["Spike Cave", False, [], ['Cape', 'Cane of Byrna']],
|
||||||
|
["Spike Cave", True, ['Bottle', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Lamp', 'Cape']],
|
||||||
|
["Spike Cave", True, ['Bottle', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Ocarina', 'Cape']],
|
||||||
|
["Spike Cave", True, ['Bottle', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Lamp', 'Cane of Byrna']],
|
||||||
|
["Spike Cave", True, ['Bottle', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Ocarina', 'Cane of Byrna']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/2)', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Lamp', 'Cape']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/2)', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Ocarina', 'Cape']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/2)', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Lamp', 'Cane of Byrna']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/2)', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Ocarina', 'Cane of Byrna']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/4)', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Lamp', 'Cape']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/4)', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Ocarina', 'Cape']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/4)', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Lamp', 'Cane of Byrna']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/4)', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Ocarina', 'Cane of Byrna']],
|
||||||
|
])
|
||||||
|
|
||||||
|
def testEastDarkWorldDeathMountain(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Superbunny Cave - Top", False, []],
|
||||||
|
["Superbunny Cave - Top", True, ['Progressive Glove', 'Progressive Glove', 'Pegasus Boots']],
|
||||||
|
["Superbunny Cave - Top", True, ['Hammer', 'Pegasus Boots']],
|
||||||
|
["Superbunny Cave - Top", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Superbunny Cave - Top", True, ['Progressive Glove', 'Progressive Glove', 'Hookshot', 'Ocarina']],
|
||||||
|
["Superbunny Cave - Top", True, ['Progressive Glove', 'Progressive Glove', 'Magic Mirror', 'Hammer', 'Ocarina']],
|
||||||
|
["Superbunny Cave - Top", True, ['Progressive Glove', 'Progressive Glove', 'Hookshot', 'Lamp']],
|
||||||
|
["Superbunny Cave - Top", True, ['Progressive Glove', 'Progressive Glove', 'Magic Mirror', 'Hammer', 'Lamp']],
|
||||||
|
|
||||||
|
["Superbunny Cave - Bottom", False, []],
|
||||||
|
["Superbunny Cave - Bottom", True, ['Progressive Glove', 'Progressive Glove', 'Pegasus Boots']],
|
||||||
|
["Superbunny Cave - Bottom", True, ['Hammer', 'Pegasus Boots']],
|
||||||
|
["Superbunny Cave - Bottom", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Superbunny Cave - Bottom", True, ['Progressive Glove', 'Progressive Glove', 'Hookshot', 'Ocarina']],
|
||||||
|
["Superbunny Cave - Bottom", True, ['Progressive Glove', 'Progressive Glove', 'Magic Mirror', 'Hammer', 'Ocarina']],
|
||||||
|
["Superbunny Cave - Bottom", True, ['Progressive Glove', 'Progressive Glove', 'Hookshot', 'Lamp']],
|
||||||
|
["Superbunny Cave - Bottom", True, ['Progressive Glove', 'Progressive Glove', 'Magic Mirror', 'Hammer', 'Lamp']],
|
||||||
|
|
||||||
|
["Hookshot Cave - Bottom Right", False, []],
|
||||||
|
["Hookshot Cave - Bottom Right", False, [], ['Progressive Glove', 'Pegasus Boots']],
|
||||||
|
["Hookshot Cave - Bottom Right", False, [], ['Moon Pearl']],
|
||||||
|
["Hookshot Cave - Bottom Right", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Hookshot Cave - Bottom Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Ocarina']],
|
||||||
|
["Hookshot Cave - Bottom Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Magic Mirror', 'Hammer', 'Ocarina', 'Pegasus Boots']],
|
||||||
|
["Hookshot Cave - Bottom Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Lamp']],
|
||||||
|
["Hookshot Cave - Bottom Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Magic Mirror', 'Hammer', 'Lamp', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Hookshot Cave - Bottom Left", False, []],
|
||||||
|
["Hookshot Cave - Bottom Left", False, [], ['Progressive Glove', 'Pegasus Boots']],
|
||||||
|
["Hookshot Cave - Bottom Left", False, [], ['Moon Pearl']],
|
||||||
|
["Hookshot Cave - Bottom Left", False, [], ['Hookshot']],
|
||||||
|
["Hookshot Cave - Bottom Left", True, ['Moon Pearl', 'Pegasus Boots', 'Hookshot']],
|
||||||
|
["Hookshot Cave - Bottom Left", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Ocarina']],
|
||||||
|
["Hookshot Cave - Bottom Left", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Lamp']],
|
||||||
|
|
||||||
|
["Hookshot Cave - Top Left", False, []],
|
||||||
|
["Hookshot Cave - Top Left", False, [], ['Progressive Glove', 'Pegasus Boots']],
|
||||||
|
["Hookshot Cave - Top Left", False, [], ['Moon Pearl']],
|
||||||
|
["Hookshot Cave - Top Left", False, [], ['Hookshot']],
|
||||||
|
["Hookshot Cave - Top Left", True, ['Moon Pearl', 'Pegasus Boots', 'Hookshot']],
|
||||||
|
["Hookshot Cave - Top Left", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Ocarina']],
|
||||||
|
["Hookshot Cave - Top Left", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Lamp']],
|
||||||
|
|
||||||
|
["Hookshot Cave - Top Right", False, []],
|
||||||
|
["Hookshot Cave - Top Right", False, [], ['Progressive Glove', 'Pegasus Boots']],
|
||||||
|
["Hookshot Cave - Top Right", False, [], ['Moon Pearl']],
|
||||||
|
["Hookshot Cave - Top Right", False, [], ['Hookshot']],
|
||||||
|
["Hookshot Cave - Top Right", True, ['Moon Pearl', 'Pegasus Boots', 'Hookshot']],
|
||||||
|
["Hookshot Cave - Top Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Ocarina']],
|
||||||
|
["Hookshot Cave - Top Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Lamp']],
|
||||||
|
])
|
||||||
132
test/owg/TestDungeons.py
Normal file
132
test/owg/TestDungeons.py
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
from test.owg.TestVanillaOWG import TestVanillaOWG
|
||||||
|
|
||||||
|
|
||||||
|
class TestDungeons(TestVanillaOWG):
|
||||||
|
|
||||||
|
def testFirstDungeonChests(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Hyrule Castle - Map Chest", True, []],
|
||||||
|
|
||||||
|
["Sanctuary", True, []],
|
||||||
|
|
||||||
|
["Sewers - Secret Room - Left", False, []],
|
||||||
|
["Sewers - Secret Room - Left", True, ['Progressive Glove']],
|
||||||
|
["Sewers - Secret Room - Left", True, ['Lamp', 'Small Key (Escape)']],
|
||||||
|
|
||||||
|
["Eastern Palace - Compass Chest", True, []],
|
||||||
|
|
||||||
|
["Desert Palace - Map Chest", False, []],
|
||||||
|
["Desert Palace - Map Chest", True, ['Pegasus Boots']],
|
||||||
|
["Desert Palace - Map Chest", True, ['Book of Mudora']],
|
||||||
|
["Desert Palace - Map Chest", True, ['Ocarina', 'Progressive Glove', 'Progressive Glove', 'Magic Mirror']],
|
||||||
|
|
||||||
|
["Desert Palace - Boss", False, []],
|
||||||
|
["Desert Palace - Boss", False, [], ['Small Key (Desert Palace)']],
|
||||||
|
["Desert Palace - Boss", False, [], ['Big Key (Desert Palace)']],
|
||||||
|
["Desert Palace - Boss", False, [], ['Lamp', 'Fire Rod']],
|
||||||
|
["Desert Palace - Boss", True, ['Progressive Sword', 'Small Key (Desert Palace)', 'Pegasus Boots', 'Lamp', 'Big Key (Desert Palace)']],
|
||||||
|
["Desert Palace - Boss", True, ['Small Key (Desert Palace)', 'Pegasus Boots', 'Fire Rod', 'Big Key (Desert Palace)']],
|
||||||
|
|
||||||
|
["Tower of Hera - Basement Cage", False, []],
|
||||||
|
["Tower of Hera - Basement Cage", False, [], ['Pegasus Boots', "Ocarina", "Progressive Glove"]],
|
||||||
|
["Tower of Hera - Basement Cage", False, [], ['Pegasus Boots', "Ocarina", "Lamp"]],
|
||||||
|
["Tower of Hera - Basement Cage", False, [], ['Pegasus Boots', "Magic Mirror", "Hammer"]],
|
||||||
|
["Tower of Hera - Basement Cage", False, [], ['Pegasus Boots', "Magic Mirror", "Hookshot"]],
|
||||||
|
["Tower of Hera - Basement Cage", True, ['Pegasus Boots']],
|
||||||
|
["Tower of Hera - Basement Cage", True, ["Ocarina", "Magic Mirror"]],
|
||||||
|
["Tower of Hera - Basement Cage", True, ["Progressive Glove", "Lamp", "Magic Mirror"]],
|
||||||
|
["Tower of Hera - Basement Cage", True, ["Ocarina", "Hookshot", "Hammer"]],
|
||||||
|
["Tower of Hera - Basement Cage", True, ["Progressive Glove", "Lamp", "Magic Mirror"]],
|
||||||
|
|
||||||
|
["Castle Tower - Room 03", False, []],
|
||||||
|
["Castle Tower - Room 03", False, ['Progressive Sword'], ['Progressive Sword', 'Cape', 'Beat Agahnim 1']],
|
||||||
|
["Castle Tower - Room 03", False, [], ['Progressive Sword', 'Hammer', 'Progressive Bow', 'Fire Rod', 'Ice Rod', 'Cane of Somaria', 'Cane of Byrna']],
|
||||||
|
["Castle Tower - Room 03", True, ['Progressive Sword', 'Progressive Sword']],
|
||||||
|
["Castle Tower - Room 03", True, ['Cape', 'Progressive Bow']],
|
||||||
|
["Castle Tower - Room 03", True, ['Beat Agahnim 1', 'Fire Rod']],
|
||||||
|
|
||||||
|
["Palace of Darkness - Shooter Room", False, []],
|
||||||
|
["Palace of Darkness - Shooter Room", False, [], ['Moon Pearl']],
|
||||||
|
["Palace of Darkness - Shooter Room", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Palace of Darkness - Shooter Room", True, ['Moon Pearl', 'Beat Agahnim 1']],
|
||||||
|
["Palace of Darkness - Shooter Room", True, ['Moon Pearl', 'Hammer', 'Progressive Glove']],
|
||||||
|
#todo: Qirn jump in logic?
|
||||||
|
#["Palace of Darkness - Shooter Room", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Palace of Darkness - Shooter Room", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Flippers']],
|
||||||
|
|
||||||
|
["Swamp Palace - Entrance", False, []],
|
||||||
|
["Swamp Palace - Entrance", False, [], ['Magic Mirror']],
|
||||||
|
["Swamp Palace - Entrance", False, [], ['Moon Pearl']],
|
||||||
|
["Swamp Palace - Entrance", False, [], ['Flippers']],
|
||||||
|
["Swamp Palace - Entrance", True, ['Magic Mirror', 'Moon Pearl', 'Flippers', 'Pegasus Boots']],
|
||||||
|
["Swamp Palace - Entrance", True, ['Magic Mirror', 'Moon Pearl', 'Flippers', 'Ocarina']],
|
||||||
|
["Swamp Palace - Entrance", True, ['Magic Mirror', 'Moon Pearl', 'Flippers', 'Hammer', 'Progressive Glove']],
|
||||||
|
["Swamp Palace - Entrance", True, ['Magic Mirror', 'Moon Pearl', 'Flippers', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
|
||||||
|
["Skull Woods - Compass Chest", False, []],
|
||||||
|
["Skull Woods - Compass Chest", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Skull Woods - Compass Chest", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Skull Woods - Big Chest", False, []],
|
||||||
|
["Skull Woods - Big Chest", False, [], ['Big Key (Skull Woods)']],
|
||||||
|
#todo: Bomb Jump in logic?
|
||||||
|
#["Skull Woods - Big Chest", True, ['Magic Mirror', 'Pegasus Boots', 'Big Key (Skull Woods)']],
|
||||||
|
["Skull Woods - Big Chest", True, ['Moon Pearl', 'Pegasus Boots', 'Big Key (Skull Woods)']],
|
||||||
|
|
||||||
|
["Skull Woods - Big Key Chest", False, []],
|
||||||
|
["Skull Woods - Big Key Chest", True, ['Magic Mirror', 'Pegasus Boots']],
|
||||||
|
["Skull Woods - Big Key Chest", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Skull Woods - Bridge Room", False, []],
|
||||||
|
["Skull Woods - Bridge Room", False, [], ['Moon Pearl']],
|
||||||
|
["Skull Woods - Bridge Room", False, [], ['Fire Rod']],
|
||||||
|
["Skull Woods - Bridge Room", True, ['Moon Pearl', 'Pegasus Boots', 'Fire Rod']],
|
||||||
|
|
||||||
|
["Thieves' Town - Map Chest", False, []],
|
||||||
|
["Thieves' Town - Map Chest", False, [], ['Moon Pearl']],
|
||||||
|
["Thieves' Town - Map Chest", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Ice Palace - Compass Chest", False, []],
|
||||||
|
["Ice Palace - Compass Chest", False, [], ['Fire Rod', 'Bombos']],
|
||||||
|
["Ice Palace - Compass Chest", False, [], ['Fire Rod', 'Progressive Sword']],
|
||||||
|
["Ice Palace - Compass Chest", False, ['Progressive Glove'], ['Progressive Glove']],
|
||||||
|
#["Ice Palace - Compass Chest", True, ['Moon Pearl', 'Pegasus Boots', 'Flippers', 'Fire Rod']],
|
||||||
|
#["Ice Palace - Compass Chest", True, ['Moon Pearl', 'Pegasus Boots', 'Flippers', 'Bombos', 'Progressive Sword']],
|
||||||
|
["Ice Palace - Compass Chest", True, ['Progressive Glove', 'Progressive Glove', 'Fire Rod']],
|
||||||
|
["Ice Palace - Compass Chest", True, ['Progressive Glove', 'Progressive Glove', 'Bombos', 'Progressive Sword']],
|
||||||
|
|
||||||
|
["Misery Mire - Bridge Chest", False, []],
|
||||||
|
["Misery Mire - Bridge Chest", False, [], ['Moon Pearl']],
|
||||||
|
["Misery Mire - Bridge Chest", False, [], ['Ether']],
|
||||||
|
["Misery Mire - Bridge Chest", False, [], ['Progressive Sword']],
|
||||||
|
["Misery Mire - Bridge Chest", True, ['Moon Pearl', 'Pegasus Boots', 'Ether', 'Progressive Sword']],
|
||||||
|
|
||||||
|
["Turtle Rock - Compass Chest", False, []],
|
||||||
|
["Turtle Rock - Compass Chest", False, [], ['Cane of Somaria']],
|
||||||
|
#todo: does clip require sword?
|
||||||
|
#["Turtle Rock - Compass Chest", True, ['Moon Pearl', 'Pegasus Boots', 'Cane of Somaria', 'Small Key (Turtle Rock)', 'Small Key (Turtle Rock)', 'Small Key (Turtle Rock)', 'Small Key (Turtle Rock)']],
|
||||||
|
["Turtle Rock - Compass Chest", True, ['Moon Pearl', 'Pegasus Boots', 'Cane of Somaria', 'Small Key (Turtle Rock)', 'Small Key (Turtle Rock)', 'Small Key (Turtle Rock)', 'Small Key (Turtle Rock)', 'Progressive Sword']],
|
||||||
|
["Turtle Rock - Compass Chest", True, ['Moon Pearl', 'Pegasus Boots', 'Cane of Somaria', 'Progressive Sword', 'Quake', 'Hammer']],
|
||||||
|
["Turtle Rock - Compass Chest", True, ['Pegasus Boots', 'Magic Mirror', 'Hammer', 'Cane of Somaria', 'Small Key (Turtle Rock)', 'Small Key (Turtle Rock)', 'Small Key (Turtle Rock)', 'Small Key (Turtle Rock)']],
|
||||||
|
|
||||||
|
["Turtle Rock - Chain Chomps", False, []],
|
||||||
|
#todo: does clip require sword?
|
||||||
|
#["Turtle Rock - Chain Chomps", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Turtle Rock - Chain Chomps", True, ['Moon Pearl', 'Pegasus Boots', 'Progressive Sword']],
|
||||||
|
["Turtle Rock - Chain Chomps", True, ['Pegasus Boots', 'Magic Mirror', 'Hammer']],
|
||||||
|
["Turtle Rock - Chain Chomps", True, ['Pegasus Boots', 'Magic Mirror', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
|
||||||
|
["Turtle Rock - Crystaroller Room", False, []],
|
||||||
|
["Turtle Rock - Crystaroller Room", False, [], ['Big Key (Turtle Rock)']],
|
||||||
|
#todo: does clip require sword?
|
||||||
|
#["Turtle Rock - Crystaroller Room", True, ['Moon Pearl', 'Pegasus Boots', 'Big Key (Turtle Rock)']],
|
||||||
|
["Turtle Rock - Crystaroller Room", True, ['Moon Pearl', 'Pegasus Boots', 'Big Key (Turtle Rock)', 'Progressive Sword']],
|
||||||
|
["Turtle Rock - Crystaroller Room", True, ['Moon Pearl', 'Pegasus Boots', 'Big Key (Turtle Rock)', 'Hookshot']],
|
||||||
|
["Turtle Rock - Crystaroller Room", True, ['Pegasus Boots', 'Magic Mirror', 'Hammer', 'Big Key (Turtle Rock)']],
|
||||||
|
|
||||||
|
["Ganons Tower - Hope Room - Left", False, []],
|
||||||
|
["Ganons Tower - Hope Room - Left", False, ['Moon Pearl', 'Crystal 1']],
|
||||||
|
["Ganons Tower - Hope Room - Left", False, ['Pegasus Boots', 'Crystal 1']],
|
||||||
|
["Ganons Tower - Hope Room - Left", True, ['Moon Pearl', 'Pegasus Boots']],
|
||||||
|
["Ganons Tower - Hope Room - Left", True, ['Pegasus Boots', 'Hammer', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7']],
|
||||||
|
])
|
||||||
194
test/owg/TestLightWorld.py
Normal file
194
test/owg/TestLightWorld.py
Normal file
@@ -0,0 +1,194 @@
|
|||||||
|
from test.owg.TestVanillaOWG import TestVanillaOWG
|
||||||
|
|
||||||
|
|
||||||
|
class TestLightWorld(TestVanillaOWG):
|
||||||
|
|
||||||
|
def testLightWorld(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Master Sword Pedestal", False, []],
|
||||||
|
["Master Sword Pedestal", False, [], ['Green Pendant']],
|
||||||
|
["Master Sword Pedestal", False, [], ['Red Pendant']],
|
||||||
|
["Master Sword Pedestal", False, [], ['Blue Pendant']],
|
||||||
|
["Master Sword Pedestal", True, ['Green Pendant', 'Red Pendant', 'Blue Pendant']],
|
||||||
|
|
||||||
|
["Link's Uncle", True, []],
|
||||||
|
|
||||||
|
["Secret Passage", True, []],
|
||||||
|
|
||||||
|
["King's Tomb", False, []],
|
||||||
|
["King's Tomb", False, [], ['Pegasus Boots']],
|
||||||
|
["King's Tomb", True, ['Pegasus Boots']],
|
||||||
|
|
||||||
|
["Floodgate Chest", True, []],
|
||||||
|
|
||||||
|
["Link's House", True, []],
|
||||||
|
|
||||||
|
["Kakariko Tavern", True, []],
|
||||||
|
|
||||||
|
["Chicken House", True, []],
|
||||||
|
|
||||||
|
["Aginah's Cave", True, []],
|
||||||
|
|
||||||
|
["Sahasrahla's Hut - Left", True, []],
|
||||||
|
|
||||||
|
["Sahasrahla's Hut - Middle", True, []],
|
||||||
|
|
||||||
|
["Sahasrahla's Hut - Right", True, []],
|
||||||
|
|
||||||
|
["Kakariko Well - Top", True, []],
|
||||||
|
|
||||||
|
["Kakariko Well - Left", True, []],
|
||||||
|
|
||||||
|
["Kakariko Well - Middle", True, []],
|
||||||
|
|
||||||
|
["Kakariko Well - Right", True, []],
|
||||||
|
|
||||||
|
["Kakariko Well - Bottom", True, []],
|
||||||
|
|
||||||
|
["Blind's Hideout - Top", True, []],
|
||||||
|
|
||||||
|
["Blind's Hideout - Left", True, []],
|
||||||
|
|
||||||
|
["Blind's Hideout - Right", True, []],
|
||||||
|
|
||||||
|
["Blind's Hideout - Far Left", True, []],
|
||||||
|
|
||||||
|
["Blind's Hideout - Far Right", True, []],
|
||||||
|
|
||||||
|
["Bonk Rock Cave", False, []],
|
||||||
|
["Bonk Rock Cave", False, [], ['Pegasus Boots']],
|
||||||
|
["Bonk Rock Cave", True, ['Pegasus Boots']],
|
||||||
|
|
||||||
|
["Mini Moldorm Cave - Far Left", True, []],
|
||||||
|
|
||||||
|
["Mini Moldorm Cave - Left", True, []],
|
||||||
|
|
||||||
|
["Mini Moldorm Cave - Right", True, []],
|
||||||
|
|
||||||
|
["Mini Moldorm Cave - Far Right", True, []],
|
||||||
|
|
||||||
|
["Ice Rod Cave", True, []],
|
||||||
|
|
||||||
|
["Bottle Merchant", True, []],
|
||||||
|
|
||||||
|
["Sahasrahla", False, []],
|
||||||
|
["Sahasrahla", False, [], ['Green Pendant']],
|
||||||
|
["Sahasrahla", True, ['Green Pendant']],
|
||||||
|
|
||||||
|
["Magic Bat", False, []],
|
||||||
|
["Magic Bat", False, [], ['Magic Powder']],
|
||||||
|
["Magic Bat", False, [], ['Pegasus Boots', 'Hammer', 'Magic Mirror']],
|
||||||
|
["Magic Bat", False, [], ['Pegasus Boots', 'Hammer', 'Moon Pearl']],
|
||||||
|
["Magic Bat", False, ['Progressive Glove'], ['Pegasus Boots', 'Hammer', 'Progressive Glove']],
|
||||||
|
["Magic Bat", True, ['Magic Powder', 'Pegasus Boots']],
|
||||||
|
["Magic Bat", True, ['Magic Powder', 'Hammer']],
|
||||||
|
["Magic Bat", True, ['Magic Powder', 'Progressive Glove', 'Progressive Glove', 'Moon Pearl', 'Magic Mirror']],
|
||||||
|
|
||||||
|
["Sick Kid", False, []],
|
||||||
|
["Sick Kid", False, [], ['AnyBottle']],
|
||||||
|
["Sick Kid", True, ['Bottle (Bee)']],
|
||||||
|
["Sick Kid", True, ['Bottle (Fairy)']],
|
||||||
|
["Sick Kid", True, ['Bottle (Red Potion)']],
|
||||||
|
["Sick Kid", True, ['Bottle (Green Potion)']],
|
||||||
|
["Sick Kid", True, ['Bottle (Blue Potion)']],
|
||||||
|
["Sick Kid", True, ['Bottle']],
|
||||||
|
["Sick Kid", True, ['Bottle (Good Bee)']],
|
||||||
|
|
||||||
|
["Hobo", True, []],
|
||||||
|
|
||||||
|
["Bombos Tablet", False, []],
|
||||||
|
["Bombos Tablet", False, ['Progressive Sword'], ['Progressive Sword']],
|
||||||
|
["Bombos Tablet", False, [], ['Book of Mudora']],
|
||||||
|
["Bombos Tablet", True, ['Pegasus Boots', 'Book of Mudora', 'Progressive Sword', 'Progressive Sword']],
|
||||||
|
|
||||||
|
["King Zora", True, []],
|
||||||
|
|
||||||
|
["Lost Woods Hideout", True, []],
|
||||||
|
|
||||||
|
["Lumberjack Tree", False, []],
|
||||||
|
["Lumberjack Tree", False, [], ['Pegasus Boots']],
|
||||||
|
["Lumberjack Tree", False, [], ['Beat Agahnim 1']],
|
||||||
|
["Lumberjack Tree", True, ['Pegasus Boots', 'Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Cave 45", False, []],
|
||||||
|
["Cave 45", False, [], ['Pegasus Boots', 'Magic Mirror']],
|
||||||
|
["Cave 45", False, [], ['Pegasus Boots', 'Moon Pearl', 'Ocarina', 'Lamp']],
|
||||||
|
["Cave 45", False, [], ['Pegasus Boots', 'Moon Pearl', 'Ocarina', 'Progressive Glove']],
|
||||||
|
["Cave 45", True, ['Pegasus Boots']],
|
||||||
|
["Cave 45", True, ['Ocarina', 'Magic Mirror']],
|
||||||
|
["Cave 45", True, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
["Cave 45", True, ['Moon Pearl', 'Magic Mirror', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Cave 45", True, ['Moon Pearl', 'Magic Mirror', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Cave 45", True, ['Moon Pearl', 'Magic Mirror', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Cave 45", True, ['Moon Pearl', 'Magic Mirror', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Cave 45", True, ['Moon Pearl', 'Magic Mirror', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Graveyard Cave", False, []],
|
||||||
|
["Graveyard Cave", False, [], ['Pegasus Boots', 'Magic Mirror']],
|
||||||
|
["Graveyard Cave", False, [], ['Pegasus Boots', 'Moon Pearl']],
|
||||||
|
["Graveyard Cave", True, ['Pegasus Boots']],
|
||||||
|
["Graveyard Cave", True, ['Moon Pearl', 'Magic Mirror', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Graveyard Cave", True, ['Moon Pearl', 'Magic Mirror', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Graveyard Cave", True, ['Moon Pearl', 'Magic Mirror', 'Beat Agahnim 1', 'Hammer', 'Hookshot']],
|
||||||
|
["Graveyard Cave", True, ['Moon Pearl', 'Magic Mirror', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Graveyard Cave", True, ['Moon Pearl', 'Magic Mirror', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Checkerboard Cave", False, []],
|
||||||
|
["Checkerboard Cave", False, [], ['Progressive Glove']],
|
||||||
|
["Checkerboard Cave", False, [], ['Pegasus Boots', 'Ocarina']],
|
||||||
|
["Checkerboard Cave", False, [], ['Pegasus Boots', 'Magic Mirror']],
|
||||||
|
["Checkerboard Cave", True, ['Pegasus Boots', 'Progressive Glove']],
|
||||||
|
["Checkerboard Cave", True, ['Ocarina', 'Magic Mirror', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
|
||||||
|
["Mini Moldorm Cave - Generous Guy", True, []],
|
||||||
|
|
||||||
|
["Library", False, []],
|
||||||
|
["Library", False, [], ['Pegasus Boots']],
|
||||||
|
["Library", True, ['Pegasus Boots']],
|
||||||
|
|
||||||
|
["Mushroom", True, []],
|
||||||
|
|
||||||
|
["Potion Shop", False, []],
|
||||||
|
["Potion Shop", False, [], ['Mushroom']],
|
||||||
|
["Potion Shop", True, ['Mushroom']],
|
||||||
|
|
||||||
|
["Maze Race", True, []],
|
||||||
|
|
||||||
|
["Desert Ledge", False, []],
|
||||||
|
["Desert Ledge", False, [], ['Pegasus Boots', 'Book of Mudora', 'Ocarina']],
|
||||||
|
["Desert Ledge", False, [], ['Pegasus Boots', 'Book of Mudora', 'Magic Mirror']],
|
||||||
|
["Desert Ledge", False, ['Progressive Glove'], ['Pegasus Boots', 'Book of Mudora', 'Progressive Glove']],
|
||||||
|
["Desert Ledge", True, ['Pegasus Boots']],
|
||||||
|
["Desert Ledge", True, ['Book of Mudora']],
|
||||||
|
["Desert Ledge", True, ['Ocarina', 'Magic Mirror', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
|
||||||
|
["Lake Hylia Island", False, []],
|
||||||
|
["Lake Hylia Island", False, [], ['Pegasus Boots', 'Magic Mirror']],
|
||||||
|
["Lake Hylia Island", False, [], ['Pegasus Boots', 'Moon Pearl']],
|
||||||
|
["Lake Hylia Island", False, [], ['Pegasus Boots', 'Flippers']],
|
||||||
|
["Lake Hylia Island", True, ['Pegasus Boots']],
|
||||||
|
["Lake Hylia Island", True, ['Flippers', 'Moon Pearl', 'Magic Mirror', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Lake Hylia Island", True, ['Flippers', 'Moon Pearl', 'Magic Mirror', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Lake Hylia Island", True, ['Flippers', 'Moon Pearl', 'Magic Mirror', 'Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Sunken Treasure", True, []],
|
||||||
|
|
||||||
|
["Zora's Ledge", False, []],
|
||||||
|
["Zora's Ledge", False, [], ['Pegasus Boots', 'Flippers']],
|
||||||
|
["Zora's Ledge", True, ['Pegasus Boots']],
|
||||||
|
["Zora's Ledge", True, ['Flippers']],
|
||||||
|
|
||||||
|
["Flute Spot", False, []],
|
||||||
|
["Flute Spot", False, [], ['Shovel']],
|
||||||
|
["Flute Spot", True, ['Shovel']],
|
||||||
|
|
||||||
|
["Waterfall Fairy - Left", False, []],
|
||||||
|
["Waterfall Fairy - Left", True, ['Flippers']],
|
||||||
|
["Waterfall Fairy - Left", True, ['Moon Pearl']],
|
||||||
|
["Waterfall Fairy - Left", True, ['Pegasus Boots']],
|
||||||
|
|
||||||
|
["Waterfall Fairy - Right", False, []],
|
||||||
|
["Waterfall Fairy - Right", True, ['Flippers']],
|
||||||
|
["Waterfall Fairy - Right", True, ['Moon Pearl']],
|
||||||
|
["Waterfall Fairy - Right", True, ['Pegasus Boots']]
|
||||||
|
])
|
||||||
29
test/owg/TestVanillaOWG.py
Normal file
29
test/owg/TestVanillaOWG.py
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
from BaseClasses import World
|
||||||
|
from Dungeons import create_dungeons, get_dungeon_item_pool
|
||||||
|
from EntranceShuffle import link_entrances
|
||||||
|
from InvertedRegions import mark_dark_world_regions
|
||||||
|
from ItemList import difficulties, generate_itempool
|
||||||
|
from Items import ItemFactory
|
||||||
|
from Regions import create_regions
|
||||||
|
from Rules import set_rules
|
||||||
|
from test.TestBase import TestBase
|
||||||
|
|
||||||
|
|
||||||
|
class TestVanillaOWG(TestBase):
|
||||||
|
def setUp(self):
|
||||||
|
self.world = World(1, 'vanilla', 'owglitches', 'open', 'random', 'normal', 'normal', 'none', 'on', 'ganon', 'balanced', True, 'items',
|
||||||
|
True, False, False, False, False, False, False, None, 'none', False)
|
||||||
|
self.world.difficulty_requirements = difficulties['normal']
|
||||||
|
create_regions(self.world, 1)
|
||||||
|
create_dungeons(self.world, 1)
|
||||||
|
link_entrances(self.world, 1)
|
||||||
|
generate_itempool(self.world, 1)
|
||||||
|
self.world.required_medallions[1] = ['Ether', 'Quake']
|
||||||
|
self.world.itempool.extend(get_dungeon_item_pool(self.world))
|
||||||
|
self.world.itempool.extend(ItemFactory(['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], 1))
|
||||||
|
self.world.get_location('Agahnim 1', 1).item = None
|
||||||
|
self.world.get_location('Agahnim 2', 1).item = None
|
||||||
|
self.world.precollected_items.clear()
|
||||||
|
self.world.itempool.append(ItemFactory('Pegasus Boots', 1))
|
||||||
|
mark_dark_world_regions(self.world)
|
||||||
|
set_rules(self.world, 1)
|
||||||
0
test/owg/__init__.py
Normal file
0
test/owg/__init__.py
Normal file
166
test/vanilla/TestDarkWorld.py
Normal file
166
test/vanilla/TestDarkWorld.py
Normal file
@@ -0,0 +1,166 @@
|
|||||||
|
from test.vanilla.TestVanilla import TestVanilla
|
||||||
|
|
||||||
|
|
||||||
|
class TestDarkWorld(TestVanilla):
|
||||||
|
|
||||||
|
def testSouthDarkWorld(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Hype Cave - Top", False, []],
|
||||||
|
["Hype Cave - Top", False, [], ['Moon Pearl']],
|
||||||
|
["Hype Cave - Top", True, ['Moon Pearl', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Hype Cave - Top", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Hype Cave - Top", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Hype Cave - Top", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Hype Cave - Top", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Hype Cave - Middle Right", False, []],
|
||||||
|
["Hype Cave - Middle Right", False, [], ['Moon Pearl']],
|
||||||
|
["Hype Cave - Middle Right", True, ['Moon Pearl', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Hype Cave - Middle Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Hype Cave - Middle Right", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Hype Cave - Middle Right", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Hype Cave - Middle Right", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Hype Cave - Middle Left", False, []],
|
||||||
|
["Hype Cave - Middle Left", False, [], ['Moon Pearl']],
|
||||||
|
["Hype Cave - Middle Left", True, ['Moon Pearl', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Hype Cave - Middle Left", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Hype Cave - Middle Left", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Hype Cave - Middle Left", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Hype Cave - Middle Left", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Hype Cave - Bottom", False, []],
|
||||||
|
["Hype Cave - Bottom", False, [], ['Moon Pearl']],
|
||||||
|
["Hype Cave - Bottom", True, ['Moon Pearl', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Hype Cave - Bottom", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Hype Cave - Bottom", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Hype Cave - Bottom", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Hype Cave - Bottom", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Hype Cave - Generous Guy", False, []],
|
||||||
|
["Hype Cave - Generous Guy", False, [], ['Moon Pearl']],
|
||||||
|
["Hype Cave - Generous Guy", True, ['Moon Pearl', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Hype Cave - Generous Guy", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Hype Cave - Generous Guy", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Hype Cave - Generous Guy", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Hype Cave - Generous Guy", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Stumpy", False, []],
|
||||||
|
["Stumpy", False, [], ['Moon Pearl']],
|
||||||
|
["Stumpy", True, ['Moon Pearl', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Stumpy", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Stumpy", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Stumpy", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Stumpy", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Digging Game", False, []],
|
||||||
|
["Digging Game", False, [], ['Moon Pearl']],
|
||||||
|
["Digging Game", True, ['Moon Pearl', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Digging Game", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Digging Game", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Digging Game", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Digging Game", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']]
|
||||||
|
])
|
||||||
|
|
||||||
|
def testWestDarkWorld(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Brewery", False, []],
|
||||||
|
["Brewery", False, [], ['Moon Pearl']],
|
||||||
|
["Brewery", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Brewery", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Brewery", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Brewery", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["C-Shaped House", False, []],
|
||||||
|
["C-Shaped House", False, [], ['Moon Pearl']],
|
||||||
|
["C-Shaped House", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["C-Shaped House", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["C-Shaped House", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["C-Shaped House", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Chest Game", False, []],
|
||||||
|
["Chest Game", False, [], ['Moon Pearl']],
|
||||||
|
["Chest Game", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Chest Game", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Chest Game", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Chest Game", True, ['Moon Pearl', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Peg Cave", False, []],
|
||||||
|
["Peg Cave", False, [], ['Moon Pearl']],
|
||||||
|
["Peg Cave", False, [], ['Hammer']],
|
||||||
|
["Peg Cave", False, [], ['Progressive Glove']],
|
||||||
|
["Peg Cave", True, ['Moon Pearl', 'Hammer', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
|
||||||
|
["Bumper Cave Ledge", False, []],
|
||||||
|
["Bumper Cave Ledge", False, [], ['Moon Pearl']],
|
||||||
|
["Bumper Cave Ledge", False, [], ['Cape']],
|
||||||
|
["Bumper Cave Ledge", False, [], ['Progressive Glove']],
|
||||||
|
["Bumper Cave Ledge", True, ['Moon Pearl', 'Cape', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Bumper Cave Ledge", True, ['Moon Pearl', 'Cape', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Bumper Cave Ledge", True, ['Moon Pearl', 'Cape', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
|
||||||
|
["Blacksmith", False, []],
|
||||||
|
["Blacksmith", False, [], ['Progressive Glove']],
|
||||||
|
["Blacksmith", False, [], ['Moon Pearl']],
|
||||||
|
["Blacksmith", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
|
||||||
|
["Purple Chest", False, []],
|
||||||
|
["Purple Chest", False, [], ['Progressive Glove']],
|
||||||
|
["Purple Chest", False, [], ['Moon Pearl']],
|
||||||
|
["Purple Chest", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']]
|
||||||
|
])
|
||||||
|
|
||||||
|
def testEastDarkWorld(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Catfish", False, []],
|
||||||
|
["Catfish", False, [], ['Progressive Glove']],
|
||||||
|
["Catfish", False, [], ['Moon Pearl']],
|
||||||
|
["Catfish", True, ['Moon Pearl', 'Beat Agahnim 1', 'Progressive Glove']],
|
||||||
|
["Catfish", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Catfish", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Flippers']],
|
||||||
|
|
||||||
|
["Pyramid", False, []],
|
||||||
|
["Pyramid", False, [], ['Beat Agahnim 1', 'Moon Pearl']],
|
||||||
|
["Pyramid", True, ['Beat Agahnim 1']],
|
||||||
|
["Pyramid", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Pyramid", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Flippers']],
|
||||||
|
|
||||||
|
["Pyramid Fairy - Left", False, []],
|
||||||
|
["Pyramid Fairy - Left", False, [], ['Moon Pearl']],
|
||||||
|
["Pyramid Fairy - Left", False, [], ['Crystal 5']],
|
||||||
|
["Pyramid Fairy - Left", False, [], ['Crystal 6']],
|
||||||
|
["Pyramid Fairy - Left", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Pyramid Fairy - Left", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Pyramid Fairy - Left", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Progressive Glove', 'Progressive Glove', 'Magic Mirror']],
|
||||||
|
["Pyramid Fairy - Left", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot', 'Magic Mirror']],
|
||||||
|
["Pyramid Fairy - Left", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Flippers', 'Hookshot', 'Magic Mirror']],
|
||||||
|
|
||||||
|
["Pyramid Fairy - Right", False, []],
|
||||||
|
["Pyramid Fairy - Right", False, [], ['Moon Pearl']],
|
||||||
|
["Pyramid Fairy - Right", False, [], ['Crystal 5']],
|
||||||
|
["Pyramid Fairy - Right", False, [], ['Crystal 6']],
|
||||||
|
["Pyramid Fairy - Right", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Pyramid Fairy - Right", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Pyramid Fairy - Right", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Progressive Glove', 'Progressive Glove', 'Magic Mirror']],
|
||||||
|
["Pyramid Fairy - Right", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot', 'Magic Mirror']],
|
||||||
|
["Pyramid Fairy - Right", True, ['Moon Pearl', 'Crystal 5', 'Crystal 6', 'Beat Agahnim 1', 'Flippers', 'Hookshot', 'Magic Mirror']],
|
||||||
|
|
||||||
|
["Ganon", False, []],
|
||||||
|
["Ganon", False, [], ['Moon Pearl']],
|
||||||
|
["Ganon", False, [], ['Beat Agahnim 2']],
|
||||||
|
])
|
||||||
|
|
||||||
|
def testMireArea(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Mire Shed - Left", False, []],
|
||||||
|
["Mire Shed - Left", False, [], ['Progressive Glove']],
|
||||||
|
["Mire Shed - Left", False, [], ['Moon Pearl']],
|
||||||
|
["Mire Shed - Left", False, [], ['Ocarina']],
|
||||||
|
["Mire Shed - Left", True, ['Moon Pearl', 'Ocarina', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
|
||||||
|
["Mire Shed - Right", False, []],
|
||||||
|
["Mire Shed - Right", False, [], ['Progressive Glove']],
|
||||||
|
["Mire Shed - Right", False, [], ['Moon Pearl']],
|
||||||
|
["Mire Shed - Right", False, [], ['Ocarina']],
|
||||||
|
["Mire Shed - Right", True, ['Moon Pearl', 'Ocarina', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
])
|
||||||
230
test/vanilla/TestDeathMountain.py
Normal file
230
test/vanilla/TestDeathMountain.py
Normal file
@@ -0,0 +1,230 @@
|
|||||||
|
from test.vanilla.TestVanilla import TestVanilla
|
||||||
|
|
||||||
|
|
||||||
|
class TestDeathMountain(TestVanilla):
|
||||||
|
|
||||||
|
def testWestDeathMountain(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Ether Tablet", False, []],
|
||||||
|
["Ether Tablet", False, [], ['Progressive Glove', 'Ocarina']],
|
||||||
|
["Ether Tablet", False, [], ['Lamp', 'Ocarina']],
|
||||||
|
["Ether Tablet", False, [], ['Magic Mirror', 'Hookshot']],
|
||||||
|
["Ether Tablet", False, [], ['Magic Mirror', 'Hammer']],
|
||||||
|
["Ether Tablet", False, ['Progressive Sword'], ['Progressive Sword']],
|
||||||
|
["Ether Tablet", False, [], ['Book of Mudora']],
|
||||||
|
["Ether Tablet", True, ['Ocarina', 'Magic Mirror', 'Book of Mudora', 'Progressive Sword', 'Progressive Sword']],
|
||||||
|
["Ether Tablet", True, ['Progressive Glove', 'Lamp', 'Magic Mirror', 'Book of Mudora', 'Progressive Sword', 'Progressive Sword']],
|
||||||
|
["Ether Tablet", True, ['Ocarina', 'Hammer', 'Hookshot', 'Book of Mudora', 'Progressive Sword', 'Progressive Sword']],
|
||||||
|
["Ether Tablet", True, ['Progressive Glove', 'Lamp', 'Hammer', 'Hookshot', 'Book of Mudora', 'Progressive Sword', 'Progressive Sword']],
|
||||||
|
|
||||||
|
["Old Man", False, []],
|
||||||
|
["Old Man", False, [], ['Progressive Glove', 'Ocarina']],
|
||||||
|
["Old Man", False, [], ['Lamp']],
|
||||||
|
["Old Man", True, ['Ocarina', 'Lamp']],
|
||||||
|
["Old Man", True, ['Progressive Glove', 'Lamp']],
|
||||||
|
|
||||||
|
["Spectacle Rock Cave", False, []],
|
||||||
|
["Spectacle Rock Cave", False, [], ['Progressive Glove', 'Ocarina']],
|
||||||
|
["Spectacle Rock Cave", False, [], ['Lamp', 'Ocarina']],
|
||||||
|
["Spectacle Rock Cave", True, ['Ocarina']],
|
||||||
|
["Spectacle Rock Cave", True, ['Progressive Glove', 'Lamp']],
|
||||||
|
|
||||||
|
["Spectacle Rock", False, []],
|
||||||
|
["Spectacle Rock", False, [], ['Progressive Glove', 'Ocarina']],
|
||||||
|
["Spectacle Rock", False, [], ['Lamp', 'Ocarina']],
|
||||||
|
["Spectacle Rock", False, [], ['Magic Mirror']],
|
||||||
|
["Spectacle Rock", True, ['Ocarina', 'Magic Mirror']],
|
||||||
|
["Spectacle Rock", True, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
])
|
||||||
|
|
||||||
|
def testEastDeathMountain(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Mimic Cave", False, []],
|
||||||
|
["Mimic Cave", False, [], ['Quake']],
|
||||||
|
["Mimic Cave", False, [], ['Progressive Sword']],
|
||||||
|
["Mimic Cave", False, ['Progressive Glove'], ['Progressive Glove']],
|
||||||
|
["Mimic Cave", False, [], ['Hammer']],
|
||||||
|
["Mimic Cave", False, [], ['Magic Mirror']],
|
||||||
|
["Mimic Cave", False, [], ['Moon Pearl']],
|
||||||
|
["Mimic Cave", False, [], ['Cane of Somaria']],
|
||||||
|
["Mimic Cave", False, ['Small Key (Turtle Rock)'], ['Small Key (Turtle Rock)']],
|
||||||
|
["Mimic Cave", True, ['Quake', 'Progressive Sword', 'Ocarina', 'Progressive Glove', 'Progressive Glove', 'Hammer', 'Moon Pearl', 'Cane of Somaria', 'Magic Mirror', 'Small Key (Turtle Rock)', 'Small Key (Turtle Rock)']],
|
||||||
|
|
||||||
|
["Spiral Cave", False, []],
|
||||||
|
["Spiral Cave", False, [], ['Progressive Glove', 'Ocarina']],
|
||||||
|
["Spiral Cave", False, [], ['Magic Mirror', 'Hammer', 'Hookshot']],
|
||||||
|
["Spiral Cave", False, [], ['Magic Mirror', 'Hookshot']],
|
||||||
|
["Spiral Cave", False, [], ['Hammer', 'Hookshot']],
|
||||||
|
["Spiral Cave", False, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
["Spiral Cave", False, ['Progressive Glove', 'Hookshot']],
|
||||||
|
["Spiral Cave", False, ['Ocarina', 'Magic Mirror']],
|
||||||
|
["Spiral Cave", False, ['Ocarina', 'Hammer']],
|
||||||
|
["Spiral Cave", True, ['Ocarina', 'Hookshot']],
|
||||||
|
["Spiral Cave", True, ['Progressive Glove', 'Lamp', 'Hookshot']],
|
||||||
|
["Spiral Cave", True, ['Progressive Glove', 'Lamp', 'Magic Mirror', 'Hammer']],
|
||||||
|
["Spiral Cave", True, ['Ocarina', 'Magic Mirror', 'Hammer']],
|
||||||
|
|
||||||
|
["Paradox Cave Lower - Far Left", False, []],
|
||||||
|
["Paradox Cave Lower - Far Left", False, [], ['Progressive Glove', 'Ocarina']],
|
||||||
|
["Paradox Cave Lower - Far Left", False, [], ['Magic Mirror', 'Hammer', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Far Left", False, [], ['Magic Mirror', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Far Left", False, [], ['Hammer', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Far Left", False, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Lower - Far Left", False, ['Progressive Glove', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Far Left", False, ['Ocarina', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Lower - Far Left", False, ['Ocarina', 'Hammer']],
|
||||||
|
["Paradox Cave Lower - Far Left", True, ['Ocarina', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Far Left", True, ['Progressive Glove', 'Lamp', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Far Left", True, ['Progressive Glove', 'Lamp', 'Magic Mirror', 'Hammer']],
|
||||||
|
["Paradox Cave Lower - Far Left", True, ['Ocarina', 'Magic Mirror', 'Hammer']],
|
||||||
|
|
||||||
|
["Paradox Cave Lower - Left", False, []],
|
||||||
|
["Paradox Cave Lower - Left", False, [], ['Progressive Glove', 'Ocarina']],
|
||||||
|
["Paradox Cave Lower - Left", False, [], ['Magic Mirror', 'Hammer', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Left", False, [], ['Magic Mirror', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Left", False, [], ['Hammer', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Left", False, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Lower - Left", False, ['Progressive Glove', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Left", False, ['Ocarina', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Lower - Left", False, ['Ocarina', 'Hammer']],
|
||||||
|
["Paradox Cave Lower - Left", True, ['Ocarina', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Left", True, ['Progressive Glove', 'Lamp', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Left", True, ['Progressive Glove', 'Lamp', 'Magic Mirror', 'Hammer']],
|
||||||
|
["Paradox Cave Lower - Left", True, ['Ocarina', 'Magic Mirror', 'Hammer']],
|
||||||
|
|
||||||
|
["Paradox Cave Lower - Middle", False, []],
|
||||||
|
["Paradox Cave Lower - Middle", False, [], ['Progressive Glove', 'Ocarina']],
|
||||||
|
["Paradox Cave Lower - Middle", False, [], ['Magic Mirror', 'Hammer', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Middle", False, [], ['Magic Mirror', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Middle", False, [], ['Hammer', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Middle", False, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Lower - Middle", False, ['Progressive Glove', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Middle", False, ['Ocarina', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Lower - Middle", False, ['Ocarina', 'Hammer']],
|
||||||
|
["Paradox Cave Lower - Middle", True, ['Ocarina', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Middle", True, ['Progressive Glove', 'Lamp', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Middle", True, ['Progressive Glove', 'Lamp', 'Magic Mirror', 'Hammer']],
|
||||||
|
["Paradox Cave Lower - Middle", True, ['Ocarina', 'Magic Mirror', 'Hammer']],
|
||||||
|
|
||||||
|
["Paradox Cave Lower - Right", False, []],
|
||||||
|
["Paradox Cave Lower - Right", False, [], ['Progressive Glove', 'Ocarina']],
|
||||||
|
["Paradox Cave Lower - Right", False, [], ['Magic Mirror', 'Hammer', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Right", False, [], ['Magic Mirror', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Right", False, [], ['Hammer', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Right", False, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Lower - Right", False, ['Progressive Glove', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Right", False, ['Ocarina', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Lower - Right", False, ['Ocarina', 'Hammer']],
|
||||||
|
["Paradox Cave Lower - Right", True, ['Ocarina', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Right", True, ['Progressive Glove', 'Lamp', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Right", True, ['Progressive Glove', 'Lamp', 'Magic Mirror', 'Hammer']],
|
||||||
|
["Paradox Cave Lower - Right", True, ['Ocarina', 'Magic Mirror', 'Hammer']],
|
||||||
|
|
||||||
|
["Paradox Cave Lower - Far Right", False, []],
|
||||||
|
["Paradox Cave Lower - Far Right", False, [], ['Progressive Glove', 'Ocarina']],
|
||||||
|
["Paradox Cave Lower - Far Right", False, [], ['Magic Mirror', 'Hammer', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Far Right", False, [], ['Magic Mirror', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Far Right", False, [], ['Hammer', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Far Right", False, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Lower - Far Right", False, ['Progressive Glove', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Far Right", False, ['Ocarina', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Lower - Far Right", False, ['Ocarina', 'Hammer']],
|
||||||
|
["Paradox Cave Lower - Far Right", True, ['Ocarina', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Far Right", True, ['Progressive Glove', 'Lamp', 'Hookshot']],
|
||||||
|
["Paradox Cave Lower - Far Right", True, ['Progressive Glove', 'Lamp', 'Magic Mirror', 'Hammer']],
|
||||||
|
["Paradox Cave Lower - Far Right", True, ['Ocarina', 'Magic Mirror', 'Hammer']],
|
||||||
|
|
||||||
|
["Paradox Cave Upper - Left", False, []],
|
||||||
|
["Paradox Cave Upper - Left", False, [], ['Progressive Glove', 'Ocarina']],
|
||||||
|
["Paradox Cave Upper - Left", False, [], ['Magic Mirror', 'Hammer', 'Hookshot']],
|
||||||
|
["Paradox Cave Upper - Left", False, [], ['Magic Mirror', 'Hookshot']],
|
||||||
|
["Paradox Cave Upper - Left", False, [], ['Hammer', 'Hookshot']],
|
||||||
|
["Paradox Cave Upper - Left", False, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Upper - Left", False, ['Progressive Glove', 'Hookshot']],
|
||||||
|
["Paradox Cave Upper - Left", False, ['Ocarina', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Upper - Left", False, ['Ocarina', 'Hammer']],
|
||||||
|
["Paradox Cave Upper - Left", True, ['Ocarina', 'Hookshot']],
|
||||||
|
["Paradox Cave Upper - Left", True, ['Progressive Glove', 'Lamp', 'Hookshot']],
|
||||||
|
["Paradox Cave Upper - Left", True, ['Progressive Glove', 'Lamp', 'Magic Mirror', 'Hammer']],
|
||||||
|
["Paradox Cave Upper - Left", True, ['Ocarina', 'Magic Mirror', 'Hammer']],
|
||||||
|
|
||||||
|
["Paradox Cave Upper - Right", False, []],
|
||||||
|
["Paradox Cave Upper - Right", False, [], ['Progressive Glove', 'Ocarina']],
|
||||||
|
["Paradox Cave Upper - Right", False, [], ['Magic Mirror', 'Hammer', 'Hookshot']],
|
||||||
|
["Paradox Cave Upper - Right", False, [], ['Magic Mirror', 'Hookshot']],
|
||||||
|
["Paradox Cave Upper - Right", False, [], ['Hammer', 'Hookshot']],
|
||||||
|
["Paradox Cave Upper - Right", False, ['Progressive Glove', 'Lamp', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Upper - Right", False, ['Progressive Glove', 'Hookshot']],
|
||||||
|
["Paradox Cave Upper - Right", False, ['Ocarina', 'Magic Mirror']],
|
||||||
|
["Paradox Cave Upper - Right", False, ['Ocarina', 'Hammer']],
|
||||||
|
["Paradox Cave Upper - Right", True, ['Ocarina', 'Hookshot']],
|
||||||
|
["Paradox Cave Upper - Right", True, ['Progressive Glove', 'Lamp', 'Hookshot']],
|
||||||
|
["Paradox Cave Upper - Right", True, ['Progressive Glove', 'Lamp', 'Magic Mirror', 'Hammer']],
|
||||||
|
["Paradox Cave Upper - Right", True, ['Ocarina', 'Magic Mirror', 'Hammer']],
|
||||||
|
])
|
||||||
|
|
||||||
|
def testWestDarkWorldDeathMountain(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Spike Cave", False, []],
|
||||||
|
["Spike Cave", False, [], ['Progressive Glove']],
|
||||||
|
["Spike Cave", False, [], ['Moon Pearl']],
|
||||||
|
["Spike Cave", False, [], ['Hammer']],
|
||||||
|
["Spike Cave", False, [], ['Cape', 'Cane of Byrna']],
|
||||||
|
["Spike Cave", True, ['Bottle', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Lamp', 'Cape']],
|
||||||
|
["Spike Cave", True, ['Bottle', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Ocarina', 'Cape']],
|
||||||
|
["Spike Cave", True, ['Bottle', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Lamp', 'Cane of Byrna']],
|
||||||
|
["Spike Cave", True, ['Bottle', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Ocarina', 'Cane of Byrna']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/2)', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Lamp', 'Cape']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/2)', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Ocarina', 'Cape']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/2)', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Lamp', 'Cane of Byrna']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/2)', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Ocarina', 'Cane of Byrna']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/4)', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Lamp', 'Cape']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/4)', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Ocarina', 'Cape']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/4)', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Lamp', 'Cane of Byrna']],
|
||||||
|
["Spike Cave", True, ['Magic Upgrade (1/4)', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Ocarina', 'Cane of Byrna']],
|
||||||
|
])
|
||||||
|
|
||||||
|
def testEastDarkWorldDeathMountain(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Superbunny Cave - Top", False, []],
|
||||||
|
["Superbunny Cave - Top", False, [], ['Progressive Glove']],
|
||||||
|
["Superbunny Cave - Top", False, [], ['Moon Pearl']],
|
||||||
|
["Superbunny Cave - Top", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Ocarina']],
|
||||||
|
["Superbunny Cave - Top", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Magic Mirror', 'Hammer', 'Ocarina']],
|
||||||
|
["Superbunny Cave - Top", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Lamp']],
|
||||||
|
["Superbunny Cave - Top", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Magic Mirror', 'Hammer', 'Lamp']],
|
||||||
|
|
||||||
|
["Superbunny Cave - Bottom", False, []],
|
||||||
|
["Superbunny Cave - Bottom", False, [], ['Progressive Glove']],
|
||||||
|
["Superbunny Cave - Bottom", False, [], ['Moon Pearl']],
|
||||||
|
["Superbunny Cave - Bottom", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Ocarina']],
|
||||||
|
["Superbunny Cave - Bottom", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Magic Mirror', 'Hammer', 'Ocarina']],
|
||||||
|
["Superbunny Cave - Bottom", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Lamp']],
|
||||||
|
["Superbunny Cave - Bottom", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Magic Mirror', 'Hammer', 'Lamp']],
|
||||||
|
|
||||||
|
["Hookshot Cave - Bottom Right", False, []],
|
||||||
|
["Hookshot Cave - Bottom Right", False, [], ['Progressive Glove']],
|
||||||
|
["Hookshot Cave - Bottom Right", False, [], ['Moon Pearl']],
|
||||||
|
["Hookshot Cave - Bottom Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Ocarina']],
|
||||||
|
["Hookshot Cave - Bottom Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Magic Mirror', 'Hammer', 'Ocarina', 'Pegasus Boots']],
|
||||||
|
["Hookshot Cave - Bottom Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Lamp']],
|
||||||
|
["Hookshot Cave - Bottom Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Magic Mirror', 'Hammer', 'Lamp', 'Pegasus Boots']],
|
||||||
|
|
||||||
|
["Hookshot Cave - Bottom Left", False, []],
|
||||||
|
["Hookshot Cave - Bottom Left", False, [], ['Progressive Glove']],
|
||||||
|
["Hookshot Cave - Bottom Left", False, [], ['Moon Pearl']],
|
||||||
|
["Hookshot Cave - Bottom Left", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Ocarina']],
|
||||||
|
["Hookshot Cave - Bottom Left", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Lamp']],
|
||||||
|
|
||||||
|
["Hookshot Cave - Top Left", False, []],
|
||||||
|
["Hookshot Cave - Top Left", False, [], ['Progressive Glove']],
|
||||||
|
["Hookshot Cave - Top Left", False, [], ['Moon Pearl']],
|
||||||
|
["Hookshot Cave - Top Left", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Ocarina']],
|
||||||
|
["Hookshot Cave - Top Left", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Lamp']],
|
||||||
|
|
||||||
|
["Hookshot Cave - Top Right", False, []],
|
||||||
|
["Hookshot Cave - Top Right", False, [], ['Progressive Glove']],
|
||||||
|
["Hookshot Cave - Top Right", False, [], ['Moon Pearl']],
|
||||||
|
["Hookshot Cave - Top Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Ocarina']],
|
||||||
|
["Hookshot Cave - Top Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Lamp']],
|
||||||
|
])
|
||||||
133
test/vanilla/TestEntrances.py
Normal file
133
test/vanilla/TestEntrances.py
Normal file
@@ -0,0 +1,133 @@
|
|||||||
|
from test.vanilla.TestVanilla import TestVanilla
|
||||||
|
|
||||||
|
|
||||||
|
class TestEntrances(TestVanilla):
|
||||||
|
|
||||||
|
def testDungeonEntrances(self):
|
||||||
|
self.run_entrance_tests([
|
||||||
|
["Hyrule Castle Entrance (South)", True, []],
|
||||||
|
|
||||||
|
["Eastern Palace", True, []],
|
||||||
|
|
||||||
|
["Desert Palace Entrance (South)", False, []],
|
||||||
|
["Desert Palace Entrance (South)", False, [], ["Book of Mudora", "Ocarina"]],
|
||||||
|
["Desert Palace Entrance (South)", False, [], ["Book of Mudora", "Magic Mirror"]],
|
||||||
|
["Desert Palace Entrance (South)", False, ["Progressive Glove"], ["Book of Mudora", "Progressive Glove"]],
|
||||||
|
["Desert Palace Entrance (South)", True, ["Book of Mudora"]],
|
||||||
|
["Desert Palace Entrance (South)", True, ["Ocarina", "Progressive Glove", "Progressive Glove", "Magic Mirror"]],
|
||||||
|
["Desert Palace Entrance (North)", False, []],
|
||||||
|
["Desert Palace Entrance (North)", False, [], ["Progressive Glove"]],
|
||||||
|
["Desert Palace Entrance (North)", False, [], ["Book of Mudora", "Ocarina"]],
|
||||||
|
["Desert Palace Entrance (North)", False, [], ["Book of Mudora", "Magic Mirror"]],
|
||||||
|
["Desert Palace Entrance (North)", True, ["Book of Mudora", "Progressive Glove"]],
|
||||||
|
["Desert Palace Entrance (North)", True, ["Ocarina", "Progressive Glove", "Progressive Glove", "Magic Mirror"]],
|
||||||
|
|
||||||
|
["Tower of Hera", False, []],
|
||||||
|
["Tower of Hera", False, [], ["Ocarina", "Progressive Glove"]],
|
||||||
|
["Tower of Hera", False, [], ["Ocarina", "Lamp"]],
|
||||||
|
["Tower of Hera", False, [], ["Magic Mirror", "Hammer"]],
|
||||||
|
["Tower of Hera", False, [], ["Magic Mirror", "Hookshot"]],
|
||||||
|
["Tower of Hera", True, ["Ocarina", "Magic Mirror"]],
|
||||||
|
["Tower of Hera", True, ["Progressive Glove", "Lamp", "Magic Mirror"]],
|
||||||
|
["Tower of Hera", True, ["Ocarina", "Hookshot", "Hammer"]],
|
||||||
|
["Tower of Hera", True, ["Progressive Glove", "Lamp", "Magic Mirror"]],
|
||||||
|
|
||||||
|
["Agahnims Tower", False, []],
|
||||||
|
["Agahnims Tower", False, ["Progressive Sword"], ["Cape", "Progressive Sword", "Beat Agahnim 1"]],
|
||||||
|
["Agahnims Tower", True, ["Cape"]],
|
||||||
|
["Agahnims Tower", True, ["Progressive Sword", "Progressive Sword"]],
|
||||||
|
["Agahnims Tower", True, ["Beat Agahnim 1"]],
|
||||||
|
|
||||||
|
["Palace of Darkness", False, []],
|
||||||
|
["Palace of Darkness", False, [], ["Moon Pearl"]],
|
||||||
|
["Palace of Darkness", False, [], ["Beat Agahnim 1", "Progressive Glove"]],
|
||||||
|
["Palace of Darkness", False, ["Progressive Glove"], ["Beat Agahnim 1", "Hammer", "Progressive Glove"]],
|
||||||
|
["Palace of Darkness", False, [], ["Beat Agahnim 1", "Hammer", "Flippers"]],
|
||||||
|
["Palace of Darkness", True, ["Beat Agahnim 1", "Moon Pearl"]],
|
||||||
|
["Palace of Darkness", True, ["Hammer", "Progressive Glove", "Moon Pearl"]],
|
||||||
|
["Palace of Darkness", True, ["Progressive Glove", "Progressive Glove", "Flippers", "Moon Pearl"]],
|
||||||
|
|
||||||
|
["Swamp Palace", False, []],
|
||||||
|
["Swamp Palace", False, [], ["Moon Pearl"]],
|
||||||
|
["Swamp Palace", False, [], ["Beat Agahnim 1", "Progressive Glove"]],
|
||||||
|
["Swamp Palace", False, ["Progressive Glove"], ["Beat Agahnim 1", "Hammer", "Progressive Glove"]],
|
||||||
|
["Swamp Palace", True, ["Beat Agahnim 1", "Moon Pearl", "Hammer"]],
|
||||||
|
["Swamp Palace", True, ["Beat Agahnim 1", "Moon Pearl", "Hookshot", "Flippers"]],
|
||||||
|
["Swamp Palace", True, ["Beat Agahnim 1", "Moon Pearl", "Hookshot", "Progressive Glove"]],
|
||||||
|
["Swamp Palace", True, ["Hammer", "Progressive Glove", "Moon Pearl"]],
|
||||||
|
["Swamp Palace", True, ["Progressive Glove", "Progressive Glove", "Moon Pearl"]],
|
||||||
|
|
||||||
|
["Thieves Town", False, []],
|
||||||
|
["Thieves Town", False, [], ["Moon Pearl"]],
|
||||||
|
["Thieves Town", False, [], ["Beat Agahnim 1", "Progressive Glove"]],
|
||||||
|
["Thieves Town", False, ["Progressive Glove"], ["Beat Agahnim 1", "Hammer", "Progressive Glove"]],
|
||||||
|
["Thieves Town", True, ["Beat Agahnim 1", "Moon Pearl", "Hookshot", "Flippers"]],
|
||||||
|
["Thieves Town", True, ["Beat Agahnim 1", "Moon Pearl", "Hookshot", "Hammer"]],
|
||||||
|
["Thieves Town", True, ["Beat Agahnim 1", "Moon Pearl", "Hookshot", "Progressive Glove"]],
|
||||||
|
["Thieves Town", True, ["Hammer", "Progressive Glove", "Moon Pearl"]],
|
||||||
|
["Thieves Town", True, ["Progressive Glove", "Progressive Glove", "Moon Pearl"]],
|
||||||
|
|
||||||
|
["Skull Woods First Section Door", False, []],
|
||||||
|
["Skull Woods First Section Door", False, [], ["Moon Pearl"]],
|
||||||
|
["Skull Woods First Section Door", False, [], ["Beat Agahnim 1", "Progressive Glove"]],
|
||||||
|
["Skull Woods First Section Door", False, ["Progressive Glove"], ["Beat Agahnim 1", "Hammer", "Progressive Glove"]],
|
||||||
|
["Skull Woods First Section Door", True, ["Beat Agahnim 1", "Moon Pearl", "Hookshot", "Flippers"]],
|
||||||
|
["Skull Woods First Section Door", True, ["Beat Agahnim 1", "Moon Pearl", "Hookshot", "Hammer"]],
|
||||||
|
["Skull Woods First Section Door", True, ["Beat Agahnim 1", "Moon Pearl", "Hookshot", "Progressive Glove"]],
|
||||||
|
["Skull Woods First Section Door", True, ["Hammer", "Progressive Glove", "Moon Pearl"]],
|
||||||
|
["Skull Woods First Section Door", True, ["Progressive Glove", "Progressive Glove", "Moon Pearl"]],
|
||||||
|
|
||||||
|
["Skull Woods Final Section", False, []],
|
||||||
|
["Skull Woods Final Section", False, [], ["Moon Pearl"]],
|
||||||
|
["Skull Woods Final Section", False, [], ["Fire Rod"]],
|
||||||
|
["Skull Woods Final Section", False, [], ["Beat Agahnim 1", "Progressive Glove"]],
|
||||||
|
["Skull Woods Final Section", False, ["Progressive Glove"], ["Beat Agahnim 1", "Hammer", "Progressive Glove"]],
|
||||||
|
["Skull Woods Final Section", True, ["Beat Agahnim 1", "Moon Pearl", "Hookshot", "Flippers", "Fire Rod"]],
|
||||||
|
["Skull Woods Final Section", True, ["Beat Agahnim 1", "Moon Pearl", "Hookshot", "Hammer", "Fire Rod"]],
|
||||||
|
["Skull Woods Final Section", True, ["Beat Agahnim 1", "Moon Pearl", "Hookshot", "Progressive Glove", "Fire Rod"]],
|
||||||
|
["Skull Woods Final Section", True, ["Hammer", "Progressive Glove", "Moon Pearl", "Fire Rod"]],
|
||||||
|
["Skull Woods Final Section", True, ["Progressive Glove", "Progressive Glove", "Moon Pearl", "Fire Rod"]],
|
||||||
|
|
||||||
|
["Ice Palace", False, []],
|
||||||
|
["Ice Palace", False, [], ["Flippers"]],
|
||||||
|
["Ice Palace", False, ["Progressive Glove"], ["Progressive Glove"]],
|
||||||
|
["Ice Palace", True, ["Progressive Glove", "Progressive Glove", "Flippers"]],
|
||||||
|
|
||||||
|
["Misery Mire", False, []],
|
||||||
|
["Misery Mire", False, [], ["Moon Pearl"]],
|
||||||
|
["Misery Mire", False, [], ["Ocarina"]],
|
||||||
|
["Misery Mire", False, [], ["Ether"]],
|
||||||
|
["Misery Mire", False, [], ["Progressive Sword"]],
|
||||||
|
["Misery Mire", False, ["Progressive Glove"], ["Progressive Glove"]],
|
||||||
|
["Misery Mire", True, ["Progressive Glove", "Progressive Glove", "Ocarina", "Moon Pearl", "Ether", "Progressive Sword"]],
|
||||||
|
|
||||||
|
["Turtle Rock", False, []],
|
||||||
|
["Turtle Rock", False, [], ["Moon Pearl"]],
|
||||||
|
["Turtle Rock", False, [], ["Hammer"]],
|
||||||
|
["Turtle Rock", False, ["Progressive Glove"], ["Progressive Glove"]],
|
||||||
|
["Turtle Rock", False, [], ["Quake"]],
|
||||||
|
["Turtle Rock", False, [], ["Progressive Sword"]],
|
||||||
|
["Turtle Rock", False, [], ["Lamp", "Ocarina"]],
|
||||||
|
["Turtle Rock", False, [], ["Hookshot", "Magic Mirror"]],
|
||||||
|
["Turtle Rock", True, ["Progressive Glove", "Progressive Glove", "Moon Pearl", "Hammer", "Quake", "Progressive Sword", "Lamp", "Hookshot"]],
|
||||||
|
["Turtle Rock", True, ["Progressive Glove", "Progressive Glove", "Moon Pearl", "Hammer", "Quake", "Progressive Sword", "Lamp", "Magic Mirror"]],
|
||||||
|
["Turtle Rock", True, ["Progressive Glove", "Progressive Glove", "Moon Pearl", "Hammer", "Quake", "Progressive Sword", "Ocarina", "Hookshot"]],
|
||||||
|
["Turtle Rock", True, ["Progressive Glove", "Progressive Glove", "Moon Pearl", "Hammer", "Quake", "Progressive Sword", "Ocarina", "Magic Mirror"]],
|
||||||
|
|
||||||
|
["Ganons Tower", False, []],
|
||||||
|
["Ganons Tower", False, ["Progressive Glove"], ["Progressive Glove"]],
|
||||||
|
["Ganons Tower", False, [], ["Lamp", "Ocarina"]],
|
||||||
|
["Ganons Tower", False, [], ["Hookshot", "Hammer"]],
|
||||||
|
["Ganons Tower", False, [], ["Hookshot", "Magic Mirror"]],
|
||||||
|
["Ganons Tower", False, [], ["Crystal 1"]],
|
||||||
|
["Ganons Tower", False, [], ["Crystal 2"]],
|
||||||
|
["Ganons Tower", False, [], ["Crystal 3"]],
|
||||||
|
["Ganons Tower", False, [], ["Crystal 4"]],
|
||||||
|
["Ganons Tower", False, [], ["Crystal 5"]],
|
||||||
|
["Ganons Tower", False, [], ["Crystal 6"]],
|
||||||
|
["Ganons Tower", False, [], ["Crystal 7"]],
|
||||||
|
["Ganons Tower", True, ["Lamp", "Magic Mirror", "Hammer", "Progressive Glove", "Progressive Glove", "Crystal 1", "Crystal 2", "Crystal 3", "Crystal 4", "Crystal 5", "Crystal 6", "Crystal 7"]],
|
||||||
|
["Ganons Tower", True, ["Lamp", "Hookshot", "Progressive Glove", "Progressive Glove", "Crystal 1", "Crystal 2", "Crystal 3", "Crystal 4", "Crystal 5", "Crystal 6", "Crystal 7"]],
|
||||||
|
["Ganons Tower", True, ["Ocarina", "Magic Mirror", "Hammer", "Progressive Glove", "Progressive Glove", "Crystal 1", "Crystal 2", "Crystal 3", "Crystal 4", "Crystal 5", "Crystal 6", "Crystal 7"]],
|
||||||
|
["Ganons Tower", True, ["Ocarina", "Hookshot", "Progressive Glove", "Progressive Glove", "Crystal 1", "Crystal 2", "Crystal 3", "Crystal 4", "Crystal 5", "Crystal 6", "Crystal 7"]],
|
||||||
|
])
|
||||||
197
test/vanilla/TestLightWorld.py
Normal file
197
test/vanilla/TestLightWorld.py
Normal file
@@ -0,0 +1,197 @@
|
|||||||
|
from test.vanilla.TestVanilla import TestVanilla
|
||||||
|
|
||||||
|
|
||||||
|
class TestLightWorld(TestVanilla):
|
||||||
|
|
||||||
|
def testLightWorld(self):
|
||||||
|
self.run_location_tests([
|
||||||
|
["Master Sword Pedestal", False, []],
|
||||||
|
["Master Sword Pedestal", False, [], ['Green Pendant']],
|
||||||
|
["Master Sword Pedestal", False, [], ['Red Pendant']],
|
||||||
|
["Master Sword Pedestal", False, [], ['Blue Pendant']],
|
||||||
|
["Master Sword Pedestal", True, ['Green Pendant', 'Red Pendant', 'Blue Pendant']],
|
||||||
|
|
||||||
|
["Link's Uncle", True, []],
|
||||||
|
|
||||||
|
["Secret Passage", True, []],
|
||||||
|
|
||||||
|
["King's Tomb", False, []],
|
||||||
|
["King's Tomb", False, [], ['Pegasus Boots']],
|
||||||
|
["King's Tomb", True, ['Pegasus Boots', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["King's Tomb", True, ['Pegasus Boots', 'Progressive Glove', 'Hammer', 'Moon Pearl', 'Magic Mirror']],
|
||||||
|
["King's Tomb", True, ['Pegasus Boots', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot', 'Moon Pearl', 'Magic Mirror']],
|
||||||
|
["King's Tomb", True, ['Pegasus Boots', 'Beat Agahnim 1', 'Hammer', 'Hookshot', 'Moon Pearl', 'Magic Mirror']],
|
||||||
|
["King's Tomb", True, ['Pegasus Boots', 'Beat Agahnim 1', 'Flippers', 'Hookshot', 'Moon Pearl', 'Magic Mirror']],
|
||||||
|
|
||||||
|
["Floodgate Chest", True, []],
|
||||||
|
|
||||||
|
["Link's House", True, []],
|
||||||
|
|
||||||
|
["Kakariko Tavern", True, []],
|
||||||
|
|
||||||
|
["Chicken House", True, []],
|
||||||
|
|
||||||
|
["Aginah's Cave", True, []],
|
||||||
|
|
||||||
|
["Sahasrahla's Hut - Left", True, []],
|
||||||
|
|
||||||
|
["Sahasrahla's Hut - Middle", True, []],
|
||||||
|
|
||||||
|
["Sahasrahla's Hut - Right", True, []],
|
||||||
|
|
||||||
|
["Kakariko Well - Top", True, []],
|
||||||
|
|
||||||
|
["Kakariko Well - Left", True, []],
|
||||||
|
|
||||||
|
["Kakariko Well - Middle", True, []],
|
||||||
|
|
||||||
|
["Kakariko Well - Right", True, []],
|
||||||
|
|
||||||
|
["Kakariko Well - Bottom", True, []],
|
||||||
|
|
||||||
|
["Blind's Hideout - Top", True, []],
|
||||||
|
|
||||||
|
["Blind's Hideout - Left", True, []],
|
||||||
|
|
||||||
|
["Blind's Hideout - Right", True, []],
|
||||||
|
|
||||||
|
["Blind's Hideout - Far Left", True, []],
|
||||||
|
|
||||||
|
["Blind's Hideout - Far Right", True, []],
|
||||||
|
|
||||||
|
["Bonk Rock Cave", False, []],
|
||||||
|
["Bonk Rock Cave", False, [], ['Pegasus Boots']],
|
||||||
|
["Bonk Rock Cave", True, ['Pegasus Boots']],
|
||||||
|
|
||||||
|
["Mini Moldorm Cave - Far Left", True, []],
|
||||||
|
|
||||||
|
["Mini Moldorm Cave - Left", True, []],
|
||||||
|
|
||||||
|
["Mini Moldorm Cave - Right", True, []],
|
||||||
|
|
||||||
|
["Mini Moldorm Cave - Far Right", True, []],
|
||||||
|
|
||||||
|
["Ice Rod Cave", True, []],
|
||||||
|
|
||||||
|
["Bottle Merchant", True, []],
|
||||||
|
|
||||||
|
["Sahasrahla", False, []],
|
||||||
|
["Sahasrahla", False, [], ['Green Pendant']],
|
||||||
|
["Sahasrahla", True, ['Green Pendant']],
|
||||||
|
|
||||||
|
["Magic Bat", False, []],
|
||||||
|
["Magic Bat", False, [], ['Magic Powder']],
|
||||||
|
["Magic Bat", False, [], ['Hammer', 'Magic Mirror']],
|
||||||
|
["Magic Bat", False, [], ['Hammer', 'Moon Pearl']],
|
||||||
|
["Magic Bat", False, ['Progressive Glove'], ['Hammer', 'Progressive Glove']],
|
||||||
|
["Magic Bat", True, ['Magic Powder', 'Hammer']],
|
||||||
|
["Magic Bat", True, ['Magic Powder', 'Progressive Glove', 'Progressive Glove', 'Moon Pearl', 'Magic Mirror']],
|
||||||
|
|
||||||
|
["Sick Kid", False, []],
|
||||||
|
["Sick Kid", False, [], ['AnyBottle']],
|
||||||
|
["Sick Kid", True, ['Bottle (Bee)']],
|
||||||
|
["Sick Kid", True, ['Bottle (Fairy)']],
|
||||||
|
["Sick Kid", True, ['Bottle (Red Potion)']],
|
||||||
|
["Sick Kid", True, ['Bottle (Green Potion)']],
|
||||||
|
["Sick Kid", True, ['Bottle (Blue Potion)']],
|
||||||
|
["Sick Kid", True, ['Bottle']],
|
||||||
|
["Sick Kid", True, ['Bottle (Good Bee)']],
|
||||||
|
|
||||||
|
["Hobo", False, []],
|
||||||
|
["Hobo", False, [], ['Flippers']],
|
||||||
|
["Hobo", True, ['Flippers']],
|
||||||
|
|
||||||
|
["Bombos Tablet", False, []],
|
||||||
|
["Bombos Tablet", False, [], ['Magic Mirror']],
|
||||||
|
["Bombos Tablet", False, ['Progressive Sword'], ['Progressive Sword']],
|
||||||
|
["Bombos Tablet", False, [], ['Book of Mudora']],
|
||||||
|
["Bombos Tablet", False, [], ['Moon Pearl']],
|
||||||
|
["Bombos Tablet", True, ['Moon Pearl', 'Magic Mirror', 'Book of Mudora', 'Progressive Sword', 'Progressive Sword', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Bombos Tablet", True, ['Moon Pearl', 'Magic Mirror', 'Book of Mudora', 'Progressive Sword', 'Progressive Sword', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Bombos Tablet", True, ['Moon Pearl', 'Magic Mirror', 'Book of Mudora', 'Progressive Sword', 'Progressive Sword', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Bombos Tablet", True, ['Moon Pearl', 'Magic Mirror', 'Book of Mudora', 'Progressive Sword', 'Progressive Sword', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Bombos Tablet", True, ['Moon Pearl', 'Magic Mirror', 'Book of Mudora', 'Progressive Sword', 'Progressive Sword', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["King Zora", False, []],
|
||||||
|
["King Zora", False, [], ['Progressive Glove', 'Flippers']],
|
||||||
|
["King Zora", True, ['Flippers']],
|
||||||
|
["King Zora", True, ['Progressive Glove']],
|
||||||
|
|
||||||
|
["Lost Woods Hideout", True, []],
|
||||||
|
|
||||||
|
["Lumberjack Tree", False, []],
|
||||||
|
["Lumberjack Tree", False, [], ['Pegasus Boots']],
|
||||||
|
["Lumberjack Tree", False, [], ['Beat Agahnim 1']],
|
||||||
|
["Lumberjack Tree", True, ['Pegasus Boots', 'Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Cave 45", False, []],
|
||||||
|
["Cave 45", False, [], ['Magic Mirror']],
|
||||||
|
["Cave 45", False, [], ['Moon Pearl']],
|
||||||
|
["Cave 45", True, ['Moon Pearl', 'Magic Mirror', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Cave 45", True, ['Moon Pearl', 'Magic Mirror', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Cave 45", True, ['Moon Pearl', 'Magic Mirror', 'Beat Agahnim 1', 'Hammer']],
|
||||||
|
["Cave 45", True, ['Moon Pearl', 'Magic Mirror', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Cave 45", True, ['Moon Pearl', 'Magic Mirror', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Graveyard Cave", False, []],
|
||||||
|
["Graveyard Cave", False, [], ['Magic Mirror']],
|
||||||
|
["Graveyard Cave", False, [], ['Moon Pearl']],
|
||||||
|
["Graveyard Cave", True, ['Moon Pearl', 'Magic Mirror', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Graveyard Cave", True, ['Moon Pearl', 'Magic Mirror', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Graveyard Cave", True, ['Moon Pearl', 'Magic Mirror', 'Beat Agahnim 1', 'Hammer', 'Hookshot']],
|
||||||
|
["Graveyard Cave", True, ['Moon Pearl', 'Magic Mirror', 'Beat Agahnim 1', 'Progressive Glove', 'Hookshot']],
|
||||||
|
["Graveyard Cave", True, ['Moon Pearl', 'Magic Mirror', 'Beat Agahnim 1', 'Flippers', 'Hookshot']],
|
||||||
|
|
||||||
|
["Checkerboard Cave", False, []],
|
||||||
|
["Checkerboard Cave", False, [], ['Progressive Glove']],
|
||||||
|
["Checkerboard Cave", False, [], ['Ocarina']],
|
||||||
|
["Checkerboard Cave", False, [], ['Magic Mirror']],
|
||||||
|
["Checkerboard Cave", True, ['Ocarina', 'Magic Mirror', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
|
||||||
|
["Mini Moldorm Cave - Generous Guy", True, []],
|
||||||
|
|
||||||
|
["Library", False, []],
|
||||||
|
["Library", False, [], ['Pegasus Boots']],
|
||||||
|
["Library", True, ['Pegasus Boots']],
|
||||||
|
|
||||||
|
["Mushroom", True, []],
|
||||||
|
|
||||||
|
["Potion Shop", False, []],
|
||||||
|
["Potion Shop", False, [], ['Mushroom']],
|
||||||
|
["Potion Shop", True, ['Mushroom']],
|
||||||
|
|
||||||
|
["Maze Race", True, []],
|
||||||
|
|
||||||
|
["Desert Ledge", False, []],
|
||||||
|
["Desert Ledge", False, [], ['Book of Mudora', 'Ocarina']],
|
||||||
|
["Desert Ledge", False, [], ['Book of Mudora', 'Magic Mirror']],
|
||||||
|
["Desert Ledge", False, ['Progressive Glove'], ['Book of Mudora', 'Progressive Glove']],
|
||||||
|
["Desert Ledge", True, ['Book of Mudora']],
|
||||||
|
["Desert Ledge", True, ['Ocarina', 'Magic Mirror', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
|
||||||
|
["Lake Hylia Island", False, []],
|
||||||
|
["Lake Hylia Island", False, [], ['Magic Mirror']],
|
||||||
|
["Lake Hylia Island", False, [], ['Moon Pearl']],
|
||||||
|
["Lake Hylia Island", False, [], ['Flippers']],
|
||||||
|
["Lake Hylia Island", True, ['Flippers', 'Moon Pearl', 'Magic Mirror', 'Progressive Glove', 'Progressive Glove']],
|
||||||
|
["Lake Hylia Island", True, ['Flippers', 'Moon Pearl', 'Magic Mirror', 'Progressive Glove', 'Hammer']],
|
||||||
|
["Lake Hylia Island", True, ['Flippers', 'Moon Pearl', 'Magic Mirror', 'Beat Agahnim 1']],
|
||||||
|
|
||||||
|
["Sunken Treasure", True, []],
|
||||||
|
|
||||||
|
["Zora's Ledge", False, []],
|
||||||
|
["Zora's Ledge", False, [], ['Flippers']],
|
||||||
|
["Zora's Ledge", True, ['Flippers']],
|
||||||
|
|
||||||
|
["Flute Spot", False, []],
|
||||||
|
["Flute Spot", False, [], ['Shovel']],
|
||||||
|
["Flute Spot", True, ['Shovel']],
|
||||||
|
|
||||||
|
["Waterfall Fairy - Left", False, []],
|
||||||
|
["Waterfall Fairy - Left", False, [], ['Flippers']],
|
||||||
|
["Waterfall Fairy - Left", True, ['Flippers']],
|
||||||
|
|
||||||
|
["Waterfall Fairy - Right", False, []],
|
||||||
|
["Waterfall Fairy - Right", False, [], ['Flippers']],
|
||||||
|
["Waterfall Fairy - Right", True, ['Flippers']],
|
||||||
|
])
|
||||||
27
test/vanilla/TestVanilla.py
Normal file
27
test/vanilla/TestVanilla.py
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
from BaseClasses import World
|
||||||
|
from Dungeons import create_dungeons, get_dungeon_item_pool
|
||||||
|
from EntranceShuffle import link_entrances
|
||||||
|
from InvertedRegions import mark_dark_world_regions
|
||||||
|
from ItemList import difficulties, generate_itempool
|
||||||
|
from Items import ItemFactory
|
||||||
|
from Regions import create_regions
|
||||||
|
from Rules import set_rules
|
||||||
|
from test.TestBase import TestBase
|
||||||
|
|
||||||
|
|
||||||
|
class TestVanilla(TestBase):
|
||||||
|
def setUp(self):
|
||||||
|
self.world = World(1, 'vanilla', 'noglitches', 'open', 'random', 'normal', 'normal', 'none', 'on', 'ganon', 'balanced', True, 'items',
|
||||||
|
True, False, False, False, False, False, False, None, 'none', False)
|
||||||
|
self.world.difficulty_requirements = difficulties['normal']
|
||||||
|
create_regions(self.world, 1)
|
||||||
|
create_dungeons(self.world, 1)
|
||||||
|
link_entrances(self.world, 1)
|
||||||
|
generate_itempool(self.world, 1)
|
||||||
|
self.world.required_medallions[1] = ['Ether', 'Quake']
|
||||||
|
self.world.itempool.extend(get_dungeon_item_pool(self.world))
|
||||||
|
self.world.itempool.extend(ItemFactory(['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], 1))
|
||||||
|
self.world.get_location('Agahnim 1', 1).item = None
|
||||||
|
self.world.get_location('Agahnim 2', 1).item = None
|
||||||
|
mark_dark_world_regions(self.world)
|
||||||
|
set_rules(self.world, 1)
|
||||||
0
test/vanilla/__init__.py
Normal file
0
test/vanilla/__init__.py
Normal file
Reference in New Issue
Block a user