Wednesday, March 11, 2026

v0.2.0 has been released!

Dear Citizens of Monopolis,

i just published a new Version of our xDelta patch on GitHub, you can find it here: https://github.com/Risae/Growlanser-6-English-Translation/releases/tag/v0.2.0

With the never-ending improvements of LLMs i was able to match even more of the subtitled movies and also finally match the original "Format_Settings_Matrix_Data", which further improves xDelta patch sizes. The zipped xDelta patch is currently about 200MB in size, but i hope to decrease this even further in the future.

I also tried the new ChatGPT 5.4 and it was able to fix a few of the current Variable-Width-Font bugs that we have (before and after):

 

 

 

 

 

 

 

 

 
We still have more issues to work on, but this is already a big step forward. I hope you will enjoy the new version of the patch and if you find any issue, please let us know in a GitHub issue, on our Discord Server or in the comments.
 
And, as always you need an unmodified ISO of Growlanser 6 in order to apply the new patch.

Monday, June 2, 2025

FFmpeg woes and a good way to automate subtitling ingame movies

Dear Citizens of Monopolis,

it has been too long, hasn't it? All kinds of stuff is keeping me busy, with work and daily life throwing curve balls at me for quite a while. But i didn't forget, working bit by bit on the fan translation.

Today i want to tell you about my journey of trying to automate the translation of the ingame movies. With the recent breakthrough in LLMs i was able to make use of

  1. ps2str to demux the original PSS movie file into a .m2v (video) and .ads (audio) file
  2. FFmpeg to add subtitles to the .m2v file and re-encode it
  3. use ps2str again to mux both the subtitles .m2v and .ads into an PSS file

All of this accomplished in the command line.

At first i had issues with video files encoded using FFmpeg, because while playing the game the movies weren't properly "closing" itself - at the end it just "stuck" in a black screen, unless the player pressed a button. This issue only occurred when i used FFmpeg and not with Vegas Pro 22.

So, with the help of SuperGrok and ChatGPT i looked for solutions on why exactly FFmpeg is causing this issue. In the beginning i took a look at the video metadata of both the original and subtitled .m2v, to see if there are any differences - which were quite a few. Using the LLMs i tried to recreate the encoding settings of the original video, and at the writing of this blogpost i managed to built together this command:


ffmpeg.exe -nostdin -i "00000006_video_0.m2v"
                    -vf subtitles=00000006.MOVIE.srt
                    -c mpeg2video
                    -b:v 6342k
                    -minrate 5700k
                    -maxrate 15000k
                    -bufsize 1835008
                    -s 640x448
                    -r 30000/1001
                    -g 18
                    -bf 2
                    -sc_threshold 1G
                    -pix_fmt yuv420p
                    -profile:v main
                    -level:v main
                    -color_primaries smpte170m
                    -color_trc smpte170m
                    -colorspace smpte170m
                    -intra_matrix 16,17,17,18,18,18,19,19,19,19,20,20,20,20,20,21,21,21,21,21,21,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,24,24,24,25,24,24,24,25,26,26,26,26,25,27,27,27,27,27,28,28,28,28,30,30,30,31,31,33
                    -video_format ntsc
                    -f mpeg2video "00000006_subtitled.m2v"

Quite long, but i am able to match 95% of the original video metadata. The only thing "missing" (aside from overall bitrate being higher/lower) is the "Format_Settings_Matrix_Data", which i can't seem to match yet.

But, even with an almost identical videofile i still encountered the black screen issue in the game. So, searching even deeper for reasons on what is causing this i came across this forum post: https://forum.doom9.org/showthread.php?t=89434

And i took a closer look at both the original, ffmpeg and Vegas Pro generated files and noticed that both the original and Vegas Pro files have "00 00 01 B7" at the very end of the file:

For some unknown reason, FFmpeg is currently unable to write those bytes at the end of the videofile. This causes Growlanser 6 to not "end" the video and just display a black screen for all eternity.

A bug on the FFmpeg issue tracker already exists for this, and i added some more information on it: https://trac.ffmpeg.org/ticket/10830
Here's hoping that it will be fixed at some point in time. Right now i added a simple workaround that changes the last 4 bytes to exacly what i need:


($fs = [System.IO.File]::OpenWrite($file)).Seek(-4, [System.IO.SeekOrigin]::End) | Out-Null; $fs.Write(([byte[]]@(0x00,0x00,0x01,0xB7)), 0, 4); $fs.Close()

And with that + ps2str i am able to add subtitles in my automation workflow and produce an xDelta patch with it.

I also used SuperGrok to try to decompile a few ELF Functions, but that is a rather slow process.
Not sure how much time i will have this year, but i will try to progress as much as possible. As always, the whole sourcecode of the fan translation can be found on GitHub and help is always appreciated!

Monday, January 8, 2024

Happy (late) new year!

Dear Citizens of Monopolis,

it's been a while! Work and the "end" of Corona caused my time to reach negative values last year. But i still managed to accomplish some goals, such as

- Creating a working GitHub Actions workflow/pipeline to automatically create xDelta patches
- Adding pre-xDelta-Patch-creation checks to the pipeline, which automatically checks various Regular Expression patterns on the whole English script
- Cleaning up the whole repository
- Adding some more missing translations

