Jump to content

In-game font Unicode support for Cyrillic symbols - gen 5


xyzman

Recommended Posts

I want to give my Pokemon Russian names - and apparently in-game font supports 0x0434-0x0451 characters (which corresponds to 28 useful letters out of 33 in alphabet - definitely not usable). All I get for 0x0410-0x0433 are question marks. So question is - is there a sort of character table that maps bytes to font glyphs?

And a related question - with wide Unicode characters, what is safe count to use in names? 5 is in-game limit for Japanese and Korean games - does that mean you can't have 6 or more without some graphics glitching?

Link to comment
Share on other sites

I opened a/0/2/3 (which contains in-game fonts) with crystal tile and extracted NFTR files. I've confirmed it myself that neither of 4 Pokemon BW(2) fonts have letters АБВГД included, despite having other 28. Nice trolling, Game Freak...

Link to comment
Share on other sites

When looking into NFTR file further, I found something that looks like the glyph<->character definition. I don't have full spec on NFTR format, but the data look this way:

0x03C1D0 0000 FFFF 0200 0000 B008 0400 B211 [color="Silver"]A100[/color]
0x03C1E0 5F00 [color="Red"]5201 AB00 5301 AC00 5E01 AD00 5F01[/color]
0x03C1F0 [color="Red"]AE00[/color] [color="Blue"]3504 AF00 3604 B000 3704 B100 3804[/color]
0x03C200 [color="Blue"]B200 3904 B300 3A04 B400 3B04 B500 3C04[/color]
0x03C210 [color="Blue"]B600 3D04 B700 3E04 B800 3F04 B900 4004[/color]
0x03C220 [color="Blue"]BA00 4104 BB00 4204 BC00 4304 BD00 4404[/color]
0x03C230 [color="Blue"]BE00 4504 BF00 4604 C000 4704 C100 4804[/color]
0x03C240 [color="Blue"]C200 4904 C300 4A04 C400 4B04 C500 4C04[/color]
0x03C250 [color="Blue"]C600 4D04 C700 4E04 C800 4F04 C900 5104[/color]
0x03C260 CA00 1020 CB00 1520 CC00 1820 CD00 1920
0x03C270 CE00 1C20 CF00 1D20 D000 1E20 D100 2020
0x03C280 D200 2120 D300 2520 D400 2620 D500 3020

"Universal" section of Cyrillic alphabet (used by most countries) has 32 uppercase letters in 0x0410-0x042F range and 32 lowercase letters in 0x0430-0x044F:

http://jrgraphix.net/r/Unicode/0400-04FF. Inclusion of 0x0451 (ё) tells us that the intended alphabet was Russian - other languages have different sets of alphabets.

If you take a look into code extract above, blue section shows the remains of Russian alphabet. If it continued this way, first lowercase letter mapping would be at 0x03C1DE. Instead, we have 4 "red" characters in 0x015* section of Unicode, and before that, the data seem mangled. And if you take a look at actual glyphs near that section (I can upload the BMP if you want), they correspond to following Unicode characters: ...0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF, 0x0152, 0x0153, 0x015E, 0x015F, 0x0435, 0x0436, 0x0437,0x0438... Meaning that section starting at 0x03C1E2 was custom-trimmed to make it work.

So far I have two assumptions:

1) Pokemon font was taken from some DS game that had Russian localization. Those titles are very rare (5-10 or so), but they DO exist. Since Pokemon has a lot of special characters, the glyphs that GF did know they won't use were sacrificed to allow those special characters to be included.

2) Before Pokemon Black/White release, Game Freak outsourced font design task, but when they got the results that would've work for most localisations, they've decided to customise.

Either way, out-of-structure bytes around 0x03C1D0 look like patchwork. Whoever modified the fonts, clearly didn't care about these extra characters. In font #3, used for in-battle names, there are several uppercase Cyrillic letters with data around them being "mangled" and non-structured as well.

So... no Russian names for my Pokemon :) Without those 5 first letters all I can think of are some curse words...

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...