give Mystery.py the create_diff argument, then make MultiMystery.py use them

This commit is contained in:
Fabian Dill 2020-08-26 22:28:48 +02:00
parent ad895f045c
commit a0c4337bac
3 changed files with 21 additions and 12 deletions

View File

@ -101,6 +101,8 @@ if __name__ == "__main__":
command += " --create_spoiler"
if create_spoiler == 2:
command += " --skip_playthrough"
if zip_diffs:
command += " --create_diff"
if race:
command += " --race"
if os.path.exists(os.path.join(player_files_path, meta_file_path)):
@ -108,9 +110,10 @@ if __name__ == "__main__":
print(command)
import time
start = time.perf_counter()
text = subprocess.check_output(command, shell=True).decode()
print(f"Took {time.perf_counter()-start:.3f} seconds to generate rom(s).")
print(f"Took {time.perf_counter() - start:.3f} seconds to generate multiworld.")
seedname = ""
for segment in text.split():
@ -161,25 +164,29 @@ if __name__ == "__main__":
ipv4 = (host if host else get_public_ipv4()) + ":" + str(port)
def _handle_file(file: str):
if zip_diffs:
# the main reason for using threading, the patch is created using bsdiff4, which frees the GIL
diff = os.path.split(create_patch_file(os.path.join(output_path, file), ipv4))[1]
pack_file(diff)
if zip_diffs == 2:
remove_zipped_file(diff)
def _handle_sfc_file(file: str):
if zip_roms:
pack_file(file)
if zip_roms == 2 and player_name.lower() not in file.lower():
remove_zipped_file(file)
def _handle_diff_file(file: str):
if zip_diffs > 0:
pack_file(file)
if zip_diffs == 2:
remove_zipped_file(file)
with concurrent.futures.ThreadPoolExecutor() as pool:
futures = []
with zipfile.ZipFile(zipname, "w", compression=compression, compresslevel=9) as zf:
for file in os.listdir(output_path):
if file.endswith(".sfc") and seedname in file:
futures.append(pool.submit(_handle_file, file))
if seedname in file:
if file.endswith(".sfc"):
futures.append(pool.submit(_handle_sfc_file, file))
elif file.endswith(".bmbp"):
futures.append(pool.submit(_handle_diff_file, file))
if zip_multidata and os.path.exists(os.path.join(output_path, multidataname)):
pack_file(multidataname)

View File

@ -40,6 +40,7 @@ def mystery_argparse():
parser.add_argument('--meta', default=None)
parser.add_argument('--log_output_path', help='Path to store output log')
parser.add_argument('--loglevel', default='info', help='Sets log level')
parser.add_argument('--create_diff', action="store_true")
parser.add_argument('--yaml_output', default=0, type=lambda value: min(max(int(value), 0), 255),
help='Output rolled mystery results to yaml up to specified number (made for async multiworld)')
@ -93,6 +94,7 @@ def main(args=None, callback = ERmain):
erargs.seed = seed
erargs.name = {x: "" for x in range(1, args.multi + 1)} # only so it can be overwrittin in mystery
erargs.create_spoiler = args.create_spoiler
erargs.create_diff = args.create_diff
erargs.race = args.race
erargs.skip_playthrough = args.skip_playthrough
erargs.outputname = seedname

View File

@ -71,7 +71,7 @@ multi_mystery_options:
#1 -> Create a zip
#2 -> Create a zip and delete the ROMs that will be in it, except the hosts (requires player_name to be set correctly)
zip_roms: 0
# zip diff files, 2-> delete the non-zipped one. Note that diffs are only created if they are placed in a zip.
# zip diff files, 2 -> delete the non-zipped one. -1 -> create them without zipping
zip_diffs: 2
#include the spoiler log in the zip, 2 -> delete the non-zipped one
zip_spoiler: 0