Sunday, April 14, 2019

Progress Update

Hey everyone, mako here. It's been a while so I felt a progress update was in order. Both Risae and I have been super busy with irl stuff lately, so overall progress has been really slow. 

Getting the prologue script out of the way was a pretty big step for the project, as it had the most branching routes in the game. That means since the Growlanser Realm script followed only a single playthrough, I had to manually translate all the other dialogue options, and then test them repeatedly after every edit. There are at least 3 lines that remain unedited as I was unable to trigger the scenarios in game, so I have no context for them. If anyone finds them, take a screenshot and let us know. I've probably played through the prologue over 20 times by now so naturally I got a bit burnt out. 

After taking a few days off from the project, I've now begun working on the item descriptions. This is another script that needs a ton of manual translation (probably even more than the prologue script), and testing won't be as easy either, as we don't have all the items in the save file we're using. Once this and the accessory descriptions are done, there's not much else left to do, which means we should be able to jump into gameplay and start grabbing the Japanese dialogue text using an OCR program in order to translate the rest of the script very soon.

So yeah, just wanted to let ya'll know that we're still alive and working on the project, and that everything is going exactly according to plan. Thankfully we haven't hit any major roadblocks yet, nor are we expecting any ahead, so everything should be fine.

Monday, April 8, 2019

Growlanser 6 Prologue (and more) has been fully translated!

Dear readers,

Mako and i are proud to announce the full translation of the GL6 Prologue!



Using the Growlanser Realm script as a basis, we managed to translate all of the script that is used inside the GL6 Prologue.
Including the Prologue, these have also been fully translated:


NPC, Monster and Other Character Names
Item Names
Spell Names
Plate Names
Ability Names
Gem Names 1
Knacks List
Ability Tree
Yurii's Skills
Menu Help
Memory Card Text
Voice Credits
System Settings
Spells Descriptions
Knacks Descriptions
Ability Descriptions
System Settings Descriptions
AI Settings Descriptions

Some things like Yurii's Menu and the GL6 font are still giving us a bit of a headache, but with time we should be able to fix it one way or the other
(and if a MIPS Hacker is reading this, please give me a call!)

There is still a lot of work to do, but if you want to play the game using out translated script then you can download the already updated game files here:

https://bitbucket.org/Risae/growlanser-6-translation/downloads/GL6%20v0.1.rar

All you have to do is unpack the GL6 ISO using Xpert, overwrite the dumped files with the ones inside the RAR and then repack it.
A quick guide on how to use Xpert can be found here:

https://growlanser6english.blogspot.com/2019/03/growlanser-6-unpack-iso.html
https://growlanser6english.blogspot.com/2019/03/growlanser-6-repack-iso.html

As always you can find our current progress on the repository and we welcome anybody who wants to contribute to the translation.

Tuesday, March 26, 2019

More text control codes figured out!

After doing the Menu Help translation i noticed that there were a lot of unverified control codes that we didn't figured out yet.
So, after a little bit of tinkering the sweet lady decided to tell us all about her deep and dark secrets:





This should make editing a loooot easier (looking at you, "Menu help.FLK"!)


Monday, March 25, 2019

Slow and Steady

Hey everyone! It's mako again. No major updates for now, but some major stuff is on the way! Till then, enjoy this fully translated screenshot! 



You may have also noticed the Menu icons. Yes, we recolored them to match the game's aesthetic! There are also some icons that had to made from scratch, but I'll cover that in a more detailed future update. 

See y'all soon!

Friday, March 22, 2019

And we found all the missing system text lines

I was wondering, even thought we found all the "System" text files, why couldn't i find a file that actually containted the text  ひらがな and カタカナ, which for example is used in the charactername screen.
After some digging it turns out that all of that is stored inside the executable SLPM_667.16, a so called "ELF" file:


Here's the character creation, now translated to english:


But. the ELF file is not like the other GL6 script files.
Right now it's not possible to "dump" the script with the pointers.
And, what is even worse, we cannot go over the original length because of that.
I'm going to check out programs like "ps2dis" and "PCSX2dis" to see if i can somehow dump the executable file and reprogram it for the translation.

Sunday, March 17, 2019

We found the Menu pictures and imported them to GL6!

You read right! We found the menu pictures of GL5 and 6.
They are located in the folder

GL5_FILE.DAT / 000001e0.tm2
GL6_FILE.DAT / 0000025c.tm2

and have the file ending ".tm2".
To open those files you need to use the program called "Rainbow":

https://www.romhacking.net/utilities/1069/

A simple copy and pasting from GL5 to 6 works like a charm:


Sadly, the GL5 file is actually missing some entries, so we can't use all of it:




Fun fact:

