Ссылки Команда Главная Форум Гостевая
МЕНЮ
Новости
01.01.2017
Переводы
01.01.2017
Проекты
10.05.2010
Программы
26.05.2012
Документация
26.11.2016
Прохождения
08.05.2011
Разное
07.06.2009
    rss
БАННЕРЫ
Наш баннер
Сайт JurasskPark
Griever Stuff
Новая реальность
Emu-Land
ConsolGames
CHIEF-NET
PSCD.RU
Langrisser
Battletoads
Valid HTML 4.01 Transitional
Правильный CSS!
 

 

 

 

 

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

I. Введение

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

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

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

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

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

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

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

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

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, если нет копии РОМа smile).
4) Запускаем игру и смотрим, что изменилось в этом тексте. Например, смотрим на слово из нашего примера: London, заменённое на L<код>ndon И там может появиться что-то типа:
a) L[ndon – значит введённый код - это символ [. Записываем в таблицу <код>=[
b) L_ndon – ( _ - пробел), значит код указывает либо на пробел, либо на пустой тайл, который можно перерисовать. smile
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 кодировка. А как “бороться” smile с LZ это я напишу, когда сам разберусь. smile
5) Можно упростить задачу и по нахождению значений кодов так: когда уже найдено несколько буквосочетаний/слов, то можно поискать их в РОМе, например:
Нам известно:
80=e_
81=_t
82=:_
где _ это пробел
Тогда в Hex-редакторе ищем простым поиском набор букв: е__t:_
И находим что-то типа этого (это DTE кодировка в FF6):

image

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

VI. Выдирание

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

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

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

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

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