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

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- SOHL Custom Build (https://hlfx.ru/forum/forumdisplay.php?forumid=15)
-- Gruntbattledemo - неработающий скрипт (https://hlfx.ru/forum/showthread.php?threadid=2112)


Отправлено Дядя Миша 08-03-2010 в 14:11:

Gruntbattledemo - неработающий скрипт

тов. Кутузов где-то упоминал, что этот скрипт в спирите 1.7 перестал работать правильно. Поскольку я как раз занимаюсь портирование спирита под ксаш движок, я естественно обратил на это внимание.
Я поставил спирит 1.0 после чего выяснилось, что и там тоже этот скрипт работает неправильно. Более того - я хорошо помню что в версии 1.0 еще в далеком 2002 году все отлично пахало. Сменилась лишь версия халфы, да комп стал помощнее. Ну на халфу я думать не стал, вряд ли бы там этот код трогали. А вот то что фпс раньше был ниже - это факт.
Проверить легко - пишем в консоли fps_max 35 - и скрипт снова становится рабочим. Зачем я это написал?
Чтобы сэкономить время тем кто пытается его исправить в коде.
Там в другом дело.

Добавлено 08-03-2010 в 17:11:

Upd: хотя в спирите 1.7 его плющит вообще не подетски.

__________________
My Projects: download page

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

Цитата:

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


Отправлено XaeroX 08-03-2010 в 14:41:

Цитата:
Дядя Миша писал:
Там в другом дело.

В чём?

__________________

xaerox on Vivino


Отправлено Дядя Миша 08-03-2010 в 16:00:

XaeroX пока точно не знаю, но временные промежутки в скрипте не совпадают. А если ограничить принудительно на 35-50 фпс - то все ок.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Дядя Миша 02-10-2011 в 13:18:

Спустя год возвращаюсь к этой теме. Итак мои исследования показали следующую интересную вещь:
В спирите есть такая кондиция как вызов цели по окончании проигрывания секвенции. Эта кондиция срабатывает раз-через-раз, причем поначалу определить причину несрабатывания было крайне тяжело. Суть была в том, что скриптед_секвенция упорно крутилась по кругу, даже если её об этом не просили. То есть можно было задать секвенцию и она выполнялась бы раз 8-10, а потом (внезапно!) останавливалсь бы. В связи с эти всплыл еще один оч. интересный баг, когда DROP_TO_FLOOR при выполнении секвенции начинает двигать монстра не вниз, а вбок. Я наивно полагал что это чисто ксашевский баг, однако оказалось, что и в халфе он тоже присутствует, просто реже проявляется. Итак вернемся к нашим баранам:
При выполнении секвенции корректно отловить момент её завершения мешает волшебная строчка m_fSequenceFinished = FALSE; в DispatchAnimEvents. Прикол к том, что сбрасываться она должна только в ResetSequenceInfo, а никак не с каждым вызовом DispatchAnimEvents.
Почему её воткнули туда - для меня загадка. Возможно она как-то влияет на геймплей и на работу AI в целом. Если у кого-то из вас есть немного свободного времени - пожалуйста протестируйте работу халфы, да и спирита. закомментировав эту строчку, конкретнее вот:
файл animating.cpp

C++ Source Code:
1
{
2
  MonsterEvent_t	event;
3
 
4
  void *pmodel = GET_MODEL_PTR( ENT(pev) );
5
 
6
  if ( !pmodel )
7
  {
8
    ALERT( at_aiconsole, "Gibbed monster is thinking!\n" );
9
    return;
10
  }
11
 
12
  // FIXME: I have to do this or some events get missed, and this is probably causing the problem below
13
  flInterval = 0.1;
14
 
15
  // FIX: this still sometimes hits events twice
16
  float flStart = pev->frame + (m_flLastEventCheck - pev->animtime) * m_flFrameRate * pev->framerate;
17
  float flEnd = pev->frame + flInterval * m_flFrameRate * pev->framerate;
18
  m_flLastEventCheck = pev->animtime + flInterval;
19
 
20
  //	m_fSequenceFinished = FALSE;

Мои беглые исследования показали что удаление этой строчки полностью излечивает скрипт на gruntbattledemo от глюков и багов при ЛЮБОМ fps_max. Но возможны какие-то негативные влияния в других областях, в частности баг с DropToFloor (см. демокарту).
В чём он заключается и почему проявляется я расскажу пожжы, если кому-то это станет интересно.

Добавлено 02-10-2011 в 17:18:

К слову сказать этой строчки нет в hl2, как еще одно подтверждение того, что я двигался в правильном направлении.

__________________
My Projects: download page

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

Цитата:

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


Отправлено Jimmy C. 03-12-2011 в 11:05:

Дядя Миша хм. странно. что закоментированная что не закоментированная у меня скрипт неправильно работает (только если выставить fps_max 50 работает всегда верно)

__________________
Все что делает маппер, программист делает в движке, поскольку ему лень. ©Дядя Миша


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

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