weaponshort.cpp #1

  • //
  • guest/
  • andrew_mcdonald/
  • p4hl/
  • src/
  • dlls/
  • weaponshort.cpp
  • View
  • Commits
  • Open Download .zip Download (16 KB)
#include "extdll.h" 
#include "decals.h" 
#include "util.h" 
#include "cbase.h" 
#include "monsters.h" 
#include "weapons.h" 
#include "nodes.h" 
#include "player.h" 
#include "soundent.h" 
#include "shake.h" 
#include "gamerules.h"

#define WEAPON_SHORT 16
#define SHORT_SLOT 1 
#define SHORT_POSITION 0
#define SHORT_WEIGHT 20

#define WEAPON_EXPAND 17
#define EXPAND_SLOT 2
#define EXPAND_POSITION 0
#define EXPAND_WEIGHT 20

#define SHORT_MODEL_1STPERSON "models/v_9mmhandgun.mdl" //models/v_9mmhandgun.mdl
#define SHORT_MODEL_3RDPERSON "models/p_9mmhandgun.mdl" //models/p_9mmhandgun.mdl
#define SHORT_MODEL_WORLD "models/w_battery.mdl" 
#define SHORT_SOUND_SHOOT "weapons/electro5.wav" 
#define SHORT_SOUND_VOLUME 0.25 
#define SHORT_FIRE_DELAY 0.5 // For comparison, glock's is 0.2 

#define EXPAND_MODEL_1STPERSON "models/v_9mmhandgun.mdl"
#define EXPAND_MODEL_3RDPERSON "models/p_9mmhandgun.mdl"
#define EXPAND_MODEL_WORLD "models/w_battery.mdl"
#define EXPAND_SOUND_SHOOT "weapons/electro5.wav"
#define EXPAND_SOUND_VOLUME 0.40
#define EXPAND_FIRE_DELAY 0.5

#define LONG_SOUND_SHOOT "weapons/electro5.wav" 
#define LONG_SOUND_VOLUME 0.30 
#define LONG_FIRE_DELAY 0.5 // For comparison, glock's is 0.2 

#define SHORT_DAMAGE 10
#define SHORT_BEAM_RED 0 
#define SHORT_BEAM_GREEN 0 
#define SHORT_BEAM_BLUE 255 
#define SHORT_BEAM_WIDTH 4 
#define SHORT_BEAM_SPRITE "sprites/smoke.spr" 
#define SHORT_BEAM_BRIGHTNESS 255 // Full. 
#define SHORT_RANGE 8192 // Really long range. 
#define SHORT_OFFSET_FORWARD 0
#define SHORT_OFFSET_RIGHT 0
#define SHORT_OFFSET_UP 0

#define SHORT_BEAM_LENGTH 8 
#define SHORT_BEAM_SPEED 2000

#define LONG_DAMAGE 20
#define LONG_BEAM_RED 0 
#define LONG_BEAM_GREEN 255 
#define LONG_BEAM_BLUE 0 
#define LONG_BEAM_WIDTH 4 
#define LONG_BEAM_SPRITE "sprites/smoke.spr" 
#define LONG_BEAM_BRIGHTNESS 255 // Full. 
#define LONG_RANGE 8192 // Really long range. 
#define LONG_OFFSET_FORWARD 0
#define LONG_OFFSET_RIGHT 0
#define LONG_OFFSET_UP 0

#define LONG_BEAM_LENGTH 8 
#define LONG_BEAM_SPEED 2000

#define EXPAND_DAMAGE 40
#define EXPAND_BEAM_RED 255
#define EXPAND_BEAM_GREEN 0
#define EXPAND_BEAM_BLUE 0
#define EXPAND_BEAM_WIDTH 4
#define EXPAND_BEAM_SPRITE "sprites/smoke.spr"
#define EXPAND_BEAM_BRIGHTNESS 255
#define EXPAND_RANGE 8192
#define EXPAND_OFFSET_FORWARD 0
#define EXPAND_OFFSET_RIGHT 0
#define EXPAND_OFFSET_UP 0

#define EXPAND_BEAM_LENGTH 8
#define EXPAND_BEAM_SPEED 2000

enum Short_Animations 
{ 
	SHORT_ANIM_IDLE1 = 0, 
	SHORT_ANIM_IDLE2, 
	SHORT_ANIM_IDLE3, 
	SHORT_ANIM_SHOOT, 
	SHORT_ANIM_SHOOT_EMPTY, 
	SHORT_ANIM_RELOAD, 
	SHORT_ANIM_RELOAD_NOT_EMPTY, 
	SHORT_ANIM_DRAW, 
	SHORT_ANIM_HOLSTER, 
	SHORT_ANIM_ADD_SILENCER 
};

