So You Want To Translate an RPG Maker 2000/2003 Game

Don't worry; I've got you covered.

This post goes into every single technical aspect I've ever dealt with in translating RPG Maker 200X games. Obviously my experience is in Japanese to English translations, and a lot of this won't really matter if you're translating from one of my English versions. So, skip steps if they don't look like they're relevant to what you're doing.

I've tried to make it as easy to understand as possible - and as part of that, I've officially released a highly useful program of my own creation with lots of helpful features.

If you just want to do a translation based on one of my English versions, consider using my program linked in Part 1, maybe look at Part 4 or 5, but mostly it's Part 7 that has useful info for you.


Part 1: Files

Early versions of RPG Maker were not set up for, among other things, simple changes. If you point it to a file, then change the name of that file, it's just going to say "Dude, I have no idea what you just did. Where'd that file go? I'm gonna show an error and close now." (But not if it's a music or sound file, because... because.)

This is a problem for a few reasons. But a particular problem is this: when you bring filenames with more than plain ASCII into the equation, RPG Maker - if not run in the proper locale to understand the characters in the filename - is going to get confused about what the filename even is, and fail to find it even if it does exist. (You see, another thing RM2K was not set up for is "other languages.") Such files might even get extracted with messed up names by users, and you may have trouble putting them in .zips in the first place.

To avoid all this, you ideally want to edit every filename into one comprised of standard ASCII characters. How would we normally do this? Manually, through sheer tedium, because RPG Maker does not like change.

So here's how you make change.

The RPG Maker 200X Translation Assistant
(Last updated January 18th, 2024)

This is a program I wrote, initially, to solve this exact problem. Read the Readme for detailed information on how to use it. The C# source is included too, because everyone needs to know the dark secrets of these file formats.

I've made many improvements to the program since the early versions when I first made this post. The most notable functions beyond filename replacement are:

- Extracting data to text files, which can help with comparing versions of a game. Did a game update and you want to update your translation? Extract scripts from both that strip out all the messages, and suddenly that becomes much easier.

- While the aforementioned scripts cannot be imported back into the game, there IS an export/import function which allows exactly that. StringScripts include only messages and other strings, and you can easily edit and re-import them, provided the order and number of the message commands don't change. This may be more convenient than the editor for some, and with use of the encoding options, can make translations into languages besides Japanese and English easier!

- Various checks that you can run on a game: verifying that there are no broken file references, searching for unused files that could be gotten rid of, checking for line overflow, etc.

- Save file extraction and modification. The former is maybe not that useful (though it does show the full call stack and line positions of active events), but it's cool. Modification lets you do stuff like level up party members, add items, etc.

- A translation consistency checker - point it to the original project and the translated one, and it'll match up original lines with their translations, then point out if other instances of the same line don't have the same translation. This can really help for games that repeat messages a lot.

- A translation completeness checker, which tells you what messages have not been changed when comparing the original project to the translated project. Great for finding what you haven't translated!

Part 2: RTP Woes

In the process of working with my handy-dandy program to catch every single file reference, you'll probably notice missing translations popping up for files that are nowhere to be found in any of the folders. That's because they're files from the RTP. And the RTP is also messy business, so frankly, it's best to remove the requirement for it.

Despite what I believed for entirely too long (hence my RTPFaker nonsense, if anyone was around for that), it's easy to make the game skip the check for whether the RTP is installed. Simply open up RPG_RT.ini and add the line "FullPackageFlag=1". Wow. Geez.

Of course, you'll actually have to put those RTP files into the data folders some way or another. You can include the bare minimum of files which were actually used (which can be gleaned from a missing files check), or you can throw all the files in wholesale. As long as you make sure everything used gets converted to an ASCII-only filename, either way will work. Checking mode's file existence check should help in ensuring nothing was missed.

Part 3: Naming Screens Are Fine, I Guess

With the advent of the official English versions of RPG Maker 2000 and 2003, things have thankfully changed here. The new RPG_RT.exes in these versions now have perfectly good English naming screens, so use these and worry no more about having to make accomodations because you're forced to use a 2003 EXE for a 2000 game. (Though if you're not translating to English... it's either EasyRPG or hoping there's a hacked EXE for naming screens in your language, I think.)

I'll share some wisdom just in case, though: If you use an RM2K3 RPT_RT.exe on a game in RM2K format, there will be three main issues. One: because of changes to stats (primarily,the level cap being raised to 99), hero stats will get messed up, usually resulting in a max HP/MP of 1. Two: the menu will only have a "Quit Game" option, because it won't find any data about menu options, something RM2K3 lets you customize. You can open the project in RM2K3 and manually fix these, but the extra data will be lost if you make any changes to the database in RM2K.

