From d2617e6110fa78da2042b8028865429b5b1c2b23 Mon Sep 17 00:00:00 2001 From: Stewie Date: Sun, 27 Mar 2022 15:38:24 -0400 Subject: [PATCH 1/6] add ToolsTODDC.py with Init --- ToolsTODDC.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 ToolsTODDC.py diff --git a/ToolsTODDC.py b/ToolsTODDC.py new file mode 100644 index 0000000..aa9687d --- /dev/null +++ b/ToolsTODDC.py @@ -0,0 +1,24 @@ +from ToolsTales import ToolsTales +import subprocess +from dicttoxml import dicttoxml +import json +import struct +import shutil +import os +import re +import pandas as pd +import xml.etree.ElementTree as ET +import lxml.etree as etree +import comptolib +from xml.dom import minidom +from pathlib import Path +import string +import io + +class ToolsTODDC(ToolsTales): + + + def __init__(self, tbl): + + super().__init__("TODDC", tbl, "Tales-of-Destiny-DC") + \ No newline at end of file From 4efdda1d861c22ed44f7d5350dcd6c4d36a5febc Mon Sep 17 00:00:00 2001 From: Stewie Date: Sun, 27 Mar 2022 17:55:52 -0400 Subject: [PATCH 2/6] Creating itable using regular tbl form toddc --- ToolsTODDC.py | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/ToolsTODDC.py b/ToolsTODDC.py index aa9687d..58d97b3 100644 --- a/ToolsTODDC.py +++ b/ToolsTODDC.py @@ -20,5 +20,29 @@ class ToolsTODDC(ToolsTales): def __init__(self, tbl): - super().__init__("TODDC", tbl, "Tales-of-Destiny-DC") + self.gameName = "TODDC" + self.repo_name = "Tales-of-Destiny-DC" + self.basePath = os.getcwd() + + + with open("../Tales-of-Destiny-DC/Data/Misc/toddc.tbl", encoding="utf-8") as f: + data = f.readlines() + hex_list = [bytes.fromhex(str(ele.split("=",1)[0])) for ele in data] + self.itable = dict([[ele.split("=",1)[1].replace("\n",""), bytes.fromhex(ele.split("=",1)[0])] for ele in data]) + + + + #with open("../{}/Data/{}/Misc/{}".format(repo_name, gameName, tblFile)) as f: + # jsonRaw = json.load(f) + # self.jsonTblTags ={ k1:{ int(k2,16) if (k1 != "TBL") else k2:v2 for k2,v2 in jsonRaw[k1].items()} for k1,v1 in jsonRaw.items()} + + #self.itable = dict([[i, struct.pack(">H", int(j))] for j, i in self.jsonTblTags['TBL'].items()]) + #self.itags = dict([[i, j] for j, i in self.jsonTblTags['TAGS'].items()]) + #self.inames = dict([[i, j] for j, i in self.jsonTblTags['NAMES'].items()]) + #self.icolors = dict([[i, j] for j, i in self.jsonTblTags['COLORS'].items()]) + + + with open("../{}/Data/{}/Menu/MenuFiles.json".format(self.repo_name, self.gameName)) as f: + self.menu_files_json = json.load(f) + \ No newline at end of file From b5b30bfd4db2ea88891c6fc66ebe8684c859ca6a Mon Sep 17 00:00:00 2001 From: Stewie Date: Sun, 27 Mar 2022 18:02:37 -0400 Subject: [PATCH 3/6] Adding TODDC_Test file + Comments to debug --- TODDC_Test.py | 18 ++++++++++++++++++ ToolsTODDC.py | 2 +- ToolsTales.py | 4 +++- __pycache__/ToolsTODDC.cpython-38.pyc | Bin 0 -> 1622 bytes __pycache__/ToolsTales.cpython-38.pyc | Bin 23346 -> 23413 bytes 5 files changed, 22 insertions(+), 2 deletions(-) create mode 100644 TODDC_Test.py create mode 100644 __pycache__/ToolsTODDC.cpython-38.pyc diff --git a/TODDC_Test.py b/TODDC_Test.py new file mode 100644 index 0000000..2f510f6 --- /dev/null +++ b/TODDC_Test.py @@ -0,0 +1,18 @@ +import ToolsTODDC +import json +import struct +import comptolib +import io +import re +import string +import pandas as pd +import json +import os +import lxml.etree as etree + + +tool = ToolsTODDC.ToolsTODDC("toddc.tbl") + +ele = tool.menu_files_json[0] +tool.extract_Menu_File(ele) + diff --git a/ToolsTODDC.py b/ToolsTODDC.py index 58d97b3..e06df4c 100644 --- a/ToolsTODDC.py +++ b/ToolsTODDC.py @@ -42,7 +42,7 @@ class ToolsTODDC(ToolsTales): #self.icolors = dict([[i, j] for j, i in self.jsonTblTags['COLORS'].items()]) - with open("../{}/Data/{}/Menu/MenuFiles.json".format(self.repo_name, self.gameName)) as f: + with open("../{}/Data/Menu/MenuFiles.json".format(self.repo_name, self.gameName)) as f: self.menu_files_json = json.load(f) \ No newline at end of file diff --git a/ToolsTales.py b/ToolsTales.py index a364333..ecf6fe3 100644 --- a/ToolsTales.py +++ b/ToolsTales.py @@ -891,12 +891,14 @@ class ToolsTales: text_end = section['Text_End'] #Extract Pointers of the file + print("Extract Pointers") pointers_offset, pointers_value = self.get_special_pointers( text_start, text_end, base_offset, section['Pointer_Offset_Start'], section['Nb_Per_Block'], section['Step'], section['Section'], file_path) #Extract Text from the pointers + print("Extract Text") texts = [ self.bytes_to_text(f, ele + base_offset)[0] for ele in pointers_value] - + print(texts) #Make a list section_list.extend( [section['Section']] * len(texts)) diff --git a/__pycache__/ToolsTODDC.cpython-38.pyc b/__pycache__/ToolsTODDC.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..21457e040333a37170f5c2ac5fc3811162ee4ff1 GIT binary patch literal 1622 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 Date: Sun, 27 Mar 2022 20:35:17 -0400 Subject: [PATCH 4/6] Extracting 00016_0000d --- TODDC_Test.py | 50 +++++++++++++++++++++++++- ToolsTODDC.py | 27 ++------------ ToolsTales.py | 20 ++++++----- __pycache__/ToolsTODDC.cpython-38.pyc | Bin 1622 -> 928 bytes __pycache__/ToolsTales.cpython-38.pyc | Bin 23413 -> 23748 bytes 5 files changed, 63 insertions(+), 34 deletions(-) diff --git a/TODDC_Test.py b/TODDC_Test.py index 2f510f6..ed3c0cd 100644 --- a/TODDC_Test.py +++ b/TODDC_Test.py @@ -11,8 +11,56 @@ import os import lxml.etree as etree -tool = ToolsTODDC.ToolsTODDC("toddc.tbl") +tool = ToolsTODDC.ToolsTODDC("TBL_All.json") ele = tool.menu_files_json[0] tool.extract_Menu_File(ele) +repo_name = "Tales-Of-Destiny-DC" +tblFile = "TBL_ALL.json" +with open("../{}/Data/Misc/{}".format(repo_name, tblFile), encoding="utf-8") as f: + jsonRaw = json.load(f) + jsonTblTags ={ k1:{ int(k2) if (k2 != "TBL") else int(k2):v2 for k2,v2 in jsonRaw[k1].items()} for k1,v1 in jsonRaw.items()} + #jsonTblTags = {k2:v2 for k2,v2 in jsonRaw[k1].items()} for k1,v1 in jsonRaw.items()} + + +TAGS = jsonTblTags['TAGS'] + +with open("../Data/Tales-Of-Destiny-DC/Menu/New/00016/00016_0000d.unknown", "rb") as fileRead: + + + fileRead.seek(0x3C87D) + b = fileRead.read(1) + + b = ord(b) + finalText="" + if (b >= 0x99 and b <= 0x9F) or (b >= 0xE0 and b <= 0xEB): + c = (b << 8) + ord(fileRead.read(1)) + + # if str(c) not in json_data.keys(): + # json_data[str(c)] = char_index[decode(c)] + try: + finalText += (jsonTblTags['TBL'][str(c)]) + except KeyError: + b_u = (c >> 8) & 0xff + b_l = c & 0xff + finalText += ("{%02X}" % b_u) + finalText += ("{%02X}" % b_l) + elif b == 0x1: + finalText += ("\n") + elif b in (0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xB, 0xC, 0xD, 0xE, 0xF): + b2 = struct.unpack("" % (tag_name, b2)) + else: + finalText += "<%02X:%08X>" % (b, b2) \ No newline at end of file diff --git a/ToolsTODDC.py b/ToolsTODDC.py index e06df4c..f43525a 100644 --- a/ToolsTODDC.py +++ b/ToolsTODDC.py @@ -20,29 +20,6 @@ class ToolsTODDC(ToolsTales): def __init__(self, tbl): - self.gameName = "TODDC" - self.repo_name = "Tales-of-Destiny-DC" - self.basePath = os.getcwd() - - - with open("../Tales-of-Destiny-DC/Data/Misc/toddc.tbl", encoding="utf-8") as f: - data = f.readlines() - hex_list = [bytes.fromhex(str(ele.split("=",1)[0])) for ele in data] - self.itable = dict([[ele.split("=",1)[1].replace("\n",""), bytes.fromhex(ele.split("=",1)[0])] for ele in data]) - - - - #with open("../{}/Data/{}/Misc/{}".format(repo_name, gameName, tblFile)) as f: - # jsonRaw = json.load(f) - # self.jsonTblTags ={ k1:{ int(k2,16) if (k1 != "TBL") else k2:v2 for k2,v2 in jsonRaw[k1].items()} for k1,v1 in jsonRaw.items()} - - #self.itable = dict([[i, struct.pack(">H", int(j))] for j, i in self.jsonTblTags['TBL'].items()]) - #self.itags = dict([[i, j] for j, i in self.jsonTblTags['TAGS'].items()]) - #self.inames = dict([[i, j] for j, i in self.jsonTblTags['NAMES'].items()]) - #self.icolors = dict([[i, j] for j, i in self.jsonTblTags['COLORS'].items()]) - - - with open("../{}/Data/Menu/MenuFiles.json".format(self.repo_name, self.gameName)) as f: - self.menu_files_json = json.load(f) + super().__init__("TODDC", tbl, "Tales-of-Destiny-DC") - \ No newline at end of file + diff --git a/ToolsTales.py b/ToolsTales.py index ecf6fe3..ffa6acd 100644 --- a/ToolsTales.py +++ b/ToolsTales.py @@ -31,17 +31,21 @@ class ToolsTales: self.repo_name = repo_name self.basePath = os.getcwd() - with open("../{}/Data/{}/Misc/{}".format(repo_name, gameName, tblFile)) as f: + with open("../{}/Data/Misc/{}".format(repo_name, tblFile), encoding="utf-8") as f: jsonRaw = json.load(f) - self.jsonTblTags ={ k1:{ int(k2,16) if (k1 != "TBL") else k2:v2 for k2,v2 in jsonRaw[k1].items()} for k1,v1 in jsonRaw.items()} + if self.repo_name == "Tales-of-Destiny-DC": + self.jsonTblTags ={ k1:{ int(k2) if (k1 != "TBL") else k2:v2 for k2,v2 in jsonRaw[k1].items()} for k1,v1 in jsonRaw.items()} + else: + self.jsonTblTags ={ k1:{ int(k2,16) if (k1 != "TBL") else k2:v2 for k2,v2 in jsonRaw[k1].items()} for k1,v1 in jsonRaw.items()} + self.itable = dict([[i, struct.pack(">H", int(j))] for j, i in self.jsonTblTags['TBL'].items()]) self.itags = dict([[i, j] for j, i in self.jsonTblTags['TAGS'].items()]) - self.inames = dict([[i, j] for j, i in self.jsonTblTags['NAMES'].items()]) - self.icolors = dict([[i, j] for j, i in self.jsonTblTags['COLORS'].items()]) + self.inames = dict([[i, j] for j, i in self.jsonTblTags['NAME'].items()]) + self.icolors = dict([[i, j] for j, i in self.jsonTblTags['COLOR'].items()]) - with open("../{}/Data/{}/Menu/MenuFiles.json".format(repo_name, gameName)) as f: + with open("../{}/Data/Menu/MenuFiles.json".format(repo_name)) as f: self.menu_files_json = json.load(f) @@ -469,7 +473,7 @@ class ToolsTales: tag_name = TAGS.get(b) tag_param = None - tag_search = tag_name.upper()+'S' + tag_search = tag_name.upper() if (tag_search in self.jsonTblTags.keys()): tags2 = self.jsonTblTags[tag_search] tag_param = tags2.get(b2, None) @@ -913,7 +917,7 @@ class ToolsTales: #Write to XML file txt=etree.tostring(root, encoding="UTF-8", pretty_print=True) - with open(file_definition['File_XML'].replace("/{}".format(self.repo_name),""), "wb") as xmlFile: + with open(file_definition['File_XML'].replace("/{}".format(self.repo_name),"").replace("/Data","/Data/{}".format(self.repo_name)), "wb") as xmlFile: xmlFile.write(txt) @@ -922,7 +926,7 @@ class ToolsTales: print("Extracting Menu Files") - self.mkdir("../Data/{}/Menu/New".format(self.gameName)) + self.mkdir("../Data/{}/Menu/New".format(self.repo_name)) #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])) diff --git a/__pycache__/ToolsTODDC.cpython-38.pyc b/__pycache__/ToolsTODDC.cpython-38.pyc index 21457e040333a37170f5c2ac5fc3811162ee4ff1..032585fb482c54d6de939649e5140639c53ffe9b 100644 GIT binary patch delta 307 zcmcb{vw)p1l$V!_fq{X+FL$M4414Al96k`fQ6jM7x8enUNud0i=KOKSo(SO{QC{#ia$QMYlNO<1_OzOXA}-nQpNZr{<*HVlGL_ zS;=^dGd?~!C$YFVK7QroJ52ThMVt%_45A=6f-GWSn*4!9lu46yG6$=w3P|b}FH}Qv zYEDjkd=Vc50|SKM0kQZeJFyx_-D1fq&d=tvI8!Bs1q0Q-1N}9@Z8C NgdQ-9f3gCb836iVNDcr1 delta 1062 zcmZ3$evOAOl$V!_fq{Wx>s^PW8*Cf-BpK_O7#J8F7#J9eMHmHcQy8L{QW#U1 zS{S03Q<#GpG+AzOh2-bw6o>e`xHu<+)PsxwVO9nP22KVB24|4|4h9B>6vi5cc!m_F z8ishr5~c;r3mIw{;#o>qQB)>B??W*tL_nbs3ffd$*_Pig(-!3AyY{`(*kBBDHchFg^cM;Q17u8aWXJ46oJy)Ek>?e z3{X!N@i8zk++r_EEyzhsPA%dFso?<;{2)RIP6&fopfo9u;x9QpJ^kuhXf)NQ=9TLE zrskEpW#*(7>tz+^=V|iZ;z&=-P4!F6O})iglvF3|k(5}R z8jx6$af>CtAT*^W%#y^UoYY%vY57IDi6ysKKqlW}$;nSl zxy7HGnpYa12C^`|9we^GdW)qvH7D&Bb4gOpEylE4EGda4iMKd1QY+#?kpqe>aEvh& zf&6rf0~Q^kAdi7O%)rFP$i~RU%*V*V$j2zhC&pMMj3xT~G+98JLEedvzr__FpF25- zNla7=6i^^zkS&_r!(<>;qy!3Tw&IeaQjn*LGfGP`bBd%G7#JpBV`>q=(38b%1^|3$ B4~PH& diff --git a/__pycache__/ToolsTales.cpython-38.pyc b/__pycache__/ToolsTales.cpython-38.pyc index 9141a6d6ed0f057d9c8f34f22484a874cd54ea19..2e7f96d3d79d39c8961b4890bd3885ebd30a0e86 100644 GIT binary patch delta 7391 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 delta 7183 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 From b352faa978322e567e74aeb4c75ab4c19847bb22 Mon Sep 17 00:00:00 2001 From: Stewie Date: Sun, 10 Apr 2022 12:12:19 -0400 Subject: [PATCH 5/6] Automation of Apache3 - Open Apache3 - Click on the 2 Freelicense + Error Drive not found - Click on Open Iso --- __pycache__/ToolsTODDC.cpython-38.pyc | Bin 928 -> 928 bytes __pycache__/ToolsTales.cpython-38.pyc | Bin 23748 -> 23748 bytes apache_automate.py | 28 ++++++++++++++++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 apache_automate.py diff --git a/__pycache__/ToolsTODDC.cpython-38.pyc b/__pycache__/ToolsTODDC.cpython-38.pyc index 032585fb482c54d6de939649e5140639c53ffe9b..1ae4fd1ec11b2a14f2dec18322c51289b8dc41a5 100644 GIT binary patch delta 20 bcmZ3$zJQ%Ol$V!_fq{YHACu!o?y1ZGET;r$ delta 20 bcmZ3$zJQ%Ol$V!_fq{X+a(28MqdId{hZ07cmbP5=M^ delta 20 bcmX@Ilkvz-M$S-PUM>a(28Nc6oV#NHLw5z# diff --git a/apache_automate.py b/apache_automate.py new file mode 100644 index 0000000..d0eb025 --- /dev/null +++ b/apache_automate.py @@ -0,0 +1,28 @@ +from pywinauto import application +from pywinauto.keyboard import send_keys +from pywinauto.findwindows import find_windows + +app = application.Application(backend="uia").start('apache3.exe') +app = application.Application(backend="uia").connect(title='Apache3 Build 3.10.6 (BETA)') + +#Get the window about FREE license +app.Information.set_focus() +send_keys('{ENTER}') + +#Get the window about Drive missing +drive_missing = app.Apache3Build.child_window(title="apache3", control_type="Window") +drive_missing.set_focus() +send_keys('{ENTER}') + +#app.Apache3Build.print_control_identifiers() + +#Click on the Open Iso button +app.Apache3Build.child_window(auto_id="1011").click() + +app.Dialog.child_window(auto_id="2").click() + +app.Apache3Build.child_window() +app.Apache3Build.child_window(auto_id="TitleBar").print_control_identifiers() + +open_ele = app.Apache3Build.child_window(title="Open", auto_id="1011", control_type="Button") +open_ele.click_input() \ No newline at end of file From 200baa8d4045516ab96b109f2a5b8b88710ba434 Mon Sep 17 00:00:00 2001 From: Stewie Date: Sun, 10 Apr 2022 15:57:01 -0400 Subject: [PATCH 6/6] Full script to open Apache3 and replace SLPS into the iso - function to open Apache3 + Iso - function to loop on each file and replace with the new file --- apache_automate.py | 109 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 92 insertions(+), 17 deletions(-) diff --git a/apache_automate.py b/apache_automate.py index d0eb025..49e4a5f 100644 --- a/apache_automate.py +++ b/apache_automate.py @@ -1,28 +1,103 @@ from pywinauto import application from pywinauto.keyboard import send_keys +from pywinauto import mouse from pywinauto.findwindows import find_windows +import os +import shutil -app = application.Application(backend="uia").start('apache3.exe') -app = application.Application(backend="uia").connect(title='Apache3 Build 3.10.6 (BETA)') +def open_apache3_iso(repo_name): + + app = application.Application(backend="uia").start('apache3.exe') + app = application.Application(backend="uia").connect(title='Apache3 Build 3.10.6 (BETA)') + + #Get the window about FREE license + app.Information.set_focus() + send_keys('{ENTER}') + + #Get the window about Drive missing + drive_missing = app.Apache3Build.child_window(title="apache3", control_type="Window") + drive_missing.set_focus() + send_keys('{ENTER}') + + iso_path = os.path.join( os.path.normpath(os.getcwd() + os.sep + os.pardir), "Data",repo_name,"Disc","New","{}.iso".format(repo_name)) -#Get the window about FREE license -app.Information.set_focus() -send_keys('{ENTER}') + #Click on the Open Iso button + app.Apache3Build.child_window(auto_id="1011").click() + + #File Name textbox + text_box_filename = app.Dialog.child_window(auto_id="1152").wrapper_object() + text_box_filename.type_keys(r"{}".format(iso_path)) + + #Open the iso + app.Dialog.child_window(title="Open", auto_id="1", control_type="Button").wrapper_object().click() -#Get the window about Drive missing -drive_missing = app.Apache3Build.child_window(title="apache3", control_type="Window") -drive_missing.set_focus() -send_keys('{ENTER}') + return app -#app.Apache3Build.print_control_identifiers() +def locate_right_click(file_name, app): + item = app.Apache3Build.child_window(title=file_name, control_type="ListItem").wrapper_object() + pos_x = item.rectangle().mid_point().x + pos_y = item.rectangle().mid_point().y + app.Apache3Build.set_focus() + mouse.click(button='right', coords=(pos_x, pos_y)) + +def browse_replace_file(file_replace_ele, new_file_path, repo_name): + + #Browse the file and put the new file path + new_file_path = os.path.join( os.path.normpath(os.getcwd() + os.sep + os.pardir), "Data",repo_name, "Menu", "New", "SLPS_254.50") + file_replace_ele.child_window(auto_id="1095").wrapper_object().click() + file_replace_ele.Dialog.child_window(title="File name:", auto_id="1152", control_type="Edit").wrapper_object().type_keys(new_file_path) + file_replace_ele.Dialog.child_window(title="Open", auto_id="1", control_type="Button").wrapper_object().click() + + #Click on the Replace File button + file_replace_ele.child_window(title="Replace File", auto_id="1094", control_type="Button").wrapper_object().click() + + +def replace_files(files_list, app): + + new_file_path_format = os.path.join( os.path.normpath(os.getcwd() + os.sep + os.pardir), "Data",repo_name, "Disc", "New") + for file_name in files_list: -#Click on the Open Iso button -app.Apache3Build.child_window(auto_id="1011").click() + #Locate file and right-click it + locate_right_click(file_name, app) -app.Dialog.child_window(auto_id="2").click() + #Click on the option "Replace Selected File" + replace_file_pos = app.Context.child_window(title="Replace Selected File", auto_id="32782", control_type="MenuItem").wrapper_object().rectangle().mid_point() + mouse.click(button='left', coords=(replace_file_pos.x, replace_file_pos.y)) + + file_replace_ele = app.Apache3Build.Apache3FileReplacer + + #Uncheck TOC and Check Ignore File size + file_replace_ele.child_window(title="Update TOC", auto_id="1092", control_type="CheckBox").wrapper_object().click() + file_replace_ele.child_window(title="Ignore File Size Differences", auto_id="1093", control_type="CheckBox").click() -app.Apache3Build.child_window() -app.Apache3Build.child_window(auto_id="TitleBar").print_control_identifiers() + browse_replace_file(file_replace_ele, os.path.join(new_file_path_format, file_name), repo_name) + -open_ele = app.Apache3Build.child_window(title="Open", auto_id="1011", control_type="Button") -open_ele.click_input() \ No newline at end of file +#Files to reinsert +#files_list = ['SLPS_254.50', 'DAT.bin'] +files_list = ['SLPS_254.50'] + +repo_name = "Tales-Of-Rebirth" + +#copy original Iso +original_path = os.path.join(os.getcwd(), "..", "Data", repo_name, "Disc", "Original", "{}.iso".format(repo_name)) +new_path = os.path.join(os.getcwd(), "..", "Data", repo_name, "Disc", "New", "{}.iso".format(repo_name)) + +print("Copy Original Iso into New folder") +shutil.copy( original_path, new_path) + + + +try: + app = application.Application(backend="uia").connect(title='Apache3 Build 3.10.6 (BETA)') + app.Apache3Build.close() + +except: + print("Open Apache3 and load the iso") + app = open_apache3_iso(repo_name) + + print("Replace the different files") + replace_files(files_list,app) + + print("Close Apache3") + app.Apache3Build.close() \ No newline at end of file