Разработка и ромхакинг > Ромхакинг и программирование
Алгоритмы сжатия информации
<< < (3/3)
Марат:

--- Цитата: sergi от 01 Июнь 2009, 15:02:37 ---если всего 2 спарки то жмет 8064 байта до 74 байт
а если 2048 то до 7,5 килобайт


--- Конец цитаты ---
Ну, как-то совсем хреново. По-моему Хафман бы лучше сжал бы. Можешь весь файл мегабайтный приатачить? Только сожми его предварительно, а то не охота лишние 500 кб качать.
sergi:
Да сжать то может и можно получше, проблема разжать побыстрее с малыми затратами а это важнее - мне скорость главное

http://www.raregame.ru/file/File.zip
GManiac:
RNC сжал этот кусок до 424117 байт. Как быстро будет разжиматься, я уже описывал.
Так я и не понял, у тебя сжаты куски по 8 кб или как? Почему ты вдруг начал писать про сжатие всего мегабайта и про 1-2 кадра на разжатие, ты же говорил, что свободно всего пара тыщ тактов. Опиши подробнее.
Марат:
У мемя весь кусок сжимается до 506 кб. А, если сжимать по 8 кб, то, думаю, где-то 700 кб будет. Хафман и того хуже сжимает на 650 кб. Что касается rar и zip, у них, по-моему, словарь не мемьше 64 кб. По крайней мере, так в опциях написано. С таким словарем мой пакер для blades of vengeance сжимает этот мегабайтный кусок до 408 кб.
sergi:
Ну да, я не говорю что нельзя, мне просто именно по 8 килобайт нужно и вопрос не только с сжатии но и с временем расжатия и размером кода ну и сколько регистров используется
я использовал и сделал свой метод именно для своих целей

то что он жмет ну не в 4 килобайта да это конечно плохо для меня, но боюсь что более лучшие результаты встанут мне неоправдано дорого

можно было еще конечно как уже говорил использовать по весам так сказать - более частые обозначать меньшим количеством бит а более редкие большим, но там сложность в том что алгоритм будет гораздо сложнее

а вообще что за необходимость жать разные сеговские игры  - как понять пакер для blades of vengeance? :?
а так что она не пожата или ты собственно один из разработчиков этой игры? :?
Марат:

--- Цитата: sergi от 02 Июнь 2009, 14:05:12 ---а вообще что за необходимость жать разные сеговские игры  - как понять пакер для blades of vengeance? :?


--- Конец цитаты ---
Ну, тут все просто: если мне нужно перевести на русский какую-нибудь игру, а данные в ней пожаты, то я естественно изучаю алгоритм распаковки, а потом пишу пакер. Обычное дело.

Добавлено позже:

--- Цитата: sergi от 02 Июнь 2009, 14:05:12 ---а вообще что за необходимость жать разные сеговские игры  - как понять пакер для blades of vengeance? :?


--- Конец цитаты ---
Ну, тут все просто: если мне нужно перевести на русский какую-нибудь игру, а данные в ней пожаты, то я естественно изучаю алгоритм распаковки, а потом пишу пакер. Обычное дело.
--- Цитата: sergi от 02 Июнь 2009, 14:05:12 ---Ну да, я не говорю что нельзя, мне просто именно по 8 килобайт нужно и вопрос не только с сжатии но и с временем расжатия и размером кода ну и сколько регистров используется
я использовал и сделал свой метод именно для своих целей

то что он жмет ну не в 4 килобайта да это конечно плохо для меня, но боюсь что более лучшие результаты встанут мне неоправдано дорого

можно было еще конечно как уже говорил использовать по весам так сказать - более частые обозначать меньшим количеством бит а более редкие большим, но там сложность в том что алгоритм будет гораздо сложнее

а вообще что за необходимость жать разные сеговские игры  - как понять пакер для blades of vengeance? :?
а так что она не пожата или ты собственно один из разработчиков этой игры? :?

--- Конец цитаты ---

--- Цитата: sergi от 02 Июнь 2009, 14:05:12 ---Ну да, я не говорю что нельзя, мне просто именно по 8 килобайт нужно и вопрос не только с сжатии но и с временем расжатия и размером кода ну и сколько регистров используется
я использовал и сделал свой метод именно для своих целей


--- Конец цитаты ---
А с регистрами-то какие проблемы? Нужные регисты ведь можно всегда сохранить в стек.
sergi:
Ну напиши тогда разные алгоритмы запаковки-распаковки данных которые в играх используются - думаю полезная информация - может чего и я использую потом

просто в моем случае там особо разницы нет 50 или даже 100 килобайт будет ли еще лишних :-\

регистры блин и так в стеке все сидят да у меня еще часть регистров которые я использую участвуют в правильном вытягивании данных, я потом по ним ориентируюсь в запакованном роме
Марат:
Еще раз внимательно изучил алгоритм сжатия в использующийся в игре Genghiskhan, оказалось это LZB. Длина кодируется при помощи гамма-кодов Элиаса, а смещение, как я понял, при помощи кодов старт-шаг-стоп (англ. Start-step-stop) с параметрами 2, 2, 14.
В Blades of Vengeance тоже используется LZB, только там немного другиой гамма-код Элиаса.
sergi:
Да ты просто распиши в чем суть его, я так то плохо шарю

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

ну от 0 избавится это святое дело конечно это всегда гдето 20-30% сжатия дает
Марат:
Суть-то проста: это тоже самое, что lzh, только вместо кодов хаффмана используются коды Элиаса.
К примеру, для обычного lzss метода сжатия со словарем 4 кб и макс. длиной 18 байт, для кодирования пары 'длина, смещение' требуется 16 бит (12 на смещение и 4 для длины). Таким образом, не важно какая будет длина 3 байта или 18, все равно будет использоваться 4 бита. Со смещением та же беда. А элиас код позволяет кодировать фразу длиной 3 байта 1 битом, 4 и 5 байтов 3 битами. Ну и смещение точно также, только кодируются другими кодами. Они не так оптимальны как коды хаффмана, но зато не требуют построения дерева и дополнительной памяти, и к тому же, кодируются за один проход.
В Comix Zone, по-моему, неплохой метод сжатия используется, но какой-то сложный.
PS. B blades of vengeance, как оказалось, используются гамма-коды Левенштейна.
sergi:
Ладно - имен много

всеравно раз словарь, то он место занимает и соответственно машинные циклы по подстановке данных в нужные места, да и оператива не резиновая - я в своем пакере обхожусь оперативой в 16 килобайт
sergi:
Вот результат работы тут расположен
http://www.emu-land.net/forum/index.php/topic,29056.0.html
Навигация
Главная страница сообщений
Предыдущая страница

Перейти к полной версии