[WIP][RECRUITING] Slime Mori Mori Dragon Quest 3 (Rocket Slime 3DS)

Started by lgnmcrules, October 29, 2016, 03:05:25 PM

Previous topic - Next topic

lgnmcrules


  Since Dragon Quest is around 30 years old, it only makes sense that the titular slime would've had his time in the spotlight.  It does, and it was glorious.


INTRO
Imagine waking up on an unknown island, not knowing how you got there, or why you're there.  Right outside your immediate view you can see monsters roaming, watching your every move.  Now, realize you're a slime, the island is your house, and the monsters are platypus love-children.  Oh, and you have a warship.

The fear-inspiring warship!

As the game starts, you'll be greeted by the titular team of the game before this, Rocket Slime.  If all you oldies out there can't remember it in your old age, your best (only?) friend, Hooly, tried to straight-up destroy you in a 1v1 battle.  Your friend Swoosty reprises his role as the coward, and, instead of helping you fight, he helps you craft increasingly powerful (OP?) weaponry to fire out of your cannon.  (If you ask me, I think the sword would be more useful if you used it as a sword, not a cannonball...)

WHAT IS DONE?
What we have progress on is as follows:
    Translate Menu Text
    Translate Items/Monsters
    Extract, edit, and replace in-game images
    Translate all dialogue

PROOF WE AREN'T JOKING
(Too many pictures to have them all)

OUR CODE?
This particular .3ds game is unique in that near-all off the text in-game is stored in the code.bin.  Because it is stored in the code.bin, extraction and reinjection have been a prime issue.  While, yes, we can do rudimentary edits through our XML, our team does not have the skill set to properly do this. 

Our dilemma is that we are restricted by our character limits.  While this seems like a stupid-obvious thing to answer with "Just take out words/translate shorter!", this won't really work.  While, yes, it would work in most situations, a lot of the core meaning is lost along with some phrases being too long for us to translate shorter than the character count gives us.  For example, the Japanese character that means "huh?" in English is one character long.  If we were to translate it how we can now, our translation would be: "?" That's just a generally all-around awful translation, and to fix these we need another party member.

WHAT DO WE NEED?
What we need is someone who can assemble/compile the code.bin to be readily available for editing.  What I have attached below is the code.bin.  If anyone wants to take a crack at it, be my guest. 

Our team is a friendly, active environment that has a real passion for this game.  If anyone is interested, please let me know!


EDIT: PM for details involving code.bin or other solicitations.  :-X

Approved by MathOnNapkins

tvtoon

How large is that archive? Does it store only text?
I assume that you can extract the text just fine (utf-8 like the DS games?), I recommend that you seek help for scripts first, since the translation "can be done". ;)

lgnmcrules

The archive does not only store text.  If it did that, then we'd have no trouble getting it to work.  The archive is fairly large.  Around 4000kb.  We have extracted text into XML form.  We cannot re-insert it back into the game.

IcySon55

The situation is thus:

code.bin is the executable for the game. Through a visual test, we located the dialog for the game within the executable. I then wrote a straight forward extractor that dumped all of it starting at the known offset to an XML file that can be translated (though a UI to translate it would help).

I can also write an injector to place the new strings back into the file. The problem of course is that this reeks of NES and SNES translation of the old days where text limits were extreme. Even worse, the game uses UTF-16 LE format for the text, so we don't even get single byte ASCII (it breaks). Instead of おはよ giving us 3*2+1 ASCII characters, we literally get 3.

The goal is to figure out how the game references the text within code.bin and write some patches or a patching mechanism to redirect the text pointers to brand new strings located at the end of the file with whatever length the translation needs. Doing this is beyond my skill level.

Jorpho

It would be neat if the solution was applicable to the GBA Rocket Slime, which seems to still be impenetrable.
This signature is an illusion and is a trap devisut by Satan. Go ahead dauntlessly! Make rapid progres!

CakeLancelot

Quote from: Jorpho on October 31, 2016, 08:07:10 PM
It would be neat if the solution was applicable to the GBA Rocket Slime, which seems to still be impenetrable.
According to this thread progress is being made -
https://gbatemp.net/threads/slime-morimori-dragon-quest-shougeki-no-shippo-dan.225025/

VicVergil

That's depressing to hear.

Quote from: IcySon55 on October 31, 2016, 09:12:27 AM
The situation is thus:

code.bin is the executable for the game.

Even worse, the game uses UTF-16 LE format for the text, so we don't even get single byte ASCII (it breaks). Instead of おはよ giving us 3*2+1 ASCII characters, we literally get 3.

The goal is to figure out how the game references the text within code.bin and write some patches or a patching mechanism to redirect the text pointers to brand new strings located at the end of the file with whatever length the translation needs. Doing this is beyond my skill level.

You'll likely need to do 3DS assembly hacking to make the game read 1-byte ASCII characters. Because even if you figured out the pointer system and repointed everything to the end of the executable file, it's still the main executable and expanding it too much might cause big problems if the RAM space is tight (coincidentally, the people who localized Dragon Quest 7 ran into the exact same problem).

But if you knew 3DS assembly, you'd be better off copying all of the text from the executable to a new separate file and loading it from there without even bothering with the 1-byte reprogramming.

I guess other than that, the variable width font has a full English set and shows correctly at least? Did you figure out the format of the text pointers at least? What tools did you use to open the (decrypted .3ds, I assume) rom's file system, and the graphics?

IcySon55

Quote from: GHANMI on November 09, 2016, 10:39:39 PM
That's depressing to hear.

You'll likely need to do 3DS assembly hacking to make the game read 1-byte ASCII characters. Because even if you figured out the pointer system and repointed everything to the end of the executable file, it's still the main executable and expanding it too much might cause big problems if the RAM space is tight (coincidentally, the people who localized Dragon Quest 7 ran into the exact same problem).

But if you knew 3DS assembly, you'd be better off copying all of the text from the executable to a new separate file and loading it from there without even bothering with the 1-byte reprogramming.

I guess other than that, the variable width font has a full English set and shows correctly at least? Did you figure out the format of the text pointers at least? What tools did you use to open the (decrypted .3ds, I assume) rom's file system, and the graphics?
So far, I've discovered several pointer tables which point to the strings and wrote a few tools that can dump the strings and also inject them using a configuration to guide the injection. The dumper is currently not dumping 100% of the strings properly because of unknown byte pairs that include a null. I have a mechanism for correcting against those but they need to be discovered, one by one. Pending, is a restructuring of the XML which contains the dumped strings and injection configuration. I need to add support for one string containing multiple pointers.

I'd love to see some ASM patches to redirect string reading to separate file(s) while keeping the unicode.

The game was dumped and decrypted using a CFW 3DS and several well known rom tools (ctrtool, 3dstool) were used to extract all of the files, including the code.bin.

My skill-set is limited to the work I've already done. I don't know ARM ASM.

lgnmcrules

Just an update for you guys.

We have gotten a lot done with cracking open the game and taking out what we need, as well as translating images, pictures, and the likes. 

A review of this game can be seen here, and it outlines what this game is.

Our Discord has gotten more active over time, for we have seen translators join our project to greatly speed up the translation process.

BlackDog61

Does the game emulate properly in an emulator with a proper debugger? Without these, I would bet it will be fairly tough moving forward.

lgnmcrules