форум группы Chief-Net » » Базовый хакинг » помогите разобрать формат сжатия в файле с тайловой графикой

Страниц (1): [1]
 

1. janss - 06 Октября, 2016 - 10:13:54 - перейти к сообщению
помогите разобрать формат сжатия в файле с тайловой графикой, файл уже разбит по строкам, строка всегда начинается с "30 40 00 00"
Пример1:
Спойлер (Отобразить)


Пример2:
Спойлер (Отобразить)

2. Mefistotel - 06 Октября, 2016 - 11:03:28 - перейти к сообщению
Ты файлы то приложи, а также название рома/образа.
3. janss - 08 Октября, 2016 - 11:40:11 - перейти к сообщению
в архиве Archive.7z - карта, палитра и тайл
палитра в игре 256цв. но в этом примере используется только 16(остальное забито нулями за ненадобностью)

тайл состоит из блоков, одна строка - 1 блок
Цитата:
30 40 00 00 04 01 08 0F 0F 04 82 01 08 0F 0F 0E 07 07 0D 01 01 06 82 0F 81 01 03 08 0B 0A 07 9D 01 00 00 00
это нижняя часть буквы "с" в слове "Licensed"

4. Mefistotel - 08 Октября, 2016 - 12:05:54 - перейти к сообщению
Специалистов, которые могли бы что-то дельное подсказать по формату сжатию, нынче не так много, но некоторые заглядывают сюда иногда.
Это Griever, Rus и ещё есть участник команды alex_231.
5. janss - 10 Октября, 2016 - 20:14:25 - перейти к сообщению
формат разобран
6. Mefistotel - 10 Октября, 2016 - 23:13:51 - перейти к сообщению
Опиши. Может пригодится.
7. janss - 11 Октября, 2016 - 04:54:33 - перейти к сообщению
Поинтеры опущу, с ними всё просто...
Читаем тайл построчно - далее обработка строк:
1. Читаем следующий байт в строке, если начало строки, то начинаем с 5 байта:
a) если но больше 7f - то отнимаем от него 7d и полученное кол-во повторяем следующий байт.
б) если меньше 40 - то прибавляем 1 и полученное кол-во читаем последующие байты (последовательно)
2. Циклим п.1 пока ни закончится строка
3. Отрезаем от строки 64 байта. Заносим данные в готовый тайл.
4. Переходим к след строку и повторяем п.1

тайлы
Спойлер (Отобразить)
8. Dream - 14 Марта, 2017 - 22:57:25 - перейти к сообщению
По описанию обычный RLE)).
Жаль поздно увидел, в ФФ12 это одна из кодировальных механик, LZSS чуток сложнее.
Правда там чуток по-другому было, не отнимается 7d, там просто откидывается первый бит, который указывает на то, что компресованно или нет, и следующее повторяется оставшееся +1.
Но тут видно решили оптимизировать, и сделали, чтобы срабатывала компрессия при 3 и более повторяющихся (поэтому после откидки первого бита и прибавляем 3, а не 1 (что равно Твоему минус 7d)).

Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®