correct Menu reinsertion of Skits Name

This commit is contained in:
fortiersteven
2022-02-11 21:16:19 -05:00
parent 63ec4f740d
commit 845616eaa1
10 changed files with 43207 additions and 428 deletions

View File

@@ -26,7 +26,7 @@
},
{
"Section": "Skit Names and Other",
"Pointer_Offset_Start": 945440,
"Pointer_Offset_Start": 1000108,
"Nb_Per_Block": 1,
"Step": 0,
"Text_Start": 1126048,
@@ -108,21 +108,63 @@
},
{
"File_Extract": "../Data/TOR/DAT/BIN/11181.bin",
"File_XML": "../Data/TOR/Menu/XML/11181.xml",
"File_New": "../Data/TOR/Menu/New/11181.bin",
"Text_Start": 60980,
"Text_End": 75466,
"Base_Offset": 58880,
"File_Extract": "../Data/TOR/Menu/New/11181/11181_0005.unknown",
"File_XML": "../Data/TOR/Menu/XML/11181_0005.xml",
"File_New": "../Data/TOR/Menu/New/11181.pak3",
"Text_Start": 2100,
"Text_End": 16585,
"Base_Offset": 0,
"Sections":
[
{
"Section": "Triangle Menu",
"Pointer_Offset_Start": 58888,
"Pointer_Offset_Start": 8,
"Nb_Per_Block": 1,
"Step": 0,
"Text_Start": 60980,
"Text_End": 75466
"Text_Start": 2100,
"Text_End": 16585
}
]
},
{
"File_Extract": "../Data/TOR/Menu/New/00023/00023_0000d.unknown",
"File_XML": "../Data/TOR/Menu/XML/00023_0000.xml",
"File_New": "../Data/TOR/Menu/New/00023.pak3",
"Base_Offset": 0,
"Sections":
[
{
"Section": "Panic Mini Game 1",
"Pointer_Offset_Start": 6268,
"Nb_Per_Block": 1,
"Step": 28,
"Text_Start": 14676,
"Text_End": 16086
}
]
},
{
"File_Extract": "../Data/TOR/Menu/New/00023/00023_0002.unknown",
"File_XML": "../Data/TOR/Menu/XML/00023_0002.xml",
"File_New": "../Data/TOR/Menu/New/00023.pak3",
"Base_Offset": 0,
"Sections":
[
{
"Section": "Panic Mini Game 2.1",
"Pointer_Offset_Start": 8,
"Nb_Per_Block": 1,
"Step": 0,
"Text_Start": 364,
"Text_End": 478
},
{
"Section": "Panic Mini Game 2.2",
"Pointer_Offset_Start": 84,
"Nb_Per_Block": 1,
"Step": 0,
"Text_Start": 556,
"Text_End": 1278
}
]
},

1491
TOR_Consumable_dump_eng.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -7,18 +7,37 @@ import re
import string
import pandas as pd
import json
import os
tool = ToolsTOR.ToolsTOR("tbl")
tool.bytes_to_text_with_offset("../Data/TOR/Disc/Original/SLPS_254.50", 0x119890)
with open("MenuFiles.json") as f:
menu_files_json = json.load(f)
file_def = [ele for ele in menu_files_json if ele['File_Extract'] == "../Data/TOR/Menu/New/00013/00013_0000d.unknown" ][0]
file_def = [ele for ele in menu_files_json if ele['File_Extract'] == "../Data/TOR/Disc/Original/SLPS_254.50" ][0]
tool.extract_Menu_File(file_def)
#tool.insert_Menu_File("../Data/TOR/Disc/Original/SLPS_254.50")
myDir = "../Data/TOR/DAT"
extensions = ['bin', 'pak1', 'pak2', 'pak3', 'unknown', 'ovl', 'scpk']
for path, subdirs, files in os.walk(myDir):
for name in [ele for ele in files if ele.split(".")[-1] in extensions]:
print("File : {}".format(name))
tool.bytes_to_text_with_offset(os.path.join(path,name), 0x0)
tool.bytes_to_text_with_offset("../Data/TOR/Disc/Original/SLPS_254.50", 0x0)
tool.insert_Menu_File("../Data/TOR/Disc/Original/SLPS_254.50")

View File

@@ -160,29 +160,15 @@ class ToolsTOR(ToolsTales):
theirsce.seek(pointer_block, 0) #Go the the start of the pointer section
pointers_offset, texts_offset = self.extraxtStoryPointers(theirsce, strings_offset, fsize)
text_list = [self.bytesToText(theirsce, ele)[0] for ele in texts_offset]
#Remove duplicates
list_informations = self.remove_duplicates(["Story"] * len(pointers_offset), pointers_offset, text_list)
#Extract the text from each pointers
textList = []
for i in range(len(texts_offset)):
#Extract the text
theirsce.seek(texts_offset[i], 0)
text = self.bytesToText(theirsce)
#Add it to the XML node
entry_node = etree.SubElement(stringsNode, "Entry")
etree.SubElement(entry_node,"PointerOffset").text = str(pointers_offset[i])
etree.SubElement(entry_node,"JapaneseText").text = text
etree.SubElement(entry_node,"EnglishText").text = ''
etree.SubElement(entry_node,"Notes").text = ''
if text == '':
statusText = 'Done'
else:
statusText = 'To Do'
etree.SubElement(entry_node,"Status").text = statusText
#Build the XML Structure with the information
file_path = self.storyPathXML + self.get_file_name(scpkFileName)
root = self.create_Node_XML(file_path, list_informations, "SceneText")
#Write the XML file
txt=etree.tostring(root, encoding="UTF-8", pretty_print=True)

