Translating Help

Hoagie

New Member
Hello all,

I have been tossing around the idea of doing some translation work for a few Saturn games I have. I have two games that I would particular like to get translated, "Lunar: Magic School" and "Grandia: Digital Museum".

One of the games (Lunar) has all the text in seperate files, making the actual translation a snap. Unfortunately, I have run into one major problem and one minor issue that I was hoping some folks here might be able to help me with.

The Problem:

The dialog in the game is extraced based on length. That is, the first line of dialog is X characters long and the second is Y. This means that if I have 10 Japanese characters for the dialog I can only have 10 English characters, or I screw everything up. It is easy to see the problem.


The logical solution would be that the game is going to memory addresses in the game. My problem is that I have yet to find these references! I know the location in the file, but I can't find where the game might be accessing that location (and the next). So I was wondering if anyone might have some hints on how to find these locations?

The other issue I have is a hard one to fix and just something that I would like to do if I figure everything else out. Simply put -- Japanese uses 16bit characters, English uses 8bit. Sure would be nice to get the game to look at 8bit characters for text instead of 16. This would probably be a 10 minute job with the source, but just a little more involved with binary.


Any help with the problem is much appreciated! Thanks for any help!

Hoag

P.S.

What's the best to test a translation in progress? I've moded my Saturn to play CD-Rs and it can read CD-RWs too, but I have a feeling there is a better way. I do have a GameShark (as I've heard that it is possible via that).
 
The most effective thing you can do is replace the font. Maybe VWF or just multiple-character font, whatever floats your boat. Both are going to be a pain to do (lots of sh2 asm hacking involved). You'll probably need to expand the file for the text too, even with a new font you'll need more space. I don't think MSL has two data tracks so this shouldn't be much of a problem.
 

ExCyber

Staff member
The logical solution would be that the game is going to memory addresses in the game. My problem is that I have yet to find these references! I know the location in the file, but I can't find where the game might be accessing that location (and the next). So I was wondering if anyone might have some hints on how to find these locations?
I can't guarantee that this will work, but it's worth a shot:

Search the program files for the filename of the text file you're looking at. Note the address of the filename string. Now search for that address (in hex, big-endian), keeping in mind that it will be located somewhere in RAM at runtime (so the address will most likely start with 06). Find a place where a subroutine call is made with that address as one of the arguments (unless you're a SuperH wizard, this will require cross-referencing a disassembly of the program). One of the other arguments will probably be the location in memory to which the file is loaded. Now search for that address. With any luck, you'll find the routines that actually read the text, and from there you should be able to locate whatever lookup table it's using to determine the location and length of the text strings.

This would probably be a 10 minute job with the source, but just a little more involved with binary.
Well, step one of rewriting a routine is finding it, and hopefully the method above will yield it. Good luck.

