Tuesday, December 4, 2007

Back on Track

After more than a year, I have once again picked up the threads of my Akazukin Cha Cha RPG Translation project. Unfortunately the last updates on my Geocities site actually don't reflect the last work I did before abandoning the project (again).

Here is a list of things that have been completed
  • Variable width font routine
  • Simple dictionary compression routine
  • Auto line-wrapping routine
  • Dialog engine hacks
  • New font GFX
Although not essential to produce a working patch, the two routines are important in making the translation a lot easier and goes a long way to make the patch more professional-looking.

Variable Width Font

Japanese characters usually take up the same amount of space on screen, whether kanji or kana. The original character size was 16x14, but I was able to trim it down to 8x14. However, the roman alphabet wasn't designed to be evenly spaced. So thin letters like i, l and t are around half the width. The routine was quite daunting at first, but easy once I understood how SNES graphics worked. This also had the added benefit that you could place more letters on a line at a time, depending on the characters used.

[screenshot - no VFW][screenshot - VFW]

Line Wrapping

Shock! The original code for Akazukin Cha Cha contained NO line wrapping code. That meant developers had to manually insert line breaks into the script at the end of each line! Horrors! I looked at myself in the mirror and told myself, this won't do.

Dictionary Compression

From the onset of the project I anticipated that the translated script would take up more bytes in the ROM than the original. Case in point, Cha Cha's name:

Japanese: [CHI][ya][CHI][ya] - 4 letters
English: [C][h][a][ ][C][h][a] - 7 letters (or 6 if you don't count the space)

So the best way to handle this is to use replacement codes for letter combinations that commonly occur in the script.

[01] = Cha Cha
[02] = Riiya
...
[08] = the

This is the same way that Chrono Trigger (English version) handles its script, which is quite large. I didn't expect a large script from Cha Cha, but the size of the ROM was small to begin with.

The Dialog Engine

I spent quite some time looking at how this part of the game worked, and there were still some things I didn't understand when I put down the project. I'll have to go back and take a look at those things.

The modifications applied to the engine were removing two-byte (Kanji) codes and integrating the dictionary routine.

New Font Graphics

The font doesn't really match that well to the cartoonish style of Akazukin Cha Cha, but that's just details. The nitty gritty of the ASM coding is complete. There may be a few things that need smoothing later on, but looking back on my work I'm very happy with how the code turned out, and pleasantly surprised that as was able to get it to work as expected.

Now we go back to the script. I actually thought that this would be the easy part, but it turns out to be quite a major bump in the project roadmap.

I've discovered a few things (just this morning, in fact, which could explain why I was late for work) with the scripting and event engine. I've found out that the dialogue engine was just a subset of the scripting engine, and I've decoded a few bits and pieces of how an event plays out.

This is quite a step forward in fully decoding the script, and one step closer to a complete translation. This is also a huge boost in morale, giving me a reason to keep forging on.

Once I have the script format pinned down, a proper script-ripper or and editor is in order. I do have a very simple script-ripper and inserter, but it is fairly complicated and existing in the realm of it-just-works! and will have to be re-written to be really useful.

As usual, I'm back to looking for a few good translators who can accomodate the wackiness of Akazukin Cha Cha into the translation. I realize a straight translation will leave many scratching their heads, and purists will flame me for modifying any single bit of it, but I'd rather have more people enjoying the game.

Shamefully, I haven't played the game very far myself, so I can't vouch for how good the game is, but the presentation is unique, and it's something I always look for in a game.

Check out the screenshots below!

No comments: