Методика “борьбы” с DTE и MTE, а также двухбайтовым кодированным текстом.


I. Введение

Этот документ создан в расчёте на то, что вы уже знаете, такие базовые понятия как тайл, Hex-редактор, тайловый редактор и др. Также вы должны знать, что такое шестнадцатеричная система счисления и как с ней работать.

II. Основные понятия.

Символ – любой тайл, закодированный в тексте.

DTE – кодировка формата: <Код>=<Символ><Символ>
.
Примеры:
  41=ab
A6=e!
CB=,_ (здесь вместо _ должен быть пробел)

MTE – кодировка формата: <Код>=<Символ><Символ><Символ>…
Примеры:
  41=absolute
A6=end
CB=Romhacking

Двухбайтовая кодировка – кодировка формата: <Код><Код>=<Символ><Символ>…
Примеры:
  417A=Super
1FA6=er
CF12=normal

III. Начнём со шрифта.

Лучше начать с поиска шрифта. Если найти шрифт, то можно упростить процесс расшифровки кодов.
Как его искать?
1) Открываем РОМ в тайловом редакторе.
2) И ищем.
3) Если шрифт – не найден то, возможно, что он записан в другом формате, как правило, это двухцветный или четырёхцветный форматы.
4) Если вы и после этого – не нашли, значит, шрифт сжат.
Но про “борьбу” со сжатым шрифтом я напишу в другом документе.

IV. Ищем текст.

1) Открываем игру в эмуляторе.
2) Находим первый попавшийся текст.
3) И ищем в Hex-редакторе с помощью Relative Search любое слово из РОМа, состоящее только из больших или только из маленьких букв.
Можно взять часть слова, например если у нас есть слово Fantasy, то можно поискать antasy, но искомое слово должно быть достаточно длинным.
4) Если текст найден, то переходим к пункту 6
5) Если же текст не найден, то здесь используется сжатие текста. Тогда нужно поискать в игре слово, состоящее только из БОЛЬШИХ букв, и ищем его Relative Search’ем, если и это не помогло, то можно попробовать поискать имена героев игры. Если и это не помогло, то придётся перебирать различные слова из различных мест игры, пока что-нибудь не найдется. А слово – найдётся, рано или поздно.
6) Итак, программа нашла слово. Теперь если программа может сама составить вам таблицу символов, то переходим к пункту 8, если же она этого не делает, то переходим к пункту 7
7) Ну, раз нашли слово, то теперь смотрим, из каких кодов оно состоит, и добавляем их в таблицу символов. А коды остальных букв ищутся так:
Допустим, нам известен код 39=O, остальные находим так: 3A=P, 3B=Q, 3C=R и т.д., и в другую сторону – аналогично: 38=N, 37=M, 36=L и т.д.
8) Теперь нужно проверить таблицу: загружаем её, ищем найденное нами слово, и если видим там текст (пускай с кучей неизвестных символов, но текст), то переходим к пункту 9, если же там какая-то тарабарщина, то придется вернуться к пункту 5.
9) Теперь, когда нам известны коды всего большого или маленького алфавита, можно добавить остальные символы. Если шрифт был найден, то можно просто смотря на тайлы, записывать коды в таблицу, как в пункте 7, но порядок теперь не алфавитный, а “тайловый”, т.е. в каком порядке расположены тайлы, в таком порядке будут и коды. Но даже если шрифт не был найден, то переходим к пункту V – метод переборки.

V. Метод переборки.

Уже найден кое-какой текст. Теперь нужно проверить ВСЕ недостающие коды.
Вот что делаем:
1) Берём любой известный нам кусок текста (желательно из диалогов).
2) И заменяем там символы, на неизвестные нам коды, хотя бы через один (это важно!!!), но не ставя перед пробелами (тоже очень важно!!!). Например, известен текст: The London is the capital of Great Britain. И “поганим” его так: T<код>e L<код>n<код>on <код>s t<код>e capital of Great Britain. Но нужно учитывать, что текст может вылезти за экран, и тогда ничего не будет понятно, так что слишком много кодов заменять – не рекомендуется.
3) Сохраняем изменения в РОМе (не забудьте перед этим сделать backup, если нет копии РОМа ).
4) Запускаем игру и смотрим, что изменилось в этом тексте. Например, смотрим на слово из нашего примера: London, заменённое на L<код>ndon И там может появиться что-то типа:
  a) L[ndon – значит введённый код - это символ [. Записываем в таблицу <код>=[
b) L_ndon – ( _ - пробел), значит код указывает либо на пробел, либо на пустой тайл, который можно перерисовать.
c) Lrendon – значит введённый код - это буквосочетание re. Записываем в таблицу <код>=re
d) LMonsterndon – значит введённый код - это буквосочетание Monster. Записываем в таблицу <код>=Monster
e) Lhunterdon – здесь исчезла следующая буква (n), значит мы наткнулись двухбайтовую кодировку и придётся ещё проверить все сочетания <код><любой код>, то есть нужно проверить сочетания того пробного кода, который съел букву n и всех кодов (всего их 256) Записываем в таблицу <код><код>=hunter
f) L<что-то непонятное>ndon – пропускаем этот код (Этот код ссылается не на графику, а на что-либо другое)
g) Lndon или Lndon - то есть символ(ы) после заменённого кода изменился/изменились, то это код изменения текста. Нужно записать куда-нибудь – что этот спецсимвол делает. Можно придумать для него какой-нибудь неиспользуемый в игре символ, например ^ @ ` и т.д.
h) L<картинка>ndon – этот код указывает на картинку, действуем как в предыдущем случае.
i) Если исчезнет несколько символов (больше двух) или текст вообще пропадёт, то, возможно, что это LZ кодировка. А как “бороться” с LZ это я напишу, когда сам разберусь.
5) Можно упростить задачу и по нахождению значений кодов так: когда уже найдено несколько буквосочетаний/слов, то можно поискать их в РОМе, например:
Нам известно:
  80=e_
81=_t
82=:_
где _ это пробел
Тогда в Hex-редакторе ищем простым поиском набор букв: е__t:_
И находим что-то типа этого (это DTE кодировка в FF6):

А дальше действуем как с алфавитом и тайлами:
  80=e_
81=_t
82=:_
и т.д.
6) Если после составления таблицы в РОМе виден не весь текст, то это значит, что есть ещё таблица и нужно идти к пункту IV, но искать уже слова из отсутствующего текста.
7) Если проверены все коды, а текст видно кусками, например: **will**r***t***OK!***, то это значит, что в РОМе используется LZ кодировка.

VI. Выдирание

Тут без программирования не обойдёшься. Нужно самому написать прогу для выдирания текста. Лично я вообще не выдираю текст, я его просто читаю прямо из РОМа.

VII. Замена кодировки.

Правильная замена кодировки – очень важная вещь. От неё зависит, как хорошо будет сжиматься текст. Можно сначала перевести текст, а потом проанализировать его на частоту появления тех или иных буквосочетаний. А можно (как я сделал) взять большой текст на русском языке, и проанализировать его. Лично я взял книгу “ЭНЦИКЛОПЕДИЯ МИРОВЫХ СЕНСАЦИЙ XX ВЕКА. ТОМ 1,2” (1.5 метра )

VIII. Послесловие.

Этот документ распространяется абсолютно бесплатно. Любое изменение текста или коммерческое распространение - нарушают мои авторские права. Если есть замечания и предложения, то пишите мне на мыло. Virtual_Killer@mail.ru
Для вас старался Virtual_Killer.