Translation Guides

Moloch

Dragon Slayer
Level 2
5%
Joined
Dec 1, 2024
Messages
107
Level up in
142 posts
Reaction score
137
Points
477
Location
Georgia
I would like to try translating a NES game but I don't know how to.
I was also looking everywhere and I could not find any guides for NES Japanese to English translation.
Do you know any? Could you share them?
Or, if you know how to do it, could you create the guide(s), explaining the process step-by-step and share it(them) here?

For those interested, I have found this for SNES.


Thanks.
 
Maybe this will be of some help.
Thanks for sharing first of all.
It's definitely a good page to understand, very quickly, what programs are available.

Does it help -me? Well, not really.
There is not much there that I haven't seen already. I actually wanted to find more information about the tables. I don't know any Japanese, but I was hoping to find a way around that and create tables, check the Japanese text, translate it with ChatGPT or Google Translate... So far all my attempts failed miserably. I have uploaded a few tables but i couldn't see in the ROM any (readable) text. :-)

EDIT: There is a section called "Generally Recommended Documents" with two guides. I am checking them now.
 
Last edited:
Yeah, I maybe can't help too much, but I'll try.
I think there are roughly a few steps/avenues you can take (depending on your skills), and several possible challenges. Sorry if I cover something you already know. This might be interesting for others too.

Some challenges to find the text:
---
Is the text compressed? If so, you'll need to reverse engineer the compression algo first to be able to find the text at all.

