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
|
||||
|
||||
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
|
||||
|
|
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))
|
||||
for player, name in enumerate(team, 1):
|
||||
world.player_names[player].append(name)
|
||||
|
||||
logger.info('')
|
||||
|
||||
for player in range(1, world.players + 1):
|
||||
|
|
|
@ -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)):
|
||||
|
|
19
Mystery.py
19
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
|
||||
|
|
4
Utils.py
4
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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue