HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Кажется, я починил DispatchAnimEvents
Досконально не тестировал
Страницы (10): « Первая ... « 5 6 7 8 [9] 10 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
Sigurth
Частый гость

Дата регистрации: May 2015
Проживает: Красноярск
Сообщений: 95
Возраст: 27

Рейтинг



Aynekko Да, это ты правильно сделал. Я тоже эти строчки у себя убрал. Лучше и ACT_CROUCH тоже закомменти, у меня какая-то бесячая ситуация была в поведении грантов, и комментирование этой стройки ее исправило. Кажется, дело было в автоматной очереди. Да, вспомнил. У меня в моде гранты не используют звуки автоматной очереди. Вместо этого они используют три раза звук одиночной стрельбы. И иногда TASK_PLAY_SEQUENCE_FACE_ENEMY сбивал их очередь своей анимацией, что выглядело некрасиво. И было заметно по звукам. Короче, автоматные очереди иногда обрывались тупым стоянием или сидением

__________________
Никогда не поздно сделать мод под хл1

Сообщить модератору | | IP: Записан
Сообщение: 200920

Старое сообщение 31-03-2021 18:14
- За что?
Aynekko
Маппер

Дата регистрации: Jun 2016
Проживает: г. Подольск, Россия
Сообщений: 1002
Возраст: 31

Рейтинг



Sigurth, тогда получается, что они у тебя вообще никогда не приседают?

__________________
Мой мод на Xash

Сообщить модератору | | IP: Записан
Сообщение: 200921

Старое сообщение 31-03-2021 18:24
- За что?
Sigurth
Частый гость

Дата регистрации: May 2015
Проживает: Красноярск
Сообщений: 95
Возраст: 27

Рейтинг



Aynekko Приседают. Я раньше тоже думал, что эта активность нужна, чтобы перевести их в сидячее положение, но нет. Ведь самой анимации приседания у грантов нет. Есть только анимация стрельбы уже в приседе и анимация бездействия тоже в приседе. А визуальный присед происходит благодаря интерполяции.

__________________
Никогда не поздно сделать мод под хл1

Сообщить модератору | | IP: Записан
Сообщение: 200923

Старое сообщение 31-03-2021 18:30
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
Aynekko писал:
В Task_t tlGruntRangeAttack1B[] нужно закомментить

Какие-то тупняки весьма вероятно были введены самой вальвой, чтобы дать игрокам больше шансов, особенно трактористам.

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | | IP: Записан
Сообщение: 200925

Старое сообщение 31-03-2021 18:35
-
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Дядя Миша авторы свенкоопа эти тупняки убрали. Так что в него вообще, в этот свен, играть невозможно из-за поднятого хп монстров до конских величин. Одно из двух - либо жырные, тупые и медленные монстры, как в ку2, либо шустрые и умные, но слабенькие.

Отредактировано Ku2zoff 02-04-2021 в 14:50

Сообщить модератору | | IP: Записан
Сообщение: 200977

Старое сообщение 02-04-2021 14:46
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Самая идея, что один человек может завалить несколько сотен противников идёт вразрез с реальностью. Тут либо условность, как в дефматче, где просто начинается новый раунд. Либо сама игра не предполагает, что все друг-друга отстреливают. Ну взять тот же сталкер, там тебя если в коробочку зажмут, даже бронька не спасёт. Лучше лишний раз не нарываться.

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | | IP: Записан
Сообщение: 200978

Старое сообщение 02-04-2021 15:10
-
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Цитата:
Дядя Миша писал:
там тебя если в коробочку зажмут, даже бронька не спасёт.

Сталкер в этом плане хорош, я всегда кемперю и отстреливаю противников из укрытия. Есть у тамошних НПС одна поганая особенность: стоит игроку открыть PDA или инвентарь, они активно начинают пытаться зайти к нему с тыла. Стоит просто встать где-то на уровне и ничего не делать, они будут топтаться туда-сюда, но не выходить на линию прямой видимости. В этом случае очень помогает встать в угол спиной, и тогда можно хоть полчаса копаться в инвентаре или пда.

Добавлено 02-04-2021 в 22:24:

Где-то я читал, что в сталкере прям специально написан такой код, что НПС пытаются обойти игрока, и зайти с тыла. В общем, это логично. Но вот то, что это чаще происходит при открытом инвентаре, капец как накаляет.

Сообщить модератору | | IP: Записан
Сообщение: 200979

Старое сообщение 02-04-2021 15:24
- За что?
SNMetamorph
Житель форума

Дата регистрации: Jun 2018
Проживает: Ижевск
Сообщений: 560

Рейтинг



Ну так что, у кого-то в итоге получилось проблему решить окончательно?

Добавлено 13-08-2022 в 06:04:

Из того, что я понял, все предложенные выше фиксы чинили одно, но ломали что-то другое

__________________
PrimeXT
GoldSrc Monitor
SMD Splitter
mdl-flip (gFlip analog)
Xash3D Modding Discord

Сообщить модератору | | IP: Записан
Сообщение: 210677

Старое сообщение 13-08-2022 02:04
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



SNMetamorph ни у кого не получилось. Серверный фпс в халфе плавает в зависимости от фпс, выдаваемого на мониторе. Дядя Миша писал, что фиксация серверного фпс на определённом уровне должна помочь. Архитектура движка не позволяет. При фпс 20 монстры тчинкают каждые 2 кадра (pev->nextthink + 0.1). При фпс 60 - каждые 6 кадров и т.д. Если подумать и вспомнить, что скрипты на карте gruntbattledemo в спирите работают нормально при фпс 50, то интервал в 5 кадров тоже может быть подходящим значением. Вопрос в том, почему эвенты проскакивают на высоких фпс, ведь временной интервал остаётся прежним: 0.1 секунды? Дело наверное в ограниченной точности флоатов. Изучать проблему надо под ксашем, крутя квар sv_fps.

Добавлено 13-08-2022 в 15:19:

Позапускал gruntbattledemo под голдсорсом и ксашем. С fps_max 60, 50, 40, 20 и sv_fps 60, 50, 40, 20 соответственно. Ну что сказать? Результаты одинаковые, при 50 и ниже рассинхрона скриптов почти нет. Ключевое слово почти. Нужен фикс поворота монстров по yaw. Я где-то про него читал, он нужен для исправления очень медленных поворотов при фпс выше 100. Так вот, при очень низких фпс монстры тоже медленнее поворачиваются, и паузы между секвенциями становятся больше. Нужно найти эту связь фпс с интервалами тчинков и отловов эвентов и сделать какую-то поправку в зависимости от фреймтайма, я думаю. Буду штудировать вопрос.

Добавлено 13-08-2022 в 17:48:

Собрал спирит 1.9 2022 студией. Нашёл в нём неприятный баг, приводящий к вылету в финале gruntbattledemo. С оригинальными дллками я просто на это забил, было пофиг. Но с дллками для теста отдебажил. Monsters.cpp, в районе строки 2736:

C++ Source Code:
1
default:	// default NPC sounds
2
  fvol = fWalking ? 0.2 : 0.5;
3
rgsz[0] = "common/npc_step1.wav";
4
rgsz[1] = "common/npc_step2.wav";
5
rgsz[0] = "common/npc_step3.wav";
6
rgsz[1] = "common/npc_step4.wav";
7
cnt = 4;
8
break;

Внимательные зрители увидят, что массивчик чаров rgsz[4] в этом кейсе заполнен не полностью, только rgsz[0] и rgsz[1], а количество cnt указано 4. В результате, в EMIT_SOUND_DYN вместо строчки с именем сэмпла прилетает чёрти что из памяти, и движок радостно крэшится. Исправляется так:
C++ Source Code:
1
default:	// default NPC sounds
2
  fvol = fWalking ? 0.2 : 0.5;
3
rgsz[0] = "common/npc_step1.wav";
4
rgsz[1] = "common/npc_step2.wav";
5
rgsz[2] = "common/npc_step3.wav";
6
rgsz[3] = "common/npc_step4.wav";
7
cnt = 4;
8
break;

Отредактировано Ku2zoff 13-08-2022 в 05:18

Сообщить модератору | | IP: Записан
Сообщение: 210680

Старое сообщение 13-08-2022 10:48
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



sv_fps можно использовать при одном условии - вы его включаете и делаете с ним игру. Не меняя.

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | | IP: Записан
Сообщение: 210692

Старое сообщение 15-08-2022 16:42
-
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Итак. Всё становится интереснее. Вернулся сегодня к изучению проблемы. Выяснилось, что при fps_max 50 скрипт на gruntbattledemo ломается А при fps_max 60 работает. Ну как работает? Я его идеально работающим никогда не видел, но предполагаю, что последовательность такая:

1. Грант идёт и говорит "Чек ё зон, овэр."
2. Слышит зомби и останавливается.
3. Поворачивается и говорит "Сёр, ай хир самсинг."
4. Видит первого зомби, орёт "Богис, май сектор!!!" и стреляет. (В это время из помоев вылезает второй зомби).
5. Первый зомби умирает, автомат гранта даёт осечку, второй зомби опрокидывает гранта, и тот кричит "Оу!!!"
6. Грант встаёт, орёт "Ю а хиэ!!!" и бежит к выходу.
7. Натыкается у выхода на третьего зомби, орёт "Гад дэм!!!", и разворачивается.
8. Добегает до второго зомби, опрокидывает его на вентилятор и убегает перезаряжать автомат.
9. Дальнейшее нас не интересует, т.к. скрипт всегда ломается гораздо раньше, на шагах 5-8.

Так вот, низкие значения fps приводят к запаздыванию между секвенциями и поздним разворотам, а высокие к тому, что монстры наоборот успевают развернуться быстрее, эвенты играются чаще, и скрипт ломается. Если сложить всё вместе, получается, что DispatchAnimEvents играет эвенты чаще на высоких fps.
Поискав в коде, можно узнать, что сперва вызывается StudioFrameAdvance, а затем DispatchAnimEvents. Для большинства монстров это так. Но не для Нихиланта и тентаклей. Почему так сделано, хз.

