-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathseed_generator.py
More file actions
96 lines (87 loc) · 4.2 KB
/
seed_generator.py
File metadata and controls
96 lines (87 loc) · 4.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
from globals import BASE_DIR, read_json, write_json, copy_and_replace, clear_folder
from gooey import Gooey,GooeyParser
import os
import shutil
import subprocess
import re
# Handle Splash Screen
try:
import pyi_splash
pyi_splash.close()
except:
pass
# End Handle Splash Screen
@Gooey(program_name='KH1 Randomizer Seed Generator',
image_dir=BASE_DIR / 'Images/',
program_description = "Program to generate KH1 Randomizer seed.",
header_bg_color="#efcf78")
def main():
presets = read_json(BASE_DIR / "seed_generator_presets.json")
parser = GooeyParser()
parser.add_argument("archipelago_directory",
widget = "DirChooser",
default = presets["archipelago_directory"],
metavar = "Archipelago Directory",
help = "The directory where Archipelago is installed, which will be used for generation.")
parser.add_argument("settings_file",
widget = "FileChooser",
default = presets["settings_file"],
metavar = "Settings File",
help = "The settings file (yaml) to be used in generation.")
parser.add_argument("--replace_ap_world",
choices = ["Yes",
"No"],
default = presets["replace_ap_world"],
metavar = "Replace AP World",
help = "Determines whether to replace the AP World in the specified Archipelago installation. If unsure, set this to \"Yes\".")
parser.add_argument("--clean_players_folder",
choices = ["Yes",
"No"],
default = presets["clean_players_folder"],
metavar = "Clean Players Folder",
help = "Determines whether clear all previous data in Archipelago's \"Players\" folder before generation.\nSet to \"No\" if there are YAMLs or subfolders in this folder you'd like to keep.")
args = parser.parse_args()
write_json(BASE_DIR / "seed_generator_presets.json", args)
print("Handling moving AP World...")
handle_replacing_ap_world(args.archipelago_directory, args.replace_ap_world)
print("Handling moving YAML...")
move_settings_file_to_players_folder(args.archipelago_directory, args.settings_file, args.clean_players_folder)
print("Generating AP game...")
generated_seed_zip = generate_ap_game(args.archipelago_directory)
print("Moving generated game back to files...")
move_generated_seed_zip_to_files(args.archipelago_directory, generated_seed_zip)
def handle_replacing_ap_world(archipelago_directory, replace_ap_world):
if replace_ap_world == "Yes":
ap_world_file = BASE_DIR / "AP World/kh1.apworld"
destination_path = archipelago_directory + "/lib/worlds/kh1.apworld"
copy_and_replace(ap_world_file, destination_path)
print("Placed " + ap_world_file + " in " + destination_path)
def move_settings_file_to_players_folder(archipelago_directory, settings_file, clean_players_folder):
players_directory = archipelago_directory + "/Players/"
if not os.path.exists(players_directory):
os.makedirs(players_directory)
if clean_players_folder == "Yes":
clear_folder(players_directory)
shutil.copy(settings_file, players_directory)
print(settings_file + " copied to " + players_directory)
def generate_ap_game(archipelago_directory):
if os.path.exists(archipelago_directory + "/ArchipelagoGenerate.exe"):
p = subprocess.run(archipelago_directory + "/ArchipelagoGenerate.exe", input = "\n", capture_output=True, text=True)
else:
print("Didn't find ArchipelagoGenerate.exe! Exiting...")
exit(1)
print(p.stdout)
try:
generated_seed_zip = re.search("AP.*.zip", str(p.stdout)).group()
except:
print("Couldn't find a seed zip! Maybe generation failed?")
exit(1)
print("Found generated seed zip: " + str(generated_seed_zip))
return generated_seed_zip
def move_generated_seed_zip_to_files(archipelago_directory, generated_seed_zip):
if not os.path.exists(BASE_DIR / "Files/"):
os.makedirs(BASE_DIR / "Files/")
os.rename(archipelago_directory + "/Output/" + generated_seed_zip, BASE_DIR / "Files/" + generated_seed_zip)
print("Moved " + archipelago_directory + "/Output/" + generated_seed_zip + " to " + BASE_DIR / "Files/" + generated_seed_zip)
if __name__ == "__main__":
main()