0
mirror of https://github.com/sampletext32/ParkanPlayground.git synced 2025-05-18 19:31:17 +03:00

48 lines
2.3 KiB
Markdown
Raw Permalink Normal View History

2024-11-15 19:17:20 +03:00
# Библиотека для работы с NRes архивом
## Реализация на C# под .NET 8
кросс-платформенная, можно запустить на любой ОС
### Что такое NRes
Это внутренний формат данных игры, по сути представляющий из себя архив с кучей файлов.
### Примерами NRes файлов являются:
- lightmap.lib
- voices.lib
- Textures.lib
- Material.lib
- Data/Maps/*/Land.map
- Data/Maps/*/Land.msh
### Структура NRes файла
Внимание, все числа кодируются как Little-Endian, то есть `0x00_01` - это на самом деле `0x01_00`
1. Первые 16 байт это заголовок архива.
+ [0..4] ASCII NRes
+ [4..8] Версия кодировщика (должно быть всегда 0x100)
+ [8..12] Количество файлов
+ [12..16] Общая длина всего файла в байтах
2. Далее идут сами файлы в архиве.
3. В конце файла есть метаданные.
Поскольку NRes это по сути архив, длина метаданных у каждого файла разная и считается как `Количество файлов * 64`, каждый элемент метаданных - 64 байта.
2024-11-15 19:17:57 +03:00
+ [0..4] ASCII описание типа файла, например TEXM или MAT0
+ [4..8] Количество элементов в файле (если файл составной, например .trf)
2024-11-15 19:17:57 +03:00
+ [8..12] Неизвестное число
+ [12..16] Длина файла в байтах
+ [16..20] Размер элемента в файле (если файл составной, например .trf)
2024-11-15 19:17:57 +03:00
+ [20..40] ASCII имя файла
+ [40..44] Неизвестное число
+ [44..48] Неизвестное число
+ [48..52] Неизвестное число
+ [52..56] Неизвестное число
+ [56..60] Смещение подфайла от начала NRes (именно самого NRes) в байтах
+ [60..64] Индекс в файле (от 0, не больше чем кол-во файлов)
2024-11-15 19:17:20 +03:00