Sidebar

[HL]Лужица крови

  • Рекомендуется задавать вопросы только относительно темы с уроком. Для остальных вопросов существует раздел [url=/forums/pomosch.12/]«Помощь»[/url].

    Темы с просьбами помощи будут удаляться без предупреждения и без объяснения причины.

    Запрещается поднятие старой темы оффтопом. Ваше сообщение будет удалено, а в профиль будет выписано замечание.

1nfinite

Президент мира
VIP
24.10.2008
1 139
16
[HL]Лужица крови

Добрый вечер :)
ДУмаю все играли в HLFX 0.5 Beta?
Ну дак вот. Помните там после смерти барника(да и не только :)) растекалась лужица крови? Вот сейчас мы ее и сделаем!
Сначала создадим функцию увиличения размера спрайта. Зайдем в effects.h и найдем там
Код:
class CSprite : public CPointEntity
Нашли? Отлично!
в public вписываем:
Код:
void EXPORT ExpandScaledThink( void );
void ExpandScaled( float scaleSpeed, float fadeSpeed, float MaxScale );
Дальше идем в effects.cpp и ищем функцию
Код:
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;
	}

}
Дальше идем в combat.cpp и ищем функцию

Код:
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");
			}
Дальше идем в world.cpp и ищем

Код:
PRECACHE_SOUND("common/null.wav");
после этого вставляем

Код:
PRECACHE_MODEL ("sprites/bloodspot.spr");
Все! Заходим в игру. Убиваем кого-нибудь и видем как под NPC растекаеться лужа :)

Ах да. Если вы хотите изменить скорость растекания и максимальный размер спрайта, то поиграйтесь с параметрами
Код:
pSprite->ExpandScaled( 0.05, 0, 0.4 );
0.05 - скорость увеличения
0 - скорость затемнения
0.4 - максимальный размер

Спрайт в аттаче.
 

Вложения

Последнее редактирование:

qpAHToMAS

Administrator
Команда форума
Администратор
22.10.2006
9 323
33
  • Золотая медаль 215
  • Золотая медаль 152
  • Серебряная медаль 136
  • Золотая медаль 221
Подозреваю что кровь будет "ливитировать" если она будет растекаться на краю какого либо возвышающегося браша :).
Жаль скриншотов нет.
 

1nfinite

Президент мира
VIP
24.10.2008
1 139
16
qpAHToMAS сказал(а):
Подозреваю что кровь будет "ливитировать" если она будет растекаться на краю какого либо возвышающегося браша :).
Угу. Можно попробовать клиппинг сделать :)

Скрин к первому посту прикрепил.
 

qpAHToMAS

Administrator
Команда форума
Администратор
22.10.2006
9 323
33
  • Золотая медаль 215
  • Золотая медаль 152
  • Серебряная медаль 136
  • Золотая медаль 221
Можно кстати попробовать в CS AMXX плагином перенести, вроде проблем не должно быть.
 

CrazyRussian

Устал...
14.01.2010
619
32
66
28
Адрес
qpAHToMAS сказал(а):
Подозреваю что кровь будет "ливитировать" если она будет растекаться на краю какого либо возвышающегося браша :).
Вот поэтому такие вещи надо делать анимированой декалью.
 

FiEctro

Супер Модератор
Команда форума
Супер Модератор
28.07.2006
17 167
33
  • Золотая медаль 213
  • Neh
2 CrazyRussian:
И тащить целый рендер за собой.
 

ку2

New member
08.08.2008
10
0
0
Прикольно... А можно ли в место спрайта сделать прорисовку модели?

Оффтоп
 

Game Server

Доноры Красавчики

Пользователи онлайн

Нет пользователей онлайн.