SMW: change random in generate_output to use slot random

This commit is contained in:
alwaysintreble 2023-02-12 07:57:45 -06:00 committed by black-sliver
parent 53e2232f29
commit 0eb66957b1
2 changed files with 19 additions and 21 deletions

View File

@ -149,9 +149,9 @@ def generate_shuffled_level_music(world, player):
shuffled_level_music = level_music_value_data.copy()
if world.music_shuffle[player] == "consistent":
world.random.shuffle(shuffled_level_music)
world.per_slot_randoms[player].shuffle(shuffled_level_music)
elif world.music_shuffle[player] == "singularity":
single_song = world.random.choice(shuffled_level_music)
single_song = world.per_slot_randoms[player].choice(shuffled_level_music)
shuffled_level_music = [single_song for i in range(len(shuffled_level_music))]
return shuffled_level_music
@ -160,9 +160,9 @@ def generate_shuffled_ow_music(world, player):
shuffled_ow_music = ow_music_value_data.copy()
if world.music_shuffle[player] == "consistent" or world.music_shuffle[player] == "full":
world.random.shuffle(shuffled_ow_music)
world.per_slot_randoms[player].shuffle(shuffled_ow_music)
elif world.music_shuffle[player] == "singularity":
single_song = world.random.choice(shuffled_ow_music)
single_song = world.per_slot_randoms[player].choice(shuffled_ow_music)
shuffled_ow_music = [single_song for i in range(len(shuffled_ow_music))]
return shuffled_ow_music
@ -170,7 +170,7 @@ def generate_shuffled_ow_music(world, player):
def generate_shuffled_ow_palettes(rom, world, player):
if world.overworld_palette_shuffle[player]:
for address, valid_palettes in valid_ow_palettes.items():
chosen_palette = world.random.choice(valid_palettes)
chosen_palette = world.per_slot_randoms[player].choice(valid_palettes)
rom.write_byte(address, chosen_palette)
def generate_shuffled_header_data(rom, world, player):
@ -196,11 +196,11 @@ def generate_shuffled_header_data(rom, world, player):
if world.music_shuffle[player] == "full":
level_header[2] &= 0x8F
level_header[2] |= (world.random.randint(0, 7) << 5)
level_header[2] |= (world.per_slot_randoms[player].randint(0, 7) << 5)
if (world.foreground_palette_shuffle[player] and tileset in valid_foreground_palettes):
level_header[3] &= 0xF8
level_header[3] |= world.random.choice(valid_foreground_palettes[tileset])
level_header[3] |= world.per_slot_randoms[player].choice(valid_foreground_palettes[tileset])
if world.background_palette_shuffle[player]:
layer2_ptr_list = list(rom.read_bytes(0x2E600 + level_id * 3, 3))
@ -208,10 +208,10 @@ def generate_shuffled_header_data(rom, world, player):
if layer2_ptr in valid_background_palettes:
level_header[0] &= 0x1F
level_header[0] |= (world.random.choice(valid_background_palettes[layer2_ptr]) << 5)
level_header[0] |= (world.per_slot_randoms[player].choice(valid_background_palettes[layer2_ptr]) << 5)
if layer2_ptr in valid_background_colors:
level_header[1] &= 0x1F
level_header[1] |= (world.random.choice(valid_background_colors[layer2_ptr]) << 5)
level_header[1] |= (world.per_slot_randoms[player].choice(valid_background_colors[layer2_ptr]) << 5)
rom.write_bytes(layer1_ptr, bytes(level_header))

View File

