LADX: Pass in seed_name and auth separately (#1575)

This commit is contained in:
zig-for 2023-03-23 13:23:58 -07:00 committed by GitHub
parent 5bb6ff0ce0
commit e1f46d623c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 23 deletions

View File

@ -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:

View File

@ -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

View File

@ -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]]