diff --git a/ToolsTOPX.py b/ToolsTOPX.py index 6b3a3ce..c290e0f 100644 --- a/ToolsTOPX.py +++ b/ToolsTOPX.py @@ -130,15 +130,15 @@ class ToolsTOPX(ToolsTales): #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")) - + self.id = 1 + self.speaker_id = 1 + self.struct_id = 1 if os.path.isdir(file_name.replace(".pak3", "")): - #3) Grab TSS file from PAK3 folder + #2) Grab TSS file from PAK3 folder tss = self.get_tss_from_pak3( file_name.replace(".pak3", "")) - #4) Extract TSS to XML + #3) Extract TSS to XML self.extract_tss_XML(tss, original_cab_file) def get_tss_from_pak3(self, pak3_folder): @@ -164,21 +164,26 @@ class ToolsTOPX(ToolsTales): tss.read(12) strings_offset = struct.unpack('") + [self.create_Entry(root.find("Strings"), pointer_offset, jap,1, "Struct", struct_speaker_id, unknown_pointer) for jap in jap_split_bubble] self.struct_id += 1 - return person_offset + return speaker_offset + + def add_Speaker_Entry(self, root, pointer_offset, japText): + + speaker_entries = [entry for entry in root.iter("Entry") if entry != None and entry.find("JapaneseText").text == japText] + struct_speaker_id = 0 + + if len(speaker_entries) > 0: + + #Speaker already exist + speaker_entries[0].find("PointerOffset").text = speaker_entries[0].find("PointerOffset").text + ",{}".format(pointer_offset) + struct_speaker_id = speaker_entries[0].find("Id").text + + else: + + #Need to create that new speaker + entry_node = etree.SubElement(root, "Entry") + etree.SubElement(entry_node,"PointerOffset").text = str(pointer_offset) + etree.SubElement(entry_node,"JapaneseText").text = str(japText) + etree.SubElement(entry_node,"EnglishText").text = '' + etree.SubElement(entry_node,"Notes").text = '' + etree.SubElement(entry_node,"Id").text = str(self.speaker_id) + struct_speaker_id = self.speaker_id + self.speaker_id += 1 + + return struct_speaker_id def extract_From_String(self, f, strings_offset, pointer_offset, text_offset, root): f.seek(text_offset, 0) japText = self.bytes_to_text(f, text_offset)[0] - self.create_Entry(root, pointer_offset, japText,1, "Other Strings") + self.create_Entry(root, pointer_offset, japText,1, "Other Strings", -1, "") def extract_Story_Pointers(self, f, bytecode, strings_offset, pointer_block_size):