enum Expand_Animations
{ 
	EXPAND_ANIM_IDLE1 = 0, 
	EXPAND_ANIM_IDLE2, 
	EXPAND_ANIM_IDLE3, 
	EXPAND_ANIM_SHOOT, 
	EXPAND_ANIM_SHOOT_EMPTY, 
	EXPAND_ANIM_RELOAD, 
	EXPAND_ANIM_RELOAD_NOT_EMPTY, 
	EXPAND_ANIM_DRAW, 
	EXPAND_ANIM_HOLSTER, 
	EXPAND_ANIM_ADD_SILENCER 
};

class CWeaponShort : public CBasePlayerWeapon 
{ 
	public:
	int BeamSprite;
	void Spawn( ); 
	void Precache( ); 
	int iItemSlot( ) { return SHORT_SLOT + 1; }
	int GetItemInfo( ItemInfo* ); 
	BOOL Deploy( ); 
	void PrimaryAttack( ); 
	void SecondaryAttack( );
	void WeaponIdle( ); 
}; 
LINK_ENTITY_TO_CLASS( weapon_short, CWeaponShort );

class CWeaponExpand : public CBasePlayerWeapon
{
	public:
	int BeamSprite;
	void Spawn( );
	void Precache( );
	int iItemSlot( ) { return EXPAND_SLOT + 1; }
	int GetItemInfo( ItemInfo* );
	BOOL Deploy( );
	void PrimaryAttack( );
	void SecondaryAttack( );
	void WeaponIdle( );
};
LINK_ENTITY_TO_CLASS( weapon_expand, CWeaponExpand );

class CShortBeam : public CGrenade 
{ 
	public: 
	void Spawn( ); 
	void Precache( ); 
	void Move( ); 
	void EXPORT Hit( CBaseEntity* ); 
	void Explode( TraceResult*, int );

	static CShortBeam* Create( Vector, Vector, CBaseEntity* );

	int BeamSprite; 
};

class CLongBeam : public CGrenade
{
	public: 
	void Spawn( ); 
	void Precache( ); 
	void Move( ); 
	void EXPORT Hit( CBaseEntity* ); 
	void Explode( TraceResult*, int );
	BOOL IsLong() {return TRUE;}

	static CLongBeam* Create( Vector, Vector, CBaseEntity* );

	int BeamSprite; 
};

class CExpandBeam : public CGrenade
{
	public:
	void Spawn( );
	void Precache( );
	void Move( );
	void EXPORT Hit( CBaseEntity* );
	void Explode(TraceResult*, int );
	BOOL IsExpand() {return TRUE;}

	static CExpandBeam* Create( Vector, Vector, CBaseEntity* );

	int BeamSprite;
};

void CWeaponShort :: Spawn( ) 
{ 
	pev->classname = MAKE_STRING( "weapon_short" ); 
	Precache( );

	m_iId = WEAPON_SHORT; 
	SET_MODEL( ENT(pev), SHORT_MODEL_WORLD ); 

	FallInit( ); 
}

void CWeaponExpand :: Spawn( )
{
	pev->classname = MAKE_STRING( "weapon_expand" );
	Precache( );

	m_iId = WEAPON_EXPAND;
	SET_MODEL( ENT(pev), EXPAND_MODEL_WORLD );

	FallInit( );
}

void CWeaponShort :: Precache( ) 
{ 
	PRECACHE_MODEL( SHORT_MODEL_1STPERSON ); 
	PRECACHE_MODEL( SHORT_MODEL_3RDPERSON ); 
	PRECACHE_MODEL( SHORT_MODEL_WORLD ); 
	PRECACHE_SOUND( SHORT_SOUND_SHOOT ); 
	BeamSprite = PRECACHE_MODEL( SHORT_BEAM_SPRITE );
}

void CWeaponExpand :: Precache( )
{
	PRECACHE_MODEL( EXPAND_MODEL_1STPERSON );
	PRECACHE_MODEL( EXPAND_MODEL_3RDPERSON );
	PRECACHE_MODEL( EXPAND_MODEL_WORLD );
	PRECACHE_SOUND( EXPAND_SOUND_SHOOT );
	BeamSprite = PRECACHE_MODEL( EXPAND_BEAM_SPRITE );
}

