Без описания |
Поиск в теме | Версия для печати |
lupus |
Отправлено: 20 Апреля, 2016 - 19:34:09
|
Покинул форум
Сообщений всего: 1056
Дата рег-ции: Июнь 2015
Откуда: Simferopol
|
Всем привет, давно здесь не появлялся и, наверное, столько же ничего не хакал и не переводил.
Ещё в 2011 году я выложил перевод RE Gaiden, но он далёк от идеала, т.к. выполнен без пересчёта поинтеров, а сжатая графика осталась нетронутой. С тех пор в хакинге gbc я не продвинулся ни капли но желание сделать нормальный перевод этой игры меня не оставляет. К тому же, я не прочь поупражняться в переводе, поскольку понимаю, что мои знания английского без практики сдают позиции.
Основную сложность представляет не только тот факт, что я не нашёл поинтеры (хотя, Меф мне как-то помогал с этим), но и странная система хранения текста, описываю по памяти:
В тексте каждые 8 байт (или каждый восьмой байт) присутствует какой-то служебный байт, замена которого приводит к некорректному выводу текста. Долго и муторно я переводил и вставлял текст частями, отлавливая баги с повреждением этих системных байт, вмещая русский скрипт в длину оригинала. Пытался двигать символ "перевода каретки" в пределах строки, но и это ни к чему хорошему не приводило.
Относительно графики: недостающие кириллические символы в шрифте я отрисовал поверх европейских "зяблов" поэтому удалось иметь оба набора символов для заглавной и строчной латиницы/кириллицы. Поправил непожатую графику в инвентаре и прочих местах.
Возможно, у кого-то найдутся желание, силы и время, чтобы нормально расхакать ром?..
А я уж за переводом текста не постою.
Наработки прилеплю, надо отыскать на одном из переносных винтов. |
|
|
Ace Lightning |
Отправлено: 23 Апреля, 2016 - 16:22:02
|
VIP
Покинул форум
Сообщений всего: 480
Дата рег-ции: Июнь 2015
|
Ковыряю игру, и смотрю, что в роме очень много незанятого места с байтами $FF.
Длина указателей: 2 байта. Расположены над текстовыми блоками. Есть практически одинаковый текстовый блок, который начинается с текста в начале игры. Не знаю зачем это нужно.
Сжатие текста похоже на разновидность LZ, с которым я встречался я встречался в Castlevania: Legends, только там была графика пожата.
И еще при просмотре тайлов нет никакого шрифта. Просто тупо текст, я первый раз с таким сталкиваюсь. И в коде игры все так запутано, пока не могу разобраться точно что там и как.
Плохо, что нет для GB такого отладчика, который бы трассировал программу в файл, как это умеет, например, FCEUX для NES. |
|
|
Ace Lightning |
Отправлено: 24 Апреля, 2016 - 12:01:20
|
VIP
Покинул форум
Сообщений всего: 480
Дата рег-ции: Июнь 2015
|
Итак, я наконец-то все понял.
Давайте по-порядку.
Система хранения текста:
CODE:XX 01 02 03 04 05 06 07 08
где, XX - давайте назовем флаговым байтом. 01-08 - байты текста или служебных символов.
Флаговый байт нужен для того, чтобы игра отличала служебные байты от текста. Какие есть служебные байты или их совокупность:
F9 - перенос строки;
F9 FC - стоп-"байт";
F9 F7 - ожидание некоторого количества времени перед чтением последующих байтов;
F8 - очистка области вывода текста.
FB - координаты вывода текста, после этого байта идут еще два.
Давайте рассмотрим, например, строчку из меню игры, которая выводится при выборе пункта Continue.
CODE:09 FB 00 00 F8 03 29 28 2E 10 23 28 2F 1F F9 2A 2C 1F 00 30 23 29 2F 2D 00 21 1B 0C 27 1F F9 FC
Первый байт 09 - флаговый. Вот он же в двоичном виде: 00001001. Начинаем его анализировать со старшего бита.
Он равен единице, значит на этом месте будет служебный байт. Смотрим на строку, там действительно находится байт FB, который отвечает за координаты вывода текста.
После этого байта должны идти еще два байта, собственно с этими самыми координатами. Во флаговом байте они отмечаются нулевыми битами. После них снова идет служебный байт F8. Так уж устроена игра, что сочетание байтов FB XX XX F8 - это стандартный метод задания координат. Хотя я пробовал убирать с F8 метку из флагового байта, что он служебный и ничего в принципе не менялось. Но лучше наверное делать так, как сделано разработчиками)
Далее идет 4 байта текста, затем опять флаговый байт 10. В двоичном коде он: 00010000. Видим, что пятый байт в этой последовательности будет служебным. Итак, после байта 10 идет 4 байта текста и затем байт переноса строки F9 и после него еще 3 байта текста.
Затем идет флаговый байт 00, означающий, что служебных байт не будет. Поэтому после него идет 8 байт текста.
И, наконец, последний флаговый байт 0C - 00001100. После двух байт текста идут два служебных байта F9 FC - эта пара байт означает конец вывода текста. (Отредактировано автором: 24 Апреля, 2016 - 12:01:49) |
|
|
lupus |
Отправлено: 25 Апреля, 2016 - 23:19:06
|
Покинул форум
Сообщений всего: 1056
Дата рег-ции: Июнь 2015
Откуда: Simferopol
|
Шрифт там есть точно, он моноширинный, если не изменяет память.
Завтра покопаюсь на внешнем харде, разыщу наработки, можно будет вытащить готовый шрифт и таблицу к нему.
Раз уж для перевода пишется отдельная софтина, то было бы удобно иметь в ней окно, в котором видно, как выглядит введённый текст, шрифтом из рома (можно выдернуть и сохранить как битмап), а если ещё и с учётом заданных в роме координат - вообще мечта.
Плюс, для удобства, где-то в статусбаре иметь счётчик выделенных символов, чтобы быстро мерять длину строки между символами перевода каретки.
Что касается продублированного текста - пока ничего не скажу, но можно проверить, использовав русский скрипт, который я вставлял покепереводом, там все адреса строк есть.(Отредактировано автором: 25 Апреля, 2016 - 23:23:23) |
|
|
Ace Lightning |
Отправлено: 01 Мая, 2016 - 22:09:01
|
VIP
Покинул форум
Сообщений всего: 480
Дата рег-ции: Июнь 2015
|
Блин, как все сложно в этой игре, пипец. Почти написал анпакер для графики, но пока логику разработчиков не очень понимаю. Там все идет на уровне битов, все постоянно сдвигается то влево, то вправо. Что-то вроде бы даже правильное вырисовывается, но пока еще не все условия прописал.
P.S. Над софтинкой для текста работаю, не переживайте. Все будет.
А есть еще какая-нибудь графика, кроме этих имен, которую нужно переводить?(Отредактировано автором: 01 Мая, 2016 - 22:15:23) |
|
|
Ace Lightning |
Отправлено: 06 Мая, 2016 - 16:58:15
|
VIP
Покинул форум
Сообщений всего: 480
Дата рег-ции: Июнь 2015
|
Ну вот предварительная, но вполне себе рабочая версия программы. Потестируйте. В архиве набросал небольшой Help и все необходимые файлы для ромов с английским и русским шрифтом.
P.S. Вот сейчас я подумал. И понял, что с русского языка она некорректно будет работать, возможно ошибку выдавать или неправильные байты выдавать в тех местах, в которых русские буквы взяты из английского шрифта. Дело в том, что программа этих букв в таблице не найдет, потому что там они записаны английскими буквами. Короче надо будет подумать об этом. Может быть при сохранении скрипта, использовать другую таблицу, где уже будут все необходимые русские буквы записаны именно русскими буквами.
(Отредактировано автором: 06 Мая, 2016 - 17:02:01) |
|
|
|
Поиск в теме | Версия для печати |
Страниц (2): [1] 2 » |
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0) |
« Экстрим хакинг » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|