diff --git a/Civ V Modpack UI Converter/Civ V Modpack UI Converter.pyproj b/Civ V Modpack UI Converter/Civ V Modpack UI Converter.pyproj index 8cbb2d665d9172ce05ca0da5c072982e8cb2f364..3fe95259732e91b2ec2b44e003002fd7a1e366fe 100644 --- a/Civ V Modpack UI Converter/Civ V Modpack UI Converter.pyproj +++ b/Civ V Modpack UI Converter/Civ V Modpack UI Converter.pyproj @@ -5,7 +5,7 @@ <ProjectGuid>ea28d07f-cd43-45d1-b01d-1eeeb360d215</ProjectGuid> <ProjectHome> </ProjectHome> - <StartupFile>Converter.py</StartupFile> + <StartupFile>converter.py</StartupFile> <SearchPath> </SearchPath> <WorkingDirectory>.</WorkingDirectory> @@ -25,8 +25,8 @@ <Content Include="Process.txt" /> </ItemGroup> <ItemGroup> - <Compile Include="Converter.py" /> - <Compile Include="LegacyConverter.py" /> + <Compile Include="converter.py" /> + <Compile Include="converter_legacy.py" /> </ItemGroup> <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Python Tools\Microsoft.PythonTools.targets" /> <!-- Uncomment the CoreCompile target to enable the Build command in diff --git a/Civ V Modpack UI Converter/Converter.py b/Civ V Modpack UI Converter/converter.py similarity index 72% rename from Civ V Modpack UI Converter/Converter.py rename to Civ V Modpack UI Converter/converter.py index 56bb73163ea14af6e7eda275e699043eee61cbb8..ce5c1cb1476deb22db249c68b32fbf1d50bf491f 100644 --- a/Civ V Modpack UI Converter/Converter.py +++ b/Civ V Modpack UI Converter/converter.py @@ -11,19 +11,19 @@ ######################################################################## -#-----------------------------------------# -# Customize these according to your setup # -#-----------------------------------------# +#------------------------------------------# +# Customize these according to your setup: # +#------------------------------------------# # Vanilla EUI file (in vanilla_packs_folder) -vanilla_eui_zip = "!EUI.7z" +VANILLA_EUI_ZIP = "!EUI.7z" # CUC-version file name of EUI -modded_eui_zip = "!EUI_CUC.7z" +MODDED_EUI_ZIP = "!EUI_CUC.7z" # Folder containing the vanilla packs in DLC folder # (Sid Meier's Civilization V\Assets\DLC\ThisVariableAsFolderName) -vanilla_packs_folder = "zz_Vanilla_Versions" +VANILLA_PACKS_FOLDER = "zz_Vanilla_Versions" #-----------------------------------------------------# # Don't change anything after here # @@ -40,6 +40,7 @@ import subprocess import shutil import re + ## Functions print("Defining functions...") # Closing functions @@ -55,7 +56,7 @@ def error(msg): input("Press Enter to exit. . .") exit(1) -# Get 7-zip install dir +# Get 7-zip install dir. def get_szip_dir(): key_location = r"SOFTWARE\7-Zip" value = "Path" @@ -67,7 +68,7 @@ def get_szip_dir(): error("No 7-zip installation found!\nIf you insist on using WinRar, change the script yourself ¯\_(ツ)_/¯") return install_dir -# Get Civ V install dir +# Get Civ V install dir. def get_civ_install_dir(): key_location = r"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\steam app 8930" value = "installlocation" @@ -79,38 +80,44 @@ def get_civ_install_dir(): error("No Civ 5 installation found!") return install_dir +# Unzip using 7-zip. +def unzip(file_path): + subprocess.run([szip, 'x', file_path], stdout=null, stderr=null) +def zip(dir_path, file_path): + subprocess.run([szip, 'a', dir_path, file_path], stdout=null, stderr=null) + ## Global values print("Configuring variables...") # Names -modpack_folder_name = "MP_MODSPACK" -preservation_extension = ".orig" -load_tag_marker = "ContextPtr:LoadNewContext" -unit_panel_tag = "LuaEvents.UnitPanelActionAddin" -unit_panel_insert_marker = "--Insert ContextPtr for modded unit panel buttons here\n" -eui_cuc_file_names = ["CityBannerManager.lua", +MODPACK_DIR_NAME = "MP_MODSPACK" +PRESERVATION_EXTENSION = ".orig" +LOAD_TAG_MARKER = "ContextPtr:LoadNewContext" +UNIT_PANEL_TAG = "LuaEvents.UnitPanelActionAddin" +UNIT_PANEL_INSERT_MARKER = "--Insert ContextPtr for modded unit panel buttons here\n" +EUI_CUC_FILE_NAME = ["CityBannerManager.lua", "CityView.lua", "Highlights.xml"] -unit_panel_file_name = "UnitPanel.lua" -ige_compat_file_name = "IGE_Window.lua" +UNIT_PANEL_FILE_NAME = "UnitPanel.lua" +IGE_COMPAT_FILE_NAME = "IGE_Window.lua" # Paths szip = j(get_szip_dir(), "7z.exe") modsave_path = j(os.getcwd(), "..") base_path = j(get_civ_install_dir(), "Assets", "DLC") -vanilla_packs_path = j(base_path, vanilla_packs_folder) +vanilla_packs_path = j(base_path, VANILLA_PACKS_FOLDER) eui_folder_path = j(base_path, "UI_bc1") -modpack_path = j(base_path, modpack_folder_name) +modpack_path = j(base_path, MODPACK_DIR_NAME) mods_path = j(modpack_path, "Mods") ui_folder_path = j(modpack_path, "UI") # Files -file_ext = "*.lua" -file_ext_recursive = j("**", file_ext) -vanilla_eui_zip_path = j(vanilla_packs_path, vanilla_eui_zip) -modded_eui_zip_path = j(base_path, modded_eui_zip) +FILE_EXT = "*.lua" +file_ext_recursive = j("**", FILE_EXT) +vanilla_eui_zip_path = j(vanilla_packs_path, VANILLA_EUI_ZIP) +modded_eui_zip_path = j(base_path, MODDED_EUI_ZIP) base_ui_files = j(base_path, "..", "UI", file_ext_recursive) gnk_ui_files = j(base_path, "Expansion", "UI", file_ext_recursive) bnw_ui_files = j(base_path, "Expansion2", "UI", file_ext_recursive) mod_files = j(mods_path, file_ext_recursive) -ui_files = j(ui_folder_path, file_ext) +ui_files = j(ui_folder_path, FILE_EXT) eui_files = j(eui_folder_path, file_ext_recursive) # Global variables @@ -120,10 +127,10 @@ unit_panel_addon_file_names = [] load_tags = {} -# Change working dir to base path +# Change working dir to base path. os.chdir(base_path) -# Get modpack zip +# Get modpack zip. while True: modpack_name = input("\nWhich pack should be converted?\n(Type 'EUI' to just convert EUI)\n") if modpack_name == "EUI": @@ -136,7 +143,7 @@ while True: print("This file doesn't exist, try again.") print("") -# Remove previous modpack +# Remove previous modpack. print("Removing previous modpack and EUI leftovers...") if os.path.isdir(modpack_path): shutil.rmtree(modpack_path) @@ -144,32 +151,32 @@ if os.path.isdir(eui_folder_path): shutil.rmtree(eui_folder_path) -# Compile EUI with colored unlocked citizens +# Compile EUI with colored unlocked citizens. if not os.path.isfile(modded_eui_zip_path): print("Creating colored unlocked citizens EUI...") - subprocess.run([szip, 'x', vanilla_eui_zip_path], stdout=null, stderr=null) - for eui_cuc_file_name in eui_cuc_file_names: + unzip(vanilla_eui_zip_path) + for eui_cuc_file_name in EUI_CUC_FILE_NAME: eui_cuc_file = g(j(modsave_path, eui_cuc_file_name + "*"))[0] orig_eui_file = g(j(eui_folder_path, "*", eui_cuc_file_name))[0] - shutil.move(orig_eui_file, orig_eui_file + preservation_extension) + shutil.move(orig_eui_file, orig_eui_file + PRESERVATION_EXTENSION) shutil.copyfile(eui_cuc_file, orig_eui_file) - subprocess.run([szip, 'a', modded_eui_zip, eui_folder_path], stdout=null, stderr=null) + zip(MODDED_EUI_ZIP, eui_folder_path) else: # Unzip EUI print("Unzipping EUI...") - subprocess.run([szip, 'x', modded_eui_zip_path], stdout=null, stderr=null) + unzip(modded_eui_zip_path) -# Stop here if only EUI should be converted +# Stop here if only EUI should be converted. if eui_only: quit() -# Unzip modpack zip +# Unzip modpack zip. print("Unzipping Modpack...") -subprocess.run([szip, 'x', j(vanilla_packs_path, modpack_zip)], stdout=null, stderr=null) +unzip(j(vanilla_packs_path, modpack_zip)) -# Get vanilla UI files +# Get vanilla UI files. print("Gathering Vanilla UI file list...") globbed = g(base_ui_files, recursive=True) globbed.extend(g(gnk_ui_files, recursive=True)) @@ -179,32 +186,32 @@ for file in globbed: if not file_name in ui_files: vanilla_ui_file_names.append(file_name) -# Manage mod files +# Manage mod files. print("Managing mod's files:") for mod_file in g(mod_files, recursive = True): mod_file_name = p.basename(mod_file) mod_file_short_path = mod_file.removeprefix(mods_path + os.sep) # IGE UI compat file - if mod_file_name == ige_compat_file_name: + if mod_file_name == IGE_COMPAT_FILE_NAME: print("\tProviding IGE-EUI-compat...") - shutil.move(mod_file, mod_file + preservation_extension) - shutil.copyfile(g(j(modsave_path, ige_compat_file_name + "*"))[0], mod_file) - # Delete UI overwrite duplicates + shutil.move(mod_file, mod_file + PRESERVATION_EXTENSION) + shutil.copyfile(g(j(modsave_path, IGE_COMPAT_FILE_NAME + "*"))[0], mod_file) + # Delete UI overwrite duplicates. elif mod_file_name in vanilla_ui_file_names: print('\tRemoving overwriting file "{}"...'.format(mod_file_short_path)) os.remove(mod_file) - # Get unit panel addon files + # Get unit panel addon files. else: with open(mod_file, 'r') as file: lines = file.readlines() for line in lines: - if unit_panel_tag in line: + if UNIT_PANEL_TAG in line: print('\tDetecting unit panel addon in file "{}"...'.format(mod_file_short_path)) unit_panel_addon_file_names.append(mod_file_name) break -# Delete useless desktop.ini (Thanks True...) +# Delete useless desktop.ini. (Thanks True...) ini_files = re.sub(r"\.\w+$", ".ini", mod_files) for ini_file in g(ini_files, recursive = True): ini_file_name = p.basename(ini_file) @@ -213,7 +220,7 @@ for ini_file in g(ini_files, recursive = True): os.remove(mod_file) -# Get stuff from UI files +# Get stuff from UI files. for ui_file in g(ui_files): ui_file_name = p.basename(ui_file) print("Getting tags from modpack UI's " + ui_file_name + "...") @@ -221,10 +228,10 @@ for ui_file in g(ui_files): with open(ui_file, 'r') as file: lines = file.readlines() for line in lines: - if line.startswith(load_tag_marker): + if line.startswith(LOAD_TAG_MARKER): load_tags[ui_file_name].append(line) -# Insert stuff into EUI files +# Insert stuff into EUI files. for eui_file in g(eui_files): eui_file_name = p.basename(eui_file) # Base UI files @@ -235,29 +242,29 @@ for eui_file in g(eui_files): for load_tag in load_tags[eui_file_name]: file.write(load_tag) # Modcompat unit panel - elif eui_file_name == unit_panel_file_name and len(unit_panel_addon_file_names) > 0: + elif eui_file_name == UNIT_PANEL_FILE_NAME and len(unit_panel_addon_file_names) > 0: print("Providing EUI-UnitPanel-Modcompat...") unit_panel_load_tags = "" for unit_panel_addon_file_name in unit_panel_addon_file_names: - unit_panel_load_tags += '{}("{}")\n'.format(load_tag_marker, p.splitext(unit_panel_addon_file_name)[0]) - shutil.move(eui_file, eui_file + preservation_extension) - shutil.copyfile(g(j(modsave_path, unit_panel_file_name + "*"))[0], eui_file) + unit_panel_load_tags += '{}("{}")\n'.format(LOAD_TAG_MARKER, p.splitext(unit_panel_addon_file_name)[0]) + shutil.move(eui_file, eui_file + PRESERVATION_EXTENSION) + shutil.copyfile(g(j(modsave_path, UNIT_PANEL_FILE_NAME + "*"))[0], eui_file) with open(eui_file, 'r') as file: lines = file.readlines() - lines[lines.index(unit_panel_insert_marker)] = unit_panel_load_tags + lines[lines.index(UNIT_PANEL_INSERT_MARKER)] = unit_panel_load_tags with open(eui_file, 'w') as file: file.write("".join(lines)) -# Move EUI folder +# Move EUI folder. print("Moving EUI folder...") shutil.move(eui_folder_path, modpack_path) print("Removing UI folder...") shutil.rmtree(ui_folder_path) -# Zip modpack folder +# Zip modpack folder. print("Zipping Modpack...") -subprocess.run([szip, 'a', modpack_name + "_EUI.7z", modpack_path], stdout=null, stderr=null) +zip(modpack_name + "_EUI.7z", modpack_path) -#Finishing up +# Finish up. quit() \ No newline at end of file diff --git a/Civ V Modpack UI Converter/LegacyConverter.py b/Civ V Modpack UI Converter/converter_legacy.py similarity index 63% rename from Civ V Modpack UI Converter/LegacyConverter.py rename to Civ V Modpack UI Converter/converter_legacy.py index 123566a2b2e96ef6b89d5eb2a22af29cb91b299c..3d1993d4a18181c2caa714886ca518585288cd66 100644 --- a/Civ V Modpack UI Converter/LegacyConverter.py +++ b/Civ V Modpack UI Converter/converter_legacy.py @@ -1,6 +1,6 @@ ######################################################################## # # -# © 2021 - MPL 2.0 - Rsge - v1.0.3 # +# © 2021 - MPL 2.0 - Rsge - v1.0.4 # # https://github.com/Rsge/Civ-V-EUI-Modpack-Converter # # # # WINDOWS ONLY! # @@ -11,41 +11,41 @@ ######################################################################## -#-----------------------------------------# -# Customize these according to your setup # -#-----------------------------------------# +#------------------------------------------# +# Customize these according to your setup: # +#------------------------------------------# # Vanilla EUI file (in vanilla_packs_folder) -vanilla_eui_zip = "!EUI.7z" +VANILLA_EUI_ZIP = "!EUI.7z" # CUC-version file name of EUI -modded_eui_zip = "!EUI_CUC.7z" +MODDED_EUI_ZIP = "!EUI_CUC.7z" # Folder containing this scripts project folder and it's needed edited files # (Sid Meier's Civilization V\Assets\DLC\ThisVariableAsFolderName) -modsave_folder = "zzz_Modsaves" +MODSAVE_DIR = "zzz_Modsaves" # Folder containing the vanilla packs -vanilla_packs_folder = "zz_Vanilla_Versions" +VANILLA_PACKS_DIR = "zz_Vanilla_Versions" -#-------------------------------------------# -# Maybe you also need to add to these lists # -#-------------------------------------------# +#--------------------------------------------# +# Maybe you also need to add to these lists: # +#--------------------------------------------# # Mod files overwriting original UI files, conflicting with EUI -delete_file_names = ["CivilopediaScreen.lua", +DELETE_FILE_NAMES = ["CivilopediaScreen.lua", "CityView.lua", "TechTree.lua", "TechButtonInclude.lua"] # Mod files adding new actions to units -unit_panel_modcompat_file_names = ["EvilSpiritsMission.lua", +UNIT_PANEL_MODPCOMPAT_FILE_NAME = ["EvilSpiritsMission.lua", "THTanukiMission.lua"] -#----------------------------------------------------# -# Don't change anything after here # +#-----------------------------------------------------# +# Don't change anything after here! # # [except if you know what you're doing of course ;)] # -#----------------------------------------------------# +#-----------------------------------------------------# # Imports import os @@ -55,42 +55,43 @@ import subprocess import shutil import re -# Change to base DLC directory +# Change to base DLC directory. os.chdir("../..") -## Global Values +## Global values print("Configuring variables...") # Names -modpack_folder_name = "MP_MODSPACK" -eui_cuc_file_names = ["CityBannerManager.lua", +MODPACK_DIR_NAME = "MP_MODSPACK" +EUI_CUC_FILE_NAMES = ["CityBannerManager.lua", "CityView.lua", "Highlights.xml"] -load_tag = "ContextPtr:LoadNewContext" -unit_panel_file_name = "UnitPanel.lua" -ige_compat_file_name = "IGE_Window.lua" +LOAD_TAG = "ContextPtr:LoadNewContext" +UNIT_PANEL_FILE_NAME = "UnitPanel.lua" +IGE_COMPAT_FILE_NAME = "IGE_Window.lua" # Paths base_path = os.getcwd() -modsave_path = j(base_path, modsave_folder) -modpack_path = j(base_path, modpack_folder_name) -vanilla_packs_path = j(base_path, vanilla_packs_folder) +modsave_path = j(base_path, MODSAVE_DIR) +modpack_path = j(base_path, MODPACK_DIR_NAME) +vanilla_packs_path = j(base_path, VANILLA_PACKS_DIR) ui_path = j(modpack_path, "UI") eui_path = j(base_path, "UI_bc1") # Files -file_ext = "*.lua" -base_eui_zip_path = j(vanilla_packs_path, vanilla_eui_zip) -modded_eui_zip_path = j(base_path, modded_eui_zip) -mod_files = j(modpack_path, "Mods", "**", file_ext) -ui_files = j(ui_path, file_ext) -eui_files = j(eui_path, "*", file_ext) -# This only runs with 7zip. If you want to use WinRar you'll have to change the methods yourself - or just download 7zip =P -szip = r"C:\Program Files\7-Zip\7z.exe" - -# Global Variables +FILE_EXT = "*.lua" +base_eui_zip_path = j(vanilla_packs_path, VANILLA_EUI_ZIP) +modded_eui_zip_path = j(base_path, MODDED_EUI_ZIP) +mod_files = j(modpack_path, "Mods", "**", FILE_EXT) +ui_files = j(ui_path, FILE_EXT) +eui_files = j(eui_path, "*", FILE_EXT) +# This only runs with 7-zip. If you want to use WinRar you'll have to change the methods yourself - or just download 7-zip =P +SZIP = r"C:\Program Files\7-Zip\7z.exe" + +# Global variables load_tags = {} unit_panel_modcompat_needed = False null = open(os.devnull, 'w') eui_only = False + # Quitting function def quit(): null.close() @@ -98,7 +99,7 @@ def quit(): input("Press Enter to exit. . .") exit(0) -# Get modpack zip +# Get modpack zip. while True: modpack_name = input("\nWhich pack should be converted?\n(Type 'EUI' to just convert EUI)\n") if modpack_name == "EUI": @@ -111,63 +112,63 @@ while True: print("This file doesn't exist, try again.") -# Remove previous modpack +# Remove previous modpack. print("Removing previous modpack leftovers...") if os.path.isdir(modpack_path): shutil.rmtree(modpack_path) if os.path.isdir(eui_path): shutil.rmtree(eui_path) -# Compile EUI with colored unlocked citizens +# Compile EUI with colored unlocked citizens. if not os.path.isfile(modded_eui_zip_path): print("Creating colored unlocked Citizens EUI...") - subprocess.run([szip, 'x', base_eui_zip_path], stdout=null, stderr=null) + subprocess.run([SZIP, 'x', base_eui_zip_path], stdout=null, stderr=null) #shutil.move(j(vanilla_packs_path, eui_file_name), eui_path) - for eui_cuc_file_name in eui_cuc_file_names: + for eui_cuc_file_name in EUI_CUC_FILE_NAMES: eui_cuc_file = g(j(modsave_path, eui_cuc_file_name + "*"))[0] orig_eui_file = g(j(eui_path, "*", eui_cuc_file_name))[0] shutil.move(orig_eui_file, orig_eui_file + ".orig") shutil.copyfile(eui_cuc_file, orig_eui_file) - subprocess.run([szip, 'a', modded_eui_zip, eui_path], stdout=null, stderr=null) + subprocess.run([SZIP, 'a', MODDED_EUI_ZIP, eui_path], stdout=null, stderr=null) elif not eui_only: - # Unzip EUI + # Unzip EUI. print("Unzipping EUI...") - subprocess.run([szip, 'x', modded_eui_zip_path], stdout=null, stderr=null) + subprocess.run([SZIP, 'x', modded_eui_zip_path], stdout=null, stderr=null) -# Stop here if only EUI should be converted +# Stop here if only EUI should be converted. if eui_only: if os.path.isdir(eui_path): shutil.rmtree(eui_path) quit() -# Unzip modpack zip +# Unzip modpack zip. print("Unzipping Modpack...") -subprocess.run([szip, 'x', j(vanilla_packs_path, modpack_zip)], stdout=null, stderr=null) +subprocess.run([SZIP, 'x', j(vanilla_packs_path, modpack_zip)], stdout=null, stderr=null) -# Manage mod files +# Manage mod files. for mod_file in g(mod_files, recursive = True): mod_file_path = mod_file.split(os.sep) mod_file_name = mod_file_path[len(mod_file_path) - 1] # IGE UI compat file - if mod_file_name == ige_compat_file_name: + if mod_file_name == IGE_COMPAT_FILE_NAME: print("Providing IGE-EUI-compat...") shutil.move(mod_file, mod_file + ".orig") - shutil.copyfile(g(j(modsave_path, ige_compat_file_name + "*"))[0], mod_file) + shutil.copyfile(g(j(modsave_path, IGE_COMPAT_FILE_NAME + "*"))[0], mod_file) - # Delete UI overwrite duplicates - if mod_file_name in delete_file_names: + # Delete UI overwrite duplicates. + if mod_file_name in DELETE_FILE_NAMES: print("Removing overwriting file " + mod_file_name + "...") os.remove(mod_file) - # Find out if modcompat unit panel needed - if mod_file_name in unit_panel_modcompat_file_names: + # Find out if modcompat unit panel needed. + if mod_file_name in UNIT_PANEL_MODPCOMPAT_FILE_NAME: print("UnitPanel modcompat need detected...") unit_panel_modcompat_needed = True -# Delete useless desktop.ini (Thanks True...) +# Delete useless desktop.ini. (Thanks True...) ini_files = re.sub(r"\.\w+$", ".ini", mod_files) for ini_file in g(ini_files, recursive = True): ini_file_path = ini_file.split(os.sep) @@ -177,7 +178,7 @@ for ini_file in g(ini_files, recursive = True): os.remove(mod_file) -# Get stuff from UI files +# Get stuff from UI files. for ui_file in g(ui_files): with open(ui_file, 'r') as file: lines = file.readlines() @@ -186,10 +187,10 @@ for ui_file in g(ui_files): print("Getting tags from " + ui_file_name + "...") load_tags[ui_file_name] = [] for line in lines: - if line.startswith(load_tag): + if line.startswith(LOAD_TAG): load_tags[ui_file_name].append(line) -# Insert stuff into EUI files +# Insert stuff into EUI files. for eui_file in g(eui_files): eui_file_path = eui_file.split(os.sep) eui_file_name = eui_file_path[len(eui_file_path) - 1] @@ -198,24 +199,24 @@ for eui_file in g(eui_files): print("Writing tags to " + eui_file_name + "...") with open(eui_file, 'a') as file: file.write('\n') - for load_tag in load_tags[eui_file_name]: - file.write(load_tag) + for LOAD_TAG in load_tags[eui_file_name]: + file.write(LOAD_TAG) # Modcompat unit panel - elif eui_file_name == unit_panel_file_name and unit_panel_modcompat_needed: + elif eui_file_name == UNIT_PANEL_FILE_NAME and unit_panel_modcompat_needed: print("Providing EUI-UnitPanel-Modcompat...") shutil.move(eui_file, eui_file + ".orig") - shutil.copyfile(g(j(modsave_path, unit_panel_file_name + "*"))[0], eui_file) + shutil.copyfile(g(j(modsave_path, UNIT_PANEL_FILE_NAME + "*"))[0], eui_file) -# Move EUI folder +# Move EUI folder. print("Moving EUI folder...") shutil.move(eui_path, modpack_path) print("Removing UI folder...") shutil.rmtree(ui_path) -# Zip modpack folder +# Zip modpack folder. print("Zipping Modpack...") -subprocess.run([szip, 'a', modpack_name + "_EUI.7z", modpack_path], stdout=null, stderr=null) +subprocess.run([SZIP, 'a', modpack_name + "_EUI.7z", modpack_path], stdout=null, stderr=null) -#Finishing up +# Finish up. quit() \ No newline at end of file