Zoids VS English translation project and the utilities needed to edit in-game text without breaking the game

Amy_Symilton_Gamequeen

Well-Known Member
OP
Newcomer
Joined
Dec 6, 2020
Messages
52
Trophies
0
Age
21
Location
Surabaya
XP
312
Country
Indonesia
While waiting for other Zoids Saga and the DS version by the translator so I can polish the translation error while also arranging them to make the translation clean, I was thinking about translating Zoids VS to spend my long holidays. In case anyone hasn't played the game, Zoids VS was a game for the Nintendo Gamecube which suffer the same fate as the Zoids Saga franchise (I'm talking about the original Zoids Saga, Zoids Saga 3/Fuzor which got translated not long ago but I still feel like arranging the text to make it look easier to read with an app for editing the text, and the DS version of the first game). First of all, there was already someone who translated the entire dialogue text of the game but since he has never used an editor app to edit the game's text, he only write down the translation in the form of a forum from a website so I thought that maybe I should try doing the translating myself. Then again, I kept searching for an app used to edit the Gamecube ROM's in-game text yet nothing comes up until now. My first question is...is there any utility that can be used to edit the in-game text without breaking the game unplayable after the edit? I already tried 010 Editor to for example change the in-game text of the raw Japanese Zoids Fuzor but it broke the game and couldn't be opened after I edited the text using the app for experiment and when I used CrystalTile2 app for Gameboy and DS ROMs, the app didn't break the game after I replaced the Japanese text into English by editing the hex number in it and so I can open the ROM with the text inside changed according to what I typed.

Question: What's the app that can be used to edit the in-game text of Gamecube ROM? Any reference will do so I can test if the app didn't break the game after the in-game text changed by editing the hex number before I start
 

FAST6191

Techromancer
Editorial Team
Joined
Nov 21, 2005
Messages
36,798
Trophies
3
XP
28,348
Country
United Kingdom
Text is frequently custom between games so text editors are made on a game by game basis, either as standalone programs or using the rather complicated dumping and insertion tools (atlas and cartographer being the big two for most western stuff, some others prefer kruptar2)

There are three reasons I would usually expect for crashes after simple edits.

1) Compression. Unlikely for text on a gamecube but could still happen (would be more likely done to reduce bandwidth than space savings). Edit something compressed, particularly in the self referential LZ family that most things would have been using around that time and since, and anything that follows from it and tries to reference your changed text might well end up doing something unexpected and thus crashy.

2) Your edits were to an illegal character/value combo or something that messed up a placeholder that similarly confused it. I usually start such exploratory sessions by finding what should be a valid character (should be many examples if you have found the text, even more so if you know what most things there mean) and replacing a small run of the rest of the line with them. After that you can start testing limits, figuring out oddities (your basic relative search, though not so useful on Japanese so maybe not used here, tends not to give you punctuation), figuring out placeholders, figuring out markup (assuming it is in text and not beside it, before it in another section or mixed in with the pointers) and whatever else.

3) Pointers. I assume you would have used the overwrite mode (in most editors like most word processors you tend to get OVR flash up down the bottom somewhere) rather than insert mode (indeed the insert button is what most things use on the keyboard to swap between the two). If you have inserted text then everything following it (not just the text unless it was just that file you edited and inserted) might well be shuffled forward and that means when a game tries to load a value from an expected location and it is not there...
 

Amy_Symilton_Gamequeen

Well-Known Member
OP
Newcomer
Joined
Dec 6, 2020
Messages
52
Trophies
0
Age
21
Location
Surabaya
XP
312
Country
Indonesia
That could be the reason why it crashed even though I tested by copypasting the same pattern as the original translator from the translated game to the original raw one. I might need to study a bit about the editing part since I have little to zero knowledge about stuff like this
 

Traceytrace

Well-Known Member
Member
Joined
Apr 13, 2022
Messages
112
Trophies
0
XP
816
Country
Australia
You very likely would have to make your own tools unless you can find something left behind by someone before you. Directly editing the hex to insert text will drive you insane and just isn't feasible timewise, unless it's for a very small, one-off thing (or a few things). If you don't have any coding experience, you will have a lot of learning to do for sure, but it can be done

That said, there is nothing stopping you from beginning the translation side of things. Open up a spreadsheet or notepad file alongside the game and start writing down the Japanese lines and your English translations, that alone will give you plenty to do
 

Amy_Symilton_Gamequeen

