![]() |
Показать все 46 сообщений этой темы на одной странице |
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=1968)
Брызги воды как в Соусе
Люди. У меня такая бредовая мысля пришла - присобачить к своему моду эффект водяных брызг, как в HL2 например.
Как это сделать?
Это вопрос и вам и мне. Я тоже буду щас на эту тему соображать, но всё-таки очень буду рад любой помощи.
Первый подвопрос, так сказать, - чем будут брызги?
Партиклами? Моделью? Спрайтом? Или комбинираванно всё это юзать?
Как вы думаете, что лучше?
Лучше всего - через TriAPI. Выдираешь текстуру брызг из хл2 и рисуешь квад. Сначала растущий вверх, потом опять падающий вниз (типа, всплеск).
Добавлено 26-09-2009 в 22:35:
Ну и круг на воде - можно просто ориентированным крутящимся спрайтом. Текстура также есть в хл2.
__________________
XaeroX Извини, я немного чайникою ещё...
Для меня слова
MadKing Делай ориентированными спрайтами на сервере. Всплеск - upright-спрайтом, круг на воде - oriented-спрайтом. И плавно уменьшай их прозрачность со временем, а потом удаляй. Круг на воде еще можно крутить через pev->angles.y.
Но вообще эти эффекты надо делать на клиенте. Разбирайся с Triangle API или, на худой конец, с TempEntity.
__________________
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
__________________
MadKing настоящему программисту проще написать процедурный эффект, чем нарисовать модельку.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша ты прав....
Но в идеале лучше знать и уметь это всё.
Ладно поищем ваши ориент-спрайты, но проще и быстрее вы смогли бы это просто тут написать - ка и где это юзать...
Добавлено 28-09-2009 в 05:54:
А... я вспомнил про что вы говорили спрайты, всё с пониманием этого проблем нет....
Добавлено 28-09-2009 в 06:01:
Слушайте, а что если начать с определения утил-функции - сами брызги?
1 | void UTIL_WaterSplash( const Vector &position )//CA |
2 | { |
3 | MESSAGE_BEGIN( MSG_PAS, SVC_TEMPENTITY, position );//Starting message |
4 | WRITE_BYTE( TE_SPRITE );//Type |
5 | WRITE_COORD( position.x );//X |
6 | WRITE_COORD( position.y );//Y |
7 | WRITE_COORD( position.z );//Z |
8 | WRITE_SHORT( g_sModelIndexWaterSplash );//New water splash psevdo_particle |
9 | WRITE_BYTE( 1 ); // scale * 10 |
10 | WRITE_BYTE( 175 ); // brightness |
11 | MESSAGE_END();//That's all. Message end. |
12 | } |
MadKing брызги на сервере траффик жрут.
Но для начала сгодится. Меня смущает что там нету параметров анимации.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Анимация будет, это только пробная версия - её доделаю, протестю, и потом уже анимацию
Что за мод, всё тот же?
MadKing
Да, что это за мод то ? И какие у тебя в моде есть еще фичи ? Посто интресно ?
__________________
Kiss my ass if you don't like my Ford!
------------------------------------------
Game Area51 Update 1
First Person Shooter Released Jul 24, 2017
The game is a 3d shooter with the elements of the quest.
http://button.moddb.com/download/medium/125531.png
(_-=ZhekA=-_) А ну-ка прекращаем оффтоп и личную переписку. Интересно - пиши в ЛС.
__________________
У меня тут вопрос к умным и мудрым:
Как конкретно написать код проверки на столкновение объектов и пуль с водой и где???
Или что нибудь подобное там уже где то есть?
Добавлено 29-09-2009 в 06:00:
Вот скомпилил - без ошибок вроде..
(Ещё бы!! я пока просто объявил и определил 2 основные функции, их ещё не использовал ни где)
Добавлено 29-09-2009 в 06:09:
Пытаюсь в сабачить их юз в CBasePlayer::WaterMove
Мне нужен position типа Vector. У игрока это кто?
MadKing посмотри исходники дождя by BUzer. Там коментарии на русском. Дождь рисуется с помощью ТРИАпи, там есть круги на воде, посмотри как они сделаны, сделай свои, а потом присобачь к ним R_TempSprite, который будет всплеском.
Добавлено 29-09-2009 в 12:40:
Я конечно, сам мог бы это написать, но в последнее время занят маппингом под Sauerbraten, да и до компа мне добираться сейчас долго. На досуге попробую сделать, а то звуки всплесков при попадании в воду есть, а самих всплесков нету =)
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Ku2zoff Дядя Миша подумаю - ща сделаю....
Ku2zoff , Это они где? В исходниках Paranoia? Да?
Добавлено 29-09-2009 в 19:09:
Немножко не понял, кто из них (файл rain.cpp) отвечает за реализацию кругов на воде....
1 | // falling to water? |
2 | int contents = gEngfuncs.PM_PointContents( pmtrace.endpos, NULL ); |
3 | if (contents == CONTENTS_WATER) |
4 | { |
5 | int waterEntity = gEngfuncs.PM_WaterEntity( pmtrace.endpos ); |
6 | if ( waterEntity > 0 ) |
7 | { |
8 | cl_entity_t *pwater = gEngfuncs.GetEntityByIndex( waterEntity ); |
9 | if ( pwater && ( pwater->model != NULL ) ) |
10 | { |
11 | deathHeight = pwater->curstate.maxs[2]; |
12 | } |
13 | else |
14 | { |
15 | gEngfuncs.Con_Printf("Rain error: can't get water entity\n"); |
16 | continue; |
17 | } |
18 | } |
19 | else |
20 | { |
21 | gEngfuncs.Con_Printf("Rain error: water is not func_water entity\n"); |
22 | continue; |
23 | } |
24 | } |
25 | else |
26 | { |
27 | deathHeight = pmtrace.endpos[2]; |
28 | } |
MadKing зачем писать что ты опытный кодер, если не понимаешь элементарных вещей?
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша я уже говорил, что ТриАПИ я раньше не занимался.
Оружие, монстры, impulse коды - это да, на это у меня опыт есть, а вот на модинг движка - только чайник я..
Ты мне скажи это здесь или не здесь?
Добавлено 30-09-2009 в 05:16:
Не, я просто хочу понять....
1 | void WaterLandingEffect(cl_drip *drip) |
2 | { |
3 | if (fxcounter >= MAXFX) |
4 | { |
5 | gEngfuncs.Con_Printf( "Rain error: FX limit overflow!\n" ); |
6 | return; |
7 | } |
8 | cl_rainfx *newFX = g_fxArray.Allocate(); |
9 | if (!newFX) |
10 | { |
11 | gEngfuncs.Con_Printf( "Rain error: failed to allocate FX object!\n"); |
12 | return; |
13 | } |
14 | newFX->alpha = gEngfuncs.pfnRandomFloat(0.6, 0.9); |
15 | VectorCopy(drip->origin, newFX->origin); |
16 | newFX->origin[2] = drip->minHeight; // correct position |
17 |
18 | newFX->birthTime = gEngfuncs.GetClientTime(); |
19 | newFX->life = gEngfuncs.pfnRandomFloat(0.7, 1); |
20 | fxcounter++; |
21 | } |
if (fxcounter >= MAXFX) |
{ |
gEngfuncs.Con_Printf( "Rain error: FX limit overflow!\n" ); |
return; |
} |
1 | cl_rainfx *newFX = g_fxArray.Allocate(); |
2 | if (!newFX) |
3 | { |
4 | gEngfuncs.Con_Printf( "Rain error: failed to allocate FX object!\n"); |
5 | return; |
6 | } |
newFX->alpha = gEngfuncs.pfnRandomFloat(0.6, 0.9); |
VectorCopy(drip->origin, newFX->origin); |
newFX->origin[2] = drip->minHeight; // correct position |
newFX->birthTime = gEngfuncs.GetClientTime(); |
newFX->life = gEngfuncs.pfnRandomFloat(0.7, 1); |
fxcounter++; |
Брызги можно и маппингом сделать, поставить над водой кучу триггеров (чтобы брызги были не в одном месте, а по всей воде), прикосновение к одному из них приводит к появлению 2-х спрайтов, один - круг, другой - всплеск.
А FX означает effects.
SiPlus , лучше кодом сделать тоже самое.
Добавлено 30-09-2009 в 12:34:
Всё скомпили, всё без ошибок, но, опять же, ни где не мелькают нужные функции. Куда надо вставить функции?
ЗЫ:Может Бузер не будет против и я просто перейду на паранойу???
Бузер против не будет я думаю. Остальные вообще никакого разрешения не спрашивали.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Хорошо, попробую, перейду...
Тока у меня вроде с первого же раза, как я его скачал, потекли какие то ошибки. Не знаю, может я и со спиритом спутал...
Ну вообщем Try'ну.
Извиняюсь за подъём темы, но у меня похожий вопрос.
Как определить момент, когда любая энтити ударяется о воду?
У воды SOLID_NOT стоит и Touch не срабатывает(
Единственно что приходит мне в голову - в StartFrame перебирать все энтити и проверять вода или нет, но это как-то фигово(
Может можно как-то похимичить с solid'ами ?
PomanoB, а если каждый кадр проверять pev->waterlevel ?
Или же через
UTIL_PointContents( Vector origin ) == CONTENTS_WATER
Правда если объект не точечный, то лучше использовать UTIL_WaterLevel
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Я и говорю, что придумал только каждый кадр проверять, но нагрузка ведь будет сильная перебрать все энтити
И разве pev->waterlevel работает для не игроков?
PomanoB Проверь, ведь лучше чем спрашивать и ждать ответа.
__________________
Base Defense on Steam, ModDB
Проверил, pev->waterlevel для не игроков работает)
На глаз вроде не особо сильная нагрузка, но хотелось бы способ лучше(
По поводу кода
PomanoB, объясни что ты хочешь сделать и как. потому что что бы дать тебе совет нужно хотя бы представлять, что ты в конечном счете хочешь получить.
Нагрузки никакой не будет, так как там и так каждый кадр вызывается тчинк функция у каждой энтити и еще пара сотен разных функций и параметров.
Как вариант можешь использовать для проверки столкновений не внешние энтити, а саму воду.
__________________
Вся сила лысого кощея,
Сокрыта в башне из костей
Воздвигнутой, под небесами
На месте похорон людей
Я хочу сделать брызги при падении любого объекта в воду)
И think-то вызывается не каждый кадр а после pev->nextthink
[qoute]Как вариант можешь использовать для проверки столкновений не внешние энтити, а саму воду.[/quote]
Это как ?
В think'е воды искать ентити в радиусе?
Примерно так:
function Water:Touch(ent) --прикосновение, ent - прикоснувшаяся энтитя
local Splash = ents.Create("env_sprite") --создает всплеск
Splash:SetKeyValue("sprite","спрайт всплеска") --задает параметр энтити, точно не знаю, как называется параметр, отвечающий за файл спрайта
Splash:SetPos(Vector(ent:GetPos().x,ent:GetPos().y,self:GetPos().z + self:Height())) --устанавливает местоположение спрайта, X и Y это позиция прикоснувшейся энтити, Z это местоположение воды + ее уровень
Splash:Spawn() --создает всплеск
Splash:Activate() --активирует его
timer.Simple(0.5,function() Splash:Remove() end) --удаляет всплеск через 0.5с
end
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша, ну если SOLID_NONE и карта своя, то можно попробовать какой-нибудь trigger_water создать, который делает всплески, и разместить его по всей поверхности воды. Там, где в воду ничего не падает, можно этот триггер и не делать.
SiPlus ну ты представь себе что SOLID_TRIGGER трасса игнорирует точно также как и SOLID_NOT. Хоть на своей карте, хоть на чужой.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Некий Festern писал на half-life.ru
__________________
Base Defense on Steam, ModDB
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша Да, зато будет работать с энтити. Лучше чем возня с триггерами ИМХО.
__________________
Base Defense on Steam, ModDB
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Всем спасибо за ответы, сделал перебором и проверкой waterlevel
PomanoB еще рекомендую код XDM к изучению на предмет ватер-сплешей на мировой воде.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Спасибо! Посмотрю
Временная зона GMT. Текущее время 15:34. | Показать все 46 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024