TRANSLATION HACKING

Well, now it's time to put it all together and try to translate something. We'll work with the Japanese version of Final Fantasy 1. It's kind of rare, so it may be hard to find.

Remember these steps:

1. Find some text.
2. Make a table file.
- Add an English font, if needed.
- Make a new table file for your English font.
3. Start replacing Japanese text with English text (or Spanish, French, Klingon, etc.).

Remember how we searched for "return" in Zelda 2, back in section 2? If you don't, go back and review the concept. We're going to do the same kind of search, but we have to use the hiragana syllabary instead of the Western alphabet. Here's a handy reference table:

 1 あ a    2 い i    3 う u    4 え e    5 お o
 6 か ka   7 き ki   8 く ku   9 け ke  10 こ ko
11 さ sa  12 し shi 13 す su  14 せ se  15 そ so
16 た ta  17 ち chi 18 つ tsu 19 て te  20 と to
21 な na  22 に ni  23 ぬ nu  24 ね ne  25 の no
26 は ha  27 ひ hi  28 ふ fu  29 へ he  30 ほ ho
31 ま ma  32 み mi  33 む mu  34 め me  35 も mo
36 や ya            37 ゆ yu            38 よ yo
39 ら ra  40 り ri  41 る ru  42 れ re  43 ろ ro
44 わ wa                                45 を o
46 ん n
This is the dream city, Corneria....

Start the game and go talk to this woman. This is where it will be easier on you if you at least know kana. We could find "return" in Zelda 2 because almost all games store letters in ordinary alphabetical order. We can find Japanese text the same way, because most roms store kana in ordinary kana table order (see the table above). So we know that no matter what value the font starts with, byte 1 must equal byte 2 (こ ko = こ ko), byte 2 + 16 = byte 3 (こ ko + 16 = は ha [wa]), and so on.

Match at 29277

Let's search for ゆめのみやこ (yume no miyako). Just like we did to search for English text, look up each kana on the numbered table and enter in its value. ゆめのみやこ = 37 34 25 32 36 10. You'll find one match, at 29277 hex.

Go to 29277 hex in Thingy or Hex Workshop. There's the start of ゆめのみやこ (yume no miyako).

Hex Workshop: AEABA2A9AD93 (ゆめのみやこ yume no miyako)

Also, notice the four bytes right before it: 9393A3FF. This must represent "ここは[space]" (koko wa). Sure enough, 93 represents こ ko in those two spots and at the end of ゆめのみやこ (yume no miyako), just like you'd expect. So it looks like you've indeed found the message you were looking for!

Now that you've found some text, you can make a table file. If 93 = こ ko, then 8A = あ a. So make your table file:

8A=あ
8B=い
8C=う
8D=え
...
B5=わ
B6=ん

Or, if you prefer romaji:

8A=a
8B=i
8C=u
8D=e
...
B5=wa
B6=n'

Also, go ahead and fill in:

FF= 

(There's a space after the equals sign.) You know FF must be a blank space, because there's a space right before the word you searched for, and FF comes right before the start of the word.

"Hey, wait!" you say, doing a double-take at the tables above. "What happened to を wo?" Well, as you'll see when you look at the font in Tile Layer, を wo is stuck off at the start of the font, for goodness knows what reason. Just fill it in later. Note that your table is also still missing all the kana with dakuten and handakuten. It's probably easiest if you open the rom in Thingy and look through it for unknown bytes. Just fill them into your table as you figure them out.

Japanese text + English font = Cavespeak!

Now we're ready to hack the graphics and put in an English font. Open the rom in Tile Layer and get cracking.

After drawing English letters over the Japanese kana, the rom will still try to display the original text, and you get ... Cavespeak! (Which anyone who's ever played an incomplete translation will recognize.)

Now make another table file for the English font you just hacked in:

8A=A
8B=B
8C=C
...
A3=Z
A4=a
A5=b
...

(Or whatever, depending on where you put your English font tiles.)

Now we're finally ready to put the game out of its Cavespeak misery. Open the rom in Thingy or Hex Workshop (Thingy will be much easier, if you give it both table files). In any case, you're about to run smack into the main problem translation hackers face: Lack of space! If you overwrite past the original message size, you'll start overwriting other messages from the game, and things will get messy. You're stuck with 18 bytes.

This is Corneria....

Anyhow, take your 18 bytes and make them into a message of your choosing. In Thingy, just switch to your English table, select the 18 bytes of the message, and type. In Hex Workshop, you'll have to look up the code for each letter on your table and type in the value yourself. You see why I recommend Thingy.

You've now done everything you need to do in order to do a basic translation hack. You can use what you've learned here and apply it to any other rom. (Assuming it's not a rom that uses advanced tricks such as DTE (dual tile encoding), compression, etc. etc.) I hope you've enjoyed our time together, and I hope this has helped you. Good luck!

Previous - Index