mirror of
https://github.com/sampletext32/ParkanPlayground.git
synced 2025-05-19 03:41:18 +03:00
add readme
This commit is contained in:
parent
b2010618ee
commit
8590b90bd1
@ -16,6 +16,11 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TexmLib", "TexmLib\TexmLib.
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MissionDataUnpacker", "MissionDataUnpacker\MissionDataUnpacker.csproj", "{7BF5C860-9194-4AF2-B5DA-216F98B03DBE}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MissionDataUnpacker", "MissionDataUnpacker\MissionDataUnpacker.csproj", "{7BF5C860-9194-4AF2-B5DA-216F98B03DBE}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "meta", "meta", "{BAF212FE-A0FD-41A2-A1A9-B406FDDFBAF3}"
|
||||||
|
ProjectSection(SolutionItems) = preProject
|
||||||
|
README.md = README.md
|
||||||
|
EndProjectSection
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
|
87
README.md
Normal file
87
README.md
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
# Реверс инженеринг игры 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](https://t.me/bird_egop).
|
Loading…
x
Reference in New Issue
Block a user