Chrono Trigger translation development system

0. Contents

This is the documentation of chronotools-1.2.8.
   1. Purpose
   2. Program list
      2.1. ctdump
      2.2. ctinsert
      2.3. other
         2.3.1. makeips
         2.3.2. unmakeips
         2.3.3. xray
         2.3.4. viewer
         2.3.5. spacefind
         2.3.6. taipus.rb
         2.3.7. sramdump
         2.3.8. base62
      2.4. Technical report
         2.4.1. Item/technique/monster names
         2.4.2. Name conjugation
   3. Useful features
      3.1. Name conjugation
      3.2. Font/dictionary skew
      3.3. Automatic paragraph wrapping
      3.4. Very configurable
   4. Copying
   5. Requirements
   6. Changelog
   7. See also
   8. Downloading

1. Purpose

Tools aiding in Bisqwit's Finnish Chrono Trigger translation.

Meant to be useful for anyone who wants to become a translator for Chrono Trigger and translate the game to their own language.

2. Program list

2.1. ctdump

sample Dumps the script and fonts from a given ROM.
Requires chrono-dumpee.smc.
Produces ct_eng.txt, ct8fn.tga and ct16fn.tga.

Sample of produced script:

;Battle tutorials, Zeal stuff, party stuff
*z;39 pointerstrings (12pix font)
$HSs4:
Taistelun aikana jokaisen iskun[nl]
   teho vaihtelee iskun mukaan.
$HSs6:
Ensinnäkin, voit iskeä myös[nl]
   useampaa, kuin yhtä vihollista[nl]
   kerralla.
$HSs8:
Voit esimerkiksi tähdätä tätä[nl]
   hirviötä...
(Dumped from inf's Finnish Chrono Trigger translation).

2.2. ctinsert

Reinserts the (edited) script and (edited) fonts to a ROM.
Requires ct.txt, ct8fn.tga and ct16fn.tga.
Produces ctpatch-hdr.ips and ctpatch-nohdr.ips.
Curiously, it doesn't require the ROM.

2.3. other

2.3.1. makeips

makeips compares two ROMs and produces a patch file in IPS format.

2.3.2. unmakeips

unmakeips reads a ROM and an IPS file and produces a patched ROM file.

2.3.3. xray

xray is a libggi-requiring application for browsing the ROM contents.

2.3.4. viewer

viewer requires S-Lang and is a textmode ROM browser originally developed by me for Pokémon hacking.

2.3.5. spacefind

A bin-packing algorithm test.

2.3.6. taipus.rb

This one is publicly available. It conjugates names in Finnish.
It has now been translated to SNES assembly (or sort of).
It works. :)

2.3.7. sramdump

Views a sram dump file in a readable format.

2.3.8. base62

Converts addresses between hex and base62 formats. I.e. $C2:5D4C -> 0eJI and vice versa.
This development system uses base62 in the script dumps to reduce the amount of code written.

2.4. Technical report

My goal is to make a complete Finnish translation of Chrono Trigger.

The project currently depends on solving the following problems.

2.4.1. Item/technique/monster names

It works! Item and technique names are limited to 10 characters (restriction is enforced by both the screen layout and the ROM space).
This is way too little for Finnish, which has long words.
Solution A: Leave the item names and technique names untranslated.
This is not a considerable solution for me.
Solution B: Move the names to a different location in ROM so that there is no space limit. But: They still don't fit on screen.
Solution C: Add code using variable width 8x8 font and rewrite the method the item names are looked up. This means lots of work. But I attempt to do it anyway :)

2.4.2. Name conjugation

It works! Finnish is a language where words are conjugated. Just adding a substring like "'s" doesn't make correct language. The whole word stem changes a bit.
Solution A: Ignore the problem. But: This is crude. I don't want it.
Solution B: Add code that conjugates the names. This means lots of work. 30.6.2003 I did it! It works.
See below.

3. Useful features

3.1. Name conjugation

It currently has support for conjugating names on fly.
It's very important in Finnish, where you can't just add "'s" to anything to make a genitive.
For example, genitive of name Matti is "Matin", and genitive of name Crono is "Cronon".
The conjugator-engine is a textual script file translated to 65c816 assembly on demand.

3.2. Font/dictionary skew

It's quite complicated to explain, but shortly said:

In normal Chrono Trigger,

In Chronotools,

There are drawbacks though.

