Translating Grandia


New Member
Is anyone here knowledgeable about color space conversion methods? As far as I can tell the color space conversion in Grandia from YCbCr to RGB works like I described in the post before. I've searched online for other information about the formula, but didn't find much. However, there is one patent by Nvidia that pretty much describes the same thing. The forward conversion from RGB to YCbCr in the patent is just the inverse function as one would expect. The problem is that this can't be the way that the RGB to YCbCr values were calculated in Grandia. Black frames have the values Y=-128, Cb=0, Cr=0, but if I use the inverse formula for Y, it's Y=(R/4 + G/2 + B/4) - 124. Obviously a value of -128 is impossible with this formula since RGB values can't be negative. The question is now, how was the forward transform actually calculated. I tried to do a curve fitting to this function
def fit_func(X, a, d, e, f):
    r, g, b = X
    return a*b+d*g+e*r - f
But the results are not very accurate. I think the problem is that I don't know the real exact colors that the source video had. The simple color space conversion was probably chosen because it can be done very fast. Like described in the patent, you can do all math operations with shifts and additions/subtractions. My guess is that this simple conversion method distorts the original colors somewhat and that's why it's hard to find the right parameters for the transfer function. What goes a bit against this theory is that the DSP is used for the color space conversion. I think it should be powerful enough to do a proper color space conversion. Maybe I'm missing something or maybe I'm overthinking this too much.

I know one common thing on Saturn FMVS is to darken them a bit, as it helps hide compression artifacts for things like Cinepak. So maybe they did that for Grandia?

Also I don't know much about this, but is it possible that it's a signed vs unsigned issue? Like if it's impossible to get -128, is it possible that the values are supposed to be unsigned where you'd instead get +128 instead?


New Member
Thanks for all your work on this, Trekkies! I played through Grandia in Japanese, when it first came out. It will be cool to now play on the Saturn in english.


New Member
I've just about finished playing the Switch version - I'll probably play it again on the Saturn (my kids want to play it next), but playing it on the Switch makes me think there could be some additional QOL improvements. Specifically, the last bit of the game is way too easy, especially if you finish all of the extra dungeons. The enemies and bosses are hilariously weak compared to what it was in the beginning of the game. I'd love to figure out a "hard" mode for the 2nd disk, at least. I end up avoiding enemies instead of fighting them because it's just a waste of time.

Also, I wonder if the Saturn version has the same bug as the PSX, where one of Feena's Icarian spells requires level 99 water instead of 33 due to a typo. I don't think I ever got it on either the Saturn or PSX (getting to level 99 in any spell is excruciatingly boring), but they fixed it on the Switch. Although, by the time you actually get those spells, the game is almost over, and Feena is so overpowered that they're not even that useful. Back to the idea of a harder difficulty for the end of the game.
If it's the one in this post it should be the latest released version:


New Member
If it's the one in this post it should be the latest released version:
It's kind of hard to find this post it's all the way in the middle of the thread is it possible to add the latest versions to the first post in this thread?.
I've been waiting for 0.8.5 for ages and I thought it wasn't released I was stuck on 0.8.1 till now


New Member
I just wanted to say thank you for doing this. I already completed the game, without any problems or crashes, on a jap ntsc sega saturn model 2 with a flashed pseudosaturn card. (CDRs were burned with 4x for anybody who has problems with burning)