HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Нубские вопросы от <censored> и других нубов (https://hlfx.ru/forum/showthread.php?threadid=4535)
Отправлено [CFR] [email protected]@N 11-12-2021 в 10:07:
Цитата:
Ku2zoff писал:
У меня уже есть спрайтовые декали, которые пишутся в сейв, так что я бы мог это приспособить
Можно по подробние про это? В чом отличие от оригинала?
Добавлено 11-12-2021 в 13:07:
Цитата:
Chyvachok писал:
Пробовал, след плазмы сделать, но пока не очень красиво получается на их основе.
Ну у тебя тоже заардкожино всё будет)))
Ваще я так понял такой же визуальный ридактор и тхт файл никто больше ниосилел из авторов партекл систем. Походу оно ни так просто зделать
Отправлено Ku2zoff 11-12-2021 в 12:02:
Цитата:
[CFR] [email protected]@N писал:
Можно по подробние про это? В чом отличие от оригинала?
Декали из спрайтов, а не из картинок в ваде. Могут анимироваться, менять размер на ходу, много чего ещё. В основе декали из инвазиона. Они прикольные, но исчезают после загрузки или перехода на новый уровень. Это я почти заборол, могут иногда пропадать с движущихся энтить при загрузке и переходе. Ещё обрезку по краям брашей не сделал - половина декали может висеть в пустоте. Собсно, в инвазионе это не слишком бросалось в глаза, т.к. там только дырки от пуль. А я планирую пятна крови, взрывов и ещё что-нибудь. Как только победю отваливание от движущихся энтить - займусь обрезкой.
Добавлено 11-12-2021 в 19:02:
Цитата:
Самая сложность в том, какой функционал задать самой системе. В идеале, она должна уметь всё, что умеют pEfxAPI (касаемо спрайтов), аврора и дождик БУзера. То есть тут не просто какие-то дымки от выстрелов в стену, и не просто дым, рассеивающийся из трубы. Тут и лучи, закрученные в спираль, и закольцованные лучи, и лучи с шумом, и прыгающие от пола спрайты гаусса, и искры от выстрелов из инвазиона, и эффекты телепортов, дофигища всего. Накодить это можно, в XDM очень многое уже есть. Другой вопрос как всё это унифицировать, чтобы у совершенно разных систем, например искр и кольца от взрыва не было дублирующихся параметров, и как вообще это всё сохранять в скрипт.
Будет готовая система - можно будет и редактор написать. Только вот нужна ли она, именно такая система? В большинстве случаев функционал будет избыточным. Всё, на что хватает фантазии у моддеров - повторять чужие эффекты. Поэтому Дядя Миша просто взял, и портировал аврору в ксаш с исправлениями. Подавляющее большинство моддеров даже чужие aur-файлы берут. Те самые, которые Лаури как примеры к спириту приложил. Даже те, кто умеет кодить, не раскрывают в полной мере возможности pEfxAPI. Нет примеров, нет документации.
Отправлено Chyvachok 11-12-2021 в 13:21:
Цитата:
Ku2zoff писал:
А я планирую пятна крови, взрывов и ещё что-нибудь.
Если нужны более качественные спрайты вот из Ballistic Weapons кровяха: https://files.gamebanana.com/bitpit...eaponsblood.rar
Могу еще следы от пуль и взрывов скинуть.
Отправлено Дядя Миша 11-12-2021 в 14:40:
Цитата:
Ku2zoff писал:
Как только победю отваливание от движущихся энтить - займусь обрезкой.
Ну в ксаше же не отваливаются. Даже с монстров. Смотри как там устроено. Оно несложное, если разберёшься с переходом из глобального в локальное пространство.
Цитата:
Ku2zoff писал:
Поэтому Дядя Миша просто взял, и портировал аврору в ксаш с исправлениями.
К Авроре Ксер в свое время редактор написал. У нее на мой взгляд был только один недостаток - баги. Ну вот я их и поправил, а функционал немного дополнил. Сделал проекцию светового пятна на партиклы и всё такое.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Chyvachok 11-12-2021 в 17:57:
Такой вариант сделать другой цвет крови при выстреле в голову нормальный? Пока вижу что есть шанс если монстра разорвет на мясо выстрелом в голову, то куски будут желтую кровь оставлять, а если в тело то красную. Хотя как вариант влепить в Gib Monster проверку возвращающую цвет крови, или это лишняя проверка будет?
code:
void CZombie :: TraceAttack( entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType)
{
switch ( ptr->iHitgroup ) {
case HBOX_HEAD:
m_bloodColor = BLOOD_COLOR_YELLOW;
break;
}
CBaseMonster::TraceAttack( pevAttacker, flDamage, vecDir, ptr, bitsDamageType );
if (m_bloodColor = BLOOD_COLOR_YELLOW)
m_bloodColor = BLOOD_COLOR_RED;
}
Отправлено Ku2zoff 11-12-2021 в 23:43:
Короче, я пошёл по пути самурая. CZombie::TraceBleed с аргументом цвета крови, что логично. CZombie::TraceAttack, CZombie::GibMonster, CZombie::SpawnGibs. Последнее делать не хотелось, но гибсы из SpawnRandomGibs по-умолчанию принимают цвет крови владельца. Пришлось сделать для зомби кастомную функцию, чтобы задать цвет вручную.
C++ Source Code:
3 | void CZombie::TraceAttack(entvars_t* pevAttacker, float flDamage, Vector vecDir, TraceResult* ptr, int bitsDamageType) |
7 | m_LastHitGroup = ptr->iHitgroup; |
9 | switch (ptr->iHitgroup) |
12 | SpawnBlood(ptr->vecEndPos, BLOOD_COLOR_YELLOW, flDamage); |
13 | TraceBleed(BLOOD_COLOR_YELLOW, flDamage, vecDir, ptr, bitsDamageType); |
16 | SpawnBlood(ptr->vecEndPos, BLOOD_COLOR_RED, flDamage); |
17 | TraceBleed(BLOOD_COLOR_RED, flDamage, vecDir, ptr, bitsDamageType); |
20 | AddMultiDamage(pevAttacker, this, flDamage, bitsDamageType); |
24 | void CZombie::TraceBleed(int bloodColor, float flDamage, Vector vecDir, TraceResult* ptr, int bitsDamageType) |
26 | if (flDamage == 0) return; |
28 | if (!(bitsDamageType & (DMG_CRUSH | DMG_BULLET | DMG_SLASH | DMG_BLAST | DMG_CLUB | DMG_MORTAR))) return; |
42 | else if (flDamage < 25) |
53 | for (i = 0; i < cCount; i++) |
55 | vecTraceDir = vecDir * -1; |
56 | vecTraceDir.x += RANDOM_FLOAT(-flNoise, flNoise); |
57 | vecTraceDir.y += RANDOM_FLOAT(-flNoise, flNoise); |
58 | vecTraceDir.z += RANDOM_FLOAT(-flNoise, flNoise); |
60 | UTIL_TraceLine(ptr->vecEndPos, ptr->vecEndPos + vecTraceDir * -172, ignore_monsters, ENT(pev), &Bloodtr); |
62 | if (Bloodtr.flFraction != 1.0) UTIL_BloodDecalTrace(&Bloodtr, bloodColor); |
66 | void CZombie::GibMonster(void) |
71 | EMIT_SOUND(ENT(pev), CHAN_WEAPON, "common/bodysplat.wav", 1, ATTN_NORM); |
73 | if (CVAR_GET_FLOAT("violence_hgibs") != 0) |
79 | if (CVAR_GET_FLOAT("violence_agibs") != 0) |
87 | SetThink(&CBaseMonster::SUB_Remove); |
88 | pev->nextthink = gpGlobals->time; |
93 | void CZombie::SpawnGibs(int cGibs, int human) |
97 | for (cSplat = 0; cSplat < cGibs; cSplat++) |
99 | CGib* pGib = GetClassPtr((CGib*)NULL); |
103 | pGib->Spawn("models/hgibs.mdl"); |
104 | pGib->pev->body = RANDOM_LONG(1, 6 - 1); |
105 | pGib->m_bloodColor = BLOOD_COLOR_RED; |
109 | pGib->Spawn("models/agibs.mdl"); |
110 | pGib->pev->body = RANDOM_LONG(0, 4 - 1); |
111 | pGib->m_bloodColor = BLOOD_COLOR_YELLOW; |
114 | pGib->pev->origin.x = pev->absmin.x + pev->size.x * (RANDOM_FLOAT(0, 1)); |
115 | pGib->pev->origin.y = pev->absmin.y + pev->size.y * (RANDOM_FLOAT(0, 1)); |
116 | pGib->pev->origin.z = pev->absmin.z + pev->size.z * (RANDOM_FLOAT(0, 1)) + 1; |
118 | pGib->pev->velocity = g_vecAttackDir * -1; |
120 | pGib->pev->velocity.x += RANDOM_FLOAT(-0.25, 0.25); |
121 | pGib->pev->velocity.y += RANDOM_FLOAT(-0.25, 0.25); |
122 | pGib->pev->velocity.z += RANDOM_FLOAT(-0.25, 0.25); |
124 | pGib->pev->velocity = pGib->pev->velocity * RANDOM_FLOAT(300, 400); |
126 | pGib->pev->avelocity.x = RANDOM_FLOAT(100, 200); |
127 | pGib->pev->avelocity.y = RANDOM_FLOAT(100, 300); |
129 | if (pev->health > -50) pGib->pev->velocity = pGib->pev->velocity * 0.7; |
130 | else if (pev->health > -200) pGib->pev->velocity = pGib->pev->velocity * 2; |
131 | else pGib->pev->velocity = pGib->pev->velocity * 4; |
133 | pGib->pev->solid = SOLID_BBOX; |
134 | UTIL_SetSize(pGib->pev, Vector(0, 0, 0), Vector(0, 0, 0)); |
136 | pGib->LimitVelocity(); |
Добавлено 12-12-2021 в 06:43:
Цитата:
Chyvachok писал:
если монстра разорвет на мясо выстрелом в голову, то куски будут желтую кровь оставлять, а если в тело то красную
Используй мой код. Куски будут оставлять оба цвета.
Отправлено [CFR] [email protected]@N 12-12-2021 в 01:23:
Цитата:
Ku2zoff писал:
. Ещё обрезку по краям брашей не сделал - половина декали может висеть в пустоте
А как они в движке тогда обриаются?
Отправлено Дядя Миша 12-12-2021 в 06:47:
Цитата:
Элементарно. Вокруг полигона, на который наложена декаль строятся ограничивающие плоскости. Как кросспродукт от ребра и нормали.
И этими плоскостями полигон декали обрезается точно по его размеру.
Добавлено 12-12-2021 в 09:47:
Но поскольку декаль накладывается как трипланарная проекция, то её копии ложатся и на соседние полигоны, а лишнее просто удаляется.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 17-12-2021 в 15:07:
Дядя Миша а где всю эту математику поглядеть? Какие функции в gl_decals.c?
Отправлено XaeroX 17-12-2021 в 16:03:
Ku2zoff
https://en.wikipedia.org/wiki/Suthe...dgman_algorithm
__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!
Отправлено Дядя Миша 17-12-2021 в 17:13:
Ku2zoff polylib.c, там всё. В любой кваке смотри.
Если хочешь понять принцип. Ну а если не хочешь - копипасти из паранои.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено Ku2zoff 17-12-2021 в 17:20:
Цитата:
Дядя Миша писал:
Если хочешь понять принцип.
Оно не хочется на самом деле, хочется побыстрее скопипастить. Но чем больше я изучаю физику и математику (даже в первом семестре), тем больше понимаю, что кодер без знания матчасти - ноль без палочки.
Отправлено Дядя Миша 17-12-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'
Отправлено Aynekko 17-12-2021 в 18:40:
Цитата:
Ku2zoff писал:
кодер без знания матчасти - ноль без палочки
Истину глаголишь, я тут фонарик ксашмодовский уже пару месяцев пытаюсь пофиксить время от времени, там замуты с матрицами какие-то, а я в этом ничего не понимаю. У каждого мозги под свои задачи заточены, а я уж точно не математик 
__________________
Мой мод на Xash
Отправлено Ku2zoff 18-12-2021 в 10:58:
Цитата:
Дядя Миша писал:
воплощать в коде уже имеющиеся - вполне себе
Всё равно надо разбираться, а не бездумно копипастить.
Цитата:
Aynekko писал:
фонарик ксашмодовский уже пару месяцев пытаюсь пофиксить
Я думаю, что тебе надо поштудировать оптику. Шейдеры же не от балды написаны, а с опорой на реальные физические законы.