Автор Тема: [SS] RLE сжатие графики  (Прочитано 1665 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ViToTiV

  • Пользователь
  • Сообщений: 170
    • Просмотр профиля
[SS] RLE сжатие графики
« : 14 Май 2021, 12:14:57 »
Господа, помогите разобраться в сжатии картинки, скорее всего это RLE (игра для Sega Saturn - "Casper"). Перевёл всю игру, перерисовал всю графику, и вот 4 (из 50) картинки сжаты.

Вот сама картинка (скрин из игры)
237035-0

Вот оригинальный файл
* Loading.rar (5.7 КБ - загружено 132 раз.)

По формату файла:
0х24 - ширина (2 байта)
0х26 - высота (2 байта)
Данные картинки начинаются скорее всего с 0х30 (в не сжатых файлах так по крайней мере).
Вроде как сразу идёт палитра (уже сжата), потом картинка (FE00FE00FE00FE00...) - черный фон, потому и решил что RLE.
Сама картинка скорее всего 4 или 8 бит (судя по размеру файла), не сжатые картинки все 15-битные.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #1 : 14 Май 2021, 13:16:09 »
Мне привычнее по бинарям разбирать код. Поделишься в личку?

Оффлайн ViToTiV

  • Пользователь
  • Сообщений: 170
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #2 : 14 Май 2021, 13:21:20 »
DrMefistO, бинари - в смысле запускные файлы? их там два, первый для титульного экрана, второй для самой игры.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #3 : 14 Май 2021, 13:22:52 »
А картинки эти где используются? В самой игре?

Оффлайн ViToTiV

  • Пользователь
  • Сообщений: 170
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #4 : 14 Май 2021, 13:52:46 »
да, при загрузке уровней (которая сжата), а в игре на уровнях не сжатые
картинки меню игры ("Load", "Save", "New Game") тоже сжаты по такому же алгоритму

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #5 : 14 Май 2021, 13:59:16 »
вроде нашёл код анпакера в игре, попробую разобраться

Оффлайн ViToTiV

  • Пользователь
  • Сообщений: 170
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #6 : 14 Май 2021, 14:26:39 »
DrMefistO, оперативно)
если получится, будет гуд.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #7 : 14 Май 2021, 15:07:37 »
А можно анпакнутую картинку как есть?

Добавлено позже:
Картинок такого формата я увидел больше, чем 4.

Добавлено позже:
Оказывается, в формате PX много чо пожато.
« Последнее редактирование: 14 Май 2021, 15:23:15 от DrMefistO »

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8076
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #8 : 14 Май 2021, 19:21:02 »
Странно зачем вообще понадобилось сжимать картинку для экрана загрузки? Игра и так на паузе, так как идёт чтение с диска. Ну грузилась бы она на пол секунды дольше, если бы картинка была не сжата. Смысла в такой оптимизации как-то совсем не прослеживается.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #9 : 14 Май 2021, 19:43:02 »
Распаковщик написал. В изображениях может быть несколько блоков.
Что странно, изображения безпалитровые, но цвета у них битые, почему-то.



Добавлено позже:
У меня есть подозрение, что блоки - это анимации

Добавлено позже:
И ты точно не мог всю графику перерисовать, потому что PX там повсюду.
« Последнее редактирование: 14 Май 2021, 19:56:12 от DrMefistO »

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8076
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #10 : 14 Май 2021, 19:56:19 »
Что странно, изображения безпалитровые, но цвета у них битые, почему-то.
Картинка 15 / 16 bpp?

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #11 : 14 Май 2021, 20:16:18 »
Да, 16 bpp. Вот ещё пример, более сумасшедший:

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8076
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #12 : 14 Май 2021, 20:58:22 »
Ну так все 15/16 bpp изображения с обратным порядком байт. Чтобы в молестере они правильно отображались, надо свапнуть бинарник. Вообще с этой игрой сплошные странности. Зачем использовать тяжёлые 15 / 16 bpp изображения, если визуальной разницы с 8bpp после их конвертации нет. Сплошное разбазаривание VRAM и лень возиться с палитрой.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #13 : 14 Май 2021, 21:02:13 »
Свапнуть - это в смысле у вордов поменять порядок байт?

Добавлено позже:
Проверил. Да, так лучше:)
« Последнее редактирование: 14 Май 2021, 21:09:18 от DrMefistO »

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #14 : 14 Май 2021, 21:14:31 »
Почему-то мне не удаётся довести до нормального цвета этот бинарь (распакованный) из первого сообщения:

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8076
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #15 : 14 Май 2021, 21:55:19 »
Почему-то мне не удаётся довести до нормального цвета этот бинарь (распакованный) из первого сообщения:

Потому, что распакован он неправильно. Прикрепил дамп.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #16 : 14 Май 2021, 22:14:06 »
Спасибо, нашёл у себя багу. Удалось распаковать нормально.

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8076
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #17 : 14 Май 2021, 22:20:02 »
Вообще, PX файлы (сжатые) можно легко превратить в PZ (несжатые), вытащив распакованные данные из дампа VDP1 и прилепив к ним 30h байт заголовка оригинала (исправив PX на PZ). Необходимо лишь пересобрать образ с новым файлом. Вот пример того файла с экрана загрузки.


Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #18 : 14 Май 2021, 22:25:01 »
Да, можно. Но если охота как в оригинале, то подождите, я делаю пакер:)

Оффлайн ViToTiV

  • Пользователь
  • Сообщений: 170
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #19 : 14 Май 2021, 23:21:03 »
И ты точно не мог всю графику перерисовать, потому что PX там повсюду.
ну вроде то, что отображается с текстом, всю (правда протестировал только первый акт игры). Там сжата возможно графика уровней, но она мне не нужна.
вытащив распакованные данные из дампа VDP1
а как вытащить дамп VDP1? и что это вообще такое?) я с Сатурном только начал знакомство.
Но если охота как в оригинале, то подождите, я делаю пакер:)
лучше конечно как в оригинале, не факт что без запаковки не будет глюков на железе.
так в итоге всё-таки RLE сжатие?
Вообще с этой игрой сплошные странности
а её походу изначально делали для 3DO (там есть файлы с таким же расширением), потом решили портануть на Saturn и PSX. На psx так вообще половина этой графики не используется, перегнали в видео и bitstream изображения.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #20 : 14 Май 2021, 23:41:35 »
Сжатие RLE, только хитрое, со словарём.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #21 : 15 Май 2021, 06:56:55 »
Короче, выкладываю скрипт, который умеет анпачить (сразу разворачивает байты). Скрипт также умеет искать PX и PZ данные в других файлах.

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

Сссылка на скрипты: https://gist.github.com/lab313ru/caf056c30ae1a866c4c7ced257f09d4d

Оффлайн ViToTiV

  • Пользователь
  • Сообщений: 170
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #22 : 15 Май 2021, 07:15:30 »
DrMefistO, пасиб, это для phyton? Ставить просто последнюю версию и все, или ещё что-то надо установить?

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #23 : 15 Май 2021, 07:31:05 »
Да, питон любой третьей версии

Оффлайн paul_met

  • Супермодератор
  • Сообщений: 8076
  • Пол: Мужской
  • Похититель эмуляции
    • Youtube
    • Просмотр профиля
Re: [SS] RLE сжатие графики
« Ответ #24 : 15 Май 2021, 08:15:33 »
а как вытащить дамп VDP1? и что это вообще такое?) я с Сатурном только начал знакомство.
VDP1 - один из видеочипов Сатурна, отвечающих за обработку спрайтов и полигонов. В отладчике VDP1 эмуля Yabause можно видеть все активные в конкретный момент времени спрайты и их характеристики (адрес в видеопамять, размеры, формат цвета и т.д.). Оттуда и дампишь нужный тебе спрайт.

Оффлайн ViToTiV

  • Пользователь
  • Сообщений: 170
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #25 : 15 Май 2021, 11:31:17 »
всем спасибо, всё пучком)



только в скрипте "pack_cel.py" на 251 строке к аргументам надо "sys." добавить, иначе ошибка.

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #26 : 15 Май 2021, 13:47:56 »
Для того, чтобы многокадровые собирало, там в скрипте сборщика нужно на строке 242 передавать в квадратные скобки данные и остальных блоков, просто я тестировал на одном, и не успел добавить открытие списка файлов.

А про 'sys.' - да, перед публикацией скрипта в конце добавлял аргументы, на скорую руку уже, поэтому забыл:).
« Последнее редактирование: 15 Май 2021, 17:17:22 от DrMefistO »

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
Re: [SS] RLE сжатие графики
« Ответ #27 : 16 Май 2021, 09:58:50 »
Второй скрип умеет паковать (хуже, чем оригинал, т.к. в оригинале используется умный подбор оптимальных последовательностей, а у меня оптимизации практически нет). Если есть у кого желание доделать (например, у Марата), было бы круто.
Вот. Ещё в идеале надо добавить обработку переполнения словаря: когда словарь заполнится отправлять словарь и ссылки на фразы в словаре в выходной поток, и дальше работать с новым пустым словарём.

Перезалил.
« Последнее редактирование: 20 Май 2021, 19:18:58 от Марат »

Оффлайн Марат

  • Пользователь
  • Сообщений: 556
  • Пол: Мужской
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #28 : 16 Май 2021, 19:10:18 »
Кстати, здесь dest += pack_word(len(data)) в оригинале указан размер сжатого файла без хедера. А у тебя указан размер несжатого файла.
    for data in blocks:
        dest += pack_word(len(data))
        packed, woff = pack_block(data)
        dest += pack_word(woff)
        dest += packed

    return dest
изменил на
    for data in blocks:
        packed, woff = pack_block(data)
        dest += pack_word(len(packed) + 2 + 2)
        dest += pack_word(woff)
        dest += packed
« Последнее редактирование: 20 Май 2021, 19:17:50 от Марат »

Оффлайн DrMefistO

  • Пользователь
  • Сообщений: 1294
  • Пол: Мужской
  • Sega Mega Drive reversing
    • Просмотр профиля
[SS] RLE сжатие графики
« Ответ #29 : 22 Май 2021, 14:41:46 »
Супер, спасибо:)