gameboy_worlds.emulation.registry

Keeps a record of:

  • Available games
  • Expected save file names for each game
  • Strongest available State Parsers for each game
  • Available State Trackers for each game, with string identifiers and a default tracker for each game
  • Available Emulators for each game, with string identifiers and a default emulator for each game

Provides methods to access these.

  1"""
  2Keeps a record of:
  3- Available games
  4- Expected save file names for each game
  5- Strongest available `State Parser`s for each game
  6- Available `State Tracker`s for each game, with string identifiers and a default tracker for each game
  7- Available `Emulator`s for each game, with string identifiers and a default emulator for each game
  8
  9Provides methods to access these.
 10"""
 11
 12from gameboy_worlds.utils import (
 13    log_error,
 14    load_parameters,
 15    log_warn,
 16    get_benchmark_tasks,
 17)
 18import os
 19from typing import Optional, Union, Type, Dict
 20from gameboy_worlds.emulation.parser import StateParser, DummyParser
 21from gameboy_worlds.emulation.tracker import StateTracker
 22from gameboy_worlds.emulation.emulator import Emulator
 23
 24from gameboy_worlds.emulation.pokemon import registry as pokemon_registry
 25from gameboy_worlds.emulation.legend_of_zelda import (
 26    registry as legend_of_zelda_registry,
 27)
 28from gameboy_worlds.emulation.hamtaro import registry as hamtaro_registry
 29from gameboy_worlds.emulation.sword_of_hope import registry as sword_of_hope_registry
 30from gameboy_worlds.emulation.deja_vu import registry as deja_vu_registry
 31from gameboy_worlds.emulation.harvest_moon import registry as harvest_moon_registry
 32from gameboy_worlds.emulation.runes_of_virtue import registry as runes_of_virtue_registry
 33from gameboy_worlds.emulation.harry_potter import registry as harry_potter_registry
 34from gameboy_worlds.emulation.bomberman import registry as bomberman_registry
 35from gameboy_worlds.emulation.survival_kids import registry as survival_kids_registry
 36
 37_game_registries = [
 38    hamtaro_registry,
 39    pokemon_registry,
 40    legend_of_zelda_registry,
 41    sword_of_hope_registry,
 42    deja_vu_registry,
 43    harvest_moon_registry,
 44    survival_kids_registry,
 45    runes_of_virtue_registry,
 46    harry_potter_registry,
 47    bomberman_registry,
 48]
 49
 50_project_parameters = load_parameters()
 51
 52
 53def _merge_into_dict(destination: dict, incoming: dict):
 54    """
 55    Merges incoming into destination, throwing an error if there are any overlapping keys.
 56
 57    Args:
 58        destination (dict): The destination dictionary.
 59        incoming (dict): The incoming dictionary.
 60
 61    Returns:
 62        dict: The merged dictionary.
 63    """
 64    for key in incoming:
 65        if key in destination:
 66            log_error(
 67                f"Duplicate key '{key}' found when merging dictionaries. This likely means there is a duplicate entry for '{key}' in the registry. Please check the registry for duplicates and remove them.\nDictionaries being merged:\nDestination: {destination}\nIncoming: {incoming}",
 68                _project_parameters,
 69            )
 70    destination.update(incoming)
 71
 72
 73GAME_TO_GB_NAME: Dict[str, str] = {}
 74""" Expected save name for each game. Save the file to <storage_dir_from_config_file>/<game_name>_rom_data/<gb_name>"""
 75
 76_STRONGEST_PARSERS: Dict[str, Type[StateParser]] = {}
 77""" Mapping of game names to their corresponding strongest StateParser classes. 
 78Unless you have a very good reason, you should always use the STRONGEST possible parser for a given game. 
 79The parser itself does not affect performance, as for it to perform a read / screen comparison operation , it must be called upon by the state tracker.
 80This means there is never a reason to use a weaker parser. 
 81"""
 82
 83AVAILABLE_STATE_TRACKERS: Dict[str, Dict[str, Type[StateTracker]]] = {}
 84""" Mapping of game names to their available StateTracker classes with string identifiers. """
 85
 86AVAILABLE_EMULATORS: Dict[str, Dict[str, Type[Emulator]]] = {}
 87""" Mapping of game names to their available Emulator classes with string identifiers. """
 88
 89for module in _game_registries:
 90    if hasattr(module, "GAME_TO_GB_NAME"):
 91        _merge_into_dict(GAME_TO_GB_NAME, module.GAME_TO_GB_NAME)
 92    else:
 93        log_error(
 94            f"Module '{module.__name__}' is missing the GAME_TO_GB_NAME mapping. ",
 95            _project_parameters,
 96        )
 97    if hasattr(module, "STRONGEST_PARSERS"):
 98        _merge_into_dict(_STRONGEST_PARSERS, module.STRONGEST_PARSERS)
 99    else:
