Что такое VPK и какой из них берёт Дота
Всё, что Дота с собой возит, лежит в архивах VPK. Мод - ещё один такой архив, поставленный перед игровыми. Номер в его имени решает, кто выиграет спор.
Проверено
Архив
VPK расшифровывается как Valve Pak. Один архив держит тысячи файлов вместе с их путями, поэтому models/heroes/juggernaut/juggernaut.vmdl_c внутри архива отзывается на этот же путь в игре. Большие архивы разбиты надвое: индекс _dir.vpk со списком, что где лежит, и нумерованные _000.vpk, _001.vpk с самими байтами. Перенесёшь индекс без частей - получишь архив, который указывает в пустоту.
Мод для Доты - маленький VPK с горсткой файлов-замен, лежащих ровно по тем путям, что и оригиналы. Движок их не сравнивает. Он берёт первую найденную копию.
Откуда берётся «первая»
Внутри примонтированной папки Дота идёт по архивам pak по возрастанию номера и останавливается на первом попадании. pak02 читается раньше pak30, поэтому файл, который есть в обоих, придёт из pak02. Это всё правило целиком, и из-за него установка мода означает переименование в свободный номер, а не «положить как есть».
pak01_*
Валвовский. В языковой папке это локализованная озвучка. Переименуешь или удалишь - игра сломается.
pak02 - pak09
Сюда кладут мод, который должен выигрывать у остальных. Приложение отправляет туда всё, что помечено приоритетным.
pak10 - pak99
Обычные моды, занимается первый свободный номер. Девяносто восемь слотов не выбирает никто.
pak00
Не монтируется никогда. Приложение на секунду паркует там архив при перестановке двух модов, чтобы падение посреди операции не оставило полуустановленный мод.
Два мода на разных героев не встречаются никогда, и таких можно держать хоть сотню. Два сета на Juggernaut в соседних слотах столкнутся на одном файле модели, и покажется только один. Предупреждения не будет: герой просто выглядит как второй мод.
Какая папка монтируется
Дота монтирует game\dota, game\core и одну папку по имени языка озвучки, например game\dota_russian. До июля 2026 этот суффикс можно было выдумать аргументом запуска -language, откуда и растёт старый совет сделать папку dota_mods. Теперь суффикс берётся из AudioLanguage в game\dota\cfg\boot.vcfg. Аргумент никуда не делся и работает, но пишет он эту настройку, а не путь поиска, поэтому назвать он может только язык, который игра и так знает.
"boot"
{
"UILanguage" "english"
"AudioLanguage" "russian"
}Смотри AudioLanguage, а не UILanguage. Движок подставляет в путь поиска язык озвучки, поэтому смена голосов просит перезапуск, а смена языка меню - нет.
Единственный файл, до которого языковая папка не дотянется
Список всей косметики в игре, scripts/items/items_game.txt, читается через путь поиска MOD, а MOD разрешается только в game\dota. Положи изменённую копию в языковую папку - игра прочитает мимо неё.
Чтобы файл туда попал, надо править game\dota\gameinfo_branchspecific.gi, регистрируя ещё одну папку контента, и дописывать SHA1 и CRC этого файла в game\bin\win64\dota.signatures: клиент сверяется с этим списком до загрузки. Оба файла принадлежат Valve, и оба переписываются обновлениями. Что с этим делают.
Вопросы
- Можно посмотреть, что внутри VPK?
- Да. Dota 2 Mod Manager показывает пути в любом устанавливаемом моде и называет героев и слоты, которых тот касается. Вне приложения архивы Source 2 читает ValveResourceFormat.
- Почему мод перестал работать после установки другого?
- Они несут один и тот же файл, и победил меньший номер pak. Дай нужному номер поменьше или убери второй.
- Что за приставка !pak51 у скачанных файлов?
- Это подсказка для слияния в VPKMerge, а не имя, понятное игре. Файл, начинающийся с восклицательного знака, Дота не монтирует; переименуй в обычный
pakNN_dir.vpk.