Советы переводчикам старых игр

Материал из Old-Games.RU Wiki
Версия от 14:46, 3 августа 2017; Dimouse (обсуждение | вклад) (убраны нерабочие ссылки)
Перейти к навигации Перейти к поиску
Creative Commons: некоторые права защищены
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 editor) по всем файлам игры и поискать там подозрительные группы из такого количества байт.

Конечно, может быть и очень простой вариант — что шрифты лежат прямо в отдельном файле. В таком случае, вероятно, в названии файла содержится слово «FONT» или «FNT». Первым делом следует поискать такие файлы и изучить их. В этом деле вам сильно может помочь бесплатная программа GBS (GraphBitStreamer), написанная Steel Rat-ом.

Но может быть и сложный вариант — ресурсы игры запакованы и простым просмотром файлов их найти невозможно (см. далее вопрос о запакованных ресурсах).

Еще кое-что о шрифтах:

Dimouse (цитата с форума):

Aquote1.png
Интересное воспоминание, как я шрифты где-то искал: чертил на бумажке сетку 8 на 16, потом в уме или на виндовом калькуляторе раскладывал 16-чное число на двоичное и закрашивал нужные точки, потом смотрел следующий байт, закрашивал следующую строчку и т.д. - если буква получалась - супер! Кстати еще один из признаков стандартного шрифта 8 на 16 - это что там нулевых байтов много (так как маленькие буквы, например, - точно всегда не укладываются в столько пикселей по вертикали).
Aquote2.png

Steel Rat (примеры шрифтов):

Как определить, что перед нами за файл такой? Прежде всего по названию файла. Лучший пример с которого мы можем начать — это шрифт UFO, X-COM II. BIGLETS.DAT сразу нам говорит о том, что в нём Big Letters. И само содержимое файла просто для понимания. Если на следующих картинках вы ничего не видите — разбор ресурсов не для вас.

Sr font ex1.gif

Чем же мы обязаны такому счастью? Шириной символа и методом сжатия. Ширина у нас равна 16 пикселям, а сжатия нет вообще. Признаюсь, впервые увидев такое чудо я: во-первых, наконец-то понял, как вообще хранится информация в компьютере, во-вторых, начал редактировать шрифт прямо из hex-редактора, чем в данном случае является Dos Navigator.

Sr font ex2.gif

Конечно, это очень быстро надоело, несмотря на абсолютно свободное время. Тогда и был изготовлен мой первый, полноценный, редактор шрифтов. Если вы хотите одновременно и научиться программированию и сделать утилиту — лучшего объекта для этого, чем шрифты UFO просто нет. Проблема будет заключаться в другом, шрифты мы отредактируем, а ширина символа хранится отдельно. Не помню где. Но это другой разговор.

Следующие шрифты из игр X-Wing и TIE-Fighter. Конкретно рассматриваемые находятся в библиотеке данных, которую очень просто распаковать, это тоже надо сделать самому, после редактора шрифтов UFO должно получиться. На первом рисунке изображён заголовок — первые байты — шрифта. В этом файле вся информация о шрифте хранится в нём самом. Данные относящиеся непосредственно к шрифту здесь начинаются с 16го байта. Первое значение, 0x0020, тридцать два, посмотрев таблицу кодировок (ASCII), вы увидите, что, можно сказать, основные символы начинаются именно с 32ого — пробела. Следующее значение, 0x00E0, количество символов в шрифте. Далее максимальная высота, 0х0008, то есть количество байт на символ, ведь этот шрифт — битовый, то есть один бит — одна точка, что гораздо экономичнее, а в стародавние времена память ценили. Я подозреваю, что это пошло с монохромных мониторов, и скорее всего ещё с тех времён, когда и мониторов-то не было. Продолжаем, далее у нас 0х0006 и 0х0004, не помню, что это. Да и не важно. Затем у нас идёт таблица ширины каждого символа, коих у нас 0xE0. Ну, и затем сами данные.

Так вот, один из способов найти шрифт, или таблицу ширины для UFO — искать в файлах подобную последовательность байтов, как наша таблица ширин. Небольшие значения, в количестве символов шрифта. В случае с UFO мы даже можем подсчитать значения ширины нескольких символов и потом тупо искать её на автомате, а не вручную.

Sr font ex3.gif

