HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- как добавить новый muzzleflash на пушку ? (https://hlfx.ru/forum/showthread.php?threadid=5693)
Отправлено Chyvachok 12-08-2021 в 16:10:
Ku2zoff ну и плюс Авроры что конфигурация эффектов не зашита в код, в той же Рендерсистем надо каждый раз перекомпиливать клиент, в идеале нормальная система партиклей это РендерСистем конфигурируемая через текстовые файлы как аврора, где можно прописывать разные эффекты и играться их значениями, а в коде где вызывается какой либо эффект, будто выстрел или взрыв или попадание, чтобы была ссылка на этот файл, если стрельба, то какой мазлфлеш спавнить, может еще и дымок в придачу, трасер какой, или может это лазер, со взрывами так же, чтобы сделать более менее нормальный эффект это должна быть комбинация из разных эффектов, сам огонь, дым, осколки и так далее.
Нечто подобное вроде Валве и задумывали с файлами events/.sc, во многих из них код похожий на код из клиента и содержится, пусть и не используется, по сути работа с эффектами сильно упростилась бы если бы код из .sc брался, и можно было в игре через команду перегрузить эти файлы, допустим если альт-табнулся и поменял что-то в файле эффекта.
Еще из эффектов на Сталкер в одном моде интересную фишку делали, мягкие партиклы назывались - если спрайт какого-то эффекта упирался в стену, но он не резко обрезался, при уходе в стену, а его край что в стену уходил плавно прозрачным становился.
Добавлено 12-08-2021 в 18:10:
Цитата:
Ku2zoff писал:
На мой взгляд, самая трушная система из XDM 3.0.3.4. Ей нужно добавить гравитацию и коллизию из 3.0.3.8 туда, где по смыслу нужно, и наверное парсер скриптов для погодных эффектов. В принципе, всё.
Еще в Тириане есть и свои эффекты что для попаданий использовались взятые и пофикшеные из ХЛВЕ, в 3.0.3.8 их нету, я смотрел, неплохие эффекты тоже.
Еще конечно не удобства и лимиты халвы доставляют тоже, если делать крутые эффекты как в том же ХЛВЕ или Тириане, то это надо как Гуль все эти модели-спрайты в одну засовывать, с кучей субмоделей или кадров, куда уместились все эффекты.
Отправлено Дядя Миша 12-08-2021 в 17:25:
В параное маззлфлэшы можно авророй делать, я делал, но Элбер сказал, что ему по старинке модельками больше нравится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 13-08-2021 в 09:35:
Порт R_MuzzleFlash из ксашдвижка в клиентку:
C++ Source Code:
3 | #define MAX_MUZZLEFLASH 3 |
4 | model_t* cl_sprite_muzzleflash[MAX_MUZZLEFLASH]; |
6 | void CL_LoadClientSprites(void) |
8 | cl_sprite_muzzleflash[0] = (struct model_s*)gEngfuncs.GetSpritePointer(SPR_Load("sprites/muzzleflash1.spr")); |
9 | cl_sprite_muzzleflash[1] = (struct model_s*)gEngfuncs.GetSpritePointer(SPR_Load("sprites/muzzleflash2.spr")); |
10 | cl_sprite_muzzleflash[2] = (struct model_s*)gEngfuncs.GetSpritePointer(SPR_Load("sprites/muzzleflash3.spr")); |
13 | void R_MuzzleFlash(const vec3_t pos, int type) |
19 | index = (type % 10) % MAX_MUZZLEFLASH; |
20 | scale = (type / 10) * 0.1f; |
21 | if (scale == 0.0f) scale = 0.5f; |
23 | if (!cl_sprite_muzzleflash[index]) |
26 | // must set position for right culling on render |
27 | pTemp = gEngfuncs.pEfxAPI->CL_TempEntAllocHigh((float*)&pos, cl_sprite_muzzleflash[index]); |
29 | pTemp->entity.curstate.rendermode = kRenderTransAdd; |
30 | pTemp->entity.curstate.renderamt = 255; |
31 | pTemp->entity.curstate.framerate = 10; |
32 | pTemp->entity.curstate.renderfx = 0; |
33 | pTemp->die = gEngfuncs.GetClientTime() + 0.01; // die at next frame |
34 | pTemp->entity.curstate.frame = gEngfuncs.pfnRandomLong(0, pTemp->frameMax); |
35 | pTemp->flags |= FTENT_SPRANIMATE | FTENT_SPRANIMATELOOP; |
36 | pTemp->entity.curstate.scale = scale; |
38 | if (index == 0) pTemp->entity.angles[2] = gEngfuncs.pfnRandomLong(0, 20); // rifle flash |
39 | else pTemp->entity.angles[2] = gEngfuncs.pfnRandomLong(0, 359); |
41 | gEngfuncs.CL_CreateVisibleEntity(ET_TEMPENTITY, &pTemp->entity); |
CL_LoadClientSprites нужно вызвать из CHud:VidInit. R_MuzzleFlash использовать вместо gEngfuncs.pEfxAPI->R_MuzzleFlash. Количество и названия спрайтов можно менять, прекэшить на сервере не обязательно, SPR_Load задаст им индексы в массиве моделей.
Chyvachok сравни с оригинальным кодом в cl_tent.c и увидишь, что это совсем не сложно.
Скрытый текст:
Этот текст скрытый. Вы должны оставить хотя бы одно сообщение в теме, чтобы его увидеть.
Отправлено Chyvachok 13-08-2021 в 10:22:
Интересно, а насколько сложно сделать чтобы эвенты брались из event/.sc файлов? Все таки это было бы удобно те же эффекты и эвенты оружия можно было бы подправлять не перекомпилируя код.
Отправлено Дядя Миша 13-08-2021 в 11:41:
Цитата:
Chyvachok писал:
а насколько сложно сделать чтобы эвенты брались из event/.sc файлов?
Надо написать маленькую виртуальную машинку.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 13-08-2021 в 12:08:
Chyvachok чтобы выяснить, насколько это сложно, нужно попробовать написать парсер. Мне проще перекомпилить клиент, если что-то получилось не так, чем убивать неделю на написание парсера, я ведь не умею
К тому же, он всё равно будет ограничен заложенным набором функций. Реквестируй фичу кому-нибудь, SNMetamorph'у, например. Он как раз апгрейдит ксашмод. Можно Дядю Мишу попросить о такой штуке для XashNT. Зайчатки скриптовых оружий уже есть в п2, к этой основе можно добавить парсинг клиентского эвента.
Отправлено Aynekko 24-08-2021 в 18:15:
Что нужно пофиксить насчет muzzleflash - это крепление к аттачменту. Он ведь тупо спавнится в воздухе. Достаточно сделать pTemp->die = cl.time + 1.0 чтобы увидеть это убожество.
Я пока ради теста сделал кой-чего
C++ Source Code:
pTemp->flags |= FTENT_SPRANIMATE | FTENT_SPRANIMATELOOP | FTENT_PLYRATTACHMENT; |
Добавил первую строчку и добавил третий флаг во второй. Ну, крепится. В оригин игрока…__________________
Мой мод на Xash
Отправлено [CFR] B@N@N 12-10-2021 в 00:27:
Цитата:
Ku2zoff писал:
Можно заморочиться, и сделать чисто клиентские темпэнтити, чтобы обойти лимит в 500 штук и улучшить эффект
Есть какие-то новости в этом направлении? Было бы здорово обойти этот лимит в 500 темпэнтити
Отправлено Ku2zoff 12-10-2021 в 01:28:
[CFR] B@N@N я этим не занимался. Меня устраивает лимит в 500 штук. А что не устраивает - нарисую через триапи. Мешают лимиты - переходи на ксаш или SvenEngine. Последний полностью совместим со стим-версией халфы, имеет увеличенные лимиты, абсолютно бесплатен, т.к. свен бесплатен в стиме. К тому же ещё абсолютно легален. Буржуи не будут на тебя гавкать, если выпустишь свой мод под него. Вот с ксашем ситуация печальная, у них безостановочно горят пуканы из-за копирайтов, хотя казалось бы...
Отправлено [CFR] B@N@N 12-10-2021 в 10:18:
Ксаш не подходит мне так как он не может мультиплеер
А вот свенэнжин наверное да, получше но он только чериз стим и это значит что на пиратку нивстанет и мод соответственно надо будет релизить чериз стим
Где-то отдельно можно будет скачать свенэнжин ну по типу того как можно скачать Ксаш чьоб не тинуть за собой несколько гига контента?
Насколько там лимиты на темпэнтити отличаются от халфовских? Я думал по хардкору замутить чьоб куски крови, тел, гильзы и тп не исчезали на карте или хотябы их было ощютимо многа чьоб была атмосфера побоища если долго играть на карте, ну типа как в Брутал Думе.
Отправлено Aynekko 12-10-2021 в 10:32:
Цитата:
[CFR] B@N@N писал:
Ксаш не подходит мне так как он не может мультиплеер
Ксаш FWGS нормально работает.__________________
Мой мод на Xash
Отправлено Дядя Миша 12-10-2021 в 12:15:
Цитата:
[CFR] B@N@N писал:
Ксаш не подходит мне так как он не может мультиплеер
Всё он прекрасно может.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Aynekko 08-12-2021 в 12:01:
Цитата:
Aynekko писал:
Что нужно пофиксить насчет muzzleflash - это крепление к аттачменту. Он ведь тупо спавнится в воздухе. Достаточно сделать pTemp->die = cl.time + 1.0 чтобы увидеть это убожество.
Невероятно, но я все же додумался как это сделать.
Нужно для начала перенести код на клиент из движка (Ku2zoff выше выложил). Затем в этом коде сделать проверку на энтитю - viewmodel это или нет. Если viewmodel - то делаем хак:
pTemp->entity.curstate.aiment = -5;
Число рандомное, главное чтобы было отрицательное.
Так же нужно притащить в этот код номер аттачмента, пусть будет int Attachment. Притащить можно из эвента 5001 и других соседних.
Далее дописать
pTemp->entity.curstate.movetype = MOVETYPE_FOLLOW;
pTemp->entity.curstate.body = Attachment + 1;
А потом в спрайт-рендерере найти SpriteComputeOrigin и сделать проверку на aiment -5. И выставить parent = GET_VIEWMODEL() вместо GET_ENTITY.
Пробовал давать индекс, но у игрока и вьюмодели почему-то индекс одинаковый. Хотя бы это сработало. Теперь маззлфлеш намертво прикручен к аттачменту, а не остается в воздухе после спауна.
С моделью пока не работает. Видимо нужно в студиорендере сделать подобную проверку.
И еще я не знаю, можно ли все это провернуть в голде. Ну в ксашмоде получилось.__________________
Мой мод на Xash
Отправлено Ku2zoff 20-12-2021 в 13:59:
C++ Source Code:
1 | pTemp->flags |= FTENT_SPRANIMATE | FTENT_SPRANIMATELOOP | [color=red]FTENT_CLIENTCUSTOM[/color]; |
2 | pTemp->entity.curstate.scale = scale; |
4 | [color = red]pTemp->callback = R_MuzzleFlashCallback;[/color] |
6 | //================================= |
8 | [color=red]void R_MuzzleFlashCallback(struct tempent_s* ent, float frametime, float currenttime) |
10 | VectorCopy(gEngfuncs.GetViewModel()->attachment[0], ent->entity.origin); |
Всё равно будет немного отставать на один кадр, но не будет оставаться висеть в воздухе.
P.S. админы, почините плиз тег color.
Отправлено Aynekko 20-12-2021 в 14:48:
Цитата:
Ku2zoff писал:
Всё равно будет немного отставать на один кадр
По-моему там еще зависимость от фпс нехилая.__________________
Мой мод на Xash