I had the pleasure of chatting with Kaisaan, developer of the excellent English patches for Ys V: Lost Kefin AND Ys III: Wanderers for the PS2, and getting answers to some questions I had about the ins and outs of the modding scene. Kaisaan was extremely generous with his time, and even provided some behind-the-scenes development images (which you can find scattered throughout the article with his commentary).
I am very grateful to Kaisaan not just for his contributions to the Ys community, but also for being so generous in his answers to these questions.
You can find Kaisaan on Bluesky and Github. And please consider supporting him at Ko-Fi!

YsLink: What first got you interested in Ys V for the PS2 and in fan translation work more generally?
My friend, who introduced me to the series of Ys, is a really big fan of Ys 5. I later found out that Ys 5 had an untranslated remake on the PS2, with nobody really working on getting it translated. It wasn’t until I found Sam Farron’s “Let’s Translate Ys V” YouTube series where I got the idea to use Sam’s translation and insert it into the game itself. This motivated me to get this version of Ys 5 translated so that my friend and I can enjoy this game in English. Once I got English text insertion working, I got Sam’s permission to use his translation work. I posted my progress on GitHub and asked around in various translation Discord servers for assistance inserting the script into the game, and to my surprise, it attracted a good number of different people, including other programmers, graphics editors, testers, and even translators! So we decided to use an original translation instead of Sam’s work, as it would be more accurate (Sam was mostly speaking out the English translation while playing the game live, which is still very impressive!). This wonderful series of coincidences is what led to the game being fully translated into English!
As for what made me want to get into fan translation work, it honestly was because I was thinking of ideas for ROM hacks I could make. I tried making levels in Super Mario World a very long time ago, but I convinced myself that I lacked creativity at the time (which is ironic since all kinds of hacking/modding requires creativity). Getting a game into English was a more clear-cut goal for me to achieve, since I didn’t have to worry about “good level design,” and instead focused on making sure that the translations worked and were of high quality. So the goal is to modify a game’s code and data to support English text. Before Ys V PS2, I had completed a translation of Digital Devil Story: Megami Tensei for the MSX, and also helped with a PC game called Erst Kerf.

YsLink: What is your coding background? Are you self-taught, formally trained, or coming from a different field entirely?
I have been pursuing a degree in Computer Science, but I had to put my studies on hold due to financial issues. I also did some programming in High School, where I was introduced to Python. Python is the language that I have used the most for my translation programming, most of which was self-taught outside of my studies.
YsLink: For people who don’t have the same experience, what exactly does a “fan translation” involve beyond just translating text? What is your process and what tools do you use?
Very rarely is translating a game as easy as just “translate the text” (I wish it was!). The general process is to first find the game’s text, graphics, and other important data in the game’s files. Then I usually make a script to dump the game’s text onto a spreadsheet or text file, which can then be edited by a translator. Any graphics files that need to be translated are converted into PNG files so they can be easily edited. At this point, the game’s code is edited to allow for English text as needed. Once the translation is ready, I have scripts that automatically build a translated copy of the game with the data. For Lost Kefin, we had our translation work done on Google Sheets so that different translators and editors could collaborate easily. We also made a GitHub page for me and the other programmers to edit our code together. Then we had a bot on Discord to make builds of the game immediately for anyone to test. That is the general process of how my translations go, but this process can differ from the game.
There’s also many technical hurdles when it comes to game translation. One of the biggest constraints for Japanese-to-English translation is that English text is usually going to be longer for the same meaning in Japanese. This can mean that there isn’t enough space in the files to make it longer, or the text is too long to fit on the screen. Japanese games are designed with (usually) only Japanese in mind. For example, some files can’t change in size without causing issues, so a way to fit in the longer text for a line is to adjust the “pointer” for a line to an empty or used area of the file (Pointers are data in files that tell the code where in a file the data should be read from). This allows us to fit in the longer English text without having to worry about the file size changing and causing more issues. There’s tools to automatically adjust a game’s pointers if you know where they are (since they are a very common thing for translation hacking). For Lost Kefin, the pointers were a bit different, so we had custom Python scripts to automate reinserting the text and adjusting the pointers.
Some games require the font to be changed too. Lost Kefin already had support for English letters, but we decided to add in a Variable-Width-Font (VWF) because it allows each letter to have its own width, keeping the text from looking “l i k e t h i s”. It also allows for more text on screen and a more accurate translation if needed. The work with the VWF was done mostly by Everdred, who also helped with many of the other programming and technical stuff of the game.
In general, a big hurdle is just understanding the game’s code, either to edit the code or to figure out how certain mechanics work. We don’t have access to the game’s original source code, which would have useful information like variable names, function names, developer comments, and just what the code looked like. Thankfully, we still have tools like Ghidra that decompile the game (basically it “guesses” what the code could have looked like), and emulators that come with debuggers that also let us look at the game’s code as it’s being run in real time. Both Ghidra and PCSX2’s debugging tools were very useful in figuring out how to change a lot of the game’s code and to fix the many issues that would happen while working on the game.

YsLink: Are there any unique quirks come with working on PS2 games as opposed to modern games?
One thing that used to be common with systems from this era was custom file formats. For 2D graphics on the PS2, the TIM2 file format was common and recommended by Sony. Lost Kefin does not use TIM2 files for its graphics. The game uses a format that I’ve called “NAXA” files since that is the name that appears to identify each of these files. I spent a lot of time reverse-engineering two different graphics formats for Lost Kefin so that I can get the image data from these files, convert it to a PNG (a much more commonly used image format), get it edited, then back into the expected format. Thankfully, the formats were similar enough to TIM2 that I could figure out enough of the formats easily, and even more luckily, Ys III PS2 uses the same graphics formats! I still don’t know why the developers decided to use a different format, and I wonder if any other games use the same formats. I have shared my documentation on GitHub in the event that any other game uses a similar format.

YsLink: Are there any technical hurdles in Ys V specifically (such as fonts, text limits, or menus) that require creative solutions?
As mentioned before, I went through many technical hurdles when working on this game. I wish there was anything “creative” that was done, since we were able to get by most limits easily and issues were solved by technical analysis of the game. The most creative “solution” was figuring out the game’s custom graphics formats by comparing how the TIM2 graphics format works.
YsLink: Looking back so far, what has surprised you most about working on this project?
Honestly, the most surprising thing was the amount of support I have seen for this project. Ys V PS2 is seen very much as an “odd version of an already odd game” and is part of a more underrated JRPG series. I really thought that this was going to stay as a solo project (using Sam Farron’s script), but now I have a full team of talented folks to help with the translation! There have been so many people celebrating the announcement and release on the internet; I am very thankful for all the support!

YsLink: What’s next?
I have already finished my translation of the PS2 version of Ys III: Wanderers from Ys, and now I’m working on Ys IV: Mask of the Sun -a new theory- for the PS2! That game had different developers (primarily developed by Arc System Works!), so very little of the work done for Ys 5 carries over. I’ve also been looking into many other games too; I want to try my best to use my skills to get even more games available in English. I also want to try learning Japanese myself so that I can make full projects myself, or at least help with translations.

Follow YsLink on Bsky!