UnrealShare
Class DispersionPistol

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

class DispersionPistol
extends Engine.Weapon

//============================================================================= // DispersionPistol. //=============================================================================
Variables
 Pickup Amp
 float Count,ChargeSize
 int PowerLevel
 Sound PowerUpSound
 vector WeaponPos
 ChargeLight cl1,cl2

States
PowerUp, ShootLoad, AltFiring

Function Summary
 void AltFire(float Value)
 void BecomePickup()
 bool HandlePickupQuery(Inventory Item)
 void PlayFiring()
 float RateSelf(out int)
 float SuggestAttackStyle()
     
// return delta to combat style


State PowerUp Function Summary
 void PlaySelect()
 void TweenSelect()
 void TweenDown()
 void BeginState()
 bool PutDown()
 void BringUp()


State ShootLoad Function Summary
 void PlayIdleAnim()
     
///////////////////////////////////////////////////////////
 void BeginState()
 void AltFire(float F)
 void Fire(float F)


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



Source Code


00001	//=============================================================================
00002	// DispersionPistol.
00003	//=============================================================================
00004	class DispersionPistol extends Weapon;
00005	
00006	// player view version
00007	#exec MESH IMPORT MESH=DPistol ANIVFILE=MODELS\dgun_a.3D DATAFILE=MODELS\dgun_d.3D X=0 Y=0 Z=0
00008	#exec MESH ORIGIN MESH=DPistol X=0 Y=0 Z=0 YAW=-64 PITCH=0
00009	#exec MESHMAP SCALE MESHMAP=DPistol X=0.005 Y=0.005 Z=0.01
00010	#exec MESH SEQUENCE MESH=DPistol SEQ=All     STARTFRAME=0  NUMFRAMES=141
00011	#exec MESH SEQUENCE MESH=DPistol SEQ=Select1 STARTFRAME=0  NUMFRAMES=11 GROUP=Select
00012	#exec MESH SEQUENCE MESH=DPistol SEQ=Shoot1  STARTFRAME=11 NUMFRAMES=3
00013	#exec MESH SEQUENCE MESH=DPistol SEQ=Idle1   STARTFRAME=14  NUMFRAMES=2
00014	#exec MESH SEQUENCE MESH=DPistol SEQ=Down1   STARTFRAME=16  NUMFRAMES=5
00015	#exec MESH SEQUENCE MESH=DPistol SEQ=PowerUp1 STARTFRAME=21  NUMFRAMES=4
00016	#exec MESH SEQUENCE MESH=DPistol SEQ=Still    STARTFRAME=25  NUMFRAMES=5
00017	#exec MESH SEQUENCE MESH=DPistol SEQ=Select2 STARTFRAME=30  NUMFRAMES=11 GROUP=Select
00018	#exec MESH SEQUENCE MESH=DPistol SEQ=Shoot2  STARTFRAME=41 NUMFRAMES=3
00019	#exec MESH SEQUENCE MESH=DPistol SEQ=Idle2   STARTFRAME=44  NUMFRAMES=2
00020	#exec MESH SEQUENCE MESH=DPistol SEQ=Down2   STARTFRAME=46  NUMFRAMES=5
00021	#exec MESH SEQUENCE MESH=DPistol SEQ=PowerUp2 STARTFRAME=51  NUMFRAMES=9
00022	#exec MESH SEQUENCE MESH=DPistol SEQ=Select3 STARTFRAME=60  NUMFRAMES=11 GROUP=Select
00023	#exec MESH SEQUENCE MESH=DPistol SEQ=Shoot3  STARTFRAME=71 NUMFRAMES=3
00024	#exec MESH SEQUENCE MESH=DPistol SEQ=Idle3   STARTFRAME=74  NUMFRAMES=2
00025	#exec MESH SEQUENCE MESH=DPistol SEQ=Down3   STARTFRAME=76  NUMFRAMES=5
00026	#exec MESH SEQUENCE MESH=DPistol SEQ=PowerUp3 STARTFRAME=81  NUMFRAMES=9
00027	#exec MESH SEQUENCE MESH=DPistol SEQ=Select4 STARTFRAME=90  NUMFRAMES=11 GROUP=Select
00028	#exec MESH SEQUENCE MESH=DPistol SEQ=Shoot4  STARTFRAME=101 NUMFRAMES=3
00029	#exec MESH SEQUENCE MESH=DPistol SEQ=Idle4   STARTFRAME=104  NUMFRAMES=2
00030	#exec MESH SEQUENCE MESH=DPistol SEQ=Down4   STARTFRAME=106  NUMFRAMES=5
00031	#exec MESH SEQUENCE MESH=DPistol SEQ=PowerUp4 STARTFRAME=111  NUMFRAMES=9
00032	#exec MESH SEQUENCE MESH=DPistol SEQ=Select5 STARTFRAME=120 NUMFRAMES=11 GROUP=Select
00033	#exec MESH SEQUENCE MESH=DPistol SEQ=Shoot5  STARTFRAME=131 NUMFRAMES=3
00034	#exec MESH SEQUENCE MESH=DPistol SEQ=Idle5   STARTFRAME=134 NUMFRAMES=2
00035	#exec MESH SEQUENCE MESH=DPistol SEQ=Down5   STARTFRAME=136  NUMFRAMES=5
00036	
00037	#exec TEXTURE IMPORT NAME=DPistol1 FILE=MODELS\dgun.PCX GROUP="Skins"
00038	#exec OBJ LOAD FILE=Textures\SmokeEffect2.utx PACKAGE=UnrealShare.SEffect2
00039	#exec MESHMAP SETTEXTURE MESHMAP=DPistol NUM=1  TEXTURE=DPistol1
00040	#exec MESHMAP SETTEXTURE MESHMAP=DPistol NUM=0  TEXTURE=UnrealShare.SEffect2.SmokeEffect2
00041	
00042	
00043	// pickup version
00044	#exec MESH IMPORT MESH=DPistolPick ANIVFILE=MODELS\dgunlo_a.3D DATAFILE=MODELS\dgunlo_d.3D X=0 Y=0 Z=0
00045	#exec MESH ORIGIN MESH=DPistolPick X=0 Y=0 Z=0 YAW=64
00046	#exec MESH SEQUENCE MESH=DPistolPick SEQ=All  STARTFRAME=0  NUMFRAMES=1
00047	#exec TEXTURE IMPORT NAME=DPistol1 FILE=MODELS\dgun.PCX GROUP="Skins"
00048	#exec MESHMAP SCALE MESHMAP=DPistolPick X=0.04 Y=0.04 Z=0.08
00049	#exec MESHMAP SETTEXTURE MESHMAP=DPistolPick NUM=1 TEXTURE=DPistol1
00050	
00051	// 3rd person perspective version
00052	#exec MESH IMPORT MESH=DPistol3rd ANIVFILE=MODELS\dgunlo_a.3D DATAFILE=MODELS\dgunlo_d.3D X=0 Y=0 Z=0
00053	#exec MESH ORIGIN MESH=DPistol3rd X=0 Y=-200 Z=-110 YAW=-64 ROLL=9
00054	#exec MESH SEQUENCE MESH=DPistol3rd SEQ=All  STARTFRAME=0  NUMFRAMES=6
00055	#exec MESH SEQUENCE MESH=DPistol3rd SEQ=Still  STARTFRAME=0  NUMFRAMES=1
00056	#exec MESH SEQUENCE MESH=DPistol3rd SEQ=Shoot1 STARTFRAME=0  NUMFRAMES=6
00057	#exec TEXTURE IMPORT NAME=DPistol1 FILE=MODELS\dgun.PCX GROUP="Skins"
00058	#exec MESHMAP SCALE MESHMAP=DPistol3rd X=0.025 Y=0.025 Z=0.05
00059	#exec MESHMAP SETTEXTURE MESHMAP=DPistol3rd NUM=1 TEXTURE=DPistol1
00060	
00061	#exec AUDIO IMPORT FILE="Sounds\dispersion\Powerup3.WAV" NAME="PowerUp3" GROUP="Dispersion"
00062	#exec AUDIO IMPORT FILE="Sounds\dispersion\DShot1.WAV" NAME="DispShot" GROUP="Dispersion"
00063	#exec AUDIO IMPORT FILE="Sounds\dispersion\Dpickup2.WAV" NAME="DispPickup" GROUP="Dispersion"
00064	
00065	var travel int PowerLevel;
00066	var vector WeaponPos;
00067	var float Count,ChargeSize;
00068	var ChargeLight cl1,cl2;
00069	var Pickup Amp;
00070	var Sound PowerUpSound;
00071	
00072	function float RateSelf( out int bUseAltMode )
00073	{
00074		local float rating;
00075	
00076		if ( Amp != None )
00077			rating = 6 * AIRating;
00078		else 
00079			rating = AIRating;
00080	
00081		if ( AmmoType.AmmoAmount <=0 )
00082			return 0.05;
00083		if ( Pawn(Owner).Enemy == None )
00084		{
00085			bUseAltMode = 0;
00086			return rating * (PowerLevel + 1);
00087		}
00088		
00089		bUseAltMode = int( FRand() < 0.3 );
00090		return rating * (PowerLevel + 1);
00091	}
00092	
00093	// return delta to combat style
00094	function float SuggestAttackStyle()
00095	{
00096		local float EnemyDist;
00097		local Inventory Inv;
00098	
00099		if ( !Pawn(Owner).bIsPlayer || (PowerLevel > 0) )
00100			return 0;
00101	
00102		return -0.3;
00103	}
00104	
00105	function bool HandlePickupQuery( inventory Item )
00106	{
00107		if ( Item.IsA('WeaponPowerup') )
00108		{ 
00109			AmmoType.AddAmmo(AmmoType.MaxAmmo);
00110			Pawn(Owner).ClientMessage(Item.PickupMessage, 'Pickup');				
00111			Item.PlaySound (PickupSound);
00112			if ( PowerLevel<4 ) 
00113			{
00114				ShakeVert = Default.ShakeVert + PowerLevel;
00115				PowerUpSound = Item.ActivateSound;
00116				if ( Pawn(Owner).Weapon == self )
00117				{
00118					PowerLevel++;
00119					GotoState('PowerUp');
00120				}
00121				else if ( (Pawn(Owner).Weapon != Self) && !Pawn(Owner).bNeverSwitchOnPickup )
00122				{
00123					Pawn(Owner).Weapon.PutDown();
00124					Pawn(Owner).PendingWeapon = self;
00125					GotoState('PowerUp', 'Waiting');	
00126				}
00127				else PowerLevel++;
00128			}
00129			Item.SetRespawn();
00130			return true;
00131		}
00132		else
00133			return Super.HandlePickupQuery(Item);
00134	}
00135	
00136	function BecomePickup()
00137	{
00138		Amp = None;
00139		Super.BecomePickup();
00140	}
00141	 
00142	function PlayFiring()
00143	{
00144		AmmoType.GoToState('Idle2');
00145		Owner.PlaySound(AltFireSound, SLOT_None, 1.8*Pawn(Owner).SoundDampening,,,1.2);
00146		if ( PlayerPawn(Owner) != None )
00147			PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert);	
00148		if (PowerLevel==0) 
00149			PlayAnim('Shoot1',0.4,0.2);
00150		else if (PowerLevel==1) 
00151			PlayAnim('Shoot2',0.3,0.2);
00152		else if (PowerLevel==2) 
00153			PlayAnim('Shoot3',0.2, 0.2);
00154		else if (PowerLevel==3) 
00155			PlayAnim('Shoot4',0.1,0.2);
00156		else if (PowerLevel==4) 
00157			PlayAnim('Shoot5',0.1,0.2);
00158	}
00159	
00160	function Projectile ProjectileFire(class<projectile> ProjClass, float ProjSpeed, bool bWarn)
00161	{
00162		local Vector Start, X,Y,Z;
00163		local DispersionAmmo da;
00164		local float Mult;
00165	
00166		Owner.MakeNoise(Pawn(Owner).SoundDampening);
00167		
00168		if (Amp!=None) Mult = Amp.UseCharge(80);
00169		else Mult=1.0;
00170		
00171		GetAxes(Pawn(owner).ViewRotation,X,Y,Z);
00172		Start = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; 
00173		AdjustedAim = pawn(owner).AdjustAim(ProjSpeed, Start, AimError, True, (3.5*FRand()-1<PowerLevel));	
00174		if ( (PowerLevel == 0) || (AmmoType.AmmoAmount < 10) ) 
00175		{
00176			da = DispersionAmmo(Spawn(ProjClass,,, Start,AdjustedAim));
00177			if ( (AmmoType.AmmoAmount < 1) && Level.Game.bDeathMatch )
00178				AmmoType.AmmoAmount = 1;
00179		}
00180		else
00181		{
00182			if ( (PowerLevel==1) && AmmoType.UseAmmo(2) ) 
00183				da = Spawn(class'DAmmo2',,, Start,AdjustedAim);
00184			if ( (PowerLevel==2) && AmmoType.UseAmmo(4) ) 
00185				da = Spawn(class'DAmmo3',,, Start,AdjustedAim);
00186			if ( (PowerLevel==3) && AmmoType.UseAmmo(5) ) 
00187				da = Spawn(class'DAmmo4',,, Start ,AdjustedAim);
00188			if ( (PowerLevel>=4) && AmmoType.UseAmmo(6) ) 
00189				da = Spawn(class'DAmmo5',,, Start,AdjustedAim);		
00190		}
00191		if ( (da != None) && (Mult>1.0) )
00192			da.InitSplash(Mult);
00193	}
00194	
00195	function AltFire( float Value )
00196	{
00197		bPointing=True;
00198		CheckVisibility();
00199		GoToState('AltFiring');
00200	}
00201	
00202	////////////////////////////////////////////////////////
00203	state AltFiring
00204	{
00205	ignores AltFire;
00206	
00207	
00208		function Tick( float DeltaTime )
00209		{
00210			if ( Level.NetMode == NM_StandAlone )
00211			{
00212				PlayerViewOffset.X = WeaponPos.X + FRand()*ChargeSize*7;
00213				PlayerViewOffset.Y = WeaponPos.Y + FRand()*ChargeSize*7;
00214				PlayerViewOffset.Z = WeaponPos.Z + FRand()*ChargeSize*7;
00215			}	
00216			ChargeSize += DeltaTime;
00217			if( (pawn(Owner).bAltFire==0)) GoToState('ShootLoad');
00218			Count += DeltaTime;
00219			if (Count > 0.3) 
00220			{
00221				Count = 0.0;
00222				If (!AmmoType.UseAmmo(1)) GoToState('ShootLoad');
00223				AmmoType.GoToState('Idle2');
00224			}
00225		}
00226		
00227		Function EndState()
00228		{
00229			PlayerviewOffset = WeaponPos;
00230			if (cl1!=None) cl1.Destroy();
00231			if (cl2!=None) cl2.Destroy();		
00232		}
00233	
00234		function BeginState()
00235		{
00236			WeaponPos = PlayerviewOffset;	
00237			ChargeSize=0.0;		
00238		}
00239	
00240	Begin:
00241		if (AmmoType.UseAmmo(1))
00242		{
00243			Owner.Playsound(Misc1Sound,SLOT_Misc, Pawn(Owner).SoundDampening*4.0);
00244			Count = 0.0;		
00245			Sleep(2.0 + 0.6 * PowerLevel);
00246			GoToState('ShootLoad');
00247		}
00248		else GotoState('Idle');
00249	
00250	}
00251	
00252	///////////////////////////////////////////////////////////
00253	state ShootLoad
00254	{
00255		function Fire(float F) {}
00256		function AltFire(float F) {}
00257	
00258		function BeginState()
00259		{
00260			local DispersionAmmo d;
00261			local Vector Start, X,Y,Z;
00262			local float Mult;
00263			
00264			if (Amp!=None) Mult = Amp.UseCharge(ChargeSize*50+50);
00265			else Mult=1.0;
00266			
00267			Owner.PlaySound(AltFireSound, SLOT_Misc, 1.8*Pawn(Owner).SoundDampening);
00268			if ( PlayerPawn(Owner) != None )
00269				PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag*ChargeSize, ShakeVert);
00270			if (PowerLevel==0) PlayAnim('Shoot1',0.2, 0.05);
00271			else if (PowerLevel==1) PlayAnim('Shoot2',0.2, 0.05);
00272			else if (PowerLevel==2) PlayAnim('Shoot3',0.2, 0.05);
00273			else if (PowerLevel==3) PlayAnim('Shoot4',0.2, 0.05);	
00274			else if (PowerLevel==4) PlayAnim('Shoot5',0.2, 0.05);	
00275	
00276			Owner.MakeNoise(Pawn(Owner).SoundDampening);
00277			GetAxes(Pawn(owner).ViewRotation,X,Y,Z);
00278			Start = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; 
00279			AdjustedAim = pawn(owner).AdjustAim(AltProjectileSpeed, Start, AimError, True, True);
00280			d = DispersionAmmo(Spawn(AltProjectileClass,,, Start,AdjustedAim));
00281			if ( d != None )
00282			{	
00283				d.bAltFire = True;
00284				d.DrawScale = 0.5 + ChargeSize*0.6;
00285				d.InitSplash(d.DrawScale * Mult * 1.1);
00286			}
00287		}
00288	Begin:
00289		FinishAnim();
00290		Finish();
00291	}
00292	
00293	
00294	
00295	///////////////////////////////////////////////////////////
00296	function PlayIdleAnim()
00297	{
00298		if (PowerLevel==0) LoopAnim('Idle1',0.04,0.2);
00299		else if (PowerLevel==1) LoopAnim('Idle2',0.04,0.2);
00300		else if (PowerLevel==2) LoopAnim('Idle3',0.04,0.2);
00301		else if (PowerLevel==3) LoopAnim('Idle4',0.04,0.2);			
00302		else if (PowerLevel==4) LoopAnim('Idle5',0.04,0.2);	
00303	}
00304	
00305	///////////////////////////////////////////////////////
00306	state PowerUp
00307	{
00308	ignores fire, altfire;
00309	
00310		function BringUp()
00311		{
00312			bWeaponUp = false;
00313			PlaySelect();
00314			GotoState('Powerup', 'Raising');
00315		}
00316	
00317		function bool PutDown()
00318		{
00319			bChangeWeapon = true;
00320			return True;
00321		}
00322	
00323		function BeginState()
00324		{
00325			bChangeWeapon = false;
00326		}
00327	
00328	Raising:
00329		FinishAnim();
00330		PowerLevel++;
00331	Begin:
00332		if (PowerLevel<5) 
00333		{
00334			AmmoType.MaxAmmo += 10;	
00335			AmmoType.AddAmmo(10);
00336			if ( PowerLevel < 5 )
00337				Owner.PlaySound(PowerUpSound, SLOT_None, Pawn(Owner).SoundDampening);				
00338			if (PowerLevel==1)
00339				PlayAnim('PowerUp1',0.1, 0.05);	
00340			else if (PowerLevel==2) 
00341				PlayAnim('PowerUp2',0.1, 0.05);			
00342			else if (PowerLevel==3) 
00343				PlayAnim('PowerUp3',0.1, 0.05);					
00344			else if (PowerLevel==4) 
00345				PlayAnim('PowerUp4',0.1, 0.05);		
00346			FinishAnim();
00347			if ( bChangeWeapon )
00348				GotoState('DownWeapon');
00349			Finish();
00350		}
00351	Waiting:
00352	}
00353	
00354	
00355	function TweenDown()
00356	{
00357		if ( GetAnimGroup(AnimSequence) == 'Select' )
00358			TweenAnim( AnimSequence, AnimFrame * 0.4 );
00359		else
00360		{
00361			if (PowerLevel==0) PlayAnim('Down1', 1.0, 0.05);
00362			else if (PowerLevel==1) PlayAnim('Down2', 1.0, 0.05);
00363			else if (PowerLevel==2) PlayAnim('Down3', 1.0, 0.05);
00364			else if (PowerLevel==3) PlayAnim('Down4', 1.0, 0.05);	
00365			else if (PowerLevel==4) PlayAnim('Down5', 1.0, 0.05);	
00366		}
00367	}
00368	
00369	function TweenSelect()
00370	{
00371		TweenAnim('Select1',0.001);
00372	}
00373	
00374	function PlaySelect()
00375	{
00376		Owner.PlaySound(SelectSound, SLOT_None, Pawn(Owner).SoundDampening);
00377		if (PowerLevel==0) PlayAnim('Select1',0.5,0.0);
00378		else if (PowerLevel==1) PlayAnim('Select2',0.5,0.0);
00379		else if (PowerLevel==2) PlayAnim('Select3',0.5,0.0);
00380		else if (PowerLevel==3) PlayAnim('Select4',0.5,0.0);	
00381		else if (PowerLevel==4) PlayAnim('Select5',0.5,0.0);
00382	}	
00383	
00384	defaultproperties
00385	{
00386	     AmmoName=Class'UnrealShare.DefaultAmmo'
00387	     PickupAmmoCount=50
00388	     bAltWarnTarget=True
00389	     FireOffset=(X=12.000000,Y=-8.000000,Z=-15.000000)
00390	     ProjectileClass=Class'UnrealShare.DispersionAmmo'
00391	     AltProjectileClass=Class'UnrealShare.DispersionAmmo'
00392	     shakemag=200.000000
00393	     shaketime=0.130000
00394	     shakevert=2.000000
00395	     RefireRate=0.850000
00396	     AltRefireRate=0.300000
00397	     FireSound=Sound'UnrealShare.Dispersion.DispShot'
00398	     AltFireSound=Sound'UnrealShare.Dispersion.DispShot'
00399	     SelectSound=Sound'UnrealShare.Dispersion.DispPickup'
00400	     Misc1Sound=Sound'UnrealShare.Dispersion.PowerUp3'
00401	     DeathMessage="%o was killed by %k's %w.  What a loser!"
00402	     PickupMessage="You got the Dispersion Pistol"
00403	     ItemName="Dispersion Pistol"
00404	     PlayerViewOffset=(X=3.800000,Y=-2.000000,Z=-2.000000)
00405	     PlayerViewMesh=LodMesh'UnrealShare.DPistol'
00406	     PickupViewMesh=LodMesh'UnrealShare.DPistolPick'
00407	     ThirdPersonMesh=LodMesh'UnrealShare.DPistol3rd'
00408	     PickupSound=Sound'UnrealShare.Pickups.WeaponPickup'
00409	     Texture=None
00410	     Mesh=LodMesh'UnrealShare.DPistolPick'
00411	     bNoSmooth=False
00412	     CollisionRadius=28.000000
00413	     CollisionHeight=8.000000
00414	     Mass=15.000000
00415	}

End Source Code