Пока у меня нет идей, возможно стоит выставлять условие m_fSequenceFinished только в одной из функций. Логично, что это StudioFrameAdvance, но поскольку интервалы проверки эвентов завязаны на gpGlobals->time, может возникнуть ситуация, когда m_fSequenceFinished будет уже TRUE, а DispatchAnimEvents ещё не отработала, и эвент будет пропущен. Если же условие переместить в DispatchAnimEvents, ситуация будет обратной: StudioFrameAdvance уже прокрутит секвенцию повторно, а m_fSequenceFinished будет ещё FALSE, и эвент будет продублирован. Засунуть весь код в одну функцию никак нельзя: переключение активностей у монстров находится между вызовами этих функций.

Сообщить модератору | | IP: Записан
Сообщение: 210711

Старое сообщение 16-08-2022 19:01
- За что?
Aynekko
Маппер

Дата регистрации: Jun 2016
Проживает: г. Подольск, Россия
Сообщений: 1002
Возраст: 31

Рейтинг



Ku2zoff что насчет вот этого эксперимента? Я тогда пытался заморочиться…
https://hlfx.ru/forum/showthread.ph...6614#post206614

__________________
Мой мод на Xash

Сообщить модератору | | IP: Записан
Сообщение: 210712

Старое сообщение 16-08-2022 19:05
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6749
Возраст: 33

Рейтинг



Aynekko это не выход. Попробуй-ка вот так:

C++ Source Code:
1
DEFINE_FIELD(CBaseMonster, m_flLastEventCheck, FIELD_FLOAT), // поменять тип на FIELD_FLOAT
2
 
3
*****
4
 
5
m_flLastEventCheck = pev->frame; // вставить эту строчку в StudioFrameAdvance именно в это место
6
 
7
pev->frame += flInterval * m_flFrameRate * pev->framerate;
8
pev->animtime = gpGlobals->time;
9
 
10
*****
11
 
12
m_flLastEventCheck = 0; // в ResetSequenceInfo
13
 
14
*****
15
// этим кодом заменить весь код  в DispatchAnimEvents от коммента FIXME: I have to do this... до int index = 0;
16
float flStart = m_flLastEventCheck;
17
float flEnd = pev->frame;
18
 
19
if (flEnd >= 256 || flEnd < 0.0)
20
  m_fSequenceFinished = TRUE;
21
 
22
*****
23
// этот дурацкий хак вставить в GetAnimationEvent перед циклом for (; index < pseqdesc->numevents; index++)
24
if (!(pseqdesc->flags & STUDIO_LOOPING) && (int)flEnd == (pseqdesc->numframes - 2))
25
{
26
  flEnd += 1.0;
27
  ALERT(at_console, "GetAnimationEvent: flStart = flEnd (%f), correcting (%f)\n", flStart, flEnd);
28
}
29
 
30
// этим условием заменить условие if ( (pevent[index].frame >= flStart && pevent[index].frame < flEnd)...
31
 
32
bool bOverlapEvent = false;
33
 
34
if (pevent[index].event < EVENT_SCRIPTED)
35
  ALERT(at_console, "GetAnimationEvent: event = %i, start = %f, end = %f\n", pevent[index].event, flStart, flEnd);
36
 
37
if (pevent[index].frame >= flStart && pevent[index].frame < flEnd)
38
{
39
  bOverlapEvent = true;
40
}
41
// FIXME: doesn't work with animations being played in reverse
42
else if ((pseqdesc->flags & STUDIO_LOOPING) && flEnd < flStart)
43
{
44
  if (pevent[index].frame >= flStart || pevent[index].frame < flEnd)
45
  {
46
    bOverlapEvent = true;
47
  }
48
}
49
 
50
if (bOverlapEvent)

Говнокод, который убирает flInterval из DispatchAnimEvents. По идее, монстры должны соображать пошустрее.

Сообщить модератору | | IP: Записан
Сообщение: 210714

Старое сообщение 17-08-2022 18:17
- За что?
[CFR] B@N@N
Житель форума

Группа: Неопытный
Дата регистрации: Feb 2018
Проживает: Default City
Сообщений: 174
Возраст: 31

Рейтинг



Очень круто смотрится! Ждём подробный тутор.
Кстати, зомби тоже надо как-то улучшить. Их тупняки теперь становятся ещё более бросающимися в глаза.


А стрелять на бегу, как в свенкоопе, барник может?

Сообщить модератору | | IP: Записан
Сообщение: 210715

Старое сообщение 18-08-2022 03:46
- За что?
Aynekko
Маппер

Дата регистрации: Jun 2016
Проживает: г. Подольск, Россия
Сообщений: 1002
Возраст: 31

Рейтинг



Цитата:
Ku2zoff писал:
Попробуй-ка вот так

Ты сам тестировал, как оно в целом? Я позже попробую посмотреть…

__________________
Мой мод на Xash

Сообщить модератору | | IP: Записан
Сообщение: 210716

Старое сообщение 18-08-2022 08:04
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 19:14. Новая тема    Ответить
Страницы (10): « Первая ... « 5 6 7 8 [9] 10 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Кажется, я починил DispatchAnimEvents
Досконально не тестировал
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

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