Lunar SSS English Patch

Translating Lunar Silver Star Story 1.5.1

If I knew anything about ASM hacking I'd help. Though if you have the audio, text, and font files from the IOS version I'd be happy to take a look at them and see if I can figure anything out. At the very least there might be better luck with the audio files from that version than Working Designs version since Working Designs tended to have a bit more fun with their scripts resulting in longer dialogue at times. If a hack is to ever be done with Working Designs translation (which personally I'd love to see both be available), some ASM hacking will probably need to be done to deal with the longer voice clips.

Also the PSP version might be interesting to look at too. It uses the same translation as the IOS so there might be something of interest in there.
 
I already have usable script files from the iOS version which uses ASCII - it seems easier to adjust the game to support the files that already exist than to redo all of those files with two-byte characters.



Yep! Here's an example from when I was experimenting with inserting random text to get a feel for encoding. You can see that the period, which comes in between other characters, is very much thinner than the surrounding characters. The 1 is also a bit thinner as well.

Here's an additional VWF image from the game from my experiments way back in the day:

Ilikelunarmpeg.jpg


From what I remember that's the stock font too.
 
Now that's interesting, I didn't realize it had an English font! I had started out examining the KANJI.FNT file, which doesn't have a full English font, but I know it's vestigial and the actual font used in-game is different. This looks very similar to the Working Designs one, though with different spacing:

7yZW104.png
 
I forget which one of those FNT files it is off the top of my head, but one is actually the the tiles for the menu system in order of how they are used. It's actually in the same format as most Genesis/Mega Drive tile data and can be opened with similar programs. Upon opening it you'll see both English and Japanese characters of exactly how they are displayed in the menu.

So for example you'll see the tiles for the words Alex, Luna, Ramus, etc. exactly as they appear on the battle screen.
 
Ah ok, that's interesting to know.

I am rather curious now since CyberWarrior was able to display that bit of text in the game how the font system actually works now. Could you possibly provide one of the TEXTXXX.DAT files from the IOS version? I still have my Saturn rips on my HDD from when I was looking into this and I'd like to take a look at comparing the two to see what all is different. Having the two side by side could make it easier to figure out what the bytes before the character portraits and what not all mean.

I'd buy and download the IOS version myself but I don't have any apple devices to download it onto.
 
I'm glad to provide sample files - PM me with the best way to get them to you (email?).

There's three(?) different encodings at play:

  • The Saturn version uses the index of the character in the font table. This is always a 16-bit value. For example character 5 in the font table is 0x0005, character 10 is 0x000A, and so on. The Japanese iOS version appears to use an identical encoding, so I can only assume the lookup table was ported to the iOS version even though it doesn't use the same font. (It uses the OS's native text rendering, at device resolution. Looks kinda weird with low-res pixelated graphics.)
  • The English iOS version uses uncompressed ASCII. Since this is one-byte, it's unprintable using the Saturn's text-rendering engine, though the rest of the map/script format is identical between the two versions.
  • The PlayStation version uses compressed text, but I haven't looked into the encoding. The English version appears to use ASCII, but I'm not sure what the Japanese version uses.
 
Here's an additional VWF image from the game from my experiments way back in the day:

Ilikelunarmpeg.jpg


From what I remember that's the stock font too.

Just checking, is there a chance you had inserted Working Designs's font? Reviewing the fonts in SYSTEM.DAT, I don't see a font that resembles the one in this screenshot (just the 16x16 VWF Japanese font w/o English, the 8x8 battle font, and the 8x16 menu font).
 
Some good news with the audio files. The voice clips seem to line up very closely to the Japanese Saturn version for at least the first few clips. I can open them in Audacity and convert them over to the 8-bit Mono PCM format the Saturn version uses quite easily. The only oddity I'm noticing is some bad hissing/buzzing in silent parts which I don't remember getting with the converted PS1 clips. Probably need to do some tweaking to the encoding I'd imagine.

It should be pretty easy to convert these over, I'll give it a shot either tonight or tomorrow when I have time and do some tests.
 
Quick and dirty insertion of the audio files:



I was going to try a quick insert of the IOS text files and see how the game reacts, but CDmage didn't seem to like that they were bigger than the originals. I'm guessing we'll need to modify something to fix that, the TOC I think?

Basically if it hasn't been tried yet, I'm wondering that if that font is really in the game and it already supports VWF, if perhaps there's some kind of flag in the files that can trigger the game to read them as ASCII and use that font.

EDIT: Tried it anyways and while the game didn't crash, the text boxes were all empty. So I'm guessing either A) that font really isn't in there or B) An ASM hack is needed, or C) both.
 
Last edited:
Yeah, sorry if I was unclear before - I've already inserted the text and done a lot of testing around that. 🙂 The script format is identical between the iOS and Saturn versions except for encoding. Since the game is hardcoded to look for two-byte characters, and no two-character ASCII pairing in the script happens to coincide with an index in the game's font, the text renders invisibly.

