diff --git a/BaseClasses.py b/BaseClasses.py index 60f305f8..3ca313a5 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -23,6 +23,7 @@ class World(object): self.seed = None self.state = CollectionState(self) self.required_medallions = ['Ether', 'Quake'] + self._cached_entrances = None self._cached_locations = None self._entrance_cache = {} self._region_cache = {} @@ -190,6 +191,16 @@ class World(object): else: raise RuntimeError('Cannot assign item %s to location %s.' % (item, location)) + def get_entrances(self): + if self._cached_entrances is None: + self._cached_entrances = [] + for region in self.regions: + self._cached_entrances.extend(region.entrances) + return self._cached_entrances + + def clear_entrance_cache(self): + self._cached_entrances = None + def get_locations(self): if self._cached_locations is None: self._cached_locations = [] @@ -616,7 +627,7 @@ class RegionType(Enum): class Region(object): - def __init__(self, name, type): + def __init__(self, name, type, hint): self.name = name self.type = type self.entrances = [] @@ -628,7 +639,7 @@ class Region(object): self.is_light_world = False # will be set aftermaking connections. self.is_dark_world = False self.spot_type = 'Region' - self.hint_text = 'Hyrule' + self.hint_text = hint self.recursion_count = 0 def can_reach(self, state): diff --git a/Gui.py b/Gui.py index b3026049..457e4bc8 100755 --- a/Gui.py +++ b/Gui.py @@ -281,6 +281,7 @@ def guiMain(args=None): int(arrow1Var.get()), int(arrow10Var.get()), int(bomb1Var.get()), int(bomb3Var.get()), int(rupee1Var.get()), int(rupee5Var.get()), int(rupee20Var.get()), int(rupee50Var.get()), int(rupee100Var.get()), int(rupee300Var.get()), int(rupoorVar.get()), int(blueclockVar.get()), int(greenclockVar.get()), int(redclockVar.get()), int(triforcepieceVar.get()), int(triforcecountVar.get()), int(triforceVar.get()), int(rupoorcostVar.get()), int(universalkeyVar.get())] + guiargs.shufflebosses = None guiargs.rom = romVar.get() guiargs.jsonout = None guiargs.sprite = sprite diff --git a/Items.py b/Items.py index 3cf7ff50..187c39f1 100644 --- a/Items.py +++ b/Items.py @@ -33,7 +33,7 @@ item_table = {'Bow': (True, False, None, 0x0B, 'You have\nchosen the\narcher cla 'Power Glove': (True, False, None, 0x1B, 'Now you can\nlift weak\nstuff!', 'and the grey mittens', 'body-building kid', 'lift glove for sale', 'fungus for gloves', 'body-building boy lifts again'), 'Cape': (True, False, None, 0x19, 'Wear this to\nbecome\ninvisible!', 'the camouflage cape', 'red riding-hood kid', 'red hood for sale', 'hood from a hood', 'dapper boy hides again'), 'Mushroom': (True, False, None, 0x29, 'I\'m a fun guy!\n\nI\'m a funghi!', 'and the legal drugs', 'the drug-dealing kid', 'legal drugs for sale', 'shroom swap', 'shroom boy sells drugs again'), - 'Shovel': (True, False, None, 0x13, 'Can\n You\n Dig it?', 'and the fetch quest', 'archaeologist kid', 'dirt spade for sale', 'can you dig it', 'shovel boy digs again'), + 'Shovel': (True, False, None, 0x13, 'Can\n You\n Dig it?', 'and the spade', 'archaeologist kid', 'dirt spade for sale', 'can you dig it', 'shovel boy digs again'), 'Lamp': (True, False, None, 0x12, 'Baby, baby,\nbaby.\nLight my way!', 'and the flashlight', 'light-shining kid', 'flashlight for sale', 'fungus for illumination', 'illuminated boy can see again'), 'Magic Powder': (True, False, None, 0x0D, 'you can turn\nanti-faeries\ninto faeries', 'and the magic sack', 'the sack-holding kid', 'magic sack for sale', 'the witch and assistant', 'magic boy plays marbles again'), 'Moon Pearl': (True, False, None, 0x1F, ' Bunny Link\n be\n gone!', 'and the jaw breaker', 'fortune-telling kid', 'lunar orb for sale', 'shrooms for moon rock', 'moon boy plays ball again'), @@ -84,8 +84,8 @@ item_table = {'Bow': (True, False, None, 0x0B, 'You have\nchosen the\narcher cla 'Blue Mail': (False, True, None, 0x22, 'Now you\'re a\nblue elf!', 'and the banana hat', 'the protected kid', 'banana hat for sale', 'the clothing store', 'tailor boy banana hatted again'), 'Red Mail': (False, True, None, 0x23, 'Now you\'re a\nred elf!', 'and the eggplant hat', 'well-protected kid', 'purple hat for sale', 'the nice clothing store', 'tailor boy fears nothing again'), 'Progressive Armor': (False, True, None, 0x60, 'time for a\nchange of\nclothes?', 'and the unknown hat', 'the protected kid', 'new hat for sale', 'the clothing store', 'tailor boy has threads again'), - 'Blue Boomerang': (True, True, None, 0x0C, 'No matter what\nyou do, blue\nreturns to you', 'and the bluemarang', 'the bat-throwing kid', 'bent stick for sale', 'fungus for puma-stick', 'throwing boy plays fetch again'), - 'Red Boomerang': (True, True, None, 0x2A, 'No matter what\nyou do, red\nreturns to you', 'and the badmarang', 'the bat-throwing kid', 'air foil for sale', 'fungus for return-stick', 'magical boy plays fetch again'), + 'Blue Boomerang': (True, False, None, 0x0C, 'No matter what\nyou do, blue\nreturns to you', 'and the bluemarang', 'the bat-throwing kid', 'bent stick for sale', 'fungus for puma-stick', 'throwing boy plays fetch again'), + 'Red Boomerang': (True, False, None, 0x2A, 'No matter what\nyou do, red\nreturns to you', 'and the badmarang', 'the bat-throwing kid', 'air foil for sale', 'fungus for return-stick', 'magical boy plays fetch again'), 'Blue Shield': (False, True, None, 0x04, 'Now you can\ndefend against\npebbles!', 'and the stone blocker', 'shield-wielding kid', 'shield for sale', 'fungus for shield', 'shield boy defends again'), 'Red Shield': (False, True, None, 0x05, 'Now you can\ndefend against\nfireballs!', 'and the shot blocker', 'shield-wielding kid', 'fire shield for sale', 'fungus for fire shield', 'shield boy defends again'), 'Mirror Shield': (True, False, None, 0x06, 'Now you can\ndefend against\nlasers!', 'and the laser blocker', 'shield-wielding kid', 'face shield for sale', 'fungus for face shield', 'shield boy defends again'), diff --git a/Regions.py b/Regions.py index cb141d10..4410c5ec 100644 --- a/Regions.py +++ b/Regions.py @@ -17,277 +17,277 @@ def create_regions(world): 'Bonk Fairy (Light)', '50 Rupee Cave', 'Fortune Teller (Light)', 'Lake Hylia Fairy', 'Light Hype Fairy', 'Desert Fairy', 'Lumberjack House', 'Lake Hylia Fortune Teller', 'Kakariko Gamble Game', 'Top of Pyramid']), create_lw_region('Death Mountain Entrance', None, ['Old Man Cave (West)', 'Death Mountain Entrance Drop']), create_lw_region('Lake Hylia Central Island', None, ['Capacity Upgrade', 'Lake Hylia Central Island Teleporter']), - create_cave_region('Blinds Hideout', ["Blind\'s Hideout - Top", - "Blind\'s Hideout - Left", - "Blind\'s Hideout - Right", - "Blind\'s Hideout - Far Left", - "Blind\'s Hideout - Far Right"]), - create_cave_region('Hyrule Castle Secret Entrance', ['Link\'s Uncle', 'Secret Passage'], ['Hyrule Castle Secret Entrance Exit']), + create_cave_region('Blinds Hideout', 'a bounty of five items', ["Blind\'s Hideout - Top", + "Blind\'s Hideout - Left", + "Blind\'s Hideout - Right", + "Blind\'s Hideout - Far Left", + "Blind\'s Hideout - Far Right"]), + create_cave_region('Hyrule Castle Secret Entrance', 'a drop\'s exit', ['Link\'s Uncle', 'Secret Passage'], ['Hyrule Castle Secret Entrance Exit']), create_lw_region('Zoras River', ['King Zora', 'Zora\'s Ledge']), - create_cave_region('Waterfall of Wishing', ['Waterfall Fairy - Left', 'Waterfall Fairy - Right']), + create_cave_region('Waterfall of Wishing', 'a cave with two chests', ['Waterfall Fairy - Left', 'Waterfall Fairy - Right']), create_lw_region('Kings Grave Area', None, ['Kings Grave', 'Kings Grave Inner Rocks']), - create_cave_region('Kings Grave', ['King\'s Tomb']), - create_cave_region('North Fairy Cave', None, ['North Fairy Cave Exit']), - create_cave_region('Dam', ['Floodgate', 'Floodgate Chest']), - create_cave_region('Links House', ['Link\'s House'], ['Links House Exit']), - create_cave_region('Chris Houlihan Room', None, ['Chris Houlihan Room Exit']), - create_cave_region('Tavern', ['Kakariko Tavern']), - create_cave_region('Elder House', None, ['Elder House Exit (East)', 'Elder House Exit (West)']), - create_cave_region('Snitch Lady (East)'), - create_cave_region('Snitch Lady (West)'), - create_cave_region('Bush Covered House'), - create_cave_region('Tavern (Front)'), - create_cave_region('Light World Bomb Hut'), - create_cave_region('Kakariko Shop'), - create_cave_region('Fortune Teller (Light)'), - create_cave_region('Lake Hylia Fortune Teller'), - create_cave_region('Lumberjack House'), - create_cave_region('Bonk Fairy (Light)'), - create_cave_region('Bonk Fairy (Dark)'), - create_cave_region('Lake Hylia Healer Fairy'), - create_cave_region('Swamp Healer Fairy'), - create_cave_region('Desert Healer Fairy'), - create_cave_region('Dark Lake Hylia Healer Fairy'), - create_cave_region('Dark Lake Hylia Ledge Healer Fairy'), - create_cave_region('Dark Desert Healer Fairy'), - create_cave_region('Dark Death Mountain Healer Fairy'), - create_cave_region('Chicken House', ['Chicken House']), - create_cave_region('Aginahs Cave', ['Aginah\'s Cave']), - create_cave_region('Sahasrahlas Hut', ['Sahasrahla\'s Hut - Left', 'Sahasrahla\'s Hut - Middle', 'Sahasrahla\'s Hut - Right', 'Sahasrahla']), - create_cave_region('Kakariko Well (top)', ['Kakariko Well - Top', 'Kakariko Well - Left', 'Kakariko Well - Middle', - 'Kakariko Well - Right', 'Kakariko Well - Bottom'], ['Kakariko Well (top to bottom)']), - create_cave_region('Kakariko Well (bottom)', None, ['Kakariko Well Exit']), - create_cave_region('Blacksmiths Hut', ['Blacksmith', 'Missing Smith']), + create_cave_region('Kings Grave', 'a cave with a chest', ['King\'s Tomb']), + create_cave_region('North Fairy Cave', 'a drop\'s exit', None, ['North Fairy Cave Exit']), + create_cave_region('Dam', 'the dam', ['Floodgate', 'Floodgate Chest']), + create_cave_region('Links House', 'your house', ['Link\'s House'], ['Links House Exit']), + create_cave_region('Chris Houlihan Room', 'I AM ERROR', None, ['Chris Houlihan Room Exit']), + create_cave_region('Tavern', 'the tavern', ['Kakariko Tavern']), + create_cave_region('Elder House', 'a connector', None, ['Elder House Exit (East)', 'Elder House Exit (West)']), + create_cave_region('Snitch Lady (East)', 'a boring house'), + create_cave_region('Snitch Lady (West)', 'a boring house'), + create_cave_region('Bush Covered House', 'the grass man'), + create_cave_region('Tavern (Front)', 'the tavern'), + create_cave_region('Light World Bomb Hut', 'a restock room'), + create_cave_region('Kakariko Shop', 'a common shop'), + create_cave_region('Fortune Teller (Light)', 'a fortune teller'), + create_cave_region('Lake Hylia Fortune Teller', 'a fortune teller'), + create_cave_region('Lumberjack House', 'a boring house'), + create_cave_region('Bonk Fairy (Light)', 'a fairy fountain'), + create_cave_region('Bonk Fairy (Dark)', 'a fairy fountain'), + create_cave_region('Lake Hylia Healer Fairy', 'a fairy fountain'), + create_cave_region('Swamp Healer Fairy', 'a fairy fountain'), + create_cave_region('Desert Healer Fairy', 'a fairy fountain'), + create_cave_region('Dark Lake Hylia Healer Fairy', 'a fairy fountain'), + create_cave_region('Dark Lake Hylia Ledge Healer Fairy', 'a fairy fountain'), + create_cave_region('Dark Desert Healer Fairy', 'a fairy fountain'), + create_cave_region('Dark Death Mountain Healer Fairy', 'a fairy fountain'), + create_cave_region('Chicken House', 'a house with a chest', ['Chicken House']), + create_cave_region('Aginahs Cave', 'a cave with a chest', ['Aginah\'s Cave']), + create_cave_region('Sahasrahlas Hut', 'Sahasrahla', ['Sahasrahla\'s Hut - Left', 'Sahasrahla\'s Hut - Middle', 'Sahasrahla\'s Hut - Right', 'Sahasrahla']), + create_cave_region('Kakariko Well (top)', 'a drop\'s exit', ['Kakariko Well - Top', 'Kakariko Well - Left', 'Kakariko Well - Middle', + 'Kakariko Well - Right', 'Kakariko Well - Bottom'], ['Kakariko Well (top to bottom)']), + create_cave_region('Kakariko Well (bottom)', 'a drop\'s exit', None, ['Kakariko Well Exit']), + create_cave_region('Blacksmiths Hut', 'the smith', ['Blacksmith', 'Missing Smith']), create_lw_region('Bat Cave Drop Ledge', None, ['Bat Cave Drop']), - create_cave_region('Bat Cave (right)', ['Magic Bat'], ['Bat Cave Door']), - create_cave_region('Bat Cave (left)', None, ['Bat Cave Exit']), - create_cave_region('Sick Kids House', ['Sick Kid']), + create_cave_region('Bat Cave (right)', 'a drop\'s exit', ['Magic Bat'], ['Bat Cave Door']), + create_cave_region('Bat Cave (left)', 'a drop\'s exit', None, ['Bat Cave Exit']), + create_cave_region('Sick Kids House', 'the sick kid', ['Sick Kid']), create_lw_region('Hobo Bridge', ['Hobo']), - create_cave_region('Lost Woods Hideout (top)', ['Lost Woods Hideout'], ['Lost Woods Hideout (top to bottom)']), - create_cave_region('Lost Woods Hideout (bottom)', None, ['Lost Woods Hideout Exit']), - create_cave_region('Lumberjack Tree (top)', ['Lumberjack Tree'], ['Lumberjack Tree (top to bottom)']), - create_cave_region('Lumberjack Tree (bottom)', None, ['Lumberjack Tree Exit']), + create_cave_region('Lost Woods Hideout (top)', 'a drop\'s exit', ['Lost Woods Hideout'], ['Lost Woods Hideout (top to bottom)']), + create_cave_region('Lost Woods Hideout (bottom)', 'a drop\'s exit', None, ['Lost Woods Hideout Exit']), + create_cave_region('Lumberjack Tree (top)', 'a drop\'s exit', ['Lumberjack Tree'], ['Lumberjack Tree (top to bottom)']), + create_cave_region('Lumberjack Tree (bottom)', 'a drop\'s exit', None, ['Lumberjack Tree Exit']), create_lw_region('Cave 45 Ledge', None, ['Cave 45']), - create_cave_region('Cave 45', ['Cave 45']), + create_cave_region('Cave 45', 'a cave with an item', ['Cave 45']), create_lw_region('Graveyard Ledge', None, ['Graveyard Cave']), - create_cave_region('Graveyard Cave', ['Graveyard Cave']), - create_cave_region('Checkerboard Cave', ['Checkerboard Cave']), - create_cave_region('Long Fairy Cave'), - create_cave_region('Mini Moldorm Cave', ['Mini Moldorm Cave - Far Left', 'Mini Moldorm Cave - Left', 'Mini Moldorm Cave - Right', - 'Mini Moldorm Cave - Far Right', 'Mini Moldorm Cave - Generous Guy']), - create_cave_region('Ice Rod Cave', ['Ice Rod Cave']), - create_cave_region('Good Bee Cave'), - create_cave_region('20 Rupee Cave'), - create_cave_region('Cave Shop (Lake Hylia)'), - create_cave_region('Cave Shop (Dark Death Mountain)'), - create_cave_region('Bonk Rock Cave', ['Bonk Rock Cave']), - create_cave_region('Library', ['Library']), - create_cave_region('Kakariko Gamble Game'), - create_cave_region('Potion Shop', ['Potion Shop']), + create_cave_region('Graveyard Cave', 'a cave with an item', ['Graveyard Cave']), + create_cave_region('Checkerboard Cave', 'a cave with an item', ['Checkerboard Cave']), + create_cave_region('Long Fairy Cave', 'a fairy fountain'), + create_cave_region('Mini Moldorm Cave', 'a bounty of five items', ['Mini Moldorm Cave - Far Left', 'Mini Moldorm Cave - Left', 'Mini Moldorm Cave - Right', + 'Mini Moldorm Cave - Far Right', 'Mini Moldorm Cave - Generous Guy']), + create_cave_region('Ice Rod Cave', 'a cave with a chest', ['Ice Rod Cave']), + create_cave_region('Good Bee Cave', 'a cold bee'), + create_cave_region('20 Rupee Cave', 'a cave with some cash'), + create_cave_region('Cave Shop (Lake Hylia)', 'a common shop'), + create_cave_region('Cave Shop (Dark Death Mountain)', 'a common shop'), + create_cave_region('Bonk Rock Cave', 'a cave with a chest', ['Bonk Rock Cave']), + create_cave_region('Library', 'the library', ['Library']), + create_cave_region('Kakariko Gamble Game', 'a game of chance'), + create_cave_region('Potion Shop', 'the potion shop', ['Potion Shop']), create_lw_region('Lake Hylia Island', ['Lake Hylia Island']), - create_cave_region('Capacity Upgrade'), - create_cave_region('Two Brothers House', None, ['Two Brothers House Exit (East)', 'Two Brothers House Exit (West)']), + create_cave_region('Capacity Upgrade', 'the queen of fairies'), + create_cave_region('Two Brothers House', 'a connector', None, ['Two Brothers House Exit (East)', 'Two Brothers House Exit (West)']), create_lw_region('Maze Race Ledge', ['Maze Race'], ['Two Brothers House (West)']), - create_cave_region('50 Rupee Cave'), + create_cave_region('50 Rupee Cave', 'a cave with some cash'), create_lw_region('Desert Ledge', ['Desert Ledge'], ['Desert Palace Entrance (North) Rocks', 'Desert Palace Entrance (West)']), create_lw_region('Desert Ledge (Northeast)', None, ['Checkerboard Cave']), create_lw_region('Desert Palace Stairs', None, ['Desert Palace Entrance (South)']), create_lw_region('Desert Palace Lone Stairs', None, ['Desert Palace Stairs Drop', 'Desert Palace Entrance (East)']), create_lw_region('Desert Palace Entrance (North) Spot', None, ['Desert Palace Entrance (North)', 'Desert Ledge Return Rocks']), - create_dungeon_region('Desert Palace Main (Outer)', ['Desert Palace - Big Chest', 'Desert Palace - Torch', 'Desert Palace - Map Chest'], + create_dungeon_region('Desert Palace Main (Outer)', 'Desert Palace', ['Desert Palace - Big Chest', 'Desert Palace - Torch', 'Desert Palace - Map Chest'], ['Desert Palace Pots (Outer)', 'Desert Palace Exit (West)', 'Desert Palace Exit (East)', 'Desert Palace East Wing']), - create_dungeon_region('Desert Palace Main (Inner)', None, ['Desert Palace Exit (South)', 'Desert Palace Pots (Inner)']), - create_dungeon_region('Desert Palace East', ['Desert Palace - Compass Chest', 'Desert Palace - Big Key Chest']), - create_dungeon_region('Desert Palace North', ['Desert Palace - Boss', 'Desert Palace - Prize'], ['Desert Palace Exit (North)']), - create_dungeon_region('Eastern Palace', ['Eastern Palace - Compass Chest', 'Eastern Palace - Big Chest', 'Eastern Palace - Cannonball Chest', + create_dungeon_region('Desert Palace Main (Inner)', 'Desert Palace', None, ['Desert Palace Exit (South)', 'Desert Palace Pots (Inner)']), + create_dungeon_region('Desert Palace East', 'Desert Palace', ['Desert Palace - Compass Chest', 'Desert Palace - Big Key Chest']), + create_dungeon_region('Desert Palace North', 'Desert Palace', ['Desert Palace - Boss', 'Desert Palace - Prize'], ['Desert Palace Exit (North)']), + create_dungeon_region('Eastern Palace', 'Eastern Palace', ['Eastern Palace - Compass Chest', 'Eastern Palace - Big Chest', 'Eastern Palace - Cannonball Chest', 'Eastern Palace - Big Key Chest', 'Eastern Palace - Map Chest', 'Eastern Palace - Boss', 'Eastern Palace - Prize'], ['Eastern Palace Exit']), create_lw_region('Master Sword Meadow', ['Master Sword Pedestal']), - create_cave_region('Lost Woods Gamble'), + create_cave_region('Lost Woods Gamble', 'a game of chance'), create_lw_region('Hyrule Castle Courtyard', None, ['Hyrule Castle Secret Entrance Stairs', 'Hyrule Castle Entrance (South)']), create_lw_region('Hyrule Castle Ledge', None, ['Hyrule Castle Entrance (East)', 'Hyrule Castle Entrance (West)', 'Agahnims Tower', 'Hyrule Castle Ledge Courtyard Drop']), - create_dungeon_region('Hyrule Castle', ['Hyrule Castle - Boomerang Chest', 'Hyrule Castle - Map Chest', 'Hyrule Castle - Zelda\'s Chest'], + create_dungeon_region('Hyrule Castle', 'Hyrule Castle', ['Hyrule Castle - Boomerang Chest', 'Hyrule Castle - Map Chest', 'Hyrule Castle - Zelda\'s Chest'], ['Hyrule Castle Exit (East)', 'Hyrule Castle Exit (West)', 'Hyrule Castle Exit (South)', 'Throne Room']), - create_dungeon_region('Sewer Drop', None, ['Sewer Drop']), # This exists only to be referenced for access checks - create_dungeon_region('Sewers (Dark)', ['Sewers - Dark Cross'], ['Sewers Door']), - create_dungeon_region('Sewers', ['Sewers - Secret Room - Left', 'Sewers - Secret Room - Middle', + create_dungeon_region('Sewer Drop', 'a drop\'s exit', None, ['Sewer Drop']), # This exists only to be referenced for access checks + create_dungeon_region('Sewers (Dark)', 'a drop\'s exit', ['Sewers - Dark Cross'], ['Sewers Door']), + create_dungeon_region('Sewers', 'a drop\'s exit', ['Sewers - Secret Room - Left', 'Sewers - Secret Room - Middle', 'Sewers - Secret Room - Right'], ['Sanctuary Push Door', 'Sewers Back Door']), - create_dungeon_region('Sanctuary', ['Sanctuary'], ['Sanctuary Exit']), - create_dungeon_region('Agahnims Tower', ['Castle Tower - Room 03', 'Castle Tower - Dark Maze'], ['Agahnim 1', 'Agahnims Tower Exit']), - create_dungeon_region('Agahnim 1', ['Agahnim 1'], None), - create_cave_region('Old Man Cave', ['Old Man'], ['Old Man Cave Exit (East)', 'Old Man Cave Exit (West)']), - create_cave_region('Old Man House', None, ['Old Man House Exit (Bottom)', 'Old Man House Front to Back']), - create_cave_region('Old Man House Back', None, ['Old Man House Exit (Top)', 'Old Man House Back to Front']), + create_dungeon_region('Sanctuary', 'a drop\'s exit', ['Sanctuary'], ['Sanctuary Exit']), + create_dungeon_region('Agahnims Tower', 'Castle Tower', ['Castle Tower - Room 03', 'Castle Tower - Dark Maze'], ['Agahnim 1', 'Agahnims Tower Exit']), + create_dungeon_region('Agahnim 1', 'Castle Tower', ['Agahnim 1'], None), + create_cave_region('Old Man Cave', 'a connector', ['Old Man'], ['Old Man Cave Exit (East)', 'Old Man Cave Exit (West)']), + create_cave_region('Old Man House', 'a connector', None, ['Old Man House Exit (Bottom)', 'Old Man House Front to Back']), + create_cave_region('Old Man House Back', 'a connector', None, ['Old Man House Exit (Top)', 'Old Man House Back to Front']), create_lw_region('Death Mountain', None, ['Old Man Cave (East)', 'Old Man House (Bottom)', 'Old Man House (Top)', 'Death Mountain Return Cave (East)', 'Spectacle Rock Cave', 'Spectacle Rock Cave Peak', 'Spectacle Rock Cave (Bottom)', 'Broken Bridge (West)', 'Death Mountain Teleporter']), - create_cave_region('Death Mountain Return Cave', None, ['Death Mountain Return Cave Exit (West)', 'Death Mountain Return Cave Exit (East)']), + create_cave_region('Death Mountain Return Cave', 'a connector', None, ['Death Mountain Return Cave Exit (West)', 'Death Mountain Return Cave Exit (East)']), create_lw_region('Death Mountain Return Ledge', None, ['Death Mountain Return Ledge Drop', 'Death Mountain Return Cave (West)']), - create_cave_region('Spectacle Rock Cave (Top)', ['Spectacle Rock Cave'], ['Spectacle Rock Cave Drop', 'Spectacle Rock Cave Exit (Top)']), - create_cave_region('Spectacle Rock Cave (Bottom)', None, ['Spectacle Rock Cave Exit']), - create_cave_region('Spectacle Rock Cave (Peak)', None, ['Spectacle Rock Cave Peak Drop', 'Spectacle Rock Cave Exit (Peak)']), + create_cave_region('Spectacle Rock Cave (Top)', 'a connector', ['Spectacle Rock Cave'], ['Spectacle Rock Cave Drop', 'Spectacle Rock Cave Exit (Top)']), + create_cave_region('Spectacle Rock Cave (Bottom)', 'a connector', None, ['Spectacle Rock Cave Exit']), + create_cave_region('Spectacle Rock Cave (Peak)', 'a connector', None, ['Spectacle Rock Cave Peak Drop', 'Spectacle Rock Cave Exit (Peak)']), create_lw_region('East Death Mountain (Bottom)', None, ['Broken Bridge (East)', 'Paradox Cave (Bottom)', 'Paradox Cave (Middle)', 'East Death Mountain Teleporter', 'Hookshot Fairy', 'Fairy Ascension Rocks', 'Spiral Cave (Bottom)']), - create_cave_region('Hookshot Fairy'), - create_cave_region('Paradox Cave Front', None, ['Paradox Cave Push Block Reverse', 'Paradox Cave Exit (Bottom)', 'Light World Death Mountain Shop']), - create_cave_region('Paradox Cave Chest Area', ['Paradox Cave Lower - Far Left', - 'Paradox Cave Lower - Left', - 'Paradox Cave Lower - Right', - 'Paradox Cave Lower - Far Right', - 'Paradox Cave Lower - Middle', - 'Paradox Cave Upper - Left', - 'Paradox Cave Upper - Right'], + create_cave_region('Hookshot Fairy', 'fairies deep in a cave'), + create_cave_region('Paradox Cave Front', 'a connector', None, ['Paradox Cave Push Block Reverse', 'Paradox Cave Exit (Bottom)', 'Light World Death Mountain Shop']), + create_cave_region('Paradox Cave Chest Area', 'a connector', ['Paradox Cave Lower - Far Left', + 'Paradox Cave Lower - Left', + 'Paradox Cave Lower - Right', + 'Paradox Cave Lower - Far Right', + 'Paradox Cave Lower - Middle', + 'Paradox Cave Upper - Left', + 'Paradox Cave Upper - Right'], ['Paradox Cave Push Block', 'Paradox Cave Bomb Jump']), - create_cave_region('Paradox Cave', None, ['Paradox Cave Exit (Middle)', 'Paradox Cave Exit (Top)', 'Paradox Cave Drop']), - create_cave_region('Light World Death Mountain Shop'), + create_cave_region('Paradox Cave', 'a connector', None, ['Paradox Cave Exit (Middle)', 'Paradox Cave Exit (Top)', 'Paradox Cave Drop']), + create_cave_region('Light World Death Mountain Shop', 'a common shop'), create_lw_region('East Death Mountain (Top)', None, ['Paradox Cave (Top)', 'Death Mountain (Top)', 'Spiral Cave Ledge Access', 'East Death Mountain Drop', 'Turtle Rock Teleporter', 'Fairy Ascension Ledge']), create_lw_region('Spiral Cave Ledge', None, ['Spiral Cave', 'Spiral Cave Ledge Drop']), - create_cave_region('Spiral Cave (Top)', ['Spiral Cave'], ['Spiral Cave (top to bottom)', 'Spiral Cave Exit (Top)']), - create_cave_region('Spiral Cave (Bottom)', None, ['Spiral Cave Exit']), + create_cave_region('Spiral Cave (Top)', 'a connector', ['Spiral Cave'], ['Spiral Cave (top to bottom)', 'Spiral Cave Exit (Top)']), + create_cave_region('Spiral Cave (Bottom)', 'a connector', None, ['Spiral Cave Exit']), create_lw_region('Fairy Ascension Plateau', None, ['Fairy Ascension Drop', 'Fairy Ascension Cave (Bottom)']), - create_cave_region('Fairy Ascension Cave', None, ['Fairy Ascension Cave Exit (Top)', 'Fairy Ascension Cave Exit (Bottom)']), + create_cave_region('Fairy Ascension Cave', 'a connector', None, ['Fairy Ascension Cave Exit (Top)', 'Fairy Ascension Cave Exit (Bottom)']), create_lw_region('Fairy Ascension Ledge', None, ['Fairy Ascension Ledge Drop', 'Fairy Ascension Cave (Top)']), create_lw_region('Death Mountain (Top)', ['Ether Tablet'], ['East Death Mountain (Top)', 'Tower of Hera', 'Death Mountain Drop']), create_lw_region('Spectacle Rock', ['Spectacle Rock'], ['Spectacle Rock Drop']), - create_dungeon_region('Tower of Hera (Bottom)', ['Tower of Hera - Basement Cage', 'Tower of Hera - Map Chest'], ['Tower of Hera Small Key Door', 'Tower of Hera Big Key Door', 'Tower of Hera Exit']), - create_dungeon_region('Tower of Hera (Basement)', ['Tower of Hera - Big Key Chest']), - create_dungeon_region('Tower of Hera (Top)', ['Tower of Hera - Compass Chest', 'Tower of Hera - Big Chest', 'Tower of Hera - Boss', 'Tower of Hera - Prize']), + create_dungeon_region('Tower of Hera (Bottom)', 'Tower of Hera', ['Tower of Hera - Basement Cage', 'Tower of Hera - Map Chest'], ['Tower of Hera Small Key Door', 'Tower of Hera Big Key Door', 'Tower of Hera Exit']), + create_dungeon_region('Tower of Hera (Basement)', 'Tower of Hera', ['Tower of Hera - Big Key Chest']), + create_dungeon_region('Tower of Hera (Top)', 'Tower of Hera', ['Tower of Hera - Compass Chest', 'Tower of Hera - Big Chest', 'Tower of Hera - Boss', 'Tower of Hera - Prize']), create_dw_region('East Dark World', ['Pyramid'], ['Pyramid Fairy', 'South Dark World Bridge', 'Palace of Darkness', 'Dark Lake Hylia Drop (East)', 'Dark Lake Hylia Teleporter', - 'Hyrule Castle Ledge Mirror Spot', 'Dark Lake Hylia Fairy', 'Palace of Darkness Hint', 'East Dark World Hint', 'Pyramid Hole', 'Northeast Dark World Broken Bridge Pass']), + 'Hyrule Castle Ledge Mirror Spot', 'Dark Lake Hylia Fairy', 'Palace of Darkness Hint', 'East Dark World Hint', 'Pyramid Hole', 'Northeast Dark World Broken Bridge Pass']), create_dw_region('Northeast Dark World', ['Catfish'], ['West Dark World Gap', 'Dark World Potion Shop', 'East Dark World Broken Bridge Pass']), - create_cave_region('Palace of Darkness Hint'), - create_cave_region('East Dark World Hint'), - create_dw_region('South Dark World', ['Stumpy', 'Digging Game', 'Bombos Tablet'], ['Dark Lake Hylia Drop (South)', 'Hype Cave', 'Swamp Palace', 'Village of Outcasts Heavy Rock', - 'Maze Race Mirror Spot', 'Cave 45 Mirror Spot', 'East Dark World Bridge', 'Big Bomb Shop', 'Archery Game', 'Bonk Fairy (Dark)', 'Dark Lake Hylia Shop']), - create_cave_region('Big Bomb Shop'), - create_cave_region('Archery Game'), + create_cave_region('Palace of Darkness Hint', 'a storyteller'), + create_cave_region('East Dark World Hint', 'a storyteller'), + create_dw_region('South Dark World', ['Stumpy', 'Digging Game', 'Bombos Tablet'], ['Dark Lake Hylia Drop (South)', 'Hype Cave', 'Swamp Palace', 'Village of Outcasts Heavy Rock', 'Maze Race Mirror Spot', + 'Cave 45 Mirror Spot', 'East Dark World Bridge', 'Big Bomb Shop', 'Archery Game', 'Bonk Fairy (Dark)', 'Dark Lake Hylia Shop']), + create_cave_region('Big Bomb Shop', 'the bomb shop'), + create_cave_region('Archery Game', 'a game of skill'), create_dw_region('Dark Lake Hylia', None, ['Lake Hylia Island Mirror Spot', 'East Dark World Pier', 'Dark Lake Hylia Ledge']), create_dw_region('Dark Lake Hylia Central Island', None, ['Ice Palace', 'Lake Hylia Central Island Mirror Spot']), create_dw_region('Dark Lake Hylia Ledge', None, ['Dark Lake Hylia Ledge Drop', 'Dark Lake Hylia Ledge Fairy', 'Dark Lake Hylia Ledge Hint', 'Dark Lake Hylia Ledge Spike Cave']), - create_cave_region('Dark Lake Hylia Ledge Hint'), - create_cave_region('Dark Lake Hylia Ledge Spike Cave'), - create_cave_region('Hype Cave', ['Hype Cave - Top', 'Hype Cave - Middle Right', 'Hype Cave - Middle Left', - 'Hype Cave - Bottom', 'Hype Cave - Generous Guy']), + create_cave_region('Dark Lake Hylia Ledge Hint', 'a storyteller'), + create_cave_region('Dark Lake Hylia Ledge Spike Cave', 'a spiky hint'), + create_cave_region('Hype Cave', 'a bounty of five items', ['Hype Cave - Top', 'Hype Cave - Middle Right', 'Hype Cave - Middle Left', + 'Hype Cave - Bottom', 'Hype Cave - Generous Guy']), create_dw_region('West Dark World', ['Frog'], ['Village of Outcasts Drop', 'East Dark World River Pier', 'Brewery', 'C-Shaped House', 'Chest Game', 'Thieves Town', 'Graveyard Ledge Mirror Spot', 'Kings Grave Mirror Spot', 'Bumper Cave Entrance Rock', 'Skull Woods Forest', 'Village of Outcasts Pegs', 'Village of Outcasts Eastern Rocks', 'Red Shield Shop', 'Dark Sanctuary Hint', 'Fortune Teller (Dark)', 'Dark World Lumberjack Shop']), create_dw_region('Dark Grassy Lawn', None, ['Grassy Lawn Pegs', 'Dark World Shop']), create_dw_region('Hammer Peg Area', ['Dark Blacksmith Ruins'], ['Bat Cave Drop Ledge Mirror Spot', 'Dark World Hammer Peg Cave', 'Peg Area Rocks']), create_dw_region('Bumper Cave Entrance', None, ['Bumper Cave (Bottom)', 'Bumper Cave Entrance Mirror Spot', 'Bumper Cave Entrance Drop']), - create_cave_region('Fortune Teller (Dark)'), - create_cave_region('Village of Outcasts Shop'), - create_cave_region('Dark Lake Hylia Shop'), - create_cave_region('Dark World Lumberjack Shop'), - create_cave_region('Dark World Potion Shop'), - create_cave_region('Dark World Hammer Peg Cave', ['Peg Cave']), - create_cave_region('Pyramid Fairy', ['Pyramid Fairy - Left', 'Pyramid Fairy - Right']), - create_cave_region('Brewery', ['Brewery']), - create_cave_region('C-Shaped House', ['C-Shaped House']), - create_cave_region('Chest Game', ['Chest Game']), - create_cave_region('Red Shield Shop'), - create_cave_region('Dark Sanctuary Hint'), - create_cave_region('Bumper Cave', None, ['Bumper Cave Exit (Bottom)', 'Bumper Cave Exit (Top)']), + create_cave_region('Fortune Teller (Dark)', 'a fortune teller'), + create_cave_region('Village of Outcasts Shop', 'a common shop'), + create_cave_region('Dark Lake Hylia Shop', 'a common shop'), + create_cave_region('Dark World Lumberjack Shop', 'a common shop'), + create_cave_region('Dark World Potion Shop', 'a common shop'), + create_cave_region('Dark World Hammer Peg Cave', 'a cave with an item', ['Peg Cave']), + create_cave_region('Pyramid Fairy', 'a cave with two chests', ['Pyramid Fairy - Left', 'Pyramid Fairy - Right']), + create_cave_region('Brewery', 'a house with a chest', ['Brewery']), + create_cave_region('C-Shaped House', 'a house with a chest', ['C-Shaped House']), + create_cave_region('Chest Game', 'a game of 16 chests', ['Chest Game']), + create_cave_region('Red Shield Shop', 'the rare shop'), + create_cave_region('Dark Sanctuary Hint', 'a storyteller'), + create_cave_region('Bumper Cave', 'a connector', None, ['Bumper Cave Exit (Bottom)', 'Bumper Cave Exit (Top)']), create_dw_region('Bumper Cave Ledge', ['Bumper Cave Ledge'], ['Bumper Cave Ledge Drop', 'Bumper Cave (Top)', 'Bumper Cave Ledge Mirror Spot']), - create_dw_region('Skull Woods Forest', None, ['Skull Woods First Section Hole (East)', 'Skull Woods First Section Hole (West)', 'Skull Woods First Section Hole (North)', 'Skull Woods First Section Door', - 'Skull Woods Second Section Door (East)']), + create_dw_region('Skull Woods Forest', None, ['Skull Woods First Section Hole (East)', 'Skull Woods First Section Hole (West)', 'Skull Woods First Section Hole (North)', + 'Skull Woods First Section Door', 'Skull Woods Second Section Door (East)']), create_dw_region('Skull Woods Forest (West)', None, ['Skull Woods Second Section Hole', 'Skull Woods Second Section Door (West)', 'Skull Woods Final Section']), - create_dw_region('Dark Desert', None, ['Misery Mire', 'Mire Shed', 'Desert Ledge (Northeast) Mirror Spot', 'Desert Ledge Mirror Spot', 'Desert Palace Stairs Mirror Spot', 'Desert Palace Entrance (North) Mirror Spot', - 'Dark Desert Hint', 'Dark Desert Fairy']), - create_cave_region('Mire Shed', ['Mire Shed - Left', 'Mire Shed - Right']), - create_cave_region('Dark Desert Hint'), + create_dw_region('Dark Desert', None, ['Misery Mire', 'Mire Shed', 'Desert Ledge (Northeast) Mirror Spot', 'Desert Ledge Mirror Spot', 'Desert Palace Stairs Mirror Spot', + 'Desert Palace Entrance (North) Mirror Spot', 'Dark Desert Hint', 'Dark Desert Fairy']), + create_cave_region('Mire Shed', 'a cave with two chests', ['Mire Shed - Left', 'Mire Shed - Right']), + create_cave_region('Dark Desert Hint', 'a storyteller'), create_dw_region('Dark Death Mountain (West Bottom)', None, ['Spike Cave', 'Spectacle Rock Mirror Spot', 'Dark Death Mountain Fairy']), - create_dw_region('Dark Death Mountain (Top)', None, ['Dark Death Mountain Drop (East)', 'Dark Death Mountain Drop (West)', 'Ganons Tower', 'Superbunny Cave (Top)', 'Hookshot Cave', - 'East Death Mountain (Top) Mirror Spot', 'Turtle Rock']), + create_dw_region('Dark Death Mountain (Top)', None, ['Dark Death Mountain Drop (East)', 'Dark Death Mountain Drop (West)', 'Ganons Tower', 'Superbunny Cave (Top)', + 'Hookshot Cave', 'East Death Mountain (Top) Mirror Spot', 'Turtle Rock']), create_dw_region('Dark Death Mountain Ledge', None, ['Dark Death Mountain Ledge (East)', 'Dark Death Mountain Ledge (West)', 'Mimic Cave Mirror Spot', 'Spiral Cave Mirror Spot']), create_dw_region('Dark Death Mountain Isolated Ledge', None, ['Isolated Ledge Mirror Spot', 'Turtle Rock Isolated Ledge Entrance']), create_dw_region('Dark Death Mountain (East Bottom)', None, ['Superbunny Cave (Bottom)', 'Cave Shop (Dark Death Mountain)', 'Fairy Ascension Mirror Spot']), - create_cave_region('Superbunny Cave', ['Superbunny Cave - Top', 'Superbunny Cave - Bottom'], + create_cave_region('Superbunny Cave', 'a connector', ['Superbunny Cave - Top', 'Superbunny Cave - Bottom'], ['Superbunny Cave Exit (Top)', 'Superbunny Cave Exit (Bottom)']), - create_cave_region('Spike Cave', ['Spike Cave']), - create_cave_region('Hookshot Cave', ['Hookshot Cave - Top Right', 'Hookshot Cave - Top Left', 'Hookshot Cave - Bottom Right', 'Hookshot Cave - Bottom Left'], + create_cave_region('Spike Cave', 'Spike Cave', ['Spike Cave']), + create_cave_region('Hookshot Cave', 'a connector', ['Hookshot Cave - Top Right', 'Hookshot Cave - Top Left', 'Hookshot Cave - Bottom Right', 'Hookshot Cave - Bottom Left'], ['Hookshot Cave Exit (South)', 'Hookshot Cave Exit (North)']), create_dw_region('Death Mountain Floating Island (Dark World)', None, ['Floating Island Drop', 'Hookshot Cave Back Entrance', 'Floating Island Mirror Spot']), create_lw_region('Death Mountain Floating Island (Light World)', ['Floating Island']), create_dw_region('Turtle Rock (Top)', None, ['Turtle Rock Drop']), create_lw_region('Mimic Cave Ledge', None, ['Mimic Cave']), - create_cave_region('Mimic Cave', ['Mimic Cave']), + create_cave_region('Mimic Cave', 'Mimic Cave', ['Mimic Cave']), - create_dungeon_region('Swamp Palace (Entrance)', None, ['Swamp Palace Moat', 'Swamp Palace Exit']), - create_dungeon_region('Swamp Palace (First Room)', ['Swamp Palace - Entrance'], ['Swamp Palace Small Key Door']), - create_dungeon_region('Swamp Palace (Starting Area)', ['Swamp Palace - Map Chest'], ['Swamp Palace (Center)']), - create_dungeon_region('Swamp Palace (Center)', ['Swamp Palace - Big Chest', 'Swamp Palace - Compass Chest', - 'Swamp Palace - Big Key Chest', 'Swamp Palace - West Chest'], ['Swamp Palace (North)']), - create_dungeon_region('Swamp Palace (North)', ['Swamp Palace - Flooded Room - Left', 'Swamp Palace - Flooded Room - Right', - 'Swamp Palace - Waterfall Room', 'Swamp Palace - Boss', 'Swamp Palace - Prize']), - create_dungeon_region('Thieves Town (Entrance)', ['Thieves\' Town - Big Key Chest', - 'Thieves\' Town - Map Chest', - 'Thieves\' Town - Compass Chest', - 'Thieves\' Town - Ambush Chest'], ['Thieves Town Big Key Door', 'Thieves Town Exit']), - create_dungeon_region('Thieves Town (Deep)', ['Thieves\' Town - Attic', - 'Thieves\' Town - Big Chest', - 'Thieves\' Town - Blind\'s Cell'], ['Blind Fight']), - create_dungeon_region('Blind Fight', ['Thieves\' Town - Boss', 'Thieves\' Town - Prize']), - create_dungeon_region('Skull Woods First Section', ['Skull Woods - Map Chest'], ['Skull Woods First Section Exit', 'Skull Woods First Section Bomb Jump', 'Skull Woods First Section South Door', 'Skull Woods First Section West Door']), - create_dungeon_region('Skull Woods First Section (Right)', ['Skull Woods - Pinball Room'], ['Skull Woods First Section (Right) North Door']), - create_dungeon_region('Skull Woods First Section (Left)', ['Skull Woods - Compass Chest', 'Skull Woods - Pot Prison'], ['Skull Woods First Section (Left) Door to Exit', 'Skull Woods First Section (Left) Door to Right']), - create_dungeon_region('Skull Woods First Section (Top)', ['Skull Woods - Big Chest'], ['Skull Woods First Section (Top) One-Way Path']), - create_dungeon_region('Skull Woods Second Section (Drop)', None, ['Skull Woods Second Section (Drop)']), - create_dungeon_region('Skull Woods Second Section', ['Skull Woods - Big Key Chest'], ['Skull Woods Second Section Exit (East)', 'Skull Woods Second Section Exit (West)']), - create_dungeon_region('Skull Woods Final Section (Entrance)', ['Skull Woods - Bridge Room'], ['Skull Woods Torch Room', 'Skull Woods Final Section Exit']), - create_dungeon_region('Skull Woods Final Section (Mothula)', ['Skull Woods - Boss', 'Skull Woods - Prize']), - create_dungeon_region('Ice Palace (Entrance)', None, ['Ice Palace Entrance Room', 'Ice Palace Exit']), - create_dungeon_region('Ice Palace (Main)', ['Ice Palace - Compass Chest', 'Ice Palace - Freezor Chest', - 'Ice Palace - Big Chest', 'Ice Palace - Iced T Room'], ['Ice Palace (East)', 'Ice Palace (Kholdstare)']), - create_dungeon_region('Ice Palace (East)', ['Ice Palace - Spike Room'], ['Ice Palace (East Top)']), - create_dungeon_region('Ice Palace (East Top)', ['Ice Palace - Big Key Chest', 'Ice Palace - Map Chest']), - create_dungeon_region('Ice Palace (Kholdstare)', ['Ice Palace - Boss', 'Ice Palace - Prize']), - create_dungeon_region('Misery Mire (Entrance)', None, ['Misery Mire Entrance Gap', 'Misery Mire Exit']), - create_dungeon_region('Misery Mire (Main)', ['Misery Mire - Big Chest', 'Misery Mire - Map Chest', 'Misery Mire - Main Lobby', - 'Misery Mire - Bridge Chest', 'Misery Mire - Spike Chest'], ['Misery Mire (West)', 'Misery Mire Big Key Door']), - create_dungeon_region('Misery Mire (West)', ['Misery Mire - Compass Chest', 'Misery Mire - Big Key Chest']), - create_dungeon_region('Misery Mire (Final Area)', None, ['Misery Mire (Vitreous)']), - create_dungeon_region('Misery Mire (Vitreous)', ['Misery Mire - Boss', 'Misery Mire - Prize']), - create_dungeon_region('Turtle Rock (Entrance)', None, ['Turtle Rock Entrance Gap', 'Turtle Rock Exit (Front)']), - create_dungeon_region('Turtle Rock (First Section)', ['Turtle Rock - Compass Chest', 'Turtle Rock - Roller Room - Left', - 'Turtle Rock - Roller Room - Right'], ['Turtle Rock Pokey Room', 'Turtle Rock Entrance Gap Reverse']), - create_dungeon_region('Turtle Rock (Chain Chomp Room)', ['Turtle Rock - Chain Chomps'], ['Turtle Rock (Chain Chomp Room) (North)', 'Turtle Rock (Chain Chomp Room) (South)']), - create_dungeon_region('Turtle Rock (Second Section)', ['Turtle Rock - Big Key Chest'], ['Turtle Rock Ledge Exit (West)', 'Turtle Rock Chain Chomp Staircase', 'Turtle Rock Big Key Door']), - create_dungeon_region('Turtle Rock (Big Chest)', ['Turtle Rock - Big Chest'], ['Turtle Rock (Big Chest) (North)', 'Turtle Rock Ledge Exit (East)']), - create_dungeon_region('Turtle Rock (Crystaroller Room)', ['Turtle Rock - Crystaroller Room'], ['Turtle Rock Dark Room Staircase', 'Turtle Rock Big Key Door Reverse']), - create_dungeon_region('Turtle Rock (Dark Room)', None, ['Turtle Rock (Dark Room) (North)', 'Turtle Rock (Dark Room) (South)']), - create_dungeon_region('Turtle Rock (Eye Bridge)', ['Turtle Rock - Eye Bridge - Bottom Left', 'Turtle Rock - Eye Bridge - Bottom Right', - 'Turtle Rock - Eye Bridge - Top Left', 'Turtle Rock - Eye Bridge - Top Right'], + create_dungeon_region('Swamp Palace (Entrance)', 'Swamp Palace', None, ['Swamp Palace Moat', 'Swamp Palace Exit']), + create_dungeon_region('Swamp Palace (First Room)', 'Swamp Palace', ['Swamp Palace - Entrance'], ['Swamp Palace Small Key Door']), + create_dungeon_region('Swamp Palace (Starting Area)', 'Swamp Palace', ['Swamp Palace - Map Chest'], ['Swamp Palace (Center)']), + create_dungeon_region('Swamp Palace (Center)', 'Swamp Palace', ['Swamp Palace - Big Chest', 'Swamp Palace - Compass Chest', + 'Swamp Palace - Big Key Chest', 'Swamp Palace - West Chest'], ['Swamp Palace (North)']), + create_dungeon_region('Swamp Palace (North)', 'Swamp Palace', ['Swamp Palace - Flooded Room - Left', 'Swamp Palace - Flooded Room - Right', + 'Swamp Palace - Waterfall Room', 'Swamp Palace - Boss', 'Swamp Palace - Prize']), + create_dungeon_region('Thieves Town (Entrance)', 'Thieves\' Town', ['Thieves\' Town - Big Key Chest', + 'Thieves\' Town - Map Chest', + 'Thieves\' Town - Compass Chest', + 'Thieves\' Town - Ambush Chest'], ['Thieves Town Big Key Door', 'Thieves Town Exit']), + create_dungeon_region('Thieves Town (Deep)', 'Thieves\' Town', ['Thieves\' Town - Attic', + 'Thieves\' Town - Big Chest', + 'Thieves\' Town - Blind\'s Cell'], ['Blind Fight']), + create_dungeon_region('Blind Fight', 'Thieves\' Town', ['Thieves\' Town - Boss', 'Thieves\' Town - Prize']), + create_dungeon_region('Skull Woods First Section', 'Skull Woods', ['Skull Woods - Map Chest'], ['Skull Woods First Section Exit', 'Skull Woods First Section Bomb Jump', 'Skull Woods First Section South Door', 'Skull Woods First Section West Door']), + create_dungeon_region('Skull Woods First Section (Right)', 'Skull Woods', ['Skull Woods - Pinball Room'], ['Skull Woods First Section (Right) North Door']), + create_dungeon_region('Skull Woods First Section (Left)', 'Skull Woods', ['Skull Woods - Compass Chest', 'Skull Woods - Pot Prison'], ['Skull Woods First Section (Left) Door to Exit', 'Skull Woods First Section (Left) Door to Right']), + create_dungeon_region('Skull Woods First Section (Top)', 'Skull Woods', ['Skull Woods - Big Chest'], ['Skull Woods First Section (Top) One-Way Path']), + create_dungeon_region('Skull Woods Second Section (Drop)', 'Skull Woods', None, ['Skull Woods Second Section (Drop)']), + create_dungeon_region('Skull Woods Second Section', 'Skull Woods', ['Skull Woods - Big Key Chest'], ['Skull Woods Second Section Exit (East)', 'Skull Woods Second Section Exit (West)']), + create_dungeon_region('Skull Woods Final Section (Entrance)', 'Skull Woods', ['Skull Woods - Bridge Room'], ['Skull Woods Torch Room', 'Skull Woods Final Section Exit']), + create_dungeon_region('Skull Woods Final Section (Mothula)', 'Skull Woods', ['Skull Woods - Boss', 'Skull Woods - Prize']), + create_dungeon_region('Ice Palace (Entrance)', 'Ice Palace', None, ['Ice Palace Entrance Room', 'Ice Palace Exit']), + create_dungeon_region('Ice Palace (Main)', 'Ice Palace', ['Ice Palace - Compass Chest', 'Ice Palace - Freezor Chest', + 'Ice Palace - Big Chest', 'Ice Palace - Iced T Room'], ['Ice Palace (East)', 'Ice Palace (Kholdstare)']), + create_dungeon_region('Ice Palace (East)', 'Ice Palace', ['Ice Palace - Spike Room'], ['Ice Palace (East Top)']), + create_dungeon_region('Ice Palace (East Top)', 'Ice Palace', ['Ice Palace - Big Key Chest', 'Ice Palace - Map Chest']), + create_dungeon_region('Ice Palace (Kholdstare)', 'Ice Palace', ['Ice Palace - Boss', 'Ice Palace - Prize']), + create_dungeon_region('Misery Mire (Entrance)', 'Misery Mire', None, ['Misery Mire Entrance Gap', 'Misery Mire Exit']), + create_dungeon_region('Misery Mire (Main)', 'Misery Mire', ['Misery Mire - Big Chest', 'Misery Mire - Map Chest', 'Misery Mire - Main Lobby', + 'Misery Mire - Bridge Chest', 'Misery Mire - Spike Chest'], ['Misery Mire (West)', 'Misery Mire Big Key Door']), + create_dungeon_region('Misery Mire (West)', 'Misery Mire', ['Misery Mire - Compass Chest', 'Misery Mire - Big Key Chest']), + create_dungeon_region('Misery Mire (Final Area)', 'Misery Mire', None, ['Misery Mire (Vitreous)']), + create_dungeon_region('Misery Mire (Vitreous)', 'Misery Mire', ['Misery Mire - Boss', 'Misery Mire - Prize']), + create_dungeon_region('Turtle Rock (Entrance)', 'Turtle Rock', None, ['Turtle Rock Entrance Gap', 'Turtle Rock Exit (Front)']), + create_dungeon_region('Turtle Rock (First Section)', 'Turtle Rock', ['Turtle Rock - Compass Chest', 'Turtle Rock - Roller Room - Left', + 'Turtle Rock - Roller Room - Right'], ['Turtle Rock Pokey Room', 'Turtle Rock Entrance Gap Reverse']), + create_dungeon_region('Turtle Rock (Chain Chomp Room)', 'Turtle Rock', ['Turtle Rock - Chain Chomps'], ['Turtle Rock (Chain Chomp Room) (North)', 'Turtle Rock (Chain Chomp Room) (South)']), + create_dungeon_region('Turtle Rock (Second Section)', 'Turtle Rock', ['Turtle Rock - Big Key Chest'], ['Turtle Rock Ledge Exit (West)', 'Turtle Rock Chain Chomp Staircase', 'Turtle Rock Big Key Door']), + create_dungeon_region('Turtle Rock (Big Chest)', 'Turtle Rock', ['Turtle Rock - Big Chest'], ['Turtle Rock (Big Chest) (North)', 'Turtle Rock Ledge Exit (East)']), + create_dungeon_region('Turtle Rock (Crystaroller Room)', 'Turtle Rock', ['Turtle Rock - Crystaroller Room'], ['Turtle Rock Dark Room Staircase', 'Turtle Rock Big Key Door Reverse']), + create_dungeon_region('Turtle Rock (Dark Room)', 'Turtle Rock', None, ['Turtle Rock (Dark Room) (North)', 'Turtle Rock (Dark Room) (South)']), + create_dungeon_region('Turtle Rock (Eye Bridge)', 'Turtle Rock', ['Turtle Rock - Eye Bridge - Bottom Left', 'Turtle Rock - Eye Bridge - Bottom Right', + 'Turtle Rock - Eye Bridge - Top Left', 'Turtle Rock - Eye Bridge - Top Right'], ['Turtle Rock Dark Room (South)', 'Turtle Rock (Trinexx)', 'Turtle Rock Isolated Ledge Exit']), - create_dungeon_region('Turtle Rock (Trinexx)', ['Turtle Rock - Boss', 'Turtle Rock - Prize']), - create_dungeon_region('Palace of Darkness (Entrance)', ['Palace of Darkness - Shooter Room'], ['Palace of Darkness Bridge Room', 'Palace of Darkness Bonk Wall', 'Palace of Darkness Exit']), - create_dungeon_region('Palace of Darkness (Center)', ['Palace of Darkness - The Arena - Bridge', 'Palace of Darkness - Stalfos Basement'], + create_dungeon_region('Turtle Rock (Trinexx)', 'Turtle Rock', ['Turtle Rock - Boss', 'Turtle Rock - Prize']), + create_dungeon_region('Palace of Darkness (Entrance)', 'Palace of Darkness', ['Palace of Darkness - Shooter Room'], ['Palace of Darkness Bridge Room', 'Palace of Darkness Bonk Wall', 'Palace of Darkness Exit']), + create_dungeon_region('Palace of Darkness (Center)', 'Palace of Darkness', ['Palace of Darkness - The Arena - Bridge', 'Palace of Darkness - Stalfos Basement'], ['Palace of Darkness Big Key Chest Staircase', 'Palace of Darkness (North)', 'Palace of Darkness Big Key Door']), - create_dungeon_region('Palace of Darkness (Big Key Chest)', ['Palace of Darkness - Big Key Chest']), - create_dungeon_region('Palace of Darkness (Bonk Section)', ['Palace of Darkness - The Arena - Ledge', 'Palace of Darkness - Map Chest'], ['Palace of Darkness Hammer Peg Drop']), - create_dungeon_region('Palace of Darkness (North)', ['Palace of Darkness - Compass Chest', 'Palace of Darkness - Dark Basement - Left', 'Palace of Darkness - Dark Basement - Right'], + create_dungeon_region('Palace of Darkness (Big Key Chest)', 'Palace of Darkness', ['Palace of Darkness - Big Key Chest']), + create_dungeon_region('Palace of Darkness (Bonk Section)', 'Palace of Darkness', ['Palace of Darkness - The Arena - Ledge', 'Palace of Darkness - Map Chest'], ['Palace of Darkness Hammer Peg Drop']), + create_dungeon_region('Palace of Darkness (North)', 'Palace of Darkness', ['Palace of Darkness - Compass Chest', 'Palace of Darkness - Dark Basement - Left', 'Palace of Darkness - Dark Basement - Right'], ['Palace of Darkness Spike Statue Room Door', 'Palace of Darkness Maze Door']), - create_dungeon_region('Palace of Darkness (Maze)', ['Palace of Darkness - Dark Maze - Top', 'Palace of Darkness - Dark Maze - Bottom', 'Palace of Darkness - Big Chest']), - create_dungeon_region('Palace of Darkness (Harmless Hellway)', ['Palace of Darkness - Harmless Hellway']), - create_dungeon_region('Palace of Darkness (Final Section)', ['Palace of Darkness - Boss', 'Palace of Darkness - Prize']), - create_dungeon_region('Ganons Tower (Entrance)', ['Ganons Tower - Bob\'s Torch', 'Ganons Tower - Hope Room - Left', 'Ganons Tower - Hope Room - Right'], + create_dungeon_region('Palace of Darkness (Maze)', 'Palace of Darkness', ['Palace of Darkness - Dark Maze - Top', 'Palace of Darkness - Dark Maze - Bottom', 'Palace of Darkness - Big Chest']), + create_dungeon_region('Palace of Darkness (Harmless Hellway)', 'Palace of Darkness', ['Palace of Darkness - Harmless Hellway']), + create_dungeon_region('Palace of Darkness (Final Section)', 'Palace of Darkness', ['Palace of Darkness - Boss', 'Palace of Darkness - Prize']), + create_dungeon_region('Ganons Tower (Entrance)', 'Ganon\'s Tower', ['Ganons Tower - Bob\'s Torch', 'Ganons Tower - Hope Room - Left', 'Ganons Tower - Hope Room - Right'], ['Ganons Tower (Tile Room)', 'Ganons Tower (Hookshot Room)', 'Ganons Tower Big Key Door', 'Ganons Tower Exit']), - create_dungeon_region('Ganons Tower (Tile Room)', ['Ganons Tower - Tile Room'], ['Ganons Tower (Tile Room) Key Door']), - create_dungeon_region('Ganons Tower (Compass Room)', ['Ganons Tower - Compass Room - Top Left', 'Ganons Tower - Compass Room - Top Right', - 'Ganons Tower - Compass Room - Bottom Left', 'Ganons Tower - Compass Room - Bottom Right'], + create_dungeon_region('Ganons Tower (Tile Room)', 'Ganon\'s Tower', ['Ganons Tower - Tile Room'], ['Ganons Tower (Tile Room) Key Door']), + create_dungeon_region('Ganons Tower (Compass Room)', 'Ganon\'s Tower', ['Ganons Tower - Compass Room - Top Left', 'Ganons Tower - Compass Room - Top Right', + 'Ganons Tower - Compass Room - Bottom Left', 'Ganons Tower - Compass Room - Bottom Right'], ['Ganons Tower (Bottom) (East)']), - create_dungeon_region('Ganons Tower (Hookshot Room)', ['Ganons Tower - DMs Room - Top Left', 'Ganons Tower - DMs Room - Top Right', - 'Ganons Tower - DMs Room - Bottom Left', 'Ganons Tower - DMs Room - Bottom Right'], + create_dungeon_region('Ganons Tower (Hookshot Room)', 'Ganon\'s Tower', ['Ganons Tower - DMs Room - Top Left', 'Ganons Tower - DMs Room - Top Right', + 'Ganons Tower - DMs Room - Bottom Left', 'Ganons Tower - DMs Room - Bottom Right'], ['Ganons Tower (Map Room)', 'Ganons Tower (Double Switch Room)']), - create_dungeon_region('Ganons Tower (Map Room)', ['Ganons Tower - Map Chest']), - create_dungeon_region('Ganons Tower (Firesnake Room)', ['Ganons Tower - Firesnake Room'], ['Ganons Tower (Firesnake Room)']), - create_dungeon_region('Ganons Tower (Teleport Room)', ['Ganons Tower - Randomizer Room - Top Left', 'Ganons Tower - Randomizer Room - Top Right', - 'Ganons Tower - Randomizer Room - Bottom Left', 'Ganons Tower - Randomizer Room - Bottom Right'], + create_dungeon_region('Ganons Tower (Map Room)', 'Ganon\'s Tower', ['Ganons Tower - Map Chest']), + create_dungeon_region('Ganons Tower (Firesnake Room)', 'Ganon\'s Tower', ['Ganons Tower - Firesnake Room'], ['Ganons Tower (Firesnake Room)']), + create_dungeon_region('Ganons Tower (Teleport Room)', 'Ganon\'s Tower', ['Ganons Tower - Randomizer Room - Top Left', 'Ganons Tower - Randomizer Room - Top Right', + 'Ganons Tower - Randomizer Room - Bottom Left', 'Ganons Tower - Randomizer Room - Bottom Right'], ['Ganons Tower (Bottom) (West)']), - create_dungeon_region('Ganons Tower (Bottom)', ['Ganons Tower - Bob\'s Chest', 'Ganons Tower - Big Chest', 'Ganons Tower - Big Key Room - Left', - 'Ganons Tower - Big Key Room - Right', 'Ganons Tower - Big Key Chest']), - create_dungeon_region('Ganons Tower (Top)', None, ['Ganons Tower Torch Rooms']), - create_dungeon_region('Ganons Tower (Before Moldorm)', ['Ganons Tower - Mini Helmasaur Room - Left', 'Ganons Tower - Mini Helmasaur Room - Right', - 'Ganons Tower - Pre-Moldorm Chest'], ['Ganons Tower Moldorm Door']), - create_dungeon_region('Ganons Tower (Moldorm)', None, ['Ganons Tower Moldorm Gap']), - create_dungeon_region('Agahnim 2', ['Ganons Tower - Validation Chest', 'Agahnim 2'], None), - create_cave_region('Pyramid', ['Ganon'], ['Ganon Drop']), - create_cave_region('Bottom of Pyramid', None, ['Pyramid Exit']), + create_dungeon_region('Ganons Tower (Bottom)', 'Ganon\'s Tower', ['Ganons Tower - Bob\'s Chest', 'Ganons Tower - Big Chest', 'Ganons Tower - Big Key Room - Left', + 'Ganons Tower - Big Key Room - Right', 'Ganons Tower - Big Key Chest']), + create_dungeon_region('Ganons Tower (Top)', 'Ganon\'s Tower', None, ['Ganons Tower Torch Rooms']), + create_dungeon_region('Ganons Tower (Before Moldorm)', 'Ganon\'s Tower', ['Ganons Tower - Mini Helmasaur Room - Left', 'Ganons Tower - Mini Helmasaur Room - Right', + 'Ganons Tower - Pre-Moldorm Chest'], ['Ganons Tower Moldorm Door']), + create_dungeon_region('Ganons Tower (Moldorm)', 'Ganon\'s Tower', None, ['Ganons Tower Moldorm Gap']), + create_dungeon_region('Agahnim 2', 'Ganon\'s Tower', ['Ganons Tower - Validation Chest', 'Agahnim 2'], None), + create_cave_region('Pyramid', 'a drop\'s exit', ['Ganon'], ['Ganon Drop']), + create_cave_region('Bottom of Pyramid', 'a drop\'s exit', None, ['Pyramid Exit']), create_dw_region('Pyramid Ledge', None, ['Pyramid Entrance', 'Pyramid Drop']) ] @@ -308,19 +308,19 @@ def create_regions(world): world.intialize_regions() def create_lw_region(name, locations=None, exits=None): - return _create_region(name, RegionType.LightWorld, locations, exits) + return _create_region(name, RegionType.LightWorld, 'Light World', locations, exits) def create_dw_region(name, locations=None, exits=None): - return _create_region(name, RegionType.DarkWorld, locations, exits) + return _create_region(name, RegionType.DarkWorld, 'Dark World', locations, exits) -def create_cave_region(name, locations=None, exits=None): - return _create_region(name, RegionType.Cave, locations, exits) +def create_cave_region(name, hint='Hyrule', locations=None, exits=None): + return _create_region(name, RegionType.Cave, hint, locations, exits) -def create_dungeon_region(name, locations=None, exits=None): - return _create_region(name, RegionType.Dungeon, locations, exits) +def create_dungeon_region(name, hint='Hyrule', locations=None, exits=None): + return _create_region(name, RegionType.Dungeon, hint, locations, exits) -def _create_region(name, type, locations=None, exits=None): - ret = Region(name, type) +def _create_region(name, type, hint='Hyrule', locations=None, exits=None): + ret = Region(name, type, hint) if locations is None: locations = [] if exits is None: @@ -584,36 +584,36 @@ location_table = {'Mushroom': (0x180013, False, 'in the woods'), 'Palace of Darkness - Big Chest': (0xEA40, False, 'in Palace of Darkness'), 'Palace of Darkness - Harmless Hellway': (0xEA46, False, 'in Palace of Darkness'), 'Palace of Darkness - Boss': (0x180153, False, 'with Helmasaur King'), - 'Ganons Tower - Bob\'s Torch': (0x180161, False, 'on my torch'), - 'Ganons Tower - Hope Room - Left': (0xEAD9, False, 'in My Tower'), - 'Ganons Tower - Hope Room - Right': (0xEADC, False, 'in My Tower'), - 'Ganons Tower - Tile Room': (0xEAE2, False, 'with my tiles'), - 'Ganons Tower - Compass Room - Top Left': (0xEAE5, False, 'in My Tower'), - 'Ganons Tower - Compass Room - Top Right': (0xEAE8, False, 'in My Tower'), - 'Ganons Tower - Compass Room - Bottom Left': (0xEAEB, False, 'in My Tower'), - 'Ganons Tower - Compass Room - Bottom Right': (0xEAEE, False, 'in My Tower'), - 'Ganons Tower - DMs Room - Top Left': (0xEAB8, False, 'in My Tower'), - 'Ganons Tower - DMs Room - Top Right': (0xEABB, False, 'in My Tower'), - 'Ganons Tower - DMs Room - Bottom Left': (0xEABE, False, 'in My Tower'), - 'Ganons Tower - DMs Room - Bottom Right': (0xEAC1, False, 'in My Tower'), - 'Ganons Tower - Map Chest': (0xEAD3, False, 'in My Tower'), - 'Ganons Tower - Firesnake Room': (0xEAD0, False, 'in My Tower'), - 'Ganons Tower - Randomizer Room - Top Left': (0xEAC4, False, 'in My Tower'), - 'Ganons Tower - Randomizer Room - Top Right': (0xEAC7, False, 'in My Tower'), - 'Ganons Tower - Randomizer Room - Bottom Left': (0xEACA, False, 'in My Tower'), - 'Ganons Tower - Randomizer Room - Bottom Right': (0xEACD, False, 'in My Tower'), - 'Ganons Tower - Bob\'s Chest': (0xEADF, False, 'in My Tower'), - 'Ganons Tower - Big Chest': (0xEAD6, False, 'in my big chest'), - 'Ganons Tower - Big Key Room - Left': (0xEAF4, False, 'beyond my Armos'), - 'Ganons Tower - Big Key Room - Right': (0xEAF7, False, 'beyond my Armos'), - 'Ganons Tower - Big Key Chest': (0xEAF1, False, 'beyond my Armos'), - 'Ganons Tower - Mini Helmasaur Room - Left': (0xEAFD, False, 'atop My Tower'), - 'Ganons Tower - Mini Helmasaur Room - Right': (0xEB00, False, 'atop My Tower'), - 'Ganons Tower - Pre-Moldorm Chest': (0xEB03, False, 'atop My Tower'), - 'Ganons Tower - Validation Chest': (0xEB06, False, 'atop My Tower'), + 'Ganons Tower - Bob\'s Torch': (0x180161, False, 'on Ganon\'s torch'), + 'Ganons Tower - Hope Room - Left': (0xEAD9, False, 'in Ganon\'s Tower'), + 'Ganons Tower - Hope Room - Right': (0xEADC, False, 'in Ganon\'s Tower'), + 'Ganons Tower - Tile Room': (0xEAE2, False, 'with Ganon\'s tiles'), + 'Ganons Tower - Compass Room - Top Left': (0xEAE5, False, 'in Ganon\'s Tower'), + 'Ganons Tower - Compass Room - Top Right': (0xEAE8, False, 'in Ganon\'s Tower'), + 'Ganons Tower - Compass Room - Bottom Left': (0xEAEB, False, 'in Ganon\'s Tower'), + 'Ganons Tower - Compass Room - Bottom Right': (0xEAEE, False, 'in Ganon\'s Tower'), + 'Ganons Tower - DMs Room - Top Left': (0xEAB8, False, 'in Ganon\'s Tower'), + 'Ganons Tower - DMs Room - Top Right': (0xEABB, False, 'in Ganon\'s Tower'), + 'Ganons Tower - DMs Room - Bottom Left': (0xEABE, False, 'in Ganon\'s Tower'), + 'Ganons Tower - DMs Room - Bottom Right': (0xEAC1, False, 'in Ganon\'s Tower'), + 'Ganons Tower - Map Chest': (0xEAD3, False, 'in Ganon\'s Tower'), + 'Ganons Tower - Firesnake Room': (0xEAD0, False, 'in Ganon\'s Tower'), + 'Ganons Tower - Randomizer Room - Top Left': (0xEAC4, False, 'in Ganon\'s Tower'), + 'Ganons Tower - Randomizer Room - Top Right': (0xEAC7, False, 'in Ganon\'s Tower'), + 'Ganons Tower - Randomizer Room - Bottom Left': (0xEACA, False, 'in Ganon\'s Tower'), + 'Ganons Tower - Randomizer Room - Bottom Right': (0xEACD, False, 'in Ganon\'s Tower'), + 'Ganons Tower - Bob\'s Chest': (0xEADF, False, 'in Ganon\'s Tower'), + 'Ganons Tower - Big Chest': (0xEAD6, False, 'in Ganon\'s big chest'), + 'Ganons Tower - Big Key Room - Left': (0xEAF4, False, 'beyond Ganon\'s Armos'), + 'Ganons Tower - Big Key Room - Right': (0xEAF7, False, 'beyond Ganon\'s Armos'), + 'Ganons Tower - Big Key Chest': (0xEAF1, False, 'beyond Ganon\'s Armos'), + 'Ganons Tower - Mini Helmasaur Room - Left': (0xEAFD, False, 'atop Ganon\'s Tower'), + 'Ganons Tower - Mini Helmasaur Room - Right': (0xEB00, False, 'atop Ganon\'s Tower'), + 'Ganons Tower - Pre-Moldorm Chest': (0xEB03, False, 'atop Ganon\'s Tower'), + 'Ganons Tower - Validation Chest': (0xEB06, False, 'atop Ganon\'s Tower'), 'Ganon': (None, False, 'from me'), - 'Agahnim 1': (None, False, 'from my wizardry form'), - 'Agahnim 2': (None, False, 'from my wizardry form'), + 'Agahnim 1': (None, False, 'from Ganon\'s wizardry form'), + 'Agahnim 2': (None, False, 'from Ganon\'s wizardry form'), 'Floodgate': (None, False, None), 'Frog': (None, False, None), 'Missing Smith': (None, False, None), diff --git a/Rom.py b/Rom.py index c06a30bc..97e2acbd 100644 --- a/Rom.py +++ b/Rom.py @@ -9,7 +9,7 @@ import random from BaseClasses import ShopType from Dungeons import dungeon_music_addresses from Text import MultiByteTextMapper, text_addresses, Credits, TextTable -from Text import Uncle_texts, Ganon1_texts, TavernMan_texts, Sahasrahla2_texts, Triforce_texts, Blind_texts, BombShop2_texts +from Text import Uncle_texts, Ganon1_texts, TavernMan_texts, Sahasrahla2_texts, Triforce_texts, Blind_texts, BombShop2_texts, junk_texts from Text import KingsReturn_texts, Sanctuary_texts, Kakariko_texts, Blacksmiths_texts, DeathMountain_texts, LostWoods_texts, WishingWell_texts, DesertPalace_texts, MountainTower_texts, LinksHouse_texts, Lumberjacks_texts, SickKid_texts, FluteBoy_texts, Zora_texts, MagicShop_texts, Sahasrahla_names from Utils import local_path, int16_as_bytes, int32_as_bytes from Items import ItemFactory @@ -1015,8 +1015,90 @@ def write_strings(rom, world): tt = TextTable() tt.removeUnwantedText() + # For hints, first we write hints about entrances, some from the inconvenient list others from all reasonable entrances. + entrances_to_hint = {} + entrances_to_hint.update(InconvenientEntrances) + if world.shuffle_ganon: + entrances_to_hint.update({'Ganons Tower': 'Ganon\'s Tower'}) + hint_locations = HintLocations.copy() + random.shuffle(hint_locations) + all_entrances = world.get_entrances() + random.shuffle(all_entrances) + hint_count = 4 + for entrance in all_entrances: + if entrance.name in entrances_to_hint: + this_hint = entrances_to_hint[entrance.name] + ' leads to ' + entrance.connected_region.hint_text + '.' + tt[hint_locations.pop(0)] = this_hint + entrances_to_hint.pop(entrance.name) + hint_count -= 1 + if hint_count < 1: + break + + entrances_to_hint.update(OtherEntrances) + if world.shuffle in ['insanity', 'madness_legacy', 'insanity_legacy']: + entrances_to_hint.update(InsanityEntrances) + if world.shuffle_ganon: + entrances_to_hint.update({'Pyramid Ledge': 'The pyramid ledge'}) + hint_count = 4 + for entrance in all_entrances: + if entrance.name in entrances_to_hint: + this_hint = entrances_to_hint[entrance.name] + ' leads to ' + entrance.connected_region.hint_text + '.' + tt[hint_locations.pop(0)] = this_hint + entrances_to_hint.pop(entrance.name) + hint_count -= 1 + if hint_count < 1: + break + + # Next we write a few hints for specific inconvenient locations. We don't make many because in entrance this is highly unpredictable. + locations_to_hint = InconvenientLocations.copy() + random.shuffle(locations_to_hint) + hint_count = 2 + del locations_to_hint[hint_count:] + for location in locations_to_hint: + if location == 'Swamp Left': + this_hint = ('The westmost chests in Swamp Palace contain ' + (world.get_location('Swamp Palace - Compass Chest').item.pedestal_credit_text[4:] if world.get_location('Swamp Palace - Compass Chest').item.pedestal_credit_text[0] == 'a' else world.get_location('Swamp Palace - Compass Chest').item.pedestal_credit_text) + + ' and ' + (world.get_location('Swamp Palace - Big Key Chest').item.pedestal_credit_text[4:] if world.get_location('Swamp Palace - Big Key Chest').item.pedestal_credit_text[0] == 'a' else world.get_location('Swamp Palace - Big Key Chest').item.pedestal_credit_text) + '.') + tt[hint_locations.pop(0)] = this_hint + elif location == 'Mire Left': + this_hint = ('The westmost chests in Misery Mire contain ' + (world.get_location('Misery Mire - Compass Chest').item.pedestal_credit_text[4:] if world.get_location('Misery Mire - Compass Chest').item.pedestal_credit_text[0] == 'a' else world.get_location('Misery Mire - Compass Chest').item.pedestal_credit_text) + + ' and ' + (world.get_location('Misery Mire - Big Key Chest').item.pedestal_credit_text[4:] if world.get_location('Misery Mire - Big Key Chest').item.pedestal_credit_text[0] == 'a' else world.get_location('Misery Mire - Big Key Chest').item.pedestal_credit_text) + '.') + tt[hint_locations.pop(0)] = this_hint + elif location == 'Tower of Hera - Big Key Chest': + this_hint = 'Waiting in the Tower of Hera basement leads to ' + (world.get_location(location).item.pedestal_credit_text[4:] if world.get_location(location).item.pedestal_credit_text[0] == 'a' else world.get_location(location).item.pedestal_credit_text) + '.' + tt[hint_locations.pop(0)] = this_hint + else: + this_hint = location + ' leads to ' + (world.get_location(location).item.pedestal_credit_text[4:] if world.get_location(location).item.pedestal_credit_text[0] == 'a' else world.get_location(location).item.pedestal_credit_text) + '.' + tt[hint_locations.pop(0)] = this_hint + + # Lastly we write hints to show where certain interesting items are. It is done the way it is to re-use the silver code and also to give one hint per each type of item regardless of how many exist. This supports many settings well. + items_to_hint = RelevantItems.copy() + if world.keysanity: + items_to_hint.extend(KeysanityItems) + random.shuffle(items_to_hint) + hint_count = 5 + while(hint_count > 0): + this_item = items_to_hint.pop(0) + this_location = world.find_items(this_item) + random.shuffle(this_location) + if this_location: + if 'Key' in this_item: + this_hint = this_location[0].item.pedestal_hint_text + ' can be found ' + this_location[0].hint_text + '.' + else: + this_hint = (this_location[0].item.pedestal_credit_text[4:] if this_location[0].item.pedestal_credit_text[0] == 'a' else this_location[0].item.pedestal_credit_text) + ' can be found ' + this_location[0].hint_text + '.' + tt[hint_locations.pop(0)] = this_hint + hint_count -= 1 + else: + continue + + # All remaining hint slots are filled with junk hints. It is done this way to ensure the same junk hint isn't selected twice. + junk_hints = junk_texts.copy() + random.shuffle(junk_hints) + for location in hint_locations: + tt[location] = junk_hints.pop(0) + + # We still need the older hints of course. Those are done here. silverarrows = world.find_items('Silver Arrows') - silverarrow_hint = (' %s?' % silverarrows[0].hint_text) if silverarrows else '?\nI think not!' + silverarrow_hint = (' %s?' % silverarrows[0].hint_text.replace('Ganon\'s', 'my')) if silverarrows else '?\nI think not!' tt['ganon_phase_3'] = 'Did you find the silver arrows%s' % silverarrow_hint crystal5 = world.find_items('Crystal 5')[0] @@ -1092,3 +1174,242 @@ def write_strings(rom, world): (pointers, data) = credits.get_bytes() rom.write_bytes(0x181500, data) rom.write_bytes(0x76CC0, [byte for p in pointers for byte in [p & 0xFF, p >> 8 & 0xFF]]) + +InconvenientEntrances = {'Turtle Rock': 'Turtle Rock Main', + 'Misery Mire': 'Misery Mire', + 'Ice Palace': 'Ice Palace', + 'Skull Woods Final Section': 'Skull Woods Final', + 'Death Mountain Return Cave (West)': 'The upper DM entrance', + 'Mimic Cave': 'Mimic Ledge', + 'Dark World Hammer Peg Cave': 'The rows of pegs', + 'Pyramid Fairy': 'The crack on the pyramid' + } + +OtherEntrances = {'Eastern Palace': 'Eastern Palace', + 'Elder House (East)': 'Elder House', + 'Elder House (West)': 'Elder House', + 'Two Brothers House (East)': 'Eastern Quarreling Brothers\' house', + 'Old Man Cave (West)': 'The lower DM entrance', + 'Hyrule Castle Entrance (South)': 'The ground level castle door', + 'Thieves Town': 'Thieves\' Town', + 'Bumper Cave (Bottom)': 'The lower Bumper Cave', + 'Swamp Palace': 'Swamp Palace', + 'Skull Woods Final Section': 'The back of Skull Woods', + 'Dark Death Mountain Ledge (West)': 'The East dark DM connector ledge', + 'Dark Death Mountain Ledge (East)': 'The East dark DM connector ledge', + 'Superbunny Cave (Top)': 'The summit of dark DM cave', + 'Superbunny Cave (Bottom)': 'The base of east dark DM', + 'Hookshot Cave': 'The rock on dark DM', + 'Desert Palace Entrance (South)': 'The book sealed passage', + 'Tower of Hera': 'The Tower of Hera', + 'Two Brothers House (West)': 'The door near the race game', + 'Old Man Cave (East)': 'A cave on west DM', + 'Old Man House (Bottom)': 'A cave on west DM', + 'Old Man House (Top)': 'A cave on west DM', + 'Death Mountain Return Cave (East)': 'A cave on west DM', + 'Spectacle Rock Cave Peak': 'A cave on west DM', + 'Spectacle Rock Cave': 'A cave on west DM', + 'Spectacle Rock Cave (Bottom)': 'A cave on west DM', + 'Paradox Cave (Bottom)': 'A cave on east DM', + 'Paradox Cave (Middle)': 'A cave on east DM', + 'Paradox Cave (Top)': 'The east DM summit cave', + 'Fairy Ascension Cave (Bottom)': 'The east DM cave behind rocks', + 'Fairy Ascension Cave (Top)': 'The central east DM ledge', + 'Spiral Cave': 'The western east DM ledge', + 'Spiral Cave (Bottom)': 'A cave on east DM', + 'Palace of Darkness': 'Palace of Darkness', + 'Hyrule Castle Entrance (West)': 'An upper castle door', + 'Hyrule Castle Entrance (East)': 'An upper castle door', + 'Agahnims Tower': 'The sealed castle door', + 'Desert Palace Entrance (West)': 'The westmost building in the desert', + 'Desert Palace Entrance (North)': 'The northmost cave in the desert', + 'Blinds Hideout': 'Blind\'s old house', + 'Lake Hylia Fairy': 'A cave NE of Lake Hylia', + 'Light Hype Fairy': 'The cave south of your house', + 'Desert Fairy': 'The cave near the desert', + 'Chicken House': 'The chicken lady\'s house', + 'Aginahs Cave': 'The desert cave', + 'Sahasrahlas Hut': 'The building near armos', + 'Cave Shop (Lake Hylia)': 'The cave NW Lake Hylia', + 'Blacksmiths Hut': 'The old smithery', + 'Sick Kids House': 'The central house in Kakariko', + 'Lost Woods Gamble': 'A tree trunk door', + 'Fortune Teller (Light)': 'A building NE of Kakariko', + 'Snitch Lady (East)': 'A house guarded by a snitch', + 'Snitch Lady (West)': 'A house guarded by a snitch', + 'Bush Covered House': 'A house with an uncut lawn', + 'Tavern (Front)': 'A building with a backdoor', + 'Light World Bomb Hut': 'A Kakariko building with no door', + 'Kakariko Shop': 'The old Kakariko shop', + 'Mini Moldorm Cave': 'The cave south of Lake Hylia', + 'Long Fairy Cave': 'The eastmost portal cave', + 'Good Bee Cave': 'The open cave SE Lake Hylia', + '20 Rupee Cave': 'The rock SE Lake Hylia', + '50 Rupee Cave': 'The rock near the desert', + 'Ice Rod Cave': 'The sealed cave SE Lake Hylia', + 'Library': 'The old library', + 'Potion Shop': 'The witch\'s building', + 'Dam': 'The old dam', + 'Lumberjack House': 'The lumberjack house', + 'Lake Hylia Fortune Teller': 'The building NW Lake Hylia', + 'Kakariko Gamble Game': 'The old Kakariko gambling den', + 'Waterfall of Wishing': 'Going behind the waterfall', + 'Capacity Upgrade': 'The cave on the island', + 'Bonk Rock Cave': 'The rock pile near Sanctuary', + 'Graveyard Cave': 'The graveyard ledge', + 'Checkerboard Cave': 'The NE desert ledge', + 'Cave 45': 'The ledge south of haunted grove', + 'Kings Grave': 'The northeastmost grave', + 'Bonk Fairy (Light)': 'The rock pile near your home', + 'Hookshot Fairy': 'A cave on east DM', + 'Bonk Fairy (Dark)': 'The rock pile near the old bomb shop', + 'Dark Sanctuary Hint': 'The dark sanctuary cave', + 'Dark Lake Hylia Fairy': 'The cave NE dark Lake Hylia', + 'C-Shaped House': 'The NE house in Village of Outcasts', + 'Big Bomb Shop': 'The old bomb shop', + 'Dark Death Mountain Fairy': 'The SW cave on dark DM', + 'Dark Lake Hylia Shop': 'The building NW dark Lake Hylia', + 'Dark World Shop': 'The hammer sealed building', + 'Red Shield Shop': 'The fenced in building', + 'Mire Shed': 'The western hut in the mire', + 'East Dark World Hint': 'The dark cave near the eastmost portal', + 'Dark Desert Hint': 'The cave east of the mire', + 'Spike Cave': 'The ledge cave on west dark DM', + 'Palace of Darkness Hint': 'The building south of Kiki', + 'Dark Lake Hylia Ledge Spike Cave': 'The rock SE dark Lake Hylia', + 'Cave Shop (Dark Death Mountain)': 'The base of east dark DM', + 'Dark World Potion Shop': 'The building near the catfish', + 'Archery Game': 'The old archery game', + 'Dark World Lumberjack Shop': 'The northmost Dark World building', + 'Hype Cave': 'The cave south of the old bomb shop', + 'Brewery': 'The Village of Outcasts building with no door', + 'Dark Lake Hylia Ledge Hint': 'The open cave SE dark Lake Hylia', + 'Chest Game': 'The westmost building in the Village of Outcasts', + 'Dark Desert Fairy': 'The eastern hut in the mire', + 'Dark Lake Hylia Ledge Fairy': 'The sealed cave SE dark Lake Hylia', + 'Fortune Teller (Dark)': 'The building NE the Village of Outcasts' + } + +InsanityEntrances = {'Sanctuary': 'Sanctuary', + 'Lumberjack Tree Cave': 'The cave Behind Lumberjacks', + 'Lost Woods Hideout Stump': 'The stump in Lost Woods', + 'North Fairy Cave': 'The cave East of Graveyard', + 'Bat Cave Cave': 'The cave in eastern Kakariko', + 'Kakariko Well Cave': 'The cave in northern Kakariko', + 'Hyrule Castle Secret Entrance Stairs': 'The tunnel near the castle', + 'Skull Woods First Section Door': 'The southeastmost skull', + 'Skull Woods Second Section Door (East)': 'The central open skull', + 'Skull Woods Second Section Door (West)': 'The westmost open skull', + 'Desert Palace Entrance (East)': 'The eastern building in the desert', + 'Turtle Rock Isolated Ledge Entrance': 'The isolated ledge on east dark DM', + 'Bumper Cave (Top)': 'The upper Bumper Cave', + 'Hookshot Cave Back Entrance': 'The stairs on the floating island' + } + +HintLocations = ['telepathic_tile_eastern_palace', + 'telepathic_tile_tower_of_hera_floor_4', + 'telepathic_tile_spectacle_rock', + 'telepathic_tile_swamp_entrance', + 'telepathic_tile_thieves_town_upstairs', + 'telepathic_tile_misery_mire', + 'telepathic_tile_palace_of_darkness', + 'telepathic_tile_desert_bonk_torch_room', + 'telepathic_tile_castle_tower', + 'telepathic_tile_ice_large_room', + 'telepathic_tile_turtle_rock', + 'telepathic_tile_ice_entrace', + 'telepathic_tile_ice_stalfos_knights_room', + 'telepathic_tile_tower_of_hera_entrance', + 'telepathic_tile_south_east_darkworld_cave', + 'dark_palace_tree_dude', + 'dark_sanctuary_hint_0', + 'dark_sanctuary_hint_1', + 'dark_sanctuary_yes', + 'dark_sanctuary_hint_2'] + +InconvenientLocations = ['Spike Cave', + 'Sahasrahla', + 'Purple Chest', + 'Swamp Left', + 'Mire Left', + 'Tower of Hera - Big Key Chest', + 'Magic Bat'] +RelevantItems = ['Bow', + 'Book of Mudora', + 'Hammer', + 'Hookshot', + 'Magic Mirror', + 'Ocarina', + 'Pegasus Boots', + 'Power Glove', + 'Cape', + 'Mushroom', + 'Shovel', + 'Lamp', + 'Magic Powder', + 'Moon Pearl', + 'Cane of Somaria', + 'Fire Rod', + 'Flippers', + 'Ice Rod', + 'Titans Mitts', + 'Ether', + 'Bombos', + 'Quake', + 'Bottle', + 'Bottle (Red Potion)', + 'Bottle (Green Potion)', + 'Bottle (Blue Potion)', + 'Bottle (Fairy)', + 'Bottle (Bee)', + 'Bottle (Good Bee)', + 'Master Sword', + 'Tempered Sword', + 'Fighter Sword', + 'Golden Sword', + 'Progressive Sword', + 'Progressive Glove', + 'Master Sword', + 'Power Star', + 'Triforce Piece', + 'Single Arrow', + 'Blue Mail', + 'Red Mail', + 'Progressive Armor', + 'Blue Boomerang', + 'Red Boomerang', + 'Blue Shield', + 'Red Shield', + 'Mirror Shield', + 'Progressive Shield', + 'Bug Catching Net', + 'Cane of Byrna', + 'Magic Upgrade (1/2)', + 'Magic Upgrade (1/4)' + ] + +KeysanityItems = ['Small Key (Eastern Palace)', + 'Big Key (Eastern Palace)', + 'Small Key (Escape)', + 'Small Key (Desert Palace)', + 'Big Key (Desert Palace)', + 'Small Key (Tower of Hera)', + 'Big Key (Tower of Hera)', + 'Small Key (Agahnims Tower)', + 'Small Key (Palace of Darkness)', + 'Big Key (Palace of Darkness)', + 'Small Key (Thieves Town)', + 'Big Key (Thieves Town)', + 'Small Key (Swamp Palace)', + 'Big Key (Swamp Palace)', + 'Small Key (Skull Woods)', + 'Big Key (Skull Woods)', + 'Small Key (Ice Palace)', + 'Big Key (Ice Palace)', + 'Small Key (Misery Mire)', + 'Big Key (Misery Mire)', + 'Small Key (Turtle Rock)', + 'Big Key (Turtle Rock)', + 'Small Key (Ganons Tower)', + 'Big Key (Ganons Tower)' + ] diff --git a/Text.py b/Text.py index d06a5237..eaf00b91 100644 --- a/Text.py +++ b/Text.py @@ -224,6 +224,60 @@ TavernMan_texts = [ "Hardhat Beetle\nwon't\nLet It Be?\nTell it to Get\nBack or give\nit a Ticket to\nRide down\na hole!", ] +junk_texts = [ + "What do you\ncall a blind\ndinosaur?\na doyouthink-\nhesaurus.", + "A blind man\nwalks into\na bar.\nAnd a table.\nAnd a chair.", + "What do ducks\nlike to eat?\n\nQuackers!", + "How do you\nset up a party\nin space?\n\nYou planet!", + "I'm glad I\nknow sign\nlanguage.\nIt's pretty\nhandy.", + "What did Zelda\nsay to Link at\na secure door?\n\nTRIFORCE!", + "I am on a\nseafood diet.\n\nEvery time\nI see food,\nI eat it.", + "I've decided\nto sell my\nvacuum.\nIt was just\ngathering\ndust.", + "What's the best\ntime to go to\nthe dentist?\n\nTooth-hurtie!", + "Why can't a\nbike stand on\nits own?\n\nIt's two-tired!", + "If you haven't\nfound Quake\nyet…\nit's not your\nfault.", + "Why is Peter\nPan always\nflying?\nBecause he\nNeverlands!", + "I once told a\njoke to Armos.\n\nBut he\nremained\nstone-faced!", + "Lanmola was\nlate to our\ndinner party.\nHe just came\nfor the desert", + "Moldorm is\nsuch a\nprankster.\nAnd I fall for\nit every time!", + "Helmasaur is\nthrowing a\nparty.\nI hope it's\na masquerade!", + "I'd like to\nknow Arrghus\nbetter.\nBut he won't\ncome out of\nhis shell!", + "Mothula didn't\nhave much fun\nat the party.\nHe's immune to\nspiked punch!", + "Don't set me\nup with that\nchick from\nSteve's Town.\n\n\nI'm not\ninterested in\na Blind date!", + "Kholdstare is\nafraid to go\nto the circus.\nHungry kids\nthought he was\ncotton candy!", + "I asked who\nVitreous' best\nfriends are.\nHe said,\n'Me, Myself,\nand Eye!'", + "Trinexx can be\na hothead or\nhe can be an\nice guy. In\nthe end, he's\na solid\nindividual!", + "Bari thought I\nhad moved out\nof town.\nHe was shocked\nto see me!", + "I can only get\nWeetabix\naround here.\nI have to go\nto Steve's\nTown for Count\nChocula!", + "Don't argue\nwith a frozen\nDeadrock.\nHe'll never\nchange his\nposition!", + "I offered a\ndrink to a\nself-loathing\nGhini.\nHe said he\ndidn't like\nspirits!", + "I was supposed\nto meet Gibdo\nfor lunch.\nBut he got\nwrapped up in\nsomething!", + "Goriya sure\nhas changed\nin this game.\nI hope he\ncomes back\naround!", + "Hinox actually\nwants to be a\nlawyer.\nToo bad he\nbombed the\nBar exam!", + "I'm surprised\nMoblin's tusks\nare so gross.\nHe always has\nhis Trident\nwith him!", + "Don't tell\nStalfos I'm\nhere.\nHe has a bone\nto pick with\nme!", + "I got\nWallmaster to\nhelp me move\nfurniture.\nHe was really\nhandy!", + "Wizzrobe was\njust here.\nHe always\nvanishes right\nbefore we get\nthe check!", + "I shouldn't\nhave picked up\nZora's tab.\nThat guy\ndrinks like\na fish!", + "I was sharing\na drink with\nPoe.\nFor no reason,\nhe left in a\nheartbeat!", + "Don't trust\nhorsemen on\nDeath Mountain.\nThey're Lynel\nthe time!", + "Today's\nspecial is\nbattered bat.\nGot slapped\nfor offering a\nlady a Keese!", + "Don't walk\nunder\npropellered\npineapples.\nYou may end up\nwearing\na pee hat!", + "My girlfriend\nburrowed under\nthe sand.\nSo I decided\nto Leever!", + "Geldman wants\nto be a\nBroadway star.\nHe's always\npracticing\nJazz Hands!", + "Octoballoon\nmust be mad\nat me.\nHe blows up\nat the sight\nof me!", + "Toppo is a\ntotal pothead.\n\nHe hates it\nwhen you take\naway his grass", + "I lost my\nshield by\nthat house.\nWhy did they\nput up a\nPikit fence?!", + "Know that fox\nin Steve's\nTown?\nHe'll Pikku\npockets if you\naren't careful", + "Dash through\nDark World\nbushes.\nYou'll see\nGanon is tryin\nto Stal you!", + "Eyegore!\n\nYou gore!\nWe all gore\nthose jerks\nwith arrows!", + "I like my\nwhiskey neat.\n\nSome prefer it\nOctoroks!", + "I consoled\nFreezor over a\ncup of coffee.\nHis problems\njust seemed to\nmelt away!", + "Magic droplets\nof water don't\nshut up.\nThey just\nKyameron!", + "I bought hot\nwings for\nSluggula.\nThey gave him\nexplosive\ndiarrhea!", + "Hardhat Beetle\nwon't\nLet It Be?\nTell it to Get\nBack or give\nit a Ticket to\nRide down\na hole!", +] + KingsReturn_texts = [ 'Who is this even', 'The Harem'