At 12:58 AM 2/20/99 PST, you wrote:

>>Second reason is that Oasis' way of translating is using a hex editor. 
>>That method is not practical for a complex game like Snatcher.
>
>Do you know a better (or:more comfortable) way to translate Japanese 
>games ?

I use what I call the "compiler method". It means you make a source file in
a format you design yourself (depends on the game) and you write a compiler
that generates from that source the data you can put in the disk (or ROM).

This is an example from the Solid Snake English source:

#CONV STR :BEGIN01 03 SNAKE
"THIS IS SNAKE..." FE
"ARRIVED ON"       FE
"ENTRANCE POINT*"  FB
#CONV CNT :BEGIN02 03 CAMPBELL
"SNAKE..."         FE
"JUST ON TIME,"    FE
"AS USUAL*"        FB

Legenda:
#CONV    : conversation block
STR      : start of conversation
CNT      : continue conversation
:BEGIN01 : label name (used in pointer tables)
03       : text display speed
SNAKE    : name of person that speaks this text
FE       : end of line
FB       : end of a person's text

The main advantage of the compiler method is that you can automatically
recalculate pointers. By a pointer I mean a location (address) in the text
data area.
When translating messages, you will have to fit all English texts in the
same area the Japanese fitted in. But not all messages will be equal in
length, some will be shorter in English, most will be longer.
To make optimal use of the space, you have to recalculate pointers. If for
example one text takes less characters in English than in Japanese, you can
use the leftover space for another text. But that can only work if you
update the pointers.

Example:

TEXT001 is 23 bytes in Japanese chars
       and 18 bytes in English chars
TEXT002 is 38 bytes in Japanese chars
       and 40 bytes in English chars

They are stored in memory as follows:
TEXT001 at addr #8000
TEXT002 at addr #8017 (#17 = 23)
TEXT003 at addr #803D (#3D = 23 + 38)

If you want to replace the texts without recalculating the pointers,
TEXT001 will fit, but TEXT002 won't. So you will have to shorten TEXT002,
which is generally not good for the quality of the translation.
But if you recalculate the pointers, you can have TEXT002 located at #8012
(#12 = 18) and its message will fit without shortening.

Doing pointer calculations by hand is a lot of work. If you change the
length of for exampe text number 5, you will have to recalculate all
pointers after that, which can be quite a lot (Solid Snake has about 500
pointers). That's why automatic pointer calculation is such an advantage.
Also, manual calculation can produce errors, while automatic calculation is
error-free.

There are more advantages.
You can edit the source using a normal ASCII editor, which is easier to use
than a hex editor (for example: delete one character in the middle of a
sentence).
You can add extra features. To fit more text into Solid Snake, I used a
dictionary compression. This means that frequently used words are stored
only once in the game data, and special codes will "look up" words from the
dictionary. The dictionary was made by hand, but the compiler automatically
spotted words in the text and generated a dictionary lookup instead of the
full word.

Ofcourse there are disadvantages too.
You need a person that can write a compiler. Writing compilers is not that
difficult, once you know a proper systematic way of doing it. But if you
write a compiler and you don't know how to do it, you'll end up with
illegible code and a lot of bugs.
You also have to create a source file that generates the original texts.
This is the best way to do it, because you can translate the messages one
by one and verify the result by playing. Creating the source file is a lot
of work, but you have to do it only once. And part of the work can be done
by programs rather than manual labour.

>And sometimes, you aren't even able
>to find the text back on the disk (Super Cooks, Madoumonogatari 1-2-3, 
>for example)...

The text must be there, otherwise the game couldn't display it. So you must
have been looking for it in the wrong way.
Have you found the font graphics? Most games use a very simple encoding,
where the number stored on the disk is the same as the index of the
character in the font.

There are many details, tricks and useful utils that I haven't described
here. If you (or anyone else) can use advice in translating games, please
mail me.

Bye,
                Maarten


****
MSX Mailinglist. To unsubscribe, send an email to [EMAIL PROTECTED] and put
in the body (not subject) "unsubscribe msx [EMAIL PROTECTED]" (without the
quotes :-) Problems? contact [EMAIL PROTECTED] (www.stack.nl/~wiebe/mailinglist/)
****

Reply via email to