HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- XashXT (https://hlfx.ru/forum/forumdisplay.php?forumid=30)
-- XashXT/3D [Вопросы и ответы] (https://hlfx.ru/forum/showthread.php?threadid=3689)
Отправлено SNMetamorph 04-02-2021 в 21:24:
В XashXT есть батчинг сурфейсов мира? Если есть, как он работает? Какие есть условия для обьединения сурфейсов в один drawcall?
__________________
Мой сайт
Xash3D Modding Discord
Отправлено Дядя Миша 05-02-2021 в 06:05:
SNMetamorph у тебя на руках все исходники. Как ты собрался создавать форк если путаешься в таких элементарных вопросах? 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено SNMetamorph 05-02-2021 в 09:46:
Цитата:
Дядя Миша писал:
Как ты собрался создавать форк если путаешься в таких элементарных вопросах?
Так я буквально четвертый день ковыряюсь и разбираюсь на ходу, я никогда и не претендовал на то что у меня хорошая компетенция в этих вопросах.__________________
Мой сайт
Xash3D Modding Discord
Отправлено Дядя Миша 05-02-2021 в 12:23:
Цитата:
SNMetamorph писал:
Какие есть условия для обьединения сурфейсов в один drawcall?
Общая текстура, общая лайтмапа, общий шейдер, единая матрица трансформации.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено SNMetamorph 05-02-2021 в 18:23:
А что за mark surfaces у лифов? Какую функцию они выполняют?
__________________
Мой сайт
Xash3D Modding Discord
Отправлено Crystallize 05-02-2021 в 19:27:
Мне тоже интересно 
Отправлено ncuxonaT 05-02-2021 в 19:39:
это?
http://hlbsp.sourceforge.net/index....ef#marksurfaces
Отправлено Дядя Миша 05-02-2021 в 20:27:
К каждому лифу прилинкованы сурфейсы. А это - их индексы.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Aynekko 06-02-2021 в 08:43:
Вот здесь я писал:
http://hlfx.ru/forum/showthread.php...8061#post198061
Цитата:
Aynekko писал:
Подскажите по сейврестору. Не могу вычистить баг. Гранты у меня стреляют энтитей shock_beam. Если сохраниться в тот момент, когда энтитя летит в воздухе - после загрузке в консоль спамит сообщением:
Error: R_BeamComputePoint: Invalid entity 4095
Вот на видео, специально сделал медленную атаку:
https://www.youtube.com/watch?v=IJnT4rOOF0A
Думаю, что это баг с сейврестором лучей, а не я накопипастил.
Сохраняемся во время полета прожектили, загружаемся и видим картину - лучи начинают крепиться к самой прожектили и ориджину карты.
Т.к. эту штуку я скопировал из опфора, я решил проверить, что происходит там. Так вот, если сохраниться во время летящей атаки шок-трупера, а потом загрузить игру - то будет вылет на рабочий стол. Сохранялка будет испорчена. Ксаш к счастью не крашится.
Я решил проверить вортигонтов на ксаше, ведь они тоже создают лучи. И получил ту же самую картину. Сохраняемся в самый момент атаки, когда создается и исчезается луч из его рук (буквально секундный промежуток). После загрузки вортигонт будет куда-то бежать, а луч будет тянуться из его рук в точку последней атаки (и так и не исчезнет).
Дальше собственно код прожектили, там все очень просто, поэтому я не пойму в чем проблема - больше склоняюсь к проблеме сейврестора в целом, т.к. опфор крашится, а вортигонт шалит.
Сохранялка на месте:
C++ Source Code:
1 | BEGIN_DATADESC( CShock ) |
2 | DEFINE_FIELD(m_pBeam, FIELD_CLASSPTR), |
3 | DEFINE_FIELD(m_pNoise, FIELD_CLASSPTR), |
4 | DEFINE_FIELD(m_pSprite, FIELD_CLASSPTR), |
5 | DEFINE_FUNCTION( Touch ), |
6 | DEFINE_FUNCTION( FlyThink ), |
7 | DEFINE_FUNCTION( CreateEffects ), |
8 | DEFINE_FUNCTION( ClearEffects ), |
9 | DEFINE_FUNCTION( UpdateOnRemove ), |
Создаются спрайт и лучи, оригинальный код из опфора:
C++ Source Code:
1 | m_pSprite = CSprite::SpriteCreate( "sprites/shockbeam.spr", pev->origin, FALSE ); |
2 | m_pSprite->SetAttachment( edict(), 0 ); |
3 | m_pSprite->pev->scale = 0.35; |
4 | m_pSprite->SetTransparency( kRenderTransAdd, 80, 160, 255, 200, kRenderFxNoDissipation ); |
6 | m_pBeam = CBeam::BeamCreate( "sprites/lgtning.spr", 30 ); |
9 | m_pBeam->EntsInit( entindex(), entindex() ); |
10 | m_pBeam-><img src="images/smilies/pp2.gif" border="0" alt="">ointEntInit( entindex(), entindex() ); |
11 | m_pBeam->SetStartAttachment( 1 ); |
12 | m_pBeam->SetEndAttachment( 2 ); |
13 | m_pBeam->SetBrightness( 180 ); |
14 | m_pBeam->SetScrollRate( 10 ); |
15 | m_pBeam->SetNoise( 0 ); |
16 | m_pBeam->SetFlags( BEAM_FSHADEOUT ); |
17 | m_pBeam->SetColor( 0, 255, 255 ); |
18 | m_pBeam->RelinkBeam(); |
22 | ALERT(at_console, "Could not create shockbeam beam!\n"); |
25 | m_pNoise = CBeam::BeamCreate( "sprites/lgtning.spr", 30 ); |
29 | m_pNoise->EntsInit( entindex(), entindex() ); |
30 | m_pNoise-><img src="images/smilies/pp2.gif" border="0" alt="">ointEntInit( entindex(), entindex() ); |
31 | m_pNoise->SetStartAttachment( 1 ); |
32 | m_pNoise->SetEndAttachment( 2 ); |
33 | m_pNoise->SetBrightness( 180 ); |
34 | m_pNoise->SetScrollRate( 30 ); |
35 | m_pNoise->SetNoise( 30 ); |
36 | m_pNoise->SetFlags( BEAM_FSHADEOUT ); |
37 | m_pNoise->SetColor( 255, 255, 173 ); |
38 | m_pNoise->RelinkBeam(); |
42 | ALERT(at_console, "Could not create shockbeam noise!\n"); |
ClearEffects, который вызывается в функции Touch
C++ Source Code:
1 | void CShock::ClearEffects() |
5 | UTIL_Remove( m_pBeam ); |
11 | UTIL_Remove( m_pNoise ); |
17 | UTIL_Remove( m_pSprite ); |
На всякий случай прикрепляю весь файл с прожектилей.
Добавлено 06-02-2021 в 11:43:
С размножением спрайтов разобрался - мой косяк был. Но лучи все еще продолжают терять заданный аттачмент. Копаю дальше.__________________
Мой мод на Xash
Отправлено Ku2zoff 06-02-2021 в 08:59:
Цитата:
Aynekko писал:
созданный спрайт продублировался, а лучи начинают крепиться к самой прожектили и ориджину карты.
Ну вот тебе и ответ. Создаётся ещё один эффект, у которого поля энтить, к которым он должен крепиться невалидные. Поэтому опфор крэшится. А под обычной халфой такое же поведение, или только под ксаш-движком? Просто я не припомню, чтобы у меня хоть когда-то крэшился опфор.
Навскидку, вроде есть в коде ошибочка. В функции CreateEffects нет проверки, существуют ли изначально m_pSprite, m_pBeam, m_pNoise. В сейв они все пишутся, следовательно, восстанавливаются при ресторе. А EffectsCreated обнуляется, поэтому CreateEffects вызывается снова, и делает ещё по одной копии. Ну по идее они должны не клонироваться, а перезаписываться. Тем более, RelinkBeam для лучей вызывается. Надо бы мне самому проверить вортигонтов и оригинальный опфор под стим-халфой.
Добавлено 06-02-2021 в 15:59:
Цитата:
Aynekko писал:
Но лучи все еще продолжают терять заданный аттачмент.
RelinkBeam с правильными указателями на энтитю-конец и энтитю-начало после рестора.
Отправлено Aynekko 06-02-2021 в 09:09:
Добавил проверки вида "if (!m_pSprite) SpriteCreate", для лучей тоже. Впрочем, без изменений.
На данный момент имею вот что:
https://youtu.be/Fu-hh4oH1tI
Стреляю, полет нормальный. Сохраняюсь, загружаюсь.
Оба луча (beam, noise) потеряли аттачменты и соединяются с прожектилей и ориджином карты (а не между аттачментами модели). Идет спам в консоль.
Снова сохраняюсь и загружаюсь. Лучи вообще исчезли. Спрайт благополучно долетает.
Кстати, спам прекратится, когда прожектиля долетит и исчезнет. То есть лучи видимо все еще как-то принадлежат ей.
Цитата:
Ku2zoff писал:
Просто я не припомню, чтобы у меня хоть когда-то крэшился опфор.
Я проверял ванильный опфор в стиме. Нужно сохраниться в тот самый промежуток времени, когда шоктрупер выпустит прожектилю, но при этом она еще не достигнет своего места назначения. Тогда после загрузки такого сохранения будет вылет.
Цитата:
Ku2zoff писал:
RelinkBeam с правильными указателями на энтитю-конец и энтитю-начало после рестора.
Тут не совсем понял. Релинкбим он же void, как ему указатели вписать?__________________
Мой мод на Xash
Отправлено Ku2zoff 06-02-2021 в 09:10:
Вообще, вынеси создание всех трёх эффектов куда-нибудь в CShock::Shoot, вызывается ведь всего один раз. А обновление эффектов
C++ Source Code:
можно спокойно вызывать из тчинка. Удаление из тача. Наверное, никакая переменная EffectsCreated и не понадобится. Что за агарот-то нагородили те, кто кодил это типа опфоровское.
Если ничего не поможет - убери нафиг спрайт и лучи из сейвдаты. Пусть лучше они после рестора заново создаются и линкуются.
Отправлено Aynekko 06-02-2021 в 09:13:
Цитата:
Ku2zoff писал:
EffectsCreated
Это я добавил. Дело в том, что я использую флаг, в зависимости от которого задается размер и цвет прожектили
(юзают разные монстры) но дело в том, что присвоение флага идет уже после спауна энтити. И в спауне флаг почему-то не проходит (выставлял алерты), зато проходит в think, которая запускается в спауне. Спрайт дублировался из-за того, что я забыл это добавить в сейврестор и оно обнулялось, и создавались новые эффекты__________________
Мой мод на Xash
Отправлено Ku2zoff 06-02-2021 в 09:16:
Цитата:
Aynekko писал:
Релинкбим он же void, как ему указатели вписать?
Перед ним вызвать m_pNoise->EntsInit с указателями на нужную энтитю.
Добавлено 06-02-2021 в 16:16:
Я заинтересовался, попозже сегодня сам проверю опфор на предмет вылета. И напишу себе такой шок-эффект, пригодится для чего-нибудь.
Отправлено Aynekko 06-02-2021 в 09:20:
Ku2zoff огромнейшее спасибо!!!
Добавил во flythink
C++ Source Code:
3 | m_pNoise->EntsInit( entindex(), entindex() ); |
4 | m_pNoise->SetStartAttachment( 1 ); |
5 | m_pNoise->SetEndAttachment( 2 ); |
6 | m_pNoise->RelinkBeam(); |
10 | m_pBeam->EntsInit( entindex(), entindex() ); |
11 | m_pBeam->SetStartAttachment( 1 ); |
12 | m_pBeam->SetEndAttachment( 2 ); |
13 | m_pBeam->RelinkBeam(); |
Проблема полностью ушла!!!__________________
Мой мод на Xash