From fc8e3d178794d7ce783cd031b4f62cb7c2c253c3 Mon Sep 17 00:00:00 2001 From: Jarno Westhof Date: Mon, 10 Jan 2022 18:40:27 +0100 Subject: [PATCH] [Timespinner] Added Talaria Attachment to tracker if QuickSeed is enabled Added new locations ids to tracker Added new chest & logic for Ancient pyramid Made tracker change available locations based on flags Made tracker only show items that are progression based on selected flags --- WebHostLib/templates/timespinnerTracker.html | 29 ++++++++--- WebHostLib/tracker.py | 55 +++++++++++++------- worlds/timespinner/Locations.py | 5 +- 3 files changed, 63 insertions(+), 26 deletions(-) diff --git a/WebHostLib/templates/timespinnerTracker.html b/WebHostLib/templates/timespinnerTracker.html index f8d9c453..bd589e10 100644 --- a/WebHostLib/templates/timespinnerTracker.html +++ b/WebHostLib/templates/timespinnerTracker.html @@ -17,7 +17,7 @@ - + @@ -28,18 +28,35 @@ - + {% if 'DownloadableItems' in options %} + + {% else %} + + {% endif %} - + {% if 'DownloadableItems' in options %} + + {% else %} + + {% endif %} - + {% if 'FacebookMode' in options %} + + {% else %} + + {% endif %} - - + {% if 'GyreArchives' in options %} + + + {% else %} + + + {% endif %} {% if 'Djinn Inferno' in acquired_items %} diff --git a/WebHostLib/tracker.py b/WebHostLib/tracker.py index 9ed92436..f52dae8c 100644 --- a/WebHostLib/tracker.py +++ b/WebHostLib/tracker.py @@ -274,7 +274,7 @@ def get_static_room_data(room: Room): for playernumber in range(1, len(names[0]) + 1)} result = locations, names, use_door_tracker, player_checks_in_area, player_location_to_area, \ - multidata["precollected_items"], multidata["games"] + multidata["precollected_items"], multidata["games"], multidata["slot_data"] _multidata_cache[room.seed.id] = result return result @@ -292,7 +292,7 @@ def getPlayerTracker(tracker: UUID, tracked_team: int, tracked_player: int, want # Collect seed information and pare it down to a single player locations, names, use_door_tracker, seed_checks_in_area, player_location_to_area, \ - precollected_items, games = get_static_room_data(room) + precollected_items, games, slot_data = get_static_room_data(room) player_name = names[tracked_team][tracked_player - 1] location_to_area = player_location_to_area[tracked_player] inventory = collections.Counter() @@ -329,7 +329,7 @@ def getPlayerTracker(tracker: UUID, tracked_team: int, tracked_player: int, want specific_tracker = game_specific_trackers.get(games[tracked_player], None) if specific_tracker and not want_generic: return specific_tracker(multisave, room, locations, inventory, tracked_team, tracked_player, player_name, - seed_checks_in_area, checks_done) + seed_checks_in_area, checks_done, slot_data[tracked_player]) else: return __renderGenericTracker(multisave, room, locations, inventory, tracked_team, tracked_player, player_name, seed_checks_in_area, checks_done) @@ -342,7 +342,7 @@ def get_generic_tracker(tracker: UUID, tracked_team: int, tracked_player: int): def __renderAlttpTracker(multisave: Dict[str, Any], room: Room, locations: Dict[int, Dict[int, Tuple[int, int, int]]], inventory: Counter, team: int, player: int, player_name: str, - seed_checks_in_area: Dict[int, Dict[str, int]], checks_done: Dict[str, int]) -> str: + seed_checks_in_area: Dict[int, Dict[str, int]], checks_done: Dict[str, int], slot_data: Dict) -> str: # Note the presence of the triforce item game_state = multisave.get("client_game_state", {}).get((team, player), 0) @@ -407,7 +407,7 @@ def __renderAlttpTracker(multisave: Dict[str, Any], room: Room, locations: Dict[ def __renderMinecraftTracker(multisave: Dict[str, Any], room: Room, locations: Dict[int, Dict[int, Tuple[int, int, int]]], inventory: Counter, team: int, player: int, playerName: str, - seed_checks_in_area: Dict[int, Dict[str, int]], checks_done: Dict[str, int]) -> str: + seed_checks_in_area: Dict[int, Dict[str, int]], checks_done: Dict[str, int], slot_data: Dict) -> str: icons = { "Wooden Pickaxe": "https://static.wikia.nocookie.net/minecraft_gamepedia/images/d/d2/Wooden_Pickaxe_JE3_BE3.png", @@ -509,7 +509,7 @@ def __renderMinecraftTracker(multisave: Dict[str, Any], room: Room, locations: D def __renderOoTTracker(multisave: Dict[str, Any], room: Room, locations: Dict[int, Dict[int, Tuple[int, int, int]]], inventory: Counter, team: int, player: int, playerName: str, - seed_checks_in_area: Dict[int, Dict[str, int]], checks_done: Dict[str, int]) -> str: + seed_checks_in_area: Dict[int, Dict[str, int]], checks_done: Dict[str, int], slot_data: Dict) -> str: icons = { "Fairy Ocarina": "https://static.wikia.nocookie.net/zelda_gamepedia_en/images/9/97/OoT_Fairy_Ocarina_Icon.png", @@ -695,7 +695,7 @@ def __renderOoTTracker(multisave: Dict[str, Any], room: Room, locations: Dict[in def __renderTimespinnerTracker(multisave: Dict[str, Any], room: Room, locations: Dict[int, Dict[int, Tuple[int, int, int]]], inventory: Counter, team: int, player: int, playerName: str, - seed_checks_in_area: Dict[int, Dict[str, int]], checks_done: Dict[str, int]) -> str: + seed_checks_in_area: Dict[int, Dict[str, int]], checks_done: Dict[str, int], slot_data: Dict[str, Any]) -> str: icons = { "Timespinner Wheel": "https://timespinnerwiki.com/mediawiki/images/7/76/Timespinner_Wheel.png", @@ -739,11 +739,9 @@ def __renderTimespinnerTracker(multisave: Dict[str, Any], room: Room, locations: 1337050, 1337051, 1337052, 1337053, 1337054, 1337055, 1337056, 1337057, 1337058, 1337059, 1337060, 1337061, 1337062, 1337063, 1337064, 1337065, 1337066, 1337067, 1337068, 1337069, 1337070, 1337071, 1337072, 1337073, 1337074, 1337075, 1337076, 1337077, 1337078, 1337079, - 1337080, 1337081, 1337082, 1337083, 1337084, 1337085, 1337156, 1337157, 1337159, - 1337160, 1337161, 1337162, 1337163, 1337164, 1337165, 1337166, 1337167, 1337168, 1337169, - 1337170, 1337237, 1337238], + 1337080, 1337081, 1337082, 1337083, 1337084, 1337085], "Past": [ - 1337086, 1337087, 1337088, 1337089, + 1337086, 1337087, 1337088, 1337089, 1337090, 1337091, 1337092, 1337093, 1337094, 1337095, 1337096, 1337097, 1337098, 1337099, 1337100, 1337101, 1337102, 1337103, 1337104, 1337105, 1337106, 1337107, 1337108, 1337109, 1337110, 1337111, 1337112, 1337113, 1337114, 1337115, 1337116, 1337117, 1337118, 1337119, @@ -751,10 +749,31 @@ def __renderTimespinnerTracker(multisave: Dict[str, Any], room: Room, locations: 1337130, 1337131, 1337132, 1337133, 1337134, 1337135, 1337136, 1337137, 1337138, 1337139, 1337140, 1337141, 1337142, 1337143, 1337144, 1337145, 1337146, 1337147, 1337148, 1337149, 1337150, 1337151, 1337152, 1337153, 1337154, 1337155, - 1337171, 1337172, 1337173, 1337174, 1337175, 1337176], - "Ancient Pyramid": [1337246, 1337247, 1337248, 1337249] + 1337171, 1337172, 1337173, 1337174, 1337175], + "Ancient Pyramid": [ + 1337236, + 1337246, 1337247, 1337248, 1337249] } + if(slot_data["DownloadableItems"]): + timespinner_location_ids["Present"] += [ + 1337156, 1337157, 1337159, + 1337160, 1337161, 1337162, 1337163, 1337164, 1337165, 1337166, 1337167, 1337168, 1337169, + 1337170] + if(slot_data["Cantoran"]): + timespinner_location_ids["Past"].append(1337176) + if(slot_data["LoreChecks"]): + timespinner_location_ids["Present"] += [ + 1337177, 1337178, 1337179, + 1337180, 1337181, 1337182, 1337183, 1337184, 1337185, 1337186, 1337187] + timespinner_location_ids["Past"] += [ + 1337188, 1337189, + 1337190, 1337191, 1337192, 1337193, 1337194, 1337195, 1337196, 1337197, 1337198] + if(slot_data["GyreArchives"]): + timespinner_location_ids["Ancient Pyramid"] += [ + 1337237, 1337238, 1337239, + 1337240, 1337241, 1337242, 1337243, 1337244, 1337245] + display_data = {} # Victory condition @@ -771,18 +790,18 @@ def __renderTimespinnerTracker(multisave: Dict[str, Any], room: Room, locations: checks_done['Total'] = len(checked_locations) checks_in_area = {tab_name: len(tab_locations) for tab_name, tab_locations in timespinner_location_ids.items()} checks_in_area['Total'] = sum(checks_in_area.values()) + acquired_items = {lookup_any_item_id_to_name[id] for id in inventory if id in lookup_any_item_id_to_name} + options = {k for k, v in slot_data.items() if v} return render_template("timespinnerTracker.html", - inventory=inventory, icons=icons, - acquired_items={lookup_any_item_id_to_name[id] for id in inventory if - id in lookup_any_item_id_to_name}, + inventory=inventory, icons=icons, acquired_items=acquired_items, player=player, team=team, room=room, player_name=playerName, checks_done=checks_done, checks_in_area=checks_in_area, location_info=location_info, - **display_data) + options=options, **display_data) def __renderSuperMetroidTracker(multisave: Dict[str, Any], room: Room, locations: Dict[int, Dict[int, Tuple[int, int, int]]], inventory: Counter, team: int, player: int, playerName: str, - seed_checks_in_area: Dict[int, Dict[str, int]], checks_done: Dict[str, int]) -> str: + seed_checks_in_area: Dict[int, Dict[str, int]], checks_done: Dict[str, int], slot_data: Dict) -> str: icons = { "Energy Tank": "https://randommetroidsolver.pythonanywhere.com/solver/static/images/ETank.png", diff --git a/worlds/timespinner/Locations.py b/worlds/timespinner/Locations.py index 27510853..655a2c58 100644 --- a/worlds/timespinner/Locations.py +++ b/worlds/timespinner/Locations.py @@ -186,8 +186,9 @@ def get_locations(world: Optional[MultiWorld], player: Optional[int]) -> Tuple[L #AncientPyramidLocations LocationData('Ancient Pyramid (left)', 'Why not it\'s right there', 1337246), LocationData('Ancient Pyramid (left)', 'Conviction guarded room', 1337247), - LocationData('Ancient Pyramid (right)', 'Pit secret room', 1337248, lambda state: state._timespinner_can_break_walls(world, player)), - LocationData('Ancient Pyramid (right)', 'Regret chest', 1337249, lambda state: state._timespinner_can_break_walls(world, player)), + LocationData('Ancient Pyramid (left)', 'Pit secret room', 1337248, lambda state: state._timespinner_can_break_walls(world, player)), + LocationData('Ancient Pyramid (left)', 'Regret chest', 1337249, lambda state: state._timespinner_can_break_walls(world, player)), + LocationData('Ancient Pyramid (right)', 'Nightmare Door chest', 1337236), LocationData('Ancient Pyramid (right)', 'Killed Nightmare', EventId) ]