From f4ff96c6d5876bb5ae8f2f9a6d93ba6cee6383cd Mon Sep 17 00:00:00 2001 From: Stewie Date: Sun, 20 Mar 2022 12:48:37 -0400 Subject: [PATCH] Adding decompress with comptoe --- TOR_Test.py | 2 - ToolsTales.py | 53 ++++++++++++++++---------- __pycache__/ToolsTales.cpython-38.pyc | Bin 22582 -> 23231 bytes 3 files changed, 32 insertions(+), 23 deletions(-) diff --git a/TOR_Test.py b/TOR_Test.py index 154374a..e625a1e 100644 --- a/TOR_Test.py +++ b/TOR_Test.py @@ -12,8 +12,6 @@ import lxml.etree as etree tool = ToolsTOR.ToolsTOR("TBL_All.json") -tool.pakComposer_Comptoe("11181.pak3", "-d", "-3", True, r"G:\TalesHacking\PythonLib_Playground\Data\TOR\Menu\New") - tool.extract_All_Menu() diff --git a/ToolsTales.py b/ToolsTales.py index 8afe391..0f50d75 100644 --- a/ToolsTales.py +++ b/ToolsTales.py @@ -60,30 +60,42 @@ class ToolsTales: # action is -d or -c # fileType : -0, -1 or -3 # basePath is the location of the PAK file you want to compress/decompress - def pakComposer_Comptoe(self, fileName, action, fileType, do_comptoe, working): + def pakComposer_Comptoe(self, file_name, action, file_type, do_comptoe, working): - #Delete the file if already there + #Delete the file if already there + file_number = file_name.split(".")[0] if (action == '-c'): - if os.path.exists(fileName): - os.remove( fileName.replace(".pak{}", fileType[1])) + if os.path.exists(file_name): + os.remove( file_name.replace(".pak{}", file_type[1])) else: - shutil.rmtree(fileName.split(".")[0]) + + if os.path.exists(working+"/"+file_number): + shutil.rmtree(working+"/"+file_number) #Run Pakcomposer with parameters - args = [ "pakcomposer", action, fileName, fileType] - - if do_comptoe: - args.append("-u") - args.append("-x") - + args = [ "pakcomposer", action, file_name, file_type, "-x"] listFile = subprocess.run( args, cwd=working ) - print(listFile) - + if do_comptoe: + + files = [ele for ele in os.listdir(working+"/"+file_number) if ".compress" in ele] + for ele in files: + + ctype=0 + with open(working+"/{}/".format(file_number)+ele, "rb") as f: + ctype = ord(f.read(1)) + + args = ["comptoe", "-d{}".format(ctype), ele, ele.split(".")[0]+"d.unknown"] + listFile = subprocess.run( + args, + cwd=working+"/"+file_number + ) + + def fps4_action(self, action, b_file, dat_file, destination): fps4.dump_fps4(b_file, dat_file, destination) @@ -844,16 +856,13 @@ class ToolsTales: return [pointers_offset, pointers_value] - def prepare_Menu_File(self, file_definition): + def prepare_Menu_File(self, file_original): - file_original = file_definition['File_Original'] file_name = os.path.basename(file_original) - file_number = file_name.split(".")[0] - extension = file_name.split(".")[-1] #Copy the files under Menu Folder menu_path = "../Data/{}/Menu/New/".format(self.gameName) - shutil.copy( file_definition['File_Original'], menu_path+file_name) + shutil.copy( file_original, menu_path+file_name) #Extract if needed (PakComposer or other) if "pak" in file_name: @@ -911,13 +920,15 @@ class ToolsTales: self.mkdir("../Data/{}/Menu/New".format(self.gameName)) + + #Prepare the menu files (Unpack PAK files and use comptoe) + files_to_prepare = list(dict.fromkeys([ele['File_Original'] for ele in self.menu_files_json])) + res = [ self.prepare_Menu_File(ele) for ele in files_to_prepare] + for file_definition in self.menu_files_json: print("...{}".format(file_definition['File_Extract'])) - - self.prepare_Menu_File(file_definition) - self.extract_Menu_File(file_definition) diff --git a/__pycache__/ToolsTales.cpython-38.pyc b/__pycache__/ToolsTales.cpython-38.pyc index 1401b5117534e275eca2dad692614e0649b7bf3b..f8dd4e738f9860a788475aa67b8d5ccaaeb0bbdd 100644 GIT binary patch delta 4882 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 delta 4717 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