3.6 KiB
Графические MPQ-патчи
В этой директории через DVC версионируется распакованное содержимое всех 15 патчей из
graphicsPatches в patch-layout.json. Git хранит небольшие файлы *.dvc, а сами ресурсы —
в S3 remote customization. Хэшированные пути в S3 являются внутренней адресацией DVC:
исходное дерево с обычными именами восстанавливается командой dvc pull.
Первичная настройка
py -m pip install -r requirements-dvc.txt
Copy-Item .env.example .env # если локального .env ещё нет
.\configure-dvc.ps1
py -m dvc pull
Можно скачать один патч, передав его указатель явно:
py -m dvc pull assets/graphics/Data/ruRU/patch-ruRU-X.dvc
Секреты записываются только в .dvc/config.local; этот файл исключён из Git. Вместо ключей
из .env можно использовать AWS profile: .\configure-dvc.ps1 -Profile moonwell.
Изменение ресурсов
DVC-кэш использует hardlink на NTFS. Перед ручным изменением дерева отвяжите его от кэша:
py -m dvc unprotect assets/graphics/Data/ruRU/patch-ruRU-X
# изменить, добавить или удалить файлы
py -m dvc add assets/graphics/Data/ruRU/patch-ruRU-X
py -m dvc push
git add assets/graphics/Data/ruRU/patch-ruRU-X.dvc
Сначала выполняйте dvc push, затем коммитьте Git-указатель, чтобы коммит не ссылался на ещё
не загруженные объекты.
Импорт MPQ
mpqextract принимает встроенный (listfile) и любое количество внешних listfile. Он извлекает
все известные пути, а блоки с неизвестными именами сохраняет в __mpqmeta__/unresolved/.
Манифест __mpqmeta__/unresolved.json связывает каждый blob с MPQ-хэшами и индексом блока,
поэтому содержимое архива не теряется даже при неполном listfile.
cargo run --release --manifest-path tool/Cargo.toml --bin mpqextract -- `
'patch.mpq' 'assets/graphics/Data/ruRU/patch-ruRU-N' 'master-list.txt'
В patch-ruRU-A, B, S, T, U и W есть такие безымянные блоки. Для их безопасной
пересборки нужен авторитетный listfile с исходными путями; пока он не найден, исходные MPQ в
дистрибуционном S3 остаются каноническими архивами. mpqpack намеренно отказывается собирать
дерево с __mpqmeta__, поскольку подмена путей хэшами изменила бы семантику патча.
Полностью разрешённое дерево собирается так:
cargo run --release --manifest-path tool/Cargo.toml --bin mpqpack -- `
'assets/graphics/Data/ruRU/patch-ruRU-X' 'build/graphics/patch-ruRU-X.MPQ'
Сводка исходных объектов, DVC-хэшей и количества разрешённых блоков находится в
assets/graphics/sources.json.