![]() |
Показать все 30 сообщений этой темы на одной странице |
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)
как добавить новый muzzleflash на пушку ?
здравствуйте как добавить новый muzzleflash на оружие ?
__________________
илья
Проще всего заменить стандартные спрайты. Код рисования маззлфлешей зашит в движок. Но можно сделать темпэнтитями на клиенте. pEfxAPI и сорцы ксашдвижка в помощь.
вот увидил код
switch( event->event )
{
case 5001:
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[0], atoi( event->options) );
break;
case 5011:
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[1], atoi( event->options) );
break;
case 5021:
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[2], atoi( event->options) );
break;
case 5031:
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[3], atoi( event->options) );
break;
case 5002:
gEngfuncs.pEfxAPI->R_SparkEffect( (float *)&entity->attachment[0], atoi( event->options), -100, 100 );
break;
// Client side sound
case 5004:
gEngfuncs.pfnPlaySoundByNameAtLocation( (char *)event->options, 1.0, (float *)&entity->attachment[0] );
break;
default:
break;
}
тут можно добавить новый на основе такого примера
switch( event->event )
{
case 5001:
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[0], atoi( event->options) );
break;
case 5011:
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[1], atoi( event->options) );
break;
case 5021:
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[2], atoi( event->options) );
break;
case 5031:
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[3], atoi( event->options) );
break;
case 5041:
gEngfuncs.pEfxAPI->R_MuzzleFlash( (float *)&entity->attachment[4], atoi( event->options) ); <----здесь добавил новый
break;
case 5002:
gEngfuncs.pEfxAPI->R_SparkEffect( (float *)&entity->attachment[0], atoi( event->options), -100, 100 );
break;
// Client side sound
case 5004:
gEngfuncs.pfnPlaySoundByNameAtLocation( (char *)event->options, 1.0, (float *)&entity->attachment[0] );
break;
default:
break;
}
__________________
илья
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
в каком файле та искать ? случайно не в r_misc.cpp а то исходников много и все разные. Может сразу лучше ссылку скинешь по ксашу.
__________________
илья
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Преимущество авроры - визуальное редактирование. Но сама система ограничена именно распылением частиц. Если надо делать огонь, дым, пар и прочее, что ставится на карту - она годится. Можно делать эффекты дыма и огня для оружий и проджектайлов. А вот нечто, вроде эффектов из XDM делать не получится - нет функционала. Дописать можно, но скрипты надо будет писать вручную - теряется весь смысл.
На мой взгляд, самая трушная система из XDM 3.0.3.4. Ей нужно добавить гравитацию и коллизию из 3.0.3.8 туда, где по смыслу нужно, и наверное парсер скриптов для погодных эффектов. В принципе, всё.
Ku2zoff ну и плюс Авроры что конфигурация эффектов не зашита в код, в той же Рендерсистем надо каждый раз перекомпиливать клиент, в идеале нормальная система партиклей это РендерСистем конфигурируемая через текстовые файлы как аврора, где можно прописывать разные эффекты и играться их значениями, а в коде где вызывается какой либо эффект, будто выстрел или взрыв или попадание, чтобы была ссылка на этот файл, если стрельба, то какой мазлфлеш спавнить, может еще и дымок в придачу, трасер какой, или может это лазер, со взрывами так же, чтобы сделать более менее нормальный эффект это должна быть комбинация из разных эффектов, сам огонь, дым, осколки и так далее.
Нечто подобное вроде Валве и задумывали с файлами events/.sc, во многих из них код похожий на код из клиента и содержится, пусть и не используется, по сути работа с эффектами сильно упростилась бы если бы код из .sc брался, и можно было в игре через команду перегрузить эти файлы, допустим если альт-табнулся и поменял что-то в файле эффекта.
Еще из эффектов на Сталкер в одном моде интересную фишку делали, мягкие партиклы назывались - если спрайт какого-то эффекта упирался в стену, но он не резко обрезался, при уходе в стену, а его край что в стену уходил плавно прозрачным становился.
Добавлено 12-08-2021 в 18:10:
В параное маззлфлэшы можно авророй делать, я делал, но Элбер сказал, что ему по старинке модельками больше нравится.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Порт R_MuzzleFlash из ксашдвижка в клиентку:
1 | #include "com_model.h" |
2 |
3 | #define MAX_MUZZLEFLASH 3 |
4 | model_t* cl_sprite_muzzleflash[MAX_MUZZLEFLASH]; |
5 |
6 | void CL_LoadClientSprites(void) |
7 | { |
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")); |
11 | } |
12 |
13 | void R_MuzzleFlash(const vec3_t pos, int type) |
14 | { |
15 | TEMPENTITY* pTemp; |
16 | int index; |
17 | float scale; |
18 |
19 | index = (type % 10) % MAX_MUZZLEFLASH; |
20 | scale = (type / 10) * 0.1f; |
21 | if (scale == 0.0f) scale = 0.5f; |
22 |
23 | if (!cl_sprite_muzzleflash[index]) |
24 | return; |
25 |
26 | // must set position for right culling on render |
27 | pTemp = gEngfuncs.pEfxAPI->CL_TempEntAllocHigh((float*)&pos, cl_sprite_muzzleflash[index]); |
28 | if (!pTemp) return; |
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; |
37 |
38 | if (index == 0) pTemp->entity.angles[2] = gEngfuncs.pfnRandomLong(0, 20); // rifle flash |
39 | else pTemp->entity.angles[2] = gEngfuncs.pfnRandomLong(0, 359); |
40 |
41 | gEngfuncs.CL_CreateVisibleEntity(ET_TEMPENTITY, &pTemp->entity); |
42 | } |
Интересно, а насколько сложно сделать чтобы эвенты брались из 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'
Chyvachok чтобы выяснить, насколько это сложно, нужно попробовать написать парсер. Мне проще перекомпилить клиент, если что-то получилось не так, чем убивать неделю на написание парсера, я ведь не умею К тому же, он всё равно будет ограничен заложенным набором функций. Реквестируй фичу кому-нибудь, SNMetamorph'у, например. Он как раз апгрейдит ксашмод. Можно Дядю Мишу попросить о такой штуке для XashNT. Зайчатки скриптовых оружий уже есть в п2, к этой основе можно добавить парсинг клиентского эвента.
Что нужно пофиксить насчет muzzleflash - это крепление к аттачменту. Он ведь тупо спавнится в воздухе. Достаточно сделать pTemp->die = cl.time + 1.0 чтобы увидеть это убожество.
Я пока ради теста сделал кой-чего
pTemp->clientIndex = 1; |
pTemp->flags |= FTENT_SPRANIMATE | FTENT_SPRANIMATELOOP | FTENT_PLYRATTACHMENT; |
__________________
Мой мод на Xash
[CFR] B@N@N я этим не занимался. Меня устраивает лимит в 500 штук. А что не устраивает - нарисую через триапи. Мешают лимиты - переходи на ксаш или SvenEngine. Последний полностью совместим со стим-версией халфы, имеет увеличенные лимиты, абсолютно бесплатен, т.к. свен бесплатен в стиме. К тому же ещё абсолютно легален. Буржуи не будут на тебя гавкать, если выпустишь свой мод под него. Вот с ксашем ситуация печальная, у них безостановочно горят пуканы из-за копирайтов, хотя казалось бы...
Ксаш не подходит мне так как он не может мультиплеер
А вот свенэнжин наверное да, получше но он только чериз стим и это значит что на пиратку нивстанет и мод соответственно надо будет релизить чериз стим
Где-то отдельно можно будет скачать свенэнжин ну по типу того как можно скачать Ксаш чьоб не тинуть за собой несколько гига контента?
Насколько там лимиты на темпэнтити отличаются от халфовских? Я думал по хардкору замутить чьоб куски крови, тел, гильзы и тп не исчезали на карте или хотябы их было ощютимо многа чьоб была атмосфера побоища если долго играть на карте, ну типа как в Брутал Думе.
__________________
Мой мод на Xash
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
Мой мод на Xash
1 | pTemp->flags |= FTENT_SPRANIMATE | FTENT_SPRANIMATELOOP | [color=red]FTENT_CLIENTCUSTOM[/color]; |
2 | pTemp->entity.curstate.scale = scale; |
3 |
4 | [color = red]pTemp->callback = R_MuzzleFlashCallback;[/color] |
5 |
6 | //================================= |
7 |
8 | [color=red]void R_MuzzleFlashCallback(struct tempent_s* ent, float frametime, float currenttime) |
9 | { |
10 | VectorCopy(gEngfuncs.GetViewModel()->attachment[0], ent->entity.origin); |
11 | }[/color] |
__________________
Мой мод на Xash
Временная зона GMT. Текущее время 16:24. | Показать все 30 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024