Bugs, Icons, and Clock Cycles
Various news on the sprite text front. First, Jeff and I spent a @O*#TUOS amount of time trying to figure out a few bugs that our sprite text hack was causing. I won’t go into the details, but eventually we found and fixed them. They were real nasty ones, too. Very glad that that’s over. Here are some pics of the bugs now gone.
Claus doesn’t freak out now Boney doesn’t move now A different bug (before)
(ignore the blue, that’s for testing)after
These bugs affected a bunch of other things too, so it’s good to see them gone now.
The next thing to do was make the sprite text handle the status icons correctly. It was a huge pain, but I spent a few hours today getting it to work. It’s lame, because there are only 8 item descriptions in the game that use these status icons. Ah well. Here are screens of some of them in action. I’m pretty proud of how they turned out, for some reason.
Oh yeah, it looks like the “KumatoraD/ uster” problem was fixed, but not *really*. It’s hard to explain, but we’ll still need to do a quick hack to make the menus handle 8-letter names correctly.
After that, I needed to fix a few other little bugs/rare instances of stuff. After that, I wanted to see how much sprite text could be thrown at the enemy descriptions. It looks like we can use more text than can fit on the screen now. Hail the power of sprite text welding! I’m not sure if there are any string overflow problems with such long descriptions, but I’ll look into that later. There seem to be no problems now, at least.
I did some general testing to see if there were any other glitches, but nothing’s turned up. So for now, it looks like the sprite text hacking is done. But there’s still one last thing to do before we can cross that off the to-do list: optimization. I showed a video earlier of how much slowdown occurs when there’s sprite text on-screen. It’s definitely unacceptable, so now I need to make it so this sprite text hack works magic and makes things run smoothly.
The first step was to see where the bottleneck/bottlenecks are. My first hunch is that the font-copying code itself is the biggest problem. The game constantly copies/draws the font over and over and over, even when nothing is happening or changing. My idea for optimization is to have the game draw the text only once, when it needs to be drawn, and then skip any re-draws until a change happens. To see how much of a speedup we’d get, I turned off the font-copying routines. The speed-up was a lot more than I expected.
(Warning! Boring video, ignore if you don’t like blah blah technical crap)
So the font-copying is the biggest obstacle, but you can tell from the name summary screen that it’s not the only major cause for slowdown. So another thing we’ll have to do is really optimize our hack code and smooth everything out so it’ll run faster. This almost sounds like a homework assignment for a CS class. I should also mention that I use the naming screen as benchmarks, but the slowdown stuff affects any screen with sprite text, which means pretty much any main menu/shop menu-type screen.
Anyway, so those are the next two things I’m gonna have to work on next. I’ve been dreading this for a while now, but hopefully it’ll go easier than I fear. This sprite text hack = insane. It’s probably almost as much code as all our other hacks combined. This makes that crazy battle text hack look like child’s play now 😯
Please accept this screenshot. It is heartwarming and fuzzy.
Wow, awesome. So about how long do you estimate this hack to take to finish up?
Great job Mato!
Well, I’m glad all those problems are gone now.
Glad to see it coming out so nicely! Will you keep a log somewhere of “gotchas” like the second-line problem for status icons that future translators may need to know about?
And Jupiter-x was correct in the last thread from the old story, eels are, in fact, fish. I’m surprised, though, that we actually did have an ichthyologist (or at least someone who could fake it) in the house…
Amazing. The awesomeness of your undertaking has rendered me…speechless (…………………………………).
YAY! I love updates!
I hope what you need to fix doesn’t break anything else. D: I mean the project looks so nice now it’d be a shame for something to blow up…
Well, best of luck, to you, Tomato and Co.
Yes.
Everytime I see a knew MOTHER3 post I get so excited. It seems really close to being done. But you never know that one thing could damage the whole project and make everything die.
I cant wait. When the patch is done Im not talking to anyone for at least 17 days
Its great that you have fixed the bugs that are bugging you and stuff. Its great that the team is taking time out of their like to bring a fantastic game to the english language.
Thanks a lot
Sharpie EB
Sweet. I love reading these updates. Keep up the good work!
YES!!! Now I don’t have to be reminded of M3’s birthday for the 100000000000000000000000000000000000000000000th time ( I do check this site about that many times a day)
Kick-ass as usual!
Everytime I start a new game of Mother 3, I’m going to picture Boney moving all the way to the left.
Anyone else notice that the sound that plays when you accept the names at the end of the naming screen in the JP version sounds different from http://www.youtube.com/watch?v=jzFR22uNHAM where there seems to be slowdown at the end? I just noticed that right now.
Yay! This is exciting stuff!!! Congrats on almost knocking out another obstacle!
Optimizing some crazy ass mega hack?
Mato. You’re gonna need a beer or three.
You are amazing Mato what you’re doing is amazing as well
The game constantly copies/draws the font over and over and over, even when nothing is happening or changing.
A) What in the world is the logic behind that, B) Why didn’t that process lag the original version?
how did the first people read it so fast?
Well it seems you are slowy figuring out the problems present. But, I find it insane that it is progressing so quickly. You are now highest grade robots, congradulations. (I had to bring that back from the grave)
A) Hard to explain, but it makes it easier to handle things when some text has changed on screen but other text hasn’t.
B) The game actually had something just like what I need to do. If a tile already has the same letter as the letter we’re about to draw, it’ll skip it. But the fact that we’re now using multiple letters per tile screws that up entirely.
—–
I just now realized that part of my original idea for telling if text has changed or not won’t work in all cases — my idea was to check the string’s address and the string’s length with, but I just realized that won’t be enough for things in RAM. If only there was some way to do this easily :/
Ah, okay then. Well naturally I wish you luck, and I’m sure you’ll have found your way out of this in no time. 🙂
It’s weird how I am sitting here, not doing any hacking.
And I feel the frustration.
these updates always make my day
if i knew anything about rom hacking, i would have offered to help.
but i don’t
im a good programmer though
Cool, a new update. ^^b
Good job, Mato. You’re getting closer and closer every day.
I think when I finally get to play the fully translated version of Mother 3, I will honor you by naming my game dog Mato instead of Boney.
* or I could put in my favorite food as “Matos.” LOL.
I love the technical blah blah parts of the posts…in fact, they’re what keep me coming back. =P
I guess I’m just a nerd like that.
As a side note, this week’s Zero Punctuation mentions Mother 3 (although it’s actually reviewing Brawl). Yahtzee seems to share our view that it would have sold extremely well in English. I wonder if he knows about the translation…?
Instead of the string length, why don’t you use some simple hash on the string as well as the address? Then you shouldn’t get confused by strings of the same length in the same place in RAM.
Just out of curiosity, do you have any numbers on how many people are subscribed to the RSS for this blog? And great work, thanks for keeping at it despite difficulties!
that screenshot made my day.
good job, but it looks like you’ll need some good luck for the upcoming fix,
SO GOOD LUCK!:D
word to favorite food “matos”, and word up to tomato himself
I actually appreciate the technical blah-blah on this blog. Otherwise I would have imagined that the translation would have happened like this:
1.) Read the game in Japanese.
2.) Make an educated guess as to what it says in English.
3.) –MAGIC HAPPENS!–
4.) End.
stop messing around asking when this finished, im glad you are in it, even if it a minor update thank you so much for doing this, I really want to help if I’ve got time, love mother 3
I don’t if you’re actually “doing a great job” because you guys are the only ones doing this but to me it looks like you guys are doing an incredible job, the rate you’ve been taking care of each problem has gone by extremely fast (even though I’m sure it feels like forever)
anyway thanks again guys, really appreciate the time put in to this
God, it looks so damned good in english. I ordered a copy from NCSX two weeks ago and I started playing around with it today.
I can’t read much outside of the names and some of the items but I get the general idea of what’s going on. It really does seem to be made with the non-japanese speaker in mind.
I have to say that I’ve been playing RPGs for about 20 years now and I’ve never had so much fun in an rpg battle.
God, I just can’t get over how good that Earthbound font looks!
“…but the slowdown stuff affects any screen with sprite text, which means pretty much any main menu/shop menu-type screen.”
Does this mean that you don’t use sprite text welding for the main script? In the last video some text was vanishing or getting eaten because there were so many letters on the screen.
A Fan: Hashes take time to compute, unless there was a really quick one that was sound enough to work…
For about half a second I was honestly thinking the solution to the “check if text has changed” problem would be to create an event handler. That’s what happens when you spend a whole week coding in C# and then read an ASM hacker’s blog.
James: You can’t really tell how many people have subscribed to the RSS.
— Last note —
about Yahtzee’s mention of MOTHER3, I wholeheartedly agree with everything he said… Plus Nintendo’s going to be out of franchises once Mario Kart Wii is out.
I mean it’s not like I’m going to sell my Wii or anything – especially since it’s been hacked for homebrew/emulators now, so I can play Earthbound on it and MOTHER3 when this translation’s done. Still, I don’t see what Nintendo has planned other than “rehash our old franchises” and “rehash sports games with waggle gimmickry”… Maybe Wiiware will find a healthy balance between the two. I mean there is the Strong Bad’s Cool Game For Attractive People game type series.
Someone should make a counter, when the final patch is out, showing how many downloads occured, and how much money Nintendo lost out on. I guess that would be a little too antagonistic, though.
I cannot accept that screenshot because there shouldn’t be a comma after “fluffy”.
>:P
It’s gotten to a point where, even though your most recent achievements on this project are probably really huge, the newer changes are appearing to be smaller and smaller. It really seems like you are getting closer and closer to fine-tuning stages. I can’t believe how much you’ve achieved in just one year, it’s pretty amazing. This will truly be the most important fan translation of any game ever, ever. People will erect a giant golden statue of a tomato in your honor. There will be magazine articles and parades in the streets. I can’t wait. This game is going to be awesome.
If hacking M3 were a videogame, you guys would be at the mini-boss right now.
I love chickys.
Darkmark: The main script doesn’t use sprite text. But it does use a buffer, and it only allows for a small # of letters. I can only think of one good reason for doing it that way, and that’s to make text lines move up more easily. I might have to do a repeat of the battle text hack for the main script. My other choice is to do text welding here, too. It might not be as big of a pain since I wouldn’t need to allocate sprites, which is a huge mess. Either way, it’s going to be a very painful hack.
It was a huge pain, but I spent a few hours today getting it to work. It’s lame, because there are only 8 item descriptions in the game that use these status icons.
See, this is why I love you guys. You put your all into taking care of the seemingly arbitrary things. You have my eternal gratitude.
Quick one for finals week!
http://i32.tinypic.com/abru3q.png
Mitch, I would pay to see that fight.
Total pedantry:
On the shop screen, on the left, the feathers are precisely two pixels above the text baseline, and two pixels left of the first letter. On the right, the feathers are seven pixels above the baseline, and four pixels left of the text.
The tiniest of tiny tiny issues, I know. But maybe it would totally be an easy fix to do in between tearing out your hair on the important problems.
“I just now realized that part of my original idea for telling if text has changed or not won’t work in all cases — my idea was to check the string’s address and the string’s length with, but I just realized that won’t be enough for things in RAM. If only there was some way to do this easily :/”
Mato: You may have been over this already, but why can’t you just set a bit when the string changes? Are there too many things changing the string for this to be feasible?
Hey Mato I have a question for yah! I just found another rom for Mother 3, an untainted one that I am saving for the final patch when it comes out however it looks like a different file from the menu patched rom I have now. The file I have now looks like the winzip icon, since I use it to unzip and when it click that in Visual Boy Advance it loads up just fine in Japanese. When I have to apply the patch will I just use the folder/zip file thing or do I need to delve deeper to find a certain file to apply the patch to. Hopefully I am not being too confusing or dumb haha. If anyone else knows the answer feel free to chime in since I am probably not as tech savvy as many of the people on here. Thanks so much Mato and your progress makes me happier everytime I see it. I pray 9 times for your success with optimizing the sprite stuff.
Your fellow fan,
TheMetroidMan
G.Wicks: the comma after “fluffy” is an Oxford comma which is a perfectly acceptable use of a comma, it’s just not commonly used in American English grammar. 😛
I’m more bothered by the use of “Omelets” instead of “Omelettes” although both are technically correct.
shfjgj Awwww ; v; chick~
mitch: still seems cool to me 🙂
Brandon: You *do* know that the pen cursors animate and sort of “bounce” up and down, right?
CaptainDuh: The problem is that there are multiple strings at any one time, and more can appear or current ones can disappear at any time. You need to keep track of them all, it’s not just one string.
TheMetroidMan: If you’re not very computer savvy, then I recommend you unzip the ROM, then get rid of the .zip file. This will leave you with the uncompressed clean ROM. Sometimes people try to patch the zip file or try to stick the patch in the zip file with the ROM and of course that’s not going to work. So to avoid future confusion, it’d probably be best to unzip the file.
My blackberry made the ting noise and then there was Mother stuff. Someone SHOULD make Mato into a game. The Mato Saga. Only for SegaCD.
You guys rock. It’s heartwarming to read into all these little details. Keep up the good work!
Wait… they don’t use the comma at the end of the list in American grammar? Really?
Weeird.
Are there only four status effects in Mother 3? Or just four with item antidotes? i.e. There’s no mushroom!!??
KMeist: Actually, I’m almost wondering if a CRC will do, those can be computed in O(n) with a very low constant multiplier. I mean, most are little more than a shift & add…
Maybe this hash? http://isthe.com/chongo/tech/comp/fnv/
If we knew all possible strings, there are ways to find a perfect hash function, but… 🙂
Lucas’s equipment in your final screenshot assures me that all a dude needs in life is a Chick.
Well, me, myself, I’d at least like Mother 3 when you’re done with it, too 8)
BTW, ever consider checking your host access logs to see which IPs access the site? consider that Itoi could have visited it once, perhaps 8)
After updating, I went and started to clean up the sprite text hack code. Most of the excess baggage stuff was easy enough to get rid of, but the *really* cycle-intensive stuff I might need to look more at later to try to get better results.
After that, I was tired but didn’t want to sleep, so I decided to relax by doing some more easy, aesthetic stuff real quick. You might notice a few little changes here, for example 😛
I might not get much done tomorrow, I need to focus intently on real life work. What sucks about this difficult hacking is that you can’t really get anything done unless you have huge blocks of time to devote to it. Having lots of 15-minute breaks won’t get you anywhere.
Anyway, a hash is a decent idea, A Fan. But I’m worried it might lead to false positives, plus it needs to be really fast, since these checks will always be executing non-stop and I’m trying to REDUCE the # of cycles as it is already. I had another slight idea, but it would need some RAM, and I’m always scared to use big chunks of RAM. But it may be the best choice yet.
no idea why you guys are doing this, and what youre getting out of it if anything. But what you guys are doing is completely awesome, and i had to buy both mother 3 soundtracks just to show some sort of appreciation (which both just make me want to play the game more.) Keep up the good work, and God bless yas.
Seth
Just to be clear, the comma at the end is a serial comma (http://en.wikipedia.org/wiki/Serial_comma), and it’s not an American/British thing. In fact, it’s more common in American than British. As an American who is bothered very much by the lack of a serial comma, I thank Mato for putting it in there.
Great work so far! The answer will come to you in the shower.
MisterKnuckles:
Oxford English, eh? You know, there really shouldn’t be a difference between American and actual British English. All I know is that when listing things the last two items are not separated by a comma, just the word “and”. I wonder why that’s different with Oxford English? I wish I had known that as a first grader, I could have given my teacher a smart-ass remark when she corrected me in English class.
I think Mato lives in Arizona or something so I’m not sure if he’s British.
I find the Oxford comma less confusing, personally, as it separates the last two items in the series. It’s a matter of taste, really. Neither way is incorrect.
I’m not saying that the comma is only a British thing, because Mato is clearly American. I’m just saying that the particular comma you mentioned isn’t a mistake. When listing things in a sentence you can either separate the last item with a comma followed by the word “and” or you can ignore the final comma and just separate the final two words with “and”. The line would still be correct if it said “Tiny, yellow, fluffy and chirpy.” It’s just a minor differencne in writing style. Some style guides say use the Oxford (serial) comma, others say avoid it. No big deal.
If you’re curious, the main differences between American English and British English are mostly in spelling and vocabulary choice. Wikipedia has a really long article about it, although some of the stuff it says isn’t entirely accurate. http://en.wikipedia.org/wiki/American_and_British_English_differences#Writing
G.Wicks: I think he used to live here, but doesn’t any more. I know that we both graduated from the same university (ASU) a few years apart, but I never (knowingly) met him. Though I think I was playing some of his translations at the time, or at least soon afterwards … 🙂
Mato: How big are your registers, again? 32 bits? Because that algorithm seems to be just about a shift & add instruction for each byte of text you consume and if you have a 32-bit register, it should be easy to use that variant. It says it’s really good for situations where very similar text needs very different hash values. Perfect hashing, of course, would be ideal, but you can only compute a perfect hash if you know every possible string that could be in memory.
I’m afraid that’s likely to change on you 🙂 I also seem to recall that the means of FINDING the perfect hash takes quite a while, though there are programs that do it for you, I think. It’s been a really long time since I read about that.
lol, i love how people just find the smallest thing to nitpick about,….. eg the comma issue,.. its pretty funny (and probably a bit annoying to Mato?)
Mechageo: i agree with that…. a long shower might do him good 🙂
I am reminded of the story of an author who was annoyed that his editor always removed his serial commas. In retaliation, he dedicated one of his books to “my parents, Mother Theresa, and God.” Of course, that phrase has a very different meaning sans comma.
Yeah, it is a small thing to nitpick about. But people on all forums and message boards do the same thing. Check this out for some EB Style humour:
http://www.annoyances.org/exec/show/article09-208
“How many forum members does it take to change a light bulb?”
BTW. This project is really amazing so far! I can’t believe how much work goes into translating a game. Everything looks so professional. Good luck Mato & Jeffman, hope things end up going more smoothly for you after this slow-down issue gets resolved.
Where do I donate?
Wow, this looks great!
This update gets me all pumped up and energized for the next update, btw that Video makes this next obstacle look like real bad news. 🙁
66 responses in 7 hours?
That’s OBSCENE. Seriously, NoA needs to get their heads out of the dirt..
So I was talking with a friend of mine (another EB fan) and we were discussing the upcoming remake of Final Fantasy 4 on DS..
If you haven’t seen it, you should check it out; it looks amazing. Full 3d rendered graphics, voice acting… It’s impressive.
So my question is… If they can do that to a classic SNES game like FF4, then why can’t they do it with Earthbound? Seriously, EB would just be twenty times awesomer(if that’s even POSSIBLE) with all those beautiful 3d graphics and such… And even voice acting for all its zany text!
x_x
When is NoA gonna get their collective head out of the dirt and see the light… The glory…
The MOTHERship.
Excellent Mato. . I am Very Impressed as of Usual. To Solve Your Problem, Perhaps When Performing The Tasks Of that is Sprite Welding, Create a Limited Series of Indices Particular To that Instance of Text For Which Sprite Welding is Performed .. A Sort of Temporary Enumeration If You Are The Will of my Idea. It is Unlikely you Will Be Constrained by RAM with Even Several Sprite Welds in a single Dialogue with This Method ! Use These Values On Each Redraw To Perform the Traditional Character Comparison Otherwise Impossible Due to sprite Weld Techniques ! No Problem of Hash Computation Overhead ! A Little Arbitrary I Admit but In ROM Hack What is Not Arbitrary And Draconian ? Perhaps more methamphetamine Will Solving your Problem Mato my Boy!! Puff Puff!
What’s sad is I actually understood most of that…
D:
Way to kill my brain at 2am. xD
Wow, this is really great work. I find it great you’re working so, SO hard on this to get a translation of the excellent Mother 3 to all of us. When this is finally released, I hopefully WILL donate, just to give you a ittle something for your trouble. Great work, and I sincerely hope this whole thing works out… Then I can take ALL the Mother games, in English, on my iPod hahaha… I hate Nintendo of Europe for not releasing any of them here.
so wait, does that mean once you’re done optimizing this you’re done with the hacks?
now im happy and all about the translation but what about the people who cant or dont want to download the game and play on a emulator. i want to play on a gba/ds cart
Manners.jr, you use a flashkit for that.
Whatever. It still bugs me though.
Mato, are you using available IWRAM for VWF hack? Past week I did a sprite VWF text system for my game and when I put the routines in IWRAM I got a 350% speedup, so just assure than the whole routine is placed in IWRAM (if there’s enough space).
It’s cool that they’re redoing FF4, but seriously, how many times can they re-release these games? I just bought it for GBA or DS or whatever, and now another version (albeit completely redone) is coming out. It makes me want to puke. I know Mother 3 could easily be picked up by a publisher here in America, what with all the new publicity from the Smash series, this website, and such.
Keep up the good work guys! Free Blue Moon and Sam Adams at my house!
since I broke my leg ive had free time 24/7 every single day, i wish i could give you some of my free time Mato. Your hack is a godsend, i actually started teaching myself japanese just so i could play this game (as ive said, alot of free time). I wish i could help or something 🙁
Oh great, Mr. Methamphetamine is back.
heh?
Apteryx:
It’s not being re-released. It’s being redone. It was re-released with crappy cut scenes for the PlayStation a few years ago. Now it’s going to be completely redone with new graphics, voice acting, and everything.
I’m actually extremely excited about the FF IV remake. ^__^ FF IV is the reason why I am playing video games today. Back when I was knee’s high to a grasshopper my siblings and I played Final Fantasy together, but it wasn’t until FF II/IV came out that I fell in love with video games. XD Ever since then I’ve decided to name my first daughter after Rydia. Now I just have to find a guy who is willing to put up with a chick who wants to name her daughter after a mistranslation. >_>;; (Apparently “Rydia” was supposed to be “Lydia.”)
Anywhoo…
I don’t know how well the Mother series would be if it was made into 3D. Even when I heard the announcement for EarthBound 64 I was a little disappointed. The current style reflects the carefree and stylized feel of the series. Then again, it’d look fantastic if it was cell-shaded. :[ On the other hand, some people dislike the cell-shaded styles. Maybe a remake would attract non-retro gamers as well?
I guess the moral of this story is, “It’d be awesome if there was a Mother remake, but Aphrodine shouldn’t be in charge of the project because she can’t make a decision to save her life.”
If EB was redone in a harvest moon 64 style graphic that might not be too bad. Those cute clunky characters would lend themselves well to EB.
Also.
The slowdown didnt seem too bad really. Ive put up with worse from much lamer games.
u guys are great, and make me wanna be a comp. sci major
Thanks for preserving the Oxford comma. 🙂
I’m back! What? No one noticed? Aww….
Great job guys. It gives me goosebumps to see how far everything is and the tenacity you displayed when tackling the other hacking tasks, I have no doubt in my mind you’ll bake these optimizations up pretty quickly.
Good to be back and reading! 😀
Aphrodine, you’d be surprised the things guys will put up with.
And Rydia is an awesome name. It’d beat having Frank Zappa for a dad. Moon Unit? Really?
Anyways, any new attention the series could get, whether through remakes, a new game, release on VC, people posting lite-brite LED-type icons of Ness around Boston and causing mass media hysteria (hint, hint) would be welcome. Seriously.
I never did catch up with the questions in the last topic, so many posts kept being made and I was busy working/hacking/real-lifing to keep up. But I’ll try to do better here, so here are some answers to stuff.
———
Megahedron: I need to catch up with real life work, so I dunno, maybe sometime next week I’ll have it optimized, hopefully.
A Fan: I might make a list, but it might still be fixable before the end. But anyone who tries to hack this game HAS to expect things to be unfriendly anyway 😛
MasterInsan0: Yeah, I saw that yesterday, that was pretty cool. Pretty sure he knows, he’s just a normal bloke like the rest of us 😛 I don’t think it would’ve sold “extremely” well, but a few hundred thousand probably.
James: I have some sort of counter but I’m not sure how accurate it is or WHAT it is. It shows some sort of number related to RSS views we get each day, lately we’re getting about 800 unique ones and 6000-ish total a day. Not sure if that’s good or bad but we started out with 63 unique ones a day a few months back.
rc5: I don’t have an exact count, but there are 8 items that use status icons in their descriptions, so I figure there are at least 8 different status afflictions. Maybe more.
A Fan: Yeah, I dunno about your hash link, too much work to be doing each and every time 😐 Gotta find a way to do this though…
All: I think Chewy wrote that Chick description actually, I’m not sure. But I always put that final comma there, I never liked it without. I like being consistent with stuff. I also never like it when someone claims grammar/punctuation should be one way only when there are a number of correct ways to do it. Including this comma stuff and apostrophe+s stuff. Save the world — don’t be one of those misguided punctuation Nazis!
Thanius: No donations here, see the FAQ page.
PK2: No donations here, see the FAQ page.
somedood: Only the sprite text hack. That recent video + the to-do list should show that there’s still a lot of other stuff left to do.
Chano: I definitely don’t have the skill to do something like that here, since the game already has a ton of code there. The VWF code is also spread throughout the original game’s code, so it’s not really possible to compartmentalize it all and move it into RAM.
Shaving cycles?
Obviously you should bust out loop unrolling. And maybe some manual reordering of instructions to prevent NOOPs from stealing cycles. Draw the pipeline diagram!
Yes, I’ll be unrolling the main drawing routine, but it’s not going to help very much, it’s still already doing 4x+ the amount of work the original does when copying/drawing the font. There aren’t many other loops to unroll, sadly. If possible I’d rather not mess with pipeline junk, I’m not even sure what kind of detailed hardware the GBA’s CPU has. Oh well, I’m still sure I’ll get it working well eventually.
Heh, the FF IV remake is already been remade and released(in japan at least) we’re just waiting for the localization. I’m looking forward to playing it after first getting it on the SNES over a decade ago.
I’d be totally for the idea of an Earthbound remake, however it couldn’t pull in the money like a main series Final Fantasy could with its many followers.
*humping the air*
You effing rock… PSI omega your skills to the max!
*humping air*
ok i just had a mother 2 moment there… ahhaah..
Aphrodine: A/S/L….? just teasing. kinda.
Every time I see the game up and running in English I get a bit more excited. The video’s from the last post were amazing. Mother 3 will be a treasure that only a few gamers will be able to experience. Much like Earthbound Zero and the n64 Custom Robo’s. Can’t wait.
Aphrodine: Well, the Japanese don’t have an L or R to begin with, they have another weird syllable that’s half way in between (it’s just a flap of the tongue, so the tongue hits the top of the mouth [unlike our R], but it is further back than an L, which hits the front teeth [and close to the position for an R]). I THINK I have it mostly correct now, after lots of practice, reading about how I’m supposed to move the tongue and listening to native speakers (i.e. anime).
So I guess you could say that Rydia is closest to the name Lydia, but they wouldn’t be pronounced any differently by the Japanese, anyhow. And, IMHO, Rydia is a much cooler name, but that’s just me 🙂
Mato: Hmm, good luck with all that, then. I guess I don’t know how many cycles drawing takes. I figured a few hundred (maybe 100 bytes of text on screen at any time x 2 instructions that probably only take one clock cycle) might save you thousands. But if it had to do both, I guess that would still lag up 🙁 It’s too bad you can’t trap it every time something is added or updated, but I guess there are too many such things? I’d almost just add a temporary debug hack to find me the address of everything that gives me more text to draw by recording them somewhere in RAM, then go patch each of those entry points to use my own code before the drawing code.
Or something like that, I dunno 🙂
I wouldn’t want EB or Mother 3 to be redone in 3D on the DS. It looks too ugly, in my opinion, and sprites > 3D anyway.
However, if they did make it 3D, it’d be cool if they made it look like this
http://www.gametrailers.com/player/4948.html
Homeland. Awesome looking Japanese ONLINE RPG.
Mato said:
I’m not even sure what kind of detailed hardware the GBA’s CPU has.
I suppose you already know this site. Anyway,
http://nocash.emubase.de/gbatek.htm
WHOOOOO!!! SPRITE HACK PROGRESS!!!
KuMATOra
damn, I wish I had your skill in Japanese, mato. I freakin wait all week for a manga chapter to be translated by Friday when I know I could have it as early as Wednesday if I was good enough :/
Btw, A lot of you here are real tech-saavy so I thought I’d ask
Whenever i try to watch a video on Youtube, It says that JavaScript is not on. Do any of you know how the hell to turn it on? Help me, plx
You know, I read every word of these updates even though I hardly understand some of the stuff. Huh. Anyway, keep up the good work! But get some rest!
haha the title of this post sounds like a bright eyes song for hackers haha
This question has probably been answered but: What is that weird sound that is going on when you’re choosing the name?
[Orinally posted by Aphrodine 19 hours ago.]
I actually appreciate the technical blah-blah on this blog. Otherwise I would have imagined that the translation would have happened like this:
1.) Read the game in Japanese.
2.) Make an educated guess as to what it says in English.
3.) –MAGIC HAPPENS!–
4.) End.
>That reminds me of the quirky ill-translations of the first two EB/MOTHER games. Minus the “magic.”
Great job Mato! You actually are doing greater than I would have planned for : )
Damn dirty bugs. Good to see you fixed’em.
@solidpit:
The weird sound is the music playing in the background, because of the slowdown the music updates slower. This causes the weird stuttering.
its nice to see that the text is almost done! but that last 10% must be a looooong way to go 😮
Mato, just out of curiosity, did you manage to talk with Neo and ask him about how long he will need to do his script draft?
[Orinally posted by Aphrodine 19 hours ago.]
I actually appreciate the technical blah-blah on this blog. Otherwise I would have imagined that the translation would have happened like this:
1.) Read the game in Japanese.
2.) Make an educated guess as to what it says in English.
3.) ????
4.) Profit!!!
>That reminds me of the quirky ill-translations of the first two EB/MOTHER games. Minus the “magic.”
Great job Mato! You actually are doing greater than I would have planned for : )
Fixed.
Yayyy!!
I’m probably one of the many who hasn’t commented in forever, but has been checking this site almost daily. I get giddy everytime there’s some sort of breakthrough, even if it’s just a little thing.
You guys are heroes. Like, I’d build a statue if I could in your honor. 😀
God, I need to stop visiting this site 5+ times a day.
yeah, this site is very addicting, and the fact that it seems very close to completion makes its addicting. hopefully we’ll see it done soon. cant wait.
Great job everyone, i applaud you guys!
Since people say “Rydia” was supposed to be “Lydia” what about Puyo Pop Fever? Amimte says “If it isn’t Rita” to Rider. What? Huh? How does Rider become Rita? Sure a letter change and it’s not that big of a deal but totally mispronouncing a name (Puyo pop has voice acting)?
Glad to see the translation is still going foward. One other thing, I swear everytime I see a michevous mole I think about an engineer from Team Fortress 2. Don’t know why but I do.
> What? Huh? How does Rider become Rita?
Because Rider would get written as [ra][i][da] and [da] is the voiced version of [ta], which means that the only difference is a little “-like mark. Miss, ignore or lose that mark, and you have the wrong version 🙂 Or maybe they got really wrong and wrote it in Japanese as [ri][da], which has a much different sound than Rider.
Also, at least for me, I can’t always hear them clearly, so ta and da don’t really sound that different. Especially when pronouncing English words, they’re not often clear.
Besides, you’re not reading Rita quite the way the Japanese would. The i has an eeeyh sound, a has an aaah sound, and ai has an aaayh sound (kinda like how the Fonz says it, if that makes any sense) because it’s really the other two vowels mashed together. Rita as pronounced by them wouldn’t sound much, if any, different than Lighter 🙂
Yes, it is weird, but it starts to make more sense once you learn the kana and realize that Japanese is restricted to only a little over a hundred syllables.
It’s those damn long vowels that get me, though, especially trying to tell the word ‘doll’ from ‘mermaid’ by anything other than context. And that one series had a ‘chivalrous’ mermaid. I’m just glad they didn’t have a chivalrous mermaid doll or there’d have been some expression combining ninkyo, ningyo and ningyou, assuming I remember the damn words at all… 🙂
hey how do you make text blue? I want to play Dracula X with blue texts can I hack it?
Sorry if off topic, but I am trying and failing to instal the menu patch:
I have a tested and playable ROM along with the patch.
I am using the recomended pff-o-matic3 patching program.
The program finds the patch fine, but the ROM does not show up under the program’s specific search conditions.
The ROM is a .GBA file, and changing it to a .ISO file has no effect.
When I change the search conditions to all files, the ROM does show, and the program says that the patch is installed. However, when I play the ROM, it is still fully Japanese.
I am using the Vurtual Boy Advance emulator.
I am using Windows Vista
Please Tell Me What I need to fix!
So close, yet so far. D: I have faith in you, though. My guess is three months. Because you rock so much, it wouldn’t surprise me if you finished this in two. You really rock for doing this! Thank you!!
@Majora
1) Are you sure you’re not trying to patch the zip file? You have to patch the ROM itself
2) I know the GBA file sometimes doesn’t appear. On the bottom there’s sometimes a filter that says something like .ISO files. You have to change that to All Files and EVERYTHING should appear, regardless of what it is. Then just select the ROM
Arashi:
Thanks for the help, but as I already said in my first post, I have “unziped” the ROM and have gotten the Program to find it. When I try patch it, it says that it was patched succesfuly. However, when I boot up the new ROM, it is still in full Japanese.
Any one else have ideas?
(Sorry for double post, but I need this menu patch bad XD)
Hmm… well, I do find Vista kinda sucks… My dad has it and it’s TERRIBLE, but I doubt that’d stop the patch from working
Did you try other patching programs?
Arashi:
No, I haven’t tried any other programs. which one did you use and could you provide a link?
That’s weird.. I just downloaded the patch to see if I could figure it out and it worked perfectly for me, and I’m using a real old computer (2003)
I really don’t know what to tell ya
A Fan: actually I was refering to the english version of Pyuo Pop Fever. That’s where I heard that weird line. Nice to know a little more of the Japanese stuff. I can’t even understand what’s being said in Japanese with out sub titles. No wonder it’s so damn hard to learn with all that crazy stuff going on. Guess Sega does it again with translations though. Here’s hopeing that Mato does the translation proud.
Arashi:
So what your saying is that it’s probably something to do with Vista? Well there just one more thing to add to the very long list of reasons to hate it. Well, my freind reccently got his 2003 XP PC working again, so I guess I’ll just pop in and instal the patch 😛 Anyway, thanks a bunch for answering my question!
ok, look, it’s not posting the link for some reason so I’ll put spaces between all the characters. Just put them together to get the site :/
h t t p : / / w w w . m e g a g a m e s . c o m / p s x / p s x _ p p f . s h t m l
sorry for double post
np, Majora. XP 03 should work, it’s the same as mine, and if mine, which is real screwy, can get it to work then your friend’s new one should too. I’d still reccomend the above link though
Arashi:
You posted the link to the site I downloaded my program (pff-o-matic 3.0) from is there a certain program that I sould down load?
Drü said 3 hours ago:
[Orinally posted by Aphrodine 19 hours ago.]
I actually appreciate the technical blah-blah on this blog. Otherwise I would have imagined that the translation would have happened like this:
1.) Read the game in Japanese.
2.) Make an educated guess as to what it says in English.
3.) –MAGIC HAPPENS!–
4.) End.
>That reminds me of the quirky ill-translations of the first two EB/MOTHER games. Minus the “magic.”
————-
I have to disagree. Any translation that gives us the “new age retro hippy” has to be doing SOMETHING right. and I took a look at that page with the detailed differences between mother 2 and earthbound, and they weren’t that bad at all. In fact, I think I like the feel of earthbound a bit better than the feel of mother 2. perhaps it’s because I first played it when I was 11 and didn’t like death and seriousness in my games. For instance, I prefer the buzz buzz death scene in the american version. (did I mention spoilers for 5 minutes into the game? sorry)
not that mother 2 is that serious. I think.
I don’t think so. Most of the PPF-ers work fine for me, I’d say just keep downloading one after the other till you find one then delete the extra ones that you don;’t need. It’s what I would do 😀
Wikipedia said:
“Embedded hardware, such as the Game Boy Advance, typically have a small amount of RAM accessible with a full 32-bit datapath; the majority is accessed via a 16 bit or narrower secondary datapath. In this situation, it usually makes sense to compile Thumb code and hand-optimise a few of the most CPU-intensive sections using full 32-bit ARM instructions, placing these wider instruction into the 32-bit bus accessible memory.”
Might it help you to switch from thumb to arm and/or vice versa, mato? It seems that maybe creative use of both might lead to optimization. It also seems that creative use of both might lead to massive headaches.
sorry to post, but as i read further down the article it seemed that there are a bevy of wonderful options for you to use, some subset of which the GBA has. using them creatively could lead to speedups, and implosions of certain fruity persons. And we can’t afford too many more of those.
*sorry to triple post.
make that sorry to quadruple post
Mato He Is Great ! 🙂 Meth or no MEth… A true Role Model to Coder Everywhere
Its good to read that by turning off the font copying routines,the speed went up lot more than you expected,also I hope the sprite text hack is not soo insane like you said but if it is don’t worry and take your time and I bet you will solve this issue like you have the other’s,anyways I really hope that none of these major issues scare you or any other person working on this amazing project so keep up the amazing job you guys are doing and always trust in your amazing abilities and don’t fear anything,only fear giygas.
I can not hope to express how amazed I am that you’ve done all of this punishingly hard work and asked for nothing in return. In the words of WolfO’Donell “I can’t let you do that”. Expect a hefty donation from me when this is all over 😀
I guess I’ll be the one to say it this time, ‘no donations for the translation, no exceptions’. If you wanna donate to Tomato or Starmen.net, ideally you do it for completely seperate reasons, or at the very least you make no mention of the translation, the work done on the translation, or anything of the sort, in conjunction with your donation. And you don’t talk about it on this blog.
Are we clear?
> A Fan: actually I was refering to the english version of Pyuo Pop Fever. That’s where I heard that weird line.
Oh, well, then they probably didn’t understood what the Japanese were saying 🙂 Or it got translated by someone who was Japanese and… I dunno.
Majora: Umm, it’s only a menu patch, right? So you probably did patch it just fine if you were actually able to load the ROM, but most of the game (except for some menus) will still be in Japanese :/ This includes most of the intro, IIRC. As the others said, just switch to ‘all file types’ and patch an unpatched copy of the .gba file.
I’m back!
I went on an old version of XP and the pach installed correctly (HOORAY :D) However, when I try to playmy newly partialy english Mother 3, the VBA just shows a blue greenish screen with green dots going in a diagonal patern, why is this?
Try patching it again with LUNAR.
Link please?
doh I meant PPF-O-Matic sorry for double posting.
Look at the download section of this blog and you will find the links for PPF-O-Matic patcher.
Majora (or whoever else is having patching problems): Does this help any?
hasone: Don’t know ARM, and don’t know how to how to switch between it and THUMB, and don’t know how to even copy it into RAM (and hopefully nothing will be there already, the game already has lots of ARM code in RAM). Not even sure how to go about assembling ARM code, since byuu’s xkas only supports THUMB. They’re certainly options though.
I spent a little bit of time today tidying up the main font-copying routine, I managed to shave a few more cycles off of it I think. I’m gonna go unroll the loop now before I go to bed so I can see how well that does. The suspense will keep me from sleeping if I don’t do it before sleep 😛
Man, next week I really gotta get my schedule straight again.
I appreciate all the trouble you’re going through, don’t overwork yourself. Get some rest at some point. =D
mato:
It might be possible that something that could help you is in that ARM code in ram, but I do remember the part you said where you’re touching maybe 1% of the game’s code, and the other part where you’ve gotten this far just fine without it. And I guess the end result of Thumb or ARM is the same – bits in the registers and memory get changed, bits are sent to various things and then processed. So it probably doesn’t matter.
Anyways, good job and good luck, and please don’t burn out or implode or damage yourself. I know that urge to code very well – I’ve been writing something in a much higher level language than ASM, but that urge to add a tiny little feature or fix one more bug is amazing no matter what level the code is at. I also know what it can do to you if you’re not careful – I was going to read a book for class today ><
Mato:
The process you just posted is exactly what I have been doing, but the patch is not taking effect. Is this a Vista problem or is my ROM bad?
majora: this might be a discussion to take to the irc channel. someone there was able to solve a similar problem.
Please ignore my previous posts. I’m just going to stop complaining now. 😛
majora: that’s not what I meant. I just figured that irc would get you better service than a blog comment area, though you might have to wait until people are awake. the link is in one of the previous post’s comments. i’m sure no one wants to see you suffer 🙂
Well Majora I have heard that windows vista has given gamers all sort of problems with emulators and old school pc games and many other software so If problems continue to occur I suggest to get windows xp.
Well, I unrolled the big loop that draws/copies the font. The problem is, I don’t know how to benchmark speed in this case, so it’s a very vague “I guess it’s faster?” kind of thing. I tried making a new video of the name summary screen and comparing it to the one I posted in this update, but that’s not very accurate, plus the results both came out to about 20 seconds each to go from choosing yes to a full black screen.
I’m pretty sure that unrolling the loop helped a tiny bit, like maybe a 10% speedup in more average cases (like item or enemy descriptions), but it’s definitely not good enough. I also took out a few more memory accesses in the routine to shave a few more cycles off. I guess the really big thing will still be the “check if the strings have changed” thing, which I still have no good idea on how to go about doing in an efficient manner. My current idea is to do a check like this at the start of each string:
– Does this have the same address as #th string from last time? If not, set the redraw flag
– Does this string have the same length as #th string from last time? If not, set the redraw flag
– Now comes the hard part, there’s a decent chance this string IS different, but happens to use the same RAM address as last time and happens to have the same length too. I don’t want to do full string comparisons if possible, since that might be a bit too intensive.
Anyway, I guess I’ll muck around in the code some more. I’m really really starting to hate this sprite text hack WEROIUGLKJSF
mato: fraps could help you. I hear it does framerates on programs and stuff. dunno.
It’s not really framerate-type slowdown though.
A 10% speedup by unrolling the loop sounds great.
Maybe you should ask harmony for ideas? Didn’t he do this hack once before, only to lose it when his computer died?
What about asking Jeffman for ideas ?
Actually I was wrong, I don’t think harmony did sprite welding. I just assumed he did because one of his early screenshots showed a really long description, but after I fixed item description length issues I realized his screenshot could be made without the need for text welding.
I guess I could start to work on the optimization thing and use those first two test cases, and then eventually figure out a way to do the third test. I don’t know when I’ll have good time to sit down and try it though. I’m not even sure if it’ll be a good idea to do the test in the same place the original game did; that might result in that claus/boney/etc. bug again, maybe. Bah, I know I’m gonna dream about hacking again tonight now that I have these ideas 😛
wow. you guys are amazing. so unbelievably dedicated to this and doing it so well and fast too! keep up the good work. (yes i read the entire entry haha).
10% speed up? then its obvious: just unroll the loops 10 more times and you’re good to go…:P
Im sorry………. i shouldn’t mock the hacking issues, i deserve to get shot in the pinky toe..
Cant you call upon one of the superhackers, requesting for special help on just this one thing… any input even? im sure they can take like 10 mins out of their life to give a suggestion or two?
Out of curiosity, you said you’re going to try and detect if the string has changed… why not just set the rewrite flag _when_ the string is changed?
Mato there’s so many great Japanese games that I wonder how good they are but I will never know because I cant read Japanese and will likely never see a English release,seriously I wish most Japanese games started to have a English option lol its 2008 not the 80’s or 90’s anymore,do you think that in the future gaming companies in Japan might open their eyes and add the English option in their games or atleast on popular games.
LordNecros: It’s already been discussed, but the problem is that there are anywhere from 0 to maybe 16 strings being represented at any one time on the screen by sprite text. Also, strings can suddenly appear or disappear, before all the current strings, at the end of the current strings, or even somewhere between some of the current strings. It’s a big mess, and the text all comes from different sources too. Your idea would be easy if there was only one string per screen, but not here really.
CLOWN: No, I doubt it’ll ever happen with anything but games that aren’t text intensive. The cost and development time/issues involved probably wouldn’t be good for Japanese companies who want their Japanese product out ASAP. Plus if we go down that road, eventually people will want games to not only have English AND Japanese by default, but more and more other languages too. There’s a point where it won’t be worth it for the main business.
I do think we’ll see it happen more and more, but not necessarily with things like RPGs.
From the depths of my heart I thank you for all of you’re efforts. I pray for the blessings of whatever diety is in charge of illicit yet noble ventures such as these looks down upon this project with a kind eye. Stealing the intelectual property of the rich to give to the poor. Mato, you are a real Video Game Robin Hood!
“No, I doubt it’ll ever happen with anything but games that aren’t text intensive.” What’s more text intensive than Phoenix Wright?
By the way this blog is awsome and the best I have seen for any game translation ever on the net,with all the pics,video’s,info.
Nodal: That would be a special case. Translation generally isn’t done side-by-side with the development of Japanese games, or even by the same company in many cases. The translations usually happen afterward.
Back from the abyss to try and think of stupid ideas that are likely to not work, no need to even comment on them if they aren’t worth considering.
Anyway, since I’m assuming keeping many symbols in one of these ‘boxes’ makes sure that it’s not all spaced out like I’ve seen in some screenshots/videos, I’ll only mention the idea then pass on it and think of others.
Namely:
– ‘simplifying’ the text images, the game has to keep it’s font images somewhere, maybe you can simplify those in some way.
– Perrrhaps… you could code it (probably a very difffficult code) to skip redraw in only some places and not others. Especially since most of the stuff on the problem screen repeats itself more than a few times (the names)
– A third, unlikely and would take a long time idea might be to work from the original, add only the english text and fiddle around with it on that hack. Not hacking out the bugs from the process on the more robust version of the hack (the one we are all eagerly awaiting), this might give you a bit of insight as to the problem. Sometimes working from the beginning can really help things out.
– Lastly, call in the troops, while an unfavorable tactic, getting everyone aboard this problem would fix it that much quicker, or simply get new angles on how to solve/work on the problem.
Before decending back to my invisibility, I must congratulate the team on this work, you all seem to be working on this quite well and at a good pace, I just hope you all don’t overwork yourselves. Hopefully we will be able to join you in great cheer in the near future, :).
http://g.photos.cx/spritetext-65.PNG
…oh dear.
Haha, that was a good picture 🙂
Mato: Only 16 strings? It *can’t* take long to hash them compared to drawing them, can it? It’s like 4 clock cycles per letter over 100 letters (shift, add, compare to end of string char & branch), unless you have to fetch the string out of some special memory or something slow. I thought we were doing something on the order of a quarter million instructions each redraw, right? Heck, merely counting them has to take almost as long, because you’ve got an increment, compare to the end char and a branch for each loop…
Even so, I have to think that a guy like Harmony would have ideas, even if he doesn’t have time to hack. I dunno. Good luck! Maybe you’ll find a solution in your sleep? 🙂
Pointing back to Phoenix Wright, the first three games were programmed for GBA. The DS ports were created almost entirely for the US, though I think the first one may have been done originally in order to drum up hype for GS4.
Is it worth trying to compare only the first or last few characters? What is the likelyhood of a same-length string that matches memory address and first few characters – but is not the same? How long do they even get, anyway?
It could have false matches, of course, but it may be an option. Another option would be to do different things for short vs. long strings.
You also mentioned that the game did a check already, which only works for full letters on sprites. Is it worth attempting some sort of hash upon initial drawing (e.g. simple add or something of start position within sprite + letters on sprite), saving it in the same way, and using that? Using this in addition to the length and memory checks (where those override) might likely be sufficient, no?
If you could profile, it would be great to determine what specifically causes the slowdown. E.g.: is the initial draw fast enough (that if you never drew again, it would be fine)? Is it setting up “new” sprites every draw, and is that significant?
Do you have any way to flag redraws in the tools you are using? You may be able to get some measurement of actual performance by incrementing a counter every time redraw fires. My assumption would be it is firing less frequently with the slower code (leading to a smaller number for the same number of seconds.) This would be a quick and dirty “fps” like number within the actual game.
-[Unknown]
Are you sure the text-redrawing isn’t some sort of badly-planned fix for something? It sounds superfluous, of course, and if you’d fix it the game would be, well, acceptably quick, but considering what a mess the rest of the game supposedly was, you would think they had a reason to shove it in.
Just my two cents. Keep up the good work.
God damn it, my campus turns off water and electricity for 36 hours and you bastards go and comment the hell outta this update. What will I do with myself if I can’t get in there early and say something somewhat clever and/or germane to the h4c|<s!?!
I guess all I can say now is: Mato, GeoffMan, et. al, you are continuing to do an awesome and amazing thing, a thankless thing that many will never be able to understand just how much work it’s been … so thanks again, and keep up the good work.
In other news…
Ness is apparently some sorta anthro bee.
Aphrodine:
O_o… that’s disturbing…
I dont know if this would be a huge structure change or not but:
What if you took any input to the screen as an interrupt and then used and ISR to do the redraw routine.
It would save you the need to do a checking loop wouldnt it?
Then again, it might be too difficult.
I’m so excited! I turned on M3 again today…. even though I can’t understand it. 🙁 It made me sad. I’m so excited for you to be done!
[Unknown]: It might not happen much, but if you wind up having strings of the same length in the same part of RAM, the game won’t know that it’s a different string and then it won’t redraw the string when it should. It’s probably a rare thing, but it needs to be taken care of. Some instances I can think of are the naming screen, what if you’re cycling through the list of Default “Favorite Foods”, and two of them in a row have the same string length? That’s just one case I can actually think of, there are probably plenty more. Like item descriptions, there’s always a small chance that moving around on the item screen, two item descriptions will have the same length, and they always use the same address in RAM. So a little extra check is somehow needed. One that is fast and accurate, and if possible, without having to check every letter in the string. Might be hard to do though.
A Fan: I looked closer at that hash thing you posted. I guess I was looking at the technical mumbo jumbo and not people’s implementations. That PowerBASIC inline assembly version looks decently portable and understandable. I’ll give it a try sometime, not sure when, since I need to do stuff today and this weekend might be workland. My approach will be something like this:
– check string address, if not the same, set redraw_flag
– check string length, if not the same, set redraw_flag
– do hash stuff, compare with the hash for this #th string last time, if not the same, set redraw_flag
The problem is, I’m already trying to slim down the code to speed things up — as you can see in the name summary screen with font-copying turned off, the non-copying code needs optimizing too. So adding this hash stuff in will slow it down even more, especially since you need to multiply some numbers with FNV. Oh well, we’ll see where we wind up once we got this stuff up and running. I predict the naming screens will still have a bit of slowdown but the main menus and stuff will work better.
Blargh, why can’t this game be easy to hack 🙁
can you just not apply the sprite welding hack to the naming menu and revert to jeffman’s original?
or am i too simple minded?
> So adding this hash stuff in will slow it down even more, especially since you need to multiply some numbers with FNV.
There’s an alternative to the multiplication step, BTW, though they only express it in C:
#if defined(NO_FNV_GCC_OPTIMIZATION)
hval *= FNV_32_PRIME;
#else
hval += (hval<<1) + (hval<<4) + (hval<<7) + (hval<<8) + (hval<<24);
#endif
I don’t know if that takes more or fewer cycles than the MUL opcode, but it might be worth adding them up to see 🙂
Depending on how many cycles a hash takes, you might even cut out the string length check entirely, or else do it in parallel with the hash as an extra check…
Anyhow, I hope it helps 🙂
Hey, it looks like you’ve already got hundreds of people supporting you but I wanted to add my voice to the mix. This is an amazing thing you guys are doing for the community and I can’t tell you how excited I am to play Mother 3. Thanks so much, you’re honestly an inspiration.
-loren
Mato,
Your spoiler free walkthrough is great. I’m at Chapter 2 and I have now idea what’s going on but that’s how I want it. Thanks for putting that together.
Mato: If all else fails you could theoretically find every point in the code that writes text to whatever memory stores strings to be drawn, and set a redraw flag whenever new text is written. Depending on how many places this happens this may or may not be feasable.
Earthbound rules!!!
PHASE ONE: Print out screen shots and tape them to your DS.
PHASE TWO: ???
PHASE THREE: Profit.
# Aphrodine said 55 minutes ago:
PHASE ONE: Print out screen shots and tape them to your DS.
PHASE TWO: ???
PHASE THREE: Profit.
>Sup /b/? 😀
Wow…seems like everyone here has some idea about what to do…
I wish I knew enough about programming to help 🙁
Majora said 20 hours ago:
I can not hope to express how amazed I am that you’ve done all of this punishingly hard work and asked for nothing in return. In the words of WolfO’Donell “I can’t let you do that”. Expect a hefty donation from me when this is all over
Actually, when I see all the hard work and progress, I think of a different Wolf O’Donell quotation: “NO WAY! I don’t believe it!”
Sometimes you just need to think simpler. Would just taking some register and just adding up the string’s ASCII or other arbitrary value and ignoring any carrys be faster than these hashes?
Alternatively, go old school. Old time BASIC interpereters only cared about the first and third letter of a command; i.e.
10 PXIADSG “HELLO WORLD”
was the same as
10 PRINT “HELLO WORLD”
I don’t know how M3 is structured, especially the particulars on the string memory here, but a “spot check” that only looks in the usual culprit places might be accurate enough to patch around the exceptions; hell if you’re smart and lucky, you might not even need that.
Another idea that seems like it’d be lightning fast but possibly a lot of work and what the constant redrawing was trying to avoid in the first place: make a redraw flag and hunt down all the references to anything that changes the strings and have it set that flag. Since setting the flag would be only a couple bytes worth of instructions even if there’s a couple hundred of these it shouldn’t be too bad, but tracking them down could be a huge bitch.
Good luck, thanks for all the hard work Mato 🙂
what if you just make it redraw every other frame? would that be noticeably slow?
noticeable to a person who hasn’t played mother 3, of course.
You guys are amazing. Fantastic job!
I bet the lazy bums had it redraw the fonts over and over again because they ran into an issue with displaying too many sprites onscreen sometimes, so instead of having sprites wink out, they figured out that they had the spare cycles to just rerender everything so it’ll “flicker” but the text is still readable.
Or maybe it’s a debug thing for some times during development they ran into the problem, and didn’t remember to turn it off for compiling because there’s no visible impact in the Japanese version?
Because you’re posting so many screenshots of things that are already fixed, I am beginning to get a feeling of hope that the project is very far in.
Please post pictures of horrible and ugly glitches so to lower my hopes to prevent disappointment.
GoldyK:
“I can’t lose!!!”
Penguinguy: Here’s a pic from November.
PHASE ONE: Stop mindlessly copying memes from 4chan.
PHASE TWO: ???
PHASE THREE: Profit.
Anna: The problem would be finding those suspect places. If there are strings that are the same except for a number (or something like that), it’d break unless you happened to check the exact right place :/ I don’t think the hash is slow, though. Even with a MUL, we’re talking maybe 1,000 cycles for a screen full of text, but that 1,000 is out of a quarter million with everything else it does. So I don’t think saving 2-3 cycles here or there will do nearly as much as being smarter and skipping loops worth tens of thousands of cycles or more 🙂
It would be nice, too, if we could avoid a FULL redraw and only do a partial one on the parts that changed. That would probably save a lot. Sure, there’d be a tiny lag spike the first time all the text got dumped on the screen, but it’d probably be over before you noticed.
After all, isn’t the cursor a sprite? Won’t that change all the time, requiring redraws? Or am I mistaken?
@insania:
WOW! 4chan makes South Park? I guess you learn something knew every day!!
[/sarcasm]
Seriously. Chillax. -__-;; Contrary to popular belief the internet is NOT serious business.
Hey mato i just wanted to stop in and say thanks for all the work you and your team mates have been doing for this game. I really want to play this game but dont know japanese, so keep on the good work and thanks again for this wonderful translation project!
-Tentu
Mato, couldn’t you just add the letters together? (i’m assuming that each letter has a numerical value) and if the total is different than the last total, then redraw?
Sure, this may possibly induce bugs, but I cant imagine it happening often, if ever. If this isn’t enough, i’m sure you could find another way to make sure it’s less likely (like multiplying the letter’s numerical value with itself).
Another thing to keep in mind is that usually multiplication takes longer than addition. Not everything is 1 cycle.
Well, for normal processors, not everything is 1 cycle. I am assuming it’s the same for the gba.
I have no programming skill, so forgive me if this is a stupid question, but couldn’t you just have a script where it recognizes the weird 1.5-or-so letter tiles as letters for that purpose?
Well, I’m not Mato, but I do know a thing or two about hashing. And bitmaps 🙂
David: Yes, but there’s a lot of math involved in what makes a good hash. That idea would, unfortunately, make collisions more likely. This is why you always want to choose well-tested hashes and things instead of inventing your own 🙂
Crazy: Yeah, sort of. But the tiles are a lot bigger than the letters themselves and would take a lot more time to hash or compare 🙂
You know, I have yet to play Smash Bros. Brawl. Won’t have a chance until I leave China behind in June at get back to America. But I’ve seen enough of the game to see how awesome Ness and Lucas play. I’ve heard the Mother music in the game, too. And I cannot for the life of me wait to play Mother 3 in English and see what kind of character Lucas is, what his story really is about. The waiting for this fantrans is so much sweeter than any internal NOA localization, because I can taste the passion and love for the game and the awesomeness of the community in a place like this. To see it take shape and see the support of the local fans … it’s really special. Really cool.
Thanks, Mato.
Mato, I have to say that I’m worried about all the talk about using hashes. It just seems too likely to have collisions with other strings used during such a long game. Although I guess you already thought of that, and havew a solution I don’t havesince I’m really drunk while posting this comment… (spent too much time drinking “coffee” in fourside?)
Soo…u guys finished all the diologue translation, right?
Are you trying to redraw the sprite text, and -only- the sprite text when possible?
I’m actually glad this patch is being done by Mato and NOT Nintendo.
Nintendo would only put their want for profit into the localization of this game and not their actual hunger to play it and have others play it and enjoy it (like Mato is).
At the end of the day (or few years, however you want to put it), Mato is going to be considered a deity for his efforts to localize a game with a team of himself and few others like Jeffman to achieve what an entire paid localization team could never hope to. This entire process of translating, hacking, and debugging is a product of love for a game and it’s fans – something that I question exists in development today even for games from the Mario series or Star Fox (both of which have, in my eyes, taken a trip downhill).
All NoA would see in this game is a paycheck, and I can honestly say that. That’s how twisted I think they are.
did anyone else notice that almost all the stuff on the to do list is over 50% done? and that theres isnt much left on the to do list?if the project keeps at the speedy progress it has been lately. i would predict all the important hacks to be done by June
Too tired to read through all the latest comments. but I’ve pretty much decided that I’ll forego the whole hash thing and do simple string comparisons if the first two checks turn up somehow. Doing a hash will already require going through the entire string, so might as well just do a full string compare in very rare cases, plus this will ensure no “maybe”s. And we won’t need to waste time doing math to calculate hashes and storing them for each and every string each and every time. Only downside is that this’ll require a big chunk of RAM, since you’ll always need to have all the strings in memory to compare against.
Anyway, I’ll try to mess with that stuff sometime this weekend. Really need to catch up on real life work though 🙁
> Mato, I have to say that I’m worried about all the talk about using hashes. It just seems too likely to have collisions with other strings used during such a long game.
Well, let me relax you with a little math, then 🙂 The one mentioned is a 32 bit hash. That’s a 32-bit number, which goes from 0 to (2^32)-1. So 4,294,967,296 possible values. What we care about is the birthday paradox (collisions) which relate to the square root of that value for a good hash like the one posted. The square root is 65,536. So long as we have fewer different strings than that, we’re very probably golden. Mind you, this is the WHOLE STRING. Not just each word or something. There are probably only a few hundred items and some other misc text things. I doubt there are that many different lines of text or anything close 🙂
And if one did occur? Change the translation, even by one bit. Can’t do that? Make a non-printable 0-width character code (we control the font, right?) and use that to break it up. Not that that’s likely to happen, after all 🙂
If you’re wondering what I meant by ‘birthday paradox’, try Wikipedia 🙂 But the square root of 365 is just under 20, so once you have over twenty people, it begins to become reasonably probable that two will share a birthday.
Oh, and the square root thing is mostly an approximation. It’s 23 people where you get to 50% chance of having/not having two with the same birthday. If you want to know why I didn’t calculate it out for the 32-bit hash collision, take a look at this 🙂
http://mathworld.wolfram.com/BirthdayProblem.html
Wouldn’t constantly comparing strings take a whole whack of cycles just to do? even if it’s a little less, I can still imagine slowdowns arising from that… Assides from using flags, I can’t think of anything that wouldn’t require tons of cycles to check…
Actually, a single flag would probably not be enough, as a simple “Sell? Yes/No” popup would trigger the whole item list to be re-drawn. So each “window type” would need its own flag and each part would need to be checked for redraw during the sprite memory refresh phase “do I need to redraw this? no, move on, and this? yes!”.
I’m probably overconfident in thinking the programers had some clearly separated drawItemList() drawSellDialog() drawCharacterList() drawGivePopup() etc. methods that could be modified to set various ItemListRedraw, PopupRedraw, CharacterListRedraw flags… I’m willing to accept that my faith has failed me and they just wrote a drawStuffAllOverThePlaceWithNoRealPropperPlanning() method that would make your life miserable.
Good luck Mato!
@ Dru
That’s not NoA being twisted, thats them being a corporation. All companies want to make money. Welcome to the real world.
yeah, Dru is a little bit off with his rant.
NoA would have this done in a much smaller time period and just as efficiently, but they’d take out and censor certain things in the game which makes me lean more towards this translation instead.
Hmmm… unrelated to Mother3, but definitely related to this website: PeerGuardian 2’s “P2P” block list will block this website as well as starmen.net if you opt to block HTTP trafic (apparently for circulating fake files on emule), be warned.
Allow HTTP trafic from blocked IPs if you don’t want any bad surprises, PeerGuardian will still block undesired trafic on other ports though.
Why does everyone think Nintendo would unreasonably censor or change Mother 3? I’m sure there would be a few changes of obscure Japanese references into something more fitting of an American pallete, but this isn’t the same Nintendo that was around in the Super Nintendo era, neither here nor there. And tell me, just what grand deviance is there between Mother 2 and Earthbound, for example? Anything that severely compromises the original vision? A pornographic transformation into an unplayable monstrosity? I think not. If Nintendo changes anything, you’re not going to notice it. Period.
A Fan: I see what you mean; and maybe the best answer is even lazier? Maybe it’d be even easier to set the redraw rate much slower, i.e. once every 4, 8 or 16 frames (copy program counter to register, shift register, is least significant digit zero? jump out of routine if true) or something (whatever brings it to being roughly on par with the Japanese text) and add a flag to force a refresh in situations where this isn’t fast enough for some reason, if necessary. Just skip hashing entirely.
The weird thing is that it doesn’t even sound like the sprite welding is what is even causing the slowdown, judging by the odd behavior of the final naming screen.
Majora:
“You’re good, but I’m BETTER!”
hmmm…
does anyone on the translation team have a R4 and an Ez flash 3-in-1 or even a GBA and a GBA Flashcart? ’cause if so you could simulate how the rom would work on an actual console. for example, you could see how the rom would work on an acual console with the font copying on. maybe it could be the emulator or the computer thats stuffing up the speed. all in all, great job and keep up the good work!
P.S for info on flashcarts and more go to http://www.gbatemp.net
Man, I wish I knew a thing about coding so I could know what the heck all you guys are talking about 🙁
Anyway, keep up the good work Mato!
sorry, but off topic question:
Are Flash Carts illegal? It seems to me that the imply piracy.
Tomato’s come from a can they were put there by a man, in a factory downtown.
I wish I could agree, J, but I can’t. Mato himself provides a detailed rundown of just how much was lost in the transition from Mother 2 to Earthbound; Mother 3 contains a lot more material that would be objectionable to Nintendo’s American demographic. I mean, this IS a game that includes graphic images of animal abuse, jokingly implies sexual contact between a polygendered adult and a minor, and posits that capitalism and commercialism are among the roots of all evil. That’s not to say that companies are incapable of publishing something including those elements on a Nintendo console in the United States; it’s just that Nintendo themselves would not publish something that looks to the uninformed consumer like something targeted at children which contained those elements.
So beautiful, thus far. The technical crap goes way over my head, but I read it anyways; Keep it up d(O_o)b
Majora: Flash carts themselves are technically not illegal but they are used for illegal purposes such as playing roms like Mother 3 with out having to buy it.
@Majora:
Yeah, flash carts aren’t illegal since it’s technically legal to have ROMs of games that you’ve already bought (as a “backup”). As long as you have ROMs of games you own on the flash cart, its perfectly legal. Also, I think you’re allowed to have ROMs of games you haven’t bought as long as you get rid of them within 24 hours.
@StageProps:
If only that were true… 🙁
“whether you have an authentic game or not, or whether you have possession of a Nintendo ROM for a limited amount of time, i.e. 24 hours, it is illegal to download and play a Nintendo ROM from the Internet. ”
http://www.nintendo.com/corp/legal.jsp
thanks for the answers!
8BitWaluigi: Tomato has already tested it on the actual hardware, and the slowdowns still persist.
Redrawing the text every 2 or 4 frames wouldn’t really solve the problem, it’d just make it less prevalent. So instead of a 20 second slowdown after the naming process you’d have a 10 or 5 second slowdown, which is still unacceptable. We’re going to try and optimize it as much as possible so that there’s practically zero slowdown. The hash method is probably the best way to do it right now, but using really advanced stuff like CRC32 and MD5 are pointless. The strings being dealt with are rather small and those would take needless amounts of instructions to compute. I think a simple XOR-accumulative checksum would suffice. A regular checksum wouldn’t be too wise since, although it would seem like a rare case to have two strings of the same checksum, consider the “Lucas” and “Claus” anagram situation. 😛
God damn Mato, how do you manage to be so devoted? I would long ago have given up and said “This code is bullshit. I quit.”
I am so sleepy, but I want to say: I love you all.
And I need my man ok to come in here with some meth to get this damn game done faster.
JeffMan: Hmm, you might be able to get by with XOR checksums, true, but I’m not sure they have enough dispersion for you. It depends on how many nearly similar strings you have 🙂 Oh, and your anagram situation is a bit off: capital letters aren’t the same value as lower case, so your anagrams are off. But your overall point is quite correct!
As for flashcarts, Nintendo’s legal page is NOT correct on all points. No, the 24 hour thing for ROMs is wrong. But they say a whole lot of things on there that have little, if any, basis in copyright law and a lot of basis in what Nintendo thinks people should do 🙂 Suffice it to say that Nintendo doesn’t like flash cards period, but there’s not that much they can do.
Then again, a long time back, I think it was DirectTV (or some other satellite TV provider) that got a smartcard seller’s site taken down, and then got their customer list. Because those smartcards *could* be used for piracy (not to mention many other things), they sued everyone they could find. Stupid? Yes. Many, many people were innocent (using the cards for something else), but sometimes businesses are assholes and don’t care if they get a few innocents along the way. What’s worse is that they usually offer an $x,000 settlement option and that’s cheaper than going to court. Even if you *win* … Which is just plain wrong right there, but we don’t have a loser pays legal system, so…
Anyhow, I’m way past offtopic here, but that’s how things are 🙂 If anyone wants to know about copyright law, Google USC 17, but be warned that it’s full of crazy. Did you know that you’re not allowed to have a TV that’s too big? That’s right, it can become copyright infringement to watch things on it (but only at work)…
@JeffM: Even if I just got the game imported?
@JeffM: Even if I just got the game imported?
A Fan: Nope, Lucas and Claus still give the same sum, despite the capital letters. A XOR checksum, however, produces different hash codes for those. I think a XOR one would definitely be sufficient enough.
A fan:
Did you know that you’re not allowed to have a TV that’s too big? That’s right, it can become copyright infringement to watch things on it (but only at work)…
—–
Well DUH! I mean, when you watch TV there is a chance that you will remember the program that you are watching. By doing so you are making an unauthorized copy of the program in your memory. The brain is just nature’s flashcart, after all.
Finnish copyright laws are pretty crazy too. Apparently listening to music on the computer may be violating copyright laws. I’m not talking about music downloaded through your favorite P2P program either… I’m talking about playing music CDs on your computer.
Can someone PLEASE help me with my YouTube problem (see earlier posts)? I’m starting to get desperate…
Of course I could be wrong, but I really think that the dialogue would be diverse enough to just use that addition algorithm I gave earlier.
Considering that there are probably 15 letters in the english alphabet that are most commonly used and 16-40 potential spaces the dialog can fill, this leads to a lot of different combinations. It would be pretty damn unlikely for even the addition algorithm to fail. We could easily check to see if there would be problems if we were given the translated script… but, it’s not done yet. Of course another problem is that he wants to make this a universal solution for other languages, and even if it works perfectly fine in english, it might have that degenerate case in another.
David: But the sprite welding isn’t used for dialogue, it’s used for a lot of small things like character names and menu labels, where it’s more likely to have a simple addition checksum to not work. Like the Lucas-Claus thing I’ve been mentioning.
Sorry for the rant guys, I just wish Nintendo was more like Starbucks . . . : )
Absolutely fantastic. Great work as usual!
> A Fan: Nope, Lucas and Claus still give the same sum, despite the capital letters.
Hmm, so you have a constant offset between capitals and their lowercase equivalents like in ASCII? Yeah, that would make the sum the same.
ArashiSai: That depends on your browser? Are you using Firefox with extensions like NoScript or something? If you don’t have any fancy setup, try this:
http://www.btny.purdue.edu/enablejavascript.html
You guys are magnificent. But you know what I just thought of?
Wouldn’t it be horrific to get some sort of cease and desist order from Nintendo? I mean, they did that with some sort of Chrono Trigger remake or something, didn’t they?
I can’t see any reason they would, but they sure do hate mother fans…
I think about that sometimes in the night and get chills.
Trying to work on the pseudocode for this optimization stuff. It’s sucking ass, since everything we add requires even more stuff to be added. This thing has turned into a horrible monster 🙁
The programmer had Godzilla in mind from the outset.
I am sure of it.
I did a slightly more accurate test rather than simply nopping out the font-copying code. It shows that things would run a good deal smoother (and still correctly) once these optimization checks are figured out and implemented. So that’s good news at least. The optimization code will (ironically-sounding enough) slow things down a bit, but the better test shows the summary screen fade thing taking 5 seconds instead of 20+. And that’s probably the biggest, slowest instance of sprite text, so the rest of the game should do well once we can get this working. I think the original game takes just under 5 seconds, so the fadeout will still be a little jittery-sounding, but I think that’ll be more than acceptable for most people. Except maybe Bob Dole.
This is one of those cases where I hate talking about it and just wanna do it and get it over with, but blah @ this particular problem. I think I can get it figured out sometime today though.
Sorry for yet another off topic question, but I was browsing the screne shots when I noticed that you had entered “Tom Ato” as your real name. Is this true, or just your nickname?
Anyway, keep up the great work!
Hmm, the xor thing made me think, perhaps the simplest
“lazy hash” would be to add another step to the cumulative ASCII value thing and xor some kind of counter or memory location or whatever is close and easy with the ASCII value and add those up?
Anyway sorry for the theorizing, I love to think of ways to do things simpler as too often I see the the everything-looks-like-nails approach in programming. 🙂 I wish I (and the rest of us!) could be more help on brainstorming ideas for how to do things, but I fear none of us bloggites will be much help without a more intimate understanding of the code and hacks involved 🙁
But hey armchair quarterbacking is fun! It’s not like we can do much else! XD
A Fan: thx, it’s working now
100% awesome
Been exploring the code some more, found some interesting stuff that might make things a little more useful. It seems the game has an array of small structs that contain things like string address, starting coordinate positions, etc. and then the sprite text function loops through all of these until it’s done with all of the strings. This will be pretty useful I’m sure.
Sweet man, good luck!
Mato, that is amazing news. I can already imagine all the ways this makes your life easier.
Am I wrong, or is all you have to do now is to check and see when the values in the struct are changed?
Majora: No, Tom Ato is just a Pokemon reference/joke 🙂
Anyhow, glad you found some useful looking structs, Mato. Hopefully they contain most of the information you need to do things properly 🙂
@Intentionally Wrong: You have a point. However, quite honestly, I’m much happier with the SMAP reference changed to a Beatles reference. The Red Cross thing is ridiculous, but hey, that’s organizations for you. I’m kind of glad that all the religious messages were changed because that kind of stuff bothers me for some reason. Considering that this was the 90s and censorship was very tight on Videogames at that time (meanwhile, the Animaniacs got away with that clever Fox Censor Bird Joke). Some fans make localization out to be a horrible, horrible thing, but it’s good in some places (I like being able to understand signs when I read them) and bad in others (onigiri =! doughnuts).
To the food guys, congrats on doing something productive. Meanwhile, I’m going back to writing my ‘Does NoA hate Earthbound’ essay (tune in next week for the suprise ending!)
I am stuck on the NoA changes to the Mother games.
(stuff cut out)
someone: Come on man, don’t give away stuff, people haven’t played it yet. And no, why would we go and censor stuff ourselves? That’s lame. If you don’t like things about the game, you don’t have to play it 😛
I have the optimization stuff up and running sort of. It only does the address and string length checks now, since they’re easy. The optimization thing works by skpping a huge chunk of code — the original programmers did this exact same thing, except they were able to simply compare a single letter against a single letter. Our job is much harder. Anyway, because of some skipped code, sometimes text isn’t being copied to OBJ memory, it shouldn’t be *too* hard to fix this though.
The speedup gained is incredible though, from the player’s perspective, there seems to be no slowdown at all when sprite text is on the screen. The name summary screen will be the only real issue I think when I get the rest done, but it’ll still be much faster than what we got without optimization. It’ll suck for making a first impression on players, but I’ll try to optimize other code too.
Hmm, it doesn’t change ANYTHING during the name summary screen (except maybe a cursor between yes & no), right? Maybe you can put in a dirty hack that responds to only that screen to tell it to skip any unnecessary redraws?
Easier than having to do even more crazy optimization… maybe 🙂
I’m impressed.
You solved this problem in the course of two weeks…if that.
Nice job Mato.
Mato is there anything about the naming screen confirmation that leaves you with no options for tightening up code unique to that screen?
I’d rather see the fade cut and replaced with a different effect than have it choke on itself right at the beginning like that 🙁
Or could you just skip the name summary screen fadeout and write your own code that does the same thing?
Anna, why did you have to post almost the same thing a minute before I did? 🙂
Here’s how things currently stand. I still need to implement the third check (whatever it turns out to be) and then it looks like I gotta fix that by-product flashing thing, which is going to be very unfun.
This is getting REALLY frustrating. Fix one thing and 20 more things show up. Someone asked earlier in this post why I don’t say screw it and walk away from this stuff — I probably would if there weren’t 10s or 100s of thousands of people counting on this. I just wanna translate 😐
Sprite welding: “A semi-tough hack.”
Wow nice to see it at mostly full speed now, just need to hunt down the bugs!!
Wow, looks like your work is paying off on the speedup part. Keep on truckin Mato, I’m sure everything will work out eventually including this obstacle. After all, 10s to 100s of thousands of people are breathing down your neck. *Starts hyperventilating on monitor* 🙂
Everything but the end (for whatever reason).
And that flashing thing that looks like it’s updating the screen too often…or not enough..or when it’s not supposed to or some weird shit like that.
Well, at least there’s progress. Good luck with the rest of this hack Mato.
Poor Mato… I can’t wait until this one is out of the way. I hope the rest of the game is smooth sailing after this. ;__;
Great progress Mato, we’re rooting for you 🙂
Very impressed, Mato. The latest optimization looks quite playable, actually.
Take a rest if you need to, Mato 🙂 It might clear your head and help you come back to this while fresh.
Excellent work Mato. Just think about how gratifying it will feel to have this hack done =)
We’re all with you Mato, we know you can get through this. 😀
it looks great!
its beautiful mato
dont stress over ths one little thing!
You’re a hero! I think the naming screen looks great!
It looks fine to me. I think i only notice the slow down because I knew it was there already. Does the slow down only occur on the naming screen? Because if that’s the case, i say you got it working well enough for sure
Right now it seems to run acceptably, apart from the second string momentarily painting as the first string (that might be a bug in your checks I think).
The slowdown on the fadeout is still there, maybe that’s a special case? If there aren’t too many instances and you can’t implement a global fix, small localized hacks might do the trick, such as suspending redrawing of strings during the fadeout (since no new strings are printed then).
Mato, that looks absolutely beautiful. The flashing thing I barely notice.
And, the naming screen music tells me that the music in this game will be just as beautiful as the last one, which makes me very happy.
Mato, I have an idea on how you may be able to tell if you get it sped up any on the naming screen. I’m sorry if this has been suggested before. It’s worth a shot.
In Visualboy Advance (you are using that, correct?), on the naming screen when you get the huge slowdown. Does the percentage and FPS drop? If you don’t have the option on so you can tell, go to: Options > Emulator > Show Speed > Detailed. Then, on the bar at the top, it should show percentages of the current speed and the FPS at which it’s running.
If it still shows 100% and 60 FPS, then I don’t know. I guess it’d be emulating it at top speed, but the ROM itself is causing the slowdown.
KlydeStorm: Already tried it long ago 😛 It doesn’t change; the game is still technically running at full speed even with this slowdown stuff, so FPS doesn’t get affected.
Anyway, the summary screen is the last real slowdown, everything else works well, and will probably continue to work well once the last check is implemented (and it’ll be the most CPU intensive). In the video above, the summary fadeout takes 7 seconds, while the original game takes about 5 seconds. I think once the final check is implemented, it’ll be at about 10 😐 But we’ll see.
There are so many little things left that my head just explodes.
I had a feeling that optimizing this would be by far the hardest part. So, Mato, aside from the summary screen, how do the menus perform?
The summary screen looks just fine.
We can wait five or 10 seconds.
We’ve been waitig 10 years for mother 3!
One more idea for you, Mato. Then I don’t know.
Get a screen recorder (like Hypercam), and record yourself going through the menu as fast as you can, and play them back side by side.
KlydeStorm: The team uses no$gba. It’s much better for the hacking.
I looked up the USC 17. Man what a legal mess. From what I can see though, you are legally allowed to make you own backup of the rom, since it’s a semiconductor (only if you own it). However, do not have the legal right to distribute the rom. See USC Title 17, chapter 9, §905. “Mask” is refering to the semiconductor. And I though Japanese was hard to read.
OK, I’ve improved that horrible blinking/flashing thing a lot. The fix was making the game not do some copying when unnecessary. There’s still a little bit of flashing at the moment but it’s about 500x better looking than that video.
I don’t know if I can fix that blinking any more than that. Also, there’s a clip of a shop menu, you can see the problem when two item descriptions in a row have the same length and use the same address in RAM — the game thinks the string hasn’t changed so the description text stays the same. It’s just a coincidence that the items in question also had status icons.
That’s awesome work Mato, the fadeout doesn’t seem that bad to me. The game’s looking more and more polished with each update!
Mato, my man, you are awesome!
Nice job, this video is fine!
I mean if the improve version works, I say stick with it. After all, it is only a menu that we see once when we start the game ^^
I wont understand why, but that description that changes is… weird. I guess that is more of an issue than those few blinks in the naming beginning 😀
That menu flashing is fine, it’s not like you have to watch that happening the whole game. Good job me boy.
I think it looks great! I can definitely live with the flashing–I probably wouldn’t have even really noticed it that much if I wasn’t looking for it.
For the item descriptions, maybe you can add a space to the end of one of them to trick the game into thinking they’re different lengths? Don’t know if something that low tech would solve the problem, but it’d be cool if it would.
:O Does that mean that sprite wielding for this part of the game is done?
Long time reader, first time poster here 😛
I’ve been watching Mother 3 even before it was released in Japan, and I was quite certain that it wouldn’t be released anywhere else.
But this effort that you’re putting into the translation/localization process is absolutely staggering. Sure, the little devil inside me is saying “c’mon Mato…you’re fretting over nothing. It’s just a one-time thing with the naming screen. It’s playable, so move on!” but the angel inside me is saying “It won’t take longer than a week. I’ve been waiting SEVERAL weeks for this game, surely one more week won’t hurt it. Besides, fixing it now will mean that the patch will be flawless, not flawed and in need of repair in the future” I tend to side with my angel, so I’ll keep rooting for you to optimize it as much as possible.
What you’re doing is incredible, in my eyes. To take a (poorly coded) game and to completely reverse-engineer it not only to translate it and slap it into the game, but to outright localize it and make it as professional-looking as possible is just awe-inspiring. I would’ve never, ever had that much patience. Just givin’ a shoutout to an incredible effort to localize an incredible game!
*correction, I’ve been waiting SEVERAL years for this game 😀
Wow… wow… I’ll be PORUD to use this patch when this is done!
I can’t wait to look at the debug room in English!
Sory, typo… I’ll be PROUD, I meant.
well done!!!
it looks great!
its not worth your sanity to make the naming screen .15 seconds faster!
Ok.
You’re done with the sprite welding. IF you wanna try to optimize it more, go ahead. But I think it looks good enough. Flashing stuff is minimal (and not a big deal). I…can’t tell if it just happens ever x number of changes or if it’s random.
I feel like it just happens ever 4 or 5 letters input or buttons pressed (if took a few of the “don’t care about the name” things for it to pop up again but it popped up every 4 or 5 letters when you were inputting the name manually…I think).
Slowdown is too small to really matter anymore. Time to get back to translating (well after fixing those last few bugs). Congrats Mato.
Magus: Umm, no, I’m not done with it. Please don’t be a jerk.
How americanized is this going to end up being? Like the mom’s name and the paper fan thing… I don’t know, I guess I’m just spoiled by EB’s brilliant and thorough localization
Alright, think I fixed one of the remaining bugs. Before, if you would like go to the Equip screen and then leave and then go back, the game would still think none of the strings had changed, so it wouldn’t display any sprite text until a change occured. It was a bit of a pain going through the game’s code to find a good spot to insert the little hack needed, but it seems to work perfectly now. Will need to do more thorough testing at some point of course. I’ll go through and test stuff a bit now, and if nothing’s wrong, I’ll go and try to implement that last check, which should slow things down a bit but if done (and if no new bugs show up), that should conclude the sprite text nightmare hell.
Nice Mato, chug a long chug a long to the end!
I dunno if it’ll help or not, but I turned on the cache plugin for WordPress. It should hopefully make pages load a tiny bit faster. I realized now that updates are getting 300+ posts each time now that some slowdown will probably creep in and only get worse with time.
In other news, I keep flip-flopping, but I don’t want to have to do full string comparisons for the final check, it’ll need a whole bunch of RAM and the code would be unfun to do. I’ll either do a simple hash or tinker around the game’s code and do some stuff when the strings get added to the struct array.
I’m just blabbing to myself now, I doubt any of this makes sense without having stared at this code for days now 😛
wowowoowwowowowowowow, that last video looks good.
keep it comin’!
Hey Mato:
I know you’re opposed to accepting donations, but what if I bought a case of beer for you somehow? Would that be acceptable? I feel I must show my gratitude in some way or form.
Rock on man.
“I just wanna translate :|” – lol!, dude you’re hilarious, i love ya’…
How weird is it that I’m kind of upset with myself because I scrolled down on this blog, and saw the embedded video spots, and thus saw spoilers in the update …..
This is looking really good…. please keep up the good work, but more importantly, please know when to take long breaks okay
Man, when I play through this game…when I create my player name, when I read long item descriptions I’m definitely going to remember these blog posts, and all that went into this, and it’s going to make the whole experience that much more enjoyable…. 🙂
I wasn’t trying to be a jerk.
If I came off that way, my bad. Sorry. It was more of a “Woo! Almost done!” sort of thing.
Then again…maybe I was being sort of a jerk and the fever/flu was talking.
Well either way, sorry.
The bar on the side seems to have jumped to the bottom… better undo something or other… unless it’s only a problem with this computer… these ellipses make me sound sleepy…
Also, what if instead of checking the whole string, just check the length, and compare one randomly selected character. It seems like it would be a small chance that it would be the same length and have a random character in common. Even if it does happen, it would check a different letter the next time. I don’t think anyone would notice a flicker, especially since there is such a small chance that it wouldn’t get it right the first time. I don’t program in assembly (yet), but it seems like this would be a good solution, maybe.
Wow that looks really good, Mato. I’ve seen shipped games that were worse than that, and the confirm screen isn’t even noticeable to where I’d even bother with it, and I’m nitpicky about UI stuff being flawless.
If that flickering was just on the naming screen and the rest of the game is fine, I’d say just leave it 🙂
Damn, Mato… I barely noticed the lag in the last video on fade-out… If you really think it needs fixing, go ahead, but I think it’s just fine.
Keep up the good work, guys!
Yes, the lag there is fine, but that’s not what I’m focusing on at the moment. I have to make it so things like that “item descriptions with the same length” problem get fixed. And that will slow things down a good deal.
Started to add the code to do a xor hash, but xkas is giving me some out of bounds warnings when I’m fairly certain everything is fine. Can’t get around it however I try, either. Maybe I made a typo somewhere, or there’s a bug in xkas? Not sure yet.
Figures, forgot to put a . somewhere. Man, it’s always the little things 😛
Anyway, on my first test, the hash seems to work great and without any bugs, and works just how we want it to. Not too much slowdown, but haven’t tested it with the naming screen yet.
OK, tested the naming screen and it was going good until I typed in some letters, then it was bad. I was like aww crap, but then realized I also forgot a branch code after the string length check, so now the naming screen goes well. It’s not as fast as the video above — if you go around typing stuff real fast you might hear some very slight stuttering or at least clicks in the audio, but I want to clean up my code a little bit anyway, so that might fix that. The fade out isn’t *too* bad either. I’ll maybe make another video in a second.
Man, I bet my subscribers on YouTube are like wtf are all these stupid naming screen videos gimme my japenese viedo crap (*@##@$ heh
I think at this point, the slowdown when you confirm your settings in the naming screen is pretty acceptable. If I didn’t know it was slowing down, I would assume that the developers had intended it to sound like that.
In the mass of comments over the last few entries, I’ve become sort of confused, so I should ask: does the flickering occur during the actual game or only during the naming screen?
Anyway, everyone here is rooting for you, Mato! Soon, you will have overcome the (hopefully) biggest hurdle in the hacking and it will likely be smooth sailing from here, especially compared to this monster hack. I think you’ll be remembered as a legendary hacker for this…of course, whether that’s a good or a bad thing depends on how you look at being “legendary”. =P
This is probably a stupid question and has probably been answered somewhere, but what’s the difference between this and the japanese version that makes it slow down so much? Or, even between this and the first naming screen videos where everything seemed to work fine? I know there’s added code, but I thought it was only for sprite welding, which should only run once to create the sprites for the code, right?
I have to say I’m kind of dissapointed at this particular hack too…. not that you haven’t been doing a good job and making the most of the situation and what you have to work with, just that the quality between this and the original game is lacking even due to your best efforts. Up until now the gap between the japanese version and this translation where work has been completed or near completion has been negligble; if I had to compare them to games with professional localizations I would hardly call them different. This so far is the biggest compromise in quality that is completely apparent to the player, and it kind of bums me out compared to how well the other stuff turned out.
Sorry if such a comment is discouraging, I don’t mean it to be. I’m sure once you’re done the difference will be a call to only the pickiest players. As always, I appreciate your dedication and steadfastness in the face of such adversity.
Dude J
If you don’t like the quality of Mato’s translation you can either:
1) Shut the hell up
2) Do it yourself
3) Play it with a guide
But after all the hard work that he has put into it the last thing he needs is some jerk to come by and say it’s disappointing. How it is disappointing? Mato is putting in many, many hours of work into this translation, and even if it wasn’t up to the quality of the Japanese release (which is absurd; the translation is coming along amazingly) you should have a little respect and keep it to yourself. Or at least wait until the hack in finished, and give criticism in a contrastive manner not in a snobbish “This isn’t good enough for me” sort of way. When was the last time that you put in all your spare time into a project that upwards of 100,000’s of people are looking forward to? Never? That is what I thought.
Mato I apologize for this flame, I am not trying to start anything; but I just could not believe that.
What’re you talking about? I’m ridiculously grateful to even have the opportunity to play Mother 3 in English at all. Seconds of lag here and there are nothing compared to that.
Damn…That’s beyond a bit much J.
Mother 3 was programmed by Cthulu. It’s hacking is meant to drive you insane….or at least give you some gray hairs.
So cut Mato some slack. It’s insane that he’s gotten all that he’s gotten done and I’m really excited that things have gotten this far.
*wanders back to nba and final studying* Go Philly!
looking great! i cant wait for the patch to come out!
Mato, je t’aime. =3
J: The difference is the hack that Tomato made which is giving a surplus in quality elsewhere — which you seem to be neglecting — such as longer item descriptions, enemy descriptions and menu labels, among other random things. To compromise for some slight flashing in naming screens that are scarcely ever encountered isn’t that big of a deal. Also, [re?]-consider the fact that his entire hack is being done without the game’s source code for reference. Trust me when I say this: if we had the game’s source code, the hacking would be completely done and probably perfect by now. But we don’t and we have to deal with it the best we can.
I don’t get why everyone needs to bash J so much. He’s just sharing his opinion. I for one didn’t take his comment as a hateful one.
Come now.
Because what he said was silly. He is criticizing something for not being high enough quality, despite it not even being anywhere close to complete.
Man you can’t get away with the slightest complaint about this translation. Sorry J.
I actually just wanted to know the difference between the code that was in the original game that didn’t cause this issue and the code that is in use now that is causing it. I added the other paragraph after the fact; I was trying to be sympathetic, I know when I can’t get something perfect it bugs me and I figured that after everything that was going so well and turning out perfect that it might be kind of dissapointing that despite one’s best efforts things were coming up a bit short. It wasn’t a complaint at all.
read the mini-updates. there’s a ton of new code running, and that on top of the old code, which was already extremely inefficient, is a bit too much. It’s not that the hack is sub-par, but that the code it’s based on is inefficient, and both of them combined are resulting in massive brain cell loss. Or at least, I think that’s what’s going on.
just a note — I was telling J to read the mini-updates, not saying that I just had read them.
I can’t wait…………..
Each month I check……..
Gygax
Alright, I spent the last two hours trying to fix the ugly blinking-ish stuff. The fix would be oooooooooh so easy if we had the source code. The blinking problem only happens in like 3 places: the naming screen (where it’s not that bad), the file load screen (where it’s ugly), and the main menu, when you try to give an item to someone (ugly, but this isn’t something you do over and over and over).
The fix would be real easy, it’s just a matter of changing the order in which text is loaded. A couple of copy-pastes with the source code would probably fix this, but we’re not lucky enough to have the source, so instead we got a tangled mess of ifs and branches and all kinds of stuff. It’s not vital that this be fixed, but I spent a few hours trying to. But I feel it’s more important to be focusing on the really broken things, and that something like this can be polished up once the more pressing issues/tasks have been done.
I also implemented a small little hack to speedup fadeouts when there’s sprite text on the screen; we can assume text isn’t going to change during a fadeout, so I had the game skip all the checks that slow things down. One result is that the name summary screen now goes at nearly the same speed as the original game.
Unless Jeff or I find some big bugs (doubtful), I’m gonna call this hack done soon. I should add a thing to the to-do list for “polishing up hacks if it’s not too hard” too.
I have good timing 🙂
. . . and awesome job! Keep on truckin and don’t get discouraged!
Hey if you have a good computer and run this on an emulator, will the problems not be so bad? I’m guessing the blinking problems would still be there, but I really don’t know much about this stuff.
No the problems will still be just the same because the emulator is made to produce the same results the system would all having a better computer would do is allow you to increase the speed of frame skipping.