While I haven't mapped the game's font to Unicode, I have looked through the entire font contained in SYSTEM.DAT, so I have quite a solid grasp on what's there. As I said, I didn't see an English font, but it is possible I missed it somewhere.

Since it doesn't have a standard encoding per se, just consecutive indices in the font, adding support for ASCII would entail:

  • A hack that causes the game to read 1-byte characters instead of 2-byte characters. We have one for Magical School Lunar! already, but that game has a different text rendering routine.
  • A rebuilt font that places English characters in the appropriate spots in the font, so that their indices in the font line up with their ASCII codepoints. Any empty characters would need to be padded out.
The alternative would be to alter the game's text so that each character takes up two bytes, pointed at places in the font containing the thinner English font. But we'd need to rewrite all the dialogue pointers in that case - it's entirely possible the amount of work would be more than the hack I describe above.

The iOS version's script doesn't contain the menu text, so that still needs to be extracted and reinserted as appropriate. I have a good lead on that though, I think.

As far as inserting the script, I have a bash script that rebuilds the game's ISO using mkisofs. That's bootable and it runs just fine, but it doesn't yet handle the pointers to the CDDA tracks, which I'm planning on handling later.

EDIT: Also, great to see it working with those voices! Good job. Hopefully we can find a way to get the WD voices to work, but regardless it seems we have an option!
 
From what I remember of the WD voices, the biggest offender was that first intro clip. It's significantly longer than the Japanese clip and the 2nd English translation. The others were still within the realm of fitting if I remember correctly.

I'm more concerned about the annoying hiss.
 
OK, that seems surmountable then. Hopefully there's a way for it to be happy with a longer clip, but if worse comes to worse, I tested just now and we can definitely get it down to the original size just by trimming silence in a few places.

I'll experiment with a few methods of converting and see what the least hissy solution is.
 
I was playing around with Audacity just now, the hissing was due to dithering being enabled in the conversion settings. I disabled it and it went away during the silent portions. It's still there a bit in the talking segments, but it's not nearly as noticeable.

I did try cutting down the the silence in the WD version, but it still ended up getting cut off and causing the game to crash. The other side is if you cut out too much silence it will come off a bit rushed and awkward sounding. My thoughts originally were to recombine M62 and M63 into one clip, and split it in a more convenient way that works for RAM limitations, and possibly implement some kind of hack to deal with the radically different file sizes.
 
Adjusting the volume will help too - the Xseed dub's M62 is -13.3381dBFS and WD's is -13.4136dBFS, while the Japanese Saturn version is -8.1107dBFS. The reduced volume helps covers some of the loss in quality from going from 16-bit to 8-bit.
 
I'll give that a try sometime tonight. At the very least if I can find a good sweet spot for the encoding configuration I can try and get all the IOS audio files converted so that's at least out of the way. Though from what I remember there's pretty big gaps between when the story ones actually play so testing will probably be pretty grueling without any pre-existing saves at just the right spots.
 
So as I'm going through editing these I'm noticing one bit that we should probably keep an eye out for going forward. In at least XSeed's translation all the voice clips are completely lacking all of the mixing and post processing effects done in the Japanese version and I'd assume Working Designs version. So I'm finding myself attempting to recreate it with effect filters in Audacity and remixing certain tracks. There's also times when the clip isn't quite right for the scene in the Saturn version but is more tailored for how the PSP version is scripted.

For example, file M72. In the Japanese version it starts with Alex and Nall both screaming at the same time overtop each other, then Ghaleon's laugh comes in with a reverb effect. In the XSeed version of the file Luna screams first, followed by a pause, then Alex screams, then Ghaleon laughs without any reverb effect. I'm not sure if the sound engine for this version does those effects in realtime to negate the need to mix them in, but I'm guessing the Saturn version doesn't do that hence why it's already in the files. The other glaring issue is the wrong characters are screaming. In the PSP version this works as that scene was redone. Ghaleon fires at Alex and Luna screams right when he fires, Alex then screams when he gets hit. In the Saturn version though this doesn't happen, and with the IOS version being more like the Saturn and PS1 versions, I'm curious how this clip works out or if it's just a lazy insert. For now I've made it similar by layering Luna's and Alex's scream similar to Nall's and Alex's scream in the Saturn version and added reverb to Ghaleon's laugh, but it's a bit disheartening to say the least.

I've been spot checking every now and then to try catch stuff like this, but this particular file is the first to be so different. It's making me question how many more issues like this will pop up.
 
Just checking, is there a chance you had inserted Working Designs's font? Reviewing the fonts in SYSTEM.DAT, I don't see a font that resembles the one in this screenshot (just the 16x16 VWF Japanese font w/o English, the 8x8 battle font, and the 8x16 menu font).

It's been a while since I did that hack. Like something like 12 years ago? Anyway, from what I can remember and what I could find of the remaining code and notes I had I'm pretty certain what I changed was the text script itself and not any font. When I worked on the game it was more for experimentation and learning. So I wouldn't have invested a heck of a lot of time rebuilding the font, etc.
 
Back
Top