100        log_error(
101            f"Module '{module.__name__}' is missing the STRONGEST_PARSERS mapping. This mapping is required for the registry to function properly.",
102            _project_parameters,
103        )
104    if hasattr(module, "AVAILABLE_STATE_TRACKERS"):
105        _merge_into_dict(AVAILABLE_STATE_TRACKERS, module.AVAILABLE_STATE_TRACKERS)
106    else:
107        log_error(
108            f"Module '{module.__name__}' is missing the AVAILABLE_STATE_TRACKERS mapping. This mapping is required for the registry to function properly.",
109            _project_parameters,
110        )
111    if hasattr(module, "AVAILABLE_EMULATORS"):
112        _merge_into_dict(AVAILABLE_EMULATORS, module.AVAILABLE_EMULATORS)
113    else:
114        log_error(
115            f"Module '{module.__name__}' is missing the AVAILABLE_EMULATORS mapping. This mapping is required for the registry to function properly.",
116            _project_parameters,
117        )
118
119
120for game in AVAILABLE_STATE_TRACKERS:
121    if "default" not in AVAILABLE_STATE_TRACKERS[game]:
122        log_error(
123            f"Game '{game}' is missing a default StateTracker mapping in the registry.",
124            _project_parameters,
125        )
126
127for game in AVAILABLE_EMULATORS:
128    if "default" not in AVAILABLE_EMULATORS[game]:
129        log_error(
130            f"Game '{game}' is missing a default Emulator mapping in the registry.",
131            _project_parameters,
132        )
133
134AVAILABLE_GAMES = list(GAME_TO_GB_NAME.keys())
135""" List of available games. """
136
137for game in AVAILABLE_GAMES:
138    if game not in _STRONGEST_PARSERS:
139        if _project_parameters["debug_mode"]:
140            log_warn(
141                f"Warning: Game '{game}' is missing a strongest StateParser mapping in the registry.",
142                _project_parameters,
143            )
144        else:
145            log_error(
146                f"Game '{game}' is missing a strongest StateParser mapping in the registry.",
147                _project_parameters,
148            )
149    if game not in AVAILABLE_STATE_TRACKERS:
150        if _project_parameters["debug_mode"]:
151            log_warn(
152                f"Warning: Game '{game}' is missing a StateTracker mapping in the registry.",
153                _project_parameters,
154            )
155        else:
156            log_error(
157                f"Game '{game}' is missing a StateTracker mapping in the registry.",
158                _project_parameters,
159            )
160    if game not in AVAILABLE_EMULATORS:
161        if _project_parameters["debug_mode"]:
162            log_warn(
163                f"Warning: Game '{game}' is missing an Emulator mapping in the registry.",
164                _project_parameters,
165            )
166        else:
167            log_error(
168                f"Game '{game}' is missing an Emulator mapping in the registry.",
169                _project_parameters,
170            )
171
172
173def infer_game(game: str, parameters: dict = None) -> str:
174    """
175    Try to infer the proper string identifier for a game given a possibly similar user input
176
177    Example Usage:
178    ```python
179    inferred_game = infer_game("pokemon red", parameters)
180    print(inferred_game)  # Output: "pokemon_red"
181    ```
182    Args:
183        game (str): The game variant name to infer.
184        parameters (dict): Additional parameters for logging.
185
186    Returns:
187        str: The inferred variant name.
188    """
189    parameters = load_parameters(parameters)
190    game = game.strip().lower()
191    game = game.replace(" ", "_").replace("-", "_")
192    if game in AVAILABLE_GAMES:
193        return game
194    else:
195        log_error(
196            f"Could not infer game from '{game}'. Available games are: {AVAILABLE_GAMES}",
197            parameters,
198        )
199
200
201def get_state_parser_class(
202    game: str, parameters: Optional[dict] = None
203) -> Type[StateParser]:
204    """
205    Factory method to get the strongest available StateParser class for a given game.
206
207    Args:
208        game (str): The game variant name (e.g., `pokemon_red`).
209        parameters (dict, optional): Additional parameters for logging.
210    Returns:
211        Type[StateParser]: The StateParser class for the specified game.
212    """
213    parameters = load_parameters(parameters)
214    game = infer_game(game, parameters=parameters)
215    state_parser_class = _STRONGEST_PARSERS.get(game, None)
216    if state_parser_class is None:
217        log_error(
218            f"There is no StateParser for game '{game}' in the registry.", parameters
219        )
220    return state_parser_class
221
222
223def get_state_tracker_class(
224    game: str,
225    tracker_variant: Union[str, Type[StateTracker]] = "default",
226    parameters: Optional[dict] = None,
227) -> Type[StateTracker]:
228    """
229    Factory method to get a StateTracker class for a given game and tracker variant.
230    Args:
231        game (str): The game variant name (e.g., `pokemon_red`).
232        tracker_variant (Union[str, Type[StateTracker]]): The variant of the state tracker to use. Can either be a StateTracker class (in which case it is returned directly), or a string identifier for the tracker variant (e.g., `default`).
233        parameters (dict, optional): Additional parameters for logging.
234
235    Returns:
236        Type[StateTracker]: The StateTracker class for the specified game and variant.
237    """
238    parameters = load_parameters(parameters)
239    game = infer_game(game, parameters=parameters)
240    available_trackers = AVAILABLE_STATE_TRACKERS.get(game, None)
241    if available_trackers is None:
242        log_error(
243            f"There are no available StateTrackers for game '{game}' in the registry.",
244            parameters,
245        )
246    if isinstance(tracker_variant, str):
247        if tracker_variant not in available_trackers:
248            log_error(
249                f"StateTracker variant '{tracker_variant}' is not available for game '{game}'. Available variants are: {list(available_trackers.keys())}",
250                parameters,
251            )
252        return available_trackers[tracker_variant]
253    elif issubclass(tracker_variant, StateTracker):
254        # just verify that the tracker is available for this game
255        if tracker_variant not in available_trackers.values():
256            log_error(
257                f"StateTracker class '{tracker_variant.__name__}' is not registered as an allowed tracker for game '{game}'. Available variants are: {list(available_trackers.keys())}",
258                parameters,
259            )
260        return tracker_variant
261    else:
262        log_error(
263            f"tracker_variant must either be a string identifier or a StateTracker class. Got '{type(tracker_variant)}' instead.",
264            parameters,
265        )
266
267
268def get_emulator_class(
269    game: str,
270    emulator_variant: Union[str, Type[Emulator]] = "default",
271    parameters: Optional[dict] = None,
272) -> Type[Emulator]:
273    """
274    Factory method to get an Emulator class for a given game and emulator variant.
275
276    Args:
277        game (str): The game variant name (e.g., `pokemon_red`).
278        emulator_variant (Union[str, Type[Emulator]]): The variant of the emulator to use. Can either be an Emulator class (in which case it is returned directly), or a string identifier for the emulator variant (e.g., `default`).
279        parameters (dict, optional): Additional parameters for logging.
280
281    Returns:
282        Type[Emulator]: The Emulator class for the specified game and variant.
283    """
284    parameters = load_parameters(parameters)
285    game = infer_game(game, parameters=parameters)
286    available_emulators = AVAILABLE_EMULATORS.get(game, None)
287    if available_emulators is None:
288        log_error(
289            f"There are no available Emulators for game '{game}' in the registry.",
290            parameters,
291        )
292    if isinstance(emulator_variant, str):
293        if emulator_variant not in available_emulators:
294            log_error(
295                f"Emulator variant '{emulator_variant}' is not available for game '{game}'. Available variants are: {list(available_emulators.keys())}",
296                parameters,
297            )
298        return available_emulators[emulator_variant]
299    elif issubclass(emulator_variant, Emulator):
300        # just verify that the emulator is available for this game
301        if emulator_variant not in available_emulators.values():
302            log_error(
303                f"Emulator class '{emulator_variant.__name__}' is not registered as an allowed emulator for game '{game}'. Available variants are: {list(available_emulators.keys())}",
304                parameters,
305            )
306        return emulator_variant
307    else:
308        log_error(
309            f"emulator_variant must either be a string identifier or an Emulator class. Got '{type(emulator_variant)}' instead.",
310            parameters,
311        )
312
313
314def get_emulator(
315    game: str,
316    *,
317    parameters: Optional[dict] = None,
318    init_state: str = None,
319    state_tracker_class: Union[str, Type[StateTracker]] = "default",
320    **emulator_kwargs,
321) -> Emulator:
322    """
323    Factory method to get a Pokemon emulator instance based on the specified variant.
324    Args:
325        game (str): The variant of the Pokemon game (e.g., `pokemon_red`, `pokemon_crystal`).
326        parameters (dict, optional): Additional parameters for emulator configuration.
327        init_state_name (str, optional): Name of the initial state file to load (not the path).
328        state_tracker_class (Union[str, Type[StateTracker]]): The string identifier variant of the state tracker to use, or the class itself.
329        **emulator_kwargs: Additional keyword arguments to pass to the `Emulator` constructor (e.g. `headless`)
330    Returns:
331        Emulator: An instance of the Emulator class configured for the specified variant.
332    """
333    parameters = load_parameters(parameters)
334    game = infer_game(game, parameters=parameters)
335    if f"{game}_rom_data_path" not in parameters:
336        log_error(
337            f"ROM data path for game '{game}' is not specified in the parameters under key '{game}_rom_data_path'.",
338            parameters,
339        )
340    gb_path = parameters[f"{game}_rom_data_path"] + "/" + GAME_TO_GB_NAME[game]
341    if init_state is not None:
342        if not init_state.endswith(".state"):
343            init_state = init_state + ".state"
344        init_state = parameters[f"{game}_rom_data_path"] + "/states/" + init_state
345    else:
346        init_state = parameters[f"{game}_rom_data_path"] + "/states/default.state"
347    state_parser_class = get_state_parser_class(game, parameters=parameters)
348    state_tracker_class: Type[StateTracker] = get_state_tracker_class(
349        game, tracker_variant=state_tracker_class, parameters=parameters
350    )
351    emulator_class = get_emulator_class(game, parameters=parameters)
352    emulator = emulator_class(
353        game=game,
354        gb_path=gb_path,
355        init_state=init_state,
356        state_parser_class=state_parser_class,
357        state_tracker_class=state_tracker_class,
358        parameters=parameters,
359        **emulator_kwargs,
360    )
361    return emulator
362
363
364def get_available_init_states(game: str, parameters: Optional[dict] = None) -> list:
365    """
366    Returns a list of available initial state names for the specified game.
367
368    Args:
369        game (str): The variant of the Pokemon game (e.g., `pokemon_red`, `pokemon_crystal`).
370        parameters (dict, optional): Additional parameters for configuration.
371
372    Returns:
373        list: A list of available initial state names (without .state extension).
374    """
375    parameters = load_parameters(parameters)
376    game = infer_game(game, parameters=parameters)
377    if f"{game}_rom_data_path" not in parameters:
378        log_error(
379            f"ROM data path for game '{game}' is not specified in the parameters under key '{game}_rom_data_path'.",
380            parameters,
381        )
382    states_dir = parameters[f"{game}_rom_data_path"] + "/states/"
383    if not os.path.exists(states_dir):
384        log_error(
385            f"States directory '{states_dir}' does not exist for game '{game}'.",
386            parameters,
387        )
388    state_names = [
389        f.replace(".state", "") for f in os.listdir(states_dir) if f.endswith(".state")
390    ]
391    return state_names
392
393
394def get_train_init_states(game: str, parameters: Optional[dict] = None) -> list:
395    """
396    Returns a list of allowed initial states for training agents to play the specified game.
397    This is determined based on the benchmark tasks specified for the game - any state that is a test state for a benchmark task is disallowed as a training initial state.
398
399    Args:
400        game (str): The variant of the Pokemon game (e.g., `pokemon_red`, `pokemon_crystal`).
401        parameters (dict, optional): Additional parameters for configuration.
402
403    Returns:
404        list: A list of available initial state names (without .state extension) that can be used for training.
405    """
406    parameters = load_parameters(parameters)
407    benchmark_tasks_df = get_benchmark_tasks(game, parameters=parameters)
408    test_init_states = benchmark_tasks_df["init_state"].unique().tolist()
409    other_disallowed_states = []
410    for i, row in benchmark_tasks_df.iterrows():
411        others = row["other_disallowed_states"]
412        if others and isinstance(others, str):
413            other_disallowed_states.extend(others.split(","))
414    test_init_states.extend(other_disallowed_states)
415    test_init_states = list(set(test_init_states))
416    available_init_states = get_available_init_states(game, parameters=parameters)
417    train_init_states = []
418    for state in available_init_states:
419        if (
420            state in test_init_states
421            or state.startswith("test_")
422            or "_test_" in state
423            or state.endswith("_test")
424            or state == "test"
425        ):
426            continue
427        train_init_states.append(state)
428    if len(train_init_states) == 0:
429        if parameters["debug_mode"]:
430            log_warn(
431                f"No available training initial states found for game '{game}' after filtering out test states. Returning all available initial states for now, but you should add some training states that are not used as test states or other_disallowed_states in the benchmark tasks.",
432                parameters,
433            )
434            return available_init_states
435        else:
436            log_error(
437                f"No available training initial states found for game '{game}' after filtering out test states. Please ensure that there are some initial states available for training that are not used as test states or other_disallowed_states in the benchmark tasks.",
438                parameters,
439            )
440    return train_init_states
GAME_TO_GB_NAME: Dict[str, str] = {'hamtaro_ham_hams_unite': 'Hamtaro - Ham-Hams Unite! (USA).gbc', 'pokemon_red': 'PokemonRed.gb', 'pokemon_brown': 'PokemonBrown.gb', 'pokemon_starbeasts': 'PokemonStarBeasts.gb', 'pokemon_starbeasts_comet': 'PokemonStarBeastsComet.gb', 'pokemon_crystal': 'PokemonCrystal.gbc', 'pokemon_fools_gold': 'PokemonFoolsGold.gbc', 'pokemon_prism': 'PokemonPrism.gbc', 'legend_of_zelda_links_awakening': 'LegendOfZeldaLinksAwakening.gbc', 'legend_of_zelda_the_oracle_of_seasons': 'LegendOfZeldaTheOracleOfSeasons.gbc', 'sword_of_hope_1': 'SwordofHope.gb', 'sword_of_hope_2': 'SwordofHope2.gb', 'deja_vu_1': 'DejaVu.gbc', 'deja_vu_2': 'DejaVu.gbc', 'harvest_moon_1': 'HarvestMoon1.gbc', 'harvest_moon_2': 'HarvestMoon2.gbc', 'harvest_moon_3': 'HarvestMoon3.gbc', 'survival_kids_1': 'SurvivalKids.gbc', 'survival_kids_2': 'SurvivalKids2CN.gbc', 'runes_of_virtue_1': 'RunesOfVirtue1.gb', 'runes_of_virtue_2': 'RunesOfVirtue2.gb', 'harry_potter_philosophers_stone': 'HarryPotterPhilosophersStone.gbc', 'harry_potter_chamber_of_secrets': 'HarryPotterChamberOfSecrets.gbc', 'bomberman_max': 'BombermanMax.gbc', 'bomberman_pocket': 'BombermanPocket.gbc', 'bomberman_quest': 'BombermanQuest.gbc'}

Expected save name for each game. Save the file to /_rom_data/