Three, of course, is that the default battle systems are very different, so switching versions is a no-go if the game actually uses the battle system.

Part 4: Icons, Symbols, and Splashes

This is about editing RPG_RT.exe, but in a simple way that doesn't involve any hex editing. There may be other programs to do this with, but I use ResHacker, so I'll explain how to do it with that.

RPG_RT.exe contains some resources. There are three of particular note: the program icon, the Enterbrain splash screen, and the EXFONT file.

The icon is self-explanatory: it's the icon which the program appears as that also appears in the corner of the window. Go to Icon Group -> MAINICON -> 1041, then right-click and Replace with whatever icon you want.

The Enterbrain splash screen is in XYZ -> LOGO1 -> 0. It's stored in RPG Maker's XYZ picture format, which you can convert any 320x240 image to by importing it into the RPG Maker editor as an XYZ. Then right-click and Replace.

Lastly, BITMAP -> EXFONT -> 0. This is the table of 12x12 symbols used when you type "$A" or "$g" or whatever. The top two rows are the symbols for $A to $Z, and the bottom two are $a to $z. You can make them whatever you want! Helpful when a game uses symbols outside of ASCII range which you want to keep.

Also, if you edit the EXFONT to use custom symbols, I recommend you also include an external copy of the EXFONT.bmp file in the data folder. Newer versions of EasyRPG Player should be able to extract it from RPG_RT.exe, but if not, it's also able to detect and use external files called EXFONT.bmp. Provide it to ensure EasyRPG users don't get the default symbols instead.

Part 5: Fonts and Hard-Coded Strings

(NOTE: All of this is generally only relevant for old Japanese RPG_RT.exes. In the official English versions, the fonts should already be fixed. And as of English RM2K 1.61, the Vocabulary tab lets you customize battle messages in their entirety, using %S (subject), %O (object), %V (value), and %U (unit name) to insert that data in any order.)

For these, we're going to have to dig deeper into RPG_RT.exe. I'm going to assume you have basic knowledge of how to use a hex editor to make these changes - if you don't, go ahead and copy an EXE where I already did this stuff, I suppose. Or, as mentioned above, the official English versions should have you covered.

When you start the Japanese RPG_RT.exe in a non-Japanese locale, assuming it doesn't crash right away from missing files, you'll notice the font is off. This is because the system font reference itself is in Japanese, so it fails to find it and falls back to... a not particularly good default.

It's a relatively simple thing to fix the font, and in fact, we can make the font anything we want it to be. Well... not really, but sorta.

Open RPG_RT.exe in a hex editor. The string for the system font is at offset 0x6c020 for RPG Maker 2000, or 0x87890 for 2003. So, go there. In an unmodified EXE, you should see:

82 6c 82 72 20 83 53 83 56 83 62 83 4e

This is "MSゴシック" (MS Gothic) in Shift-JIS encoding. To point it toward the English name of that font, you can change it to "MS Gothic," which in bytes is...

4d 53 20 47 6f 74 68 69 63 00 00 00 00

(Those last four 00s aren't part of the new string, but you should put them there to overwrite the original one.)

Just doing this will work (since the string is shorter than the original), but technically, you should also change the length byte just before it (0x6c01c in RPG Maker 2000, 0x8788c in 2003). Originally it should be 0d (since "MSゴシック" is 13 bytes) - change it to 09 (since "MS Gothic" is 9 bytes).

Now, what if you want a different font? First of all, remember that you'll probably want to pick one which players are nigh-guaranteed to have on their computer. Second of all, don't get your hopes up that it'll look good at all - the engine's not really designed to use any other fonts.

That said, the process is the same as above, only you type some other font name instead of MS Gothic and change the length byte accordingly. Unless you're way better at this EXE-hacking business than me (which isn't a terribly high bar), you can only fit up to 16 bytes.

While we're in the EXE, what else should be changed? There are a number of hard-coded strings for things in the menus and battle messages, and many of the defaults contain Japanese that won't even show up properly if you're not running in Japanese locale.

Here's the list of all the ones I've aware of (Japanese RM2K offsets only, sorry), and what I personally change them to. Like the system font, all of these are preceded by length bytes which you should change appropriately.

0x74e8c: Item count on sell screen. (Argument is item count.)
: %2d (length 05)

0x750f8: Cross symbol for "how much" count in shop.
x (length 01)

