LttP: Move difficulties and er seed sharing to generate_early
This commit is contained in:
		
							parent
							
								
									104cc0ea83
								
							
						
					
					
						commit
						de4775b0c8
					
				
							
								
								
									
										33
									
								
								Main.py
								
								
								
								
							
							
						
						
									
										33
									
								
								Main.py
								
								
								
								
							| 
						 | 
				
			
			@ -15,7 +15,6 @@ from worlds.alttp.Items import item_name_groups
 | 
			
		|||
from worlds.alttp.Regions import lookup_vanilla_location_to_entrance
 | 
			
		||||
from Fill import distribute_items_restrictive, flood_items, balance_multiworld_progression, distribute_planned
 | 
			
		||||
from worlds.alttp.Shops import ShopSlotFill, SHOP_ID_START, total_shop_slots, FillDisabledShopSlots
 | 
			
		||||
from worlds.alttp.ItemPool import difficulties
 | 
			
		||||
from Utils import output_path, get_options, __version__, version_tuple
 | 
			
		||||
from worlds.generic.Rules import locality_rules, exclusion_rules
 | 
			
		||||
from worlds import AutoWorld
 | 
			
		||||
| 
						 | 
				
			
			@ -30,15 +29,6 @@ def get_seed(seed=None):
 | 
			
		|||
    return seed
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_same_seed(world: MultiWorld, seed_def: tuple) -> str:
 | 
			
		||||
    seeds: Dict[tuple, str] = getattr(world, "__named_seeds", {})
 | 
			
		||||
    if seed_def in seeds:
 | 
			
		||||
        return seeds[seed_def]
 | 
			
		||||
    seeds[seed_def] = str(world.random.randint(0, 2 ** 64))
 | 
			
		||||
    world.__named_seeds = seeds
 | 
			
		||||
    return seeds[seed_def]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def main(args, seed=None):
 | 
			
		||||
    if args.outputpath:
 | 
			
		||||
        os.makedirs(args.outputpath, exist_ok=True)
 | 
			
		||||
| 
						 | 
				
			
			@ -122,25 +112,6 @@ def main(args, seed=None):
 | 
			
		|||
    world.slot_seeds = {player: random.Random(world.random.getrandbits(64)) for player in
 | 
			
		||||
                        range(1, world.players + 1)}
 | 
			
		||||
 | 
			
		||||
    AutoWorld.call_all(world, "generate_early")
 | 
			
		||||
 | 
			
		||||
    # system for sharing ER layouts
 | 
			
		||||
    for player in world.get_game_players("A Link to the Past"):
 | 
			
		||||
        world.er_seeds[player] = str(world.random.randint(0, 2 ** 64))
 | 
			
		||||
 | 
			
		||||
        if "-" in world.shuffle[player]:
 | 
			
		||||
            shuffle, seed = world.shuffle[player].split("-", 1)
 | 
			
		||||
            world.shuffle[player] = shuffle
 | 
			
		||||
            if shuffle == "vanilla":
 | 
			
		||||
                world.er_seeds[player] = "vanilla"
 | 
			
		||||
            elif seed.startswith("group-") or args.race:
 | 
			
		||||
                world.er_seeds[player] = get_same_seed(world, (
 | 
			
		||||
                shuffle, seed, world.retro[player], world.mode[player], world.logic[player]))
 | 
			
		||||
            else:  # not a race or group seed, use set seed as is.
 | 
			
		||||
                world.er_seeds[player] = seed
 | 
			
		||||
        elif world.shuffle[player] == "vanilla":
 | 
			
		||||
            world.er_seeds[player] = "vanilla"
 | 
			
		||||
 | 
			
		||||
    logger.info('Archipelago Version %s  -  Seed: %s\n', __version__, world.seed)
 | 
			
		||||
 | 
			
		||||
    logger.info("Found World Types:")
 | 
			
		||||
| 
						 | 
				
			
			@ -155,9 +126,9 @@ def main(args, seed=None):
 | 
			
		|||
                        f"Location IDs: {min(cls.location_id_to_name):{numlength}} - "
 | 
			
		||||
                        f"{max(cls.location_id_to_name):{numlength}}")
 | 
			
		||||
 | 
			
		||||
    AutoWorld.call_all(world, "generate_early")
 | 
			
		||||
 | 
			
		||||
    logger.info('')
 | 
			
		||||
    for player in world.get_game_players("A Link to the Past"):
 | 
			
		||||
        world.difficulty_requirements[player] = difficulties[world.difficulty[player]]
 | 
			
		||||
 | 
			
		||||
    for player in world.player_ids:
 | 
			
		||||
        for item_name in args.startinventory[player]:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2,6 +2,7 @@ import random
 | 
			
		|||