В большинстве случаев, данные битовых шрифтов имеют подобный вид, как на следующих двух рисунках. Часто повторяющиеся символы, нули с прослеживаемой периодичностью. Много значений двойки в какой-то степени.

Sr font ex4.gif

В FONT8.FON и совсем хорошо, ведь его высота, а так же количество байт на символ равно восьми и это очень хорошо видно в хекс-редакторе.

Sr font ex5.gif

А вот шрифт в Elite 2: Frontier. Он находится в оверлее программы, то есть в скомпилированном исполняемом файле. Нашёл я его тупо листая файлы подряд, и название EL2MCGA3.OVL подсказало, что что-то связанное с графикой здесь есть. Как видите, очень похоже на примеры выше. И так выглядят практически все битовые шрифты, конечно, в распакованном виде. Кстати, перед шрифтом, там ещё идёт цветовая палитра, её тоже на глаз хорошо видно.

Sr font ex6.gif

О шрифтах пока всё. Есть вопросы? Задавайте. До связи.

Тут было упомянуто слово «hex-редактор». Что это и как им пользоваться?

Редактор шестнадцатеричных кодов, или hex-редактор, (произносится как «хекс-редактор») — программа, позволяющая редактировать нетекстовые (бинарные) файлы, а также зачастую показывать дизассемблированный код программы (если файл — запускаемый). Мой любимый hex-редатор — это HIEW. С помощью такой программы вы сможете изменить определенные байты программы на другие. Если вам кажется, что вы нашли шрифт, можно например поменять один байт в нем на другой, тогда при запуске игры можно будет это легко заметить. HIEW не предназначен для редактирования текста, поэтому расширять или уменьшать длину файла нельзя (то есть, если вам нужно заменить все 0x00 на 0x0A+0x0D, то вам придется использовать FAR (или другую программу)).

А вот насчет «запакованных ресурсов» что можете посоветовать?

Сначала надо очень внимательно поискать информацию в интернете. Часто, даже если нет open-source порта данной игры, кто-то где-то изучал ресурсы и какие-то факты смог выяснить. Например, такая информация, как алгоритм паковки ресурсов в данной игре (если она не слишком редкая), очень часто известна. Есть определенные форматы файлов, которые использовали разработчики специально для своих игр, для многих из них существуют распаковщики. В частности, для распаковки EXE файлов есть универсальные распаковщики. Искать текст или ресурсы в EXE файле до распаковки не имеет смысла. Информация о паковщике EXE файла также часто содержится в начале этого файла. Много информации по ресурсам разных игр есть на сайте Extractor.ru.

Для распаковки игровых ресурсов могут пригодиться универсальные распаковщики игровых ресурсов, многие из которых поддерживают десятки игр.[1][2][3]

Если же найденная информация гласит, что это «какая-то разновидность RLE кодирования», то это может быть сложнее, так как разновидностей можно придумать много. Для распаковки таких файлов потребуется недюжинное знание алгоритмов и большой опыт программирования. Но в этом случае, советы излишни.

Какие ещё программы мне могут помочь в разборе ресурсов?

На стадии анализа ресурсов, полезно сравнивать однотипные виды данных выявляя общие закономерности. Для этих целей существует платная программа HexCmp2, которая совмещает в себе функции приложения для сравнения бинарных файлов и удобного hex-редактора.

Графика

Я нашел в игре картинки (PCX/BMP/LBM и т. д.), пытаюсь их отредактировать, но в игре показывается какая-то ерунда (как вариант — вся палитра сбита!)

Внимательно посмотрите, какое количество цветов используется и не меняете ли вы разрядность картинки. В старых играх очень часто используются 8-битные текстуры (или картинки), использующие палитровую систему. VGA-палитра состоит из этих самых 256 цветов. При редактировании картинки не следует менять разрядность и палитру (то есть она должна состоять из тех же 256 цветов).

А как мне найти эту палитру?

Поскольку старые игры зачастую могут отображать только 256 цветов, палитра часто не хранится в самих картинках, а где-то отдельно. Найти ее в ресурсах не всегда можно (а ведь она может быть задана жестко в программе!), но всегда есть простой способ — сделать скриншот в игре и посмотреть на палитру скриншота. Заодно поищите по файлам игры, цепочки байтов RGB (взятые из скриншота), не исключено что Вы сразу найдёте искомое.

