diff options
Diffstat (limited to 'game/client/hl1/hl1_fx_gauss.cpp')
| -rw-r--r-- | game/client/hl1/hl1_fx_gauss.cpp | 238 |
1 files changed, 238 insertions, 0 deletions
diff --git a/game/client/hl1/hl1_fx_gauss.cpp b/game/client/hl1/hl1_fx_gauss.cpp new file mode 100644 index 0000000..0a9c28c --- /dev/null +++ b/game/client/hl1/hl1_fx_gauss.cpp @@ -0,0 +1,238 @@ +//========= 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 ); + |