Новости :: Переводы :: Наши проекты :: Ромхакинг :: GameFAQs :: Документация :: Утилиты
Гостевая книга :: Форум :: 2RTeam :: Zelda64Rus :: О нас
   Д|окумент-
   и|нструкция по
   м|одификации
   О|бразов
   К|артриджей
Начнем откуда положено, то есть со вступления. Итак, этот документ написан мной, Димком с сайта http://www.shedevr.org.ru в целях повышения просвещенности населения российского РУнета. Я попытаюсь объяснить вам, как "ломать" игры... Точнее "ломать" - не самое подходящее слово. Мы с вами, в основном, будем делать две вещи: перерисовывать шрифты и менять текст. Более продвинутые пользователи смогут, в дальнейшем, изменять структуру уровней и различные прочие внутриигровые причиндалы, но я НЕ ставлю своей целью научить вас этому. Моя задача - помочь вам перевести свою любимую игру на русский язык!
Что вам для этого нужно? Ну, во-первых, хорошо бы найти в Интернете РОМ нужной Вам игры (вообще-то 95% процентов РОМов в Интернете находятся незаконно, поэтому, скачивая их вы нарушаете закон... Ну не в большей степени, чем когда ставите себе операционку с пиртаского диска :-) И не говорите, что я вас не предупреждал...). Все примеры в этом документе будут из игры Final Fantasy 5 на Супер Нинтендо(SNES). Этот РОМ можно скачать, например, с сайта или же c http://www.emu-russia.net или же просто набрать в поисковой системе (Google) фразу "Final fantasy 5 ROM". Будем считать, что РОМ игры у Вас есть...
Теперь вам нужен графический редактор (нет, не Paint, и даже не PhotoShop, другой, но и эти тоже пригодятся... потом) и Hex-editor. Все эти утилитки вы можете скачать либо на нашем сайте (http://shedevr.org.ru/cgi-bin/utilz.cgi) либо же на одном из "буржуинских" эму-сайтов, таких как Romhacking.net или где нибудь еще :-)
Я рекомендую из просмотрщиков/редакторов графики DirectED (в основном для поиска) и Tile Layer Pro (для вставки и редактирования изображений, в том числе и шрифтов). Для работы с .bmp файлами хорошо подходит TileEd. Также очень полезным может оказаться Tmod, в основном из-за возможности работать с тайлами произвольного размера. Что же касается Hex-editorов, то тут все зависит целиком и полностью от ваших предпочтений... Я лишь могу порекомендовать вам три совершенно разных редактора, каждый из которых хорош по своему. Это Thingy, Hexpose и эксклюзив от нашего сайта - GoldFinger. Чтобы полностью подготовиться к процессу перевода нужен еще Relative Searcher (для взлома кодировки игры) и, по желанию, какой-нибудь генератор таблиц... качайте любой из них на каком-нибудь западном сайте в разделе utils, они так и называются - table generator. Штука необязательная, но достаточно полезная. Зачем он нужен, я расскажу позже.
Утилитки закачаны, РОМ тоже, желание есть, времени, кажется, хватает... ДАВАЙТЕ ЛОМАТЬ ИГРУ!!! Первым делом давайте запустим эту самую игру... Надеюсь, что такое эмулятор и как в него втыкать РОМы вы знаете :-). Запустив игру, дождемся какого-нибудь текста, например в FF5, в начале, ЛЕННА говорит "Father...". Запомнив это выключаем эмулятор. ПЕРЕВОД НАЧАЛСЯ!!!

Часть первая: Текст


Запускайте Relative Searcher, загружайте в него файл, и пишите искомую фразу (Father...). Точки, в принципе, можно опустить. Программа выдаст вам набор адресов. Но главное для нас - смещения букв! То есть. Если байт 80 обозначает букву А, то букву В будет обозначать байт 81, С - 82 и так далее (Так сделано в 98% игр, но бывает и по другому. Если у вас не получилось, то сначала попробуйте найти шрифт). Запускайте генератор таблиц, и создавайте таблицу, а можете сделать это ручками, в старом добром блокноте... У вас должно получиться что-то в этом роде (фрагмент таблицы для ФФ5):
7A=a
7B=b
7C=c
.... Все остальные буквы от d до w
91=x
92=y
93=z
Сохранив таблицу загрузим Hex-editor, подключив к нему свежесозданную таблицу. Как это сделать читайте в ридми. Теперь ищем текст. Найдя его посмотрим внимательно на окружающие байты. Нетрудно заметить, что почти все фразы заканчиваются определенным символом. Он обозначает, что сообщение (или строка) кончилась и надо начинать новую. Их тоже нужно записать в таблицу. Каждый редактор делает это по-своему, поэтому внимательно прочитайте readme.txt! Довольно часто именно эта часть вызывает затруднения, поэтому расскажу немного подробней. Например, вы видите сообщение:
В игре:                  |   В редакторе (с подключенной таблицей!):
King Tycoon: I must go   |   #ing##ycoon####must#go#to#the##ind##hrine####
to the Wind Shrine:      |   

