Original Post

A while ago I spent some time on patching Virtual Fishing. The project came to a halt as I needed a break. However, I’m planning to get back to it. So I figured I should share what I have done so far.

The goal of the project obviously is to replace the Japanese text with an English translation. The main problem is that the 16×16 Japanese characters use allot of space on the screen and can not simply be swapped to lain letters. So the plan is to add an 8×16 Latin alphabet, change the text drawing method to support the smaller letters and then patch in the translated text.

Some of that I already did. Well, the first thing I did is reverse engineer how the game draws the text and where the Japanese alphabet is stored. The attached image has been exported from the rom. As you can see there are already Latin letters in the rom but nothing I want to use.

I then patched in a Latin alphabet by overwriting some of the Japanese letters. I also changed the method that draws the text to use 8×16 characters. The resulting rom is of course messed up as the sentences themselves are still Japanese.

I located some sentences in the rom for testing purposes. Unfortunately, there are no big pointer arrays that point towards these sentences. That makes it a bit more difficult for me to dynamically replace them.

The next step will be to clean up what I did so far and make it more generic. After that I will start replacing sentences.

Right now I’m using some translations provided by awesome person Benjamin Stevens. I know Wyndcrosser was also working on translation, so there should be plenty of sources when it actually comes to translating.

65 Replies

Benjamin Stevens wrote:

thunderstruck wrote:
Figured out what the problem was. Just need a couple of changes in the original code. I can now replace many sentences in the rom without problems. The attached screenshot shows one screen I use for testing. Just ignore the messed up Japanese.

I replaced those sentences by getting their addresses from the debugger. Next step will be to automatically search the text in the rom.

Very nice! You’ve certainly got some great patching work going on there.

I wouldn’t be able to do it without your translation.

I don’t want to create a wrong impression though. There are still plenty of things that need to be done. But the first steps are done.

Turned out searching for strings in the rom isn’t that simple because of how the game switches alphabets.

However, I just went ahead and replaced all of the strings in the first menus (everything you can see before you start the game) by using the addresses I got from the debugger. That was quite efficient already so I might just do it that way. I will still add something to the UI to speed things up a bit.

The menu that allows you to enter your name is still broken though. I found the code that writes the letters there. So the next step is to trick it to load something else.

Changing the letters in the name menu was pretty easy. Fount the letters in the rom and let them point to my latin alphabet.

Here is a video showing the progress so far:

https://youtu.be/zKpgE3Jq6HM

That looks spectacular and I am excited to eventually get a good play through of it. 🙂

Wow, I know it’s taking some time. But, it seems to be going faster then I expected.

-Eric

This does seem to be progressing quite quickly. I’m very impressed with even just the translated title menu

speedyink wrote:
This does seem to be progressing quite quickly.

Yeah, stuff was rather easy till now. I encountered a problem yesterday though. As soon you start the actual game it overwrites part of the alphabet with game graphics. Unfortunately the part where I store my latin letters. So I guess the smarter way is to write the latin alphabet into a free area in the charmem. Let’s just hope there is one.

Might look into this later today.

thunderstruck wrote:

speedyink wrote:
This does seem to be progressing quite quickly.

Yeah, stuff was rather easy till now. I encountered a problem yesterday though. As soon you start the actual game it overwrites part of the alphabet with game graphics. Unfortunately the part where I store my latin letters. So I guess the smarter way is to write the latin alphabet into a free area in the charmem. Let’s just hope there is one.

Might look into this later today.

So this actually turned out to be a problem. There is some space at the end of the charmem left, it is not much though. So I wrote some code that copies my alphabet into the free area. Now I need to rewrite my altered code to use that alphabet. Maybe tomorrow…

That’s awesome. Way better than me, I just edited the graphics in a tile editor program. lol.

Wyndcrosser wrote:
That’s awesome. Way better than me, I just edited the graphics in a tile editor program. lol.

What tile editor program did you use?

Hopefully, I managed to solve the problems I explained earlier. There is no charmem that is not used at some point. So I decided to write my alphabet into the area where the original game stores the Japanese letters most of the time. The problem is that there is not much space. My previous attempt would draw 16×8 letters but still store them as 16×16. That way I didn’t need to change the drawing code allot. However, I had to do that now. Basically, I rewrote how the game calculates the offset for the alphabet.

It works for now which means I am back to where I was when I made the video. Of course the game overwrites the alphabet with it’s own as soon as you start the actual game. So the next step will be to stop the game from doing that.

Good news. I found the code that overwrites my chars. It was kind of strange though as the method doesn’t write into the usual charmem addresses but directly into the mirrored area. So it would write to 0x0007A000 instead of 0x0000E000. However, it was rather easy to bypass and the game now displays properly mapped strings in the stage selection menu.

Next I will extend my UI to make the sentence patching a bit easier.

Nice! Glad to see that wasn’t much of a hindrance for you. You’re just ploughing through this!

OK, so I started writing the UI part of the Patching Util. Till now most of it happened in code only. I don’t necessarily need a UI like that but I though maybe someone wants to make a translation for a different language or something. Hopefully it will also make things easier later.

I encountered 2 problems ahead. First I don’t have numbers in my alphabet (I planned to use the one out of the orignal alphabet but that won’t work). Second there is yet another method writing text that needs to be altered as well.

Attachments:

I investigated a bit and found the method that is writing at least some of the other text. Surprisingly, it is completely different from the one before.

The first one would store images of letters in the chramem and then point to the letters from the bgmaps. This one actually treats the text like images, meaning it just writes an image of the text into the charmem and then displays that on the bgmap. That image of course is generated from the alphabet stored in the rom. So the most elegant way should to change the method that writes those text-images into the charmem.

So, fishing has 2 totally different ways it creates the text that it displays ?

…odd (to me at least)

-Eric

bigmak wrote:
So, fishing has 2 totally different ways it creates the text that it displays ?

…odd (to me at least)

-Eric

There is a third one used for single letters. There might be another one for when the text is written letter by letter but I’m not sure.

What makes the whole thing tricky is that they never reserve a dedicated spot in charmem for letters. They just move stuff around overwriting parts with game graphics.

i’m really curious if there were more than one programmer tasked with text or if the game was shuffled around a studio. perhaps those would explain why there are 3 ways in which text is handled.

OK, so I analyzed the other method that is writing text. I actually like that one better as I don’t have to care about the charmem.

So next steps are the same as before. Write something that changes the original addresses to something else and alter the method to only write 18×6 letters. After that add support to the UI.

I analyzed the code even more an figured out where from the rom the other method loads the text. This one is rather simple. There are some big pointer arrays pointing towards strings. The string format of course is different from the one before but not complex. However, there are tons of string which should hopefully cover most of the games text. As there are pointers they should also be easy to replace.

Next I might build a UI part to be able to look at the strings.

Soo…. I added features to my UI to be able to look at the content managed by some pointer arrays. I’m now able to replace the sentences from the stage selection an the comments from the opponents quite easily. However… the text that is spoken before the match is handled differently. Unfortunately there is no pointer array that pointing towards the sentences which makes it harder to replace them.

I had a pretty deep look into the code and pretty much figured out how most of it works. Not 100% sure how to handle it yet.

 

Write a reply

You must be logged in to reply to this topic.