Как добавить свой шрифт с кириллицей в Doom 3

Я тут переводил мод для Doom 3 на русский язык и столкнулся с ситуацией, когда в моде используются нестандартные шрифты. И в них, конечно же, нет кириллицы. Можно отредактировать файлы мода и прописать вместо уникальных шрифтов стандартные шрифты, для которых есть русская версия в русской версии Doom 3 от 1с. Но так потеряется эстетика мода. Да и не всегда стандартные шрифты подходят.

Стоит поступить умнее и экспортировать свой шрифт в Doom 3. Но тут вы столкнётесь с такой ситуацией — все программы для конвертирования *.ttf-шрифтов в формат Doom 3 переносят лишь символы латиницы. И русских букв там не будет. И тут я начал искать в поисковиках хоть какие-то инструкции о том, как это делается по шагам. Но все такие умные, что знают сами как это делается, но нигде подробно ничего не расписывают и ни одной инструкции не опубликуют. Сказали лишь что-то заумное с терминологией крутых программистов и где-то ещё мелькнула мысль о том, что можно заменить символы расширенной латиницы в шрифте на кириллицу. Вот именно второе я предлагаю вам сделать) По крайней мере я так и сделал и у меня получилось.

Итак — Шаг 1: Находим шрифт, который хотим экспортировать в игру.

Тут всё просто. Заходим в гугл или яндекс и пишем в поиске «скачать шрифты с кириллицей». Ищите шрифты поуже. Русский язык обычно длиннее английского и если перевести пару английских предложений на русский, обычно нужно больше места. Поэтому шрифт надо искать более узкий по ширине.

Допустим я взял шрифт RabbitsDummy.ttf

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

Шаг 2 — Модифицируем шрифт, заменяя символами кириллицы символы расширенной латиницы. (Далее будет длинный способ с кучей ручной работы, можете перейти в послесловие в конце статьи и скачать оттуда скрипт, который выполнит шаг 2 автоматически за секунду, после чего переходите к шагу 3. Если скрипт не помог в случае с вашим шрифтом, то у вас повреждённый или криво сделанный шрифт, в таком случае делайте всё руками, как будет написано далее)

Вот так выглядят типичные символы расширенный латиницы, которые нам не нужны:

Для ручной модификации своего шрифта используем любой редактор шрифтов. Мне лень их скачивать и устанавливать, поэтому я использую онлайн-редактор шрифтов Glyphr Studio

https://www.glyphrstudio.com/app/

Переходим на вкладку Load и загружаем свой ttf-шрифт

Ждём пока загрузятся всем символы. Далее, видим где написано Basic Latin — это основная латиница,

выбираем там latin-1 supplement. Это именно то, что мы будем заменять на кириллицу.

Теперь выбираем в том же месте — Cyrillic и открывшейся таблице с символами русского языка нажимаем на большую букву А один раз мышью. Откроется интерфейс редактирования этой буквы и её настройки:

Здесь для нас важны цифры в строке bearing: left / right, значение advance width и кнопка Svg со стрелкой вверх. В идеале стоит открыть любой текстовый редактор, например блокнот в windows (win+r Notepad) и сохранить туда эти цифры для каждой буквы. После чего нажать на кнопку svg. Таким образом вы сохраните у себя в компе символ русской буквы А как картинку в формате svg, а также в блокноте запишите цифры для выравнивания. В данном случае это 408 для ширины и 20 и 60 для выравнивания. Я запишу в блокноте

А 408 20 60

После чего сохранённую картинку с заумным длинным названием переименую просто в большую букву А. Если же вы не будете переименовывать сразу, то понять какая это буква по идиотскому названию будет крайне сложно, особенно для букв Э, Ы, Ь, Ъ и некоторых других.

Затем жмём на кнопку next item

И открывается страница для буквы Б. Проделываем те же операции, сохраняем в блокнот пару цифр, экспортируем картинку и переименовываем.

В данном случае для буквы Б

Б 538 50 50

