Введение
В статье не рассматривается то, как надо переводить текст, звук, видео игры, а также ваш уровень владения иностранным языком. В гайде рассмотрены основные инструменты, которые можно использовать для создания локализации, встречаемые ошибки и их решения, советы и рекомендации, а также личный опыт автора в работе по данной тематике.
Перед тем, как начать переводить какую-либо игру, требуется понять ограничения игры, а именно:
- Файловая системы игры (форматы файлов);
- Инструменты редактирования и сборки файлов игры;
- Поддерживаемые кодировки (UTF-8, Windows-1251);
- Соответствие шрифтов выбранной кодировке;
- Редактирование текста игры;
- Что нужно изменить, чтобы перевести на родной язык.
Каждый из пунктов будет отдельно разобран в статье.
Что такое локализатор
Локализатор в контексте модов C&C — это набор файлов, позволяющий перевести мод на язык, на котором раньше проект не был доступен. Все локализации можно разделить на 2 типа: текстовые и полные. Текстовые — переводят весь текст игры. В идеальной ситуации они добавляют субтитры в кат-сценах и перевод реплик, которые звучат в миссиях, но в оригинальной версии игры не выводятся в текстовой форме. Полные локализации переводят помимо текста игры ещё и звуковые реплики юнитов, Евы, и звук кат-сцен. Такие переводы делать сложнее, и, как правило, дольше, т.к. приходиться совершать поиск актёров озвучки и контролировать всё качество звука, который должен совпадать с качеством игры (и это всё помимо перевода текста и контроля его качества).
Файловая система Tiberian Sun
Как игра серии C&C 2-го поколения, Tiberian Sun состоит из .mix архивов, которые содержат основные ассеты игры (спрайты, воксели, звуки, видео, палитры, шрифты, конфиги). Более подробно про форматы файлов можно узнать здесь, а про порядок загрузки .mix архивов и их содержимого вы можете прочесть здесь.
Из всех ресурсов оригинальной игры стоит выделить несколько важных форматов и конкретных файлов вместе с их расположением в игре:
- .map — файлы одиночных миссий (миссии кампаний). Содержатся в архивах maps01.mix, maps02.mix, maps03.mix. В случае Tiberian Sun Client миссии находятся в папке Maps\Missions, т.к. движок в клиент-совместимых модификаций изменён на загрузку карт не из архивов;
- .fnt — пиксельные шрифты. Содержатся в архиве tibsun.mix → cache.mix;
- .pcx — пиксельные изображения, из которых dlgsysa.pcx и dlgsysi.pcx являются шрифтами внутриигрового меню. Содержатся в архиве tibsun.mix → local.mix;
- .shp — спрайты и спрайтовые анимации, из которых fullfnt3.shp — анимированный шрифт внутриигровых брифингов. Содержится в архиве tibsun.mix → local.mix;
- .aud — звуковые файлы. Содержатся в архивах tibsun.mix → sounds.mix, tibsun.mix → speech01.mix, tibsun.mix → speech02.mix, sidecd01.mix, sidecd02.mix, expand01.mix → e01vox01.mix, expand01.mix → e01vox02.mix, expand01.mix → sounds01.mix;
- .vqa — файлы видео (кат-сцены). Содержатся в архивах movies01.mix, movies02.mix, movies03.mix, e01scd01.mix, e01scd02.mix;
- .dll — динамические библиотеки MS Windows. В language.dll содержится часть текста внутриигрового меню. Располагается в корне игры рядом с game.exe — движком игры.
Файловая система клиента CnCNet
С тех пор, как EA перевела Tiberian Sun на лицензию freeware в 2010 году, у сообщества развязались руки, и оно начало создавать различные инструменты и для облегчения своей жизни. Одним из таких инструментов стал XNA клиент CnCNet, который развивается и по сей день.
Самая главная директория клиента — это папка Resources. Ресурсы клиента условно можно разделить на конфигурационные файлы (файлы с расширением .ini), изображения, используемые для отрисовки окон, бинарные и дополнительные файлы.
Инструменты
Westwood Font Editor (сокращённо WWFE) — современный удобный редактор .fnt шрифтов от Nyerguds, поддерживающий игры серии C&C 1-го и 2-го поколения, а также другие старые игры.
XCC Mixer (сокращённо mixer) — программа для редактирования .mix архивов от Olaf van der Spek. Программа старая, но проверенная временем. Удобно использовать для просмотра содержимого архивов, их распаковки и запаковки.
OS SHP Builder (сокращённо SHPB) — свободный редактор .shp спрайтов для игр C&C 1-ого и 2-ого поколения, разрабатываемый создателем и пользователями PPM.
Resource Hacker (сокращённо RH) — программа для редактирования исполняемых файлов (.exe) и динамических библиотек (.dll) Windows.
Adobe Photoshop — редактор изображений, поддерживающий файлы формата .pcx из коробки.
В статье указан Photoshop неспроста. В своё время, когда мною активно переводились моды для TS, я обнаружил, что наиболее функциональный аналог этой программы — GIMP — на самом деле сохраняет .pcx файлы в таком формате, из-за чего игра в итоге рендерит артефакты во внутриигровом меню. Не повторяйте моих ошибок, используйте Photoshop, который этим не болеет, либо Paint.NET.
Процесс перевода
В контексте Tiberian Sun ситуация довольно таки плохая — игра не поддерживает Unicode-подобные шрифты, но поддерживает ASCII-подобные, что позволяет использовать кодировку Windows-1251 а-ля CP1521 в текстовых файлах для перевода текста, например, на русский язык. В связи с этим рождаются все последующие нюансы.
Если вы не желаете мучаться с русификацией шрифтов — скачайте из репозитория Twisted Insurrection уже готовый пакет русифицированных шрифтов.
Редактирование шрифтов
В отличие от Red Alert 2, где можно отредактировать один единственный game.fnt, в Tiberian Sun редактировать шрифты — это то ещё веселье. Вам придётся как минимум использовать 2 программы, чтобы сформировать полный пакет шрифтов.
Шрифты текста игры
Шрифтов формата .fnt, которые редактируются при помощи WWFE, в игре всего 6 штук:
- 6point.fnt — не было найдено, где шрифт используется;
- 8point.fnt — не было найдено, где шрифт используется;
- 12metfnt.fnt — не было найдено, где шрифт используется;
- editfnt.fnt — не было найдено, где шрифт используется;
- grad6fnt.fnt — используется для отрисовки обычного внутриигрового текста сообщений из файла tutorial.ini;
- kia6fnt.fnt — шрифт, используемый для отрисовки текста в меню загрузки и на приборной панели из библиотеки language.dll.
Для перевода достаточно изменить под шрифты kia6fnt.fnt и grad6fnt.fnt под нужную вам кодировку, в случае русского языка — это Windows-1251. Если найдёте места применения других шрифтов — дайте знать, т.к. я не нашёл.
Шрифты внутриигрового меню
За отрисовку внутриигрового меню отвечают 2 файла: dlgsysa.pcx и dlgsysi.pcx.
dlgsysa.pcx — маска шрифта внутриигрового меню, которая говорит игре, сколько места будет занимать текст во время отрисовки.
dlgsysi.pcx — итоговый видимый шрифт внутриигрового меню.
Редактирование этого шрифта стоит начать с формирования сетки размера символов, т.к. она вам очень пригодится при изменении символов шрифта ради добавления кириллицы. Подсказкой может послужить крайний левый верхний квадрат, который показывает размеры области, в которой изменения будут отображаться как 1 символ. После того, как сетка была начерчена, приступайте к редактированию dlgsysi.pcx, т.к. этот файл отвечает за отображение текста в меню.
При наличии скорректированного dlgsysi.pcx, изменения в dlgsysa.pcx делаются в пару кликов. Сам файл-маска является чёрно-белым, где белый цвет показывает занятое символом место.
Шрифт анимации текста брифинга
Файл fullfnt3.shp отвечает за текст на экране во время отрисовки брифинга. Чтобы отобразить цвет текста правильно, вам сначала нужно отключить тени в Options → Shadows, которые по умолчанию включены.
А затем выбрать в верхнем меню SHP Builder список Palette → Load (либо нажать Ctrl+P) и подгрузить палитру, которую вы можете скачать здесь, либо найти в архиве tibsun.mix → local.mix.
Особенностью шрифта является то, что на каждый символ отводится по 3 кадра (фрейма) анимации, которые показывают, как буква должна рисоваться на экране монитора игрока во время игры:
- Первый кадр — это символ в круге, заполненный белым цветом;
- Второй кадр — символ становится более виден;
- Третий кадр — статичный конечный символ.
Подробно поиск соответствия символов по данному шрифту рассмотрено не будет, т.к. это полностью экспериментальная зона под конкретную кодировку текста. Тем не менее для справки — кириллическая буква А в кодировке Windows-1251 начинается с фрейма 286, а буква а — с 382.
С цветами палитры будьте также осторожны. Если вы захотите воспользоваться белым цветом из палитры под номером 0x02F (47), то у вас весь текст станет блеклым, т.к. игра не сможет "натянуть" на него цвет фракции.
Нормальный цвет букв.
Ошибочный цвет букв.
Перевод внутриигрового меню
Весь текст внутриигрового меню содержится в файле language.dll рядом с движком игры game.exe. Чтобы заменить текст, следует воспользоваться Resource Hacker.
Названия кнопок и текста в меню находятся в секции Dialog. Далеко не все диалоговые формы стоит переводить, т.к. часть из них на текущий момент никогда не будет использована, например окна про сетевую игру.
Названия статусов На Паузе / Готово, текст подведения итогов схватки с ботами/игроками, описание горячих клавиш — всё это хранится в секции String Table динамической библиотеки.
Стоит отметить тот факт, что language.dll может различаться для разных разрешений экрана, и во многих модах на TS, использующих клиент CnCNet, в папке Resources имеется несколько версий этого файла, которые копируются к файлу движка при изменении разрешения игры. Если вы хотите перевести интерфейс для всех случаев, то вам нужно изменить все эти файлы. Было также замечено, что перевод текста Mission Accomplished, Mission Failed, Game Over, You Are Victorious не поддерживаются игрой из-за фанатских патчей.
Перевод названий юнитов
Любой прямой (через rules.ini) или косвенный (через langfs.ini) перевод юнитов в игре будет вызывать рассинхронизацию при игре по сети с людьми, у которых ваша локализация не стоит.
Текст юнитов указывается в файле rules.ini. В обычном TS файл располагается в архиве tibsun.mix → local.mix, а в моде с клиентом CnCNet — в папке INI. Единственным правильным способом перевода названия юнитов — использование файла langfs.ini, который должен подгружать дополнительные правила игры для аддона Firestorm, но в нашем случае через него можно заменять текст из ключей Name= в секциях переводимых юнитов. Размещать файл стоит либо в архиве tibsun.mix → local.mix, а в моде с клиентом CnCNet — в папке INI.
Перевод текста миссий
Весь текст миссий может храниться как в файле tutorial.ini, так и в самом файле миссии. В обычном TS располагается в архиве tibsun.mix → local.mix, а в моде с клиентом CnCNet — в папке INI. Приоритет загрузки из файла миссии выше, чем из внешнего файла. Сам файл миссии/tutorial.ini должен быть в кодировке, для которой были изменены шрифты.
Перевод брифингов миссий
Чтобы текст в миссиях отображался корректно в вашей кодировке, в моде, который использует клиент CnCNet, следует прописать в файле Resources/ClientDefinitions.ini в секции [Settings] строку CopyMissi>, чтобы предотвратить копирование карт в файл spawnmap.ini, который копирование происходит только в кодировке UTF-8.
Все современные версии Tiberian Sun имеют сломанные брифинги. Если раньше приходилось для перевода изменять файл mission.ini, то теперь брифинги лежат в файлах карт в секциях [Briefing]. В обычном TS файл располагается в архиве tibsun.mix → local.mix, а в моде с клиентом CnCNet — в папке INI. Сам файл миссии должен быть в кодировке, для которой были изменены шрифты.
Перевод XNA клиента CnCNet
Конфиги клиента содержат текст, который клиент отображает, его позиции и отступы отображения, а также другие настройки. Однако с недавних пор менять напрямую текст в этих конфигах для перевода клиента стало необязательно, т.к. Kerbiter и SadPencil изобрели официальный универсальный способ локализации, о котором вы можете прочитать здесь, а увидеть пример использования здесь. При переводе клиента стоит использовать кодировку UTF-8 для конфигов.
Изображения используются для формирования окон клиента. Зачастую изменять их нет необходимости, чтобы достичь заветной цели, описываемой данной статьёй. Тем не менее бывают такие клиенты, где это просто необходимо. Например, есть клиенты, где кнопки главного меню рисуются клиентом не с использованием текста, а изображений. Примерами таких "плохих" клиентов могут послужить клиенты модификаций Twisted Insurrection и The Second Tiberium War.
Вот так красиво клиент выглядит снаружи.
И так уродливо внутри.
В противовес "плохим" клиентам есть "хорошие" клиенты, одним из которых является клиент для модификации Dawn Of The Tiberium Age, переводимый лишь за счёт изменений текста в файлах MainMenu.ini и ExtrasWindow.ini.
Оригинальный клиент DTA.
Его быстрый перевод.
И так клиент выглядит изнутри.
Чтобы отредактировать "плохой" клиент вам нужно выпросить у разработчика клиента/модификации исходники кнопок меню и заменить текст на русский, либо попытаться воспроизвести стиль оригинального клиента. Если клиент "хороший", тогда его меню состоит из текста, написанного в строках (ключах) Text= файлов MainMenu.ini и ExtrasWindow.ini, который можно перевести в файле Translation.ini.
Контроль и поддержка изменений
Двумя самыми большими проблемами при создании любой локализации являются контроль внесённых изменений и поддержка проекта после релиза. Локализатор для модов на Tiberian Sun можно воспринимать как локализатор программного обеспечения, поэтому здесь вполне применима технология Git. Если вкратце, то Git — это система управления версиями, созданная для упрощения разработки ПО. Git помогает отслеживать изменения в текстовых файлах, что позволит вам не потерять наработанный прогресс. Более подробно познакомится с тем, что такое Git, можно здесь.
Если же вы желаете помочь не только себе, отслеживая изменения в Git, но и ещё упростить способ подключения к работе над переводом других людей и поиск вашего проекта в Интернете, то лучше всего выложить репозиторий проекта на сайт-хостинг GitHub и/или GitLab.
Также хотелось бы отметить очень полезный инструмент, как сайт Diffchecker. Он поможет вам сэкономить огромное количество времени при проверке текста разных версий мода на наличие изменений, чтобы не переводить всё с нуля, а лишь разницу. Не стоит забывать, что изменения могут происходить где угодно, поэтому желательно сравнивать все необходимые текстовые файлы разных версий, чтобы избежать ошибок перевода.
Заключение
Данный гайд поможет вам в структурировании процесса перевода модификации для Tiberian Sun, а также поможет с технической частью вопроса. Хоть и в статье были разобраны примеры изменения шрифтов и текста в контексте русского языка, на самом деле все эти процессы справедливы и для переводов на другие языки, которые поддерживают ASCII-подобные шрифты. Надеюсь, что со временем количество технических ограничений перевода Tiberian Sun будет становиться всё меньше и меньше, благодаря развитию проекта Vinifera.
Бусти автора: Boosty.to
Полезно.
Старались.