int CWeaponShort :: GetItemInfo( ItemInfo* Info ) 
{ 
	Info->pszName = STRING( pev->classname ); 
	Info->pszAmmo1 = NULL;
	Info->iMaxAmmo1 = -1;
	Info->pszAmmo2 = NULL;
	Info->iMaxAmmo2 = -1;
	Info->iMaxClip = WEAPON_NOCLIP;
	Info->iSlot = SHORT_SLOT;
	Info->iPosition = SHORT_POSITION; 
	Info->iFlags = 0; 
	Info->iId = m_iId = WEAPON_SHORT; 
	Info->iWeight = SHORT_WEIGHT;

	return 1; 
}

int CWeaponExpand :: GetItemInfo( ItemInfo* Info )
{
	Info->pszName = STRING( pev->classname ); 
	Info->pszAmmo1 = NULL;
	Info->iMaxAmmo1 = -1;
	Info->pszAmmo2 = NULL;
	Info->iMaxAmmo2 = -1;
	Info->iMaxClip = WEAPON_NOCLIP;
	Info->iSlot = EXPAND_SLOT;
	Info->iPosition = EXPAND_POSITION; 
	Info->iFlags = 0; 
	Info->iId = m_iId = WEAPON_EXPAND; 
	Info->iWeight = EXPAND_WEIGHT;

	return 1;
}

BOOL CWeaponShort :: Deploy( ) 
{ 
	return DefaultDeploy( 
		"",						//SHORT_MODEL_1STPERSON
		"",						//SHORT_MODEL_3RDPERSON
		SHORT_ANIM_DRAW, 
		"" ); //onehanded or squeak work here
}

BOOL CWeaponExpand :: Deploy( )
{
	return DefaultDeploy(
		"",
		"",
		EXPAND_ANIM_DRAW,
		"" );
}

void CWeaponShort :: PrimaryAttack( ) 
{ 
//	m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); 
//	SendWeaponAnim( SHORT_ANIM_SHOOT );

	EMIT_SOUND_DYN( ENT(m_pPlayer->pev), // Entity sound originates from 
		CHAN_WEAPON, // Channel 
		SHORT_SOUND_SHOOT, // Sound to play 
		SHORT_SOUND_VOLUME, // Volume (0.0 to 1.0) 
		ATTN_NORM, // Attenuation, whatever the hell that is 
		0, // Flags 
		150 ); // Pitch

	m_flNextPrimaryAttack = gpGlobals->time + SHORT_FIRE_DELAY; 
	m_flNextSecondaryAttack = gpGlobals->time + LONG_FIRE_DELAY; 
	m_flTimeWeaponIdle = gpGlobals->time + SHORT_FIRE_DELAY;

	UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle ); 
	Vector GunPosition = m_pPlayer->GetGunPosition( ); 
	GunPosition = GunPosition + gpGlobals->v_forward * SHORT_OFFSET_FORWARD; 
	GunPosition = GunPosition + gpGlobals->v_right * SHORT_OFFSET_RIGHT; 
	GunPosition = GunPosition + gpGlobals->v_up * SHORT_OFFSET_UP; 
	
	CShortBeam* Beam = CShortBeam :: Create( GunPosition, 
                                                 m_pPlayer->pev->v_angle, 
                                                 m_pPlayer );
}

void CWeaponExpand :: PrimaryAttack( )
{
//	m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); 
//	SendWeaponAnim( EXPAND_ANIM_SHOOT );

	EMIT_SOUND_DYN( ENT(m_pPlayer->pev), // Entity sound originates from 
		CHAN_WEAPON, // Channel 
		EXPAND_SOUND_SHOOT, // Sound to play 
		EXPAND_SOUND_VOLUME, // Volume (0.0 to 1.0) 
		ATTN_NORM, // Attenuation, whatever the hell that is 
		0, // Flags 
		150 ); // Pitch

	m_flNextPrimaryAttack = gpGlobals->time + EXPAND_FIRE_DELAY; 
	m_flTimeWeaponIdle = gpGlobals->time + EXPAND_FIRE_DELAY;

	UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle ); 
	Vector GunPosition = m_pPlayer->GetGunPosition( ); 
	GunPosition = GunPosition + gpGlobals->v_forward * EXPAND_OFFSET_FORWARD; 
	GunPosition = GunPosition + gpGlobals->v_right * EXPAND_OFFSET_RIGHT; 
	GunPosition = GunPosition + gpGlobals->v_up * EXPAND_OFFSET_UP; 
	
	CExpandBeam* Beam = CExpandBeam :: Create( GunPosition, 
                                                 m_pPlayer->pev->v_angle, 
                                                 m_pPlayer );
}

