[HL]Лужица крови
Добрый вечер
ДУмаю все играли в HLFX 0.5 Beta?
Ну дак вот. Помните там после смерти барника(да и не только
) растекалась лужица крови? Вот сейчас мы ее и сделаем!
Сначала создадим функцию увиличения размера спрайта. Зайдем в effects.h и найдем там
Нашли? Отлично!
в public вписываем:
Дальше идем в effects.cpp и ищем функцию
после этой функции пишем две новых
Дальше идем в combat.cpp и ищем функцию
в ней после
вписываем
Дальше идем в world.cpp и ищем
после этого вставляем
Все! Заходим в игру. Убиваем кого-нибудь и видем как под NPC растекаеться лужа 
Ах да. Если вы хотите изменить скорость растекания и максимальный размер спрайта, то поиграйтесь с параметрами
0.05 - скорость увеличения
0 - скорость затемнения
0.4 - максимальный размер
Спрайт в аттаче.
Добрый вечер
ДУмаю все играли в HLFX 0.5 Beta?
Ну дак вот. Помните там после смерти барника(да и не только
Сначала создадим функцию увиличения размера спрайта. Зайдем в effects.h и найдем там
Код:
class CSprite : public CPointEntity
в public вписываем:
Код:
void EXPORT ExpandScaledThink( void );
void ExpandScaled( float scaleSpeed, float fadeSpeed, float MaxScale );
Код:
void CSprite::Precache( void )
Код:
void CSprite::ExpandScaled( float scaleSpeed, float fadeSpeed, float MaxScale )
{
pev->speed = scaleSpeed;
pev->health = fadeSpeed;
pev->dmg = MaxScale;//sys
SetThink( ExpandScaledThink );
pev->nextthink = gpGlobals->time;
m_lastTime = gpGlobals->time;
}
void CSprite::ExpandScaledThink( void )
{
float frametime = gpGlobals->time - m_lastTime;
pev->scale += pev->speed * frametime;
pev->renderamt -= pev->health * frametime;
if ( pev->renderamt <= 0 )
{
pev->renderamt = 0;
UTIL_Remove( this );
}
else
{
if (pev->scale >= pev->dmg)
SetThink (NULL);
else
pev->nextthink = gpGlobals->time + 0.1;
m_lastTime = gpGlobals->time;
}
}
Код:
void CBaseMonster :: Killed( entvars_t *pevAttacker, int iGib )
Код:
if (pev->health < -99)
{
pev->health = 0;
}
Код:
Vector vecEndPos;
TraceResult tr;
vecEndPos = pev->origin;
UTIL_TraceLine ( vecEndPos, vecEndPos + gpGlobals->v_up *21, ignore_monsters, ENT(pev), &tr);
CBaseEntity *pEntity = CBaseEntity::Instance(tr.pHit);
float flDist = (pEntity->Center() - pev->origin).Length();
if ( pEntity->IsBSPModel() )
{
CSprite *pSprite = CSprite::SpriteCreate( "sprites/bloodspot.spr", tr.vecEndPos + Vector ( 0, 0, -20 ), TRUE );
if ( m_bloodColor == BLOOD_COLOR_RED )
pSprite->SetTransparency( kRenderTransAlpha, 255, 0, 0, 255, kRenderFxNone );
else
pSprite->SetTransparency( kRenderTransAlpha, 0, 255, 10, 255, kRenderFxNone );
pSprite->SetScale( 0.05);
pSprite->pev->frame = 0;
pSprite->ExpandScaled( 0.05, 0, 0.4 );
pSprite->pev->angles.z += RANDOM_LONG(-180,180);
pSprite->pev->angles.y += 90;
pSprite->pev->angles.x += 90;
}
else
{
ALERT ( at_console, "Not BSP Model");
}
Код:
PRECACHE_SOUND("common/null.wav");
Код:
PRECACHE_MODEL ("sprites/bloodspot.spr");
Ах да. Если вы хотите изменить скорость растекания и максимальный размер спрайта, то поиграйтесь с параметрами
Код:
pSprite->ExpandScaled( 0.05, 0, 0.4 );
0 - скорость затемнения
0.4 - максимальный размер
Спрайт в аттаче.
Вложения
-
10.4 КБ Просмотров: 431
-
62.7 КБ Просмотров: 1 913
Последнее редактирование:
