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:
Цитата:
Дядя Миша писал:
Там в другом дело.
В чём? __________________
Отправлено Дядя Миша 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:
4 | void *pmodel = GET_MODEL_PTR( ENT(pev) ); |
8 | ALERT( at_aiconsole, "Gibbed monster is thinking!\n" ); |
12 | // FIXME: I have to do this or some events get missed, and this is probably causing the problem below |
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; |
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 работает всегда верно)
__________________
Все что делает маппер, программист делает в движке, поскольку ему лень. ©Дядя Миша