AVAILABLE_STATE_TRACKERS: Dict[str, Dict[str, Type[gameboy_worlds.emulation.tracker.StateTracker]]] = {'hamtaro_ham_hams_unite': {'default': <class 'gameboy_worlds.emulation.hamtaro.trackers.HamtaroTracker'>}, 'pokemon_red': {'default': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonOCRTracker'>, 'starter_example': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonRedStarterTracker'>, 'viridian_center_test': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonRedCenterTestTracker'>, 'mt_moon_test': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonRedMtMoonTestTracker'>, 'speak_to_bill_test': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonRedSpeakToBillTestTracker'>, 'pickup_pokeball_test': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonRedPickupPokeballTestTracker'>, 'read_trainers_tips_sign_test': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonRedReadTrainersTipsSignTestTracker'>, 'speak_to_cinnabar_gym_aide_complete_test': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonRedSpeakToCinnabarGymAideCompleteTestTracker'>, 'speak_to_cinnabar_monk_test': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonRedSpeakToCinnabarMonkTestTracker'>, 'defeated_brock_test': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonRedDefeatedBrockTestTracker'>, 'defeated_lass_test': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonRedDefeatedLassTestTracker'>, 'caught_pidgey_test': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonRedCaughtPidgeyTestTracker'>, 'caught_pikachu_test': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonRedCaughtPikachuTestTracker'>, 'bought_potion_at_pewter_pokemart_test': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonRedBoughtPotionAtPewterPokemartTestTracker'>, 'used_potion_on_charmander_test': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonRedUsedPotionOnCharmanderTestTracker'>, 'open_map_test': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonRedOpenMapTestTracker'>}, 'pokemon_brown': {'default': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonOCRTracker'>}, 'pokemon_crystal': {'default': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonOCRTracker'>}, 'pokemon_starbeasts': {'default': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonOCRTracker'>}, 'pokemon_starbeasts_comet': {'default': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonOCRTracker'>}, 'pokemon_fools_gold': {'default': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonOCRTracker'>}, 'pokemon_prism': {'default': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonOCRTracker'>, 'first_badge_test': <class 'gameboy_worlds.emulation.pokemon.trackers.PokemonPrismFirstBadgeTestTracker'>}, 'legend_of_zelda_links_awakening': {'default': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.LegendOfZeldaOCRTracker'>, 'pickup_sword_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningOwlTestTracker'>, 'shield_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningShieldTestTracker'>, 'outside_tarinhouse_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningOutsideTarinHouseTestTracker'>, 'open_inventory_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningOpenInventoryTestTracker'>, 'weapon': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningWeaponTestTracker'>, 'inventory_weapon_equip': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningInventoryWeaponEquipTestTracker'>, 'talk_to_kid_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningTalkToKidTestTracker'>, 'statue_talk_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningStatueTalkTestTracker'>, 'read_signboard_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningReadSignboardTestTracker'>, 'go_inside_shop_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningGoInsideShopTestTracker'>, 'make_call_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningMakeCallTestTracker'>, 'enter_dark_forest_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningEnterDarkForestTestTracker'>, 'inside_tunnel_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningInsideTunnelTestTracker'>, 'open_chest_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningOpenChestTestTracker'>, 'chest_opener_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningChestOpenerTestTracker'>, 'heart_take_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningHeartTakeTestTracker'>, 'shroom_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningShroomTakeTestTracker'>, 'shroom_sword_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningShroomSwordTestTracker'>, 'shroom_shield_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningShroomShieldTestTracker'>, 'sign_checker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningSignCheckerTestTracker'>, 'water_checker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningWaterCheckerTestTracker'>, 'make_call_2_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningMakeCall2TestTracker'>, 'skeleton_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningSkeletonTestTracker'>, 'underground_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningUndergroundTestTracker'>, 'kid_talk_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningKidTalkTestTracker'>, 'inside_house_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningInsideHouseTestTracker'>, 'pot_room_test': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningPotRoomTestTracker'>, 'pond_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningPondTestTracker'>, 'weird_tunnel_inside_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningWeirdTunnelInsideTestTracker'>, 'witch_talk_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningWitchTalkTestTracker'>, 'signboard_reader_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningSignboardReaderTestTracker'>, 'pineapple_screen_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningPineappleScreenTracker'>, 'call_booth_approach_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningCallBoothApproachTracker'>, 'granny_corner_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningGrannyCornerTracker'>, 'leave_bald_store_carpet_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningLeaveBaldStoreCarpetTracker'>, 'leave_track_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningLeaveTrackTracker'>, 'exit_fat_house_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningExitFatHouseTracker'>, 'booth_house_up_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningBoothHouseUpTracker'>, 'chick_house_block_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningChickHouseBlockTracker'>, 'purplestone_stairs_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningPurplestoneStairsTracker'>, 'heavy_stone_push_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningHeavyStonePushTracker'>, 'boy_dialogue_exit_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningBoyDialogueExitTracker'>, 'dirt_patch_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningDirtPatchTracker'>, 'dirt_patch_two_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningDirtPatchTwoTracker'>, 'stonehouse_right_tree_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningStonehouseRightTreeTracker'>, 'second_boy_dialogue_exit_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningSecondBoyDialogueExitTracker'>, 'railing_jump_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningRailingJumpTracker'>, 'palmt_jump_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningPalmtJumpTracker'>, 'monster_death_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningMonsterDeathTracker'>, 'tileslong_escape_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningTileslongEscapeTracker'>, 'board_sign_approach_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaLinksAwakeningBoardSignApproachTracker'>}, 'legend_of_zelda_the_oracle_of_seasons': {'default': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.LegendOfZeldaOCRTracker'>, 'other_people_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsOtherPeopleTracker'>, 'girl_talk_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsGirlTalkTracker'>, 'jumping_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsJumpingTracker'>, 'farmer_talk_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsFarmerTalkTracker'>, 'library_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsLibraryTracker'>, 'parrot_talk_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsParrotTalkTracker'>, 'fall_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsFallTracker'>, 'stairs_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsStairsTracker'>, 'signboard_read_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsSignboardReadTracker'>, 'shop_inside_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsShopInsideTracker'>, 'shop_person_talk_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsShopPersonTalkTracker'>, 'girl_house_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsGirlHouseTracker'>, 'pot_interaction_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsPotInteractionTracker'>, 'inside_tunnel_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsInsideTunnelTracker'>, 'artist_talk_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsArtistTalkTracker'>, 'chicken_house_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsChickenHouseTracker'>, 'jiggly_path_walk': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsJigglyPathWalkTracker'>, 'fairy_meet_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsFairyMeetTracker'>, 'thing_interaction_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsThingInteractionTracker'>, 'inventory_open_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsInventoryOpenTracker'>, 'sign_read_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsClockTowerSignReadTracker'>, 'near_stairs_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsNearStairsTracker'>, 'talk_to_girl_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsTalkToGirlTracker'>, 'pier_go_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsPierGoTracker'>, 'boardwalk_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsBoardwalkTracker'>, 'cat_check_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsCatCheckTracker'>, 'cat_talk_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsCatTalkTracker'>, 'owner_talk_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsOwnerTalkTracker'>, 'bridge_walk_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsBridgeWalkTracker'>, 'dog_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsDogTracker'>, 'mickey_left_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsMickeyLeftTracker'>, 'step_off_grass_block_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsStepOffGrassBlockTracker'>, 'shop_sign_path_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsShopSignPathTracker'>, 'clocks_up_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsClocksUpTracker'>, 'joystick_right_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsJoystickRightTracker'>, 'joystick_house_entry_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsJoystickHouseEntryTracker'>, 'approach_red_snake_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsApproachRedSnakeTracker'>, 'approach_blue_snake_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsApproachBlueSnakeTracker'>, 'red_snake_talk_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsRedSnakeTalkTracker'>, 'blue_snake_talk_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsBlueSnakeTalkTracker'>, 'blue_book_read_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsBlueBookReadTracker'>, 'red_book_read_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsRedBookReadTracker'>, 'lava_floor_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsLavaFloorTracker'>, 'step_off_track_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsStepOffTrackTracker'>, 'gloomy_place_left_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsGloomyPlaceLeftTracker'>, 'gameover_death_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsGameoverDeathTracker'>, 'leave_green_carpet_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsLeaveGreenCarpetTracker'>, 'holes_to_trunk_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsHolesToTrunkTracker'>, 'trunk_to_holes_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsTrunkToHolesTracker'>, 'left_of_trunk_tracker': <class 'gameboy_worlds.emulation.legend_of_zelda.trackers.ZeldaOracleOfSeasonsLeftOfTrunkTracker'>}, 'sword_of_hope_1': {'default': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHopeOCRTracker'>, 'mill_room_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1MillRoomTestTracker'>, 'shaman_room_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1ShamanRoomTestTracker'>, 'dialogue_clear_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1DialogueClearTestTracker'>, 'battle_won_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1BattleWonTestTracker'>, 'look_item_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1LookItemTestTracker'>, 'buy_item_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1BuyItemTestTracker'>, 'overworld_from_default_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1OverworldFromDefaultTestTracker'>, 'talk_to_npc_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1TalkToNpcTestTracker'>, 'menu_open_close_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1MenuOpenCloseTestTracker'>, 'battle_magic_command_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1BattleMagicCommandTestTracker'>, 'cast_teleport_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CastTeleportTestTracker'>, 'talk_to_npc_multiple_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1TalkToNpcMultipleTestTracker'>, 'binary_choice_save_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1BinaryChoiceSaveTestTracker'>, 'look_surround_herb_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1LookSurroundHerbTestTracker'>, 'defeat_treant_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1DefeatTreantTestTracker'>, 'use_key_unlock_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1UseKeyUnlockTestTracker'>, 'collect_scroll_grace_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CollectScrollGraceTestTracker'>, 'cast_grace_altar_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CastGraceAltarTestTracker'>, 'complete_teleport_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CompleteTeleportTestTracker'>, 'escape_battle_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1EscapeBattleTestTracker'>, 'cursor_on_look_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CursorOnLookTestTracker'>, 'cursor_on_open_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CursorOnOpenTestTracker'>, 'cursor_on_use_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CursorOnUseTestTracker'>, 'cursor_on_magic_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CursorOnMagicTestTracker'>, 'cursor_on_hit_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CursorOnHitTestTracker'>, 'cursor_on_power_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CursorOnPowerTestTracker'>, 'cycle_through_commands_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CycleThroughCommandsTestTracker'>, 'open_status_view_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1OpenStatusViewTestTracker'>, 'auto_battle_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1AutoBattleTestTracker'>, 'shop_menu_open_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1ShopMenuOpenTestTracker'>, 'look_command_select_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1LookCommandSelectTestTracker'>, 'menu_open_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1MenuOpenTestTracker'>, 'magic_menu_open_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1MagicMenuOpenTestTracker'>, 'dialogue_initiated_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1DialogueInitiatedTestTracker'>, 'cancel_magic_menu_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CancelMagicMenuTestTracker'>, 'cancel_power_menu_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CancelPowerMenuTestTracker'>, 'cancel_teleport_menu_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CancelTeleportMenuTestTracker'>, 'cancel_shop_menu_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CancelShopMenuTestTracker'>, 'cancel_look_options_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CancelLookOptionsTestTracker'>, 'battle_magic_cancel_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1BattleMagicCancelTestTracker'>, 'cycle_back_to_look_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CycleBackToLookTestTracker'>, 'cycle_to_power_via_magic_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CycleToPowerViaMagicTestTracker'>, 'cursor_on_firebal_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CursorOnFirebalTestTracker'>, 'cursor_on_firebal2_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CursorOnFirebal2TestTracker'>, 'cursor_on_stripall_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CursorOnStripallTestTracker'>, 'cursor_on_teleport_oldman_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CursorOnTeleportOldmanTestTracker'>, 'cursor_on_herb_use_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CursorOnHerbUseTestTracker'>, 'cursor_on_keym_use_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1CursorOnKeymUseTestTracker'>, 'battle_stripall_cancel_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1BattleStripallCancelTestTracker'>, 'view_power_then_teleport_oldman_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope1ViewPowerThenTeleportOldmanTestTracker'>}, 'sword_of_hope_2': {'default': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHopeOCRTracker'>, 'dialogue_clear_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2DialogueClearTestTracker'>, 'talk_to_npc_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2TalkToNpcTestTracker'>, 'menu_open_close_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2MenuOpenCloseTestTracker'>, 'first_adjacent_room_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2FirstAdjacentRoomTestTracker'>, 'overworld_from_default_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2OverworldFromDefaultTestTracker'>, 'battle_won_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2BattleWonTestTracker'>, 'escape_battle_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2EscapeBattleTestTracker'>, 'open_shop_menu_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2OpenShopMenuTestTracker'>, 'buy_wheat_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2BuyWheatTestTracker'>, 'battle_magic_command_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2BattleMagicCommandTestTracker'>, 'cast_motion_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CastMotionTestTracker'>, 'buy_cpr_sword_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2BuyCprSwordTestTracker'>, 'auto_battle_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2AutoBattleTestTracker'>, 'hit_tree_wheat_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2HitTreeWheatTestTracker'>, 'open_item_menu_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2OpenItemMenuTestTracker'>, 'use_wheat_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2UseWheatTestTracker'>, 'view_exp_needed_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2ViewExpNeededTestTracker'>, 'cursor_on_look_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CursorOnLookTestTracker'>, 'cursor_on_item_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CursorOnItemTestTracker'>, 'cursor_on_open_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CursorOnOpenTestTracker'>, 'cursor_on_magic_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CursorOnMagicTestTracker'>, 'cursor_on_hit_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CursorOnHitTestTracker'>, 'cycle_through_commands_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CycleThroughCommandsTestTracker'>, 'cursor_on_power_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CursorOnPowerTestTracker'>, 'power_first_page_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2PowerFirstPageTestTracker'>, 'open_magic_menu_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2OpenMagicMenuTestTracker'>, 'open_item_view_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2OpenItemViewTestTracker'>, 'look_shopkeeper_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2LookShopkeeperTestTracker'>, 'open_weapons_shop_buy_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2OpenWeaponsShopBuyTestTracker'>, 'cursor_on_cpr_sword_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CursorOnCprSwordTestTracker'>, 'open_use_menu_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2OpenUseMenuTestTracker'>, 'open_shop_buy_sell_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2OpenShopBuySellTestTracker'>, 'cursor_on_wheat_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CursorOnWheatTestTracker'>, 'battle_clash_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2BattleClashTestTracker'>, 'enter_temple_first_floor_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2EnterTempleFirstFloorTestTracker'>, 'cancel_magic_menu_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CancelMagicMenuTestTracker'>, 'cancel_item_menu_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CancelItemMenuTestTracker'>, 'cancel_shop_menu_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CancelShopMenuTestTracker'>, 'cancel_weapons_shop_buy_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CancelWeaponsShopBuyTestTracker'>, 'cancel_look_shopkeeper_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CancelLookShopkeeperTestTracker'>, 'auto_to_clash_battle_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2AutoToClashBattleTestTracker'>, 'clash_to_auto_battle_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2ClashToAutoBattleTestTracker'>, 'cursor_on_motion_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CursorOnMotionTestTracker'>, 'cursor_on_shop_first_item_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CursorOnShopFirstItemTestTracker'>, 'cursor_on_shop_third_item_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CursorOnShopThirdItemTestTracker'>, 'cursor_on_first_weapon_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CursorOnFirstWeaponTestTracker'>, 'cursor_on_second_weapon_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CursorOnSecondWeaponTestTracker'>, 'cursor_on_third_weapon_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2CursorOnThirdWeaponTestTracker'>, 'look_tree_target_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2LookTreeTargetTestTracker'>, 'view_power_then_cast_motion_test': <class 'gameboy_worlds.emulation.sword_of_hope.trackers.SwordOfHope2ViewPowerThenCastMotionTestTracker'>}, 'deja_vu_1': {'default': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVuOCRTracker'>, 'take_coat_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1CoatTestTracker'>, 'take_gun_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1TakeGunTestTracker'>, 'open_door_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1OpenDoorTestTracker'>, 'close_door_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1CloseDoorTestTracker'>, 'open_pocket_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1OpenPocketTestTracker'>, 'open_wallet_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1OpenWalletTestTracker'>, 'close_pocket_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1ClosePocketTestTracker'>, 'close_wallet_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1CloseWalletTestTracker'>, 'check_coat_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1CheckCoatTestTracker'>, 'check_gun_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1CheckGunTestTracker'>, 'hit_bottle_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1HitBottleTestTracker'>, 'open_spigot_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1OpenSpigotTestTracker'>, 'enter_cellar_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1EnterCellarTestTracker'>, 'enter_connecting_room_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1EnterConnectingRoomTestTracker'>, 'enter_empty_room_from_map_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1EnterEmptyRoomFromMapTestTracker'>, 'unlock_front_door_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1UnlockFrontDoorTestTracker'>, 'meet_mugger_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1MeetMuggerTestTracker'>, 'hit_mugger_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1HitMuggerTestTracker'>, 'unlock_car_door_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1UnlockCarDoorTestTracker'>, 'open_dashbrd_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1OpenDashbrdTestTracker'>, 'close_dashbrd_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1CloseDashbrdTestTracker'>, 'check_note2_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1CheckNote2TestTracker'>, 'check_map_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1CheckMapTestTracker'>, 'check_snapshot_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1CheckSnapshotTestTracker'>, 'go_newsstand_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1GoNewsstandTestTracker'>, 'enter_taxi_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1EnterTaxiTestTracker'>, 'talk_to_taxi_driver_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1TalkToTaxiDriverTestTracker'>, 'goto_westend_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1GotoWestendTestTracker'>, 'pay_taxi_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1PayTaxiTestTracker'>, 'goto_apartment_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1GotoApartmentTestTracker'>, 'enter_westend_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1EnterWestendTestTracker'>, 'open_elevator_door_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1OpenElevatorDoorTestTracker'>, 'enter_elevator_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1EnterElevatorTestTracker'>, 'close_elevator_door_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1CloseElevatorDoorTestTracker'>, 'check_photo_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1CheckPhotoTestTracker'>, 'shoot_door_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1ShootDoorTestTracker'>, 'open_desk_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1OpenDeskTestTracker'>, 'enter_sherman_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1EnterShermanTestTracker'>, 'goto_office_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1GotoOfficeTestTracker'>, 'unlock_office_door_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1UnlockOfficeDoorTestTracker'>, 'make_medicine_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1MakeMedicineTestTracker'>, 'take_medicine_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1TakeMedicineTestTracker'>, 'shoot_lock_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1ShootLockTestTracker'>, 'open_diary_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1OpenDiaryTestTracker'>, 'shoot_grimy_office_door_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1ShootGrimyOfficeDoorTestTracker'>, 'check_dead_man_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1CheckDeadManTestTracker'>, 'open_cabinet_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1OpenCabinetTestTracker'>, 'exit_grimy_office_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1ExitGrimyOfficeTestTracker'>, 'open_wall_safe_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1OpenWallSafeTestTracker'>, 'open_car_trunk_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu1OpenCarTrunkTestTracker'>}, 'deja_vu_2': {'default': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVuOCRTracker'>, 'open_trench_coat_pocket_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2OpenTrenchCoatTestTracker'>, 'open_bathroom_door_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2OpenBathroomDoorTestTracker'>, 'take_gum_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2TakeGumTestTracker'>, 'open_pants_pocket_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2OpenPantsPocketTestTracker'>, 'close_pants_pocket_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2ClosePantsPocketTestTracker'>, 'take_pants_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2TakePantsTestTracker'>, 'put_on_trench_coat_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2PutOnTrenchCoatTestTracker'>, 'put_on_pants_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2PutOnPantsTestTracker'>, 'open_wallet1_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2OpenWallet1TestTracker'>, 'take_newsclip1_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2TakeNewsclip1TestTracker'>, 'take_license1_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2TakeLicense1TestTracker'>, 'close_wallet1_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2CloseWallet1TestTracker'>, 'check_newsclip1_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2CheckNewsclip1TestTracker'>, 'take_ring1_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2TakeRing1TestTracker'>, 'open_door_from_map_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2OpenDoorFromMapTestTracker'>, 'close_door_from_map_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2CloseDoorFromMapTestTracker'>, 'enter_hallway_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2EnterHallwayTestTracker'>, 'buy_2_chips_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2Buy2ChipsTestTracker'>, 'return_cashier_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2ReturnToCashierTestTracker'>, 'cash_out_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2CashOutTestTracker'>, 'open_lobby_door_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2OpenLobbyDoorTestTracker'>, 'exit_casino_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2ExitCasinoTestTracker'>, 'talk_in_train_station_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2TalkInTrainStationTestTracker'>, 'visit_counter_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2VisitCounterTestTracker'>, 'check_timetable_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2CheckTimetableTestTracker'>, 'enter_platform_track6_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2EnterPlatformTestTracker'>, 'enter_train_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2EnterTrainTestTracker'>, 'buy_ticket_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2BuyTicketTestTracker'>, 'check_girl_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2CheckGirlTestTracker'>, 'check_sign_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2CheckSignTestTracker'>, 'chat_seller_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2ChatSellerTestTracker'>, 'buy_newspaper_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2BuyNewspaperTestTracker'>, 'take_newsclip4_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2TakeNewsclip4TestTracker'>, 'enter_chicago_taxi_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2EnterChicagoTaxiTestTracker'>, 'chat_taxi_driver_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2ChatTaxiDriverTestTracker'>, 'enter_middle_room_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2EnterMiddleRoomTestTracker'>, 'load_gun_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2LoadGunTestTracker'>, 'open_lock_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2OpenLockTestTracker'>, 'hit_board_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2HitBoardTestTracker'>, 'open_telephone_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2OpenTelephoneTestTracker'>, 'open_box_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2OpenBoxTestTracker'>, 'open_pocket_knife_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2OpenPocketKnifeTestTracker'>, 'open_door_by_knife': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2OpenDoorByKnifeTestTracker'>, 'put_on_flashlight_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2PutOnFlashlightTestTracker'>, 'enter_joe_place_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2EnterJoePlaceTestTracker'>, 'open_slot_lock_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2OpenSlotLockTestTracker'>, 'turn_off_flashlight_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2TurnOffFlashlightTestTracker'>, 'get_location_from_card_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2GetLocationFromCardTestTracker'>, 'open_bag_with_knife_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2OpenBagWithKnifeTestTracker'>, 'ask_about_nametag2_test': <class 'gameboy_worlds.emulation.deja_vu.trackers.DejaVu2AskAboutNametag2TestTracker'>}, 'harvest_moon_1': {'default': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonOCRTracker'>, 'cow_barn_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonCowBarnTracker'>, 'chicken_coop_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonChickenCoopTracker'>, 'storage_shed_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonStorageTracker'>, 'pickup_watercan_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonPickupWaterCanTracker'>, 'pickup_cowbell_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonPickupCowBellTracker'>, 'go_to_sleep_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonGoToSleepTracker'>, 'feed_spirit_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonFeedSpiritTracker'>, 'help_spirit_earthquake_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonHelpSpiritEarthquakeTracker'>, 'water_turnip_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonWaterTurnipTracker'>, 'buy_material_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonBuyMaterialTracker'>, 'buy_chicken_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonBuyChickenTracker'>, 'buy_cow_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonBuyCowTracker'>, 'sell_chicken_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonSellChickenTracker'>, 'buy_cow_brush_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonBuyCowBrushTracker'>, 'buy_saddlebag_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonBuySaddlebagTracker'>, 'buy_milker_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonBuyMilkerTracker'>, 'buy_rice_ball_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonBuyRiceBallTracker'>, 'open_storage_list_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonOpenStorageListTracker'>, 'find_rainy_money_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonFindRainyMoneyTracker'>, 'find_lost_bird_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonFindLostBirdTracker'>, 'speak_to_blue_hair_girl_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonSpeakToBlueHairGirlTracker'>, 'fill_chicken_fodder_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonFillChickenFodderTracker'>, 'pickup_sickle_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonPickupSickleTracker'>, 'pickup_hoe_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonPickupHoeTracker'>, 'pickup_hammer_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonPickupHammerTracker'>, 'pickup_grass_seed_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonPickupGrassSeedTracker'>, 'buy_croissant_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonBuyCroissantTracker'>, 'buy_cake_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonBuyCakeTracker'>, 'buy_grape_juice_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonBuyGrapeJuiceTracker'>, 'go_to_church_pray_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonGoToChurchPrayTracker'>, 'speak_to_golden_hair_girl_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonSpeakToGoldenHairGirlTracker'>, 'speak_to_pink_hair_girl_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonSpeakToPinkHairGirlTracker'>, 'speak_to_blue_hair_girl_wg_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon1SpeakToBlueHairGirlWGTracker'>, 'speak_to_pink_hair_girl_wg_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon1SpeakToPinkHairGirlWGTracker'>, 'speak_to_red_hair_girl_wg_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon1SpeakToRedHairGirlWGTracker'>, 'open_menu_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonOpenMenuTracker'>, 'hatch_egg_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon1HatchEggTracker'>, 'break_rock_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon1BreakRockTracker'>, 'break_rightmost_rock_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon1BreakRightmostRockTracker'>, 'remove_lowest_weed_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon1RemoveLowestWeedTracker'>, 'cut_lowest_weed_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon1CutLowestWeedTracker'>, 'remove_top_left_weed_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon1RemoveTopLeftWeedTracker'>, 'cut_top_left_weed_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon1CutTopLeftWeedTracker'>, 'harvest_center_grassline_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon1HarvestCenterGrasslineTracker'>, 'restore_fence_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon1RestoreFenceTracker'>, 'harvest_center_turnip_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon1HarvestCenterTurnipTracker'>, 'water_center_turnip_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon1WaterCenterTurnipTracker'>, 'water_center_potato_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon1WaterCenterPotatoTracker'>, 'harvest_center_potato_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon1HarvestCenterPotatoTracker'>, 'get_home_expansion_estimate_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon1GetHomeExpansionEstimateTracker'>, 'fill_cow_fodder_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon1FillCowFodderTracker'>}, 'harvest_moon_2': {'default': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonOCRTracker'>, 'cow_barn_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2CowBarnTracker'>, 'chicken_coop_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2ChickenCoopTracker'>, 'hospital_entrance_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2HospitalEntranceTracker'>, 'animal_shop_entrance_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2AnimalShopEntranceTracker'>, 'library_entrance_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2LibraryEntranceTracker'>, 'tool_shop_entrance_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2ToolShopEntranceTracker'>, 'carpenter_entrance_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2CarpenterEntranceTracker'>, 'find_lucky_money_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2FindLuckyMoneyTracker'>, 'flower_shop_entrance_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2FlowerShopEntranceTracker'>, 'get_bridge_estimate_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2GetBridgeEstimateTracker'>, 'buy_milker_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2BuyMilkerTracker'>, 'restaurant_entrance_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2RestaurantEntranceTracker'>, 'buy_lunch_set_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2BuyLunchSetTracker'>, 'buy_beverage_set_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2BuyBeverageSetTracker'>, 'buy_todays_special_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2BuyTodaysSpecialTracker'>, 'go_to_bed_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2GoToBedTracker'>, 'read_secret_garden_sign_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2ReadSecretGardenSignTracker'>, 'read_crop_field_sign_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2ReadCropFieldSignTracker'>, 'equip_sickle_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2EquipSickleTracker'>, 'equip_hammer_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2EquipHammerTracker'>, 'equip_fishing_rod_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2EquipFishingRodTracker'>, 'equip_net_replacing_ax_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2EquipNetReplacingAxTracker'>, 'equip_rosemary_seeds_replacing_ax_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2EquipRosemarySeedsReplacingAxTracker'>, 'equip_sickle_replacing_sprinkler_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2EquipSickleReplacingSprinklerTracker'>, 'equip_net_replacing_hoe_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2EquipNetReplacingHoeTracker'>, 'cross_500m_line_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2Cross500mLineTracker'>, 'cross_1000m_line_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2Cross1000mLineTracker'>, 'harvest_center_eggplant_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2HarvestCenterEggplantTracker'>, 'harvest_center_carrot_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2HarvestCenterCarrotTracker'>, 'water_center_potato_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2WaterCenterPotatoTracker'>, 'water_center_asparagus_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2WaterCenterAsparagusTracker'>, 'read_computers_article_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2ReadComputersArticleTracker'>, 'read_boulders_article_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2ReadBouldersArticleTracker'>, 'read_selling_crops_article_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2ReadCropsArticleTracker'>, 'remove_leftmost_weed_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2RemoveLeftmostWeedTracker'>, 'pick_berry_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2PickBerryTracker'>, 'pick_berry_above_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2PickBerryAboveTracker'>, 'speak_to_blue_hair_girl_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2SpeakToBlueHairGirlTracker'>, 'speak_to_purple_hair_girl_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2SpeakToPurpleHairGirlTracker'>, 'speak_to_blonde_girl_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2SpeakToBlondeGirlTracker'>, 'hatch_egg_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2HatchEggTracker'>, 'buy_cow_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2BuyCowTracker'>, 'sell_cow_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2SellCowTracker'>, 'sell_chicken_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2SellChickenTracker'>, 'get_hothouse_estimate_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2GetHothouseEstimateTracker'>, 'buy_chicken_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2BuyChickenTracker'>, 'fill_chicken_fodder_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2FillChickenFodderTracker'>, 'water_corn_field_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2WaterCornFieldTracker'>, 'cut_center_corn_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2CutCenterCornTracker'>, 'water_cabbage_field_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon2WaterCabbageFieldTracker'>, 'storage_shed_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonStorageTracker'>, 'water_turnip_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonWaterTurnipTracker'>, 'open_storage_list_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonOpenStorageListTracker'>, 'read_village_sign_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonReadVillageSignTracker'>, 'read_farm_sign_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonReadFarmSignTracker'>, 'read_notice_board_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonReadNoticeBoardTracker'>, 'open_menu_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonOpenMenuTracker'>}, 'harvest_moon_3': {'default': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonOCRTracker'>, 'chicken_coop_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3ChickenCoopTracker'>, 'read_secret_garden_sign_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3ReadSecretGardenSignTracker'>, 'read_morning_market_sign_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3ReadMorningMarketSignTracker'>, 'read_storage_sign_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3ReadStorageSignTracker'>, 'speak_to_Kirk_village_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3SpeakToKirkVillageTracker'>, 'take_ferry_back_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3TakeFerryTracker'>, 'speak_to_Joe_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3SpeakToJoeTracker'>, 'speak_to_Lukia_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3SpeakToLukiaTracker'>, 'speak_to_Lucus_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3SpeakToLucusTracker'>, 'speak_to_Lyla_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3SpeakToLylaTracker'>, 'buy_horse_saddle_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3BuyHorseSaddleTracker'>, 'buy_flower_vase_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3BuyFlowerVaseTracker'>, 'buy_meal_set_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3BuyMealSetTracker'>, 'choose_coffee_to_buy_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3BuyCoffeeTracker'>, 'shopping_mall_entrance_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3ShoppingMallEntranceTracker'>, 'shopping_mall_second_floor_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3ShoppingMallSecondFloorTracker'>, 'farmers_union_entrance_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3FarmersUnionEntranceTracker'>, 'aquarium_entrance_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3AquariumEntranceTracker'>, 'theatre_entrance_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3TheatreEntranceTracker'>, 'hot_spring_entrance_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3HotSpringEntranceTracker'>, 'open_menu_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoonOpenMenuTracker'>, 'farm_entrance_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3FarmEntranceTracker'>, 'village_entrance_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3VillageEntranceTracker'>, 'grassland_entrance_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3GrasslandEntranceTracker'>, 'forest_entrance_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3ForestEntranceTracker'>, 'cliff_entrance_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3CliffEntranceTracker'>, 'mountain_entrance_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3MountainEntranceTracker'>, 'read_ferry_sign_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3ReadFerrySignTracker'>, 'find_secret_savings_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3FindSecretSavingsTracker'>, 'choose_tea_to_buy_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3ChooseTeaTracker'>, 'choose_asparagus_seeds_to_buy_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3ChooseAsparagusSeedsTracker'>, 'choose_potato_seeds_to_buy_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3BuyPotatoSeedsTracker'>, 'choose_turnip_seeds_to_buy_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3BuyTurnipSeedsTracker'>, 'fill_cow_fodder_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3FeedCowFodderTracker'>, 'break_rock_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3BreakRockTracker'>, 'remove_weed_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3RemoveWeedTracker'>, 'pick_up_cherry_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3PickUpCherryTracker'>, 'water_center_watermelon_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3WaterCenterWatermelonTracker'>, 'hatch_egg_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3HatchEggTracker'>, 'fill_chicken_fodder_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3FillChickenFodderTracker'>, 'buy_fodder_set_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3BuyFodderSetTracker'>, 'buy_horse_medicine_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3BuyHorseMedicineTracker'>, 'speak_to_kate_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3SpeakToKateTracker'>, 'water_center_spotato_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3WaterCenterSPotatoTracker'>, 'harvest_target_potato_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3HarvestTargetPotatoTracker'>, 'read_animal_ch2_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3ReadAnimalCh2Tracker'>, 'harvest_center_turnip_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3HarvestCenterTurnipTracker'>, 'sell_chicken_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3SellChickenTracker'>, 'pick_up_berry_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3PickBerryTracker'>, 'check_player_money_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3CheckPlayerMoneyTracker'>, 'harvest_center_eggplant_test': <class 'gameboy_worlds.emulation.harvest_moon.trackers.HarvestMoon3HarvestCenterEggplantTopTracker'>}, 'survival_kids_1': {'default': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsOCRTracker'>, 'hud': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsHudTracker'>, 'ocr': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsOCRTracker'>, 'vitals': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsVitalsTracker'>, 'status_bar_changed_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsStatusBarChangedTracker'>, 'hp_changed_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsHpChangedTracker'>, 'hunger_changed_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsHungerChangedTracker'>, 'resolve_hunger_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsResolveHungerTracker'>, 'thirst_changed_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsThirstChangedTracker'>, 'drink_water_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsDrinkWaterTracker'>, 'stamina_changed_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsStaminaChangedTracker'>, 'game_viewport_changed_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGameViewportChangedTracker'>, 'grass_cut_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGrassCutTracker'>, 'inventory_open_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsInventoryOpenTracker'>, 'inventory_after_fire_lit_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsInventoryAfterFireLitTracker'>, 'inventory_select_item_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsInventorySelectItemTracker'>, 'pickup_item_dialogue_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsPickupItemDialogueTracker'>, 'canteen_pickup_dialogue_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsCanteenPickupDialogueTracker'>, 'got_the_clam_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGotTheClamTracker'>, 'bag_icon_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsBagIconTracker'>, 'object_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsObjectTracker'>, 'knife_equipped_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsKnifeEquippedTracker'>, 'knife_chosen_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsKnifeChosenTracker'>, 'merge_menu_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsMergeMenuTracker'>, 'merge_confirm_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsMergeConfirmTracker'>, 'canteen_chosen_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsCanteenChosenTracker'>, 'kindling_merged_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsKindlingMergedTracker'>, 'take_leave_menu_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsTakeLeaveMenuTracker'>, 'select_take_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsSelectTakeTracker'>, 'select_drop_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsSelectDropTracker'>, 'select_meat_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsSelectMeatTracker'>, 'canteen_take_leave_menu_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsCanteenTakeLeaveMenuTracker'>, 'canteen_action_menu_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsCanteenActionMenuTracker'>, 'canteen_drink_selected_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsCanteenDrinkSelectedTracker'>, 'canteen_use_selected_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsCanteenUseSelectedTracker'>, 'animal_killed_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsAnimalKilledTracker'>, 'chapter1_path_cleared_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsChapter1PathClearedTracker'>, 'path_after_blocking_grass_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsPathAfterBlockingGrassTracker'>, 'in_the_shelter_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsInTheShelterTracker'>, 'new_path_1_found_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsNewPath1FoundTracker'>, 'new_path_2_found_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsNewPath2FoundTracker'>, 'sharp_stone_found_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsSharpStoneFoundTracker'>, 'day_reference_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsDayReferenceTracker'>, 'night_reference_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsNightReferenceTracker'>, 'entered_shelter_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsEnteredShelterTracker'>, 'found_river_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsFoundRiverTracker'>, 'water_menu_open_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsWaterMenuOpenTracker'>, 'after_filling_water_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsAfterFillingWaterTracker'>, 'after_drinking_water_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsAfterDrinkingWaterTracker'>, 'got_the_water_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGotTheWaterTracker'>, 'got_the_stick_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGotTheStickTracker'>, 'got_the_tree_bark_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGotTheTreeBarkTracker'>, 'got_the_sharp_stone_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGotTheSharpStoneTracker'>, 'got_the_stone_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGotTheStoneTracker'>, 'got_the_vine_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGotTheVineTracker'>, 'got_the_brdfeather_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGotTheBrdfeatherTracker'>, 'select_kindling_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsSelectKindlingTracker'>, 'fire_lit_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsFireLitTracker'>, 'use_kindling_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsUseKindlingTracker'>, 'feather_take_leave_menu_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsFeatherTakeLeaveMenuTracker'>, 'meat_action_menu_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsMeatActionMenuTracker'>, 'cooked_meat_action_menu_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsCookedMeatActionMenuTracker'>, 'cooked_meat_eat_selected_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsCookedMeatEatSelectedTracker'>, 'meat_burn_selected_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsMeatBurnSelectedTracker'>, 'burn_confirm_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsBurnConfirmTracker'>, 'meat_eat_selected_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsMeatEatSelectedTracker'>, 'meat_eaten_dialogue_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsMeatEatenDialogueTracker'>, 'meat_cooked_dialogue_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsMeatCookedDialogueTracker'>, 'cooked_meat_eaten_dialogue_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsCookedMeatEatenDialogueTracker'>, 'cooked_meat_stored_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsCookedMeatStoredTracker'>}, 'survival_kids_2': {'default': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsOCRTracker'>, 'hud': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsHudTracker'>, 'ocr': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsOCRTracker'>, 'vitals': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsVitalsTracker'>, 'status_bar_changed_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsStatusBarChangedTracker'>, 'hp_changed_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsHpChangedTracker'>, 'hunger_changed_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsHungerChangedTracker'>, 'resolve_hunger_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsResolveHungerTracker'>, 'thirst_changed_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsThirstChangedTracker'>, 'drink_water_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsDrinkWaterTracker'>, 'stamina_changed_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsStaminaChangedTracker'>, 'game_viewport_changed_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGameViewportChangedTracker'>, 'grass_cut_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGrassCutTracker'>, 'water_available_dialogue_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsWaterAvailableDialogueTracker'>, 'grass_cut_before_sharp_stone_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGrassCutBeforeSharpStoneTracker'>, 'grass_cut_before_pickup_log_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGrassCutBeforePickupLogTracker'>, 'grass_cut_before_push_stone_2_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGrassCutBeforePushStone2Tracker'>, 'chapter1_path_cleared_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsChapter1PathClearedTracker'>, 'path_after_blocking_grass_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsPathAfterBlockingGrassTracker'>, 'path_after_blocking_grass_c1_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsPathAfterBlockingGrassC1Tracker'>, 'new_path_1_found_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsNewPath1FoundTracker'>, 'new_path_2_found_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsNewPath2FoundTracker'>, 'sharp_stone_found_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsSharpStoneFoundTracker'>, 'inventory_open_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsInventoryOpenTracker'>, 'inventory_open_with_club_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsInventoryOpenWithClubTracker'>, 'inventory_open_with_club_near_pry_stone_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsInventoryOpenWithClubNearPryStoneTracker'>, 'inventory_open_with_club_near_push_stone_2_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsInventoryOpenWithClubNearPushStone2Tracker'>, 'inventory_select_item_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsInventorySelectItemTracker'>, 'object_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsObjectTracker'>, 'helmet_found_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsHelmetFoundTracker'>, 'knife_chosen_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsKnifeChosenTracker'>, 'knife_equipped_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsKnifeEquippedScreenTracker'>, 'knife_equipped_prompt_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsKnifeEquippedScreenTracker'>, 'club_equipped_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsClubEquippedScreenTracker'>, 'select_club_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsSelectClubTracker'>, 'select_club_near_pry_stone_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsSelectClubNearPryStoneTracker'>, 'near_pry_stone_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsNearPryStoneTracker'>, 'near_push_stone_2_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsNearPushStone2Tracker'>, 'pry_stone_dialogue_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsPryStoneDialogueTracker'>, 'push_stone_dialogue_2_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsPushStoneDialogue2Tracker'>, 'path_after_pried_stone_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsPathAfterPriedStoneTracker'>, 'stone_pushed_open_2_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsStonePushedOpen2Tracker'>, 'path_after_pushed_stone_2_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsPathAfterPushedStone2Tracker'>, 'log_found_dialogue_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsLogFoundDialogueTracker'>, 'log_action_menu_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsLogActionMenuTracker'>, 'log_select_take_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsLogSelectTakeTracker'>, 'select_log_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsSelectLogTracker'>, 'log_inventory_action_menu_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsLogInventoryActionMenuTracker'>, 'log_inventory_select_take_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsLogInventorySelectTakeTracker'>, 'got_the_log_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGotTheLogTracker'>, 'fruit_found_dialogue_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsFruitFoundDialogueTracker'>, 'fruit_action_menu_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsFruitActionMenuTracker'>, 'fruit_eat_selected_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsFruitEatSelectedTracker'>, 'fruit_taken_dialogue_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsFruitTakenDialogueTracker'>, 'fruit_eaten_dialogue_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsFruitEatenDialogueTracker'>, 'fruit_eaten_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsFruitEatenTracker'>, 'got_the_stick_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGotTheStickTracker'>, 'tree_bark_pickup_dialogue_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsTreeBarkPickupDialogueTracker'>, 'got_the_tree_bark_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGotTheTreeBarkTracker'>, 'got_the_sharp_stone_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGotTheSharpStoneTracker'>, 'got_the_stone_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGotTheStoneTracker'>, 'got_the_vine_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsGotTheVineTracker'>, 'afternoon_reference_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsAfternoonReferenceTracker'>, 'day_reference_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsDayReferenceTracker'>, 'night_reference_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsNightReferenceTracker'>, 'entered_shelter_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsEnteredShelterTracker'>, 'found_river_test': <class 'gameboy_worlds.emulation.survival_kids.trackers.SurvivalKidsFoundRiverTracker'>}, 'runes_of_virtue_1': {'default': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtueOCRTracker'>, 'basic': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.CoreRunesOfVirtueTracker'>, 'open_menu_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1OpenMenuTestTracker'>, 'king_dialog_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1KingDialogTestTracker'>, 'chuckles_dialog_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1ChucklesDialogTestTracker'>, 'gnu_gnu_1_dialog_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1GnuGnu1DialogTestTracker'>, 'gnu_gnu_2_dialog_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1GnuGnu2DialogTestTracker'>, 'sherry_dialog_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1SherryDialogTestTracker'>, 'cavern_of_hatred_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1CavernOfHatredTestTracker'>, 'cavern_of_cowardice_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1CavernOfCowardiceTestTracker'>, 'cavern_of_cowardice_enter_floor_2_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1CavernOfCowardiceEnterFloor2TestTracker'>, 'cavern_of_cowardice_enter_floor_3_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1CavernOfCowardiceEnterFloor3TestTracker'>, 'cavern_of_cowardice_floor_3_chest_opened_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1CavernOfCowardiceFloor3ChestOpenedTestTracker'>, 'cavern_of_cowardice_enter_floor_4_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1CavernOfCowardiceEnterFloor4TestTracker'>, 'cavern_of_cowardice_sherry_floor_4_dialog_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1CavernOfCowardiceSherryFloor4DialogTestTracker'>, 'cavern_of_cowardice_take_stew_floor_4_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1CavernOfCowardiceTakeStewFloor4TestTracker'>, 'cavern_of_cowardice_obtain_coin_floor_4_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1CavernOfCowardiceObtainCoinFloor4TestTracker'>, 'cavern_of_deceit_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1CavernOfDeceitTestTracker'>, 'dr_cat_dialog_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1DrCatDialogTestTracker'>, 'dr_cat_cats_lair_dialog_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1DrCatCatsLairDialogTestTracker'>, 'ship_ridden_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1ShipRiddenTestTracker'>, 'basement_ladder_unlocked_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1BasementLadderUnlockedTestTracker'>, 'basement_chest_opened_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1BasementChestOpenedTestTracker'>, 'cavern_of_hatred_enter_floor_2_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1CavernOfHatredEnterFloor2TestTracker'>, 'cavern_of_hatred_sherry_floor_2_dialog_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1CavernOfHatredSherryFloor2DialogTestTracker'>, 'cavern_of_hatred_choose_door_with_sherry_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1CavernOfHatredChooseDoorWithSherryTestTracker'>, 'cavern_of_hatred_choose_right_door_melissa_dialog_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1CavernOfHatredChooseRightDoorMelissaDialogTestTracker'>, 'cavern_of_hatred_enter_floor_3_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1CavernOfHatredEnterFloor3TestTracker'>, 'cavern_of_hatred_enter_floor_4_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1CavernOfHatredEnterFloor4TestTracker'>, 'cavern_of_hatred_chest_floor_1_opened_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1CavernOfHatredChestFloor1OpenedTestTracker'>, 'telescope_view_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1TelescopeViewTestTracker'>, 'death_screen_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue1DeathScreenTestTracker'>}, 'runes_of_virtue_2': {'default': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtueOCRTracker'>, 'basic': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.CoreRunesOfVirtueTracker'>, 'open_menu_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2OpenMenuTestTracker'>, 'read_book_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2ReadBookTestTracker'>, 'blocked_room_entered_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2BlockedRoomEnteredTestTracker'>, 'nystul_dialog_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2NystulDialogTestTracker'>, 'blacksmith_fail_buy_shield_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2BlacksmithFailBuyShieldTestTracker'>, 'sherry_mouse_dialog_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2SherryMouseDialogTestTracker'>, 'sandy_cook_dialog_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2SandyCookDialogTestTracker'>, 'lord_whitsaber_dialog_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2LordWhitsaberDialogTestTracker'>, 'cave_of_dishonour_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2CaveOfDishonourTestTracker'>, 'cavern_of_hatred_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2CavernOfHatredTestTracker'>, 'cave_of_dishonour_enter_floor_2_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2CaveOfDishonourEnterFloor2TestTracker'>, 'cave_of_dishonour_enter_floor_3_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2CaveOfDishonourEnterFloor3TestTracker'>, 'grab_cheese_from_kitchen_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2GrabCheeseFromKitchenTestTracker'>, 'give_cheese_to_sherry_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2GiveCheeseToSherryTestTracker'>, 'climb_ladder_behind_locked_door_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2ClimbLadderBehindLockedDoorTestTracker'>, 'interact_with_map_on_table_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2InteractWithMapOnTableTestTracker'>, 'find_ladder_back_from_castle_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2FindLadderBackFromCastleTestTracker'>, 'unlock_door_and_save_tholden_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2UnlockDoorAndSaveTholdenTestTracker'>, 'find_ladder_out_of_cavern_of_hatred_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2FindLadderOutOfCavernOfHatredTestTracker'>, 'bring_tholden_back_to_king_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2BringTholdenBackToKingTestTracker'>, 'attend_castle_ceremony_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2AttendCastleCeremonyTestTracker'>, 'cavern_of_hatred_gate_1_unlocked_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2CavernOfHatredGate1UnlockedTestTracker'>, 'cavern_of_hatred_ladder_room_2_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2CavernOfHatredLadderRoom2TestTracker'>, 'cavern_of_hatred_ladder_2_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2CavernOfHatredLadder2TestTracker'>, 'cavern_of_hatred_grab_key_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2CavernOfHatredGrabKeyTestTracker'>, 'cavern_of_hatred_enter_floor_4_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2CavernOfHatredEnterFloor4TestTracker'>, 'cavern_of_hatred_enter_floor_5_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2CavernOfHatredEnterFloor5TestTracker'>, 'cavern_of_hatred_enter_floor_6_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2CavernOfHatredEnterFloor6TestTracker'>, 'cavern_of_hatred_enter_floor_7_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2CavernOfHatredEnterFloor7TestTracker'>, 'death_screen_test': <class 'gameboy_worlds.emulation.runes_of_virtue.trackers.RunesOfVirtue2DeathScreenTestTracker'>}, 'harry_potter_philosophers_stone': {'default': <class 'gameboy_worlds.emulation.harry_potter.trackers.HarryPotterOCRTracker'>, 'ocr': <class 'gameboy_worlds.emulation.harry_potter.trackers.HarryPotterOCRTracker'>, 'potions_shop_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.PotionsShopTestTracker'>, 'enter_ollivanders_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.EnterOllivandersTestTracker'>, 'get_wand_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.GetWandTestTracker'>, 'receive_folio_magi_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.ReceiveFolioMagiTestTracker'>, 'select_card_deck_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.SelectCardDeckTestTracker'>, 'enter_gringotts_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.EnterGringottsTestTracker'>, 'talk_hagrid_gringotts_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.TalkHagridGringottsTestTracker'>, 'exit_gringotts_without_hagrid_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.ExitGringottsWithoutHagridTestTracker'>, 'get_on_train_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.GetOnTrainTestTracker'>, 'buy_chocolate_frogs_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.BuyChocolateFrogsTestTracker'>, 'sell_one_chocolate_frog_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.SellOneChocolateFrogTestTracker'>, 'lose_duel_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.LoseDuelTestTracker'>, 'win_duel_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.WinDuelTestTracker'>, 'gain_level_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.GainLevelTestTracker'>, 'gain_spell_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.GainSpellTestTracker'>, 'win_battle_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.WinBattleTestTracker'>, 'beat_boss_rat_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.BeatBossRatTestTracker'>, 'fail_rat_king_battle': <class 'gameboy_worlds.emulation.harry_potter.trackers.FailRatKingBattleTestTracker'>, 'defeat_rat_king_with_deflect_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.DefeatRatKingWithDeflectTestTracker'>, 'find_hagrid_vault_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.FindHagridVaultTestTracker'>, 'enter_malkins_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.EnterMalkinsTestTracker'>, 'open_malkins_buy_menu_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.OpenMalkinsBuyMenuTestTracker'>, 'select_robes_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.SelectRobesTestTracker'>, 'confirm_robes_purchase_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.ConfirmRobesPurchaseTestTracker'>, 'enter_flourish_blotts_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.EnterFlourishBlottsTestTracker'>, 'buy_books_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.BuyBooksTestTracker'>, 'enter_apothecary_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.EnterApothecaryTestTracker'>, 'buy_potion_kit_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.BuyPotionKitTestTracker'>, 'enter_cauldron_shop_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.EnterCauldronShopTestTracker'>, 'buy_cauldron_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.BuyCauldronTestTracker'>, 'enter_sugarplums_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.EnterSugarplumsTestTracker'>, 'open_sugarplums_buy_menu_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.OpenSugarplumsBuyMenuTestTracker'>, 'walk_train_3_times': <class 'gameboy_worlds.emulation.harry_potter.trackers.WalkTrain3TimesTestTracker'>, 'talk_to_hagrid_diagon_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.TalkToHagridDiagonTestTracker'>, 'start_menu_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.StartMenuTestTracker'>, 'eat_pumpkin_pasty_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.EatPumpkinPastyTestTracker'>, 'equip_pointed_hat_plain_work_robe_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.EquipPointedHatPlainWorkRobeTestTracker'>, 'remove_all_equipped_items_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.RemoveAllEquippedItemsTestTracker'>, 'talk_to_hagrid_boat_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.TalkToHagridBoatTestTracker'>, 'die_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.DieTestTracker'>, 'fight_rat_then_monster_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.FightRatThenMonsterTestTracker'>, 'fight_bat_then_monster_middle_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.FightBatThenMonsterMiddleTestTracker'>}, 'harry_potter_chamber_of_secrets': {'default': <class 'gameboy_worlds.emulation.harry_potter.trackers.HarryPotterOCRTracker'>, 'ocr': <class 'gameboy_worlds.emulation.harry_potter.trackers.HarryPotterOCRTracker'>, 'find_dobby_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.FindDobbyTestTracker'>, 'select_card_deck_cos_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.SelectCardDeckCosTestTracker'>, 'board_flying_car_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.BoardFlyingCarTestTracker'>, 'enter_burrow_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.EnterBurrowTestTracker'>, 'enter_battle_cos_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.EnterBattleCosTestTracker'>, 'enter_percy_room_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.EnterPercyRoomTestTracker'>, 'enter_ginny_room_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.EnterGinnyRoomTestTracker'>, 'enter_parents_room_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.EnterParentsRoomTestTracker'>, 'enter_fred_george_room_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.EnterFredGeorgeRoomTestTracker'>, 'enter_rons_room_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.EnterRonsRoomTestTracker'>, 'talk_to_ron_burrow_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.TalkToRonBurrowTestTracker'>, 'enter_kitchen_burrow_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.EnterKitchenBurrowTestTracker'>, 'enter_burrow_garden_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.EnterBurrowGardenTestTracker'>, 'navigate_to_car_test': <class 'gameboy_worlds.emulation.harry_potter.trackers.NavigateToCarTestTracker'>}, 'bomberman_max': {'default': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanMaxOCRTracker'>, 'ocr': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanMaxOCRTracker'>, 'pause_menu_open_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanMaxPauseMenuTestTracker'>, 'stage_select_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanMaxStageSelectTestTracker'>, 'game_over_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanMaxGameOverTestTracker'>, 'charabom_select_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanMaxCharabomSelectTestTracker'>, 'stage_briefing_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanMaxStageBriefingTestTracker'>, 'pickup_bomb_up_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanMaxPickupBombUpTestTracker'>, 'defeat_enemy_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanMaxDefeatEnemyTestTracker'>, 'pickup_fire_up_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanMaxPickupFireUpTestTracker'>, 'pitch_area_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanMaxPitchAreaTestTracker'>}, 'bomberman_pocket': {'default': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanPocketOCRTracker'>, 'ocr': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanPocketOCRTracker'>, 'pause_menu_open_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanPocketPauseMenuTestTracker'>, 'stage_clear_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanPocketForestAreaIntroTestTracker'>, 'forest_stage_clear_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanPocketForestAreaIntroTestTracker'>, 'ocean_stage_clear_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanPocketOceanAreaIntroTestTracker'>, 'world_clear_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanPocketWorldClearTestTracker'>, 'game_over_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanPocketGameOverTestTracker'>, 'jump_level_select_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanPocketJumpLevelSelectTestTracker'>, 'jump_results_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanPocketJumpResultsTestTracker'>, 'jump_ranking_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanPocketJumpRankingTestTracker'>, 'pickup_bomb_up_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanPocketHudChangedTestTracker'>, 'defeat_enemy_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanPocketHudEnemyCountChangedTestTracker'>, 'pickup_bomb_range_up_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanPocketHudBottomRightChangedTestTracker'>, 'pickup_heart_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanPocketHudHeartChangedTestTracker'>}, 'bomberman_quest': {'default': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestOCRTracker'>, 'ocr': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestOCRTracker'>, 'pause_menu_open_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestPauseMenuTestTracker'>, 'game_over_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestGameOverTestTracker'>, 'bomb_select_open_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestBombSelectTestTracker'>, 'npc_dialogue_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestNpcDialogueTestTracker'>, 'sign_read_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestSignDialogueTestTracker'>, 'charabom_battle_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestBattleTestTracker'>, 'shield_select_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestShieldSelectTestTracker'>, 'bomb_component_select_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestBombComponentSelectTestTracker'>, 'button_region_changed_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestButtonRegionChangedTestTracker'>, 'switch_activated_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestSwitchActivatedTestTracker'>, 'box_picked_up_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestBoxPickedUpTestTracker'>, 'cliff_box_picked_up_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestCliffBoxPickedUpTestTracker'>, 'hard_switch_activated_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestHardSwitchActivatedTestTracker'>, 'save_npc_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestSaveNpcTestTracker'>, 'enter_camp_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestEnterCampTestTracker'>, 'enter_cave_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestEnterCaveTestTracker'>, 'enter_room_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestEnterRoomTestTracker'>, 'enter_ruins_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestEnterRuinsTestTracker'>, 'enter_house_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestEnterHouseTestTracker'>, 'book_read_test': <class 'gameboy_worlds.emulation.bomberman.trackers.BombermanQuestBookReadTestTracker'>}}

