4.4 KiB
Инструменты в каталоге tools
archive_roundtrip_validator.py
Скрипт предназначен для валидации документации по форматам NRes и RsLi на реальных данных игры.
Что делает утилита:
- находит архивы по сигнатуре заголовка (а не по расширению файла);
- распаковывает архивы в структуру
manifest.json + entries/*; - собирает архивы обратно из
manifest.json; - выполняет проверку
unpack -> repack -> byte-compare; - формирует отчёт о расхождениях со спецификацией.
Скрипт не изменяет оригинальные файлы игры. Рабочие файлы создаются только в указанном --workdir (или во временной папке).
Поддерживаемые сигнатуры
NRes(4E 52 65 73)RsLiв файловом формате библиотеки:NL 00 01
Основные команды
Сканирование архива по сигнатурам:
python3 tools/archive_roundtrip_validator.py scan --input tmp/gamedata
Распаковка/упаковка одного NRes:
python3 tools/archive_roundtrip_validator.py nres-unpack \
--archive tmp/gamedata/sounds.lib \
--output tmp/work/nres_sounds
python3 tools/archive_roundtrip_validator.py nres-pack \
--manifest tmp/work/nres_sounds/manifest.json \
--output tmp/work/sounds.repacked.lib
Распаковка/упаковка одного RsLi:
python3 tools/archive_roundtrip_validator.py rsli-unpack \
--archive tmp/gamedata/sprites.lib \
--output tmp/work/rsli_sprites
python3 tools/archive_roundtrip_validator.py rsli-pack \
--manifest tmp/work/rsli_sprites/manifest.json \
--output tmp/work/sprites.repacked.lib
Полная валидация документации на всём наборе данных:
python3 tools/archive_roundtrip_validator.py validate \
--input tmp/gamedata \
--workdir tmp/validation_work \
--report tmp/validation_report.json \
--fail-on-diff
Формат распаковки
Для каждого архива создаются:
manifest.json— все поля заголовка, записи, индексы, смещения, контрольные суммы;entries/*.bin— payload-файлы.
Имена файлов в entries включают индекс записи, поэтому коллизии одинаковых имён внутри архива обрабатываются корректно.
init_testdata.py
Скрипт инициализирует тестовые данные по сигнатурам архивов из спецификации:
NRes(4E 52 65 73);RsLi(NL 00 01).
Что делает утилита:
- рекурсивно сканирует все файлы в
--input; - копирует найденные
NResв--output/nres/; - копирует найденные
RsLiв--output/rsli/; - сохраняет относительный путь исходного файла внутри целевого каталога;
- создаёт целевые каталоги автоматически, если их нет.
Базовый запуск:
python3 tools/init_testdata.py --input tmp/gamedata --output testdata
Если целевой файл уже существует, скрипт спрашивает подтверждение перезаписи (yes/no/all/quit).
Для перезаписи без вопросов используйте --force:
python3 tools/init_testdata.py --input tmp/gamedata --output testdata --force
Проверки надёжности:
--inputдолжен существовать и быть каталогом;- если
--outputуказывает на существующий файл, скрипт завершится с ошибкой; - если
--outputрасположен внутри--input, каталог вывода исключается из сканирования; - если
stdinнеинтерактивный и требуется перезапись, нужно явно указать--force.