Chief-NET

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Chief-NET » Экстрим хакинг » Papyrus (E) (M6) [C][!].gbc


Papyrus (E) (M6) [C][!].gbc

Сообщений 21 страница 40 из 106

21

Вырезаю в WinHEX'се тот самый блок и вставляю вместо него новый запакованный.

Так делать нельзя. Не нужно вырезать старый блок, надо его перезаписать, и новые данные у тебя не должны превышать старые данные. А то ты можешь затереть какие-нибудь другие блоки данных или код. Если новый сжатый блок меньше оригинала ничего страшного.

22

Да, и в bgb нажми кнопку RUN, чтобы игра пошла. :)

23

Да, новые данные превысили старые. Из-за этого, все не работало.
Но у меня, все-таки, получилось нормально запаковать данные после перерисовки тайлов с RomArtist. Когда перерисовывал с DjinnTM и сжимал данные, почему-то размер сжатого файла был на порядок больше, чем требуется. А после RA, наоборот, меньше.
Но опять же, не без трудностей.
Перерисовал надпись "all rights reserved" на самом первом экране, запаковал, размер сжатого файла стал меньше на 7 байтов, чем оригинальный. По своему методу "вырезал, вставил". Заработало, но дальше пошли  глюки. Как было  сказано, затерлись другие блоки. Поэтому перезаписал старый блок на новый, и в конце, как хвостик, остались 7 байтов старого блока. Не заработало. Заполнил эти байты нулями - не помогло.
Что делать? Как быть? В чем смысл жизни?

24

Сегодня попробую тебе объяснить в чём смысл бытия. :) Для всех операций используй нашу сборку Translhextion 1.6с. На его примере попробую тебе объяснить, как правильно вынимать сжатые данные и вставлять обратно.

Отредактировано Mefistotel (2013-05-03 01:59:34)

25

Успехи, так сказать, есть. Распаковал около 100 RNC-блоков, и то это всего лишь где-то 25-30 процентов. Нашел экран выдачи кода, спрайты боссов, стартовое меню и кредитсы (о разработчиках).
Распаковывается и запаковывается без проблем. Но игра не запускается.
Я, наверное, что-то делаю не так.
Мои действия:
Открываю игру в WinHEX'ce, далее с адреса 000CBCC0 до 000CBF19 сохраняю отдельно RNC-блок, в котором хранится графика экрана кредитсов, под названием credits.rnc (так не запутаюсь). Надо упомянуть, что первые 4 байта RNC 02, далее 00 00 04 30 = 1072 байта несжатых данных и 00 00 01 F3 = 499 байта сжатых данных, и мне непонятно, зачем мне нужно это знать. И за этими байтами идет не 499, а 505 байтов. Тоже непонятно.
Распаковываю в командной строке: C:\RNC\PPIBM.EXE u -m 2 C:\RNC\credits.rnc
(u-unpack, -m 2 -выбрать второй метод).
Файл изменится, я его открываю в DjinnTM. В карте тайлов изменяю пару пикселей, чтобы было заметней.
Теперь пакую: C:\RNC\PPIBM.EXE p -m 2 C:\RNC\CREDITS.RNC
Вырезаю в WinHEX'се тот самый блок и вставляю вместо него новый запакованный.
Включаю эмулятор bgb, загружаю игру, и вижу дебаггер.
Нужно что-то дебажить или как?

Почему ты считаешь, что архив занимает xCBCC0-xCBF19? Приложил скрин из моего любимого редактора. Для начала выделяем архив (shift+стрелки). Судя по тому, что RNC - это первые три байта заголовка архива, наш архив занимает 517 байт (0xCBCC0-0xCBEC4).
Когда нужный диапазон выделен, нажимаем Selection - Save Selection as. Далее вводим имя архива, например, Credits.bin.

Отредактировано Mefistotel (2013-05-03 08:10:37)

26

Далее все кидаем в одну папку и создаём в ней батник (создать блокнотный файл, только расширение .bat). Далее правой кнопкой на батник - изменить и прописываем в нём:

Код:
C:\RNC\PPIBM.EXE u -m 2 C:\RNC\credits.bin
pause

Пауза нужна для того, чтобы видеть результат.
Запускаем бычка и на выходе получаем 1072 байта несжатых данных (h0430). Рисуем там, что нужно.
Далее сжимаем обратно его, запуская новый батник:

Код:
C:\RNC\PPIBM.EXE p -m 2 C:\RNC\credits.bin
pause

