A general purpose string data utility for Yu-Gi-Oh! Tag Force games.
This tool was designed to aid in translation of the games.
-
Convert between string resource (strtbl/wordstbl) bins and editable text files
-
Convert between language bins and editable text files
-
Batch convert a folder with language bins to a folder with editable text files (and back)
-
UTF-8 & Shift-JIS writing option
-
String reusage optimization
Yu-Gi-Oh! Tag Force Language & String Tool
Usage: TagForceString [OPTIONS] MODE INPUT OUTPUT
OPTIONS:
-u, --utf8 Use UTF-8 / 8-bit encoding (default is UTF-16)
-d, --no-bom Disable BOM autodetection for input text files and BOM writing for output
-r, --raw Treat string data as raw data. Useful for Shift-JIS.
STRING RESOURCE MODES:
bin2txt Convert a string resource (strtbl) file to a text file
txt2bin Convert a text file to a string resource (strtbl) file
TEXT RESOURCE MODES:
tbin2txt Convert a text resource (e.g. tutorial) file to a text file
txt2tbin Convert a text file to a text resource (e.g. tutorial) file
LANG FILE MODES:
lang2txt Convert a pair of lang files (index and strings) to a text file
txt2lang Convert a text file to a pair of lang files (index and strings)
FOLDER MODES:
fold2txt Batch convert a folder with lang file pairs to a folder with text files
txt2fold Batch convert a folder with text files to a folder with lang file pairs
-
Convert a string resource bin to a txt file
TagForceString bin2txt input_e.bin output.txt
-
Convert a txt file back to a string resource bin
TagForceString txt2bin input.txt output_e.bin
-
Convert a lang file pair to a txt file
TagForceString lang2txt langIe.bin langLe.bin output.txt
-
Convert a txt file to a lang file pair
TagForceString txt2lang input.txt outIe.bin outLe.bin
-
Convert a folder with lang file pairs to a folder with txt files
TagForceString fold2txt in_folder out_folder
-
Convert a folder with txt files to a folder with lang file pairs
TagForceString txt2fold in_folder out_folder
-
This tool does NOT perform any conversion on the fly! If you need to write a UTF-8 file, you must use a UTF-8 file as input. Same goes for UTF-16 - if you need to write a UTF-16 file, you must use a UTF-16 Little Endian file as input!
-
The tool attempts to autodetect BOM only for modes
txt2bin
&txt2lang
. If not detected, it will default to UTF-16 Little Endian. -
To be able to use UTF-8 in the games, the game must first be patched in order to support it!
-
To decode/encode Shift-JIS files, use the raw mode.
-
The folder conversion modes MUST use the format of the original filenames in all cases!
It must follow the format of <name><typechar><langchar>.bin
(or <name><typechar><langchar>.bin.gz
if it's compressed)
- Examples would be:
ImpChrMsgIe.bin
&ImpChrMsgLe.bin
Same goes for the txt files. They must follow the format it was exported as:
<name>_<langchar>.txt
(or <name>_<langchar>.gz.txt
if it's compressed)
- Example would be:
ImpChrMsg_e.txt
Any deviations from this will result either in an error or the file being skipped!
The txt file formatting is an ini-like (not ini) format.
Example from Tag Force 1 (English script of Crowler/Chronos):
[0]
Have a chat.
Ask to be partners.
[1]
You may be in the same
dorm as him...
[2]
But try not to become like
that dropout boy!
[3]
Haha!
Be partners... With you?!
-
Strings are read between the first line after the
]
and the last line behind[
(or EOF). Everything between sections should be represented in the exact format as it is in the game's own dialog boxes. -
In the example provided above, the string 0 will have an empty line at the end
-
There will be some empty strings - this is perfectly normal
-
Strings that have exact same content will be condensed into one and each subsequent one will have a repeated pointer of the first one - this was done as an optimization to reduce file size and works perfectly fine with the games
-
Strings' index references are hardcoded in the game code, so you cannot change them from here
-
In all modes except raw, the backslash
\
and square bracket[
]
characters are escaped with a backslash! The square brackets are reserved character to determine sections for each string, so they must be escaped! Likewise, the backslash is the escapee, so it also has to be escaped.
- Create a CMake (or some other type) project for this to make a more portable version - zlib has to be linked against this application!