Despite these hazards this system might be a lifesaver for someone doing an Estonian, Portuguese or even Thai translation.

If you are translating to a language that utilizes thousands of different symbols, like Chinese, you might want to try to base on the Japanese version instead. This utility pack bases on the English version.
(Sorry, I can't help you with issues regarding the Japanese ROM.)

3.3. Automatic paragraph wrapping

The program takes automatically care of proper line lengths, so you don't have to risk running into unexpected too-long-lines or making too short lines in paranoia.
You can force line breaks, but you don't have to.

3.4. Very configurable

I have tried to put almost everything in text-only config files instead of hardcoding it in the programs. You won't be depending on me to do little updates for your purposes.

4. Copying

If you're interested, throw me email.
But read the translation project page first!

My email-address (sigh) is: bisqwit at iki dot fi

I'm not publishing files on this web page, because it's a well-known fact that many people in ROM hacking scene aren't very respectful to copyrights.

5. Requirements

A POSIX compatible system (like Linux or FreeBSD) with GNU tools (GNU make, GCC etc) is required.
These programs are archived as C++ source code only.

I don't have a microsoft-operating system here on my hand, so if you are an unfortunate user stuck with some Windows, you just have to find a development system (cygwin?) and compile the program on it to use it.

I'll soon try if I can get windows-binaries out with mingw32. Currently it has problems with iconv.

6. Changelog

Copypaste from the Makefile:
# VERSION 1.0.3  was the first working! :D
# VERSION 1.0.4  handled fixed strings too
# VERSION 1.0.5  found item descriptions
# VERSION 1.0.6  compressed better
# VERSION 1.0.7  compressed more carefully
# VERSION 1.0.8  documented the script
# VERSION 1.0.9  fixed "..." handling and located the font
# VERSION 1.0.10 had knowledge of character sets
# VERSION 1.0.11 had a working font insertor
# VERSION 1.0.12 had better knowledge of special codes
# VERSION 1.0.13 used 62-base numbers
# VERSION 1.0.14 added taipus.cc
# VERSION 1.0.15 updated FIN/README and ct_fin.txt, but neither are archived
# VERSION 1.0.16 added taipus.rb, fixed homepage urls and fixed mmap error checking.
# VERSION 1.0.17 working again; uses space better; little modularized
# VERSION 1.0.18 more of above
# VERSION 1.0.19 code organising... improved 'i' in 8x8 font.
# VERSION 1.0.20 binpacker changes, some translation done too
# VERSION 1.0.21 more translation, some documentation, font palette changes.
# VERSION 1.0.22 more translation, autowrapping support, conjugation detection code
# VERSION 1.1.0  did some assembly hacking, support for code patching
# VERSION 1.1.1  conjugating conjugating conjugating... work goes on
# VERSION 1.1.2  and so on
# VERSION 1.1.3  and so on... almost working! "case" still doesn't work.
# VERSION 1.1.4  conjugating finally works!
# VERSION 1.1.5  some bugfixes
# VERSION 1.1.6  fixed an allocation bug and optimized the code generator a bit
# VERSION 1.1.7  some translation, more asm changes
# VERSION 1.1.8  syntax changes in the compiler, optimizations
# VERSION 1.1.9  support for font/dictionary size skew
# VERSION 1.1.10 new configuration system. Time to squash bugs.
# VERSION 1.1.11 configuration works, font-enhancement works.
# VERSION 1.2.0  variable-width 8pix font has stepped in, but has many many bugs.
# VERSION 1.2.1  more vwf stuff, backup before doing big changes
# VERSION 1.2.2  vwf stability++, also techniques now vwf. Scrolling bugs.
# VERSION 1.2.3  lots of more translation
# VERSION 1.2.4  8pix system deciphered, more bugs introduced
# VERSION 1.2.5  characterset enlarged by 512, only vwf8 bugs still
# VERSION 1.2.6  using nonstandard hash_map for greatly improved performance
# VERSION 1.2.7  creating another compiler
# VERSION 1.2.8  improved dictionary compression

7. See also

8. Downloading

The official home page of chronotools is at http://iki.fi/bisqwit/source/chronotools.html.
Check there for new versions.

Generated from progdesc.php (last updated: Tue, 29 Jul 2003 22:11:40 +0300)
with docmaker.php (last updated: Thu, 13 Feb 2003 15:11:29 +0200)
at Tue, 29 Jul 2003 22:16:52 +0300