Jump to content
The Dark Mod Forums

Recommended Posts

Posted (edited)

Hi!

 

Since the winter of 2025th I have been translating the "iris" mission. The translation is ready, but one thing - a problem with the Mason Chronicles font - prevents it from being published.

May the forum society help me with it's localization into russian language ?

 

Now it looks like this:

 

image.png.7a843a6634301f2b3b924685caf22cab.png

The file, that comes with the game, contains some letters. But not all of them. Wiki says:

Quote

At this point, the /russian/ versions of the seven bitmap shaders were frozen, and remain unchanged to the current day (unless DarkFate independently has made further alterations; beyond our scope here). [There was a 2021 touch of all font file dates... was anything changed then?]

While a Russian "mason_glow" font was created and shipped, it is merely a placeholder: an exact duplicate of "mason", in regard to the content of their DAT files and their sets of DDS files. Instead, the Russian deployment provides a substitute visual effect by rendering each character twice.

So the font modification was not finished 4 years ago.

 

Ok. I found russian version of Mason font in TTF:

image.thumb.png.4625966b0d21a990c231702d0a3dd155.png

And tried to converi it with  ExportFontToDoom3  and GIMP. I typed the command:

ExportFontToDoom3 masonchronicles3.ttf -size 12 -size 24 -size 48,

It worked, but TGA  font files contain only english letters:

 

image.png.1c4a40439197781bcc0d2989eb919dbc.png

 

Where is my mistake ?

 

 

 

 

Edited by kalinovka
duplicate images
  • kalinovka changed the title to Font localization
Posted (edited)
On 5/27/2025 at 8:12 AM, Geep said:

you may have better luck with ExportFontToDoom3All256, described and available here:

https://wiki.thedarkmod.com/index.php?title=ExportFontToDoom3

Beyond that, I haven't done anything personally with Russian fonts. Maybe the folks at DarkFate have further ideas about conversion from TTF to DAT/DDS (e.g., via some font editor?)

Thanks for your reply. I tried to run ExportFontToDoom3All256. Result is the same. The cause is that it takes only positions 0 -255 from the TTF. But cyrillic letters are located at 1025 - 1115 positions.

 

Edited by kalinovka
Posted

@kalinovka, probably no quick solution. I imagine, with a font editor that reads/writes TTFs, you could relocate the Cyrillic down to the 0-255 range in a custom TTF, which could then be processed by ExportFont3All256.

Or, if you know C++, you could make a variant version of ExportFontDoom3All256 with a different input range (both start and end) in the loop.* The wiki page contains a link to the source code for a Visual Studio build.

In either case, you'd want to order the glyphs (or glyph processing) as Win-1251 (and TDM) expects, so the generated .DAT files would require minimal fixup.

* Specifically, you'd start with FontExporter.cpp, and in function FontExporter::export_, change the loop indices of:
    // Export all characters.
    for (int characterCode = 0; characterCode < Font::numCharactersToExport; characterCode++)

  ...

But if that was all it took, I'd be very surprised.

Posted


@kalinovka, I'm assuming your TTF font codepoints are those of Unicode. A conversion to Win1251 would use this map:

https://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1251.TXT


The lower 128 are just ASCII, where Unicode and Win1251 use the same number.

The upper 128 contain both the 90 codepoints you mentioned (starting with 1025 aka 0x0401), interposed with other characters. A proper rendering for TDM would include all these characters.


It is possible that some old-school font editor already has an export profile for Win1251.

As for hacking up a variant of ExportFontDoom3All256, you'd need to write a static array, holding Unicode values from CP1251.TXT. You could just do the upper 128 if you want, as shown next.

Example:

const static unsigned long UnicodeFor1251::array[] =
{
  0x0402, // 0x80 CYRILLIC CAPITAL LETTER DJE
  0x0403, // 0x81 CYRILLIC CAPITAL LETTER GJE
  ... // more tedious or fancy editing here
}

Then the code loop would be something like [NOT TESTED]:
 

    // Export all characters.
    unsigned long sourceCharacterCode;
    for (int outputCharacterCode = 0; outputCharacterCode < Font::numCharactersToExport; outputCharacterCode++)
    {
        if(outputCharacterCode < 128)
            sourceCharacterCode = outputCharacterCode;
        else
            sourceCharacterCode = UnicodeFor1251[outputCharacterCode - 128];
        bool okay = exportCharacter(sourceCharacterCode, outputCharacterCode);
        if (!okay)
        {
            std::cerr
                << "Error: Unable to export character " 
                << getCharacterCodeString(characterCode) << "."
                << std::endl;

            return false;
        }
    }
    ...

Further down in FontExporter.cpp, more changes...

bool FontExporter::exportCharacter(unsigned long sourceCharacterCode, outputCharacterCode) // WAS single parameter characterCode
{
    Doom3GlyphDescriptor* doom3GlyphDescriptor = 0;

    // Get the index of the glyph that represents this character.
    int glyphIndex = self.font->getGlyphIndexForCharacterCode(sourceCharacterCode); // WAS characterCode
   ...
                // Create a descriptor for the current glyph.
            doom3GlyphDescriptor = &self.doom3GlyphDescriptors[outputCharacterCode]; // WAS characterCode
   ...
}

After a successul export, there's still lots more testing and tweaking to be done, e.g., with datBounds, refont, if you want best character spacing and presentation.
Also, TDM treats codepoint 0xFF specially, as mentioned in https://wiki.thedarkmod.com/index.php?title=I18N_-_Charset

 

Posted (edited)
44 minutes ago, Geep said:


@kalinovka, I'm assuming your TTF font codepoints are those of Unicode. A conversion to Win1251 would use this map:

 

 

Hi! Thanks for your reply. I am not a programmer at all (I graduated foreign languages faculty 20 years ago), so these things look tricky for me. Bu I will try all my best to patch the font.

It is interesting that Carleton font has been already converted to dds with all cyrillic letters. But who had done this work, I was not able to find.

I temporary changed Mason to Carleton, but I don't like the result. So I will continue my experiments.

The task of mission translation seemed simple for me, but for months later it look like a real quest.

If it happens successfully, at least it allows to update fonts in the next version of TDM..

 

One more question - may you tell me how to transform dat files to dds ?

I used the refont ulility, but it creates only a dat file. What should be done next ?

Edited by kalinovka
Posted
1 hour ago, kalinovka said:

One more question - may you tell me how to transform dat files to dds ?

I used the refont ulility, but it creates only a dat file. What should be done next ?

Yes, refont just makes it easier to make changes to a .dat file (via human-editable .ref file).

To transform your .tga's into .dds, either -

But more typically, with GIMP, all the .tga's associated with one of the three TDM-supported font sizes are read in as separate layers, to a common GIMP project file (saved as an .xcf file). Ordinarily, you set only 1 layer visible.

If you do any bitmap editing, the .xcf file becomes in effect the source master. Having all the files together as layers makes it easier to move a glyph (or copy parts of glyphs) from one layer to another.

You use GIMP's Export feature (you specify the .dds extension up the top entry part to tell it the format). Be sure to generate mipmaps.

See:

https://wiki.thedarkmod.com/index.php?title=DDS_Creation_with_GIMP

https://wiki.thedarkmod.com/index.php?title=Font_Bitmaps_in_DDS_Files
particularly "Editing a Bitmap"

Posted
1 hour ago, kalinovka said:

It is interesting that Carleton font has been already converted to dds with all cyrillic letters. But who had done this work, I was not able to find.

Evidently a significant portion of the Cyrillic work was done by Keeper_Riff (in conjunction with Tels) back in 2011. These folks are not active in TDM these days.

Keeper_Riff outlined a workflow, starting with FontLab to edit TTF files...
https://forums.thedarkmod.com/index.php?/topic/12863-translating-the-tdm-gui/page/12/#findComment-271548

Specifically Carleton:
https://forums.thedarkmod.com/index.php?/topic/12863-translating-the-tdm-gui/page/4/#findComment-262135

Posted

Regarding the existing Russian version of TDM's MasonAlternative font, this had a different origin than those Russian fonts processed by Riff_Keeper.

Tels created this in 2012. He started from bitmaps of an ASCII Mason font, then used his Perl patch program to copy selected ASCII glyphs (that resemble in some way Cyrillic) to new font "MasonAlternative". See https://forums.thedarkmod.com/index.php?/topic/12863-translating-the-tdm-gui/page/15/#findComment-274617

In GIMP, he flipped or otherwise hand-edited to make them Cyrillic. He said, "There are still a few dozen missing, but this is enough to render the two headlines we have (New Mission and Setting)"
https://forums.thedarkmod.com/index.php?/topic/12863-translating-the-tdm-gui/page/15/#findComment-274623

This accounts for the incomplete coverage.

Speculatively, he took this approach because it couldn't find a Mason-style TTF font with both Russian characters and an acceptable license (e.g., public domain, or at the least freely redistributable for non-commercial use).

@kalinovka,I wonder what the licensing is for your masonchronicles3.ttf.

Posted (edited)

@Geep  ,

thanks for your answers.

 

Today I spent 3 or 4 hours trying to edit ttf. i used Font Lab 8 for it.

I opened the font file (it was in utf encoding). Then I tried to recode it into cp-1251 and failed.

masonchronicles3.ttf has an unknown license status, of course. But if my attempts lead to good results, I can draw letters in ttf by myself.

 

1 hour ago, Geep said:

Tels created this in 2012. He started from bitmaps of an ASCII Mason font, then used his Perl patch program to copy selected ASCII glyphs (that resemble in some way Cyrillic) to new font "MasonAlternative". See https://forums.thedarkmod.com/index.php?/topic/12863-translating-the-tdm-gui/page/15/#findComment-274617

Tels' unfinished files - are they still available ? Can I continue his work from where he stopped it ? That DDSes made by him are available in the TDM folders, but I have not found sources with .tda or ttf.

 

And I still can't understand how to convert DAT into TGA or DDS.

 

 

Edited by kalinovka
Posted
23 hours ago, kalinovka said:

Today I spent 3 or 4 hours trying to edit ttf. i used Font Lab 8 for it.

I opened the font file (it was in utf encoding). Then I tried to recode it into cp-1251 and failed.

masonchronicles3.ttf has an unknown license status, of course. But if my attempts lead to good results, I can draw letters in ttf by myself.

I haven't used Font Lab, but perhaps there's an online user community that can help.

Drawing font glyphs is challenging but yes possible.

23 hours ago, kalinovka said:

Tels' unfinished files - are they still available ? Can I continue his work from where he stopped it ? That DDSes made by him are available in the TDM folders, but I have not found sources with .tda or ttf.

 

And I still can't understand how to convert DAT into TGA or DDS.

I can help you with Mason files, but I need to find the right version... I'll get back to you.

As for DAT, think of it this way: a TDM file is described by BOTH DAT and TGA/DDS. DAT has the metadata needed for character spacing and scaling. TGA/DDS has the glyph images.

See https://wiki.thedarkmod.com/index.php?title=Font_Metrics_%26_DAT_File_Format

Posted

Just to complicate your life, there are 3 additional aspects to consider about the circa-2014 Mason files, and subsequent circa-2017 improvements to the 'english' version perhaps applicable to your work. (These issues are covered in the wiki "Mason Font" article, with a bit more in my "Analysis of 2.12 TDM Fonts", https://forums.thedarkmod.com/index.php?/topic/22427-analysis-of-212-tdm-fonts/. The 2017 changes can be seen in the *current* 2.13 TDM English Mason files.)


1) Need for custom DAT-scaling on certain Mason characters
The source TTF had upper-case and lower-case characters that were early-on considered too similar to size. So (before 2014) in the DAT, selective per-character scaling was used to differentiate them.  See https://wiki.thedarkmod.com/index.php?title=Font_Metrics_%26_DAT_File_Format#Per-Character_Font_Scaling for details.

As you add new characters, you should do likewise (relatively easy with refont).

2) Creating the "glow" of mason_glow

How Tels created the glow (for 'english' carleton & mason) is discussed in reasonable detail here:

https://forums.thedarkmod.com/index.php?/topic/12863-translating-the-tdm-gui/page/5/#findComment-262661

That could be done for Russian too, which I recall currently fakes a glow, and possibly would require a minor GUI or engine code change to use.

Note: To best accommodate glow and retain GIMP-visualization-alignment between base and glow characters, Tels moved some base characters within their bitmap, to keep their glyphs 2-3 pixels away from any bitmap edge. You should consider this when placing new base glyphs.

Note: For the 3 mason bitmaps doubled in size circa-2017 as discussed next, the mason_glow bitmaps were also doubled.

3) Extensive bitmap editing to solve main menu character jaggedness.

On Oct. 5, 2017, @Springheel in https://forums.thedarkmod.com/index.php?/topic/19129-menu-update/#findComment-412921 said:

"Looking at the Mason fonts, it looks like they were super low res to begin with, and were then just resized [presumably referring to per-character scaling], making them even worse. I'll see what I can do." [Further on, referring to fonts in the TDM menu system:] "It appears that resizing the dds file to make it higher res is possible, so I'll proceed."

Later, on Oct 13, 2017, he concluded within a "More detailed list of changes: "Updated the menu fonts, which were surprisingly bad before"

Unfortunately, I couldn't find details on how this work was actually done. I assume the bitmap editing was all done in GIMP. It started with doubling the size of certain bitmaps from 256x256 to 512x512. This was done for the first 3 bitmaps (i.e., those with ASCII, some Latin-1). Then characters were made more crisp and smooth-edged. How? Dunno. Also, some odd but harmless artifacts happened within GIMP (noted in https://forums.thedarkmod.com/index.php?/topic/22427-analysis-of-212-tdm-fonts/page/3/#findComment-499660)

  • 1 month later...
Posted

@kalinovka, I hope you're making some progress on what you need for your Iris FM. I'm sorry if I scared you off with all my observations. Regrettably, I can't really offer you any significant work-sharing. I'm directing my time towards European fonts and translations, which overall are in far more meager condition that the Russian fonts and translations. But I do think what you're undertaking is valuable.

Posted
11 hours ago, Geep said:

@kalinovka, I hope you're making some progress on what you need for your Iris FM. I'm sorry if I scared you off with all my observations. Regrettably, I can't really offer you any significant work-sharing. I'm directing my time towards European fonts and translations, which overall are in far more meager condition that the Russian fonts and translations. But I do think what you're undertaking is valuable.

Hi! No, still no progress. I spent a month, but without any success due to the lack of skill and experience in works with fonts.