Mapping of game names to their available StateTracker classes with string identifiers.

AVAILABLE_EMULATORS: Dict[str, Dict[str, Type[gameboy_worlds.emulation.emulator.Emulator]]] = {'hamtaro_ham_hams_unite': {'default': <class 'gameboy_worlds.emulation.hamtaro.emulators.HamtaroEmulator'>}, 'pokemon_red': {'default': <class 'gameboy_worlds.emulation.pokemon.emulators.PokemonEmulator'>}, 'pokemon_brown': {'default': <class 'gameboy_worlds.emulation.pokemon.emulators.PokemonEmulator'>}, 'pokemon_crystal': {'default': <class 'gameboy_worlds.emulation.pokemon.emulators.PokemonEmulator'>}, 'pokemon_starbeasts': {'default': <class 'gameboy_worlds.emulation.pokemon.emulators.PokemonEmulator'>}, 'pokemon_starbeasts_comet': {'default': <class 'gameboy_worlds.emulation.pokemon.emulators.PokemonEmulator'>}, 'pokemon_fools_gold': {'default': <class 'gameboy_worlds.emulation.pokemon.emulators.PokemonEmulator'>}, 'pokemon_prism': {'default': <class 'gameboy_worlds.emulation.pokemon.emulators.PokemonEmulator'>}, 'legend_of_zelda_links_awakening': {'default': <class 'gameboy_worlds.emulation.emulator.Emulator'>}, 'legend_of_zelda_the_oracle_of_seasons': {'default': <class 'gameboy_worlds.emulation.emulator.Emulator'>}, 'sword_of_hope_1': {'default': <class 'gameboy_worlds.emulation.emulator.Emulator'>}, 'sword_of_hope_2': {'default': <class 'gameboy_worlds.emulation.emulator.Emulator'>}, 'deja_vu_1': {'default': <class 'gameboy_worlds.emulation.deja_vu.emulators.DejaVuEmulator'>}, 'deja_vu_2': {'default': <class 'gameboy_worlds.emulation.deja_vu.emulators.DejaVuEmulator'>}, 'harvest_moon_1': {'default': <class 'gameboy_worlds.emulation.emulator.Emulator'>}, 'harvest_moon_2': {'default': <class 'gameboy_worlds.emulation.emulator.Emulator'>}, 'harvest_moon_3': {'default': <class 'gameboy_worlds.emulation.emulator.Emulator'>}, 'survival_kids_1': {'default': <class 'gameboy_worlds.emulation.emulator.Emulator'>}, 'survival_kids_2': {'default': <class 'gameboy_worlds.emulation.emulator.Emulator'>}, 'runes_of_virtue_1': {'default': <class 'gameboy_worlds.emulation.runes_of_virtue.emulators.RunesOfVirtueEmulator'>}, 'runes_of_virtue_2': {'default': <class 'gameboy_worlds.emulation.runes_of_virtue.emulators.RunesOfVirtueEmulator'>}, 'harry_potter_philosophers_stone': {'default': <class 'gameboy_worlds.emulation.emulator.Emulator'>}, 'harry_potter_chamber_of_secrets': {'default': <class 'gameboy_worlds.emulation.emulator.Emulator'>}, 'bomberman_max': {'default': <class 'gameboy_worlds.emulation.emulator.Emulator'>}, 'bomberman_pocket': {'default': <class 'gameboy_worlds.emulation.emulator.Emulator'>}, 'bomberman_quest': {'default': <class 'gameboy_worlds.emulation.emulator.Emulator'>}}

