Английские субтитры для Doom 3 BFG Edition

Сделал полные английские субтитры для игры Doom 3 bfg edition. Точнее не совсем для него. Скорее для его порта — Doom BFA.

Почему для порта, а не для обычного Doom 3 bfg? Потому что из doom 3 bfg разрабы удалили поддержку модов. Там используются свои форматы изображений, звуков, игровых архивов. И всё это с проверкой контрольных сумм, без которых игра не запустится. В портах, основанных на исходниках Doom 3 bfg — возвращена поддержка модов, добавлена возможность грузить файлы в старых форматах, как оригинальный doom 3 (2004). Кроме того, в порт Doom BFA на уровне движка встроена своя собственная система субтитров. Благодаря чему не нужно создавать отдельные моды. Нужно лишь положить текстовые файлы субтитров, где прописан текст субтитров, тайминги их появления и названия звуковых шейдеров из игры, при воспроизведении игрой которых должны появляться субтитры. Doom BFA — это фактически единственный способ добавить субтитры в Doom 3 bfg на момент написания этих строк (1 августа 2025)

Сам порт можно скачать тут
https://github.com/MadDeCoDeR/Classic-RBDOOM-3-BFG/releases

Качайте последнюю nightly версию порта. Более старые версии содержат много багов, связанных с системной субтитров. В процессе разработки субтитров я слал автору порта сообщения обо всех найденных багах после каждого его обновления. С момента начала над созданием субтитров вышло около 20 новых версий. И всё из-за найденный мной багов) Пришлось перезапускать десятки уровней по множеству раз, чтобы убедиться что при устранении одного бага не появились новые. А такое случалось много раз. Поэтому и вышло столько обновлений порта. Текущая Nightly версия максимально стабильна по части субтитров. (А в остальном не особо). В целом с ней теперь можно пройти игру целиком с субтитрами.

Установка — качайте мои субтитры тут

https://www.moddb.com/mods/classic-rbdoom-3-bfg-edition/downloads/full-english-subtitles-for-doom-bfa-edition

Распакуйте содержимое архива в папку с установленным Doom 3 bfg, когда там же уже установлен и порт Doom BFA. Затем просто запускайте игру. Порт автоматически подхватит субтитры.

lost mission

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

Почему субтитры английские, а на русские? Потому) Русские я сделал намного раньше. Фактически английские субтитры — это побочный продукт от создания русских субтитров. Я сначала сделал русские, потом на базе них сделал английские. А выложил на Moddb английские — потому что они работают «из коробки». В смысле для них не нужно больше ничего. А для русских нужны файлы шрифтов для Doom 3 bfg edition, поддерживающие кириллицу. И эти файлы шрифтов нужно встроить в ресурсные файлы игры, затем внести изменения в контрольные суммы, чтобы игра просто запускалась. И из-за этого перестанут работать достижения) Но это если встраивать шрифты с кириллицей в оригинальную Doom 3 bfg. А порт Doom BFA убирает это ограничение. Он не проверяет контрольные суммы. А для работы steam-достижений в нём можно добавить внешнюю dll библиотеку от автора этого же порта. После чего русские субтитры заработают в Doom bfa.

Именно поэтому русские субтитры будут распространяться в составе моего русификатора Doom 3 bfg edition. Обновление русификатора будет включать порт Doom BFA, библиотеку для поддержки достижений steam, мои русские субтитры и изменённые файлы, содержащие 4 вида кириллических шрифтов, созданных мной же. В старых версиях русификатора использовался один готовый шрифт вместо 4 разных. И этот шрифт был взят из игры Rage. Теперь же я создал свой собственный генератор шрифтов для Doom 3 bfg и могу встроить в игру абсолютно любой .ttf и .otf шрифт.

Как создавались субтитры:

Для основной кампании Doom 3 я взял английские и русские субтитры из модов Doom 3 close captions 2.0. Для Doom 3 roe и Doom 3 lost mission я прослушал все звуковые файлы с речью в игре, записал их в виде текста и для каждой строки создавал тайминги вручную. Причём когда я создавал русские субтитры для Doom 3 roe — это было не особо сложно, т.к. на слух записать русскую речь не особо сложно. А вот когда я делал тоже самое для английской версии субтитров… Там пришлось распаковать все файлы, конвертировать в wav, загнать всё это в нейросети, распознающие английскую речь в звуковых файлах, затем прочитать весь распознанный текст и исправить всё что не правильно услышали нейросети. Местами пришлось напрячь мозг, т.к. ни нейросети ни я не могли понять что за неразборчивую английскую речь несут персонажи игры. Даже наличие русских версий не всегда помогало) Но вроде всё таки удалось всё сделать правильно и разобраться. Попутно исправил несколько косяков готовых английских субтитров для Doom 3 roe.

Ещё прикол — пока я создавал английские субтитры — я нашёл косяки в русских субтитрах и исправил их тоже. Кроме того, русские субтитры для Lost mission по таймингам я подогнал под фанатскую русскую озвучку, а перевод текста субтитров сделал с нуля. Поэтому в русской версии субтитров для lost mission субтитры не всегда будут совпадать а русской озвучкой. А всё потому, что пока я делал английские субтитры для lost mission, я увидел оригинальный английский текст и понял что в русской озвучке местами откровенно перевирают текст, местами меняют имена людей, даты, включая месяц и даже выдумывают то, чего не было в тексте. Ну и местами там актёры озвучки произносили текст, который звучал как работа машинного переводчика уровня старого промта. Если кто не в курсе, Промт — это программа машинного перевода, которая в начале 2000-х создавала мемные переводы игр типа GTA San andreas. Отдельные фразы в lost mission переведены примерно также. Именно поэтому мне пришлось оставить свой перевод с английского, а не делать субтитры по русской озвучке. Я не смог спокойно писать в субтитры ту чушь и отсебятину, что там говорили в отдельных предложениях.

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

Техническая часть

Система субтитров в порте Doom bfa — это скрипты .ccssript и lang файл.
В файлах .ccssript такая структура

name: name of the sound shader or the video file or sound file
color: rgba array for coloring the text (max 255)
priority: priority of the caption
caption: timestamp in milliseconds and text reference

Т.е. в первой строке название звукового шейдера или прямой путь к звуковому файлу. Вторая строка — цвет реплики в формате rgb. (Я сделал так, что речь одних и тех важных персонажей всегда отображается текстом одного и того же цвета). Третья строка — приоритет. Цифры от 0 до 1000. Ноль — это максимальный приоритет. В игре куча болтовни. Как речь компьютера, там и болтовня npc и разговоры сюжетных персонажей, плюс добавляется болтовня по рации. Ещё не забывайте про звук из видеодисков и аудиодневников. Нужно было настроить так, чтобы не пропустить субтитры с сюжетом пока читаешь субтитры для аудиодневника или рации. Ну четвёртая строка — это цифра и в кавычках текстовая переменная. Цифра — это на какой секунде появляется текст с указанной переменной, а текстовая переменаня отсылается на lang файл. В lang файле всё как обычно для doom 3 bfg. Строка с переменной и рядом в кавычках — текст.
Для кампании doom 3 я просто портировал текст из dcс файлов с готовыми английскими и русскими субтитрами из мода для Doom 3 2004. А для Roe и lost mission руками создавал каждую строчку. Что касается портирования содержимого dcc-файлов: Я создал 5 python скриптов.


Первый скрипт менял тайминги в формате [часы:минуты:секунды] из мода для Doom 3 2004 в формат [секунды*1000], используемые в Doom BFA. Второй скрипт менял кодировку всех файлов на utf-8, третий скрипт исправлял форматирование в dcc файлах, где закрывающая скобка, после названия звукового файла была в одних файлах в той же строке, в других была перенесена на следующую строку. Скрипт переделал все dcc файлы в одинаковый формат, где скобка была в одной строке. Четвёртый скрипт читал звуковые шейдеры .sndshd из Doom 3 bfg (я их распаковал из игры и положил в папку c dcc файлами из мода для doom 3 2004), и удалял из этих звуковых шейдеров всё, кроме строк с названием звукового шейдера и прямого пути к файлу.
Пример —

