Additional v30 updates
This commit is contained in:
		
							parent
							
								
									d68a0865c8
								
							
						
					
					
						commit
						54926a17f4
					
				| 
						 | 
				
			
			@ -24,7 +24,7 @@ def main():
 | 
			
		|||
                             ''')
 | 
			
		||||
    parser.add_argument('--quickswap', help='Enable quick item swapping with L and R.', action='store_true')
 | 
			
		||||
    parser.add_argument('--disablemusic', help='Disables game music.', action='store_true')
 | 
			
		||||
    parser.add_argument('--heartbeep', default='normal', const='normal', nargs='?', choices=['normal', 'half', 'quarter', 'off'],
 | 
			
		||||
    parser.add_argument('--heartbeep', default='normal', const='normal', nargs='?', choices=['double', 'normal', 'half', 'quarter', 'off'],
 | 
			
		||||
                        help='''\
 | 
			
		||||
                             Select the rate at which the heart beep sound is played at
 | 
			
		||||
                             low health. (default: %(default)s)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -150,7 +150,7 @@ dungeon_music_addresses = {'Eastern Palace - Prize': [0x1559A],
 | 
			
		|||
                           'Tower of Hera - Prize': [0x155C5, 0x1107A, 0x10B8C],
 | 
			
		||||
                           'Palace of Darkness - Prize': [0x155B8],
 | 
			
		||||
                           'Swamp Palace - Prize': [0x155B7],
 | 
			
		||||
                           'Thieves Town - Prize': [0x155C6],
 | 
			
		||||
                           'Thieves\' Town - Prize': [0x155C6],
 | 
			
		||||
                           'Skull Woods - Prize': [0x155BA, 0x155BB, 0x155BC, 0x155BD, 0x15608, 0x15609, 0x1560A, 0x1560B],
 | 
			
		||||
                           'Ice Palace - Prize': [0x155BF],
 | 
			
		||||
                           'Misery Mire - Prize': [0x155B9],
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -188,7 +188,7 @@ def start():
 | 
			
		|||
                             If set, the Pyramid Hole and Ganon's Tower are not
 | 
			
		||||
                             included entrance shuffle pool.
 | 
			
		||||
                             ''', action='store_false', dest='shuffleganon')
 | 
			
		||||
    parser.add_argument('--heartbeep', default='normal', const='normal', nargs='?', choices=['normal', 'half', 'quarter', 'off'],
 | 
			
		||||
    parser.add_argument('--heartbeep', default='normal', const='normal', nargs='?', choices=['double', 'normal', 'half', 'quarter', 'off'],
 | 
			
		||||
                        help='''\
 | 
			
		||||
                             Select the rate at which the heart beep sound is played at
 | 
			
		||||
                             low health. (default: %(default)s)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										4
									
								
								Gui.py
								
								
								
								
							
							
						
						
									
										4
									
								
								Gui.py
								
								
								
								
							| 
						 | 
				
			
			@ -205,7 +205,7 @@ def guiMain(args=None):
 | 
			
		|||
    heartbeepFrame = Frame(drowDownFrame)
 | 
			
		||||
    heartbeepVar = StringVar()
 | 
			
		||||
    heartbeepVar.set('normal')
 | 
			
		||||
    heartbeepOptionMenu = OptionMenu(heartbeepFrame, heartbeepVar, 'normal', 'half', 'quarter', 'off')
 | 
			
		||||
    heartbeepOptionMenu = OptionMenu(heartbeepFrame, heartbeepVar, 'double', 'normal', 'half', 'quarter', 'off')
 | 
			
		||||
    heartbeepOptionMenu.pack(side=RIGHT)
 | 
			
		||||
    heartbeepLabel = Label(heartbeepFrame, text='Heartbeep sound rate')
 | 
			
		||||
    heartbeepLabel.pack(side=LEFT)
 | 
			
		||||
| 
						 | 
				
			
			@ -361,7 +361,7 @@ def guiMain(args=None):
 | 
			
		|||
 | 
			
		||||
    drowDownFrame2 = Frame(topFrame2)
 | 
			
		||||
    heartbeepFrame2 = Frame(drowDownFrame2)
 | 
			
		||||
    heartbeepOptionMenu2 = OptionMenu(heartbeepFrame2, heartbeepVar, 'normal', 'half', 'quarter', 'off')
 | 
			
		||||
    heartbeepOptionMenu2 = OptionMenu(heartbeepFrame2, heartbeepVar, 'double', 'normal', 'half', 'quarter', 'off')
 | 
			
		||||
    heartbeepOptionMenu2.pack(side=RIGHT)
 | 
			
		||||
    heartbeepLabel2 = Label(heartbeepFrame2, text='Heartbeep sound rate')
 | 
			
		||||
    heartbeepLabel2.pack(side=LEFT)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -348,7 +348,7 @@ def create_dynamic_shop_locations(world):
 | 
			
		|||
def fill_prizes(world, attempts=15):
 | 
			
		||||
    crystals = ItemFactory(['Red Pendant', 'Blue Pendant', 'Green Pendant', 'Crystal 1', 'Crystal 2', 'Crystal 3', 'Crystal 4', 'Crystal 7', 'Crystal 5', 'Crystal 6'])
 | 
			
		||||
    crystal_locations = [world.get_location('Turtle Rock - Prize'), world.get_location('Eastern Palace - Prize'), world.get_location('Desert Palace - Prize'), world.get_location('Tower of Hera - Prize'), world.get_location('Palace of Darkness - Prize'),
 | 
			
		||||
                         world.get_location('Thieves Town - Prize'), world.get_location('Skull Woods - Prize'), world.get_location('Swamp Palace - Prize'), world.get_location('Ice Palace - Prize'),
 | 
			
		||||
                         world.get_location('Thieves\' Town - Prize'), world.get_location('Skull Woods - Prize'), world.get_location('Swamp Palace - Prize'), world.get_location('Ice Palace - Prize'),
 | 
			
		||||
                         world.get_location('Misery Mire - Prize')]
 | 
			
		||||
    placed_prizes = [loc.item.name for loc in crystal_locations if loc.item is not None]
 | 
			
		||||
    unplaced_prizes = [crystal for crystal in crystals if crystal.name not in placed_prizes]
 | 
			
		||||
| 
						 | 
				
			
			@ -376,6 +376,9 @@ def set_up_shops(world):
 | 
			
		|||
    # Changes to basic Shops
 | 
			
		||||
    # TODO: move hard+ mode changes for sheilds here, utilizing the new shops
 | 
			
		||||
 | 
			
		||||
    for shop in world.shops:
 | 
			
		||||
        shop.active = True
 | 
			
		||||
 | 
			
		||||
    if world.retro:
 | 
			
		||||
        rss = world.get_region('Red Shield Shop').shop
 | 
			
		||||
        rss.active = True
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -71,14 +71,14 @@ Desert Palace - Torch: Small Key (Desert Palace)
 | 
			
		|||
Desert Palace - Map Chest: Nothing
 | 
			
		||||
Desert Palace - Compass Chest: Nothing
 | 
			
		||||
Desert Palace - Big Key Chest: Big Key (Desert Palace)
 | 
			
		||||
Desert Palace - Lanmolas: Nothing
 | 
			
		||||
Desert Palace - Boss: Nothing
 | 
			
		||||
Desert Palace - Prize: Blue Pendant
 | 
			
		||||
Eastern Palace - Compass Chest: Nothing
 | 
			
		||||
Eastern Palace - Big Chest: Bow
 | 
			
		||||
Eastern Palace - Cannonball Chest: Nothing
 | 
			
		||||
Eastern Palace - Big Key Chest: Big Key (Eastern Palace)
 | 
			
		||||
Eastern Palace - Map Chest: Nothing
 | 
			
		||||
Eastern Palace - Armos Knights: Nothing
 | 
			
		||||
Eastern Palace - Boss: Nothing
 | 
			
		||||
Eastern Palace - Prize: Green Pendant
 | 
			
		||||
Master Sword Pedestal: Master Sword
 | 
			
		||||
Hyrule Castle - Boomerang Chest: Nothing
 | 
			
		||||
| 
						 | 
				
			
			@ -108,7 +108,7 @@ Tower of Hera - Map Chest: Nothing
 | 
			
		|||
Tower of Hera - Big Key Chest: Big Key (Tower of Hera)
 | 
			
		||||
Tower of Hera - Compass Chest: Nothing
 | 
			
		||||
Tower of Hera - Big Chest: Moon Pearl
 | 
			
		||||
Tower of Hera - Moldorm: Nothing
 | 
			
		||||
Tower of Hera - Boss: Nothing
 | 
			
		||||
Tower of Hera - Prize: Red Pendant
 | 
			
		||||
Pyramid: Nothing
 | 
			
		||||
Catfish: Quake
 | 
			
		||||
| 
						 | 
				
			
			@ -147,7 +147,7 @@ Swamp Palace - West Chest: Nothing
 | 
			
		|||
Swamp Palace - Flooded Room - Left: Nothing
 | 
			
		||||
Swamp Palace - Flooded Room - Right: Nothing
 | 
			
		||||
Swamp Palace - Waterfall Room: Nothing
 | 
			
		||||
Swamp Palace - Arrghus: Nothing
 | 
			
		||||
Swamp Palace - Boss: Nothing
 | 
			
		||||
Swamp Palace - Prize: Crystal 2
 | 
			
		||||
Thieves' Town - Big Key Chest: Big Key (Thieves Town)
 | 
			
		||||
Thieves' Town - Map Chest: Nothing
 | 
			
		||||
| 
						 | 
				
			
			@ -156,8 +156,8 @@ Thieves' Town - Ambush Chest: Nothing
 | 
			
		|||
Thieves' Town - Attic: Nothing
 | 
			
		||||
Thieves' Town - Big Chest: Titans Mitts
 | 
			
		||||
Thieves' Town - Blind's Cell: Small Key (Thieves Town)
 | 
			
		||||
Thieves Town - Blind: Nothing
 | 
			
		||||
Thieves Town - Prize: Crystal 4
 | 
			
		||||
Thieves' Town - Boss: Nothing
 | 
			
		||||
Thieves' Town - Prize: Crystal 4
 | 
			
		||||
Skull Woods - Compass Chest: Nothing
 | 
			
		||||
Skull Woods - Map Chest: Nothing
 | 
			
		||||
Skull Woods - Big Chest: Fire Rod
 | 
			
		||||
| 
						 | 
				
			
			@ -165,7 +165,7 @@ Skull Woods - Pot Prison: Small Key (Skull Woods)
 | 
			
		|||
Skull Woods - Pinball Room: Small Key (Skull Woods)
 | 
			
		||||
Skull Woods - Big Key Chest: Big Key (Skull Woods)
 | 
			
		||||
Skull Woods - Bridge Room: Small Key (Skull Woods)
 | 
			
		||||
Skull Woods - Mothula: Nothing
 | 
			
		||||
Skull Woods - Boss: Nothing
 | 
			
		||||
Skull Woods - Prize: Crystal 3
 | 
			
		||||
Ice Palace - Compass Chest: Nothing
 | 
			
		||||
Ice Palace - Freezor Chest: Nothing
 | 
			
		||||
| 
						 | 
				
			
			@ -174,7 +174,7 @@ Ice Palace - Iced T Room: Small Key (Ice Palace)
 | 
			
		|||
Ice Palace - Spike Room: Small Key (Ice Palace)
 | 
			
		||||
Ice Palace - Big Key Chest: Big Key (Ice Palace)
 | 
			
		||||
Ice Palace - Map Chest: Nothing
 | 
			
		||||
Ice Palace - Kholdstare: Nothing
 | 
			
		||||
Ice Palace - Boss: Nothing
 | 
			
		||||
Ice Palace - Prize: Crystal 5
 | 
			
		||||
Misery Mire - Big Chest: Cane of Somaria
 | 
			
		||||
Misery Mire - Map Chest: Nothing
 | 
			
		||||
| 
						 | 
				
			
			@ -183,7 +183,7 @@ Misery Mire - Bridge Chest: Small Key (Misery Mire)
 | 
			
		|||
Misery Mire - Spike Chest: Small Key (Misery Mire)
 | 
			
		||||
Misery Mire - Compass Chest: Nothing
 | 
			
		||||
Misery Mire - Big Key Chest: Big Key (Misery Mire)
 | 
			
		||||
Misery Mire - Vitreous: Nothing
 | 
			
		||||
Misery Mire - Boss: Nothing
 | 
			
		||||
Misery Mire - Prize: Crystal 6
 | 
			
		||||
Turtle Rock - Compass Chest: Nothing
 | 
			
		||||
Turtle Rock - Roller Room - Left: Nothing
 | 
			
		||||
| 
						 | 
				
			
			@ -196,7 +196,7 @@ Turtle Rock - Eye Bridge - Bottom Left: Small Key (Turtle Rock)
 | 
			
		|||
Turtle Rock - Eye Bridge - Bottom Right: Nothing
 | 
			
		||||
Turtle Rock - Eye Bridge - Top Left: Nothing
 | 
			
		||||
Turtle Rock - Eye Bridge - Top Right: Nothing
 | 
			
		||||
Turtle Rock - Trinexx: Nothing
 | 
			
		||||
Turtle Rock - Boss: Nothing
 | 
			
		||||
Turtle Rock - Prize: Crystal 7
 | 
			
		||||
Palace of Darkness - Shooter Room: Small Key (Palace of Darkness)
 | 
			
		||||
Palace of Darkness - The Arena - Bridge: Small Key (Palace of Darkness)
 | 
			
		||||
| 
						 | 
				
			
			@ -212,7 +212,7 @@ Palace of Darkness - Dark Maze - Top: Nothing
 | 
			
		|||
Palace of Darkness - Dark Maze - Bottom: Nothing
 | 
			
		||||
Palace of Darkness - Big Chest: Hammer
 | 
			
		||||
Palace of Darkness - Harmless Hellway: Nothing
 | 
			
		||||
Palace of Darkness - Helmasaur: Nothing
 | 
			
		||||
Palace of Darkness - Boss: Nothing
 | 
			
		||||
Palace of Darkness - Prize: Crystal 1
 | 
			
		||||
Ganons Tower - Bob's Torch: Small Key (Ganons Tower)
 | 
			
		||||
Ganons Tower - Hope Room - Left: Nothing
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										44
									
								
								Regions.py
								
								
								
								
							
							
						
						
									
										44
									
								
								Regions.py
								
								
								
								
							| 
						 | 
				
			
			@ -98,9 +98,9 @@ def create_regions(world):
 | 
			
		|||
                              ['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 - Lanmolas', 'Desert Palace - Prize'], ['Desert Palace Exit (North)']),
 | 
			
		||||
        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',
 | 
			
		||||
                                                 'Eastern Palace - Big Key Chest', 'Eastern Palace - Map Chest', 'Eastern Palace - Armos Knights', 'Eastern Palace - Prize'], ['Eastern Palace Exit']),
 | 
			
		||||
                                                 '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_lw_region('Hyrule Castle Courtyard', None, ['Hyrule Castle Secret Entrance Stairs', 'Hyrule Castle Entrance (South)']),
 | 
			
		||||
