- Регистрация
- 10 Окт 2025
- Сообщения
- 102
- Реакции
- 109
- Баллы
- 34
- Лучшие ответы
- 0
Оверлей (overlay) анимаций в Готике - это специальный слой, который накладывается поверх стандартной модели персонажа и заменяет только определенные анимации, не затрагивая остальные. Представьте, что у персонажа есть базовый набор движений (бег, стрейф, атака и т.п.). Оверлей - это как дополнительный набор инструкций, который говорит игре использовать вместо стандартной анимации другую, не затрагивая при этом все остальное (модель и другие анимации). С помощью оверлеев можно менять стили боя, изменять походку персонажей и т.д. Они представляют собой файлы с расширением MDS (в скомпилированном виде - MSB), лежащие в vdf-файлах с анимациями (Anims.vdf, Anims_Addon.vdf).
В игре уже есть множество готовых оверлеев. Например, оверлеи боевых стилей:
- HUMANS_1HST1.MDS - оверлей с анимациями одноручного оружия уровня "Опытный"
- HUMANS_1HST2.MDS - оверлей с анимациями одноручного оружия уровня "Эксперт"
- HUMANS_1HST3.MDS - оверлей с анимациями одноручного оружия уровня "Мастер"
Для использования той же логики в скриптах используется функция Mdl_AppyOverlayMds(hero, "название_оверлея.mds"). Именно вызовом этой фукнции и меняются, например, боевые анимации героя при смене оружия, изменении уровня владения и т.д. Вот пример кода для применения оверлеев анимаций одноручного оружия:
if (slf.hitchance[npc_talent_1h] >= 90) {
mdl_applyoverlaymds(slf, "humans_1hST3.mds");
}
else if (slf.hitchance[npc_talent_1h] >= 60) {
mdl_applyoverlaymds(slf, "humans_1hST2.mds");
}
else if (slf.hitchance[npc_talent_1h] >= 30) {
mdl_applyoverlaymds(slf, "humans_1hST1.mds");
}
1. Создание своего MDS
Возьмем пример оверлея с этого ресурса, исходники приложены. Предположим, мы хотим изменить анимации стрейфов с оружием в руках: заменить их на рывки боссов арены из мода "Новый Баланс" (как достать эти анимации описано в этом гайде). Самый простой вариант замены анимаций - просто удалить старые .MAN файлы, отвечающие за эти анимации стрейфов и заменить их на свои (как описано в этом гайде), но у этого подхода много минусов: нам придется перебирать и заменять каждую анимацию стрейфа, и, что самое главное, мы никак не сможем перенастроить свою анимацию - она будет подчиняться тем указаниям, которые описаны в ее MDS. Например, анимация стрейфа одноручного оружия (из HUMANS_1HST1.MDS) длится 14 кадров, а наша анимация рывков 16. Если просто заменить оригинальную анимацию на наш рывок, то вероятнее всего из-за разности кадров это сломает анимацию. Именно поэтому нам нужно определить свой MDS, в котором мы укажем свои собственные правила воспроизведения анимации:
Model ("Humans_Charge") // Название модели должно быть уникальным
{
meshAndTree ("HUM_BODY_NAKED0.ASC" DONT_USE_MESH)
aniEnum
{
// Анимации стрейфа с одноручным оружием (L - влево, R - вправо)
ani ("T_1HRUNSTRAFEL" 1 "T_2HRUNSTRAFEL" 0.1 0.1 M. "HUM_CHARGE_STRAFEL.ASC" F 0 16)
{
*eventSFXGrnd (11 "RUN")
}
ani ("T_1HRUNSTRAFER" 1 "T_2HRUNSTRAFER" 0.1 0.1 M. "HUM_CHARGE_STRAFER.ASC" F 0 16)
{
*eventSFXGrnd (8 "RUN")
}
// Анимации стрейфа с двуручным оружием (L - влево, R - вправо)
ani ("T_2HRUNSTRAFEL" 1 "T_2HRUNSTRAFEL" 0.1 0.1 M. "HUM_CHARGE_STRAFEL.ASC" F 0 16)
{
*eventSFXGrnd (11 "RUN")
}
ani ("T_2HRUNSTRAFER" 1 "T_2HRUNSTRAFER" 0.1 0.1 M. "HUM_CHARGE_STRAFER.ASC" F 0 16)
{
*eventSFXGrnd (8 "RUN")
}
// Анимации стрейфа с кулаками (L - влево, R - вправо)
ani ("T_FISTRUNSTRAFEL" 1 "T_FISTRUNSTRAFEL" 0.1 0.1 M. "HUM_CHARGE_STRAFEL.ASC" F 0 16)
{
*eventSFXGrnd (11 "RUN")
}
ani ("T_FISTRUNSTRAFER" 1 "T_FISTRUNSTRAFER" 0.1 0.1 M. "HUM_CHARGE_STRAFER.ASC" F 0 16)
{
*eventSFXGrnd (8 "RUN")
}
}
}
ani ("T_1HRUNSTRAFEL" 1 "T_2HRUNSTRAFEL" 0.1 0.1 M. "HUM_CHARGE_STRAFEL.ASC" F 0 16)
{
*eventSFXGrnd (11 "RUN")
}
Параметр | Значение |
|---|---|
"T_1HRUNSTRAFEL" | Наименование (ключ) анимации. В оверлее можно использовать только те наименования анимаций, которые определены в базовом MDS (в нашем случае HUMANS.MDS). Если использовать несуществующее наименование, то игра либо проигнорирует эту анимацию, либо выкинет ошибку |
1 | Слой. В большинстве базовых анимаций указан первый слой |
"T_2HRUNSTRAFEL" | Следующая анимация. Нужна для зацикливания: зажали кнопку влево - герой делает стрейф/рывок влево, пока вы держите кнопку |
0.1 0.1 | Время плавного входа в анимацию и выхода из предыдущей анимации. Указывается для более плавного перехода анимации после рывка |
M. | Флаг, обозначающий движение персонажа |
"HUM_CHARGE_STRAFEL.ASC" | Название .ASC файла с анимацией |
F | Направление анимации (в обычном порядке, от первого кадра к последнему) |
0 16 | Начальный и конечный кадры анимации. В нашей анимации рывка 16 кадров |
*eventSFXGrnd (11 "RUN") воспроизводит звук бега по поверхности (поверхность сама определяется движком) на 11-м кадре. Это нужно для того, чтобы при рывке был звук шага по земле.
Сам MDS файл с оверлеем можно назвать как угодно, но опять же лучше давать ему префикс базового MDS, это соответствует общему стилю наименований. Я назвал файл HUMANS_CHARGE.MDS
2. Компиляция
При компиляции используется тот же подход, который описан в этом гайде: в какой-либо vdf файл с анимациями (самый последний. Если у вас установлен мод, то в его vdf с анимациями) в папку _WORK\DATA\ANIMS\ кладем:
- .ASC файлы с анимациям
- Свой MDS
- HUM_BODY_NAKED0.ASC (сама модель/скелет. Вытащить его можно, например, при декомпиляции HUMANS.MSB)
Учитывайте, что если вы вносите какие-то изменения в свой MDS, то перед повторной компиляцией вам надо удалить эти скомпилированные файлы, иначе игра будет подхватывать их, игнорируя ваш новый MDS.
Вложения
-
83,9 КБ Просмотров: 0