From e1f46d623cd5d5c19bacc421064c53e31101a3ee Mon Sep 17 00:00:00 2001 From: zig-for Date: Thu, 23 Mar 2023 13:23:58 -0700 Subject: [PATCH] LADX: Pass in seed_name and auth separately (#1575) --- worlds/ladx/LADXR/generator.py | 14 +++++--------- worlds/ladx/LADXR/patches/titleScreen.py | 15 +++++---------- worlds/ladx/__init__.py | 11 +++++++---- 3 files changed, 17 insertions(+), 23 deletions(-) diff --git a/worlds/ladx/LADXR/generator.py b/worlds/ladx/LADXR/generator.py index 0564e276..cf8e67ee 100644 --- a/worlds/ladx/LADXR/generator.py +++ b/worlds/ladx/LADXR/generator.py @@ -60,7 +60,7 @@ from ..Options import TrendyGame, Palette # Function to generate a final rom, this patches the rom with all required patches -def generateRom(args, settings, ap_settings, seed, logic, rnd=None, multiworld=None, player_name=None, player_names=[], player_id = 0): +def generateRom(args, settings, ap_settings, auth, seed_name, logic, rnd=None, multiworld=None, player_name=None, player_names=[], player_id = 0): rom = ROMWithTables(args.input_filename) rom.player_names = player_names pymods = [] @@ -119,7 +119,7 @@ def generateRom(args, settings, ap_settings, seed, logic, rnd=None, multiworld=N patches.core.easyColorDungeonAccess(rom) patches.owl.removeOwlEvents(rom) patches.enemies.fixArmosKnightAsMiniboss(rom) - patches.bank3e.addBank3E(rom, seed, player_id, player_names) + patches.bank3e.addBank3E(rom, auth, player_id, player_names) patches.bank3f.addBank3F(rom) patches.bank34.addBank34(rom, item_list) patches.core.removeGhost(rom) @@ -269,7 +269,7 @@ def generateRom(args, settings, ap_settings, seed, logic, rnd=None, multiworld=N patches.core.addFrameCounter(rom, len(item_list)) patches.core.warpHome(rom) # Needs to be done after setting the start location. - patches.titleScreen.setRomInfo(rom, binascii.hexlify(seed).decode("ascii").upper(), settings, player_name, player_id) + patches.titleScreen.setRomInfo(rom, auth, seed_name, settings, player_name, player_id) patches.endscreen.updateEndScreen(rom) patches.aesthetics.updateSpriteData(rom) if args.doubletrouble: @@ -411,13 +411,9 @@ def generateRom(args, settings, ap_settings, seed, logic, rnd=None, multiworld=N rom.banks[bank][address + 1] = packed >> 8 SEED_LOCATION = 0x0134 - SEED_SIZE = 10 - - # TODO: pass this in # Patch over the title - assert(len(seed) == SEED_SIZE) - gameid = seed + player_id.to_bytes(2, 'big') - rom.patch(0x00, SEED_LOCATION, None, binascii.hexlify(gameid)) + assert(len(auth) == 12) + rom.patch(0x00, SEED_LOCATION, None, binascii.hexlify(auth)) for pymod in pymods: diff --git a/worlds/ladx/LADXR/patches/titleScreen.py b/worlds/ladx/LADXR/patches/titleScreen.py index 52adba68..b81f1460 100644 --- a/worlds/ladx/LADXR/patches/titleScreen.py +++ b/worlds/ladx/LADXR/patches/titleScreen.py @@ -20,27 +20,22 @@ def _encode(s): return result -def setRomInfo(rom, seed, settings, player_name, player_id): - #try: - # version = subprocess.run(['git', 'describe', '--tags', '--dirty=-D'], stdout=subprocess.PIPE).stdout.strip().decode("ascii", "replace") - #except: - # version = "" - +def setRomInfo(rom, seed, seed_name, settings, player_name, player_id): try: seednr = int(seed, 16) except: import hashlib - seednr = int(hashlib.md5(seed.encode('ascii', 'replace')).hexdigest(), 16) + seednr = int(hashlib.md5(seed).hexdigest(), 16) if settings.race: - seed = "Race" + seed_name = "Race" if isinstance(settings.race, str): - seed += " " + settings.race + seed_name += " " + settings.race rom.patch(0x00, 0x07, "00", "01") else: rom.patch(0x00, 0x07, "00", "52") - line_1_hex = _encode(seed) + line_1_hex = _encode(seed_name[:20]) #line_2_hex = _encode(seed[16:]) BASE_DRAWING_AREA = 0x98a0 LINE_WIDTH = 0x20 diff --git a/worlds/ladx/__init__.py b/worlds/ladx/__init__.py index db8825db..47c601a1 100644 --- a/worlds/ladx/__init__.py +++ b/worlds/ladx/__init__.py @@ -216,6 +216,8 @@ class LinksAwakeningWorld(World): self.multiworld.itempool.append(item) def pre_fill(self): + self.multi_key = self.generate_multi_key() + dungeon_locations = [] dungeon_locations_by_dungeon = [[], [], [], [], [], [], [], [], []] all_state = self.multiworld.get_all_state(use_cache=False) @@ -393,11 +395,13 @@ class LinksAwakeningWorld(World): name_for_rom = self.multiworld.player_name[self.player] all_names = [self.multiworld.player_name[i + 1] for i in range(len(self.multiworld.player_name))] + rom = generator.generateRom( args, self.laxdr_options, self.player_options, - bytes.fromhex(self.multiworld.seed_name[-20:]), + self.multi_key, + self.multiworld.seed_name, self.ladxr_logic, rnd=self.multiworld.per_slot_randoms[self.player], player_name=name_for_rom, @@ -414,8 +418,7 @@ class LinksAwakeningWorld(World): os.unlink(rompath) def generate_multi_key(self): - return bytes.fromhex(self.multiworld.seed_name[-20:]) + self.player.to_bytes(2, 'big') + return bytearray(self.multiworld.random.getrandbits(8) for _ in range(10)) + self.player.to_bytes(2, 'big') def modify_multidata(self, multidata: dict): - multi_key = binascii.hexlify(self.generate_multi_key()).decode() - multidata["connect_names"][multi_key] = multidata["connect_names"][self.multiworld.player_name[self.player]] + multidata["connect_names"][binascii.hexlify(self.multi_key).decode()] = multidata["connect_names"][self.multiworld.player_name[self.player]] \ No newline at end of file