Mapping of game names to their available Emulator classes with string identifiers.

AVAILABLE_GAMES = ['hamtaro_ham_hams_unite', 'pokemon_red', 'pokemon_brown', 'pokemon_starbeasts', 'pokemon_starbeasts_comet', 'pokemon_crystal', 'pokemon_fools_gold', 'pokemon_prism', 'legend_of_zelda_links_awakening', 'legend_of_zelda_the_oracle_of_seasons', 'sword_of_hope_1', 'sword_of_hope_2', 'deja_vu_1', 'deja_vu_2', 'harvest_moon_1', 'harvest_moon_2', 'harvest_moon_3', 'survival_kids_1', 'survival_kids_2', 'runes_of_virtue_1', 'runes_of_virtue_2', 'harry_potter_philosophers_stone', 'harry_potter_chamber_of_secrets', 'bomberman_max', 'bomberman_pocket', 'bomberman_quest']

List of available games.

def infer_game(game: str, parameters: dict = None) -> str:
174def infer_game(game: str, parameters: dict = None) -> str:
175    """
176    Try to infer the proper string identifier for a game given a possibly similar user input
177
178    Example Usage:
179    ```python
180    inferred_game = infer_game("pokemon red", parameters)
181    print(inferred_game)  # Output: "pokemon_red"
182    ```
183    Args:
184        game (str): The game variant name to infer.
185        parameters (dict): Additional parameters for logging.
186
187    Returns:
188        str: The inferred variant name.
189    """
190    parameters = load_parameters(parameters)
191    game = game.strip().lower()
192    game = game.replace(" ", "_").replace("-", "_")
193    if game in AVAILABLE_GAMES:
194        return game
195    else:
196        log_error(
197            f"Could not infer game from '{game}'. Available games are: {AVAILABLE_GAMES}",
198            parameters,
199        )

