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 ) |
5 | m_pPlayer->GetAutoaimVector( AUTOAIM_5DEGREES ); |
7 | if (m_flTimeWeaponIdle > UTIL_WeaponTimeBase()) |
11 | float flRand = UTIL_SharedRandomFloat( m_pPlayer->random_seed, 10, 15 ); |
15 | m_flTimeWeaponIdle = (76.0/30.0); |
17 | else if (flRand <= 0.4) |
20 | m_flTimeWeaponIdle = (61.0/24.0); |
22 | else if (flRand <= 0.6) |
25 | m_flTimeWeaponIdle = (50.0/30.0); |
27 | else if (flRand <=0.8) |
30 | m_flTimeWeaponIdle = (76.0/30.0); |
35 | m_flTimeWeaponIdle = (61.0/30.0); |
38 | SendWeaponAnim( iAnim ); |
Ещё непонятно, почему в UTIL_SharedRandomFloat передаются 10 и 15. Если это диапозон, то почему он берется от 10 до 15, а сравнение идет с числами от 0 до 1? Копировал из магнума, а у него анимации проигрываются всегда.
Анимации в начале прописал, если что
C++ Source Code:
__________________
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'