И так для всех больших и маленьких букв, не считая букву ё, она нам не нужна, т.к. для неё не хватит места в шрифте. В конце у вас образуется куча картинок с буквами в компе и текстовый файл с цифрами для каждой буквы. Если некоторые цифры будут не целыми числами, а какой-нибудь фигнёй типа 20.595, можете либо записывать целиком, либо округлять. Цифры со знаком минус тоже сохраняем как есть. Если там стоит минус, то записываем с минусом.

Если в процессе нажатия на Next item откроется на следующая буква, а что-то другое, жмите на кнопку в левом верхнем углу — Page Characters, там выбирайте Overview и откроется опять страница с буквами кириллицы. Там жмёте на нужную букву и продолжаете сохранять цифры и svg картинки нажимая на next item.

Для данного шрифта у меня получились такие цифры для больших букв

А — 408 20 60
Б — 538 50 50
В — 495 10 40
Г — 437 50 -30
Д — 538 -50 20
Е — 363 50 30
Ж — 546 -40 0
З — 425 20.959 50
И — 502 50.888 50.858
Й — 501 50.578 50
К — 430 30 10
Л — 442 -40 50.983
М — 572 0 40
Н — 476 50.984 50
О — 485 40 40
П — 513 50 50
Р — 450 50.547 30
С — 375 40 20
Т — 362 -20 -40
У — 356 20 40
Ф — 592 40 40
Х — 383 10 30
Ц — 561 50 0
Ч — 480 50.98 50
Ш — 717 50 50
Щ — 822 50 -49.107
Ъ — 521 -30 40
Ы — 694 50 50
Ь — 480 50 40
Э — 441 20 40
Ю — 742 50 50
Я — 429 0 60

И нет, это не минусы перед цифрами, а просто дефисы, для удобства. Мне так захотелось их записать. Вы можете писать без дефисов. Просто буква, пробел, цифра, пробел, цифра, пробел, цифра. Это вообще не важно, т.к. этот файл в блокноте нужен просто для временного хранения цифр. Вы тоже самое можете записать хоть на бумаге.

Значения эти нужно записать и для больших букв и для маленьких. Как только сохраните цифры и картинки всех букв, жмите на левую верхнюю кнопку Page Characters, далее Overview и снова выберите вместо Cyrillic — Latin — 1 Supplement. В появившемся меню выберите последнюю букву в третьем ряду, сразу после знака, похожего на перевёрнутый вопрос. Именно с этой буквы начинаем замену.

Нажимаем на эту букву, и кнопкой del на клавиатуре удаляем всё, из чего состоит буква. Затем слева снизу жмём на кнопку svg со стрелкой вниз и выбираем svg-файл с большой буквой А

Затем возвращаем обратно записанные в блокноте цифры 408 20 60.

После чего снова жмём next item, удаляем элементы следующей буквы, вставляем svg-картинку с буквой Б и цифры для неё. И так по очереди все буквы вставляем. Если кто не сразу понял, цифры из блокнота после вставки буквы надо записывать в нижнюю часть — вот сюда

А потом уже нажимать next item. Верхнее поле с заголовком «столько-то selected shapes» трогать НЕ НАДО. Вы редактируете цифры только для Глифа (Glyph), т.к. именно их вы сохраняли. Опять же если при загрузке картинок откроется на след. по порядку символ, а какая-то хрень, жмите на левый верхний угол — Page Characters — overview и вернитесь на нужное место Latin-1 Supplement и след. символ по русскому алфавиту. Цифры надо сначала вставлять в строку bearing: left / right, а потом уже если верхнее значение будет отличаться от записанного — редактировать. Обычно хватает цифр из одной строки, а верхнее подстраивается само.

Вот так выглядит половина работы, когда заменены заглавные буквы.

Далее продолжаем тоже самое с маленькими буквами. В случае с этим шрифтом цифры такие:

