Перейти к содержимому
Zone of Games Forum
KosmoRei

Объясните систему адресации ссылок в одной из разновидностей LZ

Рекомендованные сообщения

Есть сжатые файлы игры Dragon Quest 5 для PS2. Хочу сделать порт русского перевода с NDS. Выдрал из RAM распакованный вариант и сравнивая с запакованным выяснил все, что опишу ниже здесь.

В сжатом потоке периодически расставлены контрольные байты (КБ), а их биты значат, чем являются следующие 8 сущностей (С1 - С8) (дословными байтами (1 байт) или ссылками (2 байта)).
Пример: КБ С1 С2 С3 С4 С5 С6 С7 С8 КБ С1 ...С8 КБ ...
Т. е. байт FC (11111100) значит, что у нас сразу за ним идет две двухбайтовых ссылки одна за другой, а затем 6 дословных байт. А затем следующий контрольный байт.

Я описал все, что мне известно об этом алгоритме на картинке.

u_2a88bc5d35d6abf4644d482d8dc80b41.png
И прикладываю сжатый файл и распакованный, который я выдрал из RAM.
Сжатый файл: https://www.dropbox.com/s/bw53z2qp9qsw2n1/cdf3b.chaindata.lz?dl=1
Распакованный файл: https://www.dropbox.com/s/hd0hvbnaevszh76/cdf3b.chaindata.lz_decompr?dl=1

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

Было бы неплохо, если бы кто-то помог добить этот алгоритм... Ассемблера я не знаю.

Изменено пользователем KosmoRei

Поделиться сообщением


Ссылка на сообщение

Скажи, куда указывают ссылки, сколько на них выделено битов, если не 12? Я прогал lzss однажды, так там нифига не как здесь. Здесь контрольные байты, а там были контрольные биты, чье значение определяло то, что сразу за ним — дословный байт или ссылка.

Поделиться сообщением


Ссылка на сообщение

Спасибо, поразбираюсь…

Однако после такой распаковки отличий с файлом из RAM чуть больше, чем половина размера файла. Что-то не так со ссылками. Ну я еще посоображаю… Имена переменных крайне неиформативные.

int init_chr = '\0'; //так, хотя бы, первые 138 байт файлов совпадают.

 

Поделиться сообщением


Ссылка на сообщение

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас



Zone of Games © 2003–2024 | Реклама на сайте.

×