OoT: fix locations pointing to wrong entrance in server hints
This commit is contained in:
		
							parent
							
								
									d57bdf6dc3
								
							
						
					
					
						commit
						3001926ae4
					
				|  | @ -512,6 +512,8 @@ class OOTWorld(World): | |||
|                         raise e | ||||
|                     # Restore original state and delete assumed entrances | ||||
|                     for entrance in self.get_shuffled_entrances(): | ||||
|                         if entrance.connected_region is not None: | ||||
|                             entrance.disconnect() | ||||
|                         entrance.connect(self.world.get_region(entrance.vanilla_connected_region, self.player)) | ||||
|                         if entrance.assumed: | ||||
|                             assumed_entrance = entrance.assumed | ||||
|  | @ -894,14 +896,29 @@ class OOTWorld(World): | |||
|             if len(entrance) > 2: | ||||
|                 hint_entrances.add(entrance[2][0]) | ||||
| 
 | ||||
|         # Get main hint entrance to region. | ||||
|         # If the region is directly adjacent to a hint-entrance, we return that one. | ||||
|         # If it's in a dungeon, scan all the entrances for all the regions in the dungeon. | ||||
|         #   This should terminate on the first region anyway, but we scan everything to be safe. | ||||
|         # If it's one of the special cases, go one level deeper. | ||||
|         # Otherwise return None. | ||||
|         def get_entrance_to_region(region): | ||||
|             if region.name == 'Root': | ||||
|                 return None | ||||
|             special_case_regions = { | ||||
|                 "Beyond Door of Time", | ||||
|                 "Kak Impas House Near Cow", | ||||
|             } | ||||
| 
 | ||||
|             for entrance in region.entrances: | ||||
|                 if entrance.name in hint_entrances: | ||||
|                     return entrance | ||||
|             for entrance in region.entrances: | ||||
|                 return get_entrance_to_region(entrance.parent_region) | ||||
|             if region.dungeon is not None: | ||||
|                 for r in region.dungeon.regions: | ||||
|                     for e in r.entrances: | ||||
|                         if e.name in hint_entrances: | ||||
|                             return e | ||||
|             if region.name in special_case_regions: | ||||
|                 return get_entrance_to_region(region.entrances[0].parent_region) | ||||
|             return None | ||||
| 
 | ||||
|         # Remove undesired items from start_inventory | ||||
|         for item_name in self.remove_from_start_inventory: | ||||
|  | @ -916,6 +933,8 @@ class OOTWorld(World): | |||
|         if self.shuffle_interior_entrances != 'off' or self.shuffle_dungeon_entrances or self.shuffle_grotto_entrances: | ||||
|             er_hint_data = {} | ||||
|             for region in self.regions: | ||||
|                 if not any(bool(loc.address) for loc in region.locations): # check if region has any non-event locations | ||||
|                     continue | ||||
|                 main_entrance = get_entrance_to_region(region) | ||||
|                 if main_entrance is not None and main_entrance.shuffled: | ||||
|                     for location in region.locations: | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue