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