234 lines
No EOL
5.1 KiB
C++
234 lines
No EOL
5.1 KiB
C++
//-----------------------------------------------------------------------------
|
|
//
|
|
// $Logfile:: /Quake 2 Engine/Sin/code/game/sniperrifle.cpp $
|
|
// $Revision:: 28 $
|
|
// $Author:: Jimdose $
|
|
// $Date:: 3/12/99 8:15p $
|
|
//
|
|
// Copyright (C) 1998 by Ritual Entertainment, Inc.
|
|
// All rights reserved.
|
|
//
|
|
// This source is may not be distributed and/or modified without
|
|
// expressly written permission by Ritual Entertainment, Inc.
|
|
//
|
|
// $Log:: /Quake 2 Engine/Sin/code/game/sniperrifle.cpp $
|
|
//
|
|
// 28 3/12/99 8:15p Jimdose
|
|
// made weapons fire 1/10th of a second sooner on clients
|
|
//
|
|
// 27 3/02/99 9:15p Aldie
|
|
// Added CTF game code
|
|
//
|
|
// 2 2/16/99 4:09p Aldie
|
|
//
|
|
// 1 2/11/99 1:39p Aldie
|
|
//
|
|
// 26 11/13/98 3:30p Markd
|
|
// put in more precaching on weapons
|
|
//
|
|
// 25 10/10/98 5:58p Aldie
|
|
// More quantumdestab fixes
|
|
//
|
|
// 24 8/14/98 6:19p Aldie
|
|
// Tweaked damage setting
|
|
//
|
|
// 23 8/06/98 10:53p Aldie
|
|
// Added weapon tweaks and kickback. Also modified blast radius damage and
|
|
// rocket jumping.
|
|
//
|
|
// 22 8/01/98 3:24p Aldie
|
|
// Added server effects flag for specific weapons
|
|
//
|
|
// 21 7/23/98 6:36p Aldie
|
|
// Increase damage
|
|
//
|
|
// 20 7/22/98 9:57p Markd
|
|
// Defined weapon type
|
|
//
|
|
// 19 7/21/98 1:10p Aldie
|
|
// Added meansofdeath to obituaries
|
|
//
|
|
// 18 7/10/98 12:05a Aldie
|
|
// Added autochange support
|
|
//
|
|
// 17 6/19/98 9:30p Jimdose
|
|
// Moved gun orientation code to Weapon
|
|
//
|
|
// 16 6/17/98 10:55a Aldie
|
|
// Changed back to regular bulletweapon
|
|
//
|
|
// 15 6/15/98 9:10p Aldie
|
|
// Added silenced effect
|
|
//
|
|
// 14 6/10/98 2:10p Aldie
|
|
// Updated damage function.
|
|
//
|
|
// 13 4/20/98 1:57p Markd
|
|
// SINED decelration is now in def file
|
|
//
|
|
// 12 4/18/98 3:13p Markd
|
|
// Changed view weapon naming convention
|
|
//
|
|
// 11 4/09/98 3:26p Jimdose
|
|
// took out sound from shoot since anim plays it
|
|
//
|
|
// 10 4/07/98 6:43p Jimdose
|
|
// Rewrote weapon code.
|
|
// Added order to rank
|
|
//
|
|
// 9 4/06/98 7:10p Aldie
|
|
// Added zooming for SniperRifle
|
|
//
|
|
// 8 4/04/98 6:11p Jimdose
|
|
// Made animation control the sequence of becoming ready to fire
|
|
//
|
|
// 7 4/02/98 4:20p Jimdose
|
|
// Tweaked for DM
|
|
//
|
|
// 6 3/30/98 9:55p Jimdose
|
|
// Changed location of .def files
|
|
//
|
|
// 5 3/30/98 2:37p Jimdose
|
|
// Moved firing to BulletWeapon to make more general
|
|
// Added Ammo
|
|
// Added world models
|
|
//
|
|
// 4 3/27/98 11:03p Jimdose
|
|
// Added muzzle flash
|
|
//
|
|
// 3 3/23/98 1:31p Jimdose
|
|
// Revamped event and command system
|
|
//
|
|
// 2 3/18/98 2:39p Jimdose
|
|
// created file
|
|
//
|
|
// DESCRIPTION:
|
|
// Sniper rifle
|
|
//
|
|
|
|
#include "g_local.h"
|
|
#include "bullet.h"
|
|
#include "sniperrifle.h"
|
|
#include "player.h"
|
|
|
|
CLASS_DECLARATION( BulletWeapon, SniperRifle, "weapon_sniperrifle" );
|
|
|
|
Event EV_SniperRifle_Ready( "sniperrifle_ready" );
|
|
|
|
ResponseDef SniperRifle::Responses[] =
|
|
{
|
|
{ &EV_Weapon_SecondaryUse, ( Response )SniperRifle::SecondaryUse },
|
|
{ &EV_SniperRifle_Ready, ( Response )SniperRifle::DoneRaising },
|
|
{ &EV_Weapon_DoneRaising, ( Response )SniperRifle::Open },
|
|
{ &EV_Weapon_Shoot, ( Response )SniperRifle::Shoot },
|
|
{ NULL, NULL }
|
|
};
|
|
|
|
SniperRifle::SniperRifle()
|
|
{
|
|
SetModels( "sniperrifle.def", "view_srifle.def" );
|
|
SetAmmo( "BulletSniper", 1, 5 );
|
|
modelIndex( "sniper_ammo.def" );
|
|
SetRank( 100, 0 );
|
|
SetType( WEAPON_2HANDED_HI );
|
|
}
|
|
|
|
// CTF - Fire upon release of the weapon
|
|
void SniperRifle::ReleaseFire
|
|
(
|
|
float holdfiretime
|
|
)
|
|
|
|
{
|
|
StopAnimating();
|
|
RandomAnimate( "releasefire", EV_Weapon_DoneFiring );
|
|
last_animation_time = ( level.framenum + 1 ) * FRAMETIME;
|
|
}
|
|
|
|
void SniperRifle::Shoot
|
|
(
|
|
Event *ev
|
|
)
|
|
|
|
{
|
|
assert( owner );
|
|
if ( !owner )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if ( ctf->value )
|
|
{
|
|
// CTF - kill the target
|
|
FireBullets( 1, vec_zero, 10000, 10000, DAMAGE_BULLET|DAMAGE_NO_ARMOR, MOD_SNIPER, false );
|
|
}
|
|
else if ( deathmatch->value )
|
|
{
|
|
FireBullets( 1, vec_zero, 105, 135, DAMAGE_BULLET|DAMAGE_NO_ARMOR, MOD_SNIPER, false );
|
|
}
|
|
else
|
|
{
|
|
FireBullets( 1, vec_zero, 105, 135, DAMAGE_BULLET, MOD_SNIPER, false );
|
|
}
|
|
|
|
NextAttack( 1.5 );
|
|
}
|
|
|
|
void SniperRifle::DoneRaising
|
|
(
|
|
Event *ev
|
|
)
|
|
|
|
{
|
|
BulletWeapon::DoneRaising( ev );
|
|
}
|
|
|
|
void SniperRifle::Open
|
|
(
|
|
Event *ev
|
|
)
|
|
|
|
{
|
|
RandomAnimate( "open", EV_SniperRifle_Ready );
|
|
}
|
|
|
|
void SniperRifle::SecondaryUse
|
|
(
|
|
Event *ev
|
|
)
|
|
{
|
|
Entity *ent;
|
|
Event *event;
|
|
|
|
event = new Event(EV_Player_ToggleZoomMode);
|
|
ent = ev->GetEntity(1);
|
|
ent->ProcessEvent(event);
|
|
}
|
|
|
|
void SniperRifle::DoneLowering
|
|
(
|
|
Event *ev
|
|
)
|
|
{
|
|
Event *event;
|
|
|
|
assert( owner );
|
|
if ( !owner )
|
|
{
|
|
return;
|
|
}
|
|
|
|
event = new Event( EV_Player_ZoomOut );
|
|
owner->ProcessEvent( event );
|
|
|
|
Weapon::DoneLowering( ev );
|
|
}
|
|
|
|
qboolean SniperRifle::AutoChange
|
|
(
|
|
void
|
|
)
|
|
|
|
{
|
|
return false;
|
|
} |