Речь в тексте пойдёт про игру с первой PlayStation, так что начать его, я считаю, нужно с легендарной заставки.
Полтора года назад мы с Иваном Лоевым раскопали пару десятков пиратских версий GTA: San Andreas и выяснили, что «потраченный перевод» из мемов на самом деле амальгама из двух пираток, покрытая сверху слоем фольклора. Уже тогда напрашивалась идея разобрать таким же образом первую часть Silent Hill, которая тоже до сих пор живёт в народной памяти: одна только нарезка стрима её «худшего перевода» набрала почти полмиллиона просмотров, а игровые медиа, публикуя подборки «Смотрите, какую дичь творили пираты в стародавние времена», неизменно вставляют туда картинки вроде таких:
К моему немалому удивлению, оказалось, что история пираток конкретно Silent Hill хорошо сохранилась: сайт RGDB (он специализируется на консольных играх, так что в случае с San Andreas пользы от него было, увы, не так много) каталогизировал с десяток различных версий, ссылками на скачивание которых до сих пор делятся на форуме PSX Planet. Ссылки эти, правда, уже начинают гнить (что в принципе серьёзная проблема, которую никто толком не знает как решать), а сам форум выглядит чудовищно… олдскульно, но умирать вроде бы не собирается: на входе вас встречает радостное объявление о том, что сообществу коллективными усилиями удалось собрать 21 тысячу рублей на оплату сервера.
Для этого текста я в итоге добыл и сравнил восемь пиратских локализаций: Original (да, какие-то светлоголовые переводчики назвали свою контору «оригинал» — надеюсь, вы не запутаетесь), Golden Leon, Kudos, Playbox, Fire Cross, Paradox, «Русские версии» и RGR Studio. Их могло существовать и больше — с пиратами никогда нельзя быть ни в чём уверенным, — но восьми штук, думаю, вполне достаточно, чтобы составить общее впечатление. Сегодня они представляют в основном исторический интерес: Silent Hill никогда с 1999-го не переиздавалась и до сих пор остаётся заложницей своей платформы, но уже в 2008-м у неё появился (и потом ещё три года патчился) хороший фанатский перевод от consolgames, а позже — и русская озвучка от Team Raccoon. Именно к ним я и рекомендую обращаться: старые пиратки сегодня имеет смысл запускать лишь из ностальгических соображений или чтобы посмеяться над ошибками, которых там предостаточно. Вот, например, Kudos из вышеупомянутого видео Велинда:
Подобную коллекцию перлов можно собрать почти из каждой пиратки: лучшие из них сегодня просто посредственны, а худшие настолько плохи, что уморительны. Но вместо того, чтобы смеяться над убогими, я решил исследовать проблему глубже: почему всё так плохо? Понятно, что качество этих локализаций никого не заботило, и делали их в сверхкороткие сроки, чтобы поскорее выбросить новинку на прилавки, но только ли поэтому пистолет у Kudos называется «ПУГАЧЬ», а низкий уровень сложности — «ЛЕГК»? Я попросил помощи у Dangaard и HoRRoR, создателей версии от consolgames, расковырял содержимое дисков и погрузился в увлекательный мир ромхакинга.
Должен оговориться: мы не знаем наверняка, как работали пираты. Это не та деятельность, которой гордятся, — оттого, помимо игр, у нас практически не осталось о ней источников, а те, что остались, вроде этого интервью, большого доверия не вызывают. Поэтому задачу я поставил перед собой так: разобраться, как создать перевод самым топорным способом из возможных, обойтись необходимым минимумом. Кроме того, в статье я старался использовать как можно меньше технических терминов. HoRRoR уже рассказывал, как взламывал Metroid Prime 3, но этот его текст написан для программистов, и перевести его на язык гуманитариев — сложная и объёмная задача. В случае с Silent Hill же я обходился самыми примитивными средствами — орудиями каменного века, образно говоря. Выглядело это вот так:
Сейчас я объясню, что тут происходит и что это за груда цифр. Каждый файл на вашем компьютере — это последовательность битов, каждый из которых имеет одно из двух значений: 1 или 0. Биты объединяются в байты, и программа на скриншоте, так называемый hex-редактор, позволяет редактировать файлы побайтово. У каждого байта 256 (2 в 8-й степени) возможных значений (от 0 до 255), и записывают эти числа обычно в шестнадцатеричной системе счисления: так удобнее, потому что на каждый байт в таком случае требуется ровно по два символа. 00 — это 0, FF — это 255; если вы знаете, как кодируются цвета, то с этим принципом вы уже знакомы. Значения каждого байта и занимают львиную долю места на изображении выше; слева от них — адреса (т. е. порядковые номера) этих байтов, а справа — текстовая интерпретация этих данных по так называемой ASCII-таблице.
Всё, с теорией покончено. Сейчас я на отвлечённом примере покажу, как работать с hex-редактором. Для начала открою Google-документ, напечатаю туда что-нибудь и сохраню результат как .txt-файл:
Если открыть этот файл в hex-редакторе, то увидим мы вот что:
Кириллице, как видите, немного не поздоровилось: всё потому, что Google-документы кодируют каждый символ нашей азбуки двумя байтами, а не одним, как латиницу и знаки препинания. Если открыть в hex-редакторе картинку или песню, то в столбце «декодированный текст» мы точно так же увидим чепуху, но если наш файл содержит английские слова, то этот столбец становится удивительно полезным. А ещё там работает поиск: стоит ввести туда любую строку, скажем game, — и программа подсветит вхождения.
Теперь давайте сохраним этот же Google-документ в формате .docx, откроем его в hex-редакторе и попробуем найти game там. Ничего не найдётся. Да и столбец с текстом будет выглядеть как-то странно:
Всё потому, что .docx-файл — это организованный и запакованный особым образом .zip-архив. Чтобы увидеть данные в исходном виде, его нужно разархивировать — тогда в файле document.xml внутри папки Word найдётся уже знакомая нам последовательность байтов:
Папку, когда-то бывшую .docx-файлом, можно превратить обратно в .zip-архив, и если попросить архиватор не сжимать содержимое, то он, условно говоря, просто запишет файлы в память друг за другом, и строку stopgame.ru всё ещё можно будет найти.
При чём тут вообще видеоигры? Дело в том, что образ PS1-диска — например, в формате .bin — представляет собой именно такой «архив без сжатия» со всем содержимым игры: текстурами, музыкой, программным кодом и так далее. Для нас, конечно, важнее всего текст. Запустим оригинальную Silent Hill и посмотрим первую кат-сцену:
Запомним, что говорит Гарри, откроем образ игры в hex-редакторе и воспользуемся поиском:
Бинго. Надеюсь, лекция по информатике оправдала себя!
У нас в руках мощнейший инструмент: с его помощью можно сменить любую строку в игре на любую другую, и эмулятор это проглотит. Единственное условие: новая строка должна совпадать по длине со старой — на практике это означает «быть такой же длины или короче», потому что «лишние» символы всегда можно заменить пробелами. Развлекаемся:
Запускаем игру:
Использовать hex-редактор, в принципе, необязательно: всё это можно сделать хоть в «Блокноте», но тогда самому придётся следить за тем, чтобы не добавить и не удалить случайно байт-другой. Точно так же, как фразу про коляску, я переделал интро в начале статьи: Licensed by Sony Computer Entertainment America — это такой же текст, как и остальные. Пираты совершенно не стеснялись его менять:
Так, мы научились менять латинские буквы на латинские. Неплохо, но наша цель — добавить в игру русский язык, а с этим всё не так просто. Как справлялись создатели пираток? Давайте откроем одну такую, найдём строку про коляску (к счастью, мы даже знаем её адрес, так что поиск будет недолгим) и посмотрим:
CTAP0E_KPECL0? ~N
4T0_TYT_JP0NCX0DNT? ~E— Гарри Мейсон
Текст в таком виде даже можно читать — пираты каким-то образом заставили игру превращать латиницу в файлах на диске в кириллицу на экране. Как именно? Если вы смотрели наше видео про San Andreas, то уже знаете ответ — принцип очень похож. Все «шрифты» в игре — это длинные и узкие текстуры размером 1024 × 16 пикселей, где все символы, каждый размером 12 × 16, стоят в ряд друг за другом. Таким образом, команда «Отобрази букву X» на языке игры означает «Открой ту картинку с буквами, отступи от начала на столько-то пикселей, выдели прямоугольник 12 × 16 и нарисуй его на экране».
Задача пиратов, соответственно, делилась на следующие шаги:
По этой картинке можно даже составить что-то вроде рейтинга пиратской лени. Меньше всего парились в Original и Kudos (это две разные версии, но они друг на друга очень похожи — надо полагать, что-либо одна из них подворовывала у другой, либо их делали одни и те же люди): символы вроде А, В, С и Т, присутствующие в обеих азбуках, оставили как было; вместо З и О писали 3 и 0; 4 и 6 подрисовали, чтобы заменить ими Ч и Б; буквы Й, Ъ, Щ и Ё выкинули вообще и отдали их роли соответственно И, Ь, Ш и Е; а строчные даже не трогали — использовались только заглавные. В Golden Leon нарисовали Й и Ъ, в Paradox — даже Щ (но не Ъ), а RGR Studio заморочилась со строчными буквами. Ё не уважил никто.
После того как в игре появилась кириллица, оставалось только написать простейший скрипт, который превратил бы «Что тут происходит?» переводчика в «4T0_TYT_JP0NCX0DNT?», которое «поймёт» машина — всего лишь нужно заменить одни символы другими. Дальнейший путь прямолинеен: открываем файлы на диске по очереди (некоторые из них, правда, могут быть зашифрованы — в таком случае поди ещё догадайся, что перед вами то, что игра должна интерпретировать как слова), ищем в них всё, что выглядит как внутриигровой текст, переводим, заменяем, радуемся.
Остаются лишь две проблемы. Первая, как я уже упомянул, — длина строк: русские слова в среднем длиннее английских, и пиратам приходилось идти на любые жертвы и упрощения, чтобы ни в коем случае не выйти за установленные игровым кодом пределы. Это ограничение, как рассказал HoRRoR, можно обойти. Если сильно упростить, то в коде игры команды, что отвечают за вывод реплик на экран, выглядят как «Покажи ту строку, что лежит в памяти по такому-то адресу (скажем, 0543C549)». Этот код можно модифицировать, организовав тексту «переезд»: сменить 0543C549 на какое-нибудь другое число и поместить переведённую строку уже по новому адресу. Но на новом месте какие-то данные уже лежат и где-то используются, так что, решив одну проблему, запросто можно наплодить кучу новых. Работать с адресами сложно — гораздо проще принимать ограничения на количество символов как данность, особенно если качество результата вас заботит мало.
Вторая проблема — контекст. В файлах игры все строки, как видно выше, лежат скопом — когда и при каких обстоятельствах игра будет выводить их на экран, неизвестно. Для переводчика это катастрофа: скажем, реплики из одного диалога могут отстоять в файлах сколь угодно далеко друг от друга, и переводить каждую из них придётся вслепую. Как сохранять смысл происходящего, когда не знаешь даже, в чём это происходящее заключается? Каждый, кто имел несчастье играть в переводы от пиратов, в курсе, как они обычно решали эту задачу: никак.
«Ага! — возможно, скажете вы теперь. — То есть те скриншоты, что ты показывал в начале: боярышник, тёща, всё вот решать — это ошибки, вызванные недостатком контекста?»
Нет. Здесь всё несколько сложнее. Во-первых, присмотритесь к форме букв, особенно У и Ь: все эти картинки явно сделаны в одной и той же версии игры, однако таких начертаний я не встретил ни в одной из восьми пираток, которые рассмотрел. Во-вторых, по содержанию кажется, будто у переводчика, напротив, было даже слишком много контекста.
Шутка тут в том, что понять по содержанию написанного, в каком порядке нажимать какие клавиши на пианино, было непросто даже в оригинале. A Raven flies in, Flying higher than the Dove, Just to show he can — это, прямо скажем, не самая прямолинейная инструкция, а пираты, которые не знали даже, зачем в игре эти предложения нужны, ещё и опускали в переводе важнейшую для прохождения информацию, из-за чего решать пазл приходилось перебором. В тексте «Сказания о безголосых птицах» нигде не указано, что это загадка, и в hex-редакторе текст выглядит так же, как и любой другой:
О мемах из Интернета, конечно, сложно говорить что-то наверняка, но те, кто называют эту картинку «пиратским переводом», кажется, слишком мало знают о том, как были устроены настоящие пиратские переводы. Сильно сомневаюсь, что эту версию когда-либо продавали за деньги: её, судя по всему, некие анонимы сделали постфактум чтобы поржать. Дело закрыто. Я теперь тоже так умею: смотрите, как я превратил локализацию Original в кроссовер с Resident Evil.
С текстом разобрались. Остаётся последний вопрос — русская озвучка.
Честно говоря, её наличие меня до сих пор озадачивает. Оно противоречит самой пиратской философии — гнать продукт как можно быстрее и дешевле, без оглядки на качество. Что происходит с игрой как с произведением, если сменить в ней оригинальную актёрскую игру на непонятных любителей, монотонно зачитывающих в дешёвые микрофоны плохо переведённые тексты, — вопрос риторический, но озвучка — это трата денег и времени! Так ли она нужна?
Кто-то действительно отвечал отрицательно: например, FireCross и RGR Studio оставили в своих версиях оригинальное аудио. А те, кто решился на замену, в итоге провалили сведение: у Kudos и Paradox то внезапно пропадает звук, то между одних реплик звучат обрывки других. Что это? Особенности кода игры, из-за которых с аудио стало труднее работать? Непохоже: соответствующие файлы в этих пиратках располагаются на тех же секторах диска, что и в оригинале, и уже там звучат с косяками — кажется, кое-кто просто облажался с нарезкой, забыл о временных ограничениях. Golden Leon к тому же вставила русскую озвучку хорошо, сохранив даже баги оригинала: например, звук открывающейся калитки, звучащий между двумя репликами Гарри и Сибил.
Разбираясь с техническими деталями пиратских версий, я даже понял, почему субтитры в кат-сценах там так часто не соответствуют звуку: те, кто переводят субтитры, в этот момент не знают, что переводят субтитры, да и качеством, учитывая ограничения на размеры строк, они в любом случае похвастать не смогут. Вместо того чтобы ждать, когда тексты будут готовы, можно сразу отдать «актёрам» найденные на диске аудиофайлы (обратите внимание, как у «Гарри» от Paradox скачет отыгрыш от реплики к реплике: ему, похоже, не дали ни на игру посмотреть, ни оригиналы послушать) и заменить их по готовности — звук на диске всё равно лежит отдельно от текста. Эффективность!
Но опять же, зачем игре в принципе переозвучка? Кого ею пытались впечатлить — неужто покупателей? Или, может быть, конкурентов? Не знаю.
Взломать Silent Hill пиратам удалось относительно просто, но с другими проектами им везло меньше: разные разработчики писали код и располагали на дисках файлы по-разному, и далеко не все их подходы кустарям-локализаторам покорялись. Попадалась ли вам русская версия, скажем, Valkyrie Profile — культовой JRPG, изданной Enix в 1999-м? Мне тоже нет, потому что ни одной такой не существует. Недавно взявшиеся за перевод на русский ромхакеры из Temple of Tales объясняют почему:
Поиски программиста для работы над первой частью игры продолжались с 2017 года. Те, кто пробовали разбираться в ресурсах игр от разработчиков tri-Ace, знают, что там чёрт ногу сломит. Наверное, именно поэтому за все эти два с лишним десятка лет так никто и не сдвинулся с мёртвой точки. <…> Наше почтение Riku_KH3, трудящемуся над этой игрой! Нам повезло, что спустя столько лет именно Рику согласился помочь — и не только с разбором самой игры, но и с написанием автоматического выравнивания рамок под переведённый текст. С этим тоже были определённые сложности, так как в игре на каждое окно диалогов прописаны данные: координаты, ширина и высота рамки. Править всё это вручную было бы нереально.
Технических трудностей, препятствующих появлению хорошего перевода, полно. Прибавьте к ним отношение пиратов к делу, и становится понятно, почему их локализации получались такими неказистыми — хотя в 90-е, отдав за них деньги, вы наверняка использовали бы другое прилагательное, покрепче. С годами, впрочем, народная память превратила баги в фичи, а ошибки — в мемы, так что если сегодня вам, как мне, придёт в голову навязчивая идея взломать игру для PS1 и организовать собственную студию Kudos, то, надеюсь, эта статья успешно объяснила вам, с чего начать. Бог вам судья.