1
Ромхакинг и программирование / Urban Strike hack project
« : 28 Июнь 2020, 18:47:04 »Написал сжатие. Прикладываю, на github попробую добавить позже.
Использование
Распаковка:Код: [Выделить]StrikeLZSS -d "Urban Strike.gen" out.bin -p 0x1CA8F4
-d - декомпрессия, -p ЧИСЛО - позиция в файле.
Сжатие:Код: [Выделить]StrikeLZSS input.bin compressed.bin
Можно указать -c (компрессия) и позицию во входном файле (-p). Сжатый файл имеет в начале размер как и во входном для распаковки.
Положение -d/-c и -p ЧИСЛО может быть в любом месте, порядок входного и выходного файлов важен.
О программе
Теперь выводится размер несжатых и сжатых данных без учёта 4 байтов размера у сжатых, это поможет определить, влезет ли графика назад.
Сжатие должно выдавать по размеру не больше, чем у оригинальной графики. У одних данных даже получилось на 5 байтов меньше, почему-то.
Код сжатия написал на основе моего сжатия PZZ у игры Jojo no Kimyou na Bouken - Ougon no Kaze (Japan). Оказалось, можно использовать простой алгоритм с поиском повторений у ранее записанных байтов и контрольного байта (биты указывающие на несжатый байт или на смещение + длина), отличие только в записи смещения относительно "окна" у LZSS.
Можно было написать сразу вставку в ром по смещению, указание размера вместо чтения из файла и т. п., но особо смысла нет.
Замечания
То, что я говорил про https://github.com/MichaelDipperstein/lzss, не сработало, похоже там используется другая реализация LZSS.
Сравнил код распаковки Desert Strike, Jungle Strike и Urban Strike, он одинаковый. Вы могли бы использовать те же утилиты, что использовали раньше.
Попробовал вставку графики, вроде правильно. Для отключения проверки CRC использовал Master Code - https://gamehacking.org/game/16162 - 1FF0D4:4E75.
Класс

