From cd5696527d1bab4b6ec1f221b5b05d0718525d79 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 7 Mar 2021 20:11:36 +0100 Subject: [PATCH] some er layout group fixes --- Main.py | 17 +++++++++++------ Utils.py | 7 +++++-- playerSettings.yaml | 1 + 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/Main.py b/Main.py index bdbf0f32..8276af01 100644 --- a/Main.py +++ b/Main.py @@ -34,13 +34,12 @@ def get_seed(seed=None): return seed -seeds: Dict[tuple, str] = dict() - - def get_same_seed(world: World, 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] @@ -117,9 +116,15 @@ def main(args, seed=None): world.shuffle[player] = shuffle if shuffle == "vanilla": world.er_seeds[player] = "vanilla" - elif seed.startswith("team-"): + elif seed.startswith("group-"): # renamed from team to group to not confuses with existing team name use world.er_seeds[player] = get_same_seed(world, (shuffle, seed, world.retro[player], world.mode[player], world.logic[player])) - else: + elif seed.startswith("team-"): # TODO: remove on breaking_changes + world.er_seeds[player] = get_same_seed(world, (shuffle, seed, world.retro[player], world.mode[player], world.logic[player])) + elif not args.race: + world.er_seeds[player] = seed + elif seed: # race but with a set seed, ignore set seed and use group logic instead + world.er_seeds[player] = get_same_seed(world, (shuffle, seed, world.retro[player], world.mode[player], world.logic[player])) + else: # race but without a set seed world.er_seeds[player] = seed elif world.shuffle[player] == "vanilla": world.er_seeds[player] = "vanilla" @@ -293,7 +298,7 @@ def main(args, seed=None): apply_rom_settings(rom, args.heartbeep[player], args.heartcolor[player], args.quickswap[player], args.fastmenu[player], args.disablemusic[player], args.sprite[player], palettes_options, world, player, True, - reduceflashing=args.reduceflashing[player] if not args.race else True, + reduceflashing=args.reduceflashing[player] or args.race, triforcehud=args.triforcehud[player]) mcsb_name = '' diff --git a/Utils.py b/Utils.py index e5e0090d..4c25248e 100644 --- a/Utils.py +++ b/Utils.py @@ -13,7 +13,7 @@ class Version(typing.NamedTuple): micro: int -__version__ = "4.1.0" +__version__ = "4.1.1" _version_tuple = tuplize_version(__version__) import os @@ -54,7 +54,10 @@ def snes_to_pc(value): def parse_player_names(names, players, teams): names = tuple(n for n in (n.strip() for n in names.split(",")) if n) if len(names) != len(set(names)): - raise ValueError("Duplicate Player names is not supported.") + import collections + name_counter = collections.Counter(names) + raise ValueError(f"Duplicate Player names is not supported, " + f'found multiple "{name_counter.most_common(1)[0][0]}".') ret = [] while names or len(ret) < teams: team = [n[:16] for n in names[:players]] diff --git a/playerSettings.yaml b/playerSettings.yaml index 67d4fd58..8fad02bd 100644 --- a/playerSettings.yaml +++ b/playerSettings.yaml @@ -90,6 +90,7 @@ entrance_shuffle: # Documentation: https://alttpr.com/en/options#entrance_shuffl # you can also define entrance shuffle seed, like so: crossed-1000: 0 # using this method, you can have the same layout as another player and share entrance information # however, many other settings like logic, world state, retro etc. may affect the shuffle result as well. + crossed-group-myfriends: 0 # using this method, everyone with "group-myfriends" will share the same seed goals: ganon: 50 # Climb GT, defeat Agahnim 2, and then kill Ganon fast_ganon: 0 # Only killing Ganon is required. However, items may still be placed in GT