What's the best to test a translation in progress? I've moded my Saturn to play CD-Rs and it can read CD-RWs too, but I have a feeling there is a better way. I do have a GameShark (as I've heard that it is possible via that).
The GS-based method also requires a proprietary parallel port. I've never tried running commercial games with it, though. Also, it's probably only really good for testing modifications to the main program code.
 

Hoagie

New Member
I keep forgetting to check back here! Many thanks for the info!

Being *totally* new to the whole Saturn hack thing, can you direct me to the sorts of programs (be they links, or just program names) I am going to need here?

I started checking out some of the docs around the site, but haven't looked really hard yet (other things taking up too much time). For example, can I use a standard C decompiler to look for those routines or is a Saturn binary just that much different that I need something special? If I can use a standard one, does anyone have a favorite that seems to work well with Saturn stuff?

Many thanks for any help!!

Hoag
 

TakaIsSilly

New Member
Originally posted by Hoagie@July 06 2002,07:11

I keep forgetting to check back here! Many thanks for the info!

Being *totally* new to the whole Saturn hack thing, can you direct me to the sorts of programs (be they links, or just program names) I am going to need here?

I started checking out some of the docs around the site, but haven't looked really hard yet (other things taking up too much time). For example, can I use a standard C decompiler to look for those routines or is a Saturn binary just that much different that I need something special? If I can use a standard one, does anyone have a favorite that seems to work well with Saturn stuff?

Many thanks for any help!!

Hoag
Er, you'll pretty mutch need a Super-H 2 decompiller. There is no magical machine code->C program for the Saturn. you _will_ need to understand assembly language, and when and how it branches... luckyly for you, SH-2 has only a handfull of branching instructions. Unluckly for you, finding out where is the jump will be is a harder play, one that myself wouldn't wanna get involved.


you might want to start here, for the dissasemblers (altough... they seem to be a wee bit old) and for some PDF's with SH-2 docs... someone provide him with better links, i'm too sleepy right now.

http://www.eidolons-inn.de/sega/saturn_dev.html
 

CyberWarriorX

New Member
Everbody gather around. Magic School Lunar pointers revealed!


I'll be using S00.FLD(opening dialogue text) as the example.

The first 0x800 bytes of the file are the section pointers. Of course for S00.FLD only the first 16 bytes are used(the rest is padding). Each pointer is divided into 8 bytes. The first 4 bytes is the file offset to the section's data, and the next 4 bytes is the length of the data.

example(using S00.FLD):

Section 1 offset: 0x00000800

Section 1 size: 0x000018A4

Section 2 offset: 0x00002800

Section 2 size: 0x000013DD

Not sure what a good chunk of the section data is, but we won't worry about that for now.

Section 1's text starts at 0x00001754. The pointers for the actual text(for section 1) are at 0x00000A6C. Each pointer points to the start of each text paragraph(0x0800 follows each paragraph). Anyways, in order to convert the pointers to a file offset, you have to add the section's offset to the pointer. For instance for the first paragraph:

pointer to paragraph: 0x00000F54

Section 1 offset: 0x00000800

0xF54 + 0x800 = 0x00001754

So whenever you insert your text, make sure you adjust -both- the paragraph pointers as well as the section pointers. There may have been more pointers I missed, but I doubt it.

Cyber Warrior X
 

TakaIsSilly

New Member
Or _that_. I kinda forgot the best solutions are the simplest ^^;. I guess we simply worked too mutch on the Saturn, and belive everything related to it is hard as hell.
 

CyberWarriorX

New Member


Well, it really depends on the format and platform you're dealing with. If it was a PC game, I would've have just run the game through w32dasm and worked out the format like that. But considering it is saturn, where file formats are generally self-explanitory, it's faster and easier just going through with a hex editor.

Of course it's always better going through an asm dump(or use a debugger) since you'll then know the format 100% instead of a bunch of meager guesses.

Cyber Warrior X
 

DBOY

New Member
Originally posted by CyberWarriorX@July 09 2002,17:58

Everbody gather around. Magic School Lunar pointers revealed!
OH BOY! NOW SOMEONE CAN TRANSLATE THE CRAPPIEST FUCKING RPG ON THE SATURN! GEE WILLIKERS I'M SO JOVIAL!

Man, you'd be better off working on Blue Seed or whatever that really really early Saturn RPG was. Even that was better than Magic School. MS just had no real ploy, shitty-ass music, horrible voice acting, bad animated sequences, slow-ass battle time, and worst of all the game just NEVER gets moving.

For more about MS, just go look for that post where Oogami and I were talking about it
He's only posted like 5 times so it should be easy in a search.
 

CyberWarriorX

New Member
OH BOY! NOW SOMEONE CAN TRANSLATE THE CRAPPIEST FUCKING RPG ON THE SATURN! GEE WILLIKERS I'M SO JOVIAL!
Nah, I think the crappiest would have to be reserved for a game like Paneltia. Anyways, if you haven't figured it out by now, i'm not prejudiced against any particular saturn game when it comes to hacking. If the game uses formats that look rather intriguing, I spend a wee bit of time figuring things out and adding it to my knowledge base(in fact, it only took me all of around 5-10 minutes to figure my findings on the MSL script format). It's something even -you- could do.

So in other words, shut your cakehole and get working on that Langrisser 4 table!


Cyber Warrior X
 

DBOY

New Member
Actually Pantelia is a rather cool game once you figure out how to play it. Easily better than trash like Magic School -- the worst fucking game ever produced by Game Arts. A game so bad even Victor Ireland realized how stupid it would be to bother translating


Originally posted by D-BOY@May 21 2002,13:28

As for Lunar: Magic School. I have firsthand seen kindergarden kids write better literature with a box of crayons. The dialogue is dry and uncreative. The characters really don't have all that much emotion to them. The writers never heard of a plot twist in their life (take some lessons from Terranigma). And the whole concept behind the game just makes my skin crawl as a writer. You'll find more quality entertainment and storytelling in the Berenstein Bears than Magic School.

The intro to the game floored me at it's absolute cheapness. The magic school recruiter guy JUST HAPPENS to be walking through an apple orchard looking for a cave (apple orchards are the first place I go to look for caves) for who the hell knows why when Elly just descides to start flying and go pick the apples at the top of the tree Lena's dad can't reach. The old man nearly shits a brick in amazement because DAMN, THAT GIRL'S FLYING and Lena basically say "OH YEAH! Of course she can, it's a gift." because you know, everyone can fly and does so all day long. Then they go to the cave and BAM, this fortress just comes out of the ground. "Oh by the way I'm a scout for the magic school, why not come along!!" Gee that sounds like a great idea, two little pre-teen girls going along with a creepy old man after seeing a fortress come out of the ground, and of course Lena's dad lets them with little or no discussion.

There's a limit to how far I'll let an RPG drag me through CRAP storyline and this game managed to find it. The other Lunar games, while I'm not a Lunar fan, did a pretty good job on the stories. They were believeable (in a fantasy respect) but come on... this game just doesn't cut it...
Originally posted by Oogami@May 21 2002,14:32

Oh, and about Mahougakuen Lunar; let's just say that I sold the game after I had gotten an hour into it, and I don't make a habit of selling games.
 

DBOY

New Member
On another note, your Langrisser IV table is on hiatus. I just checked it out in comparison to your new file that actually bothers to add numbers so you have a vague idea where you are. The whole file is off by 1 byte somewhere. Finding out where is at the absolute BOTTOM of my priorities list. I posted to donut to see if anyone knows how to use the kanji OCR. If someone replies, I'll runt he table through that then fill in all the stuff it can't get myself. It will take a lot less time than fixing the currently fucked table. (especially given it's 1903 characters and my table is 1024, meaning I have to manually repair 50% of the fucking file)
 

CyberWarriorX

New Member
Actually Pantelia is a rather cool game once you figure out how to play it.
I guess everyone has their own tastes, don't they.

I would also like to remind you that Victor Ireland has said a lot of things in the past, most of which have either been rather wrong or rather stupid.

I personally like his "Arc the Lad is too old" comment I saw on a page from '98 or '99.

The whole file is off by 1 byte somewhere.
Eh, that sucks. Send me the file sometime and i'll take a look at it. Oh yeah, using kanjiocr is a bit over-rated. The original file I sent you I started with kanjiocr to begin with. Typically i've found it finds somewhere between 20-40%, a sorry percentage to say the least. I also find this number drops if you feed it feed it more than a handfull of kanji, so a lot of gruntwork is involved. If you -really- want me it to go through kanjiocr, i'll run the rest of the kanji through myself, just let me know what part of the file you're at.

Cyber Warrior X
 

DBOY

New Member
I just ran it through kanji ocr and got 80% good


Try making it 2x size with a lot of whitespace on all sides. Works fine.
 

Hoagie

New Member
Gads! I'm going to have to write myself a reminder to check back here. Glad I had another question and looked for my old post when I came back.

Many thanks CyberWarriorX -- your post (in the middle) answered exactly what I was returning to ask about. I just needed a little help in figuring out what to look for! Now that I have an idea, I can look at Grandia: DM and see if I can't get those pointers too.


Hoag
 
Top