Home | Forums | What's new | Resources | |
Translating Grandia 1.1.1 |
TrekkiesUnite118 - Sep 9, 2018 |
1 | 2 | 3 | ... | 48 | Next> |
Mr^Burns | Sep 9, 2018 | |||
Good work, it's annoying how I can't find the original Korean patch files for Grandia as it might have given some help, must have been released on the net prepatched. |
vbt | Sep 9, 2018 | |||||
I tried all the Cyjzero blogs they are all dead (translation forum included), no way to get something with the wayback machine too. |
TrekkiesUnite118 | Sep 9, 2018 | |||
So after some more digging today I was able to get the PS1 English font. After looking at it I'm starting to wonder if the English version actually supports VWF. Reason being the English font is 8x16 in size, but every letter is scaled to that size and is perfectly centered. And when watching it in action you can actually see some spots where the spacing looks a bit odd, specifically around thin letters like Lower case L's and I's:
And here are the fonts for each version of interest. Original Japanese Saturn: Hacked Korean Saturn Font: English PS1 Font: There were some 8x16 Japanese characters in the English PS1 font as well, but I didn't see a reason to include them. |
SaturnTeam | Sep 10, 2018 | |||
Keep up the great work! Many years ago, I would translate the game as I went along. Unfortunately, It got to be too time consuming. |
Mr Conan | Sep 10, 2018 | |||
Another major issue in translating this is the fact that it looks like the korean version got away without expanding the script lines (at least from the glances i took). Lunar has codes that start and terminate text that are sometimes followed by codes that jump around by some offset in the file. Grandia is probably similar, so unless you like cavespeak, someone will need to figure out how to properly resize the script files. |
TrekkiesUnite118 | Sep 10, 2018 | |||||||||||||||||||||||||||||||
So doing some more digging I've found a couple more nuggets of info:
So with the control codes, I've figured this out looking at the file BA38.MDP/BA38.MDT in the different versions. This is the file that contains the intro scene I edited earlier among other things. When the scene starts, we can see this code before the text across all 4 versions:
Code:
It would seem that this indicates the following:
Code:
This seems to indicate the following:
Code:
This seems to indicate the following:
Code:
This seems to indicate the following:
Code:
In the English version it's this:
Code:
This would seem to reflect the following:
In the Japanese and Korean versions it's:
Code:
In the English version it's this:
Code:
This seems to reflect the following:
Next we see this code come up quickly:
Code:
This seems to indicate that in the same text box mid sentence we need to change the face portrait to a different one. This is used in the cutscene to change Mullen's expression. It would seem that the value 01 is an interrupt to tell the game to change portraits. Now I can keep going but I think the patterns should start to become obvious. I've also noticed the following values coming up to signify the end of a line in the text box or the end of a textbox:
Code:
The problem however is I can't seem to find consistency for which is used where. The PS1 sometimes uses 0E00 where the Saturn version uses 090F, but then there's instances where both are using the same values. Now after the end code however, there seems to be varying bytes of data. The size of bytes seems to be the same in the Japanese and Korean Saturn versions, and in many cases the same values. However when we compare to the Japanese PS1 version, the size of bytes between these gaps is different. There's additional data added in. However there is still some data that matches, however bytes are flipped which is consistent with endian differences. This would seem to indicate these are perhaps pointers. I have no idea what the additional data that's added into the PS1 version is though. Obviously more research is needed here as well as some experimentation, but this seems to be consistent when stepping through the script file in sync with the cutscenes so far. |
Mr^Burns | Sep 11, 2018 | |||
Main site: https://web.archive.org/web/20110723233040/http://... Grandia Korean translation forum: https://web.archive.org/web/20110723233040/http://... And after a lot of korean hangul digging I managed to find the original patch files, but the Grandia.zip is password protected, as is all zips on the site and i'm too tired to figure out what the password is now but you can grab it in the meantime http://rollingdice.tistory.com/945?category=149356... |
TrekkiesUnite118 | Sep 12, 2018 | |||
So I decided to play around with the font tonight. I did a simple test where I took the English PS1 font and stretched it to now be 16x16 in size. I then copy pasted it into the Japanese Font file in ASCII order. This way in theory the script files could be edited into English with ASCII encoding to make things easy. And other than a few letters being off, it proved to be successful: I'm attributing the few incorrect characters here to two things: 1) I was probably off in my count for the ... character. 2) I probably missed a control code that I haven't figured out yet that controls Kanji characters. Obviously I didn't edit much beyond this point but the game still prints the font out ok. It's just now everything is truly gibberish as expected: |
Mr Conan | Sep 13, 2018 | |||
Which emulator are you using to test? Mednafen? Last time i took a look Yabause unfortunately crashed at the game load screen. |
TrekkiesUnite118 | Sep 13, 2018 | |||||
I'm using SSF to test it. |
mrkotfw | Sep 14, 2018 | |||
Excellent work. Keep up the great work! |
Mr^Burns | Sep 14, 2018 | |||
|
TrekkiesUnite118 | Sep 15, 2018 | |||||||
So I've started putting together a font table for the game as I'm figuring out the encoding more. I have it done for the English portions of the Font, the Hiragana, and the Katakana as well as the special characters. I think I have an idea of how the Kanji encoding works, but it's going to be some trial and error to get it right. I figure if I can get this made it should make it at the very least easier to identify the Japanese text in a hex editor, as well as possibly make it easier to dump the script. It could also make it easier to spot the control codes. I've also been thinking about the issue of getting the font size changed from 16x16 to 8x16. CyberWarriorX has some good notes in this old thread about how the font and it's compression system works: https://segaxtreme.net/threads/saturn-hacking-note... Basically I think this is going to require some ASM hacking of the text decompression routine and possibly the text drawing routine. The Decompression routine works by decoding the first 8x16 portion of the character, followed by the next 8x16 portion. I'd imagine this would need to be changed so only the first half is decoded and treated as one character. I'd also imagine that this would impact the pointer table of the FDATA.BIN file. Finally depending on if the game is spacing the text based on font width or if it's spacing it in 16x16 increments regardless of it's size, would determine if the text drawing routine would need to be modified. This is something that is way above my skill level so I'm probably going to need some help on this one. I was planning on reaching out to CyberWarriorX and seeing if he had any thoughts on it or if he wanted to jump in and help. If anyone here wants to give it a shot feel free to jump in. I was also thinking about reaching out for help on ROMHacking.net. I have however had some success figuring out a bit more about the control codes. The code 090F that I before thought was end of text I believe is actually 1 code plus the start of another. The first code is 09. This seems to indicate a pause in text drawing. It seems to be used to pause the text to keep it in sync with pauses in the voices. The next code is actually 0FXX. The XX I've seen be any value from 01 up to 0A so far. This seems to be used for various different things. What I've found so far though is the following: 0F03 seems to be related to controlling the Left Portrait. 0F21 seems to be related to controlling the Right Portrait. The next code I was able to figure out is this one:
Code:
This code tells the game to switch to a different portrait, where XX is the value for the portrait you want displayed. So for example if you see the following:
Code:
It would appear to mean "change the left portrait to portrait XX". I was able to confirm this in testing by changing the portraits in the intro cutscene to arbitrary values: There's still quite a few different values for 0F XX however, and I haven't quite been able to nail down what they all do yet. |
TrekkiesUnite118 | Sep 15, 2018 | |||
So after making a topic on RomHacking.net it was revealed that the 8x16 English font is actually in the Saturn version, and it's in ASCII format. To use it you just need to start your text line with the code 03 and then you can edit in ASCII encoded text. I tested this and got these results: So basically this makes things a lot easier I'd imagine. Now it's just figure out the control codes, any pointers in the files for text size and location. With that information it probably wouldn't be too difficult to write a tool to dump the JP script, and then another to inject an English script with pointer values adjusted for expanded text. Though it would still probably be beneficial to make some kind of hack to make the 8x16 font the default font so you don't have to waste a byte with the 03 control code. I'm guessing this is what the English PS1 version did as I'm not seeing any evidence of a control code like that being used in it's files. |
TrekkiesUnite118 | Sep 16, 2018 | |||
So I think I might be figuring out how the script pointers work based on comparing the PS1 versions, and then spot checking with the Saturn version. So here is what I believe to be one complete text routine from the file BA38.MDT at x05B4: This highlighted portion I believe is a header of some kind. It seems to change from text sample to text sample, so there's probably optional values that are in some text boxes but not in others. Now this next highlighted portion is the important part. This value I believe represents how many bytes until the end of this text box. In this example it's 5A: If we then move forward 5A that will bring us to the end of this block of data. The end of a block of text data seems to be tagged with this possible footer: After this the next text box starts. I've been able to keep following this pattern and consistently keep finding what appears to be the correct number of bytes and the start of the next text box. I'm going to keep testing this but so far it's looking promising. |
TrekkiesUnite118 | Sep 17, 2018 | |||
Ok, so I think I've cracked the code of the MDT/MDP file headers. This information seems to hold true for both the Saturn and PS1 files, the only difference being that in the PS1 files pointers are Little Endian where as in the Saturn files they're Big Endian.
With this info I imagine I should be able to make a program that can do the following:
|
1 | 2 | 3 | ... | 48 | Next> |