From bcd7d62d0bd6f1c72a2727cf15ba931ca5c9bad4 Mon Sep 17 00:00:00 2001 From: kbranch Date: Wed, 7 May 2025 14:53:58 -0400 Subject: [PATCH] LADX: Improve Fake Tracker Items (#4897) --- LinksAwakeningClient.py | 20 ++++++++++++++------ worlds/ladx/ItemTracker.py | 3 +-- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/LinksAwakeningClient.py b/LinksAwakeningClient.py index 16896540..14aaa415 100644 --- a/LinksAwakeningClient.py +++ b/LinksAwakeningClient.py @@ -33,7 +33,7 @@ from worlds.ladx.TrackerConsts import storage_key from worlds.ladx.ItemTracker import ItemTracker from worlds.ladx.LADXR.checkMetadata import checkMetadataTable from worlds.ladx.Locations import get_locations_to_id, meta_to_name -from worlds.ladx.Tracker import LocationTracker, MagpieBridge +from worlds.ladx.Tracker import LocationTracker, MagpieBridge, Check class GameboyException(Exception): @@ -626,6 +626,11 @@ class LinksAwakeningContext(CommonContext): "password": self.password, }) + # We can process linked items on already-checked checks now that we have slot_data + if self.client.tracker: + checked_checks = set(self.client.tracker.all_checks) - set(self.client.tracker.remaining_checks) + self.add_linked_items(checked_checks) + # TODO - use watcher_event if cmd == "ReceivedItems": for index, item in enumerate(args["items"], start=args["index"]): @@ -641,6 +646,13 @@ class LinksAwakeningContext(CommonContext): sync_msg = [{'cmd': 'Sync'}] await self.send_msgs(sync_msg) + def add_linked_items(self, checks: typing.List[Check]): + for check in checks: + if check.value and check.linkedItem: + linkedItem = check.linkedItem + if 'condition' not in linkedItem or (self.slot_data and linkedItem['condition'](self.slot_data)): + self.client.item_tracker.setExtraItem(check.linkedItem['item'], check.linkedItem['qty']) + item_id_lookup = get_locations_to_id() async def run_game_loop(self): @@ -649,11 +661,7 @@ class LinksAwakeningContext(CommonContext): checkMetadataTable[check.id])] for check in ladxr_checks] self.new_checks(checks, [check.id for check in ladxr_checks]) - for check in ladxr_checks: - if check.value and check.linkedItem: - linkedItem = check.linkedItem - if 'condition' not in linkedItem or linkedItem['condition'](self.slot_data): - self.client.item_tracker.setExtraItem(check.linkedItem['item'], check.linkedItem['qty']) + self.add_linked_items(ladxr_checks) async def victory(): await self.send_victory() diff --git a/worlds/ladx/ItemTracker.py b/worlds/ladx/ItemTracker.py index b288bba8..981fd42d 100644 --- a/worlds/ladx/ItemTracker.py +++ b/worlds/ladx/ItemTracker.py @@ -151,8 +151,7 @@ class ItemTracker: def __init__(self, gameboy) -> None: self.gameboy = gameboy self.loadItems() - pass - extraItems = {} + self.extraItems = {} async def readRamByte(self, byte): return (await self.gameboy.read_memory_cache([byte]))[byte]