Всем привет, давно здесь не появлялся и, наверное, столько же ничего не хакал и не переводил.
Ещё в 2011 году я выложил перевод RE Gaiden, но он далёк от идеала, т.к. выполнен без пересчёта поинтеров, а сжатая графика осталась нетронутой. С тех пор в хакинге gbc я не продвинулся ни капли но желание сделать нормальный перевод этой игры меня не оставляет. К тому же, я не прочь поупражняться в переводе, поскольку понимаю, что мои знания английского без практики сдают позиции.
Основную сложность представляет не только тот факт, что я не нашёл поинтеры (хотя, Меф мне как-то помогал с этим), но и странная система хранения текста, описываю по памяти:
В тексте каждые 8 байт (или каждый восьмой байт) присутствует какой-то служебный байт, замена которого приводит к некорректному выводу текста. Долго и муторно я переводил и вставлял текст частями, отлавливая баги с повреждением этих системных байт, вмещая русский скрипт в длину оригинала. Пытался двигать символ "перевода каретки" в пределах строки, но и это ни к чему хорошему не приводило.
Относительно графики: недостающие кириллические символы в шрифте я отрисовал поверх европейских "зяблов" поэтому удалось иметь оба набора символов для заглавной и строчной латиницы/кириллицы. Поправил непожатую графику в инвентаре и прочих местах.
Возможно, у кого-то найдутся желание, силы и время, чтобы нормально расхакать ром?..
А я уж за переводом текста не постою.
Наработки прилеплю, надо отыскать на одном из переносных винтов.
1. lupus - 20 Апреля, 2016 - 19:34:09 - перейти к сообщению
2. Mefistotel - 21 Апреля, 2016 - 01:30:19 - перейти к сообщению
Здесь тема:
http://chief-net.ru/forum/topic....m=3&topic=45
lupus, для хакинга графики желательно сейвы на неё для эмулятора NO$GBA или BGB.
Ace Lightning уже поднаторел с тех пор и возможно сможет помочь с ней)
По тексту посмотрим у кого будет свободное время, где-то у меня проект был к Круптару.
http://chief-net.ru/forum/topic....m=3&topic=45
lupus, для хакинга графики желательно сейвы на неё для эмулятора NO$GBA или BGB.
Ace Lightning уже поднаторел с тех пор и возможно сможет помочь с ней)
По тексту посмотрим у кого будет свободное время, где-то у меня проект был к Круптару.
3. Mefistotel - 21 Апреля, 2016 - 01:35:19 - перейти к сообщению
Вот и он.
4. Ace Lightning - 21 Апреля, 2016 - 09:07:59 - перейти к сообщению
Если игра на Game Boy Color, то лучше эмулятор BGB, когда я хакал Castlevania: Legends на нем, было очень удобно.
Надо будет глянуть, что там за система. В ближайшие дни посмотрю.
Надо будет глянуть, что там за система. В ближайшие дни посмотрю.
5. lupus - 22 Апреля, 2016 - 20:11:37 - перейти к сообщению
Отлично, буду ждать ответа. В первую очередь хотелось бы разобраться с текстом, чтобы можно было начать перевод, а следом копать в сторону графики.
6. Mefistotel - 23 Апреля, 2016 - 10:26:40 - перейти к сообщению
Проект посмотри, что я выложил. Он даже с плагином.
Не помню просто, на чём мы остановились.
Не помню просто, на чём мы остановились.
7. Ace Lightning - 23 Апреля, 2016 - 16:22:02 - перейти к сообщению
Ковыряю игру, и смотрю, что в роме очень много незанятого места с байтами $FF.
Длина указателей: 2 байта. Расположены над текстовыми блоками. Есть практически одинаковый текстовый блок, который начинается с текста в начале игры. Не знаю зачем это нужно.
Сжатие текста похоже на разновидность LZ, с которым я встречался я встречался в Castlevania: Legends, только там была графика пожата.
И еще при просмотре тайлов нет никакого шрифта. Просто тупо текст, я первый раз с таким сталкиваюсь. И в коде игры все так запутано, пока не могу разобраться точно что там и как.
Плохо, что нет для GB такого отладчика, который бы трассировал программу в файл, как это умеет, например, FCEUX для NES.
Длина указателей: 2 байта. Расположены над текстовыми блоками. Есть практически одинаковый текстовый блок, который начинается с текста в начале игры. Не знаю зачем это нужно.
Сжатие текста похоже на разновидность LZ, с которым я встречался я встречался в Castlevania: Legends, только там была графика пожата.
И еще при просмотре тайлов нет никакого шрифта. Просто тупо текст, я первый раз с таким сталкиваюсь. И в коде игры все так запутано, пока не могу разобраться точно что там и как.
Плохо, что нет для GB такого отладчика, который бы трассировал программу в файл, как это умеет, например, FCEUX для NES.
8. Марат - 23 Апреля, 2016 - 17:20:48 - перейти к сообщению
Ace Lightning пишет:
И еще при просмотре тайлов нет никакого шрифта. Просто тупо текст, я первый раз с таким сталкиваюсь. И в коде игры все так запутано, пока не могу разобраться точно что там и как.
Обычно, такой метод вывода текста используется для немоноширинных шрифтов. Хотя здесь он явно моноширинный. Сам шрифт надо искать в роме, там-то он, наверняка, есть.
9. Ace Lightning - 24 Апреля, 2016 - 12:01:20 - перейти к сообщению
Итак, я наконец-то все понял.
Давайте по-порядку.
Система хранения текста:
где, XX - давайте назовем флаговым байтом. 01-08 - байты текста или служебных символов.
Флаговый байт нужен для того, чтобы игра отличала служебные байты от текста. Какие есть служебные байты или их совокупность:
Давайте рассмотрим, например, строчку из меню игры, которая выводится при выборе пункта Continue.
Первый байт 09 - флаговый. Вот он же в двоичном виде: 00001001. Начинаем его анализировать со старшего бита.
Он равен единице, значит на этом месте будет служебный байт. Смотрим на строку, там действительно находится байт FB, который отвечает за координаты вывода текста.
После этого байта должны идти еще два байта, собственно с этими самыми координатами. Во флаговом байте они отмечаются нулевыми битами. После них снова идет служебный байт F8. Так уж устроена игра, что сочетание байтов FB XX XX F8 - это стандартный метод задания координат. Хотя я пробовал убирать с F8 метку из флагового байта, что он служебный и ничего в принципе не менялось. Но лучше наверное делать так, как сделано разработчиками)
Далее идет 4 байта текста, затем опять флаговый байт 10. В двоичном коде он: 00010000. Видим, что пятый байт в этой последовательности будет служебным. Итак, после байта 10 идет 4 байта текста и затем байт переноса строки F9 и после него еще 3 байта текста.
Затем идет флаговый байт 00, означающий, что служебных байт не будет. Поэтому после него идет 8 байт текста.
И, наконец, последний флаговый байт 0C - 00001100. После двух байт текста идут два служебных байта F9 FC - эта пара байт означает конец вывода текста.
Давайте по-порядку.
Система хранения текста:
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 - эта пара байт означает конец вывода текста.
10. Mefistotel - 24 Апреля, 2016 - 12:25:08 - перейти к сообщению
Красавчик.
Не знаю правда, в том плагине с проектом, что я дал, учтено ли это или нет. Скриптёр для текста сможешь написать?
Не знаю правда, в том плагине с проектом, что я дал, учтено ли это или нет. Скриптёр для текста сможешь написать?
11. Ace Lightning - 24 Апреля, 2016 - 13:49:35 - перейти к сообщению
Да могу, смотря в каком виде его надо. Как плагин к круптару? Я не очень знаком с круптаром, не умею к нему плагины писать.
12. Mefistotel - 24 Апреля, 2016 - 13:54:23 - перейти к сообщению
Можно и не в формате плагина, а отдельной утилитой.
13. Ace Lightning - 24 Апреля, 2016 - 15:37:30 - перейти к сообщению
Mefistotel пишет:
Можно и не в формате плагина, а отдельной утилитой.
Это можно
Посидел, сделал черновой вариант, вроде бы работает.
14. Ace Lightning - 25 Апреля, 2016 - 18:46:40 - перейти к сообщению
Вот только непонятно почему там текстовые блоки дублируются.
15. lupus - 25 Апреля, 2016 - 23:19:06 - перейти к сообщению
Шрифт там есть точно, он моноширинный, если не изменяет память.
Завтра покопаюсь на внешнем харде, разыщу наработки, можно будет вытащить готовый шрифт и таблицу к нему.
Раз уж для перевода пишется отдельная софтина, то было бы удобно иметь в ней окно, в котором видно, как выглядит введённый текст, шрифтом из рома (можно выдернуть и сохранить как битмап), а если ещё и с учётом заданных в роме координат - вообще мечта.
Плюс, для удобства, где-то в статусбаре иметь счётчик выделенных символов, чтобы быстро мерять длину строки между символами перевода каретки.
Что касается продублированного текста - пока ничего не скажу, но можно проверить, использовав русский скрипт, который я вставлял покепереводом, там все адреса строк есть.
Завтра покопаюсь на внешнем харде, разыщу наработки, можно будет вытащить готовый шрифт и таблицу к нему.
Раз уж для перевода пишется отдельная софтина, то было бы удобно иметь в ней окно, в котором видно, как выглядит введённый текст, шрифтом из рома (можно выдернуть и сохранить как битмап), а если ещё и с учётом заданных в роме координат - вообще мечта.
Плюс, для удобства, где-то в статусбаре иметь счётчик выделенных символов, чтобы быстро мерять длину строки между символами перевода каретки.
Что касается продублированного текста - пока ничего не скажу, но можно проверить, использовав русский скрипт, который я вставлял покепереводом, там все адреса строк есть.
16. Mefistotel - 26 Апреля, 2016 - 01:48:51 - перейти к сообщению
lupus, ты бы заранее всё подготовил, раз подымаешь старые темы с просьбой помочь.
17. Ace Lightning - 26 Апреля, 2016 - 07:34:09 - перейти к сообщению
Ладно, будет свободное время на работе - займусь тулзой, надо еще разобраться с графикой пожатой будет.
18. lupus - 26 Апреля, 2016 - 08:27:11 - перейти к сообщению
Держите архив, в нём:
- ром с перерисованной непожатой графикой (шрифт, имена в инвентаре, надпись PDA)
- русский и оригинальный скрипт, которые я вынимал/вставлял покепереодом. Символом @ заменял служебные байты
- английская и русская таблицы
- gfx.txt - вписал адреса перерисованной графики
- ром с перерисованной непожатой графикой (шрифт, имена в инвентаре, надпись PDA)
- русский и оригинальный скрипт, которые я вынимал/вставлял покепереодом. Символом @ заменял служебные байты
- английская и русская таблицы
- gfx.txt - вписал адреса перерисованной графики
19. Ace Lightning - 27 Апреля, 2016 - 14:07:10 - перейти к сообщению
Разбираюсь с алгоритмом сжатия графики и пребываю в легком шоке от алгоритма. На днях распаковщик выложу.
20. lupus - 27 Апреля, 2016 - 16:10:49 - перейти к сообщению
а что с софтинкой доя работы с текстом? Или ты делаешь утилиту all-in-one?
21. Ace Lightning - 27 Апреля, 2016 - 17:46:04 - перейти к сообщению
И её пишу, просто решил с графикой разобраться, вдохновение нашло.
22. lupus - 27 Апреля, 2016 - 18:11:23 - перейти к сообщению
Понял, жду. Вдохновение - штука не постояная...
23. AlecsandroTores - 28 Апреля, 2016 - 20:50:29 - перейти к сообщению
lupus, надеюсь ты не забыл, что я взял текст на доработку? В общем, забрал я оригинальный скрипт и потихоньку приведу текст в порядок. Если не понравится, переделаем, но надеюсь, я не напрасно работал над ним. Впрочем, нет предела совершенству.
24. lupus - 28 Апреля, 2016 - 21:36:38 - перейти к сообщению
Не переживай, всё помню. Можешь, для затравки, выложить, что уже напереводил?
25. AlecsandroTores - 29 Апреля, 2016 - 00:40:24 - перейти к сообщению
Я бы ещё чуток поработал.
26. Ace Lightning - 01 Мая, 2016 - 22:09:01 - перейти к сообщению
Блин, как все сложно в этой игре, пипец. Почти написал анпакер для графики, но пока логику разработчиков не очень понимаю. Там все идет на уровне битов, все постоянно сдвигается то влево, то вправо. Что-то вроде бы даже правильное вырисовывается, но пока еще не все условия прописал.
P.S. Над софтинкой для текста работаю, не переживайте. Все будет.
А есть еще какая-нибудь графика, кроме этих имен, которую нужно переводить?
P.S. Над софтинкой для текста работаю, не переживайте. Все будет.
А есть еще какая-нибудь графика, кроме этих имен, которую нужно переводить?
27. lupus - 03 Мая, 2016 - 10:03:59 - перейти к сообщению
Вроде, титульник ещё. Там надпись "press start". Больше ничего не припоминаю.
P.S. Отличные новости. Капком постоянно что-то мутит непонятное. Особенно в резидентах.
P.S. Отличные новости. Капком постоянно что-то мутит непонятное. Особенно в резидентах.
28. Ace Lightning - 05 Мая, 2016 - 08:54:20 - перейти к сообщению
Значит, что пока реализовал:
- Извлечение текста с заданного адреса до стоп-байта.
- Отрисовка текста игровым шрифтом в игровом окне (шрифт берется прямо из рома).
- Отображение в статус-баре количества выделенных символов.
- Все изменения, сделанные в поле, мгновенно отрисовываются в игровом окне.
- Если текст не помещается в игровом окне, появляются полосы прокрутки.
В планах еще сделать обратное преобразование с возможностью сохранения в файл для вставки в ром.
- Извлечение текста с заданного адреса до стоп-байта.
- Отрисовка текста игровым шрифтом в игровом окне (шрифт берется прямо из рома).
- Отображение в статус-баре количества выделенных символов.
- Все изменения, сделанные в поле, мгновенно отрисовываются в игровом окне.
- Если текст не помещается в игровом окне, появляются полосы прокрутки.
В планах еще сделать обратное преобразование с возможностью сохранения в файл для вставки в ром.
29. Mefistotel - 05 Мая, 2016 - 13:28:01 - перейти к сообщению
Отлично!
Продолжай в том же духе.
Продолжай в том же духе.
30. Ace Lightning - 06 Мая, 2016 - 16:58:15 - перейти к сообщению
Ну вот предварительная, но вполне себе рабочая версия программы. Потестируйте. В архиве набросал небольшой Help и все необходимые файлы для ромов с английским и русским шрифтом.
P.S. Вот сейчас я подумал. И понял, что с русского языка она некорректно будет работать, возможно ошибку выдавать или неправильные байты выдавать в тех местах, в которых русские буквы взяты из английского шрифта. Дело в том, что программа этих букв в таблице не найдет, потому что там они записаны английскими буквами. Короче надо будет подумать об этом. Может быть при сохранении скрипта, использовать другую таблицу, где уже будут все необходимые русские буквы записаны именно русскими буквами.
P.S. Вот сейчас я подумал. И понял, что с русского языка она некорректно будет работать, возможно ошибку выдавать или неправильные байты выдавать в тех местах, в которых русские буквы взяты из английского шрифта. Дело в том, что программа этих букв в таблице не найдет, потому что там они записаны английскими буквами. Короче надо будет подумать об этом. Может быть при сохранении скрипта, использовать другую таблицу, где уже будут все необходимые русские буквы записаны именно русскими буквами.