allow remote_items to be set via AutoWorld

This commit is contained in:
Fabian Dill 2021-07-13 19:14:57 +02:00
parent bc83dfa9e2
commit 62a6cdc9f7
5 changed files with 13 additions and 5 deletions

View File

@ -68,7 +68,6 @@ class MultiWorld():
self.fix_palaceofdarkness_exit = self.AttributeProxy(lambda player: self.shuffle[player] not in ['vanilla', 'simple', 'restricted', 'dungeonssimple'])
self.fix_trock_exit = self.AttributeProxy(lambda player: self.shuffle[player] not in ['vanilla', 'simple', 'restricted', 'dungeonssimple'])
self.NOTCURSED = self.AttributeProxy(lambda player: not self.CURSED[player])
self.remote_items = self.AttributeProxy(lambda player: self.game[player] != "A Link to the Past")
for player in range(1, players + 1):
def set_player_attr(attr, val):

View File

@ -525,8 +525,8 @@ def main(args, seed=None):
"games": games,
"names": parsed_names,
"connect_names": connect_names,
"remote_items": {player for player in range(1, world.players + 1) if
world.remote_items[player]},
"remote_items": {player for player in world.player_ids if
world.worlds[player].remote_items},
"locations": locations_data,
"checks_in_area": checks_in_area,
"server_options": get_options()["server_options"],

View File

@ -58,6 +58,12 @@ class World(metaclass=AutoWorldRegister):
hint_blacklist: Set[str] = frozenset() # any names that should not be hintable
# if a world is set to remote_items, then it just needs to send location checks to the server and the server
# sends back the items
# if a world is set to remote_items = False, then the server never sends an item where receiver == finder,
# the client finds its own items in its own world.
remote_items: bool = True
def __init__(self, world: MultiWorld, player: int):
self.world = world
self.player = player

View File

@ -790,7 +790,7 @@ def patch_rom(world, rom, player, team, enemized):
itemid = 0x33
elif location.item.compass:
itemid = 0x25
if world.remote_items[player]:
if world.worlds[player].remote_items: # remote items does not currently work
itemid = list(location_table.keys()).index(location.name) + 1
assert itemid < 0x100
rom.write_byte(location.player_address, 0xFF)
@ -1647,7 +1647,8 @@ def patch_rom(world, rom, player, team, enemized):
write_strings(rom, world, player, team)
rom.write_byte(0x18637C, 1 if world.remote_items[player] else 0)
# remote items flag, does not currently work
rom.write_byte(0x18637C, int(world.worlds[player].remote_items))
# set rom name
# 21 bytes

View File

@ -18,6 +18,8 @@ class ALTTPWorld(World):
item_name_to_id = {name: data.item_code for name, data in item_table.items() if type(data.item_code) == int}
location_name_to_id = lookup_name_to_id
remote_items: bool = False
def collect(self, state: CollectionState, item: Item) -> bool:
if item.name.startswith('Progressive '):
if 'Sword' in item.name: