Refactored Locations, added heart beep setting.
This commit is contained in:
		
							parent
							
								
									bbd52c780d
								
							
						
					
					
						commit
						e4e0304b40
					
				|  | @ -350,6 +350,7 @@ class Region(object): | |||
|         self.exits = [] | ||||
|         self.locations = [] | ||||
|         self.spot_type = 'Region' | ||||
|         self.hint_text = 'Hyrule' | ||||
| 
 | ||||
|     def can_reach(self, state): | ||||
|         for entrance in self.entrances: | ||||
|  | @ -357,14 +358,6 @@ class Region(object): | |||
|                 return True | ||||
|         return False | ||||
| 
 | ||||
|     def add_locations(self, *locations): | ||||
|         for location in locations: | ||||
|             self.locations.append(Location(location, self)) | ||||
| 
 | ||||
|     def add_exits(self, *exits): | ||||
|         for exit in exits: | ||||
|             self.exits.append(Entrance(exit, self)) | ||||
| 
 | ||||
|     def __str__(self): | ||||
|         return str(self.__unicode__()) | ||||
| 
 | ||||
|  | @ -404,15 +397,14 @@ class Entrance(object): | |||
| 
 | ||||
| class Location(object): | ||||
| 
 | ||||
|     def __init__(self, name='', parent=None, access=None, item_rule=None): | ||||
|     def __init__(self, name='', address=None, crystal=False, hint_text=None, parent=None): | ||||
|         self.name = name | ||||
|         self.parent_region = parent | ||||
|         self.item = None | ||||
|         self.crystal = crystal | ||||
|         self.address = address | ||||
|         self.spot_type = 'Location' | ||||
|         if access is not None: | ||||
|             self.access_rule = access | ||||
|         if item_rule is not None: | ||||
|             self.item_rule = item_rule | ||||
|         self.hint_text = hint_text if hint_text is not None else 'Hyrule' | ||||
| 
 | ||||
|     def access_rule(self, state): | ||||
|         return True | ||||
|  |  | |||
							
								
								
									
										12
									
								
								Dungeons.py
								
								
								
								
							
							
						
						
									
										12
									
								
								Dungeons.py
								
								
								
								
							|  | @ -67,3 +67,15 @@ def fill_dungeons(world): | |||
|                 world.push_item(di_location, dungeon_item, False) | ||||
| 
 | ||||
|     world.state._clear_cache() | ||||
| 
 | ||||
| 
 | ||||
| dungeon_music_addresses = {'Armos - Pendant': [0x1559A], | ||||
|                            'Lanmolas - Pendant': [0x1559B, 0x1559C, 0x1559D, 0x1559E], | ||||
|                            'Moldorm - Pendant': [0x155C5, 0x1107A, 0x10B8C], | ||||
|                            'Helmasaur - Crystal': [0x155B8], | ||||
|                            'Arrghus - Crystal': [0x155B7], | ||||
|                            'Blind - Crystal': [0x155C6], | ||||
|                            'Mothula - Crystal': [0x155BA, 0x155BB, 0x155BC, 0x155BD, 0x15608, 0x15609, 0x1560A, 0x1560B], | ||||
|                            'Kholdstare - Crystal': [0x155BF], | ||||
|                            'Vitreous - Crystal': [0x155B9], | ||||
|                            'Trinexx - Crystal': [0x155C7, 0x155A7, 0x155AA, 0x155AB]} | ||||
|  |  | |||
							
								
								
									
										4
									
								
								Main.py
								
								
								
								
							
							
						
						
									
										4
									
								
								Main.py
								
								
								
								
							|  | @ -62,7 +62,7 @@ def main(args, seed=None): | |||
|     logger.info('Patching ROM.') | ||||
| 
 | ||||
|     rom = bytearray(open(args.rom, 'rb').read()) | ||||
|     patched_rom = patch_rom(world, rom, args.quickswap) | ||||
|     patched_rom = patch_rom(world, rom, args.quickswap, args.heartbeep) | ||||
| 
 | ||||
|     outfilebase = 'ER_%s_%s_%s_%s' % (world.mode, world.goal, world.shuffle, world.seed) | ||||
| 
 | ||||
|  | @ -369,6 +369,8 @@ if __name__ == '__main__': | |||
|     parser.add_argument('--count', help='Use to batch generate multiple seeds with same settings. If --seed is provided, it will be used for the first seed, then used to derive the next seed (i.e. generating 10 seeds with --seed given will produce the same 10 (different) roms each time).', type=int) | ||||
|     parser.add_argument('--quickswap', help='Enable quick item swapping with L and R.', action='store_true') | ||||
|     parser.add_argument('--nodungeonitems', help='Remove Maps and Compasses from Itempool, replacing them by empty slots.', action='store_true') | ||||
|     parser.add_argument('--heartbeep', default='normal', const='normal', nargs='?', choices=['normal', 'half', 'quarter', 'off'], | ||||
|                         help='Select the rate at which the heart beep sound is played at low health.') | ||||
|     args = parser.parse_args() | ||||
| 
 | ||||
|     if not os.path.isfile(args.rom): | ||||
|  |  | |||
							
								
								
									
										500
									
								
								Regions.py
								
								
								
								
							
							
						
						
									
										500
									
								
								Regions.py
								
								
								
								
							|  | @ -1,10 +1,19 @@ | |||
| from BaseClasses import Region | ||||
| from BaseClasses import Region, Location, Entrance | ||||
| 
 | ||||
| 
 | ||||
| def create_regions(world): | ||||
| 
 | ||||
