diff --git a/ToolsTOPX.py b/ToolsTOPX.py index 6e77a20..3634156 100644 --- a/ToolsTOPX.py +++ b/ToolsTOPX.py @@ -6,6 +6,7 @@ import struct import shutil import os import re +import io import pandas as pd import xml.etree.ElementTree as ET import lxml.etree as etree @@ -89,13 +90,79 @@ class ToolsTOPX(ToolsTales): for f in os.listdir( path ): if os.path.isfile( path+f) and '.cab' in f: - #Unpack the CAB into PAK3 file - fileName = self.story_XML_extract+f.replace(".cab", ".pak3") - subprocess.run(['expand', path+f, fileName]) - #Decompress using PAKCOMPOSER + Comptoe - #super().pakComposerAndComptoe(fileName, "-d", "-3") + file_name = self.story_XML_extract+'New/'+f.replace(".cab", ".pak3") + self.extract_Story_File(path+f, file_name) + + + + + #super().pakComposerAndComptoe(fileName, "-d", "-3") + + # Extract one single CAB file to the XML format + def extract_Story_File(self,original_cab_file, file_name): + + #1) Extract CAB file to the PAK3 format + #subprocess.run(['expand', original_cab_file, file_name]) + + #2) Decompress PAK3 to a folder + #self.pakcomposer("-d", file_name, os.path.join( self.story_XML_extract, "New")) + + #3) Grab TSS file from PAK3 folder + tss = self.get_tss_from_pak3( file_name.replace(".pak3", "")) + + #4) Extract TSS to XML + def get_tss_from_pak3(self, pak3_folder): + + if os.path.isdir(pak3_folder): + folder_name = os.path.basename(pak3_folder) + file_list = [os.path.dirname(pak3_folder) + "/" + folder_name + "/" + ele for ele in os.listdir(pak3_folder)] + + for file in file_list: + with open(file, "rb") as f: + data = f.read() + + if data[0:3] == b'TSS': + print("Extract TSS for file {}".format(folder_name)) + return io.BytesIO(data) + + def extract_tss_XML(self, tss, cab_file_name): + + root = etree.Element('SceneText') + + stringsNode = etree.SubElement(root, "Strings") + + #Start of the pointer + pointer_block = struct.unpack("