Files
Bubberstation/tools/mapmerge/mapmerger.py

84 lines
3.0 KiB
Python

import map_helpers
import sys
import os
import pathlib
import shutil
#main("../../_maps/")
def main(map_folder, tgm=0):
list_of_files = list()
for root, directories, filenames in os.walk(map_folder):
for filename in [f for f in filenames if f.endswith(".dmm")]:
list_of_files.append(pathlib.Path(root, filename))
last_dir = ""
for i in range(0, len(list_of_files)):
this_dir = list_of_files[i].parent
if last_dir != this_dir:
print("--------------------------------")
last_dir = this_dir
print("[{}]: {}".format(i, str(list_of_files[i])[len(map_folder):]))
print("--------------------------------")
in_list = input("List the maps you want to merge (example: 1,3-5,12):\n")
in_list = in_list.replace(" ", "")
in_list = in_list.split(",")
valid_indices = list()
for m in in_list:
index_range = m.split("-")
if len(index_range) == 1:
index = string_to_num(index_range[0])
if index >= 0 and index < len(list_of_files):
valid_indices.append(index)
elif len(index_range) == 2:
index0 = string_to_num(index_range[0])
index1 = string_to_num(index_range[1])
if index0 >= 0 and index0 <= index1 and index1 < len(list_of_files):
valid_indices.extend(range(index0, index1 + 1))
if tgm == "1":
print("\nMaps will be converted to tgm.")
tgm = True
else:
print("\nMaps will not be converted to tgm.")
tgm = False
print("\nMerging these maps:")
for i in valid_indices:
print(str(list_of_files[i])[len(map_folder):])
merge = input("\nPress Enter to merge...\n")
if merge == "abort":
print("\nAborted map merge.")
sys.exit()
else:
for i in valid_indices:
path_str = str(list_of_files[i])
shutil.copyfile(path_str, path_str + ".before")
path_str_pretty = path_str[len(map_folder):]
try:
error = map_helpers.merge_map(path_str, path_str + ".backup", tgm)
if error > 1:
print(map_helpers.error[error])
os.remove(path_str + ".before")
continue
if error == 1:
print(map_helpers.error[1])
print("MERGED: {}".format(path_str_pretty))
print(" - ")
except FileNotFoundError:
print("ERROR: File not found! Make sure you run 'Prepare Maps.bat' before merging.")
print("MISSING BACKUP FILE: " + path_str_pretty + ".backup")
print(" - ")
print("\nFinished merging.")
print("\nNOTICE: A version of the map files from before merging have been created for debug purposes.\nDo not delete these files until it is sure your map edits have no undesirable changes.")
def string_to_num(s):
try:
return int(s)
except ValueError:
return -1
main(sys.argv[1], sys.argv[2])