Реверс инженеринг игры Parkan Железная стратегия 1998
Сборка проекта
Проект написан на C# под .NET 8
Вам должно хватить dotnet build для сборки всех проектов отдельно.
Все приложения кросс-платформенные, в том числе UI.
Состояние проекта
- Распаковка всех
NResфайлов - Распаковка всех
TEXMтекстур- формат 565 работает некорректно
- не понятно назначение двух магических чисел в заголовке
- Распаковка данных миссии
.tma. Пока работает чтение ареалов и кланов. - Распаковка файла NL. Есть только декодирование заголовка. Формат кажется не используется игрой, а реверс бинарника игры то ещё занятие.
- Распаковка текстуры шрифта формата TFNT. Встроен прямо в UI. По сути шрифт это 4116 байт заголовка и текстура TEXM сразу после.
Структура проекта
Внимание!
Проект делается как небольшой PET, поэтому тут может не быть
- чёткой структуры
- адекватных названий
- комментариев
Я конечно стараюсь, но ничего не обещаю.
NResUI
UI приложение на OpenGL + ImGui.
Туда постепенно добавляю логику.
NResLib
Библиотека распаковки формата NRes и всех файлов, которые им запакованы.
Есть логика импорта и экспорта. Работа не завершена, но уже сейчас можно читать любые архивы такого формата.
TexmLib
Библиотека распаковки текстур TEXM.
Есть логика импорта и экспорта, хотя к UI последняя не подключена.
NLUnpacker
Приложение распаковки NL.
Работа приостановлена, т.к. кажется игра не использует эти файлы.
MissionDataUnpacker
Приложение распаковки миссий .tma.
Готово чтение ареалов и кланов. Пока в процессе.
ParkanPlayground
Пустой проект, использую для локальных тестов.
TextureDecoder
Приложение для экспорта текстур TEXM.
Изначально тут игрался с текстурами.
Для Reverse Engineering-а использую Ghidra
Наблюдения
- Игра использует множество стандартных библиотек, в частности stl_port, vc++6 и другие. Если хотите что-то изучить в игре, стоит поискать по строкам и сигнатурам, что именно используется в конкретной
dll. - Строки в основном используются двух форматов -
char*иstd::string. Последняя состоит из 16 байт -undefined4, char* data, int length, int capacity. - В игре очень много
inlineфункции, которые повторяются по куче раз в бинарнике. - Игра загружает и выгружает свои
dllфайлы по несколько раз, так что дебаг сMemory Mapочень затруднён. - Игра активно и обильно течёт по памяти, оставляя после чтения файлов их
MapViewOfFileи подобные штуки. - Игра нормально не работает на Win10. Мне помог dgVoodoo. Хотя с ним не работает
MisEditor.
Контакты
Вы можете связаться со мной в Telegram.