ПОМОЩЬ
Вход Регистрация Забыли пароль? Пользователи
Top.Mail.Ru
Сейчас на сайте:
93 человек
Серия Crysis / Crysis / • Уроки CryENGINE 2 Sandbox 2 / Подготовка к выпуску / Локализация
Автор: XRUSHT.NET   Дата: 2010-02-08 06:47   Просмотров: 8869   Рейтинг:   Комментарии: (0)
Данная тема посвящена вопросам по локализации модов.

Русификация модов для Crysis (26.12.2008 22:15)

Основная проблема состоит в том, что игра нашинкована большим количеством звуковых файлов, которые простыми средствами перевести очень сложно, зато можно пустить внахлест субтитры. Но и с ними придется повозиться — изначально даже локализованная версия Crysis не поддерживает кириллицу в модах, придется искать обходные пути и придумывать необычные способы локализации.

Шаг 1: изучаем структуру файлов

Сразу обратим ваше внимание на очень важный факт. Для перевода нам вообще не понадобится игровой редактор — всю локализацию мы будем проводить в текстовом редакторе Notepad++, помимо него нам еще понадобятся Excel и любой ZIP-архиватор.

Большинство дополнений для Crysis, даже если они называются кампаниями, по сути представляют из себя отдельные игровые карты, иногда несколько карт объединены общим сюжетом, и совсем уж редко попадаются моды, которые изменяют игровую физику. Но в любом случае основной единицей любого дополнения остается именно карта, в ее анатомии нам в первую очередь и нужно разобраться. Все уровни располагаются в отдельных подпапках вида <корневая директория Crysis>\Game\Levels\<название карты>, и они содержат:

1. Текстовый файл <название карты>.xml является «визитной карточкой» карты.

Код:
<MetaData>

<HeaderText text=«Название карты на загрузочном экране»/>

<DescriptionText text=«Описание карты на загрузочном экране»/>

</MetaData>
агрузочном экране»/>

</MetaData>[/code]

Поля HeaderText и DescriptionText содержат текст, отображаемый на загрузочном экране, переводить их строго обязательно. Но напрямую вписать текст не выйдет, поскольку игра не понимает кириллицу. О том, как заменить текст русскоязычным переводом, мы поговорим чуть позже.

2. Текстовый файл Objectives.xml содержит названия, описания и маркеры на карте для игровых заданий, которые отображаются в соответствующем меню игры. Структура выглядит следующим образом:

[code]<Root>

<LostIslandII>

<Objective_01 Name=«Название задания 1»

Description=«Описание задания 1»

MapLabel=«Маркер задания 1 на карте»/>

</LostIslandII>

</Root>[/code]

3. Игровой ZIP-архив level.pak содержит всю «активную начинку» карты. Распаковываем его в любую папку, где в числе прочих ресурсов обнаружится файл mission_mission0.xml, который представляет собой своеобразный чертеж карты, на нем указано, какие объекты располагаются на карте, каковы их свойства и как эти объекты взаимодействуют между собой. Под объектами здесь понимается все, начиная от оружия и персонажей и заканчивая заскриптованными зонами. В общем, любое изменение в mission_mission0.xml незамедлительно отражается в игре. Здесь нам придется переводить текстовые сообщения, которые появляются во время игры.

Работать с mission_mission0.xml удобнее в редакторе Notepad++, поскольку он поддерживает отображение древовидных XML-структур и быстро работает с очень большими файлами. Загружаем mission_mission0.xml и в ветке <Mission>/<Objects> видим список объектов (object — видимые объекты) и так называемых сущностей (entity — элементы триггерной логики игры). При этом некоторые сущности могут иметь подблок FlowGraph, описывающий связи между функциональными «кирпичиками» скриптовой последовательности. Например, воспроизвести анимационную сцену, затем музыкальную композицию, потом вывести игроку сообщение и, наконец, отдать управление другому блоку.

