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) Можно упростить задачу
и по нахождению значений кодов так: когда уже найдено несколько буквосочетаний/слов,
то можно поискать их в РОМе, например:
Нам известно:
где _ это пробел
Тогда в Hex-редакторе ищем
простым поиском набор букв: е__t:_
И находим что-то типа этого (это DTE кодировка в FF6):
А дальше действуем как
с алфавитом и тайлами:
и т.д.
6) Если после составления таблицы в РОМе виден не весь текст, то это значит, что
есть ещё таблица и нужно идти к пункту IV, но искать уже
слова из отсутствующего текста.
7) Если проверены все коды, а текст видно кусками, например: **will**r***t***OK!***,
то это значит, что в РОМе используется LZ кодировка.
VI. Выдирание
Тут без программирования не обойдёшься.
Нужно самому написать прогу для выдирания текста. Лично я вообще не выдираю
текст, я его просто читаю прямо из РОМа.
VII. Замена кодировки.
Правильная замена кодировки
– очень важная вещь. От неё зависит, как хорошо будет сжиматься текст. Можно
сначала перевести текст, а потом проанализировать его на частоту появления тех
или иных буквосочетаний. А можно (как я сделал) взять большой текст на русском
языке, и проанализировать его. Лично я взял книгу “ЭНЦИКЛОПЕДИЯ МИРОВЫХ СЕНСАЦИЙ
XX ВЕКА. ТОМ 1,2” (1.5 метра )
VIII. Послесловие.
Этот документ распространяется
абсолютно бесплатно. Любое изменение текста или коммерческое распространение
- нарушают мои авторские права. Если есть замечания и предложения, то пишите
мне на мыло. Virtual_Killer@mail.ru
Для вас старался Virtual_Killer.