Is the text you want to change actually a fixed sprite? Text can either be getting rendered by code (then bytes will be representing text like the tables you have learned about, or text can just be a static picture that you'll have to edit. Usually this would be UI elements or intro gfx, and not a text box, but you never know :)

If the text is not compressed, you need to figure out what bytes in the hex are being fed into the display code as strings, and from there build a table (basically what byte/bytes correspond to what symbols - kana or whatever) and that will let you create something to dump out the text. The text probably won't be encoded in something you can see in a hex editor directly (ascii or shift-jis).

Some approaches to find the text:
---
1. You can use something like Ghidra (https://www.retroreversing.com/nes-ghidra) to reverse engineer the game. You need to figure out what mapper is being used first, but you'll need to know that anyways to put your text back in. Then, you'll have to learn to use Ghidra (and maybe a bit about the ASM for the nes, too - but you will probably need to learn a bit anyways to get the text back in, more on that later. Then if the Ghidra analysis goes well, you might get the locations of strings (and importantly) the

2. For Kana - find some early text or save state right before the text. Think about how the kana alphabet might be encoded in order, not the specific bytes, but like ka-ki-ku-ke-ko, na-ni-nu-ne-no. Then you can think about the order the characters in the string the would be in and use a relative searcher like (https://github.com/spencerwilson/opensearch) or another. Hmm, I'll try to give an example in English. Say the game displayed 'abcd' somewhere. Then I'd use the relative searcher to find 4 bytes that are all one apart. Obv this wouldn't be so good for Kanji, but not sure many nes games use those.

3. Think you might know where a string or pointer are? Try corrupting them to something else in the same range and see if you get a change. Like if I thought I'd found ABCD, and it was hex a0 a1 a2 a3, I'd change it to a0 a0 a0 a0, and hope to see AAAA.

4. Use a nes emulator with a debugger, and learn about (maybe dependent on your mapper) the memory architecture of the nes and how to use breakpoints. Then set up a breakpoint for when the nes writes your string to the 'screen', and you can look in memory or the instructions to work your way backwards to where the characters came from in the ROM. You'll also need to learn about 'offsets'. A thing might be at a certain address on the ROM, say 0x12e45, but in memory (when the code is running) it might be at 0xe3a67. This is where you need to learn about mappers, too.

Then, you need to put your English text/images back in, this is called inserting.
Challenges to inserting:
1. Does the game have any fonts for the languages you want to translate into? If not, you'll need to create some sprites to represent the characters you need and put them in places in the ROM you can fetch them from later.

2. Is there text compression? If so, you'll need to recreate the compression algorithm and compress your text with it before you put it back in. Or you can rewrite the code in assembly to change how it handles text - this needs some advanced skills, but people do it.

3. Is there room in the ROM for your text? If Ja-En, probably not. Even kana is a little more 'space efficient' than latin alphabet, and kanji is sometimes extremely so. Imagine there are two strings 'Glorp' and 'Pog' next to each other, and I want to translate them into 'Gosh I'd like a peanut butter sandwich.' and 'No, we don't have any'. I can't just put those texts in the same place their priors were, they are too big and you can't push things around in the ROM without breaking everything. Then you need to understand pointers - maybe I can stick my strings in some unused space (like making the ROM bigger and slapping them on the end) and change the pointer that 'points' to the previous strings so it points at my strings instead.
---
So, I realize this is a lot, possibly a lot more than you want to mess with depending on your background. I'll say three things. You can learn all of this stuff. It is super hard, and pretty much every game will present new challenges and you may have to give up on projects some times. Especially if you don't have low level (like knowing C, assembly, or the Nes architecure) skills, take your time and go slowly.

Check places like romhacking.net to see if anyone has done any work at all on the game. Even if there is no translation yet, someone might have done a lot of research/ tool crafting already, and there might be a big 'hell no' point that they found that you can overcome, or that you might want to avoid. Also, if there is a translation in another language, that can be a gold mine of help.

I also have other options for you, if you just want to play the game. You can machine translate from images pretty quickly/cheaply these days. A lot of people just point a phone at the screen and use Google translate.

Check out stuff like ztranslate (https://ztranslate.net/) too.

Sometimes there are also textual translaitons you can follow along with (and you can make a machine one for others to follow with not nearly as much technical demand) on gamefaqs or somewhere similar.

---

Hope this helps, at least to kickstart your learning. Translating is hard, but cool and rewarding too. Best of luck!
 
Yeah, I maybe can't help too much, but I'll try.
I think there are roughly a few steps/avenues you can take (depending on your skills), and several possible challenges. Sorry if I cover something you already know. This might be interesting for others too.

Some challenges to find the text:
---
Is the text compressed? If so, you'll need to reverse engineer the compression algo first to be able to find the text at all.

Is the text you want to change actually a fixed sprite? Text can either be getting rendered by code (then bytes will be representing text like the tables you have learned about, or text can just be a static picture that you'll have to edit. Usually this would be UI elements or intro gfx, and not a text box, but you never know :)

If the text is not compressed, you need to figure out what bytes in the hex are being fed into the display code as strings, and from there build a table (basically what byte/bytes correspond to what symbols - kana or whatever) and that will let you create something to dump out the text. The text probably won't be encoded in something you can see in a hex editor directly (ascii or shift-jis).

Some approaches to find the text:
---
1. You can use something like Ghidra (https://www.retroreversing.com/nes-ghidra) to reverse engineer the game. You need to figure out what mapper is being used first, but you'll need to know that anyways to put your text back in. Then, you'll have to learn to use Ghidra (and maybe a bit about the ASM for the nes, too - but you will probably need to learn a bit anyways to get the text back in, more on that later. Then if the Ghidra analysis goes well, you might get the locations of strings (and importantly) the

2. For Kana - find some early text or save state right before the text. Think about how the kana alphabet might be encoded in order, not the specific bytes, but like ka-ki-ku-ke-ko, na-ni-nu-ne-no. Then you can think about the order the characters in the string the would be in and use a relative searcher like (https://github.com/spencerwilson/opensearch) or another. Hmm, I'll try to give an example in English. Say the game displayed 'abcd' somewhere. Then I'd use the relative searcher to find 4 bytes that are all one apart. Obv this wouldn't be so good for Kanji, but not sure many nes games use those.

3. Think you might know where a string or pointer are? Try corrupting them to something else in the same range and see if you get a change. Like if I thought I'd found ABCD, and it was hex a0 a1 a2 a3, I'd change it to a0 a0 a0 a0, and hope to see AAAA.

4. Use a nes emulator with a debugger, and learn about (maybe dependent on your mapper) the memory architecture of the nes and how to use breakpoints. Then set up a breakpoint for when the nes writes your string to the 'screen', and you can look in memory or the instructions to work your way backwards to where the characters came from in the ROM. You'll also need to learn about 'offsets'. A thing might be at a certain address on the ROM, say 0x12e45, but in memory (when the code is running) it might be at 0xe3a67. This is where you need to learn about mappers, too.

Then, you need to put your English text/images back in, this is called inserting.
Challenges to inserting:
1. Does the game have any fonts for the languages you want to translate into? If not, you'll need to create some sprites to represent the characters you need and put them in places in the ROM you can fetch them from later.

2. Is there text compression? If so, you'll need to recreate the compression algorithm and compress your text with it before you put it back in. Or you can rewrite the code in assembly to change how it handles text - this needs some advanced skills, but people do it.

3. Is there room in the ROM for your text? If Ja-En, probably not. Even kana is a little more 'space efficient' than latin alphabet, and kanji is sometimes extremely so. Imagine there are two strings 'Glorp' and 'Pog' next to each other, and I want to translate them into 'Gosh I'd like a peanut butter sandwich.' and 'No, we don't have any'. I can't just put those texts in the same place their priors were, they are too big and you can't push things around in the ROM without breaking everything. Then you need to understand pointers - maybe I can stick my strings in some unused space (like making the ROM bigger and slapping them on the end) and change the pointer that 'points' to the previous strings so it points at my strings instead.
---
So, I realize this is a lot, possibly a lot more than you want to mess with depending on your background. I'll say three things. You can learn all of this stuff. It is super hard, and pretty much every game will present new challenges and you may have to give up on projects some times. Especially if you don't have low level (like knowing C, assembly, or the Nes architecure) skills, take your time and go slowly.

Check places like romhacking.net to see if anyone has done any work at all on the game. Even if there is no translation yet, someone might have done a lot of research/ tool crafting already, and there might be a big 'hell no' point that they found that you can overcome, or that you might want to avoid. Also, if there is a translation in another language, that can be a gold mine of help.

I also have other options for you, if you just want to play the game. You can machine translate from images pretty quickly/cheaply these days. A lot of people just point a phone at the screen and use Google translate.

Check out stuff like ztranslate (https://ztranslate.net/) too.

Sometimes there are also textual translaitons you can follow along with (and you can make a machine one for others to follow with not nearly as much technical demand) on gamefaqs or somewhere similar.

---

Hope this helps, at least to kickstart your learning. Translating is hard, but cool and rewarding too. Best of luck!
Wow, there's a lot there. It definitely helped, and it's a bit more clear to me. :-) Thanks for sharing.
I think I may have been trying to see text that is compressed and it must be uncompressed. This decompression process (or processes) sounds really hard.
I don't mind much repetitive and long tasks, but I am thinking that I might not have the skills for this.
 
Wow, there's a lot there. It definitely helped, and it's a bit more clear to me. :-) Thanks for sharing.
I think I may have been trying to see text that is compressed and it must be uncompressed. This decompression process (or processes) sounds really hard.
I don't mind much repetitive and long tasks, but I am thinking that I might not have the skills for this.
So, I've heard translators call a certain kind of work 'bit bashing', this is where text is uncompressed already, and you don't mess with pointers or anything - you just overwrite the text in place and shorten up your translations as needed. If you played some old professionally (but badly) localized snes games, it seems like they did that because stuff is abbreviated all to hell.

That's a good place to start out! If you look at later generations of game (ps1, dos, windows, nds) you can find games that have uncompressed text just by searching in the hex editor. If you go for Japanese/Korean, etc you'll need to use a hex editor that allows for different encodings - Imhex (https://imhex.werwolv.net/) is good and free.

As a double tip, go for an untranslated German, Spanish, French, etc game and the strings will be about long enough to fit a lot of stuff, and you will probably be able to see the text straight away in the hex editor without changing encodings.

Just skip compressed stuff and don't worry about pointers at first. Then, when you get tired of shortening the text, repointering is not too hard to learn and you only need to do it on longer texts, and you can do it just with the hex editor and some patience.

Then maybe you'll move on to writing some simple tools, and we've got ya hooked by that point :)
 
So, I've heard translators call a certain kind of work 'bit bashing', this is where text is uncompressed already, and you don't mess with pointers or anything - you just overwrite the text in place and shorten up your translations as needed. If you played some old professionally (but badly) localized snes games, it seems like they did that because stuff is abbreviated all to hell.

That's a good place to start out! If you look at later generations of game (ps1, dos, windows, nds) you can find games that have uncompressed text just by searching in the hex editor. If you go for Japanese/Korean, etc you'll need to use a hex editor that allows for different encodings - Imhex (https://imhex.werwolv.net/) is good and free.

As a double tip, go for an untranslated German, Spanish, French, etc game and the strings will be about long enough to fit a lot of stuff, and you will probably be able to see the text straight away in the hex editor without changing encodings.

Just skip compressed stuff and don't worry about pointers at first. Then, when you get tired of shortening the text, repointering is not too hard to learn and you only need to do it on longer texts, and you can do it just with the hex editor and some patience.

Then maybe you'll move on to writing some simple tools, and we've got ya hooked by that point :)
Thanks for the tips! ;)
 
Yeah, I maybe can't help too much, but I'll try.
I think there are roughly a few steps/avenues you can take (depending on your skills), and several possible challenges. Sorry if I cover something you already know. This might be interesting for others too.

Some challenges to find the text:
---
Is the text compressed? If so, you'll need to reverse engineer the compression algo first to be able to find the text at all.

Is the text you want to change actually a fixed sprite? Text can either be getting rendered by code (then bytes will be representing text like the tables you have learned about, or text can just be a static picture that you'll have to edit. Usually this would be UI elements or intro gfx, and not a text box, but you never know :)

If the text is not compressed, you need to figure out what bytes in the hex are being fed into the display code as strings, and from there build a table (basically what byte/bytes correspond to what symbols - kana or whatever) and that will let you create something to dump out the text. The text probably won't be encoded in something you can see in a hex editor directly (ascii or shift-jis).

Some approaches to find the text:
---
1. You can use something like Ghidra (https://www.retroreversing.com/nes-ghidra) to reverse engineer the game. You need to figure out what mapper is being used first, but you'll need to know that anyways to put your text back in. Then, you'll have to learn to use Ghidra (and maybe a bit about the ASM for the nes, too - but you will probably need to learn a bit anyways to get the text back in, more on that later. Then if the Ghidra analysis goes well, you might get the locations of strings (and importantly) the

2. For Kana - find some early text or save state right before the text. Think about how the kana alphabet might be encoded in order, not the specific bytes, but like ka-ki-ku-ke-ko, na-ni-nu-ne-no. Then you can think about the order the characters in the string the would be in and use a relative searcher like (https://github.com/spencerwilson/opensearch) or another. Hmm, I'll try to give an example in English. Say the game displayed 'abcd' somewhere. Then I'd use the relative searcher to find 4 bytes that are all one apart. Obv this wouldn't be so good for Kanji, but not sure many nes games use those.

3. Think you might know where a string or pointer are? Try corrupting them to something else in the same range and see if you get a change. Like if I thought I'd found ABCD, and it was hex a0 a1 a2 a3, I'd change it to a0 a0 a0 a0, and hope to see AAAA.

4. Use a nes emulator with a debugger, and learn about (maybe dependent on your mapper) the memory architecture of the nes and how to use breakpoints. Then set up a breakpoint for when the nes writes your string to the 'screen', and you can look in memory or the instructions to work your way backwards to where the characters came from in the ROM. You'll also need to learn about 'offsets'. A thing might be at a certain address on the ROM, say 0x12e45, but in memory (when the code is running) it might be at 0xe3a67. This is where you need to learn about mappers, too.

Then, you need to put your English text/images back in, this is called inserting.
Challenges to inserting:
1. Does the game have any fonts for the languages you want to translate into? If not, you'll need to create some sprites to represent the characters you need and put them in places in the ROM you can fetch them from later.

2. Is there text compression? If so, you'll need to recreate the compression algorithm and compress your text with it before you put it back in. Or you can rewrite the code in assembly to change how it handles text - this needs some advanced skills, but people do it.

3. Is there room in the ROM for your text? If Ja-En, probably not. Even kana is a little more 'space efficient' than latin alphabet, and kanji is sometimes extremely so. Imagine there are two strings 'Glorp' and 'Pog' next to each other, and I want to translate them into 'Gosh I'd like a peanut butter sandwich.' and 'No, we don't have any'. I can't just put those texts in the same place their priors were, they are too big and you can't push things around in the ROM without breaking everything. Then you need to understand pointers - maybe I can stick my strings in some unused space (like making the ROM bigger and slapping them on the end) and change the pointer that 'points' to the previous strings so it points at my strings instead.
---
So, I realize this is a lot, possibly a lot more than you want to mess with depending on your background. I'll say three things. You can learn all of this stuff. It is super hard, and pretty much every game will present new challenges and you may have to give up on projects some times. Especially if you don't have low level (like knowing C, assembly, or the Nes architecure) skills, take your time and go slowly.

Check places like romhacking.net to see if anyone has done any work at all on the game. Even if there is no translation yet, someone might have done a lot of research/ tool crafting already, and there might be a big 'hell no' point that they found that you can overcome, or that you might want to avoid. Also, if there is a translation in another language, that can be a gold mine of help.

I also have other options for you, if you just want to play the game. You can machine translate from images pretty quickly/cheaply these days. A lot of people just point a phone at the screen and use Google translate.

Check out stuff like ztranslate (https://ztranslate.net/) too.

Sometimes there are also textual translaitons you can follow along with (and you can make a machine one for others to follow with not nearly as much technical demand) on gamefaqs or somewhere similar.

---

Hope this helps, at least to kickstart your learning. Translating is hard, but cool and rewarding too. Best of luck!
Do you know a way to jump to specific scenes/parts of a nes game? If, for instance, I wish to edit the graphics at the end of a game (a change on the background, or something like that), and only on that specific part, how can I do it without playing the entire thing - considering that I will have to test it to see if the change was well done? Do you know any smart idea, or tool that can help with that?
 
Last edited:
So, not explicitly - like a ready-made tool. If you are comfortable using the debugger (and possibly reading a little ASM) you might be able to understand the 'level change' code such that you can inject a new value that'll let you 'level skip'. Then the closing credits might be the result of a 'level change' or might be their own code.

In ASM, you might be able to jmp (jump) straight into the code that runs the final credits with a quick hack. There are probably some pretty good techniques to find this code, like using a tile editor (I assume you are using one to do the gfx hack) and learning what memory addresses some of the ending tiles/sprites would be stored at, then looking for a pointer to load this stuff in the ROM. Then you can try hijacking some earlier instructions to jump there instead of loading the first level/etc.

You might also be able to find some cheat codes or gameshark codes to do something similar. Also, if you end up playing to the end, make sure to make a save state before the graphics are loaded and you can use that to test your hack.

Hopefully some of that helps. Don't be shy about asking if you have more questions.
 
So, not explicitly - like a ready-made tool. If you are comfortable using the debugger (and possibly reading a little ASM) you might be able to understand the 'level change' code such that you can inject a new value that'll let you 'level skip'. Then the closing credits might be the result of a 'level change' or might be their own code.

In ASM, you might be able to jmp (jump) straight into the code that runs the final credits with a quick hack. There are probably some pretty good techniques to find this code, like using a tile editor (I assume you are using one to do the gfx hack) and learning what memory addresses some of the ending tiles/sprites would be stored at, then looking for a pointer to load this stuff in the ROM. Then you can try hijacking some earlier instructions to jump there instead of loading the first level/etc.

You might also be able to find some cheat codes or gameshark codes to do something similar. Also, if you end up playing to the end, make sure to make a save state before the graphics are loaded and you can use that to test your hack.

Hopefully some of that helps. Don't be shy about asking if you have more questions.
Thank you. I think those are all good ideas, specially the last and easier ones. :) I will try the codes + save states. With those two, assuming the codes are available, I think I manage to test all the different parts of the game.
 

Users who are viewing this thread

Connect with us

Support this Site

RGT relies on you to stay afloat. Help covering the site costs and get some pretty Level 7 perks too.

Latest Threads

FF7 — Comprehensive ATB Enhancement

RoSoDude is back with another ATB improvement. I've been enjoying his FF9 version, and while...
Read more

When did you get your first console and was it?

I am trying to remember the date I got my Super Nintendo from wall anty that came with do key...
Read more

Favorite arranged cover?

This one is an epic cover, for an epic fight, for an epic game
Read more

Miyoo flip V2


looks nice i loved my advance SP clamshell is so cool.
Read more

I’m so lost! Isn’t NFL just for the U.S?! How does New England have a team????

Since when did the U.K. have a NFL?
Read more

Why is Banjo Kazooie considered better than the Spyro games?

3D collectathon platformers usually arent my favorite kind of games but Spyro is is big...
Read more

sonic games tier list

my-image (10).png

make your...
Read more

What’s your top 10 best and worst DS games?

Here’s mine (in no specific order):

Best:
1: GTA: Chinatown Wars
2: Ace Attorney Trilogy
3...
Read more

Online statistics

Members online
128
Guests online
219
Total visitors
347

Forum statistics

Threads
9,876
Messages
244,567
Members
780,930
Latest member
boimimbo

Advertisers

Back
Top