diff --git a/ToolsTOPX.py b/ToolsTOPX.py index ef70074..6e77a20 100644 --- a/ToolsTOPX.py +++ b/ToolsTOPX.py @@ -15,20 +15,25 @@ class ToolsTOPX(ToolsTales): def __init__(self, tbl): - super().__init__("TOPX", tbl) + #super().__init__("TOPX", tbl, "Narikiri-Dungeon-X") #Load the hash table for the files - json_file = open('../Data/Misc/hashes.json', 'r') + json_file = open('../Data/Narikiri-Dungeon-X/Misc/hashes.json', 'r') self.hashes = json.load(json_file) json_file.close() - self.discPath = '../Data/Disc' - self.storyPathExtract = '../Data/Archives/Story/' #Files are the result of PAKCOMPOSER + Comptoe here - self.storyPathInsert = '../Data/Archives/All/map/pack' #Files need to be .CAB here - self.skitPathExtract = '../Data/' #Files are the result of PAKCOMPOSER + Comptoe here - self.allPathExtract = '../Data/Archives/All/' - self.allPathInsert = '../Data/Disc/PSP_GAME/USRDIR' #File is all.dat - + self.repo_name = 'Narikiri-Dungeon-X' + self.misc = '../Data/{}/Misc'.format(self.repo_name) + self.disc_path = '../Data/{}/Disc'.format(self.repo_name) + self.story_XML_extract = '../Data/{}/Story/'.format(self.repo_name) #Files are the result of PAKCOMPOSER + Comptoe here + self.story_XML_new = '../{}/Data/NDX/Story/XML/All/'.format(self.repo_name) #Files need to be .CAB here + self.skit_extract = '../Data/{}/Skit/'.format(self.repo_name) #Files are the result of PAKCOMPOSER + Comptoe here + + self.all_extract = '../Data/{}/All/'.format(self.repo_name) + self.all_original = '../Data/{}/Disc/Original/PSP_GAME/USRDIR/all.dat'.format(self.repo_name) + self.all_new = '../Data/{}/Disc/New/PSP_GAME/USRDIR/all.dat'.format(self.repo_name) #File is all.dat + + self.make_dirs() ############################# # # Extraction of files and unpacking @@ -37,64 +42,64 @@ class ToolsTOPX(ToolsTales): # Make the basic directories for extracting all.dat def make_dirs(self): - self.mkdir('../Data/Archives/All') - self.mkdir('../Data/Archives/All/battle') - self.mkdir('../Data/Archives/All/battle/character') - self.mkdir('../Data/Archives/All/battle/charsnd') - self.mkdir('../Data/Archives/All/battle/data') - self.mkdir('../Data/Archives/All/battle/effect') - self.mkdir('../Data/Archives/All/battle/event') - self.mkdir('../Data/Archives/All/battle/gui') - self.mkdir('../Data/Archives/All/battle/map') - self.mkdir('../Data/Archives/All/battle/resident') - self.mkdir('../Data/Archives/All/battle/tutorial') - self.mkdir('../Data/Archives/All/chat') - self.mkdir('../Data/Archives/All/gim') - self.mkdir('../Data/Archives/All/map') - self.mkdir('../Data/Archives/All/map/data') - self.mkdir('../Data/Archives/All/map/pack') - self.mkdir('../Data/Archives/All/movie') - self.mkdir('../Data/Archives/All/snd') - self.mkdir('../Data/Archives/All/snd/init') - self.mkdir('../Data/Archives/All/snd/se3') - self.mkdir('../Data/Archives/All/snd/se3/map_mus') - self.mkdir('../Data/Archives/All/snd/strpck') - self.mkdir('../Data/Archives/All/sysdata') - + self.mkdir('../Data/{}/All'.format(self.repo_name)) + self.mkdir('../Data/{}/All/battle'.format(self.repo_name)) + self.mkdir('../Data/{}/All/battle/character'.format(self.repo_name)) + self.mkdir('../Data/{}/All/battle/charsnd'.format(self.repo_name)) + self.mkdir('../Data/{}/All/battle/data'.format(self.repo_name)) + self.mkdir('../Data/{}/All/battle/effect'.format(self.repo_name)) + self.mkdir('../Data/{}/All/battle/event'.format(self.repo_name)) + self.mkdir('../Data/{}/All/battle/gui'.format(self.repo_name)) + self.mkdir('../Data/{}/All/battle/map'.format(self.repo_name)) + self.mkdir('../Data/{}/All/battle/resident'.format(self.repo_name)) + self.mkdir('../Data/{}/All/battle/tutorial'.format(self.repo_name)) + self.mkdir('../Data/{}/All/chat'.format(self.repo_name)) + self.mkdir('../Data/{}/All/gim'.format(self.repo_name)) + self.mkdir('../Data/{}/All/map'.format(self.repo_name)) + self.mkdir('../Data/{}/All/map/data'.format(self.repo_name)) + self.mkdir('../Data/{}/All/map/pack'.format(self.repo_name)) + self.mkdir('../Data/{}/All/movie'.format(self.repo_name)) + self.mkdir('../Data/{}/All/snd'.format(self.repo_name)) + self.mkdir('../Data/{}/All/snd/init'.format(self.repo_name)) + self.mkdir('../Data/{}/All/snd/se3'.format(self.repo_name)) + self.mkdir('../Data/{}/All/snd/se3/map_mus'.format(self.repo_name)) + self.mkdir('../Data/{}/All/snd/strpck'.format(self.repo_name)) + self.mkdir('../Data/{}/All/sysdata'.format(self.repo_name)) + # Extract each of the file from the all.dat def extract_files(self, start, size, filename): if filename in self.hashes.keys(): filename = self.hashes[filename] - input_file = open( '../Data/Disc/Original/PSP_GAME/USRDIR/all.dat', 'rb') + input_file = open( self.all_original, 'rb') input_file.seek(start, 0) data = input_file.read(size) - output_file = open( os.path.join(self.allPathExtract, filename), 'wb') + output_file = open( os.path.join(self.all_extract, filename), 'wb') output_file.write(data) output_file.close() input_file.close() + # Extract the story files - def extractAllStory(self): + def extract_All_Story(self): print("Extracting Story") - path = os.path.join( self.allPathExtract, 'map/pack/') - storyPath = '../Data/Archives/Story/' - self.mkdir(storyPath) + path = os.path.join( self.all_extract, 'map/pack/') + self.mkdir(self.story_XML_extract) for f in os.listdir( path ): if os.path.isfile( path+f) and '.cab' in f: #Unpack the CAB into PAK3 file - fileName = storyPath+f.replace(".cab", ".pak3") + fileName = self.story_XML_extract+f.replace(".cab", ".pak3") subprocess.run(['expand', path+f, fileName]) #Decompress using PAKCOMPOSER + Comptoe - super().pakComposerAndComptoe(fileName, "-d", "-3") + #super().pakComposerAndComptoe(fileName, "-d", "-3") - def extractAllSkits(self): + def extract_All_Skit(self): print("Extracting Skits") - path = os.path.join( self.allPathExtract, 'chat/') + path = os.path.join( self.all_extract, 'chat/') skitsPath ='../Data/Archives/Skits/' self.mkdir(skitsPath) @@ -106,9 +111,9 @@ class ToolsTOPX(ToolsTales): subprocess.run(['expand', path + f, fileName]) #Decompress using PAKCOMPOSER + Comptoe - super().pakComposerAndComptoe(fileName, "-d", "-3") + self.pakComposerAndComptoe(fileName, "-d", "-3") - def extractAllEvents(self): + def extract_All_Events(self): print("Extract Events") path = os.path.join( self.allPathExtract, 'map/') @@ -123,22 +128,22 @@ class ToolsTOPX(ToolsTales): subprocess.run(['expand', path + f, fileName]) #Decompress using PAKCOMPOSER + Comptoe - super().pakComposerAndComptoe(fileName, "-d", "-3") + self.pakComposerAndComptoe(fileName, "-d", "-3") # Extract the file all.dat to the different directorties - def extractMainArchive(self): + def extract_Main_Archive(self): - self.make_dirs() + order = {} order['order'] = [] - order_json = open( os.path.join( self.miscPath, 'order.json'), 'w') + order_json = open( os.path.join( self.misc, 'order.json'), 'w') #Extract decrypted eboot - super().extractDecryptedEboot() + self.extract_Decripted_Eboot() print("Extract All.dat") #Open the eboot - eboot = open( os.path.join( self.miscPath, 'EBOOT_DEC.BIN'), 'rb') + eboot = open( os.path.join( self.misc, 'EBOOT_DEC.BIN'), 'rb') eboot.seek(0x1FF624) while True: @@ -151,7 +156,11 @@ class ToolsTOPX(ToolsTales): json.dump(order, order_json, indent = 4) order_json.close() + def extract_Decripted_Eboot(self): + print("Extracting Eboot") + args = ["deceboot", "../Data/{}Disc/Original/PSP_GAME/SYSDIR/EBOOT.BIN".format(self.repo_name), "../Data/{}/Misc/EBOOT_DEC.BIN".format(self.repo_name)] + listFile = subprocess.run( + args, + cwd= os.getcwd(), + ) - - def extractDecryptedEboot(self): - super().extractDecryptedEboot() \ No newline at end of file