UnrealI
Class Minigun

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

class Minigun
extends Engine.Weapon

//============================================================================= // Minigun. //=============================================================================
Variables
 ShotAccuracy, Count
 bOutOfAmmo, bFiredShot
 OverHeatLight s

States
Idle, AltFiring, NormalFire, FinishFire

Function Summary
 void AltFire(float Value)
 void Fire(float Value)
 void GenerateBullet()
 void PlayAltFiring()
 void PlayFiring()
 void ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z)


State Idle Function Summary


State AltFiring Function Summary
 void BeginState()
 void EndState()
 void AnimEnd()
 void Tick(float DeltaTime)


State NormalFire Function Summary
 void EndState()
 void AnimEnd()
 void Tick(float DeltaTime)


State FinishFire Function Summary
 void BeginState()
 void AltFire(float F)
 void Fire(float F)



Source Code


00001	//=============================================================================
00002	// Minigun.
00003	//=============================================================================
00004	class Minigun extends Weapon;
00005	
00006	#exec AUDIO IMPORT FILE="..\UnrealShare\Sounds\General\Bulletr2.WAV" NAME="Bulletr2"  GROUP="General"
00007	
00008	#exec MESH IMPORT MESH=minigunM ANIVFILE=MODELS\smini_a.3D DATAFILE=MODELS\smini_d.3D X=0 Y=0 Z=0
00009	#exec MESH ORIGIN MESH=minigunM X=0 Y=0 Z=0 YAW=64 PITCH=-7 ROLL=-62 
00010	#exec MESH SEQUENCE MESH=minigunM SEQ=All     STARTFRAME=0  NUMFRAMES=119
00011	#exec MESH SEQUENCE MESH=minigunM SEQ=Select  STARTFRAME=0  NUMFRAMES=23 RATE=34 GROUP=Select
00012	#exec MESH SEQUENCE MESH=minigunM SEQ=Still   STARTFRAME=23  NUMFRAMES=1
00013	#exec MESH SEQUENCE MESH=minigunM SEQ=Fire    STARTFRAME=24  NUMFRAMES=30
00014	#exec MESH SEQUENCE MESH=minigunM SEQ=Wind    STARTFRAME=24  NUMFRAMES=15
00015	#exec MESH SEQUENCE MESH=minigunM SEQ=Shoot1  STARTFRAME=39  NUMFRAMES=15
00016	#exec MESH SEQUENCE MESH=minigunM SEQ=Shoot2  STARTFRAME=54  NUMFRAMES=20
00017	#exec MESH SEQUENCE MESH=minigunM SEQ=Unwind  STARTFRAME=74  NUMFRAMES=15
00018	#exec MESH SEQUENCE MESH=minigunM SEQ=Cock    STARTFRAME=89  NUMFRAMES=20
00019	#exec MESH SEQUENCE MESH=minigunM SEQ=Down    STARTFRAME=109 NUMFRAMES=10
00020	#exec TEXTURE IMPORT NAME=minigun1 FILE=MODELS\smini.PCX GROUP="Skins" 
00021	#exec OBJ LOAD FILE=..\UnrealShare\Textures\fireeffect13.utx PACKAGE=UNREALI.Effect13
00022	#exec MESHMAP SCALE MESHMAP=minigunM X=0.0055 Y=0.0055 Z=0.011
00023	#exec MESHMAP SETTEXTURE MESHMAP=minigunM NUM=1 TEXTURE=minigun1
00024	#exec MESHMAP SETTEXTURE MESHMAP=minigunM NUM=0 TEXTURE=Unreali.Effect13.FireEffect13
00025	
00026	#exec MESH IMPORT MESH=minipick ANIVFILE=MODELS\minipi_a.3D DATAFILE=MODELS\minipi_d.3D X=0 Y=0 Z=0
00027	#exec MESH ORIGIN MESH=minipick X=0 Y=-100 Z=-40 YAW=64 PITCH=0 ROLL=0
00028	#exec MESH SEQUENCE MESH=minipick SEQ=All     STARTFRAME=0  NUMFRAMES=1
00029	#exec TEXTURE IMPORT NAME=minigun1 FILE=MODELS\smini.PCX GROUP="Skins" 
00030	#exec MESHMAP SCALE MESHMAP=minipick X=0.04 Y=0.04 Z=0.08
00031	#exec MESHMAP SETTEXTURE MESHMAP=minipick NUM=1 TEXTURE=minigun1
00032	
00033	#exec MESH IMPORT MESH=SMini3 ANIVFILE=MODELS\Smini3_a.3D DATAFILE=MODELS\smini3_d.3D X=0 Y=0 Z=0
00034	#exec MESH ORIGIN MESH=SMini3 X=0 Y=60 Z=0 YAW=64 ROLL=-7
00035	#exec MESH SEQUENCE MESH=SMini3 SEQ=All STARTFRAME=0  NUMFRAMES=11
00036	#exec MESH SEQUENCE MESH=SMini3 SEQ=Fire STARTFRAME=0  NUMFRAMES=10 RATE=20.0
00037	#exec MESH SEQUENCE MESH=SMini3 SEQ=Shoot1  STARTFRAME=0  NUMFRAMES=10 RATE=20.0
00038	#exec MESH SEQUENCE MESH=SMini3 SEQ=Shoot2  STARTFRAME=0  NUMFRAMES=10 RATE=20.0
00039	#exec MESH SEQUENCE MESH=SMini3 SEQ=Still STARTFRAME=10  NUMFRAMES=1
00040	#exec MESH SEQUENCE MESH=SMini3 SEQ=Select STARTFRAME=10  NUMFRAMES=1
00041	#exec MESH SEQUENCE MESH=SMini3 SEQ=Wind STARTFRAME=10  NUMFRAMES=1
00042	#exec MESH SEQUENCE MESH=SMini3 SEQ=UnWind STARTFRAME=10  NUMFRAMES=1
00043	#exec MESH SEQUENCE MESH=SMini3 SEQ=Cock STARTFRAME=10  NUMFRAMES=1
00044	#exec MESH SEQUENCE MESH=SMini3 SEQ=Down STARTFRAME=10  NUMFRAMES=1
00045	#exec TEXTURE IMPORT NAME=minigun1 FILE=MODELS\smini.PCX GROUP="Skins"
00046	#exec OBJ LOAD FILE=..\UnrealShare\textures\FireEffect18.utx PACKAGE=UNREALShare.Effect18
00047	#exec MESHMAP SCALE MESHMAP=SMini3 X=0.30 Y=0.30 Z=0.6
00048	#exec MESHMAP SETTEXTURE MESHMAP=SMini3 NUM=1 TEXTURE=minigun1
00049	#exec MESHMAP SETTEXTURE MESHMAP=SMini3 NUM=0 TEXTURE=UnrealShare.Effect18.FireEffect18
00050	
00051	#exec AUDIO IMPORT FILE="Sounds\minigun\MPickup2.WAV" NAME="MiniSelect" GROUP="Minigun"
00052	#exec AUDIO IMPORT FILE="Sounds\minigun\RegF1.WAV" NAME="RegF1" GROUP="Minigun"
00053	#exec AUDIO IMPORT FILE="Sounds\minigun\WindD2.WAV" NAME="WindD2" GROUP="Minigun"
00054	#exec AUDIO IMPORT FILE="Sounds\minigun\AltF1.WAV" NAME="AltF1" GROUP="Minigun"
00055	
00056	var float ShotAccuracy, Count;
00057	var bool bOutOfAmmo, bFiredShot;
00058	var OverHeatLight s;
00059	
00060	function GenerateBullet()
00061	{
00062		if ( LightType == LT_None )
00063		    LightType = LT_Steady;
00064		else
00065			LightType = LT_None;
00066		bFiredShot = true;
00067		if ( AmmoType.UseAmmo(1) ) 
00068			TraceFire(ShotAccuracy);
00069		else
00070			GotoState('FinishFire');
00071	}
00072	
00073	function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z)
00074	{
00075		local int rndDam;
00076	
00077		if ( PlayerPawn(Owner) != None )
00078			PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert);
00079		
00080		if (Other == Level) 
00081			Spawn(class'LightWallHitEffect',,, HitLocation+HitNormal*9, Rotator(HitNormal));
00082		else if ( (Other!=self) && (Other!=Owner) && (Other != None) ) 
00083		{
00084			if ( !Other.IsA('Pawn') && !Other.IsA('Carcass') )
00085				spawn(class'SpriteSmokePuff',,,HitLocation+HitNormal*9);
00086			if ( Other.IsA('ScriptedPawn') && (FRand() < 0.2) )
00087				Pawn(Other).WarnTarget(Pawn(Owner), 500, X);
00088			rndDam = 8 + Rand(6);
00089			if ( FRand() < 0.2 )
00090				X *= 2;
00091			Other.TakeDamage(rndDam, Pawn(Owner), HitLocation, rndDam*500.0*X, 'shot');
00092		}
00093	}
00094	
00095	function Fire( float Value )
00096	{
00097		Enable('Tick');
00098		if ( (Count<1) && AmmoType.UseAmmo(1) )
00099		{
00100			CheckVisibility();
00101			if ( PlayerPawn(Owner) != None )
00102				PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert);
00103			AmbientSound = FireSound;
00104			SoundVolume = 255*Pawn(Owner).SoundDampening;
00105			bPointing=True;
00106			ShotAccuracy = 0.1;
00107			PlayFiring();
00108			GotoState('NormalFire');
00109		}
00110		else GoToState('Idle');
00111	}
00112	
00113	function AltFire( float Value )
00114	{
00115		Enable('Tick');
00116		if ( (Count<1) && AmmoType.UseAmmo(1) )
00117		{
00118			CheckVisibility();
00119			bPointing=True;
00120			ShotAccuracy = 0.8;
00121			AmbientSound = FireSound;
00122			SoundVolume = 255*Pawn(Owner).SoundDampening;		
00123			PlayAltFiring();	
00124			GoToState('AltFiring');		
00125		}
00126		else GoToState('Idle');	
00127	}
00128	
00129	
00130	function PlayFiring()
00131	{	
00132		LoopAnim('Shoot1',0.8, 0.05);
00133	}
00134	
00135	function PlayAltFiring()
00136	{
00137		PlayAnim('Shoot1',0.8, 0.05);
00138	}
00139	
00140	////////////////////////////////////////////////////////
00141	state FinishFire
00142	{
00143		function Fire(float F) {}
00144		function AltFire(float F) {}
00145	
00146		function BeginState()
00147		{
00148			local float Damping;
00149	
00150			if ( Pawn(Owner) == None )
00151				Damping = 1;
00152			else
00153				Damping = Pawn(Owner).SoundDampening;
00154	
00155			PlaySound(Misc1Sound, SLOT_Misc, 3.0*Damping);  //Finish firing, power down		
00156		}
00157	
00158	Begin:
00159		PlayAnim('UnWind',0.8, 0.05);
00160		FinishAnim();
00161		Finish();
00162	}
00163	
00164	///////////////////////////////////////////////////////
00165	state NormalFire
00166	{
00167		function Tick( float DeltaTime )
00168		{
00169			if (Owner==None) 
00170				AmbientSound = None;
00171			else			
00172				SetLocation(Owner.Location);
00173		}
00174	
00175		function AnimEnd()
00176		{
00177			if (Pawn(Owner).Weapon != self) GotoState('');
00178			else if (Pawn(Owner).bFire!=0 && AmmoType.AmmoAmount>0)
00179			{
00180				if ( (PlayerPawn(Owner) != None) || (FRand() < ReFireRate) )
00181					Global.Fire(0);
00182				else 
00183				{
00184					Pawn(Owner).bFire = 0;
00185					GotoState('FinishFire');
00186				}
00187			}
00188			else if ( Pawn(Owner).bAltFire!=0 && AmmoType.AmmoAmount>0)
00189				Global.AltFire(0);
00190			else 
00191				GotoState('FinishFire');
00192		}
00193	
00194		function EndState()
00195		{
00196			LightType = LT_None;
00197			AmbientSound = None;
00198			Super.EndState();
00199		}
00200	
00201	Begin:
00202		SetLocation(Owner.Location);
00203		Sleep(0.13);
00204		GenerateBullet();
00205		Goto('Begin');
00206	}
00207	
00208	////////////////////////////////////////////////////////
00209	state AltFiring
00210	{
00211		function Tick( float DeltaTime )
00212		{
00213			if (Owner==None) 
00214			{
00215				AmbientSound = None;
00216				GotoState('Pickup');
00217			}			
00218			else			
00219				SetLocation(Owner.Location);
00220			if ( (PlayerPawn(Owner) == None) && bFiredShot && (FRand() < DeltaTime/AltReFireRate) )
00221				Pawn(Owner).bAltFire = 0; 
00222			if	( bFiredShot && ((pawn(Owner).bAltFire==0) || bOutOfAmmo) ) 
00223				GoToState('FinishFire');
00224		}
00225	
00226		function AnimEnd()
00227		{
00228			if ( (AnimSequence != 'Shoot2') || !bAnimLoop )
00229			{	
00230				AmbientSound = AltFireSound;
00231				SoundVolume = 255*Pawn(Owner).SoundDampening;
00232				LoopAnim('Shoot2',0.8);
00233			}
00234		}
00235	
00236		function EndState()
00237		{
00238			LightType = LT_None;
00239			AmbientSound = None;
00240			Super.EndState();
00241		}
00242	
00243		function BeginState()
00244		{
00245			Super.BeginState();
00246			bFiredShot = false;
00247		}
00248	
00249	Begin:
00250		SetLocation(Owner.Location);
00251		Sleep(0.13);
00252		GenerateBullet();
00253		if ( AnimSequence == 'Shoot2' )
00254			Goto('FastShoot');
00255		Goto('Begin');
00256	FastShoot:
00257		Sleep(0.07);
00258		GenerateBullet();
00259		Goto('FastShoot');
00260	}
00261	
00262	
00263	
00264	///////////////////////////////////////////////////////////
00265	state Idle
00266	{
00267	
00268	
00269	Begin:
00270		if (Pawn(Owner).bFire!=0 && AmmoType.AmmoAmount>0) Fire(0.0);
00271		if (Pawn(Owner).bAltFire!=0 && AmmoType.AmmoAmount>0) AltFire(0.0);	
00272		PlayAnim('Still');
00273		bPointing=False;
00274		if ( (AmmoType != None) && (AmmoType.AmmoAmount<=0) ) 
00275			Pawn(Owner).SwitchToBestWeapon();  //Goto Weapon that has Ammo
00276		Disable('AnimEnd');
00277		PlayIdleAnim();		
00278	}
00279	
00280	defaultproperties
00281	{
00282	     AmmoName=Class'UnrealShare.ShellBox'
00283	     PickupAmmoCount=50
00284	     bInstantHit=True
00285	     bAltInstantHit=True
00286	     FireOffset=(Y=-5.000000,Z=-4.000000)
00287	     shakemag=135.000000
00288	     shakevert=8.000000
00289	     AIRating=0.600000
00290	     RefireRate=0.900000
00291	     AltRefireRate=0.930000
00292	     FireSound=Sound'UnrealI.Minigun.RegF1'
00293	     AltFireSound=Sound'UnrealI.Minigun.AltF1'
00294	     SelectSound=Sound'UnrealI.Minigun.MiniSelect'
00295	     Misc1Sound=Sound'UnrealI.Minigun.WindD2'
00296	     DeathMessage="%k's %w turned %o into a leaky piece of meat."
00297	     AutoSwitchPriority=10
00298	     InventoryGroup=10
00299	     PickupMessage="You got the Minigun"
00300	     ItemName="Minigun"
00301	     PlayerViewOffset=(X=5.600000,Y=-1.500000,Z=-1.800000)
00302	     PlayerViewMesh=LodMesh'UnrealI.minigunM'
00303	     PickupViewMesh=LodMesh'UnrealI.minipick'
00304	     ThirdPersonMesh=LodMesh'UnrealI.SMini3'
00305	     PickupSound=Sound'UnrealShare.Pickups.WeaponPickup'
00306	     Mesh=LodMesh'UnrealI.minipick'
00307	     bNoSmooth=False
00308	     SoundRadius=64
00309	     SoundVolume=255
00310	     CollisionRadius=28.000000
00311	     CollisionHeight=8.000000
00312	     LightEffect=LE_NonIncidence
00313	     LightBrightness=250
00314	     LightHue=28
00315	     LightSaturation=32
00316	     LightRadius=6
00317	}

End Source Code