I Installed Font Lab, tryed to conver cp1256 into utf, but without any success. 

I to take a random free cyrillic font and convert it into dds. No result.

Thanks for your instructions, they helped to clarify me the basics of TDM sources.  I even translated some texts into my native language.

But I can't understand how to convert all TTF symbols into TDM DDS (utilities work only for english letters). I think ExportFont3All256 should be patched.

Or another variant - to delete all latin letters from TTF file, and to leave only cyrillic. i tried to do that, but  result is the same.

The letters and simbols are absent but the cells in the file don't disappear.  They are empty.

I perform different experiments, and have not succeeded yet.

 

 

Posted

Perhaps I can help move you along.

As you know, for TDM 2.13, in tdm_fonts01.pk4/dds/fonts/russian/mason/ there are 7 256x256 masonalternative_n_48.dds files (where n = 0 to 6). There is also the corresponding tdm_fonts01/fonts/russian/mason/fontmage_48.dat

Suppose I arrange to generate 1 or more supplemental dds files, starting with n = 7. These would have Cyrillic glyphs that are missing (or where the existing glyphs would be better replaced with new ones). In advance, you would have to decide exactly which characters these are. To help with that, I have run "refont -stats fontimage_48.dat" (including the russian annotations file). [This crashed at first, so needed a minor bug fix; will release an update]

Here is the resulting raw analysis. You can see that Latin character glyphs standin for many Cyrillic ones... probably just fine in most cases. Other cases not so fine, or the character is missing as indicated by ".", " ", or hollow box.
 

Spoiler

Font Glyph Statistics for Font MasonAlternate, in File:
    "fontimage_48.dat"
    of 1/17/2021 5:57:51 AM

DAT or REF file analysis here is primarily designed to benefit english/european fonts.
Counts reported are out of 256 character codepoints.
Counts of problems should be considered minimums, since no inspection of bitmap files (TGA or DSS) is done.
Itemizations include annotations from 'ref_char_annotation' file.

For this DAT or REF, the glyph in the upper left corner of bitmap 0, typically used for missing characters, is
assumed to be a 'Hollow Box' glyph.  (It is not the <Space> character.)

Specific tests for these and related 'Zero Box' are:
    'Hollow Box' = glyph's 'shadername' is <fontname>_0_<size>.dds only, and s & t are zero, but not s2 & t2
    '<Space>' = same test as 'Hollow Box', but pointed to by char 32 (0x20)
    'Zero Box' = No glyph box (s, t, s2, t2 all zero)

Pass 1 - Handling of unprintable/unsupported/missing codepoints,
    indicated by 'Hollow Box' or 'Zero Box'.

    Totals:
            Out of 33 expected in lower range (i.e., first 32 control characters + 127 (0x7f) Delete), and shown as...
        33    ...Hollow Box
        0    ...Zero Box
            Out of 4 expected in upper range (0x8f & 0x9f Undefined, 0xa0 NBSP, 0xad SHY), & shown as...
        2    ...Hollow Box
        0    ...Zero Box
            Undesirable in lower range, and shown as...
        0    ...Hollow Box
        0    ...Zero Box
            Undesirable in upper range, and shown as...
        30    ...Hollow Box
        0    ...Zero Box

        65    Overall, out of 256

    Itemized - Expected Hollow Box or Zero Box but Was Neither:
        char 160 (0xa0) // 160 is U+00A0 NO-BREAK SPACE (NBSP)
        char 173 (0xad) // 173 is U+00AD SOFT HYPHEN (SHY)

    Itemized - Undesirable Hollow or Zero Box:
        char 128 (0x80) // 128 is U+0402 CYRILLIC CAPITAL LETTER DJE: Ђ
        char 129 (0x81) // 129 is U+0403 CYRILLIC CAPITAL LETTER GJE: Ѓ
        char 130 (0x82) // 130 is U+201A SINGLE LOW-9 QUOTATION MARK: ‚
        char 131 (0x83) // 131 is U+0453 CYRILLIC SMALL LETTER GJE: ѓ
        char 132 (0x84) // 132 is U+201E DOUBLE LOW-9 QUOTATION MARK: „
        char 133 (0x85) // 133 is U+2026 HORIZONTAL ELLIPSIS: …
        char 134 (0x86) // 134 is U+2020 DAGGER: †
        char 135 (0x87) // 135 is U+2021 DOUBLE DAGGER: ‡
        char 136 (0x88) // 136 is U+20AC EURO SIGN: €
        char 137 (0x89) // 137 is U+2030 PER MILLE SIGN: ‰
        char 138 (0x8a) // 138 is U+0409 CYRILLIC CAPITAL LETTER LJE: Љ
        char 139 (0x8b) // 139 is U+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK: ‹
        char 140 (0x8c) // 140 is U+040A CYRILLIC CAPITAL LETTER NJE: Њ
        char 141 (0x8d) // 141 is U+040C CYRILLIC CAPITAL LETTER KJE: Ќ
        char 142 (0x8e) // 142 is U+040B CYRILLIC CAPITAL LETTER TSHE: Ћ
        char 144 (0x90) // 144 is U+0452 CYRILLIC SMALL LETTER DJE: ђ
        char 145 (0x91) // 145 is U+2018 LEFT SINGLE QUOTATION MARK: ‘
        char 146 (0x92) // 146 is U+2019 RIGHT SINGLE QUOTATION MARK: ’
        char 147 (0x93) // 147 is U+201C LEFT DOUBLE QUOTATION MARK: “
        char 148 (0x94) // 148 is U+201D RIGHT DOUBLE QUOTATION MARK: ”
        char 149 (0x95) // 149 is U+2022 BULLET: •
        char 150 (0x96) // 150 is U+2013 EN DASH: –
        char 151 (0x97) // 151 is U+2014 EM DASH: —
        char 152 (0x98) // 152 is undefined in Windows-1251 and TDM
        char 153 (0x99) // 153 is U+2122 TRADE MARK SIGN: ™
        char 154 (0x9a) // 154 is U+0459 CYRILLIC SMALL LETTER LJE: љ
        char 155 (0x9b) // 155 is U+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK: ›
        char 156 (0x9c) // 156 is U+045A CYRILLIC SMALL LETTER NJE: њ
        char 157 (0x9d) // 157 is U+045C CYRILLIC SMALL LETTER KJE: ќ
        char 158 (0x9e) // 158 is U+045B CYRILLIC SMALL LETTER TSHE: ћ

Pass 2 - Bad glyph box (negative s, t, s2, or t2; or s2 <= s, t2 <= t)
    or good glyph box with dubious metrics (imageHeight <= 0, imageWidth <=0, imageHeight != height).
    Except special case of space char (decimal 32, 0x20), which could be correct with imageHeight & height of zero.
    Excludes those already counted as 'Undesirable Hollow or Zero Box' in Pass 1.

    Totals:
        2    Bad boxes
        0    Dubious metrics

    Itemized - Bad Boxes:
        char 160 (0xa0) // 160 is U+00A0 NO-BREAK SPACE (NBSP)
        char 170 (0xaa) // 170 is U+0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE: Є


Pass 3 - Detection of duplicate glyph boxes (other than Hollow Box, Zero Box, or <Space>).
    Detected by: glyph's values for shadername and {coord_s, coord_t, coord_s2, coord_t2} exactly match those of another codepoint.

    Dup Set 1 in fonts/MasonAlternate_0_48.tga at { 48, 112,  59, 119}
            char  46 (0x2e) // 46 is U+002E FULL STOP (i.e., period): "." 
            char 180 (0xb4) // 180 is U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN: ґ
            char 185 (0xb9) // 185 is U+2116 NUMERO SIGN: №
            char 186 (0xba) // 186 is U+0454 CYRILLIC SMALL LETTER UKRAINIAN IE: є
            char 196 (0xc4) // 196 is U+0414 CYRILLIC CAPITAL LETTER DE: Д
            char 214 (0xd6) // 214 is U+0426 CYRILLIC CAPITAL LETTER TSE: Ц
            char 215 (0xd7) // 215 is U+0427 CYRILLIC CAPITAL LETTER CHE: Ч
            char 216 (0xd8) // 216 is U+0428 CYRILLIC CAPITAL LETTER SHA: Ш
            char 217 (0xd9) // 217 is U+0429 CYRILLIC CAPITAL LETTER SHCHA: Щ
            char 219 (0xdb) // 219 is U+042B CYRILLIC CAPITAL LETTER YERU: Ы
            char 222 (0xde) // 222 is U+042E CYRILLIC CAPITAL LETTER YU: Ю
            char 225 (0xe1) // 225 is U+0431 CYRILLIC SMALL LETTER BE: б
            char 228 (0xe4) // 228 is U+0434 CYRILLIC SMALL LETTER DE: д
            char 230 (0xe6) // 230 is U+0436 CYRILLIC SMALL LETTER ZHE: ж
            char 244 (0xf4) // 244 is U+0444 CYRILLIC SMALL LETTER EF: ф
            char 246 (0xf6) // 246 is U+0446 CYRILLIC SMALL LETTER TSE: ц
            char 247 (0xf7) // 247 is U+0447 CYRILLIC SMALL LETTER CHE: ч
            char 248 (0xf8) // 248 is U+0448 CYRILLIC SMALL LETTER SHA: ш
            char 249 (0xf9) // 249 is U+0449 CYRILLIC SMALL LETTER SHCHA: щ
            char 251 (0xfb) // 251 is U+044B CYRILLIC SMALL LETTER YERU: ы
            char 253 (0xfd) // 253 is U+044D CYRILLIC SMALL LETTER E: э
            char 254 (0xfe) // 254 is U+044E CYRILLIC SMALL LETTER YU: ю
            char 255 (0xff) // 255 is remapped to 182 for U+044F CYRILLIC SMALL LETTER YA: я (TDM only)
    Dup Set 2 in fonts/MasonAlternate_0_48.tga at {188, 128, 223, 162}
            char  65 (0x41) // 65 is U+0041 LATIN CAPITAL LETTER A: A 
            char 192 (0xc0) // 192 is U+0410 CYRILLIC CAPITAL LETTER A: А
    Dup Set 3 in fonts/MasonAlternate_0_48.tga at {128, 172, 159, 204}
            char  66 (0x42) // 66 is U+0042 LATIN CAPITAL LETTER B: B 
            char 194 (0xc2) // 194 is U+0412 CYRILLIC CAPITAL LETTER VE: В
    Dup Set 4 in fonts/MasonAlternate_0_48.tga at {192, 172, 225, 203}
            char  67 (0x43) // 67 is U+0043 LATIN CAPITAL LETTER 😄
            char 209 (0xd1) // 209 is U+0421 CYRILLIC CAPITAL LETTER ES: С
    Dup Set 5 in fonts/MasonAlternate_0_48.tga at { 96, 172, 123, 205}
            char  69 (0x45) // 69 is U+0045 LATIN CAPITAL LETTER E: E 
            char 197 (0xc5) // 197 is U+0415 CYRILLIC CAPITAL LETTER IE: Е
    Dup Set 6 in fonts/MasonAlternate_1_48.tga at {  4,  57,  21,  97}
            char  73 (0x49) // 73 is U+0049 LATIN CAPITAL LETTER I: I 
            char 178 (0xb2) // 178 is U+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I: І
    Dup Set 7 in fonts/MasonAlternate_1_48.tga at { 64,  64,  98,  98}
            char  75 (0x4b) // 75 is U+004B LATIN CAPITAL LETTER K: K 
            char 202 (0xca) // 202 is U+041A CYRILLIC CAPITAL LETTER KA: К
    Dup Set 8 in fonts/MasonAlternate_1_48.tga at {192,  64, 236,  99}
            char  77 (0x4d) // 77 is U+004D LATIN CAPITAL LETTER M: M 
            char 204 (0xcc) // 204 is U+041C CYRILLIC CAPITAL LETTER EM: М
    Dup Set 9 in fonts/MasonAlternate_1_48.tga at { 64, 128, 101, 161}
            char  78 (0x4e) // 78 is U+004E LATIN CAPITAL LETTER N: N 
            char 207 (0xcf) // 207 is U+041F CYRILLIC CAPITAL LETTER PE: П
    Dup Set 10 in fonts/MasonAlternate_1_48.tga at { 64, 174, 103, 205}
            char  79 (0x4f) // 79 is U+004F LATIN CAPITAL LETTER O: O 
            char 206 (0xce) // 206 is U+041E CYRILLIC CAPITAL LETTER O: О
    Dup Set 11 in fonts/MasonAlternate_1_48.tga at {128, 128, 156, 161}
            char  80 (0x50) // 80 is U+0050 LATIN CAPITAL LETTER P: P 
            char 208 (0xd0) // 208 is U+0420 CYRILLIC CAPITAL LETTER ER: Р
    Dup Set 12 in fonts/MasonAlternate_1_48.tga at { 32,  64,  55,  95}
            char  83 (0x53) // 83 is U+0053 LATIN CAPITAL LETTER S: S 
            char 189 (0xbd) // 189 is U+0405 CYRILLIC CAPITAL LETTER DZE: Ѕ
    Dup Set 13 in fonts/MasonAlternate_1_48.tga at {146, 169, 179, 209}
            char  84 (0x54) // 84 is U+0054 LATIN CAPITAL LETTER T: T 
            char 210 (0xd2) // 210 is U+0422 CYRILLIC CAPITAL LETTER TE: Т
    Dup Set 14 in fonts/MasonAlternate_2_48.tga at {198,   6, 232,  41}
            char  88 (0x58) // 88 is U+0058 LATIN CAPITAL LETTER X: X 
            char 213 (0xd5) // 213 is U+0425 CYRILLIC CAPITAL LETTER HA: Х
    Dup Set 15 in fonts/MasonAlternate_2_48.tga at {  0,  64,  33,  98}
            char  89 (0x59) // 89 is U+0059 LATIN CAPITAL LETTER Y: Y 
            char 211 (0xd3) // 211 is U+0423 CYRILLIC CAPITAL LETTER U: У
    Dup Set 16 in fonts/MasonAlternate_0_48.tga at {192,  96, 218, 121}
            char  97 (0x61) // 97 is U+0061 LATIN SMALL LETTER A: a 
            char 224 (0xe0) // 224 is U+0430 CYRILLIC SMALL LETTER A: а
    Dup Set 17 in fonts/MasonAlternate_0_48.tga at {224,  96, 247, 119}
            char  98 (0x62) // 98 is U+0062 LATIN SMALL LETTER B: b 
            char 226 (0xe2) // 226 is U+0432 CYRILLIC SMALL LETTER VE: в
    Dup Set 18 in fonts/MasonAlternate_1_48.tga at {  0, 192,  25, 214}
            char  99 (0x63) // 99 is U+0063 LATIN SMALL LETTER 😄
            char 241 (0xf1) // 241 is U+0441 CYRILLIC SMALL LETTER ES: с
    Dup Set 19 in fonts/MasonAlternate_1_48.tga at {  0, 224,  21, 248}
            char 101 (0x65) // 101 is U+0065 LATIN SMALL LETTER E: e 
            char 229 (0xe5) // 229 is U+0435 CYRILLIC SMALL LETTER IE: е
    Dup Set 20 in fonts/MasonAlternate_2_48.tga at { 64,  64,  93,  88}
            char 104 (0x68) // 104 is U+0068 LATIN SMALL LETTER H: h 
            char 237 (0xed) // 237 is U+043D CYRILLIC SMALL LETTER EN: н
    Dup Set 21 in fonts/MasonAlternate_1_48.tga at { 32, 160,  46, 192}
            char 105 (0x69) // 105 is U+0069 LATIN SMALL LETTER I: i 
            char 179 (0xb3) // 179 is U+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I: і
    Dup Set 22 in fonts/MasonAlternate_2_48.tga at { 64,  96,  78, 135}
            char 106 (0x6a) // 106 is U+006A LATIN SMALL LETTER J: j 
            char 188 (0xbc) // 188 is U+0458 CYRILLIC SMALL LETTER JE: ј
    Dup Set 23 in fonts/MasonAlternate_1_48.tga at { 32, 224,  58, 249}
            char 107 (0x6b) // 107 is U+006B LATIN SMALL LETTER K: k 
            char 234 (0xea) // 234 is U+043A CYRILLIC SMALL LETTER KA: к
    Dup Set 24 in fonts/MasonAlternate_2_48.tga at {128,  64, 161,  88}
            char 109 (0x6d) // 109 is U+006D LATIN SMALL LETTER M: m 
            char 236 (0xec) // 236 is U+043C CYRILLIC SMALL LETTER EM: м
    Dup Set 25 in fonts/MasonAlternate_2_48.tga at {192,  64, 220,  88}
            char 110 (0x6e) // 110 is U+006E LATIN SMALL LETTER N: n 
            char 239 (0xef) // 239 is U+043F CYRILLIC SMALL LETTER PE: п
    Dup Set 26 in fonts/MasonAlternate_2_48.tga at {128,  96, 157, 118}
            char 111 (0x6f) // 111 is U+006F LATIN SMALL LETTER O: o 
            char 238 (0xee) // 238 is U+043E CYRILLIC SMALL LETTER O: о
    Dup Set 27 in fonts/MasonAlternate_2_48.tga at { 96, 128, 117, 152}
            char 112 (0x70) // 112 is U+0070 LATIN SMALL LETTER P: p 
            char 240 (0xf0) // 240 is U+0440 CYRILLIC SMALL LETTER ER: р
    Dup Set 28 in fonts/MasonAlternate_2_48.tga at {224,  96, 242, 118}
            char 115 (0x73) // 115 is U+0073 LATIN SMALL LETTER S: s 
            char 190 (0xbe) // 190 is U+0455 CYRILLIC SMALL LETTER DZE: ѕ
    Dup Set 29 in fonts/MasonAlternate_2_48.tga at { 64, 155,  88, 185}
            char 116 (0x74) // 116 is U+0074 LATIN SMALL LETTER T: t 
            char 242 (0xf2) // 242 is U+0442 CYRILLIC SMALL LETTER TE: т
    Dup Set 30 in fonts/MasonAlternate_2_48.tga at {128, 224, 154, 251}
            char 120 (0x78) // 120 is U+0078 LATIN SMALL LETTER X: x 
            char 245 (0xf5) // 245 is U+0445 CYRILLIC SMALL LETTER HA: х
    Dup Set 31 in fonts/MasonAlternate_2_48.tga at {160, 224, 185, 249}
            char 121 (0x79) // 121 is U+0079 LATIN SMALL LETTER Y: y 
            char 243 (0xf3) // 243 is U+0443 CYRILLIC SMALL LETTER U: у

    Total Dups: 52 (Based on: For each dup set, 1 less than the count of items within.)

SUMMARY PASSES 1-3...
    Total Glyphs Needing Work (minimum): 84

Pass 4 - Detection of identical or significantly overlapping glyph boxes (other than Hollow Box, Zero Box, or <Space>).
    that share a common floor. One of the members is a likely base, the other(s) are likely accented character(s).
    For each of the latter, the accent may or may not be missing; that can't be detected by this program.

    Overlap Set 1 in fonts/MasonAlternate_0_48.tga
            char  46 (0x2e) // 46 is U+002E FULL STOP (i.e., period): "."  at { 48, 112,  59, 119}
            char 180 (0xb4) // 180 is U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN: ґ at { 48, 112,  59, 119}
            char 185 (0xb9) // 185 is U+2116 NUMERO SIGN: № at { 48, 112,  59, 119}
            char 186 (0xba) // 186 is U+0454 CYRILLIC SMALL LETTER UKRAINIAN IE: є at { 48, 112,  59, 119}
            char 196 (0xc4) // 196 is U+0414 CYRILLIC CAPITAL LETTER DE: Д at { 48, 112,  59, 119}
            char 214 (0xd6) // 214 is U+0426 CYRILLIC CAPITAL LETTER TSE: Ц at { 48, 112,  59, 119}
            char 215 (0xd7) // 215 is U+0427 CYRILLIC CAPITAL LETTER CHE: Ч at { 48, 112,  59, 119}
            char 216 (0xd8) // 216 is U+0428 CYRILLIC CAPITAL LETTER SHA: Ш at { 48, 112,  59, 119}
            char 217 (0xd9) // 217 is U+0429 CYRILLIC CAPITAL LETTER SHCHA: Щ at { 48, 112,  59, 119}
            char 219 (0xdb) // 219 is U+042B CYRILLIC CAPITAL LETTER YERU: Ы at { 48, 112,  59, 119}
            char 222 (0xde) // 222 is U+042E CYRILLIC CAPITAL LETTER YU: Ю at { 48, 112,  59, 119}
            char 225 (0xe1) // 225 is U+0431 CYRILLIC SMALL LETTER BE: б at { 48, 112,  59, 119}
            char 228 (0xe4) // 228 is U+0434 CYRILLIC SMALL LETTER DE: д at { 48, 112,  59, 119}
            char 230 (0xe6) // 230 is U+0436 CYRILLIC SMALL LETTER ZHE: ж at { 48, 112,  59, 119}
            char 244 (0xf4) // 244 is U+0444 CYRILLIC SMALL LETTER EF: ф at { 48, 112,  59, 119}
            char 246 (0xf6) // 246 is U+0446 CYRILLIC SMALL LETTER TSE: ц at { 48, 112,  59, 119}
            char 247 (0xf7) // 247 is U+0447 CYRILLIC SMALL LETTER CHE: ч at { 48, 112,  59, 119}
            char 248 (0xf8) // 248 is U+0448 CYRILLIC SMALL LETTER SHA: ш at { 48, 112,  59, 119}
            char 249 (0xf9) // 249 is U+0449 CYRILLIC SMALL LETTER SHCHA: щ at { 48, 112,  59, 119}
            char 251 (0xfb) // 251 is U+044B CYRILLIC SMALL LETTER YERU: ы at { 48, 112,  59, 119}
            char 253 (0xfd) // 253 is U+044D CYRILLIC SMALL LETTER E: э at { 48, 112,  59, 119}
            char 254 (0xfe) // 254 is U+044E CYRILLIC SMALL LETTER YU: ю at { 48, 112,  59, 119}
            char 255 (0xff) // 255 is remapped to 182 for U+044F CYRILLIC SMALL LETTER YA: я (TDM only) at { 48, 112,  59, 119}
    Overlap Set 2 in fonts/MasonAlternate_0_48.tga
            char  65 (0x41) // 65 is U+0041 LATIN CAPITAL LETTER A: A  at {188, 128, 223, 162}
            char 192 (0xc0) // 192 is U+0410 CYRILLIC CAPITAL LETTER A: А at {188, 128, 223, 162}
    Overlap Set 3 in fonts/MasonAlternate_0_48.tga
            char  66 (0x42) // 66 is U+0042 LATIN CAPITAL LETTER B: B  at {128, 172, 159, 204}
            char 194 (0xc2) // 194 is U+0412 CYRILLIC CAPITAL LETTER VE: В at {128, 172, 159, 204}
    Overlap Set 4 in fonts/MasonAlternate_0_48.tga
            char  67 (0x43) // 67 is U+0043 LATIN CAPITAL LETTER 😄 C  at {192, 172, 225, 203}
            char 209 (0xd1) // 209 is U+0421 CYRILLIC CAPITAL LETTER ES: С at {192, 172, 225, 203}
    Overlap Set 5 in fonts/MasonAlternate_0_48.tga
            char  69 (0x45) // 69 is U+0045 LATIN CAPITAL LETTER E: E  at { 96, 172, 123, 205}
            char 197 (0xc5) // 197 is U+0415 CYRILLIC CAPITAL LETTER IE: Е at { 96, 172, 123, 205}
    Overlap Set 6 in fonts/MasonAlternate_1_48.tga
            char  73 (0x49) // 73 is U+0049 LATIN CAPITAL LETTER I: I  at {  4,  57,  21,  97}
            char 178 (0xb2) // 178 is U+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I: І at {  4,  57,  21,  97}
    Overlap Set 7 in fonts/MasonAlternate_1_48.tga
            char  75 (0x4b) // 75 is U+004B LATIN CAPITAL LETTER K: K  at { 64,  64,  98,  98}
            char 202 (0xca) // 202 is U+041A CYRILLIC CAPITAL LETTER KA: К at { 64,  64,  98,  98}
    Overlap Set 8 in fonts/MasonAlternate_1_48.tga
            char  77 (0x4d) // 77 is U+004D LATIN CAPITAL LETTER M: M  at {192,  64, 236,  99}
            char 204 (0xcc) // 204 is U+041C CYRILLIC CAPITAL LETTER EM: М at {192,  64, 236,  99}
    Overlap Set 9 in fonts/MasonAlternate_1_48.tga
            char  78 (0x4e) // 78 is U+004E LATIN CAPITAL LETTER N: N  at { 64, 128, 101, 161}
            char 207 (0xcf) // 207 is U+041F CYRILLIC CAPITAL LETTER PE: П at { 64, 128, 101, 161}
    Overlap Set 10 in fonts/MasonAlternate_1_48.tga
            char  79 (0x4f) // 79 is U+004F LATIN CAPITAL LETTER O: O  at { 64, 174, 103, 205}
            char 206 (0xce) // 206 is U+041E CYRILLIC CAPITAL LETTER O: О at { 64, 174, 103, 205}
    Overlap Set 11 in fonts/MasonAlternate_1_48.tga
            char  80 (0x50) // 80 is U+0050 LATIN CAPITAL LETTER P: P  at {128, 128, 156, 161}
            char 208 (0xd0) // 208 is U+0420 CYRILLIC CAPITAL LETTER ER: Р at {128, 128, 156, 161}
    Overlap Set 12 in fonts/MasonAlternate_1_48.tga
            char  83 (0x53) // 83 is U+0053 LATIN CAPITAL LETTER S: S  at { 32,  64,  55,  95}
            char 189 (0xbd) // 189 is U+0405 CYRILLIC CAPITAL LETTER DZE: Ѕ at { 32,  64,  55,  95}
    Overlap Set 13 in fonts/MasonAlternate_1_48.tga
            char  84 (0x54) // 84 is U+0054 LATIN CAPITAL LETTER T: T  at {146, 169, 179, 209}
            char 210 (0xd2) // 210 is U+0422 CYRILLIC CAPITAL LETTER TE: Т at {146, 169, 179, 209}
    Overlap Set 14 in fonts/MasonAlternate_2_48.tga
            char  88 (0x58) // 88 is U+0058 LATIN CAPITAL LETTER X: X  at {198,   6, 232,  41}
            char 213 (0xd5) // 213 is U+0425 CYRILLIC CAPITAL LETTER HA: Х at {198,   6, 232,  41}
    Overlap Set 15 in fonts/MasonAlternate_2_48.tga
            char  89 (0x59) // 89 is U+0059 LATIN CAPITAL LETTER Y: Y  at {  0,  64,  33,  98}
            char 211 (0xd3) // 211 is U+0423 CYRILLIC CAPITAL LETTER U: У at {  0,  64,  33,  98}
    Overlap Set 16 in fonts/MasonAlternate_0_48.tga
            char  97 (0x61) // 97 is U+0061 LATIN SMALL LETTER A: a  at {192,  96, 218, 121}
            char 224 (0xe0) // 224 is U+0430 CYRILLIC SMALL LETTER A: а at {192,  96, 218, 121}
    Overlap Set 17 in fonts/MasonAlternate_0_48.tga
            char  98 (0x62) // 98 is U+0062 LATIN SMALL LETTER B: b  at {224,  96, 247, 119}
            char 226 (0xe2) // 226 is U+0432 CYRILLIC SMALL LETTER VE: в at {224,  96, 247, 119}
    Overlap Set 18 in fonts/MasonAlternate_1_48.tga
            char  99 (0x63) // 99 is U+0063 LATIN SMALL LETTER 😄 c  at {  0, 192,  25, 214}
            char 241 (0xf1) // 241 is U+0441 CYRILLIC SMALL LETTER ES: с at {  0, 192,  25, 214}
    Overlap Set 19 in fonts/MasonAlternate_1_48.tga
            char 101 (0x65) // 101 is U+0065 LATIN SMALL LETTER E: e  at {  0, 224,  21, 248}
            char 229 (0xe5) // 229 is U+0435 CYRILLIC SMALL LETTER IE: е at {  0, 224,  21, 248}
    Overlap Set 20 in fonts/MasonAlternate_2_48.tga
            char 104 (0x68) // 104 is U+0068 LATIN SMALL LETTER H: h  at { 64,  64,  93,  88}
            char 237 (0xed) // 237 is U+043D CYRILLIC SMALL LETTER EN: н at { 64,  64,  93,  88}
    Overlap Set 21 in fonts/MasonAlternate_1_48.tga
            char 105 (0x69) // 105 is U+0069 LATIN SMALL LETTER I: i  at { 32, 160,  46, 192}
            char 179 (0xb3) // 179 is U+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I: і at { 32, 160,  46, 192}
    Overlap Set 22 in fonts/MasonAlternate_2_48.tga
            char 106 (0x6a) // 106 is U+006A LATIN SMALL LETTER J: j  at { 64,  96,  78, 135}
            char 188 (0xbc) // 188 is U+0458 CYRILLIC SMALL LETTER JE: ј at { 64,  96,  78, 135}
    Overlap Set 23 in fonts/MasonAlternate_1_48.tga
            char 107 (0x6b) // 107 is U+006B LATIN SMALL LETTER K: k  at { 32, 224,  58, 249}
            char 234 (0xea) // 234 is U+043A CYRILLIC SMALL LETTER KA: к at { 32, 224,  58, 249}
    Overlap Set 24 in fonts/MasonAlternate_2_48.tga
            char 109 (0x6d) // 109 is U+006D LATIN SMALL LETTER M: m  at {128,  64, 161,  88}
            char 236 (0xec) // 236 is U+043C CYRILLIC SMALL LETTER EM: м at {128,  64, 161,  88}
    Overlap Set 25 in fonts/MasonAlternate_2_48.tga
            char 110 (0x6e) // 110 is U+006E LATIN SMALL LETTER N: n  at {192,  64, 220,  88}
            char 239 (0xef) // 239 is U+043F CYRILLIC SMALL LETTER PE: п at {192,  64, 220,  88}
    Overlap Set 26 in fonts/MasonAlternate_2_48.tga
            char 111 (0x6f) // 111 is U+006F LATIN SMALL LETTER O: o  at {128,  96, 157, 118}
            char 238 (0xee) // 238 is U+043E CYRILLIC SMALL LETTER O: о at {128,  96, 157, 118}
    Overlap Set 27 in fonts/MasonAlternate_2_48.tga
            char 112 (0x70) // 112 is U+0070 LATIN SMALL LETTER P: p  at { 96, 128, 117, 152}
            char 240 (0xf0) // 240 is U+0440 CYRILLIC SMALL LETTER ER: р at { 96, 128, 117, 152}
    Overlap Set 28 in fonts/MasonAlternate_2_48.tga
            char 115 (0x73) // 115 is U+0073 LATIN SMALL LETTER S: s  at {224,  96, 242, 118}
            char 190 (0xbe) // 190 is U+0455 CYRILLIC SMALL LETTER DZE: ѕ at {224,  96, 242, 118}
    Overlap Set 29 in fonts/MasonAlternate_2_48.tga
            char 116 (0x74) // 116 is U+0074 LATIN SMALL LETTER T: t  at { 64, 155,  88, 185}
            char 242 (0xf2) // 242 is U+0442 CYRILLIC SMALL LETTER TE: т at { 64, 155,  88, 185}
    Overlap Set 30 in fonts/MasonAlternate_2_48.tga
            char 120 (0x78) // 120 is U+0078 LATIN SMALL LETTER X: x  at {128, 224, 154, 251}
            char 245 (0xf5) // 245 is U+0445 CYRILLIC SMALL LETTER HA: х at {128, 224, 154, 251}
    Overlap Set 31 in fonts/MasonAlternate_2_48.tga
            char 121 (0x79) // 121 is U+0079 LATIN SMALL LETTER Y: y  at {160, 224, 185, 249}
            char 243 (0xf3) // 243 is U+0443 CYRILLIC SMALL LETTER U: у at {160, 224, 185, 249}

    Total Pass 4 Overlaps: 52 (Based on: For each overlap set, 1 less than the count of items within.)

Pass 5 - Like Pass 4, but by bitmap shader name. ('Overlap Set' numbers differ here from those of Pass 4).


    In bitmap fonts/masonalternate_0_48.tga

    1) Overlap Set '46 is U+002E FULL STOP (i.e., period): "." '
            char  46 (0x2e) // 46 is U+002E FULL STOP (i.e., period): "."  at { 48, 112,  59, 119}
            char 180 (0xb4) // 180 is U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN: ґ at { 48, 112,  59, 119}
            char 185 (0xb9) // 185 is U+2116 NUMERO SIGN: № at { 48, 112,  59, 119}
            char 186 (0xba) // 186 is U+0454 CYRILLIC SMALL LETTER UKRAINIAN IE: є at { 48, 112,  59, 119}
            char 196 (0xc4) // 196 is U+0414 CYRILLIC CAPITAL LETTER DE: Д at { 48, 112,  59, 119}
            char 214 (0xd6) // 214 is U+0426 CYRILLIC CAPITAL LETTER TSE: Ц at { 48, 112,  59, 119}
            char 215 (0xd7) // 215 is U+0427 CYRILLIC CAPITAL LETTER CHE: Ч at { 48, 112,  59, 119}
            char 216 (0xd8) // 216 is U+0428 CYRILLIC CAPITAL LETTER SHA: Ш at { 48, 112,  59, 119}
            char 217 (0xd9) // 217 is U+0429 CYRILLIC CAPITAL LETTER SHCHA: Щ at { 48, 112,  59, 119}
            char 219 (0xdb) // 219 is U+042B CYRILLIC CAPITAL LETTER YERU: Ы at { 48, 112,  59, 119}
            char 222 (0xde) // 222 is U+042E CYRILLIC CAPITAL LETTER YU: Ю at { 48, 112,  59, 119}
            char 225 (0xe1) // 225 is U+0431 CYRILLIC SMALL LETTER BE: б at { 48, 112,  59, 119}
            char 228 (0xe4) // 228 is U+0434 CYRILLIC SMALL LETTER DE: д at { 48, 112,  59, 119}
            char 230 (0xe6) // 230 is U+0436 CYRILLIC SMALL LETTER ZHE: ж at { 48, 112,  59, 119}
            char 244 (0xf4) // 244 is U+0444 CYRILLIC SMALL LETTER EF: ф at { 48, 112,  59, 119}
            char 246 (0xf6) // 246 is U+0446 CYRILLIC SMALL LETTER TSE: ц at { 48, 112,  59, 119}
            char 247 (0xf7) // 247 is U+0447 CYRILLIC SMALL LETTER CHE: ч at { 48, 112,  59, 119}
            char 248 (0xf8) // 248 is U+0448 CYRILLIC SMALL LETTER SHA: ш at { 48, 112,  59, 119}
            char 249 (0xf9) // 249 is U+0449 CYRILLIC SMALL LETTER SHCHA: щ at { 48, 112,  59, 119}
            char 251 (0xfb) // 251 is U+044B CYRILLIC SMALL LETTER YERU: ы at { 48, 112,  59, 119}
            char 253 (0xfd) // 253 is U+044D CYRILLIC SMALL LETTER E: э at { 48, 112,  59, 119}
            char 254 (0xfe) // 254 is U+044E CYRILLIC SMALL LETTER YU: ю at { 48, 112,  59, 119}
            char 255 (0xff) // 255 is remapped to 182 for U+044F CYRILLIC SMALL LETTER YA: я (TDM only) at { 48, 112,  59, 119}
    2) Overlap Set '65 is U+0041 LATIN CAPITAL LETTER A: A '
            char  65 (0x41) // 65 is U+0041 LATIN CAPITAL LETTER A: A  at {188, 128, 223, 162}
            char 192 (0xc0) // 192 is U+0410 CYRILLIC CAPITAL LETTER A: А at {188, 128, 223, 162}
    3) Overlap Set '66 is U+0042 LATIN CAPITAL LETTER B: B '
            char  66 (0x42) // 66 is U+0042 LATIN CAPITAL LETTER B: B  at {128, 172, 159, 204}
            char 194 (0xc2) // 194 is U+0412 CYRILLIC CAPITAL LETTER VE: В at {128, 172, 159, 204}
    4) Overlap Set '67 is U+0043 LATIN CAPITAL LETTER 😄 C '
            char  67 (0x43) // 67 is U+0043 LATIN CAPITAL LETTER 😄 C  at {192, 172, 225, 203}
            char 209 (0xd1) // 209 is U+0421 CYRILLIC CAPITAL LETTER ES: С at {192, 172, 225, 203}
    5) Overlap Set '69 is U+0045 LATIN CAPITAL LETTER E: E '
            char  69 (0x45) // 69 is U+0045 LATIN CAPITAL LETTER E: E  at { 96, 172, 123, 205}
            char 197 (0xc5) // 197 is U+0415 CYRILLIC CAPITAL LETTER IE: Е at { 96, 172, 123, 205}
    6) Overlap Set '97 is U+0061 LATIN SMALL LETTER A: a '
            char  97 (0x61) // 97 is U+0061 LATIN SMALL LETTER A: a  at {192,  96, 218, 121}
            char 224 (0xe0) // 224 is U+0430 CYRILLIC SMALL LETTER A: а at {192,  96, 218, 121}
    7) Overlap Set '98 is U+0062 LATIN SMALL LETTER B: b '
            char  98 (0x62) // 98 is U+0062 LATIN SMALL LETTER B: b  at {224,  96, 247, 119}
            char 226 (0xe2) // 226 is U+0432 CYRILLIC SMALL LETTER VE: в at {224,  96, 247, 119}

    In bitmap fonts/masonalternate_1_48.tga

    😎 Overlap Set '73 is U+0049 LATIN CAPITAL LETTER I: I '
            char  73 (0x49) // 73 is U+0049 LATIN CAPITAL LETTER I: I  at {  4,  57,  21,  97}
            char 178 (0xb2) // 178 is U+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I: І at {  4,  57,  21,  97}
    9) Overlap Set '75 is U+004B LATIN CAPITAL LETTER K: K '
            char  75 (0x4b) // 75 is U+004B LATIN CAPITAL LETTER K: K  at { 64,  64,  98,  98}
            char 202 (0xca) // 202 is U+041A CYRILLIC CAPITAL LETTER KA: К at { 64,  64,  98,  98}
    10) Overlap Set '77 is U+004D LATIN CAPITAL LETTER M: M '
            char  77 (0x4d) // 77 is U+004D LATIN CAPITAL LETTER M: M  at {192,  64, 236,  99}
            char 204 (0xcc) // 204 is U+041C CYRILLIC CAPITAL LETTER EM: М at {192,  64, 236,  99}
    11) Overlap Set '78 is U+004E LATIN CAPITAL LETTER N: N '
            char  78 (0x4e) // 78 is U+004E LATIN CAPITAL LETTER N: N  at { 64, 128, 101, 161}
            char 207 (0xcf) // 207 is U+041F CYRILLIC CAPITAL LETTER PE: П at { 64, 128, 101, 161}
    12) Overlap Set '79 is U+004F LATIN CAPITAL LETTER O: O '
            char  79 (0x4f) // 79 is U+004F LATIN CAPITAL LETTER O: O  at { 64, 174, 103, 205}
            char 206 (0xce) // 206 is U+041E CYRILLIC CAPITAL LETTER O: О at { 64, 174, 103, 205}
    13) Overlap Set '80 is U+0050 LATIN CAPITAL LETTER P: P '
            char  80 (0x50) // 80 is U+0050 LATIN CAPITAL LETTER P: P  at {128, 128, 156, 161}
            char 208 (0xd0) // 208 is U+0420 CYRILLIC CAPITAL LETTER ER: Р at {128, 128, 156, 161}
    14) Overlap Set '83 is U+0053 LATIN CAPITAL LETTER S: S '
            char  83 (0x53) // 83 is U+0053 LATIN CAPITAL LETTER S: S  at { 32,  64,  55,  95}
            char 189 (0xbd) // 189 is U+0405 CYRILLIC CAPITAL LETTER DZE: Ѕ at { 32,  64,  55,  95}
    15) Overlap Set '84 is U+0054 LATIN CAPITAL LETTER T: T '
            char  84 (0x54) // 84 is U+0054 LATIN CAPITAL LETTER T: T  at {146, 169, 179, 209}
            char 210 (0xd2) // 210 is U+0422 CYRILLIC CAPITAL LETTER TE: Т at {146, 169, 179, 209}
    16) Overlap Set '99 is U+0063 LATIN SMALL LETTER 😄 c '
            char  99 (0x63) // 99 is U+0063 LATIN SMALL LETTER 😄 c  at {  0, 192,  25, 214}
            char 241 (0xf1) // 241 is U+0441 CYRILLIC SMALL LETTER ES: с at {  0, 192,  25, 214}
    17) Overlap Set '101 is U+0065 LATIN SMALL LETTER E: e '
            char 101 (0x65) // 101 is U+0065 LATIN SMALL LETTER E: e  at {  0, 224,  21, 248}
            char 229 (0xe5) // 229 is U+0435 CYRILLIC SMALL LETTER IE: е at {  0, 224,  21, 248}
    18) Overlap Set '105 is U+0069 LATIN SMALL LETTER I: i '
            char 105 (0x69) // 105 is U+0069 LATIN SMALL LETTER I: i  at { 32, 160,  46, 192}
            char 179 (0xb3) // 179 is U+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I: і at { 32, 160,  46, 192}
    19) Overlap Set '107 is U+006B LATIN SMALL LETTER K: k '
            char 107 (0x6b) // 107 is U+006B LATIN SMALL LETTER K: k  at { 32, 224,  58, 249}
            char 234 (0xea) // 234 is U+043A CYRILLIC SMALL LETTER KA: к at { 32, 224,  58, 249}

    In bitmap fonts/masonalternate_2_48.tga

    20) Overlap Set '88 is U+0058 LATIN CAPITAL LETTER X: X '
            char  88 (0x58) // 88 is U+0058 LATIN CAPITAL LETTER X: X  at {198,   6, 232,  41}
            char 213 (0xd5) // 213 is U+0425 CYRILLIC CAPITAL LETTER HA: Х at {198,   6, 232,  41}
    21) Overlap Set '89 is U+0059 LATIN CAPITAL LETTER Y: Y '
            char  89 (0x59) // 89 is U+0059 LATIN CAPITAL LETTER Y: Y  at {  0,  64,  33,  98}
            char 211 (0xd3) // 211 is U+0423 CYRILLIC CAPITAL LETTER U: У at {  0,  64,  33,  98}
    22) Overlap Set '104 is U+0068 LATIN SMALL LETTER H: h '
            char 104 (0x68) // 104 is U+0068 LATIN SMALL LETTER H: h  at { 64,  64,  93,  88}
            char 237 (0xed) // 237 is U+043D CYRILLIC SMALL LETTER EN: н at { 64,  64,  93,  88}
    23) Overlap Set '106 is U+006A LATIN SMALL LETTER J: j '
            char 106 (0x6a) // 106 is U+006A LATIN SMALL LETTER J: j  at { 64,  96,  78, 135}
            char 188 (0xbc) // 188 is U+0458 CYRILLIC SMALL LETTER JE: ј at { 64,  96,  78, 135}
    24) Overlap Set '109 is U+006D LATIN SMALL LETTER M: m '
            char 109 (0x6d) // 109 is U+006D LATIN SMALL LETTER M: m  at {128,  64, 161,  88}
            char 236 (0xec) // 236 is U+043C CYRILLIC SMALL LETTER EM: м at {128,  64, 161,  88}
    25) Overlap Set '110 is U+006E LATIN SMALL LETTER N: n '
            char 110 (0x6e) // 110 is U+006E LATIN SMALL LETTER N: n  at {192,  64, 220,  88}
            char 239 (0xef) // 239 is U+043F CYRILLIC SMALL LETTER PE: п at {192,  64, 220,  88}
    26) Overlap Set '111 is U+006F LATIN SMALL LETTER O: o '
            char 111 (0x6f) // 111 is U+006F LATIN SMALL LETTER O: o  at {128,  96, 157, 118}
            char 238 (0xee) // 238 is U+043E CYRILLIC SMALL LETTER O: о at {128,  96, 157, 118}
    27) Overlap Set '112 is U+0070 LATIN SMALL LETTER P: p '
            char 112 (0x70) // 112 is U+0070 LATIN SMALL LETTER P: p  at { 96, 128, 117, 152}
            char 240 (0xf0) // 240 is U+0440 CYRILLIC SMALL LETTER ER: р at { 96, 128, 117, 152}
    28) Overlap Set '115 is U+0073 LATIN SMALL LETTER S: s '
            char 115 (0x73) // 115 is U+0073 LATIN SMALL LETTER S: s  at {224,  96, 242, 118}
            char 190 (0xbe) // 190 is U+0455 CYRILLIC SMALL LETTER DZE: ѕ at {224,  96, 242, 118}
    29) Overlap Set '116 is U+0074 LATIN SMALL LETTER T: t '
            char 116 (0x74) // 116 is U+0074 LATIN SMALL LETTER T: t  at { 64, 155,  88, 185}
            char 242 (0xf2) // 242 is U+0442 CYRILLIC SMALL LETTER TE: т at { 64, 155,  88, 185}
    30) Overlap Set '120 is U+0078 LATIN SMALL LETTER X: x '
            char 120 (0x78) // 120 is U+0078 LATIN SMALL LETTER X: x  at {128, 224, 154, 251}
            char 245 (0xf5) // 245 is U+0445 CYRILLIC SMALL LETTER HA: х at {128, 224, 154, 251}
    31) Overlap Set '121 is U+0079 LATIN SMALL LETTER Y: y '
            char 121 (0x79) // 121 is U+0079 LATIN SMALL LETTER Y: y  at {160, 224, 185, 249}
            char 243 (0xf3) // 243 is U+0443 CYRILLIC SMALL LETTER U: у at {160, 224, 185, 249}

    In bitmap fonts/masonalternate_3_48.tga


    In bitmap fonts/masonalternate_4_48.tga


    In bitmap fonts/masonalternate_5_48.tga


    Total Pass 5 Overlaps: 52 (Based on: For each overlap set, 1 less than the count of items within.)

[Pass 6 not shown, not relevant to Cyrillic]

You will have to review these and the glyphs and give me a list of what is needed. For each item wanted, ideally include the codepoint in decimal & in hex, the Unicode number, Unicode name, and symbol. You can copy these from the analysis text, e.g.:

char 254 (0xfe) // 254 is U+044E CYRILLIC SMALL LETTER YU: ю

Going the supplemental route, rather than regenerating all characters, is lower risk (of screwing up the main menu) and less work.

I can try to hack up a special program version of ExportFontToDoom3All256 to generate the supplemental dds and associated dat

Then you have to -
- combine the two dat files (2.13 and new) by editing
- for the new glyphs, to be stylistically consistent, some characters will need dat-scaling by 120%; likewise baseline-shifting. All done by adjusting the dat file. I would use refont, but Font Patch could work too. datBounds can be used intermittently to visualize the results.
- it would not surprise me if some characters need their bounding box borders and/or xSkip values shifted, in the dat file.
- Sometimes too, the generation process puts glyphs too close to the upper or left edges; those could be moved with GIMP (then dat changed to match).

Let me know if this workplan is of interest.

Posted

That discussion earlier about doubling some Mason dds to 512x512... I got a little confused. That applies to only the 'english' set (that includes Cyrillic glyphs too), not the 'russian' set, which is all 256x256.

Posted
On 7/29/2025 at 12:40 AM, Geep said:

Perhaps I can help move you along.

As you know, for TDM 2.13, in tdm_fonts01.pk4/dds/fonts/russian/mason/ there are 7 256x256 masonalternative_n_48.dds files (where n = 0 to 6). There is also the corresponding tdm_fonts01/fonts/russian/mason/fontmage_48.dat

Suppose I arrange to generate 1 or more supplemental dds files, starting with n = 7. These would have Cyrillic glyphs that are missing (or where the existing glyphs would be better replaced with new ones). In advance, you would have to decide exactly which characters these are. To help with that, I have run "refont -stats fontimage_48.dat" (including the russian annotations file). [This crashed at first, so needed a minor bug fix; will release an update]

Here is the resulting raw analysis. You can see that Latin character glyphs standin for many Cyrillic ones... probably just fine in most cases. Other cases not so fine, or the character is missing as indicated by ".", " ", or hollow box.
 

  Reveal hidden contents

Font Glyph Statistics for Font MasonAlternate, in File:
    "fontimage_48.dat"
    of 1/17/2021 5:57:51 AM

DAT or REF file analysis here is primarily designed to benefit english/european fonts.
Counts reported are out of 256 character codepoints.
Counts of problems should be considered minimums, since no inspection of bitmap files (TGA or DSS) is done.
Itemizations include annotations from 'ref_char_annotation' file.

For this DAT or REF, the glyph in the upper left corner of bitmap 0, typically used for missing characters, is
assumed to be a 'Hollow Box' glyph.  (It is not the <Space> character.)

Specific tests for these and related 'Zero Box' are:
    'Hollow Box' = glyph's 'shadername' is <fontname>_0_<size>.dds only, and s & t are zero, but not s2 & t2
    '<Space>' = same test as 'Hollow Box', but pointed to by char 32 (0x20)
    'Zero Box' = No glyph box (s, t, s2, t2 all zero)

Pass 1 - Handling of unprintable/unsupported/missing codepoints,
    indicated by 'Hollow Box' or 'Zero Box'.

    Totals:
            Out of 33 expected in lower range (i.e., first 32 control characters + 127 (0x7f) Delete), and shown as...
        33    ...Hollow Box
        0    ...Zero Box
            Out of 4 expected in upper range (0x8f & 0x9f Undefined, 0xa0 NBSP, 0xad SHY), & shown as...
        2    ...Hollow Box
        0    ...Zero Box
            Undesirable in lower range, and shown as...
        0    ...Hollow Box
        0    ...Zero Box
            Undesirable in upper range, and shown as...
        30    ...Hollow Box
        0    ...Zero Box

        65    Overall, out of 256

    Itemized - Expected Hollow Box or Zero Box but Was Neither:
        char 160 (0xa0) // 160 is U+00A0 NO-BREAK SPACE (NBSP)
        char 173 (0xad) // 173 is U+00AD SOFT HYPHEN (SHY)

    Itemized - Undesirable Hollow or Zero Box:
        char 128 (0x80) // 128 is U+0402 CYRILLIC CAPITAL LETTER DJE: Ђ
        char 129 (0x81) // 129 is U+0403 CYRILLIC CAPITAL LETTER GJE: Ѓ
        char 130 (0x82) // 130 is U+201A SINGLE LOW-9 QUOTATION MARK: ‚
        char 131 (0x83) // 131 is U+0453 CYRILLIC SMALL LETTER GJE: ѓ
        char 132 (0x84) // 132 is U+201E DOUBLE LOW-9 QUOTATION MARK: „
        char 133 (0x85) // 133 is U+2026 HORIZONTAL ELLIPSIS: …
        char 134 (0x86) // 134 is U+2020 DAGGER: †
        char 135 (0x87) // 135 is U+2021 DOUBLE DAGGER: ‡
        char 136 (0x88) // 136 is U+20AC EURO SIGN: €
        char 137 (0x89) // 137 is U+2030 PER MILLE SIGN: ‰
        char 138 (0x8a) // 138 is U+0409 CYRILLIC CAPITAL LETTER LJE: Љ
        char 139 (0x8b) // 139 is U+2039 SINGLE LEFT-POINTING ANGLE QUOTATION MARK: ‹
        char 140 (0x8c) // 140 is U+040A CYRILLIC CAPITAL LETTER NJE: Њ
        char 141 (0x8d) // 141 is U+040C CYRILLIC CAPITAL LETTER KJE: Ќ
        char 142 (0x8e) // 142 is U+040B CYRILLIC CAPITAL LETTER TSHE: Ћ
        char 144 (0x90) // 144 is U+0452 CYRILLIC SMALL LETTER DJE: ђ
        char 145 (0x91) // 145 is U+2018 LEFT SINGLE QUOTATION MARK: ‘
        char 146 (0x92) // 146 is U+2019 RIGHT SINGLE QUOTATION MARK: ’
        char 147 (0x93) // 147 is U+201C LEFT DOUBLE QUOTATION MARK: “
        char 148 (0x94) // 148 is U+201D RIGHT DOUBLE QUOTATION MARK: ”
        char 149 (0x95) // 149 is U+2022 BULLET: •
        char 150 (0x96) // 150 is U+2013 EN DASH: –
        char 151 (0x97) // 151 is U+2014 EM DASH: —
        char 152 (0x98) // 152 is undefined in Windows-1251 and TDM
        char 153 (0x99) // 153 is U+2122 TRADE MARK SIGN: ™
        char 154 (0x9a) // 154 is U+0459 CYRILLIC SMALL LETTER LJE: љ
        char 155 (0x9b) // 155 is U+203A SINGLE RIGHT-POINTING ANGLE QUOTATION MARK: ›
        char 156 (0x9c) // 156 is U+045A CYRILLIC SMALL LETTER NJE: њ
        char 157 (0x9d) // 157 is U+045C CYRILLIC SMALL LETTER KJE: ќ
        char 158 (0x9e) // 158 is U+045B CYRILLIC SMALL LETTER TSHE: ћ

Pass 2 - Bad glyph box (negative s, t, s2, or t2; or s2 <= s, t2 <= t)
    or good glyph box with dubious metrics (imageHeight <= 0, imageWidth <=0, imageHeight != height).
    Except special case of space char (decimal 32, 0x20), which could be correct with imageHeight & height of zero.
    Excludes those already counted as 'Undesirable Hollow or Zero Box' in Pass 1.

    Totals:
        2    Bad boxes
        0    Dubious metrics

    Itemized - Bad Boxes:
        char 160 (0xa0) // 160 is U+00A0 NO-BREAK SPACE (NBSP)
        char 170 (0xaa) // 170 is U+0404 CYRILLIC CAPITAL LETTER UKRAINIAN IE: Є


Pass 3 - Detection of duplicate glyph boxes (other than Hollow Box, Zero Box, or <Space>).
    Detected by: glyph's values for shadername and {coord_s, coord_t, coord_s2, coord_t2} exactly match those of another codepoint.

    Dup Set 1 in fonts/MasonAlternate_0_48.tga at { 48, 112,  59, 119}
            char  46 (0x2e) // 46 is U+002E FULL STOP (i.e., period): "." 
            char 180 (0xb4) // 180 is U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN: ґ
            char 185 (0xb9) // 185 is U+2116 NUMERO SIGN: №
            char 186 (0xba) // 186 is U+0454 CYRILLIC SMALL LETTER UKRAINIAN IE: є
            char 196 (0xc4) // 196 is U+0414 CYRILLIC CAPITAL LETTER DE: Д
            char 214 (0xd6) // 214 is U+0426 CYRILLIC CAPITAL LETTER TSE: Ц
            char 215 (0xd7) // 215 is U+0427 CYRILLIC CAPITAL LETTER CHE: Ч
            char 216 (0xd8) // 216 is U+0428 CYRILLIC CAPITAL LETTER SHA: Ш
            char 217 (0xd9) // 217 is U+0429 CYRILLIC CAPITAL LETTER SHCHA: Щ
            char 219 (0xdb) // 219 is U+042B CYRILLIC CAPITAL LETTER YERU: Ы
            char 222 (0xde) // 222 is U+042E CYRILLIC CAPITAL LETTER YU: Ю
            char 225 (0xe1) // 225 is U+0431 CYRILLIC SMALL LETTER BE: б
            char 228 (0xe4) // 228 is U+0434 CYRILLIC SMALL LETTER DE: д
            char 230 (0xe6) // 230 is U+0436 CYRILLIC SMALL LETTER ZHE: ж
            char 244 (0xf4) // 244 is U+0444 CYRILLIC SMALL LETTER EF: ф
            char 246 (0xf6) // 246 is U+0446 CYRILLIC SMALL LETTER TSE: ц
            char 247 (0xf7) // 247 is U+0447 CYRILLIC SMALL LETTER CHE: ч
            char 248 (0xf8) // 248 is U+0448 CYRILLIC SMALL LETTER SHA: ш
            char 249 (0xf9) // 249 is U+0449 CYRILLIC SMALL LETTER SHCHA: щ
            char 251 (0xfb) // 251 is U+044B CYRILLIC SMALL LETTER YERU: ы
            char 253 (0xfd) // 253 is U+044D CYRILLIC SMALL LETTER E: э
            char 254 (0xfe) // 254 is U+044E CYRILLIC SMALL LETTER YU: ю
            char 255 (0xff) // 255 is remapped to 182 for U+044F CYRILLIC SMALL LETTER YA: я (TDM only)
    Dup Set 2 in fonts/MasonAlternate_0_48.tga at {188, 128, 223, 162}
            char  65 (0x41) // 65 is U+0041 LATIN CAPITAL LETTER A: A 
            char 192 (0xc0) // 192 is U+0410 CYRILLIC CAPITAL LETTER A: А
    Dup Set 3 in fonts/MasonAlternate_0_48.tga at {128, 172, 159, 204}
            char  66 (0x42) // 66 is U+0042 LATIN CAPITAL LETTER B: B 
            char 194 (0xc2) // 194 is U+0412 CYRILLIC CAPITAL LETTER VE: В
    Dup Set 4 in fonts/MasonAlternate_0_48.tga at {192, 172, 225, 203}
            char  67 (0x43) // 67 is U+0043 LATIN CAPITAL LETTER 😄
            char 209 (0xd1) // 209 is U+0421 CYRILLIC CAPITAL LETTER ES: С
    Dup Set 5 in fonts/MasonAlternate_0_48.tga at { 96, 172, 123, 205}
            char  69 (0x45) // 69 is U+0045 LATIN CAPITAL LETTER E: E 
            char 197 (0xc5) // 197 is U+0415 CYRILLIC CAPITAL LETTER IE: Е
    Dup Set 6 in fonts/MasonAlternate_1_48.tga at {  4,  57,  21,  97}
            char  73 (0x49) // 73 is U+0049 LATIN CAPITAL LETTER I: I 
            char 178 (0xb2) // 178 is U+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I: І
    Dup Set 7 in fonts/MasonAlternate_1_48.tga at { 64,  64,  98,  98}
            char  75 (0x4b) // 75 is U+004B LATIN CAPITAL LETTER K: K 
            char 202 (0xca) // 202 is U+041A CYRILLIC CAPITAL LETTER KA: К
    Dup Set 8 in fonts/MasonAlternate_1_48.tga at {192,  64, 236,  99}
            char  77 (0x4d) // 77 is U+004D LATIN CAPITAL LETTER M: M 
            char 204 (0xcc) // 204 is U+041C CYRILLIC CAPITAL LETTER EM: М
    Dup Set 9 in fonts/MasonAlternate_1_48.tga at { 64, 128, 101, 161}
            char  78 (0x4e) // 78 is U+004E LATIN CAPITAL LETTER N: N 
            char 207 (0xcf) // 207 is U+041F CYRILLIC CAPITAL LETTER PE: П
    Dup Set 10 in fonts/MasonAlternate_1_48.tga at { 64, 174, 103, 205}
            char  79 (0x4f) // 79 is U+004F LATIN CAPITAL LETTER O: O 
            char 206 (0xce) // 206 is U+041E CYRILLIC CAPITAL LETTER O: О
    Dup Set 11 in fonts/MasonAlternate_1_48.tga at {128, 128, 156, 161}
            char  80 (0x50) // 80 is U+0050 LATIN CAPITAL LETTER P: P 
            char 208 (0xd0) // 208 is U+0420 CYRILLIC CAPITAL LETTER ER: Р
    Dup Set 12 in fonts/MasonAlternate_1_48.tga at { 32,  64,  55,  95}
            char  83 (0x53) // 83 is U+0053 LATIN CAPITAL LETTER S: S 
            char 189 (0xbd) // 189 is U+0405 CYRILLIC CAPITAL LETTER DZE: Ѕ
    Dup Set 13 in fonts/MasonAlternate_1_48.tga at {146, 169, 179, 209}
            char  84 (0x54) // 84 is U+0054 LATIN CAPITAL LETTER T: T 
            char 210 (0xd2) // 210 is U+0422 CYRILLIC CAPITAL LETTER TE: Т
    Dup Set 14 in fonts/MasonAlternate_2_48.tga at {198,   6, 232,  41}
            char  88 (0x58) // 88 is U+0058 LATIN CAPITAL LETTER X: X 
            char 213 (0xd5) // 213 is U+0425 CYRILLIC CAPITAL LETTER HA: Х
    Dup Set 15 in fonts/MasonAlternate_2_48.tga at {  0,  64,  33,  98}
            char  89 (0x59) // 89 is U+0059 LATIN CAPITAL LETTER Y: Y 
            char 211 (0xd3) // 211 is U+0423 CYRILLIC CAPITAL LETTER U: У
    Dup Set 16 in fonts/MasonAlternate_0_48.tga at {192,  96, 218, 121}
            char  97 (0x61) // 97 is U+0061 LATIN SMALL LETTER A: a 
            char 224 (0xe0) // 224 is U+0430 CYRILLIC SMALL LETTER A: а
    Dup Set 17 in fonts/MasonAlternate_0_48.tga at {224,  96, 247, 119}
            char  98 (0x62) // 98 is U+0062 LATIN SMALL LETTER B: b 
            char 226 (0xe2) // 226 is U+0432 CYRILLIC SMALL LETTER VE: в
    Dup Set 18 in fonts/MasonAlternate_1_48.tga at {  0, 192,  25, 214}
            char  99 (0x63) // 99 is U+0063 LATIN SMALL LETTER 😄
            char 241 (0xf1) // 241 is U+0441 CYRILLIC SMALL LETTER ES: с
    Dup Set 19 in fonts/MasonAlternate_1_48.tga at {  0, 224,  21, 248}
            char 101 (0x65) // 101 is U+0065 LATIN SMALL LETTER E: e 
            char 229 (0xe5) // 229 is U+0435 CYRILLIC SMALL LETTER IE: е
    Dup Set 20 in fonts/MasonAlternate_2_48.tga at { 64,  64,  93,  88}
            char 104 (0x68) // 104 is U+0068 LATIN SMALL LETTER H: h 
            char 237 (0xed) // 237 is U+043D CYRILLIC SMALL LETTER EN: н
    Dup Set 21 in fonts/MasonAlternate_1_48.tga at { 32, 160,  46, 192}
            char 105 (0x69) // 105 is U+0069 LATIN SMALL LETTER I: i 
            char 179 (0xb3) // 179 is U+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I: і
    Dup Set 22 in fonts/MasonAlternate_2_48.tga at { 64,  96,  78, 135}
            char 106 (0x6a) // 106 is U+006A LATIN SMALL LETTER J: j 
            char 188 (0xbc) // 188 is U+0458 CYRILLIC SMALL LETTER JE: ј
    Dup Set 23 in fonts/MasonAlternate_1_48.tga at { 32, 224,  58, 249}
            char 107 (0x6b) // 107 is U+006B LATIN SMALL LETTER K: k 
            char 234 (0xea) // 234 is U+043A CYRILLIC SMALL LETTER KA: к
    Dup Set 24 in fonts/MasonAlternate_2_48.tga at {128,  64, 161,  88}
            char 109 (0x6d) // 109 is U+006D LATIN SMALL LETTER M: m 
            char 236 (0xec) // 236 is U+043C CYRILLIC SMALL LETTER EM: м
    Dup Set 25 in fonts/MasonAlternate_2_48.tga at {192,  64, 220,  88}
            char 110 (0x6e) // 110 is U+006E LATIN SMALL LETTER N: n 
            char 239 (0xef) // 239 is U+043F CYRILLIC SMALL LETTER PE: п
    Dup Set 26 in fonts/MasonAlternate_2_48.tga at {128,  96, 157, 118}
            char 111 (0x6f) // 111 is U+006F LATIN SMALL LETTER O: o 
            char 238 (0xee) // 238 is U+043E CYRILLIC SMALL LETTER O: о
    Dup Set 27 in fonts/MasonAlternate_2_48.tga at { 96, 128, 117, 152}
            char 112 (0x70) // 112 is U+0070 LATIN SMALL LETTER P: p 
            char 240 (0xf0) // 240 is U+0440 CYRILLIC SMALL LETTER ER: р
    Dup Set 28 in fonts/MasonAlternate_2_48.tga at {224,  96, 242, 118}
            char 115 (0x73) // 115 is U+0073 LATIN SMALL LETTER S: s 
            char 190 (0xbe) // 190 is U+0455 CYRILLIC SMALL LETTER DZE: ѕ
    Dup Set 29 in fonts/MasonAlternate_2_48.tga at { 64, 155,  88, 185}
            char 116 (0x74) // 116 is U+0074 LATIN SMALL LETTER T: t 
            char 242 (0xf2) // 242 is U+0442 CYRILLIC SMALL LETTER TE: т
    Dup Set 30 in fonts/MasonAlternate_2_48.tga at {128, 224, 154, 251}
            char 120 (0x78) // 120 is U+0078 LATIN SMALL LETTER X: x 
            char 245 (0xf5) // 245 is U+0445 CYRILLIC SMALL LETTER HA: х
    Dup Set 31 in fonts/MasonAlternate_2_48.tga at {160, 224, 185, 249}
            char 121 (0x79) // 121 is U+0079 LATIN SMALL LETTER Y: y 
            char 243 (0xf3) // 243 is U+0443 CYRILLIC SMALL LETTER U: у

    Total Dups: 52 (Based on: For each dup set, 1 less than the count of items within.)

SUMMARY PASSES 1-3...
    Total Glyphs Needing Work (minimum): 84

Pass 4 - Detection of identical or significantly overlapping glyph boxes (other than Hollow Box, Zero Box, or <Space>).
    that share a common floor. One of the members is a likely base, the other(s) are likely accented character(s).
    For each of the latter, the accent may or may not be missing; that can't be detected by this program.

    Overlap Set 1 in fonts/MasonAlternate_0_48.tga
            char  46 (0x2e) // 46 is U+002E FULL STOP (i.e., period): "."  at { 48, 112,  59, 119}
            char 180 (0xb4) // 180 is U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN: ґ at { 48, 112,  59, 119}
            char 185 (0xb9) // 185 is U+2116 NUMERO SIGN: № at { 48, 112,  59, 119}
            char 186 (0xba) // 186 is U+0454 CYRILLIC SMALL LETTER UKRAINIAN IE: є at { 48, 112,  59, 119}
            char 196 (0xc4) // 196 is U+0414 CYRILLIC CAPITAL LETTER DE: Д at { 48, 112,  59, 119}
            char 214 (0xd6) // 214 is U+0426 CYRILLIC CAPITAL LETTER TSE: Ц at { 48, 112,  59, 119}
            char 215 (0xd7) // 215 is U+0427 CYRILLIC CAPITAL LETTER CHE: Ч at { 48, 112,  59, 119}
            char 216 (0xd8) // 216 is U+0428 CYRILLIC CAPITAL LETTER SHA: Ш at { 48, 112,  59, 119}
            char 217 (0xd9) // 217 is U+0429 CYRILLIC CAPITAL LETTER SHCHA: Щ at { 48, 112,  59, 119}
            char 219 (0xdb) // 219 is U+042B CYRILLIC CAPITAL LETTER YERU: Ы at { 48, 112,  59, 119}
            char 222 (0xde) // 222 is U+042E CYRILLIC CAPITAL LETTER YU: Ю at { 48, 112,  59, 119}
            char 225 (0xe1) // 225 is U+0431 CYRILLIC SMALL LETTER BE: б at { 48, 112,  59, 119}
            char 228 (0xe4) // 228 is U+0434 CYRILLIC SMALL LETTER DE: д at { 48, 112,  59, 119}
            char 230 (0xe6) // 230 is U+0436 CYRILLIC SMALL LETTER ZHE: ж at { 48, 112,  59, 119}
            char 244 (0xf4) // 244 is U+0444 CYRILLIC SMALL LETTER EF: ф at { 48, 112,  59, 119}
            char 246 (0xf6) // 246 is U+0446 CYRILLIC SMALL LETTER TSE: ц at { 48, 112,  59, 119}
            char 247 (0xf7) // 247 is U+0447 CYRILLIC SMALL LETTER CHE: ч at { 48, 112,  59, 119}
            char 248 (0xf8) // 248 is U+0448 CYRILLIC SMALL LETTER SHA: ш at { 48, 112,  59, 119}
            char 249 (0xf9) // 249 is U+0449 CYRILLIC SMALL LETTER SHCHA: щ at { 48, 112,  59, 119}
            char 251 (0xfb) // 251 is U+044B CYRILLIC SMALL LETTER YERU: ы at { 48, 112,  59, 119}
            char 253 (0xfd) // 253 is U+044D CYRILLIC SMALL LETTER E: э at { 48, 112,  59, 119}
            char 254 (0xfe) // 254 is U+044E CYRILLIC SMALL LETTER YU: ю at { 48, 112,  59, 119}
            char 255 (0xff) // 255 is remapped to 182 for U+044F CYRILLIC SMALL LETTER YA: я (TDM only) at { 48, 112,  59, 119}
    Overlap Set 2 in fonts/MasonAlternate_0_48.tga
            char  65 (0x41) // 65 is U+0041 LATIN CAPITAL LETTER A: A  at {188, 128, 223, 162}
            char 192 (0xc0) // 192 is U+0410 CYRILLIC CAPITAL LETTER A: А at {188, 128, 223, 162}
    Overlap Set 3 in fonts/MasonAlternate_0_48.tga
            char  66 (0x42) // 66 is U+0042 LATIN CAPITAL LETTER B: B  at {128, 172, 159, 204}
            char 194 (0xc2) // 194 is U+0412 CYRILLIC CAPITAL LETTER VE: В at {128, 172, 159, 204}
    Overlap Set 4 in fonts/MasonAlternate_0_48.tga
            char  67 (0x43) // 67 is U+0043 LATIN CAPITAL LETTER 😄 C  at {192, 172, 225, 203}
            char 209 (0xd1) // 209 is U+0421 CYRILLIC CAPITAL LETTER ES: С at {192, 172, 225, 203}
    Overlap Set 5 in fonts/MasonAlternate_0_48.tga
            char  69 (0x45) // 69 is U+0045 LATIN CAPITAL LETTER E: E  at { 96, 172, 123, 205}
            char 197 (0xc5) // 197 is U+0415 CYRILLIC CAPITAL LETTER IE: Е at { 96, 172, 123, 205}
    Overlap Set 6 in fonts/MasonAlternate_1_48.tga
            char  73 (0x49) // 73 is U+0049 LATIN CAPITAL LETTER I: I  at {  4,  57,  21,  97}
            char 178 (0xb2) // 178 is U+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I: І at {  4,  57,  21,  97}
    Overlap Set 7 in fonts/MasonAlternate_1_48.tga
            char  75 (0x4b) // 75 is U+004B LATIN CAPITAL LETTER K: K  at { 64,  64,  98,  98}
            char 202 (0xca) // 202 is U+041A CYRILLIC CAPITAL LETTER KA: К at { 64,  64,  98,  98}
    Overlap Set 8 in fonts/MasonAlternate_1_48.tga
            char  77 (0x4d) // 77 is U+004D LATIN CAPITAL LETTER M: M  at {192,  64, 236,  99}
            char 204 (0xcc) // 204 is U+041C CYRILLIC CAPITAL LETTER EM: М at {192,  64, 236,  99}
    Overlap Set 9 in fonts/MasonAlternate_1_48.tga
            char  78 (0x4e) // 78 is U+004E LATIN CAPITAL LETTER N: N  at { 64, 128, 101, 161}
            char 207 (0xcf) // 207 is U+041F CYRILLIC CAPITAL LETTER PE: П at { 64, 128, 101, 161}
    Overlap Set 10 in fonts/MasonAlternate_1_48.tga
            char  79 (0x4f) // 79 is U+004F LATIN CAPITAL LETTER O: O  at { 64, 174, 103, 205}
            char 206 (0xce) // 206 is U+041E CYRILLIC CAPITAL LETTER O: О at { 64, 174, 103, 205}
    Overlap Set 11 in fonts/MasonAlternate_1_48.tga
            char  80 (0x50) // 80 is U+0050 LATIN CAPITAL LETTER P: P  at {128, 128, 156, 161}
            char 208 (0xd0) // 208 is U+0420 CYRILLIC CAPITAL LETTER ER: Р at {128, 128, 156, 161}
    Overlap Set 12 in fonts/MasonAlternate_1_48.tga
            char  83 (0x53) // 83 is U+0053 LATIN CAPITAL LETTER S: S  at { 32,  64,  55,  95}
            char 189 (0xbd) // 189 is U+0405 CYRILLIC CAPITAL LETTER DZE: Ѕ at { 32,  64,  55,  95}
    Overlap Set 13 in fonts/MasonAlternate_1_48.tga
            char  84 (0x54) // 84 is U+0054 LATIN CAPITAL LETTER T: T  at {146, 169, 179, 209}
            char 210 (0xd2) // 210 is U+0422 CYRILLIC CAPITAL LETTER TE: Т at {146, 169, 179, 209}
    Overlap Set 14 in fonts/MasonAlternate_2_48.tga
            char  88 (0x58) // 88 is U+0058 LATIN CAPITAL LETTER X: X  at {198,   6, 232,  41}
            char 213 (0xd5) // 213 is U+0425 CYRILLIC CAPITAL LETTER HA: Х at {198,   6, 232,  41}
    Overlap Set 15 in fonts/MasonAlternate_2_48.tga
            char  89 (0x59) // 89 is U+0059 LATIN CAPITAL LETTER Y: Y  at {  0,  64,  33,  98}
            char 211 (0xd3) // 211 is U+0423 CYRILLIC CAPITAL LETTER U: У at {  0,  64,  33,  98}
    Overlap Set 16 in fonts/MasonAlternate_0_48.tga
            char  97 (0x61) // 97 is U+0061 LATIN SMALL LETTER A: a  at {192,  96, 218, 121}
            char 224 (0xe0) // 224 is U+0430 CYRILLIC SMALL LETTER A: а at {192,  96, 218, 121}
    Overlap Set 17 in fonts/MasonAlternate_0_48.tga
            char  98 (0x62) // 98 is U+0062 LATIN SMALL LETTER B: b  at {224,  96, 247, 119}
            char 226 (0xe2) // 226 is U+0432 CYRILLIC SMALL LETTER VE: в at {224,  96, 247, 119}
    Overlap Set 18 in fonts/MasonAlternate_1_48.tga
            char  99 (0x63) // 99 is U+0063 LATIN SMALL LETTER 😄 c  at {  0, 192,  25, 214}
            char 241 (0xf1) // 241 is U+0441 CYRILLIC SMALL LETTER ES: с at {  0, 192,  25, 214}
    Overlap Set 19 in fonts/MasonAlternate_1_48.tga
            char 101 (0x65) // 101 is U+0065 LATIN SMALL LETTER E: e  at {  0, 224,  21, 248}
            char 229 (0xe5) // 229 is U+0435 CYRILLIC SMALL LETTER IE: е at {  0, 224,  21, 248}
    Overlap Set 20 in fonts/MasonAlternate_2_48.tga
            char 104 (0x68) // 104 is U+0068 LATIN SMALL LETTER H: h  at { 64,  64,  93,  88}
            char 237 (0xed) // 237 is U+043D CYRILLIC SMALL LETTER EN: н at { 64,  64,  93,  88}
    Overlap Set 21 in fonts/MasonAlternate_1_48.tga
            char 105 (0x69) // 105 is U+0069 LATIN SMALL LETTER I: i  at { 32, 160,  46, 192}
            char 179 (0xb3) // 179 is U+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I: і at { 32, 160,  46, 192}
    Overlap Set 22 in fonts/MasonAlternate_2_48.tga
            char 106 (0x6a) // 106 is U+006A LATIN SMALL LETTER J: j  at { 64,  96,  78, 135}
            char 188 (0xbc) // 188 is U+0458 CYRILLIC SMALL LETTER JE: ј at { 64,  96,  78, 135}
    Overlap Set 23 in fonts/MasonAlternate_1_48.tga
            char 107 (0x6b) // 107 is U+006B LATIN SMALL LETTER K: k  at { 32, 224,  58, 249}
            char 234 (0xea) // 234 is U+043A CYRILLIC SMALL LETTER KA: к at { 32, 224,  58, 249}
    Overlap Set 24 in fonts/MasonAlternate_2_48.tga
            char 109 (0x6d) // 109 is U+006D LATIN SMALL LETTER M: m  at {128,  64, 161,  88}
            char 236 (0xec) // 236 is U+043C CYRILLIC SMALL LETTER EM: м at {128,  64, 161,  88}
    Overlap Set 25 in fonts/MasonAlternate_2_48.tga
            char 110 (0x6e) // 110 is U+006E LATIN SMALL LETTER N: n  at {192,  64, 220,  88}
            char 239 (0xef) // 239 is U+043F CYRILLIC SMALL LETTER PE: п at {192,  64, 220,  88}
    Overlap Set 26 in fonts/MasonAlternate_2_48.tga
            char 111 (0x6f) // 111 is U+006F LATIN SMALL LETTER O: o  at {128,  96, 157, 118}
            char 238 (0xee) // 238 is U+043E CYRILLIC SMALL LETTER O: о at {128,  96, 157, 118}
    Overlap Set 27 in fonts/MasonAlternate_2_48.tga
            char 112 (0x70) // 112 is U+0070 LATIN SMALL LETTER P: p  at { 96, 128, 117, 152}
            char 240 (0xf0) // 240 is U+0440 CYRILLIC SMALL LETTER ER: р at { 96, 128, 117, 152}
    Overlap Set 28 in fonts/MasonAlternate_2_48.tga
            char 115 (0x73) // 115 is U+0073 LATIN SMALL LETTER S: s  at {224,  96, 242, 118}
            char 190 (0xbe) // 190 is U+0455 CYRILLIC SMALL LETTER DZE: ѕ at {224,  96, 242, 118}
    Overlap Set 29 in fonts/MasonAlternate_2_48.tga
            char 116 (0x74) // 116 is U+0074 LATIN SMALL LETTER T: t  at { 64, 155,  88, 185}
            char 242 (0xf2) // 242 is U+0442 CYRILLIC SMALL LETTER TE: т at { 64, 155,  88, 185}
    Overlap Set 30 in fonts/MasonAlternate_2_48.tga
            char 120 (0x78) // 120 is U+0078 LATIN SMALL LETTER X: x  at {128, 224, 154, 251}
            char 245 (0xf5) // 245 is U+0445 CYRILLIC SMALL LETTER HA: х at {128, 224, 154, 251}
    Overlap Set 31 in fonts/MasonAlternate_2_48.tga
            char 121 (0x79) // 121 is U+0079 LATIN SMALL LETTER Y: y  at {160, 224, 185, 249}
            char 243 (0xf3) // 243 is U+0443 CYRILLIC SMALL LETTER U: у at {160, 224, 185, 249}

    Total Pass 4 Overlaps: 52 (Based on: For each overlap set, 1 less than the count of items within.)

Pass 5 - Like Pass 4, but by bitmap shader name. ('Overlap Set' numbers differ here from those of Pass 4).


    In bitmap fonts/masonalternate_0_48.tga

    1) Overlap Set '46 is U+002E FULL STOP (i.e., period): "." '
            char  46 (0x2e) // 46 is U+002E FULL STOP (i.e., period): "."  at { 48, 112,  59, 119}
            char 180 (0xb4) // 180 is U+0491 CYRILLIC SMALL LETTER GHE WITH UPTURN: ґ at { 48, 112,  59, 119}
            char 185 (0xb9) // 185 is U+2116 NUMERO SIGN: № at { 48, 112,  59, 119}
            char 186 (0xba) // 186 is U+0454 CYRILLIC SMALL LETTER UKRAINIAN IE: є at { 48, 112,  59, 119}
            char 196 (0xc4) // 196 is U+0414 CYRILLIC CAPITAL LETTER DE: Д at { 48, 112,  59, 119}
            char 214 (0xd6) // 214 is U+0426 CYRILLIC CAPITAL LETTER TSE: Ц at { 48, 112,  59, 119}
            char 215 (0xd7) // 215 is U+0427 CYRILLIC CAPITAL LETTER CHE: Ч at { 48, 112,  59, 119}
            char 216 (0xd8) // 216 is U+0428 CYRILLIC CAPITAL LETTER SHA: Ш at { 48, 112,  59, 119}
            char 217 (0xd9) // 217 is U+0429 CYRILLIC CAPITAL LETTER SHCHA: Щ at { 48, 112,  59, 119}
            char 219 (0xdb) // 219 is U+042B CYRILLIC CAPITAL LETTER YERU: Ы at { 48, 112,  59, 119}
            char 222 (0xde) // 222 is U+042E CYRILLIC CAPITAL LETTER YU: Ю at { 48, 112,  59, 119}
            char 225 (0xe1) // 225 is U+0431 CYRILLIC SMALL LETTER BE: б at { 48, 112,  59, 119}
            char 228 (0xe4) // 228 is U+0434 CYRILLIC SMALL LETTER DE: д at { 48, 112,  59, 119}
            char 230 (0xe6) // 230 is U+0436 CYRILLIC SMALL LETTER ZHE: ж at { 48, 112,  59, 119}
            char 244 (0xf4) // 244 is U+0444 CYRILLIC SMALL LETTER EF: ф at { 48, 112,  59, 119}
            char 246 (0xf6) // 246 is U+0446 CYRILLIC SMALL LETTER TSE: ц at { 48, 112,  59, 119}
            char 247 (0xf7) // 247 is U+0447 CYRILLIC SMALL LETTER CHE: ч at { 48, 112,  59, 119}
            char 248 (0xf8) // 248 is U+0448 CYRILLIC SMALL LETTER SHA: ш at { 48, 112,  59, 119}
            char 249 (0xf9) // 249 is U+0449 CYRILLIC SMALL LETTER SHCHA: щ at { 48, 112,  59, 119}
            char 251 (0xfb) // 251 is U+044B CYRILLIC SMALL LETTER YERU: ы at { 48, 112,  59, 119}
            char 253 (0xfd) // 253 is U+044D CYRILLIC SMALL LETTER E: э at { 48, 112,  59, 119}
            char 254 (0xfe) // 254 is U+044E CYRILLIC SMALL LETTER YU: ю at { 48, 112,  59, 119}
            char 255 (0xff) // 255 is remapped to 182 for U+044F CYRILLIC SMALL LETTER YA: я (TDM only) at { 48, 112,  59, 119}
    2) Overlap Set '65 is U+0041 LATIN CAPITAL LETTER A: A '
            char  65 (0x41) // 65 is U+0041 LATIN CAPITAL LETTER A: A  at {188, 128, 223, 162}
            char 192 (0xc0) // 192 is U+0410 CYRILLIC CAPITAL LETTER A: А at {188, 128, 223, 162}
    3) Overlap Set '66 is U+0042 LATIN CAPITAL LETTER B: B '
            char  66 (0x42) // 66 is U+0042 LATIN CAPITAL LETTER B: B  at {128, 172, 159, 204}
            char 194 (0xc2) // 194 is U+0412 CYRILLIC CAPITAL LETTER VE: В at {128, 172, 159, 204}
    4) Overlap Set '67 is U+0043 LATIN CAPITAL LETTER 😄 C '
            char  67 (0x43) // 67 is U+0043 LATIN CAPITAL LETTER 😄 C  at {192, 172, 225, 203}
            char 209 (0xd1) // 209 is U+0421 CYRILLIC CAPITAL LETTER ES: С at {192, 172, 225, 203}
    5) Overlap Set '69 is U+0045 LATIN CAPITAL LETTER E: E '
            char  69 (0x45) // 69 is U+0045 LATIN CAPITAL LETTER E: E  at { 96, 172, 123, 205}
            char 197 (0xc5) // 197 is U+0415 CYRILLIC CAPITAL LETTER IE: Е at { 96, 172, 123, 205}
    6) Overlap Set '97 is U+0061 LATIN SMALL LETTER A: a '
            char  97 (0x61) // 97 is U+0061 LATIN SMALL LETTER A: a  at {192,  96, 218, 121}
            char 224 (0xe0) // 224 is U+0430 CYRILLIC SMALL LETTER A: а at {192,  96, 218, 121}
    7) Overlap Set '98 is U+0062 LATIN SMALL LETTER B: b '
            char  98 (0x62) // 98 is U+0062 LATIN SMALL LETTER B: b  at {224,  96, 247, 119}
            char 226 (0xe2) // 226 is U+0432 CYRILLIC SMALL LETTER VE: в at {224,  96, 247, 119}

    In bitmap fonts/masonalternate_1_48.tga

    😎 Overlap Set '73 is U+0049 LATIN CAPITAL LETTER I: I '
            char  73 (0x49) // 73 is U+0049 LATIN CAPITAL LETTER I: I  at {  4,  57,  21,  97}
            char 178 (0xb2) // 178 is U+0406 CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I: І at {  4,  57,  21,  97}
    9) Overlap Set '75 is U+004B LATIN CAPITAL LETTER K: K '
            char  75 (0x4b) // 75 is U+004B LATIN CAPITAL LETTER K: K  at { 64,  64,  98,  98}
            char 202 (0xca) // 202 is U+041A CYRILLIC CAPITAL LETTER KA: К at { 64,  64,  98,  98}
    10) Overlap Set '77 is U+004D LATIN CAPITAL LETTER M: M '
            char  77 (0x4d) // 77 is U+004D LATIN CAPITAL LETTER M: M  at {192,  64, 236,  99}
            char 204 (0xcc) // 204 is U+041C CYRILLIC CAPITAL LETTER EM: М at {192,  64, 236,  99}
    11) Overlap Set '78 is U+004E LATIN CAPITAL LETTER N: N '
            char  78 (0x4e) // 78 is U+004E LATIN CAPITAL LETTER N: N  at { 64, 128, 101, 161}
            char 207 (0xcf) // 207 is U+041F CYRILLIC CAPITAL LETTER PE: П at { 64, 128, 101, 161}
    12) Overlap Set '79 is U+004F LATIN CAPITAL LETTER O: O '
            char  79 (0x4f) // 79 is U+004F LATIN CAPITAL LETTER O: O  at { 64, 174, 103, 205}
            char 206 (0xce) // 206 is U+041E CYRILLIC CAPITAL LETTER O: О at { 64, 174, 103, 205}
    13) Overlap Set '80 is U+0050 LATIN CAPITAL LETTER P: P '
            char  80 (0x50) // 80 is U+0050 LATIN CAPITAL LETTER P: P  at {128, 128, 156, 161}
            char 208 (0xd0) // 208 is U+0420 CYRILLIC CAPITAL LETTER ER: Р at {128, 128, 156, 161}
    14) Overlap Set '83 is U+0053 LATIN CAPITAL LETTER S: S '
            char  83 (0x53) // 83 is U+0053 LATIN CAPITAL LETTER S: S  at { 32,  64,  55,  95}
            char 189 (0xbd) // 189 is U+0405 CYRILLIC CAPITAL LETTER DZE: Ѕ at { 32,  64,  55,  95}
    15) Overlap Set '84 is U+0054 LATIN CAPITAL LETTER T: T '
            char  84 (0x54) // 84 is U+0054 LATIN CAPITAL LETTER T: T  at {146, 169, 179, 209}
            char 210 (0xd2) // 210 is U+0422 CYRILLIC CAPITAL LETTER TE: Т at {146, 169, 179, 209}
    16) Overlap Set '99 is U+0063 LATIN SMALL LETTER 😄 c '
            char  99 (0x63) // 99 is U+0063 LATIN SMALL LETTER 😄 c  at {  0, 192,  25, 214}
            char 241 (0xf1) // 241 is U+0441 CYRILLIC SMALL LETTER ES: с at {  0, 192,  25, 214}
    17) Overlap Set '101 is U+0065 LATIN SMALL LETTER E: e '
            char 101 (0x65) // 101 is U+0065 LATIN SMALL LETTER E: e  at {  0, 224,  21, 248}
            char 229 (0xe5) // 229 is U+0435 CYRILLIC SMALL LETTER IE: е at {  0, 224,  21, 248}
    18) Overlap Set '105 is U+0069 LATIN SMALL LETTER I: i '
            char 105 (0x69) // 105 is U+0069 LATIN SMALL LETTER I: i  at { 32, 160,  46, 192}
            char 179 (0xb3) // 179 is U+0456 CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I: і at { 32, 160,  46, 192}
    19) Overlap Set '107 is U+006B LATIN SMALL LETTER K: k '
            char 107 (0x6b) // 107 is U+006B LATIN SMALL LETTER K: k  at { 32, 224,  58, 249}
            char 234 (0xea) // 234 is U+043A CYRILLIC SMALL LETTER KA: к at { 32, 224,  58, 249}

    In bitmap fonts/masonalternate_2_48.tga

    20) Overlap Set '88 is U+0058 LATIN CAPITAL LETTER X: X '
            char  88 (0x58) // 88 is U+0058 LATIN CAPITAL LETTER X: X  at {198,   6, 232,  41}
            char 213 (0xd5) // 213 is U+0425 CYRILLIC CAPITAL LETTER HA: Х at {198,   6, 232,  41}
    21) Overlap Set '89 is U+0059 LATIN CAPITAL LETTER Y: Y '
            char  89 (0x59) // 89 is U+0059 LATIN CAPITAL LETTER Y: Y  at {  0,  64,  33,  98}
            char 211 (0xd3) // 211 is U+0423 CYRILLIC CAPITAL LETTER U: У at {  0,  64,  33,  98}
    22) Overlap Set '104 is U+0068 LATIN SMALL LETTER H: h '
            char 104 (0x68) // 104 is U+0068 LATIN SMALL LETTER H: h  at { 64,  64,  93,  88}
            char 237 (0xed) // 237 is U+043D CYRILLIC SMALL LETTER EN: н at { 64,  64,  93,  88}
    23) Overlap Set '106 is U+006A LATIN SMALL LETTER J: j '
            char 106 (0x6a) // 106 is U+006A LATIN SMALL LETTER J: j  at { 64,  96,  78, 135}
            char 188 (0xbc) // 188 is U+0458 CYRILLIC SMALL LETTER JE: ј at { 64,  96,  78, 135}
    24) Overlap Set '109 is U+006D LATIN SMALL LETTER M: m '
            char 109 (0x6d) // 109 is U+006D LATIN SMALL LETTER M: m  at {128,  64, 161,  88}
            char 236 (0xec) // 236 is U+043C CYRILLIC SMALL LETTER EM: м at {128,  64, 161,  88}
    25) Overlap Set '110 is U+006E LATIN SMALL LETTER N: n '
            char 110 (0x6e) // 110 is U+006E LATIN SMALL LETTER N: n  at {192,  64, 220,  88}
            char 239 (0xef) // 239 is U+043F CYRILLIC SMALL LETTER PE: п at {192,  64, 220,  88}
    26) Overlap Set '111 is U+006F LATIN SMALL LETTER O: o '
            char 111 (0x6f) // 111 is U+006F LATIN SMALL LETTER O: o  at {128,  96, 157, 118}
            char 238 (0xee) // 238 is U+043E CYRILLIC SMALL LETTER O: о at {128,  96, 157, 118}
    27) Overlap Set '112 is U+0070 LATIN SMALL LETTER P: p '
            char 112 (0x70) // 112 is U+0070 LATIN SMALL LETTER P: p  at { 96, 128, 117, 152}
            char 240 (0xf0) // 240 is U+0440 CYRILLIC SMALL LETTER ER: р at { 96, 128, 117, 152}
    28) Overlap Set '115 is U+0073 LATIN SMALL LETTER S: s '
            char 115 (0x73) // 115 is U+0073 LATIN SMALL LETTER S: s  at {224,  96, 242, 118}
            char 190 (0xbe) // 190 is U+0455 CYRILLIC SMALL LETTER DZE: ѕ at {224,  96, 242, 118}
    29) Overlap Set '116 is U+0074 LATIN SMALL LETTER T: t '
            char 116 (0x74) // 116 is U+0074 LATIN SMALL LETTER T: t  at { 64, 155,  88, 185}
            char 242 (0xf2) // 242 is U+0442 CYRILLIC SMALL LETTER TE: т at { 64, 155,  88, 185}
    30) Overlap Set '120 is U+0078 LATIN SMALL LETTER X: x '
            char 120 (0x78) // 120 is U+0078 LATIN SMALL LETTER X: x  at {128, 224, 154, 251}
            char 245 (0xf5) // 245 is U+0445 CYRILLIC SMALL LETTER HA: х at {128, 224, 154, 251}
    31) Overlap Set '121 is U+0079 LATIN SMALL LETTER Y: y '
            char 121 (0x79) // 121 is U+0079 LATIN SMALL LETTER Y: y  at {160, 224, 185, 249}
            char 243 (0xf3) // 243 is U+0443 CYRILLIC SMALL LETTER U: у at {160, 224, 185, 249}

    In bitmap fonts/masonalternate_3_48.tga


    In bitmap fonts/masonalternate_4_48.tga


    In bitmap fonts/masonalternate_5_48.tga


    Total Pass 5 Overlaps: 52 (Based on: For each overlap set, 1 less than the count of items within.)

[Pass 6 not shown, not relevant to Cyrillic]

You will have to review these and the glyphs and give me a list of what is needed. For each item wanted, ideally include the codepoint in decimal & in hex, the Unicode number, Unicode name, and symbol. You can copy these from the analysis text, e.g.:

char 254 (0xfe) // 254 is U+044E CYRILLIC SMALL LETTER YU: ю

Going the supplemental route, rather than regenerating all characters, is lower risk (of screwing up the main menu) and less work.

I can try to hack up a special program version of ExportFontToDoom3All256 to generate the supplemental dds and associated dat

Then you have to -
- combine the two dat files (2.13 and new) by editing
- for the new glyphs, to be stylistically consistent, some characters will need dat-scaling by 120%; likewise baseline-shifting. All done by adjusting the dat file. I would use refont, but Font Patch could work too. datBounds can be used intermittently to visualize the results.
- it would not surprise me if some characters need their bounding box borders and/or xSkip values shifted, in the dat file.
- Sometimes too, the generation process puts glyphs too close to the upper or left edges; those could be moved with GIMP (then dat changed to match).

Let me know if this workplan is of interest.

Hi! Geep, thanks for your reply. Due to a deadline on my work I am reading your answers only today.

 

Yep, it looks like somebody began font coversion via tranfer of existing latin letters to the cyrilic ones (that look the same as latin).

 

The plan looks hardm but lets try to do all we can.

 

During Friday and Monday I will make the list of the letters we have and those, that are absent.

  • Like 1
Posted

Instead of creating the list with the format I mentioned earlier, it would now be more helpful to use a slightly different format, based on your custom edit of Unicode.org's "Format A" for cp1251.txt

The draft upcoming wiki page for ExportUnicodeDoom3, that explains this, begins...

Introduction

This 2025 offshoot of ExportFontToDoom3All256 is in response to a [request to help – link] extend TDM’s Mason 48pt font to include missing Cyrillic glyphs. The main idea is that the input TTF font would go beyond those that support just ASCII or ANSI, to include those that offer additional Unicode characters. It still limits output to a maximum of 256 characters, consistent with the DAT format.

To achieve this, it reads an external “unicodeMap” file, in [Unicode.org’s “Format A” – link]. This provides the mapping from the traditional 8-bit ISO or Windows encoding that TDM uses (e.g., cp1251 for Cyrillic) to the corresponding UCS (Unicode 16-bit) value. As discussed below, you can edit this file in advance, if you want to generate just a subset of glyphs.

New Command Line Arguments (in Addition to those of ExportFontToDoom3All256)

unicodeMap

Example:

-unicodeMap "./Test/cp1251.txt"

You can edit the unicodeMap file in advance, to specify which particular glyphs you want to generate by suppressing unwanted glyphs, either by:

  •          Deleting an unwanted line (or block of lines) entirely, or
  •          Prepending a “#” to comment-out the line.

Also, this file format allows the Unicode value (e.g., “0x1234”) to be replaced by 6 space characters, when the ISO or Windows standard leaves that character undefined.

In all 3 of those cases, every suppressed character in the output DAT file will be represented by the glyph that the font uses for U+0000. A hollow box is common.

[additional arguments planned]

So in my testing so far, I created a "cp1251upperhalf.txt" file, with all the lower-half ASCII lines deleted. Seems to work with some random Unicode font (Lucida Sans Unicode). Beyond that, for your work, probably commenting out individual lines with a starting "#" would allow more flexibility.

Posted

I might not have been clear, that the link in the purple text above goes to standard cp1251.txt file that you need to edit.

Posted (edited)

Evening!

 

i have not read your replies yet. But today during my lunch time I analized the .dds files for Mason alternate font (files malonalternate_0 .dds - masonalternate_6.dds).

What do we have - masonalternate_6.dds and masonalternate_5.dds do not have cyrillic simbols - only special letters like accent aigu and accent grave for French.

masonalternate_4.dds  - 2 cyrrilic letters (Д, Ё and the same French symbols)

masonalternate_3.dds - 4 cirrylic letters (д,р and special symbols )

masonalternate_2.dds - mainly latin letters (u, V,W,X,Y, J,L,R,S.P,T,Z) and some cyrillic - н,л,м,и, г,Ф, я,з

masonalternate_1.dds  - latin letters (A.D,F,G,H,j,S,K,I,L,M,F,N,i,R,T,e) and cyrillic (Ж,Г,Р,И,Ф,М,Й)

masonalternate_0.dds  - cyrillic letters only (а,А, в,В,ь,Ь,ъ,Ъ,е,В,З,С.Э,Б) plus numbers from 0 to 9 and special symbols.

Edited by kalinovka
  • Like 1
Posted

Probably we need to setup a shared spreadsheet to track status and decisions on each letter. I haven't used Google spreadsheets before (only Google docs & Excel), but could probably set one up, initialized with cp1251.txt data. If that's of interest to you.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent Status Updates

    • DeTeEff

      The best thing about not mapping more than like every other year is the awesome feeling to see how far TDM has gotten in all appartments. I can just create some parallaxing cobblestones and walk to and fro and just let the jaw drop
      · 2 replies
    • Ansome

      Happy Halloween, TDM folks!
      · 1 reply
    • Acolytesix  »  nbohr1more

      Hey, was trying to use the TDM_Update.exe file, but when I do it doesn't do anything! It just goes back to 2.12. I'm trying to run Luitenant 4, but it won't update, so I can't play it. What am I doing wrong?
      · 2 replies
    • The Black Arrow

      Been away for quite a long time, didn't have much free time sadly, but the little that I had I was able to play a Romhack for Ocarina of Time called "Sands of Time".
      It's great, fun, rather hard but too but I like it (except when it's way too tedious, only some parts are, not all of them)
      Although the reason I'm sharing this is...Listen to the music, I've timestamped it to 27:56, it's titled "Memories Lost".
      Doesn't it sound so serene, so melodic...So Thief-like? It's fantastic, I love it, it reminded me of Thief and how much I want to get back to it, so hopefully this month or the next, I will have a lot of free time to play it.
      I can't wait to try that new big Thief campaign, The Black Parade, it seems to be promising.
      No spoilers please, but can someone tell me if it has horror elements? Or better yet, horror mission...Or even missionS?
       
      · 1 reply
    • STiFU

      Just managed to get the true ending of Silksong. I am really happy the true ending wasn't as hard to get as the one in its predecessor, which I never managed to achieve. 😄 Awesome game! Loved almost every bit of it.
      · 1 reply
×
×
  • Create New...