Документ-инструкция по модификации образов картриджей.
Часть первая: Текст
Запускайте 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. Вот вроде все. Но не спешите мучить себя, отыскивая фразы, которые содержат двоеточия, восклицательные знаки и все остальное... После того, как вы найдете игровой шрифт, то сможете сделать это быстрее и эффективней!
Здесь рассмотрен простейший случай, он же самый распространенный (к счастью :-)) когда текст не зажат. Бывает, что текст просто не находится...
Что ж, бывает. Возможны три варианта:
текст закодирован с использованием DTE (или MTE, принцип один). (Final Fantasy 6, Chrono Trigger)
используется словарная система (Terranigma)
игра применяет свой, особый метод хранения текста. (Shining Force 1, Shining Force 2, Phantasy Star 4)
В третьем случае могу только посоветовать вам учить ассемблер, чтобы потом, изменив код игры узнать алгоритм хранения данных. А в первых двух случаях можно кое-что и попробовать...
Часть вторая: Шрифт
Вообще-то это скорее первая часть. Перед тем, как составлять таблицу нужно сначала найти шрифт! Только лишь для того, чтобы вам потом не было мучительно больно за те часы, тчо вы потратили на составление никому не нужной таблицы.
Но на самом деле не все так плохо! Включайте эмуль!
Включив эмуль внимательно смотрите на текст. Он бывает двух типов:
одноцветный
многоцветный
Если шрифт одноцветный (то есть нарисован одним цветом, нет ни переливов, ни тени), то в 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 потом третья, и так далее...
Ну вот, а потом были долгих десять часов упорного перерисовывания букв, по пикселю, по строчке... Но все готово, и как результат - отличный перевод!