2023-03-21 01:26:03 +09:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								from  . requirements  import  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  . location  import  Location  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  . . locations . all  import  *  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  Dungeon2 :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  __init__ ( self ,  options ,  world_setup ,  r ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        entrance  =  Location ( dungeon = 2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Location ( dungeon = 2 ) . add ( DungeonChest ( 0x136 ) ) . connect ( entrance ,  POWER_BRACELET )   # chest at entrance 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dungeon2_l2  =  Location ( dungeon = 2 ) . connect ( entrance ,  AND ( KEY2 ,  FOUND ( KEY2 ,  5 ) ) )   # towards map chest 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dungeon2_map_chest  =  Location ( dungeon = 2 ) . add ( DungeonChest ( 0x12E ) ) . connect ( dungeon2_l2 ,  AND ( r . attack_hookshot_powder ,  OR ( FEATHER ,  HOOKSHOT ) ) )   # map chest 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dungeon2_r2  =  Location ( dungeon = 2 ) . connect ( entrance ,  r . fire ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Location ( dungeon = 2 ) . add ( DroppedKey ( 0x132 ) ) . connect ( dungeon2_r2 ,  r . attack_skeleton ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Location ( dungeon = 2 ) . add ( DungeonChest ( 0x137 ) ) . connect ( dungeon2_r2 ,  AND ( KEY2 ,  FOUND ( KEY2 ,  5 ) ,  OR ( r . rear_attack ,  r . rear_attack_range ) ) )   # compass chest 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  options . owlstatues  ==  " both "  or  options . owlstatues  ==  " dungeon " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Location ( dungeon = 2 ) . add ( OwlStatue ( 0x133 ) ) . connect ( dungeon2_r2 ,  STONE_BEAK2 ) 
							 
						 
					
						
							
								
									
										
										
										
											2024-12-05 10:32:45 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        dungeon2_r3  =  Location ( dungeon = 2 ) . add ( DungeonChest ( 0x138 ) ) . connect ( dungeon2_r2 ,  r . hit_switch )   # first chest with key, can hookshot the switch in previous room 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-21 01:26:03 +09:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								        dungeon2_r4  =  Location ( dungeon = 2 ) . add ( DungeonChest ( 0x139 ) ) . connect ( dungeon2_r3 ,  FEATHER )   # button spawn chest 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  options . logic  ==  " casual " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            shyguy_key_drop  =  Location ( dungeon = 2 ) . add ( DroppedKey ( 0x134 ) ) . connect ( dungeon2_r3 ,  AND ( FEATHER ,  OR ( r . rear_attack ,  r . rear_attack_range ) ) )   # shyguy drop key 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        else : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            shyguy_key_drop  =  Location ( dungeon = 2 ) . add ( DroppedKey ( 0x134 ) ) . connect ( dungeon2_r3 ,  OR ( r . rear_attack ,  AND ( FEATHER ,  r . rear_attack_range ) ) )   # shyguy drop key 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dungeon2_r5  =  Location ( dungeon = 2 ) . connect ( dungeon2_r4 ,  AND ( KEY2 ,  FOUND ( KEY2 ,  3 ) ) )   # push two blocks together room with owl statue 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  options . owlstatues  ==  " both "  or  options . owlstatues  ==  " dungeon " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Location ( dungeon = 2 ) . add ( OwlStatue ( 0x12F ) ) . connect ( dungeon2_r5 ,  STONE_BEAK2 )   # owl statue is before miniboss 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        miniboss  =  Location ( dungeon = 2 ) . add ( DungeonChest ( 0x126 ) ) . add ( DungeonChest ( 0x121 ) ) . connect ( dungeon2_r5 ,  AND ( FEATHER ,  r . miniboss_requirements [ world_setup . miniboss_mapping [ 1 ] ] ) )   # post hinox 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  options . owlstatues  ==  " both "  or  options . owlstatues  ==  " dungeon " : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            Location ( dungeon = 2 ) . add ( OwlStatue ( 0x129 ) ) . connect ( miniboss ,  STONE_BEAK2 )   # owl statue after the miniboss 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dungeon2_ghosts_room  =  Location ( dungeon = 2 ) . connect ( miniboss ,  AND ( KEY2 ,  FOUND ( KEY2 ,  5 ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dungeon2_ghosts_chest  =  Location ( dungeon = 2 ) . add ( DungeonChest ( 0x120 ) ) . connect ( dungeon2_ghosts_room ,  OR ( r . fire ,  BOW ) )   # bracelet chest 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dungeon2_r6  =  Location ( dungeon = 2 ) . add ( DungeonChest ( 0x122 ) ) . connect ( miniboss ,  POWER_BRACELET ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dungeon2_boss_key  =  Location ( dungeon = 2 ) . add ( DungeonChest ( 0x127 ) ) . connect ( dungeon2_r6 ,  AND ( r . attack_hookshot_powder ,  OR ( BOW ,  BOMB ,  MAGIC_ROD ,  AND ( OCARINA ,  SONG1 ) ,  POWER_BRACELET ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dungeon2_pre_stairs_boss  =  Location ( dungeon = 2 ) . connect ( dungeon2_r6 ,  AND ( POWER_BRACELET ,  KEY2 ,  FOUND ( KEY2 ,  5 ) ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dungeon2_post_stairs_boss  =  Location ( dungeon = 2 ) . connect ( dungeon2_pre_stairs_boss ,  POWER_BRACELET ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dungeon2_pre_boss  =  Location ( dungeon = 2 ) . connect ( dungeon2_post_stairs_boss ,  FEATHER ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        # If we can get here, we have everything for the boss. So this is also the goal room. 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        dungeon2_boss  =  Location ( dungeon = 2 ) . add ( HeartContainer ( 0x12B ) ,  Instrument ( 0x12a ) ) . connect ( dungeon2_pre_boss ,  AND ( NIGHTMARE_KEY2 ,  r . boss_requirements [ world_setup . boss_mapping [ 1 ] ] ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  options . logic  ==  ' glitched '  or  options . logic  ==  ' hell ' : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            dungeon2_ghosts_chest . connect ( dungeon2_ghosts_room ,  SWORD )  # use sword to spawn ghosts on other side of the room so they run away (logically irrelevant because of torches at start) 
							 
						 
					
						
							
								
									
										
										
										
											2024-12-05 10:32:45 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            dungeon2_r6 . connect ( miniboss ,  r . super_jump_feather )  # superjump to staircase next to hinox.  
							 
						 
					
						
							
								
									
										
										
										
											2023-03-21 01:26:03 +09:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        if  options . logic  ==  ' hell ' :     
							 
						 
					
						
							
								
									
										
										
										
											2024-12-05 10:32:45 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            dungeon2_map_chest . connect ( dungeon2_l2 ,  AND ( r . attack_hookshot_powder ,  r . boots_bonk_pit ) )  # use boots to jump over the pits 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            dungeon2_r4 . connect ( dungeon2_r3 ,  OR ( r . boots_bonk_pit ,  r . hookshot_spam_pit ) )  # can use both pegasus boots bonks or hookshot spam to cross the pit room 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-21 01:26:03 +09:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            dungeon2_r4 . connect ( shyguy_key_drop ,  r . rear_attack_range ,  one_way = True )  # adjust for alternate requirements for dungeon2_r4 
							 
						 
					
						
							
								
									
										
										
										
											2024-12-05 10:32:45 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            miniboss . connect ( dungeon2_r5 ,  AND ( r . boots_dash_2d ,  r . miniboss_requirements [ world_setup . miniboss_mapping [ 1 ] ] ) )  # use boots to dash over the spikes in the 2d section 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-21 01:26:03 +09:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            dungeon2_pre_stairs_boss . connect ( dungeon2_r6 ,  AND ( HOOKSHOT ,  OR ( BOW ,  BOMB ,  MAGIC_ROD ,  AND ( OCARINA ,  SONG1 ) ) ,  FOUND ( KEY2 ,  5 ) ) )  # hookshot clip through the pot using both pol's voice 
							 
						 
					
						
							
								
									
										
										
										
											2024-12-05 10:32:45 -05:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								            dungeon2_post_stairs_boss . connect ( dungeon2_pre_stairs_boss ,  OR ( BOMB ,  r . boots_jump ) )  # use a bomb to lower the last platform, or boots + feather to cross over top (only relevant in hell logic) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            dungeon2_pre_boss . connect ( dungeon2_post_stairs_boss ,  AND ( r . boots_bonk_pit ,  r . hookshot_spam_pit ) )  # boots bonk off bottom wall + hookshot spam across the two 1 tile pits vertically 
							 
						 
					
						
							
								
									
										
										
										
											2023-03-21 01:26:03 +09:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								            
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . entrance  =  entrance 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  NoDungeon2 :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  __init__ ( self ,  options ,  world_setup ,  r ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        entrance  =  Location ( dungeon = 2 ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Location ( dungeon = 2 ) . add ( DungeonChest ( 0x136 ) ) . connect ( entrance ,  POWER_BRACELET )   # chest at entrance 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        Location ( dungeon = 2 ) . add ( HeartContainer ( 0x12B ) ,  Instrument ( 0x12a ) ) . connect ( entrance ,  r . boss_requirements [ 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            world_setup . boss_mapping [ 1 ] ] ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        self . entrance  =  entrance