Советы переводчикам старых игр
Dimouse — автор этой статьи. Вы можете свободно копировать и распространять данный текст, но только при соблюдении условий, что оригинальное авторство и лицензия будут сохранены в производной работе. Текст распространяется под лицензией Creative Commons Attribution-Share Alike (by-sa) 3.0. Разрешается добавлять примечания и исправлять опечатки; остальные действия не рекомендованы.
|
версия 0.0.2 :) Спасибо за помощь ребятам из Бюро переводов Old-Games.Ru!
Техническая часть
Я решил перевести старую игру! С чего мне начать?
Первым делом следует поискать не переведена ли игра уже до вас. К этому моменту нужно подойти со всей серьезностью - есть вероятность, что перевод не стал распространенным и о нем существуют лишь скудные упоминания.
Хорошо! Я весь интернет перерыл, но ничего про перевод не увидел. Так что же делать дальше?
Теперь следует оценить свои силы и знания (перевести игру можно и в одиночку, но для этого нужно хорошо знать программирование, уметь рисовать и знать на очень высоком уровне русский и английский языки). Также обязательным условием служит очень большая любовь к самой игре - иначе может просто не хватить энтузиазма.
Я прекрасно знаю ассемблер, учился в художественной школе и окончил факультет иностранных языков! Обожаю игру X, с детства в нее играю и всегда мечтал перевести. Что мне для этого делать?
Третий этап - техническая работа. Необходимо определить, где в игре находятся "тексты" и шрифты. Тексты в общем случае - это как надписи (меню, служебные сообщения и т.д.), так и большие объемы однородного текста (брифинги в стратегиях, энциклопедии (такие как уфопедия или цивилопедия в соответствующих играх), диалоги в квестах и т.д.). Зачастую, служебные сообщения авторы игры помещают непосредственно в exe файл, большие же тексты как правило лежат в отдельных файлах ("ресурсах игры").
Какие бывают виды ресурсов?
Первая группа — это ресурсы, лежащие в открытом виде, когда каждая текстура, каждый звук, каждый скрипт и прочие “кирпичики” игрового мира хранится в отдельном файле.
Вторая группа — это ресурсные файлы, которые группируются по какому-либо признаку, после чего помещаются в один общий файл (архив). Если ресурсные файлы при этом подвергаются сжатию, то такие архивы принято называть именно архивами; если же файлы записываются в исходном виде, то есть без сжатия, это псевдоархивы.
Так, тексты я вроде нашел, можно их уже переводить?
Даже если вы нашли тексты, не спешите их переводить. Это бессмысленно, если вы не сделаете свои русские шрифты. В большинстве досовских игр используются собственные несистемные шрифты, которые содержатся в ресурсах игры. Найти шрифты - дело нетривиальное, так как в разных играх их структура (как и структура графики в целом) может быть очень разная. Следует поискать open-source порты этих игр на новые платформы, у многих известных игр они есть. Они читают ресурсы оригинальных игр, так что исследуя исходники, можно понять где лежат шрифты и как они выглядят. Например, для старых квестов неоценимую помощь может оказать проект ScummVM.
Все-таки я не понял, как эти шрифты выглядят. Можно несколько примеров?
Часто в играх используется простой одноцветный шрифт 8x16. Это означает, что каждый символ состоит из 8 пикселей в ширину и 16 в высоту. В таком шрифте пиксели бывают только в двух состояних - закрашенный и незакрашенный (то есть занимают 1 бит памяти). Таким образом, полный шрифт из всех 256 ASCII символов занимает 4096 байтов памяти (8*16*256 бит). Следует пройтись hex-редактором по всем файлам игры и поискать там подозрительные группы из такого количества байт.
Конечно, может быть и очень простой вариант - что шрифты лежат прямо в отдельном файле. В таком случае, вероятно, в названии файла содержится слово "FONT" или "FNT". Первым делом следует поискать такие файлы и изучить их.
Но может быть и сложный вариант - ресурсы игры запакованы и простым просмотром файлов их найти невозможно (см. далее вопрос о запакованных ресурсах).
Еще кое-что о шрифтах:
Dimouse (цитата с форума): Интересное воспоминание, как я шрифты где-то искал: чертил на бумажке сетку 8 на 16, потом в уме или на виндовом калькуляторе раскладывал 16-чное число на двоичное и закрашивал нужные точки, потом смотрел следующий байт, закрашивал следующую строчку и т.д. - если буква получалась - супер! Кстати еще один из признаков стандартного шрифта 8 на 16 - это что там нулевых байтов много (так как маленькие буквы, например, - точно всегда не укладываются в столько пикселей по вертикали).
Steel Rat (примеры шрифтов): Как определить, что перед нами за файл такой? Прежде всего по названию файла. Лучший пример с которого мы можем начать – это шрифт UFO, X-COM II. BIGLETS.DAT сразу нам говорит о том, что в нём Big Letters. И само содержимое файла просто для понимания. Если на следующих картинках вы ничего не видите – разбор ресурсов не для вас.
Чем же мы обязаны такому счастью? Шириной символа и методом сжатия. Ширина у нас равна 16 пикселям, а сжатия нет вообще. Признаюсь, впервые увидев такое чудо я: во-первых, наконец-то понял, как вообще хранится информация в компьютере, во-вторых, начал редактировать шрифт прямо из хекс-редактора, чем в данном случае является Dos Navigator.
Конечно, это очень быстро надоело, несмотря на абсолютно свободное время. Тогда и был изготовлен мой первый, полноценный, редактор шрифтов. Если вы хотите одновременно и научиться программированию и сделать утилиту – лучшего объекта для этого, чем шрифты UFO просто нет. Проблема будет заключаться в другом, шрифты мы отредактируем, а ширина символа хранится отдельно. Не помню где. Но это другой разговор.
Следующие шрифты из игр X-Wing и Tie-Fighter. Конкретно рассматриваемые находятся в библиотеке данных, которую очень просто распаковать, это тоже надо сделать самому, после редактора шрифтов UFO должно получиться. На первом рисунке изображён заголовок - первые байты - шрифта. В этом файле вся информация о шрифте хранится в нём самом. Данные относящиеся непосредственно к шрифту здесь начинаются с 16го байта. Первое значение, 0x0020, тридцать два, посмотрев таблицу кодировок (ASCII), вы увидите, что, можно сказать, основные символы начинаются именно с 32ого – пробела. Следующее значение, 0x00E0, количество символов в шрифте. Далее максимальная высота, 0х0008, то есть количество байт на символ, ведь этот шрифт - битовый, т.е. один бит – одна точка, что гораздо экономичнее, а в стародавние времена память ценили. Я подозреваю, что это пошло с монохромных мониторов, и скорее всего ещё с тех времён, когда и мониторов-то не было. Продолжаем, далее у нас 0х0006 и 0х0004, не помню, что это. Да и не важно. Затем у нас идёт таблица ширины каждого символа, коих у нас 0xE0. Ну, и затем сами данные.
Так вот, один из способов найти шрифт, или таблицу ширины для UFO – искать в файлах подобную последовательность байтов, как наша таблица ширин. Небольшие значения, в количестве символов шрифта. В случае с UFO мы даже можем подсчитать значения ширины нескольких символов и потом тупо искать её на автомате, а не вручную.
В большинстве случаев, данные битовых шрифтов имеют подобный вид, как на следующих двух рисунках. Часто повторяющиеся символы, нули с прослеживаемой периодичностью. Много значений двойки в какой-то степени.
В FONT8.FON и совсем хорошо, ведь его высота, а так же количество байт на символ равно восьми и это очень хорошо видно в хекс-редакторе.
А вот шрифт в Elite 2: Frontier. Он находится в оверлее программы, т.е. в скомпилированном исполняемом файле. Нашёл я его тупо листая файлы подряд, и название EL2MCGA3.OVL подсказало, что что-то связанное с графикой здесь есть. Как видите, очень похоже на примеры выше. И так выглядят практически все битовые шрифты, конечно, в распакованном виде. Кстати, перед шрифтом, там ещё идёт цветовая палитра, её тоже на глаз хорошо видно.
На всякий случай - редактор шрифтов для Elite2[1], сделан на коленке за полтора часа. Выглядит страшно, но работает. О шрифтах пока всё. Есть вопросы? Задавайте. До связи.
Тут было упомянуто слово "hex-редактор". Что это и как им пользоваться?
Hex-редактор (произносится как "хекс-редактор") - программа, позволяющая редактировать нетекстовые (бинарные) файлы, а также зачастую показывать дизасcемблированный код программы (если файл - запускаемый). Мой любимый hex-редатор - это HIEW. С помощью такой программы вы сможете изменить определенные байты программы на другие. Если вам кажется, что вы нашли шрифт, можно например поменять один байт в нем на другой, тогда при запуске игры можно будет это легко заметить. HIEW не предназначен для редактирования текста, поэтому расширять или уменьшать длину файла нельзя (то есть, если вам нужно заменить все 0x00 на 0x0A+0x0D, то вам придется использовать FAR (или другую программу)).
А вот насчет "запакованных ресурсов" что можете посоветовать?
Сначала надо очень внимательно поискать информацию в интернете. Часто, даже если нет open-source порта данной игры, кто-то где-то изучал ресурсы и какие-то факты смог выяснить. Например, такая информация, как алгоритм паковки ресурсов в данной игре (если она не слишком редкая), очень часто известна. Есть определенные форматы файлов, которые использовали разработчики специально для своих игр, для многих из них существуют распаковщики. В частности, для распаковки EXE файлов есть универсальные распаковщики [2]. Искать текст или ресурсы в EXE файле до распаковки не имеет смысла. Информация о паковщике EXE файла также часто содержится в начале этого файла. Много информации по ресурсам разных игр есть на сайте Extractor.ru Для распаковки игровых ресурсов могут пригодиться универсальные распаковщики игровых ресурсов, многие из которых поддерживают десятки игр.[3][4][5]
Если же найденная информация гласит, что это "какая-то разновидность RLE кодирования", то это может быть сложнее, так как разновидностей можно придумать много. Для распаковки таких файлов потребуется недюжинное знание алгоритмов и большой опыт программирования. Но в этом случае, советы излишни.
Какие ещё программы мне могут помочь в разборе ресурсов?
На стадии анализа ресурсов, полезно сравнивать однотипные виды данных выявляя общие закономерности. Для этих целей существует платная программа HexCmp2, которая совмещает в себе функции приложения для сравнения бинарных файлов и удобного HEX-редактора
(от Sledgy) С сайта программу скачать не удаётся. Рабочую версию можно взять отсюда HexCmp2 ver2.20 (software, но полностью функциональна)
Графика
Я нашел в игре картинки (PCX/BMP/LBM и т.д.), пытаюсь их отредактировать, но в игре показывается какая-то фигня (как вариант - вся палитра сбита!)
Внимательно посмотрите, какое количество цветов используется и не меняете ли вы разрядность картинки. В старых играх очень часто используются 8 битные текстуры (или картинки), использующие палитровую систему. Палитра состоит из этих самых 256 цветов. При редактировании картинки не следует менять разрядность и палитру (то есть она должна состоять из тех же 256 цветов).
А как мне найти эту палитру?
Поскольку старые игры зачастую могут отображать только 256 цветов, палитра часто не хранится в самих картинках, а где-то отдельно. Найти ее в ресурсах не всегда можно (а ведь она может быть задана жестко в программе!), но всегда есть простой способ - сделать скриншот в игре и посмотреть на палитру скриншота. Заодно поищите по файлам игры, цепочки байтов RGB (взятые из скриншота), не исключено что Вы сразу найдёте искомое.
Перевод текста
Какой программой лучше переводить текст?
Если редактировать файл игры, содержащий спецсимволы, Блокнотом (Notepad), то текст портится!
Есть много хороших программ для редактирования текста, которыми можно в том числе редактировать файлы, содержащие не только текст (а в старых играх обычно так и делалось). Я лично рекомендую очень удобный бесплатный редактор Bred 3 от российских разработчиков. Этим редактором очень удобно вносить быстрые правки в бинарные файлы с текстом и т.п.
Для тщательной же работы, рекомендуется составить таблицу в Excel, содержащую фразу в оригинале, ваш вариант перевода и комментарий. Таким образом будет удобно и сверять переводы и оставлять заметки для других участников перевода.
При работе с текстом зачастую нужно сравнивать два файла, например старую и новую версию. Для этих целей существует бесплатная программа WinMerge. Для поиска определенного слова или строки в большом количестве файлов пригодится бесплатная программа Notepad++
Я перерисовал шрифт игры и теперь вместо английских букв у меня русские, плюс я использовал кое-какие спецсимволы. Как мне теперь писать текст, чтобы в игре отображалось по-русски?
Посмотрите, нет ли возможности использовать ту часть ASCII таблицы, которая отвечает за русские символы (в DOS или Windows кодировке). Если такой возможности точно нет - то следует написать программу-конвертор, которая будет превращать русские символы, которыми вы будете писать в те символы, которые соответствуют данным буквам в шрифтам. Например, вы перерисовали букву "z" в шрифте в "ы". Тогда программа должна превращать вашу "ы" в тексте в "z", чтобы игра правильно понимала написанное. Альтернативный вариант - запомнить, что "ы" соответствует "z" и писать сразу "z":) При этом не лишним будет перерисовать шрифт так, чтобы созвучные буквы соответствовали друг другу ("f" - "ф", "t"-"т", "w" - "ш" и т.д.)
Обязательно ли переводить все дословно или в переводе допустимо вставлять что-то от себя? Например, что делать с именами, их надо переводить или можно придумать свои?
Переводить следует как можно ближе к тексту. Это не надо понимать буквально - ведь само построение фразы в русском и английском языке разное. Поэтому очень часто следует перестраивать фразы, чтобы они звучали как можно естественнее и ни в коем случае не коряво:) Смысл фраз нужно понимать обязательно - если вы коверкаете или вырезаете часть фраз оригинала - вы показываете свое неуважение к авторам игры. Каждое отклонение от оригинала (использование понятия, предмета или выражения которое лишь косвенно соотносится с оригинальным, но гораздо больше понятно русскоязычному игроку) - следует тщательно взвешивать и отбирать из разных вариантов (для этого полезно опросить команду, если вы работаете в команде или просто знакомых/родственников, если нет).
Что касается имен и названий - вопрос сложный. Многие переводчики (в том числе профессиональные) - меняют все имена на свои, как им кажется, более благозвучные. Но тут опять же следует помнить об уважении к оригинальным авторам и о сохранении атмосферы оригинала (то есть использование русских имен в исключительно английском антураже, например, - просто глупо). Если имя/название не несет никакого смысла, стоит его оставить как оно есть, по возможности транслитерировав его на русский так, чтобы оно звучало благозвучно. Если имя в игре принадлежит человеку определенной национальности (например, немцу), следует переводить его в соответствии с правилами перевода с немецкого языка на русский. По поводу грамотной транслитерации имен и названий на русский язык стоит посмотреть статью.[6] (thanks, tRusty!). Если имя персонажа/название места несет в себе какой-то смысл (например, имя может состоять из двух английских слов), то следует его переводить.
Помните, если Вы начнёте повсеместно использовать фразы “от себя”, то это будет не перевод, а пересказ по мотивам игры.