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) Если вы и после этого – не нашли, значит, шрифт сжат.
Но про “борьбу”
со сжатым шрифтом я напишу в другом документе.![]()
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 – метод переборки.
Уже найден кое-какой текст.
Теперь нужно проверить ВСЕ недостающие коды.
Вот что делаем:
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 кодировка. А как “бороться” |
| 80=e_ 81=_t 82=:_ |
А дальше действуем как с алфавитом и тайлами:
| 80=e_ 81=_t 82=:_ |
VI. Выдирание
Тут без программирования не обойдёшься. Нужно самому написать прогу для выдирания текста. Лично я вообще не выдираю текст, я его просто читаю прямо из РОМа.
VII. Замена кодировки.
Правильная замена кодировки
– очень важная вещь. От неё зависит, как хорошо будет сжиматься текст. Можно
сначала перевести текст, а потом проанализировать его на частоту появления тех
или иных буквосочетаний. А можно (как я сделал) взять большой текст на русском
языке, и проанализировать его. Лично я взял книгу “ЭНЦИКЛОПЕДИЯ МИРОВЫХ СЕНСАЦИЙ
XX ВЕКА. ТОМ 1,2” (1.5 метра
)
VIII. Послесловие.
Этот документ распространяется
абсолютно бесплатно. Любое изменение текста или коммерческое распространение
- нарушают мои авторские права. Если есть замечания и предложения, то пишите
мне на мыло. Virtual_Killer@mail.ru
Для вас старался Virtual_Killer.
![]()