jacob {
	minDistance	5
	maxDistance 35
	volume		0
	no_dups
	
	sound/ambient/electrical/jacob_01d.wav
	sound/ambient/electrical/jacob_02d.wav
	sound/ambient/electrical/jacob_03d.wav
	sound/ambient/electrical/jacob_04d.wav
}


Из всего этого оставалось лишь
jacob {
sound/ambient/electrical/jacob_01d.wav

Пятый скрипт был самым главным. Он для каждого dcc файла создавал отдельный .ccscript в правильном формате, затем читал в dcc файле название звукового файла, искал в модифицированном мной .sndshd файл в строке пути название файла, если находил, то в поле name .ccscript файла записывание название шейдера из .sndshd файла, находящееся в строке названия шейдера перед строкой с полным путём. Затем в поле color записывался отдельный цвет. В поле priority записывался 0 (я потом руками выставлял приоритеты), в поле caption для отдельных реплик записывался 0, а для реплик с таймкодами, записывались преобразованные ранее тайминги и создавалась текстовая переменная для каждой отдельной реплики. Затем создавался файл .lang, куда записывались все созданные текстовые переменные и весь текст, им соответствующий. Если какой-то звуковой шейдер из doom 3 не был найден в шейдерах doom 3 bfg, то в поле name записывалось исходное название в квадратных скобках, чтобы я потом вручную проверил почему не нашлось название. Если название не находилось из-за переименования, то прослушивал все звуки в Doom 3 bfg и искал такой же как в doom3. Как оказалось, из Doom 3 bfg удалили пару десятков реплик, которые были в doom 3 2004. Для удалённых реплик я не создавал субтитры. Для переименованных — менял название шейдера руками. Кроме того, в отдельных строках вместо названия шейдера игра использует прямой путь к файлу.

На выходе после работы всех скриптов по очереди я получал папку с .ccscript файлами для doom 3, названия которых совпадает с названием .map файлов, на которых они подхватываются портом Doom bfa.

Затем я вручную исправил параметр color для всех сюжетных персонажей, руками прописал приоритеты, протестировав в игре. Руками заменил name с названия шейдера на прямой путь там, где это надо. Определить где надо, а где нет я смог открыв .map файлы с уровнями в игре. Да, я распаковал их из .resources файлов и открывал каждую карту руками, потом через поиск по тексту искал шейдеры или название звукового файла. Там, где на уровне использовался прямой путь, я прописывал прямой путь. Потом каждая карта в игре запускалась десятки раз, проходилась от начала и до конца и я тестировал каждый субтитр. Чтобы он точно появлялся, чтобы он не перебивал более важные субтитры, чтобы у него был правильный цвет, чтобы субтитры умещались в доступное пространство. Там, где субтитры были слишком длинные, я руками разбивал их на 2 отдельные реплики, заново прописывал тайминги появления, запускал игру заново, находил нужное место в игре, слушал всю болтовню с начала и до конца до нужной реплики, проверял что она появляется в нужный момент и точно влезает. Если были баги, закрывал игру, правил скрипт, запускал заново, опять проходил уровень до нужного триггера, опять слушал реплику и проверял. И так десятки раз для каждого уровня. Причём я это делал и для русских субтитров и для английских. На это ушло почти 2 месяца.

Кроме того, скрипты для субтитров Roe и lost mission было делать особенно сложно. Потому что для Doom 3 были готовые dcc файлы с готовым текстом субтитров, таймингами и названиями звуковых файлов, а для roe не было вообще ничего. Мне пришлось искать в map файлах где вызываются звуковые шейдеры, проверять какому звуковому файлу они соответствуют, слушать эти звуковые файлы, чтобы узнать есть ли там речь, если есть, то создавать для каждого шейдера секцию в ccscript файле, придумывать название текстовой переменной, затем руками прописывать весь текст, что я услышал в звуковом файле. И делать это и для английской версии субтитров и для русской по очереди. Причём для английской и русской пришлось создавать свои тайминги. Переводит секунды в нужный формат в уме. Включаешь аудиожурнал на 2 минуты, слушаешь его, смотришь на текст, ждёшь пока там договорят до нужного слова, смотришь на время. Записываешь эти секунды, воспроизводишь дальше, опять жмёшь паузу, опять записываешь время и так далее. Одновременно с записыванием времени записываешь текст и разбиваешь текст на части, чтобы его длина не превышала примерную макс. длину одной реплики субтитров. Причём для русских и английских субтитров длина текста тоже была разной. Пришлось создавать разное количество секций в скриптах, разное количество текстовых переменных с разными кодами.

Короче говоря, было очень много ручной и рутинной работы. Причём двойной, для английкой и русской версии субтитров. А для русской версии lost mission, как я уже говорил ранее — добавилась ещё и работа по переводу. После распознавания английской озвучки и преобразования в текст я перевёл всё на русский. Затем создал русский субтитры по фанатской русской озвучке lost mission. Затем прописал тайминги под русскую озвучку. Проверил всё это в игре. Затем прочитал свой правильный перевод речи из lost mission, сравнил с текстом фанатской озвучки. Заменил все самые бредовые фразы на то, что там говорят на самом деле. Места, где смысл был в целом верным — осталвлял как есть, а не брал свой перевод. Местами получилась комбинация — Одно предложение исправленное, второе из фанатской озвучки. Всё целиком менять не стал, т.к. не очень удобно играть, когда персонажи говорят одно, а в субтитрах другое.

В процессе тестирования готовых субтиров я исправил кучу багов русских субтитров из dcc файлов мода для doom 3 2004. Там были пропущены отдельные слова, местами текст субтиров не соответствовал звуковым файлам в отдельных словах. Где-то были неправильные тайминги. Где-то были грамматические ошибки. Так что мои субтитры теперь даже лучше субтитров для doom 3 2004. Они теперь точно соотвествуют звуковым файлам, везде помещаются в экран, не содержат ошибок и опечаток (вроде бы) и в них есть субтитры для Roe и Lost mission.

В английских субтитрах для doom 3 я ничего не менял, т.к. те, кто их создавали лучше знают английский язык) Но зато я добавил английские субтитры для roe и lost mission, которых ранее не существовало. По крайней мере публично их никто не выкладывал нигде и никогда.

