LTTP: remove multiworld = None (#2290)
This commit is contained in:
		
							parent
							
								
									4ce58c0240
								
							
						
					
					
						commit
						939a5ec959
					
				| 
						 | 
					@ -10,7 +10,7 @@ from worlds import AutoWorld
 | 
				
			||||||
from worlds.AutoWorld import World, call_all
 | 
					from worlds.AutoWorld import World, call_all
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from BaseClasses import Location, MultiWorld, CollectionState, ItemClassification, Item
 | 
					from BaseClasses import Location, MultiWorld, CollectionState, ItemClassification, Item
 | 
				
			||||||
from worlds.alttp.Items import ItemFactory
 | 
					from worlds.alttp.Items import item_factory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TestBase(unittest.TestCase):
 | 
					class TestBase(unittest.TestCase):
 | 
				
			||||||
| 
						 | 
					@ -91,15 +91,15 @@ class TestBase(unittest.TestCase):
 | 
				
			||||||
            items = self.multiworld.itempool[:]
 | 
					            items = self.multiworld.itempool[:]
 | 
				
			||||||
            items = [item for item in items if
 | 
					            items = [item for item in items if
 | 
				
			||||||
                     item.name not in all_except and not ("Bottle" in item.name and "AnyBottle" in all_except)]
 | 
					                     item.name not in all_except and not ("Bottle" in item.name and "AnyBottle" in all_except)]
 | 
				
			||||||
            items.extend(ItemFactory(item_pool[0], 1))
 | 
					            items.extend(item_factory(item_pool[0], self.multiworld.worlds[1]))
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            items = ItemFactory(item_pool[0], 1)
 | 
					            items = item_factory(item_pool[0], self.multiworld.worlds[1])
 | 
				
			||||||
        return self.get_state(items)
 | 
					        return self.get_state(items)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _get_items_partial(self, item_pool, missing_item):
 | 
					    def _get_items_partial(self, item_pool, missing_item):
 | 
				
			||||||
        new_items = item_pool[0].copy()
 | 
					        new_items = item_pool[0].copy()
 | 
				
			||||||
        new_items.remove(missing_item)
 | 
					        new_items.remove(missing_item)
 | 
				
			||||||
        items = ItemFactory(new_items, 1)
 | 
					        items = item_factory(new_items, self.multiworld.worlds[1])
 | 
				
			||||||
        return self.get_state(items)
 | 
					        return self.get_state(items)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@ class TestBase(unittest.TestCase):
 | 
				
			||||||
    def test_create_item(self):
 | 
					    def test_create_item(self):
 | 
				
			||||||
        """Test that a world can successfully create all items in its datapackage"""
 | 
					        """Test that a world can successfully create all items in its datapackage"""
 | 
				
			||||||
        for game_name, world_type in AutoWorldRegister.world_types.items():
 | 
					        for game_name, world_type in AutoWorldRegister.world_types.items():
 | 
				
			||||||
            proxy_world = world_type(None, 0)  # this is identical to MultiServer.py creating worlds
 | 
					            proxy_world = setup_solo_multiworld(world_type, ()).worlds[1]
 | 
				
			||||||
            for item_name in world_type.item_name_to_id:
 | 
					            for item_name in world_type.item_name_to_id:
 | 
				
			||||||
                with self.subTest("Create Item", item_name=item_name, game_name=game_name):
 | 
					                with self.subTest("Create Item", item_name=item_name, game_name=game_name):
 | 
				
			||||||
                    item = proxy_world.create_item(item_name)
 | 
					                    item = proxy_world.create_item(item_name)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -296,6 +296,7 @@ class World(metaclass=AutoWorldRegister):
 | 
				
			||||||
    """path it was loaded from"""
 | 
					    """path it was loaded from"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, multiworld: "MultiWorld", player: int):
 | 
					    def __init__(self, multiworld: "MultiWorld", player: int):
 | 
				
			||||||
 | 
					        assert multiworld is not None
 | 
				
			||||||
        self.multiworld = multiworld
 | 
					        self.multiworld = multiworld
 | 
				
			||||||
        self.player = player
 | 
					        self.player = player
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,7 +7,7 @@ from BaseClasses import CollectionState, Region, MultiWorld
 | 
				
			||||||
from Fill import fill_restrictive
 | 
					from Fill import fill_restrictive
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from .Bosses import BossFactory, Boss
 | 
					from .Bosses import BossFactory, Boss
 | 
				
			||||||
from .Items import ItemFactory
 | 
					from .Items import item_factory
 | 
				
			||||||
from .Regions import lookup_boss_drops, key_drop_data
 | 
					from .Regions import lookup_boss_drops, key_drop_data
 | 
				
			||||||
from .Options import small_key_shuffle
 | 
					from .Options import small_key_shuffle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -81,90 +81,90 @@ def create_dungeons(world: "ALTTPWorld"):
 | 
				
			||||||
        return dungeon
 | 
					        return dungeon
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ES = make_dungeon('Hyrule Castle', None, ['Hyrule Castle', 'Sewers', 'Sewer Drop', 'Sewers (Dark)', 'Sanctuary'],
 | 
					    ES = make_dungeon('Hyrule Castle', None, ['Hyrule Castle', 'Sewers', 'Sewer Drop', 'Sewers (Dark)', 'Sanctuary'],
 | 
				
			||||||
                      ItemFactory('Big Key (Hyrule Castle)', player),
 | 
					                      item_factory('Big Key (Hyrule Castle)', world),
 | 
				
			||||||
                      ItemFactory(['Small Key (Hyrule Castle)'] * 4, player),
 | 
					                      item_factory(['Small Key (Hyrule Castle)'] * 4, world),
 | 
				
			||||||
                      [ItemFactory('Map (Hyrule Castle)', player)])
 | 
					                      [item_factory('Map (Hyrule Castle)', world)])
 | 
				
			||||||
    EP = make_dungeon('Eastern Palace', 'Armos Knights', ['Eastern Palace'],
 | 
					    EP = make_dungeon('Eastern Palace', 'Armos Knights', ['Eastern Palace'],
 | 
				
			||||||
                      ItemFactory('Big Key (Eastern Palace)', player),
 | 
					                      item_factory('Big Key (Eastern Palace)', world),
 | 
				
			||||||
                      ItemFactory(['Small Key (Eastern Palace)'] * 2, player),
 | 
					                      item_factory(['Small Key (Eastern Palace)'] * 2, world),
 | 
				
			||||||
                      ItemFactory(['Map (Eastern Palace)', 'Compass (Eastern Palace)'], player))
 | 
					                      item_factory(['Map (Eastern Palace)', 'Compass (Eastern Palace)'], world))
 | 
				
			||||||
    DP = make_dungeon('Desert Palace', 'Lanmolas',
 | 
					    DP = make_dungeon('Desert Palace', 'Lanmolas',
 | 
				
			||||||
                      ['Desert Palace North', 'Desert Palace Main (Inner)', 'Desert Palace Main (Outer)',
 | 
					                      ['Desert Palace North', 'Desert Palace Main (Inner)', 'Desert Palace Main (Outer)',
 | 
				
			||||||
                       'Desert Palace East'], ItemFactory('Big Key (Desert Palace)', player),
 | 
					                       'Desert Palace East'], item_factory('Big Key (Desert Palace)', world),
 | 
				
			||||||
                      ItemFactory(['Small Key (Desert Palace)'] * 4, player),
 | 
					                      item_factory(['Small Key (Desert Palace)'] * 4, world),
 | 
				
			||||||
                      ItemFactory(['Map (Desert Palace)', 'Compass (Desert Palace)'], player))
 | 
					                      item_factory(['Map (Desert Palace)', 'Compass (Desert Palace)'], world))
 | 
				
			||||||
    ToH = make_dungeon('Tower of Hera', 'Moldorm',
 | 
					    ToH = make_dungeon('Tower of Hera', 'Moldorm',
 | 
				
			||||||
                       ['Tower of Hera (Bottom)', 'Tower of Hera (Basement)', 'Tower of Hera (Top)'],
 | 
					                       ['Tower of Hera (Bottom)', 'Tower of Hera (Basement)', 'Tower of Hera (Top)'],
 | 
				
			||||||
                       ItemFactory('Big Key (Tower of Hera)', player),
 | 
					                       item_factory('Big Key (Tower of Hera)', world),
 | 
				
			||||||
                       [ItemFactory('Small Key (Tower of Hera)', player)],
 | 
					                       [item_factory('Small Key (Tower of Hera)', world)],
 | 
				
			||||||
                       ItemFactory(['Map (Tower of Hera)', 'Compass (Tower of Hera)'], player))
 | 
					                       item_factory(['Map (Tower of Hera)', 'Compass (Tower of Hera)'], world))
 | 
				
			||||||
    PoD = make_dungeon('Palace of Darkness', 'Helmasaur King',
 | 
					    PoD = make_dungeon('Palace of Darkness', 'Helmasaur King',
 | 
				
			||||||
                       ['Palace of Darkness (Entrance)', 'Palace of Darkness (Center)',
 | 
					                       ['Palace of Darkness (Entrance)', 'Palace of Darkness (Center)',
 | 
				
			||||||
                        'Palace of Darkness (Big Key Chest)', 'Palace of Darkness (Bonk Section)',
 | 
					                        'Palace of Darkness (Big Key Chest)', 'Palace of Darkness (Bonk Section)',
 | 
				
			||||||
                        'Palace of Darkness (North)', 'Palace of Darkness (Maze)',
 | 
					                        'Palace of Darkness (North)', 'Palace of Darkness (Maze)',
 | 
				
			||||||
                        'Palace of Darkness (Harmless Hellway)', 'Palace of Darkness (Final Section)'],
 | 
					                        'Palace of Darkness (Harmless Hellway)', 'Palace of Darkness (Final Section)'],
 | 
				
			||||||
                       ItemFactory('Big Key (Palace of Darkness)', player),
 | 
					                       item_factory('Big Key (Palace of Darkness)', world),
 | 
				
			||||||
                       ItemFactory(['Small Key (Palace of Darkness)'] * 6, player),
 | 
					                       item_factory(['Small Key (Palace of Darkness)'] * 6, world),
 | 
				
			||||||
                       ItemFactory(['Map (Palace of Darkness)', 'Compass (Palace of Darkness)'], player))
 | 
					                       item_factory(['Map (Palace of Darkness)', 'Compass (Palace of Darkness)'], world))
 | 
				
			||||||
    TT = make_dungeon('Thieves Town', 'Blind', ['Thieves Town (Entrance)', 'Thieves Town (Deep)', 'Blind Fight'],
 | 
					    TT = make_dungeon('Thieves Town', 'Blind', ['Thieves Town (Entrance)', 'Thieves Town (Deep)', 'Blind Fight'],
 | 
				
			||||||
                      ItemFactory('Big Key (Thieves Town)', player),
 | 
					                      item_factory('Big Key (Thieves Town)', world),
 | 
				
			||||||
                      ItemFactory(['Small Key (Thieves Town)'] * 3, player),
 | 
					                      item_factory(['Small Key (Thieves Town)'] * 3, world),
 | 
				
			||||||
                      ItemFactory(['Map (Thieves Town)', 'Compass (Thieves Town)'], player))
 | 
					                      item_factory(['Map (Thieves Town)', 'Compass (Thieves Town)'], world))
 | 
				
			||||||
    SW = make_dungeon('Skull Woods', 'Mothula', ['Skull Woods Final Section (Entrance)', 'Skull Woods First Section',
 | 
					    SW = make_dungeon('Skull Woods', 'Mothula', ['Skull Woods Final Section (Entrance)', 'Skull Woods First Section',
 | 
				
			||||||
                                                 'Skull Woods Second Section', 'Skull Woods Second Section (Drop)',
 | 
					                                                 'Skull Woods Second Section', 'Skull Woods Second Section (Drop)',
 | 
				
			||||||
                                                 'Skull Woods Final Section (Mothula)',
 | 
					                                                 'Skull Woods Final Section (Mothula)',
 | 
				
			||||||
                                                 'Skull Woods First Section (Right)',
 | 
					                                                 'Skull Woods First Section (Right)',
 | 
				
			||||||
                                                 'Skull Woods First Section (Left)', 'Skull Woods First Section (Top)'],
 | 
					                                                 'Skull Woods First Section (Left)', 'Skull Woods First Section (Top)'],
 | 
				
			||||||
                      ItemFactory('Big Key (Skull Woods)', player),
 | 
					                      item_factory('Big Key (Skull Woods)', world),
 | 
				
			||||||
                      ItemFactory(['Small Key (Skull Woods)'] * 5, player),
 | 
					                      item_factory(['Small Key (Skull Woods)'] * 5, world),
 | 
				
			||||||
                      ItemFactory(['Map (Skull Woods)', 'Compass (Skull Woods)'], player))
 | 
					                      item_factory(['Map (Skull Woods)', 'Compass (Skull Woods)'], world))
 | 
				
			||||||
    SP = make_dungeon('Swamp Palace', 'Arrghus',
 | 
					    SP = make_dungeon('Swamp Palace', 'Arrghus',
 | 
				
			||||||
                      ['Swamp Palace (Entrance)', 'Swamp Palace (First Room)', 'Swamp Palace (Starting Area)',
 | 
					                      ['Swamp Palace (Entrance)', 'Swamp Palace (First Room)', 'Swamp Palace (Starting Area)',
 | 
				
			||||||
                       'Swamp Palace (West)', 'Swamp Palace (Center)', 'Swamp Palace (North)'],
 | 
					                       'Swamp Palace (West)', 'Swamp Palace (Center)', 'Swamp Palace (North)'],
 | 
				
			||||||
                      ItemFactory('Big Key (Swamp Palace)', player),
 | 
					                      item_factory('Big Key (Swamp Palace)', world),
 | 
				
			||||||
                      ItemFactory(['Small Key (Swamp Palace)'] * 6, player),
 | 
					                      item_factory(['Small Key (Swamp Palace)'] * 6, world),
 | 
				
			||||||
                      ItemFactory(['Map (Swamp Palace)', 'Compass (Swamp Palace)'], player))
 | 
					                      item_factory(['Map (Swamp Palace)', 'Compass (Swamp Palace)'], world))
 | 
				
			||||||
    IP = make_dungeon('Ice Palace', 'Kholdstare',
 | 
					    IP = make_dungeon('Ice Palace', 'Kholdstare',
 | 
				
			||||||
                      ['Ice Palace (Entrance)', 'Ice Palace (Second Section)', 'Ice Palace (Main)', 'Ice Palace (East)',
 | 
					                      ['Ice Palace (Entrance)', 'Ice Palace (Second Section)', 'Ice Palace (Main)', 'Ice Palace (East)',
 | 
				
			||||||
                       'Ice Palace (East Top)', 'Ice Palace (Kholdstare)'], ItemFactory('Big Key (Ice Palace)', player),
 | 
					                       'Ice Palace (East Top)', 'Ice Palace (Kholdstare)'], item_factory('Big Key (Ice Palace)', world),
 | 
				
			||||||
                      ItemFactory(['Small Key (Ice Palace)'] * 6, player),
 | 
					                      item_factory(['Small Key (Ice Palace)'] * 6, world),
 | 
				
			||||||
                      ItemFactory(['Map (Ice Palace)', 'Compass (Ice Palace)'], player))
 | 
					                      item_factory(['Map (Ice Palace)', 'Compass (Ice Palace)'], world))
 | 
				
			||||||
    MM = make_dungeon('Misery Mire', 'Vitreous',
 | 
					    MM = make_dungeon('Misery Mire', 'Vitreous',
 | 
				
			||||||
                      ['Misery Mire (Entrance)', 'Misery Mire (Main)', 'Misery Mire (West)', 'Misery Mire (Final Area)',
 | 
					                      ['Misery Mire (Entrance)', 'Misery Mire (Main)', 'Misery Mire (West)', 'Misery Mire (Final Area)',
 | 
				
			||||||
                       'Misery Mire (Vitreous)'], ItemFactory('Big Key (Misery Mire)', player),
 | 
					                       'Misery Mire (Vitreous)'], item_factory('Big Key (Misery Mire)', world),
 | 
				
			||||||
                      ItemFactory(['Small Key (Misery Mire)'] * 6, player),
 | 
					                      item_factory(['Small Key (Misery Mire)'] * 6, world),
 | 
				
			||||||
                      ItemFactory(['Map (Misery Mire)', 'Compass (Misery Mire)'], player))
 | 
					                      item_factory(['Map (Misery Mire)', 'Compass (Misery Mire)'], world))
 | 
				
			||||||
    TR = make_dungeon('Turtle Rock', 'Trinexx',
 | 
					    TR = make_dungeon('Turtle Rock', 'Trinexx',
 | 
				
			||||||
                      ['Turtle Rock (Entrance)', 'Turtle Rock (First Section)', 'Turtle Rock (Chain Chomp Room)',
 | 
					                      ['Turtle Rock (Entrance)', 'Turtle Rock (First Section)', 'Turtle Rock (Chain Chomp Room)',
 | 
				
			||||||
                       'Turtle Rock (Pokey Room)',
 | 
					                       'Turtle Rock (Pokey Room)',
 | 
				
			||||||
                       'Turtle Rock (Second Section)', 'Turtle Rock (Big Chest)', 'Turtle Rock (Crystaroller Room)',
 | 
					                       'Turtle Rock (Second Section)', 'Turtle Rock (Big Chest)', 'Turtle Rock (Crystaroller Room)',
 | 
				
			||||||
                       'Turtle Rock (Dark Room)', 'Turtle Rock (Eye Bridge)', 'Turtle Rock (Trinexx)'],
 | 
					                       'Turtle Rock (Dark Room)', 'Turtle Rock (Eye Bridge)', 'Turtle Rock (Trinexx)'],
 | 
				
			||||||
                      ItemFactory('Big Key (Turtle Rock)', player),
 | 
					                      item_factory('Big Key (Turtle Rock)', world),
 | 
				
			||||||
                      ItemFactory(['Small Key (Turtle Rock)'] * 6, player),
 | 
					                      item_factory(['Small Key (Turtle Rock)'] * 6, world),
 | 
				
			||||||
                      ItemFactory(['Map (Turtle Rock)', 'Compass (Turtle Rock)'], player))
 | 
					                      item_factory(['Map (Turtle Rock)', 'Compass (Turtle Rock)'], world))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if multiworld.mode[player] != 'inverted':
 | 
					    if multiworld.mode[player] != 'inverted':
 | 
				
			||||||
        AT = make_dungeon('Agahnims Tower', 'Agahnim', ['Agahnims Tower', 'Agahnim 1'], None,
 | 
					        AT = make_dungeon('Agahnims Tower', 'Agahnim', ['Agahnims Tower', 'Agahnim 1'], None,
 | 
				
			||||||
                          ItemFactory(['Small Key (Agahnims Tower)'] * 4, player), [])
 | 
					                          item_factory(['Small Key (Agahnims Tower)'] * 4, world), [])
 | 
				
			||||||
        GT = make_dungeon('Ganons Tower', 'Agahnim2',
 | 
					        GT = make_dungeon('Ganons Tower', 'Agahnim2',
 | 
				
			||||||
                          ['Ganons Tower (Entrance)', 'Ganons Tower (Tile Room)', 'Ganons Tower (Compass Room)',
 | 
					                          ['Ganons Tower (Entrance)', 'Ganons Tower (Tile Room)', 'Ganons Tower (Compass Room)',
 | 
				
			||||||
                           'Ganons Tower (Hookshot Room)', 'Ganons Tower (Map Room)', 'Ganons Tower (Firesnake Room)',
 | 
					                           'Ganons Tower (Hookshot Room)', 'Ganons Tower (Map Room)', 'Ganons Tower (Firesnake Room)',
 | 
				
			||||||
                           'Ganons Tower (Teleport Room)', 'Ganons Tower (Bottom)', 'Ganons Tower (Top)',
 | 
					                           'Ganons Tower (Teleport Room)', 'Ganons Tower (Bottom)', 'Ganons Tower (Top)',
 | 
				
			||||||
                           'Ganons Tower (Before Moldorm)', 'Ganons Tower (Moldorm)', 'Agahnim 2'],
 | 
					                           'Ganons Tower (Before Moldorm)', 'Ganons Tower (Moldorm)', 'Agahnim 2'],
 | 
				
			||||||
                          ItemFactory('Big Key (Ganons Tower)', player),
 | 
					                          item_factory('Big Key (Ganons Tower)', world),
 | 
				
			||||||
                          ItemFactory(['Small Key (Ganons Tower)'] * 8, player),
 | 
					                          item_factory(['Small Key (Ganons Tower)'] * 8, world),
 | 
				
			||||||
                          ItemFactory(['Map (Ganons Tower)', 'Compass (Ganons Tower)'], player))
 | 
					                          item_factory(['Map (Ganons Tower)', 'Compass (Ganons Tower)'], world))
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        AT = make_dungeon('Inverted Agahnims Tower', 'Agahnim', ['Inverted Agahnims Tower', 'Agahnim 1'], None,
 | 
					        AT = make_dungeon('Inverted Agahnims Tower', 'Agahnim', ['Inverted Agahnims Tower', 'Agahnim 1'], None,
 | 
				
			||||||
                          ItemFactory(['Small Key (Agahnims Tower)'] * 4, player), [])
 | 
					                          item_factory(['Small Key (Agahnims Tower)'] * 4, world), [])
 | 
				
			||||||
        GT = make_dungeon('Inverted Ganons Tower', 'Agahnim2',
 | 
					        GT = make_dungeon('Inverted Ganons Tower', 'Agahnim2',
 | 
				
			||||||
                          ['Inverted Ganons Tower (Entrance)', 'Ganons Tower (Tile Room)',
 | 
					                          ['Inverted Ganons Tower (Entrance)', 'Ganons Tower (Tile Room)',
 | 
				
			||||||
                           'Ganons Tower (Compass Room)', 'Ganons Tower (Hookshot Room)', 'Ganons Tower (Map Room)',
 | 
					                           'Ganons Tower (Compass Room)', 'Ganons Tower (Hookshot Room)', 'Ganons Tower (Map Room)',
 | 
				
			||||||
                           'Ganons Tower (Firesnake Room)', 'Ganons Tower (Teleport Room)', 'Ganons Tower (Bottom)',
 | 
					                           'Ganons Tower (Firesnake Room)', 'Ganons Tower (Teleport Room)', 'Ganons Tower (Bottom)',
 | 
				
			||||||
                           'Ganons Tower (Top)', 'Ganons Tower (Before Moldorm)', 'Ganons Tower (Moldorm)',
 | 
					                           'Ganons Tower (Top)', 'Ganons Tower (Before Moldorm)', 'Ganons Tower (Moldorm)',
 | 
				
			||||||
                           'Agahnim 2'], ItemFactory('Big Key (Ganons Tower)', player),
 | 
					                           'Agahnim 2'], item_factory('Big Key (Ganons Tower)', world),
 | 
				
			||||||
                          ItemFactory(['Small Key (Ganons Tower)'] * 8, player),
 | 
					                          item_factory(['Small Key (Ganons Tower)'] * 8, world),
 | 
				
			||||||
                          ItemFactory(['Map (Ganons Tower)', 'Compass (Ganons Tower)'], player))
 | 
					                          item_factory(['Map (Ganons Tower)', 'Compass (Ganons Tower)'], world))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    GT.bosses['bottom'] = BossFactory('Armos Knights', player)
 | 
					    GT.bosses['bottom'] = BossFactory('Armos Knights', player)
 | 
				
			||||||
    GT.bosses['middle'] = BossFactory('Lanmolas', player)
 | 
					    GT.bosses['middle'] = BossFactory('Lanmolas', player)
 | 
				
			||||||
| 
						 | 
					@ -259,7 +259,7 @@ def fill_dungeons_restrictive(multiworld: MultiWorld):
 | 
				
			||||||
                if not key_drop_shuffle and player not in multiworld.groups:
 | 
					                if not key_drop_shuffle and player not in multiworld.groups:
 | 
				
			||||||
                    for key_loc in key_drop_data:
 | 
					                    for key_loc in key_drop_data:
 | 
				
			||||||
                        key_data = key_drop_data[key_loc]
 | 
					                        key_data = key_drop_data[key_loc]
 | 
				
			||||||
                        all_state_base.remove(ItemFactory(key_data[3], player))
 | 
					                        all_state_base.remove(item_factory(key_data[3], multiworld.worlds[player]))
 | 
				
			||||||
                        loc = multiworld.get_location(key_loc, player)
 | 
					                        loc = multiworld.get_location(key_loc, player)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                        if loc in all_state_base.events:
 | 
					                        if loc in all_state_base.events:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -9,8 +9,8 @@ from .Shops import TakeAny, total_shop_slots, set_up_shops, shop_table_by_locati
 | 
				
			||||||
from .Bosses import place_bosses
 | 
					from .Bosses import place_bosses
 | 
				
			||||||
from .Dungeons import get_dungeon_item_pool_player
 | 
					from .Dungeons import get_dungeon_item_pool_player
 | 
				
			||||||
from .EntranceShuffle import connect_entrance
 | 
					from .EntranceShuffle import connect_entrance
 | 
				
			||||||
from .Items import ItemFactory, GetBeemizerItem, trap_replaceable, item_name_groups
 | 
					from .Items import item_factory, GetBeemizerItem, trap_replaceable, item_name_groups
 | 
				
			||||||
from .Options import small_key_shuffle, compass_shuffle, big_key_shuffle, map_shuffle, TriforcePiecesMode
 | 
					from .Options import small_key_shuffle, compass_shuffle, big_key_shuffle, map_shuffle, TriforcePiecesMode, LTTPBosses
 | 
				
			||||||
from .StateHelpers import has_triforce_pieces, has_melee_weapon
 | 
					from .StateHelpers import has_triforce_pieces, has_melee_weapon
 | 
				
			||||||
from .Regions import key_drop_data
 | 
					from .Regions import key_drop_data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -240,9 +240,9 @@ def generate_itempool(world):
 | 
				
			||||||
    if multiworld.timer[player] in ['ohko', 'timed_ohko']:
 | 
					    if multiworld.timer[player] in ['ohko', 'timed_ohko']:
 | 
				
			||||||
        multiworld.can_take_damage[player] = False
 | 
					        multiworld.can_take_damage[player] = False
 | 
				
			||||||
    if multiworld.goal[player] in ['pedestal', 'triforce_hunt', 'local_triforce_hunt']:
 | 
					    if multiworld.goal[player] in ['pedestal', 'triforce_hunt', 'local_triforce_hunt']:
 | 
				
			||||||
        multiworld.push_item(multiworld.get_location('Ganon', player), ItemFactory('Nothing', player), False)
 | 
					        multiworld.push_item(multiworld.get_location('Ganon', player), item_factory('Nothing', world), False)
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
        multiworld.push_item(multiworld.get_location('Ganon', player), ItemFactory('Triforce', player), False)
 | 
					        multiworld.push_item(multiworld.get_location('Ganon', player), item_factory('Triforce', world), False)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if multiworld.goal[player] in ['triforce_hunt', 'local_triforce_hunt']:
 | 
					    if multiworld.goal[player] in ['triforce_hunt', 'local_triforce_hunt']:
 | 
				
			||||||
        region = multiworld.get_region('Light World', player)
 | 
					        region = multiworld.get_region('Light World', player)
 | 
				
			||||||
| 
						 | 
					@ -252,7 +252,7 @@ def generate_itempool(world):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        region.locations.append(loc)
 | 
					        region.locations.append(loc)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        multiworld.push_item(loc, ItemFactory('Triforce', player), False)
 | 
					        multiworld.push_item(loc, item_factory('Triforce', world), False)
 | 
				
			||||||
        loc.event = True
 | 
					        loc.event = True
 | 
				
			||||||
        loc.locked = True
 | 
					        loc.locked = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -271,7 +271,7 @@ def generate_itempool(world):
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
    for location_name, event_name in event_pairs:
 | 
					    for location_name, event_name in event_pairs:
 | 
				
			||||||
        location = multiworld.get_location(location_name, player)
 | 
					        location = multiworld.get_location(location_name, player)
 | 
				
			||||||
        event = ItemFactory(event_name, player)
 | 
					        event = item_factory(event_name, world)
 | 
				
			||||||
        multiworld.push_item(location, event, False)
 | 
					        multiworld.push_item(location, event, False)
 | 
				
			||||||
        location.event = location.locked = True
 | 
					        location.event = location.locked = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -287,7 +287,7 @@ def generate_itempool(world):
 | 
				
			||||||
        treasure_hunt_icon, additional_triforce_pieces = get_pool_core(multiworld, player)
 | 
					        treasure_hunt_icon, additional_triforce_pieces = get_pool_core(multiworld, player)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for item in precollected_items:
 | 
					    for item in precollected_items:
 | 
				
			||||||
        multiworld.push_precollected(ItemFactory(item, player))
 | 
					        multiworld.push_precollected(item_factory(item, world))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if multiworld.mode[player] == 'standard' and not has_melee_weapon(multiworld.state, player):
 | 
					    if multiworld.mode[player] == 'standard' and not has_melee_weapon(multiworld.state, player):
 | 
				
			||||||
        if "Link's Uncle" not in placed_items:
 | 
					        if "Link's Uncle" not in placed_items:
 | 
				
			||||||
| 
						 | 
					@ -326,9 +326,9 @@ def generate_itempool(world):
 | 
				
			||||||
                multiworld.escape_assist[player].append('bombs')
 | 
					                multiworld.escape_assist[player].append('bombs')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (location, item) in placed_items.items():
 | 
					    for (location, item) in placed_items.items():
 | 
				
			||||||
        multiworld.get_location(location, player).place_locked_item(ItemFactory(item, player))
 | 
					        multiworld.get_location(location, player).place_locked_item(item_factory(item, world))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    items = ItemFactory(pool, player)
 | 
					    items = item_factory(pool, world)
 | 
				
			||||||
    # convert one Progressive Bow into Progressive Bow (Alt), in ID only, for ganon silvers hint text
 | 
					    # convert one Progressive Bow into Progressive Bow (Alt), in ID only, for ganon silvers hint text
 | 
				
			||||||
    if multiworld.worlds[player].has_progressive_bows:
 | 
					    if multiworld.worlds[player].has_progressive_bows:
 | 
				
			||||||
        for item in items:
 | 
					        for item in items:
 | 
				
			||||||
| 
						 | 
					@ -349,7 +349,7 @@ def generate_itempool(world):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for key_loc in key_drop_data:
 | 
					    for key_loc in key_drop_data:
 | 
				
			||||||
        key_data = key_drop_data[key_loc]
 | 
					        key_data = key_drop_data[key_loc]
 | 
				
			||||||
        drop_item = ItemFactory(key_data[3], player)
 | 
					        drop_item = item_factory(key_data[3], world)
 | 
				
			||||||
        if not multiworld.key_drop_shuffle[player]:
 | 
					        if not multiworld.key_drop_shuffle[player]:
 | 
				
			||||||
            if drop_item in dungeon_items:
 | 
					            if drop_item in dungeon_items:
 | 
				
			||||||
                dungeon_items.remove(drop_item)
 | 
					                dungeon_items.remove(drop_item)
 | 
				
			||||||
| 
						 | 
					@ -370,7 +370,7 @@ def generate_itempool(world):
 | 
				
			||||||
            loc.address = None
 | 
					            loc.address = None
 | 
				
			||||||
        elif "Small" in key_data[3] and multiworld.small_key_shuffle[player] == small_key_shuffle.option_universal:
 | 
					        elif "Small" in key_data[3] and multiworld.small_key_shuffle[player] == small_key_shuffle.option_universal:
 | 
				
			||||||
            # key drop shuffle and universal keys are on. Add universal keys in place of key drop keys.
 | 
					            # key drop shuffle and universal keys are on. Add universal keys in place of key drop keys.
 | 
				
			||||||
            multiworld.itempool.append(ItemFactory(GetBeemizerItem(multiworld, player, 'Small Key (Universal)'), player))
 | 
					            multiworld.itempool.append(item_factory(GetBeemizerItem(multiworld, player, 'Small Key (Universal)'), world))
 | 
				
			||||||
    dungeon_item_replacements = sum(difficulties[multiworld.difficulty[player]].extras, []) * 2
 | 
					    dungeon_item_replacements = sum(difficulties[multiworld.difficulty[player]].extras, []) * 2
 | 
				
			||||||
    multiworld.random.shuffle(dungeon_item_replacements)
 | 
					    multiworld.random.shuffle(dungeon_item_replacements)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -382,7 +382,7 @@ def generate_itempool(world):
 | 
				
			||||||
                or (multiworld.map_shuffle[player] == map_shuffle.option_start_with and item.type == 'Map')):
 | 
					                or (multiworld.map_shuffle[player] == map_shuffle.option_start_with and item.type == 'Map')):
 | 
				
			||||||
            dungeon_items.pop(x)
 | 
					            dungeon_items.pop(x)
 | 
				
			||||||
            multiworld.push_precollected(item)
 | 
					            multiworld.push_precollected(item)
 | 
				
			||||||
            multiworld.itempool.append(ItemFactory(dungeon_item_replacements.pop(), player))
 | 
					            multiworld.itempool.append(item_factory(dungeon_item_replacements.pop(), world))
 | 
				
			||||||
    multiworld.itempool.extend([item for item in dungeon_items])
 | 
					    multiworld.itempool.extend([item for item in dungeon_items])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    set_up_shops(multiworld, player)
 | 
					    set_up_shops(multiworld, player)
 | 
				
			||||||
| 
						 | 
					@ -394,7 +394,7 @@ def generate_itempool(world):
 | 
				
			||||||
                          location.shop_slot is not None]
 | 
					                          location.shop_slot is not None]
 | 
				
			||||||
        for location in shop_locations:
 | 
					        for location in shop_locations:
 | 
				
			||||||
            if location.shop.inventory[location.shop_slot]["item"] == "Single Arrow":
 | 
					            if location.shop.inventory[location.shop_slot]["item"] == "Single Arrow":
 | 
				
			||||||
                location.place_locked_item(ItemFactory("Single Arrow", player))
 | 
					                location.place_locked_item(item_factory("Single Arrow", world))
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                shop_items += 1
 | 
					                shop_items += 1
 | 
				
			||||||
    else:
 | 
					    else:
 | 
				
			||||||
| 
						 | 
					@ -406,9 +406,9 @@ def generate_itempool(world):
 | 
				
			||||||
        multiworld.small_key_shuffle[player] == small_key_shuffle.option_universal) * 0.5
 | 
					        multiworld.small_key_shuffle[player] == small_key_shuffle.option_universal) * 0.5
 | 
				
			||||||
    for _ in range(shop_items):
 | 
					    for _ in range(shop_items):
 | 
				
			||||||
        if multiworld.random.random() < chance_100:
 | 
					        if multiworld.random.random() < chance_100:
 | 
				
			||||||
            items.append(ItemFactory(GetBeemizerItem(multiworld, player, "Rupees (100)"), player))
 | 
					            items.append(item_factory(GetBeemizerItem(multiworld, player, "Rupees (100)"), world))
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            items.append(ItemFactory(GetBeemizerItem(multiworld, player, "Rupees (50)"), player))
 | 
					            items.append(item_factory(GetBeemizerItem(multiworld, player, "Rupees (50)"), world))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    multiworld.random.shuffle(items)
 | 
					    multiworld.random.shuffle(items)
 | 
				
			||||||
    pool_count = len(items)
 | 
					    pool_count = len(items)
 | 
				
			||||||
| 
						 | 
					@ -431,7 +431,7 @@ def generate_itempool(world):
 | 
				
			||||||
                new_items += ["Arrow Upgrade (+5)"] * 6
 | 
					                new_items += ["Arrow Upgrade (+5)"] * 6
 | 
				
			||||||
                new_items.append("Arrow Upgrade (+5)" if progressive else "Arrow Upgrade (+10)")
 | 
					                new_items.append("Arrow Upgrade (+5)" if progressive else "Arrow Upgrade (+10)")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    items += [ItemFactory(item, player) for item in new_items]
 | 
					    items += [item_factory(item, world) for item in new_items]
 | 
				
			||||||
    removed_filler = []
 | 
					    removed_filler = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    multiworld.random.shuffle(items)  # Decide what gets tossed randomly.
 | 
					    multiworld.random.shuffle(items)  # Decide what gets tossed randomly.
 | 
				
			||||||
| 
						 | 
					@ -444,22 +444,22 @@ def generate_itempool(world):
 | 
				
			||||||
        else:
 | 
					        else:
 | 
				
			||||||
            # no more junk to remove, condense progressive items
 | 
					            # no more junk to remove, condense progressive items
 | 
				
			||||||
            def condense_items(items, small_item, big_item, rem, add):
 | 
					            def condense_items(items, small_item, big_item, rem, add):
 | 
				
			||||||
                small_item = ItemFactory(small_item, player)
 | 
					                small_item = item_factory(small_item, world)
 | 
				
			||||||
                # while (len(items) >= pool_count + rem - 1  # minus 1 to account for the replacement item
 | 
					                # while (len(items) >= pool_count + rem - 1  # minus 1 to account for the replacement item
 | 
				
			||||||
                #         and items.count(small_item) >= rem):
 | 
					                #         and items.count(small_item) >= rem):
 | 
				
			||||||
                if items.count(small_item) >= rem:
 | 
					                if items.count(small_item) >= rem:
 | 
				
			||||||
                    for _ in range(rem):
 | 
					                    for _ in range(rem):
 | 
				
			||||||
                        items.remove(small_item)
 | 
					                        items.remove(small_item)
 | 
				
			||||||
                        removed_filler.append(ItemFactory(small_item.name, player))
 | 
					                        removed_filler.append(item_factory(small_item.name, world))
 | 
				
			||||||
                    items += [ItemFactory(big_item, player) for _ in range(add)]
 | 
					                    items += [item_factory(big_item, world) for _ in range(add)]
 | 
				
			||||||
                    return True
 | 
					                    return True
 | 
				
			||||||
                return False
 | 
					                return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            def cut_item(items, item_to_cut, minimum_items):
 | 
					            def cut_item(items, item_to_cut, minimum_items):
 | 
				
			||||||
                item_to_cut = ItemFactory(item_to_cut, player)
 | 
					                item_to_cut = item_factory(item_to_cut, world)
 | 
				
			||||||
                if items.count(item_to_cut) > minimum_items:
 | 
					                if items.count(item_to_cut) > minimum_items:
 | 
				
			||||||
                    items.remove(item_to_cut)
 | 
					                    items.remove(item_to_cut)
 | 
				
			||||||
                    removed_filler.append(ItemFactory(item_to_cut.name, player))
 | 
					                    removed_filler.append(item_factory(item_to_cut.name, world))
 | 
				
			||||||
                    return True
 | 
					                    return True
 | 
				
			||||||
                return False
 | 
					                return False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -551,7 +551,7 @@ def set_up_take_anys(world, player):
 | 
				
			||||||
    if swords:
 | 
					    if swords:
 | 
				
			||||||
        sword = world.random.choice(swords)
 | 
					        sword = world.random.choice(swords)
 | 
				
			||||||
        world.itempool.remove(sword)
 | 
					        world.itempool.remove(sword)
 | 
				
			||||||
        world.itempool.append(ItemFactory('Rupees (20)', player))
 | 
					        world.itempool.append(item_factory('Rupees (20)', world))
 | 
				
			||||||
        old_man_take_any.shop.add_inventory(0, sword.name, 0, 0)
 | 
					        old_man_take_any.shop.add_inventory(0, sword.name, 0, 0)
 | 
				
			||||||
        loc_name = "Old Man Sword Cave"
 | 
					        loc_name = "Old Man Sword Cave"
 | 
				
			||||||
        location = ALttPLocation(player, loc_name, shop_table_by_location[loc_name], parent=old_man_take_any)
 | 
					        location = ALttPLocation(player, loc_name, shop_table_by_location[loc_name], parent=old_man_take_any)
 | 
				
			||||||
| 
						 | 
					@ -577,7 +577,7 @@ def set_up_take_anys(world, player):
 | 
				
			||||||
        location = ALttPLocation(player, take_any.name, shop_table_by_location[take_any.name], parent=take_any)
 | 
					        location = ALttPLocation(player, take_any.name, shop_table_by_location[take_any.name], parent=take_any)
 | 
				
			||||||
        location.shop_slot = 1
 | 
					        location.shop_slot = 1
 | 
				
			||||||
        take_any.locations.append(location)
 | 
					        take_any.locations.append(location)
 | 
				
			||||||
        location.place_locked_item(ItemFactory("Boss Heart Container", player))
 | 
					        location.place_locked_item(item_factory("Boss Heart Container", world))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def get_pool_core(world, player: int):
 | 
					def get_pool_core(world, player: int):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
import typing
 | 
					import typing
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from BaseClasses import ItemClassification as IC
 | 
					from BaseClasses import ItemClassification as IC
 | 
				
			||||||
 | 
					from worlds.AutoWorld import World
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def GetBeemizerItem(world, player: int, item):
 | 
					def GetBeemizerItem(world, player: int, item):
 | 
				
			||||||
| 
						 | 
					@ -20,10 +21,7 @@ def GetBeemizerItem(world, player: int, item):
 | 
				
			||||||
        return "Bee Trap" if isinstance(item, str) else world.create_item("Bee Trap", player)
 | 
					        return "Bee Trap" if isinstance(item, str) else world.create_item("Bee Trap", player)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# should be replaced with direct world.create_item(item) call in the future
 | 
					def item_factory(items: typing.Union[str, typing.Iterable[str]], world: World):
 | 
				
			||||||
def ItemFactory(items: typing.Union[str, typing.Iterable[str]], player: int):
 | 
					 | 
				
			||||||
    from worlds.alttp import ALTTPWorld
 | 
					 | 
				
			||||||
    world = ALTTPWorld(None, player)
 | 
					 | 
				
			||||||
    ret = []
 | 
					    ret = []
 | 
				
			||||||
    singleton = False
 | 
					    singleton = False
 | 
				
			||||||
    if isinstance(items, str):
 | 
					    if isinstance(items, str):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,7 @@ from .Text import KingsReturn_texts, Sanctuary_texts, Kakariko_texts, Blacksmith
 | 
				
			||||||
    DeathMountain_texts, \
 | 
					    DeathMountain_texts, \
 | 
				
			||||||
    LostWoods_texts, WishingWell_texts, DesertPalace_texts, MountainTower_texts, LinksHouse_texts, Lumberjacks_texts, \
 | 
					    LostWoods_texts, WishingWell_texts, DesertPalace_texts, MountainTower_texts, LinksHouse_texts, Lumberjacks_texts, \
 | 
				
			||||||
    SickKid_texts, FluteBoy_texts, Zora_texts, MagicShop_texts, Sahasrahla_names
 | 
					    SickKid_texts, FluteBoy_texts, Zora_texts, MagicShop_texts, Sahasrahla_names
 | 
				
			||||||
from .Items import ItemFactory, item_table, item_name_groups, progression_items
 | 
					from .Items import item_table, item_name_groups, progression_items
 | 
				
			||||||
from .EntranceShuffle import door_addresses
 | 
					from .EntranceShuffle import door_addresses
 | 
				
			||||||
from .Options import small_key_shuffle
 | 
					from .Options import small_key_shuffle
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -996,7 +996,7 @@ def patch_rom(world: MultiWorld, rom: LocalRom, player: int, enemized: bool):
 | 
				
			||||||
    rom.write_byte(0x18003A, 0x01 if world.dark_world_light_cone else 0x00)
 | 
					    rom.write_byte(0x18003A, 0x01 if world.dark_world_light_cone else 0x00)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    GREEN_TWENTY_RUPEES = 0x47
 | 
					    GREEN_TWENTY_RUPEES = 0x47
 | 
				
			||||||
    GREEN_CLOCK = ItemFactory('Green Clock', player).code
 | 
					    GREEN_CLOCK = item_table["Green Clock"].item_code
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    rom.write_byte(0x18004F, 0x01)  # Byrna Invulnerability: on
 | 
					    rom.write_byte(0x18004F, 0x01)  # Byrna Invulnerability: on
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1777,13 +1777,13 @@ def write_custom_shops(rom, world, player):
 | 
				
			||||||
            if item['player'] and world.game[item['player']] != "A Link to the Past":  # item not native to ALTTP
 | 
					            if item['player'] and world.game[item['player']] != "A Link to the Past":  # item not native to ALTTP
 | 
				
			||||||
                item_code = get_nonnative_item_sprite(world.worlds[item['player']].item_name_to_id[item['item']])
 | 
					                item_code = get_nonnative_item_sprite(world.worlds[item['player']].item_name_to_id[item['item']])
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                item_code = ItemFactory(item['item'], player).code
 | 
					                item_code = item_table[item["item"]].item_code
 | 
				
			||||||
                if item['item'] == 'Single Arrow' and item['player'] == 0 and world.retro_bow[player]:
 | 
					                if item['item'] == 'Single Arrow' and item['player'] == 0 and world.retro_bow[player]:
 | 
				
			||||||
                    rom.write_byte(0x186500 + shop.sram_offset + slot, arrow_mask)
 | 
					                    rom.write_byte(0x186500 + shop.sram_offset + slot, arrow_mask)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            item_data = [shop_id, item_code] + price_data + \
 | 
					            item_data = [shop_id, item_code] + price_data + \
 | 
				
			||||||
                        [item['max'], ItemFactory(item['replacement'], player).code if item['replacement'] else 0xFF] + \
 | 
					                        [item["max"], item_table[item["replacement"]].item_code if item["replacement"] else 0xFF] + \
 | 
				
			||||||
                        replacement_price_data + [0 if item['player'] == player else min(ROM_PLAYER_LIMIT, item['player'])]
 | 
					                        replacement_price_data + [0 if item["player"] == player else min(ROM_PLAYER_LIMIT, item["player"])]
 | 
				
			||||||
            items_data.extend(item_data)
 | 
					            items_data.extend(item_data)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    rom.write_bytes(0x184800, shop_data)
 | 
					    rom.write_bytes(0x184800, shop_data)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -8,7 +8,7 @@ from worlds.generic.Rules import (add_item_rule, add_rule, forbid_item,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from . import OverworldGlitchRules
 | 
					from . import OverworldGlitchRules
 | 
				
			||||||
from .Bosses import GanonDefeatRule
 | 
					from .Bosses import GanonDefeatRule
 | 
				
			||||||
from .Items import ItemFactory, item_name_groups, item_table, progression_items
 | 
					from .Items import item_factory, item_name_groups, item_table, progression_items
 | 
				
			||||||
from .Options import small_key_shuffle
 | 
					from .Options import small_key_shuffle
 | 
				
			||||||
from .OverworldGlitchRules import no_logic_rules, overworld_glitches_rules
 | 
					from .OverworldGlitchRules import no_logic_rules, overworld_glitches_rules
 | 
				
			||||||
from .Regions import LTTPRegionType, location_table
 | 
					from .Regions import LTTPRegionType, location_table
 | 
				
			||||||
| 
						 | 
					@ -1181,7 +1181,7 @@ def set_trock_key_rules(world, player):
 | 
				
			||||||
                        forbid_item(world.get_location(location, player), 'Big Key (Turtle Rock)', player)
 | 
					                        forbid_item(world.get_location(location, player), 'Big Key (Turtle Rock)', player)
 | 
				
			||||||
                else:
 | 
					                else:
 | 
				
			||||||
                    # A key is required in the Big Key Chest to prevent a possible softlock.  Place an extra key to ensure 100% locations still works
 | 
					                    # A key is required in the Big Key Chest to prevent a possible softlock.  Place an extra key to ensure 100% locations still works
 | 
				
			||||||
                    item = ItemFactory('Small Key (Turtle Rock)', player)
 | 
					                    item = item_factory('Small Key (Turtle Rock)', world.worlds[player])
 | 
				
			||||||
                    location = world.get_location('Turtle Rock - Big Key Chest', player)
 | 
					                    location = world.get_location('Turtle Rock - Big Key Chest', player)
 | 
				
			||||||
                    location.place_locked_item(item)
 | 
					                    location.place_locked_item(item)
 | 
				
			||||||
                    location.event = True
 | 
					                    location.event = True
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -14,3 +14,4 @@ class LTTPTestBase(unittest.TestCase):
 | 
				
			||||||
        for name, option in AutoWorldRegister.world_types["A Link to the Past"].options_dataclass.type_hints.items():
 | 
					        for name, option in AutoWorldRegister.world_types["A Link to the Past"].options_dataclass.type_hints.items():
 | 
				
			||||||
            setattr(args, name, {1: option.from_any(getattr(option, "default"))})
 | 
					            setattr(args, name, {1: option.from_any(getattr(option, "default"))})
 | 
				
			||||||
        self.multiworld.set_options(args)
 | 
					        self.multiworld.set_options(args)
 | 
				
			||||||
 | 
					        self.world = self.multiworld.worlds[1]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@ from BaseClasses import CollectionState, ItemClassification
 | 
				
			||||||
from worlds.alttp.Dungeons import get_dungeon_item_pool
 | 
					from worlds.alttp.Dungeons import get_dungeon_item_pool
 | 
				
			||||||
from worlds.alttp.EntranceShuffle import mandatory_connections, connect_simple
 | 
					from worlds.alttp.EntranceShuffle import mandatory_connections, connect_simple
 | 
				
			||||||
from worlds.alttp.ItemPool import difficulties
 | 
					from worlds.alttp.ItemPool import difficulties
 | 
				
			||||||
from worlds.alttp.Items import ItemFactory
 | 
					from worlds.alttp.Items import item_factory
 | 
				
			||||||
from worlds.alttp.Regions import create_regions
 | 
					from worlds.alttp.Regions import create_regions
 | 
				
			||||||
from worlds.alttp.Shops import create_shops
 | 
					from worlds.alttp.Shops import create_shops
 | 
				
			||||||
from worlds.alttp.test import LTTPTestBase
 | 
					from worlds.alttp.test import LTTPTestBase
 | 
				
			||||||
| 
						 | 
					@ -24,10 +24,10 @@ class TestDungeon(LTTPTestBase):
 | 
				
			||||||
        connect_simple(self.multiworld, 'Big Bomb Shop', 'Big Bomb Shop', 1)
 | 
					        connect_simple(self.multiworld, 'Big Bomb Shop', 'Big Bomb Shop', 1)
 | 
				
			||||||
        self.multiworld.get_region('Menu', 1).exits = []
 | 
					        self.multiworld.get_region('Menu', 1).exits = []
 | 
				
			||||||
        self.multiworld.swamp_patch_required[1] = True
 | 
					        self.multiworld.swamp_patch_required[1] = True
 | 
				
			||||||
        self.multiworld.worlds[1].set_rules()
 | 
					        self.world.set_rules()
 | 
				
			||||||
        self.multiworld.worlds[1].create_items()
 | 
					        self.world.create_items()
 | 
				
			||||||
        self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
 | 
					        self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
 | 
				
			||||||
        self.multiworld.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.multiworld.itempool.extend(item_factory(['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'], self.world))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def run_tests(self, access_pool):
 | 
					    def run_tests(self, access_pool):
 | 
				
			||||||
        for exit in self.remove_exits:
 | 
					        for exit in self.remove_exits:
 | 
				
			||||||
| 
						 | 
					@ -40,9 +40,9 @@ class TestDungeon(LTTPTestBase):
 | 
				
			||||||
                if all_except and len(all_except) > 0:
 | 
					                if all_except and len(all_except) > 0:
 | 
				
			||||||
                    items = self.multiworld.itempool[:]
 | 
					                    items = self.multiworld.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 = [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))
 | 
					                    items.extend(item_factory(item_pool[0], self.world))
 | 
				
			||||||
                else:
 | 
					                else:
 | 
				
			||||||
                    items = ItemFactory(items, 1)
 | 
					                    items = item_factory(items, self.world)
 | 
				
			||||||
                state = CollectionState(self.multiworld)
 | 
					                state = CollectionState(self.multiworld)
 | 
				
			||||||
                state.reachable_regions[1].add(self.multiworld.get_region('Menu', 1))
 | 
					                state.reachable_regions[1].add(self.multiworld.get_region('Menu', 1))
 | 
				
			||||||
                for region_name in self.starting_regions:
 | 
					                for region_name in self.starting_regions:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@ from worlds.alttp.Dungeons import create_dungeons, get_dungeon_item_pool
 | 
				
			||||||
from worlds.alttp.EntranceShuffle import link_inverted_entrances
 | 
					from worlds.alttp.EntranceShuffle import link_inverted_entrances
 | 
				
			||||||
from worlds.alttp.InvertedRegions import create_inverted_regions
 | 
					from worlds.alttp.InvertedRegions import create_inverted_regions
 | 
				
			||||||
from worlds.alttp.ItemPool import difficulties
 | 
					from worlds.alttp.ItemPool import difficulties
 | 
				
			||||||
from worlds.alttp.Items import ItemFactory
 | 
					from worlds.alttp.Items import item_factory
 | 
				
			||||||
from worlds.alttp.Regions import mark_light_world_regions
 | 
					from worlds.alttp.Regions import mark_light_world_regions
 | 
				
			||||||
from worlds.alttp.Shops import create_shops
 | 
					from worlds.alttp.Shops import create_shops
 | 
				
			||||||
from test.TestBase import TestBase
 | 
					from test.TestBase import TestBase
 | 
				
			||||||
| 
						 | 
					@ -18,14 +18,14 @@ class TestInverted(TestBase, LTTPTestBase):
 | 
				
			||||||
        self.multiworld.bombless_start[1].value = True
 | 
					        self.multiworld.bombless_start[1].value = True
 | 
				
			||||||
        self.multiworld.shuffle_capacity_upgrades[1].value = True
 | 
					        self.multiworld.shuffle_capacity_upgrades[1].value = True
 | 
				
			||||||
        create_inverted_regions(self.multiworld, 1)
 | 
					        create_inverted_regions(self.multiworld, 1)
 | 
				
			||||||
        self.multiworld.worlds[1].create_dungeons()
 | 
					        self.world.create_dungeons()
 | 
				
			||||||
        create_shops(self.multiworld, 1)
 | 
					        create_shops(self.multiworld, 1)
 | 
				
			||||||
        link_inverted_entrances(self.multiworld, 1)
 | 
					        link_inverted_entrances(self.multiworld, 1)
 | 
				
			||||||
        self.multiworld.worlds[1].create_items()
 | 
					        self.world.create_items()
 | 
				
			||||||
        self.multiworld.required_medallions[1] = ['Ether', 'Quake']
 | 
					        self.multiworld.required_medallions[1] = ['Ether', 'Quake']
 | 
				
			||||||
        self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
 | 
					        self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
 | 
				
			||||||
        self.multiworld.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.multiworld.itempool.extend(item_factory(['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'], self.world))
 | 
				
			||||||
        self.multiworld.get_location('Agahnim 1', 1).item = None
 | 
					        self.multiworld.get_location('Agahnim 1', 1).item = None
 | 
				
			||||||
        self.multiworld.get_location('Agahnim 2', 1).item = None
 | 
					        self.multiworld.get_location('Agahnim 2', 1).item = None
 | 
				
			||||||
        mark_light_world_regions(self.multiworld, 1)
 | 
					        mark_light_world_regions(self.multiworld, 1)
 | 
				
			||||||
        self.multiworld.worlds[1].set_rules()
 | 
					        self.world.set_rules()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@ from worlds.alttp.Dungeons import create_dungeons, get_dungeon_item_pool
 | 
				
			||||||
from worlds.alttp.EntranceShuffle import link_inverted_entrances
 | 
					from worlds.alttp.EntranceShuffle import link_inverted_entrances
 | 
				
			||||||
from worlds.alttp.InvertedRegions import create_inverted_regions
 | 
					from worlds.alttp.InvertedRegions import create_inverted_regions
 | 
				
			||||||
from worlds.alttp.ItemPool import difficulties
 | 
					from worlds.alttp.ItemPool import difficulties
 | 
				
			||||||
from worlds.alttp.Items import ItemFactory
 | 
					from worlds.alttp.Items import item_factory
 | 
				
			||||||
from worlds.alttp.Regions import mark_light_world_regions
 | 
					from worlds.alttp.Regions import mark_light_world_regions
 | 
				
			||||||
from worlds.alttp.Shops import create_shops
 | 
					from worlds.alttp.Shops import create_shops
 | 
				
			||||||
from test.TestBase import TestBase
 | 
					from test.TestBase import TestBase
 | 
				
			||||||
| 
						 | 
					@ -19,14 +19,14 @@ class TestInvertedMinor(TestBase, LTTPTestBase):
 | 
				
			||||||
        self.multiworld.shuffle_capacity_upgrades[1].value = True
 | 
					        self.multiworld.shuffle_capacity_upgrades[1].value = True
 | 
				
			||||||
        self.multiworld.difficulty_requirements[1] = difficulties['normal']
 | 
					        self.multiworld.difficulty_requirements[1] = difficulties['normal']
 | 
				
			||||||
        create_inverted_regions(self.multiworld, 1)
 | 
					        create_inverted_regions(self.multiworld, 1)
 | 
				
			||||||
        self.multiworld.worlds[1].create_dungeons()
 | 
					        self.world.create_dungeons()
 | 
				
			||||||
        create_shops(self.multiworld, 1)
 | 
					        create_shops(self.multiworld, 1)
 | 
				
			||||||
        link_inverted_entrances(self.multiworld, 1)
 | 
					        link_inverted_entrances(self.multiworld, 1)
 | 
				
			||||||
        self.multiworld.worlds[1].create_items()
 | 
					        self.world.create_items()
 | 
				
			||||||
        self.multiworld.required_medallions[1] = ['Ether', 'Quake']
 | 
					        self.multiworld.required_medallions[1] = ['Ether', 'Quake']
 | 
				
			||||||
        self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
 | 
					        self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
 | 
				
			||||||
        self.multiworld.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.multiworld.itempool.extend(item_factory(['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'], self.world))
 | 
				
			||||||
        self.multiworld.get_location('Agahnim 1', 1).item = None
 | 
					        self.multiworld.get_location('Agahnim 1', 1).item = None
 | 
				
			||||||
        self.multiworld.get_location('Agahnim 2', 1).item = None
 | 
					        self.multiworld.get_location('Agahnim 2', 1).item = None
 | 
				
			||||||
        mark_light_world_regions(self.multiworld, 1)
 | 
					        mark_light_world_regions(self.multiworld, 1)
 | 
				
			||||||
        self.multiworld.worlds[1].set_rules()
 | 
					        self.world.set_rules()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@ from worlds.alttp.Dungeons import create_dungeons, get_dungeon_item_pool
 | 
				
			||||||
from worlds.alttp.EntranceShuffle import link_inverted_entrances
 | 
					from worlds.alttp.EntranceShuffle import link_inverted_entrances
 | 
				
			||||||
from worlds.alttp.InvertedRegions import create_inverted_regions
 | 
					from worlds.alttp.InvertedRegions import create_inverted_regions
 | 
				
			||||||
from worlds.alttp.ItemPool import difficulties
 | 
					from worlds.alttp.ItemPool import difficulties
 | 
				
			||||||
from worlds.alttp.Items import ItemFactory
 | 
					from worlds.alttp.Items import item_factory
 | 
				
			||||||
from worlds.alttp.Regions import mark_light_world_regions
 | 
					from worlds.alttp.Regions import mark_light_world_regions
 | 
				
			||||||
from worlds.alttp.Shops import create_shops
 | 
					from worlds.alttp.Shops import create_shops
 | 
				
			||||||
from test.TestBase import TestBase
 | 
					from test.TestBase import TestBase
 | 
				
			||||||
| 
						 | 
					@ -19,16 +19,16 @@ class TestInvertedOWG(TestBase, LTTPTestBase):
 | 
				
			||||||
        self.multiworld.shuffle_capacity_upgrades[1].value = True
 | 
					        self.multiworld.shuffle_capacity_upgrades[1].value = True
 | 
				
			||||||
        self.multiworld.difficulty_requirements[1] = difficulties['normal']
 | 
					        self.multiworld.difficulty_requirements[1] = difficulties['normal']
 | 
				
			||||||
        create_inverted_regions(self.multiworld, 1)
 | 
					        create_inverted_regions(self.multiworld, 1)
 | 
				
			||||||
        self.multiworld.worlds[1].create_dungeons()
 | 
					        self.world.create_dungeons()
 | 
				
			||||||
        create_shops(self.multiworld, 1)
 | 
					        create_shops(self.multiworld, 1)
 | 
				
			||||||
        link_inverted_entrances(self.multiworld, 1)
 | 
					        link_inverted_entrances(self.multiworld, 1)
 | 
				
			||||||
        self.multiworld.worlds[1].create_items()
 | 
					        self.world.create_items()
 | 
				
			||||||
        self.multiworld.required_medallions[1] = ['Ether', 'Quake']
 | 
					        self.multiworld.required_medallions[1] = ['Ether', 'Quake']
 | 
				
			||||||
        self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
 | 
					        self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
 | 
				
			||||||
        self.multiworld.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.multiworld.itempool.extend(item_factory(['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'], self.world))
 | 
				
			||||||
        self.multiworld.get_location('Agahnim 1', 1).item = None
 | 
					        self.multiworld.get_location('Agahnim 1', 1).item = None
 | 
				
			||||||
        self.multiworld.get_location('Agahnim 2', 1).item = None
 | 
					        self.multiworld.get_location('Agahnim 2', 1).item = None
 | 
				
			||||||
        self.multiworld.precollected_items[1].clear()
 | 
					        self.multiworld.precollected_items[1].clear()
 | 
				
			||||||
        self.multiworld.itempool.append(ItemFactory('Pegasus Boots', 1))
 | 
					        self.multiworld.itempool.append(item_factory('Pegasus Boots', self.world))
 | 
				
			||||||
        mark_light_world_regions(self.multiworld, 1)
 | 
					        mark_light_world_regions(self.multiworld, 1)
 | 
				
			||||||
        self.multiworld.worlds[1].set_rules()
 | 
					        self.world.set_rules()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
from worlds.alttp.Dungeons import get_dungeon_item_pool
 | 
					from worlds.alttp.Dungeons import get_dungeon_item_pool
 | 
				
			||||||
from worlds.alttp.InvertedRegions import mark_dark_world_regions
 | 
					from worlds.alttp.InvertedRegions import mark_dark_world_regions
 | 
				
			||||||
from worlds.alttp.ItemPool import difficulties
 | 
					from worlds.alttp.ItemPool import difficulties
 | 
				
			||||||
from worlds.alttp.Items import ItemFactory
 | 
					from worlds.alttp.Items import item_factory
 | 
				
			||||||
from test.TestBase import TestBase
 | 
					from test.TestBase import TestBase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from worlds.alttp.test import LTTPTestBase
 | 
					from worlds.alttp.test import LTTPTestBase
 | 
				
			||||||
| 
						 | 
					@ -14,15 +14,15 @@ class TestMinor(TestBase, LTTPTestBase):
 | 
				
			||||||
        self.multiworld.bombless_start[1].value = True
 | 
					        self.multiworld.bombless_start[1].value = True
 | 
				
			||||||
        self.multiworld.shuffle_capacity_upgrades[1].value = True
 | 
					        self.multiworld.shuffle_capacity_upgrades[1].value = True
 | 
				
			||||||
        self.multiworld.difficulty_requirements[1] = difficulties['normal']
 | 
					        self.multiworld.difficulty_requirements[1] = difficulties['normal']
 | 
				
			||||||
        self.multiworld.worlds[1].er_seed = 0
 | 
					        self.world.er_seed = 0
 | 
				
			||||||
        self.multiworld.worlds[1].create_regions()
 | 
					        self.world.create_regions()
 | 
				
			||||||
        self.multiworld.worlds[1].create_items()
 | 
					        self.world.create_items()
 | 
				
			||||||
        self.multiworld.required_medallions[1] = ['Ether', 'Quake']
 | 
					        self.multiworld.required_medallions[1] = ['Ether', 'Quake']
 | 
				
			||||||
        self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
 | 
					        self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
 | 
				
			||||||
        self.multiworld.itempool.extend(ItemFactory(
 | 
					        self.multiworld.itempool.extend(item_factory(
 | 
				
			||||||
            ['Green Pendant', 'Red Pendant', 'Blue Pendant', 'Beat Agahnim 1', 'Beat Agahnim 2', 'Crystal 1',
 | 
					            ['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))
 | 
					             'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 5', 'Crystal 6', 'Crystal 7'], self.world))
 | 
				
			||||||
        self.multiworld.get_location('Agahnim 1', 1).item = None
 | 
					        self.multiworld.get_location('Agahnim 1', 1).item = None
 | 
				
			||||||
        self.multiworld.get_location('Agahnim 2', 1).item = None
 | 
					        self.multiworld.get_location('Agahnim 2', 1).item = None
 | 
				
			||||||
        mark_dark_world_regions(self.multiworld, 1)
 | 
					        mark_dark_world_regions(self.multiworld, 1)
 | 
				
			||||||
        self.multiworld.worlds[1].set_rules()
 | 
					        self.world.set_rules()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
from test.TestBase import WorldTestBase
 | 
					from test.bases import WorldTestBase
 | 
				
			||||||
from ...Items import ItemFactory
 | 
					from ...Items import item_factory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class PyramidTestBase(WorldTestBase):
 | 
					class PyramidTestBase(WorldTestBase):
 | 
				
			||||||
| 
						 | 
					@ -32,6 +32,6 @@ class GoalPyramidTest(PyramidTestBase):
 | 
				
			||||||
        self.assertFalse(self.can_reach_entrance("Pyramid Hole"))
 | 
					        self.assertFalse(self.can_reach_entrance("Pyramid Hole"))
 | 
				
			||||||
        self.collect_by_name(["Hammer", "Progressive Glove", "Moon Pearl"])
 | 
					        self.collect_by_name(["Hammer", "Progressive Glove", "Moon Pearl"])
 | 
				
			||||||
        self.assertFalse(self.can_reach_entrance("Pyramid Hole"))
 | 
					        self.assertFalse(self.can_reach_entrance("Pyramid Hole"))
 | 
				
			||||||
        self.multiworld.state.collect(ItemFactory("Beat Agahnim 2", 1))
 | 
					        self.collect(item_factory("Beat Agahnim 2", self.multiworld.worlds[1]))
 | 
				
			||||||
        self.assertTrue(self.can_reach_entrance("Pyramid Hole"))
 | 
					        self.assertTrue(self.can_reach_entrance("Pyramid Hole"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
from worlds.alttp.Dungeons import get_dungeon_item_pool
 | 
					from worlds.alttp.Dungeons import get_dungeon_item_pool
 | 
				
			||||||
from worlds.alttp.InvertedRegions import mark_dark_world_regions
 | 
					from worlds.alttp.InvertedRegions import mark_dark_world_regions
 | 
				
			||||||
from worlds.alttp.ItemPool import difficulties
 | 
					from worlds.alttp.ItemPool import difficulties
 | 
				
			||||||
from worlds.alttp.Items import ItemFactory
 | 
					from worlds.alttp.Items import item_factory
 | 
				
			||||||
from test.TestBase import TestBase
 | 
					from test.TestBase import TestBase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from worlds.alttp.test import LTTPTestBase
 | 
					from worlds.alttp.test import LTTPTestBase
 | 
				
			||||||
| 
						 | 
					@ -19,10 +19,10 @@ class TestVanillaOWG(TestBase, LTTPTestBase):
 | 
				
			||||||
        self.multiworld.worlds[1].create_items()
 | 
					        self.multiworld.worlds[1].create_items()
 | 
				
			||||||
        self.multiworld.required_medallions[1] = ['Ether', 'Quake']
 | 
					        self.multiworld.required_medallions[1] = ['Ether', 'Quake']
 | 
				
			||||||
        self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
 | 
					        self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
 | 
				
			||||||
        self.multiworld.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.multiworld.itempool.extend(item_factory(['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'], self.world))
 | 
				
			||||||
        self.multiworld.get_location('Agahnim 1', 1).item = None
 | 
					        self.multiworld.get_location('Agahnim 1', 1).item = None
 | 
				
			||||||
        self.multiworld.get_location('Agahnim 2', 1).item = None
 | 
					        self.multiworld.get_location('Agahnim 2', 1).item = None
 | 
				
			||||||
        self.multiworld.precollected_items[1].clear()
 | 
					        self.multiworld.precollected_items[1].clear()
 | 
				
			||||||
        self.multiworld.itempool.append(ItemFactory('Pegasus Boots', 1))
 | 
					        self.multiworld.itempool.append(item_factory('Pegasus Boots', self.world))
 | 
				
			||||||
        mark_dark_world_regions(self.multiworld, 1)
 | 
					        mark_dark_world_regions(self.multiworld, 1)
 | 
				
			||||||
        self.multiworld.worlds[1].set_rules()
 | 
					        self.world.set_rules()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,7 +1,7 @@
 | 
				
			||||||
from worlds.alttp.Dungeons import get_dungeon_item_pool
 | 
					from worlds.alttp.Dungeons import get_dungeon_item_pool
 | 
				
			||||||
from worlds.alttp.InvertedRegions import mark_dark_world_regions
 | 
					from worlds.alttp.InvertedRegions import mark_dark_world_regions
 | 
				
			||||||
from worlds.alttp.ItemPool import difficulties
 | 
					from worlds.alttp.ItemPool import difficulties
 | 
				
			||||||
from worlds.alttp.Items import ItemFactory
 | 
					from worlds.alttp.Items import item_factory
 | 
				
			||||||
from test.TestBase import TestBase
 | 
					from test.TestBase import TestBase
 | 
				
			||||||
from worlds.alttp.test import LTTPTestBase
 | 
					from worlds.alttp.test import LTTPTestBase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,8 +18,8 @@ class TestVanilla(TestBase, LTTPTestBase):
 | 
				
			||||||
        self.multiworld.worlds[1].create_items()
 | 
					        self.multiworld.worlds[1].create_items()
 | 
				
			||||||
        self.multiworld.required_medallions[1] = ['Ether', 'Quake']
 | 
					        self.multiworld.required_medallions[1] = ['Ether', 'Quake']
 | 
				
			||||||
        self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
 | 
					        self.multiworld.itempool.extend(get_dungeon_item_pool(self.multiworld))
 | 
				
			||||||
        self.multiworld.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.multiworld.itempool.extend(item_factory(['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'], self.world))
 | 
				
			||||||
        self.multiworld.get_location('Agahnim 1', 1).item = None
 | 
					        self.multiworld.get_location('Agahnim 1', 1).item = None
 | 
				
			||||||
        self.multiworld.get_location('Agahnim 2', 1).item = None
 | 
					        self.multiworld.get_location('Agahnim 2', 1).item = None
 | 
				
			||||||
        mark_dark_world_regions(self.multiworld, 1)
 | 
					        mark_dark_world_regions(self.multiworld, 1)
 | 
				
			||||||
        self.multiworld.worlds[1].set_rules()
 | 
					        self.world.set_rules()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue