1

Тема: Альтернативные русские шрифты для minecraft

На нашем сервере используется внутриигровая русификация, но при этом стандартный шрифт довольно некрасив и плохо читается при небольших размерах. А бинарный формат описания метрики шрифта не позволяет использовать шрифты высокого разрешения (HD), которые можно использовать для minecraft до версии 1.1 (либо использовать «неправильный» способ русификации — подмену стандартной локали).

Т.к. со шрифтами высокого разрешения сейчас проблема не решена, мною подготовлены шрифты альтернативные стандартному.


Шрифт Console VGA
На данный момент поддерживаются только символы основной латиницы и кириллица. Если будут заявки, добавлю и другие символы.

http://storage1.static.itmages.ru/i/12/0407/s_1333799604_4336117_a09b017d80.png http://storage1.static.itmages.ru/i/12/0407/s_1333799604_4336117_fe6d201eff.png
http://storage1.static.itmages.ru/i/12/0407/s_1333799604_4336117_350f12e83d.png http://storage1.static.itmages.ru/i/12/0407/s_1333799604_4336117_7aa6dc9704.png

Скачать шрифт можно тут.
Для установки распакуйте содержимое архива в папку font, находящуюся внутри minecraft.jar.


Шрифт Terminus
Из символов также только латиница и кириллица, по заявкам могу добавить другие символы.

http://storage7.static.itmages.ru/i/12/0420/s_1334934201_2736602_8fd1f152a5.png http://storage7.static.itmages.ru/i/12/0420/s_1334934201_2736602_628c2e49c2.png
http://storage7.static.itmages.ru/i/12/0420/s_1334934201_2736602_ee260381d9.png http://storage7.static.itmages.ru/i/12/0420/s_1334934201_2736602_cbd5d58808.png

Скачать шрифт можно тут.
Для установки распакуйте содержимое архива в папку font, находящуюся внутри minecraft.jar.

В ближайшее время будут подготовлены шрифты Classic со «стандартными» символами minecraft и Terminus Bold.

Партбилет и кобура.

2

Re: Альтернативные русские шрифты для minecraft

Ubuntu будет? Dejavu Sans?

3

Re: Альтернативные русские шрифты для minecraft

derlafff пишет

Ubuntu будет? Dejavu Sans?

При таких размерах они будут выглядеть как стандартный, хотя может попробую.

Партбилет и кобура.

4

Re: Альтернативные русские шрифты для minecraft

Добавил шрифт Terminus.

Для доводки шрифта Classic нужен доброволец с hex-редактором и желанием разобраться в описании размеров символов: всё оказалось несколько сложнее, чем я думал smile

Партбилет и кобура.

Re: Альтернативные русские шрифты для minecraft

--- BEGIN ERROR REPORT 7cf3a456 --------
Generated 22.05.12 20:13

Minecraft: Minecraft 1.2.2
OS: Windows 7 (amd64) version 6.1
Java: 1.7.0_04, Oracle Corporation
VM: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
LWJGL: 2.4.2
OpenGL: GeForce GT 540M/PCIe/SSE2 version 4.2.0, NVIDIA Corporation

java.lang.SecurityException: SHA1 digest error for font/glyph_sizes.bin
    at sun.security.util.ManifestEntryVerifier.verify(Unknown Source)
    at java.util.jar.JarVerifier.processEntry(Unknown Source)
    at java.util.jar.JarVerifier.update(Unknown Source)
    at java.util.jar.JarVerifier$VerifierStream.read(Unknown Source)
    at java.io.FilterInputStream.read(Unknown Source)
    at java.io.FilterInputStream.read(Unknown Source)
    at ni.<init>(SourceFile:45)
    at net.minecraft.client.Minecraft.a(SourceFile:252)
    at net.minecraft.client.Minecraft.run(SourceFile:650)
    at java.lang.Thread.run(Unknown Source)
--- END ERROR REPORT f645745a ----------

ну и щито это?

6

Re: Альтернативные русские шрифты для minecraft

мета-инф удали нафиг

Re: Альтернативные русские шрифты для minecraft

derlafff пишет

мета-инф удали нафиг

как я мог так налажать *фейспалм* извиняюсь

Re: Альтернативные русские шрифты для minecraft

Требую поддержки первым шрифтом русификатора Minecraft-Game.ru!

9

Re: Альтернативные русские шрифты для minecraft

Hollow Bleach пишет

Требую поддержки первым шрифтом русификатора Minecraft-Game.ru!

Что за русификатор? Как работает?

Партбилет и кобура.

10

Re: Альтернативные русские шрифты для minecraft

Figec пишет
Hollow Bleach пишет

Требую поддержки первым шрифтом русификатора Minecraft-Game.ru!

Что за русификатор? Как работает?

Старый костыльный путь.

11

Re: Альтернативные русские шрифты для minecraft

Тогда поддержки не будет: на нашем сервере используются прогрессивные методы русификации, работая в рамках русского перевода, а их русификатор работает за счёт подмены стандартного перевода и наверняка не поддерживает юникод.

Партбилет и кобура.

12

Re: Альтернативные русские шрифты для minecraft

На нём сидит добрая половина всех серверов, поэтому я считаю адаптацию под этот перевод нужной. Юникод поддерживает (вроде)

13

Re: Альтернативные русские шрифты для minecraft

Figec пишет

Добавил шрифт Terminus.

Для доводки шрифта Classic нужен доброволец с hex-редактором и желанием разобраться в описании размеров символов: всё оказалось несколько сложнее, чем я думал smile

Я желаю разобраться в описании размеров символов, если получится помогу чем смогу.

PS с подобным уже пришлось сталкивается в одной игре (Natural Selection мод для первой HL) там тоже размеры символов были записаны в подобный файл, но там было легче разобраться.

14

Re: Альтернативные русские шрифты для minecraft

BigSpy пишет

Я желаю разобраться в описании размеров символов, если получится помогу чем смогу.

PS с подобным уже пришлось сталкивается в одной игре (Natural Selection мод для первой HL) там тоже размеры символов были записаны в подобный файл, но там было легче разобраться.

Я где-то тут на форуме писал, что удалось экспериментально определить по этому поводу. Метрика символа описывается одним байтом: в старшей тетраде смещение символа вправо, в младшей — его ширина. Но оно работает не совсем так, т.к. эффект от изменения этих параметров иногда совсем неожиданный (я так и не осилил из-за чего всё ломается).

Партбилет и кобура.

15

Re: Альтернативные русские шрифты для minecraft

А как же Вы сделали шрифты не редактируя этот файл, или не всегда получается стабильно его изменить?
Можете подробно рассказать/показать что и как меняете.

PS возможно поможет вот эта информация:

Английский знаю плохо а Java еще меньше но может кто другой поможет разобраться

Minecraft loads its font from font/default.png in minecraft.jar. Glyphs 0-255 are given, each in an 8x8 area.
Minecraft also provides other font pages, as font/glyph_XX.png, where XX is the hex representation of the first byte of the UTF-16 character. The archive also provides font/glyph_sizes.bin. Glyphs are in-order, a byte a piece. The glyph's width can be ascertained from the expression (byte & 0x0F - byte >> 4). However, the sizes for the first 256 glyphs are *not* correct and the minecraft client generates them on startup.

Источник http://wiki.vg/Chat

Или здесь есть час кода игры где можно посмотреть как загружается этот файл (конечно кто хорошо знает Java) - http://www.ironcraft.fr/forum/viewtopic … t=0#p41869.

16

Re: Альтернативные русские шрифты для minecraft

С глифами мы уже разобрались эксперементальным путем, но спасибо. Фигец вроде только моноширинные шрифты пока использует, поэтому изменение глифов не нужно

17

Re: Альтернативные русские шрифты для minecraft

BigSpy пишет

А как же Вы сделали шрифты не редактируя этот файл, или не всегда получается стабильно его изменить?
Можете подробно рассказать/показать что и как меняете.

Редактировал, разумеется. Но исходя из другой формулы расчёта метрики, которую примерно получил меняя значения. Как оказалось, получил неправильно. Поэтому результат был не всегда ожидаемым.

BigSpy пишет

byte & 0x0F - byte >> 4

Теперь надо попробовать пробросить старый добрый шрифт, раз формула точно известна. Когда я начинал это дело тыкать, никакой информации по расчёту ширины символа не было. Я считал, что ширина это byte & 0x0F, а смещение (которого совсем и нет) это byte & 0xF0.

Как допилю грядущий апдейт, опять займусь шрифтами smile

Партбилет и кобура.

18

Re: Альтернативные русские шрифты для minecraft

Figec пишет

Теперь надо попробовать пробросить старый добрый шрифт, раз формула точно известна. Когда я начинал это дело тыкать, никакой информации по расчёту ширины символа не было. Я считал, что ширина это byte & 0x0F, а смещение (которого совсем и нет) это byte & 0xF0.

Как допилю грядущий апдейт, опять займусь шрифтами smile

Буду ждать, очень интересует  объяснение этого алгоритма.

19

Re: Альтернативные русские шрифты для minecraft

    byte & 0x0F - byte >> 4

Что-то я не могу определиться с порядком действий. Какой диапазон ширины символов можно задать таким образом?

Партбилет и кобура.

20

Re: Альтернативные русские шрифты для minecraft

А на что влияет смещение? Оно все таки там есть, по моему. Это не смещение символа от начала область 16x16 (почти у всех символов первый пиксель этой области пуст)?

PS Похоже разобрался с алгоритмом.

PS Если все получится сегодня выложу плоды своего труда smile

Отредактировано BigSpy (2012-09-07 05:00:26)

21

Re: Альтернативные русские шрифты для minecraft

И так вот что получилось.
Сначала о разборе формулы 

byte & 0x0F - byte >> 4

На самом деле это расшифровка того что в байте хранится 2-а значения, первое (byte & 0x0F) получают по маске 0x0F (то есть первые 4 бита), а второе (byte >> 4) получают смещением на 4 бита вправо (то есть вторые 4 бита сдвигают на место первых).
В общем, как и говорил Figec, один байт содержит 2-а значения (ширина и отступ). Но есть один нюанс с шириной,  так как 4 бита вмещают значения от 0 до 15 а ширина поля под символ 16 то приняли что ширина хранящаяся в bin файле увеличивается на 1. То есть если в bin файле хранится 6 то ширина символа (строго говоря это не ширина символа а расстояние от начала поля до конца символа) равна 6+1=7.

Теперь что проделал я.
1. Написал программу, которая загружает  изображение и bin файл и позволят визуально выставить все значения, после чего сохранить изменения в bin файл.
2. Попробовал создать тестовый шрифт, Все буквы отображаются как положено (не обрезаются), но если выбрать русский шрифт то выравнивание «по центру» в игре (например в меню или на табличках) работает как то странно. Сдвигает строку влево, причем, чем больше символов, тем больше смещается. Подробно на скриншотах. А вот на  английском языку все прекрасно выравнивается.
Странно еще и то, что смешается не только русские буквы но и английский и цифры. И на некоторых языках (не только на английском) все тоже ровно, а на других (не только русском) смещается.
3. Линии нужно расставлять как на первом скриншоте, зелёная перед символом красная после него.


Выкладываю программу
Скриншоты
[spoiler]http://storage6.static.itmages.ru/i/12/0908/h_1347132260_4743406_2d95c808c3.png
http://storage7.static.itmages.ru/i/12/0908/h_1347132260_9307446_f08ed94907.png
http://storage8.static.itmages.ru/i/12/0908/h_1347132261_7588677_af53550c41.png
http://storage9.static.itmages.ru/i/12/0908/h_1347132262_1228524_12693ecbe6.png[/spoiler]

Скачать
https://dl.dropbox.com/u/49359369/FontB … Editor.exe
Пояснения по программе:
1. Изображения, распакованные из игры она почему то корректно не открывает (да и программа для просмотра изображений у меня их тоже не открывает нормально), а вот после редактора (GIMP) все открывается как положено.
2. После загрузки изображения и bin файла не забудьте выбрать/проверить «номер редактируемого шрифта» (в имени файла он указан вместо XX  glyph_XX.png).
Если будут вопросы по программе, спрашивайте здесь или на почту (адрес в Помощь -> О программе).

ps Добавлена кнопка "Автоматически" которая автоматически задает отступ и ширину по картинке.

Скриншоты из игры показывающие смещение текста
[spoiler]Английский язык
http://storage4.static.itmages.ru/i/12/0908/h_1347132405_3935861_0badfe1ceb.png
http://storage5.static.itmages.ru/i/12/0908/h_1347132406_4627515_ba7d99cdc2.png
http://storage6.static.itmages.ru/i/12/0908/h_1347132408_5521154_ae79774597.png
http://storage7.static.itmages.ru/i/12/0908/h_1347132410_8018488_4c046e097d.png
Русский язык
http://storage8.static.itmages.ru/i/12/0908/h_1347132412_3521324_1f83702e6b.png
http://storage9.static.itmages.ru/i/12/0908/h_1347132413_2385090_7bcbaa76ab.png
http://storage1.static.itmages.ru/i/12/0908/h_1347132415_5198525_119a50c871.png
http://storage3.static.itmages.ru/i/12/0908/h_1347132417_9166460_f4607bc2df.png[/spoiler]


Тестовый шрифт
https://dl.dropbox.com/u/49359369/FontB … t_test.zip


Зеркала
https://www.dropbox.com/sh/697uz4b8qxr6lsj/yLq5NKf34f

PS Figec с твоими шрифтами русский текст на табличках не отображается нормально, это я что то не так делаю или шрифты не закончены?

Отредактировано BigSpy (2012-09-15 01:11:22)

22

Re: Альтернативные русские шрифты для minecraft

Как можно увидеть на скриншотах, мои шрифты отображаются на табличках корректно. Может ты просто забыл подменить glyph_sizes.bin? Либо у тебя установлены HD-патчи, которые изменяют алгоритм отрисовки. Стоит попробовать установить патч на чистую версию игры.

А вот по поводу ширины у меня есть плохие новости. Я потыкал тот джавовский код и убедился, что ширину символа можно предать только в диапазоне от 1 до 9. Вот сама функция и то, что она возвращает для юникодных символов:
[spoiler]
Метод, возвращающий ширину символа.
    public int getCharWidth(char par1)
    {
        if (par1 == '\247')
        {
            return -1;
        }

        if (par1 == ' ')
        {
            return 4;
        }

        int i = ChatAllowedCharacters.allowedCharacters.indexOf(par1);

        if (i >= 0 && !unicodeFlag)
        {
            return charWidth[i + 32];
        }

        if (glyphWidth[par1] != 0)
        {
            int j = glyphWidth[par1] >>> 4;
            int k = glyphWidth[par1] & 0xf;

            if (k > 7)
            {
                k = 15;
                j = 0;
            }

            return (++k - j) / 2 + 1;
        }
        else
        {
            return 0;
        }
    }

Результаты для юникодных символов:
младшая тетрада = ширина символа
0 = 1
1 = 2
2 = 2
3 = 3
4 = 3
5 = 4
6 = 4
7 = 5
8 = 9
9 = 9
10 = 9
11 = 9
12 = 9
13 = 9
14 = 9
15 = 9
[/spoiler]

Надо ещё заглянуть в MCP, может алгоритм уже изменился.

С точно такими же проблемами со смещением столкнулся, когда пытался сделать шрифт с широкими символами. Уменьшая ширину и смещение я экспериментально подобрал параметры, когда смещение пропадало (или было несущественным). Я сейчас уже смутно помню, но при превышении какого-то значения всего байта (ширина и смещение) надписи резко смещались влево.

UPD: Английские надписи не смещаются из-за того, что загружаются не из glyph_00.png, а из default.png. Там другой алгоритм вычисления ширины.

Партбилет и кобура.

23

Re: Альтернативные русские шрифты для minecraft

Ещё один нюанс по поводу изображений: в них определённое количество цветов (индексированные), возможно поэтому и не открываются программой. Сохранять их лучше такими же.

Программу, к сожалению, оценить не могу, т.к. венды под рукой сейчас нет. Выглядит очень хорошо smile

Партбилет и кобура.

24

Re: Альтернативные русские шрифты для minecraft

Но почему при выборе другог языка все становится нормально?
И еще в других шрифтах есть символы размером больше 9, да и если бы игра неопределила размер правильно в моем тестовом шрифте (там много символов болше 9 шириной) они бы были обрезаны. Странно както.

Отредактировано BigSpy (2012-09-09 12:19:25)

25

Re: Альтернативные русские шрифты для minecraft

BigSpy пишет

Но почему при выборе другог языка все становится нормально?
И еще в других шрифтах есть символ размером больше 9, да еслибы программа неопределила размер правильно в моем тестовом шрифте (там много символов болше 9 шириной) онибы были обрезаны. Странно както.

Я вообще этот алгоритм вкусить толком не могу. Слишком извращенски оно сделано.

Партбилет и кобура.