Overall 2023 wasn't a great year for this translation, and i don't know how much time i will be able to invest in 2024. But even a little progress is better than nothing!

One of the great things last year was Ethanol creating a Python tool to dump and rebuild PS2 ISOs, usable through the command line. A version that i am using can be found here:

https://github.com/Risae/Growlanser-6-English-Translation/blob/main/build/03-isotool/isotool.py

This is super useful and might help other people to start reverse engineering PS2 games!

Thanks to the super programmer and creator of the emulator Duckstation, Growlanser 5 and 6 now have a custom made graphics fix

https://github.com/PCSX2/pcsx2/pull/9187

This fix automatically activates once you play any version of Growlanser 5 and 6. Now, As far as i know, the only thing broken in both games is upscaling. Here's hoping that in the future the PCSX2 emulator will also support this. The character models in Growlanser 5 and 6 have a lot of detail that is only visible in higher resolutions.

A lot time and effort has been invested by the PCSX2 community to improve the built-in Debugger, and i have been closely monitoring that (since it makes my life so much easier). The debugger now supports

- Subsequent searches/next scan: https://github.com/PCSX2/pcsx2/pull/10260
- Save addresses and import/export them: https://github.com/PCSX2/pcsx2/pull/10518
- And hopefully soon automatically search for .mdebug and .sndata: https://github.com/PCSX2/pcsx2/pull/10224

Recently 2 fan translations, which i have been following for some time, were finished:

- dotHack Link: https://dothacktranslate.wordpress.com/projects/hacklink-english-fan-translation/
- fate/Extra CCC: https://iwakuraproductions.wordpress.com/2023/12/08/fate-extra-ccc-english-patch-released/

Congratulations to both teams! I hope everybody will be able to enjoy those gems. And i still  hope that the teams will publish their tools - I would love to take a closer look at how fate/Extra CCC managed to handle the xboxhuge script of the game.

The Growlanser 1 translation, done by Poorchief and his team, also seems to be making progress. Here you can find a live-stream of cj iwakura playing the translation:

https://www.youtube.com/live/ZXx38OoNuYc?si=hzRj4CgH0Jz4xBNe

The spirit of fan translations has not died out, and i can't wait to see what the future holds.

Sunday, August 28, 2022

Repository moved over to GitHub and other news

Dear Citizens of Monopolis,

after finally having some breathing room and time to focus on our Growlanser 6 translation i decided to move our Bitbucket repository over to Github. A lot of features, which are available only on Github but not Bitbucket, are very useful and it was time to do the switch. Our new GitHub repository is now available under: https://github.com/Risae/Growlanser-6-English-Translation

A few changes and fixes to the translation have also been implemented in the last few weeks, a lot of those thanks to our Super MIPS Hacker Ethanol! It is still a lot of work to provide a fully functional translation of Growlanser 6, but the end of the tunnel is slowly getting closer. Occasionally we will provide a "snapshot" of the current state of the translation as an xDelta patch on the GitHub repository. If you happen to test this version and find any issues like

- Translation is wrong/typos
- Japanese text has not been translated
- Or just general issues that you experience

please open an issue on our GitHub repository!

Aside from that i have been working on improving the Growlanser 5 and 6 Toolkit. It is now possible to merge a japanese and english script of Growlanser 5 (and 6, probably). But it's not fully functional - in quite a few english GL5 scripts there are more entries present than the original Japanese version, so its not working for all of them. But i'm working on  finding a simple solution to that.

As always, thanks a lot for the support and encouragement from the Growlanser community. With the translation being fully open source everyone can look and check out our translation - and as such we are open to pull requests.

And, on another note related to Growlanser:

A vtuber seems to have stumbled across Growlanser, and the english translation of the video got more than 150.000 views!

Any advertisement is good advertisement, so here's hoping it will help ignite the flame of curiosity for a new generation of Growlanser fans.

Friday, December 31, 2021

Growlanser 5 & 6 Toolkit and happy new year!

Dear Citizens of Monopolis,

during the translation of Growlanser 6 i tried to gather as much information about the game as possible. Whether it be a simple manual or a game guide, as long as it can help our translators better understanding the World of Growlanser 5/6 then it will be useful.
Since Growlanser 5 was already translated to english, it is also important that we (the GL6 translators) keep consistency with various words that are used in both Growlanser 5 and 6. One example of this would be the character names from Growlanser 5 (since 6 is a direct sequel).
So, a few months ago i started to create "combined" Growlanser 5 Japanese + English script files.
Using those files we are able to quickly search for a japanese word and find its english original english translation.
But this was a lot of manual labor, and i'm not finished at all with the scripts. I definitely need to automate this process and, thanks to my new position at Monopolis Corp., i learned a little bit of Python programming.
So, using my newfound Python skills i started to work on a "Growlanser 5 / 6 Toolkit" and already made a little bit of progress:

https://github.com/Risae/Growlanser-5-6-Toolkit

I'm a complete novice when it comes to programming in general, so i doubt that my code is anything but good looking or efficient.
But i pretty much want to create a tool that is able to do all those things that i can do manually, with little to no manual input, and for anybody to use in the future. The program currently only works in windows (...at least i think it does...) and it includes the following 3rd party applications in order to work "out of the box":