Если сжатый кусок получился больше оригинальных сжатых данных, то лучше рисуй снова и не забудь удалить нули в конце распакованного файла любым хексредактором. Это позволит сэкономить пару байтов.  Если сжатый кусок равен оригинальному, то снова выделяем в роме этот архив, как показано на картинке выше, а потом жмём Selection - Fill Selection with - выбираем Fill Selection with file - и подсовываем ему сжатые данные, затем нажимаем ОК.
Третий случай, если новый сжатый кусок меньше оригинала, то делаем всё тоже самое, что и во втором случае, но выделяем в роме кусок идентичного размера. Например, получилось 488 байт - новый архив. Соответственно сначала архива в роме через shift+Down выделяем именно 488 байт, затем Selection - Fill Selection with - выбираем Fill Selection with file - и подсовываем ему сжатые данные, затем нажимаем ОК.
После этого я на всякий случай ставлю байт /00 или /FF уже после новых сжатых данных.
P. S. Пока неясно, почему в заголовке архива размер пакованной даты указан как h01F3, то есть 499 байт. Если вынуть кусок 499 байт, то анпакер не может его распаковать При 517 байтах всё идеально распаковывается, запаковывается и вставляется обратно. И ром работает как нужно.
P. P. S. Можно вставить и архив большего размера. Для этого нужно найти указатели на начало архивов и перетрясти ром, выкроить место за счет других архивов либо вообще перенеся в свободное. Но пока тебе рановато до этого.

Отредактировано Mefistotel (2013-05-03 08:41:48)

27

Почему не ясно? Всё ясно: заголовок пакета 18 байт + размер сжатых данных 499 байт = размер пакета 517 байт
А вот в заголовке уже не совсем понятно, что означают 4 байта после размера сжатых данных, то ли чексумма, то ли ещё что-то (благо на процесс распаковки эти данные не влияют).

28

Да, друг, ты как всегда прав. Только собирался написать про формат заголовка архива. :)
specialsafeway, тебе теперь сам бог велел с графикой самостоятельно разобраться. ;)
А alex_231 поможет с програмкой для текста, как будет время.

Отредактировано Mefistotel (2013-05-03 09:16:06)

29

Дык, чего там помогать-то, текст пожат тем же способом, что и графика, суть работы та же, только поинтеры на пакеты и на строки найти нужно, но с этим в дебаггере можно в момент разобраться.

30

А вот в заголовке уже не совсем понятно, что означают 4 байта после размера сжатых данных, то ли чексумма, то ли ещё что-то (благо на процесс распаковки эти данные не влияют).

Да, это чексумма. Легко можно проверить, изменив байт этой чексумы. Сразу при попытке распаковать выйдет сообщение "PACKED DATA CRC ERROR".

31

На строки поинтеров нет, программа автоматически по стопбайтам режет текст на строки, так что можно просто файлы перевести,щ зажать обратно и разместить в роме.
Вот только с размещением могут быть проблемы, так как не везде пакеты можно будет впихнуть на место исходных пакетов, если только попробовать разместить их в неиспользуемых частях рома (поинтерами можно ссылаться на весь ром).

Отредактировано alex_231 (2013-05-03 13:43:01)

32

Там же поинтеры двухбайтные.

33

Не, они трехбайтовые, просто первый байт поинтера указывает на банк, относительно которого указывает двухбайтовый поинтер. Банки размером по h4000 байт, а поинтеры в диапазоне h4000 - h7FFF (по крайней мере те, что я видел), но, думаю можно попробовать использовать поинтеры, начиная с h0000, хотя и не уверен в результате.

34

думаю можно попробовать использовать поинтеры, начиная с h0000, хотя и не уверен в результате.

Не адреса с 0x0000-0x3FFF, согласно, документации указывают всегда на начало РОМ'a. Все остальный банки подключаются к адресам 0x4000-0x7FFF

35

У меня такое ощущение, что мы переводчика испугали)
specialsafewave, если тебе что-то непонятно из написанного, то найди меня в аське - разжую. Парень, ты вроде смышленный, можно и до конца перевод допилить.

Отредактировано Mefistotel (2013-05-03 23:12:59)

36

Не-не, не испугался я пока что. Начал перерисовывать графику.
Не знаю почему, но у меня игра не идет, когда новый сжатый блок меньше оригинального. Поэтому в еще не запакованный блок вставляю всякий мусор: в неиспользуемые тайлы рисую пару пикселей, в хекредакторе добавляю нули и все такое. Короче подгоняю размер под оригинальный. Только так, только хардкор!

37

Спасибо всем за помощь, советы и поддержку. Перевод я допилю чего бы это мне не стоило. :D
ЗЫ: За Translhextion отдельная благодарность. По сравнению c WinHex - "небо и земля".

38

Надо бы разобрать формат этой чексуммы. Видимо, из-за нее архивы меньшего размера негативно влияют на игру.
Саня, титульник без карты рисовать ему будет сложновато. Можешь глянуть размер карты титульника и ее адрес?

Отредактировано Mefistotel (2013-05-04 02:25:19)

39

Да у нас, кажется, медленно, но верно образуется новый ромхакер. :)

Отредактировано KenshinX (2014-01-02 06:58:59)

40

Попробую сегодня вечерком.


Вы здесь » Chief-NET » Экстрим хакинг » Papyrus (E) (M6) [C][!].gbc