an experiment in ROM hacking by a complete amateur
Last active 2 hours ago
Don't wanna be here? Send us removal request.
Note
Dude, do you have a pateron or anything! I totally been waiting for a translation for a decade since i first heard this game and ill straight pay for a translation patch!
Hey man, thanks for the encouragement! I don’t have a patreon, but even if I did, I’m hardly a professional - this is a project that I have to learn how to do. It’s been on the back burner for a long while now, and I’ve been working full-time, as well as on other projects since then. Don’t get me wrong, I’d love to finish it, but it’s a huge time sink and time became scarce pretty quickly around last year.
If it were a matter of, “hey I can get this project done for sure in X hours,” I’d gladly start up some sort of crowdfunding system. But it’s more like “when will I have the time to teach myself how to do this really hard thing so I can maybe figure out how to make it work and then get it done in X hours if everything goes right, as well as balance a full-time job and also get writing and art done?”
Still, it’s good to know GiFTPiA has fans out there who are so enthusiastic! I absolutely want to come back to this project, I just have no earthly idea when I’ll be able to do it. Thanks for the ask!
4 notes
·
View notes
Note
Could you upload the translation spreadsheet you made while project is being worked on. I can follow along with the game easier when the translation contains both languages. Thanks and keep up the good work!
The spreadsheet I made actually only contains the menu text. There is a LOT more dumping that needs to happen involving those pesky .EVT files, which I plan on making my next post about... Unfortunately, work and other projects have pushed this to the back burner, but I plan on returning to this at least a little bit this week.
If I manage to get a proper dump going I will definitely make a spreadsheet that contains the dialog text in both English and Japanese, but that requires quite a bit more legwork to get done.
2 notes
·
View notes
Note
will you finish the patch?
The short answer is I hope so! The long answer is doing this is really hard, I’ve got little experience, and I’m currently working full-time and with other projects.
But I’d love to finish it. The game is FASCINATING and it’s a crying shame it never came to the States.
I’m gonna keep coming back to it, but my time is limited and I can’t promise a ton.
3 notes
·
View notes
Text
HEY GUYS! Guess what!
It ain’t dead yet! Updates will still be sporadic, as I am still working full-time, writing a book, and about a billion other things, but over this last week I figured “hey, what the heck, lemme try to do something weird.” And I did.
So I started fiddling around in that .DOL file, you know the one. And I finally started ACTUALLY replacing the Japanese text with English text. Now, it looks like utter CRAP. This is because the game actually doesn’t know how to render plain-jane ASCII text correctly. I could have used the monospace Latin characters that exist in Japanese, but it was kinda just an experiment to see if the game could even display the text.
And it can. Whee!
The reason I used ASCII text and not the Shift-JIS Latin characters is because it takes literally HALF the space.
Now, for actually making the dang thing look good (sizing, variable width, etc, we’re gonna have to talk about assembly language. That’s for another time. Oh BOY is it ever for ANOTHER TIME.
(assembly language is hard and I don’t like it)
16 notes
·
View notes
Note
Hey there! I was just wondering if this project was still active? You're the most recent person that I can find who is working on a GiFTPiA translation patch. Although it looks like you may have come to a similar impasse that others have before, maybe? I dunno. It seems like people are having a lot of trouble cracking this gamecube game for whatever reason. Anyway, it's cool if you're not, but I'd be curious to learn what went wrong since others have gone silent once they got stuck. Cheers!
Hey! Sorry about the lack of updates. I got a back around my last post and the only thing that stopped me really is a lack of time. Glad to see people are still interested. I'll likely come back to this project sometime this summer.
1 note
·
View note
Text
About tables
So in my last couple of posts I talked a little bit about “table files” and why they’re important, but just kind of glossed over what they are.
But today I’ll go a little more in-depth, so everyone sit tight, ‘cause we’re about to get hexadecimal.
So, everything in a computer is made up of ones and zeroes, as you probably know. This data can be expressed in a bunch of different ways - binary is the raw data, like
10010110
which can stand for a number, in human-readable decimal format. This number would be
150
but we can also convert it to hexadecimal, which is most useful for us in ROM hacking. In that case, it’s
96.
This amount of data (8 digits of binary or 2 of hexadecimal) is called a byte.
Generally, when converting data to text, one byte = one character. Here’s ASCII, which was the generic standard for a long, long time.
You can see that every character corresponds to a numerical value.�� Now, remember how I was talking about Shift-JIS earlier? This is what THAT looks like.
(from Wikipedia’s entry on Shift-JIS)
Notice how they have 16 values in each row, from 0 to F? That’s important. These tables allow the computer to understand what text to display when reading a file. Which brings us, finally, to how .tbl files work.
This is what table files look like. Basically, you put the hex value, then an equals sign, then the character you want it to display. As long as you get the right characters in the right spots, then you’re golden.
You might be wondering why exactly the second picture has two bytes for each character. That’s because Japanese characters are monospace. Those aren’t the same as the ASCII values because they’re entirely separate characters.
So, I dug through the image files and found where the game’s font is stored. It looks like this:
Well, that’s troubling. That doesn’t match the ASCII files at all! But it DOES match the Shift-JIS encoding. And watch:
16 rows, 0 to F. So if we, say, swapped out some of those symbols, we could get some English text displayed pretty quickly, wouldn’t you say?
But more on that some other time. Sorry it took me this long to come back, I just got one of those fancy IRL jobs and updates might be sporadic.
1 note
·
View note
Text
.evt files, Part 1
Today I’ll start with the mysterious .evt files that were included in the big old resource archive. I talked about them in my first post, but here we’ll get in-depth as to what they are and how they relate to the project.
So, “evt” seems to be short for “event.” A lot of times, “event” is used as a generic catch-all term for a basic game interaction, like a cutscene, some dialog, picking up an item, etc. This seems to be supported by the fact that the files are named after the various locations in the game.
You might remember this bit. Don’t worry so much about the icons, that’s because .evt was an old file type used by Windows to log errors and warning messages. That’s not what these are!
So we’re gonna start with the file named “map_tyousharougoku”. Why’s that?
Well, the phrase chousha rougoku ( 庁舎 牢獄) means “town hall jail”. And THAT, coincidentally, is exactly where our story takes place! So it stands to reason that the dialog for the opening cutscene would probably be there. Let’s check it out.
So, I’ll just open this bad boy in my hex editor, set the Shift-JIS table that I used from the .dol file, aaaaand....
...uhh. That’s some of it, I guess...
Well, we can see kanji, anyhow. Take a look at that part I highlighted, though.
ENHANCE!!
That, my friends, is the name of our protagonist, Pokkle (ポックル). But, it looks weird. First of all, the first character is in white. Second, the remaining characters are all half-width. I wonder why that is?
Okay, hold onto your butts, cause this is kinda brilliant.
In Shift-JIS (the table I used), right after the Latin alphabet (the part that matches up with ASCII) there is a set of half-width katakana. JUST katakana, and perhaps more importantly, nothing with a dakuten/handakuten. Those’re those little double-dashes or circles like the one you see on the first character there.
Now, I am by no means an expert when it comes to Japanese. Basically, it boils down to three types of characters, hiragana (for native Japanese words), katakana (for foreign or loan words), and kanji (complex characters borrowed from Chinese).
When it comes to East Asian languages, I have the general comprehension level of a particularly stupid brick, so if you want to know about kana or kanji or any of that junk, feel free to do your own research. I just know computer games, man.
But back to the point. The (ポ) character IS NOT anywhere in the space reserved for half-width kana. So that means that THIS character is in its intended place, but the half-width ones are substitutes for the real ones.
BUT WHY?!
Because the half-width kana take up less space. Not less space on the screen (okay, that too, yes) but precious file space. The first character (ポ) is mapped to the bytes 83 7C. The following character (ッ) is AF. That’s one byte instead of two. HALF the data.
So, by substituting the characters wherever they could, they cut the file size to, by my estimates, 70-80% of its original.
Okay, cool. So if that’s all supposed to be Japanese text, why is it a jumble of English characters?
The answer is, it’s not.
That’s the hiragana, the remaining piece to the puzzle. It’s just mapped over the English characters. So, if we take a moment to modify our table...
Your eyes do not deceive you, friend. That is legit Japanese text. The red characters are the ones I remapped. Even the katakana, although I didn’t really need to. It just reads better this way. See? I even highlighted the same character so you could compare it.
There’s a couple of stray bits and pieces, plus the way every sentence seems to start with an extra (み) character, but that’s for a later time. This post is getting LONG.
THE POINT IS, I FOUND ALL THE DIALOGUE TEXT AND HOW TO READ IT.
See you guys next time!
3 notes
·
View notes
Text
main.dol, Part 2
Aaaaand we’re back!
So you might be wondering from my last post exactly what I found in the big executable file. CHECK IT.
Pretty sweet, right? All dumped and organized, so nice, so nice. However, I did this manually... Once I get into the pointer tables I’ll be able to do it automatically, in a flash, for any of the files.
As you can see here we have menu stuff, like item categories, and some common strings you might see all the time. It makes sense for it to be in this file, since it’s the main executable and might have to load any of this at a moment’s notice.
Well, well, well, what do we have here? It’s the main menu! Pretty standard stuff here, really. The title menu isn’t all that complex.
THIS, here, is pretty interesting. In GiFTPiA there are these things called Hint Pots. They appear all over the game and offer you tutorials on basic game functions, as you can see. You activate it, and a disembodied voice tells you all you need to know. And complains a bit about being sleepy.
What’s really interesting is that bit in yellow. That option doesn’t appear in the game. At all! You can’t get fat. Which is a bummer. No Wario Land-style overeating for us.
There’s the placeholder text for getting fat - they had planned to implement this feature in the game but ended up not doing it. I always love to see this kind of stuff. Maybe I’ll find some more secrets down the line!
... so what else did I get out of this file, as far as text goes? Let’s see...
The menu and UI stuff
The system menu (saving, loading, error messages)
All of the Hint Pot dialogue
What looks like a synopsis of the plot, in chunks (TONS OF THIS)
Character names
Various “Titles” you get throughout the game, like “Li’l Kid,” “Mister Kid,” or “Appetizer” (no, really)
A schedule and list of times/events around the island
The name of every location in the game
All the inventory items and their descriptions
The wishes of each character, which you have to fulfill
And a whole bunch of weird little tokens.
IN THAT ORDER. And the order and location is important. It’s a delicate ecosystem. And I’m about to race through it like an out-of-season typhoon on the morning of a coming-of-age ceremony.
NEXT EPISODE: Fun(?) with tables!
1 note
·
View note
Video
tumblr
The intro to GiFTPiA with English text added. I don’t quite have the video-editing savvy to remove the Japanese text, so it gets a little jumbled.
It’s not inserted yet, that’s a much later priority. Once I get the actual GAME to display English text... now then we’d be cooking.
11 notes
·
View notes
Text
main.dol, Part 1
*whew* Alright, guys, let’s talk about hex editors for a second.
You scared yet?
So, all a hex editor really is, is a way to display files in a useful format so they can be directly edited. Depending on the edits one makes, things can change once the file is run. Which is exactly what we want,
Let’s scroll down and see what we find.
Now THAT’S what I’m talkin’ about! That’s a list of files in string format. Notice the dots to the left of the bit I highlighted. If you look in the left panel, you’ll notice that those dots correspond to one byte with a value of 00. (I’ll explain what bytes and bits and hexadecimals are in a future post, if anyone’s interested.)
The 00 bytes are just there to separate the strings so that they align with every 4 bytes. (4 bytes is called a “word”, in case you were wondering)
But what we want is the actual GAME TEXT. I’ve found where I think it is, but the problem is that it’s all gibberish, garbled characters.
But then I used a table file:
And now we have coherent strings of Japanese text, human readable and everything!
But what’s a table file? How did that magically make it work?
A table, also called a “thingy table” or “character set”, assigns a symbol or character to every byte, or set of bytes, that matches.
For instance, in ASCII text (the American standard format for a very long time), the number “4″ has a hexadecimal byte value of “34″. But it could just as easily be anything else. If you assign the byte 34 to “Q” instead, you’ll replace the character.
The table I used was made to represent Shift-JIS, the classic Japanese format. Which happens to be exactly the same encoding that the developers used to make the game!
How did you know where to look, though?
Thanks to the good folks at WiiBrew, I have a good way of finding out. The link shows the header format of DOL files. I plugged that information into my OTHER hex editor and got this:
WHOA that’s a lot of stuff!
You’ll notice there’s space for 7 “text” sections and 11 “data” sections. The text sections are the actual code that makes the game work. We got a little text0 with what looks like initialization code, then a HUGE text1 with what’s probably most of the game logic.
The data section is what I’m interested in here. Specifically, data4, the first really big one.
AND I FOUND A TON OF STUFF!
What did I find? Well, that’s for next time. Stay tuned!
4 notes
·
View notes
Text
Exploring!
If you’re interested in ROM hacking, or just games in general and how they work, you might like this one. I’ll be going over some of my discoveries and how they relate to the project as a whole.
So here’s the inside of the game’s ISO file. I used Wiimm’s ISO tools to extract all the files/folders within it. The two folders on the left are the ones we’re interested in. Let’s start with /sys/.
Here’s all the stuff that tells the game to actually run. The most relevant and interesting one is the main.dol file. That’s the main executable file, the same for every Gamecube game. Wii games also use the .dol extension, but we won’t get into that here. I’ll talk about this file and how it works in more detail in a future post. For now, on to /files/.
Okay, now we’re getting into the meat of things. We’ve got opening.bnr, which anyone who’s gone into the Gamecube menu by holding down A might recognize. Not the file itself, but its contents. This contains a logo, company data, and a brief description of the game. It’s what you would see if you open up the “Game Play” section.
Next is default.dol, which is oddly enough the same as the main.dol file from earlier. Like, identical.
That giftpia.dat file looks interesting, but let’s look in the /gift/ folder first.
Hmm... interesting. ENHANCE!
SOUND FILES! Lots of them! Don’t worry about /streaming/, it’s just more sound files in a different format. There’s basically no reason for me to go into any of these files, but if anyone wants to learn about them I can talk about it in a future post.
Here we have three cutscenes, named very conveniently so we know exactly what they are and when they’re played. All in .thp format, which is easy enough to convert. I’ve actually inserted English subtitles into the intro movie, so expect that sometime soon!
...By the way, remember giftpia.dat? That seemed important, let’s check out...
Oh, wow, that’s pretty big. But .dat is just a generic extension! Whatever could it be~?
It was an archive. A U8 archive, to be precise. Props again go to Wiimm for his excellent SZS Tools. preload.cmb, unfortunately, I haven’t quite got figured out. The rest, though...
/chr/ and /map/ contain models! Models and textures, all in .dat format. Curse you, generic file extension! But wait, there’s another Gamecube title whose models are all in .dat format as well!
SUPER SMASH BROS. MELEE!
Ah, good times~ Anyhow, Melee is the most hacked Gamecube title in existence, naturally, so I can use some of their tools to edit these files and replace textures as needed! Finally, something easy!
/eff/ and /ext/ contain images. And here are those images, once extracted.
It’s basically all the UI stuff, from menu tabs to the weird fade-in title graphic. Plus this guy.
Oh, wait, there’s one more folder! I almost forgot! Let’s check out /evt/...
Oh jeez. That’s a bunch of mysterious-looking files. Not to worry! These files each correspond to an existing folder in /map/, so there’s one for each area in the game. This is where the DIALOGUE is stored. Basically any piece of text that isn’t in a menu is somewhere in these files. It’s here where I’ll be doing most of the grunt work.
Well, that’s certainly enough for today! I’ll see you later with some more juicy technical junk!
0 notes
Text
Welcome to The GiFTPiA Project!
What the heck is GiFTPiA?
GiFTPiA is a Nintendo Gamecube game by Skip Ltd. that was released way back in 2003. It’s an odd little game where you play as a young boy running around an island, doing chores and discovering secrets to work off his debt.
So it’s a bit like Animal Crossing or Harvest Moon in terms of how it plays. If you’re into that stuff, here’s a game for you. Skip’s other Gamecube title, Chibi-Robo!, is another good reference point.
It was intended to come to America and Europe, and even made an E3 showing back in 2003, but was silently cancelled.
Despite this, a number of people still found the game interesting and wanted to play it in English.
Okay, cool. What’s this blog about then?
I’m glad you asked, nonexistent person! A while ago, a translation group called Kirameki Translations decided to translate the game from Japanese to English.
Awesome! Let’s play it right now!
Hold your horses, my illusory friend. You can’t actually play it in English. Kirameki did a screen translation, reading the text from the screen and writing down what each line meant in English. So if you want to play it, you have to read the translation from a text file and match it up to what’s on screen.
I remember hearing about this game a long time ago, back when I was still a young’un, and found it fascinating.
So I snagged myself a copy of the game and started rooting around. I wondered if it would be possible to hack the game and make a patch that lets you play it in English.
And?
Well, here we are! I’m learning how to ROM hack, and I’m starting to reverse-engineer the game and the way it works! I will be posting updates to this blog, starting today. I’ll report my findings whenever I can, and hopefully people will be able to enjoy this game without having to crane their neck over to a text file.
2 notes
·
View notes