Allow for possible reuse of er layout
This is done by assigning a unique seed to each player who doesn't have one set. er layout seed is output in spoiler log.
This commit is contained in:
		
							parent
							
								
									8c020db07d
								
							
						
					
					
						commit
						8dc2a5748c
					
				| 
						 | 
				
			
			@ -25,6 +25,7 @@ class World(object):
 | 
			
		|||
    plando_texts: List[Dict[str, str]]
 | 
			
		||||
    plando_items: List[PlandoItem]
 | 
			
		||||
    plando_connections: List[PlandoConnection]
 | 
			
		||||
    er_seeds: Dict[int, str]
 | 
			
		||||
 | 
			
		||||
    def __init__(self, players: int, shuffle, logic, mode, swords, difficulty, item_functionality, timer,
 | 
			
		||||
                 progressive,
 | 
			
		||||
| 
						 | 
				
			
			@ -1338,7 +1339,8 @@ class Spoiler(object):
 | 
			
		|||
                         'shop_shuffle_slots': self.world.shop_shuffle_slots,
 | 
			
		||||
                         'shuffle_prizes': self.world.shuffle_prizes,
 | 
			
		||||
                         'sprite_pool': self.world.sprite_pool,
 | 
			
		||||
                         'restrict_dungeon_item_on_boss': self.world.restrict_dungeon_item_on_boss
 | 
			
		||||
                         'restrict_dungeon_item_on_boss': self.world.restrict_dungeon_item_on_boss,
 | 
			
		||||
                         'er_seeds': self.world.er_seeds
 | 
			
		||||
                         }
 | 
			
		||||
 | 
			
		||||
    def to_json(self):
 | 
			
		||||
| 
						 | 
				
			
			@ -1402,6 +1404,8 @@ class Spoiler(object):
 | 
			
		|||
                outfile.write('Item Functionality:              %s\n' % self.metadata['item_functionality'][player])
 | 
			
		||||
                outfile.write('Item Progression:                %s\n' % self.metadata['progressive'][player])
 | 
			
		||||
                outfile.write('Entrance Shuffle:                %s\n' % self.metadata['shuffle'][player])
 | 
			
		||||
                if self.metadata['shuffle'][player] != "vanilla":
 | 
			
		||||
                    outfile.write('Entrance Shuffle Seed            %s\n' % self.metadata['er_seeds'][player])
 | 
			
		||||
                outfile.write('Crystals required for GT:        %s\n' % self.metadata['gt_crystals'][player])
 | 
			
		||||
                outfile.write('Crystals required for Ganon:     %s\n' % self.metadata['ganon_crystals'][player])
 | 
			
		||||
                outfile.write('Pyramid hole pre-opened:         %s\n' % (
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -378,6 +378,7 @@ def parse_arguments(argv, no_defaults=False):
 | 
			
		|||
    ret.plando_items = []
 | 
			
		||||
    ret.plando_texts = {}
 | 
			
		||||
    ret.plando_connections = []
 | 
			
		||||
    ret.er_seeds = {}
 | 
			
		||||
 | 
			
		||||
    ret.glitch_boots = not ret.disable_glitch_boots
 | 
			
		||||
    if ret.timer == "none":
 | 
			
		||||
| 
						 | 
				
			
			@ -408,7 +409,7 @@ def parse_arguments(argv, no_defaults=False):
 | 
			
		|||
                         'heartbeep', "skip_progression_balancing", "triforce_pieces_available",
 | 
			
		||||
                         "triforce_pieces_required", "shop_shuffle", "shop_shuffle_slots",
 | 
			
		||||
                         "required_medallions",
 | 
			
		||||
                         "plando_items", "plando_texts", "plando_connections",
 | 
			
		||||
                         "plando_items", "plando_texts", "plando_connections", "er_seeds",
 | 
			
		||||
                         'remote_items', 'progressive', 'dungeon_counters', 'glitch_boots', 'killable_thieves',
 | 
			
		||||
                         'tile_shuffle', 'bush_shuffle', 'shuffle_prizes', 'sprite_pool', 'dark_room_logic',
 | 
			
		||||
                         'restrict_dungeon_item_on_boss', 'reduceflashing',
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										17
									
								
								Main.py
								
								
								
								
							
							
						
						
									
										17
									
								
								Main.py
								
								
								
								
							| 
						 | 
				
			
			@ -92,11 +92,20 @@ def main(args, seed=None):
 | 
			
		|||
    world.plando_items = args.plando_items.copy()
 | 
			
		||||
    world.plando_texts = args.plando_texts.copy()
 | 
			
		||||
    world.plando_connections = args.plando_connections.copy()
 | 
			
		||||
    world.er_seeds = args.er_seeds.copy()
 | 
			
		||||
    world.restrict_dungeon_item_on_boss = args.restrict_dungeon_item_on_boss.copy()
 | 
			
		||||
    world.required_medallions = args.required_medallions.copy()
 | 
			
		||||
 | 
			
		||||
    world.rom_seeds = {player: random.Random(world.random.randint(0, 999999999)) for player in range(1, world.players + 1)}
 | 
			
		||||
 | 
			
		||||
    for player in range(1, world.players+1):
 | 
			
		||||
        world.er_seeds[player] = str(world.random.randint(0, 2 ** 64))
 | 
			
		||||
 | 
			
		||||
        if "-" in world.shuffle[player]:
 | 
			
		||||
            shuffle, seed = world.shuffle[player].split("-")
 | 
			
		||||
            world.shuffle[player] = shuffle
 | 
			
		||||
            world.er_seeds[player] = seed
 | 
			
		||||
 | 
			
		||||
    logger.info('ALttP Berserker\'s Multiworld Version %s  -  Seed: %s\n', __version__, world.seed)
 | 
			
		||||
 | 
			
		||||
    parsed_names = parse_player_names(args.names, world.players, args.teams)
 | 
			
		||||
| 
						 | 
				
			
			@ -170,13 +179,9 @@ def main(args, seed=None):
 | 
			
		|||
                {"vanilla", "dungeonssimple", "dungeonsfull", "simple", "restricted", "full"}:
 | 
			
		||||
            world.fix_fake_world[player] = False
 | 
			
		||||
 | 
			
		||||
        old_random = world.random
 | 
			
		||||
 | 
			
		||||
        # seeded entrance shuffle
 | 
			
		||||
        if "-" in world.shuffle[player]:
 | 
			
		||||
            shuffle, seed = world.shuffle[player].split("-")
 | 
			
		||||
            world.random = random.Random(int(seed))
 | 
			
		||||
            world.shuffle[player] = shuffle
 | 
			
		||||
        old_random = world.random
 | 
			
		||||
        world.random = random.Random(world.er_seeds[player])
 | 
			
		||||
 | 
			
		||||
        if world.mode[player] != 'inverted':
 | 
			
		||||
            link_entrances(world, player)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue