Make random_on_hit and ALL adjuster settings on initial seed roll deterministic

This commit is contained in:
caitsith2 2020-07-16 03:40:47 -07:00
parent 3c6893d4a8
commit 075092b154
2 changed files with 16 additions and 15 deletions

View File

@ -199,7 +199,7 @@ def main(args, seed=None):
apply_rom_settings(rom, args.heartbeep[player], args.heartcolor[player], args.quickswap[player], apply_rom_settings(rom, args.heartbeep[player], args.heartcolor[player], args.quickswap[player],
args.fastmenu[player], args.disablemusic[player], args.sprite[player], args.fastmenu[player], args.disablemusic[player], args.sprite[player],
args.ow_palettes[player], args.uw_palettes[player]) args.ow_palettes[player], args.uw_palettes[player], world, player)
mcsb_name = '' mcsb_name = ''
if all([world.mapshuffle[player], world.compassshuffle[player], world.keyshuffle[player], if all([world.mapshuffle[player], world.compassshuffle[player], world.keyshuffle[player],

29
Rom.py
View File

@ -289,7 +289,7 @@ def patch_enemizer(world, player: int, rom: LocalRom, enemizercli, random_sprite
if sprites: if sprites:
while len(sprites) < 32: while len(sprites) < 32:
sprites.extend(sprites) sprites.extend(sprites)
world.random.shuffle(sprites) world.rom_seeds[player].shuffle(sprites)
for i, path in enumerate(sprites[:32]): for i, path in enumerate(sprites[:32]):
sprite = Sprite(path) sprite = Sprite(path)
@ -316,11 +316,11 @@ def _populate_sprite_table():
if sprite.valid: if sprite.valid:
_sprite_table[sprite.name.lower()] = filepath _sprite_table[sprite.name.lower()] = filepath
def get_sprite_from_name(name): def get_sprite_from_name(name, local_random=random):
_populate_sprite_table() _populate_sprite_table()
name = name.lower() name = name.lower()
if name in ['random', 'randomonhit']: if name in ['random', 'randomonhit']:
return Sprite(random.choice(list(_sprite_table.values()))) return Sprite(local_random.choice(list(_sprite_table.values())))
return Sprite(_sprite_table[name]) if name in _sprite_table else None return Sprite(_sprite_table[name]) if name in _sprite_table else None
class Sprite(object): class Sprite(object):
@ -1364,9 +1364,10 @@ def hud_format_text(text):
return output[:32] return output[:32]
def apply_rom_settings(rom, beep, color, quickswap, fastmenu, disable_music, sprite, ow_palettes, uw_palettes): def apply_rom_settings(rom, beep, color, quickswap, fastmenu, disable_music, sprite, ow_palettes, uw_palettes, world=None, player=1):
local_random = random if not world else world.rom_seeds[player]
if sprite and not isinstance(sprite, Sprite): if sprite and not isinstance(sprite, Sprite):
sprite = Sprite(sprite) if os.path.isfile(sprite) else get_sprite_from_name(sprite) sprite = Sprite(sprite) if os.path.isfile(sprite) else get_sprite_from_name(sprite, local_random)
# enable instant item menu # enable instant item menu
if fastmenu == 'instant': if fastmenu == 'instant':
@ -1404,7 +1405,7 @@ def apply_rom_settings(rom, beep, color, quickswap, fastmenu, disable_music, spr
# set heart color # set heart color
if color == 'random': if color == 'random':
color = random.choice(['red', 'blue', 'green', 'yellow']) color = local_random.choice(['red', 'blue', 'green', 'yellow'])
rom.write_byte(0x6FA1E, {'red': 0x24, 'blue': 0x2C, 'green': 0x3C, 'yellow': 0x28}[color]) rom.write_byte(0x6FA1E, {'red': 0x24, 'blue': 0x2C, 'green': 0x3C, 'yellow': 0x28}[color])
rom.write_byte(0x6FA20, {'red': 0x24, 'blue': 0x2C, 'green': 0x3C, 'yellow': 0x28}[color]) rom.write_byte(0x6FA20, {'red': 0x24, 'blue': 0x2C, 'green': 0x3C, 'yellow': 0x28}[color])
rom.write_byte(0x6FA22, {'red': 0x24, 'blue': 0x2C, 'green': 0x3C, 'yellow': 0x28}[color]) rom.write_byte(0x6FA22, {'red': 0x24, 'blue': 0x2C, 'green': 0x3C, 'yellow': 0x28}[color])
@ -1423,13 +1424,13 @@ def apply_rom_settings(rom, beep, color, quickswap, fastmenu, disable_music, spr
default_ow_palettes(rom) default_ow_palettes(rom)
if ow_palettes == 'random': if ow_palettes == 'random':
randomize_ow_palettes(rom) randomize_ow_palettes(rom, local_random)
elif ow_palettes == 'blackout': elif ow_palettes == 'blackout':
blackout_ow_palettes(rom) blackout_ow_palettes(rom)
default_uw_palettes(rom) default_uw_palettes(rom)
if uw_palettes == 'random': if uw_palettes == 'random':
randomize_uw_palettes(rom) randomize_uw_palettes(rom, local_random)
elif uw_palettes == 'blackout': elif uw_palettes == 'blackout':
blackout_uw_palettes(rom) blackout_uw_palettes(rom)
@ -1459,11 +1460,11 @@ def default_ow_palettes(rom):
for address in [0x067FB4, 0x067F94, 0x067FC6, 0x067FE6, 0x067FE1, 0x05FEA9, 0x05FEB3]: for address in [0x067FB4, 0x067F94, 0x067FC6, 0x067FE6, 0x067FE1, 0x05FEA9, 0x05FEB3]:
rom.write_bytes(address, rom.orig_buffer[address:address+2]) rom.write_bytes(address, rom.orig_buffer[address:address+2])
def randomize_ow_palettes(rom): def randomize_ow_palettes(rom, local_random):
grass, grass2, grass3, dirt, dirt2, water, clouds, dwdirt,\ grass, grass2, grass3, dirt, dirt2, water, clouds, dwdirt,\
dwgrass, dwwater, dwdmdirt, dwdmgrass, dwdmclouds1, dwdmclouds2 = [[random.randint(60, 215) for _ in range(3)] for _ in range(14)] dwgrass, dwwater, dwdmdirt, dwdmgrass, dwdmclouds1, dwdmclouds2 = [[local_random.randint(60, 215) for _ in range(3)] for _ in range(14)]
dwtree = [c + random.randint(-20, 10) for c in dwgrass] dwtree = [c + local_random.randint(-20, 10) for c in dwgrass]
treeleaf = [c + random.randint(-20, 10) for c in grass] treeleaf = [c + local_random.randint(-20, 10) for c in grass]
patches = {0x067FB4: (grass, 0), 0x067F94: (grass, 0), 0x067FC6: (grass, 0), 0x067FE6: (grass, 0), 0x067FE1: (grass, 3), 0x05FEA9: (grass, 0), 0x05FEB3: (dwgrass, 1), patches = {0x067FB4: (grass, 0), 0x067F94: (grass, 0), 0x067FC6: (grass, 0), 0x067FE6: (grass, 0), 0x067FE1: (grass, 3), 0x05FEA9: (grass, 0), 0x05FEB3: (dwgrass, 1),
0x0DD4AC: (grass, 2), 0x0DE6DE: (grass2, 2), 0x0DE6E0: (grass2, 1), 0x0DD4AE: (grass2, 1), 0x0DE9FA: (grass2, 1), 0x0DEA0E: (grass2, 1), 0x0DE9FE: (grass2, 0), 0x0DD4AC: (grass, 2), 0x0DE6DE: (grass2, 2), 0x0DE6E0: (grass2, 1), 0x0DD4AE: (grass2, 1), 0x0DE9FA: (grass2, 1), 0x0DEA0E: (grass2, 1), 0x0DE9FE: (grass2, 0),
@ -1517,9 +1518,9 @@ def default_uw_palettes(rom):
return return
rom.write_bytes(0xDD734, rom.orig_buffer[0xDD734:0xDE544]) rom.write_bytes(0xDD734, rom.orig_buffer[0xDD734:0xDE544])
def randomize_uw_palettes(rom): def randomize_uw_palettes(rom, local_random):
for dungeon in range(20): for dungeon in range(20):
wall, pot, chest, floor1, floor2, floor3 = [[random.randint(60, 240) for _ in range(3)] for _ in range(6)] wall, pot, chest, floor1, floor2, floor3 = [[local_random.randint(60, 240) for _ in range(3)] for _ in range(6)]
for i in range(5): for i in range(5):
shade = 10 - (i * 2) shade = 10 - (i * 2)