Well-Known Member
OP
Newcomer
Joined
Dec 6, 2020
Messages
52
Trophies
0
Age
21
Location
Surabaya
XP
312
Country
Indonesia
You very likely would have to make your own tools unless you can find something left behind by someone before you. Directly editing the hex to insert text will drive you insane and just isn't feasible timewise, unless it's for a very small, one-off thing (or a few things). If you don't have any coding experience, you will have a lot of learning to do for sure, but it can be done

That said, there is nothing stopping you from beginning the translation side of things. Open up a spreadsheet or notepad file alongside the game and start writing down the Japanese lines and your English translations, that alone will give you plenty to do
I think I will in this case but right now...I was trying to figure out the pointer for Gameboy rom titled Guranbo which is kinda like a Pokemon game but the creatures aren't called Pokemon but Guranbo instead which is divided by four element : Fire, Grass, Water, Poison (Poison can deal lethal damage to the three main element but same element deal lethal damage against each other just like Dragon element super effective against Dragon element). It's a bit difficult to figure out which address in the pointer changed the dialogue so I had to create a note table for the effect after changing the pointer in the address I'm choosing to figure out which affecting which. Some address in the pointer when changed turns out causing the game to get black screen, white screen, or stuck at menu on load and I did this in the duplicate copy of the original rom under different name such as renamed Granbo 2 for the guinea pig experiment while the original is still intact
 

FAST6191

Techromancer
Editorial Team
Joined
Nov 21, 2005
Messages
36,798
Trophies
3
XP
28,348
Country
United Kingdom
So that is a GBA game (0282 if going by most numbering systems). Pokemon clone I had missed as well in my usual lists of such things (the GBA had a lot of good ones that blow pokemon out of the water as far as I am concerned -- medabots, robopon, demi kids dark version, jade cocoon, metal walker, custom robo, various dragon quest/dragon warrior spinoffs, monster rancher at a stretch...) which is interesting in and of itself but enough of that.

