Мод предмета из файлов игры
Всё, что нужно предмету, уже лежит в твоей игре: модель арканы, её эффекты, иконки. Мод кладёт их под имена обычного героя. Ниже команды, которыми мы собираем свои моды, в том порядке, в каком мы их запускаем, и то, что они печатают.
Проверено
Что понадобится
Dota 2, Node.js 24 и git. Скрипты лежат в нашем репозитории: склонируй его, и modkit check скажет, каких необязательных программ не хватает для твоей задумки. Перекраске и предметам из файлов игры больше ничего не нужно.
git clone https://github.com/dota2modmanager/dota2-mod-manager
cd dota2-mod-manager
npm ci
npm run modkit -- checkНи одна команда не пишет в папки, которые монтирует игра. Они собирают VPK в рабочей папке, а ставишь ты его перетаскиванием в «Мои моды»: там он выключается в один клик, как любой другой мод.
Перекрасить эффекты героя
modkit recolor берёт героя и цвет, находит все его эффекты в pak01 игры и переписывает их цвета. pack собирает папку в VPK, а доктор сверяет результат с игрой ещё до запуска.
$ npm run modkit -- recolor terrorblade 40,120,255 --out work/mod
terrorblade: 97 of 155 particle(s) recoloured (166 colours) into work/mod
$ npm run modkit -- pack work/mod --out tb_blue.vpk
97 file(s) from work/mod into tb_blue.vpk (0.4 MB); 0 left out as the game's own
$ npm run doctor -- tb_blue.vpk
nothing foundЦвет, нарисованный в текстурах (кольца на земле, цветовые искажения), остаётся прежним. Скрипт об этом предупредит, а справка навыка по перекраске объясняет, как поправить такие места руками.
Вернуть предмет, которого у тебя нет
Начни с плана. item-plan читает визуал предмета из таблицы предметов и печатает по строке на каждое изменение, с тем, как мод может его дать. Вот аркана Terrorblade, по одной строке каждого вида:
$ npm run item-plan -- 5957
5957 Fractal Horns of Inner Abysm: slot hero_base, for npc_dota_hero_terrorblade
built the hero's own model
built activity modifier "abysm"
built a picture (ability_icon)
by hand a sound
by hand a particle the item creates
by hand a model swap
cannot custom_kill_effect
cannot chatwheel x9built
Сборщик приложения уже это умеет: подменённая модель героя, картинки, модификатор активности, снятый с анимаций.
by hand
Мод это может, и строка говорит как: эффект, который создаёт предмет, вешается на эффект, который у героя есть всегда, модель кладётся под стоковый путь.
cannot
Логика игры, которая приходит с самим предметом: эффект убийства, фразы колеса, реплики. Её не несёт ни один файл.
Клади под стоковый путь, а не под платный. Матч загружает модели, которые называет таблица предметов сервера, поэтому мод с моделью арканы под её собственным путём выглядит нормально до переподключения, а потом показывает модель ERROR. Поэтому сборщик кладёт каждый файл под путь обычного героя.
Заменить иконку или портрет
modkit pictures terrorblade --out work/pics выкладывает иконки способностей, портрет и иконку миникарты героя в PNG. Поправь их в любом редакторе, и --from work/pics соберёт их обратно под теми же именами. Иконка миникарты лежит ещё и в общем спрайте, скрипт заполняет оба места.
Поменять звук
modkit sounds terrorblade перечисляет звуковые события героя. С --addon my_sounds --out work/mod ключ --layer Hero_Terrorblade.Sunder=my.wav играет твой файл поверх стокового, а --replace вместо него. Звуки проходят через компилятор Valve, поэтому тут нужны Dota 2 Workshop Tools (Steam, Dota 2, Свойства, DLC) и Windows.
Проверить до игры, потом в игре
- Доктор, за секунды
npm run doctor -- my_mod.vpkсверяет мод с pak01: анимации, которым всё ещё нужен модификатор предмета, номера секвенций не как в игре, дочерний эффект не на той точке. Ответ, который ты ждёшь: «nothing found». - Стенд, за три минуты
npm run dota:bench -- --vpk my_mod.vpk --shortзапускает Доту в демо героя с модом в свободном слоте, снимает героя крупно, в атаке и на ходу, и пишетverdict.json. Windows, Steam запущен, Дота закрыта. - Сравнить с рабочим модомПрогони стенд на обычном герое и на моде того же предмета из каталога. Если твой ведёт себя иначе, меняй между ними по одному блоку ресурса: блок с ошибкой находится за два-три прогона.
Ловушки, на каждую из которых ушёл день
- Игра выбирает анимацию по клипам, а не по секвенциям. Правки одних секвенций день ничего не меняли. Теперь доктор читает и то, и другое.
- Дочерний эффект за пределами контрольных точек родителя садится на первую из них: свечение для груди оказалось на правом глазу.
- Пересобранная модель перенумеровывает секвенции. В онлайне сервер шлёт номера, и один потерянный клип сдвигает все анимации после него.
modkit clipsвозвращает имена и номера Valve. - Один кадр в секунду прячет атаку. Движение в покое выглядело как замах, поэтому стенд снимает 16 кадров через 80 мс.
Проще рассказать ассистенту?
Те же скрипты оформлены как навык для ИИ-ассистента, и в нём есть всё, что дальше этой страницы: новые модели в Blender, анимации, реплики. Моды для Доты 2 с ИИ настраивают его одной строкой. Полные заметки, из которых сделана эта страница, лежат в docs/item-mods.md.