130 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			130 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| 
								 | 
							
								import os
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								from .Dungeon import Dungeon
							 | 
						||
| 
								 | 
							
								from .Utils import data_path
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								dungeon_table = [
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        'name': 'Deku Tree',
							 | 
						||
| 
								 | 
							
								        'boss_key':     0, 
							 | 
						||
| 
								 | 
							
								        'small_key':    0,
							 | 
						||
| 
								 | 
							
								        'small_key_mq': 0,
							 | 
						||
| 
								 | 
							
								        'dungeon_item': 1,
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        'name': 'Dodongos Cavern',
							 | 
						||
| 
								 | 
							
								        'hint': 'Dodongo\'s Cavern',
							 | 
						||
| 
								 | 
							
								        'boss_key':     0, 
							 | 
						||
| 
								 | 
							
								        'small_key':    0,
							 | 
						||
| 
								 | 
							
								        'small_key_mq': 0,
							 | 
						||
| 
								 | 
							
								        'dungeon_item': 1,
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        'name': 'Jabu Jabus Belly',
							 | 
						||
| 
								 | 
							
								        'hint': 'Jabu Jabu\'s Belly',
							 | 
						||
| 
								 | 
							
								        'boss_key':     0, 
							 | 
						||
| 
								 | 
							
								        'small_key':    0,
							 | 
						||
| 
								 | 
							
								        'small_key_mq': 0,
							 | 
						||
| 
								 | 
							
								        'dungeon_item': 1,
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        'name': 'Forest Temple',
							 | 
						||
| 
								 | 
							
								        'boss_key':     1, 
							 | 
						||
| 
								 | 
							
								        'small_key':    5,
							 | 
						||
| 
								 | 
							
								        'small_key_mq': 6,
							 | 
						||
| 
								 | 
							
								        'dungeon_item': 1,
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        'name': 'Bottom of the Well',
							 | 
						||
| 
								 | 
							
								        'boss_key':     0, 
							 | 
						||
| 
								 | 
							
								        'small_key':    3,
							 | 
						||
| 
								 | 
							
								        'small_key_mq': 2,
							 | 
						||
| 
								 | 
							
								        'dungeon_item': 1,
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        'name': 'Fire Temple',
							 | 
						||
| 
								 | 
							
								        'boss_key':     1, 
							 | 
						||
| 
								 | 
							
								        'small_key':    8,
							 | 
						||
| 
								 | 
							
								        'small_key_mq': 5,
							 | 
						||
| 
								 | 
							
								        'dungeon_item': 1,
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        'name': 'Ice Cavern',
							 | 
						||
| 
								 | 
							
								        'boss_key':     0, 
							 | 
						||
| 
								 | 
							
								        'small_key':    0,
							 | 
						||
| 
								 | 
							
								        'small_key_mq': 0,
							 | 
						||
| 
								 | 
							
								        'dungeon_item': 1,
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        'name': 'Water Temple',
							 | 
						||
| 
								 | 
							
								        'boss_key':     1, 
							 | 
						||
| 
								 | 
							
								        'small_key':    6,
							 | 
						||
| 
								 | 
							
								        'small_key_mq': 2,
							 | 
						||
| 
								 | 
							
								        'dungeon_item': 1,
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        'name': 'Shadow Temple',
							 | 
						||
| 
								 | 
							
								        'boss_key':     1, 
							 | 
						||
| 
								 | 
							
								        'small_key':    5,
							 | 
						||
| 
								 | 
							
								        'small_key_mq': 6,
							 | 
						||
| 
								 | 
							
								        'dungeon_item': 1,
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        'name': 'Gerudo Training Grounds',
							 | 
						||
| 
								 | 
							
								        'boss_key':     0, 
							 | 
						||
| 
								 | 
							
								        'small_key':    9,
							 | 
						||
| 
								 | 
							
								        'small_key_mq': 3,
							 | 
						||
| 
								 | 
							
								        'dungeon_item': 0,
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        'name': 'Spirit Temple',
							 | 
						||
| 
								 | 
							
								        'boss_key':     1, 
							 | 
						||
| 
								 | 
							
								        'small_key':    5,
							 | 
						||
| 
								 | 
							
								        'small_key_mq': 7,
							 | 
						||
| 
								 | 
							
								        'dungeon_item': 1,
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        'name': 'Ganons Castle',
							 | 
						||
| 
								 | 
							
								        'hint': 'Ganon\'s Castle',
							 | 
						||
| 
								 | 
							
								        'boss_key':     1, 
							 | 
						||
| 
								 | 
							
								        'small_key':    2,
							 | 
						||
| 
								 | 
							
								        'small_key_mq': 3,
							 | 
						||
| 
								 | 
							
								        'dungeon_item': 0,
							 | 
						||
| 
								 | 
							
								    },
							 | 
						||
| 
								 | 
							
								]
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								def create_dungeons(ootworld):
							 | 
						||
| 
								 | 
							
								    ootworld.dungeons = []
							 | 
						||
| 
								 | 
							
								    for dungeon_info in dungeon_table:
							 | 
						||
| 
								 | 
							
								        name = dungeon_info['name']
							 | 
						||
| 
								 | 
							
								        hint = dungeon_info['hint'] if 'hint' in dungeon_info else name
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        if ootworld.logic_rules == 'glitchless':
							 | 
						||
| 
								 | 
							
								            if not ootworld.dungeon_mq[name]:
							 | 
						||
| 
								 | 
							
								                dungeon_json = os.path.join(data_path('World'), name + '.json')
							 | 
						||
| 
								 | 
							
								            else:
							 | 
						||
| 
								 | 
							
								                dungeon_json = os.path.join(data_path('World'), name + ' MQ.json')
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								            if not ootworld.dungeon_mq[name]:
							 | 
						||
| 
								 | 
							
								                dungeon_json = os.path.join(data_path('Glitched World'), name + '.json')
							 | 
						||
| 
								 | 
							
								            else:
							 | 
						||
| 
								 | 
							
								                dungeon_json = os.path.join(data_path('Glitched World'), name + ' MQ.json')
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        
							 | 
						||
| 
								 | 
							
								        ootworld.load_regions_from_json(dungeon_json)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        boss_keys = [ootworld.create_item(f'Boss Key ({name})') for i in range(dungeon_info['boss_key'])]
							 | 
						||
| 
								 | 
							
								        if not ootworld.dungeon_mq[dungeon_info['name']]:
							 | 
						||
| 
								 | 
							
								            small_keys = [ootworld.create_item(f'Small Key ({name})') for i in range(dungeon_info['small_key'])]
							 | 
						||
| 
								 | 
							
								        else:
							 | 
						||
| 
								 | 
							
								            small_keys = [ootworld.create_item(f'Small Key ({name})') for i in range(dungeon_info['small_key_mq'])]
							 | 
						||
| 
								 | 
							
								        dungeon_items = [ootworld.create_item(f'Map ({name})'), ootworld.create_item(f'Compass ({name})')] * dungeon_info['dungeon_item']
							 | 
						||
| 
								 | 
							
								        if ootworld.shuffle_mapcompass in ['any_dungeon', 'overworld']:
							 | 
						||
| 
								 | 
							
								            for item in dungeon_items:
							 | 
						||
| 
								 | 
							
								                item.priority = True
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        ootworld.dungeons.append(Dungeon(ootworld, name, hint, boss_keys, small_keys, dungeon_items))
							 | 
						||
| 
								 | 
							
								
							 |