void CWeaponExpand :: SecondaryAttack( )  //use this to unwedge self from solid objects
{
	m_pPlayer->pev->origin.z += 100;
	m_flNextSecondaryAttack = gpGlobals->time + 10;
}

void CWeaponShort :: SecondaryAttack( ) 
{ 
//	m_pPlayer->SetAnimation( PLAYER_ATTACK1 ); 
//	SendWeaponAnim( SHORT_ANIM_SHOOT );

	EMIT_SOUND_DYN( ENT(m_pPlayer->pev), // Entity sound originates from 
		CHAN_WEAPON, // Channel 
		LONG_SOUND_SHOOT, // Sound to play 
		LONG_SOUND_VOLUME, // Volume (0.0 to 1.0) 
		ATTN_NORM, // Attenuation, whatever the hell that is 
		0, // Flags 
		150 ); // Pitch

	m_flNextPrimaryAttack = gpGlobals->time + SHORT_FIRE_DELAY; 
	m_flNextSecondaryAttack = gpGlobals->time + LONG_FIRE_DELAY; 
	m_flTimeWeaponIdle = gpGlobals->time + LONG_FIRE_DELAY;

	UTIL_MakeVectors( m_pPlayer->pev->v_angle + m_pPlayer->pev->punchangle ); 
	Vector GunPosition = m_pPlayer->GetGunPosition( ); 
	GunPosition = GunPosition + gpGlobals->v_forward * SHORT_OFFSET_FORWARD; 
	GunPosition = GunPosition + gpGlobals->v_right * SHORT_OFFSET_RIGHT; 
	GunPosition = GunPosition + gpGlobals->v_up * SHORT_OFFSET_UP; 
	
	CLongBeam* Beam = CLongBeam :: Create( GunPosition, 
                                                 m_pPlayer->pev->v_angle, 
                                                 m_pPlayer );
}

void CWeaponShort :: WeaponIdle( ) 
{ 
//	if( m_flTimeWeaponIdle > gpGlobals->time ) 
	return;

//	m_flTimeWeaponIdle = gpGlobals->time + 3.0; 
//	SendWeaponAnim( SHORT_ANIM_IDLE1 ); 
}

void CWeaponExpand :: WeaponIdle( )
{
//	if( m_flTimeWeaponIdle > gpGlobals->time ) 
	return;

//	m_flTimeWeaponIdle = gpGlobals->time + 3.0; 
//	SendWeaponAnim( EXPAND_ANIM_IDLE1 ); 
}

void CShortBeam :: Spawn( ) 
{ 
	Precache( ); 
	SET_MODEL( ENT(pev), "models/rpgrocket.mdl" ); 
	pev->movetype = MOVETYPE_FLY; 
	pev->solid = SOLID_BBOX; 
	pev->rendermode = kRenderTransTexture; 
	pev->renderamt = 0;

	UTIL_SetSize( pev, Vector(-0.1,-0.1,-0.1), Vector(0.1,0.1,0.1) ); 
	UTIL_SetOrigin( pev, pev->origin ); 
	pev->classname = MAKE_STRING( "proj_short" );

	SetThink( Move ); 
	SetTouch( Hit );

	pev->angles.x -= 30; 
	pev->velocity = gpGlobals->v_forward * SHORT_BEAM_SPEED; 
	pev->angles.x = -(pev->angles.x + 30);

	pev->gravity = 0; 
	pev->nextthink = gpGlobals->time + 0.01; 
	pev->dmg = SHORT_DAMAGE;
}

void CLongBeam :: Spawn( ) 
{ 
	Precache( ); 
	SET_MODEL( ENT(pev), "models/rpgrocket.mdl" ); 
	pev->movetype = MOVETYPE_FLY; 
	pev->solid = SOLID_BBOX; 
	pev->rendermode = kRenderTransTexture; 
	pev->renderamt = 0;

	UTIL_SetSize( pev, Vector(0,0,0), Vector(0,0,0) ); 
	UTIL_SetOrigin( pev, pev->origin ); 
	pev->classname = MAKE_STRING( "proj_long" );

	SetThink( Move ); 
	SetTouch( Hit );

	pev->angles.x -= 30; 
	pev->velocity = gpGlobals->v_forward * LONG_BEAM_SPEED; 
	pev->angles.x = -(pev->angles.x + 30);

	pev->gravity = 0; 
	pev->nextthink = gpGlobals->time + 0.01; 
	pev->dmg = LONG_DAMAGE;
}