View File

@@ -241,10 +241,10 @@ class ToolsTales:
offset = hex(pos).replace("0x","")
print(offset)
text = self.bytesToText(f)
text, hex_values = self.bytesToText(f)
node = etree.SubElement( root, "Entry")
etree.SubElement(node, "TextOffset").text = offset
etree.SubElement(node, "HexValues").text = hex_values
etree.SubElement(node, "Japanese").text = text
@@ -266,18 +266,20 @@ class ToolsTales:
#Convert a bytes object to text using TAGS and TBL in the json file
def bytesToText(self, fileRead, end_strings = b"\x00", offset=-1):
def bytesToText(self, fileRead, offset=-1, end_strings = b"\x00"):
finalText = ''
TAGS = self.jsonTblTags['TAGS']
if (offset > 0):
fileRead.seek(offset, 0)
pos = fileRead.tell()
b = fileRead.read(1)
while b != end_strings:
#print(hex(fileRead.tell()))
b = ord(b)
if (b >= 0x99 and b <= 0x9F) or (b >= 0xE0 and b <= 0xEB):
c = (b << 8) + ord(fileRead.read(1))
@@ -317,10 +319,12 @@ class ToolsTales:
next_b = b""
while next_b != b"\x80":
if next_b != b'':
finalText += "{%02X}" % ord(next_b)
else:
next_b = b"\x80"
next_b = fileRead.read(1)
finalText += "{%02X}" % ord(next_b)
#if next_b != b'':
#else:
# next_b = b"\x80"
elif b == 0x81:
next_b = fileRead.read(1)
if next_b == b"\x40":
@@ -332,8 +336,13 @@ class ToolsTales:
finalText += "{%02X}" % b
b = fileRead.read(1)
return finalText
end = fileRead.tell()
size = fileRead.tell() - pos - 1
fileRead.seek(pos)
hex_string = fileRead.read(size).hex()
hex_values = ' '.join(a+b for a,b in zip(hex_string[::2], hex_string[1::2]))
fileRead.seek(end)
return finalText, hex_values
#Convert text to Bytes object to reinsert text into THEIRSCE and other files
def textToBytes(self, text):
@@ -385,7 +394,12 @@ class ToolsTales:
return bytesFinal
def create_Menu_Entry(self, strings_node, section, pointer_offset, text):
def search_all_files(self, japanese_text):
#Return the bytes for that specific text
bytes_from_text = self.textToBytes(japanese_text)
def create_Entry(self, strings_node, section, pointer_offset, text):
#Add it to the XML node
entry_node = etree.SubElement(strings_node, "Entry")
@@ -401,9 +415,9 @@ class ToolsTales:
etree.SubElement(entry_node,"Status").text = statusText
def create_Menu_XML(self, fileName, list_informations):
def create_Node_XML(self, fileName, list_informations, parent):
root = etree.Element('MenuText')
root = etree.Element(parent)
@@ -417,7 +431,7 @@ class ToolsTales:
for s, pointers_offset, text in list_section:
self.create_Menu_Entry( strings_node, s, pointers_offset, text)
self.create_Entry( strings_node, s, pointers_offset, text)
return root
@@ -577,6 +591,8 @@ class ToolsTales:
# nb_per_block : number of pointers per block before adding step
# step : number of bytes before the next block
def get_special_pointers(self, text_start, text_max, base_offset, start_offset, nb_per_block, step, section,file_path=''):
if file_path == '':
file_path = self.elfOriginal
@@ -595,8 +611,6 @@ class ToolsTales:
block_pointers_offset = [f.tell()+4*i for i in range(nb_per_block)]
if section == "Artes":
print( [hex(ele) for ele in block_pointers_offset])
block_pointers_value = struct.unpack(f"<{nb_per_block}L", f.read(4 * nb_per_block))
list_test.extend(block_pointers_value)
@@ -622,6 +636,7 @@ class ToolsTales:
pointers_value = [pointers_value[i] for i in good_indexes]
return [pointers_offset, pointers_value]
def extract_Menu_File(self, file_definition):
@@ -643,11 +658,10 @@ class ToolsTales:
#Extract Pointers of the file
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
texts = [ self.bytesToText(f, ele + base_offset) for ele in pointers_value]
texts_offset = [ele + base_offset for ele in pointers_value]
texts = [ self.bytesToText(f, ele + base_offset)[0] for ele in pointers_value]
#Make a list
section_list.extend( [section['Section']] * len(texts))
@@ -658,7 +672,7 @@ class ToolsTales:
list_informations = self.remove_duplicates(section_list, pointers_offset_list, texts_list)
#Build the XML Structure with the information
root = self.create_Menu_XML(file_path, list_informations)
root = self.create_Node_XML(file_path, list_informations, "MenuText")
#Write to XML file
txt=etree.tostring(root, encoding="UTF-8", pretty_print=True)

