Merge pull request #53 from lifebottle/feature/rework-functions

Make some rework on functions
This commit is contained in:
fortiersteven
2022-06-28 22:49:15 -04:00
committed by GitHub
21 changed files with 73 additions and 13306 deletions

BIN
10247.scpk Normal file

Binary file not shown.

View File

@@ -21,10 +21,10 @@ def open_apache3_iso(repo_name):
send_keys('{ENTER}')
#Get the window about Drive missing
print("Press Enter about Drive missing")
drive_missing = app.Apache3Build.child_window(title="apache3", control_type="Window")
drive_missing.set_focus()
send_keys('{ENTER}')
#print("Press Enter 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))
@@ -50,14 +50,13 @@ def locate_right_click(file_name, app):
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()
#file_replace_ele.child_window(title="Replace File", auto_id="21608", control_type="Button").wrapper_object().click()
mouse.click(button='left', coords=(1399, 655))
def replace_files(files_list, repo_name, app):
@@ -87,8 +86,8 @@ def apache_job(files_list, repo_name):
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)
#print("Copy Original Iso into New folder")
#shutil.copy( original_path, new_path)
try:

View File

@@ -1,66 +0,0 @@
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("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("<L", fileRead.read(4))[0]
if b in TAGS:
tag_name = TAGS.get(b)
tag_param = None
tag_search = tag_name.upper()
if (tag_search in jsonTblTags.keys()):
tags2 = jsonTblTags[tag_search]
tag_param = tags2.get(b2, None)
if tag_param != None:
finalText += tag_param
else:
finalText += ("<%s:%08X>" % (tag_name, b2))
else:
finalText += "<%02X:%08X>" % (b, b2)

View File

@@ -1,6 +0,0 @@
import ToolsTOPX
tool = ToolsTOPX.ToolsTOPX("tbl")
tool.extractAllSkits()

View File

@@ -24,10 +24,10 @@ class ToolsTOR(ToolsTales):
#Path to used
datBinOriginal = '../Data/Tales-Of-Rebirth/Disc/Original/DAT.BIN'
datBinNew = '../Data/Tales-Of-Rebirth/Disc/New/DAT.BIN'
elfOriginal = '../Data/Tales-Of-Rebirth/Disc/Original/SLPS_254.50'
elfNew = '../Data/Tales-Of-Rebirth/Disc/New/SLPS_254.50'
dat_bin_original = '../Data/Tales-Of-Rebirth/Disc/Original/DAT.BIN'
dat_bin_new = '../Data/Tales-Of-Rebirth/Disc/New/DAT.BIN'
elf_original = '../Data/Tales-Of-Rebirth/Disc/Original/SLPS_254.50'
elf_new = '../Data/Tales-Of-Rebirth/Disc/New/SLPS_254.50'
story_XML_new = '../Tales-Of-Rebirth/Data/TOR/Story/' #Story XML files will be extracted here
story_XML_patch = '../Data/Tales-Of-Rebirth/Story/' #Story XML files will be extracted here
skit_XML_patch = '../Data/Tales-Of-Rebirth/Skits/' #Skits XML files will be extracted here
@@ -40,6 +40,7 @@ class ToolsTOR(ToolsTales):
#byteCode
self.story_byte_code = b"\xF8"
self.list_status_insertion = ['Done']
@@ -53,11 +54,11 @@ class ToolsTOR(ToolsTales):
self.mkdir( self.story_XML_patch + "XML")
listFiles = [self.dat_archive_extract + 'SCPK/' + ele for ele in os.listdir( os.path.join(self.dat_archive_extract, "SCPK"))]
for scpkFile in listFiles:
for scpk_file in listFiles:
self.extract_TheirSce_XML(scpkFile)
self.extract_TheirSce_XML(scpk_file)
def get_theirsce_from_scpk(self, scpk, scpkFileName, debug=False)->bytes:
def get_theirsce_from_scpk(self, scpk, scpk_file_name, debug=False)->bytes:
header = scpk.read(4)
if header != b"SCPK":
@@ -92,20 +93,20 @@ class ToolsTOR(ToolsTales):
# Extract THEIRSCE to XML
def extract_TheirSce_XML(self, scpkFileName):
def extract_TheirSce_XML(self, scpk_file_name):
#Create the XML file
root = etree.Element('SceneText')
etree.SubElement(root, "OriginalName").text = scpkFileName
etree.SubElement(root, "OriginalName").text = scpk_file_name
stringsNode = etree.SubElement(root, "Strings")
#Open the SCPK file to grab the THEIRSCE file
with open(scpkFileName, "rb") as scpk:
theirsce = self.get_theirsce_from_scpk(scpk,scpkFileName,True)
with open(scpk_file_name, "rb") as scpk:
theirsce = self.get_theirsce_from_scpk(scpk,scpk_file_name,True)
#if (scpkFileName.endswith(".scpk") and debug):
# with open("Debug/{}d.theirsce".format( self.get_file_name(scpkFileName)), "wb") as f:
#if (scpk_file_name.endswith(".scpk") and debug):
# with open("Debug/{}d.theirsce".format( self.get_file_name(scpk_file_name)), "wb") as f:
# f.write(theirsce.read())
theirsce.seek(0)
@@ -134,17 +135,37 @@ class ToolsTOR(ToolsTales):
#Build the XML Structure with the information
file_path = self.story_XML_patch +"XML/"+ self.get_file_name(scpkFileName)
file_path = self.story_XML_patch +"XML/"+ self.get_file_name(scpk_file_name)
root = self.create_Node_XML(file_path, list_informations, "SceneText")
#Write the XML file
txt=etree.tostring(root, encoding="UTF-8", pretty_print=True)
with open(os.path.join( self.story_XML_patch,"XML", self.get_file_name(scpkFileName)+".xml"), "wb") as xmlFile:
with open(os.path.join( self.story_XML_patch,"XML", self.get_file_name(scpk_file_name)+".xml"), "wb") as xmlFile:
xmlFile.write(txt)
def getNewTheirsce(self, theirsce, scpkFileName):
def get_Node_Bytes(self, entry_node):
#Grab the fields from the Entry in the XML
status = entry_node.find("Status").text
japanese_text = entry_node.find("JapaneseText").text
english_text = entry_node.find("EnglishText").text
#Use the values only for Status = Done and use English if non empty
final_text = ''
if (status in self.list_status_insertion):
final_text = english_text or japanese_text or ''
else:
final_text = japanese_text or ''
#Convert the text values to bytes using TBL, TAGS, COLORS, ...
bytes_entry = self.text_to_bytes(final_text)
return bytes_entry
def get_New_Theirsce(self, theirsce, scpk_file_name):
#To store the new text_offset and pointers to update
new_text_offsets = dict()
@@ -155,37 +176,26 @@ class ToolsTOR(ToolsTales):
print(strings_offset)
#Read the XML for the corresponding THEIRSCE
file = self.story_XML_new +"XML/"+ self.get_file_name(scpkFileName)+'.xml'
print("XML : {}".format(self.get_file_name(scpkFileName)+'.xml'))
file = self.story_XML_new +"XML/"+ self.get_file_name(scpk_file_name)+'.xml'
print("XML : {}".format(self.get_file_name(scpk_file_name)+'.xml'))
tree = etree.parse(file)
root = tree.getroot()
#Go at the start of the dialog
#Loop on every Entry and reinsert
theirsce.seek(strings_offset+1)
for entry_node in root.iter("Entry"):
#Add the PointerOffset and TextOffset
new_text_offsets[entry_node.find("PointerOffset").text] = theirsce.tell()
#Grab the fields from the Entry in the XML
status = entry_node.find("Status").text
japanese_text = entry_node.find("JapaneseText").text
english_text = entry_node.find("EnglishText").text
#Use the values only for Status = Done and use English if non empty
final_text = ''
if (status == "Done"):
final_text = english_text or japanese_text or ''
else:
final_text = japanese_text or ''
#Convert the text values to bytes using TBL, TAGS, COLORS, ...
bytesEntry = self.text_to_bytes(final_text)
#Use the node to get the new bytes
bytes_entry = self.get_Node_Bytes(entry_node)
#Write to the file
theirsce.write(bytesEntry + b'\x00')
theirsce.write(bytes_entry + b'\x00')
#Update the pointers
#Update the pointers based on the new text_offset of the entries
for pointer_offset, text_offset in new_text_offsets.items():
pointers_list = pointer_offset.split(",")
@@ -200,13 +210,13 @@ class ToolsTOR(ToolsTales):
return theirsce
#Repack SCPK files for Story
def pack_Story_File(self, scpkFileName):
def pack_Story_File(self, scpk_file_name):
#Copy the original SCPK file to the folder used for the new version
shutil.copy( self.dat_archive_extract + "SCPK/" + scpkFileName, self.story_XML_patch + "New/" + scpkFileName)
shutil.copy( self.dat_archive_extract + "SCPK/" + scpk_file_name, self.story_XML_patch + "New/" + scpk_file_name)
#Open the original SCPK
with open( self.dat_archive_extract + "SCPK/" + scpkFileName, 'r+b') as scpk:
with open( self.dat_archive_extract + "SCPK/" + scpk_file_name, 'r+b') as scpk:
#Get nb_files and files_size
@@ -248,7 +258,7 @@ class ToolsTOR(ToolsTales):
# f.write(data_uncompressed)
#Update THEIRSCE uncompressed file
theirsce = self.getNewTheirsce(io.BytesIO(data_uncompressed), scpkFileName)
theirsce = self.get_New_Theirsce(io.BytesIO(data_uncompressed), scpk_file_name)
theirsce.seek(0)
@@ -292,7 +302,7 @@ class ToolsTOR(ToolsTales):
self.mkdir("../Data/Tales-Of-Rebirth/DAT")
f = open( self.datBinOriginal, "rb")
f = open( self.dat_bin_original, "rb")
pointers = self.get_pointers(self.POINTERS_BEGIN)
total_files = len(pointers)
@@ -338,9 +348,6 @@ class ToolsTOR(ToolsTales):
print("Writing file %05d/%05d..." % (i, total_files))
f.close()
#Copy File 11181
shutil.copy( self.dat_archive_extract+"BIN/11181.bin", self.dat_archive_extract+"PAK3/11181.pak3")
os.remove( self.dat_archive_extract+"BIN/11181.bin")
def pack_Main_Archive(self):
sectors = [0]
@@ -350,7 +357,7 @@ class ToolsTOR(ToolsTales):
story_file_list = [self.get_file_name(ele) for ele in os.listdir( self.story_XML_patch +"New")]
print(story_file_list)
output_dat_path = self.datBinNew
output_dat_path = self.dat_bin_new
with open(output_dat_path, "wb") as output_dat:
print("Packing files into %s..." % os.path.basename(output_dat_path))
@@ -416,10 +423,10 @@ class ToolsTOR(ToolsTales):
print("Writing file %05d/%05d..." % (current - dummies, len(file_list)))
shutil.copy( self.elfOriginal, self.elfNew)
shutil.copy( self.elf_original, self.elf_new)
with open(self.elfNew, "r+b") as output_elf:
with open(self.elf_new, "r+b") as output_elf:
output_elf.seek(self.POINTERS_BEGIN)
for i in range(len(sectors) - 1):
@@ -430,9 +437,9 @@ class ToolsTOR(ToolsTales):
print("Recreating Story files")
listFiles = [ele for ele in os.listdir( self.story_XML_patch + "New/")]
for scpkFile in listFiles:
self.pack_Story_File(scpkFile)
print("Writing file {} ...".format(scpkFile))
for scpk_file in listFiles:
self.pack_Story_File(scpk_file)
print("Writing file {} ...".format(scpk_file))
def insert_All(self):

View File

@@ -48,7 +48,13 @@ class ToolsTales:
with open("../{}/Data/{}/Menu/MenuFiles.json".format(repo_name, gameName)) as f:
self.menu_files_json = json.load(f)
def generate_xdelta_patch(self, xdelta_name):
print("Create xdelta patch")
original_path = "../Data/{}/Disc/Original/{}.iso".format(self.repo_name, self.repo_name)
new_path = "../Data/{}/Disc/New/{}.iso".format(self.repo_name, self.repo_name)
subprocess.run(["xdelta", "-f", "-s", original_path, new_path, xdelta_name])
def mkdir(self, d):
try: os.mkdir(d)
@@ -119,7 +125,7 @@ class ToolsTales:
def get_pointers(self, start_offset):
f = open(self.elfOriginal , "rb")
f = open(self.elf_original , "rb")
f.seek(start_offset, 0)
pointers = []
@@ -818,7 +824,7 @@ class ToolsTales:
if file_path == '':
file_path = self.elfOriginal
file_path = self.elf_original
f = open(file_path , "rb")

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,146 +0,0 @@
//GAME NAME: Tales of Rebirth
// Define required TABLE variables and load the corresponding tables
#VAR(Table_0, TABLE)
#ADDTBL("C:\Users\Lauren\Downloads\abcde_Secret_Training\ToR.tbl", Table_0)
//BLOCK #000 NAME: Button_Bars
#ACTIVETBL(Table_0) // Activate this block's starting TABLE
#JMP($112850, $112A2A) // Jump to insertion point
#HDR($-FF000) // Difference between ROM and RAM addresses for pointer value calculations
//POINTER #0 @ $E6D20 - STRING #0 @ $112A20
#W32($E6D20)
[Circle_ani] Enter[END]
// current address: $112A2B
//POINTER #1 @ $E6D24 - STRING #1 @ $112A10
#W32($E6D24)
[Circle_ani] Talk[END]
// current address: $112A1B
//POINTER #2 @ $E6D28 - STRING #2 @ $1129F8
#W32($E6D28)
[Circle_ani] Leave [TAG_015][END]
// current address: $112A0A
//POINTER #3 @ $E6D2C - STRING #3 @ $1129E8
#W32($E6D2C)
[Circle_ani] Shop[END]
// current address: $1129F7
//POINTER #4 @ $E6D30 - STRING #4 @ $1129D8
#W32($E6D30)
[Circle_ani] Inspect[END]
// current address: $1129E5
//POINTER #5 @ $E6D34 - STRING #5 @ $1129C8
#W32($E6D34)
[Circle_ani] Open[END]
// current address: $1129D5
//POINTER #6 @ $E6D38 - STRING #6 @ $1129B8
#W32($E6D38)
[Circle_ani] Push[END]
// current address: $1129C3
//POINTER #7 @ $E6D3C - STRING #7 @ $1129A8
#W32($E6D3C)
[Circle_ani] Pull[END]
// current address: $1129B3
//POINTER #8 @ $E6D40 - STRING #8 @ $112998
#W32($E6D40)
[Circle_ani] Operate[END]
// current address: $1129A3
//POINTER #9 @ $E6D44 - STRING #9 @ $112988
#W32($E6D44)
[Circle_ani] Switch[END]
// current address: $112997
//POINTER #10 @ $E6D48 - STRING #10 @ $112978
#W32($E6D48)
[Circle_ani] Go Up[END]
// current address: $112985
//POINTER #11 @ $E6D4C - STRING #11 @ $112968
#W32($E6D4C)
[Circle_ani] Go Down[END]
// current address: $112975
//POINTER #12 @ $E6D50 - STRING #12 @ $112958
#W32($E6D50)
[Circle_ani] Jump[END]
// current address: $112967
//POINTER #13 @ $E6D54 - STRING #13 @ $112948
#W32($E6D54)
[Circle_ani] Hit[END]
// current address: $112955
//POINTER #14 @ $E6D58 - STRING #14 @ $112938
#W32($E6D58)
[Circle_ani] Read[END]
// current address: $112943
//POINTER #15 @ $E6D5C - STRING #15 @ $112928
#W32($E6D5C)
[Circle_ani] Rest[END]
// current address: $112933
//POINTER #16 @ $E6D60 - STRING #16 @ $112918
#W32($E6D60)
[Circle_ani] Eat[END]
// current address: $112925
//POINTER #17 @ $E6D64 - STRING #17 @ $112908
#W32($E6D64)
[Circle_ani] Leave[END]
// current address: $112913
//POINTER #18 @ $E6D68 - STRING #18 @ $1128F8
#W32($E6D68)
[Circle_ani] Move[END]
// current address: $112905
//POINTER #19 @ $E6D6C - STRING #19 @ $1128E8
#W32($E6D6C)
[Circle_ani] Grab[END]
// current address: $1128F5
//POINTER #20 @ $E6D70 - STRING #20 @ $1128D8
#W32($E6D70)
[Circle_ani] ???[END]
// current address: $1128E5
//POINTER #21 @ $E6D74 - STRING #21 @ $1128C8
#W32($E6D74)
[Circle_ani] !!![END]
// current address: $1128D5
//POINTER #22 @ $E6D78 - STRING #22 @ $1128B8
#W32($E6D78)
[Circle_ani] Save[END]
// current address: $1128C5
//POINTER #23 @ $E6D7C - STRING #23 @ $1128A8
#W32($E6D7C)
[Circle_ani] Warp[END]
// current address: $1128B5
//POINTER #24 @ $E6D80 - STRING #24 @ $112898
#W32($E6D80)
[Circle_ani] Next[END]
// current address: $1128A3
//POINTER #25 @ $E6D84 - STRING #25 @ $112868
#W32($E6D84)
[Up+Down_blink] Select [Circle_ani] Confirm [Cross_ani] Cancel[END]
// current address: $112891
//POINTER #26 @ $E6D88 - STRING #26 @ $112850
#W32($E6D88)
[Up+Down_blink] Select [Circle_ani] Confirm[END]
// current address: $112867

File diff suppressed because it is too large Load Diff

View File

@@ -1,336 +0,0 @@
//GAME NAME: Tales of Rebirth
// Define required TABLE variables and load the corresponding tables
#VAR(Table_0, TABLE)
#ADDTBL("C:\Users\Lauren\Downloads\abcde_Secret_Training\ToR.tbl", Table_0)
//BLOCK #000 NAME: Names
#ACTIVETBL(Table_0) // Activate this block's starting TABLE
#JMP($127720, $127aa9) // Jump to insertion point
#HDR($-FF000) // Difference between ROM and RAM addresses for pointer value calculations
//Text $127AA0
#W32($10692C)
//フィート[END]
Feat [END]
// current address: $127AA9
//Text $127A80
#W32($106930)
//斬撃攻撃力を上昇させる宝石。[LINE]
//[END]
A Gem that increases Slash ATK.[LINE]
[END]
// current address: $127A9E
//Text $127A70
#W32($106940)
//マッスル[END]
Muscle [END]
// current address: $127A79
//Text $127A50
#W32($106944)
//打撃攻撃力を上昇させる宝石。[LINE]
//[END]
A Gem that increases Blow ATK.[LINE]
[END]
// current address: $127A6E
//Text $127A40
#W32($106954)
//シールド[END]
Shield [END]
// current address: $127A49
//Text $127A20
#W32($106958)
//斬撃防御力を上昇させる宝石。[LINE]
//[END]
A Gem that increases Slash DEF.[LINE]
[END]
// current address: $127A3E
//Text $127A10
#W32($106968)
//プロテクト[END]
Protect [END]
// current address: $127A1B
//Text $1279F0
#W32($10696C)
//打撃防御力を上昇させる宝石。[LINE]
//[END]
A Gem that increases Blow DEF.[LINE]
[END]
// current address: $127A0E
//Text $1279E0
#W32($10697C)
//マインド[END]
Mind [END]
// current address: $1279E9
//Text $1279C0
#W32($106980)
//術攻撃力を上昇させる宝石。[LINE]
//[END]
A Gem that increases Spirit ATK.[LINE]
[END]
// current address: $1279DC
//Text $1279B0
#W32($106990)
//レジスト[END]
Resist [END]
// current address: $1279B9
//Text $127990
#W32($106994)
//術防御力を上昇させる宝石。[LINE]
//[END]
A Gem that increases Spirit DEF.[LINE]
[END]
// current address: $1279AC
//Text $127988
#W32($1069A4)
//ヒール[END]
Heal [END]
// current address: $12798F
//Text $127968
#W32($1069A8)
//HP回復力を上昇させる宝石。[LINE]
//[END]
A Gem that increases HP Regen.[LINE]
[END]
// current address: $127986
//Text $127958
#W32($1069B8)
//フォルス[END]
Force [END]
// current address: $127961
//Text $127938
#W32($1069BC)
//FG回復力を上昇させる宝石。[LINE]
//[END]
A Gem that increases FG Regen.[LINE]
[END]
// current address: $127956
//Text $127930
#W32($1069CC)
//ライフ[END]
Life [END]
// current address: $127937
//Text $127910
#W32($1069D0)
//最大HPを上昇させる宝石。[LINE]
//[END]
A Gem that increases Max HP.[LINE]
[END]
// current address: $12792C
//Text $127900
#W32($1069E0)
//ネイチャー[END]
Nature [END]
// current address: $12790B
//Text $1278D0
#W32($1069E4)
//通常攻撃によるFG回復量を上昇させる宝石。[LINE]
//[END]
A Gem that increases FG regained[LINE]
from basic attacks.[END]
// current address: $1278FC
//Text $1278C0
#W32($1069F4)
//メディカル[END]
Medical [END]
// current address: $1278CB
//Text $127898
#W32($1069F8)
//敵撃破時のHP回復量を上昇させる宝石。[LINE]
//[END]
A Gem that increases HP regained[LINE]
after defeating an enemy.[END]
// current address: $1278C0
//Text $127888
#W32($106A08)
//メンタル[END]
Mental [END]
// current address: $127891
//Text $127860
#W32($106A0C)
//敵撃破時のFG回復量を上昇させる宝石。[LINE]
//[END]
A Gem that increases FG regained[LINE]
after defeating an enemy.[END]
// current address: $127888
//Text $127850
#W32($106A1C)
//ブレイク[END]
Break [END]
// current address: $127859
//Text $127820
#W32($106A20)
//ガードさせたときに追加でRGを減らす宝石。[LINE]
//[END]
A Gem that increases RG reduction[LINE]
when attacking guarding enemies.[END]
// current address: $12784C
//Text $127810
#W32($106A30)
//マイティ[END]
Mighty [END]
// current address: $127819
//Text $1277E8
#W32($106A34)
//上昇効果継続時間を上昇させる宝石。[LINE]
//[END]
A Gem that increases Buff duration.[LINE]
[END]
// current address: $12780C
//Text $1277D8
#W32($106A44)
//リカバー[END]
Recover [END]
// current address: $1277E1
//Text $1277B0
#W32($106A48)
//減少効果継続時間を減少させる宝石。[LINE]
//[END]
A Gem that lowers Debuff duration.[LINE]
[END]
// current address: $1277D4
//Text $1277A0
#W32($106A58)
//チャージ[END]
Charge [END]
// current address: $1277A9
//Text $127780
#W32($106A5C)
//チャージ速度を上昇させる宝石。[LINE]
//[END]
A Gem that speeds up RG charge.[LINE]
// current address: $1277A0
//Text $127770
#W32($106A6C)
//ミスティ[END]
Misty [END]
// current address: $127779
//Text $127750
#W32($106A70)
//詠唱時間を減少させる宝石。[LINE]
//[END]
A Gem that lowers casting time.[LINE]
[END]
// current address: $12776C
//Text $127740
#W32($106A80)
//ピヨハン[END]
Dizzy [END]
// current address: $127749
//Text $127720
#W32($106A84)
//気絶時間を減少させる宝石。[LINE]
//[END]
A Gem that lowers dizzy duration.[LINE]
[END]
// current address: $12773C

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More