diff --git a/pythonlib/games/ToolsTOR.py b/pythonlib/games/ToolsTOR.py index bb503ab..7201132 100644 --- a/pythonlib/games/ToolsTOR.py +++ b/pythonlib/games/ToolsTOR.py @@ -627,8 +627,16 @@ class ToolsTOR(ToolsTales): for p_file in entry["files"]: f_index = int(p_file["file"]) - with FileIO(pak[f_index].data, "rb") as f: - self.extract_menu_file(xml_path, p_file, f) + if p_file["is_sce"]: + theirsce = Theirsce(pak[f_index].data) + xml_text = self.get_xml_from_theirsce(theirsce, "Story") + self.id = 1 + + with open(xml_path / (p_file["friendly_name"] + ".xml"), "wb") as xml: + xml.write(xml_text) + else: + with FileIO(pak[f_index].data, "rb") as f: + self.extract_menu_file(xml_path, p_file, f) else: with FileIO(file_path, "rb") as f: self.extract_menu_file(xml_path, entry, f) @@ -748,25 +756,34 @@ class ToolsTOR(ToolsTales): for p_file in entry["files"]: pbar.set_description_str(p_file["friendly_name"]) f_index = p_file["file"] - base_offset = p_file["base_offset"] - - # Create pools of valid free spots - pools: list[list[int]] = [[x[0] - base_offset, x[1]-x[0]] for x in p_file["safe_areas"]] - pools.sort(key=lambda x: x[1]) - - # Get the xml - with open(xml_path / (p_file["friendly_name"] + ".xml"), "r", encoding='utf-8') as xmlFile: - root = etree.fromstring(xmlFile.read().replace("", ""), parser=etree.XMLParser(recover=True)) - - - with FileIO(pak[f_index].data, "rb") as f: - self.pack_menu_file(root, pools, base_offset, f) + if p_file["is_sce"]: + old_rsce = Theirsce(pak[f_index].data) + new_rsce = self.get_new_theirsce(old_rsce, xml_path / (p_file["friendly_name"] + ".xml")) + new_rsce.seek(0) + pak[f_index].data = new_rsce.read() - f.seek(0) - pak[f_index].data = f.read() + with open(out_path / file_last[:-4] / f"{f_index:04d}.bin", "wb") as f: + f.write(pak[f_index].data) + else: + base_offset = p_file["base_offset"] + + # Create pools of valid free spots + pools: list[list[int]] = [[x[0] - base_offset, x[1]-x[0]] for x in p_file["safe_areas"]] + pools.sort(key=lambda x: x[1]) - with open(out_path / file_last[:-4] / f"{f_index:04d}.bin", "wb") as f: - f.write(pak[f_index].data) + # Get the xml + with open(xml_path / (p_file["friendly_name"] + ".xml"), "r", encoding='utf-8') as xmlFile: + root = etree.fromstring(xmlFile.read().replace("", ""), parser=etree.XMLParser(recover=True)) + + + with FileIO(pak[f_index].data, "rb") as f: + self.pack_menu_file(root, pools, base_offset, f) + + f.seek(0) + pak[f_index].data = f.read() + + with open(out_path / file_last[:-4] / f"{f_index:04d}.bin", "wb") as f: + f.write(pak[f_index].data) else: pbar.set_description_str(entry["friendly_name"])