| 
						 | 
				
			
			@ -147,7 +147,7 @@ def create_regions(world):
 | 
			
		|||
        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 - Moldorm', 'Tower of Hera - Prize']),
 | 
			
		||||
        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_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']),
 | 
			
		||||
| 
						 | 
				
			
			@ -214,7 +214,7 @@ def create_regions(world):
 | 
			
		|||
        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 - Arrghus', 'Swamp Palace - Prize']),
 | 
			
		||||
                                                       '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',
 | 
			
		||||
| 
						 | 
				
			
			@ -222,7 +222,7 @@ def create_regions(world):
 | 
			
		|||
        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 - Blind', 'Thieves Town - Prize']),
 | 
			
		||||
        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']),
 | 
			
		||||
| 
						 | 
				
			
			@ -230,19 +230,19 @@ def create_regions(world):
 | 
			
		|||
        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 - Mothula', 'Skull Woods - Prize']),
 | 
			
		||||
        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 - Kholdstare', 'Ice Palace - Prize']),
 | 
			
		||||
        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 - Vitreous', 'Misery Mire - Prize']),
 | 
			
		||||
        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']),
 | 
			
		||||
| 
						 | 
				
			
			@ -254,7 +254,7 @@ def create_regions(world):
 | 
			
		|||
        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'],
 | 
			
		||||
                              ['Turtle Rock Dark Room (South)', 'Turtle Rock (Trinexx)', 'Turtle Rock Isolated Ledge Exit']),
 | 
			
		||||
        create_dungeon_region('Turtle Rock (Trinexx)', ['Turtle Rock - Trinexx', 'Turtle Rock - Prize']),
 | 
			
		||||
        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'],
 | 
			
		||||
                              ['Palace of Darkness Big Key Chest Staircase', 'Palace of Darkness (North)', 'Palace of Darkness Big Key Door']),
 | 
			
		||||