Классические VGA-палитры имеют фиксированный размер в 768 байт (3 байта на RGB * 256), так что если после распаковки ресурса вы найдете файлы с таким размером, то на 80 % это - VGA-палитры. Обычно первый цвет в палитре - черный, так что первое значение обычно будет 00 00 00 (тоже неплохой способ детектировать палитры).

Палитра хранится в трехбайтной упаковке по шесть бит на цветовой канал (значения от 0 до 63), иначе говоря, глубина цвета такой палитры - 18 бит. Чтобы представить ее в современной 24-битной глубине (по восемь бит на цветовой канал), нужно провести несложные вычисления с каждым цветовым каналом по следующей формуле:

цветовой_канал_8_бит = (цветовой_канал_6_бит << 2) | (цветовой_канал_6_бит >> 4)

Обратное преобразование следующее:

цветовой_канал_6_бит = цветовой_канал_8_бит >> 2

Видеовставки

Я хочу перевести игру X. В этой игре, помимо графики и текстов, которые необходимо перевести, есть небольшие видеовставки, содержащие иностранный текст. Как мне их перевести?

Прежде всего вам необходимо убедиться, что это именно видеовставки, а не анимация, состоящая из картинок, которые отображаются в нужном месте и в нужное время (проще говоря, следуют заложенному сценарию). Определить это можно, даже не разбирая ресурсы игры, по следующим факторам:

  • плавное передвижение камеры (характерно только для видеовставок, для очень сложных анимаций характерно передвижение камеры «рывками»);
  • закадровый голос, диалоги (обычно характерно для видеовставок, реже для анимаций);
  • плавность движений объектов (в анимациях обычно движения объектов резки, иногда можно заметить повторение одних и тех же кадров/анимационных частей; в видеовставках объекты чаще всего двигаются плавно);
  • продолжительность (для анимаций характерна сравнительно маленькая продолжительность, для видеовставок почти любая).
Я абсолютно точно знаю, что это видеовставки: камера двигается прям как в рекламе «вентиляторного завода», очень много закадрового голоса, диалогов, звуковых эффектов, да и сам ролик довольно-таки продолжителен. Что мне делать дальше?

Сначала вам надо найти сами файлы, содержащие видео. Они могут быть запакованы в архив с игровыми ресурсами (насчет разбора запакованных ресурсов читайте здесь.). После нахождения этих файлов вам будет необходимо определить формат, в котором хранится видео. Иногда разработчики придумывают свои эксклюзивные форматы для хранения видео (например в игре Doom 2D версии 1.30 использовался свой формат видео для видеовставки, появляющейся при окончании игры). Если это «эксклюзивный формат», то здесь вам придется либо попотеть самим над его разбором, либо поискать информацию в каких-нибудь других источниках. Но вполне возможно, что разработчики игры использовали сторонние форматы видео (например, в середине 90-х годов прошлого века среди различных игропроизводителей был весьма популярен формат SMK (Smacker Video)[4] от компании RAD Game Tools).

Я нашел видео и сконвертировал его в удобный для редактирования формат. Начал редактировать — а звук отсутствует. В чем может быть дело?

Если вы сами разбирали формат и писали конвертер, то вполне возможно, что вы что-то недоразобрали в формате видео (как вариант — звук находился в конце видеофайла, а вы его пропустили) или в чем-то ошиблись =). Но если вы уверены в то, что абсолютно правильно разобрали формат или это был формат стороннего разработчика, для которого уже существуют специальные утилиты-конвертеры, то возможен и другой вариант — аудиодорожка к данной видеовставке находится в отдельном файле. Опять же, вам необходимо будет её найти, определить её формат и, при необходимости, написать или найти конвертер в более понятный (например, в WAV).

Я полностью перевел видеовставку и сконвертировал её обратно. Однако в игре она не отображается. Что делать?

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


[Интересный пример с различием версий форматов] Есть такой весьма и весьма известный 3D-shooter Blood от компании Monolith. Когда его фанаты начали создавать собственные адд-оны к нему, то возник вопрос: а можно ли в свой адд-он добавить видеовставку (в оригинальном Blood была поддержка видеовставок в формате SMK (Smacker Video), даже были свои видеовставки к эпизодам). Многие из них сразу наткнулись на весьма раскрученную программу RAD Smacker and Bink Video Tools[5], которая могла конвертировать в SMK видео в формате AVI. Только вот незадача: Blood любой версии отказывался читать полученные SMK файлы. Сразу же возник вопрос: «почему? в чем же тут дело?» Но светлые умы быстро сообразили, что конвертировать надо более старой версией программы, которая называлась RAD Smacker Tools[6]. Они-то и стали своеобразными «первопроходцами» в деле включения собственных видеовставок в собственные же адд-оны.

