HLFX.Ru Forum
Показать все 11 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Кодинг оружия (https://hlfx.ru/forum/showthread.php?threadid=2739)


Отправлено FreeSlave 05-04-2011 в 20:28:

Кодинг оружия

Написал idle-функцию для оружия, скомпилировал и сервер и клиент, положил в соответствующие папки мода. Но пушка проигрывает одну и ту же idle-анимацию, при этом заметно моргание в конце проигрывания, хотя переменной m_flTimeWeaponIdle я приравниваю соотношение Frames к FPS модели (модель v_desert_eagle из Опфора). Собственно, в чём подвох?

C++ Source Code:
1
void CDeagle::WeaponIdle( void )
2
{
3
  ResetEmptySound( );
4
 
5
  m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES );
6
 
7
  if (m_flTimeWeaponIdle > UTIL_WeaponTimeBase())
8
    return;
9
 
10
  int iAnim;
11
  float flRand = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 );
12
  if (flRand <= 0.2)
13
  {
14
    iAnim = DEAGLE_IDLE1;
15
    m_flTimeWeaponIdle = (76.0/30.0);
16
  }
17
  else if (flRand <= 0.4)
18
  {
19
    iAnim = DEAGLE_IDLE2;
20
    m_flTimeWeaponIdle = (61.0/24.0);
21
  }
22
  else if (flRand <= 0.6)
23
  {
24
    iAnim = DEAGLE_IDLE3;
25
    m_flTimeWeaponIdle = (50.0/30.0);
26
  }
27
  else if (flRand <=0.8)
28
  {
29
    iAnim = DEAGLE_IDLE4;
30
    m_flTimeWeaponIdle = (76.0/30.0);
31
  }
32
  else
33
  {
34
    iAnim = DEAGLE_IDLE5;
35
    m_flTimeWeaponIdle = (61.0/30.0);
36
  }
37
 
38
  SendWeaponAnim( iAnim );
39
}


Ещё непонятно, почему в UTIL_SharedRandomFloat передаются 10 и 15. Если это диапозон, то почему он берется от 10 до 15, а сравнение идет с числами от 0 до 1? Копировал из магнума, а у него анимации проигрываются всегда.

Анимации в начале прописал, если что

C++ Source Code:
1
enum deagle_e {
2
  DEAGLE_IDLE1 = 0,
3
  DEAGLE_IDLE2,
4
  DEAGLE_IDLE3,
5
  DEAGLE_IDLE4,
6
  DEAGLE_IDLE5,
7
  DEAGLE_SHOOT,
8
  DEAGLE_SHOOT_EMPTY,
9
  DEAGLE_RELOAD,
10
  DEAGLE_RELOAD_EMPTY,
11
  DEAGLE_DRAW,
12
  DEAGLE_HOLSTER,
13
};
14
 

__________________
I'm on github
I'm on opendesktop.org


Отправлено Дядя Миша 05-04-2011 в 21:08:

Цитата:
FreeSlave писал:
Копировал из магнума, а у него анимации проигрываются всегда.

у магнума это дело играется на клиенте. Ставь туда обычный RANDOM_FLOAT, пиши 0.0f, 1.0f и не парься.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FreeSlave 06-04-2011 в 05:28:

Ок, теперь проигрываются разные.

Но осталась проблема моргания. Оказалось, в анимации нулевому фрейму соответствует предпоследний фрейм, а не последний. Уменьшил везде на единицу - однако моргание всё равно заметно. Есть ли способ исправить?

Сейчас кстати запустил опфор - там дигл тоже моргает при переходе с одной idle-анимации на другую.

__________________
I'm on github
I'm on opendesktop.org


Отправлено Дядя Миша 06-04-2011 в 08:31:

Цитата:
FreeSlave писал:
Есть ли способ исправить?

есть конечно. Декомпилить модельку, и убрать флаг LOOP изо всех idle-анимаций. Проблема моргания происходит из-за того, что в халфе намеренно отключен блендинг между анимациями для viewmodel.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено PLut 06-04-2011 в 11:36:

Дядя Миша Зачем его отключили и как его включить?

__________________
Base Defense on Steam, ModDB


Отправлено Дядя Миша 06-04-2011 в 12:24:

Цитата:
PLut писал:
Зачем его отключили и как его включить?

отключили его затем, что 80% анимаций с ним смотрятся по идиотски, поскольку оружие в любой момент из режима idle может перейти в режим стрельбы. Включить его можно только в движке. Я включал в ксаше, но результат получился мерзкий, как я и говорил выше.
Кроме того оружие имеет особенности анимации, при котором основной animtime не используется, а вся анимация идет через latched.animtime - это так называемая авто-анимация valve - без внешней синхронизации.
Это тоже затрудняет использование блендинга.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено PLut 06-04-2011 в 14:15:

Дядя Миша Просто я вспомнил монтировку в хл2, там после удара монтировка сначала возвращается не на свою прежнюю позицию, а потом плавно сдвигается в нужное место. И сделано это кодом.

__________________
Base Defense on Steam, ModDB


Отправлено Дядя Миша 06-04-2011 в 16:21:

PLut ну в хл2 - да. И в старом-новом ксаше я это замучу. А здесь - как есть.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено FreeSlave 21-04-2011 в 13:13:

Для чего нужна функция AddToPlayer и почему она прописана не у всех оружий? Например, у монтировки нет. И зачем вообще нужны эвенты (sc-файлы), если там прописано одно и то же? Можно ли от них вовсе избавиться?

__________________
I'm on github
I'm on opendesktop.org


Отправлено fire64 21-04-2011 в 14:14:

FreeSlave, функция AddToPlayer вызывается каждый раз, когда игрок поднимает оружие.

Однако её можно и не добавлять, так как она и так имеется в родительском классе.

Насчет event файлов:
Это что-то типа хака, sc файл кешируется и индекс кеширования используется как ID эвента для клиента.

Однако я видел в некоторых играх, что в sc файлдах был какой-то код, связанные с индексами анимаций, моделей и т.д.

__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей


Отправлено Дядя Миша 21-04-2011 в 14:17:

Цитата:
FreeSlave писал:
Для чего нужна функция AddToPlayer и почему она прописана не у всех оружий?

иконку поднятия оружия посылает в худ. Ну ту, которая справа появляется.
если эта иконка не нужна, то можно избавится.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Временная зона GMT. Текущее время 17:58.
Показать все 11 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024