| 
						 | 
				
			
			@ -264,7 +264,7 @@ def create_regions(world):
 | 
			
		|||
                              ['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 - Helmasaur', 'Palace of Darkness - Prize']),
 | 
			
		||||
        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'],
 | 
			
		||||
                              ['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']),
 | 
			
		||||
| 
						 | 
				
			
			@ -301,6 +301,8 @@ def create_regions(world):
 | 
			
		|||
 | 
			
		||||
    region = world.get_region('Capacity Upgrade')
 | 
			
		||||
    shop = Shop(region, 0x0115, ShopType.UpgradeShop, 0x04, True)
 | 
			
		||||
    region.shop = shop
 | 
			
		||||
    world.shops.append(shop)
 | 
			
		||||
    shop.add_inventory(0, 'Bomb Upgrade (+5)', 100, 7)
 | 
			
		||||
    shop.add_inventory(1, 'Arrow Upgrade (+5)', 100, 7)
 | 
			
		||||
    world.intialize_regions()
 | 
			
		||||
| 
						 | 
				
			
			@ -450,13 +452,13 @@ location_table = {'Mushroom': (0x180013, False, 'in the woods'),
 | 
			
		|||
                  'Desert Palace - Map Chest': (0xE9B6, False, 'in Desert Palace'),
 | 
			
		||||
                  'Desert Palace - Compass Chest': (0xE9CB, False, 'in Desert Palace'),
 | 
			
		||||
                  'Desert Palace - Big Key Chest': (0xE9C2, False, 'in Desert Palace'),
 | 
			
		||||
                  'Desert Palace - Lanmolas': (0x180151, False, 'with Lanmolas'),
 | 
			
		||||
                  'Desert Palace - Boss': (0x180151, False, 'with Lanmolas'),
 | 
			
		||||
                  'Eastern Palace - Compass Chest': (0xE977, False, 'in Eastern Palace'),
 | 
			
		||||
                  'Eastern Palace - Big Chest': (0xE97D, False, 'in Eastern Palace'),
 | 
			
		||||
                  'Eastern Palace - Cannonball Chest': (0xE9B3, False, 'in Eastern Palace'),
 | 
			
		||||
                  'Eastern Palace - Big Key Chest': (0xE9B9, False, 'in Eastern Palace'),
 | 
			
		||||
                  'Eastern Palace - Map Chest': (0xE9F5, False, 'in Eastern Palace'),
 | 
			
		||||
                  'Eastern Palace - Armos Knights': (0x180150, False, 'with the Armos'),
 | 
			
		||||
                  'Eastern Palace - Boss': (0x180150, False, 'with the Armos'),
 | 
			
		||||
                  'Master Sword Pedestal': (0x289B0, False, 'at the pedestal'),
 | 
			
		||||
                  'Hyrule Castle - Boomerang Chest': (0xE974, False, 'in Hyrule Castle'),
 | 
			
		||||
                  'Hyrule Castle - Map Chest': (0xEB0C, False, 'in Hyrule Castle'),
 | 
			
		||||
| 
						 | 
				
			
			@ -485,7 +487,7 @@ location_table = {'Mushroom': (0x180013, False, 'in the woods'),
 | 
			
		|||
                  'Tower of Hera - Big Key Chest': (0xE9E6, False, 'in Tower of Hera'),
 | 
			
		||||
                  'Tower of Hera - Compass Chest': (0xE9FB, False, 'in Tower of Hera'),
 | 
			
		||||
                  'Tower of Hera - Big Chest': (0xE9F8, False, 'in Tower of Hera'),
 | 
			
		||||
                  'Tower of Hera - Moldorm': (0x180152, False, 'with Moldorm'),
 | 
			
		||||
                  'Tower of Hera - Boss': (0x180152, False, 'with Moldorm'),
 | 
			
		||||
                  'Pyramid': (0x180147, False, 'on the pyramid'),
 | 
			
		||||
                  'Catfish': (0xEE185, False, 'with a fish'),
 | 
			
		||||
                  'Stumpy': (0x330C7, False, 'with tree boy'),
 | 
			
		||||
| 
						 | 
				
			
			@ -523,7 +525,7 @@ location_table = {'Mushroom': (0x180013, False, 'in the woods'),
 | 
			
		|||
                  'Swamp Palace - Flooded Room - Left': (0xEAA9, False, 'in Swamp Palace'),
 | 
			
		||||
                  'Swamp Palace - Flooded Room - Right': (0xEAAC, False, 'in Swamp Palace'),
 | 
			
		||||
                  'Swamp Palace - Waterfall Room': (0xEAAF, False, 'in Swamp Palace'),
 | 
			
		||||
                  'Swamp Palace - Arrghus': (0x180154, False, 'with Arrghus'),
 | 
			
		||||
                  'Swamp Palace - Boss': (0x180154, False, 'with Arrghus'),
 | 
			
		||||
                  'Thieves\' Town - Big Key Chest': (0xEA04, False, 'in Thieves\' Town'),
 | 
			
		||||
                  'Thieves\' Town - Map Chest': (0xEA01, False, 'in Thieves\' Town'),
 | 
			
		||||
                  'Thieves\' Town - Compass Chest': (0xEA07, False, 'in Thieves\' Town'),
 | 
			
		||||
| 
						 | 
				
			
			@ -531,7 +533,7 @@ location_table = {'Mushroom': (0x180013, False, 'in the woods'),
 | 
			
		|||
                  'Thieves\' Town - Attic': (0xEA0D, False, 'in Thieves\' Town'),
 | 
			
		||||
                  'Thieves\' Town - Big Chest': (0xEA10, False, 'in Thieves\' Town'),
 | 
			
		||||
                  'Thieves\' Town - Blind\'s Cell': (0xEA13, False, 'in Thieves\' Town'),
 | 
			
		||||
                  'Thieves Town - Blind': (0x180156, False, 'with Blind'),
 | 
			
		||||
                  'Thieves\' Town - Boss': (0x180156, False, 'with Blind'),
 | 
			
		||||
                  'Skull Woods - Compass Chest': (0xE992, False, 'in Skull Woods'),
 | 
			
		||||
                  'Skull Woods - Map Chest': (0xE99B, False, 'in Skull Woods'),
 | 
			
		||||
                  'Skull Woods - Big Chest': (0xE998, False, 'in Skull Woods'),
 | 
			
		||||
| 
						 | 
				
			
			@ -539,7 +541,7 @@ location_table = {'Mushroom': (0x180013, False, 'in the woods'),
 | 
			
		|||
                  'Skull Woods - Pinball Room': (0xE9C8, False, 'in Skull Woods'),
 | 
			
		||||
                  'Skull Woods - Big Key Chest': (0xE99E, False, 'in Skull Woods'),
 | 
			
		||||
                  'Skull Woods - Bridge Room': (0xE9FE, False, 'near Mothula'),
 | 
			
		||||
                  'Skull Woods - Mothula': (0x180155, False, 'with Mothula'),
 | 
			
		||||
                  'Skull Woods - Boss': (0x180155, False, 'with Mothula'),
 | 
			
		||||
                  'Ice Palace - Compass Chest': (0xE9D4, False, 'in Ice Palace'),
 | 
			
		||||
                  'Ice Palace - Freezor Chest': (0xE995, False, 'in Ice Palace'),
 | 
			
		||||
                  'Ice Palace - Big Chest': (0xE9AA, False, 'in Ice Palace'),
 | 
			
		||||
| 
						 | 
				
			
			@ -547,7 +549,7 @@ location_table = {'Mushroom': (0x180013, False, 'in the woods'),
 | 
			
		|||
                  'Ice Palace - Spike Room': (0xE9E0, False, 'in Ice Palace'),
 | 
			
		||||
                  'Ice Palace - Big Key Chest': (0xE9A4, False, 'in Ice Palace'),
 | 
			
		||||
                  'Ice Palace - Map Chest': (0xE9DD, False, 'in Ice Palace'),
 | 
			
		||||
                  'Ice Palace - Kholdstare': (0x180157, False, 'with Kholdstare'),
 | 
			
		||||
                  'Ice Palace - Boss': (0x180157, False, 'with Kholdstare'),
 | 
			
		||||
                  'Misery Mire - Big Chest': (0xEA67, False, 'in Misery Mire'),
 | 
			
		||||
                  'Misery Mire - Map Chest': (0xEA6A, False, 'in Misery Mire'),
 | 
			
		||||
                  'Misery Mire - Main Lobby': (0xEA5E, False, 'in Misery Mire'),
 | 
			
		||||
| 
						 | 
				
			
			@ -555,7 +557,7 @@ location_table = {'Mushroom': (0x180013, False, 'in the woods'),
 | 
			
		|||
                  'Misery Mire - Spike Chest': (0xE9DA, False, 'in Misery Mire'),
 | 
			
		||||
                  'Misery Mire - Compass Chest': (0xEA64, False, 'in Misery Mire'),
 | 
			
		||||
                  'Misery Mire - Big Key Chest': (0xEA6D, False, 'in Misery Mire'),
 | 
			
		||||
                  'Misery Mire - Vitreous': (0x180158, False, 'with Vitreous'),
 | 
			
		||||
                  'Misery Mire - Boss': (0x180158, False, 'with Vitreous'),
 | 
			
		||||
                  'Turtle Rock - Compass Chest': (0xEA22, False, 'in Turtle Rock'),
 | 
			
		||||
                  'Turtle Rock - Roller Room - Left': (0xEA1C, False, 'in Turtle Rock'),
 | 
			
		||||
                  'Turtle Rock - Roller Room - Right': (0xEA1F, False, 'in Turtle Rock'),
 | 
			
		||||
| 
						 | 
				
			
			@ -567,7 +569,7 @@ location_table = {'Mushroom': (0x180013, False, 'in the woods'),
 | 
			
		|||
                  'Turtle Rock - Eye Bridge - Bottom Right': (0xEA2E, False, 'in Turtle Rock'),
 | 
			
		||||
                  'Turtle Rock - Eye Bridge - Top Left': (0xEA2B, False, 'in Turtle Rock'),
 | 
			
		||||
                  'Turtle Rock - Eye Bridge - Top Right': (0xEA28, False, 'in Turtle Rock'),
 | 
			
		||||
                  'Turtle Rock - Trinexx': (0x180159, False, 'with Trinexx'),
 | 
			
		||||
                  'Turtle Rock - Boss': (0x180159, False, 'with Trinexx'),
 | 
			
		||||
                  'Palace of Darkness - Shooter Room': (0xEA5B, False, 'in Palace of Darkness'),
 | 
			
		||||
                  'Palace of Darkness - The Arena - Bridge': (0xEA3D, False, 'in Palace of Darkness'),
 | 
			
		||||
                  'Palace of Darkness - Stalfos Basement': (0xEA49, False, 'in Palace of Darkness'),
 | 
			
		||||
| 
						 | 
				
			
			@ -581,7 +583,7 @@ location_table = {'Mushroom': (0x180013, False, 'in the woods'),
 | 
			
		|||
                  'Palace of Darkness - Dark Maze - Bottom': (0xEA58, False, 'in Palace of Darkness'),
 | 
			
		||||
                  '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 - Helmasaur': (0x180153, False, 'with Helmasaur King'),
 | 
			
		||||
                  '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'),
 | 
			
		||||
| 
						 | 
				
			
			@ -621,7 +623,7 @@ location_table = {'Mushroom': (0x180013, False, 'in the woods'),
 | 
			
		|||
                  'Tower of Hera - Prize': ([0x120A5, 0x53F0A, 0x53F0B, 0x18005A, 0x18007A, 0xC706], True, 'Tower of Hera'),
 | 
			
		||||
                  'Palace of Darkness - Prize': ([0x120A1, 0x53F00, 0x53F01, 0x180056, 0x18007D, 0xC702], True, 'Palace of Darkness'),
 | 
			
		||||
                  'Swamp Palace - Prize': ([0x120A0, 0x53F6C, 0x53F6D, 0x180055, 0x180071, 0xC701], True, 'Swamp Palace'),
 | 
			
		||||
                  'Thieves Town - Prize': ([0x120A6, 0x53F36, 0x53F37, 0x18005B, 0x180077, 0xC707], True, 'Thieves\' Town'),
 | 
			
		||||
                  'Thieves\' Town - Prize': ([0x120A6, 0x53F36, 0x53F37, 0x18005B, 0x180077, 0xC707], True, 'Thieves\' Town'),
 | 
			
		||||
                  'Skull Woods - Prize': ([0x120A3, 0x53F12, 0x53F13, 0x180058, 0x18007B, 0xC704], True, 'Skull Woods'),
 | 
			
		||||
                  'Ice Palace - Prize': ([0x120A4, 0x53F5A, 0x53F5B, 0x180059, 0x180073, 0xC705], True, 'Ice Palace'),
 | 
			
		||||
                  'Misery Mire - Prize': ([0x120A2, 0x53F48, 0x53F49, 0x180057, 0x180075, 0xC703], True, 'Misery Mire'),
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								Rom.py
								
								
								
								
							
							
						
						
									
										2
									
								
								Rom.py
								
								
								
								
							| 
						 | 
				
			
			@ -975,7 +975,7 @@ def apply_rom_settings(rom, beep, color, quickswap, fastmenu, disable_music, spr
 | 
			
		|||
    rom.write_byte(0xD3DAA, 0xFA)
 | 
			
		||||
 | 
			
		||||
    # set heart beep rate
 | 
			
		||||
    rom.write_byte(0x180033, {'off': 0x00, 'half': 0x40, 'quarter': 0x80, 'normal': 0x20}[beep])
 | 
			
		||||
    rom.write_byte(0x180033, {'off': 0x00, 'half': 0x40, 'quarter': 0x80, 'normal': 0x20, 'double': 0x10}[beep])
 | 
			
		||||
 | 
			
		||||
    # set heart color
 | 
			
		||||
    rom.write_byte(0x6FA1E, {'red': 0x24, 'blue': 0x2C, 'green': 0x3C, 'yellow': 0x28}[color])
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										46
									
								
								Rules.py
								
								
								
								
							
							
						
						
									
										46
									
								
								Rules.py
								
								
								
								
							| 
						 | 
				
			
			@ -233,20 +233,20 @@ def global_rules(world):
 | 
			
		|||
    set_rule(world.get_entrance('Sewers Back Door'), lambda state: state.has_key('Small Key (Escape)'))
 | 
			
		||||
 | 
			
		||||
    set_rule(world.get_location('Eastern Palace - Big Chest'), lambda state: state.has('Big Key (Eastern Palace)'))
 | 
			
		||||
    set_rule(world.get_location('Eastern Palace - Armos Knights'), lambda state: state.can_shoot_arrows() and state.has('Big Key (Eastern Palace)') and world.get_location('Eastern Palace - Armos Knights').parent_region.dungeon.boss.can_defeat(state))
 | 
			
		||||
    set_rule(world.get_location('Eastern Palace - Boss'), lambda state: state.can_shoot_arrows() and state.has('Big Key (Eastern Palace)') and world.get_location('Eastern Palace - Boss').parent_region.dungeon.boss.can_defeat(state))
 | 
			
		||||
    set_rule(world.get_location('Eastern Palace - Prize'), lambda state: state.can_shoot_arrows() and state.has('Big Key (Eastern Palace)') and world.get_location('Eastern Palace - Prize').parent_region.dungeon.boss.can_defeat(state))
 | 
			
		||||
    for location in ['Eastern Palace - Armos Knights', 'Eastern Palace - Big Chest']:
 | 
			
		||||
    for location in ['Eastern Palace - Boss', 'Eastern Palace - Big Chest']:
 | 
			
		||||
        forbid_item(world.get_location(location), 'Big Key (Eastern Palace)')
 | 
			
		||||
 | 
			
		||||
    set_rule(world.get_location('Desert Palace - Big Chest'), lambda state: state.has('Big Key (Desert Palace)'))
 | 
			
		||||
    set_rule(world.get_location('Desert Palace - Torch'), lambda state: state.has_Boots())
 | 
			
		||||
    set_rule(world.get_entrance('Desert Palace East Wing'), lambda state: state.has_key('Small Key (Desert Palace)'))
 | 
			
		||||
    set_rule(world.get_location('Desert Palace - Prize'), lambda state: state.has_key('Small Key (Desert Palace)') and state.has('Big Key (Desert Palace)') and state.has_fire_source() and world.get_location('Desert Palace - Prize').parent_region.dungeon.boss.can_defeat(state))
 | 
			
		||||
    set_rule(world.get_location('Desert Palace - Lanmolas'), lambda state: state.has_key('Small Key (Desert Palace)') and state.has('Big Key (Desert Palace)') and state.has_fire_source() and world.get_location('Desert Palace - Lanmolas').parent_region.dungeon.boss.can_defeat(state))
 | 
			
		||||
    for location in ['Desert Palace - Lanmolas', 'Desert Palace - Big Chest']:
 | 
			
		||||
    set_rule(world.get_location('Desert Palace - Boss'), lambda state: state.has_key('Small Key (Desert Palace)') and state.has('Big Key (Desert Palace)') and state.has_fire_source() and world.get_location('Desert Palace - Boss').parent_region.dungeon.boss.can_defeat(state))
 | 
			
		||||
    for location in ['Desert Palace - Boss', 'Desert Palace - Big Chest']:
 | 
			
		||||
        forbid_item(world.get_location(location), 'Big Key (Desert Palace)')
 | 
			
		||||
 | 
			
		||||
    for location in ['Desert Palace - Lanmolas', 'Desert Palace - Big Key Chest', 'Desert Palace - Compass Chest']:
 | 
			
		||||
    for location in ['Desert Palace - Boss', 'Desert Palace - Big Key Chest', 'Desert Palace - Compass Chest']:
 | 
			
		||||
        forbid_item(world.get_location(location), 'Small Key (Desert Palace)')
 | 
			
		||||
 | 
			
		||||
    set_rule(world.get_entrance('Tower of Hera Small Key Door'), lambda state: state.has_key('Small Key (Tower of Hera)') or item_name(state, 'Tower of Hera - Big Key Chest') == 'Small Key (Tower of Hera)')
 | 
			
		||||
| 
						 | 
				
			
			@ -254,9 +254,9 @@ def global_rules(world):
 | 
			
		|||
    set_rule(world.get_location('Tower of Hera - Big Chest'), lambda state: state.has('Big Key (Tower of Hera)'))
 | 
			
		||||
    set_rule(world.get_location('Tower of Hera - Big Key Chest'), lambda state: state.has_fire_source())
 | 
			
		||||
    set_always_allow(world.get_location('Tower of Hera - Big Key Chest'), lambda state, item: item.name == 'Small Key (Tower of Hera)')
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Tower of Hera - Moldorm'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Tower of Hera - Boss'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Tower of Hera - Prize'))
 | 
			
		||||
    for location in ['Tower of Hera - Moldorm', 'Tower of Hera - Big Chest', 'Tower of Hera - Compass Chest']:
 | 
			
		||||
    for location in ['Tower of Hera - Boss', 'Tower of Hera - Big Chest', 'Tower of Hera - Compass Chest']:
 | 
			
		||||
        forbid_item(world.get_location(location), 'Big Key (Tower of Hera)')
 | 
			
		||||
#    for location in ['Tower of Hera - Big Key Chest']:
 | 
			
		||||
#        forbid_item(world.get_location(location), 'Small Key (Tower of Hera)')
 | 
			
		||||
| 
						 | 
				
			
			@ -269,21 +269,21 @@ def global_rules(world):
 | 
			
		|||
    set_rule(world.get_location('Swamp Palace - Big Chest'), lambda state: state.has('Big Key (Swamp Palace)') or item_name(state, 'Swamp Palace - Big Chest') == 'Big Key (Swamp Palace)')
 | 
			
		||||
    set_always_allow(world.get_location('Swamp Palace - Big Chest'), lambda state, item: item.name == 'Big Key (Swamp Palace)')
 | 
			
		||||
    set_rule(world.get_entrance('Swamp Palace (North)'), lambda state: state.has('Hookshot'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Swamp Palace - Arrghus'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Swamp Palace - Boss'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Swamp Palace - Prize'))
 | 
			
		||||
    for location in ['Swamp Palace - Entrance']:
 | 
			
		||||
        forbid_item(world.get_location(location), 'Big Key (Swamp Palace)')
 | 
			
		||||
 | 
			
		||||
    set_rule(world.get_entrance('Thieves Town Big Key Door'), lambda state: state.has('Big Key (Thieves Town)'))
 | 
			
		||||
    set_rule(world.get_entrance('Blind Fight'), lambda state: state.has_key('Small Key (Thieves Town)'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Thieves Town - Blind'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Thieves Town - Prize'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Thieves\' Town - Boss'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Thieves\' Town - Prize'))
 | 
			
		||||
    set_rule(world.get_location('Thieves\' Town - Big Chest'), lambda state: (state.has_key('Small Key (Thieves Town)') or item_name(state, 'Thieves\' Town - Big Chest') == 'Small Key (Thieves Town)') and state.has('Hammer'))
 | 
			
		||||
    set_always_allow(world.get_location('Thieves\' Town - Big Chest'), lambda state, item: item.name == 'Small Key (Thieves Town)' and state.has('Hammer'))
 | 
			
		||||
    set_rule(world.get_location('Thieves\' Town - Attic'), lambda state: state.has_key('Small Key (Thieves Town)'))
 | 
			
		||||
    for location in ['Thieves\' Town - Attic', 'Thieves\' Town - Big Chest', 'Thieves\' Town - Blind\'s Cell', 'Thieves Town - Blind']:
 | 
			
		||||
    for location in ['Thieves\' Town - Attic', 'Thieves\' Town - Big Chest', 'Thieves\' Town - Blind\'s Cell', 'Thieves\' Town - Boss']:
 | 
			
		||||
        forbid_item(world.get_location(location), 'Big Key (Thieves Town)')
 | 
			
		||||
    for location in ['Thieves\' Town - Attic', 'Thieves Town - Blind']:
 | 
			
		||||
    for location in ['Thieves\' Town - Attic', 'Thieves\' Town - Boss']:
 | 
			
		||||
        forbid_item(world.get_location(location), 'Small Key (Thieves Town)')
 | 
			
		||||
 | 
			
		||||
    set_rule(world.get_entrance('Skull Woods First Section South Door'), lambda state: state.has_key('Small Key (Skull Woods)'))
 | 
			
		||||
| 
						 | 
				
			
			@ -293,9 +293,9 @@ def global_rules(world):
 | 
			
		|||
    set_rule(world.get_location('Skull Woods - Big Chest'), lambda state: state.has('Big Key (Skull Woods)') or item_name(state, 'Skull Woods - Big Chest') == 'Big Key (Skull Woods)')
 | 
			
		||||
    set_always_allow(world.get_location('Skull Woods - Big Chest'), lambda state, item: item.name == 'Big Key (Skull Woods)')
 | 
			
		||||
    set_rule(world.get_entrance('Skull Woods Torch Room'), lambda state: state.has_key('Small Key (Skull Woods)', 3) and state.has('Fire Rod') and state.has_sword())  # sword required for curtain
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Skull Woods - Mothula'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Skull Woods - Boss'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Skull Woods - Prize'))
 | 
			
		||||
    for location in ['Skull Woods - Mothula']:
 | 
			
		||||
    for location in ['Skull Woods - Boss']:
 | 
			
		||||
        forbid_item(world.get_location(location), 'Small Key (Skull Woods)')
 | 
			
		||||
 | 
			
		||||
    set_rule(world.get_entrance('Ice Palace Entrance Room'), lambda state: state.has('Fire Rod') or (state.has('Bombos') and state.has_sword()))
 | 
			
		||||
| 
						 | 
				
			
			@ -304,9 +304,9 @@ def global_rules(world):
 | 
			
		|||
    # TODO: investigate change from VT. Changed to hookshot or 2 keys (no checking for big key in specific chests)
 | 
			
		||||
    set_rule(world.get_entrance('Ice Palace (East)'), lambda state: (state.has('Hookshot') or (item_in_locations(state, 'Big Key (Ice Palace)', ['Ice Palace - Spike Room', 'Ice Palace - Big Key Chest', 'Ice Palace - Map Chest']) and state.has_key('Small Key (Ice Palace)'))) and (state.world.can_take_damage or state.has('Hookshot') or state.has('Cape') or state.has('Cane of Byrna')))
 | 
			
		||||
    set_rule(world.get_entrance('Ice Palace (East Top)'), lambda state: state.can_lift_rocks() and state.has('Hammer'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Ice Palace - Kholdstare'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Ice Palace - Boss'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Ice Palace - Prize'))
 | 
			
		||||
    for location in ['Ice Palace - Big Chest', 'Ice Palace - Kholdstare']:
 | 
			
		||||
    for location in ['Ice Palace - Big Chest', 'Ice Palace - Boss']:
 | 
			
		||||
        forbid_item(world.get_location(location), 'Big Key (Ice Palace)')
 | 
			
		||||
 | 
			
		||||
    set_rule(world.get_entrance('Misery Mire Entrance Gap'), lambda state: (state.has_Boots() or state.has('Hookshot')) and (state.has_sword() or state.has('Fire Rod') or state.has('Ice Rod') or state.has('Hammer') or state.has('Cane of Somaria') or state.can_shoot_arrows()))  # need to defeat wizzrobes, bombs don't work ...
 | 
			
		||||
| 
						 | 
				
			
			@ -324,9 +324,9 @@ def global_rules(world):
 | 
			
		|||
    set_rule(world.get_location('Misery Mire - Compass Chest'), lambda state: state.has_fire_source())
 | 
			
		||||
    set_rule(world.get_location('Misery Mire - Big Key Chest'), lambda state: state.has_fire_source())
 | 
			
		||||
    set_rule(world.get_entrance('Misery Mire (Vitreous)'), lambda state: state.has('Cane of Somaria'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Misery Mire - Vitreous'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Misery Mire - Boss'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Misery Mire - Prize'))
 | 
			
		||||
    for location in ['Misery Mire - Big Chest', 'Misery Mire - Vitreous']:
 | 
			
		||||
    for location in ['Misery Mire - Big Chest', 'Misery Mire - Boss']:
 | 
			
		||||
        forbid_item(world.get_location(location), 'Big Key (Misery Mire)')
 | 
			
		||||
 | 
			
		||||
    set_rule(world.get_entrance('Turtle Rock Entrance Gap'), lambda state: state.has('Cane of Somaria'))
 | 
			
		||||
| 
						 | 
				
			
			@ -345,7 +345,7 @@ def global_rules(world):
 | 
			
		|||
    set_rule(world.get_location('Turtle Rock - Eye Bridge - Top Left'), lambda state: state.has('Cane of Byrna') or state.has('Cape') or state.has('Mirror Shield'))
 | 
			
		||||
    set_rule(world.get_location('Turtle Rock - Eye Bridge - Top Right'), lambda state: state.has('Cane of Byrna') or state.has('Cape') or state.has('Mirror Shield'))
 | 
			
		||||
    set_rule(world.get_entrance('Turtle Rock (Trinexx)'), lambda state: state.has_key('Small Key (Turtle Rock)', 4) and state.has('Big Key (Turtle Rock)') and state.has('Cane of Somaria'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Turtle Rock - Trinexx'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Turtle Rock - Boss'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Turtle Rock - Prize'))
 | 
			
		||||
 | 
			
		||||
    set_trock_key_rules(world)
 | 
			
		||||
| 
						 | 
				
			
			@ -363,7 +363,7 @@ def global_rules(world):
 | 
			
		|||
    set_rule(world.get_entrance('Palace of Darkness Spike Statue Room Door'), lambda state: state.has_key('Small Key (Palace of Darkness)', 6) or (item_name(state, 'Palace of Darkness - Harmless Hellway') in ['Small Key (Palace of Darkness)'] and state.has_key('Small Key (Palace of Darkness)', 4)))
 | 
			
		||||
    set_always_allow(world.get_location('Palace of Darkness - Harmless Hellway'), lambda state, item: item.name == 'Small Key (Palace of Darkness)' and state.has_key('Small Key (Palace of Darkness)', 5))
 | 
			
		||||
    set_rule(world.get_entrance('Palace of Darkness Maze Door'), lambda state: state.has_key('Small Key (Palace of Darkness)', 6))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Palace of Darkness - Helmasaur'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Palace of Darkness - Boss'))
 | 
			
		||||
    set_defeat_dungeon_boss_rule(world.get_location('Palace of Darkness - Prize'))
 | 
			
		||||
 | 
			
		||||
    # these key rules are conservative, you might be able to get away with more lenient rules
 | 
			
		||||
| 
						 | 
				
			
			@ -464,7 +464,7 @@ def no_glitches_rules(world):
 | 
			
		|||
    add_conditional_lamp('Old Man House Front to Back', 'Old Man House', 'Entrance')
 | 
			
		||||
    add_conditional_lamp('Old Man House Back to Front', 'Old Man House', 'Entrance')
 | 
			
		||||
    add_conditional_lamp('Eastern Palace - Big Key Chest', 'Eastern Palace', 'Location')
 | 
			
		||||
    add_conditional_lamp('Eastern Palace - Armos Knights', 'Eastern Palace', 'Location')
 | 
			
		||||
    add_conditional_lamp('Eastern Palace - Boss', 'Eastern Palace', 'Location')
 | 
			
		||||
    add_conditional_lamp('Eastern Palace - Prize', 'Eastern Palace', 'Location')
 | 
			
		||||
 | 
			
		||||
    if not world.sewer_light_cone:
 | 
			
		||||
| 
						 | 
				
			
			@ -561,7 +561,7 @@ def set_trock_key_rules(world):
 | 
			
		|||
    set_always_allow(world.get_location('Turtle Rock - Big Key Chest'), lambda state, item: item.name == 'Small Key (Turtle Rock)' and state.has_key('Small Key (Turtle Rock)', 3))
 | 
			
		||||
 | 
			
		||||
    # set big key restrictions
 | 
			
		||||
    non_big_key_locations = ['Turtle Rock - Big Chest', 'Turtle Rock - Trinexx']
 | 
			
		||||
    non_big_key_locations = ['Turtle Rock - Big Chest', 'Turtle Rock - Boss']
 | 
			
		||||
    if not can_reach_back:
 | 
			
		||||
        non_big_key_locations += ['Turtle Rock - Crystaroller Room', 'Turtle Rock - Eye Bridge - Bottom Left',
 | 
			
		||||
                                  'Turtle Rock - Eye Bridge - Bottom Right', 'Turtle Rock - Eye Bridge - Top Left',
 | 
			
		||||
| 
						 | 
				
			
			@ -571,7 +571,7 @@ def set_trock_key_rules(world):
 | 
			
		|||
        forbid_item(world.get_location(location), 'Big Key (Turtle Rock)')
 | 
			
		||||
 | 
			
		||||
    # small key restriction
 | 
			
		||||
    for location in ['Turtle Rock - Trinexx']:
 | 
			
		||||
    for location in ['Turtle Rock - Boss']:
 | 
			
		||||
        forbid_item(world.get_location(location), 'Small Key (Turtle Rock)')
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										14
									
								
								Text.py
								
								
								
								
							
							
						
						
									
										14
									
								
								Text.py
								
								
								
								
							| 
						 | 
				
			
			@ -517,6 +517,7 @@ class MultiByteCoreTextMapper(object):
 | 
			
		|||
        outbuf = bytearray()
 | 
			
		||||
        lineindex = 0
 | 
			
		||||
        is_intro = '{INTRO}' in text
 | 
			
		||||
        first_line=True
 | 
			
		||||
 | 
			
		||||
        while lines:
 | 
			
		||||
            linespace = wrap
 | 
			
		||||
| 
						 | 
				
			
			@ -526,8 +527,11 @@ class MultiByteCoreTextMapper(object):
 | 
			
		|||
                continue
 | 
			
		||||
 | 
			
		||||
            words = line.split(' ')
 | 
			
		||||
            outbuf.append(0x74 if lineindex == 0 else 0x75 if lineindex == 1 else 0x76)  # line starter
 | 
			
		||||
 | 
			
		||||
            if first_line:
 | 
			
		||||
                first_line=False
 | 
			
		||||
            else:
 | 
			
		||||
                outbuf.append(0x74 if lineindex == 0 else 0x75 if lineindex == 1 else 0x76)  # line starter
 | 
			
		||||
            pending_space = False
 | 
			
		||||
            while words:
 | 
			
		||||
                word = words.pop(0)
 | 
			
		||||
                # sanity check: if the word we have is more than 14 characters, we take as much as we can still fit and push the rest back for later
 | 
			
		||||
| 
						 | 
				
			
			@ -540,9 +544,11 @@ class MultiByteCoreTextMapper(object):
 | 
			
		|||
                    break
 | 
			
		||||
 | 
			
		||||
                if cls.wordlen(word) <= linespace:
 | 
			
		||||
                    if pending_space:
 | 
			
		||||
                        outbuf.extend(RawMBTextMapper.convert(' '))
 | 
			
		||||
                    if cls.wordlen(word) < linespace:
 | 
			
		||||
                        word = word + ' '
 | 
			
		||||
                    linespace -= cls.wordlen(word)
 | 
			
		||||
                        pending_space = True
 | 
			
		||||
                    linespace -= cls.wordlen(word) + 1 if pending_space else 0
 | 
			
		||||
                    outbuf.extend(RawMBTextMapper.convert(word))
 | 
			
		||||
                else:
 | 
			
		||||
                    # ran out of space, push word and lines back and continue with next line
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue