Spiiin's blog

Формат уровней Mickey Mania, Pitfall, Jungle Book [SEGA]

Решил проверить оставшиеся методы компрессии, чтобы убедиться, что компрессор подходит для всех игр из списка.

По формату все игры похожи на EarthWorm Jim’ам, разобранным ранее, с небольшими отличиями. Поиск конфигов осуществлялся для теста разными способами:

  1. Логгированием адресов lua-скриптом при запуске кода компрессора (в регистре A1 лежит адрес в ROM начала архива, а A2 - место в оперативной памяти, куда происходит распаковка, поинтер и A1 можно найти в ROM, за исплючением последнего байта, так как несколько байт заголовка архива могут быть уже прочитаны).

  2. Поиском палитры уровня в ROM, с последующим поиском указателей на эту палитру.

  3. Поиском в дампе оперативной памяти игры самой длинной последовательности из кратных 8 чисел (в формате карт Earth Worm Jim индексы блоков кодировались кратными 8 значениями).

Для этого использовался код на python: https://gist.github.com/spiiin/1882d49b7f21961b7aee

Результаты:

Mickey Mania
Размер блоков не 2x2, а 4x4, за счёт этого на описание одного блока на экране карты уходит не 2, а 1 байт (по 256 блоков на уровень).
cad_mm

Jungle Book
Полностью аналогичный EWJ формат, только в конфигах уровней иногда встречается формат архивов FAKERNC, распаковывающийся аналогично обычному RNC (первые четыре байта отбрасываются).
cad_jungle_book

Pitfall: The Mayan Adventure
После распаковки архива RNC с описанием карты в оперативную память оказывается, что он сжат ещё раз - вначале распакованных данных идут 2 ворда - количество сжатых колонок и их длина, затем для каждой колонки записаны относильные адреса начала столбцов (например, для первой колонки 1-го уровня - индекс 0x0218, означает, что сжатые данные колонки начинаются с адреса 0xFF7040 + 0x218 = 0xFF7258, где 0xFF7040, начало данных столбцов, зависит от кол-ва столбцов на уровне), и далее сами столбцы, сжатые алгоритмом RLE - FF признак повтора байта, за которым следует число повторов (1 байт) и сам повторяемый ворд.

Скрипт для распаковки: https://gist.github.com/spiiin/70d5d6babf8ed064e685

Итоговый формат после распаковки совпадает с форматом EWJ.
cad_pitfall