UnrealShare
Class AutoMag

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

class AutoMag
extends Engine.Weapon

//============================================================================= // AutoMag. //=============================================================================
Variables
 float AltAccuracy
 int ClipCount
 int hitdamage

States
Idle, AltFiring, NewClip, NormalFire

Function Summary
 void AltFire(float Value)
 void Finish()
 void PlayAltFiring()
 void PlayFiring()
 void PlayPostSelect()
 void ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z)
 void setHand(float Hand)
     
// set which hand is holding weapon


State Idle Function Summary
 void Timer()
 bool PutDown()
 void AnimEnd()


State AltFiring Function Summary


State NewClip Function Summary


State NormalFire Function Summary



Source Code


00001	//=============================================================================
00002	// AutoMag.
00003	//=============================================================================
00004	class AutoMag extends Weapon;
00005	
00006	// pickup version
00007	#exec MESH IMPORT MESH=AutoMagPickup ANIVFILE=MODELS\pislow_a.3D DATAFILE=MODELS\pislow_d.3D X=0 Y=0 Z=0
00008	#exec MESH ORIGIN MESH=AutoMagPickup X=0 Y=0 Z=0 YAW=64
00009	#exec MESH SEQUENCE MESH=AutoMagPickup SEQ=All  STARTFRAME=0  NUMFRAMES=1
00010	#exec TEXTURE IMPORT NAME=Automa1 FILE=MODELS\pistol.PCX GROUP="Skins"
00011	#exec MESHMAP SCALE MESHMAP=AutoMagPickup X=0.04 Y=0.04 Z=0.08
00012	#exec MESHMAP SETTEXTURE MESHMAP=AutoMagPickup NUM=1 TEXTURE=Automa1
00013	
00014	// 3rd person perspective version 
00015	#exec MESH IMPORT MESH=auto3rd ANIVFILE=MODELS\pis3rd_a.3D DATAFILE=MODELS\pis3rd_d.3D X=0 Y=0 Z=0
00016	#exec MESH ORIGIN MESH=auto3rd X=0 Y=-60 Z=-220 YAW=64 PITCH=0 ROLL=-72
00017	#exec MESH SEQUENCE MESH=auto3rd SEQ=All  STARTFRAME=0  NUMFRAMES=5
00018	#exec MESH SEQUENCE MESH=auto3rd SEQ=Still  STARTFRAME=0  NUMFRAMES=1
00019	#exec MESH SEQUENCE MESH=auto3rd SEQ=Shoot  STARTFRAME=1  NUMFRAMES=4 RATE=30.0
00020	#exec MESH SEQUENCE MESH=auto3rd SEQ=Shot2b  STARTFRAME=1  NUMFRAMES=4 RATE=30.0
00021	#exec MESH SEQUENCE MESH=auto3rd SEQ=Shot2a  STARTFRAME=1  NUMFRAMES=4 RATE=30.0
00022	#exec TEXTURE IMPORT NAME=Automa1 FILE=MODELS\pistol.PCX GROUP="Skins"
00023	#exec OBJ LOAD FILE=textures\FireEffect18.utx PACKAGE=UnrealShare.Effect18
00024	#exec MESHMAP SCALE MESHMAP=auto3rd X=0.02 Y=0.02 Z=0.04
00025	#exec MESHMAP SETTEXTURE MESHMAP=auto3rd NUM=1 TEXTURE=Automa1
00026	#exec MESHMAP SETTEXTURE MESHMAP=auto3rd NUM=0 TEXTURE=UnrealShare.Effect18.FireEffect18
00027	
00028	//  player view version
00029	#exec MESH IMPORT MESH=AutoMagL ANIVFILE=MODELS\pistol_a.3D DATAFILE=MODELS\pistol_d.3D X=0 Y=0 Z=0
00030	#exec MESH ORIGIN MESH=AutoMagL X=0 Y=0 Z=0 YAW=64 ROLL=-64
00031	#exec MESH SEQUENCE MESH=AutoMagL SEQ=All     STARTFRAME=0  NUMFRAMES=190
00032	#exec MESH SEQUENCE MESH=AutoMagL SEQ=Still   STARTFRAME=0  NUMFRAMES=1
00033	#exec MESH SEQUENCE MESH=AutoMagL SEQ=Shoot   STARTFRAME=0  NUMFRAMES=4
00034	#exec MESH SEQUENCE MESH=AutoMagL SEQ=Shoot0  STARTFRAME=6  NUMFRAMES=3
00035	#exec MESH SEQUENCE MESH=AutoMagL SEQ=Shoot1  STARTFRAME=7  NUMFRAMES=7
00036	#exec MESH SEQUENCE MESH=AutoMagL SEQ=Shoot2  STARTFRAME=15 NUMFRAMES=5
00037	#exec MESH SEQUENCE MESH=AutoMagL SEQ=Shot2a  STARTFRAME=20  NUMFRAMES=5
00038	#exec MESH SEQUENCE MESH=AutoMagL SEQ=Shot2b  STARTFRAME=29  NUMFRAMES=3
00039	#exec MESH SEQUENCE MESH=AutoMagL SEQ=Shot2c  STARTFRAME=45  NUMFRAMES=5
00040	#exec MESH SEQUENCE MESH=AutoMagL SEQ=Twiddle STARTFRAME=50  NUMFRAMES=25
00041	#exec MESH SEQUENCE MESH=AutoMagL SEQ=Sway1   STARTFRAME=50  NUMFRAMES=2
00042	#exec MESH SEQUENCE MESH=AutoMagL SEQ=Eject   STARTFRAME=75  NUMFRAMES=25
00043	#exec MESH SEQUENCE MESH=AutoMagL SEQ=Down    STARTFRAME=100  NUMFRAMES=5
00044	#exec MESH SEQUENCE MESH=AutoMagL SEQ=Select  STARTFRAME=105  NUMFRAMES=30 RATE=40 GROUP=Select
00045	#exec MESH SEQUENCE MESH=AutoMagL SEQ=T1      STARTFRAME=135  NUMFRAMES=5
00046	#exec MESH SEQUENCE MESH=AutoMagL SEQ=Twirl   STARTFRAME=140  NUMFRAMES=45
00047	#exec MESH SEQUENCE MESH=AutoMagL SEQ=T2      STARTFRAME=185  NUMFRAMES=5
00048	#exec TEXTURE IMPORT NAME=Automa1 FILE=MODELS\pistol.PCX GROUP="Skins" 
00049	#exec OBJ LOAD FILE=textures\FireEffect18.utx PACKAGE=UnrealShare.Effect18
00050	#exec MESHMAP SCALE MESHMAP=AutoMagL X=0.007 Y=0.005 Z=0.01
00051	#exec MESHMAP SETTEXTURE MESHMAP=AutoMagL NUM=1 TEXTURE=Automa1
00052	#exec MESHMAP SETTEXTURE MESHMAP=AutoMagL NUM=0 TEXTURE=UnrealShare.Effect18.FireEffect18
00053	
00054	// right handed player view version
00055	#exec MESH IMPORT MESH=AutoMagR ANIVFILE=MODELS\pistol_a.3D DATAFILE=MODELS\pistol_d.3D unmirror=1
00056	#exec MESH ORIGIN MESH=AutoMagR X=0 Y=0 Z=0 YAW=64 ROLL=-64
00057	#exec MESH SEQUENCE MESH=AutoMagR SEQ=All     STARTFRAME=0  NUMFRAMES=190
00058	#exec MESH SEQUENCE MESH=AutoMagR SEQ=Still   STARTFRAME=0  NUMFRAMES=1
00059	#exec MESH SEQUENCE MESH=AutoMagR SEQ=Shoot   STARTFRAME=0  NUMFRAMES=4
00060	#exec MESH SEQUENCE MESH=AutoMagR SEQ=Shoot0  STARTFRAME=6  NUMFRAMES=3
00061	#exec MESH SEQUENCE MESH=AutoMagR SEQ=Shoot1  STARTFRAME=7  NUMFRAMES=7
00062	#exec MESH SEQUENCE MESH=AutoMagR SEQ=Shoot2  STARTFRAME=15 NUMFRAMES=5
00063	#exec MESH SEQUENCE MESH=AutoMagR SEQ=Shot2a  STARTFRAME=20  NUMFRAMES=5
00064	#exec MESH SEQUENCE MESH=AutoMagR SEQ=Shot2b  STARTFRAME=29  NUMFRAMES=3
00065	#exec MESH SEQUENCE MESH=AutoMagR SEQ=Shot2c  STARTFRAME=45  NUMFRAMES=5
00066	#exec MESH SEQUENCE MESH=AutoMagR SEQ=Twiddle STARTFRAME=50  NUMFRAMES=25
00067	#exec MESH SEQUENCE MESH=AutoMagR SEQ=Sway1   STARTFRAME=50  NUMFRAMES=2
00068	#exec MESH SEQUENCE MESH=AutoMagR SEQ=Eject   STARTFRAME=75  NUMFRAMES=25
00069	#exec MESH SEQUENCE MESH=AutoMagR SEQ=Down    STARTFRAME=100  NUMFRAMES=5
00070	#exec MESH SEQUENCE MESH=AutoMagR SEQ=Select  STARTFRAME=105  NUMFRAMES=30 RATE=40 GROUP=Select
00071	#exec MESH SEQUENCE MESH=AutoMagR SEQ=T1      STARTFRAME=135  NUMFRAMES=5
00072	#exec MESH SEQUENCE MESH=AutoMagR SEQ=Twirl   STARTFRAME=140  NUMFRAMES=45
00073	#exec MESH SEQUENCE MESH=AutoMagR SEQ=T2      STARTFRAME=185  NUMFRAMES=5
00074	#exec MESHMAP SCALE MESHMAP=AutoMagR X=0.007 Y=0.005 Z=0.01
00075	#exec MESHMAP SETTEXTURE MESHMAP=AutoMagR NUM=1 TEXTURE=Automa1
00076	#exec MESHMAP SETTEXTURE MESHMAP=AutoMagR NUM=0 TEXTURE=UnrealShare.Effect18.FireEffect18
00077	
00078	#exec AUDIO IMPORT FILE="Sounds\automag\cocking.WAV" NAME="Cocking" GROUP="AutoMag"
00079	#exec AUDIO IMPORT FILE="Sounds\automag\shot.WAV" NAME="shot" GROUP="AutoMag"
00080	#exec AUDIO IMPORT FILE="Sounds\flak\click.WAV" NAME="click" GROUP="flak"
00081	#exec AUDIO IMPORT FILE="Sounds\automag\reload1.WAV" NAME="Reload" GROUP="Automag"
00082	
00083	var() int hitdamage;
00084	var  float AltAccuracy;
00085	var int ClipCount;
00086	
00087	function AltFire( float Value )
00088	{
00089		bPointing=True;
00090		AltAccuracy = 0.4;
00091		CheckVisibility();
00092		if (AmmoType.AmmoAmount>0)
00093		{
00094			if ( PlayerPawn(Owner) != None )
00095				PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert);
00096			PlayAnim('T1', 1.3, 0.05);
00097			GotoState('AltFiring');
00098		}
00099	}
00100	
00101	function PlayFiring()
00102	{
00103		ClipCount++;
00104		Owner.PlaySound(FireSound, SLOT_None,2.0*Pawn(Owner).SoundDampening);
00105	}
00106	
00107	// set which hand is holding weapon
00108	function setHand(float Hand)
00109	{
00110		Super.SetHand(Hand);
00111		if ( Hand == 1 )
00112			Mesh = mesh'AutoMagL';
00113		else
00114			Mesh = mesh'AutoMagR';
00115	}
00116	
00117	///////////////////////////////////////////////////////
00118	state NormalFire
00119	{
00120	Begin:
00121		if (AnimSequence!='Shoot0') 
00122		{
00123			PlayAnim('Shoot',2.5, 0.02);
00124			FinishAnim();
00125		}
00126		PlayAnim('Shoot0',0.26, 0.04);	
00127		FinishAnim();
00128		if (ClipCount>15) Owner.PlaySound(Misc1Sound, SLOT_None, 3.5*Pawn(Owner).SoundDampening);	
00129		if ( bChangeWeapon )
00130			GotoState('DownWeapon');
00131		else if ( PlayerPawn(Owner) == None )
00132			Super.Finish();
00133		else if ( (AmmoType.AmmoAmount<=0) || (Pawn(Owner).Weapon != self) )
00134			GotoState('Idle');
00135		else if (ClipCount>=20) GoToState('NewClip');
00136		else if ( Pawn(Owner).bFire!=0 ) Global.Fire(0);
00137		else if ( Pawn(Owner).bAltFire!=0 )Global.AltFire(0);		
00138		PlayAnim('Shoot2',0.8, 0.0);	
00139		FinishAnim();
00140		GoToState('Idle');
00141	}
00142	
00143	
00144	////////////////////////////////////////////////////////
00145	state NewClip
00146	{
00147	ignores Fire, AltFire;
00148	Begin:
00149		PlayAnim('Eject',1.5,0.05);
00150		Owner.PlaySound(Misc2Sound, SLOT_None,1.0*Pawn(Owner).SoundDampening);	
00151		FinishAnim();
00152		PlayAnim('Down',1.2,0.05);
00153		FinishAnim();
00154		ClipCount = 0;
00155		Owner.PlaySound(SelectSound, SLOT_None,1.0*Pawn(Owner).SoundDampening);	
00156		PlayAnim('Select',1.6,0.07);
00157		FinishAnim();
00158		if ( bChangeWeapon )
00159			GotoState('DownWeapon');
00160		else if ( Pawn(Owner).bFire!=0 )
00161			Global.Fire(0);
00162		else if ( Pawn(Owner).bAltFire!=0 )
00163			Global.AltFire(0);	
00164		else GotoState('Idle');
00165	}
00166	
00167	////////////////////////////////////////////////////////
00168	state AltFiring
00169	{
00170	ignores Fire, AltFire;
00171	
00172	Begin:
00173		FinishAnim();
00174		PlayAnim('Shot2a', 1.2, 0.05);	
00175		FinishAnim();
00176	Repeater:	
00177		if (AmmoType.UseAmmo(1)) 
00178		{
00179			if ( PlayerPawn(Owner) != None )
00180				PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert);
00181			ClipCount++;	
00182			TraceFire(AltAccuracy);
00183			PlayAltFiring();	
00184			FinishAnim();
00185		}
00186		if ( AltAccuracy < 3 ) 
00187			AltAccuracy += 0.5;
00188		if (ClipCount>15) Owner.PlaySound(Misc1Sound, SLOT_None, 3.5*Pawn(Owner).SoundDampening);		
00189		if ( bChangeWeapon )
00190			GotoState('DownWeapon');
00191		else if ( Pawn(Owner).Weapon != Self )
00192			GotoState('Idle');		
00193		else if ( /*bAltFireMem ||*/ (Pawn(Owner).bAltFire!=0) 
00194			&& AmmoType.AmmoAmount>0 && ClipCount<20)
00195		{
00196			if ( PlayerPawn(Owner) == None )
00197				Pawn(Owner).bAltFire = int( FRand() < AltReFireRate );
00198			//bFireMem = false;
00199			//bAltFireMem = false; 
00200			Goto('Repeater');	
00201		}
00202		PlayAnim('Shot2c', 0.7, 0.05);	
00203		FinishAnim();	
00204		PlayAnim('T2', 0.9, 0.05);	
00205		FinishAnim();
00206		Finish();
00207	}
00208	
00209	function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z)
00210	{
00211		local shellcase s;
00212		local vector realLoc;
00213	
00214		realLoc = Owner.Location + CalcDrawOffset();
00215		s = Spawn(class'ShellCase',Pawn(Owner), '', realLoc + 20 * X + FireOffset.Y * Y + Z);
00216		if ( s != None )
00217			s.Eject(((FRand()*0.3+0.4)*X + (FRand()*0.2+0.2)*Y + (FRand()*0.3+1.0) * Z)*160);              
00218		if (Other == Level) 
00219			Spawn(class'WallHitEffect',,, HitLocation+HitNormal*9, Rotator(HitNormal));
00220		else if ((Other != self) && (Other != Owner) && (Other != None) ) 
00221		{
00222			if ( FRand() < 0.2 )
00223				X *= 5;
00224			Other.TakeDamage(HitDamage, Pawn(Owner), HitLocation, 3000.0*X, 'shot');
00225			if ( !Other.IsA('Pawn') && !Other.IsA('Carcass') )
00226				spawn(class'SpriteSmokePuff',,,HitLocation+HitNormal*9);
00227		}		
00228	}
00229	
00230	function PlayPostSelect()
00231	{
00232		ClipCount = 0;
00233	}
00234	
00235	function Finish()
00236	{
00237		if ( bChangeWeapon )
00238			GotoState('DownWeapon');
00239		else if ( PlayerPawn(Owner) == None )
00240			Super.Finish();
00241		else if ( (AmmoType.AmmoAmount<=0) || (Pawn(Owner).Weapon != self) )
00242			GotoState('Idle');
00243		else if (ClipCount>=20) GoToState('NewClip');
00244		else if ( /*bFireMem ||*/ Pawn(Owner).bFire!=0 )
00245			Global.Fire(0);
00246		else if ( /*bAltFireMem ||*/ Pawn(Owner).bAltFire!=0 )
00247			Global.AltFire(0);
00248		else 
00249			GotoState('Idle');
00250	}
00251	
00252	function PlayAltFiring()
00253	{
00254		Owner.PlaySound(FireSound, SLOT_None,2.0*Pawn(Owner).SoundDampening);
00255		PlayAnim('Shot2b', 0.4, 0.05);
00256	}
00257	
00258	state Idle
00259	{
00260		function AnimEnd()
00261		{
00262			PlayIdleAnim();
00263		}
00264	
00265		function bool PutDown()
00266		{
00267			GotoState('DownWeapon');
00268			return True;
00269		}
00270		
00271		function Timer()
00272		{
00273			if (FRand()>0.8) PlayAnim('Twiddle',0.6,0.3);
00274			else if (AnimSequence == 'Twiddle') LoopAnim('Sway1',0.02, 0.3);
00275		}
00276	
00277	Begin:
00278		bPointing=False;
00279		if ( (AmmoType != None) && (AmmoType.AmmoAmount<=0) ) 
00280			Pawn(Owner).SwitchToBestWeapon();  //Goto Weapon that has Ammo
00281		Disable('AnimEnd');
00282		LoopAnim('Sway1',0.02, 0.1);
00283		SetTimer(1.5,True);
00284		if ( /*bFireMem ||*/ Pawn(Owner).bFire!=0 ) Global.Fire(0.0);
00285		if ( /*bAltFireMem ||*/ Pawn(Owner).bAltFire!=0 ) Global.AltFire(0.0);	
00286	}
00287	
00288	defaultproperties
00289	{
00290	     hitdamage=17
00291	     AmmoName=Class'UnrealShare.ShellBox'
00292	     PickupAmmoCount=20
00293	     bInstantHit=True
00294	     bAltInstantHit=True
00295	     FireOffset=(Y=-10.000000,Z=-4.000000)
00296	     shakemag=200.000000
00297	     shakevert=4.000000
00298	     AIRating=0.200000
00299	     RefireRate=0.700000
00300	     AltRefireRate=0.900000
00301	     FireSound=Sound'UnrealShare.AutoMag.shot'
00302	     AltFireSound=Sound'UnrealShare.AutoMag.shot'
00303	     CockingSound=Sound'UnrealShare.AutoMag.Cocking'
00304	     SelectSound=Sound'UnrealShare.AutoMag.Cocking'
00305	     Misc1Sound=Sound'UnrealShare.flak.Click'
00306	     Misc2Sound=Sound'UnrealShare.AutoMag.Reload'
00307	     DeathMessage="%o got gatted by %k's %w."
00308	     AutoSwitchPriority=2
00309	     InventoryGroup=2
00310	     PickupMessage="You got the AutoMag"
00311	     ItemName="Automag"
00312	     PlayerViewOffset=(X=4.800000,Y=-1.700000,Z=-2.700000)
00313	     PlayerViewMesh=LodMesh'UnrealShare.AutoMagL'
00314	     PickupViewMesh=LodMesh'UnrealShare.AutoMagPickup'
00315	     ThirdPersonMesh=LodMesh'UnrealShare.auto3rd'
00316	     PickupSound=Sound'UnrealShare.Pickups.WeaponPickup'
00317	     Mesh=LodMesh'UnrealShare.AutoMagPickup'
00318	     bNoSmooth=False
00319	     CollisionRadius=25.000000
00320	     CollisionHeight=10.000000
00321	     Mass=15.000000
00322	}

End Source Code