You've already forked PythonLib
mirror of
https://github.com/lifebottle/PythonLib.git
synced 2026-02-13 15:25:50 -08:00
Merge pull request #64 from lifebottle/fix/TOPX-Main-and-Story-Extract
Fix/topx main and story extract
This commit is contained in:
117
ToolsTOPX.py
117
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()
|
||||
@@ -706,9 +706,10 @@ class ToolsTales:
|
||||
japanese_text = entry_node.find("JapaneseText").text
|
||||
english_text = entry_node.find("EnglishText").text
|
||||
|
||||
print(english_text)
|
||||
#Use the values only for Status = Done and use English if non empty
|
||||
final_text = ''
|
||||
if (status == "Done"):
|
||||
if (status not in ['Problematic', 'To Do']):
|
||||
final_text = english_text or japanese_text or ''
|
||||
else:
|
||||
final_text = japanese_text or ''
|
||||
@@ -783,13 +784,7 @@ class ToolsTales:
|
||||
#
|
||||
#############################
|
||||
|
||||
def extractDecryptedEboot(self):
|
||||
print("Extracting Eboot")
|
||||
args = ["deceboot", os.path.join(self.basePath,"../Data/Disc/Original/PSP_GAME/SYSDIR/EBOOT.BIN"), os.path.join("../Data/Misc/EBOOT_DEC.BIN")]
|
||||
listFile = subprocess.run(
|
||||
args,
|
||||
cwd= self.basePath,
|
||||
)
|
||||
|
||||
|
||||
|
||||
def extract_abcde_text(self, filename, modify_xml = True):
|
||||
|
||||
BIN
deceboot.exe
Normal file
BIN
deceboot.exe
Normal file
Binary file not shown.
Reference in New Issue
Block a user