0x7a808: Separator for item use, between character name and item name.
,[space] (length 02; really can't do much here)

0x7aea8: Party member hurting enemy. (Arguments are enemy name, damage, string from Vocabulary.)
%s took %d%s (length 0c)

0x7aebc: Enemy hurting party member. (Arguments are member name, damage, string from Vocabulary.)
%s took %d%s (length 0c)

0x7aff4: Recovery. (Arguments are character name, stat, amount, string from Vocabulary.)
%s's %s up %d! (length 0d; Vocabulary string not used)

0x7b1e4: Stat decreased. (Arguments are character name, stat, amount, string from Vocabulary.)
%s's %s down %d! (length 10; Vocabulary string not used)

0x7b440: Stat increased. (Arguments are character name, stat, amount, string from Vocabulary.)
%s's %s up %d! (length 0e; Vocabulary string not used)

0x7b660: Stat absorbed from enemy. (Arguments are character name, stat, amount, string from Vocabulary.)
%s lost %s %d! (length 0e; Vocabulary string not used)

0x7b678: Stat taken by enemy. (Arguments are character name, stat, amount, string from Vocabulary.)
%s lost %s %d! (length 0e; Vocabulary string not used)

0x7d168: Right arrow for equipment screen comparison.
$t [length 02; by default, $t is a right arrow symbol]

0x7d5dc: Colon for item count on equip screen. (Argument is item count.)
: %2d (length 05)

0x882d0: Level up message. (Arguments are member name, "Level" string, level, string from Vocabulary.)
%s to %s %d! (length 0c; Vocabulary string not used)

0x9a78c: Colon for item count on item screen. (Argument is item count.)
: %2d (length 05)

Part 6: Windowed and Fullscreen

Not so much related to translation or compatibility, but it's a thing I do for convenience, so I'll include it.

By default, RPG_RT.exe will open in fullscreen. (Well, the official English RM2K3 defaults to windowed.) If you pass it the parameters "NormalPlay" "ShowTitle" "Window", it'll open windowed. (Just "Window" doesn't work; you need to put something for the first two.)

This can be accomplished using a shortcut, but if you want a program to do it... Well, look, you're free to use StartWindowed and StartFullscreen for your own purposes. And here's the Main() method for the former in C#, too:

if (File.Exists("Data/RPG_RT.exe"))
ProcessStartInfo startInfo = new ProcessStartInfo();
startInfo.UseShellExecute = false;
startInfo.FileName = "Data/RPG_RT.exe";
startInfo.Arguments = "\"NormalPlay\" \"ShowTitle\" \"Window\"";

Part 7: Translate!

Oh, right, you said you wanted to translate a game. All of the above was technical stuff to make it run in any locale and all that nice stuff, so the rest is basically just pure translating.

Personally, I find the best way to translate the text is to just go in there with the actual RPG Maker editor. It gives you the most context for what you're translating, even if you do have to sort of scour each map for text.

To edit an RM2K game, get the RPG Maker 2000 editor. That's rpg2000.exe, not the RTP or anything else. Or rpg2003.exe, if the game is made in RM2K3. (You can get official English versions of both now!) 2000 and 2003 are similar and will sort of work with each other (2000 obviously won't support 2003 additions, and 2003 can cause some "bugs" in 2000 games), but RPG Maker XP and newer use completely different formats from RM2K, so they are not comptabile with RM2K games.

You should have a default Project folder, which is where the editor will look for projects when you choose Open Project. Copy the whole game folder in there (in the case of my RM2K downloads, it's the Data folder), and it should show up in the project list. If not, make sure you don't have an extra layer of folders; you should have a Project folder, which contains a [Game Name] folder, which contains all the map files, a bunch of resource subfolders like CharSet and Picture and Sound, and RPG_RT.exe.

Once you have the game open for editing, you can probably figure out most of the rest from there. Generally, you want to be in Event Editing Mode at all times so you can open up the events on each map, and there's also usually stuff to translate in the Database tabs. The Material Editor can import and export graphics, notably allowing you to export XYZ graphics as BMPs or PNGs for editing.

If you don't want to delve into the editor if you can help it, my program has "export/import" functions that put all the strings into nice Unicode scripts you can edit and then import. DreaMaker is an older alternative, but it's much less convenient (you have to convert maps to DreaMaker format before extracting scripts, then go back again) and also doesn't cover everything.

If you're translating into a non-English language, you will probably have to use a different encoding than the default - consult the Readme for my program for how to do that. Players will have to run it in the proper locale, however; sadly, Unicode just won't work in RPG_RT. EasyRPG Player is considerably better at handling whatever encoding you want, so if you can't get it working for the original RPG Maker runtime, there's always the option of having players use that.

And, well, I guess that's it.

Now you have my power.

Posted April 24th, 2014

Post List