some small improvements for mystery

This commit is contained in:
Fabian Dill 2020-02-23 17:06:44 +01:00
parent 76b92f960a
commit 11e1ad6901
6 changed files with 33 additions and 13 deletions

View File

@ -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

View File

@ -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):

View File

@ -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)):

View File

@ -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

View File

@ -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)

View File

@ -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