From f29d5c8cae6f3881dd0c4cd64bd72e1efb8f759f Mon Sep 17 00:00:00 2001 From: StripesOO7 <54711792+StripesOO7@users.noreply.github.com> Date: Mon, 31 Jul 2023 01:37:12 +0200 Subject: [PATCH] ALTTP: Add fill_slot_data for external trackers (#1919) * __init__.py: Add fill_slot_data function Add fill_slot_data function. Used by StripesOO7's pop-tracker pack to auto populate settings as convenience for the user * LTTP__init__.py added race condition to fill_slot_data * added missing self to multiworl.is_race * changed filling of slot_data to fill from static list instead of pulling all alttp_options. additional options needed to be done separately cause they are not stored the same way as the rest. "mode", "goal", etc. are simple values as the rest are key:value pairs so `.value` is not supported and I didn't want to introduce an if-statement. * changed filling of slot_data to fill from static list instead of pulling all alttp_options. additional options needed to be done separately cause they are not stored the same way as the rest. "mode", "goal", etc. are simple values as the rest are key:value pairs so `.value` is not supported and I didn't want to introduce an if-statement. * added a comment to describe the use for the option added to slot_data --------- Co-authored-by: StripesOO7 <54711792+StripeesOO7@users.noreply.github.com> --- worlds/alttp/__init__.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/worlds/alttp/__init__.py b/worlds/alttp/__init__.py index 64fc45a3..8815fae0 100644 --- a/worlds/alttp/__init__.py +++ b/worlds/alttp/__init__.py @@ -782,6 +782,32 @@ class ALTTPWorld(World): res.append(item) return res + def fill_slot_data(self): + slot_data = {} + if not self.multiworld.is_race: + # all of these option are NOT used by the SNI- or Text-Client. + # they are used by the alttp-poptracker pack (https://github.com/StripesOO7/alttp-ap-poptracker-pack) + # for convenient auto-tracking of the generated settings and adjusting the tracker accordingly + + slot_options = ["crystals_needed_for_gt", "crystals_needed_for_ganon", "open_pyramid", + "bigkey_shuffle", "smallkey_shuffle", "compass_shuffle", "map_shuffle", + "progressive", "swordless", "retro_bow", "retro_caves", "shop_item_slots", + "boss_shuffle", "pot_shuffle", "enemy_shuffle"] + + slot_data = {option_name: getattr(self.multiworld, option_name)[self.player].value for option_name in slot_options} + + slot_data.update({ + 'mode': self.multiworld.mode[self.player], + 'goal': self.multiworld.goal[self.player], + 'dark_room_logic': self.multiworld.dark_room_logic[self.player], + 'mm_medalion': self.multiworld.required_medallions[self.player][0], + 'tr_medalion': self.multiworld.required_medallions[self.player][1], + 'shop_shuffle': self.multiworld.shop_shuffle[self.player], + 'entrance_shuffle': self.multiworld.shuffle[self.player] + } + ) + return slot_data + def get_same_seed(world, seed_def: tuple) -> str: seeds: typing.Dict[tuple, str] = getattr(world, "__named_seeds", {})