diff --git a/Main.py b/Main.py index 8554e405..47e160cc 100644 --- a/Main.py +++ b/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]: diff --git a/worlds/alttp/__init__.py b/worlds/alttp/__init__.py index a04b7557..843ab93e 100644 --- a/worlds/alttp/__init__.py +++ b/worlds/alttp/__init__.py @@ -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] \ No newline at end of file