а — 534 20 50
б — 410 10 -70
в — 454 40 30
г — 339 40 -20
д — 379 20 50
е — 424 30 20
ж — 532 -20 0
з — 373 10 40
и — 498 40 40
й — 487 40 40
к — 424 40 20
л — 432 -50 40
м — 670 20 30
н — 488 40 40
о — 460 30 40
п — 465 40.832 40
р — 478 30 40.118
с — 376 30 30
т — 399 0 -30
у — 430 20 20
ф — 741 30 40
х — 346 10 20
ц — 557 40 0
ч — 447 30 40
ш — 631 40 40
щ — 742 40 20
ъ — 407 0 40
ы — 610 40 40
ь — 398 40.858 40
э — 421 10 40
ю — 590 40 40
я — 355 -30 40

Результат замены всех букв в расширенной латинице выглядит так

Как видно, буквы ё у нас не будет, зато все буквы от А до я влезли в расширенную латиницу. Теперь сохраняем результат. File — export otf-file

Получился *.otf-файл, а нам нужно ttf. Заходим в гугл или яндекс, пишем в поиске

«otf to ttf convert»

Заходим на сайт, конвертирующий из одного формата в другой, конвертируем, сохраняем свой ttf файл под другим названием.

Шаг 3 — качаем софт для переноса шрифта в Doom 3

Есть программа Export Font To Doom 3 v1.02, но мы её игнорируем как устаревшую. Качаем её обновлённую версию ExportFontToDoom3All246

Вот здесь есть ссылка на неё внизу

https://wiki.thedarkmod.com/index.php?title=ExportFontToDoom3 — страница со ссылкой внизу.

https://drive.google.com/file/d/1HzyyuZv0AVEhw4czJEwQ4nDMuqCogRyi/view?usp=sharing — сама ссылка с программой. Судя по вики, эта обновлённая версия экспортирует на 127 символов, а больше 200 и лучше работает на современных операционных системах. Поэтому качайте её.

Шаг 4 — конвертируем.

Распаковали программу ExportFontToDoom3All256.exe в любую папку. Затем туда же кинули файл со своим изменённым шрифтом, где вы подменили расширенную латиницу на кириллицу. Теперь перетаскиваем мышью *.ttf-файл шрифта на файл ExportFontToDoom3All256.exe

После чего появляется папка со шрифтом в формате Doom 3. Это кучка tga-файлов и три dat-файла. Если ваш шрифт был слишком широким или огромным, то в файле названиешрифта_0_12.tga будут размытые или нечитаемые символы. Это будет значить что такой шрифт в игре можно будет использовать с размером 24 и 48. А с размером 12 он будет плохо читаться. Если же и 12-ый размер будет чётким, то у вас получится отличный универсальный шрифт.

Шаг 5 — создаём dds-файлы.

Качаем программу Paint.net, если у вас её нет. Открываем. Выделяем в папке с *.tga файлами, которые мы создали на прошлом шаге эти самые tga-файлы мышью и перетягиваем их все в окно программы paint.net, на вопрос отрыть файлы или добавить слои выбираем Открыть. Открывается куча файлов. По одному сохраняем их в формате dds в той же папке.

И да, картинки будут с прозрачным фоном, поэтому их будет плохо видно. Не обращайте внимание. Просто сохраняйте картинку не меняя настроек по умолчанию, затем закрывайте её (в сверху справа, там где миниатюры), затем сохраняйте следующую и так далее. Сохраните все в dds.

Шаг 6 — запихиваем шрифт в свой мод или в игру.

Создаём 2 папки с одинаковым названием. Одну внутри другой.

В одной из них будут лежать dds-файлы, в другой всё остальное. Теперь берём папку с dds-файлами и кидаем в папку dds/fonts/english/ внутри pk4-файла с модом или внутри игры. Найдёте где в игре или моде есть такая папка в pk4-файле. Там ещё рядом будут папки an, bank и micro, внутри которых будут также dds-файлы. Сами Pk4-файлы — это обычные zip архивы, у которых изменили расширение. Откройте их Winrar’ом.

