UnrealI
Class Rifle

source: e:\games\UnrealTournament\UnrealI\Classes\Rifle.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Inventory
         |
         +--Engine.Weapon
            |
            +--UnrealI.Rifle
Direct Known Subclasses:None

class Rifle
extends Engine.Weapon

//============================================================================= // Rifle. //=============================================================================
Variables
 int NumFire

States
AltFiring, Idle, NormalFire

Function Summary
 void AltFire(float Value)
 float RateSelf(out int)


State AltFiring Function Summary
 void PlayIdleAnim()
     
///////////////////////////////////////////////////////////
 void Timer()


State Idle Function Summary
 void EndState()
 void BeginState()
 void Fire(float Value)
 void AltFire(float Value)


State NormalFire Function Summary
 void Finish()
 void ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z)
 void PlayFiring()
 void PlayAltFiring()
 void Timer()
 void AltFire(float F)
 void Fire(float F)



Source Code


00001	//=============================================================================
00002	// Rifle.
00003	//=============================================================================
00004	class Rifle extends Weapon;
00005	
00006	#exec MESH IMPORT MESH=RifleM ANIVFILE=MODELS\Rifle_a.3D DATAFILE=MODELS\Rifle_d.3D X=0 Y=0 Z=0 unmirror=1
00007	#exec MESH ORIGIN MESH=RifleM X=0 Y=0 Z=0 YAW=-64 PITCH=0 ROLL=0
00008	#exec MESH SEQUENCE MESH=RifleM SEQ=All         STARTFRAME=0   NUMFRAMES=101
00009	#exec MESH SEQUENCE MESH=RifleM SEQ=Select      STARTFRAME=0   NUMFRAMES=20 RATE=27 GROUP=Select
00010	#exec MESH SEQUENCE MESH=RifleM SEQ=Still       STARTFRAME=20  NUMFRAMES=1
00011	#exec MESH SEQUENCE MESH=RifleM SEQ=Fire        STARTFRAME=21  NUMFRAMES=10 RATE=24
00012	#exec MESH SEQUENCE MESH=RifleM SEQ=ScopeFire   STARTFRAME=31  NUMFRAMES=10
00013	#exec MESH SEQUENCE MESH=RifleM SEQ=ScopeUp     STARTFRAME=41  NUMFRAMES=14
00014	#exec MESH SEQUENCE MESH=RifleM SEQ=StillScope  STARTFRAME=55  NUMFRAMES=1
00015	#exec MESH SEQUENCE MESH=RifleM SEQ=DownWScope  STARTFRAME=56  NUMFRAMES=15
00016	#exec MESH SEQUENCE MESH=RifleM SEQ=Down        STARTFRAME=71  NUMFRAMES=15
00017	#exec MESH SEQUENCE MESH=RifleM SEQ=ScopeDown   STARTFRAME=86  NUMFRAMES=15
00018	#exec TEXTURE IMPORT NAME=JRifle1 FILE=MODELS\Rifle.PCX GROUP=Skins
00019	#exec OBJ LOAD FILE=..\UnrealShare\textures\FireEffect18.utx PACKAGE=UNREALSHARE.Effect18
00020	#exec MESHMAP SCALE MESHMAP=RifleM X=0.005 Y=0.004 Z=0.01
00021	#exec MESHMAP SETTEXTURE MESHMAP=RifleM NUM=1 TEXTURE=JRifle1
00022	#exec MESHMAP SETTEXTURE MESHMAP=RifleM NUM=0 TEXTURE=UnrealShare.Effect18.FireEffect18
00023	
00024	#exec MESH IMPORT MESH=RiPick ANIVFILE=MODELS\RiPick_a.3D DATAFILE=MODELS\RiPick_d.3D X=0 Y=0 Z=0
00025	#exec MESH ORIGIN MESH=RiPick X=0 Y=0 Z=0 YAW=-64 
00026	#exec MESH SEQUENCE MESH=RiPick SEQ=All         STARTFRAME=0   NUMFRAMES=1
00027	#exec MESH SEQUENCE MESH=RiPick SEQ=Still       STARTFRAME=0   NUMFRAMES=1
00028	#exec TEXTURE IMPORT NAME=JRifle1 FILE=MODELS\Rifle.PCX GROUP=Skins
00029	#exec MESHMAP SCALE MESHMAP=RiPick X=0.06 Y=0.06 Z=0.12
00030	#exec MESHMAP SETTEXTURE MESHMAP=RiPick NUM=1 TEXTURE=JRifle1
00031	
00032	#exec MESH IMPORT MESH=Rifle3rd ANIVFILE=MODELS\Rifle3_a.3D DATAFILE=MODELS\Rifle3_d.3D X=0 Y=0 Z=0
00033	#exec MESH ORIGIN MESH=Rifle3rd X=0 Y=-550 Z=-45 YAW=-64 ROLL=9
00034	#exec MESH SEQUENCE MESH=Rifle3rd SEQ=All  STARTFRAME=0  NUMFRAMES=10
00035	#exec MESH SEQUENCE MESH=Rifle3rd SEQ=Still  STARTFRAME=0  NUMFRAMES=1
00036	#exec MESH SEQUENCE MESH=Rifle3rd SEQ=Fire  STARTFRAME=1  NUMFRAMES=9
00037	#exec MESHMAP SCALE MESHMAP=Rifle3rd X=0.05 Y=0.05 Z=0.1
00038	#exec MESHMAP SETTEXTURE MESHMAP=Rifle3rd NUM=1 TEXTURE=JRifle1
00039	#exec MESHMAP SETTEXTURE MESHMAP=Rifle3rd NUM=0 TEXTURE=UnrealShare.Effect18.FireEffect18
00040	
00041	#exec AUDIO IMPORT FILE="Sounds\rifle\RPICKUP1.WAV" NAME="RiflePickup" GROUP="Rifle"
00042	#exec AUDIO IMPORT FILE="Sounds\rifle\RSHOT9.WAV" NAME="RifleShot" GROUP="Rifle"
00043	
00044	var int NumFire;
00045	
00046	function float RateSelf( out int bUseAltMode )
00047	{
00048		if ( AmmoType.AmmoAmount <=0 )
00049			return -2;
00050	
00051		bUseAltMode = 0;
00052		return AIRating;
00053	
00054	}
00055	
00056	function AltFire( float Value )
00057	{
00058		GoToState('AltFiring');
00059	
00060	}
00061	
00062	///////////////////////////////////////////////////////
00063	state NormalFire
00064	{
00065		function Fire(float F) 
00066		{
00067		}
00068	
00069		function AltFire(float F) 
00070		{
00071		}
00072	
00073	Begin:
00074		FinishAnim();
00075		Finish();
00076	}
00077	
00078	function Timer()
00079	{
00080		local actor targ;
00081		local float bestAim, bestDist;
00082		local vector FireDir;
00083	
00084		bestAim = 0.95;
00085		if ( Pawn(Owner) == None )
00086		{
00087			GotoState('');
00088			return;
00089		}
00090		FireDir = vector(Pawn(Owner).ViewRotation);
00091		targ = Pawn(Owner).PickTarget(bestAim, bestDist, FireDir, Owner.Location);
00092		if ( Pawn(targ) != None )
00093		{
00094			SetTimer(1 + 4 * FRand(), false);
00095			bPointing = true;
00096			Pawn(targ).WarnTarget(Pawn(Owner), 200, FireDir);
00097		}
00098		else 
00099		{
00100			SetTimer(0.4 + 1.6 * FRand(), false);
00101			bPointing = false;
00102		}
00103	}	
00104	
00105	function PlayAltFiring()
00106	{
00107		if ( PlayerPawn(Owner) != None )
00108			PlayerPawn(Owner).shakeview(ShakeTime, ShakeMag, ShakeVert);
00109		Owner.PlaySound(FireSound, SLOT_None,Pawn(Owner).SoundDampening*3.0,,,0.9 + 0.2 * FRand());
00110		PlayAnim('Fire', 2.0,0.05);
00111	}
00112	
00113	function PlayFiring()
00114	{
00115		Owner.PlaySound(FireSound, SLOT_None, Pawn(Owner).SoundDampening*3.0);
00116		PlayAnim('Fire', 0.7,0.05);
00117	}
00118	
00119	function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z)
00120	{
00121		local shellcase s;
00122	
00123		if ( PlayerPawn(Owner) != None )
00124		{
00125			PlayerPawn(Owner).ClientInstantFlash( -0.4, vect(650, 450, 190));
00126			if ( PlayerPawn(Owner).DesiredFOV == PlayerPawn(Owner).DefaultFOV )
00127				bMuzzleFlash++;
00128		}
00129	
00130		s = Spawn(class'ShellCase',Pawn(Owner), '', Owner.Location + CalcDrawOffset() + 30 * X + (2.8 * FireOffset.Y+5.0) * Y - Z * 1);
00131		if ( s != None ) 
00132		{
00133			s.DrawScale = 2.0;
00134			s.Eject(((FRand()*0.3+0.4)*X + (FRand()*0.2+0.2)*Y + (FRand()*0.3+1.0) * Z)*160);              
00135		}
00136		if (Other == Level) 
00137			Spawn(class'HeavyWallHitEffect',,, HitLocation+HitNormal*9, Rotator(HitNormal));
00138		else if ( (Other != self) && (Other != Owner) && (Other != None) ) 
00139		{
00140			if ( Other.IsA('Pawn') && (HitLocation.Z - Other.Location.Z > 0.62 * Other.CollisionHeight) 
00141				&& (instigator.IsA('PlayerPawn') || (instigator.skill > 1)) 
00142				&& (!Other.IsA('ScriptedPawn') || !ScriptedPawn(Other).bIsBoss) )
00143				Other.TakeDamage(100, Pawn(Owner), HitLocation, 35000 * X, 'decapitated');
00144			else
00145				Other.TakeDamage(45,  Pawn(Owner), HitLocation, 30000.0*X, 'shot');	
00146			if ( !Other.IsA('Pawn') && !Other.IsA('Carcass') )
00147				spawn(class'SpriteSmokePuff',,,HitLocation+HitNormal*9);	
00148		}
00149	}
00150	
00151	function Finish()
00152	{
00153		//bMuzzleFlash = 0;
00154		if ( ((Pawn(Owner).bFire!=0) || (Pawn(Owner).bAltFire!=0)) && (FRand() < 0.6) )
00155			Timer();
00156		Super.Finish();
00157	}
00158	
00159	state Idle
00160	{
00161	
00162		function AltFire( float Value )
00163		{
00164			GoToState('AltFiring');
00165		}
00166	
00167		function Fire( float Value )
00168		{
00169			if (AmmoType.UseAmmo(1))
00170			{
00171				GotoState('NormalFire');
00172				if ( PlayerPawn(Owner) != None )
00173					PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert);
00174				bPointing=True;
00175				TraceFire(0.0);
00176				PlayFiring();
00177				CheckVisibility();
00178			}
00179		}
00180	
00181	
00182		function BeginState()
00183		{
00184			if (Pawn(Owner).bFire!=0) Fire(0.0);		
00185			bPointing = false;
00186			SetTimer(0.4 + 1.6 * FRand(), false);
00187			Super.BeginState();
00188		}
00189	
00190		function EndState()
00191		{	
00192			SetTimer(0.0, false);
00193			Super.EndState();
00194		}
00195		
00196	Begin:
00197		bPointing=False;
00198		if ( (AmmoType != None) && (AmmoType.AmmoAmount<=0) ) 
00199			Pawn(Owner).SwitchToBestWeapon();  //Goto Weapon that has Ammo
00200		if ( Pawn(Owner).bFire!=0 ) Fire(0.0);
00201		Disable('AnimEnd');
00202		PlayIdleAnim();
00203	}
00204	
00205	///////////////////////////////////////////////////////
00206	state AltFiring
00207	{
00208	
00209	function Timer()
00210	{
00211		if (Pawn(Owner).bAltFire == 0)
00212		{
00213			if (PlayerPawn(Owner) != None)
00214				PlayerPawn(Owner).StopZoom();
00215			SetTimer(0.0,False);
00216			GoToState('Idle');
00217		}
00218	}
00219	
00220	Begin:
00221		if ( Owner.IsA('PlayerPawn') )
00222		{
00223			PlayerPawn(Owner).ToggleZoom();
00224			SetTimer(0.075,True);
00225		}
00226		else
00227		{
00228			Pawn(Owner).bFire = 1;
00229			Pawn(Owner).bAltFire = 0;
00230			Global.Fire(0);
00231		}
00232	}
00233	
00234	///////////////////////////////////////////////////////////
00235	function PlayIdleAnim()
00236	{
00237		PlayAnim('Still',1.0, 0.05);
00238	}
00239	
00240	defaultproperties
00241	{
00242	     AmmoName=Class'UnrealI.RifleAmmo'
00243	     PickupAmmoCount=8
00244	     bInstantHit=True
00245	     bAltInstantHit=True
00246	     FireOffset=(Y=-5.000000,Z=-2.000000)
00247	     shakemag=400.000000
00248	     shaketime=0.150000
00249	     shakevert=8.000000
00250	     AIRating=0.700000
00251	     RefireRate=0.600000
00252	     AltRefireRate=0.300000
00253	     FireSound=Sound'UnrealI.Rifle.RifleShot'
00254	     SelectSound=Sound'UnrealI.Rifle.RiflePickup'
00255	     DeathMessage="%k put a bullet through %o's head."
00256	     AutoSwitchPriority=9
00257	     InventoryGroup=9
00258	     PickupMessage="You got the Rifle"
00259	     ItemName="Sniper Rifle"
00260	     PlayerViewOffset=(X=3.200000,Y=-1.200000,Z=-1.700000)
00261	     PlayerViewMesh=LodMesh'UnrealI.RifleM'
00262	     PickupViewMesh=LodMesh'UnrealI.RiPick'
00263	     ThirdPersonMesh=LodMesh'UnrealI.Rifle3rd'
00264	     PickupSound=Sound'UnrealShare.Pickups.WeaponPickup'
00265	     Mesh=LodMesh'UnrealI.RiPick'
00266	     bNoSmooth=False
00267	     CollisionRadius=28.000000
00268	     CollisionHeight=8.000000
00269	}

End Source Code