Wednesday, July 7, 2010

Status Update - It's Alive! The translation tool, that is.

I find myself unable to use existing translation tools. For the record, I acknowledge that my difficulties may somehow be entirely the result of ignorance on my part. I'm running a 64-bit version of Windows 7 and I had no luck running most of them in virtualized environments, and no interest in dual-booting just for this project. Thus, I decided to develop my own, which I finished over the weekend. Just in time, too; I feel like it was starting to eat my brain. Below you can find some screenshots from the tool's test run. I have no illusions that it's perfect (or even good - some of the features illustrated in the UI don't and may never work) but it's functional and reliable enough for my purposes.

The first screenshot depicts the tool's UI. The tool automatically displays the hex values for the string taken from the ROM, the hex offset for the hex string, and the string's text value. The string the tool displays is an error message that the ROM displays if you try to play it on anything other than a Japanese system. Incidentally, this was the string that I used to determine that the ROM was translatable.

The bottom half of the UI displays a text box in which I can enter text translations for the string. The tool automatically generates a hex string for the entered text. I like keeping the hex around because it's easier to see the control codes that the ROM uses (line breaks, wait for user input, etc.). I feel a little guilty every time I look at the hex, though, because someone, somewhere on one of the ROM hacking websites I used during my initial research threw a fit about how you should never use a hex editor to hack a ROM. In retrospect, it's clear that he was talking about tools rather than the binary values themselves, and yet I'm still ashamed. Thanks, overly emphatic ROM dude. Anyway, I digress.

The tool can also generate hex offsets for the translated hex based on a function that identifies large sequences of uninitialized bytes. It can then use the generated offset data to patch the ROM with the translated hex. Right now the inject all strings option doesn't work, but honestly that won't matter for a while.

The only other big feature that doesn't work is the dictionary. I envision being able to select a Japanese substring and save it to a dictionary along with a rough translation. I'm interested in this for the sake of consistent translation more than any potential simplification of the process. This feature actually shouldn't be very hard to implement, but I hesitate to risk getting bogged down in a yellow feature.


This is the original error message.

This is the test error message "translation."


So that's it. I apologize that it's not something more exciting, but this string is known and easy to display. Right now, I'm roughly even with the previous English translation attempt which, as far as I know, only ever released a python tool and dummy text. That means anything from here on out is progress!

I've promised to elaborate on my lack of qualifications, and I will at some point, but rest assured that they are impressive. Right now I'm working on translating the game's user manual so that I have a better idea of how to handle the in-game text. Hopefully, I'll be able to post some results from that effort in the coming weeks.