И перетаскивайте туда папку с dds-файлами шрифта. Как только она упаковалась, удаляйте оригинал, лежащий не в архиве, т.к. он вам больше не нужен. Теперь у вас в компе должна остаться папка с tga-картинками шрифта и dat-файлами, уже без папки с dds

Эту папку целиком также перетягивайте в Winrar, но уже не в папку dds внутри pk4-файла, а в папку

fonts/english. Там как раз рядом будут лежать tga-файлы и dat-файлы, а также папки an, bank и micro, внутри которых лежат tga и dat-файлы. Вот туда надо добавить вашу папку с новым шрифтом

Таким образом внутри pk4 файла мода/игры у вас будет в папке dds/fonts/english папка шрифта с dds-картинками, а в папке fonts/english папка с tga и dat.

Всё. Шрифт в игре. Теперь можете найти в игре вызов шрифта an, bank или micro и заменить его название на название папки со своим шрифтом, чтобы увидеть работает ли ваш шрифт. В моём случае я заменю bank на Rabbits_Dummy

И вот результат в игре — уникальный шрифт, похожий на рукописный в центре экрана

Если что, никаких проблем с отображением буквы «я» там нет. Просто в самом тексте вместо буквы я написана `

Это сделано из-за того, что текст писался под русский шрифт версии Doom 3 от 1с, где буква я была назначена на кнопку ё и подменяла этот знак кавычки. На скриншоте выше из блокнота видно что текст именно так и написан. Я просто не стал его редактировать перед проверкой. Если вернуть на место букву я, то она будет нормально отображаться. Короче говоря, это не важно. Главное что такой метод внедрения своих шрифтов с кириллицей в игру — отлично работает.

ПОСЛЕСЛОВИЕ

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

И будут правы. Поэтому в наше время, в 2025 году, когда уже есть deepseek и chatgpt, эту задачу можно поручить им. Что и сделал.

https://disk.yandex.ru/d/7OqANUucN5_Ntg

По этой ссылке вы можете скачать скрипт на языке Python, который мгновенно перенесёт все буквы кириллицы на место расширенной латиницы для всех шрифтов с расширением *.ttf, что лежат в папке с самим py-файлом.

Используйте его, если не хотите мучаться и руками всё это переносить, как я расписал выше.

p.s. для тех, кто не знает как запускать скрипты на языка Python

  1. Качаем сам python https://www.python.org/downloads/
  2. Устанавливаем, убедившись что проставили в установщике все галочки, особенно ту, что отвечает за прописывание path где-то в переменных среды windows. Без этого py-скрипты не будут находить установленный python.
  3. Запустите cmd.exe в windows, там пропишите команду pip install fonttools
  4. Эта команда установит какое-то расширение для работы со шрифтами. Всё. Можете закрыть командную строку.
  5. Теперь создайте в любом месте (например на рабочем столе) новую папку с любым названием. Распакуйте файл из архива в эту папку и туда же положите ваши *.ttf-шрифты.
  6. Кликайте на файл LAT1-CYR_MOD.PY также, как вы запускаете exe-программы в windows. Всё. Скрипт создаст в той же папке модифицированные шрифты (у них на конце названия будет приписка _mod). Это будут версии шрифтов, у которых автоматически символы расширенной латиницы заменились на символы кириллицы того же шрифта. Теперь можно сразу перейти к шагу 3 этой инструкции пропуская ручную возню в glyph studio)

======================

На момент написания этого текста, в интернете не было подробного описания того, запихать свой шрифт с кириллицей в игру Doom 3 (2004).

Теперь у вас есть такая инструкция. Вы её только что прочитали) Если моя писанина кому-то пригодилась и кому-то помогла, можете мысленно поблагодарить меня. Разрешаю копировать эту инструкцию куда угодно, при условии что вы укажите что её автор я — Y-Dr. Now

Это мой никнейм, если кто не понял)

Добавить комментарий

Ваш адрес email не будет опубликован.