Без описания |
Поиск в теме | Версия для печати |
Mefistotel |
Отправлено: 28 Февраля, 2016 - 03:18:31
|
Chief-Net
Покинул форум
Сообщений всего: 7127
Дата рег-ции: Окт. 2014
Откуда: МАГАДАН
|
Mefistotel
Парни, не могу вспомнить, где-то выкладывали пакер/анапкер для алгоритма RLE, применяемого фирмой Конами в своих играх на NES. Во вложении расжатая тайловая карта и пожатая алгоритмом RLE. Может у кого есть в загашнике упаковщик. Особенности местного алгоритма, что кодирует как цепочки из повторяющихся байтов, так и цепочки из последовательных байтов.
P. S. По-моему нашёл что-то нужно на Zophar-e . Судя, по названию, похоже на какой-то развод. Хотя...
Надо скачать питон, чтобы понять, работает ли это.
----- "Перевод старых игр - отличная возможность понять, как устроены программы, подучить иностранный язык и поднять уровень владения родным. Ну и конечно, это просто возможность "общения" со своей любимой игрой детства." © Dimouse |
|
|
TrickZter |
Отправлено: 28 Февраля, 2016 - 03:19:05
|
Покинул форум
Сообщений всего: 560
Дата рег-ции: Июнь 2015
|
TrickZter
Я бы RLE не относил к экстриму
Рассмотрим первые несколько байт пожатого ресурса:
00 20 4B 00 8B 61 62 90 91 92 93 94 95 B3 B4 73 06 00
Смотрим первый бит первого байта, если он равен нулю, то идёт копирование нескольких байтов, если единице значит идёт несколько непожатых байтов.
Первый байт у нас 00, а его старший бит, соответственно - 0. Значит дальше идёт несколько одинаковых байт, длина определяется 7-ю младшими битами, то есть длина у нас будет 0. Дальше идёт байт, который у нас множится 0 раз. то есть пара 00 20 распаковывается в ничто
Смотрим следующий байт: 4B
У него старший бит равен нулю, значит будет множество одинаковых байтов, их количество берём из младших семи бит 01001011, то есть длина отрезка с одинаковыми байтами - 4B. За ним идёт байт из которого составляется этот отрезок - 00. То есть пара 4B 00 превращается в состоящий из 00 отрезок длиной в 4B (75 в десятичной системе).
Теперь опять идёт флаговый байт: 8B
Смотрим его старший бит - он равен 1, значит дальше идёт не пожатый отрезок. Его длину получаем из 7 младших битов 10001011, то есть длина получается 0B. Следующие 0B (11 в десятичной системе) байтов у нас не пожатые: 61 62 90 91 92 93 94 95 B3 B4 73
И снова идёт флаговый байт, на этот раз он 06.
Смотрим первый бит, он равен нулю, остальные 7 бит дают длину отрезка - 06. Следующий за ним байт говорит из какого байта состоит отрезок - 00. То есть пара 06 00 превращается в шесть нулей (00 00 00 00 00 00).
З.Ы.: Возможно первые два байта и не предназначены для распаковки. Они могут служить просто индикатором RLE сжатия. Так что, если перепакованный ресурс вдруг начнёт выглядеть в игре странно, можно будет попробовать подставить перед ним байты 00 20. Они в любом случае не навредят, так как распаковываются в ничто. |
|
|
Mefistotel |
Отправлено: 28 Февраля, 2016 - 03:19:52
|
Chief-Net
Покинул форум
Сообщений всего: 7127
Дата рег-ции: Окт. 2014
Откуда: МАГАДАН
|
Mefistotel
Цитата:Возможно первые два байта и не предназначены для распаковки.
Я считал, что это размер архива, h0200 - 512 байт.
Парни, я знаю, как это работает, но научиться програмировать у меня банально не было времени и не будет. Это факт.
Поэтому и ищу готовый компрессор. Сейчас с этой кладбищенской уткой разберусь только. Скачал 3 питон, ругается зараза на синтаксис.
Хотя всё понятно изложено:
CODE:graveduck.py -c [FILENAME] [OFFSET] [BINARY]
graveduck.py -d [FILENAME] [OFFSET] [BINARY]
-c compresses BINARY and sticks it into FILENAME at OFFSET. Don't blame me if it overwrites stuff because the new compressed data is larger -- that is your own fault. My compression is 1-to-1 identical to Konami's and compresses data to exactly match Konami's version.
-d opens FILENAME, goes to OFFSET, decompressed everything and saves it to BINARY.
Соответсвенно, в батнике прописал:
CODE:graveduck.py -d DandyENG.nes hFD72 map
pause Причем адрес пробовал вводить и через 0x, $ и h, и в десятичной системе. Пока бесполезно.
P.S. Обновил архив от начала до hFF, убрав ненужные байты в начале.
----- "Перевод старых игр - отличная возможность понять, как устроены программы, подучить иностранный язык и поднять уровень владения родным. Ну и конечно, это просто возможность "общения" со своей любимой игрой детства." © Dimouse |
|
|
Guyver |
Отправлено: 28 Февраля, 2016 - 03:24:08
|
Chief-Net
Покинул форум
Сообщений всего: 10117
Дата рег-ции: Окт. 2014
Откуда: Магадан
|
Guyver
Такс, кое-как домой приплёлся, вот что успел доделать - сделал, вроде нормально, но не мешало бы потестить (особенно с разными папками в разных местах и с именами, в том числе с пробелами и кириллицей с латиницей)
По идее теперь косяков быть не должно... Можно брать файлы откуда угодно и с какими угодно именами (я надеюсь ;о)))). Если так покатит - то я уменьшу вес проги раз так в 10, если эта поделка того стоит и если уменьшение веса вообще нужно с исходным весом под 400 кБ. Перепишу на KOL.
KONAMI UP (unpacker/packer)
По-моему, даже хорошо, что остаются консольные версии и батники - как раз для любителей таких дел, коих порядочное количество. А для прочих - главный файл, а остальные файлы вынесены в отдельную папку и никому не мешают... Даже не видно что батники работают, я скрыл их запуск... И Джинни не будет нервничать и волноваться - это как с патчами получится. Его проги мы не трогали, код не изменяли и даже исходники не смотрели ;о))))))))))))))))))))
Только я вот про это не понял:
0xaddress - адрес начало сжатого блока в оригинальном файле. Если вы используете уже вынутый блок запакованных данных, то данный параметр можно опустить.
Какого вида число в батник надо вставлять? А то в примере адреса нет. В анпакере же такого адреса нет, да? Только в анпакере?
Т.е. вводить надо так: 0x5F к примеру? Шестнадцетиричный вид? Или как? Я сделал 16-ричный. Работает, кажется, но верный результат или нет - я точно не знаю... Надо протестировать на каком-нить роме, зная адрес начала пакета...
----- Я не волшебник - я только учусь... |
|
|
|
Поиск в теме | Версия для печати |
Страниц (2): [1] 2 » |
Сейчас эту тему просматривают: 3 (гостей: 3, зарегистрированных: 0) |
« Экстрим хакинг » |
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
|
|
|