summaryrefslogtreecommitdiff
path: root/game/client/hl1/hl1_fx_gauss.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/client/hl1/hl1_fx_gauss.cpp')
-rw-r--r--game/client/hl1/hl1_fx_gauss.cpp238
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 );
+