Вход в систему
Информация по игре "Half-Life 2"
http://www.halflife2.com
Последние статьи
Самые комментируемые статьи
5 шагов к локализации. Русификация модов для Half-Life 2Автор: Павел Севец
Полный текст
Если выстроить все игры, к которым наша игроманская геймдев-студия (кодовое название Format C:) переводит моды, по сложности локализации, то получится приблизительно такая цепочка. Проще всего (с точки зрения техники, но не времени) адаптировать на русский язык дополнения для Warcraft 3, затем идут Max Payne 2 и Titan Quest, очень близки к ним моды для Age of Empires 3. Куда труднее локализовать дополнения для TES 4: Oblivion и модели для Neverwinter Nights 2. Но самыми сложными для перевода всегда были и остаются моды для Half-Life 2. Но не так страшен черт, как его малюют: в «Игромании» №6’2008 мы рассказали вам, как в пять этапов сделать перевод любого дополнения для Warcraft 3, сегодня же уложим на лопатки Half-Life 2. Шаг 1: изучаем структурные особенностиС точки зрения движка Source любой мод представляет собой отдельную игру, просто «не подписанную» Valve и не запакованную в GCF-архив (в них через систему Steam распространяется цифровой контент). Структурно же любое дополнение состоит из измененных и дополнительных скриптов, звуков, текстур и карт, которые в строгой иерархии прописываются в каталоге Корневая папка Steam\SteamApps\SourceMods\название мода. Распределяются ресурсы по подпапкам этой директории следующим образом: maps — игровые карты мода. Без них, как правило, ни один приличный мод не обходится. Карты — связующее звено всех прочих ресурсов. Логика карты может обращаться к любым звукам как напрямую, так и посредством специальных идентификаторов, аналогично с текстовыми сообщениями. Так же вызываются скриптовые сцены. В общем, карты — это «главный штаб» мода. scenes — скриптовые (анимационные) сцены, используемые модом. Вызываются картами по требованию и сами могут обращаться к любым звуковым файлам напрямую или посредством идентификаторов. resource — очень важный каталог, где находятся новые шрифты и текстовые ресурсы мода. Без них не будет отображаться ни один диалог или монолог. scripts — скрипты и техническая часть мода. Здесь прописываются идентификаторы вызова и параметры всех звуковых и текстовых ресурсов. sounds — звуковое и музыкальное сопровождение мода. materials — текстуры. Корневая папка любого дополнения (ее название обычно соответствует названию дополнения) тоже содержит важные данные, по которым Steam идентифицирует мод. Чтобы не приходилось постоянно держать в голове, как папки связаны между собой, в какой содержатся главные, а в какой второстепенные ресурсы, внимательно посмотрите на диаграмму. На ней наглядно показано взаимоотношение между ресурсами. Текстовая начинкаВ игре полностью отсутствует функция вывода произвольного сообщения игроку. Half-Life 2 знает лишь понятия «сообщение на английском языке» (объект game_text) и «многоязычные титры» (объект env_message). Обычно западные мододелы не утруждают себя использованием титровых сообщений (ведь для этого необходимо прописывать дополнительную информацию в ресурсы мода) и используют упрощенный вариант — game_text. Выбор этот вполне очевиден. Для оформления такого сообщения достаточно указать в редакторе сам текст и некоторые параметры показа (цвет, положение на экране, эффекты). Вариант с env_message более громоздок. Вместо самого сообщения и горстки параметров используется лишь один идентификатор, который должен быть предварительно объявлен в файле \scripts\titles.txt в следующем формате: $<опция показа сообщения> <параметр 1> <параметр 2> ... <идентификатор сообщения> { #<название сообщения> } Блок под <идентификатором сообщения> (например, MAP1_MSG_0) не содержит текста сообщения и обращается к нему по <названию сообщения> (например, MAP1_TEXT_0), которое, в свою очередь, должно быть внесено в файл \resource\<название мода>_<язык игры>.txt (например, \resource\Rock24_russian.txt) по следующему правилу: «lang» { «Language» «<язык игры>» «Tokens» { «<название сообщения>» «<Текст сообщения>» ... } } <Текст сообщения> должен быть на <языке игры>, в том числе на русском. Именно поэтому оригинальные игры от Valve используют исключительно этот объект вывода сообщений: он обеспечивает поддержку многоязычности, а следовательно, повышает ее популярность — вот почему так важно переводить все игровые элементы, в особенности те, что отображаются визуально. Во время создания карты в редакторе Hammer объект game_text легко заменить на env_message, но после компиляции в BSP-формат внести изменения практически невозможно: все сообщения оказываются погребены под мегабайтами двоичных кодов. Как решить эту проблему, мы расскажем чуть попозже. СубтитрыВ качественной локализации должны быть качественные субтитры. С технической точки зрения они практически ничем не отличаются от текстовых сообщений. Субтитры аналогичным образом записываются в файл \resource\closecaption_<язык игры>.txt (например, \resource\closecaption_russian.txt), однако в остальном устроены несколько иначе. Они отображаются при воспроизведении соответствующих им звуков, этот процесс может быть запущен четырьмя способами. Во-первых, проигрывание звукового файла может быть инициировано объектом на карте, а также посредством обращения к скриптовой VCD-сцене из подпапки scenes. Во-вторых, начать проигрывание можно как прямым обращением к конкретному mp3- или wav-файлу из папки sound, так и с помощью звукового идентификатора. Такие идентификаторы должны совпадать с <названиями сообщений> из файла субтитров и помещаться в новый текстовый файл \scripts\<звуки мода>.txt (например, \scripts\Rock24_sounds.txt): «<название сообщения>» { «wave» «*/<подпапка в sound>/<название файла>.<mp3|wav>» «<звуковая опция>» «<параметр>» ... } Важно понимать разницу между звуковыми идентификаторами (которые совпадают с текстовыми) и идентификаторами сообщений (обращаются к текстовым идентификаторам). Именно ввиду этих различий игровые сообщения и субтитры разнесены по разным файлам, пусть и со схожей структурой. Файл со звуковыми идентификаторами для корректной работы, в свою очередь, должен быть зарегистрирован в файле \scripts\game_sounds_manifest.txt (это своего рода реестр всех используемых в игре звуков): game_sounds_manifest { «precache_file» «scripts/<звуки мода>.txt» ... } Итого у нас есть 4 способа проигрывания звуков, но лишь обращение к звукам по идентификаторам позволяет подключать субтитры. И, как назло, западные мододелы массово игнорируют эту возможность: англоязычным игрокам незачем читать субтитры, а остальной мир пусть учит международный язык. Кстати, если в моде есть озвучка, то можно и вовсе обойтись без субтитров. Достаточно всего лишь наговорить весь текст, который произносят персонажи, на русском (wav- и mp3-файлы из папки sound). Но в этом случае появится другая проблема: придется с нуля синхронизировать речь персонажей с движением их губ, а это, мягко говоря, очень непросто. Помимо этого, многие модостроители зачастую добавляют в свои моды новые текстуры, на некоторых из них могут быть надписи. Разумеется, в хорошей локализации все они должны быть переведены. Текстуры проживают в подпапке materials и имеют формат VTF (на самом деле это обычные DDS-картинки). Дополнительные ресурсыТеперь, когда мы разобрали основные категории ресурсов, запутанная диаграмма становится понятной. Итак, локализация мода для Half-Life 2 состоит из четырех основных этапов: перевод сообщений, субтитров, дубляж озвучки и перерисовка текстур. Но есть еще несколько мелких, но важных моментов. Во-первых, это файл <название мода>\gameinfo.txt, который содержит название мода и имена разработчиков, отображаемые в меню Steam: «GameInfo» { game «<перевод названия мода>» developer «<название/имя разработчика>» ... } Файл редактируется любым текстовым редактором, но обязательно должен быть сохранен в юникод-формате UTF-8. Во-вторых, необходимо русифицировать файлы шрифтов \resource\*.ttf, но можно их и просто заменить другими подходящими по стилю. В-третьих, нужно позаботиться о переводе на русский язык финальных титров мода, которые находятся в текстовом файле \scripts\credits.txt (тоже в кодировке UTF-8), нас интересует блок: «OutroCreditsNames» { «<строка>» «<идентификатор шрифта>» ... } <Идентификатор шрифта> дополнительно описывается в файле \resource\ClientScheme.res так: <идентификатор шрифта> { «1» { «name» «<имя ttf-файла из \resource>» ... } } Шаг 2: локализуем текстЕсли локализовывать весь контент Half-Life 2 вручную, то на одно небольшое дополнение у вас вполне может уйти несколько месяцев кропотливой работы, да еще и в программировании придется серьезно разбираться. Чтобы облегчить себе жизнь, мы разработали набор утилит, благодаря которым некоторые рутинные действия удалось автоматизировать. Так что теперь переводить моды для игры может даже обычный человек, ничего не смыслящий в кодинге. Главный инструмент нашего софтверного набора — программа 1CLICK_RIP. Работает она следующим образом. Перетаскиваем на исполняемый файл утилиты папку мода (да-да, просто хватаете в файловом менеджере папку мышкой и кидаете на ехе-шник) и через 10-20 секунд получаем в папке мода файл locale_text.txt, в котором содержится весь извлеченный текст и указания по его помещению в игру. Сообщения из карт и субтитры (если в моде есть звуки) достаточно разложить по нескольким ресурсным и скриптовым файлам, и все — можно приступать к переводу. Если текст сообщений из файла \resource\<название мода>_russian.txt достаточно просто перевести на русский, то файл с субтитрами \resource\closecaption_russian.txt необходимо перекомпилировать с помощью входящего в Source SDK компилятора субтитров (он нормально работает, только если у вас установлен Orange Box или отдельно Team Fortress 2). К сожалению, он сложен в освоении, так что мы разработали вспомогательную утилиту RECOMPILE_CC. Перетащив на нее иконку файла с субтитрами, вы получите полностью откомпилированную версию. Главное, чтобы Steam был запущен, а в списке Current Game меню Source SDK была выбрана одна из игр, входящих в Orange Box. В 80% случаев программы 1CLICK_RIP достаточно для извлечения всех требуемых ресурсов. Но у нее есть один минус: она не знает, что находится в звуковых файлах, и потому для всех найденных файлов создает субтитры. Разумеется, это не всегда удобно, например в случае с музыкой или различными звуками. На этот случай мы создали более продвинутый вариант утилиты извлечения, состоящий из двух частей: PROCESS_ENTS_ST1 и PROCESS_ENTS_ST2. После применения первой утилиты в папках maps, sound и scenes появляется полный список карт, звуков и сцен, которые указывают второй утилите, какие ресурсы нужно обрабатывать, а какие нет. Кроме того, в корневой папке мода появляется плейлист-файл mod_sounds.m3u. Как нетрудно догадаться, это тоже список всех звуковых файлов, но предназначенный для прослушивания в обычном музыкальном плеере. Зачем это нужно? Запуская плейлист на воспроизведение и по очереди слушая звуковые фрагменты, удаляем из списка файлы без речи, после чего сохраняем его. Теперь с помощью утилиты M3U2LIST можно легко обновить список звуков для обработки. По окончании работы второй утилиты мы получаем тот же результат, что и в случае с 1CLICK_RIP, но без лишних субтитров. Шаг 3: синхронизируем речьНа время отложим в сторону комплект утилит и обратимся к проблемам дублирования. Для переозвучивания персонажей нужно совсем немного: более-менее качественный микрофон, нешумная комната и немного актерского мастерства. Кроме того, пригодится программа звукозаписи (к примеру, бесплатная Audacity) и установленный Source SDK, из которого понадобится утилита Face Poser для синхронизации движения губ и речи героев (lip-sync). Чтобы утилита смогла распознавать фонемы, необходимо также установить MS Speech API. И если процесс переозвучивания в большей степени очевиден, то этап работы в Face Poser для многих остается темным лесом. Записанный звуковой файл загружается в Phoneme Editor командой Load. Затем начинается расстановка фонем: выделяем небольшой законченный фрагмент речи, кликаем на нем правой кнопкой мыши и в контекстном меню выбираем пункт Redo extraction of selected words. Появляется небольшое окошко, в котором нужно задать ключевые слова выделенной фразы. Тут важен один нюанс: печатать нужно не русскую фразу, а ее транслитерацию. Например, вместо фразы «Капрал Шепард» мы пишем «kapral shepard». После расстановки фонем нужно провести корректировку: заменить ошибочно распознанные/добавить/удалить элементы. Face Poser, к сожалению, не отличается интуитивно понятным интерфейсом, поэтому этапы работы в нем наглядно проиллюстрированы на картинке. Главное, подготовьтесь морально: синхронизация — дело довольно трудоемкое, на него может уйти очень много времени. После создания lip-sync жмем Save, и результат наших трудов прописывается в конец wav-файла. Вот только что делать, если понадобится немного подправить звуковой файл (например, изменить громкость в Audacity) уже после работы в Face Poser? Увы, после сохранения изменений данные lip-sync будут безвозвратно потеряны. Для предотвращения подобной, не побоимся этого слова, катастрофы мы разработали еще две очень полезные утилиты — EXPORT_LIPSYNC и IMPORT_LIPSYNC. Чтобы создать резервную копию синхронизации, достаточно перетащить подпапку sound на утилиту экспорта, а для восстановления — на утилиту импорта. Шаг 4: перерисовываем текстурыРабота с текстурами потребует наличия Photoshop или любого другого мощного графического редактора (для перерисовки изображений) и набора вспомогательных утилит и плагинов. Очень важно, чтобы была возможность легкого просмотра VTF-файлов для отбора текстур на перерисовку. В этом нам помогут VTF Shell Extensions (просмотр миниатюр в Проводнике Windows) и очень популярный скоростной просмотрщик графики IrfanView (для просмотра текстур в натуральную величину). Также необходимо установить плагин для редактирования VTF-файлов в Photoshop или средство конвертирования в один из «понятных» любому редактору формат (например, Targa) — VTF Edit. Эта программа полезна еще и тем, что позволяет работать с анимированными текстурами. Когда весь софт установлен, действуем по схеме: просмотрели текстуры, выбрали те, на которых есть надписи на английском, сконвертировали их, в графическом редакторе изменили надписи на русские, провели обратную конвертацию.
Шаг 5: сохраняем кодировкуЛокализация потихонечку подходит к концу. Осталось лишь разобраться, как правильно сохранять текстовые файлы в кодировке UTF-8, чтобы игра распознавала их корректно. Несмотря на то что сохранить текст в указанном формате можно и обычным «Блокнотом», игра такой файл понимать наотрез отказывается. Поэтому для работы нам понадобится текстовый перекодировщик «Штирлиц»: открываем в нем файл, переводим требуемые фрагменты на русский язык, после чего осуществляем преобразование WIN/UTF-8 и сохраняем файл с полученной «абракадаброй». Теперь игра не будет капризничать. Всего обоев: 16 Новостей: 8 Все новости по игре 30.12.2009 - Блиц-новости18.09.2009 - Живое звучание Half-Life 217.02.2009 - Блиц-новости12.11.2007 - Valve держит Episode 3 в тайне08.11.2007 - Source SDK в твоих руках!19.10.2007 - Portal Gun в HL2? Реально!12.10.2007 - The Orange Box и Ко09.10.2007 - Мир в оранжевом цвете Статей: 39 Все статьи по игре 25.10.2009 - Во что играли 5, 10, 15 и 20 лет назад08.10.2008 - Коды по "Half-Life 2" (читательские пасхалки)10.09.2008 - 5 шагов к локализации. Русификация модов для Half-Life 208.03.2008 - Игровое редактирование30.04.2007 - Игровое редактирование28.03.2007 - Коды по "Half-Life 2" (читательские пасхалки)01.03.2007 - Коды по "Half-Life 2" (читательские пасхалки)29.01.2007 - Half-Life 2: Episode One. Друзья и враги Гордона Фримена29.01.2007 - Игровое редактирование22.12.2006 - Кодекс по "Half-Life 2" (читательские пасхалки)17.10.2006 - Игровое редактирование04.07.2006 - Half-Life 2: Халфа мультичитерская22.03.2006 - Коды по "Half-Life 2"06.03.2006 - Коды по "Half-Life 2"10.02.2006 - Коды по "Half-Life 2"31.08.2005 - Моделлинг в Half-Life 2, часть 3. Компиляция29.08.2005 - Коды по "Half-Life 2"02.08.2005 - Коды по "Half-Life 2" (easter eggs)02.08.2005 - Моделлинг в Half-Life 2, ч. 2. XSI Mod Tool: наложение текстур и анимация06.07.2005 - Моделлинг в Half-Life 2. XSI Mod Tool: вводный курс08.06.2005 - Моделирование в Half-Life 2. Общие принципы08.06.2005 - Замена моделей Half-Life / Half-Life 201.06.2005 - Коды по "Half-Life 2" (ресурсы)08.04.2005 - Руководство и прохождение по "Half-Life 2"31.03.2005 - Киберспорт. Дом летающих унитазов31.03.2005 - Игровое редактирование31.03.2005 - Редактор Half-Life 2, часть 2. Геометрия уровня22.03.2005 - Коды по "Half-Life 2"01.03.2005 - Лучшие игры 200401.03.2005 - Редактор Half-Life 2, часть 1. Настройки и основы работы01.03.2005 - Бондиана Half-Life 201.03.2005 - Локализация HL2 за 5 минут26.01.2005 - Движок Source Engine от Valve Software. Пламенный двигатель Half-Life 226.01.2005 - Новое оружие для Half-Life 225.01.2005 - Half-Life 227.10.2004 - Игровые редакторы31.03.2004 - В центре внимания "Half-Life 2"22.12.2003 - В центре внимания "Half-Life 2"06.11.2003 - Half-Life 2 Файлов: 1 Все файлы по игре |