void CExpandBeam :: Spawn( ) 
{ 
	Precache( ); 
	SET_MODEL( ENT(pev), "models/rpgrocket.mdl" ); 
	pev->movetype = MOVETYPE_FLY; 
	pev->solid = SOLID_BBOX; 
	pev->rendermode = kRenderTransTexture; 
	pev->renderamt = 0;

	UTIL_SetSize( pev, Vector(0,0,0), Vector(0,0,0) ); 
	UTIL_SetOrigin( pev, pev->origin ); 
	pev->classname = MAKE_STRING( "proj_expand" );

	SetThink( Move ); 
	SetTouch( Hit );

	pev->angles.x -= 30; 
	pev->velocity = gpGlobals->v_forward * EXPAND_BEAM_SPEED; 
	pev->angles.x = -(pev->angles.x + 30);

	pev->gravity = 0; 
	pev->nextthink = gpGlobals->time + 0.01; 
	pev->dmg = EXPAND_DAMAGE;
}

void CShortBeam :: Precache( ) 
{ 
	BeamSprite = PRECACHE_MODEL( SHORT_BEAM_SPRITE ); 
	PRECACHE_MODEL( "models/rpgrocket.mdl" ); 
}

void CLongBeam :: Precache( ) 
{ 
	BeamSprite = PRECACHE_MODEL( SHORT_BEAM_SPRITE ); 
	PRECACHE_MODEL( "models/rpgrocket.mdl" ); 
}

void CExpandBeam :: Precache( )
{
	BeamSprite = PRECACHE_MODEL( EXPAND_BEAM_SPRITE );
	PRECACHE_MODEL( "models/rpgrocket.mdl" );
}

void CShortBeam :: Hit( CBaseEntity* Target ) 
{ 
	TraceResult TResult; 
	Vector StartPosition;

	Target->Touch(this);

	pev->enemy = Target->edict( ); 
	StartPosition = pev->origin - pev->velocity.Normalize( ) * 32;

	UTIL_TraceLine( StartPosition, 
		StartPosition + pev->velocity.Normalize() * 64, 
		dont_ignore_monsters, 
		ENT( pev ),		
		&TResult );

	Explode( &TResult, DMG_BLAST ); 
}

void CLongBeam :: Hit( CBaseEntity* Target ) 
{ 
	TraceResult TResult; 
	Vector StartPosition;

	Target->Touch(this);

	pev->enemy = Target->edict( ); 
	StartPosition = pev->origin - pev->velocity.Normalize( ) * 32;

	UTIL_TraceLine( StartPosition, 
		StartPosition + pev->velocity.Normalize() * 64, 
		dont_ignore_monsters, 
		ENT( pev ),		
		&TResult );

	Explode( &TResult, DMG_BLAST ); 
}

void CExpandBeam :: Hit( CBaseEntity* Target )
{
	TraceResult TResult; 
	Vector StartPosition;

	Target->Touch(this);

	pev->enemy = Target->edict( ); 
	StartPosition = pev->origin - pev->velocity.Normalize( ) * 32;

	UTIL_TraceLine( StartPosition, 
		StartPosition + pev->velocity.Normalize() * 64, 
		dont_ignore_monsters, 
		ENT( pev ),		
		&TResult );

	Explode( &TResult, DMG_BLAST ); 
}

void CShortBeam :: Explode( TraceResult* TResult, int DamageType ) 
{ 
/*	RadiusDamage( pev, 
			VARS( pev->owner ), 
			pev->dmg, 
			CLASS_NONE, 
			DamageType );
*/
	if( TResult->fAllSolid ) return;

	UTIL_DecalTrace( TResult, DECAL_GUNSHOT1 );

	SUB_Remove( ); // Delete the beam.
}

void CLongBeam :: Explode( TraceResult* TResult, int DamageType ) 
{ 
/*	RadiusDamage( pev, 
			VARS( pev->owner ), 
			pev->dmg, 
			CLASS_NONE, 
			DamageType );
*/
	if( TResult->fAllSolid ) return;

	UTIL_DecalTrace( TResult, DECAL_GUNSHOT1 );

	SUB_Remove( ); // Delete the beam.
}

void CExpandBeam :: Explode( TraceResult* TResult, int DamageType ) 
{ 
/*	RadiusDamage( pev, 
			VARS( pev->owner ), 
			pev->dmg, 
			CLASS_NONE, 
			DamageType );
*/
	if( TResult->fAllSolid ) return;

	UTIL_DecalTrace( TResult, DECAL_GUNSHOT1 );

	SUB_Remove( ); // Delete the beam.
}

