HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Помогите немного( а может и много ) (https://hlfx.ru/forum/showthread.php?threadid=3446)
Отправлено ONeiLL 29-05-2012 в 16:49:
Помогите немного( а может и много )
Я вот сегодня утром быстренько наклепал код
C++ Source Code:
1 | void CBaseEntity::FireBulletsWater( Vector vecSrc, Vector vecEnd ) |
3 | if( ( POINT_CONTENTS( vecEnd ) == CONTENTS_WATER && POINT_CONTENTS( vecSrc ) == CONTENTS_WATER ) |
4 | || POINT_CONTENTS( vecEnd ) != CONTENTS_WATER && POINT_CONTENTS( vecSrc ) != CONTENTS_WATER ) |
7 | // Ищем растояние между vecSrc и vecEnd |
8 | float x = vecEnd.x - vecSrc.x; |
9 | float y = vecEnd.y - vecSrc.y; |
10 | float z = vecEnd.z - vecSrc.z; |
11 | float len = sqrt( x * x + y * y + z * z ); |
14 | Vector vecTemp = Vector( ( vecEnd.x + vecSrc.x ) / 2, ( vecEnd.y + vecSrc.y ) / 2, ( vecEnd.z + vecSrc.z ) / 2 ); |
18 | UTIL_Ricochet( vecTemp, 1 ); // Только не смейтесь =) |
19 | // За место этого надо рисовать брызги |
23 | if( POINT_CONTENTS( vecTemp ) == POINT_CONTENTS( vecEnd ) ) |
24 | FireBulletsWater( vecSrc, vecTemp ); |
26 | FireBulletsWater( vecTemp, vecEnd ); |
Эта функция методом бсп поиска находит точку соприкосновения пули с поверхностью воды (находит правильно, и даёт ошибку не больше чем на 0.5 юнита). Но у меня всегда были проблемы с эффектами, и я не могу до конца доделать 
Подскажите, как лутше всё организовать, как отрисовать эти самые брызги и т.д. Можно всё расказать на словах, не обязательно на коде
Отправлено XaeroX 29-05-2012 в 16:54:
TE_STREAKSPLASH
Отправлено ONeiLL 29-05-2012 в 17:25:
// coord coord coord (start position)
// coord coord coord (direction vector)
// byte (color)
// short (count)
// short (base speed)
// short (ramdon velocity)
Смущают две последние строчки, как это:
базовая скорость и рандомная скорость ????
Добавлено 29-05-2012 в 20:25:
C++ Source Code:
1 | void UTIL_Splash( const Vector &position, const Vector &direction, short count, short speed, short randspeed ) |
3 | MESSAGE_BEGIN( MSG_PVS, SVC_TEMPENTITY, position ); |
5 | WRITE_BYTE( TE_STREAK_SPLASH ); |
7 | WRITE_COORD( position.x ); |
8 | WRITE_COORD( position.y ); |
9 | WRITE_COORD( position.z ); |
11 | WRITE_COORD( direction.x ); |
12 | WRITE_COORD( direction.y ); |
13 | WRITE_COORD( direction.z ); |
22 | WRITE_SHORT( randspeed ); |
Но при вызове эта шняга кидает такое:
BAD: 73:svc_bad
Host_Error: CL_ParseServerMessage: Illegible server message - svc_ba
Отправлено Дядя Миша 29-05-2012 в 17:53:
Цитата:
ONeiLL писал:
Эта функция методом бсп поиска находит точку соприкосновения пули с поверхностью воды
не BSP. Просто бинарным 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ONeiLL 29-05-2012 в 17:55:
А какая разница?
Отправлено XaeroX 29-05-2012 в 17:57:
Цитата:
ONeiLL писал:
// byte (color)
Написано же - цвет это ОДИН байт. Зачем ты целых три шлёшь?
В данном случае это индекс из палитры. Индекс синего не помню, но он там точно есть, я юзал когда-то.
Отправлено ONeiLL 29-05-2012 в 18:38:
Эх, криво получается, я наверно лутше напишу сам этот эффект, опираясь на тутор от кутузова
Добавлено 29-05-2012 в 21:38:
З.Ы спасибо Хавку, что напомнил мне про это =)
Отправлено ONeiLL 30-05-2012 в 07:12:
Ладно, вроде получилась, у кого есть подходящие спрайты?
Отправлено Lev 30-05-2012 в 09:36:
Может в хл2 есть
Отправлено ONeiLL 30-05-2012 в 09:51:
Я искал, нашол, но мне нужен анимированый, а с такими вещами как фотошоп и т.д я не дружу 
Отправлено Lev 30-05-2012 в 09:52:
А ты на обычном хл сдк делаешь или на спирите?
Отправлено ONeiLL 30-05-2012 в 09:55:
Обычный
Отправлено Lev 30-05-2012 в 10:02:
А с фанк ватер твой способ определения работает?
Отправлено ONeiLL 30-05-2012 в 10:06:
да
Добавлено 30-05-2012 в 13:06:
Только лутше зделать по другому, вот так:
C++ Source Code:
1 | void CBaseEntity::FireBulletsWater( Vector vecSrc, Vector vecEnd ) |
3 | if( ( POINT_CONTENTS( vecEnd ) == CONTENTS_WATER && POINT_CONTENTS( vecSrc ) == CONTENTS_WATER ) |
4 | || ( POINT_CONTENTS( vecEnd ) != CONTENTS_WATER && POINT_CONTENTS( vecSrc ) != CONTENTS_WATER ) ) |
7 | // Ищем растояние между vecSrc и vecEnd |
8 | float x = vecEnd.x - vecSrc.x; |
9 | float y = vecEnd.y - vecSrc.y; |
10 | float z = vecEnd.z - vecSrc.z; |
11 | float len = sqrt( x * x + y * y + z * z ); |
14 | Vector vecTemp = Vector( ( vecEnd.x + vecSrc.x ) / 2, ( vecEnd.y + vecSrc.y ) / 2, ( vecEnd.z + vecSrc.z ) / 2 ); |
22 | if( POINT_CONTENTS( vecTemp ) != POINT_CONTENTS( vecSrc ) ) |
23 | FireBulletsWater( vecSrc, vecTemp ); |
25 | FireBulletsWater( vecTemp, vecEnd ); |
Отправлено Lev 30-05-2012 в 10:22:
У меня есть один убогий спрайт - вот
Отправлено ONeiLL 30-05-2012 в 10:49:
ух
Спасибо, уже хоть что нибудь
Добавлено 30-05-2012 в 13:49:
Мдя, спрайт реально убогий, может тут найдётся фотошопер?
В аттаче два изображения, их надо зделать анимироваными, чтобы splash1.tga расширялся, а splash3.tga рос сначала вверх, а потом назад ставал маленьким. Если получится красиво, обещаю что выложу тутор =)
Отправлено Lev 30-05-2012 в 18:11:
Не очень правда - но можно и подправить
Отправлено ONeiLL 30-05-2012 в 18:15:
Спасибо!!! Нормально, сойдёт наверно ))
Отправлено Jimmy C. 30-05-2012 в 18:17:
ONeiLL в Sven coop есть точно такая же фишка, ковырни спрайты оттуда
__________________
Все что делает маппер, программист делает в движке, поскольку ему лень. ©Дядя Миша

