Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - Arkadij

Страницы: [1]
1
Написал сжатие. Прикладываю, на 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.

Класс :) Спасибо :)

2
Через команду строку, я же описал. 1-й аргумент - файл со сжатой графикой, можно ром. 2-й - имя выходного файла. 3-й - смещение графики в файле, должен указывать на размер несжатых данных.
StrikeLZSS.exe "Urban Strike (UE) [!].gen" out.bin 0x1CA8F4В out.bin будет несжатый шрифт.
Не нужно цитировать так много текста, места занимает.

Хорошо, попробую, уже в процессе работы :)

3
Я сейчас ещё проверил http://www.hacking-cult.org/download/tsdc-v2.2-rc3-win32.rar (отсюда, тема Jungle Strike), оказалось она работает. Нужно выбрать Saxman и размер сжатых данных при декодировании. Обратно не пробовал.
--------
Хотя, в теме Urban Strike Марат писал, что Saxman сжимает не так.
Там ещё защита/CRC, нужно найти исправление.

Распаковка графики на Saxman работает, но когда сжимаю обратно остаются разводы на экране. В целом интересно, попробую что-нибудь наколдовать
У Guyver были наработки давно (есть на emu-land, можно его спросить).

Я разобрал алгоритм с помощью GHIDRA и загрузчика от DrMefistO. Сначала в эмуляторе в окне памяти предположил, где лежат несжатые данные (RAM: 0xFF26F2 - здесь "окно" алгоритма, 0xFF2EF2 - два байта, которые копируются в VRAM), перехватил запись в коде (ROM: границы функции с 0x762A по 0x76E2 включительно), открыл в GHIDRA ром и проанализировал функцию (изначально она была неопределенна, почему-то), разобрал выданный код на C.

Действительно, там обычный LZSS, но с двумя отличиями: размер окна 2048, а не 4096, начальное положение окна 0x7EE, а не 0. Обычный, потому что код практически такой, что видел в одной игре.
Прикладываю свой код и сборку на C, который только декодирует. Он принимает аргументы:
StrikeLZSS.exe "Urban Strike (UE) [!].gen" out.bin 0x1CA8F4Входной, выходной файлы и необязательная позиция в файле (можно hex или десятичное). В начале данных должен быть размер несжатых данных (4 байта Big-Endian), так они лежат в роме. В данном примере позиция на шрифт.
Чтобы узнать положение графики я ставил breakpoint на PC: 762A - начало функции, в регистре A2 уже хранится положение в роме, с размером в начале.
Не делал много проверок, поэтому программа может падать при неправильных данных. Выделение памяти зависит от размера файла, умножается на 9 (макс. сжатие), в выходном файле размер правильный.

Я думаю, что можно изменить первый попавшийся алгоритм LZSS. Например, https://github.com/MichaelDipperstein/lzss.
Размер окна, заменить:
#define WINDOW_SIZE     (1 << OFFSET_BITS)
на
#define WINDOW_SIZE     0x800
Положение при декодировании:
nextChar = 0;
на
nextChar = 0x7EE;
Положение при кодировании:
windowHead = 0;
на
windowHead = 0x7EE;
Не проверял и не знаю как хорошо сжимает. Если не справитесь или если кто-то не предоставит готовые программы, позже посмотрю. С хакингом игры не помогу, не разбираюсь.
--------
UPD: Я ошибся с размером в начале данных, он указывает на размер несжатых данных. Это на результат программы не влияет, но там получается ошибка в описании и лишнее выделении памяти. Возможно поправлю позже. Вообще, можно было сделать с указанием размера сжатых данных, выход был бы при другом условии.

Я не понял, как этим StrikeLZSS пользоваться?

4
Возможно  :lol:

5
Всем привет! Я решил вернуться к проекту, который был в коме более 5 лет, а именно хаку Urban Strike. Я уже когда-то создал Jungle Strike Enemy Hack, где заменил врагов из Jungle Strike на врагов из Desert Strike, а в Urban Strike решил заняться переделом самих уровней - миссий, карты, картинки, расположения объектов и т.д. Единственный момент, который меня интересует, форумчане, существует ли еще распаковщик/упаковщик графики для этой игры (формат LZSS) или уже утрачен? Или может быть кто-то подскажет, как можно вытащить оттуда графику и отредактировать? Ибо у меня был большой перерыв и я потихоньку собираю обратно все знания.

6
Приветствую, форумчане! Я тут решил выложить на ваш обзор мой мини-хак игры JUNGLE STRIKE - вся вражеская техника на всех уровнях заменена на врагов из DESERT STRIKE. Хак сделан, кстати, на русской версии игры, что становится более приятно и понятно глазам. Сделано сие творение несколько лет назад, но выкладываю сейчас после долгих и безуспешных попыток покопаться поглубже (в графике, редактировании карт и прочее) ввиду очень малых знаний в программировании и нехватки времени. Если кого-то заинтересует сей проект, может развить его дальше и сделать лучше. А так - наслаждайтесь!

7
уточни про индексный цвет, пожалуйста

8
Объясните, как нужно правильно редактировать и вставлять спрайты, а то при загрузке игры они полностью искажаются? Формат gif.

9
Нет, я имею ввиду пакеры от других игр, которые может быть окажутся с таким же алогритмом.

Есть пакер графики Langrisser 2 (рисовка персонажей на экране боя) , там LZSS алгоритм использован для сжатия куска рома, где закодирован рисунок. Полагаю, в Desert Strike использован тот же алгоритм сжатия, точно не уверен, я не вдавался в детали пакера. Могу выложить для ознакомления.

Добавлено позже:
Вот

Добавлено позже:
Или вот пакер Tiny Toon Adventures: Buster's Hiden Treasure.

10
Даю подсказку. Распаковщик есть в игре.  Чтобы переписать код, знать алгоритм не обязательно, только пару языков , один из которых конечно asm-68k, другой например c.
Более того можно не писать код, а извлечь написав скрипт в lua, в gens11; хоть с этим нужно разобраться.
Можно вообще ничего не писать, только найти код анпака в роме, и в конце распаковки ставить брейкпоинт, потом через dump ram/ vram выдирать. (Вариант предложенный Segaman)
Для совсем ленивых - вообще ничего не искать, просто выдирать из vram.
Вот запаковщик - это уже другое дело. Если очень хочется пакер - выложить дизасм код анпакера + образец архива, тогда может кто-то захочет написать.

Но первым делом, всё таки надо проверить все существующие пакеры.


Ты имеешь ввиду пакеры на эту игру конкретно или пакеры графики игр, сжатой таким же алгоритмом?

11
Проблема в том, что я не силен в этом деле, в частности, в понимании алгоритмов сжатия. Не говоря уж о написании распаковщика.

12
Urban Strike, если точнее. Ссылки там уже битые, но выяснил, что там алгоритм сжатия lzss. Еще не знаю, подойдет ли он к этой игре, попробую.

13
Привет ромхакерам! Я провожу хакинг игры Desert Strike на SMD, нашел практически все, что нужно для переделывания уровней - пойнтеры расположения зданий, врагов, прорисовку местности и рисунок карты. Не могу разобраться с рисунками к описанию заданий, очевидно, они каким-то образом запакованы. Хотел узнать, существует ли распаковщик графики для этой игры, или, если нет, какой алгоритм сжатия здесь используется, чтобы потом попробовать написать распаковщик самому?

14
Можете взломать код, где можно регулировать места в вертолете и катере (желательно в хекс код)?

15
Я вообще хотел найти данные, где указаны пассажирские места в Стелсе. Я переделал Стелс под наземную технику, но пассажирских мест нет и я не могу найти точный адрес.

16
полдела уже сделал - в translhextion переместил часть данных в конец рома, тот не вылетает. Единственное - с тем, откуда копируем, что делать - вроде то, что я скопировал и послал в конец, изменил, но желаемого результата нет? Подлинник нужно вырезать или стереть чем-нибудь?

17
Ну, я хакнул JUNGLE STRIKE. Объясни, Segaman, как это делается? То, что надо закинуть данные, которые надо изменить, в конец рома я понял, а как менять поинтеры?

18

Segaman
    Re: Проблема с РОМом
« Ответ #1 : Сегодня в 06:15:23 »
В таких случаях ром дизасмят, но можно обойтись и без этого гемора и просто закинуть данные, которые надо изменить, в конец рома и меняешь все поинтеры, указывающие на старое местоположение данных, так чтоб они указывали на новое.
надо бы ещё знать, для какой консоли ром

Уточню - SMD.

19
Кто-нибудь знает, как можно хекс-редактором добавить пару байтов в РОМ, чтобы потом нормально работал? Или подскажите другой способ.

20
В роме Jungle strike хочу найти расположение врагов на картах.

21
А где в роме найти инфу про юниты, чтобы можно было создать собственные (изменить броню, мощность, внешний вид)?

22
Кто-нибудь знает как сделать так, чтобы при игре за Сардукаров (фиолетовых) была доступна спецтехника (желательно назвать адрес в роме)?

Страницы: [1]