1. Introduction
Chronotools
has been designed to allow as much localization
of Chrono Trigger as possible. This includes the possibility
of using nearly any character set besides the English one.
2. Terms
In this document (and many others), the following terms are used.
2.1. Script character set
This encoding is your system-dependent encoding of characters to
byte values. It is used in your script files and in your configuration
file. It is not used in the patch or ROM.
The name of this encoding is written to the characterset
field in your configuration file.
Some possible values include:
iso-8859-1 | Western European encoding, aka. "latin1" |
iso-8859-2 | Polish, Czech, Slovak, Slovenia, Hungarian |
iso-8859-5 | Cyrillic encoding: Russian, Ukrainian, Belarusian |
iso-8859-7 | Greek encoding |
iso-8859-8 | Modern Hebrew encoding |
iso-8859-9 | Turkish, Maltese, Esperanto |
iso-8859-10 | Estonian, Latvian, Lithuanian, Greenlandic, Saami |
iso-8859-11 | Thai |
iso-8859-16 | Albanian, Croatian, Romanian, Gaelic etc with Euro |
windows-1250 | Microsoft version of iso-8859-2 |
windows-1251 | Microsoft version of iso-8859-5 |
windows-1252 | Microsoft version of latin1 and latin9 |
utf-8 | The unicode character encoding |
shift-jis | Microsoft doublebyte Japanese encoding |
2.2. 12pix font mapping
This is the array of characters specified using the font12_N
settings in your configuration file.
Your 12pix font file ( font12fn) must match
exactly the contents of this array (excluding the typefaces).
In addition to the font12_N settings, also def12sym
settings can be used to specify the contents of the font.
This mapping is used by:
- Dialog text
- Player character names (in dialog)
- Item descriptions (in the item screen)
- Item names (in the "got X" messages)
- Monster names (when aiming in battle)
- Technique descriptions (in the technique screen)
- Technique names (in the "learned tech X" messages)
- Location names (in the overworld map)
- Chapter names (in the save/load screen)
- Game settings screen help texts
Therefore, all character symbols that appear in those texts
must be present in the 12pix font mapping
(and consequently, in the 12pix font).
2.3. 8pix font mapping
This is the array of characters specified using the font8_N
settings in your configuration file.
Your 8pix font file ( font8fn) must match
exactly the contents of this array.
In addition to the font8_N settings, also def8sym
settings can be used to specify the contents of the font.
This mapping is used by:
- Player character names (in battle)
- Item names (in battle and item screen, regardless whether you use VWF8)
- Monster names (in battle)
- Technique names (in battle and tech screen, regardless whether you use VWF8)
- Status screen messages
Therefore, all character symbols that appear in those texts
must be present in the 8pix font mapping
(and consequently, in the 8pix font).
2.4. 12pix font file
This font file contains the actual character symbols of the
12pix font. When you edit it, please remember the restrictions
listed in the image format guide
and that it must match the contents of the font12_N
map.
2.5. 8pix font file
This font file contains the actual character symbols of the
constant-width 8pix font (used for most of the status screen content).
When you edit it, please remember the restrictions
listed in the image format guide
and that it must match the contents of the font8_N
map.
2.6. VWF8 font file (optional)
This font file contains the actual character symbols of the
variable-width 8pix font (used for the aspects you select it for).
When you edit it, please remember the restrictions
listed in the image format guide.
Constraints for its character mapping are explained later in this document.
2.7. Locked symbols
When a symbol is "locked", using the lock12syms
or lock8syms directive in the configuration file,
it means that the position of the symbol in question will not
be changed in the font in question.
This is useful for symbols that have positional constraints.
These symbols are:
- Symbols that are used in strings that are displayed
using different fonts (explained later in this document).
- Symbols that are referred by the game code (for example,
the star symbol and numbers in the 8pix font).
- Custom graphics you use using the
[gfx]
declaration in your *r section of the script file.
2.8. Typefaces
Typeface in Chronotools is a technique to provide the same
12pix text in different font styles. An example typeface
could be italic.
This is accomplished by copying a region of the font to
a different location in the font, editing it and then
declaring it in the configuration file using the
typeface statement.
3. Constraints
3.1. Character set limits
Due to how Chrono Trigger is built, there are several limitations in
how you can build the fonts and character tables.
For understanding the explanations here you need to
have rudimentary understanding of hex numbers.
3.1.1. Limits in the 8pix font
The 8pix font has 256 different indexes - $00 to $FF for characters.
There's no way around it. But not all of them can be used freely.
3.1.1.1. Reserved slots (in character set)
This list tells which symbols may not be used in 8pix
character set, because they already have different meanings.
- Indexes $00-$0F are reserved for control bytes.
- Indexes $2A-$2F are used internally by the game.
- Indexes $40-$68 are used by Japanese legacy code (voiced versions of $80..$A8), unless the feature is disabled in configuration.
- Indexes $5B-$5C are used by item scrolling screens.
- Indexes $60-$63 are used by the item cursor.
- Indexes $67-$6F are used by the health and tech gauges.
- Indexes $69-$72 are used by Japanese legacy code (semivoiced versions of $80..$89), unless the feature is disabled in configuration.
- Indexes $73-$7C are used by the status numbers, if you enable
use_thin_numbers .
I'm not sure of the status of areas $10-$1F and $30-$3F.
3.1.1.2. Reserved slots (in tilemap)
This list tells which slots from the 8pix tilemap can not be
used, because they are already used for something else.
- Indexes $00-$0B are reserved by elemental symbol graphics
- Indexes $15-$1F are reserved by VWF8, if you use VWF8.
- Indexes $2A-$2F are used internally by the game.
- Indexes $30-$5B are reserved by VWF8, if you use VWF8.
- Indexes $5B-$5C are used by item scrolling screens.
- Indexes $5C-$66 are reserved by VWF8, if you use VWF8.
- Indexes $60-$63 are used by the item cursor.
- Indexes $64-$66 are used by Japanese legacy code (normal/voiced/semivoiced markers), unless the feature is disabled in configuration.
- Indexes $67-$6F are used by the health and tech gauges.
- Indexes $67-$71 are reserved by VWF8, if you use VWF8.
- Indexes $73-$7C are used by the status numbers, if you enable
use_thin_numbers .
- Indexes $7D-$9D are reserved by VWF8, if you use VWF8.
3.1.1.3. Usable slots
This leaves the following areas for your use:
- $40-$5A (27 slots) if you disabled the Japanese legacy code and don't use VWF8
- $64-$66 (3 slots) if you disabled the Japanese legacy code
- $73-$7C (10 slos) unless you use
use_thin_numbers
- $7D-$9D (33 slots) unless you use VWF8
- $9E-$FF (98 slots)
VWF8 needs quite many slots from the tile table (110, to be exact) to
draw the symbols on. This is an unavoidable technical limitation.
3.1.2. Limits in the 12pix font
The 12pix font has 768 different indexes - $000 to $2FF for characters.
It was this way in the Japanese version (yes, only 768!), and it wasn't
changed in the USA version.
But there are some constraints regarding their use.
- Indexes $00-$20 are reserved for control bytes.
- Indexes $21-$9F are reserved for dictionary. You can change the
upper number, but it affects the compressibility of your script.
This leaves the following areas for your use:
- $A0-$2FF (the lower number is determined by your dictionary
size, configured by the
begin setting in your configuration file.
However, characters in the $100-$2FF range take two bytes of ROM space
whereas characters below the $100 marker take only 1 byte. This aspect
may well be ignored, because Chronotools automatically rearranges
the fonts optimally under the given constraints.
3.2. The positional constraints
This is where it all gets problematic.
Some texts are displayed in multiple fonts. Characters that are
used to compose those strings must appear in exactly same positions
in all of the fonts the strings are written in.
Character names (Crono, Marle, Lucca and so on) are displayed
in 8pix font (equipment screen, save-game) and 12pix font (dialog).
Therefore all the characters that may compose their names
must be in same slots in both of those fonts.
This restriction applies to all the character symbols
that are or could be used in any of
the following things:
- Item names
- Technique names
- Monster names
- Player character names
Generally, this includes all the alphabet symbols as well
as some punctuation.
This effectively means the following things:
- The said set of characters (hereon called as the SET)
must all be locked using the
lock12syms
and the lock8syms directives.
This prevents Chronotools from moving them around.
- Characters of the SET must all appear in exactly
the same positions in both the
font12_N and
the font8_N maps.
- Characters of the SET must all appear in the
range that both the 8pix and 12pix fonts can agree on.
Normally, this means $A0-$FF (96 slots), but the lower limit
may be smaller if your dictionary is smaller.
It mustn't however spill on the area that is not
allowed for the 8pix font.
This restriction may make things difficult for languages that
have lots of character symbols. Unfortunately, there's currently
no way around it in Chronotools.
4. Hints
- You should put the symbols that are not part of the SET
to outside of the constraint range to increase the number
of symbols you can use in the SET.
- If you use
use_thin_numbers , you can use
the $D3-$DD range in 8pix font for something else
(assuming you don't have numbers in the SET).
If you do that, you need to explicitly mark the
$73-$7C range as numbers in your font8_N table.
Unfortunately, the $D3-$DD range can not currently
be moved in the 12pix font because the game refers
to it when it prints numbers. This might be changed
in future Chronotools releases.
5. The VWF8 character mapping
Since VWF8 is never used for printing text other than that is under
the "positional constraints" rule, the VWF8 character map
is practically the same as the 8pix font map. Technically though,
it allows 768 symbols just as the 12pix font does.
|