Пришло время опубликовать мой генератор шрифтов для игры Doom 3 bfg. Изначально я его создавал для улучшения своего русификатора этой игры. Русификатор выпущен, а значит пора выпустить и генератор шрифтов.
Как пользоваться программой
— распакуйте архив с программой в любое место.
— положите свои шрифты .ttf или .otf в папку с программой.
— запустите D3BFG_FontTools.exe
— нажмите на кнопку Сгенерировать шрифты
— забирайте готовые шрифты в папке newfonts\название_шрифта
— упакуйте их в .resources файлы.
— откройте .lang файл с текстом и замените в этих строках название шрифтов на название своего нового шрифта:"#font_" "Chainlink_Semi-Bold"
"#font_an" "Arial_Narrow"
"#font_arial" "Arial_Narrow"
"#font_bank" "BankGothic_Md_BT"
"#font_micro" "MicrogrammaDBolExt"
Если вы хотите отредактировать значения метрик в созданном dat-файле — запустите редактор метрик.
Второй способ добавления своих шрифтов в игру:
Создайте внутри следующую структуру папок поместив внутрь сгенерированные шрифты (dat файлы и .bimage файлы):

Сохраните получившийся файл .resources в папку, где игра хранит остальные файлы .resources
DOOM 3 BFG Edition\base
При запуске игра автоматически подхватит этот файл со шрифтами. Но если она начнёт ругаться на нехватку .crc файлов (контрольные суммы), то сгенерировать их можно консольной командой GenerateResourceCrcs.
P.S. — Шрифт Sarasori используется в главном меню игры. Шрифт Chainlink используется в интерфейсе оружия (счётчик патронов) и на цифровых вывесках с названиями помещений, которые обычно висят под потолком (такие зелёные). Шрифт Microgrammadboltext используется на внутриигровых интерфейсах (на некоторых кнопках на игровых экранах и в катсценах). Шрифт bankgothic_md_bt используется на внутриигровых экранах и в КПК. Шрифт Arial используется во всплывающих подсказках о целях миссии, в тексте писем в КПК, и на некоторых внутриигровых экранах.
СКАЧАТЬ ПРОГРАММУ МОЖНО ЗДЕСЬ
https://disk.yandex.ru/d/5AjTuWQ1RE6zVg
и здесь
https://drive.google.com/file/d/1pMTQPfMYO6IXxD8JjBrarw8YnLI4e28q/view
(по обоим ссылкам один и тот же файл)
О шрифтах в Doom 3 bfg edition
1) Шрифты в этой игре — это файл 48.dat и картинка с названием 48#__0400.bimage, упакованные в файлы _common.resources и _ordered.resources
2) dat файл одного шрифта трижды дублируется. 2 раза в _common.resources и один раз в _ordered.resources
3) Внутри файлов .resources есть папки: root\generated\images\newfonts и root\newfonts. В root\generated\images\newfonts находятся папки с картинками для каждого шрифта.
в root\newfonts лежат dat файлы. При этом папка с названием шрифта в root\newfonts дублируется. Одна из них записана как название шрифта, другая, тоже самое но в нижнем регистре. Пример: Шрифт называется Arial_Narrow. Соответственно картинка для него будет лежать в папке root\generated\images\newfonts\arial_narrow, а dat файл будет в папках root\newfonts\Arial_Narrow и root\newfonts\arial_narrow внутри _common.resources и в папке root\newfonts\Arial_Narrow внутри _ordered.resources
4) Если вы хотите своим новым сгенерированным шрифтом заменить любой имеющийся в игре, то вам надо удалить из папок заменяемого шрифта (внутри _common.resources и _ordered.resources) dat-файл в трёх местах и bimage картинку в одном. После чего вместо них загрузить сгенерированную картинку и поместить один и тот же сгенерированный dat-файл в три места.
Но можно ничего не удалять и просто создать папку для вашего нового шрифта рядом с папками существующих шрифтов внутри .resources файлов и положить туда .bimage и dat файлы. Потом просто в base\strings\english.lang в строках"#font_" "Chainlink_Semi-Bold"
"#font_an" "Arial_Narrow"
"#font_arial" "Arial_Narrow"
"#font_bank" "BankGothic_Md_BT"
"#font_micro" "MicrogrammaDBolExt"
прописать название папки вашего нового шрифта. Например загрузили в generated\images\newfonts\Tahoma и в newfonts\Tahoma сгенерированные этой программой файлы для шрифта Tahoma, затем в lang файле замените
«#font_» «Chainlink_Semi-Bold»
на
«#font_» «Tahoma»
после чего всё должно заработать.
5) У шрифтов в Doom 3 bfg edition есть какие-то скрытые особенности, из-за чего нельзя так просто взять данные из otf и ttf шрифтов и использовать их в dat-файле как метрики для символов. Данные от некоторых шрифтов подходят игре, а данные от некоторых нет. Чтобы это компенсировать, моя программа проверяет значения max top и max height у каждого шрифта и сравнивает их со значением параметра ascender. На основании этого вносит доп. поправку, благодаря которой шрифты в 90% случаев выглядят правильно в игре. Без этой поправки расстояние между двумя строками может быть слишком большим или слишком маленьким, из-за чего текст на кнопках мог отображаться не по центру, а слишком высоко или слишком низко. Однако все шрифты разные и придумать универсальную правку для любого шрифта у меня не получилось. Поэтому некоторым шрифтам нужна небольшая ручная корректировка параметра ascender. Моя программа содержит редактор метрик, который позволяет редактировать все метрики шрифтов, в том числе ascender, что поможет вам легко подправить уже созданный dat-файл, если это понадобится.
Как быстро проверить нужна ли корректировка параметра ascender:
Для основного меню в игре используется шрифт Sarasori_Rg. Сделайте резервную копию файлов _common.resources и _ordered.resources
После чего откройте _common.resources, найдите там папки root\generated\images\newfonts\sarasori_rg, root\newfonts\Sarasori_Rg и root\newfonts\sarasori_rg.
Удалите из них bimage картинку и dat файлы. Затем загрузите вместо них картинку и dat файл, сгенерированный моей программой. Запустите игру и нажмите на кнопку Quit в меню.
Смотрите на кнопки. Если текст находится по центру кнопок и расстояние между строками «Exit game» и строкой «Are you sure you want to exit Doom 3» нормальное, значит дополнительные правки не нужны. Если же текст находится выше центра кнопок, откройте редактор метрик,
выберите сгенерированный dat файл и увеличьте в нём значение ascender.
Сохраните изменения и снова загрузите dat-файл вместо прошлой версии в файл _common.resources. Если текст окажется ниже центра кнопок, то значение ascender надо слегка уменьшить. После того, как вы подберёте подходящее значение ascender, можете восстановить файлы _common.resources и _ordered.resources из резервной копии и заменить своим новым шрифтом с уже идеальными значениями ascender тот шрифт в игре, который хотите. При полноценной замене шрифта надо менять dat файл и внутри _common.resources и внутри _ordered.resources. Обязательно.
Для теста на предмет того, нужно ли вносить поправки, можно менять dat файлы только в _common.resources и только для шрифта Sarasori_Rg. На остальных шрифтах тестировать не удобно, т.к. для этого придётся заходить дальше, чем в просто в меню игры и придётся заменять dat-файл и в _ordered.resources, т.к. игра читает dat файлы шрифтов и из _common.resources и из _ordered.resources, для всех шрифтов, кроме шрифта из меню игры. Поэтому этот шрифт идеально подходит для быстрого тестирования.
Важная деталь — значения параметра Ascender у одного и того же шрифта могут подходить для меню игры и не подходить для интерфейса кпк. Т.к. вы можете подобрать для шрифта определённый ascender шрифт будет идеально выглядеть в главном меню, однако для некоторых шрифтов эти значения могут не подходить, если вы захотите заменить одним и тем же шрифтом и шрифт в меню и шрифт в кпк. Пример — я заменил шрифт Sarasori и шрифт BankGothic_Md_BT на свой. Выставил своему шрифту Ascender 40 для замены шрифта Sarasori и в меню он выглядит отлично. Если же мой шрифт с ascender 40 использовать в таком виде вместо BankGothic_Md_BT, то текст выглядит так, будто он слишком низко, относительно строк интерфейса к кпк, в результате для замены BankGothic_Md_BT я вместо 40 выставил 35 и шрифт в меню стал выглядеть правильно. Это говорит о том, что универсальный генератор шрифтов создать нельзя. Разные интерфейсы в разных местах игры создавались под конкретный заранее известный шрифт с определёнными метриками. Поэтому каждый созданный шрифт придётся немного подстраивать под тот интерфейс, в котором он будет использоваться. Но эта подстройка заключается исклюительно в подборе значения ascender. Всё остальное генератор делает за вас. Так что тут нет ничего сложного.
О наборе символов в шрифтах:
Изначально программа записывает в dat-файл и рисует на картинке: символы базовой латиницы, расширенной латиницы, цифры и некоторые спец. символы а также символы базовой кириллицы. Если вам нужны дополнительные символы — откройте файл custom_charset.txt и добавьте туда всё что вам нужно. Затем поставьте в программе галочку, чтобы этот файл использовался. Затем нажмите на кнопку генерации шрифтов.
О картинках:
В папке с каждым сгенерированным шрифтом вы найдёте не только картинку 48#__0400.bimage, но и картинку 48.tga.
48.tga не нужна для Doom 3 bfg edition и её никуда не нужно загружать. Она создаётся исключительно как предварительный просмотр содержимого bimage. Она на 100% идентична по содержимому. С ней удобнее сразу видеть что у вас получилось. Хотя её можно использовать в порте RbDoom3BFG, который поддерживает прямое чтение tga-картинок, как изначальный Doom 3 (2004).
Кстати, просмотреть сгенерированный .bimage файл можно через мою же программу — D3bfg bimage viewer
О редакторе метрик:
Изначально он создавался для отладки, чтобы я мог проверить настолько правильно генератор создаёт dat-файлы и в каких значениях метрик возникают искажения.
Поэтому он показывает также и значения параметров S и T, которые являются абсолютными координатами букв на картинке. Я специально запретил их редактирование, т.к. изменение этих значений приведёт к тому, что буквы перестанут отображаться правильно. Однако само отображение этих значений я оставил, потому что оно сохраняется в dat файле и используется игрой. Глупо было бы называть свою программу полноценным инструментом для работы с dat-файлами шрифтов и при этом не показывать в программе всё, что есть в dat-файле.
Значения других параметров, кроме ascender и descender, редактировать для шрифтов не требуется. Игре подходят стандартные значения, записанные в otf и ttf-файлы. Однако я сохранил возможность их редактирования по желанию. Хотя я тестировал свою программу на трёх десятках разных шрифтов и нигде никаких проблем не возникало, но проверял я лишь символы базовой латиницы и базовой кириллицы. А в программе есть возможность добавить любые другие символы. Я не знаю как они будут работать. Поэтому в теории возможность редактирования метрик каждого отдельного символа может кому-то пригодится.
Texconv.exe
Эта программа используется при создании .bimage. Поэтому она обязательно должна быть в папке с Doom3BFGFontTools.
Если вы её случайно удалили, скачайте вручную отсюда
https://github.com/microsoft/DirectXTex/releases
Последняя версия этой программы требует windows 10. Если скачать более старую версию программы, то она будет запускаться и на windows 7.
BFG Resource File Manager
Для упаковки шрифтов в файлы *.resources используйте программу
https://github.com/MadDeCoDeR/BFG-Resource-File-Manager
Прочая информация:
Для работы программы требуется Windows 10 и выше. Для запуска на windows 7 установите vxkex.
На создание и отладку этой программы ушло примерно 3 месяца. У первой публичной версии номер 1.55 потому, что у меня есть ещё 54 версии этой программы разных стадий готовности и с разным функционалом. Версия 1.0 вообще была консольной программой без графического интерфейса, создававшей файл 48.tga и файл 48.dat.
Примерно к версии 1.2 я добавил графический интерфейс и перевод на 2 языка. Примерно к версии 1.3 появился редактор метрик и возможность создания .bimage.
В последующих версиях добавилась функция сравнения двух dat-файлов, затем шла отладка и добавление мелких незаметных исправлений интерфейса. В версии 1.55 добавилась функция автоматического внесения поправок в dat-файлы. В версии 1.0 было около 120-140 строк кода. Текущая версия 1.55 занимает 1793 строки кода. В процессе разработки программы я также внёс изменения в исходники BFG Resource File Manager и теперь у меня есть версия BFG Resource File Manager, которая тоже умеет читать данные и файлов 48.dat
И да, я знаю про существование программы создания шрифтов idFont в составе Rage tool kit.
idFont НЕ создаёт bimage картинку.
А созданная им tga картинка хранит данные в альфа-канале. А для игры Doom 3 bfg edition данные должны быть в зелёном канале.
idFont НЕ позволяет добавить на текстуру конкретный набор символов. Хотя и поддерживает создание простых dat-файлов с поддержкой латиницы и второго языка на выбор. Но набор символов там крайне ограничен, а документации со списком всех команд нет. Кроме того, idFont тоже вносит поправку в значение ascender у шрифтов. Но созданные им dat файлы также нуждаются в дополнительных поправках и далеко не всегда подходят для Doom 3 bfg. Dat-файлы, которые создаёт моя программа и dat-файлы, которые создаёт idFont идентичны по формату данных. Поэтому функция «редактор метрик» в моей программе может редактировать и dat-файлы, созданные idFont’ом. А функция сравнения позволяет сравнить dat-файл, сгенерированный idFont’ом и моей программой. Вы конечно увидите кучу отличий в значениях для большинства символов, но это никак не мешает работе шрифтов. Это просто особенности того, как рисуется картинка с символами и как рассчитываются координаты. По большей части функция сравнения нужна разве что для того, чтобы посмотреть какие символы включены в dat-файлы у idFont и какие символы включены в шрифт, сгенерирвоанный моей программой.
Моя программа всегда добавляет к базовой латинице расширенную латиницу и кириллицу. Это сделано для того, чтобы все ваши новые шрифты, которые вы возможно будете использовать в своих модах, подходили для разных языков и чтобы моды с новыми шрифтами можно было бы потом просто перевести, заменив текст в english.lang без правки прочих файлов.
О файлах old_12.dat, old_24.dat, old_48.dat:
— хотя они и находятся в игровых архивах, в реальности движок игры их не использует. Я пробовал заменить файл 48.dat у десятков разных шрифтов, оставляя на месте файлы old_12.dat, old_24.dat, old_48.dat от стандартных шрифтов. Абсолютно никакого влияния этих старых файлов на шрифты из файла 48.dat не обнаружено.
Файлы old_12.dat, old_24.dat, old_48.dat вообще можно удалить и игра продолжит работать. Судя по исходным кодам игры, движок использует 48.dat и автоматически масштабирует его под другие размеры. Без всяких проблем.
Поэтому D3BFG Font Tools создаёт лишь файл 48.dat и не создаёт файлы old_**.dat
p.s. изначально в программе был только русский и английский язык, но перед публичным релизом я добавил перевод на немецкий, испанский и польский, созданный нейросетями. Выбраны именно эти языки, т.к. по словам тех же нейроесетей, среди сообщества фанатов Doom больше всего модов делают носители этих языков. Остальным хватит и английского.
15 июня 2026:
Программа обновлена до версии 1.6. Теперь в редакторе метрик можно отредактировать значение size в данных внутри dat файла.
— Добавлена возможность генерировать bimage файлы в формате игры The Evil Within 1 (пк версия)
— Программа перепакована. Ранее в exe файл были вшиты все python библиотеки, которые распаковывались во временную папку, теперь они не запакованы а в открытом виде лежат в папке с программой, благодаря чему уменьшились ложные срабатывания антивируса windows. Из-за этого программа стала больше по размеру, но не значительно.
— В состав программы добавлен второй exe-шник — Font preview, позволяющий просмотреть сгенерированный шрифт (dat и bimage) файлы. Достаточно выбрать папку, в которой лежит .dat и .bimage файлы одного шрифта и набрать любой текст и вы увидите как этот текст отобразится. Программа возьмёт из dat файла координаты символа на текстуре и отобразит их в виде последовательности букв. Это позволяет понять как в уже готовом шрифте выглядит конкретный символ. Мне эта функция понадобилась когда я тестировал поддержку генерации bimage файлов для игры The evil within. Там я обнаружил что в одном из шрифтов разработчики зачем-то заменили символ кавычек-ёлочек » на символ >, причём более тонкую и узкую его версию, которая отличается от такого же символа > в том же шрифте. И этот символ кавычек-ёлочек нельзя отредактировать в lang файлах игры. Он добавляется самой игрой на кнопки игрового меню. И если вы будете менять этот шрифт от разработчиков на свой, но в своём .ttf шрифте не замените этот символ кавычки на максимально похожий тонкий символ, как это сделали разработчики, то в тех местах, где в игре показывается эта кавычка — меню будет шире или выше и интерфейс будет выглядеть кривым.
21 июля 2026.
Генератор шрифтов обновлён до версии 1.6.2.
Теперь он поддерживает добавление символов из арабского языка. Не знаю будет это работать, т.к. для меня арабский язык это какие-то закорючки) Но так называемые presentation forms я в генератор шрифтов добавил. И даже в папку закинул python скрипт, который преобразует арабский текст в формат, при котором в игре арабский текст должен отобразиться правильно. Если использовать шрифты, созданные этим генератором. Я запустил нейронки в агентном режиме у себя на компе, чтобы они могли запускать программы и создавать файлы и проверили работает ли этот скрипт конвертации текста. Они подтвердили что всё должно работать. Но реально проверить это смогут только носители языка. Сама по себе поддержка арабского добавлена по одной причине — кто-то в комментах на moddb просил об этом. Надеюсь новая версия программы им поможет.
Обновление от 24 июля 2026.
Генератор шрифтов снова обновлён. Больше всего изменений во входящем в его состав скрипте для конвертации арабского текста в нужный формат. Исправил там ряд багов, из-за которых текст мог отображаться неправильно + баг с некоторыми кодировками в файле. Даже потестировал отображение арабских закорючек в игре. Работает. По крайней мере нейросети посмотрели на скриншоты и сказали что арабский текст отображается правильно) Я то арабского не знаю, поэтому проверить не могу. Но вроде работает. Буду надеяться что арабы теперь довольны. Я вообще не собирался ничего подобного в генератор шрифтов добавлять. Но почему-то стало интересно изучить как работает арабский текст в старых игровых движках, где он изначально не поддерживается. Потратил несколько дней на изучения особенности кодирования текста и его отображения и получилось) Заодно отловил пару мелких багов с метриками символов с кодами 32, 127, 160 и 173. И баг с наложением некоторых редко используемых символов расширенной латиницы на текстурном атласе. Всё это исправлено и стало лучше. По крайней мере то что работало в старых версиях работает также или лучше. Текст отображается в игре правильно. А значит всё отлично. Работу арабского текста в игре Evil within не проверял. Но скорее всего там тоже всё должно работать. Потому что там тот же формат dat файлов что и в Doom 3 bfg edition, да и .lang файлы с текстом такие же по структуре.