diff --git a/EntranceShuffle.py b/EntranceShuffle.py index aca8c895..b1d3a97d 100644 --- a/EntranceShuffle.py +++ b/EntranceShuffle.py @@ -2926,6 +2926,7 @@ mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia Central ('Cave 45 Mirror Spot', 'Cave 45 Ledge'), ('Bombos Tablet Mirror Spot', 'Bombos Tablet Ledge'), ('Graveyard Ledge Mirror Spot', 'Graveyard Ledge'), + ('Superbunny Cave Climb', 'Superbunny Cave (Top)'), ('Swamp Palace Moat', 'Swamp Palace (First Room)'), ('Swamp Palace Small Key Door', 'Swamp Palace (Starting Area)'), @@ -2996,6 +2997,7 @@ mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia Central ('Floating Island Clip Spot', 'Death Mountain Floating Island (Light World)'), ('Dark Death Mountain Ledge Clip Spot', 'Dark Death Mountain Ledge'), ('Zora Descent Clip Spot', 'Zoras River'), + #todo: Entrances shouldn't lead to multiple regions. This currently works, but it's fragile ('Graveyard Ledge Clip Spot', 'Graveyard Ledge'), ('Graveyard Ledge Clip Spot', 'Kings Grave Area'), ('Desert Northern Cliffs', 'Desert Ledge'), @@ -3103,6 +3105,7 @@ inverted_mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia ('Fairy Ascension Cave Pots', 'Fairy Ascension Cave (Bottom)'), ('Fairy Ascension Cave Drop', 'Fairy Ascension Cave (Drop)'), ('Dark Death Mountain Drop (East)', 'Dark Death Mountain (East Bottom)'), + ('Superbunny Cave Climb', 'Superbunny Cave (Top)'), ('Swamp Palace Moat', 'Swamp Palace (First Room)'), ('Swamp Palace Small Key Door', 'Swamp Palace (Starting Area)'), ('Swamp Palace (Center)', 'Swamp Palace (Center)'), @@ -3214,7 +3217,7 @@ inverted_mandatory_connections = [('Lake Hylia Central Island Pier', 'Lake Hylia ('West Dark World Mirror Spot', 'West Dark World'), ('South Dark World Mirror Spot', 'South 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'), ('Skull Woods Mirror Spot', 'Skull Woods Forest (West)'), ('DDM Flute', 'The Sky'), @@ -3402,10 +3405,10 @@ default_connections = [('Waterfall of Wishing', 'Waterfall of Wishing'), ('Dark Desert Fairy', 'Dark Desert Healer Fairy'), ('Spike Cave', 'Spike 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)'), ('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 (Bottom)', 'Dark Death Mountain (East Bottom)'), ('Hookshot Cave Exit (South)', 'Dark Death Mountain (Top)'), @@ -3536,9 +3539,9 @@ inverted_default_connections = [('Waterfall of Wishing', 'Waterfall of Wishing' ('Dark Desert Fairy', 'Dark Desert Healer Fairy'), ('Spike Cave', 'Spike 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)'), - ('Superbunny Cave (Bottom)', 'Superbunny Cave'), + ('Superbunny Cave (Bottom)', 'Superbunny Cave (Bottom)'), ('Superbunny Cave Exit (Bottom)', 'Dark Death Mountain (East Bottom)'), ('Hookshot Cave Exit (North)', 'Death Mountain Floating Island (Dark World)'), ('Hookshot Cave Back Entrance', 'Hookshot Cave'), diff --git a/InvertedRegions.py b/InvertedRegions.py index 10445ce6..bd4b4051 100644 --- a/InvertedRegions.py +++ b/InvertedRegions.py @@ -30,7 +30,7 @@ def create_inverted_regions(world, player): "Blind\'s Hideout - Right", "Blind\'s Hideout - Far Left", "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', 'Potion Shop Outer Rock', 'Catfish Mirror Spot', 'Northeast Light World Warp']), 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, 'River', None, ['Light World Pier', 'Potion Shop Pier']), @@ -166,13 +166,13 @@ 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)', 'Dark Lake Hylia Fairy', 'Palace of Darkness Hint', 'East Dark World Hint', 'Northeast Dark World Broken Bridge Pass', 'East Dark World Teleporter', 'EDW Flute', - 'Hammer Pegs River Clip Spot', 'Dark Lake Hylia Ledge Clip Spot', 'Dark Desert Cliffs Clip Spot']), + 'Hammer Pegs River Clip Spot', 'Dark Lake Hylia Ledge Clip Spot']), 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, '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)', - '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', 'Dark Desert Cliffs Clip Spot']), create_cave_region(player, 'Inverted Big Bomb Shop', 'the bomb shop'), 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']), @@ -215,8 +215,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, '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_cave_region(player, 'Superbunny Cave', 'a connector', ['Superbunny Cave - Top', 'Superbunny Cave - Bottom'], - ['Superbunny Cave Exit (Top)', 'Superbunny Cave Exit (Bottom)']), + create_cave_region(player, 'Superbunny Cave (Top)', 'a connector', ['Superbunny Cave - Top', 'Superbunny Cave - Bottom'], ['Superbunny Cave Exit (Top)']), + 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, '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)']), diff --git a/OWGSets.py b/OWGSets.py index 4fe91c1f..d330c210 100644 --- a/OWGSets.py +++ b/OWGSets.py @@ -47,15 +47,10 @@ def get_invalid_mirror_bunny_entrances_dw(): def get_invalid_mirror_bunny_entrances_lw(): """ Light World entrances that can't be superbunny-mirrored into. - - A couple of these, like Blind's Hideout, are odd cases where the pixel - leading into the entrance prevents mirror superbunnying - generally due to - there being stairs there. """ yield 'Bonk Rock Cave' yield 'Bonk Fairy (Light)' - yield 'Blinds Hideout' yield '50 Rupee Cave' yield '20 Rupee Cave' yield 'Checkerboard Cave' @@ -64,9 +59,10 @@ def get_invalid_mirror_bunny_entrances_lw(): yield 'Light World Bomb Hut' yield 'Mini Moldorm Cave' yield 'Ice Rod Cave' - yield 'Hyrule Castle Secret Entrance Stairs' yield 'Sanctuary Grave' yield 'Kings Grave' + #todo: you can for insanity shuffle + yield 'Hyrule Castle Secret Entrance Stairs' yield 'Tower of Hera' @@ -77,7 +73,8 @@ def get_superbunny_accessible_locations(): yield 'Waterfall of Wishing - Left' yield 'Waterfall of Wishing - Right' - yield 'King\'s Tomb', 'Floodgate' + yield 'King\'s Tomb' + yield 'Floodgate' yield 'Floodgate Chest' yield 'Cave 45' yield 'Bonk Rock Cave' @@ -92,6 +89,17 @@ def get_superbunny_accessible_locations(): 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' def get_boots_clip_exits_lw(inverted = False): @@ -109,8 +117,9 @@ def get_boots_clip_exits_lw(inverted = False): yield 'Lake Hylia Island Clip Spot' yield 'Death Mountain Descent' yield 'Graveyard Ledge Clip Spot' + # TODO: This is not an OWG only entrance # Also requires a waterwalk setup, but the point still remains. - yield 'Waterfall of Wishing' + # yield 'Waterfall of Wishing' if not inverted: yield 'Spectacle Rock Clip Spot' @@ -169,3 +178,4 @@ def get_invalid_bunny_revival_dungeons(): yield 'Tower of Hera (Bottom)' yield 'Swamp Palace (Entrance)' yield 'Turtle Rock (Entrance)' + yield 'Sanctuary' diff --git a/Regions.py b/Regions.py index a5f70d10..3b538820 100644 --- a/Regions.py +++ b/Regions.py @@ -205,8 +205,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 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_cave_region(player, 'Superbunny Cave', 'a connector', ['Superbunny Cave - Top', 'Superbunny Cave - Bottom'], - ['Superbunny Cave Exit (Top)', 'Superbunny Cave Exit (Bottom)']), + create_cave_region(player, 'Superbunny Cave (Top)', 'a connector', ['Superbunny Cave - Top', 'Superbunny Cave - Bottom'], ['Superbunny Cave Exit (Top)']), + 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, '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)']), diff --git a/Rules.py b/Rules.py index c6157412..17609030 100644 --- a/Rules.py +++ b/Rules.py @@ -58,6 +58,8 @@ def set_rules(world, player): if world.mode[player] != 'inverted': set_big_bomb_rules(world, player) + if world.logic[player] == 'owglitches': + add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.can_reach('Dark Death Mountain (West Bottom)', 'Region', player) and state.has_Mirror(player), 'or') else: set_inverted_big_bomb_rules(world, player) @@ -71,6 +73,8 @@ def set_rules(world, player): set_trock_key_rules(world, player) set_rule(ganons_tower, lambda state: state.has_crystals(world.crystals_needed_for_gt[player], player)) + if world.mode[player] != 'inverted' and world.logic[player] == 'owglitches': + add_rule(world.get_entrance('Ganons Tower', player), lambda state: state.world.get_entrance('Ganons Tower Ascent', player).can_reach(state), 'or') if world.mode[player] != 'inverted': set_bunny_rules(world, player) @@ -159,7 +163,8 @@ def global_rules(world, player): set_rule(world.get_entrance('Sewers Back Door', player), lambda state: state.has_key('Small Key (Escape)', player)) set_rule(world.get_entrance('Agahnim 1', player), lambda state: state.has_sword(player) and state.has_key('Small Key (Agahnims Tower)', player, 2)) set_defeat_dungeon_boss_rule(world.get_location('Agahnim 1', player)) - set_rule(world.get_location('Castle Tower - Dark Maze', player), lambda state: state.has_key('Small Key (Agahnims Tower)', player)) + set_rule(world.get_location('Castle Tower - Room 03', player), lambda state: state.can_kill_most_things(player, 8)) + set_rule(world.get_location('Castle Tower - Dark Maze', player), lambda state: state.can_kill_most_things(player, 8) and state.has_key('Small Key (Agahnims Tower)', player)) set_rule(world.get_location('Eastern Palace - Big Chest', player), lambda state: state.has('Big Key (Eastern Palace)', player)) set_rule(world.get_location('Eastern Palace - Boss', player), lambda state: state.can_shoot_arrows(player) and state.has('Big Key (Eastern Palace)', player) and world.get_location('Eastern Palace - Boss', player).parent_region.dungeon.boss.can_defeat(state)) @@ -383,6 +388,7 @@ def default_rules(world, player): set_rule(world.get_entrance('South Hyrule Teleporter', player), lambda state: state.has('Hammer', player) and state.can_lift_rocks(player) and state.has_Pearl(player)) # bunny cannot use hammer set_rule(world.get_entrance('Kakariko Teleporter', player), lambda state: ((state.has('Hammer', player) and state.can_lift_rocks(player)) or state.can_lift_heavy_rocks(player)) and state.has_Pearl(player)) # bunny cannot lift bushes set_rule(world.get_location('Flute Spot', player), lambda state: state.has('Shovel', player)) + set_rule(world.get_entrance('Bat Cave Drop Ledge', player), lambda state: state.has('Hammer', player)) set_rule(world.get_location('Zora\'s Ledge', player), lambda state: state.has('Flippers', player)) set_rule(world.get_entrance('Waterfall of Wishing', player), lambda state: state.has('Flippers', 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 @@ -502,7 +508,7 @@ def inverted_rules(world, 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('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 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)) @@ -562,7 +568,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('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('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)) @@ -601,7 +607,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 (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('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('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 (!) @@ -613,7 +618,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('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('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('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)) @@ -650,7 +655,6 @@ def no_glitches_rules(world, player): set_rule(world.get_entrance('Dark Lake Hylia Teleporter', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player) and (state.has('Hammer', player) or state.can_lift_rocks(player))) set_rule(world.get_entrance('Dark Lake Hylia Ledge Drop', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) else: - set_rule(world.get_entrance('Bat Cave Drop Ledge', player), lambda state: state.has('Hammer', player)) set_rule(world.get_entrance('Zoras River', player), lambda state: state.has_Pearl(player) and (state.has('Flippers', player) or state.can_lift_rocks(player))) set_rule(world.get_entrance('Lake Hylia Central Island Pier', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) # can be fake flippered to set_rule(world.get_entrance('Lake Hylia Island Pier', player), lambda state: state.has_Pearl(player) and state.has('Flippers', player)) # can be fake flippered to @@ -777,11 +781,10 @@ def overworld_glitches_rules(world, player): # Regions that require the boots and some other stuff. if world.mode[player] != 'inverted': - set_rule(world.get_entrance('Dark Desert Teleporter', player), lambda state: state.has('Flute', player) or (state.can_boots_clip_dw(player) and state.can_lift_heavy_rocks(player))) - set_rule(world.get_entrance('Turtle Rock Teleporter', player), lambda state: (state.can_boots_clip_dw(player) or state.can_lift_heavy_rocks(player)) and state.has('Hammer', player)) + set_rule(world.get_entrance('Dark Desert Teleporter', player), lambda state: (state.has('Flute', player) or state.can_boots_clip_lw(player)) and state.can_lift_heavy_rocks(player)) + set_rule(world.get_entrance('Turtle Rock Teleporter', player), lambda state: (state.can_boots_clip_lw(player) or state.can_lift_heavy_rocks(player)) and state.has('Hammer', player)) add_rule(world.get_entrance('Catfish Exit Rock', player), lambda state: state.can_boots_clip_dw(player), 'or') add_rule(world.get_entrance('East Dark World Broken Bridge Pass', player), lambda state: state.can_boots_clip_dw(player), 'or') - add_rule(world.get_entrance('Pyramid Fairy', player), lambda state: state.can_reach('Dark Death Mountain (West Bottom)', 'Region', player) and state.has_Mirror(player)) else: add_rule(world.get_entrance('South Dark World Teleporter', player), lambda state: state.has_Boots(player) and state.can_lift_rocks(player), 'or') @@ -1355,7 +1358,6 @@ def set_bunny_rules(world, player): 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'] - def path_to_access_rule(path, entrance): return lambda state: state.can_reach(entrance) and all(rule(state) for rule in path) @@ -1366,11 +1368,15 @@ def set_bunny_rules(world, player): # In OWG, a location can potentially be superbunny-mirror accessible or # bunny revival accessible. if world.logic[player] == 'owglitches': + if region.name == 'Swamp Palace (Entrance)': + return lambda state: state.has_Pearl(player) if region.name in OWGSets.get_invalid_bunny_revival_dungeons(): return lambda state: state.has_Mirror(player) or state.has_Pearl(player) - if not any([ - None not in [location, connecting_entrance] and location.name in OWGSets.get_superbunny_accessible_locations() and connecting_entrance.name not in OWGSets.get_invalid_mirror_bunny_entrances_dw(), - not region.is_light_world]): + if region.type == RegionType.Dungeon: + return lambda state: True + if (((location is None or location.name not in OWGSets.get_superbunny_accessible_locations()) + or (connecting_entrance is not None and connecting_entrance.name in OWGSets.get_invalid_bunny_revival_dungeons())) + and not region.is_light_world): return lambda state: state.has_Pearl(player) else: if not region.is_light_world: @@ -1400,10 +1406,13 @@ def set_bunny_rules(world, player): if not new_region.is_light_world: # For OWG, establish superbunny and revival rules. if world.logic[player] == 'owglitches' and entrance.name not in OWGSets.get_invalid_mirror_bunny_entrances_dw(): - for location in entrance.connected_region.locations: - if location.name in OWGSets.get_superbunny_accessible_locations(): + if location is not None and location.name in OWGSets.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)) - continue + if new_region.type != RegionType.Cave: + continue else: continue if new_region.is_dark_world: @@ -1428,16 +1437,14 @@ def set_bunny_rules(world, player): # Add requirements for all locations that are actually in the dark world, except those available to the bunny, including dungeon revival for entrance in world.get_entrances(): - if entrance.player == player and entrance.parent_region.is_dark_world: + if entrance.player == player and entrance.connected_region.is_dark_world: if world.logic[player] == 'owglitches': if entrance.connected_region.type == RegionType.Dungeon: - if entrance.connected_region.name in OWGSets.get_invalid_bunny_revival_dungeons(): + if entrance.parent_region.type != RegionType.Dungeon and entrance.connected_region.name in OWGSets.get_invalid_bunny_revival_dungeons(): add_rule(entrance, get_rule_to_add(entrance.connected_region, None, entrance)) 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)) - if entrance.name in OWGSets.get_invalid_mirror_bunny_entrances_dw(): - continue for location in entrance.connected_region.locations: if world.logic[player] == 'owglitches' and entrance.name in OWGSets.get_invalid_mirror_bunny_entrances_dw(): add_rule(location, get_rule_to_add(entrance.connected_region, location, entrance)) @@ -1451,7 +1458,7 @@ def set_inverted_bunny_rules(world, player): # Note spiral cave may be technically passible, but it would be too absurd to require since OHKO mode is a thing. bunny_impassable_caves = ['Bumper Cave', 'Two Brothers House', 'Hookshot Cave', 'Skull Woods First Section (Right)', 'Skull Woods First Section (Left)', 'Skull Woods First Section (Top)', 'Turtle Rock (Entrance)', 'Turtle Rock (Second Section)', 'Turtle Rock (Big Chest)', 'Skull Woods Second Section (Drop)', 'Turtle Rock (Eye Bridge)', 'Sewers', 'Pyramid', 'Spiral Cave (Top)', 'Desert Palace Main (Inner)', 'Fairy Ascension Cave (Drop)', 'The Sky'] - bunny_accessible_locations = ['Link\'s Uncle', 'Sahasrahla', 'Sick Kid', 'Lost Woods Hideout', 'Lumberjack Tree', 'Checkerboard Cave', 'Potion Shop', 'Spectacle Rock Cave', 'Pyramid', 'Hype Cave - Generous Guy', 'Peg Cave', 'Bumper Cave Ledge', 'Dark Blacksmith Ruins', 'Bombos Tablet Ledge', 'Ether Tablet', 'Purple Chest'] + 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'] def path_to_access_rule(path, entrance): return lambda state: state.can_reach(entrance) and all(rule(state) for rule in path) @@ -1463,11 +1470,15 @@ def set_inverted_bunny_rules(world, player): # In OWG, a location can potentially be superbunny-mirror accessible or # bunny revival accessible. if world.logic[player] == 'owglitches': + if region.name == 'Swamp Palace (Entrance)': + return lambda state: state.has_Pearl(player) if region.name in OWGSets.get_invalid_bunny_revival_dungeons(): return lambda state: state.has_Mirror(player) or state.has_Pearl(player) - if not any([ - None not in [location, connecting_entrance] and location.name in OWGSets.get_superbunny_accessible_locations() and connecting_entrance.name not in OWGSets.get_invalid_mirror_bunny_entrances_lw(), - not region.is_dark_world]): + if region.type == RegionType.Dungeon: + return lambda state: True + if (((location is None or location.name not in OWGSets.get_superbunny_accessible_locations()) + or (connecting_entrance is not None and connecting_entrance.name in OWGSets.get_invalid_bunny_revival_dungeons())) + and not region.is_dark_world): return lambda state: state.has_Pearl(player) else: if not region.is_dark_world: @@ -1496,10 +1507,13 @@ def set_inverted_bunny_rules(world, player): if not new_region.is_dark_world: # For OWG, establish superbunny and revival rules. if world.logic[player] == 'owglitches' and entrance.name not in OWGSets.get_invalid_mirror_bunny_entrances_lw(): - for location in entrance.connected_region.locations: - if location.name in OWGSets.get_superbunny_accessible_locations(): + if location is not None and location.name in OWGSets.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)) - continue + if new_region.type != RegionType.Cave: + continue else: continue if new_region.is_light_world: @@ -1524,16 +1538,14 @@ def set_inverted_bunny_rules(world, player): # Add requirements for all locations that are actually in the light world, except those available to the bunny, including dungeon revival for entrance in world.get_entrances(): - if entrance.player == player and entrance.parent_region.is_light_world: + if entrance.player == player and entrance.connected_region.is_light_world: if world.logic[player] == 'owglitches': if entrance.connected_region.type == RegionType.Dungeon: - if entrance.connected_region.name in OWGSets.get_invalid_bunny_revival_dungeons(): + if entrance.parent_region.type != RegionType.Dungeon and entrance.connected_region.name in OWGSets.get_invalid_bunny_revival_dungeons(): add_rule(entrance, get_rule_to_add(entrance.connected_region, None, entrance)) 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)) - if entrance.name in OWGSets.get_invalid_mirror_bunny_entrances_lw(): - continue for location in entrance.connected_region.locations: if world.logic[player] == 'owglitches' and entrance.name in OWGSets.get_invalid_mirror_bunny_entrances_lw(): add_rule(location, get_rule_to_add(entrance.connected_region, location, entrance)) diff --git a/test/TestBase.py b/test/TestBase.py new file mode 100644 index 00000000..df5c981f --- /dev/null +++ b/test/TestBase.py @@ -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) \ No newline at end of file diff --git a/test/TestDeathMountain.py b/test/TestDeathMountain.py index 7ea01ea1..43fffa40 100644 --- a/test/TestDeathMountain.py +++ b/test/TestDeathMountain.py @@ -1,25 +1,10 @@ -from BaseClasses import World -from Dungeons import create_dungeons -from EntranceShuffle import link_entrances -from ItemList import difficulties -from Regions import create_regions -from Rules import set_rules -from test.TestVanilla import TestVanilla +from test.vanilla.TestVanilla import TestVanilla class TestDeathMountain(TestVanilla): - def setUp(self): - self.world = World(1, 'vanilla', 'noglitches', 'open', '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_regions(self.world, 1) - create_dungeons(self.world, 1) - link_entrances(self.world, 1) - set_rules(self.world, 1) def testWestDeathMountain(self): - self.run_tests([ + self.run_location_tests([ ["Ether Tablet", False, []], ["Ether Tablet", False, [], ['Progressive Glove', 'Flute']], ["Ether Tablet", False, [], ['Lamp', 'Flute']], diff --git a/test/TestVanilla.py b/test/TestVanilla.py deleted file mode 100644 index 3bf4a67e..00000000 --- a/test/TestVanilla.py +++ /dev/null @@ -1,41 +0,0 @@ -import unittest - -from BaseClasses import World, CollectionState -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 -from Items import ItemFactory -from Regions import create_regions -from Rules import set_rules - - -class TestVanilla(unittest.TestCase): - def setUp(self): - self.world = World(1, 'vanilla', 'noglitches', 'open', '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_regions(self.world, 1) - create_dungeons(self.world, 1) - link_entrances(self.world, 1) - mark_dark_world_regions(self.world) - set_rules(self.world, 1) - - def run_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 = CollectionState(self.world) - for item in items: - item.advancement = True - state.collect(item) - - self.assertEqual(self.world.get_location(location, 1).can_reach(state), access) \ No newline at end of file diff --git a/test/dungeons/TestDungeon.py b/test/dungeons/TestDungeon.py index 1eb3cc7b..9caf64e4 100644 --- a/test/dungeons/TestDungeon.py +++ b/test/dungeons/TestDungeon.py @@ -5,22 +5,22 @@ from Dungeons import create_dungeons, get_dungeon_item_pool from EntranceShuffle import mandatory_connections, connect_simple from ItemList import difficulties, generate_itempool from Items import ItemFactory -from Regions import create_regions +from Regions import create_regions, create_shops from Rules import set_rules class TestDungeon(unittest.TestCase): def setUp(self): - self.world = World(1, 'vanilla', 'noglitches', 'open', 'random', 'normal', 'normal', 'none', 'on', 'ganon', 'balanced', - True, False, False, False, False, False, False, False, False, None, - 'none', False) + self.world = World(1, {1:'vanilla'}, {1:'noglitches'}, {1:'open'}, {1:'random'}, {1:'normal'}, {1:'normal'}, {1:False}, {1:'on'}, {1:'ganon'}, 'balanced', {1:'items'}, + True, {1:False}, False, None, {1:False}) self.starting_regions = [] - self.world.difficulty_requirements = difficulties['normal'] + self.world.difficulty_requirements[1] = difficulties['normal'] create_regions(self.world, 1) create_dungeons(self.world, 1) + create_shops(self.world, 1) for exitname, regionname in mandatory_connections: connect_simple(self.world, exitname, regionname, 1) - connect_simple(self.world, self.world.get_entrance('Big Bomb Shop', 1), self.world.get_region('Big Bomb Shop', 1), 1) + connect_simple(self.world, 'Big Bomb Shop', 'Big Bomb Shop', 1) self.world.swamp_patch_required[1] = True set_rules(self.world, 1) generate_itempool(self.world, 1) diff --git a/test/inverted/TestInverted.py b/test/inverted/TestInverted.py index 82e1c0f0..2383782e 100644 --- a/test/inverted/TestInverted.py +++ b/test/inverted/TestInverted.py @@ -4,19 +4,19 @@ 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 Regions import mark_light_world_regions, create_shops from Rules import set_rules -from test.TestVanilla import TestVanilla +from test.TestBase import TestBase -class TestInverted(TestVanilla): +class TestInverted(TestBase): def setUp(self): - self.world = World(1, 'vanilla', 'noglitches', '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'] + self.world = World(1, {1:'vanilla'}, {1:'noglitches'}, {1:'inverted'}, {1:'random'}, {1:'normal'}, {1:'normal'}, {1:False}, {1:'on'}, {1:'ganon'}, 'balanced', {1:'items'}, + True, {1:False}, False, None, {1:False}) + self.world.difficulty_requirements[1] = difficulties['normal'] create_inverted_regions(self.world, 1) create_dungeons(self.world, 1) + create_shops(self.world, 1) link_inverted_entrances(self.world, 1) generate_itempool(self.world, 1) self.world.required_medallions[1] = ['Ether', 'Quake'] @@ -24,5 +24,5 @@ class TestInverted(TestVanilla): 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_light_world_regions(self.world) + mark_light_world_regions(self.world, 1) set_rules(self.world, 1) diff --git a/test/inverted/TestInvertedBombRules.py b/test/inverted/TestInvertedBombRules.py index 4914d2e3..c8b19b1b 100644 --- a/test/inverted/TestInvertedBombRules.py +++ b/test/inverted/TestInvertedBombRules.py @@ -3,7 +3,7 @@ import unittest from BaseClasses import World from Dungeons import create_dungeons from EntranceShuffle import connect_entrance, Inverted_LW_Entrances, Inverted_LW_Dungeon_Entrances, Inverted_LW_Single_Cave_Doors, Inverted_Old_Man_Entrances, Inverted_DW_Entrances, Inverted_DW_Dungeon_Entrances, Inverted_DW_Single_Cave_Doors, \ - Inverted_LW_Entrances_Must_Exit, Inverted_LW_Dungeon_Entrances_Must_Exit, Inverted_Bomb_Shop_Multi_Cave_Doors, Inverted_Bomb_Shop_Single_Cave_Doors, Inverted_Blacksmith_Single_Cave_Doors, Inverted_Blacksmith_Multi_Cave_Doors + Inverted_LW_Entrances_Must_Exit, Inverted_LW_Dungeon_Entrances_Must_Exit, Inverted_Bomb_Shop_Multi_Cave_Doors, Inverted_Bomb_Shop_Single_Cave_Doors, Blacksmith_Single_Cave_Doors, Inverted_Blacksmith_Multi_Cave_Doors from InvertedRegions import create_inverted_regions from ItemList import difficulties from Rules import set_inverted_big_bomb_rules @@ -12,10 +12,9 @@ from Rules import set_inverted_big_bomb_rules class TestInvertedBombRules(unittest.TestCase): def setUp(self): - self.world = World(1, 'vanilla', 'noglitches', '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'] + self.world = World(1, {1:'vanilla'}, {1:'noglitches'}, {1:'inverted'}, {1:'random'}, {1:'normal'}, {1:'normal'}, {1:False}, {1:'on'}, {1:'ganon'}, 'balanced', {1:'items'}, + True, {1:False}, False, None, {1:False}) + self.world.difficulty_requirements[1] = difficulties['normal'] create_inverted_regions(self.world, 1) create_dungeons(self.world, 1) @@ -26,13 +25,13 @@ class TestInvertedBombRules(unittest.TestCase): for entrance_name in (entrances + must_exits): if entrance_name not in ['Desert Palace Entrance (East)', 'Spectacle Rock Cave', 'Spectacle Rock Cave (Bottom)']: entrance = self.world.get_entrance(entrance_name, 1) - connect_entrance(self.world, entrance, 'Inverted Big Bomb Shop', 1) + connect_entrance(self.world, entrance_name, 'Inverted Big Bomb Shop', 1) set_inverted_big_bomb_rules(self.world, 1) entrance.connected_region.entrances.remove(entrance) entrance.connected_region = None def testInvalidEntrancesAreNotUsed(self): - entrances = list(Inverted_Blacksmith_Multi_Cave_Doors + Inverted_Blacksmith_Single_Cave_Doors + Inverted_Bomb_Shop_Multi_Cave_Doors + Inverted_Bomb_Shop_Single_Cave_Doors) + entrances = list(Inverted_Blacksmith_Multi_Cave_Doors + Blacksmith_Single_Cave_Doors + Inverted_Bomb_Shop_Multi_Cave_Doors + Inverted_Bomb_Shop_Single_Cave_Doors) invalid_entrances = ['Desert Palace Entrance (East)', 'Spectacle Rock Cave', 'Spectacle Rock Cave (Bottom)', 'Pyramid Fairy'] for invalid_entrance in invalid_entrances: self.assertNotIn(invalid_entrance, entrances) @@ -40,7 +39,7 @@ class TestInvertedBombRules(unittest.TestCase): def testInvalidEntrances(self): for entrance_name in ['Desert Palace Entrance (East)', 'Spectacle Rock Cave', 'Spectacle Rock Cave (Bottom)']: entrance = self.world.get_entrance(entrance_name, 1) - connect_entrance(self.world, entrance, 'Inverted Big Bomb Shop', 1) + connect_entrance(self.world, entrance_name, 'Inverted Big Bomb Shop', 1) with self.assertRaises(Exception): set_inverted_big_bomb_rules(self.world, 1) entrance.connected_region.entrances.remove(entrance) diff --git a/test/inverted/TestInvertedDarkWorld.py b/test/inverted/TestInvertedDarkWorld.py index 2eac4a1b..82ba2065 100644 --- a/test/inverted/TestInvertedDarkWorld.py +++ b/test/inverted/TestInvertedDarkWorld.py @@ -1,10 +1,10 @@ from test.inverted.TestInverted import TestInverted -class TestInvertedDeathMountain(TestInverted): +class TestInvertedDarkWorld(TestInverted): def testNorthWest(self): - self.run_tests([ + self.run_location_tests([ ["Brewery", True, []], ["C-Shaped House", True, []], @@ -30,22 +30,18 @@ class TestInvertedDeathMountain(TestInverted): ["Blacksmith", False, []], ["Blacksmith", False, [], ['Progressive Glove', 'Magic Mirror']], ["Blacksmith", True, ['Progressive Glove', 'Progressive Glove', 'Moon Pearl']], - #@todo: Can get this without moon pearl - #["Blacksmith", True, ['Beat Agahnim 1', 'Magic Mirror']], - ["Blacksmith", True, ['Beat Agahnim 1', 'Magic Mirror', 'Moon Pearl']], + ["Blacksmith", True, ['Beat Agahnim 1', 'Magic Mirror']], ["Blacksmith", True, ['Progressive Glove', 'Hammer', 'Magic Mirror', 'Moon Pearl']], ["Purple Chest", False, []], ["Purple Chest", False, [], ['Progressive Glove', 'Magic Mirror']], ["Purple Chest", True, ['Progressive Glove', 'Progressive Glove', 'Moon Pearl']], - # @todo: Can get this without moon pearl - #["Purple Chest", True, ['Beat Agahnim 1', 'Magic Mirror']], - ["Purple Chest", True, ['Beat Agahnim 1', 'Magic Mirror', 'Moon Pearl']], + ["Purple Chest", True, ['Beat Agahnim 1', 'Magic Mirror']], ["Purple Chest", True, ['Progressive Glove', 'Hammer', 'Magic Mirror', 'Moon Pearl']], ]) def testNorthEast(self): - self.run_tests([ + self.run_location_tests([ ["Catfish", False, []], ["Catfish", False, [], ['Progressive Glove', 'Flippers']], ["Catfish", False, [], ['Progressive Glove', 'Magic Mirror']], @@ -80,7 +76,7 @@ class TestInvertedDeathMountain(TestInverted): ]) def testSouth(self): - self.run_tests([ + self.run_location_tests([ ["Hype Cave - Top", True, []], ["Hype Cave - Middle Right", True, []], @@ -99,7 +95,7 @@ class TestInvertedDeathMountain(TestInverted): ]) def testMireArea(self): - self.run_tests([ + self.run_location_tests([ ["Mire Shed - Left", False, []], ["Mire Shed - Left", False, [], ['Flute', 'Magic Mirror']], ["Mire Shed - Left", True, ['Moon Pearl', 'Flute', 'Progressive Glove', 'Progressive Glove']], diff --git a/test/inverted/TestInvertedDeathMountain.py b/test/inverted/TestInvertedDeathMountain.py index 9189b935..ac0e659a 100644 --- a/test/inverted/TestInvertedDeathMountain.py +++ b/test/inverted/TestInvertedDeathMountain.py @@ -4,7 +4,7 @@ from test.inverted.TestInverted import TestInverted class TestInvertedDeathMountain(TestInverted): def testWestDeathMountain(self): - self.run_tests([ + self.run_location_tests([ ["Old Man", False, []], ["Old Man", False, [], ['Progressive Glove', 'Flute']], ["Old Man", False, [], ['Lamp']], @@ -23,7 +23,7 @@ class TestInvertedDeathMountain(TestInverted): ]) def testEastDeathMountain(self): - self.run_tests([ + self.run_location_tests([ ["Spiral Cave", False, []], ["Spiral Cave", False, [], ['Moon Pearl']], ["Spiral Cave", False, [], ['Progressive Glove', 'Flute']], @@ -158,7 +158,7 @@ class TestInvertedDeathMountain(TestInverted): ]) def testEastDarkWorldDeathMountain(self): - self.run_tests([ + self.run_location_tests([ ["Superbunny Cave - Top", False, []], ["Superbunny Cave - Top", False, [], ['Progressive Glove', 'Flute']], ["Superbunny Cave - Top", True, ['Progressive Glove', 'Lamp']], @@ -204,18 +204,19 @@ class TestInvertedDeathMountain(TestInverted): ]) def testWestDarkWorldDeathMountain(self): - self.run_tests([ + self.run_location_tests([ ["Spike Cave", False, []], ["Spike Cave", False, [], ['Progressive Glove']], ["Spike Cave", False, [], ['Hammer']], ["Spike Cave", False, [], ['Cape', 'Cane of Byrna']], ["Spike Cave", False, [], ['Cane of Byrna', 'AnyBottle', 'Magic Upgrade (1/2)']], ["Spike Cave", False, [], ['AnyBottle', 'Magic Upgrade (1/2)', 'Pegasus Boots', 'Boss Heart Container', 'Piece of Heart', 'Sanctuary Heart Container']], - ["Spike Cave", False, ['Bottle', 'Hammer', 'Progressive Glove', 'Lamp', 'Cape']], - ["Spike Cave", True, ['Bottle', 'Hammer', 'Progressive Glove', 'Lamp', 'Moon Pearl', 'Cape']], + ["Spike Cave", True, ['Bottle', 'Hammer', 'Progressive Glove', 'Lamp', 'Cape']], + # Change from base ER - this fork places a blue potion in dark world + #["Spike Cave", True, ['Bottle', 'Hammer', 'Progressive Glove', 'Lamp', 'Moon Pearl', 'Cape']], ["Spike Cave", True, ['Bottle', 'Hammer', 'Progressive Glove', 'Flute', 'Moon Pearl', 'Cape']], - ["Spike Cave", False, ['Bottle', 'Hammer', 'Progressive Glove', 'Lamp', 'Cane of Byrna']], - ["Spike Cave", True, ['Bottle', 'Hammer', 'Progressive Glove', 'Lamp', 'Moon Pearl', 'Cane of Byrna']], + ["Spike Cave", True, ['Bottle', 'Hammer', 'Progressive Glove', 'Lamp', 'Cane of Byrna']], + #["Spike Cave", True, ['Bottle', 'Hammer', 'Progressive Glove', 'Lamp', 'Moon Pearl', 'Cane of Byrna']], ["Spike Cave", True, ['Bottle', 'Hammer', 'Progressive Glove', 'Flute', 'Moon Pearl', 'Cane of Byrna']], ["Spike Cave", True, ['Magic Upgrade (1/2)', 'Hammer', 'Progressive Glove', 'Lamp', 'Cape']], ["Spike Cave", True, ['Magic Upgrade (1/2)', 'Hammer', 'Progressive Glove', 'Flute', 'Moon Pearl', 'Cape']], diff --git a/test/inverted/TestInvertedEntrances.py b/test/inverted/TestInvertedEntrances.py new file mode 100644 index 00000000..9ae260d6 --- /dev/null +++ b/test/inverted/TestInvertedEntrances.py @@ -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, [], ["Flute", "Lamp"]], + ["Tower of Hera", False, [], ["Flute", "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", "Flute"]], + ["Tower of Hera", True, ["Moon Pearl", "Hammer", "Beat Agahnim 1", "Flute", "Hookshot"]], + + ["Inverted Agahnims Tower", False, []], + ["Inverted Agahnims Tower", False, [], ["Flute", "Lamp"]], + ["Inverted Agahnims Tower", False, [], ["Flute", "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, ["Flute", "Beat Agahnim 1", "Moon Pearl"]], + ["Inverted Agahnims Tower", True, ["Flute", "Progressive Glove", "Progressive Glove", "Moon Pearl"]], + ["Inverted Agahnims Tower", True, ["Flute", "Progressive Glove", "Hammer", "Moon Pearl"]], + + ["Palace of Darkness", False, []], + ["Palace of Darkness", False, [], ["Hammer", "Flippers", "Magic Mirror", "Flute"]], + ["Palace of Darkness", True, ["Hammer"]], + ["Palace of Darkness", True, ["Flippers"]], + ["Palace of Darkness", True, ["Progressive Glove", "Progressive Glove", "Moon Pearl", "Flute"]], + ["Palace of Darkness", True, ["Progressive Glove", "Progressive Glove", "Moon Pearl", "Magic Mirror"]], + ["Palace of Darkness", True, ["Beat Agahnim 1", "Moon Pearl", "Flute"]], + ["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, [], ["Flute", "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", "Flute"]], + ["Misery Mire", True, ["Progressive Sword", "Ether", "Moon Pearl", "Hammer", "Progressive Glove", "Magic Mirror"]], + ["Misery Mire", True, ["Progressive Sword", "Ether", "Moon Pearl", "Hammer", "Progressive Glove", "Flute"]], + ["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", "Flute"]], + + ["Turtle Rock", False, []], + ["Turtle Rock", False, [], ["Quake"]], + ["Turtle Rock", False, [], ["Progressive Sword"]], + ["Turtle Rock", False, [], ["Lamp", "Flute"]], + ["Turtle Rock", False, [], ["Progressive Glove", "Flute"]], + ["Turtle Rock", True, ["Quake", "Progressive Sword", "Progressive Glove", "Lamp"]], + ["Turtle Rock", True, ["Quake", "Progressive Sword", "Progressive Glove", "Progressive Glove", "Moon Pearl", "Flute"]], + ["Turtle Rock", True, ["Quake", "Progressive Sword", "Progressive Glove", "Hammer", "Moon Pearl", "Flute"]], + ["Turtle Rock", True, ["Quake", "Progressive Sword", "Beat Agahnim 1", "Moon Pearl", "Flute"]], + + ["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"]], + ]) \ No newline at end of file diff --git a/test/inverted/TestInvertedLightWorld.py b/test/inverted/TestInvertedLightWorld.py index 6a1e5baf..64ee267c 100644 --- a/test/inverted/TestInvertedLightWorld.py +++ b/test/inverted/TestInvertedLightWorld.py @@ -6,14 +6,12 @@ class TestInvertedLightWorld(TestInverted): super().setUp() def testLostWoods(self): - self.run_tests([ + 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']], - # @todo: Can get this without moon pearl - # ["Master Sword Pedestal", True, ['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1']], - ["Master Sword Pedestal", True, ['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Moon Pearl']], + ["Master Sword Pedestal", True, ['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1']], ["Master Sword Pedestal", True, ['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Moon Pearl', 'Progressive Glove', 'Hammer']], ["Master Sword Pedestal", True, ['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Moon Pearl', 'Progressive Glove', 'Progressive Glove']], @@ -37,7 +35,7 @@ class TestInvertedLightWorld(TestInverted): ]) def testKakariko(self): - self.run_tests([ + self.run_location_tests([ ["Kakariko Tavern", False, []], ["Kakariko Tavern", False, [], ['Moon Pearl']], ["Kakariko Tavern", True, ['Moon Pearl', 'Beat Agahnim 1']], @@ -111,9 +109,7 @@ class TestInvertedLightWorld(TestInverted): ["Blind's Hideout - Far Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']], ["Bottle Merchant", False, []], - #@todo: Can get this without moon pearl - #["Bottle Merchant", True, ['Beat Agahnim 1']], - ["Bottle Merchant", True, ['Beat Agahnim 1', 'Moon Pearl']], + ["Bottle Merchant", True, ['Beat Agahnim 1']], ["Bottle Merchant", True, ['Moon Pearl', 'Progressive Glove', 'Hammer']], ["Bottle Merchant", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove']], @@ -171,7 +167,7 @@ class TestInvertedLightWorld(TestInverted): ]) def testSouthLightWorld(self): - self.run_tests([ + self.run_location_tests([ ["Desert Ledge", False, []], ["Desert Ledge", False, [], ['Book of Mudora']], ["Desert Ledge", False, [], ['Moon Pearl']], @@ -251,7 +247,7 @@ class TestInvertedLightWorld(TestInverted): ]) def testZoraArea(self): - self.run_tests([ + self.run_location_tests([ ["King Zora", False, []], ["King Zora", False, [], ['Progressive Glove', 'Flippers']], ["King Zora", False, [], ['Moon Pearl']], @@ -284,7 +280,7 @@ class TestInvertedLightWorld(TestInverted): ]) def testLightWorld(self): - self.run_tests([ + self.run_location_tests([ ["Link's Uncle", False, []], ["Link's Uncle", False, [], ['Moon Pearl']], ["Link's Uncle", True, ['Moon Pearl', 'Beat Agahnim 1']], diff --git a/test/inverted/TestInvertedTurtleRock.py b/test/inverted/TestInvertedTurtleRock.py index 3963861e..a0de60a9 100644 --- a/test/inverted/TestInvertedTurtleRock.py +++ b/test/inverted/TestInvertedTurtleRock.py @@ -4,7 +4,7 @@ from test.inverted.TestInverted import TestInverted class TestInvertedTurtleRock(TestInverted): def testTurtleRock(self): - self.run_tests([ + self.run_location_tests([ ["Turtle Rock - Compass Chest", False, []], ["Turtle Rock - Compass Chest", False, [], ['Cane of Somaria']], ["Turtle Rock - Compass Chest", False, [], ['Quake', 'Magic Mirror']], diff --git a/test/inverted_owg/TestDarkWorld.py b/test/inverted_owg/TestDarkWorld.py new file mode 100644 index 00000000..ffa40300 --- /dev/null +++ b/test/inverted_owg/TestDarkWorld.py @@ -0,0 +1,79 @@ +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, []], + #todo: Waterwalk + #["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']], + ]) \ No newline at end of file diff --git a/test/inverted_owg/TestDeathMountain.py b/test/inverted_owg/TestDeathMountain.py new file mode 100644 index 00000000..90de0d0e --- /dev/null +++ b/test/inverted_owg/TestDeathMountain.py @@ -0,0 +1,116 @@ +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", 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']], + #todo: Floating island clip + #["Hookshot Cave - Bottom Right", True, ['Pegasus Boots']], + ["Hookshot Cave - Bottom Right", True, ['Pegasus Boots', 'Progressive Glove']], + + ["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 - Bottom Left", True, ['Pegasus Boots', 'Hookshot', 'Progressive Glove']], + + ["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 Left", True, ['Pegasus Boots', 'Hookshot', 'Progressive Glove']], + + ["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']], + ["Hookshot Cave - Top Right", True, ['Pegasus Boots', 'Hookshot', 'Progressive Glove']], + ]) \ No newline at end of file diff --git a/test/inverted_owg/TestDungeons.py b/test/inverted_owg/TestDungeons.py new file mode 100644 index 00000000..610f7f5b --- /dev/null +++ b/test/inverted_owg/TestDungeons.py @@ -0,0 +1,114 @@ +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, Waterwalk + #["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', 'Magic Mirror', 'Fire Rod']], + ["Ice Palace - Compass Chest", True, ['Pegasus Boots', 'Magic Mirror', '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']], + ]) \ No newline at end of file diff --git a/test/inverted_owg/TestInvertedOWG.py b/test/inverted_owg/TestInvertedOWG.py new file mode 100644 index 00000000..4437dd84 --- /dev/null +++ b/test/inverted_owg/TestInvertedOWG.py @@ -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, create_shops +from Rules import set_rules +from test.TestBase import TestBase + + +class TestInvertedOWG(TestBase): + def setUp(self): + self.world = World(1, {1:'vanilla'}, {1:'owglitches'}, {1:'inverted'}, {1:'random'}, {1:'normal'}, {1:'normal'}, {1:False}, {1:'on'}, {1:'ganon'}, 'balanced', {1:'items'}, + True, {1:False}, False, None, {1:False}) + self.world.difficulty_requirements[1] = difficulties['normal'] + create_inverted_regions(self.world, 1) + create_dungeons(self.world, 1) + create_shops(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, 1) + set_rules(self.world, 1) diff --git a/test/inverted_owg/TestLightWorld.py b/test/inverted_owg/TestLightWorld.py new file mode 100644 index 00000000..f7f003dc --- /dev/null +++ b/test/inverted_owg/TestLightWorld.py @@ -0,0 +1,292 @@ +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', 'Magic Mirror']], + ["Link's Uncle", True, ['Moon Pearl', 'Pegasus Boots']], + + ["Secret Passage", False, []], + ["Secret Passage", False, [], ['Moon Pearl', 'Magic Mirror']], + ["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", 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", True, ['Moon Pearl', 'Pegasus Boots']], + #todo: superbunny into sahasrahla in logic? + #["Sahasrahla's Hut - Left", True, ['Magic Mirror', 'Pegasus Boots']], + #["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", 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", 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, ['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, ['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, ['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, ['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", 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", 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", 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", 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 - 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']], + + ["Ice Rod Cave", False, []], + #["Ice Rod Cave", False, [], ['Moon Pearl', 'BigRedBomb']], + ["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']], + + ["Sahasrahla", False, []], + ["Sahasrahla", False, [], ['Green Pendant']], + ["Sahasrahla", True, ['Green Pendant', 'Magic Mirror', 'Pegasus Boots']], + ["Sahasrahla", True, ['Green Pendant', 'Moon Pearl', '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', 'Magic Mirror', 'Pegasus Boots']], + ["Sick Kid", True, ['Bottle', 'Moon Pearl', 'Pegasus Boots']], + ["Sick Kid", True, ['Bottle (Good Bee)', 'Magic Mirror', 'Pegasus Boots']], + ["Sick Kid", True, ['Bottle (Good Bee)', 'Moon Pearl', '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']], + + ["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", 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']], + + ["Mini Moldorm Cave - Generous Guy", False, []], + ["Mini Moldorm Cave - Generous Guy", False, [], ['Moon Pearl']], + ["Mini Moldorm Cave - Generous Guy", True, ['Moon Pearl', 'Pegasus Boots']], + + ["Library", False, []], + ["Library", False, [], ['Pegasus Boots']], + ["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', '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", 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', 'Flippers']], + #todo: Waterwalking into caves not in logic + # ["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', 'Flippers']], + # ["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, []], + ]) \ No newline at end of file diff --git a/test/inverted_owg/__init__.py b/test/inverted_owg/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/test/owg/TestDarkWorld.py b/test/owg/TestDarkWorld.py new file mode 100644 index 00000000..1a4a3897 --- /dev/null +++ b/test/owg/TestDarkWorld.py @@ -0,0 +1,204 @@ +from test.owg.TestVanillaOWG import TestVanillaOWG + + +class TestLightWorld(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', 'Flute', 'Lamp']], + ["Pyramid", True, ['Moon Pearl', 'Pegasus Boots']], + ["Pyramid", True, ['Magic Mirror', 'Pegasus Boots']], + ["Pyramid", True, ['Magic Mirror', 'Flute']], + ["Pyramid", True, ['Magic Mirror', 'Progressive Glove', 'Lamp']], + ["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', 'Flute', 'Lamp']], + ["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, ['Flute', 'Magic Mirror']], + ["Pyramid Fairy - Left", True, ['Progressive Glove', 'Lamp', 'Magic Mirror']], + ["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, [], ['Pegasus Boots', 'Moon Pearl', 'Flute', 'Lamp']], + ["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, ['Flute', 'Magic Mirror']], + ["Pyramid Fairy - Right", True, ['Progressive Glove', 'Lamp', 'Magic Mirror']], + ["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 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', 'Flute', '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', 'Flute']], + ["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', 'Flute']], + ["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, [], ['Flute', 'Pegasus Boots']], + ["Mire Shed - Left", True, ['Moon Pearl', 'Flute', 'Progressive Glove', 'Progressive Glove']], + ["Mire Shed - Left", True, ['Moon Pearl', 'Pegasus Boots']], + ["Mire Shed - Left", True, ['Magic Mirror', 'Flute', '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, [], ['Flute', 'Pegasus Boots']], + ["Mire Shed - Right", True, ['Moon Pearl', 'Pegasus Boots']], + ["Mire Shed - Right", True, ['Magic Mirror', 'Flute', 'Progressive Glove', 'Progressive Glove']], + ["Mire Shed - Right", True, ['Moon Pearl', 'Flute', 'Progressive Glove', 'Progressive Glove']], + ]) \ No newline at end of file diff --git a/test/owg/TestDeathMountain.py b/test/owg/TestDeathMountain.py new file mode 100644 index 00000000..49d95b9b --- /dev/null +++ b/test/owg/TestDeathMountain.py @@ -0,0 +1,205 @@ +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', 'Flute']], + ["Ether Tablet", False, [], ['Pegasus Boots', 'Lamp', 'Flute']], + ["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, ['Flute', '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, ['Flute', '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', 'Flute']], + ["Old Man", True, ['Pegasus Boots', 'Lamp']], + ["Old Man", True, ['Flute', 'Lamp']], + ["Old Man", True, ['Progressive Glove', 'Lamp']], + + ["Spectacle Rock Cave", False, []], + ["Spectacle Rock Cave", False, [], ['Pegasus Boots', 'Progressive Glove', 'Flute']], + ["Spectacle Rock Cave", False, [], ['Pegasus Boots', 'Lamp', 'Flute']], + ["Spectacle Rock Cave", True, ['Pegasus Boots']], + ["Spectacle Rock Cave", True, ['Flute']], + ["Spectacle Rock Cave", True, ['Progressive Glove', 'Lamp']], + + ["Spectacle Rock", False, []], + ["Spectacle Rock", False, [], ['Pegasus Boots', 'Progressive Glove', 'Flute']], + ["Spectacle Rock", False, [], ['Pegasus Boots', 'Lamp', 'Flute']], + ["Spectacle Rock", False, [], ['Pegasus Boots', 'Magic Mirror']], + ["Spectacle Rock", True, ['Pegasus Boots']], + ["Spectacle Rock", True, ['Flute', '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', 'Flute', 'Lamp']], + ["Mimic Cave", False, [], ['Pegasus Boots', 'Flute', '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', 'Flute']], + + ["Spiral Cave", False, []], + ["Spiral Cave", False, [], ['Pegasus Boots', 'Progressive Glove', 'Flute']], + ["Spiral Cave", False, [], ['Pegasus Boots', 'Magic Mirror', 'Hookshot']], + ["Spiral Cave", True, ['Pegasus Boots']], + ["Spiral Cave", True, ['Flute', 'Hookshot']], + ["Spiral Cave", True, ['Progressive Glove', 'Lamp', 'Hookshot']], + ["Spiral Cave", True, ['Progressive Glove', 'Lamp', 'Magic Mirror']], + ["Spiral Cave", True, ['Flute', 'Magic Mirror']], + + ["Paradox Cave Lower - Far Left", False, []], + ["Paradox Cave Lower - Far Left", False, [], ['Pegasus Boots', 'Progressive Glove', 'Flute']], + ["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, ['Flute', '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, ['Flute', 'Magic Mirror']], + + ["Paradox Cave Lower - Left", False, []], + ["Paradox Cave Lower - Left", False, [], ['Pegasus Boots', 'Progressive Glove', 'Flute']], + ["Paradox Cave Lower - Left", False, [], ['Pegasus Boots', 'Magic Mirror', 'Hookshot']], + ["Paradox Cave Lower - Left", True, ['Pegasus Boots']], + ["Paradox Cave Lower - Left", True, ['Flute', '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, ['Flute', 'Magic Mirror']], + + ["Paradox Cave Lower - Middle", False, []], + ["Paradox Cave Lower - Middle", False, [], ['Pegasus Boots', 'Progressive Glove', 'Flute']], + ["Paradox Cave Lower - Middle", False, [], ['Pegasus Boots', 'Magic Mirror', 'Hookshot']], + ["Paradox Cave Lower - Middle", True, ['Pegasus Boots']], + ["Paradox Cave Lower - Middle", True, ['Flute', '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, ['Flute', 'Magic Mirror']], + + ["Paradox Cave Lower - Right", False, []], + ["Paradox Cave Lower - Right", False, [], ['Pegasus Boots', 'Progressive Glove', 'Flute']], + ["Paradox Cave Lower - Right", False, [], ['Pegasus Boots', 'Magic Mirror', 'Hookshot']], + ["Paradox Cave Lower - Right", True, ['Pegasus Boots']], + ["Paradox Cave Lower - Right", True, ['Flute', '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, ['Flute', 'Magic Mirror']], + + ["Paradox Cave Lower - Far Right", False, []], + ["Paradox Cave Lower - Far Right", False, [], ['Pegasus Boots', 'Progressive Glove', 'Flute']], + ["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, ['Flute', '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, ['Flute', 'Magic Mirror']], + + ["Paradox Cave Upper - Left", False, []], + ["Paradox Cave Upper - Left", False, [], ['Pegasus Boots', 'Progressive Glove', 'Flute']], + ["Paradox Cave Upper - Left", False, [], ['Pegasus Boots', 'Magic Mirror', 'Hookshot']], + ["Paradox Cave Upper - Left", True, ['Pegasus Boots']], + ["Paradox Cave Upper - Left", True, ['Flute', '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, ['Flute', 'Magic Mirror']], + + ["Paradox Cave Upper - Right", False, []], + ["Paradox Cave Upper - Right", False, [], ['Pegasus Boots', 'Progressive Glove', 'Flute']], + ["Paradox Cave Upper - Right", False, [], ['Pegasus Boots', 'Magic Mirror', 'Hookshot']], + ["Paradox Cave Upper - Right", True, ['Pegasus Boots']], + ["Paradox Cave Upper - Right", True, ['Flute', '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, ['Flute', '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', 'Flute', 'Cape']], + ["Spike Cave", True, ['Bottle', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Lamp', 'Cane of Byrna']], + ["Spike Cave", True, ['Bottle', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Flute', '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', 'Flute', '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', 'Flute', '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', 'Flute', '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', 'Flute', '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', 'Flute']], + ["Superbunny Cave - Top", True, ['Progressive Glove', 'Progressive Glove', 'Magic Mirror', 'Hammer', 'Flute']], + ["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', 'Flute']], + ["Superbunny Cave - Bottom", True, ['Progressive Glove', 'Progressive Glove', 'Magic Mirror', 'Hammer', 'Flute']], + ["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']], + #todo: DW Floating island clip not in logic + #["Hookshot Cave - Bottom Right", True, ['Moon Pearl', 'Pegasus Boots']], + ["Hookshot Cave - Bottom Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Flute']], + ["Hookshot Cave - Bottom Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Magic Mirror', 'Hammer', 'Flute', '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']], + #todo: DW Floating island clip not in logic + #["Hookshot Cave - Bottom Left", True, ['Moon Pearl', 'Pegasus Boots', 'Hookshot']], + ["Hookshot Cave - Bottom Left", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Flute']], + ["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']], + #todo: DW Floating island clip not in logic + #["Hookshot Cave - Top Left", True, ['Moon Pearl', 'Pegasus Boots', 'Hookshot']], + ["Hookshot Cave - Top Left", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Flute']], + ["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']], + #todo: DW Floating island clip not in logic + #["Hookshot Cave - Top Right", True, ['Moon Pearl', 'Pegasus Boots', 'Hookshot']], + ["Hookshot Cave - Top Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Flute']], + ["Hookshot Cave - Top Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Lamp']], + ]) \ No newline at end of file diff --git a/test/owg/TestDungeons.py b/test/owg/TestDungeons.py new file mode 100644 index 00000000..69a65167 --- /dev/null +++ b/test/owg/TestDungeons.py @@ -0,0 +1,131 @@ +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, ['Flute', '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', "Flute", "Progressive Glove"]], + ["Tower of Hera - Basement Cage", False, [], ['Pegasus Boots', "Flute", "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, ["Flute", "Magic Mirror"]], + ["Tower of Hera - Basement Cage", True, ["Progressive Glove", "Lamp", "Magic Mirror"]], + ["Tower of Hera - Basement Cage", True, ["Flute", "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', 'Flute']], + ["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']], + #todo: Missing clip? + #["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, ['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']], + ]) \ No newline at end of file diff --git a/test/owg/TestLightWorld.py b/test/owg/TestLightWorld.py new file mode 100644 index 00000000..e64c3681 --- /dev/null +++ b/test/owg/TestLightWorld.py @@ -0,0 +1,196 @@ +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', 'Flute', 'Lamp']], + ["Cave 45", False, [], ['Pegasus Boots', 'Moon Pearl', 'Flute', 'Progressive Glove']], + ["Cave 45", True, ['Pegasus Boots']], + ["Cave 45", True, ['Flute', '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', 'Flute']], + ["Checkerboard Cave", False, [], ['Pegasus Boots', 'Magic Mirror']], + ["Checkerboard Cave", True, ['Pegasus Boots', 'Progressive Glove']], + ["Checkerboard Cave", True, ['Flute', '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', 'Flute']], + ["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, ['Flute', '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']], + #todo: not in logic yet - need to determine which caves are ok to waterwalk into + #["Waterfall Fairy - Left", True, ['Moon Pearl']], + #["Waterfall Fairy - Left", True, ['Pegasus Boots']], + + ["Waterfall Fairy - Right", False, []], + ["Waterfall Fairy - Right", True, ['Flippers']], + #todo: not in logic yet - need to determine which caves are ok to waterwalk into + #["Waterfall Fairy - Right", True, ['Moon Pearl']], + #["Waterfall Fairy - Right", True, ['Pegasus Boots']] + ]) \ No newline at end of file diff --git a/test/owg/TestVanillaOWG.py b/test/owg/TestVanillaOWG.py new file mode 100644 index 00000000..7ff76b53 --- /dev/null +++ b/test/owg/TestVanillaOWG.py @@ -0,0 +1,30 @@ +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, create_shops +from Rules import set_rules +from test.TestBase import TestBase + + +class TestVanillaOWG(TestBase): + def setUp(self): + self.world = World(1, {1:'vanilla'}, {1:'owglitches'}, {1:'open'}, {1:'random'}, {1:'normal'}, {1:'normal'}, {1:False}, {1:'on'}, {1:'ganon'}, 'balanced', {1:'items'}, + True, {1:False}, False, None, {1:False}) + self.world.difficulty_requirements[1] = difficulties['normal'] + create_regions(self.world, 1) + create_dungeons(self.world, 1) + create_shops(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, 1) + set_rules(self.world, 1) \ No newline at end of file diff --git a/test/owg/__init__.py b/test/owg/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/test/vanilla/TestDarkWorld.py b/test/vanilla/TestDarkWorld.py new file mode 100644 index 00000000..885af449 --- /dev/null +++ b/test/vanilla/TestDarkWorld.py @@ -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, [], ['Flute']], + ["Mire Shed - Left", True, ['Moon Pearl', 'Flute', 'Progressive Glove', 'Progressive Glove']], + + ["Mire Shed - Right", False, []], + ["Mire Shed - Right", False, [], ['Progressive Glove']], + ["Mire Shed - Right", False, [], ['Moon Pearl']], + ["Mire Shed - Right", False, [], ['Flute']], + ["Mire Shed - Right", True, ['Moon Pearl', 'Flute', 'Progressive Glove', 'Progressive Glove']], + ]) diff --git a/test/vanilla/TestDeathMountain.py b/test/vanilla/TestDeathMountain.py new file mode 100644 index 00000000..821dd7bc --- /dev/null +++ b/test/vanilla/TestDeathMountain.py @@ -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', 'Flute']], + ["Ether Tablet", False, [], ['Lamp', 'Flute']], + ["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, ['Flute', '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, ['Flute', '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', 'Flute']], + ["Old Man", False, [], ['Lamp']], + ["Old Man", True, ['Flute', 'Lamp']], + ["Old Man", True, ['Progressive Glove', 'Lamp']], + + ["Spectacle Rock Cave", False, []], + ["Spectacle Rock Cave", False, [], ['Progressive Glove', 'Flute']], + ["Spectacle Rock Cave", False, [], ['Lamp', 'Flute']], + ["Spectacle Rock Cave", True, ['Flute']], + ["Spectacle Rock Cave", True, ['Progressive Glove', 'Lamp']], + + ["Spectacle Rock", False, []], + ["Spectacle Rock", False, [], ['Progressive Glove', 'Flute']], + ["Spectacle Rock", False, [], ['Lamp', 'Flute']], + ["Spectacle Rock", False, [], ['Magic Mirror']], + ["Spectacle Rock", True, ['Flute', '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', 'Flute', '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', 'Flute']], + ["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, ['Flute', 'Magic Mirror']], + ["Spiral Cave", False, ['Flute', 'Hammer']], + ["Spiral Cave", True, ['Flute', 'Hookshot']], + ["Spiral Cave", True, ['Progressive Glove', 'Lamp', 'Hookshot']], + ["Spiral Cave", True, ['Progressive Glove', 'Lamp', 'Magic Mirror', 'Hammer']], + ["Spiral Cave", True, ['Flute', 'Magic Mirror', 'Hammer']], + + ["Paradox Cave Lower - Far Left", False, []], + ["Paradox Cave Lower - Far Left", False, [], ['Progressive Glove', 'Flute']], + ["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, ['Flute', 'Magic Mirror']], + ["Paradox Cave Lower - Far Left", False, ['Flute', 'Hammer']], + ["Paradox Cave Lower - Far Left", True, ['Flute', '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, ['Flute', 'Magic Mirror', 'Hammer']], + + ["Paradox Cave Lower - Left", False, []], + ["Paradox Cave Lower - Left", False, [], ['Progressive Glove', 'Flute']], + ["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, ['Flute', 'Magic Mirror']], + ["Paradox Cave Lower - Left", False, ['Flute', 'Hammer']], + ["Paradox Cave Lower - Left", True, ['Flute', '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, ['Flute', 'Magic Mirror', 'Hammer']], + + ["Paradox Cave Lower - Middle", False, []], + ["Paradox Cave Lower - Middle", False, [], ['Progressive Glove', 'Flute']], + ["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, ['Flute', 'Magic Mirror']], + ["Paradox Cave Lower - Middle", False, ['Flute', 'Hammer']], + ["Paradox Cave Lower - Middle", True, ['Flute', '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, ['Flute', 'Magic Mirror', 'Hammer']], + + ["Paradox Cave Lower - Right", False, []], + ["Paradox Cave Lower - Right", False, [], ['Progressive Glove', 'Flute']], + ["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, ['Flute', 'Magic Mirror']], + ["Paradox Cave Lower - Right", False, ['Flute', 'Hammer']], + ["Paradox Cave Lower - Right", True, ['Flute', '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, ['Flute', 'Magic Mirror', 'Hammer']], + + ["Paradox Cave Lower - Far Right", False, []], + ["Paradox Cave Lower - Far Right", False, [], ['Progressive Glove', 'Flute']], + ["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, ['Flute', 'Magic Mirror']], + ["Paradox Cave Lower - Far Right", False, ['Flute', 'Hammer']], + ["Paradox Cave Lower - Far Right", True, ['Flute', '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, ['Flute', 'Magic Mirror', 'Hammer']], + + ["Paradox Cave Upper - Left", False, []], + ["Paradox Cave Upper - Left", False, [], ['Progressive Glove', 'Flute']], + ["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, ['Flute', 'Magic Mirror']], + ["Paradox Cave Upper - Left", False, ['Flute', 'Hammer']], + ["Paradox Cave Upper - Left", True, ['Flute', '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, ['Flute', 'Magic Mirror', 'Hammer']], + + ["Paradox Cave Upper - Right", False, []], + ["Paradox Cave Upper - Right", False, [], ['Progressive Glove', 'Flute']], + ["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, ['Flute', 'Magic Mirror']], + ["Paradox Cave Upper - Right", False, ['Flute', 'Hammer']], + ["Paradox Cave Upper - Right", True, ['Flute', '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, ['Flute', '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', 'Flute', 'Cape']], + ["Spike Cave", True, ['Bottle', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Lamp', 'Cane of Byrna']], + ["Spike Cave", True, ['Bottle', 'Moon Pearl', 'Hammer', 'Progressive Glove', 'Flute', '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', 'Flute', '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', 'Flute', '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', 'Flute', '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', 'Flute', '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', 'Flute']], + ["Superbunny Cave - Top", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Magic Mirror', 'Hammer', 'Flute']], + ["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', 'Flute']], + ["Superbunny Cave - Bottom", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Magic Mirror', 'Hammer', 'Flute']], + ["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', 'Flute']], + ["Hookshot Cave - Bottom Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Magic Mirror', 'Hammer', 'Flute', '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', 'Flute']], + ["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', 'Flute']], + ["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', 'Flute']], + ["Hookshot Cave - Top Right", True, ['Moon Pearl', 'Progressive Glove', 'Progressive Glove', 'Hookshot', 'Lamp']], + ]) diff --git a/test/vanilla/TestEntrances.py b/test/vanilla/TestEntrances.py new file mode 100644 index 00000000..5bcd557f --- /dev/null +++ b/test/vanilla/TestEntrances.py @@ -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", "Flute"]], + ["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, ["Flute", "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", "Flute"]], + ["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, ["Flute", "Progressive Glove", "Progressive Glove", "Magic Mirror"]], + + ["Tower of Hera", False, []], + ["Tower of Hera", False, [], ["Flute", "Progressive Glove"]], + ["Tower of Hera", False, [], ["Flute", "Lamp"]], + ["Tower of Hera", False, [], ["Magic Mirror", "Hammer"]], + ["Tower of Hera", False, [], ["Magic Mirror", "Hookshot"]], + ["Tower of Hera", True, ["Flute", "Magic Mirror"]], + ["Tower of Hera", True, ["Progressive Glove", "Lamp", "Magic Mirror"]], + ["Tower of Hera", True, ["Flute", "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, [], ["Flute"]], + ["Misery Mire", False, [], ["Ether"]], + ["Misery Mire", False, [], ["Progressive Sword"]], + ["Misery Mire", False, ["Progressive Glove"], ["Progressive Glove"]], + ["Misery Mire", True, ["Progressive Glove", "Progressive Glove", "Flute", "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", "Flute"]], + ["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", "Flute", "Hookshot"]], + ["Turtle Rock", True, ["Progressive Glove", "Progressive Glove", "Moon Pearl", "Hammer", "Quake", "Progressive Sword", "Flute", "Magic Mirror"]], + + ["Ganons Tower", False, []], + ["Ganons Tower", False, ["Progressive Glove"], ["Progressive Glove"]], + ["Ganons Tower", False, [], ["Lamp", "Flute"]], + ["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, ["Flute", "Magic Mirror", "Hammer", "Progressive Glove", "Progressive Glove", "Crystal 1", "Crystal 2", "Crystal 3", "Crystal 4", "Crystal 5", "Crystal 6", "Crystal 7"]], + ["Ganons Tower", True, ["Flute", "Hookshot", "Progressive Glove", "Progressive Glove", "Crystal 1", "Crystal 2", "Crystal 3", "Crystal 4", "Crystal 5", "Crystal 6", "Crystal 7"]], + ]) diff --git a/test/vanilla/TestLightWorld.py b/test/vanilla/TestLightWorld.py new file mode 100644 index 00000000..c3a03bc0 --- /dev/null +++ b/test/vanilla/TestLightWorld.py @@ -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, [], ['Flute']], + ["Checkerboard Cave", False, [], ['Magic Mirror']], + ["Checkerboard Cave", True, ['Flute', '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', 'Flute']], + ["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, ['Flute', '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']], + ]) \ No newline at end of file diff --git a/test/vanilla/TestVanilla.py b/test/vanilla/TestVanilla.py new file mode 100644 index 00000000..8ec3392c --- /dev/null +++ b/test/vanilla/TestVanilla.py @@ -0,0 +1,28 @@ +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, create_shops +from Rules import set_rules +from test.TestBase import TestBase + + +class TestVanilla(TestBase): + def setUp(self): + self.world = World(1, {1:'vanilla'}, {1:'noglitches'}, {1:'open'}, {1:'random'}, {1:'normal'}, {1:'normal'}, {1:False}, {1:'on'}, {1:'ganon'}, 'balanced', {1:'items'}, + True, {1:False}, False, None, {1:False}) + self.world.difficulty_requirements[1] = difficulties['normal'] + create_regions(self.world, 1) + create_dungeons(self.world, 1) + create_shops(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, 1) + set_rules(self.world, 1) \ No newline at end of file diff --git a/test/vanilla/__init__.py b/test/vanilla/__init__.py new file mode 100644 index 00000000..e69de29b