Отправлено Lev 30-05-2012 в 18:17:
Вот если что исходные кадры
Отправлено ONeiLL 30-05-2012 в 19:41:
Блин, как заставить спрайт смотреть вверх ???
Отправлено Дядя Миша 30-05-2012 в 19:44:
Элементарно, Уотсон. Надо его скомпилить с параметром parallel upright, чота такое. Или facing upright. Различие лишь в том, будет ли спрайт крутиться по ROLL или не будет.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ONeiLL 30-05-2012 в 19:49:
vp_parallel_upright
Отправлено Дядя Миша 30-05-2012 в 19:53:
Оно и для огня годится и для травы. Полезный режым.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ONeiLL 30-05-2012 в 20:00:
А теперь, чтобы просто лежало на воде, какой нужен параметр?
Отправлено Дядя Миша 30-05-2012 в 20:27:
Oriented. И нормаль вверх через VecToAngles.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ONeiLL 01-06-2012 в 17:40:
Скриншоты
http://rghost.ru/38420592
1.3 МБ
Пока не зделал круга на воде, посмотрю, как у дождика бузера зделано =)
Отправлено Дядя Миша 01-06-2012 в 18:22:
Поиск называется просто бинарным, потому что никакое дерево при этом не строится. Ты просто делишь трассу пополам, потом еще раз пополам и так пока не найдешь точку пересечения.
Только в твоем конкретном случае это не работает. Потому что, судя по скриншотам брызги рисуются на дне, как минимум в половине случаев.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ONeiLL 01-06-2012 в 18:25:
Это тебе кажется
Отправлено Дядя Миша 01-06-2012 в 18:26:
Хех. Ну значит с сортировкой какие-то проблемы. Потому что выглядит именно так.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ONeiLL 01-06-2012 в 18:27:
Аа, я понял. Просто я поставил флаг FTENT_GRAVITY
и спрайт опускается
Отправлено Ku2zoff 01-06-2012 в 18:29:
ONeiLL видио давай! На скринах и впрямь кажется, что брызги рисуются в конечной точке трейса. Или скрины на непрозрачной воде сделай.
Отправлено ONeiLL 01-06-2012 в 18:32:
Потом видео зделаю. Вот сейчас убрал флаг FTENT_GRAVITY.
Вот как:
Отправлено Ku2zoff 01-06-2012 в 18:34:
ONeiLL лолшто? Брызги при стрельбе из-под воды? Кхм, сделай проверку на то, находится ли начальная точка трейса под водой.
Отправлено ONeiLL 01-06-2012 в 18:36:
вложение
Добавлено 01-06-2012 в 21:36:
Ku2zoff , я специально это зделал
Отправлено Дядя Миша 01-06-2012 в 18:41:
самые хорошие брызги в Quake 2 Evolved 0.40
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ONeiLL 01-06-2012 в 18:44:
Лень качать 
Отправлено ONeiLL 02-06-2012 в 10:27:
Кстать, хотел спросить, откуда ты знаеш про эти параметры у спрайтов? Можеш кинуть статейку?
Отправлено Дядя Миша 02-06-2012 в 10:47:
Цитата:
ONeiLL писал:
Кстать, хотел спросить, откуда ты знаеш про эти параметры у спрайтов?
да я тут совершенно случайно Xash3D написал. Если бы не это - нипочем бы не узнал.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ONeiLL 02-06-2012 в 11:55:
pTemp->entity.angles = UTIL_VecToAngles( Vector( x, y, z + 10 ) );
Так написал. Стрельнул в воду и получил зависон (
Отправлено Дядя Миша 02-06-2012 в 13:27:
дак у тебе наверное X, Y или Z - NAN 
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ONeiLL 02-06-2012 в 14:05:
А что такое NAN ???
Добавлено 02-06-2012 в 16:35:
Чтобы всем было понятнее
C++ Source Code:
1 | void EV_HLDM_WaterSplash( float x, float y, float z ) |
3 | int iWaterSplash = gEngfuncs.pEventAPI->EV_FindModelIndex ("sprites/effects/splash1.spr"); |
4 | TEMPENTITY *pTemp = gEngfuncs.pEfxAPI->R_TempSprite( Vector( x, y, z + 50 ), |
6 | 0.5, iWaterSplash, kRenderTransAdd, kRenderFxNone, 1.0, 0.5, FTENT_SPRANIMATE | FTENT_FADEOUT | FTENT_COLLIDEKILL ); |
10 | pTemp->fadeSpeed = 90.0; |
11 | pTemp->entity.curstate.framerate = 100.0; |
12 | pTemp->entity.curstate.renderamt = 155; |
13 | pTemp->entity.curstate.rendercolor.r = 255; |
14 | pTemp->entity.curstate.rendercolor.g = 255; |
15 | pTemp->entity.curstate.rendercolor.b = 255; |
18 | iWaterSplash = gEngfuncs.pEventAPI->EV_FindModelIndex ("sprites/effects/splash2.spr"); |
19 | pTemp = gEngfuncs.pEfxAPI->R_TempSprite( Vector( x, y, z ), |
21 | 0.2, iWaterSplash, kRenderTransAdd, kRenderFxNone, 1.0, 0.5, FTENT_SPRANIMATE | FTENT_FADEOUT | FTENT_COLLIDEKILL ); |
25 | pTemp->fadeSpeed = 60.0; |
26 | pTemp->entity.curstate.framerate = 50.0; |
27 | pTemp->entity.curstate.renderamt = 100; |
28 | pTemp->entity.curstate.rendercolor.r = 255; |
29 | pTemp->entity.curstate.rendercolor.g = 255; |
30 | pTemp->entity.curstate.rendercolor.b = 255; |
31 | pTemp->entity.angles = UTIL_VecToAngles( Vector( x, y, z + 10 ) ); |
Добавлено 02-06-2012 в 17:05:
Всё, я зделал, ждите тутора
Отправлено Дядя Миша 02-06-2012 в 14:12:
Цитата:
ONeiLL писал:
А что такое NAN ???
Общеизвестно, что в отличие от целых чисел, числа с плавающей точкой имеют особый внутренний формат хранения. Подробнее см. здесь. Формат этот поддерживается как программно, так и аппаратно, начиная, примерно с 386-процессора. В те времена сопроцессор устанавливался на плату отдельно (и кстати стоил дороже процессора, зараза такая. Хотя на тройках он был зачастую впаян прямо в плату). Легко догадаться что раз есть определенный формат, то завсегда существует некая комбинация, недопустимая для данного формата, в рамках соглашения. Этой комбинацией и является NAN. NAN - это абббревеатурко такое, Not A Number, т.е. - не число.
Обычно возникает, когда переменные забыли проинициализировать и туда записался разный мусор. NAN на самом деле очень серъезная проблема и вот как раз и приводит к зависанию.
Добавлено 02-06-2012 в 18:12:
Вот кстати про NAN.__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ONeiLL 02-06-2012 в 14:13:
Ооо, буду знать
Вот скрин:
Отправлено Дядя Миша 02-06-2012 в 14:19:
ONeiLL ты всё-таки неполенись, скачай Q2 Evolved и зацени ватерсплешы там.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
Цитата:
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Отправлено ONeiLL 02-06-2012 в 15:27:
ок, на днях скачаю
Добавлено 02-06-2012 в 18:27:
http://hlfx.ru/forum/showthread.php...99663#post99663
Это тутор