- abcde
- Strawberry Perl Portable (for abcde)
- Python 3.10.1 embed
- quickBMS

Currently the Toolkit is able to

- Automatically convert "raw" Growlanser 5 and 6 Script files (.SCEN/.SCEC/.SDMY/.STXT) into actual script files that can be used by abcde's Atlas (including dumping options)
- Dump the Bytecode of Growlanser 6 Script files

Here are some of the things that i will try to implement in the future:

- Combine 2 dumped scripts into one script (combined GL5 JPN + ENG Script)
- Dump/Reinsertion of a games "GLX_XXXX.DAT" file
- Somehow transfer the character names and other text box information of the Bytecode directly into script file
- Hopefully be able to create a GUI in which you can work on script files, just like the Fate Extra CCC guys have it
- And other stuff that i will maybe find useful

Aside from that lots of stuff has been accomplished this year, with the most notable thing being the creation of a simple buildbot (+ the xDelta patch) and being able to subtitle Growlanser 5 and 6 ingame movies.
There is still a lot of work to do like fixing the VWF Code, translating & editing various scripts and images and adding subs to the movies. But, as far as i can tell, we made good progress.

A big Thank You to everybody that made the Growlanser 6 Translation possible - especially Mako, Ethanol and Haruka!

Enjoy the beginning of the new year, and hopefully one day we will see a remake of Growlanser!

Saturday, October 23, 2021

Buildbot now automatically creates xDelta patches

Dear citizens of Monopolis,

Over last few days i have been searching for ways to automate the Xpert2 ISO dumping and rebuilding process.
This was the only thing i couldn't automate using a CLI, since Xpert2 only supports a GUI.
I asked around a few Discord servers and it doesn't seem like there currently exists a tool that lets you use a command line to dump and rebuild a PS2 ISO.
So, yesterday i found this neat little tool:

https://github.com/npocmaka/batch.scripts/blob/master/hybrids/.net/c/mouse.bat

With this i was able to add mouse movement & clicks to my batch file (which does all of the compiling and stuff).
After a bit of testing everything seems to work flawlessly - After the files are compiled (using quickBMS and abcde) Xpert2 is automatically started and the script interacts with the GUI.
The Buildbot xDelta patch can be found here:

https://bitbucket.org/Risae/growlanser-6-english-translation/downloads/

And here's the updated Buildbot script for anybody interested:

https://pastebin.com/raw/YGbBsbzq

Wednesday, October 20, 2021

xDelta (work-in-progress) Patch now available

Dear citizens of Monopolis,

recently i was researching again on ways to more easily provide translation patches, instead of translated game files like we do right now.
I came across a Github project called "xdelta3-gui-2.0" by Moodkiller:

https://github.com/Moodkiller/xdelta3-gui-2.0

Using this neat little tool i was able to create a working xDelta patch, which supported the rebuild ISO from Xpert2.
The xDelta patch is (currently) only about 1.7 MB in size and that is pretty awesome.
And, it supports patching on Linux and Mac out of the box!
You can find a very recent xDelta patch in the downloads section of our repository:

https://bitbucket.org/Risae/growlanser-6-english-translation/downloads/

I sadly didn't find an easy to automate the dumping and rebuilding process of the ISO yet.
I will periodically update the xDelta patch with the latest repository files.
If anyone has experience with automating/testing GUI Software/Apps then kindly visit us on our Discord Server.

Steps on how to patch your Growlanser 6 ISO:

1. Download the xDelta Patch from our repository
2. Unzip/Unrar the downloaded file "Growlanser_6_English_xDelta_Patch_XX.XX.20XX.rar" in a new folder
3. Put your Growlanser 6 ISO into the same folder
4. Rename your Growlanser 6 ISO to the following (so the patching script is able to find the ISO): Growlanser 6 Precarious World.iso
5. Run (on Windows) "3.Apply Patch-Windows.bat"
6. There is a new ISO called "Growlanser VI Precarious World English Patched.ISO" which you can use to play the game in english.

Should you play the translated ISO and find any text issues or bugs then kindly let us know in our Discord server!

Wednesday, June 9, 2021

Discord server for the Growlanser series

Dear Citizens of Monopolis,

Orihara Saki created a Discord server to talk about everything related to Growlanser, you can join it through this link:

https://discord.gg/baTYefb8cf

(it also has cute Growlanser stickers!)

Monday, May 31, 2021

Growlanser 1 translation is not being actively worked on

Dear readers,

i wanted to update you on the current status of the Growlanser 1 translation.
As you know we (GL6 translation team) gathered quite a lot of information on how to start a GL1 translation.
But, we sadly do not have the manpower and time to managed GL6 and 1 at the same time.
On the Growlanser 1 bitbucket repository you can find quite a bit of info on how the game works and what tools you could use to start a translation:

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

The GL6 translation team is, still, focused solely on Growlanser 6.
For anybody that is interested in starting a GL1 translation:

Please don't keep your work to yourself.
It happens so often that people make progress and then stop midway, but without ever letting anybody know.
People really shouldn't need to start at 0 everytime a project stops and begins anew.
Sharing is caring.

