Как я «Героев-2» русифицировал (не совсем)

17.03.2019

…Тут, говорят, исполнилось 20 лет третьим «Героям», на «Медузе» прекрасный текст с воспоминаниями про них, и поэтому я решил все-таки записать одну историю, которую давно хотел записать, но все руки не доходили. История эта лишь очень косвенно относится к тематике этого блога, это просто история из серии «байки старого программиста», но, кажется, этой истории место скорее здесь, чем, например, на моей стене во вКонтакте.

…Дело было, скорее всего, году в 1999-м, ровно 20 лет назад. Ряд отрывочных моих воспоминаний (типа того, как тогда у нас дома стояли компьютеры и мебель) намекают на то, что это было не позже осени 1997 года, но тогда я еще не особо умел программировать, поэтому скорее это все-таки ближе к 1999 году. Соответственно, я тогда был в 8-9 классе. Я уже, конечно, помню далеко не все детали, поэтому, возможно, что-то в рассказе ниже не совсем соответствует тому, как оно было на самом деле.

Одной из игр, в которые мы с братом тогда играли дома на компьютере, были вторые «Герои». Есть маленькая вероятность того, что это были первые или третьи, но скорее все-таки вторые. Они были русифицированы, все надписи в игре были по-русски. (В отличие, например, от первого варкрафта, который нам достался нерусифицированным, и никто нам не рассказал, как в него играть, и мы очень долго пытались понять, что значит надпись «Train peasant» на соответствующей кнопке, и как играть, когда невозможно создавать новые войска — просто единственное значение слова train, которое мы знали, это было «поезд».) Русификация Героев была немного странная в плане того, как работал ввод с клавиатуры — большинство букв вводились нормально, но некоторые буквы, типа «ю», вводились как-то странно, как Shift-6 или что-то такое, я уже толком не помню. Но ладно, в «Героях» вводить текст надо очень редко, в основном в именах игроков и именах сохраненных игр, поэтому особых проблем это не доставляло.

Основная же проблема, которая у нас была — это было то, что редактор карт не был русифицирован. Точнее, он был русифицирован, но как-то глючно. Все надписи были русскими буквами, но какой-то абракадаброй. Например, на панели выбора типа рельефа (там, где вода, земля, песок, снег и т.д.), кнопка с изображением воды была подписана «Щсуфт». (Я точно уже не помню слов, просто восстанавливаю наиболее правдоподобную версию.)

(Особые маньяки могут сейчас остановиться, не читать дальше, и попробовать догадаться, в чем было дело. Сейчас-то это, наверное, даже весьма просто.)

Ну я довольно быстро догадался, что тут как-то перепутаны буквы, что это какой-то подстановочный шифр или неправильная кодировка. (Я тогда, возможно, еще не знал таких слов, но с проблемой кодировок наверняка был прекрасно знаком.) Соответственно, я стал пытаться расшифровать этот шифр, благо «Пляшущих человечков» я к тому времени уже давно читал. Довольно быстро я решил, что стоит опираться именно на ту панельку с типами рельефа — как минимум, там довольно понятно, что должно быть написано.

Картинка

Видимо, тот самый редактор карт, но в английском варианте

…Не помню, как я догадался до того, что оригинальный текст был английский. Может быть, я сначала долго тщетно пытался расшифровать в русский текст, а может быть я довольно быстро заметил, что в русском языке назвать воду словом из пяти букв (чтобы соответствовать «Щсуфт») сложно, а в английском — легко. Хорошо, допустим, мы знаем пять пар: что буква Щ соответствует W, С соответствует A и т.д. Но дальше как-то не складывалось. Например, рельеф «трава» назывался «Пкфыы», что соответствовало «..e..», и это было не очень понятно. Более того, две одинаковые буквы на конце намекали на то, что это все-таки Grass, но это совсем не соответствовало слову Щсуфт/Water.

В общем, после определенных мучений я решил отказаться от идеи, что Щсуфт — это Water, и стал расшифровывать из других слов. Слово Пкфыы превратилось в Grass, это неплохо сочеталось с Ытщц, которое превратилось в Snow, и Ыфтв — Sand. Все неплохо сходилось. (Я могу сейчас не помнить точно, какие там слова были, поэтому пишу то, что звучит правдоподобно.) Что же тогда такое Щсуфт? Получаем «O.a.n», и тут до меня дошло, что это, конечно же, «Ocean»! (И как хорошо, что я не подумал про это раньше, а то я бы пытался бы расшифровать в русский текст, а не в английский, потому что в русском слове «Океан» тоже пять разных букв!)

Хорошо, можно двигаться дальше, я может быть дальше еще пару слов расшифровал, но в какой-то момент, глядя на бумажку, где у меня были выписаны русские буквы и соответствующие им английские, до меня вдруг дошло: где-то же я видел такое соответствие, что букве Ы соответствует S, букве O — Щ, и т.д… Конечно же, разгадка шифра все время была у меня перед глазами — на клавиатуре компьютера!

…И тут потихоньку до меня стало доходить, в чем же все-таки дело. Наверное, я это далеко не сразу понял, но в итоге стало ясно, что люди, русифицировавшие «Героев», не стали как-то сильно заморачиваться с поддержкой и русских, и английских букв. Они просто подменили шрифт — нарисовали новый шрифт такой, что на месте буквы Q у него Й, на месте буквы W у него Ц, и т.д. И все нормальные английские строки в игре заменили на английскую же абракадабру, которая при написании таким шрифтом давала нормальные русские буквы. И тогда понятно, почему соответствие именно такое. Они не стали заморачиваться с переключением раскладки клавиатуры, и когда я нажимал клавишу «Q/Й», «Герои» получали код символа Q, и вставляли в поле ввода символ Q. Но за счет того, что в шрифте вместо буквы Q нарисована буква Й, все работало. Именно для этого и нужно такое соответствие. А с теми русские буквами, которые находятся на клавишах со знаками препинания, так просто обойтись не получилось (знаки препинания, очевидно, надо было сохранить), поэтому эти буквы отправили на место каких-нибудь странных символов.

В итоге редактором карт стало возможно хотя бы как-то пользоваться — постоянно посматривая на клавиатуру. Чуть позже я написал программу, которая прочитала exe-шник редактора карт, выделила оттуда строки (видимо, там все строки были зашиты прямо в бинарнике), и перекодировала их, заменяя букву P на G, С на W и т.д. (и буква G отображалась как русская П, буква W как Ц и т.д.) В итоге получилась обратная транслитерация — английские слова были записаны русскими буквами. То самое Щсуфт превратилось в Оцеан, и т.п.; мне особенно запомнилась фраза, которую генератор случайной карты писал ближе к концу своей работы — «Плацинг цастлес».

…Уже много лет позже я пытался ради интереса где-нибудь найти этот бинарник, но, похоже, он сгинул вместе с каким-то из старых жестких дисков при очередном апгрейде домашнего компа…

(…Да, кто не понял шутки про «байки старого программиста» — это отсылка к прекрасным байкам старого химика, всем рекомендую, отличное чтение.)


Мой курс по алгоритмическому программированию (и подготовке к олимпиадам) для школьников, студентов и всех желающих — algoprog.ru