From 9d32a85b89af929173fd97533886edfd4ee7113f Mon Sep 17 00:00:00 2001 From: aerinon Date: Thu, 18 Feb 2021 13:39:03 -0700 Subject: [PATCH] Progressive limits ignored for shop items (multiworld) Multi Client improvements to reporting --- Main.py | 2 +- MultiClient.py | 35 +++++++++++++++++++++++++++++++---- Rom.py | 5 ++++- asm/keydropshuffle.asm | 2 +- data/base2current.bps | Bin 132014 -> 132414 bytes 5 files changed, 37 insertions(+), 7 deletions(-) diff --git a/Main.py b/Main.py index 61934050..92a4128e 100644 --- a/Main.py +++ b/Main.py @@ -26,7 +26,7 @@ from Fill import sell_potions, sell_keys, balance_multiworld_progression, balanc from ItemList import generate_itempool, difficulties, fill_prizes, customize_shops from Utils import output_path, parse_player_names -__version__ = '0.3.1.1-u' +__version__ = '0.3.1.0-u' class EnemizerError(RuntimeError): diff --git a/MultiClient.py b/MultiClient.py index 66c66e82..bf64a2d7 100644 --- a/MultiClient.py +++ b/MultiClient.py @@ -53,6 +53,11 @@ class Context: self.rom = None self.auth = None self.total_locations = None + self.mode_flags = None + self.key_drop_mode = False + self.shop_mode = False + self.retro_mode = False + self.ignore_count = 0 def color_code(*args): codes = {'reset': 0, 'bold': 1, 'underline': 4, 'black': 30, 'red': 31, 'green': 32, 'yellow': 33, 'blue': 34, @@ -88,7 +93,8 @@ SCOUTREPLY_LOCATION_ADDR = SAVEDATA_START + 0x4D8 # 1 byte SCOUTREPLY_ITEM_ADDR = SAVEDATA_START + 0x4D9 # 1 byte SCOUTREPLY_PLAYER_ADDR = SAVEDATA_START + 0x4DA # 1 byte SHOP_ADDR = SAVEDATA_START + 0x302 # 2 bytes? -DYNAMIC_TOTAL_ADDR = SAVEDATA_START + 0x33E +DYNAMIC_TOTAL_ADDR = SAVEDATA_START + 0x33E # 2 bytes +MODE_FLAGS = SAVEDATA_START + 0x33D # 1 byte SHOP_SRAM_LEN = 0x29 # 41 tracked items location_shop_order = [Regions.shop_to_location_table.keys()] + [Regions.retro_shops.keys()] @@ -776,7 +782,8 @@ async def console_loop(ctx : Context): get_location_name_from_address(item.location), index, len(ctx.items_received))) if command[0] == '/missing': - for location in [k for k, v in Regions.lookup_name_to_id.items() if type(v) is int]: + for location in [k for k, v in Regions.lookup_name_to_id.items() + if type(v) is int and not filter_location(ctx, k)]: if location not in ctx.locations_checked: logging.info('Missing: ' + location) if command[0] == '/getitem' and len(command) > 1: @@ -804,6 +811,16 @@ def get_location_name_from_address(address): return Regions.lookup_id_to_name.get(address, f'Unknown location (ID:{address})') +def filter_location(ctx, location): + if not ctx.key_drop_mode and ('Key Drop' in location or 'Pot Key' in location): + return True + if not ctx.shop_mode and location in Regions.flat_normal_shops: + return True + if not ctx.retro_mode and location in Regions.flat_retro_shops: + return True + return False + + async def track_locations(ctx : Context, roomid, roomdata): new_locations = [] @@ -813,10 +830,20 @@ async def track_locations(ctx : Context, roomid, roomdata): if ttl > 0: ctx.total_locations = ttl + if ctx.mode_flags is None: + flags = await snes_read(ctx, MODE_FLAGS, 1) + ctx.key_drop_mode = flags[0] & 0x1 + ctx.shop_mode = flags[0] & 0x2 + ctx.retro_mode = flags[0] & 0x4 + def new_check(location): ctx.locations_checked.add(location) - logging.info(f"New check: {location} ({len(ctx.locations_checked)}/{ctx.total_locations})") - new_locations.append(Regions.lookup_name_to_id[location]) + ignored = filter_location(ctx, location) + if ignored: + ctx.ignore_count += 1 + else: + logging.info(f"New check: {location} ({len(ctx.locations_checked)-ctx.ignore_count}/{ctx.total_locations})") + new_locations.append(Regions.lookup_name_to_id[location]) try: if roomid in location_shop_ids: diff --git a/Rom.py b/Rom.py index cefe7313..1430aec5 100644 --- a/Rom.py +++ b/Rom.py @@ -27,7 +27,7 @@ from EntranceShuffle import door_addresses, exit_ids JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '0a34dc667a29125f09b10aeb1e06b83c' +RANDOMIZERBASEHASH = '0de33d06fdb9c8cac765047037b39363' class JsonRom(object): @@ -774,6 +774,9 @@ def patch_rom(world, rom, player, team, enemized, is_mystery=False): if world.keydropshuffle[player]: rom.write_byte(0x140000, 1) + multiClientFlags = ((0x1 if world.keydropshuffle[player] else 0) | (0x2 if world.shopsanity[player] else 0) + | (0x4 if world.retro[player] else 0)) + rom.write_byte(0x140001, multiClientFlags) write_int16(rom, 0x187010, credits_total) # dynamic credits if credits_total != 216: diff --git a/asm/keydropshuffle.asm b/asm/keydropshuffle.asm index a150774f..70e80047 100644 --- a/asm/keydropshuffle.asm +++ b/asm/keydropshuffle.asm @@ -26,7 +26,7 @@ Sprite_LoadProperties: org $288000 ;140000 ShuffleKeyDrops: db 0 -ShuffleKeyDropsReserved: +MultiClientFlags: ; 140001 -> stored in SRAM at 7ef33d db 0 LootTable: ;PC: 140002 diff --git a/data/base2current.bps b/data/base2current.bps index fabbaa269805540d0624e7b29399fdd2e85c4c18..f30bfa99fe9d109ea2432a33917619687f187ddb 100644 GIT binary patch delta 15322 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