View File

@@ -177,7 +177,7 @@ def hex2bytes(tales_instance, hex_value):
#print(bytes_value)
f = io.BytesIO(bytes_value)
f.seek(0)
txt = tales_instance.bytesToText(f, b'', -1)
txt, offset = tales_instance.bytesToText(f, -1, b'')
txt = "\n\n".join([ele for ele in txt.split("{00}") if ele != ""])
with open("text_dump.txt", "w",encoding="utf-8") as f:
f.write(txt)

Binary file not shown.

41765
test.xml

File diff suppressed because it is too large Load Diff

View File

@@ -1,197 +1 @@
円周上に石片を生み出し、巨大な石槍で貫く
地系導術。
ストーンブレイク
術者から地面を這う雷撃を放つ光系導術。
ラインを合わせてから詠唱する必要がある。
サンダースピア
地面から垂直に水流を噴き出す水系導術。
浮かし効果があるが、範囲が狭い。
スプラッシャー
地面から岩つぶてを射出する地系導術。
敵の背が低すぎると当たりづらい。
ロックバラージ
範囲内の敵を逃さない無数の曲撃ちを
繰り出す奥義。
ソウハツイレンセン
蒼破墜蓮閃
鋭い踏み込みで間合いを詰め、水流と
共に拳を突き上げる奥義。
クウハソウショウセン
空破蒼翔閃
強烈極まるカカト落としで敵を地面に釘付けに
する奥義。衝撃波で他の敵も巻き込む。
クウハツイレンセン
空破墜蓮閃
斜め上に向けての拡散連射奥義。普段は
なにげにヒットしないが、巨大な敵には……
グレンソウショウセン
愚連蒼翔閃
樹砲閃の3連射を繰り出す奥義。
浮かし能力にも優れる。
グレンツイレンセン
愚連墜蓮閃
脚を使った往復ビンタをかます奥義。
締めの蹴りで敵を奥ラインに吹き飛ばす。
グレンザンクウキャク
愚連斬空脚
間合いが開いた敵を更に吹き飛ばせる、
踏み込みからの水圧射撃を放つ奥義。
ゴウレツソウショウセン
轟裂蒼翔閃
気功弾を放ち、間合いの離れた敵も狙える
奥義。密着状態で6ヒットする。
ヒオウゴウショウガ
緋桜轟衝牙
アッパー、そして謎の三角蹴りで敵を
目も当てられないくらい吹き飛ばす奥義。
ゴウレツザンクウキャク
轟裂斬空脚
気を溜めて多段ヒットする気功弾を生み出す
奥義。
ゴウレツレンガダン
轟裂連牙弾
曲撃ちで敵を引き寄せ、連続蹴りを見舞う
奥義。初段のショットはガードを破れる。
ソウハレンテンキャク
蒼破連天脚
気合の蹴り上げから、貫通ショットを放つ
奥義。後ろに複数の敵がいる場合に有効。
ヒレンツイレンセン
飛連墜蓮閃
果てしなく蹴り上げる奥義。一人旅に注意。
あるいは狙って攻撃回避にも使える?
ヒレンザンクウキャク
飛連斬空脚
蹴りと拳を交えた連続攻撃を繰り出す奥義。
グレンレンテンキャク
愚連連天脚
連続回し蹴りから轟裂破に繋げる奥義。
吹き飛び方はやや短い。
ヒレンゴウショウガ
飛連轟衝牙
体内に眠る全ての力を解放し、打撃特技後の
スキをなくす錬術。のけぞり時間も短くなる。
ゲキ・シュンサツレン
激・瞬殺連
自然の加護を得て、防御中にHPが回復する
ようになる錬術。
ゲキ・ジュソウヘキ
激・樹装壁
上空に射撃し、矢を炸裂させて広範囲の敵を
狙う射撃特技。敵によってヒット数が変わる。
センショウセン
扇翔閃
足元に射撃した矢を反射させて敵を狙う
射撃特技。単発だが追尾能力は高い。
ジュホウセン
樹砲閃
スライディングから繋ぐ回転蹴りで、敵を
手前ラインに蹴り飛ばす特技。自分も飛んでく。
シックウハ
疾空波
拳の連撃を叩き込む特技。
連携のしやすさではトップクラス。
ガレンゲキ
牙連撃
強烈に吹き飛ばす特技。
間合いを開けるのに重宝する。
ゴウレッパ
轟裂破
空中回転二連蹴りを繰り出す特技。
敵の背が低いとあたりづらいのが欠点。
ショウレンキャク
翔連脚
発動中、敵のガードを破れるようになる陣術奥義。
ブレイク・レーゲン
発動中、味方全員が、RGに関係なく
奥義を発動できるようになる陣術奥義。
アーツ・レーゲン
広範囲の味方の移動速度を上げる陣術奥義。
ファスト・レーゲン
発動中、敵からの攻撃を無効化する陣術奥義。
アイテムいろいろ