Some checks failed
Test / cargo test (push) Failing after 50s
- Updated .gitignore to include common Python artifacts and project-specific files. - Added `archive_roundtrip_validator.py` script for validating NRes and RsLi formats against real game data. - Created README.md for the tools directory, detailing usage and supported signatures. - Enhanced nres.md with practical nuances and empirical checks for game data.
2.7 KiB
2.7 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 включают индекс записи, поэтому коллизии одинаковых имён внутри архива обрабатываются корректно.