CShortBeam* CShortBeam :: Create( Vector Pos, Vector Aim, CBaseEntity* Owner ) 
{ 
	CShortBeam* Beam = GetClassPtr( (CShortBeam*)NULL ); 
	UTIL_SetOrigin( Beam->pev, Pos ); 
	Beam->pev->angles = Aim; 
	Beam->Spawn( ); 
	Beam->SetTouch( CShortBeam :: Hit ); 
	Beam->pev->owner = Owner->edict( );

	return Beam; 
}

CLongBeam* CLongBeam :: Create( Vector Pos, Vector Aim, CBaseEntity* Owner ) 
{ 
	CLongBeam* Beam = GetClassPtr( (CLongBeam*)NULL ); 
	UTIL_SetOrigin( Beam->pev, Pos ); 
	Beam->pev->angles = Aim; 
	Beam->Spawn( ); 
	Beam->SetTouch( CLongBeam :: Hit ); 
	Beam->pev->owner = Owner->edict( );

	return Beam; 
}

CExpandBeam* CExpandBeam :: Create( Vector Pos, Vector Aim, CBaseEntity* Owner ) 
{ 
	CExpandBeam* Beam = GetClassPtr( (CExpandBeam*)NULL ); 
	UTIL_SetOrigin( Beam->pev, Pos ); 
	Beam->pev->angles = Aim; 
	Beam->Spawn( ); 
	Beam->SetTouch( CLongBeam :: Hit ); 
	Beam->pev->owner = Owner->edict( );

	return Beam; 
}

void CShortBeam :: Move( ) 
{ 
	MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY );

	WRITE_BYTE( TE_BEAMFOLLOW ); 
	WRITE_SHORT( entindex() ); 
	WRITE_SHORT( BeamSprite ); 
	WRITE_BYTE( SHORT_BEAM_LENGTH ); 
	WRITE_BYTE( SHORT_BEAM_WIDTH ); 
	WRITE_BYTE( SHORT_BEAM_RED ); 
	WRITE_BYTE( SHORT_BEAM_GREEN ); 
	WRITE_BYTE( SHORT_BEAM_BLUE ); 
	WRITE_BYTE( SHORT_BEAM_BRIGHTNESS );

	MESSAGE_END( ); 
}

void CLongBeam :: Move( ) 
{ 
	MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY );

	WRITE_BYTE( TE_BEAMFOLLOW ); 
	WRITE_SHORT( entindex() ); 
	WRITE_SHORT( BeamSprite ); 
	WRITE_BYTE( LONG_BEAM_LENGTH ); 
	WRITE_BYTE( LONG_BEAM_WIDTH ); 
	WRITE_BYTE( LONG_BEAM_RED ); 
	WRITE_BYTE( LONG_BEAM_GREEN ); 
	WRITE_BYTE( LONG_BEAM_BLUE ); 
	WRITE_BYTE( LONG_BEAM_BRIGHTNESS );

	MESSAGE_END( ); 
}

void CExpandBeam :: Move( ) 
{ 
	MESSAGE_BEGIN( MSG_BROADCAST, SVC_TEMPENTITY );

	WRITE_BYTE( TE_BEAMFOLLOW ); 
	WRITE_SHORT( entindex() ); 
	WRITE_SHORT( BeamSprite ); 
	WRITE_BYTE( EXPAND_BEAM_LENGTH ); 
	WRITE_BYTE( EXPAND_BEAM_WIDTH ); 
	WRITE_BYTE( EXPAND_BEAM_RED ); 
	WRITE_BYTE( EXPAND_BEAM_GREEN ); 
	WRITE_BYTE( EXPAND_BEAM_BLUE ); 
	WRITE_BYTE( EXPAND_BEAM_BRIGHTNESS );

	MESSAGE_END( ); 
}
# Change User Description Committed
#1 7292 Andrew McDonald initial submittal
//guest/sam_stafford/p4hl/src/dlls/weaponshort.cpp
#1 937 Sam Stafford Renaming my guest directory to the more conventional
sam_stafford.
//guest/samwise/p4hl/src/dlls/weaponshort.cpp
#1 936 Sam Stafford Adding P4HL to the public depot.
 See relnotes.txt for
installation instructions; all relevant files are under
p4hl/dist.

Source code is under p4hl/src in the form of a VC++ project.