Friday, April 30, 2021

New make-shift Buildbot and a little Translation Update

Dear Citizen of Monopolis,

it's been quite a while since i last posted an update, but behind the scenes progress is still happening at a steady pace.
The last few days i have been trying various ways to completely automate the building/compiling process that we use to upload translated game files to our repository.
At first i tried to use Bitbuckets integrated CI/CD features called "Pipelines". But because of the fact that most of the programs i'm using are for Windows (armips for example, too lazy to make it work under Linux) i decided to make things even more complicated for myself and grabbed one of those 12 months free "Cloud On-Demang VMs" - proudly sponsored by our Chinese Overlords.
It only has 1 vCPU / 1 GB vRAM and its running the god awful Server 2019 Core, but i somehow managed to actually create a simple Buildbot that is able to compile and upload the latest game files, packages into a zip, onto our repository:

https://bitbucket.org/Risae/growlanser-6-english-translation/downloads/

The script is fairly simple and pretty much does the following:

1. pull the up-to-date files from the repository using GitHub Desktop's "git.exe"
2. execute the build.bat which resides in the repositories "GL6 Build" folder
3. delete the old "BuildBot-Growlanser_6_English.7z" from the reposity using Bitbuckets API
4. zip up all the compiled files
5. upload the zip file to the repositories using Bitbuckets API
6. delete the zip file from the local machine

All of this takes about 10 minutes overall and runs every hour. I could change it to once every 30 minutes, but there is not enough going on in our repository to do that.
So far i gotta say its been working like a charm. And since its running Server 2019 Core its actually not that process hungry:



For anybody interested, heres the script that does all of the magic:

:::: Get the latest repository files
cd /d C:\Users\Administrator\Documents\GitHub\growlanser-6-english-translation\
C:\Users\Administrator\AppData\Local\GitHubDesktop\app-2.7.2\resources\app\git\cmd\git.exe pull

:::: Start the build.bat script
call "C:\Users\Administrator\Documents\GitHub\growlanser-6-english-translation\GL6 build\build.bat"

:::: delete old zip file
del "C:\BuildBot-Growlanser_6_English.7z"

:::: Zip up the Files
"C:\Program Files\7-Zip\7z.exe" a -t7z "C:\BuildBot-Growlanser_6_English".7z "C:\Users\Administrator\Documents\GitHub\growlanser-6-english-translation\GL6 build\GL6_FACE.DAT" "C:\Users\Administrator\Documents\GitHub\growlanser-6-english-translation\GL6 build\GL6_FILE.DAT" "C:\Users\Administrator\Documents\GitHub\growlanser-6-english-translation\GL6 build\GL6_SCEN.DAT" "C:\Users\Administrator\Documents\GitHub\growlanser-6-english-translation\GL6 build\SLPM_667.16"

:::: Delete compiled files
del "C:\Users\Administrator\Documents\GitHub\growlanser-6-english-translation\GL6 build\GL6_FACE.DAT"
del "C:\Users\Administrator\Documents\GitHub\growlanser-6-english-translation\GL6 build\GL6_FILE.DAT"
del "C:\Users\Administrator\Documents\GitHub\growlanser-6-english-translation\GL6 build\GL6_SCEN.DAT"
del "C:\Users\Administrator\Documents\GitHub\growlanser-6-english-translation\GL6 build\SLPM_667.16"

:::: delete last release from bitbucket
curl -X DELETE "https://USERNAME:PASSWORD@api.bitbucket.org/2.0/repositories/Risae/growlanser-6-english-translation/downloads/BuildBot-Growlanser_6_English.7z"

:::: change directory to C:
cd /d C:\

:::: Upload compiled files to Bitbucket Downloads
curl -X POST "https://USERNAME:PASSWORD@api.bitbucket.org/2.0/repositories/Risae/growlanser-6-english-translation/downloads" --form files=@"C:\BuildBot-Growlanser_6_English.7z"



Aside from the Buildbot, Haruka has been doing a tremendous amount of work on the actual translation.
If you've been following our commits on the repository, then you should have noticed that Haruka is almost done with the translation of the SCEN.DAT files.
Most of them received the status "[COMPLETED]" and only a few remain untranslated.
If you find issues ingame or notice things that have been translated incorrectly, then don't hesitate to let us know about it. You can always reach us in our Discord channel.

It will still take quite a while until we fully finish our fan translation of Growlanser 6, but heres hoping that this project will help new and old people get interested in Growlanser.

Sunday, November 15, 2020

Bytecode Adventures: Cartographers Wrath

Dear Monopolis employees,

thanks to our Super Hacker Ethanol we managed to figure out something new about the script files from both Growlanser 5 and 6 (and possibly 1).
At the very beginning of our translation project people might remember that i created a blog post which explained how the pointer table for script files is made:

https://growlanser6english.blogspot.com/2019/03/another-little-test.html