Try to infer the proper string identifier for a game given a possibly similar user input

Example Usage:

inferred_game = infer_game("pokemon red", parameters)
print(inferred_game)  # Output: "pokemon_red"
Arguments:
  • game (str): The game variant name to infer.
  • parameters (dict): Additional parameters for logging.
Returns:

str: The inferred variant name.

def get_state_parser_class( game: str, parameters: Optional[dict] = None) -> Type[gameboy_worlds.emulation.parser.StateParser]:
202def get_state_parser_class(
203    game: str, parameters: Optional[dict] = None
204) -> Type[StateParser]:
205    """
206    Factory method to get the strongest available StateParser class for a given game.
207
208    Args:
209        game (str): The game variant name (e.g., `pokemon_red`).
210        parameters (dict, optional): Additional parameters for logging.
211    Returns:
212        Type[StateParser]: The StateParser class for the specified game.
213    """
214    parameters = load_parameters(parameters)
215    game = infer_game(game, parameters=parameters)
216    state_parser_class = _STRONGEST_PARSERS.get(game, None)
217    if state_parser_class is None:
218        log_error(
219            f"There is no StateParser for game '{game}' in the registry.", parameters
220        )
221    return state_parser_class

Factory method to get the strongest available StateParser class for a given game.

Arguments:
  • game (str): The game variant name (e.g., pokemon_red).
  • parameters (dict, optional): Additional parameters for logging.
