Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

239 lines
6.0 KiB

5 years ago
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================//
#include "cbase.h"
#include "fx.h"
#include "c_te_effect_dispatch.h"
#include "c_te_legacytempents.h"
#include "tempent.h"
#include "c_te_basebeam.h"
#include "iviewrender_beams.h"
#include "c_baseplayer.h"
#include "beam_shared.h"
#define GAUSS_GLOW_SPRITE "sprites/hotglow.vmt"
#define GAUSS_BEAM_SPRITE "sprites/smoke.vmt"
int m_nGlowIndex;
int m_nBeamIndex;
void PrecacheGaussEffects(void *pUser)
{
m_nGlowIndex = modelinfo->GetModelIndex( GAUSS_GLOW_SPRITE );
m_nBeamIndex = modelinfo->GetModelIndex( GAUSS_BEAM_SPRITE );
}
PRECACHE_REGISTER_FN(PrecacheGaussEffects);
void HL1GaussBeam( const CEffectData &data )
{
// beam expects ent + attach to be encoded in the entity index (legacy system)
int nStartEntity = data.entindex() | ((1 & 0xF)<<12);
C_BaseEntity * pEnt = cl_entitylist->GetEnt( BEAMENT_ENTITY(nStartEntity) );
if ( !pEnt->IsPlayer() )
return;
C_BasePlayer * pPlayer = static_cast<C_BasePlayer*>(pEnt);
int nStartAttachment = -1;
if ( pPlayer->IsLocalPlayer() )
{
nStartEntity = pPlayer->GetViewModel()->entindex();
}
else
{
if ( !pPlayer->GetActiveWeapon() ) // TODO : make sure we have the gauss gun
return;
nStartEntity = pPlayer->GetActiveWeapon()->entindex();
nStartAttachment = 2;
}
nStartEntity |= ((1 & 0xF)<<12);
Vector vecEndPoint = data.m_vOrigin;
bool fIsPrimaryFire = data.m_fFlags;
float flStartWidth;
float flEndWidth;
color32 beamColor;
if ( fIsPrimaryFire ) // primary attack
{
flStartWidth = 1.0;
flEndWidth = 1.0;
beamColor.r = 255;
beamColor.g = 255;
beamColor.b = 0;
beamColor.a = 255;
}
else // secondary
{
flStartWidth = 2.5;
flEndWidth = 2.5;
beamColor.r = 255;
beamColor.g = 255;
beamColor.b = 255;
beamColor.a = 255;
}
beams->CreateBeamEntPoint(
nStartEntity, // start ent
NULL, // start pos
0, // end ent
&vecEndPoint, // end pos
m_nBeamIndex, // model index
NULL, // halo index
0.0, // halo scale
0.1, // life
flStartWidth, // startwidth
flEndWidth, // endwidth
0.0, // fade length
0, // amplitude
beamColor.a, // brightness
0, // speed
0, // startframe
0, // framerate
beamColor.r, // R
beamColor.g, // G
beamColor.b // B
);
//ADRIANHL1MP
}
DECLARE_CLIENT_EFFECT( "HL1GaussBeam", HL1GaussBeam );
void HL1GaussBeamReflect( const CEffectData &data )
{
Vector vecStartPoint = data.m_vStart;
Vector vecEndPoint = data.m_vOrigin;
bool fIsPrimaryFire = data.m_fFlags;
float flStartWidth;
float flEndWidth;
color32 beamColor;
if ( fIsPrimaryFire ) // primary attack
{
flStartWidth = 1.0;
flEndWidth = 1.0;
beamColor.r = 255;
beamColor.g = 255;
beamColor.b = 0;
beamColor.a = 255;
}
else // secondary
{
flStartWidth = 2.5;
flEndWidth = 2.5;
beamColor.r = 255;
beamColor.g = 255;
beamColor.b = 255;
beamColor.a = 255;
}
beams->CreateBeamPoints(
vecStartPoint, // start pos
vecEndPoint, // end pos
m_nBeamIndex, // model index
NULL, // halo index
0.0, // halo scale
0.1, // life
flStartWidth, // startwidth
flEndWidth, // endwidth
0.0, // fade length
0, // amplitude
beamColor.a, // brightness
0, // speed
0, // startframe
0, // framerate
beamColor.r, // R
beamColor.g, // G
beamColor.b // B
);
}
DECLARE_CLIENT_EFFECT( "HL1GaussBeamReflect", HL1GaussBeamReflect );
void HL1GaussReflect( const CEffectData &data )
{
Vector vecStart = data.m_vOrigin;
Vector vecNormal = data.m_vNormal;
float flMagnitude = data.m_flMagnitude;
tempents->TempSprite( vecStart, vec3_origin, 0.2, m_nGlowIndex, kRenderGlow, kRenderFxNoDissipation, flMagnitude / 255.0, flMagnitude * 0.05, FTENT_FADEOUT );
Vector vecForward;
VectorAdd( vecStart, vecNormal, vecForward );
tempents->Sprite_Trail( vecStart, vecForward, m_nGlowIndex, 3, 0.1, random->RandomFloat( 0.1, 0.2 ), 100, 255, 100 );
}
DECLARE_CLIENT_EFFECT( "HL1GaussReflect", HL1GaussReflect );
void HL1GaussWallPunchEnter( const CEffectData &data )
{
Vector vecStart = data.m_vOrigin;
Vector vecNormal = data.m_vNormal;
Vector vecForward;
VectorSubtract( vecStart, vecNormal, vecForward );
tempents->Sprite_Trail( vecStart, vecForward, m_nGlowIndex, 3, 0.1, random->RandomFloat( 0.1, 0.2 ), 100, 255, 100 );
}
DECLARE_CLIENT_EFFECT( "HL1GaussWallPunchEnter", HL1GaussWallPunchEnter );
void HL1GaussWallPunchExit( const CEffectData &data )
{
Vector vecStart = data.m_vOrigin;
Vector vecNormal = data.m_vNormal;
float flMagnitude = data.m_flMagnitude;
tempents->TempSprite( vecStart, vec3_origin, 0.1, m_nGlowIndex, kRenderGlow, kRenderFxNoDissipation, flMagnitude * 1.2 / 255.0, 6.0, FTENT_FADEOUT );
Vector vecForward;
VectorSubtract( vecStart, vecNormal, vecForward );
tempents->Sprite_Trail( vecStart, vecForward, m_nGlowIndex, flMagnitude * 0.3, 0.1, random->RandomFloat( 0.1, 0.2 ), 200, 255, 40 );
}
DECLARE_CLIENT_EFFECT( "HL1GaussWallPunchExit", HL1GaussWallPunchExit );
void HL1GaussWallImpact1( const CEffectData &data )
{
Vector vecStart = data.m_vOrigin;
float flMagnitude = data.m_flMagnitude;
tempents->TempSprite( vecStart, vec3_origin, 1, m_nGlowIndex, kRenderGlow, kRenderFxNoDissipation, flMagnitude / 255.0, 6.0, FTENT_FADEOUT );
}
DECLARE_CLIENT_EFFECT( "HL1GaussWallImpact1", HL1GaussWallImpact1 );
void HL1GaussWallImpact2( const CEffectData &data )
{
Vector vecStart = data.m_vOrigin;
Vector vecNormal = data.m_vNormal;
tempents->TempSprite( vecStart, vec3_origin, 0.2, m_nGlowIndex, kRenderGlow, kRenderFxNoDissipation, 240.0 / 255.0, 0.3, FTENT_FADEOUT );
Vector vecForward;
VectorAdd( vecStart, vecNormal, vecForward );
tempents->Sprite_Trail( vecStart, vecForward, m_nGlowIndex, 8, 0.6, random->RandomFloat( 0.1, 0.2 ), 100, 255, 200 );
}
DECLARE_CLIENT_EFFECT( "HL1GaussWallImpact2", HL1GaussWallImpact2 );