5 шагов к локализации. Русификация модов для The Elder Scrolls 4: Oblivion
Изо всех модов, которые переводит наша игроманская геймдев-студия Format C: , сложнее всего поддаются локализации дополнения для Half-Life 2. Там и форматы файлов периодически попадаются такие, что без специализированного конвертера к ним не подступишься, и синхронизацию со Steam нужно проводить, да еще и субтитры запрятаны так глубоко в архивах, что на их откапывание иногда уходит несколько дней. Так что если вы освоили локализацию модов к Half-Life 2 (статья была опубликована в прошлом номере «Игромании»), то с The Elder Scrolls 4: Oblivion разобраться будет довольно просто. Впрочем, и здесь есть свои особенности, которые нужно учитывать и которые иногда превращают простую, казалось бы, работу в настоящий кошмар.
Как обычно, все упомянутые в статье приложения (некоторые из них разработаны нашей студией) ждут вас на нашем диске в разделе «Игрострой».
Шаг 1: изучаем «модную» физиологию
Прежде чем переходить к деталям и частностям локализации, давайте определимся, что же такое мод применительно к Oblivion. В простейшем случае это esp-файл ( E lder S crolls P lugin), который располагается в каталоге Корневая папка Oblivion\Data , из игры он подгружается через меню Файлы данных программы OblivionLauncher.exe. Анатомия такого мода обычно очень простая: если в игре есть некоторая величина v=«ABC» , значит, мод содержит данные типа v=«XYZ» , то есть только новые значения имеющихся объектов и/или новые объекты.
Более сложный вариант — когда в моде есть собственный контент (текстуры, модели, звуки, анимация), который в каталоге Корневая папка Oblivion >\Data дополнительно фасуется по подпапкам Textures , Meshes , Sound , Music либо вообще прячется внутрь одного или нескольких bsa-архивов: Название мода.bsa или Название мода/Textures.bsa , Название мода/Meshes.bsa , Название мода/Sound.bsa.
Существует и еще одна категория модов, самых сложных. Помимо дополнительного контента, в них есть собственный esm-файл ( E lder S crolls M aster-file), в него помещаются данные, которые впоследствии не будут меняться патчами, как правило, это новые классы, расы, прототипы игровых объектов. Сделано это для того, чтобы обновления не были слишком уж объемными. Представьте, что сам мод весит 500 Гб, из них 400 Гб занимает информация о расах и модели персонажей. Без esm-файла автору бы пришлось в каждый патч включать эти 400 неизменяемых гигабайт информации.
Раскладывать по полочкам структуру каждого мода было бы довольно сложно, если бы не один отрадный факт. К какому бы типу ни относилось дополнение, большая часть текстов (то есть то, что нужно локализовывать) всегда находится в файлах типа esp. Чтобы выпотрошить такой архив, загружаем редактор TES Construction Set , в меню File/Data… отмечаем галочкой требуемый esp-модуль и кликаем по кнопке Set As Active , затем OK и ждем, пока мод загрузится.
Шаг 2: переводим текст
Перевод любого дополнения — дело творческое, но в этом случае можно использовать отлаженные, проверенные временем схемы и утилиты. К сожалению, для локализации модов Oblivion до недавнего времени никаких специализированных утилит не существовало, а штатный редактор TES Construction Set при всей широте возможностей для перевода совершенно непригоден — в нем просто нет инструментов для отделения текстовых ресурсов мода от начинки оригинальной игры.
При этом в редакторе измененные и добавленные модом ресурсы помечаются символом * в поле EditorID , чтобы их перевести на русский, приходится бездумно прокручивать бесконечные списки различных объектов (квесты, диалоги, локации), выискивать взглядом «звездочки» и менять англоязычные фразы на русские. В крупных модах количество объектов может доходить до десятков и даже сотен тысяч, так что на локализацию может уйти несколько месяцев.
К счастью, в редакторе есть еще одна очень полезная функция — экспорт всех ресурсов в отдельные файлы по категориям. Всего таких категорий восемь:
1. Описания классов, рас, способностей, локаций. Извлекаются в редакторе командой File/Export/Descriptions.
2. Названия фракций и рангов — File/Export/Faction Rank Names.
3. Названия всех игровых объектов (герои, локации, предметы, заклинания) — File/Export/Names.
4. Все игровые диалоги — File/Export/Dialogue.
5. Квесты — File/Export/Faction Rank Names.
6. Сообщения из игровых скриптов — File/Export/Script Messageboxes.
7. Книги, свитки, письма — File/Export/Books.
8. Текстуры в формате DDS с надписями и указателями. Средствами редактора их извлечь нельзя, для просмотра и редактирования придется использовать сторонние программы.
На первый взгляд, все замечательно: можно извлечь все ресурсы мода, перевести в них все англоязычные фразы и импортировать тексты в игру через меню File/Import. Но есть одна серьезная проблема. Дело в том, что все тексты извлекаются вперемешку с ресурсами самой игры, однако, в отличие от списков объектов в редакторе, в полученных файлах строчки мода никак не помечаются. Страшно вспомнить, сколько проблем у нас было из-за этой особенности TES Construction Set. Но в итоге проблему мы решили.
Шаг 3: решаем проблемы с идентификаторами
Чтобы разобраться, как отделить текстовые ресурсы мода от начинки игры, давайте сначала рассмотрим, как устроены экспортированные текстовые файлы. Они состоят из строчек следующего вида:
FormID
За каждым ресурсом закреплен шестнадцатеричный идентификатор HexID , их в игре может быть до четырех миллиардов. Кроме того, у подавляющего большинства извлеченных ресурсов имеется идентификатор EditorID , по нему легко выискивать тексты мода в недрах экспортированных файлов. Затем, разделенные знаком табуляции, следуют уточняющие параметры. И в самом конце располагается сам текст. Все описанные поля образуют древовидную структуру: несколько строк с разными EditorID могут иметь одинаковый HexID , но не наоборот — например, у диалога есть варианты ответа собеседника, которые зависят от ряда условий, а каждый ответ может состоять из нескольких реплик.
Поля разделяются знаком табуляции, поэтому при переводе файлов с ресурсами следует пользоваться текстовым редактором с поддержкой непечатных знаков, например Notepad++ , но лучше всего для наших целей подходит Excel. Он автоматически разбивает текст на строки и столбцы по знаку табуляции, предотвращая случайное нарушение структуры файла. После внесения изменений достаточно сохранить результат в формате Текстовые файлы (с разделителями табуляции).
Несколько отличается результат экспорта книг. Вместо генерации одного файла создается папка Корневая папка Oblivion\BookExport , в ней можно найти все книги игры и мода в отдельных файлах, имена которых совпадают с EditorID этих книг в редакторе.
Хотя в Construction Set и есть функция File/Data/Details для просмотра списка ресурсов, она крайне неудобна. Список можно отсортировать по идентификаторам ресурсов, но пользоваться им все равно сложно, поскольку категории ресурсов не выделяются. Здесь нам поможет утилита TES4 Gecko — она позволяет (команда Display/Copy ) просматривать список ресурсов мода в виде структурированного дерева. Благодаря группировке по категориям, можно быстро сориентироваться, строки с какими EditorID относятся к моду, а какие — к оригинальной игре. В редакторе лишние строки (оригинальной игры) удаляются, после чего можно приступать непосредственно к переводу. Точно так же можно узнать, какие книги есть в моде, и в папке Корневая папка Oblivion\BookExport оставить только соответствующие им текстовые файлы.
Шаг 4: автоматизируем процесс
Описанные выше утилиты могут сократить время локализации в несколько десятков раз, но вы, наверное, заметили, что есть еще одна проблема — средствами редактора никак нельзя сравнить экспортированные оригинальные и модифицированные файлы игры и сохранить только различающиеся участки (чтобы не переводить текст, который и так уже переведен). Специально для этого мы написали две утилиты, объединенные общим названием Oblivion Text Extractor.
Первая программа — OBL_TEXT_EXT_ST1 — полностью автоматизирует извлечение текстовых ресурсов мода (находит разницу между двумя наборами файлов). Работает она следующим образом. В каталоге с утилитой создаем две подпапки, Orig и Mod , и складываем туда соответственно оригинальные и измененные модом файлы ресурсов. Оригинальные файлы легко извлечь, загрузив в редактор лишь esm-файлы, которые требуются моду (список мастер-файлов выводится в окне выбора модов справа). Файлы каждого набора имеют следующие имена: описания — desc.txt , фракции — fact.txt , названия — names.txt , диалоги — dialog.txt , квесты — quest.txt , скрипты — script.txt.
Запускаем утилиту, и через пару-тройку минут в папке с программой появится подпапка Export. Если на компьютере установлен Microsoft Excel , то там же мы обнаружим и файл MOD_TEX_RES.xls , который содержит извлеченные ресурсы мода, разложенные по листам и полностью подготовленные для перевода. Нам остается лишь перевести строки из желтого столбца, вписав русскоязычные варианты в зеленый столбец. Если ресурсная строка не добавлена, а только модифицирована дополнением, тогда в зеленом столбце мы обнаружим уже вписанный перевод из ресурсов самой игры. Как правило, модифицирование происходит не преднамеренно, например, модмейкер добавил на некоторой территории новую локацию, при этом редактор отметил территорию как отредактированную и сохранил ее название в esp-файл. Поэтому в данном случае нужно не перевести название, а просто «вернуть» ему русское написание.
Когда зеленый столбец полностью заполнен переводами строк, сохраняем файл и закрываем Excel. Теперь запускаем вторую утилиту ( OBL_TEXT_EXT_ST1 ), которая на основе xls-файла сгенерирует подпапку Import и поместит в нее файлы с суффиксом _import. Эти файлы теперь можно импортировать обратно в игру. Если Excel у вас не установлен, то никакого xls-файла не появится и придется переводить извлеченные ресурсы в простом текстовом редакторе. По завершении перевода англоязычных фраз полученные файлы также можно импортировать в игру.
Шаг 5: листаем книги и переписываем скрипты
Мы перевели почти все тексты мода, осталось локализовать книги, которые лежат в каталоге Корневая папка Oblivion\BookExport. Никаких хитростей тут нет, ровно до тех пор, пока книги имеют стандартное оформление. Если же имеются разные шрифты, буквицы, позиционирование текста или иллюстрации, работа усложняется. Дело в том, что сам Construction Set не утруждается экспортировать специальные html-теги форматирования книг, поэтому сохранять тексты в первозданном виде приходится вручную. Для этого в окне Object Window разворачиваем ветку Items/Book , двойным щелчком открываем требуемую книгу и копируем весь ее текст в отдельный файл. Теперь, обращая особое внимание на теги, переводим текстовые фрагменты книги. Иногда можно встретить непонятный тег вроде этого:
< IMG src=“Book/fancy_font/n_63x62.dds” width=63 height=62>ew Aften is the castle…
Пугаться тега IMG не стоит, в данном случае он добавляет в книгу буквицу N. Мы разработали свой собственный набор буквиц, которые можно использовать при русификации. Размещаться буквицы должны в папке Data\Textures\Menus или ее подпапках. Два идущих числа в названии буквицы — это размеры по горизонтали и вертикали, используются как параметры тега IMG. Когда книга переведена на русский, копируем весь ее текст обратно в открытое окно книги в игровом редакторе и кликаем OK (возможно, редактор найдет языковые ошибки — кликаем Cancel в окне грамматики, поскольку русского словаря в Construction Set нет). Аналогичные шаги повторяем со всеми остальными книгами мода, их, к счастью, редко бывает больше десяти.
Мы почти закончили перевод дополнения, осталось лишь перекомпилировать скрипты — в противном случае окошки с сообщениями будут с английским текстом. В игровом редакторе выбираем пункт Gameplay/Edit Scripts/Script/Open и в открывшемся списке по очереди открываем скрипты мода и сохраняем их командой Script/Save. Только не используйте пункт Recompile All , это в дальнейшем может привести к вылетам игры.
Последнее, что нам осталось сделать, — перерисовать все англоязычные надписи на текстурах в формате DDS. Для этого существует специальный DDS-плагин к Photoshop , он позволяет редактировать текстуры Oblivion. Тут уже никаких хитростей нет: загружаем текстуру, перерисовываем надписи, после чего сохраняем в формате DXT1-RGB. Если у текстуры имеется карта нормалей (файл с суффиксом _n ), тогда перед сохранением нужно перерисовать и карту нормалей. Если для вас фраза « карта нормалей » пустой звук и вы не знаете, как с ней работать, то просто сгенерируйте ее в редакторе автоматически командой Filter/nvTools/NormalMapFilter , только не забудьте в открывшемся диалоговом окне отредактировать величину Scale так, чтобы карта в точности соответствовала исходному варианту уровня (черный цвет должен быть везде, кроме перерисованной области).
Если контент мода представлен не набором файлов, а bsa-архивом, тогда перед всеми вышеприведенными манипуляциями следует сперва распаковать его с помощью утилиты BSA Commander в любую папку командой Unpack. По окончании работ все файлы придется запаковать обратно — откройте исходный архив и командой Info вызовите окно свойств bsa-файла. Запомните две шестнадцатеричные величины, Archive Flags и Files Flags , и пропишите их в соответствующие поля диалогового окна создания нового архива (вызывается командой Pack ).
* * *
Если во время локализации модов для TES 4: Oblivion вы будете следовать описанной нами схеме, то даже на очень сложное и объемное дополнение у вас уйдет не более двух недель, причем большую часть времени вы будете не возиться со скриптами, а переводить тексты с английского на русский, но тут мы вам ничем помочь не можем, разве что посоветуем не пользоваться «Промтом».
В одном из ближайших номеров ждите статью о том, как переводить дополнения для Neverwinter Nights 2 , вот уж где проблем воз и маленькая тележка — по сложности локализации модули для NWN 2 вполне сравнимы с Half-Life 2.