Core: add generic interface to add ER data to hints (#1014)
This commit is contained in:
		| @@ -240,6 +240,11 @@ class World(metaclass=AutoWorldRegister): | ||||
|         """Fill in the slot_data field in the Connected network package.""" | ||||
|         return {} | ||||
|  | ||||
|     def extend_hint_information(self, hint_data: Dict[int, Dict[int, str]]): | ||||
|         """Fill in additional entrance information text into locations, which is displayed when hinted. | ||||
|         structure is {player_id: {location_id: text}} You will need to insert your own player_id.""" | ||||
|         pass | ||||
|  | ||||
|     def modify_multidata(self, multidata: Dict[str, Any]) -> None:  # TODO: TypedDict for multidata? | ||||
|         """For deeper modification of server multidata.""" | ||||
|         pass | ||||
|   | ||||
| @@ -4,6 +4,10 @@ import typing | ||||
| from BaseClasses import Region, Entrance, RegionType | ||||
|  | ||||
|  | ||||
| def is_main_entrance(entrance: Entrance) -> bool: | ||||
|     return entrance.parent_region.type in {RegionType.DarkWorld, RegionType.LightWorld, RegionType.Generic} | ||||
|  | ||||
|  | ||||
| def create_regions(world, player): | ||||
|  | ||||
|     world.regions += [ | ||||
|   | ||||
| @@ -12,7 +12,8 @@ from .InvertedRegions import create_inverted_regions, mark_dark_world_regions | ||||
| from .ItemPool import generate_itempool, difficulties | ||||
| from .Items import item_init_table, item_name_groups, item_table, GetBeemizerItem | ||||
| from .Options import alttp_options, smallkey_shuffle | ||||
| from .Regions import lookup_name_to_id, create_regions, mark_light_world_regions | ||||
| from .Regions import lookup_name_to_id, create_regions, mark_light_world_regions, lookup_vanilla_location_to_entrance, \ | ||||
|     is_main_entrance | ||||
| from .Rom import LocalRom, patch_rom, patch_race_rom, check_enemizer, patch_enemizer, apply_rom_settings, \ | ||||
|     get_hash_string, get_base_rom_path, LttPDeltaPatch | ||||
| from .Rules import set_rules | ||||
| @@ -24,6 +25,7 @@ lttp_logger = logging.getLogger("A Link to the Past") | ||||
|  | ||||
| extras_list = sum(difficulties['normal'].extras[0:5], []) | ||||
|  | ||||
|  | ||||
| class ALTTPWeb(WebWorld): | ||||
|     setup_en = Tutorial( | ||||
|         "Multiworld Setup Tutorial", | ||||
| @@ -410,6 +412,20 @@ class ALTTPWorld(World): | ||||
|         finally: | ||||
|             self.rom_name_available_event.set() # make sure threading continues and errors are collected | ||||
|  | ||||
|     @classmethod | ||||
|     def stage_extend_hint_information(cls, world, hint_data: typing.Dict[int, typing.Dict[int, str]]): | ||||
|         er_hint_data = {player: {} for player in world.get_game_players("A Link to the Past") if | ||||
|                         world.shuffle[player] != "vanilla" or world.retro_caves[player]} | ||||
|  | ||||
|         for region in world.regions: | ||||
|             if region.player in er_hint_data and region.locations: | ||||
|                 main_entrance = region.get_connecting_entrance(is_main_entrance) | ||||
|                 for location in region.locations: | ||||
|                     if type(location.address) == int:  # skips events and crystals | ||||
|                         if lookup_vanilla_location_to_entrance[location.address] != main_entrance.name: | ||||
|                             er_hint_data[region.player][location.address] = main_entrance.name | ||||
|         hint_data.update(er_hint_data) | ||||
|  | ||||
|     def modify_multidata(self, multidata: dict): | ||||
|         import base64 | ||||
|         # wait for self.rom_name to be available. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Fabian Dill
					Fabian Dill