Для задания подобной последовательности в блоке FlowGraph имеются два списка: Nodes (узлы) и Edges (связи). В первом описываются совершаемые действия, во втором — их очередность. За вывод сообщений в игре ответственны два класса узлов: HUD: OverlayMsg и HUD:DisplayTimedDebugMessage. На практике они используются следующим образом:

[code]<FlowGraph ...>

<Nodes>

<Node Id=«111» Class=«HUD:OverlayMsg» pos=«100,100,100» flags=«0»>

<Inputs Message=«Отображаемое сообщение 1» PosX=«150» PosY=«150» Color=«1,1,1» Timeout=«5»/>

</Node>

<Node Id=«222» Class=«HUD:DisplayTimedDebugMessage» pos=«200,200,200» flags=«0»>

<Inputs Message=«Отображаемое сообщение 2» PosX=«250» PosY=«250» FontSize=«1» DisplayTime=«1»/>

</Node>

</Nodes>

<Edges>

<Edge nodeIn=«111» nodeOut=«...» portIn=«Show» portOut=«...» enabled=«1»/>

<Edge nodeIn=«222» nodeOut=«...» portIn=«Trigger» portOut=«...» enabled=«1»/>

</Edges >

</FlowGraph>[/code]

Применение у этих узлов схожее, но главное их отличие в том, что только OverlayMsg можно приспособить для отображения русскоязычных сообщений. Так что все вызовы DisplayTimedDebugMessage следует заменить на OverlayMsg. Чтобы это сделать, давайте посмотрим, как они устроены. У обоих имеется идентификатор узла (Id), название класса (Class), положение на карте (pos), флаги (flags), текст сообщения (Message), координаты на экране (PosX, PosY). Если у OverlayMsg можно задать цвет текста (Color), то у DisplayTimedDebugMessage — лишь размер букв (FontSize). Кроме того, у одного время отображения на экране задается атрибутом Timeout, а у другого — DisplayTime.

Но узлы отличаются не только этим. В списке связей (Edges) указано, какой узел (nodeOut, portOut) какому (nodeIn, portIn) передает управление в скрипте. И если узел класса OverlayMsg получает управление через порт Show, то DisplayTimedDebugMessage — через Trigger. Меняя у второго класса entity название, задержку — с DisplayTime на Timeout, входной порт — с Trigger на Show, убирая FontSize и добавляя Color, мы сможем отображать на экране русскоязычное сообщение.

Шаг 2: адаптируем текст

В Crysis изначально (то есть безо всяких лок-китов) заложена возможность переводить текст на другие языки. Все русскоязычные ресурсы (в официальной версии от «Софт Клаба») лежат в архиве <корневая директория Crysis>\Game\Localized\russian.pak. Распаковываем его и в подпапке Languages находим файл game_text_messages.xml — это XML-таблица. Открыв ее, мы для себя отмечаем три ключевых столбца: второй — строковый идентификатор сообщения, четвертый — сообщение на английском (для локализации необязательно), восемнадцатый — переведенное сообщение на русском.

Теперь, если в mission_mission0.xml вместо Text=«Some message» написать Text=«@text_id», а в game_text_messages.xml дописать строку (по столбцам) @text_id/Some message/Некоторое сообщение и сохранить это изменение в файлах game_text_messages.xml и russian.pak, то текст будет корректно отображаться. Аналогично поступаем со всеми строками, требующими перевода.

Шаг 3: готовим субтитры

Наравне с файлом mission_mission0.xml важную роль в процессе локализации играет moviedata.xml, в котором собраны данные об анимационных роликах. В этих двух файлах присутствуют скриптовые команды для воспроизведения звуковых файлов диалогов. Обычно авторы англоязычных модов не забивают себе голову такими «мелочами», как многоязычность, а потому поддержку субтитров внедрять в игру придется собственноручно. Начнем с файла moviedata.xml — нас в нем интересуют строки вида:

[code]<Key filename=«levels/<название карты>/.../<имя звукового файла>.(mp2|wav) «Voice=»0»... />[/code]