Ну, во-первых, мы теперь знаем номер большоой буквы К, и можем составить таблицу и для больших букв. Далее, посмотрев на значение неизвестного символа, например, между словами must и go, можно узнать, каким байтом обозначается пробел, три одинаковых байта после слова hrine - как раз и есть точки, их тоже нужно добавить в таблицу: Точно так же узнаются все остальные знаки препинания. А вот байт после слова "go" должен быть особенно интересен. Он обозначает перенос строки, то есть то, что эта строка кончилась и надо начинать новую. Как правило, если, например, этот байт равен А0, то в таблицу он заносится в таком виде: *А0. То же самое можно сказать и о самом последнем байте (который идет после трех точек). Он обозначает конец сообщения, то есть закрывает окошко, где выводились слова, и следующая фраза появится в новом окне. Обозначается он так (если равен А1. Но не во всех редакторах. Чтобы узнать точно почитайте readme.txt, прилагающийся к редактору, которым Вы пользуетесь!): \А1. Вот вроде все. Но не спешите мучить себя, отыскивая фразы, которые содержат двоеточия, восклицательные знаки и все остальное... После того, как вы найдете игровой шрифт, то сможете сделать это быстрее и эффективней!
Здесь рассмотрен простейший случай, он же самый распространенный (к счастью :-)) когда текст не зажат. Бывает, что текст просто не находится...
Что ж, бывает. Возможны три варианта:
  1. текст закодирован с использованием DTE (или MTE, принцип один). (Final Fantasy 6, Chrono Trigger)
  2. используется словарная система (Terranigma)
  3. игра применяет свой, особый метод хранения текста. (Shining Force 1, Shining Force 2, Phantasy Star 4)
В третьем случае могу только посоветовать вам учить ассемблер, чтобы потом, изменив код игры узнать алгоритм хранения данных. А в первых двух случаях можно кое-что и попробовать...

Как ломать DTE?

Скоро будет...

Как ломать MTE?

Скоро будет...

Часть вторая: Шрифт

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

Если шрифт одноцветный (то есть нарисован одним цветом, нет ни переливов, ни тени), то в 99% случаев его следует искать в режиме 1bpp, будь то SNES, NES, или SEGA. Потренируйтесь, найдите его в РОМе Final Fantasy 5. Он выглядит несколько странно, но об этом позже.
Что касается многоцветных шрифтов, то тут дело обстоит несколько сложнее. Во-первых, если шрифт очень многоцветный (в нем используется больше четырех цветов, такой, как, например, в Streets Of Rage 2), то его следует искать в формате 4bpp Genesis в случае, если это игра на Мега Драйв или же в формате 4bpp SNES если это Супер Нинтендо (хотя на этой приставке такой шрифт - большая редкость). На Денди таких шрифтов не бывает.
Если же из всей "многоцветности" присутствует одна тень, то тогда мы ищем его в режимах 2bpp NES для Денди, 2bpp SNES/GB для Супер Нинтендо/ГеймБоя или же 4bpp для Genesis.
Как видите в теории все просто. Берете любой из графических редакторов/просмотрщиков и терпеливо начинаете скролить... Если РОМ превышает в размерах 2 мегабайта, то это занятие может оказаться очень и очень тяжелым... Но не пугайтесь так, потренируйтесь пока на Final Fantasy 5. Постарайтесь найти оба шрифта. Верхний (используется, в основном в диалогах), как вы догадались нужно искать в режиме 1bpp. Кстати. вы заметили, наверное, что он гораздо выше, чем обычный, стандартный шрифт. Это один из распространенных на SNES стандартов, так называемый 12x8 шрифт. Для обработки таких (не 8х8) шрифтов в играх на Денди и Снес лучше всего подходит редактор графики Tmod. Скачайте его обязательно. В нем можно настраивать ширину и высоту просматриваемых тайлов, что очень помогает при перерисовывании шрифта. Адрес, где находится этот шрифт в РОМе Final Fantasy - 3F000. А если шрифт стандартный (8х8), то ищите его любым редактором. Ну что, нашли? Правильно. режим 2bpp SNES/Gameboy, адрес - 11F000. Не правда ли, очень просто? Просто-то оно просто, но вот еще иногда бывает шрифт зажат...

Зажатый шрифт

Говоря откровенно, "честно" зажатые шрифты я изменять пока не умею. Но на самом деле есть один трюк, при помощи которого мне удалось перевести игру Comix Zone. Дело было так:
Отчаявшись найти шрифт (который следовало искать в режиме 4bpp Genesis, поскольку он был с тенью), я вдруг подумал: "А что если пиксели расположены не в обычном порядке, а каком-то другом?". Ага. Но поскольку они расположены рядом, то в редактор графики это должно выглядеть как одноцветная полоса (фон шрифта) с каким-то цветом на ней (собственно шрифт) и вкраплениями другого цвета - тень. Я начал искать и НАШЕЛ ЕЕ! Вот как она выглядит!

Как же разобраться в этой каше? Очень просто! Сначал а мы зарисовывавем все одним цветом (чтобы проверить действительно ли это шрифт). Смотрим в эмуляторе. Ага, угадали. Теперь, по очереди рисуем черточки, чтобы посмотреть, как это будет влиять на изображение шрифта. Ага, видно, что горизонтальная черта отображается в одну строку, а вертикальная - как несколько точек. Значит, тайлы читаются не подряд! А как? После нескольких часов попыток и переборов алгоритм хранения шрифта стал ясным:
Пускай вот это - тайл, самый обычный, 8х8.
11111111     Тогда он расшифровывается так:
22222222     Все линии, помеченные цифрой 1 идут к первой букве,
33333333     помеченные цифрой два - ко второй и.т.д.
44444444     Причем идет не обязательно восемь пикселей, а некое число,
55555555     которое неизвестно где записано.
66666666     После того, как прочитаны все первые строки букв,
77777777     начинает читатся вторая по такому же алгоритму,
88888888     потом третья, и так далее...
Ну вот, а потом были долгих десять часов упорного перерисовывания букв, по пикселю, по строчке... Но все готово, и как результат - отличный перевод!
Ссылками мы не меняемся.
Страница админа
        © 2001-2014 Shedevr Team.