Files
2026-08-22 19:10:11 +04:00

3.6 KiB
Raw Permalink Blame History

Графические 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.