Returns:

Type[StateParser]: The StateParser class for the specified game.

def get_state_tracker_class( game: str, tracker_variant: Union[str, Type[gameboy_worlds.emulation.tracker.StateTracker]] = 'default', parameters: Optional[dict] = None) -> Type[gameboy_worlds.emulation.tracker.StateTracker]:
224def get_state_tracker_class(
225    game: str,
226    tracker_variant: Union[str, Type[StateTracker]] = "default",
227    parameters: Optional[dict] = None,
228) -> Type[StateTracker]:
229    """
230    Factory method to get a StateTracker class for a given game and tracker variant.
231    Args:
232        game (str): The game variant name (e.g., `pokemon_red`).
233        tracker_variant (Union[str, Type[StateTracker]]): The variant of the state tracker to use. Can either be a StateTracker class (in which case it is returned directly), or a string identifier for the tracker variant (e.g., `default`).
234        parameters (dict, optional): Additional parameters for logging.
235
236    Returns:
237        Type[StateTracker]: The StateTracker class for the specified game and variant.
238    """
239    parameters = load_parameters(parameters)
240    game = infer_game(game, parameters=parameters)
241    available_trackers = AVAILABLE_STATE_TRACKERS.get(game, None)
242    if available_trackers is None:
243        log_error(
244            f"There are no available StateTrackers for game '{game}' in the registry.",
245            parameters,
246        )
247    if isinstance(tracker_variant, str):
248        if tracker_variant not in available_trackers:
249            log_error(
250                f"StateTracker variant '{tracker_variant}' is not available for game '{game}'. Available variants are: {list(available_trackers.keys())}",
251                parameters,
252            )
253        return available_trackers[tracker_variant]
254    elif issubclass(tracker_variant, StateTracker):
255        # just verify that the tracker is available for this game
256        if tracker_variant not in available_trackers.values():
257            log_error(
258                f"StateTracker class '{tracker_variant.__name__}' is not registered as an allowed tracker for game '{game}'. Available variants are: {list(available_trackers.keys())}",
259                parameters,
260            )
261        return tracker_variant
262    else:
263        log_error(
264            f"tracker_variant must either be a string identifier or a StateTracker class. Got '{type(tracker_variant)}' instead.",
265            parameters,
266        )