GBA games, like most pre DS cartridge based consoles, map the cartridge to memory. In the case of the GBA then with very very few exceptions (flash carts and the https://mgba.io/2015/10/20/dumping-the-undumped/ with them functioning like older consoles) all the cartridge is visible in memory at all times, this is not as common in older consoles where you get bank switching (see mappers on the NES, memory bank controllers/mbcs on the GB/GBC, special chips to some extent on the SNES though hiROM/loROM is probably closer for many purposes, and equivalents for other consoles) to swap out segments of memory to allow more to be visible (16 bit console does mean 16 bits easily manipulated for the purposes of addresses and 2^16 bits also has to include all your normal memory, video memory, audio, inputs and whatever else).
Anyway the main place you will find the cartridge visible in the GBA is the 0800 0000 through 09FF FFFF region (32 megabytes/256Mbit) though as most games are 16 megs or less that is all in the 0800 0000 through 08FF FFFF region. This leads to a rule of thumb for many hackers of "GBA pointers start with 08" and the rest is the address within the ROM (no dumper added headers for GBA games) give or take accounting for endianness. Those wanting to use the upper 16 megs for their hack purposes can use 09 quite happily on any game (no complicated mapper or MBC conversions) or perhaps for the purposes of their programming can add 08000000 to the address (the 01?? ???? address from your hex editor will make it up to 09 in that scenario). Only thing stopping you from doing that is some flash carts prefer ROMs under 16 megs so if you can reasonably include in the under 16 megs size then don't go there.
Of course this is not the whole story. Two main exceptions will be in memory and mirrors -- as well as 08 through 09 you also have 0A through 0B and 0C through 0D that function as lower wait states (you don't care if you get the data/want to leave something else for priority) that I am actually going to struggle to cite an example for, oh and you can change the priorities if you really want (though I have even fewer examples of this in the wild). In memory usually sees compression and fast code uses. Compression is fairly obvious and anything decompressed will be in normal memory ( http://problemkaputt.de/gbatek.htm#gbamemorymap ) and thus have to be referenced there accordingly, though as memory is tight (more on that shortly) it is only there as long as it needs to be. Fast memory -- while the GBA carts are actually really fast memory (one of the reasons for the expense of GBA flash carts and reason DS slot carts can't run GBA games) then sometimes you gotta go faster still (and possibly faster still) so have to copy code to memory, or indeed the hyper fast 32 kilobytes of memory on the ARM CPU itself. Naturally any pointers within the code will reference this.

So yeah you have the 08 thing and it is so common that I actually often do search for 08 in my hex editor and if I encounter a field of them spaced generally the relevant number of bytes apart (0808 0808 is a valid pointer, perhaps more expected then some others as most times files/sections like to be on nice divisible numbers/aligned values, especially for certain types of compression. While it is very common it does not have to be end to end -- sometimes sizes, padding, markup and other things I mentioned in pointers in an earlier post will be in play) then I will take a look to see what it is for while it might not be something I care about if I do know what it is I can eliminate that from a search if nothing else. You can read tea leaves as well a bit if you want -- sprites are usually going to be tile sized so the pointer values will be evenly spaced for the most part, text naturally tends to be rather more variable so that will be reflected and probably be smaller (especially if the pointers are also used as new line indicators) than music tracks that also vary.

This is not everything about GBA pointers (I barely mentioned pointer maths for instance, though I rarely encounter some kind of set a base pointer and move from there, and did not mention anti cheat pointers -- see round robin, mirrored values, shifting location, dynamic allocation but that is also a programming feature* for which memory leak would be a better search) but enough that you are going to be hard to be surprised by anything there.

*rarely seen outside of anti cheat as it is more commonly associated with C++ which would only really appear on the 3ds. The general idea though is so the computer does not have to load all possibly memory at all times it will have the program ask for a section and then release when it is done, if you went straight into the game that is one thing, if you first messed around in the options menu then the menu code might not have been released before you start a new game and thus the game's code will be found in a different location to last boot, repeat for all the other rarely used options that might need a section of memory called and hopefully released afterwards (not releasing leads to leaks if you load up a new instance of that function). You can further randomise this as a security measure and that is what gives us ASLR that the Switch peeps have to handle for their cheats and PC types have had to handle since... some point in Windows XP but might have been earlier still (security ideas in consoles take their time to filter down from things where it matters and they are pioneered first).

Older consoles don't necessarily swap out the entire visible section of cart, instead you will tend to have a fixed section and a smaller variable window to somewhere else. You might also encounter data duplicated across banks so it will always have the same code visible (or maybe just enough code to handle it in the exceptions caused by landing somewhere it did not "expect"). A famous example from a post 16 bit device is actually Final Fantasy 7 on the PS1 -- it had three discs but each was the same game (you can do it with a disc swap if you want) but for the video cutscenes (PS1 not exactly having the grunt to hold many minutes of video compared to today where you could hold possibly hours of standard def video on a 700 meg CD and still have room for the game). Go find the equivalent of gbatek for whatever console you are looking at (so emulator documentation/source code, homebrew dev kits or maybe leaked SDKs, ROM hacking centric sites collecting it all for hopefully obvious reasons) and you can figure out what goes for that one.
When things shift to file level (pretty much anything based on a floppy disc, optical media or are the DS or newer for cartridges) then outside of the file system itself and some quirks with developers hiding things (see audio on the PS1 with a lot of Square (Enix) games) things) then it becomes more of the file level stuff I mentioned elsewhere (though https://gbatemp.net/threads/translation.615331/#post-9879975 has a nice overview too). Older things based on tapes are more likely to be all in memory, and relative jumps for pointers and maths thereupon is way more common in limited devices as it makes the numbers being thrown around somewhat easier to handle with the limitations (even on the GBA you can't just create any 32 bit number you like in single raw instructions/as immediates, though your assembler might handle it for you, so you might have to shift things around, plays with inverts and whatever else to generate the number over the course of a couple of instructions, it is far worse for an 8 bit CPU).

Anyway the asides are piling up so I will cut it off there.
 

CxP

Member
Newcomer
Joined
Dec 22, 2021
Messages
9
Trophies
0
Age
31
XP
44
Country
Australia
Might I suggest translating Zoids VS III instead of 1?

Don't mean to be rude, but just a friendly suggestion :P
 

Amy_Symilton_Gamequeen

Well-Known Member
OP
Newcomer
Joined
Dec 6, 2020
Messages
52
Trophies
0
Age
21
Location
Surabaya
XP
312
Country
Indonesia
Might I suggest translating Zoids VS III instead of 1?

Don't mean to be rude, but just a friendly suggestion :P
If someone would change the in-game text of Zoids VS then I don't mind translating Zoids VS III in the form of notepad or text but I might have to download the rom first to translate the game manually
 
  • Like
Reactions: CxP

Site & Scene News

Popular threads in this forum

General chit-chat
Help Users
  • No one is chatting at the moment.
    K3Nv2 @ K3Nv2: Keep current Gen consoles stock mod last gen imo