Новости Релиз Of Ash and Steel состоится 6 ноября
  • 10.703
  • 12
Of Ash and Steel: атмосферный экшен выходит 6 ноября 6 ноября станет важной датой для поклонников сложных и атмосферных игр - именно в этот день состоится релиз долгожданного проекта Of Ash and...
Новости В Of Ash and Steel начался закрытый плейтест
  • 13.505
  • 12
Разработчики "Русской Готики" объявили о старте закрытого плейтеста. Если вы оставляли заявку на участие, не забудьте проверить электронную почту или посмотреть свою библиотеку - возможно игра уже...
Новости Анонсирован Atomic Heart II
Новости Анонсирован ремастер Final Fantasy Tactics
  • 7.207
  • 2
Культовая пошаговая тактическая RPG от Square Enix получит второе дыхание. На проходящей выставке State of Play, где анонсируются игры для Play Station, состоялся анонс ремастера Final Fantasy...

В процессе Union / Юнион - Ускорение анимации

Dreamtrust

Наемник
Участник форума
Регистрация
15 Мар 2023
Сообщения
638
Реакции
283
Баллы
125
Лучшие ответы
2
#1
@Haart, @Liker, Доброго времени суток! Правильно ли я понимаю, что в моде ускорение анимации реализовано через функцию Wld_SetAniSpeed с перехватом нужной анимации и изменения значений fps для неё? Не будет ли наглостью с моей стороны, попросить .dll- ку с этой функцией, которую я бы мог прикрутить к своему плагину на случайные анимации и ускорять нужные анимации или вводить новые механики типа "Адреналин раш" с триггером срабатывания, таймером и последующей расплатой и тд. И чтобы все это +- было совместимо с окованильными модами.
 

Liker

Демиург
Команда форума
Редактор раздела
Модостроитель
Почётный пользователь
 
Участник форума
Регистрация
21 Фев 2016
Сообщения
29.985
Реакции
27.934
Баллы
1.496
Лучшие ответы
1.083
#2
@Dreamtrust, в НБ вроде бы несоклько реализаций.
Пока что времени вообще нет. @Haart ну мб потом соберет как будет время.
 
Автор
Автор
Dreamtrust

Dreamtrust

Наемник
Участник форума
Регистрация
15 Мар 2023
Сообщения
638
Реакции
283
Баллы
125
Лучшие ответы
2
#4
@KyMuP, он позволяет динамически менять коэффициент скорости? Или только один раз при запуске игры?
 

KyMuP

Наемник
Участник форума
Регистрация
3 Май 2019
Сообщения
857
Реакции
476
Баллы
166
Лучшие ответы
26
#5
@Dreamtrust,
динамически нет, в инишник прописываешь нужные значения, они сохраняются до следующей корректировки.
 
Автор
Автор
Dreamtrust

Dreamtrust

Наемник
Участник форума
Регистрация
15 Мар 2023
Сообщения
638
Реакции
283
Баллы
125
Лучшие ответы
2
#6
@Haart , Приветствую! С помощью Gemini начал делать простенькие плагины. Она пишет мне код, а я только делаю сборку. Подскажите, как реализовать ускорение анимации? Те функции которые мне предлагает ИИ выдают ошибку на этапе сборки.
 

Haart

Живая легенда
Команда форума
Редактор раздела
Модостроитель
Почётный пользователь
 
Участник форума
Регистрация
3 Дек 2012
Сообщения
6.758
Реакции
4.086
Баллы
781
Лучшие ответы
413
#7
@Dreamtrust, зависит от того, как именно ты хочешь сделать ускорение анимаций. В ванильном движке есть такое понятие как fps анимации. По умолчанию оно равно 25(не во всех случаях), изменение вверх ускорит анимацию, вниз - замедлит. Но это работает для все нпц, которые используют анимацию. Т.е. ускорив анимацию удара для людей, мы ускорим всем людям эту анимацию.

Если нужно ускорить анимацию для конкретного нпц, то нужно написать отдельный менеджер изменения скорости анимаций, который проверяет что у этого(для которого мы меняем скорость) нпц активна эта анимация и ускоряет всю модель на время анимации и убирает лишнюю скорость когда анимация закончила проигрываться. И убирать любое изменение скорости для любого нпц при переходам между локациями, при сохранении, при загрузке итд. Т.е. граничные случаи.

Изменение фпс анимации выглядит примерно так:

C++:
zSTRING ani = "S_FISTATTACK";
oCAniCtrl_Human * pAI = pNpc->GetAnictrl();
if ( pAI && pAI->model)
    pAI->model->GetAniFromAniID( pAI->model->GetAniIDFromAniName( ani ) )->fpsRate = fps;
Изменение скорости модели выглядит примерно так:

C++:
int newSpeed = 150; //%
float speed = newSpeed  / 100.0f;
if ( zCModel* model = this->GetModel() ) {
    model->timeScale = speed;
}
 
Автор
Автор
Dreamtrust

Dreamtrust

Наемник
Участник форума
Регистрация
15 Мар 2023
Сообщения
638
Реакции
283
Баллы
125
Лучшие ответы
2
#8
@Haart, оу, значит нужно прям заранее прописать список отдельных анимации?
А более универсальные функции func float Mdl_SetAllAnimationsFPS( var C_NPC npc , var float fps ) или Mdl_SetNpcSpeedMultiplier( var C_Npc npc, var float multiplier ), указанные в теме zParserExtender толком не работают (у меня выдают ошибку)? Поэтому приходится использовать более трудоемкий вариант? В скриптах, которые я смотрел вы используете последнюю часть названия анимации что-то вроде T_Atack, и, если я верно понял, то это боковые удары и основной, а как ускорение фиксируется на ГГ, чтобы все случайно не ускорить всех НПЦ в драке?
 

Haart

Живая легенда
Команда форума
Редактор раздела
Модостроитель
Почётный пользователь
 
Участник форума
Регистрация
3 Дек 2012
Сообщения
6.758
Реакции
4.086
Баллы
781
Лучшие ответы
413
#9
@Dreamtrust, те что используются в скриптах, ускоряют анимацию для всех нпц. Не только для героя. И там используется не название префикс, а именно полное название анимации.
Не знаю на счет внешних функций zParserExtender, не использовал. Но ничего не мешает создать свои.
Mdl_SetNpcSpeedMultiplier - это как раз работа с model->timeScale, что я упоминал выше, а Mdl_SetAllAnimationsFPS - работа из первого варианта. не знаю применяется ли для всех анимаций или имеется что-то иное ввиду, но никто не мешает скачать исходники zParserExtender, вроде они есть в общем доступе, и посмотреть там реализацию.

И да, если хочется нормально работающее ускорение, которое работает только на того нпц, для которого применяется - то только трудоемкий вариант.

Скачайте исходники zParserExtender, посмотрите внешние функции которые там есть, дайте их посмотреть gemini, распишите как работают функции и почему ускорение через фпс не вариант и пусть он с этим контекстом уже пишет менеджер для изменения скорости анимации.
 
Сверху Снизу