import logging
 | 
			
		||||
import os
 | 
			
		||||
import threading
 | 
			
		||||
import typing
 | 
			
		||||
 | 
			
		||||
from BaseClasses import Item, CollectionState
 | 
			
		||||
from .SubClasses import ALttPItem
 | 
			
		||||
| 
						 | 
				
			
			@ -10,7 +11,7 @@ from .Options import alttp_options
 | 
			
		|||
from .Items import as_dict_item_table, item_name_groups, item_table
 | 
			
		||||
from .Regions import lookup_name_to_id, create_regions, mark_light_world_regions
 | 
			
		||||
from .Rules import set_rules
 | 
			
		||||
from .ItemPool import generate_itempool
 | 
			
		||||
from .ItemPool import generate_itempool, difficulties
 | 
			
		||||
from .Shops import create_shops
 | 
			
		||||
from .Dungeons import create_dungeons
 | 
			
		||||
from .Rom import LocalRom, patch_rom, patch_race_rom, patch_enemizer, apply_rom_settings, get_hash_string
 | 
			
		||||
| 
						 | 
				
			
			@ -21,6 +22,7 @@ from .EntranceShuffle import link_entrances, link_inverted_entrances, plando_con
 | 
			
		|||
 | 
			
		||||
lttp_logger = logging.getLogger("A Link to the Past")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ALTTPWorld(World):
 | 
			
		||||
    game: str = "A Link to the Past"
 | 
			
		||||
    options = alttp_options
 | 
			
		||||
| 
						 | 
				
			
			@ -38,6 +40,27 @@ class ALTTPWorld(World):
 | 
			
		|||
 | 
			
		||||
    create_items = generate_itempool
 | 
			
		||||
 | 
			
		||||
    def generate_early(self):
 | 
			
		||||
        player = self.player
 | 
			
		||||
        world = self.world
 | 
			
		||||
        # system for sharing ER layouts
 | 
			
		||||
        world.er_seeds[player] = str(world.random.randint(0, 2 ** 64))
 | 
			
		||||
 | 
			
		||||
        if "-" in world.shuffle[player]:
 | 
			
		||||
            shuffle, seed = world.shuffle[player].split("-", 1)
 | 
			
		||||
            world.shuffle[player] = shuffle
 | 
			
		||||
            if shuffle == "vanilla":
 | 
			
		||||
                world.er_seeds[player] = "vanilla"
 | 
			
		||||
            elif seed.startswith("group-") or world.is_race:
 | 
			
		||||
                world.er_seeds[player] = get_same_seed(world, (
 | 
			
		||||
                    shuffle, seed, world.retro[player], world.mode[player], world.logic[player]))
 | 
			
		||||
            else:  # not a race or group seed, use set seed as is.
 | 
			
		||||
                world.er_seeds[player] = seed
 | 
			
		||||
        elif world.shuffle[player] == "vanilla":
 | 
			
		||||
            world.er_seeds[player] = "vanilla"
 | 
			
		||||
 | 
			
		||||
        world.difficulty_requirements[player] = difficulties[world.difficulty[player]]
 | 
			
		||||
 | 
			
		||||
    def create_regions(self):
 | 
			
		||||
        self.rom_name_available_event = threading.Event()
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -341,3 +364,12 @@ class ALTTPWorld(World):
 | 
			
		|||
                    world.push_item(spot_to_fill, item_to_place, False)
 | 
			
		||||
                    fill_locations.remove(spot_to_fill)  # very slow, unfortunately
 | 
			
		||||
                    trash_count -= 1
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def get_same_seed(world, seed_def: tuple) -> str:
 | 
			
		||||
    seeds: typing.Dict[tuple, str] = getattr(world, "__named_seeds", {})
 | 
			
		||||
    if seed_def in seeds:
 | 
			
		||||
        return seeds[seed_def]
 | 
			
		||||
    seeds[seed_def] = str(world.random.randint(0, 2 ** 64))
 | 
			
		||||
    world.__named_seeds = seeds
 | 
			
		||||
    return seeds[seed_def]
 | 
			
		||||
		Loading…
	
		Reference in New Issue