@ -725,7 +725,7 @@ def handle_swap_donut_gh_exits(rom):
def handle_bowser_rooms(rom, world, player: int):
if world.bowser_castle_rooms[player] == "random_two_room":
chosen_rooms = world.random.sample(standard_bowser_rooms, 2)
chosen_rooms = world.per_slot_randoms[player].sample(standard_bowser_rooms, 2)
rom.write_byte(0x3A680, chosen_rooms[0].roomID)
rom.write_byte(0x3A684, chosen_rooms[0].roomID)
@ -738,7 +738,7 @@ def handle_bowser_rooms(rom, world, player: int):
rom.write_byte(chosen_rooms[len(chosen_rooms)-1].exitAddress, 0xBD)
elif world.bowser_castle_rooms[player] == "random_five_room":
chosen_rooms = world.random.sample(standard_bowser_rooms, 5)
chosen_rooms = world.per_slot_randoms[player].sample(standard_bowser_rooms, 5)
rom.write_byte(0x3A680, chosen_rooms[0].roomID)
rom.write_byte(0x3A684, chosen_rooms[0].roomID)
@ -752,7 +752,7 @@ def handle_bowser_rooms(rom, world, player: int):
elif world.bowser_castle_rooms[player] == "gauntlet":
chosen_rooms = standard_bowser_rooms.copy()
world.random.shuffle(chosen_rooms)
world.per_slot_randoms[player].shuffle(chosen_rooms)
rom.write_byte(0x3A680, chosen_rooms[0].roomID)
rom.write_byte(0x3A684, chosen_rooms[0].roomID)
@ -768,7 +768,7 @@ def handle_bowser_rooms(rom, world, player: int):
entrance_point = bowser_rooms_copy.pop(0)
world.random.shuffle(bowser_rooms_copy)
world.per_slot_randoms[player].shuffle(bowser_rooms_copy)
rom.write_byte(entrance_point.exitAddress, bowser_rooms_copy[0].roomID)
for i in range(0, len(bowser_rooms_copy) - 1):
@ -782,8 +782,8 @@ def handle_boss_shuffle(rom, world, player):
submap_boss_rooms_copy = submap_boss_rooms.copy()
ow_boss_rooms_copy = ow_boss_rooms.copy()
world.random.shuffle(submap_boss_rooms_copy)
world.random.shuffle(ow_boss_rooms_copy)
world.per_slot_randoms[player].shuffle(submap_boss_rooms_copy)
world.per_slot_randoms[player].shuffle(ow_boss_rooms_copy)
for i in range(len(submap_boss_rooms_copy)):
rom.write_byte(submap_boss_rooms[i].exitAddress, submap_boss_rooms_copy[i].roomID)
@ -796,19 +796,19 @@ def handle_boss_shuffle(rom, world, player):
elif world.boss_shuffle[player] == "full":
for i in range(len(submap_boss_rooms)):
chosen_boss = world.random.choice(submap_boss_rooms)
chosen_boss = world.per_slot_randoms[player].choice(submap_boss_rooms)
rom.write_byte(submap_boss_rooms[i].exitAddress, chosen_boss.roomID)
for i in range(len(ow_boss_rooms)):
chosen_boss = world.random.choice(ow_boss_rooms)
chosen_boss = world.per_slot_randoms[player].choice(ow_boss_rooms)
rom.write_byte(ow_boss_rooms[i].exitAddress, chosen_boss.roomID)
if ow_boss_rooms[i].exitAddressAlt is not None:
rom.write_byte(ow_boss_rooms[i].exitAddressAlt, chosen_boss.roomID)
elif world.boss_shuffle[player] == "singularity":
chosen_submap_boss = world.random.choice(submap_boss_rooms)
chosen_ow_boss = world.random.choice(ow_boss_rooms)
chosen_submap_boss = world.per_slot_randoms[player].choice(submap_boss_rooms)
chosen_ow_boss = world.per_slot_randoms[player].choice(ow_boss_rooms)
for i in range(len(submap_boss_rooms)):
rom.write_byte(submap_boss_rooms[i].exitAddress, chosen_submap_boss.roomID)
@ -821,8 +821,6 @@ def handle_boss_shuffle(rom, world, player):
def patch_rom(world, rom, player, active_level_dict):
local_random = world.per_slot_randoms[player]
goal_text = generate_goal_text(world, player)
rom.write_bytes(0x2A6E2, goal_text)