At that point in time, i only knew what the second SDF section was used for (mainly the game's script).
But, thanks to Ethanol, we now know the purpose of the first SDF section!
All those bytes that seem like they make no sense at all are something called "Bytecode".
The developers probably used some kind of proprietary scripting language to tell the game what kind of character should appear when X script line is being triggered.
And, just like the game script, the bytecode section has a pointer table on top of it.
The header (the place where the pointers start counting bytes) always starts at the first byte of the first pointer, which is always "DC 00 00 00" in a .SCEN file. 
Every pointer, just like in the second SDF, is 4 bytes long and little endian.
The 40th & 41th pointer are important, they indicate the start and the end of the bytecode that tells the game what character image, character expression and textbox should be drawn on the screen when X scriptline is triggered. Before and after that also lies more bytecode, but we didn't figure those out yet.
Heres a quick look at the pointer table:


There is a short (2 bytes) that tells the bytecode how many local actors exist in the script.
This is important, because in order to find the scriptline that the bytecode points to you need to add the local actor bytes to the code.
Heres a quick example of what i mean:
 
Inside our script we use abcde's Cartographer to dump and Atlas to reinsert the script of the game.
Each scriptline has a pointer assigned to it, which looks like this:
 
//POINTER #60 @ $10010 - STRING #60 @ $11BB6
 
Inside the bytecode the scriptline would not be 60 (0x3C), it would be 57 (0x39):
 
[SCRIPTLINE-0039+X] = Real scriptline location is +3 (both hexademical)
 
Once we go into the bytecode section we will find another pointertable, this time with 2 bytes/pointer.
The header is the same as before, starts at the very top of "DC 00 00 00".
Below the pointer table you will see that there is just a bunch of bytes, but this is the bytecode that controls the script.



Ethanol was able to figure out some of the codes that reside in there and create a program that takes the original + translated SCEN file and adds textbox names to each string.
This is super useful, because we can now automaticly add names to each string with the click of a button.
But i thought that we might be able to further utilize the bytecode to create an better script.
Since i have some experience with abcde's Cartographer already, i checked if it might supports these kinds of Bytecodes - Maybe even allow a simple "IF" function.
And after taking a look at abcde so called "multitable" files, i managed to create a simple IF logic that is usable for our bytecode:




You can group up different tables inside on big table file and assign conditions to them.
For example:
 
!42000018=<\n[42000018-Portrait Textbox ??? ]>,<@NPCID>:1,<@IMAGEID>:1,<@FACEID>:1,<@TEXTBOXID>:1,<@SCENNAMEID>:1,<@LINEID>:1
 
 <@NPCID>:1
 
  <@NPCID> = Name of the table file

1 = Amount of matches it needs to find before it moves to the next entry
 
And, after some trial and error, we are able to dump a lot of the bytecode and make it somewhat human readable!:


abcde is truly an awesome tool to work with.
We can now add things like the starting character image, character's face expressions and more to our dumped script.
This should help our translator tremendously in being able to follow the flow of the script and make an even more accurate translation.
Of course, there is still a lot of work to do here (actually combining the game script with the bytecode), but most of the unknown bytes that are important for the script have been figured out.
And, in the far future, we might be able to develope a program that is able to utilize the script + the bytecode and combine those information for an easily accessible translation tool (taking the Fate Extra CCC translation program as an example):



And for anybody interested, you are also able to break the characters and their textboxes:






Tuesday, October 27, 2020

Growlanser 1 Fan Translation is currently being worked on!

The last few weeks my team and i have been helping out HOPE_MAN on the technical aspects of a possible Growlanser 1 (PS1/PSP) fan translation.
We made quite a lot of progress and even received the work of a kind soul which already managed to implement 1 byte character, a new font and a working VWF!
So, to summarize what is possible right now:

PSP
- Dump and rebuild the game's .ISO using "UMDGen"
- Unpack some of the games archive (.DAT) files using "quickBMS" with custom file scripts
- Read the script files that have a custom encoding with WindHex32 (HEX Editor that supports custom table files)
- Extract, translate and reinsert the games script using abcde's "Atlas" and "Cartographer"


PS1
- Dump and rebuild the game's .BIN using "psximager"
- Unpack some of the games archive (.DAT) files using "quickBMS" with custom file scripts
- Read the script files that have a custom encoding with WindHex32 (Supports custom table files as a HEX Editor)
- Extract, translate and reinsert the games script using abcde's "Atlas" and "Cartographer"
- Rex, which kindly provided us with his files, was able to implement 1 Byte Characters and a working VWF in the PS1 version

All of the files and most of the documentation can be found here on the GL1 repository:
https://bitbucket.org/Risae/growlanser-1-english-translation/src/master/

If anybody is interested in how to patch the PS1 GL1 image, i made a quick guide here:
https://bitbucket.org/Risae/growlanser-1-english-translation/src/master/GL1%20PS1%20build/How%20to.txt

If anybody would like to help translate or hack Growlanser 1 come visit us at our Discord server:
https://discord.gg/59Nw2U2

Here are some notes on what we could figure out about Growlanser 1:

Both the PS1 and PSP version only support 2 byte characters and no ASCII support at all.
Compared to Growlanser 6 that means that you only have ugly full width characters, which makes it looks like this:

https://cdn.discordapp.com/attachments/761551400098070534/762591160660131870/1.PNG

Rex, who worked on a PS1 Growlanser 1 translation, managed to implement 1 byte characters and a working VWF.
This is what it looks like ingame:

https://cdn.discordapp.com/attachments/761551400098070534/768322996649197638/4.PNG

In the PS1 and PSP ELF there are textblocks which contains text like spell, weapon and character names.
In the PSP ELF, the pointer table is right below the text and it counts 2 bytes as 1.
It's almost the same in the PS1 version, but this time the pointer table is on top of the text block.

Space restrictions in the script files do not seem to be an issue, each script seems to have enough space for an english translation.
Most of the control codes have been figured out, a table file can be found here:

https://bitbucket.org/Risae/growlanser-1-english-translation/src/master/GL1/01-abcde%20scripts/UTF-8%20GL1%20Table.tbl

Rex's PS1 version also reduced most of the control codes from 2 Bytes to 1 Byte, for example FCFF=[NLINE] to FC=[NLINE].
A custom table file for Rex's version can be found here:

https://bitbucket.org/Risae/growlanser-1-english-translation/src/master/GL1/97-Rex's%20files/Rex%20UTF-8%20GL1%20Table.tbl

Rex's VWF sadly doesn't support text speed, it will display text instantly.
But here's hoping in the future that can be fixed somehow.

Friday, October 23, 2020

Game Patching, now actually user friendly-er Vol. 3

Dear Readers,
 
the last few days i took some time to try myself on automating some of the more tedious tasks of patching the game files.
And, with the combines power of Batch files and trial n error we are now able to one-click-patch patch all files in a matter of minutes!
I'm sure this is not a difficult task for other people, but since i'm pretty new to this here's how i accomplished it:




I put all of the programs (armips, quickbms, abcde and strawberry portable) and files that are needed to create translated .DAT files onto our repository.
One of the more difficult things was to create a PATH variable that automaticly takes the folder path above the script file.
But thanks to Stackoverflow and other websites there seems to be an easy way to accomplish that:

for %%i in ("%~dp0..") do set "GITHUBPATH=%%~fi"

Same goes for the automatic PATH for Strawberry Portable.

SET "PATH=%PATH%;%GITHUBPATH%\GL6 build\03-Strawberry Perl Portable\perl\site\bin"
SET "PATH=%PATH%;%GITHUBPATH%\GL6 build\03-Strawberry Perl Portable\perl\bin"
SET "PATH=%PATH%;%GITHUBPATH%\GL6 build\03-Strawberry Perl Portable\c\bin"


Having solved those issues, creating the batch was not that difficult.
The batch file pretty much just grabs the translated files, puts them into a folder together and does all the stuff that i explained in a few blog posts earlier.
For anybody who's interested, heres the batch file:

https://bitbucket.org/Risae/growlanser-6-english-translation/src/master/GL6%20build/build.bat

I commented on everything to make it more clear on what the batch file is currently doing.

For anybody interested: If you download the repository you can build your own translated .DAT and ELF now.
The repository includes everything you need in order for the script to work.
I apologize for the big size of the repository though, the game manuals for GL1, 5 and 6 kinda take up a lot of space.

Wednesday, September 9, 2020

GL6 Translation Discord server

Since all the cool kids nowadays use Discord servers, we decided to make one too: https://discord.gg/59Nw2U2

Growlanser 5 and 6 debug rooms have been found!

Dear readers,

Ethanol Pwned, our super MIPS hacker, managed to find a way to access the debug rooms for GL5 (JPN + ENG) and 6!




Edit: Ethanol Pwned made some cheats for PCSX2, so you can automaticly jump into the debug map selection upon starting the game:
 
 https://bitbucket.org/Risae/growlanser-6-english-translation/src/master/GL%205%20and%206%20debug%20and%20cheats/


Heres how you can access the debug map and menues:
 
GL5 JPN:

1. Set a breakpoint on 0x00200900
2. Select new game
3. change register a0 from 2 to 0



GL5 ENG:

1. Set a breakpoint on 0x0021CA70
2. Select new game
3. change register a0 from 2 to 0



GL6:

1. Set breakpoint at 0x00230938
2. Select "New Game"
3. The breakpoint will fire, then ctrl+g to v0-15C8 and change the 05 to a 00

Press "SELECT" to access the debug menu.
Disable the breakpoint after going to the debug map.


Thursday, August 6, 2020

Updated guide on how to patch the game using the GL6 repository files Part 5 (patching the ISO)

After doing all of this we have 3 modified game files:

- SLPM_667.16 which contains the VWF code and some translated text
- GL6_FILE.DAT which contains the translated menues, some translated text and the GL5 ENG font
- GL6_SCEN.DAT which contains the translated script

Now all that needs to be done is to build a new ISO using Xpert2:

1. Dump the ISO using Xpert2

2. switch out the original files inside the folder where the game files have been dumped

3. rebuild the ISO

And with that the game is patched:




I will occasionally upload the latest compiled version to the repository, one that is a few weeks old can be found here:

GL6_VWF_0.8.rar
https://bitbucket.org/Risae/growlanser-6-english-translation/downloads/

Updated guide on how to patch the game using the GL6 repository files Part 4 (Adding the VWF to the ELF and translate image files)

Combining the repository scripts with the game files is not the only thing that has to be done.
Inside GL6_FILE.DAT there are the following files that need to be modified:

- the .tm2 image files
- the GL5 font file
- some files that contain text

A full list of the files can be found here:

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

On the repository the translated .tm2 GL6_FILE.DAT are can be downloaded here:

GL6_FILE.DAT.rar
https://bitbucket.org/Risae/growlanser-6-english-translation/downloads/

1. Extract all of the files and put them in 1 folder like this:



2. use the script "quickbms reimport2 - FILE.bat" from the repository to quickly insert the modified files into the original GL6_FILE.DAT. The paths have to be modified again:


Now the VWF code needs to be added to the ELF.
The latest translated, non-VWF ELF can be downloaded here:

XX.XX.XXXX_NO_VWF_SLPM_667.16
https://bitbucket.org/Risae/growlanser-6-english-translation/downloads/

We are using "armips" to quickly add the VWF code to the ELF file.
armips can be downloaded here:

https://github.com/Kingcom/armips/releases

1. Download all of the .asm files from the repository and put them into the folder where you extracted armips:

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

2. put the ELF file into the folder and rename it to "SLPM_667.16". It should look like this:


3. create a .BAT file and put the following code into it:

armips.exe GL6.asm

pause


The batch file will now automaticly add the current VWF code to the ELF. With this, the font has been patched to the GL6_FILE.DAT and the VWF code has been patched to the ELF file.

Tuesday, August 4, 2020

Updated guide on how to patch the game using the GL6 repository files Part 3 (Patching the games script files)

Combining the repository files with the original game files:

1.1 abcde uses Perl, so i recommend using Strawberry Perl (for Windows) in order for abcde to work:

http://strawberryperl.com/releases.html


1.2 Add following paths to the PATH windows settings (replace <PATH> with the path to those files on your harddrive):

<PATH>\Strawberry Perl Portable\perl\site\bin
<PATH>\Strawberry Perl Portable\perl\bin
<PATH>\Strawberry Perl Portable\c\bin

https://www.architectryan.com/2018/03/17/add-to-the-path-on-windows-10/


1.3 Download abcde and extract it:

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


1.4 Copy all the abcde .BAT files (and also abcde.tbl) from the repository to the abcde folder:

https://bitbucket.org/Risae/growlanser-6-english-translation/src/master/GL%205%20and%206%20abcde%20scripts/


1.5 Now create a new folder somewhere where you will merge the repositor script with the games .SCEN/SCEC/STXT files.
I'm personally using it like this:



Inside the folder are the contents of the dumped GL6_SCEN.DAT file.


1.6 inside the abcde folder is a file called "abcde Atlas bulk import.bat".
Open it up and replace "PATH1" with the path of the original .SCEN files.
Replace "PATH2" with the path to the repository files.



1.7 Execute "abcde Atlas bulk import.bat" and it should automaticly insert all the repository files into the game files.


2.1 Download the latest version of quickBMS

https://aluigi.altervista.org/quickbms.htm


2.2 Copy all the files of the quickBMS repository folder into the quickBMS folder:

https://bitbucket.org/Risae/growlanser-6-english-translation/src/master/GL%205%20and%206%20quickBMS%20scripts/


2.3 Now the modified .SCEN/.SCEC/.STXT files need to be imported into the original .DAT file, "quickbms reimport2 - SCEN.bat" can be used to do that, but just as with the abcde scripts the path needs to be updated in order to work:



Updated guide on how to patch the game using the GL6 repository files Part 2 (Dumping the ISO)

I actually took a look at the Growlanser 1 PS1 and PSP game contents, to see what kind of issue other people might have had to translate the game and i came across the problem of file compression. As far as i can tell, both the PS1 and PSP version use some kind of compression algorithm to reduce the filesize of the games ISO.
Because the games (Growlanser 5 and 6) .DAT files do not use any kind of compression we were able to dump the scripts of the game rather easily.

Heres a quick overview on how to compile all of the repository scripts into the game files.

1. Dump the ISO using "Xpert2"
2. extract the contents of the .DAT files with "quickBMS" using the Growlanser script
3. use "abcde" to re-insert the modified script files into the games .SCEN/.SCEC/.STXT files
4. use "quickBMS" to reinsert the modified files into the games .DAT files
5. use "Xpert2" to create a new ISO with the modified files

After dumping the ISO using Xpert2 or some other program you will have the following (on both Growlanser 5 and 6):

SLPM_667.16 is the ELF of the game
SYSTEM.CNF some game config file
DUMMY.DAT dummy file containing dummy data
GL6_BTL.DAT no clue about that one
GL6_CHAR.DAT seems to store the character model files
GL6_FACE.DAT probably contains all of the games face image files
GL6_FILE.DAT contains all of the image files (for example, the games character menu) and some other stuff
GL6_MAP.DAT Seems to contain the map data, also has a file that has all of the different map information stored in it
GL6_MOV.DAT contains alls of the movies without sound
GL6_SCEN.DAT contains all of the games script files
GL6_SND.DAT contains the sound files
GL6_VOI.DAT contains all of the voice data


1. First you have to download Xpert2 and use it to dump the ISO file (a little bit out of date guide but its still pretty much the same):

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


2 Download quickBMS and extract the it in a folder, put the Growlanser quickBMS script into the same folder.
The quickBMS Growlanser 5/6 script can be found here:

https://bitbucket.org/Risae/growlanser-6-english-translation/src/master/GL%205%20and%206%20quickBMS%20scripts/


3. Use quickBMS to dump the contents of "GL6_SCEN.DAT":

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

All of the contents of SCEN.DAT will be extracted from the .DAT file.
Now you can pretty much do the following

- We have the repository folder that contains the abcde script files (/GL6_SCEN.DAT/)
- We have a folder that contain the extracted GL6_SCEN.DAT (game) files
- We have the original GL6_SCEN.DAT file

We use abcde to import the repository script files into the original .SCEN files.
And after that we use quickbms to import the modified .SCEN files to the original .DAT files.
(And after that you just have to use armips to import the variable width code into the ELF file)

Repository script (abcde) > original .SCEN/SCEC/STXT (quickBMS) > original GL6_SCEN.DAT (Xpert 2) > dump the iso and switch out the files, rebuild the ISO

Updated guide on how to patch the game using the GL6 repository files Part 1 (Overview)

Over the last year the way we compile our repository scripts changed a little bit, so heres an updated How-To guide on how to compile the repository scripts into the games .DAT files.
But first, a quick overview on the different tools we use for our project:


- PCSX2
https://pcsx2.net/
I personally use the PS2 emulator to test the game


- PCSX2 debugger
a useful debugger for checking the MIPS code that is being processed in the background while the game is running.


- PCSX2dis (ps2dis)
https://forums.pcsx2.net/Thread-PCSX2dis-v1-1-A-ps2dis-inspired-PCSX2-enabled-Game-Hacking-Tool-W-I-P-13-02-2015
Another useful tool:
"PCSX2dis is an ambitious new hacking tool based on old hackers' favourite ps2dis. Created for advanced hackers and beginner/intermediate hackers who wish to learn ASM hacking, this is an all-purpose tool fixed to a modded version of PCSX2, designed to make PS2 game hacking easier than ever, all in realtime!"
Afaik, only works with PCSX2 1.2.1.


- bitbucket
https://bitbucket.org/Risae/growlanser-6-english-translation/src/master/
We are using the repository tool "Bitbucket" to share and store our project.
It contains all the games script files and also files for various software that we are using.
We are using GitHub Desktop to sync our repository files to our local hard drive:

https://medium.com/@rvrajavijay/how-to-use-bitbucket-repository-in-the-github-desktop-fae2ef61135d

With this you can download the repository to your local computer and work on the files in there.
Any changes you make you can "commit" to the repository for all of the team to access.
The changes will be documented and everybody can see what changed.
A lot easier than working on the scripts files inside the bitbucket web view.


- abcde (Cartographer and Atlas)
https://www.romhacking.net/utilities/1392/
abcde is a tool to dump (Cartographer) and re-import (Atlas) the Growlanser 6 script file text.
I already dumped all of the script files that exist in Growlanser 6, so currently we only use its Atlas function to reinsert it into the games files.
The control codes for abcde are stored inside "/GL 5 and 6 abcde scripts/abcde.tbl" and so far i think i have all of the ones that are used inside the table file.


- quickBMS
https://aluigi.altervista.org/quickbms.htm
quickBMS is a tool to dump and reinsert game specific files.
For example, Growlanser 6 uses ".DAT" archives that stores the game files.
We are using quickBMS to dump all of the files that are inside the .DATs using a custom script which is saved in "/GL 5 and 6 quickBMS scripts/growlanser.bms"


- Xpert 2
http://xpert2.blogspot.com/
Xpert 2 is a tool to dump the contents of the games ISO and rebuild it.
Since the filesizes of the modified .DAT files are going to be bigger than the original, Xpert lets us create a new ISO with the bigger files.


- Apache2.0
https://www.psx-place.com/resources/apache.697/
Apache was another ISO tool to dump and hotswap files inside the games ISO.
Because of the fact that most of the game files are going to be bigger in size we sadly can't use it anymore.


- deltapatcher
Deltapatcher is a useful tools to create patched for the ISO, but this only works if the modified ISO is not bigger in size than the original.
Because of the new quickBMS script we don't have any script size limitation anymore, but this also means that we can't use deltapatcher because the filesize of the original ISO will increase.


- rainbow
https://github.com/marco-calautti/Rainbow
Rainbow is a tool to view the TIM2 (.tm2) image files


- Ghidra with the Emotion Engine processor
https://github.com/NationalSecurityAgency/ghidra
https://github.com/beardypig/ghidra-emotionengine
Ghidra lets us decompile the "ELF" file (SLPM_667.16).
The ELF file contains various text that only can be translated in there, but its almost all been translated.


- armips
https://github.com/Kingcom/armips
We are using armips to quickly modify the ELF file, mainly for the Variable Width Font code.


- TileShop
https://www.romhacking.net/forum/index.php?topic=30404.0
A tool to view the Growlanser 5/6 font files.
Uses XML files to tell the program how the font file is build up.


- wxMEdit
https://wxmedit.github.io/
A bit outdated Hex editor which supports Shift-JIS.