some small improvements for mystery
This commit is contained in:
parent
76b92f960a
commit
11e1ad6901
|
@ -8,6 +8,7 @@ from EntranceShuffle import door_addresses
|
||||||
from Utils import int16_as_bytes
|
from Utils import int16_as_bytes
|
||||||
|
|
||||||
class World(object):
|
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):
|
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.players = players
|
||||||
self.teams = 1
|
self.teams = 1
|
||||||
|
|
1
Main.py
1
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))
|
logger.info('%s%s', 'Team%d: ' % i if world.teams > 1 else 'Players: ', ', '.join(team))
|
||||||
for player, name in enumerate(team, 1):
|
for player, name in enumerate(team, 1):
|
||||||
world.player_names[player].append(name)
|
world.player_names[player].append(name)
|
||||||
|
|
||||||
logger.info('')
|
logger.info('')
|
||||||
|
|
||||||
for player in range(1, world.players + 1):
|
for player in range(1, world.players + 1):
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
__author__ = "Berserker55" # you can find me on the ALTTP Randomizer Discord
|
__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
|
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
|
#zip_password = multi_mystery_options["zip_password"] not at this time
|
||||||
player_name = multi_mystery_options["player_name"]
|
player_name = multi_mystery_options["player_name"]
|
||||||
meta_file_path = multi_mystery_options["meta_file_path"]
|
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}"
|
py_version = f"{sys.version_info.major}.{sys.version_info.minor}"
|
||||||
|
@ -57,7 +59,7 @@ if __name__ == "__main__":
|
||||||
lfile = file.lower()
|
lfile = file.lower()
|
||||||
if lfile.endswith(".yaml") and lfile != meta_file_path.lower():
|
if lfile.endswith(".yaml") and lfile != meta_file_path.lower():
|
||||||
player_files.append(file)
|
player_files.append(file)
|
||||||
print(f"Player {file[:-5]} found.")
|
print(f"Found player's file {file}.")
|
||||||
player_count = len(player_files)
|
player_count = len(player_files)
|
||||||
if player_count == 0:
|
if player_count == 0:
|
||||||
feedback(f"No player files found. Please put them in a {player_files_path} folder.")
|
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.")
|
print(player_count, "Players found.")
|
||||||
|
|
||||||
player_string = ""
|
player_string = ""
|
||||||
for i,file in enumerate(player_files):
|
for i, file in enumerate(player_files, 1):
|
||||||
player_string += f"--p{i+1} {os.path.join(player_files_path, file)} "
|
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"):
|
if os.path.exists("BerserkerMultiServer.exe"):
|
||||||
basemysterycommand = "BerserkerMystery.exe" #compiled windows
|
basemysterycommand = "BerserkerMystery.exe" #compiled windows
|
||||||
|
@ -78,8 +79,8 @@ if __name__ == "__main__":
|
||||||
basemysterycommand = f"py -{py_version} Mystery.py" #source
|
basemysterycommand = f"py -{py_version} Mystery.py" #source
|
||||||
|
|
||||||
command = f"{basemysterycommand} --multi {len(player_files)} {player_string} " \
|
command = f"{basemysterycommand} --multi {len(player_files)} {player_string} " \
|
||||||
f"--names {','.join(player_names)} --enemizercli {enemizer_path} " \
|
f"--rom \"{rom_file}\" --enemizercli \"{enemizer_path}\" " \
|
||||||
f"--outputpath {output_path}"
|
f"--outputpath \"{output_path}\" --teams {teams}"
|
||||||
|
|
||||||
if create_spoiler:
|
if create_spoiler:
|
||||||
command += " --create_spoiler"
|
command += " --create_spoiler"
|
||||||
|
|
19
Mystery.py
19
Mystery.py
|
@ -79,7 +79,7 @@ def main():
|
||||||
print(f"P{player} Weights: {path} >> {weights_cache[path]['description']}")
|
print(f"P{player} Weights: {path} >> {weights_cache[path]['description']}")
|
||||||
erargs = parse_arguments(['--multi', str(args.multi)])
|
erargs = parse_arguments(['--multi', str(args.multi)])
|
||||||
erargs.seed = seed
|
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.create_spoiler = args.create_spoiler
|
||||||
erargs.race = args.race
|
erargs.race = args.race
|
||||||
erargs.outputname = seedname
|
erargs.outputname = seedname
|
||||||
|
@ -92,6 +92,7 @@ def main():
|
||||||
|
|
||||||
if args.rom:
|
if args.rom:
|
||||||
erargs.rom = args.rom
|
erargs.rom = args.rom
|
||||||
|
|
||||||
if args.enemizercli:
|
if args.enemizercli:
|
||||||
erargs.enemizercli = 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()))
|
erargs.names = ",".join(erargs.name[i] for i in sorted(erargs.name.keys()))
|
||||||
|
|
||||||
|
del(erargs.name)
|
||||||
|
|
||||||
ERmain(erargs, seed)
|
ERmain(erargs, seed)
|
||||||
|
|
||||||
|
|
||||||
def get_weights(path):
|
def get_weights(path):
|
||||||
try:
|
try:
|
||||||
if urllib.parse.urlparse(path).scheme:
|
if urllib.parse.urlparse(path).scheme:
|
||||||
|
@ -148,9 +152,11 @@ def get_weights(path):
|
||||||
def interpret_on_off(value):
|
def interpret_on_off(value):
|
||||||
return {"on": True, "off": False}.get(value, value)
|
return {"on": True, "off": False}.get(value, value)
|
||||||
|
|
||||||
|
|
||||||
def convert_to_on_off(value):
|
def convert_to_on_off(value):
|
||||||
return {True: "on", False: "off"}.get(value, value)
|
return {True: "on", False: "off"}.get(value, value)
|
||||||
|
|
||||||
|
|
||||||
def get_choice(option, root) -> typing.Any:
|
def get_choice(option, root) -> typing.Any:
|
||||||
if option not in root:
|
if option not in root:
|
||||||
return None
|
return None
|
||||||
|
@ -161,16 +167,21 @@ def get_choice(option, root) -> typing.Any:
|
||||||
return interpret_on_off(
|
return interpret_on_off(
|
||||||
random.choices(list(root[option].keys()), weights=list(map(int, root[option].values())))[0])
|
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):
|
def roll_settings(weights):
|
||||||
ret = argparse.Namespace()
|
ret = argparse.Namespace()
|
||||||
ret.name = get_choice('name', weights)
|
ret.name = get_choice('name', weights)
|
||||||
if ret.name:
|
if ret.name:
|
||||||
ret.name = ret.name.replace(" ", "-").replace("_", "-")
|
ret.name = handle_name(ret.name)
|
||||||
glitches_required = get_choice('glitches_required', weights)
|
glitches_required = get_choice('glitches_required', weights)
|
||||||
if glitches_required not in ['none', 'no_logic']:
|
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'
|
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')
|
# item_placement = get_choice('item_placement')
|
||||||
# not supported in ER
|
# not supported in ER
|
||||||
|
|
4
Utils.py
4
Utils.py
|
@ -30,10 +30,12 @@ def snes_to_pc(value):
|
||||||
return ((value & 0x7F0000)>>1)|(value & 0x7FFF)
|
return ((value & 0x7F0000)>>1)|(value & 0x7FFF)
|
||||||
|
|
||||||
def parse_player_names(names, players, teams):
|
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 = []
|
ret = []
|
||||||
while names or len(ret) < teams:
|
while names or len(ret) < teams:
|
||||||
team = [n[:16] for n in names[:players]]
|
team = [n[:16] for n in names[:players]]
|
||||||
|
# where does the 16 character limit come from?
|
||||||
while len(team) != players:
|
while len(team) != players:
|
||||||
team.append(f"Player {len(team) + 1}")
|
team.append(f"Player {len(team) + 1}")
|
||||||
ret.append(team)
|
ret.append(team)
|
||||||
|
|
|
@ -16,6 +16,10 @@ server_options:
|
||||||
hint_cost: 1000 #set to 0 if you want free hints
|
hint_cost: 1000 #set to 0 if you want free hints
|
||||||
#options for MultiMystery.py
|
#options for MultiMystery.py
|
||||||
multi_mystery_options:
|
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
|
#Where to place the resulting files
|
||||||
output_path: "MultiMystery"
|
output_path: "MultiMystery"
|
||||||
#location of your Enemizer CLI, available here: https://github.com/Bonta0/Enemizer/releases
|
#location of your Enemizer CLI, available here: https://github.com/Bonta0/Enemizer/releases
|
||||||
|
|
Loading…
Reference in New Issue