Factory method to get a StateTracker class for a given game and tracker variant.

Arguments:
  • game (str): The game variant name (e.g., pokemon_red).
  • tracker_variant (Union[str, Type[StateTracker]]): The variant of the state tracker to use. Can either be a StateTracker class (in which case it is returned directly), or a string identifier for the tracker variant (e.g., default).
  • parameters (dict, optional): Additional parameters for logging.
Returns:

Type[StateTracker]: The StateTracker class for the specified game and variant.

def get_emulator_class( game: str, emulator_variant: Union[str, Type[gameboy_worlds.emulation.emulator.Emulator]] = 'default', parameters: Optional[dict] = None) -> Type[gameboy_worlds.emulation.emulator.Emulator]:
269def get_emulator_class(
270    game: str,
271    emulator_variant: Union[str, Type[Emulator]] = "default",
272    parameters: Optional[dict] = None,
273) -> Type[Emulator]:
274    """
275    Factory method to get an Emulator class for a given game and emulator variant.
276
277    Args:
278        game (str): The game variant name (e.g., `pokemon_red`).
279        emulator_variant (Union[str, Type[Emulator]]): The variant of the emulator to use. Can either be an Emulator class (in which case it is returned directly), or a string identifier for the emulator variant (e.g., `default`).
280        parameters (dict, optional): Additional parameters for logging.
281
282    Returns:
283        Type[Emulator]: The Emulator class for the specified game and variant.
284    """
285    parameters = load_parameters(parameters)
286    game = infer_game(game, parameters=parameters)
287    available_emulators = AVAILABLE_EMULATORS.get(game, None)
288    if available_emulators is None:
289        log_error(
290            f"There are no available Emulators for game '{game}' in the registry.",
291            parameters,
292        )
293    if isinstance(emulator_variant, str):
294        if emulator_variant not in available_emulators:
295            log_error(
296                f"Emulator variant '{emulator_variant}' is not available for game '{game}'. Available variants are: {list(available_emulators.keys())}",
297                parameters,
298            )
299        return available_emulators[emulator_variant]
300    elif issubclass(emulator_variant, Emulator):
301        # just verify that the emulator is available for this game
302        if emulator_variant not in available_emulators.values():
303            log_error(
304                f"Emulator class '{emulator_variant.__name__}' is not registered as an allowed emulator for game '{game}'. Available variants are: {list(available_emulators.keys())}",
305                parameters,
306            )
307        return emulator_variant
308    else:
309        log_error(
310            f"emulator_variant must either be a string identifier or an Emulator class. Got '{type(emulator_variant)}' instead.",
311            parameters,
312        )

Factory method to get an Emulator class for a given game and emulator variant.

Arguments:
  • game (str): The game variant name (e.g., pokemon_red).
  • emulator_variant (Union[str, Type[Emulator]]): The variant of the emulator to use. Can either be an Emulator class (in which case it is returned directly), or a string identifier for the emulator variant (e.g., default).
  • parameters (dict, optional): Additional parameters for logging.
Returns:

Type[Emulator]: The Emulator class for the specified game and variant.

def get_emulator( game: str, *, parameters: Optional[dict] = None, init_state: str = None, state_tracker_class: Union[str, Type[gameboy_worlds.emulation.tracker.StateTracker]] = 'default', **emulator_kwargs) -> gameboy_worlds.emulation.emulator.Emulator:
315def get_emulator(
316    game: str,
317    *,
318    parameters: Optional[dict] = None,
319    init_state: str = None,
320    state_tracker_class: Union[str, Type[StateTracker]] = "default",
321    **emulator_kwargs,
322) -> Emulator:
323    """
324    Factory method to get a Pokemon emulator instance based on the specified variant.
325    Args:
326        game (str): The variant of the Pokemon game (e.g., `pokemon_red`, `pokemon_crystal`).
327        parameters (dict, optional): Additional parameters for emulator configuration.
328        init_state_name (str, optional): Name of the initial state file to load (not the path).
329        state_tracker_class (Union[str, Type[StateTracker]]): The string identifier variant of the state tracker to use, or the class itself.
330        **emulator_kwargs: Additional keyword arguments to pass to the `Emulator` constructor (e.g. `headless`)
331    Returns:
332        Emulator: An instance of the Emulator class configured for the specified variant.
333    """
334    parameters = load_parameters(parameters)
335    game = infer_game(game, parameters=parameters)
336    if f"{game}_rom_data_path" not in parameters:
337        log_error(
338            f"ROM data path for game '{game}' is not specified in the parameters under key '{game}_rom_data_path'.",
339            parameters,
340        )
341    gb_path = parameters[f"{game}_rom_data_path"] + "/" + GAME_TO_GB_NAME[game]
342    if init_state is not None:
343        if not init_state.endswith(".state"):
344            init_state = init_state + ".state"
345        init_state = parameters[f"{game}_rom_data_path"] + "/states/" + init_state
346    else:
347        init_state = parameters[f"{game}_rom_data_path"] + "/states/default.state"
348    state_parser_class = get_state_parser_class(game, parameters=parameters)
349    state_tracker_class: Type[StateTracker] = get_state_tracker_class(
350        game, tracker_variant=state_tracker_class, parameters=parameters
351    )
352    emulator_class = get_emulator_class(game, parameters=parameters)
353    emulator = emulator_class(
354        game=game,
355        gb_path=gb_path,
356        init_state=init_state,
357        state_parser_class=state_parser_class,
358        state_tracker_class=state_tracker_class,
359        parameters=parameters,
360        **emulator_kwargs,
361    )
362    return emulator

Factory method to get a Pokemon emulator instance based on the specified variant.

Arguments:
  • game (str): The variant of the Pokemon game (e.g., pokemon_red, pokemon_crystal).
  • parameters (dict, optional): Additional parameters for emulator configuration.
  • init_state_name (str, optional): Name of the initial state file to load (not the path).
  • state_tracker_class (Union[str, Type[StateTracker]]): The string identifier variant of the state tracker to use, or the class itself.
  • **emulator_kwargs: Additional keyword arguments to pass to the Emulator constructor (e.g. headless)
Returns:

Emulator: An instance of the Emulator class configured for the specified variant.

def get_available_init_states(game: str, parameters: Optional[dict] = None) -> list:
365def get_available_init_states(game: str, parameters: Optional[dict] = None) -> list:
366    """
367    Returns a list of available initial state names for the specified game.
368
369    Args:
370        game (str): The variant of the Pokemon game (e.g., `pokemon_red`, `pokemon_crystal`).
371        parameters (dict, optional): Additional parameters for configuration.
372
373    Returns:
374        list: A list of available initial state names (without .state extension).
375    """
376    parameters = load_parameters(parameters)
377    game = infer_game(game, parameters=parameters)
378    if f"{game}_rom_data_path" not in parameters:
379        log_error(
380            f"ROM data path for game '{game}' is not specified in the parameters under key '{game}_rom_data_path'.",
381            parameters,
382        )
383    states_dir = parameters[f"{game}_rom_data_path"] + "/states/"
384    if not os.path.exists(states_dir):
385        log_error(
386            f"States directory '{states_dir}' does not exist for game '{game}'.",
387            parameters,
388        )
389    state_names = [
390        f.replace(".state", "") for f in os.listdir(states_dir) if f.endswith(".state")
391    ]
392    return state_names

Returns a list of available initial state names for the specified game.

Arguments:
  • game (str): The variant of the Pokemon game (e.g., pokemon_red, pokemon_crystal).
  • parameters (dict, optional): Additional parameters for configuration.
Returns:

list: A list of available initial state names (without .state extension).

def get_train_init_states(game: str, parameters: Optional[dict] = None) -> list:
395def get_train_init_states(game: str, parameters: Optional[dict] = None) -> list:
396    """
397    Returns a list of allowed initial states for training agents to play the specified game.
398    This is determined based on the benchmark tasks specified for the game - any state that is a test state for a benchmark task is disallowed as a training initial state.
399
400    Args:
401        game (str): The variant of the Pokemon game (e.g., `pokemon_red`, `pokemon_crystal`).
402        parameters (dict, optional): Additional parameters for configuration.
403
404    Returns:
405        list: A list of available initial state names (without .state extension) that can be used for training.
406    """
407    parameters = load_parameters(parameters)
408    benchmark_tasks_df = get_benchmark_tasks(game, parameters=parameters)
409    test_init_states = benchmark_tasks_df["init_state"].unique().tolist()
410    other_disallowed_states = []
411    for i, row in benchmark_tasks_df.iterrows():
412        others = row["other_disallowed_states"]
413        if others and isinstance(others, str):
414            other_disallowed_states.extend(others.split(","))
415    test_init_states.extend(other_disallowed_states)
416    test_init_states = list(set(test_init_states))
417    available_init_states = get_available_init_states(game, parameters=parameters)
418    train_init_states = []
419    for state in available_init_states:
420        if (
421            state in test_init_states
422            or state.startswith("test_")
423            or "_test_" in state
424            or state.endswith("_test")
425            or state == "test"
426        ):
427            continue
428        train_init_states.append(state)
429    if len(train_init_states) == 0:
430        if parameters["debug_mode"]:
431            log_warn(
432                f"No available training initial states found for game '{game}' after filtering out test states. Returning all available initial states for now, but you should add some training states that are not used as test states or other_disallowed_states in the benchmark tasks.",
433                parameters,
434            )
435            return available_init_states
436        else:
437            log_error(
438                f"No available training initial states found for game '{game}' after filtering out test states. Please ensure that there are some initial states available for training that are not used as test states or other_disallowed_states in the benchmark tasks.",
439                parameters,
440            )
441    return train_init_states

Returns a list of allowed initial states for training agents to play the specified game. This is determined based on the benchmark tasks specified for the game - any state that is a test state for a benchmark task is disallowed as a training initial state.

Arguments:
  • game (str): The variant of the Pokemon game (e.g., pokemon_red, pokemon_crystal).
  • parameters (dict, optional): Additional parameters for configuration.
Returns:

list: A list of available initial state names (without .state extension) that can be used for training.