Что касается русских субтитров — они будут встроены в обновление русификатора Doom 3 bfg. Обновление выйдет когда я закончу прочие дела. Я там обновляю перевод меню под новых порт Doom bfa, плюс планирую отредактировать исходники Doom bfa и собрать свой exe-шник, который не только будет подерживать русские субтитры, но и в котором doom 1 и doom 2 будет с русскими текстовыми сообщениями и меню. Старые свои исходники с подобным переводом я потерял) Ещё попробую там исправить скорость воспроизведения текста в начале Doom 3, из-за которого переведённый на русский язык текст про UAC в первом видеоролике появляется очень медленно и не синхронизирован в русской озвучкой.

One thought on “Английские субтитры для Doom 3 BFG Edition”

  1. Потестировал свои английские субтитры с оригинальным шрифтом. Оказалось что этот оригинальный шрифт значительно более широкий и половина текста во множестве мест не влезает в экран. Переделываю субтитры заново.

    Обновление от 23 августа 2025. Переделал английские субтитры. Опытным путём установил что макс. длина одного субтитра для английских стандартных шрифтов — 155 символов. Если больше,то текст обрезается. В результате переписал большинство скриптов, разбил текст, превышающий 155 символов на 2 отдельных предложения и заново разметил тайминги по времени. Теперь 95% текстов точно влезают. Оставшиеся 5% не влезают из-за того, что несмотря на то, что текст не превышает 155 символов, ограничение на макс. длину есть у каждой из 4 доступных строк для субтитра. И если какое-то слово в конце строки будет слишком длинным, то оно будет перенесено на другую строку и десятки символов пустого места не будут использоваться. Поэтому текст в последней строке всё равно обрежется. Но такая фигня происходит максимально редко. Заметил от силы 2-3 таких места и не стал разбивать на части в третий раз.
    Ссылка на субтитры прежняя. Просто перезалил файл на moddb.

Добавить комментарий для Y-Dr. Now Отменить ответ

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