{"id":273,"date":"2026-09-25T15:18:06","date_gmt":"2026-09-25T15:18:06","guid":{"rendered":"https:\/\/www.ys-link.net\/blog\/?p=273"},"modified":"2026-09-25T15:18:11","modified_gmt":"2026-09-25T15:18:11","slug":"a-conversation-with-kaisaan-ys-mod-developer","status":"publish","type":"post","link":"https:\/\/www.ys-link.net\/blog\/2026\/09\/25\/a-conversation-with-kaisaan-ys-mod-developer\/","title":{"rendered":"A Conversation with Kaisaan, Ys Mod Developer"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">I had the pleasure of chatting with Kaisaan, <a href=\"https:\/\/github.com\/Kaisaan\" target=\"_blank\" rel=\"noopener\" title=\"\">developer of the excellent English patches for Ys V: Lost Kefin AND Ys III: Wanderers for the PS2<\/a>, and getting answers to some questions I had about the ins and outs of the modding scene. Kaisaan was <em>extremely <\/em>generous with his time, and even provided some behind-the-scenes development images (which you can find scattered throughout the article with his commentary).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You can find Kaisaan on<a href=\"https:\/\/bsky.app\/profile\/kaisaan.bsky.social\" target=\"_blank\" rel=\"noopener\" title=\"\"> Bluesky<\/a> and <a href=\"https:\/\/github.com\/Kaisaan\" target=\"_blank\" rel=\"noopener\" title=\"Github\">Github<\/a>. And please consider supporting him at <a href=\"https:\/\/ko-fi.com\/kaisaan\" target=\"_blank\" rel=\"noopener\" title=\"\">Ko-Fi<\/a>!<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"677\" src=\"https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev0-1024x677.jpg\" alt=\"\" class=\"wp-image-277\" srcset=\"https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev0-1024x677.jpg 1024w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev0-300x198.jpg 300w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev0-768x507.jpg 768w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev0.jpg 1415w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">&#8220;First screenshot of the text working on Etokapa&#8217;s end (Etokapa was the first person that reached out to help me, it started with him working on helping with the manual transcription of Sam&#8217;s videos, once we got our own translators he helped with testing, proofreading, and most importantly did all the graphics editing!)&#8221;<br><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>YsLink: What first got you interested in Ys V for the PS2 and in fan translation work more generally?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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\u2019t until I found Sam Farron\u2019s \u201c<a href=\"https:\/\/www.youtube.com\/watch?v=LfZZPwIdhzg&amp;list=PLoD4gkRCJkUcgfpU5puBqYy5DX-RJK--b\">Let\u2019s Translate Ys V<\/a>\u201d YouTube series where I got the idea to use Sam\u2019s 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\u2019s 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\u2019s 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!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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\u2019t have to worry about \u201cgood level design,\u201d and instead focused on making sure that the translations worked and were of high quality. So the goal is to modify a game\u2019s code and data to support English text. Before Ys V PS2, I had completed a translation of <a href=\"https:\/\/github.com\/Kaisaan\/DDS-Translation\">Digital Devil Story: Megami Tensei for the MSX<\/a>, and also helped with a PC game called <a href=\"https:\/\/github.com\/Etokapa\/Erst-Kerf-English-Translation-Patch\">Erst Kerf<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"962\" height=\"1024\" src=\"https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev2-962x1024.jpg\" alt=\"\" class=\"wp-image-278\" srcset=\"https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev2-962x1024.jpg 962w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev2-282x300.jpg 282w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev2-768x818.jpg 768w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev2-1442x1536.jpg 1442w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev2.jpg 1509w\" sizes=\"auto, (max-width: 962px) 100vw, 962px\" \/><figcaption class=\"wp-element-caption\">&#8220;Graphic extraction was partially working but the colours never worked out. This was later because the PS2 does something called swizzling that shuffles the colours around. I think modern systems also use swizzling for data since it apparently loads faster.&#8221;<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>YsLink: What is your coding background? Are you self-taught, formally trained, or coming from a different field entirely?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>YsLink: For people who don&#8217;t have the same experience, what exactly does a \u201cfan translation\u201d involve beyond just translating text? What is your process and what tools do you use?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Very rarely is translating a game as easy as just \u201ctranslate the text\u201d (I wish it was!). The general process is to first find the game\u2019s text, graphics, and other important data in the game\u2019s files. Then I usually make a script to dump the game\u2019s 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\u2019s 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.&nbsp; For Lost Kefin, we had our translation work done on <a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1kcEely3uIDJAifqj9kn16Bky8mBBoed03CgAwd4B0W8\/edit?usp=sharing\">Google Sheets<\/a> so that different translators and editors could collaborate easily. We also made a <a href=\"https:\/\/github.com\/Kaisaan\/lostkefin\">GitHub page<\/a> 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.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There\u2019s 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\u2019t 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\u2019t change in size without causing issues, so a way to fit in the longer text for a line is to adjust the \u201cpointer\u201d 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\u2019s tools to automatically adjust a game\u2019s 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.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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 \u201cl i k e&nbsp; t h i s\u201d. 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.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In general, a big hurdle is just understanding the game\u2019s code, either to edit the code or to figure out how certain mechanics work. We don\u2019t have access to the game\u2019s 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 \u201cguesses\u201d what the code could have looked like), and emulators that come with debuggers that also let us look at the game\u2019s code as it\u2019s being run in real time. Both Ghidra and PCSX2\u2019s debugging tools were very useful in figuring out how to change a lot of the game\u2019s code and to fix the many issues that would happen while working on the game.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"764\" src=\"https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev1-1-1024x764.jpg\" alt=\"\" class=\"wp-image-279\" srcset=\"https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev1-1-1024x764.jpg 1024w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev1-1-300x224.jpg 300w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev1-1-768x573.jpg 768w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev1-1-1536x1147.jpg 1536w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev1-1-2048x1529.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">&#8220;One of the struggles with the English text early on was that textboxes were too large or too small. This was because the game expected the wider, Japanese letters and not the shorter English text. This a screenshot of when I found the function that calculated the textboxes so I could edit it.&#8221;<br><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>YsLink: Are there any unique quirks come with working on PS2 games as opposed to modern games?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">One thing that used to be common with systems from this era was custom file formats.\u00a0 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\u2019ve called \u201cNAXA\u201d 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\u00a0 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\u2019t know why the developers decided to use a different format, and I wonder if any other games use the same formats. <a href=\"https:\/\/github.com\/Kaisaan\/lostkefin\/blob\/main\/graphicsFormat.md#sprite-files\">I have shared my documentation on GitHub in the event that any other game uses a similar format<\/a>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"762\" src=\"https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/AAEE546B-614F-476E-A71C-7C0BE0533BE4-1024x762.jpg\" alt=\"\" class=\"wp-image-280\" srcset=\"https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/AAEE546B-614F-476E-A71C-7C0BE0533BE4-1024x762.jpg 1024w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/AAEE546B-614F-476E-A71C-7C0BE0533BE4-300x223.jpg 300w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/AAEE546B-614F-476E-A71C-7C0BE0533BE4-768x571.jpg 768w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/AAEE546B-614F-476E-A71C-7C0BE0533BE4-1536x1143.jpg 1536w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/AAEE546B-614F-476E-A71C-7C0BE0533BE4-2048x1524.jpg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">&#8220;I probably have a lot more of these kinda screenshots where the game is broken lol&#8221;<br><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>YsLink: Are there any technical hurdles in Ys V specifically (such as fonts, text limits, or menus) that require creative solutions?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As mentioned before, I went through many technical hurdles when working on this game. I wish there was anything \u201ccreative\u201d 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 \u201csolution\u201d was figuring out the game\u2019s custom graphics formats by comparing how the TIM2 graphics format works.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>YsLink: Looking back so far, what has surprised you most about working on this project?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">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 \u201codd version of an already odd game\u201d 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\u2019s 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!<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev4-768x1024.jpg\" alt=\"\" class=\"wp-image-281\" srcset=\"https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev4-768x1024.jpg 768w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev4-225x300.jpg 225w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev4-1152x1536.jpg 1152w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev4-1536x2048.jpg 1536w, https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev4-scaled.jpg 1920w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><figcaption class=\"wp-element-caption\">&#8220;[This] image is when I got a CRT, donated from a friend. It was really cool playing the game on real hardware and on a CRT! Very glad this game had a quick save feature too lol&#8221;<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>YsLink: What&#8217;s next?<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I have already finished my translation of the PS2 version of Ys III: Wanderers from Ys, and now I\u2019m 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\u2019ve 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.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":276,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[5],"tags":[6,13],"class_list":["post-273","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-community-spotlight","tag-community-spotlight","tag-ys"],"aioseo_notices":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.ys-link.net\/blog\/wp-content\/uploads\/2026\/09\/kefin_dev1-scaled.jpg","_links":{"self":[{"href":"https:\/\/www.ys-link.net\/blog\/wp-json\/wp\/v2\/posts\/273","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ys-link.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ys-link.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ys-link.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ys-link.net\/blog\/wp-json\/wp\/v2\/comments?post=273"}],"version-history":[{"count":5,"href":"https:\/\/www.ys-link.net\/blog\/wp-json\/wp\/v2\/posts\/273\/revisions"}],"predecessor-version":[{"id":284,"href":"https:\/\/www.ys-link.net\/blog\/wp-json\/wp\/v2\/posts\/273\/revisions\/284"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ys-link.net\/blog\/wp-json\/wp\/v2\/media\/276"}],"wp:attachment":[{"href":"https:\/\/www.ys-link.net\/blog\/wp-json\/wp\/v2\/media?parent=273"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ys-link.net\/blog\/wp-json\/wp\/v2\/categories?post=273"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ys-link.net\/blog\/wp-json\/wp\/v2\/tags?post=273"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}