Перевод текста

Какой программой лучше переводить текст?

Если редактировать файл игры, содержащий спецсимволы, Блокнотом (Notepad), то текст портится!
Есть много хороших программ для редактирования текста, которыми можно в том числе редактировать файлы, содержащие не только текст (а в старых играх обычно так и делалось). Я лично рекомендую очень удобный бесплатный редактор Bred 3 от российских разработчиков. Этим редактором очень удобно вносить быстрые правки в бинарные файлы с текстом и т. п. Для тщательной же работы, рекомендуется составить таблицу в Excel, содержащую фразу в оригинале, ваш вариант перевода и комментарий. Таким образом будет удобно и сверять переводы и оставлять заметки для других участников перевода.

При работе с текстом зачастую нужно сравнивать два файла, например старую и новую версию. Для этих целей существует бесплатная программа WinMerge. Для поиска определенного слова или строки в большом количестве файлов пригодится бесплатная программа Notepad++

Я перерисовал шрифт игры и теперь вместо английских букв у меня русские, плюс я использовал кое-какие спецсимволы. Как мне теперь писать текст, чтобы в игре отображалось по-русски?

Посмотрите, нет ли возможности использовать ту часть ASCII таблицы, которая отвечает за русские символы (в DOS или Windows кодировке). Если такой возможности точно нет — то следует написать программу-конвертор, которая будет превращать русские символы, которыми вы будете писать в те символы, которые соответствуют данным буквам в шрифтам. Например, вы перерисовали букву «z» в шрифте в «ы». Тогда программа должна превращать вашу «ы» в тексте в «z», чтобы игра правильно понимала написанное. Альтернативный вариант — запомнить, что «ы» соответствует «z» и писать сразу «z»:) При этом не лишним будет перерисовать шрифт так, чтобы созвучные буквы соответствовали друг другу («f» — «ф», «t»-«т», «w» — «ш» и т. д.)

Добавление от пользователя satanistik: «Существует бесплатная программка для пакетной замены символов, в одном или нескольких файлах A.F.9 Replace some bytes. Некоторым наверное поможет, да и удобнее чем писать свой батник к каждой игре».

Обязательно ли переводить все дословно или в переводе допустимо вставлять что-то от себя? Например, что делать с именами, их надо переводить или можно придумать свои?

Переводить следует как можно ближе к тексту. Это не надо понимать буквально — ведь само построение фразы в русском и английском языке разное. Поэтому очень часто следует перестраивать фразы, чтобы они звучали как можно естественнее и ни в коем случае не коряво:) Смысл фраз нужно понимать обязательно — если вы коверкаете или вырезаете часть фраз оригинала — вы показываете свое неуважение к авторам игры. Каждое отклонение от оригинала (использование понятия, предмета или выражения которое лишь косвенно соотносится с оригинальным, но гораздо больше понятно русскоязычному игроку) — следует тщательно взвешивать и отбирать из разных вариантов (для этого полезно опросить команду, если вы работаете в команде или просто знакомых/родственников, если нет).

Что касается имен и названий — вопрос сложный. Многие переводчики (в том числе профессиональные) — меняют все имена на свои, как им кажется, более благозвучные. Но тут опять же следует помнить об уважении к оригинальным авторам и о сохранении атмосферы оригинала (то есть использование русских имен в исключительно английском антураже, например, — просто глупо). Если имя/название не несет никакого смысла, стоит его оставить как оно есть, по возможности транслитерировав его на русский так, чтобы оно звучало благозвучно. Если имя в игре принадлежит человеку определенной национальности (например, немцу), следует переводить его в соответствии с правилами перевода с немецкого языка на русский. Если имя персонажа/название места несет в себе какой-то смысл (например, имя может состоять из двух английских слов), то следует его переводить.

Помните, если Вы начнёте повсеместно использовать фразы «от себя», то это будет не перевод, а пересказ по мотивам игры.

Кроме того, вы можете посмотреть весьма занимательную статью, где содержатся советы переводчикам игр. Они могут быть полезны как начинающим, так и опытным.

Примечания

См. также