54 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			54 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | from .LocationList import location_table | ||
|  | from BaseClasses import Location | ||
|  | 
 | ||
|  | location_id_offset = 67000 | ||
|  | location_name_to_id = {name: (location_id_offset + index) for (index, name) in enumerate(location_table)  | ||
|  |     if location_table[name][0] not in ['Boss', 'Event', 'Drop', 'HintStone', 'Hint']} | ||
|  | 
 | ||
|  | class OOTLocation(Location):  | ||
|  |     game: str = 'Ocarina of Time' | ||
|  | 
 | ||
|  |     def __init__(self, player, name='', code=None, address1=None, address2=None, default=None, type='Chest', scene=None, parent=None, filter_tags=None, internal=False): | ||
|  |         super(OOTLocation, self).__init__(player, name, code, parent) | ||
|  |         self.address1 = address1 | ||
|  |         self.address2 = address2 | ||
|  |         self.default = default | ||
|  |         self.type = type | ||
|  |         self.scene = scene | ||
|  |         self.internal = internal | ||
|  |         if filter_tags is None:  | ||
|  |             self.filter_tags = None | ||
|  |         else:  | ||
|  |             self.filter_tags = list(filter_tags) | ||
|  |         self.never = False # no idea what this does | ||
|  | 
 | ||
|  |         if type == 'Event':  | ||
|  |             self.event = True | ||
|  | 
 | ||
|  | 
 | ||
|  | def LocationFactory(locations, player: int): | ||
|  |     ret = [] | ||
|  |     singleton = False | ||
|  |     if isinstance(locations, str): | ||
|  |         locations = [locations] | ||
|  |         singleton = True | ||
|  |     for location in locations: | ||
|  |         if location in location_table: | ||
|  |             match_location = location | ||
|  |         else: | ||
|  |             match_location = next(filter(lambda k: k.lower() == location.lower(), location_table), None) | ||
|  |         if match_location: | ||
|  |             type, scene, default, addresses, vanilla_item, filter_tags = location_table[match_location] | ||
|  |             if addresses is None: | ||
|  |                 addresses = (None, None) | ||
|  |             address1, address2 = addresses | ||
|  |             ret.append(OOTLocation(player, match_location, location_name_to_id.get(match_location, None), address1, address2, default, type, scene, filter_tags=filter_tags)) | ||
|  |         else: | ||
|  |             raise KeyError('Unknown Location: %s', location) | ||
|  | 
 | ||
|  |     if singleton: | ||
|  |         return ret[0] | ||
|  |     return ret | ||
|  | 
 | ||
|  | 
 |