Итак,
здравствуйте.
Сегодня мы начнём изучать HEX редактор Transhection v.1.6c.
Сам
я, как это ни смешно звучит до сегодняшнего дня работал с версией 1.5, хотя
на сайт давным-давно выложил версию 1.6с :)
Эта программа представляет из себя HEX редактор со встроенными функциями
перевода. Некоторые из них это: Search Relative, поддержка Thingy Table, возможности
изменения данных, всевозможные режимы, созданные специально для РОМов и многое
другое, мы это всё изучим по порядку.
Итак,
распаковываем, запускаем.
Так
выглядит окно программы:
Всё
на английском, но может быть я соберусь и переведу и это со временем на русский.
Перво-наперво лезем в Options/Preferences и присваиваем Number of bytes…
значение 12 – это оптимальное количество байт в строке. После чего корректируем
размер окна редактора (ведь кроме него как правило есть ещё и окно игры или
окно второго редактора, так что чем меньше – тем лучше.
Затем загружаем
разархивированный ROM.
В принципе, если его нет под руками, то для знакомства можно загрузить любой
файл, но для остроты ощущений лучше загрузить исполняемый файл, например Translhection.exe
:)
Делается
это в меню File/Open
или клавишами Ctrl+O
Перед
нами появляются три столбца данных. Правый столбец показывает файл как он есть,
Средний несёт ту же информацию, но в шестнадцатеричном виде, так во многом
удобнее, а Левый столбец показывает смещение первого байта строки относительно
начала файла
(например если смещение первого байта 3CD1D0, то второго
соответственно 3CD1D1 и.т.д.)
Теперь если вы крутой хакер, то можно начать изменять код, взломать любую
программу не составит особого труда :) Но я ещё не дорос до этих высот, и нас
интересует вопрос перевода а не хакинга :)
Поэтому
продолжим.
Для
начала маленький ликбез.
- Шестнадцатеричная система
к уже знакомым цифрам [0-9]добавляет ещё и буквы A,B,C,D,E,F.
Идея в том, что после 9 идёт А…, а следующее после F число –
10. Причём как и в десятичной системе число 0123=123, так и здесь для того,
чтобы не сбиться часто пишут вместо D – 0D и.т.д.
Шестнадцатеричная система во многом удобнее традиционной, например 255=FF,
512=200, скоро вы привыкните к этому.
- Thingy Table. Эта
экзотика пригодится нам для перевода игры. Все вы знаете о кодировках WIN,
KOI-8, MAC, DOS – они разные, например русская буква “a”
в кодировке WIN превращается прекращается в “р”
в кодировке DOS. В играх почти всегда есть такое же несоответствие.
Для того, чтобы всё-таки прочитать текст в файле с другой кодировкой и предназначены
Thingy Table. Эти таблицы как правило обычные текстовые файлы
с расширением .tbl. Формат очень простой:
Код символа=значение.
Где код символа как правило от 00 до FF – шестнадцатеричное число,
а значение это символ, в нашем случае “р”
Отрывок таблицы для игры Chrono Trigger:
00=(end)
03=[03]
05=(2)
06=(3)
0B=(4)
0C=(5)
13=Хроно
14=Марле
…
B5=Э
B6=Ю
B7=Я
B8=а
B9=б
BA=в
И совсем необязательно, чтобы они шли по порядку, возможный вариант таблицы:
[
B7=Я
0B=(4)
13=Хроно
B5=Э
B6=Ю
14=Марле
]
При
её загрузке символы в файле с кодами 0B, 13, 14, B5, B6, B7 будут отображаться как: (4), Хроно, Марле,
Э, Ю, Я. Обратите внимание на то, что некоторые игры используют сжатие текста
и один байт может означать несколько букв или целое слово.
Продолжим.
Для
перевода вы должны сделать свою таблицу. Как это делается:
В кратце: берём слово из игры, обязательно чтобы оно было только из больших
или маленьких букв, жмём Search/Search Relative, пишем там это
слово и он выдаёт нам результат. Повезло, если сразу всё получится. тогда как
правило, каждый байт результата означает код буквы из слова. Если используется
сжатие текста, то придётся помучиться. Так как буквы в алфавите обычно идут
по порядку, то не составляет труда найти остальные буквы. На основе этого составляем
таблицу в любом текстовом редакторе и сохраняем как текст с расширением .tbl.Затем
загружаем таблицу в редактор, ищем текст и подбираем остальные буквы и знаки
препинания. Да, слово для поиска лучше взять редкое, что-то вроде “the”,
“weapon” не стоит использовать, потому что они наверняка сжаты. А вот
слово “fritz” наверняка и в РОМе будет иметь размер 5 байт, вобщем
тут нужна фантазия и терпение.
Сам я скачал уже готовую таблицу для Chrono Triggera в интернете. Скачайте
её с моего сайта. Но сразу предупреждаю, что для каждой игры таблицы как правило
разные.
Теперь
загрузим её.
Script/Open
Thingy Table/ или Ctrl+T
Загрузили,
но ничего не изменилось. Зато появилось окошко, где надо поставить галочку
на Thingy View Active.
Ура!
теперь весь код преобразился, и можно смело искать текст для перевода.
Гм.
Забыл, вам надо две таблицы, одна для текста оригинала, а другая для вашего
текста.
Пару слов о курсоре. Он может быть в центральном или левом поле. Переход
по клавише TAB.
Итак,
перевод: берём фразу и помечаем её (Shift+Стрелки). Потом жмём Ctrl+D или Script/Dump Script, выбираем способ редактирования (Файл или экран), нам надо экран
(Screen) и редактируем. Важно, чтобы длина
осталась та же.
Всё.
теперь вы знаете больше меня :)
Хотя
нет. Пойнтеры. Расскажу о них немножко.
Попробуйте
например перевести фразу “I’ll back” (Я ещё вернусь), перевели без проблем, а втиснуть 13 символов
в 9 у вас вряд ли получится :)
Есть три варианта расположения текста в РОМе, в игре Chrono Triggerиспользуются
именно пойнтеры или по нашему указатели. Каждый из них указывает на начало
фразы. Пойнтеры собраны в специальные таблицы, которые как правило находятся
перед текстом. Пойнтеры состоят из двух байт. Отличить их от всего остального
легко. Их значения идут по возрастающей это раз, и если посмотреть на неё,
то можно увидеть своеобразные столбцы:
,--.
A3|A2|E9 A2 03 A3 5C A3 78 A3 8A A3 95 A3 BB A3
E5|A3|35 A4 65 A4 94 A4 DA A4 F8 A4 16 A5 5C A5
7D|A5|CA A5 0F A6 30 A6 4F A6 89 A6 A1 A6 CB A6
DF|A6|23 A7 3D A7 63 A7 94 A7 F1 A7 1E A8 4E A8
6E|A8|7C A8 CF A8 12 A9 36 A9 6F A9 9D A9 C1 A9
`--'
Этот пример взят с сайта Шедевра.
Вычисление:
1. Имеем начало фразы: FE573E
2. Первые два числа отбрасываем: 573E
3. Отнимаем 200– 553E (всё в шестнадцатеричной системе)
4. Меняем байты местами: 3E55.
Вот и всё. Пойнтер вычислен, и теперь его можно изменить.
На самом деле есть специальные программы для вычисления пойнтеров, но лично
я для практики штук 200 пересчитал вручную, это занятно :)
Со временем я расскажу об этих программах, расскажу только, что в ней указываешь
начало и конец блока текста, начало и конец пойнтеров (в смысле смещение) и
она сама пересчитывает все пойнтеры.
Ну вот и всё. Вы прослушали бред человека, больной мозг которого после вчерашнего
бодуна очень туго соображает :)
|