|     world.regions = [ | ||||
|         LightWorld(), | ||||
|         create_region('Light World', ['Mushroom', 'Bottle Vendor', 'Haunted Grove', 'Piece of Heart (Dam)', 'Purple Chest'], | ||||
|                       ["Thiefs Hut", "Hyrule Castle Secret Entrance Drop", "Hyrule Castle Secret Entrance Stairs", 'Zoras River', 'Kings Grave', 'Dam', | ||||
|                        'Links House', 'Tavern North', 'Chicken House', 'Aginahs Cave', 'Sahasrahlas Hut', 'Kakariko Well Drop', 'Kakariko Well Cave', | ||||
|                        'Blacksmiths Hut', 'Bat Cave Drop Ledge', 'Bat Cave Cave', 'Sick Kids House', 'Hobo Bridge', 'Thieves Forest Hideout Drop', 'Thieves Forest Hideout Stump', | ||||
|                        'Lumberjack Tree Tree', 'Lumberjack Tree Cave', 'Lake Hylia Cave', 'Ice Cave', | ||||
|                        'Bonk Rock Cave', 'Library', 'Witch Hut', 'Two Brothers House (East)', 'Desert Palace Stairs', 'Eastern Palace', 'Master Sword Meadow', 'Hyrule Castle Entrance (South)', | ||||
|                        'Sanctuary', 'Sanctuary Grave', 'Old Man Cave (West)', 'Flute Spot 1', 'Ice Palace', 'Dark Desert Teleporter', 'East Hyrule Teleporter', 'South Hyrule Teleporter', 'Kakariko Teleporter', | ||||
|                        'Elder House (East)', 'Elder House (West)', 'North Fairy Cave', 'North Fairy Cave Drop', 'Lost Woods Gamble', 'Snitch Lady (East)', 'Snitch Lady (West)', 'Tavern (Front)', | ||||
|                        'Bush Covered House', 'Light World Bomb Hut', 'Kakariko Shop', 'Long Fairy Cave', 'Good Bee Cave', '20 Rupee Cave', 'Cave Shop (Lake Hylia)', 'Waterfall of Wishing', | ||||
|                        'Capacity Upgrade', 'Bonk Fairy (Light)', '50 Rupee Cave', 'Fortune Teller (Light)', 'Lake Hylia Fairy', 'Swamp Fairy', 'Desert Fairy', 'Lumberjack House', 'Lake Hylia Fortune Teller', 'Kakariko Gamble Game']), | ||||
|         create_region('Thiefs Hut', ["[cave-022-B1] Thiefs hut [top chest]", | ||||
|                                      "[cave-022-B1] Thiefs hut [top left chest]", | ||||
|                                      "[cave-022-B1] Thiefs hut [top right chest]", | ||||
|  | @ -262,262 +271,237 @@ def create_region(name, locations=None, exits=None): | |||
|         locations = [] | ||||
|     if exits is None: | ||||
|         exits = [] | ||||
|     ret.add_exits(*exits) | ||||
|     ret.add_locations(*locations) | ||||
| 
 | ||||
|     for exit in exits: | ||||
|         ret.exits.append(Entrance(exit, ret)) | ||||
|     for location in locations: | ||||
|         address, crystal, hint_text = location_table[location] | ||||
|         ret.locations.append(Location(location, address, crystal, hint_text, ret)) | ||||
|     return ret | ||||
| 
 | ||||
| 
 | ||||
| class LightWorld(Region): | ||||
| 
 | ||||
|     def __init__(self): | ||||
|         super(LightWorld, self).__init__('Light World') | ||||
|         self.add_exits("Thiefs Hut", "Hyrule Castle Secret Entrance Drop", "Hyrule Castle Secret Entrance Stairs", 'Zoras River', 'Kings Grave', 'Dam', | ||||
|                        'Links House', 'Tavern North', 'Chicken House', 'Aginahs Cave', 'Sahasrahlas Hut', 'Kakariko Well Drop', 'Kakariko Well Cave', | ||||
|                        'Blacksmiths Hut', 'Bat Cave Drop Ledge', 'Bat Cave Cave', 'Sick Kids House', 'Hobo Bridge', 'Thieves Forest Hideout Drop', 'Thieves Forest Hideout Stump', | ||||
|                        'Lumberjack Tree Tree', 'Lumberjack Tree Cave', 'Lake Hylia Cave', 'Ice Cave', | ||||
|                        'Bonk Rock Cave', 'Library', 'Witch Hut', 'Two Brothers House (East)', 'Desert Palace Stairs', 'Eastern Palace', 'Master Sword Meadow', 'Hyrule Castle Entrance (South)', | ||||
|                        'Sanctuary', 'Sanctuary Grave', 'Old Man Cave (West)', 'Flute Spot 1', 'Ice Palace', 'Dark Desert Teleporter', 'East Hyrule Teleporter', 'South Hyrule Teleporter', 'Kakariko Teleporter', | ||||
|                        'Elder House (East)', 'Elder House (West)', 'North Fairy Cave', 'North Fairy Cave Drop', 'Lost Woods Gamble', 'Snitch Lady (East)', 'Snitch Lady (West)', 'Tavern (Front)', | ||||
|                        'Bush Covered House', 'Light World Bomb Hut', 'Kakariko Shop', 'Long Fairy Cave', 'Good Bee Cave', '20 Rupee Cave', 'Cave Shop (Lake Hylia)', 'Waterfall of Wishing', | ||||
|                        'Capacity Upgrade', 'Bonk Fairy (Light)', '50 Rupee Cave', 'Fortune Teller (Light)', 'Lake Hylia Fairy', 'Swamp Fairy', 'Desert Fairy', 'Lumberjack House', 'Lake Hylia Fortune Teller', 'Kakariko Gamble Game') | ||||
|         self.add_locations('Mushroom', 'Bottle Vendor', 'Haunted Grove', 'Piece of Heart (Dam)', 'Purple Chest') | ||||
| 
 | ||||
| 
 | ||||
| location_addresses = {'Mushroom': 0x180013, | ||||
|                       'Bottle Vendor': 0x2EB18, | ||||
|                       'Haunted Grove': 0x18014A, | ||||
|                       'Piece of Heart (Dam)': 0x180145, | ||||
|                       'Purple Chest': 0x33D68, | ||||
|                       '[cave-022-B1] Thiefs hut [top chest]': 0xEB0F, | ||||
|                       '[cave-022-B1] Thiefs hut [top left chest]': 0xEB12, | ||||
|                       '[cave-022-B1] Thiefs hut [top right chest]': 0xEB15, | ||||
|                       '[cave-022-B1] Thiefs hut [bottom left chest]': 0xEB18, | ||||
|                       '[cave-022-B1] Thiefs hut [bottom right chest]': 0xEB1B, | ||||
|                       'Uncle': 0x2DF45, | ||||
|                       '[cave-034] Hyrule Castle Secret Entrance': 0xE971, | ||||
|                       'King Zora': 0xEE1C3, | ||||
|                       'Piece of Heart (Zoras River)': 0x180149, | ||||
|                       '[cave-018] Graveyard - top right grave': 0xE97A, | ||||
|                       '[cave-047] Dam': 0xE98C, | ||||
|                       '[cave-040] Links House': 0xE9BC, | ||||
|                       '[cave-031] Tavern': 0xE9CE, | ||||
|                       '[cave-026] Chicken House': 0xE9E9, | ||||
|                       '[cave-044] Aginahs Cave': 0xE9F2, | ||||
|                       '[cave-035] Sahasrahlas Hut [left chest]': 0xEA82, | ||||
|                       '[cave-035] Sahasrahlas Hut [center chest]': 0xEA85, | ||||
|                       '[cave-035] Sahasrahlas Hut [right chest]': 0xEA88, | ||||
|                       'Sahasrahla': 0x2F1FC, | ||||
|                       '[cave-021] Kakariko Well [top chest]': 0xEA8E, | ||||
|                       '[cave-021] Kakariko Well [left chest row of 3]': 0xEA91, | ||||
|                       '[cave-021] Kakariko Well [center chest row of 3]': 0xEA94, | ||||
|                       '[cave-021] Kakariko Well [right chest row of 3]': 0xEA97, | ||||
|                       '[cave-021] Kakariko Well [bottom chest]': 0xEA9A, | ||||
|                       'Blacksmiths': 0x18002A, | ||||
|                       'Magic Bat': 0x180015, | ||||
|                       'Sick Kid': 0x339CF, | ||||
|                       'Hobo': 0x33E7D, | ||||
|                       'Piece of Heart (Thieves Forest Hideout)': 0x180000, | ||||
|                       'Piece of Heart (Lumberjack Tree)': 0x180001, | ||||
|                       'Piece of Heart (Cave South of Haunted Grove)': 0x180003, | ||||
|                       'Piece of Heart (Graveyard Cave)': 0x180004, | ||||
|                       'Piece of Heart (Desert Cave)': 0x180005, | ||||
|                       '[cave-050] Lake Hylia Cave [bottom left chest]': 0xEB42, | ||||
|                       '[cave-050] Lake Hylia Cave [top left chest]': 0xEB45, | ||||
|                       '[cave-050] Lake Hylia Cave [top right chest]': 0xEB48, | ||||
|                       '[cave-050] Lake Hylia Cave [bottom right chest]': 0xEB4B, | ||||
|                       '[cave-050] Lake Hylia Cave [generous guy]': 0x180010, | ||||
|                       '[cave-051] Ice Cave': 0xEB4E, | ||||
|                       '[cave-016] Bonk Rock Cave': 0xEB3F, | ||||
|                       'Library': 0x180012, | ||||
|                       'Witch': 0x180014, | ||||
|                       'Piece of Heart (Lake Hylia)': 0x180144, | ||||
|                       'Piece of Heart (Maze Race)': 0x180142, | ||||
|                       'Piece of Heart (Desert - west side)': 0x180143, | ||||
|                       '[dungeon-L2-B1] Desert Palace - Big Chest': 0xE98F, | ||||
|                       '[dungeon-L2-B1] Desert Palace - Torch': 0x180160, | ||||
|                       '[dungeon-L2-B1] Desert Palace - Map Room': 0xE9B6, | ||||
|                       '[dungeon-L2-B1] Desert Palace - Compass Room': 0xE9CB, | ||||
|                       '[dungeon-L2-B1] Desert Palace - Big Key Room': 0xE9C2, | ||||
|                       'Lanmolas - Heart Container': 0x180151, | ||||
|                       '[dungeon-L1-1F] Eastern Palace - Compass Room': 0xE977, | ||||
|                       '[dungeon-L1-1F] Eastern Palace - Big Chest': 0xE97D, | ||||
|                       '[dungeon-L1-1F] Eastern Palace - Big Ball Room': 0xE9B3, | ||||
|                       '[dungeon-L1-1F] Eastern Palace - Big Key Room': 0xE9B9, | ||||
|                       '[dungeon-L1-1F] Eastern Palace - Map Room': 0xE9F5, | ||||
|                       'Armos - Heart Container': 0x180150, | ||||
|                       'Altar': 0x289B0, | ||||
|                       '[dungeon-C-B1] Hyrule Castle - Boomerang Room': 0xE974, | ||||
|                       '[dungeon-C-B1] Hyrule Castle - Map Room': 0xEB0C, | ||||
|                       '[dungeon-C-B1] Hyrule Castle - Next To Zelda': 0xEB09, | ||||
|                       '[dungeon-C-B1] Escape - First B1 Room': 0xE96E, | ||||
|                       '[dungeon-C-B1] Escape - Final Basement Room [left chest]': 0xEB5D, | ||||
|                       '[dungeon-C-B1] Escape - Final Basement Room [middle chest]': 0xEB60, | ||||
|                       '[dungeon-C-B1] Escape - Final Basement Room [right chest]': 0xEB63, | ||||
|                       '[dungeon-C-1F] Sanctuary': 0xEA79, | ||||
|                       '[dungeon-A1-2F] Hyrule Castle Tower - 2 Knife Guys Room': 0xEAB5, | ||||
|                       '[dungeon-A1-3F] Hyrule Castle Tower - Maze Room': 0xEAB2, | ||||
|                       'Old Mountain Man': 0xF69FA, | ||||
|                       'Piece of Heart (Spectacle Rock Cave)': 0x180002, | ||||
|                       '[cave-009-1F] Death Mountain - right cave [top left chest]': 0xEB2A, | ||||
|                       '[cave-009-1F] Death Mountain - right cave [top left middle chest]': 0xEB2D, | ||||
|                       '[cave-009-1F] Death Mountain - right cave [top right middle chest]': 0xEB30, | ||||
|                       '[cave-009-1F] Death Mountain - right cave [top right chest]': 0xEB33, | ||||
|                       '[cave-009-1F] Death Mountain - right cave [bottom chest]': 0xEB36, | ||||
|                       '[cave-009-B1] Death Mountain - right cave [left chest]': 0xEB39, | ||||
|                       '[cave-009-B1] Death Mountain - right cave [right chest]': 0xEB3C, | ||||
|                       '[cave-012-1F] Death Mountain - left cave]': 0xE9BF, | ||||
|                       'Ether Tablet': 0x180016, | ||||
|                       'Piece of Heart (Spectacle Rock)': 0x180140, | ||||
|                       '[dungeon-L3-1F] Tower of Hera - Freestanding Key': 0x180162, | ||||
|                       '[dungeon-L3-1F] Tower of Hera - Entrance': 0xE9AD, | ||||
|                       '[dungeon-L3-1F] Tower of Hera - Basement': 0xE9E6, | ||||
|                       '[dungeon-L3-1F] Tower of Hera - 4F [small chest]': 0xE9FB, | ||||
|                       '[dungeon-L3-1F] Tower of Hera - Big Chest': 0xE9F8, | ||||
|                       'Moldorm - Heart Container': 0x180152, | ||||
|                       'Piece of Heart (Pyramid)': 0x180147, | ||||
|                       'Catfish': 0xEE185, | ||||
|                       'Flute Boy': 0x330C7, | ||||
|                       'Piece of Heart (Digging Game)': 0x180148, | ||||
|                       'Bombos Tablet': 0x180017, | ||||
|                       '[cave-073] Cave Northeast of Swamp Palace [top chest]': 0xEB1E, | ||||
|                       '[cave-073] Cave Northeast of Swamp Palace [top middle chest]': 0xEB21, | ||||
|                       '[cave-073] Cave Northeast of Swamp Palace [bottom middle chest]': 0xEB24, | ||||
|                       '[cave-073] Cave Northeast of Swamp Palace [bottom chest]': 0xEB27, | ||||
|                       '[cave-073] Cave Northeast of Swamp Palace [generous guy]': 0x180011, | ||||
|                       'Piece of Heart (Dark World Blacksmith Pegs)': 0x180006, | ||||
|                       'Pyramid Fairy [left chest]': 0xE980, | ||||
|                       'Pyramid Fairy [right chest]': 0xE983, | ||||
|                       '[cave-063] Doorless Hut': 0xE9EC, | ||||
|                       '[cave-062] C-Shaped House': 0xE9EF, | ||||
|                       'Piece of Heart (Treasure Chest Game)': 0xEDA8, | ||||
|                       'Piece of Heart (Bumper Cave)': 0x180146, | ||||
|                       '[cave-071] Misery Mire West Area [left chest]': 0xEA73, | ||||
|                       '[cave-071] Misery Mire West Area [right chest]': 0xEA76, | ||||
|                       '[cave-057-1F] Dark World Death Mountain Climb [top chest]': 0xEA7C, | ||||
|                       '[cave-057-1F] Dark World Death Mountain Climb [bottom chest]': 0xEA7F, | ||||
|                       '[cave-055] Spike Cave': 0xEA8B, | ||||
|                       '[cave-056] Hookshot Cave [top right chest]': 0xEB51, | ||||
|                       '[cave-056] Hookshot Cave [top left chest]': 0xEB54, | ||||
|                       '[cave-056] Hookshot Cave [bottom right chest]': 0xEB5A, | ||||
|                       '[cave-056] Hookshot Cave [bottom left chest]': 0xEB57, | ||||
|                       'Piece of Heart (Death Mountain - Floating Island)': 0x180141, | ||||
|                       '[cave-013] Mimic Cave': 0xE9C5, | ||||
|                       '[dungeon-D2-1F] Swamp Palace - First Room': 0xEA9D, | ||||
|                       '[dungeon-D2-1F] Swamp Palace - Map Room': 0xE986, | ||||
|                       '[dungeon-D2-B1] Swamp Palace - Big Chest': 0xE989, | ||||
|                       '[dungeon-D2-B1] Swamp Palace - South of Hookshot Room': 0xEAA0, | ||||
|                       '[dungeon-D2-B1] Swamp Palace - Big Key Chest': 0xEAA6, | ||||
|                       '[dungeon-D2-B1] Swamp Palace - Compass Chest': 0xEAA3, | ||||
|                       '[dungeon-D2-B2] Swamp Palace - Flooded Room [left chest]': 0xEAA9, | ||||
|                       '[dungeon-D2-B2] Swamp Palace - Flooded Room [right chest]': 0xEAAC, | ||||
|                       '[dungeon-D2-B2] Swamp Palace - Waterfall Room': 0xEAAF, | ||||
|                       'Arrghus - Heart Container': 0x180154, | ||||
|                       '[dungeon-D4-B1] Thieves Town - Bottom Left of Huge Room [bottom right chest]': 0xEA04, | ||||
|                       '[dungeon-D4-B1] Thieves Town - Bottom Left of Huge Room [top left chest]': 0xEA01, | ||||
|                       '[dungeon-D4-B1] Thieves Town - Bottom Right of Huge Room': 0xEA07, | ||||
|                       '[dungeon-D4-B1] Thieves Town - Top Left of Huge Room': 0xEA0A, | ||||
|                       '[dungeon-D4-1F] Thieves Town - Room above Boss': 0xEA0D, | ||||
|                       '[dungeon-D4-B2] Thieves Town - Big Chest': 0xEA10, | ||||
|                       '[dungeon-D4-B2] Thieves Town - Chest next to Blind': 0xEA13, | ||||
|                       'Blind - Heart Container': 0x180156, | ||||
|                       '[dungeon-D3-B1] Skull Woods - Compass Room': 0xE992, | ||||
|                       '[dungeon-D3-B1] Skull Woods - East of Big Chest': 0xE99B, | ||||
|                       '[dungeon-D3-B1] Skull Woods - Big Chest': 0xE998, | ||||
|                       '[dungeon-D3-B1] Skull Woods - Map Room': 0xE9A1, | ||||
|                       '[dungeon - D3 - B1] Skull Woods - South of Big Chest': 0xE9C8, | ||||
|                       '[dungeon-D3-B1] Skull Woods - Big Key Room': 0xE99E, | ||||
|                       '[dungeon-D3-B1] Skull Woods - Final Section Entrance': 0xE9FE, | ||||
|                       'Mothula - Heart Container': 0x180155, | ||||
|                       '[dungeon-D5-B1] Ice Palace - Compass Room': 0xE9D4, | ||||
|                       '[dungeon-D5-B4] Ice Palace - Above Big Chest': 0xE995, | ||||
|                       '[dungeon-D5-B5] Ice Palace - Big Chest': 0xE9AA, | ||||
|                       '[dungeon-D5-B5] Ice Palace - Jellyfish Room': 0xE9E3, | ||||
|                       '[dungeon-D5-B3] Ice Palace - Spike Room': 0xE9E0, | ||||
|                       '[dungeon-D5-B1] Ice Palace - Big Key Room': 0xE9A4, | ||||
|                       '[dungeon-D5-B2] Ice Palace - Map Room': 0xE9DD, | ||||
|                       'Kholdstare - Heart Container': 0x180157, | ||||
|                       '[dungeon-D6-B1] Misery Mire - Big Chest': 0xEA67, | ||||
|                       '[dungeon-D6-B1] Misery Mire - Map Room': 0xEA6A, | ||||
|                       '[dungeon-D6-B1] Misery Mire - Hub Room': 0xEA5E, | ||||
|                       '[dungeon-D6-B1] Misery Mire - End of Bridge': 0xEA61, | ||||
|                       '[dungeon-D6-B1] Misery Mire - Spike Room': 0xE9DA, | ||||
|                       '[dungeon-D6-B1] Misery Mire - Compass Room': 0xEA64, | ||||
|                       '[dungeon-D6-B1] Misery Mire - Big Key Room':0xEA6D , | ||||
|                       'Vitreous - Heart Container': 0x180158, | ||||
|                       '[dungeon-D7-1F] Turtle Rock - Compass Room': 0xEA22, | ||||
|                       '[dungeon-D7-1F] Turtle Rock - Map Room [left chest]': 0xEA1C, | ||||
|                       '[dungeon-D7-1F] Turtle Rock - Map Room [right chest]': 0xEA1F, | ||||
|                       '[dungeon-D7-1F] Turtle Rock - Chain Chomp Room': 0xEA16, | ||||
|                       '[dungeon-D7-B1] Turtle Rock - Big Key Room': 0xEA25, | ||||
|                       '[dungeon-D7-B1] Turtle Rock - Big Chest': 0xEA19, | ||||
|                       '[dungeon-D7-B1] Turtle Rock - Roller Switch Room': 0xEA34, | ||||
|                       '[dungeon-D7-B2] Turtle Rock - Eye Bridge Room [bottom left chest]': 0xEA31, | ||||
|                       '[dungeon-D7-B2] Turtle Rock - Eye Bridge Room [bottom right chest]': 0xEA2E, | ||||
|                       '[dungeon-D7-B2] Turtle Rock - Eye Bridge Room [top left chest]': 0xEA2B, | ||||
|                       '[dungeon-D7-B2] Turtle Rock - Eye Bridge Room [top right chest]': 0xEA28, | ||||
|                       'Trinexx - Heart Container': 0x180159, | ||||
|                       '[dungeon-D1-B1] Dark Palace - Shooter Room': 0xEA5B, | ||||
|                       '[dungeon-D1-1F] Dark Palace - Jump Room [left chest]': 0xEA3A, | ||||
|                       '[dungeon-D1-B1] Dark Palace - Turtle Stalfos Room': 0xEA49, | ||||
|                       '[dungeon-D1-1F] Dark Palace - Big Key Room': 0xEA37, | ||||
|                       '[dungeon-D1-1F] Dark Palace - Jump Room [right chest]': 0xEA3D, | ||||
|                       '[dungeon-D1-1F] Dark Palace - Statue Push Room': 0xEA52, | ||||
|                       '[dungeon-D1-1F] Dark Palace - Compass Room': 0xEA43, | ||||
|                       '[dungeon-D1-B1] Dark Palace - Dark Room [left chest]': 0xEA4C, | ||||
|                       '[dungeon-D1-B1] Dark Palace - Dark Room [right chest]': 0xEA4F, | ||||
|                       '[dungeon-D1-1F] Dark Palace - Maze Room [top chest]': 0xEA55, | ||||
|                       '[dungeon-D1-1F] Dark Palace - Maze Room [bottom chest]': 0xEA58, | ||||
|                       '[dungeon-D1-1F] Dark Palace - Big Chest': 0xEA40, | ||||
|                       '[dungeon-D1-1F] Dark Palace - Spike Statue Room': 0xEA46, | ||||
|                       'Helmasaur - Heart Container': 0x180153, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - Torch': 0x180161, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - Right Staircase [left chest]': 0xEAD9, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - Right Staircase [right chest]': 0xEADC, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - Tile Room': 0xEAE2, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - Compass Room [top left chest]': 0xEAE5, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - Compass Room [top right chest]': 0xEAE8, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - Compass Room [bottom left chest]': 0xEAEB, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - Compass Room [bottom right chest]': 0xEAEE, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - North of Hookshot Room [top left chest]': 0xEAB8, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - North of Hookshot Room [top right chest]': 0xEABB, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - North of Hookshot Room [bottom left chest]': 0xEABE, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - North of Hookshot Room [bottom right chest]': 0xEAC1, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - Map Room': 0xEAD3, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - Firesnake Room': 0xEAD0, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - Teleport Room [top left chest]': 0xEAC4, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - Teleport Room [top right chest]': 0xEAC7, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - Teleport Room [bottom left chest]': 0xEACA, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - Teleport Room [bottom right chest]': 0xEACD, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - above Armos': 0xEADF, | ||||
|                       '[dungeon-A2-1F] Ganons Tower - Big Chest': 0xEAD6, | ||||
|                       '[dungeon-A2-B1] Ganons Tower - Armos Room [left chest]': 0xEAF4, | ||||
|                       '[dungeon-A2-B1] Ganons Tower - Armos Room [right chest]': 0xEAF7, | ||||
|                       '[dungeon-A2-B1] Ganons Tower - Armos Room [bottom chest]': 0xEAF1, | ||||
|                       '[dungeon-A2-6F] Ganons Tower - Mini Helmasaur Room [left chest]': 0xEAFD, | ||||
|                       '[dungeon-A2-6F] Ganons Tower - Mini Helmasaur Room [right chest]': 0xEB00, | ||||
|                       '[dungeon-A2-6F] Ganons Tower - Room before Moldorm': 0xEB03, | ||||
|                       '[dungeon-A2-6F] Ganons Tower - Moldorm Room': 0xEB06} | ||||
| 
 | ||||
| 
 | ||||
| crystal_locations = {'Armos - Pendant': [0x1209D, 0x53EF8, 0x53EF9, 0x180052, 0x18007C, 0xC6FE], | ||||
|                      'Lanmolas - Pendant': [0x1209E, 0x53F1C, 0x53F1D, 0x180053, 0x180078, 0xC6FF], | ||||
|                      'Moldorm - Pendant': [0x120A5, 0x53F0A, 0x53F0B, 0x18005A, 0x18007A, 0xC706], | ||||
|                      'Helmasaur - Crystal': [0x120A1, 0x53F00, 0x53F01, 0x180056, 0x18007D, 0xC702], | ||||
|                      'Arrghus - Crystal': [0x120A0, 0x53F6C, 0x53F6D, 0x180055, 0x180071, 0xC701], | ||||
|                      'Blind - Crystal': [0x120A6, 0x53F36, 0x53F37, 0x18005B, 0x180077, 0xC707], | ||||
|                      'Mothula - Crystal': [0x120A3, 0x53F12, 0x53F13, 0x180058, 0x18007B, 0xC704], | ||||
|                      'Kholdstare - Crystal': [0x120A4, 0x53F5A, 0x53F5B, 0x180059, 0x180073, 0xC705], | ||||
|                      'Vitreous - Crystal': [0x120A2, 0x53F48, 0x53F49, 0x180057, 0x180075, 0xC703], | ||||
|                      'Trinexx - Crystal': [0x120A7, 0x53F24, 0x53F25, 0x18005C, 0x180079, 0xC708]} | ||||
| 
 | ||||
| 
 | ||||
| dungeon_music_addresses = {'Armos - Pendant': [0x1559A], | ||||
|                            'Lanmolas - Pendant': [0x1559B, 0x1559C, 0x1559D, 0x1559E], | ||||
|                            'Moldorm - Pendant': [0x155C5, 0x1107A, 0x10B8C], | ||||
|                            'Helmasaur - Crystal': [0x155B8], | ||||
|                            'Arrghus - Crystal': [0x155B7], | ||||
|                            'Blind - Crystal': [0x155C6], | ||||
|                            'Mothula - Crystal': [0x155BA, 0x155BB, 0x155BC, 0x155BD, 0x15608, 0x15609, 0x1560A, 0x1560B], | ||||
|                            'Kholdstare - Crystal': [0x155BF], | ||||
|                            'Vitreous - Crystal': [0x155B9], | ||||
|                            'Trinexx - Crystal': [0x155C7, 0x155A7, 0x155AA, 0x155AB]} | ||||
| location_table = {'Mushroom': (0x180013, False, 'Light World'), | ||||
|                   'Bottle Vendor': (0x2EB18, False, 'Light World'), | ||||
|                   'Haunted Grove': (0x18014A, False, 'Light World'), | ||||
|                   'Piece of Heart (Dam)': (0x180145, False, 'Light World'), | ||||
|                   'Purple Chest': (0x33D68, False, 'Light World'), | ||||
|                   '[cave-022-B1] Thiefs hut [top chest]': (0xEB0F, False, None), | ||||
|                   '[cave-022-B1] Thiefs hut [top left chest]': (0xEB12, False, None), | ||||
|                   '[cave-022-B1] Thiefs hut [top right chest]': (0xEB15, False, None), | ||||
|                   '[cave-022-B1] Thiefs hut [bottom left chest]': (0xEB18, False, None), | ||||
|                   '[cave-022-B1] Thiefs hut [bottom right chest]': (0xEB1B, False, None), | ||||
|                   'Uncle': (0x2DF45, False, None), | ||||
|                   '[cave-034] Hyrule Castle Secret Entrance': (0xE971, False, None), | ||||
|                   'King Zora': (0xEE1C3, False, 'Light World'), | ||||
|                   'Piece of Heart (Zoras River)': (0x180149, False, 'Light World'), | ||||
|                   '[cave-018] Graveyard - top right grave': (0xE97A, False, None), | ||||
|                   '[cave-047] Dam': (0xE98C, False, None), | ||||
|                   '[cave-040] Links House': (0xE9BC, False, 'Light World'), | ||||
|                   '[cave-031] Tavern': (0xE9CE, False, None), | ||||
|                   '[cave-026] Chicken House': (0xE9E9, False, None), | ||||
|                   '[cave-044] Aginahs Cave': (0xE9F2, False, None), | ||||
|                   '[cave-035] Sahasrahlas Hut [left chest]': (0xEA82, False, None), | ||||
|                   '[cave-035] Sahasrahlas Hut [center chest]': (0xEA85, False, None), | ||||
|                   '[cave-035] Sahasrahlas Hut [right chest]': (0xEA88, False, None), | ||||
|                   'Sahasrahla': (0x2F1FC, False, None), | ||||
|                   '[cave-021] Kakariko Well [top chest]': (0xEA8E, False, None), | ||||
|                   '[cave-021] Kakariko Well [left chest row of 3]': (0xEA91, False, None), | ||||
|                   '[cave-021] Kakariko Well [center chest row of 3]': (0xEA94, False, None), | ||||
|                   '[cave-021] Kakariko Well [right chest row of 3]': (0xEA97, False, None), | ||||
|                   '[cave-021] Kakariko Well [bottom chest]': (0xEA9A, False, None), | ||||
|                   'Blacksmiths': (0x18002A, False, None), | ||||
|                   'Magic Bat': (0x180015, False, None), | ||||
|                   'Sick Kid': (0x339CF, False, None), | ||||
|                   'Hobo': (0x33E7D, False, 'Light World'), | ||||
|                   'Piece of Heart (Thieves Forest Hideout)': (0x180000, False, None), | ||||
|                   'Piece of Heart (Lumberjack Tree)': (0x180001, False, None), | ||||
|                   'Piece of Heart (Cave South of Haunted Grove)': (0x180003, False, None), | ||||
|                   'Piece of Heart (Graveyard Cave)': (0x180004, False, None), | ||||
|                   'Piece of Heart (Desert Cave)': (0x180005, False, None), | ||||
|                   '[cave-050] Lake Hylia Cave [bottom left chest]': (0xEB42, False, None), | ||||
|                   '[cave-050] Lake Hylia Cave [top left chest]': (0xEB45, False, None), | ||||
|                   '[cave-050] Lake Hylia Cave [top right chest]': (0xEB48, False, None), | ||||
|                   '[cave-050] Lake Hylia Cave [bottom right chest]': (0xEB4B, False, None), | ||||
|                   '[cave-050] Lake Hylia Cave [generous guy]': (0x180010, False, None), | ||||
|                   '[cave-051] Ice Cave': (0xEB4E, False, None), | ||||
|                   '[cave-016] Bonk Rock Cave': (0xEB3F, False, None), | ||||
|                   'Library': (0x180012, False, None), | ||||
|                   'Witch': (0x180014, False, None), | ||||
|                   'Piece of Heart (Lake Hylia)': (0x180144, False, 'Light World'), | ||||
|                   'Piece of Heart (Maze Race)': (0x180142, False, 'Light World'), | ||||
|                   'Piece of Heart (Desert - west side)': (0x180143, False, 'Light World'), | ||||
|                   '[dungeon-L2-B1] Desert Palace - Big Chest': (0xE98F, False, 'Desert Palace'), | ||||
|                   '[dungeon-L2-B1] Desert Palace - Torch': (0x180160, False, 'Desert Palace'), | ||||
|                   '[dungeon-L2-B1] Desert Palace - Map Room': (0xE9B6, False, 'Desert Palace'), | ||||
|                   '[dungeon-L2-B1] Desert Palace - Compass Room': (0xE9CB, False, 'Desert Palace'), | ||||
|                   '[dungeon-L2-B1] Desert Palace - Big Key Room': (0xE9C2, False, 'Desert Palace'), | ||||
|                   'Lanmolas - Heart Container': (0x180151, False, 'Desert Palace'), | ||||
|                   '[dungeon-L1-1F] Eastern Palace - Compass Room': (0xE977, False, 'Eastern Palace'), | ||||
|                   '[dungeon-L1-1F] Eastern Palace - Big Chest': (0xE97D, False, 'Eastern Palace'), | ||||
|                   '[dungeon-L1-1F] Eastern Palace - Big Ball Room': (0xE9B3, False, 'Eastern Palace'), | ||||
|                   '[dungeon-L1-1F] Eastern Palace - Big Key Room': (0xE9B9, False, 'Eastern Palace'), | ||||
|                   '[dungeon-L1-1F] Eastern Palace - Map Room': (0xE9F5, False, 'Eastern Palace'), | ||||
|                   'Armos - Heart Container': (0x180150, False, 'Eastern Palace'), | ||||
|                   'Altar': (0x289B0, False, 'Light World'), | ||||
|                   '[dungeon-C-B1] Hyrule Castle - Boomerang Room': (0xE974, False, 'Hyrule Castle'), | ||||
|                   '[dungeon-C-B1] Hyrule Castle - Map Room': (0xEB0C, False, 'Hyrule Castle'), | ||||
|                   '[dungeon-C-B1] Hyrule Castle - Next To Zelda': (0xEB09, False, 'Hyrule Castle'), | ||||
|                   '[dungeon-C-B1] Escape - First B1 Room': (0xE96E, False, 'Hyrule Castle'), | ||||
|                   '[dungeon-C-B1] Escape - Final Basement Room [left chest]': (0xEB5D, False, 'Hyrule Castle'), | ||||
|                   '[dungeon-C-B1] Escape - Final Basement Room [middle chest]': (0xEB60, False, 'Hyrule Castle'), | ||||
|                   '[dungeon-C-B1] Escape - Final Basement Room [right chest]': (0xEB63, False, 'Hyrule Castle'), | ||||
|                   '[dungeon-C-1F] Sanctuary': (0xEA79, False, 'Hyrule Castle'), | ||||
|                   '[dungeon-A1-2F] Hyrule Castle Tower - 2 Knife Guys Room': (0xEAB5, False, 'Hyrule Castle'), | ||||
|                   '[dungeon-A1-3F] Hyrule Castle Tower - Maze Room': (0xEAB2, False, 'Hyrule Castle'), | ||||
|                   'Old Mountain Man': (0xF69FA, False, 'Light World'), | ||||
|                   'Piece of Heart (Spectacle Rock Cave)': (0x180002, False, None), | ||||
|                   '[cave-009-1F] Death Mountain - right cave [top left chest]': (0xEB2A, False, None), | ||||
|                   '[cave-009-1F] Death Mountain - right cave [top left middle chest]': (0xEB2D, False, None), | ||||
|                   '[cave-009-1F] Death Mountain - right cave [top right middle chest]': (0xEB30, False, None), | ||||
|                   '[cave-009-1F] Death Mountain - right cave [top right chest]': (0xEB33, False, None), | ||||
|                   '[cave-009-1F] Death Mountain - right cave [bottom chest]': (0xEB36, False, None), | ||||
|                   '[cave-009-B1] Death Mountain - right cave [left chest]': (0xEB39, False, None), | ||||
|                   '[cave-009-B1] Death Mountain - right cave [right chest]': (0xEB3C, False, None), | ||||
|                   '[cave-012-1F] Death Mountain - left cave]': (0xE9BF, False, None), | ||||
|                   'Ether Tablet': (0x180016, False, 'Light World'), | ||||
|                   'Piece of Heart (Spectacle Rock)': (0x180140, False, 'Light World'), | ||||
|                   '[dungeon-L3-1F] Tower of Hera - Freestanding Key': (0x180162, False, 'Tower of Hera'), | ||||
|                   '[dungeon-L3-1F] Tower of Hera - Entrance': (0xE9AD, False, 'Tower of Hera'), | ||||
|                   '[dungeon-L3-1F] Tower of Hera - Basement': (0xE9E6, False, 'Tower of Hera'), | ||||
|                   '[dungeon-L3-1F] Tower of Hera - 4F [small chest]': (0xE9FB, False, 'Tower of Hera'), | ||||
|                   '[dungeon-L3-1F] Tower of Hera - Big Chest': (0xE9F8, False, 'Tower of Hera'), | ||||
|                   'Moldorm - Heart Container': (0x180152, False, 'Tower of Hera'), | ||||
|                   'Piece of Heart (Pyramid)': (0x180147, False, 'Dark World'), | ||||
|                   'Catfish': (0xEE185, False, 'Dark World'), | ||||
|                   'Flute Boy': (0x330C7, False, 'Dark World'), | ||||
|                   'Piece of Heart (Digging Game)': (0x180148, False, 'Dark World'), | ||||
|                   'Bombos Tablet': (0x180017, False, 'Light World'), | ||||
|                   '[cave-073] Cave Northeast of Swamp Palace [top chest]': (0xEB1E, False, None), | ||||
|                   '[cave-073] Cave Northeast of Swamp Palace [top middle chest]': (0xEB21, False, None), | ||||
|                   '[cave-073] Cave Northeast of Swamp Palace [bottom middle chest]': (0xEB24, False, None), | ||||
|                   '[cave-073] Cave Northeast of Swamp Palace [bottom chest]': (0xEB27, False, None), | ||||
|                   '[cave-073] Cave Northeast of Swamp Palace [generous guy]': (0x180011, False, None), | ||||
|                   'Piece of Heart (Dark World Blacksmith Pegs)': (0x180006, False, None), | ||||
|                   'Pyramid Fairy [left chest]': (0xE980, False, None), | ||||
|                   'Pyramid Fairy [right chest]': (0xE983, False, None), | ||||
|                   '[cave-063] Doorless Hut': (0xE9EC, False, None), | ||||
|                   '[cave-062] C-Shaped House': (0xE9EF, False, None), | ||||
|                   'Piece of Heart (Treasure Chest Game)': (0xEDA8, False, None), | ||||
|                   'Piece of Heart (Bumper Cave)': (0x180146, False, 'Dark World'), | ||||
|                   '[cave-071] Misery Mire West Area [left chest]': (0xEA73, False, None), | ||||
|                   '[cave-071] Misery Mire West Area [right chest]': (0xEA76, False, None), | ||||
|                   '[cave-057-1F] Dark World Death Mountain Climb [top chest]': (0xEA7C, False, None), | ||||
|                   '[cave-057-1F] Dark World Death Mountain Climb [bottom chest]': (0xEA7F, False, None), | ||||
|                   '[cave-055] Spike Cave': (0xEA8B, False, None), | ||||
|                   '[cave-056] Hookshot Cave [top right chest]': (0xEB51, False, None), | ||||
|                   '[cave-056] Hookshot Cave [top left chest]': (0xEB54, False, None), | ||||
|                   '[cave-056] Hookshot Cave [bottom right chest]': (0xEB5A, False, None), | ||||
|                   '[cave-056] Hookshot Cave [bottom left chest]': (0xEB57, False, None), | ||||
|                   'Piece of Heart (Death Mountain - Floating Island)': (0x180141, False, 'Light World'), | ||||
|                   '[cave-013] Mimic Cave': (0xE9C5, False, None), | ||||
|                   '[dungeon-D2-1F] Swamp Palace - First Room': (0xEA9D, False, 'Swamp Palace'), | ||||
|                   '[dungeon-D2-1F] Swamp Palace - Map Room': (0xE986, False, 'Swamp Palace'), | ||||
|                   '[dungeon-D2-B1] Swamp Palace - Big Chest': (0xE989, False, 'Swamp Palace'), | ||||
|                   '[dungeon-D2-B1] Swamp Palace - South of Hookshot Room': (0xEAA0, False, 'Swamp Palace'), | ||||
|                   '[dungeon-D2-B1] Swamp Palace - Big Key Chest': (0xEAA6, False, 'Swamp Palace'), | ||||
|                   '[dungeon-D2-B1] Swamp Palace - Compass Chest': (0xEAA3, False, 'Swamp Palace'), | ||||
|                   '[dungeon-D2-B2] Swamp Palace - Flooded Room [left chest]': (0xEAA9, False, 'Swamp Palace'), | ||||
|                   '[dungeon-D2-B2] Swamp Palace - Flooded Room [right chest]': (0xEAAC, False, 'Swamp Palace'), | ||||
|                   '[dungeon-D2-B2] Swamp Palace - Waterfall Room': (0xEAAF, False, 'Swamp Palace'), | ||||
|                   'Arrghus - Heart Container': (0x180154, False, 'Swamp Palace'), | ||||
|                   '[dungeon-D4-B1] Thieves Town - Bottom Left of Huge Room [bottom right chest]': (0xEA04, False, 'Thieves\' Town'), | ||||
|                   '[dungeon-D4-B1] Thieves Town - Bottom Left of Huge Room [top left chest]': (0xEA01, False, 'Thieves\' Town'), | ||||
|                   '[dungeon-D4-B1] Thieves Town - Bottom Right of Huge Room': (0xEA07, False, 'Thieves\' Town'), | ||||
|                   '[dungeon-D4-B1] Thieves Town - Top Left of Huge Room': (0xEA0A, False, 'Thieves\' Town'), | ||||
|                   '[dungeon-D4-1F] Thieves Town - Room above Boss': (0xEA0D, False, 'Thieves\' Town'), | ||||
|                   '[dungeon-D4-B2] Thieves Town - Big Chest': (0xEA10, False, 'Thieves\' Town'), | ||||
|                   '[dungeon-D4-B2] Thieves Town - Chest next to Blind': (0xEA13, False, 'Thieves\' Town'), | ||||
|                   'Blind - Heart Container': (0x180156, False, 'Thieves\' Town'), | ||||
|                   '[dungeon-D3-B1] Skull Woods - Compass Room': (0xE992, False, 'Skull Woods'), | ||||
|                   '[dungeon-D3-B1] Skull Woods - East of Big Chest': (0xE99B, False, 'Skull Woods'), | ||||
|                   '[dungeon-D3-B1] Skull Woods - Big Chest': (0xE998, False, 'Skull Woods'), | ||||
|                   '[dungeon-D3-B1] Skull Woods - Map Room': (0xE9A1, False, 'Skull Woods'), | ||||
|                   '[dungeon - D3 - B1] Skull Woods - South of Big Chest': (0xE9C8, False, 'Skull Woods'), | ||||
|                   '[dungeon-D3-B1] Skull Woods - Big Key Room': (0xE99E, False, 'Skull Woods'), | ||||
|                   '[dungeon-D3-B1] Skull Woods - Final Section Entrance': (0xE9FE, False, 'Skull Woods'), | ||||
|                   'Mothula - Heart Container': (0x180155, False, 'Skull Woods'), | ||||
|                   '[dungeon-D5-B1] Ice Palace - Compass Room': (0xE9D4, False, 'Ice Palace'), | ||||
|                   '[dungeon-D5-B4] Ice Palace - Above Big Chest': (0xE995, False, 'Ice Palace'), | ||||
|                   '[dungeon-D5-B5] Ice Palace - Big Chest': (0xE9AA, False, 'Ice Palace'), | ||||
|                   '[dungeon-D5-B5] Ice Palace - Jellyfish Room': (0xE9E3, False, 'Ice Palace'), | ||||
|                   '[dungeon-D5-B3] Ice Palace - Spike Room': (0xE9E0, False, 'Ice Palace'), | ||||
|                   '[dungeon-D5-B1] Ice Palace - Big Key Room': (0xE9A4, False, 'Ice Palace'), | ||||
|                   '[dungeon-D5-B2] Ice Palace - Map Room': (0xE9DD, False, 'Ice Palace'), | ||||
|                   'Kholdstare - Heart Container': (0x180157, False, 'Ice Palace'), | ||||
|                   '[dungeon-D6-B1] Misery Mire - Big Chest': (0xEA67, False, 'Misery Mire'), | ||||
|                   '[dungeon-D6-B1] Misery Mire - Map Room': (0xEA6A, False, 'Misery Mire'), | ||||
|                   '[dungeon-D6-B1] Misery Mire - Hub Room': (0xEA5E, False, 'Misery Mire'), | ||||
|                   '[dungeon-D6-B1] Misery Mire - End of Bridge': (0xEA61, False, 'Misery Mire'), | ||||
|                   '[dungeon-D6-B1] Misery Mire - Spike Room': (0xE9DA, False, 'Misery Mire'), | ||||
|                   '[dungeon-D6-B1] Misery Mire - Compass Room': (0xEA64, False, 'Misery Mire'), | ||||
|                   '[dungeon-D6-B1] Misery Mire - Big Key Room': (0xEA6D, False, 'Misery Mire'), | ||||
|                   'Vitreous - Heart Container': (0x180158, False, 'Misery Mire'), | ||||
|                   '[dungeon-D7-1F] Turtle Rock - Compass Room': (0xEA22, False, 'Turtle Rock'), | ||||
|                   '[dungeon-D7-1F] Turtle Rock - Map Room [left chest]': (0xEA1C, False, 'Turtle Rock'), | ||||
|                   '[dungeon-D7-1F] Turtle Rock - Map Room [right chest]': (0xEA1F, False, 'Turtle Rock'), | ||||
|                   '[dungeon-D7-1F] Turtle Rock - Chain Chomp Room': (0xEA16, False, 'Turtle Rock'), | ||||
|                   '[dungeon-D7-B1] Turtle Rock - Big Key Room': (0xEA25, False, 'Turtle Rock'), | ||||
|                   '[dungeon-D7-B1] Turtle Rock - Big Chest': (0xEA19, False, 'Turtle Rock'), | ||||
|                   '[dungeon-D7-B1] Turtle Rock - Roller Switch Room': (0xEA34, False, 'Turtle Rock'), | ||||
|                   '[dungeon-D7-B2] Turtle Rock - Eye Bridge Room [bottom left chest]': (0xEA31, False, 'Turtle Rock'), | ||||
|                   '[dungeon-D7-B2] Turtle Rock - Eye Bridge Room [bottom right chest]': (0xEA2E, False, 'Turtle Rock'), | ||||
|                   '[dungeon-D7-B2] Turtle Rock - Eye Bridge Room [top left chest]': (0xEA2B, False, 'Turtle Rock'), | ||||
|                   '[dungeon-D7-B2] Turtle Rock - Eye Bridge Room [top right chest]': (0xEA28, False, 'Turtle Rock'), | ||||
|                   'Trinexx - Heart Container': (0x180159, False, 'Turtle Rock'), | ||||
|                   '[dungeon-D1-B1] Dark Palace - Shooter Room': (0xEA5B, False, 'Palace of Darkness'), | ||||
|                   '[dungeon-D1-1F] Dark Palace - Jump Room [left chest]': (0xEA3A, False, 'Palace of Darkness'), | ||||
|                   '[dungeon-D1-B1] Dark Palace - Turtle Stalfos Room': (0xEA49, False, 'Palace of Darkness'), | ||||
|                   '[dungeon-D1-1F] Dark Palace - Big Key Room': (0xEA37, False, 'Palace of Darkness'), | ||||
|                   '[dungeon-D1-1F] Dark Palace - Jump Room [right chest]': (0xEA3D, False, 'Palace of Darkness'), | ||||
|                   '[dungeon-D1-1F] Dark Palace - Statue Push Room': (0xEA52, False, 'Palace of Darkness'), | ||||
|                   '[dungeon-D1-1F] Dark Palace - Compass Room': (0xEA43, False, 'Palace of Darkness'), | ||||
|                   '[dungeon-D1-B1] Dark Palace - Dark Room [left chest]': (0xEA4C, False, 'Palace of Darkness'), | ||||
|                   '[dungeon-D1-B1] Dark Palace - Dark Room [right chest]': (0xEA4F, False, 'Palace of Darkness'), | ||||
|                   '[dungeon-D1-1F] Dark Palace - Maze Room [top chest]': (0xEA55, False, 'Palace of Darkness'), | ||||
|                   '[dungeon-D1-1F] Dark Palace - Maze Room [bottom chest]': (0xEA58, False, 'Palace of Darkness'), | ||||
|                   '[dungeon-D1-1F] Dark Palace - Big Chest': (0xEA40, False, 'Palace of Darkness'), | ||||
|                   '[dungeon-D1-1F] Dark Palace - Spike Statue Room': (0xEA46, False, 'Palace of Darkness'), | ||||
|                   'Helmasaur - Heart Container': (0x180153, False, 'Palace of Darkness'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - Torch': (0x180161, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - Right Staircase [left chest]': (0xEAD9, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - Right Staircase [right chest]': (0xEADC, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - Tile Room': (0xEAE2, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - Compass Room [top left chest]': (0xEAE5, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - Compass Room [top right chest]': (0xEAE8, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - Compass Room [bottom left chest]': (0xEAEB, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - Compass Room [bottom right chest]': (0xEAEE, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - North of Hookshot Room [top left chest]': (0xEAB8, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - North of Hookshot Room [top right chest]': (0xEABB, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - North of Hookshot Room [bottom left chest]': (0xEABE, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - North of Hookshot Room [bottom right chest]': (0xEAC1, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - Map Room': (0xEAD3, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - Firesnake Room': (0xEAD0, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - Teleport Room [top left chest]': (0xEAC4, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - Teleport Room [top right chest]': (0xEAC7, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - Teleport Room [bottom left chest]': (0xEACA, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - Teleport Room [bottom right chest]': (0xEACD, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - above Armos': (0xEADF, False, 'My Tower'), | ||||
|                   '[dungeon-A2-1F] Ganons Tower - Big Chest': (0xEAD6, False, 'My Tower'), | ||||
|                   '[dungeon-A2-B1] Ganons Tower - Armos Room [left chest]': (0xEAF4, False, 'My Tower'), | ||||
|                   '[dungeon-A2-B1] Ganons Tower - Armos Room [right chest]': (0xEAF7, False, 'My Tower'), | ||||
|                   '[dungeon-A2-B1] Ganons Tower - Armos Room [bottom chest]': (0xEAF1, False, 'My Tower'), | ||||
|                   '[dungeon-A2-6F] Ganons Tower - Mini Helmasaur Room [left chest]': (0xEAFD, False, 'My Tower'), | ||||
|                   '[dungeon-A2-6F] Ganons Tower - Mini Helmasaur Room [right chest]': (0xEB00, False, 'My Tower'), | ||||
|                   '[dungeon-A2-6F] Ganons Tower - Room before Moldorm': (0xEB03, False, 'My Tower'), | ||||
|                   '[dungeon-A2-6F] Ganons Tower - Moldorm Room': (0xEB06, False, 'My Tower'), | ||||
|                   'Ganon': (None, False, None), | ||||
|                   'Armos - Pendant': ([0x1209D, 0x53EF8, 0x53EF9, 0x180052, 0x18007C, 0xC6FE], True, 'Eastern Palace'), | ||||
|                   'Lanmolas - Pendant': ([0x1209E, 0x53F1C, 0x53F1D, 0x180053, 0x180078, 0xC6FF], True, 'Desert Palace'), | ||||
|                   'Moldorm - Pendant': ([0x120A5, 0x53F0A, 0x53F0B, 0x18005A, 0x18007A, 0xC706], True, 'Tower of Hera'), | ||||
|                   'Helmasaur - Crystal': ([0x120A1, 0x53F00, 0x53F01, 0x180056, 0x18007D, 0xC702], True, 'Palace of Darkness'), | ||||
|                   'Arrghus - Crystal': ([0x120A0, 0x53F6C, 0x53F6D, 0x180055, 0x180071, 0xC701], True, 'Swamp Palace'), | ||||
|                   'Blind - Crystal': ([0x120A6, 0x53F36, 0x53F37, 0x18005B, 0x180077, 0xC707], True, 'Thieves\' Town'), | ||||
|                   'Mothula - Crystal': ([0x120A3, 0x53F12, 0x53F13, 0x180058, 0x18007B, 0xC704], True, 'Skull Woods'), | ||||
|                   'Kholdstare - Crystal': ([0x120A4, 0x53F5A, 0x53F5B, 0x180059, 0x180073, 0xC705], True, 'Ice Palace'), | ||||
|                   'Vitreous - Crystal': ([0x120A2, 0x53F48, 0x53F49, 0x180057, 0x180075, 0xC703], True, 'Misery Mire'), | ||||
|                   'Trinexx - Crystal': ([0x120A7, 0x53F24, 0x53F25, 0x18005C, 0x180079, 0xC708], True, 'Turtle Rock')} | ||||
|  |  | |||
							
								
								
									
										31
									
								
								Rom.py
								
								
								
								
							
							
						
						
									
										31
									
								
								Rom.py
								
								
								
								
							|  | @ -1,4 +1,4 @@ | |||
| from Regions import location_addresses, crystal_locations, dungeon_music_addresses | ||||
| from Dungeons import dungeon_music_addresses | ||||
| from EntranceShuffle import door_addresses, single_doors | ||||
| from Text import string_to_alttp_text, text_addresses, credits_addresses, string_to_credits | ||||
| from Text import Uncle_texts, Ganon1_texts, PyramidFairy_texts, TavernMan_texts, Sahasrahla2_texts, Triforce_texts, Blind_texts, BombShop2_texts | ||||
|  | @ -6,7 +6,7 @@ from Text import KingsReturn_texts, Sanctuary_texts, Kakariko_texts, Blacksmiths | |||
| import random | ||||
| 
 | ||||
| 
 | ||||
| def patch_rom(world, rom, quickswap=False): | ||||
| def patch_rom(world, rom, quickswap=False, beep='normal'): | ||||
|     # patch items | ||||
|     for location in world.get_locations(): | ||||
|         if location.name == 'Ganon': | ||||
|  | @ -15,13 +15,12 @@ def patch_rom(world, rom, quickswap=False): | |||
| 
 | ||||
|         itemid = location.item.code if location.item is not None else 0x5A | ||||
| 
 | ||||
|         try: | ||||
|         locationaddress = location.address | ||||
|         if not location.crystal: | ||||
|             # regular items | ||||
|             locationaddress = location_addresses[location.name] | ||||
|             write_byte(rom, locationaddress, itemid) | ||||
|         except KeyError: | ||||
|         else: | ||||
|             # crystals | ||||
|             locationaddress = crystal_locations[location.name] | ||||
|             for address, value in zip(locationaddress, itemid): | ||||
|                 write_byte(rom, address, value) | ||||
| 
 | ||||
|  | @ -221,6 +220,12 @@ def patch_rom(world, rom, quickswap=False): | |||
| 
 | ||||
|     write_strings(rom, world) | ||||
| 
 | ||||
|     # set rom name | ||||
|     write_bytes(rom, 0x7FC0, [0x45, 0x6E, 0x74, 0x72, 0x61, 0x6E, 0x63, 0x65, 0x52, 0x61, 0x6E, 0x64, 0x6F, 0x6D, 0x69, 0x7A, 0x65, 0x72, 0x00, 0x00, 0x00]) | ||||
| 
 | ||||
|     # set heart beep rate | ||||
|     write_byte(rom, 0x180033, {'off': 0x00, 'half': 0x40, 'quarter': 0x80, 'normal': 0x20}[beep]) | ||||
| 
 | ||||
|     return rom | ||||
| 
 | ||||
| 
 | ||||
|  | @ -244,10 +249,16 @@ def write_credits_string_to_rom(rom, target, string): | |||
| 
 | ||||
| 
 | ||||
| def write_strings(rom, world): | ||||
|     # ToDo should read location of items and give hint | ||||
|     write_string_to_rom(rom, 'Ganon2', 'Did you find the silver arrows in Hyrule?') | ||||
|     write_string_to_rom(rom, 'BombShop1', 'Big Bomb?\nI Uh … Never heard of that. Move along.') | ||||
|     write_string_to_rom(rom, 'Sahasrahla1', 'How Did you Find me?') | ||||
|     silverarrows = world.find_items('Silver Arrows') | ||||
|     silverarrow_hint = ('in %s?' % silverarrows[0].hint_text) if silverarrows else '?\nI think not!' | ||||
|     write_string_to_rom(rom, 'Ganon2', 'Did you find the silver arrows %s' % silverarrow_hint) | ||||
| 
 | ||||
|     crystal5 = world.find_items('Crystal 5')[0] | ||||
|     crystal6 = world.find_items('Crystal 6')[0] | ||||
|     write_string_to_rom(rom, 'BombShop1', 'Big Bomb?\nMy supply is blocked until you clear %s and %s.' % (crystal5.hint_text, crystal6.hint_text)) | ||||
| 
 | ||||
|     greenpendant = world.find_items('Green Pendant')[0] | ||||
|     write_string_to_rom(rom, 'Sahasrahla1', 'I lost my family heirloom in %s' % greenpendant.hint_text) | ||||
| 
 | ||||
|     write_string_to_rom(rom, 'Uncle', Uncle_texts[random.randint(0, len(Uncle_texts) - 1)]) | ||||
|     write_string_to_rom(rom, 'Triforce', Triforce_texts[random.randint(0, len(Triforce_texts) - 1)]) | ||||
|  |  | |||
							
								
								
									
										17
									
								
								Text.py
								
								
								
								
							
							
						
						
									
										17
									
								
								Text.py
								
								
								
								
							|  | @ -28,13 +28,16 @@ credits_addresses = {'KingsReturn': (0x76928, 22), | |||
|                      'LostWoods': (0x76C51, 16), | ||||
|                      'Altar': (0x76C81, 20)} | ||||
| 
 | ||||
| Uncle_texts = ['Good Luck!\nYou will need it.'] | ||||
| Triforce_texts = ['Product has Hole in center. Bad seller, 0 out of 5.'] | ||||
| Uncle_texts = ['Good Luck!\nYou will need it.', | ||||
|                '10\n9\n8\n7\n6\n5\n4\n3\n2\n1\nGo!'] | ||||
| Triforce_texts = ['Product has Hole in center. Bad seller, 0 out of 5.', | ||||
|                   '\n  Well Done!'] | ||||
| BombShop2_texts = ['Bombs!\nBombs!\nBiggest!\nBestest!\nGreatest!\nBoomest!'] | ||||
| PyramidFairy_texts = ['May I talk to you about our lord and savior, Ganon?'] | ||||
| Sahasrahla2_texts = ['You already got my item, idiot.'] | ||||
| Blind_texts = ['I bet you expected a vision related pun?\n\nNot Today.\n Didn\'t see that coming, did you?'] | ||||
| Ganon1_texts = ['\n\n\n\n\n\n\n\n\nWhy are you reading an empty textbox?'] | ||||
| Ganon1_texts = ['\n\n\n\n\n\n\n\n\nWhy are you reading an empty textbox?', | ||||
|                 'Hi'] | ||||
| TavernMan_texts = ['Did you know that talking to random NPCs wastes time in a race? I hope this information may be of use to you in the future.'] | ||||
| 
 | ||||
| KingsReturn_texts = ['Who is this even'] | ||||
|  | @ -54,14 +57,6 @@ MagicShop_texts = ['Drug deal'] | |||
| FluteBoy_texts = ['Stumped'] | ||||
| 
 | ||||
| 
 | ||||
| def write_texts_to_rom(rom, world): | ||||
|     pass | ||||
| 
 | ||||
| 
 | ||||
| def write_credits_to_rom(rom, world): | ||||
|     pass | ||||
| 
 | ||||
| 
 | ||||
| def string_to_credits(s, length): | ||||
|     buf = bytearray() | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue