One year later

I’m aware it’s been a full year since my last post. I apologize for the long silence. As usual, real life and gaming studying used up a lot of the time. Also sorry for the unapproved comments, I didn’t pay attention to them for a while. Most of the progress was made on the projects covered by Absolute Zero, but the others were also not forgotten. Today I want to focus on Dragon Quest Monsters 1&2. I know that the length of the project is almost comical at this point, so I want to give some insight into what problems there were to solve and why it takes a long time, often resulting in extended stretches with little motivation to work on it.

Dragon Quest Monsters 1&2 is undoubtedly among the nastiest games I’ve worked on. It needed many major programming changes that all came with their own set of resulting issues. Some systems of the game were  just entirely unsuited to languages other than Japanese and needed a lot of manual work to get them working. Here I want to summarize a few of the things that needed to be done, some of the issues along the way, and what we still have left to do at this point.


The Japanese version used 5 bytes/characters for player and monster names. This has been extended to 6 letters by compressing every letter down to 6 bit, at the cost of the size of the input alphabet. The game originally stored location names as plain text in saves, in around 10 bytes. It copied them from the text of the specific map. No compressing method would allow the longer location names to fit in there, so now instead an index gets written to the saves and a new list of location names was created to be referenced by that. Key names in part 2 were also stored as plain text, in just a handful of bytes. These couldn’t be referenced by an index due to the vast number of possible variables, so instead all the variables are encoded in a way that allows dynamically recreating the key name on demand.


The Japanese version uses tile maps to display the background and text. The screen is divided into 10×10 pixel blocks and each block can get one value assigned, ie. the graphic of a single letter. As this obviously doesn’t work well at all with proportional text, the entire system has seen a major rewrite, now dynamically drawing text, storing it in VRAM, and freeing it when it’s no longer needed. This was necessary, but it also caused a severe number of bugs. Some of them resulted from flawed logic in the original game. I’ll explain it with an example of a bug that I recently fixed, which had troubled me for a very long time.


Here you can see the status menu. Note the list on the left, which is a list of your monsters, with another option to show an overview of all your monsters at the same time. Now, when you press O you can see the ancestors of the selected monster.


And then this happens. Note the same menu on the left, now in the background. What should show “All” actually shows “24” in this case. At first it looks fine, this only happens when you press any buttons. So what happened? After a lot of debugging, I figured it out. This is the sequence of events:

  • the player presses O, entering the ancestor menu
  • the game draws the new foreground menus, and at the same time creates a backup copy of the background menu
  • whenever the user presses a button, all menus are redrawn, including the background menu. At this point my new system frees the previously displayed text, allowing it to be overwritten by new text
  • after all menus have been redrawn, the final image is created. But instead of using the newly drawn version of the background menu, the game instead uses the backup copy. As the text it displayed has long been invalidated, the result is garbage

This is just one of many examples where the game works in, let’s say, a less than intuitive way. It’s a very time consuming process to identify and fix these issues.

Battle Text

This is the single most time consuming part of the game. When the game displays battle text, it doesn’t fetch any complete sentences. It doesn’t fetch any sentences with some placeholders either. It instead pieces the sentence together bit by bit, splitting it into the small parts mirroring sentence fragments of the Japanese grammar. Here’s a simple example to illustrate this:

<Var:10><Var:30>は <Var:20><Var:35>を <nl>ぱふぱふした!
<Var:10><Var:30> gave <Var:20><Var:35> a puff puff!

The Japanese text is split up into three parts, the first two of which are used by hundreds of strings:


Now there is a problem – the Japanese text just puts the names of the two monsters right next to each other, but in English we need to insert an extra “gave” inbetween them. To do this we can’t just change the string. Instead, we need to add another sentence fragment and adjust the battle script to piece the sentence together in the right way. This process needs to be done with a lot of strings. Some don’t need any changes, some can be solved by slight wording changes (ie. active instead of passive, or vice versa), while many others need to have their script adjusted. It’s a time consuming and error-prone process, and every single string the game can display needs to be checked and verified for this reason.

Additionally, support for pronouns was added. The monsters in your party use their respective gender, while enemies are universally referred to as “it”.

What’s left at this point

  • finish checking/fixing all battle text strings
  • replace Japanese graphics, ie. the title screen or the background graphic for the appraising results
  • fix remaining menu issues (most of them should be squashed by now)
  • text editing (mostly to avoid ugly text formatting, currently around 1/3 through the first game)
  • testing

A special thanks goes to Lord Oddeye, who joined the project after the Oriental Blue release. He continued testing just as thoroughly as before, and this time around also helped fix the issues. He brought the majority of the system text formatting up to shape and is now doing the same for the story text.

So much for today. I hope it was an interesting insight into the project, and I’ll try not to take another year for the next update.

KMT Source Materials

DDSTranslation again, and here is the batch of miscellaneous files I mentioned before that should contain all (or most) of the work that was done to create this translation.

[wpdm_file id=7]

These files are being provided as-is, and I claim no responsibility if they end up erasing or deleting your PC. But it should all be safe.

The archive consists of the 65816 assembler code that I wrote to change the game’s functions, the text editor that I wrote in Java that allows easy modification of the dialogue in the game, and assorted text files containing the Japanese script, translations and my own personal notes.

These are being provided for those who are curious about the extent of work that’s been done with the translation, and also to help those who may be interested in localizing the game in their own language.

Kyuuyaku Megami Tensei – Finally released

DDSTranslation here, with news about the Kyuuyaku translation that’s been in the works for almost 4 years now. It’s been a long time coming, and I deeply apologize to everyone that’s been waiting for this to be completed.

For those that just want to play, here’s the link to the patch file:

[wpdm_file id=6]

Update: Someone discovered a bug with the v1.0 release where having a partner or friend name with the max of 8 characters would cause the save and load game screens to lag and not display anything.

I’ve made a fix for it and updated the patch to v1.1. Sorry for any inconveniences.

For those interested in keeping the megaten.asm file up-to-date, all that was added was an extra “BEQ save_screen_human_name_found_01” to lines 7411 and 7572. If inserted correctly, the two places should have operations in the order “LDA, BEQ, CMP, BEQ”. Or basically, copy the “BEQ” line and paste it above the “CMP” line.

I hope that you have a fun time playing through this game in English, and would love to hear what you thought about it.

If you’re still interested in hearing me ramble, or want to know just what the heck happened, I guess I can summarize the last couple of years. It’ll be nice to finally get all this off my chest.

I first started working on KMT around the time I finished college, which would have been around Spring 2008. I’m no stranger to the fan translation community, and thought I could do something with my spare time that would be constructive. After doing some preliminary work to make sure I’d be able to finish what I started (ironic, considering what would be to come), I made my first post on to solicit help from Japanese translators. I got a wonderful reception from people surprised at the quality of the work, and it wasn’t too long before I finally got the help I needed.

The following 2 years, I was learning how to be a white collar worker in the real world. And unsurprisingly, that meant a lot less free time to work on the translation. I was coming to the realization that it’s a lot more appealing to play games in one’s free time than it is to work on them. I started falling behind in progress, and after spending a long time trying to solve a major logic problem with my text editor, I ended up giving up on the project. That was around the time where I put up my video that apparently has become somewhat of a parody, where I said “I’ll either finish this project or release whatever I have by the end of 2011”.

Just as I was no stranger to translations, I was similarly no stranger to just giving up on translations as well. But the thing was, this was the one that I thought I had in the bag. I had done things with this project that I have never done before, and this was supposed to be my ultimate work. It hurt so much to have to give up on it, and it nagged at the back of my head for the last 3 years. What kind of person am I that can’t even finish what he set out to do? What about all the work that the translators had put into it? I had let everyone down, and all the work had been for nothing.

At the end of January, I decided to leave my job for personal reasons and became unemployed again. As the job search went on, I was finding myself bored with the games I had been playing. I thought about the Kyuuyaku translation again, and wondered if I could really ever finish it. I had tried looking at the problem I was stuck on several times over the years, but could never get my head back into it. When I looked at it again in July 2014, it just suddenly clicked. I guess I had learned a lot about programming in the last 3 years that I could finally overcome that hurdle.

I made a post on at the end of July stating that I would be resuming the project, and have tried my best to be as open and engaging as possible. I thought it was the least I could do to make up for my broken promises. And it actually turned out to be the best experience I’ve ever had in this hobby. The rest is pretty much history, and might still be seen in the thread on where it all started.

I don’t have any plans for the future in regards to translations, though I wouldn’t mind going back to one of my other abandoned projects and finishing them up. And I’m not sure how appealing it’d be to receive help from someone like me who has a history of just disappearing on a whim. But I’m striving to turn over a new leaf. And if I’m able to help anyone else that needs it, I’ll try my best.

In the next post, I will be releasing all of the notes, files and source code that I’ve used to make this translation. It wouldn’t do me any good to hold onto them. And maybe, it might prove to be of some use to someone out there.

More exciting tools updates

Due to popular request, it’s time for more armips news! The changes this time around aren’t as big as last time, but they are still notable developments. It can now be used for PS2 games, and also on Unix platforms! Finally you aren’t restricted to just Windows anymore. Make sure to grab the latest revision on GitHub.

Speaking about PS2 games, some of you may know that I spent a lot of time on improving PPSSPP’s debugger last year, to help with a PSP project. Unfortunately, PSP wasn’t the only platform lacking a good debugger. The PS2 was especially poor off, the only PCSX2 version to have a debugger – and a pretty poor one at that – was several years old. Recent versions completely removed it. There was nothing left.

… until recently! I took it upon myself to write a completely new debugger for PCSX2, and a much better one than before. It has almost all the features PPSSPP had, including a builtin assembler and conditional breakpoints. So far it only works for the R5900, but that’s where most of the interesting stuff happens anyway. This will hopefully help future PS2 translation projects. You can get it by building PCSX2 or by downloading a prebuilt version.


As for project updates, there’s not a lot to say. I just finished my Bachelor Thesis, so time was rather scarce lately. One notable development, though, is that dds continued working on Kyuuyaku Megami Tensei 1 & 2. See this thread for updates, and he will comment on it on this blog later on too.