Именно в них происходит обращение к звуковым файлам, нам нужно сделать так, чтобы при этом на экране отображались субтитры. Как и в случае с сообщениями, для этой задачи уже предусмотрено вполне конкретное решение. Помимо game_text_messages.xml, в russian.pak/Languages присутствует еще один Excel-файл dialog_recording_list.xml, в столбцах (как и выше — 2, 4, 18 ) которого располагаются идентификатор звукового файла, субтитры на английском (можно не переводить) и субтитры на русском.

Шаг 4: идентификаторы

Что такое субтитры, и так понятно — это тексты реплик, произносимых героем в данный момент. С идентификаторами же стоит разобраться отдельно. Чтобы субтитры сообщения отображались корректно, сам звуковой файл сообщения должен быть помещен в папку russian.pak/Languages/dialog/<название карты>, и тогда в роли идентификатора выступает <название карты>/<имя файла без расширения>. Остается лишь заменить путь для обращения к звуковому файлу и включить опцию Voice в moviedata.xml:

[code]<Key filename=«Languages/dialog/<название карты>/<имя звукового файла>.(mp2|wav)«Voice=»1»... />[/code]

Этой нехитрой заменой мы внедрили субтитры в скриптовые ролики игры. Но непродолжительный забег по уровню вскоре даст понять, что работа на этом у нас еще не окончена: оказывается, мы не учли массу внутриигровых диалогов (например, переговоры по рации), которые также требуют субтитров. Их вызов инициируется в разделах FlowGraph файла game_text_messages.xml:

[code]<FlowGraph...>

<Nodes>

<Node Id=«333» Class=«Sound:PlaySoundEvent»...>

<Inputs sound_SoundEvent=«<звуковой файл 1>« Voice=«1».../>

</Node>

<Node Id=”444» Class=«Sound:Dialog»...>

<Inputs sound_SoundName=«<звуковой файл 2>« Voice=«1».../>

</Node>

</Nodes>

<Edges>

<Edge nodeIn=«333» nodeOut=«...» portIn=«PlayTrigger» portOut=«...» enabled=«1»/>

<Edge nodeIn=«444» nodeOut=«...» portIn=«PlayTrigger» portOut=«...» enabled=«1»/>

</Edges >

</FlowGraph>[/code]

Два типа узлов отвечают за проигрывание звуковых файлов, но для воспроизведения диалогов и субтитров предназначен только Sound:Dialog. Sound:PlaySoundEvent нужен для проигрывания звуков скриптов, всевозможных стуков и музыкальных вставок, но картостроители сплошь и рядом используют его не по назначению. Поскольку эти узлы отличаются, в сущности, только названиями (остальные поля либо совпадают, либо для них используются значения по умолчанию), то элементарной заменой классов мы получаем возможность подключать субтитры. Указание нового пути к звуковому файлу и значения Voice=«1» производится так же, как и в moviedata.xml. Остается внести новые субтитры в dialog_recording_list.xml и наслаждаться полностью локализованной модификацией.



Этапы перевода экрана с заданиями:

1. Слева отображается название миссии и ее описание, справа маркером на карте отмечено искомое место.

2. Для перевода этих текстовых ресурсов необходимо поработать с файлом Objectives.xml.

3. Заменяем строки в атрибутах Name, Description и MapLabel их идентификаторами.

4. Помещаем строковые идентификаторы в Excel-файл game_text_messages.xml, который находится в архиве Russian.pak.

5. Теперь и название, и описание, и маркер миссии полностью на русском языке.

Источник: Статья Русификация модов для Crysis публикуются с разрешения редакции журнала "Игромания" .

Автор: Павел Севец


Сообщить об ошибке / дополнить материал

  Рейтинг:
Пользовательская оценка (от 1 до 10): 10.00   Проголосовавших: 1 с 2013-10-14 12:14

  Комментарии:
Пока комментариев нет