From 11e1ad6901fe583274a33d6a52a2ef8485fc0518 Mon Sep 17 00:00:00 2001 From: Fabian Dill Date: Sun, 23 Feb 2020 17:06:44 +0100 Subject: [PATCH] some small improvements for mystery --- BaseClasses.py | 1 + Main.py | 1 + MultiMystery.py | 17 +++++++++-------- Mystery.py | 19 +++++++++++++++---- Utils.py | 4 +++- host.yaml | 4 ++++ 6 files changed, 33 insertions(+), 13 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index b5b4736d..2e6b6b3c 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -8,6 +8,7 @@ from EntranceShuffle import door_addresses from Utils import int16_as_bytes class World(object): + player_names: list def __init__(self, players, shuffle, logic, mode, swords, difficulty, difficulty_adjustments, timer, progressive, goal, algorithm, accessibility, shuffle_ganon, retro, custom, customitemarray, hints): self.players = players self.teams = 1 diff --git a/Main.py b/Main.py index 5c8bea7a..bb14097c 100644 --- a/Main.py +++ b/Main.py @@ -70,6 +70,7 @@ def main(args, seed=None): logger.info('%s%s', 'Team%d: ' % i if world.teams > 1 else 'Players: ', ', '.join(team)) for player, name in enumerate(team, 1): world.player_names[player].append(name) + logger.info('') for player in range(1, world.players + 1): diff --git a/MultiMystery.py b/MultiMystery.py index 1c8386e9..73b0cdb5 100644 --- a/MultiMystery.py +++ b/MultiMystery.py @@ -1,5 +1,5 @@ __author__ = "Berserker55" # you can find me on the ALTTP Randomizer Discord -__version__ = 1.6 +__version__ = 1.7 """ This script launches a Multiplayer "Multiworld" Mystery Game @@ -43,6 +43,8 @@ if __name__ == "__main__": #zip_password = multi_mystery_options["zip_password"] not at this time player_name = multi_mystery_options["player_name"] meta_file_path = multi_mystery_options["meta_file_path"] + teams = multi_mystery_options["teams"] + rom_file = multi_mystery_options["rom_file"] py_version = f"{sys.version_info.major}.{sys.version_info.minor}" @@ -57,7 +59,7 @@ if __name__ == "__main__": lfile = file.lower() if lfile.endswith(".yaml") and lfile != meta_file_path.lower(): player_files.append(file) - print(f"Player {file[:-5]} found.") + print(f"Found player's file {file}.") player_count = len(player_files) if player_count == 0: feedback(f"No player files found. Please put them in a {player_files_path} folder.") @@ -65,10 +67,9 @@ if __name__ == "__main__": print(player_count, "Players found.") player_string = "" - for i,file in enumerate(player_files): - player_string += f"--p{i+1} {os.path.join(player_files_path, file)} " + for i, file in enumerate(player_files, 1): + player_string += f"--p{i} {os.path.join(player_files_path, file)} " - player_names = list(file[:-5] for file in player_files) if os.path.exists("BerserkerMultiServer.exe"): basemysterycommand = "BerserkerMystery.exe" #compiled windows @@ -78,11 +79,11 @@ if __name__ == "__main__": basemysterycommand = f"py -{py_version} Mystery.py" #source command = f"{basemysterycommand} --multi {len(player_files)} {player_string} " \ - f"--names {','.join(player_names)} --enemizercli {enemizer_path} " \ - f"--outputpath {output_path}" + f"--rom \"{rom_file}\" --enemizercli \"{enemizer_path}\" " \ + f"--outputpath \"{output_path}\" --teams {teams}" if create_spoiler: - command += " --create_spoiler" + command += " --create_spoiler" if race: command += " --race" if os.path.exists(os.path.join(player_files_path, meta_file_path)): diff --git a/Mystery.py b/Mystery.py index 6eebee13..acedaf3d 100644 --- a/Mystery.py +++ b/Mystery.py @@ -79,7 +79,7 @@ def main(): print(f"P{player} Weights: {path} >> {weights_cache[path]['description']}") erargs = parse_arguments(['--multi', str(args.multi)]) erargs.seed = seed - erargs.name = {x+1: name for x,name in enumerate(args.names.split(","))} + erargs.name = {x: name.strip() for x, name in enumerate(args.names.split(","), 1)} # only so it can be overwrittin in mystery erargs.create_spoiler = args.create_spoiler erargs.race = args.race erargs.outputname = seedname @@ -92,6 +92,7 @@ def main(): if args.rom: erargs.rom = args.rom + if args.enemizercli: erargs.enemizercli = args.enemizercli @@ -129,8 +130,11 @@ def main(): erargs.names = ",".join(erargs.name[i] for i in sorted(erargs.name.keys())) + del(erargs.name) + ERmain(erargs, seed) + def get_weights(path): try: if urllib.parse.urlparse(path).scheme: @@ -148,9 +152,11 @@ def get_weights(path): def interpret_on_off(value): return {"on": True, "off": False}.get(value, value) + def convert_to_on_off(value): return {True: "on", False: "off"}.get(value, value) + def get_choice(option, root) -> typing.Any: if option not in root: return None @@ -161,16 +167,21 @@ def get_choice(option, root) -> typing.Any: return interpret_on_off( random.choices(list(root[option].keys()), weights=list(map(int, root[option].values())))[0]) + +def handle_name(name: str): + return name.strip().replace(' ', '_') + + def roll_settings(weights): ret = argparse.Namespace() ret.name = get_choice('name', weights) if ret.name: - ret.name = ret.name.replace(" ", "-").replace("_", "-") + ret.name = handle_name(ret.name) glitches_required = get_choice('glitches_required', weights) if glitches_required not in ['none', 'no_logic']: - print("Only NMG and No Logic supported") + logging.warning("Only NMG and No Logic supported") glitches_required = 'none' - ret.logic = {'none': 'noglitches', 'no_logic': 'nologic'}[glitches_required] + ret.logic = {None: 'noglitches', 'none': 'noglitches', 'no_logic': 'nologic'}[glitches_required] # item_placement = get_choice('item_placement') # not supported in ER diff --git a/Utils.py b/Utils.py index 58d9ee1d..7e066b5a 100644 --- a/Utils.py +++ b/Utils.py @@ -30,10 +30,12 @@ def snes_to_pc(value): return ((value & 0x7F0000)>>1)|(value & 0x7FFF) def parse_player_names(names, players, teams): - names = [n for n in re.split(r'[, ]', names) if n] + names = (n.strip() for n in names.split(",")) + names = tuple(filter(bool, names)) ret = [] while names or len(ret) < teams: team = [n[:16] for n in names[:players]] + # where does the 16 character limit come from? while len(team) != players: team.append(f"Player {len(team) + 1}") ret.append(team) diff --git a/host.yaml b/host.yaml index 4f1c354f..7c777fb7 100644 --- a/host.yaml +++ b/host.yaml @@ -16,6 +16,10 @@ server_options: hint_cost: 1000 #set to 0 if you want free hints #options for MultiMystery.py multi_mystery_options: +#File name of the v1.0 J rom + rom_file: "Zelda no Densetsu - Kamigami no Triforce (Japan).sfc" +#teams, however, note that there is currently no way to supply names for teams 2+ through MultiMystery + teams: 1 #Where to place the resulting files output_path: "MultiMystery" #location of your Enemizer CLI, available here: https://github.com/Bonta0/Enemizer/releases