It actually looks like that the western release was the reason we got "fancy" menues in GL6.
Here's how it looks like in the original GL5:



Saturday, March 16, 2019

Menu Translations

Hey y'all, mako here. I've been assisting Risae with this project. I'm no programmer so my role is pretty much limited to text insertion. This is what I've been up to for the past two days.

Consumables and Key Items have been fully translated!



Item descriptions will probably take much more time though. The original Growlanser Realm translation didn't include any of the key items and equipment, so they had to be translated manually. Since neither of us is fluent in Japanese, I used the official Growlanser Heritage of War script, Google translate, Bing translate (it's actually surprisingly good) and my own intuition to fully localize the equipment and key item names. Don't worry, I made sure none of the names sounded machine translated and I did my best not to stray too far from the original. The same process will have to be repeated for the item descriptions and I am NOT looking forward to it lol.



Accessories haven't been translated yet, as they seem to be hiding in another file. Hopefully they're identical to HoW so I won't have to use three different sources and my own head to translate them.

Skill Plates have been fully translated!



Translating these was MUCH easier than the items/equipment. All skill names are taken directly from Heritage of War for the sake of consistency (and because they're literally identical).



The Ability Tree is still pending, though that wont take long at all. The same method as the skill plates will be used here.


That's pretty much all I have to show for now. What I'm focusing on next is the Ability Tree and then the Spells/Knacks menus and accessories (I may or may not do the item descriptions next, we'll see lol). Then I'll be set for starting a full playthrough of the game with the game script to capture any and all Japanese text I can find, so that we can then move on to inserting the dialogue. This is important as the dialogue text generally isn't placed in order in the script files. This means we have no idea what the next line of text says. Therefore we need the text from the game, with the context intact, in order to search it in the file, and then replace it with the English text according to story progression. 

That wraps up my update for today. Hopefully my next update will include item descriptions (we'll see lol). See y'all soon! 

The adventures of font editing

Currently trying to get the font of GL5 to work in GL6.

As far as i can see, the file 0000002e.fnt contains the text font in GL5 and GL6.


This is how it looks like in the GL6 font:


And this after copy n pasting 0000002e.fnt into GL6:


And this is how it will hopefully look like in the future:


If somebody knows how to edit PS2 .fnt files, please let us know!

Wednesday, March 13, 2019

Editing items

Editing items seems to work without a problem!
As far as i can see, all the item names are stored in one file and the descriptions for them in another


Tuesday, March 12, 2019

Growlanser 6 file description

On the repository we documented all of the GL6 files:

https://bitbucket.org/Risae/growlanser-6-translation/src/master/

The current plan

I managed to extract all of the script of the tutorial mission, edit lots and lots of it and re-inserted it into the game without breaking anything.
Now that the proof of concept sort of works, here are some to-do's that are still unfinished:

1. I created a bitbucket repository!

https://bitbucket.org/Risae/growlanser-6-translation/src/master/

A different translation team was using bitbucket to translate a japanese rpg from japanese to english, and i saw that it sort of works like a github project where everybody on the internet can edit the code and contribute to it.
I already have one additional person who might help me with the translation of the game, so i was looking for a good solution to create a place where multiple people can work on the script and see the changes each other made.
So, i will probably just upload all of the script on the repository and edit everything on there.

2. Figuring out every single control code
I already figured out the control codes for "Linebreak", "New window" and all the color ones.
But looking through my tutorial script, there are even more which i didn't account for.
I might have to do some heavy testing to figure out the rest of them so i can create a script file that is easy on the eyes and editable.

3. figuring out how to increase the total size of the text file without breaking the whole game
The moment i try to increase the file size, quickBMS will overwrite the bytes of the next file and completely destroys the game (at least thats what happend the last time)
Will think about that later at some point.

4. Figuring out how to change the menu picture
Since Growlanser 6 is (so far) identical to Growlanser 5, i might be able to just copy and paste the menu from 5.
Might be an easy solution to get the menu translated.

5. Figuring out how to display that the text is over the total length of the line
Growlanser 6 has a lot of different text boxes, and i am not sure that every single one has the same length limitation. Might have to do some testing on every single one.

I might be able to do this in a running game through a RAM editor, or something similar to that. PCSX2 should have a feature like that.

Monday, March 11, 2019

Found a solution for the text boxes




In this picture i tested 2 things:

- Do color control codes actually change after FF DF 10?
Answer: Nope

- What happens if i just include 2 additonal "New Line" Control codes?
Answer: The game just increased the size of the text bubble
Which is awesome! I don't have to worry about text not fitting in the box because it is longer than the original.
Now i only have to keep an eye on the total file length, anything over the original size breaks everything.
At the end of every text file there is garbage which i can use for my own text:




Sunday, March 10, 2019

Program explanations

I used various tools to unpack the ISO, unpack the .DAT file and then dump the script from Growlanser 6.
I will try to give the tools a brief explanation on what they are used for:

- Xpert
Xpert is a tool that has various plugins which can do all sorts of things to files of games.
I used a PS2 ISO Plugin which actually just reduces the filesize of the ISO, but i used it to unpack the ISO and see its contents and then repack everything once i modified the text files.

- quickBMS
quickBMS is a tool to unpack the .DAT Files which i got after unpacking the ISO.
With the help of the https://zenhax.com/ community i got a script for quickBMS which automaticly unpacks all the .DAT files
(This works for Growlanser 5 and 6 since both use the same engine and file structure)

- wxMEdit Hex Editor
I used this hex editor to figure out where the text files are, and how they are build together.
It was rather easy to find the text pointers with it, because they are located right above the text block.
All of the files use SHIFT-JIS Encoding, so it is important that the HEX Editor supports this.

- Cartographer
I already tried to do a translation of this game in 2015, but i got stuck after finding no solution for the text editing including the text pointers.
Wish i would have found this little tool before, because it can, with little difficulty, dump the whole script into a readable file for editing.
Cartoprapher is a tool to dump the text with the use of the pointers, or without it.
Very awesome tool, i highly recommend it.

- Atlas
Now that you have the text dump, you gotta reinsert it somehow, right?
This is what Atlas is for.
I sort of scripted my insert script the wrong way, but it still works so i highly recommend it because this tool is able to insert raw text and text with pointers associated into the text file.
It automaticly writes the pointers of each text box and it can save you a lot of time once it (sort of) works.

Some more progress

Translated some more text and tested it.
The quality of the translation does not represent the finished product.
For now, i just wanted to see how text would look like with various text boxes.

I'm always open for help in any way, write me a message on the romhacking forum if you want to help me make a fan translation of this game.




LINEBREAK Control Code removal test and SDF Pointer modification test

In this little test i removed a LINEBREAK Control code (FF FC) and modified the SDF pointer to match the new text pointer + text box length.
It works without a worry in the world:



It worked!

I managed to edit text and re-insert it into the game without breaking everything.
This is a huge success:


Growlanser 6 Cartographer Template (example for 00000005.flk)


#GAME NAME:        Growlanser 6

#BLOCK NAME:        Dialogue Block (POINTER_RELATIVE)
#TYPE:            NORMAL
#METHOD:        POINTER_RELATIVE
#POINTER ENDIAN:    LITTLE
#POINTER TABLE START:    $FF20 // table start, starting at 0
#POINTER TABLE STOP:    $10E94 // table end, at the last pointer ending position
#POINTER SIZE:        $04
#POINTER SPACE:        $00
#ATLAS PTRS:        Yes
#BASE POINTER:        $10EA0 // text block start
#TABLE:            Cartographer sjis.tbl // table file, can be downloaded here https://bitbucket.org/Risae/growlanser-6-translation/downloads/
#COMMENTS:        No // Yes = put all text into a // comment --- No = Don't do that
#END BLOCK

Growlanser 6 Atlas Script Template (example for 00000005.flk)

#VAR(dialogue, TABLE)
#ADDTBL("Atlas sjis.tbl", dialogue)
#ACTIVETBL(dialogue)

#VAR(PTR, CUSTOMPOINTER)
#CREATEPTR(PTR, "LINEAR", $10EA0, 32)

#VAR(PTRTBL, POINTERTABLE)
#PTRTBL(PTRTBL, $FF20, 4, PTR)

#JMP($10EA0)
#HDR($10EA0)


^^^
Only copy the text above and put it in front of the script file, it should look like this:

Growlanser 6 repacking the ISO


In this example i will show how to edit text in a file and repack it using quickBMS and Xpert.

Go to the quickbms folder and start "reimport.bat":


 The reimport is pretty straight forward:

1. Choose the growlanser.bms script
2. choose the original GL6_SCEN.DAT file
3. choose the 00000005.flk file (which should be in its own folder alone)

And then let it reimport the file:


Now you have to start Xpert again and

1. choose a sound
2. choose the plugin
3. and open the original ISO

IF you didnt change the original folder where you unpacked the ISO



all you have to do is to click on the 3rd button "3. Rebuild File":



And after that click the 4th button "4. Rebuild LBA":


Now there should be a new ISO with the name "NEW-" in front of it:


Run the new ISO in an emulator, for example PCSX2, and you will be able to see the modified text:


Growlanser 6 extracting pointers and text block/script

This is how you are able to use the tool called "Cartoprapher" to extract the pointer position and text associated with it.

Tools you need:

Cartographer
https://www.romhacking.net/utilities/647/

Shift JIS Table file:
https://www.romhacking.net/documents/179/

Once you unpacked Cartographer, you should create a new test folder and put the following files in it:
- Cartographer.exe
- one .FLK file (in this example i use 00000005.flk)
- the downloaded sjis.tbl
- a new text file called "GL6_commands.txt"
- a new bat file called "Cartographer.bat"

It should look like this:



First, you have to input the following text into "GL6_commands.txt"

https://growlanser6project.blogspot.com/2019/03/growlanser-6-cartographer-template.html

Depending on the file you want to dump, this needs to be changed:

#POINTER TABLE START: This is the start of the pointer table, pointing at the 1st pointer
#POINTER TABLE STOP:    this is the end of the pointer table, pointing at the last pointer, be careful not to point to a pointer that ends in 00 00 00 00, always point to the last pointer.
#BASE POINTER:        This is the position of the start of the text block
#TABLE:            This is the shift jis table file and it includes control points so the program knows when a new pointer has to start

It should look like this in the text file:



Next on the list is the sjis.tbl.
You only have to input additional commands at the very end:

Download the prepared table here: https://bitbucket.org/Risae/growlanser-6-english-translation/downloads/

END-FE and END-FF tells the program to use line breaks after it found the end of the text message.
It should look like this:




Last but not least is the "Cartographer.bat".
Open it in Notepad and copy in the following:
cartographer 00000005.flk GL6_commands.txt GL6_script_000 -s

pause

cartographer = tells the .bat file to start cartographer.exe with the commands
00000005.flk = the file it should "read"
GL6_commands.txt = the script it should execute
GL6_script_000 = this is the name of the textfile it will create the dump in. You can rename it however you want
-s = we use a script that only has 1 script block in it, read the Cartograph ReadMe for more information

It should look like this once you put it in:



Now, you can click on the "Cartographer.bat" to let the program create a dump of the script file, including the pointers:




 a new file called "GL6_script_000.txt" should have created itself, and in it are the dumped script files:



 A text editor like Notepad++ is able to display the Shift-JIS text.

Growlanser 6 unpacking the ISO

This is how to unpack the Growlanser 6 ISO.

Things you need:

The Growlanser 6 ISO

The Program "Xpert"
http://xpert2.blogspot.com/2006/11/xpert-2-main-tool-still-in-testing_21.html
Download:
members.ps3-tools.de/Chipwelt/PS2/Expert_Tool_2.0.rar

The Program "quickbms"
https://aluigi.altervista.org/quickbms.htm

the file "growlanser.bms"
https://aluigi.altervista.org/bms/growlanser.bms


Once you have everything, you can start Xpert and choose the following:

- change sound settings
- choose plugin
- open the iso



Press the first button "1. Extract LBA"






And then the 2nd "Extract File"



Xpert should have succesfully unpacked the ISO:



Inside we can find various files, inside the "GL6_SCEN_DAT" are the files that contain the text



In order to unpack the .DAT file, we need to use the program QuickBMS.
First, choose the quickBMS growlanser.bms script:



Then, choose the "GL6_SCEN.DAT":



And then choose a folder where you want to save the unpacked files, in this case i created a new folder inside the .DAT files:



And with this, we succefully unpacked all the files:





Growlanser 6 Pointer Table

Inside the "GL6_SCEN.DAT" are the text files located.
The files end with ".flk" and are build up like this:


STUFF
STUFF
POINTER TABLE
TEXT BLOCK
STUFF
STUFF
POINTER TABLE
TEXT BLOCK
STUFF
STUFF
GARBAGE

or

STUFF
STUFF
STUFF
POINTER TABLE
TEXT BLOCK
STUFF
STUFF
GARBAGE


As a short example i am describing the file "00000005.flk".
In this file there are 2 SDF headers with text pointers and text below it.
The 2nd SDF has almost the whole tutorial inside it:



There are a few codes in the first line of SDF that tell the file how big the pointer table and the pointer table + text block is:


SIZE OF THE POINTER TABLE + TEXT BLOCK



HEX REVERSED = HEX = DECIMAL
40 CB 00 00 = 00 00 CB 40 = 52032

This pointer tells the file how big the pointer table + text block is. 
From FF00 to the very end it is 52032 bytes:




This might have to be updated once a translation has been inserted and the text block has become bigger

SIZE OF THE POINTER TABLE





HEX REVERSED = HEX = DECIMAL
A0 0F 00 00 = 00 00 0F A0 = 4000

This pointer tells the file how big the pointer table is. 
From FF00 to the very end of the pointer table it is 4000 bytes:





Now, the actual pointer table will be displayed:



The pointers are build up in 4 bytes each.
The same logic applies here, the pointers tell the programm where the first byte is located counting from the start of  the text block: