UnrealI
Class FlakCannon

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

class FlakCannon
extends Engine.Weapon

//============================================================================= // FlakCannon. //=============================================================================
States
NormalFire, AltFiring

Function Summary
 void AltFire(float Value)
 void Fire(float Value)
     
// Fire chunks
 void PlayIdleAnim()
 void PlayPostSelect()
 float RateSelf(out int)
     
//-------------------------------------------------------
// AI related functions
 float SuggestAttackStyle()
     
// return delta to combat style
 float SuggestDefenseStyle()
 void TweenDown()
     
///////////////////////////////////////////////////////////


State NormalFire Function Summary


State AltFiring Function Summary



Source Code


00001	//=============================================================================
00002	// FlakCannon.
00003	//=============================================================================
00004	class FlakCannon extends Weapon;
00005	
00006	#exec MESH IMPORT MESH=flak ANIVFILE=MODELS\flak_a.3D DATAFILE=MODELS\flak_d.3D X=0 Y=0 Z=0
00007	#exec MESH ORIGIN MESH=flak X=0 Y=0 Z=0 YAW=-64 ROLL=0 PITCH=0
00008	#exec MESH SEQUENCE MESH=Flak SEQ=All     STARTFRAME=0   NUMFRAMES=105
00009	#exec MESH SEQUENCE MESH=Flak SEQ=Select  STARTFRAME=0   NUMFRAMES=30 RATE=45 GROUP=Select
00010	#exec MESH SEQUENCE MESH=Flak SEQ=Loading STARTFRAME=30  NUMFRAMES=15
00011	#exec MESH SEQUENCE MESH=Flak SEQ=Still   STARTFRAME=45   NUMFRAMES=1
00012	#exec MESH SEQUENCE MESH=Flak SEQ=Fire    STARTFRAME=46  NUMFRAMES=10
00013	#exec MESH SEQUENCE MESH=Flak SEQ=AltFire STARTFRAME=56  NUMFRAMES=11 RATE=24
00014	#exec MESH SEQUENCE MESH=Flak SEQ=Eject   STARTFRAME=67  NUMFRAMES=19
00015	#exec MESH SEQUENCE MESH=Flak SEQ=Down2   STARTFRAME=86  NUMFRAMES=15
00016	#exec MESH SEQUENCE MESH=Flak SEQ=Still2  STARTFRAME=101  NUMFRAMES=1
00017	#exec MESH SEQUENCE MESH=Flak SEQ=Sway    STARTFRAME=102  NUMFRAMES=2
00018	#exec MESH SEQUENCE MESH=Flak SEQ=Down    STARTFRAME=104  NUMFRAMES=6
00019	#exec TEXTURE IMPORT NAME=Jflak1 FILE=MODELS\flak.PCX GROUP=Skins
00020	#exec OBJ LOAD FILE=..\UnrealShare\Textures\fireeffect13.utx PACKAGE=UNREALI.Effect13
00021	#exec MESHMAP SCALE MESHMAP=flak  X=0.005 Y=0.005 Z=0.01
00022	#exec MESHMAP SETTEXTURE MESHMAP=flak NUM=1 TEXTURE=Jflak1
00023	#exec MESHMAP SETTEXTURE MESHMAP=flak NUM=0 TEXTURE=Unreali.Effect13.FireEffect13
00024	
00025	#exec MESH IMPORT MESH=FlakPick ANIVFILE=MODELS\flakpi_a.3D DATAFILE=MODELS\flakpi_d.3D X=0 Y=0 Z=0
00026	#exec MESH ORIGIN MESH=FlakPick X=0 Y=0 Z=0 YAW=64
00027	#exec MESH SEQUENCE MESH=Flakpick SEQ=All    STARTFRAME=0   NUMFRAMES=1
00028	#exec MESH SEQUENCE MESH=Flakpick SEQ=Still  STARTFRAME=0   NUMFRAMES=1
00029	#exec MESHMAP SCALE MESHMAP=Flakpick X=0.06 Y=0.06 Z=0.12
00030	#exec MESHMAP SETTEXTURE MESHMAP=Flakpick NUM=1 TEXTURE=JFlak1
00031	
00032	#exec MESH IMPORT MESH=Flak3rd ANIVFILE=MODELS\flak3_a.3D DATAFILE=MODELS\flak3_d.3D X=0 Y=0 Z=0
00033	#exec MESH ORIGIN MESH=Flak3rd X=-28 Y=-350 Z=-50 YAW=-64 ROLL=9
00034	#exec MESH SEQUENCE MESH=Flak3rd SEQ=All  STARTFRAME=0  NUMFRAMES=10
00035	#exec MESH SEQUENCE MESH=Flak3rd SEQ=Still  STARTFRAME=0  NUMFRAMES=1
00036	#exec MESH SEQUENCE MESH=Flak3rd SEQ=Fire  STARTFRAME=1  NUMFRAMES=9 RATE=40.0
00037	#exec MESH SEQUENCE MESH=Flak3rd SEQ=AltFire  STARTFRAME=1  NUMFRAMES=9 RATE=40.0
00038	#exec TEXTURE IMPORT NAME=JFlak1 FILE=MODELS\flak.PCX GROUP="Skins"
00039	#exec OBJ LOAD FILE=..\UnrealShare\textures\FireEffect18.utx PACKAGE=UNREALSHARE.Effect18
00040	#exec MESHMAP SCALE MESHMAP=Flak3rd X=0.045 Y=0.045 Z=0.09
00041	#exec MESHMAP SETTEXTURE MESHMAP=Flak3rd NUM=1 TEXTURE=JFlak1
00042	#exec MESHMAP SETTEXTURE MESHMAP=Flak3rd NUM=0 TEXTURE=UnrealShare.Effect18.FireEffect18
00043	
00044	#exec AUDIO IMPORT FILE="..\UnrealShare\Sounds\flak\Explode1.WAV" NAME="Explode1" GROUP="flak"
00045	#exec AUDIO IMPORT FILE="..\UnrealShare\Sounds\flak\hidraul2.WAV" NAME="Hidraul2" GROUP="flak"
00046	#exec AUDIO IMPORT FILE="..\UnrealShare\Sounds\flak\load1.WAV" NAME="load1" GROUP="flak"
00047	#exec AUDIO IMPORT FILE="..\UnrealShare\Sounds\flak\click.WAV" NAME="click" GROUP="flak"
00048	#exec AUDIO IMPORT FILE="..\UnrealShare\Sounds\flak\shot1.WAV" NAME="shot1" GROUP="flak"
00049	#exec AUDIO IMPORT FILE="..\UnrealShare\Sounds\flak\shot2.WAV" NAME="shot2" GROUP="flak"
00050	#exec AUDIO IMPORT FILE="..\UnrealShare\Sounds\flak\barrelm1.WAV" NAME="barrelm1" GROUP="flak"
00051	#exec AUDIO IMPORT FILE="..\UnrealShare\Sounds\flak\pdown.WAV" NAME="pdown" GROUP="flak"
00052	#exec AUDIO IMPORT FILE="..\UnrealShare\Sounds\flak\expl2.WAV" NAME="expl2" GROUP="flak"
00053	
00054	//-------------------------------------------------------
00055	// AI related functions
00056	
00057	function float RateSelf( out int bUseAltMode )
00058	{
00059		local float EnemyDist, rating;
00060		local vector EnemyDir;
00061	
00062		if ( AmmoType.AmmoAmount <=0 )
00063			return -2;
00064		if ( Pawn(Owner).Enemy == None )
00065		{
00066			bUseAltMode = 0;
00067			return AIRating;
00068		}
00069		EnemyDir = Pawn(Owner).Enemy.Location - Owner.Location;
00070		EnemyDist = VSize(EnemyDir);
00071		rating = FClamp(AIRating - (EnemyDist - 450) * 0.001, 0.2, AIRating);
00072		if ( EnemyDist > 600 )
00073		{
00074			if ( EnemyDir.Z < -0.5 * EnemyDist )
00075			{
00076				bUseAltMode = 1;
00077				return (AIRating - 0.3);
00078			}
00079			bUseAltMode = 0;
00080		}
00081		else if ( (EnemyDist < 300) || (EnemyDir.Z > 30) )
00082			bUseAltMode = 0;
00083		else
00084			bUseAltMode = int( FRand() < 0.65 );
00085		return rating;
00086	}
00087	
00088	// return delta to combat style
00089	function float SuggestAttackStyle()
00090	{
00091		return 0.4;
00092	}
00093	
00094	function float SuggestDefenseStyle()
00095	{
00096		return -0.3;
00097	}
00098	
00099	//-------------------------------------------------------
00100	 
00101	// Fire chunks
00102	function Fire( float Value )
00103	{
00104		local Vector Start, X,Y,Z;
00105	
00106		//bFireMem = false;
00107		//bAltFireMem = false;
00108		if (AmmoType.UseAmmo(1))
00109		{
00110			CheckVisibility();
00111			bPointing=True;
00112			Start = Owner.Location + CalcDrawOffset();
00113			if ( PlayerPawn(Owner) != None )
00114			{
00115				PlayerPawn(Owner).ClientInstantFlash( -0.4, vect(650, 450, 190));
00116				PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert);
00117			}
00118			Owner.MakeNoise(2.0 * Pawn(Owner).SoundDampening);
00119			AdjustedAim = pawn(owner).AdjustAim(AltProjectileSpeed, Start, AimError, True, bWarnTarget);
00120			GetAxes(AdjustedAim,X,Y,Z);
00121			Spawn(class'WeaponLight',,'',Start+X*20,rot(0,0,0));		
00122			Start = Start + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z;	
00123			Spawn( class 'MasterChunk',, '', Start, AdjustedAim);
00124			Spawn( class 'Chunk2',, '', Start - Z, AdjustedAim);
00125			Spawn( class 'Chunk3',, '', Start + 2 * Y + Z, AdjustedAim);
00126			Spawn( class 'Chunk4',, '', Start - Y, AdjustedAim);
00127			Spawn( class 'Chunk1',, '', Start + 2 * Y - Z, AdjustedAim);
00128			Spawn( class 'Chunk2',, '', Start, AdjustedAim);
00129			Spawn( class 'Chunk3',, '', Start + Y - Z, AdjustedAim);
00130			Spawn( class 'Chunk4',, '', Start + 2 * Y + Z, AdjustedAim);
00131			PlayAnim( 'Fire', 0.9, 0.05);
00132			Owner.PlaySound(FireSound, SLOT_None,Pawn(Owner).SoundDampening*4.0);	
00133			GoToState('NormalFire');
00134		}
00135	}
00136	
00137	function AltFire( float Value )
00138	{
00139		local Vector Start, X,Y,Z;
00140	
00141		//bFireMem = false;
00142		//bAltFireMem = false;
00143		if (AmmoType.UseAmmo(1))
00144		{
00145			CheckVisibility();
00146			Owner.PlaySound(Misc1Sound, SLOT_None, 0.6*Pawn(Owner).SoundDampening);
00147			Owner.PlaySound(AltFireSound, SLOT_None,Pawn(Owner).SoundDampening*4.0);
00148			PlayAnim('AltFire', 1.3, 0.05);
00149			bPointing=True;
00150			Owner.MakeNoise(Pawn(Owner).SoundDampening);
00151			GetAxes(Pawn(owner).ViewRotation,X,Y,Z);
00152			Start = Owner.Location + CalcDrawOffset();
00153			Spawn(class'WeaponLight',,'',Start+X*20,rot(0,0,0));		
00154			Start = Start + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; 
00155			AdjustedAim = pawn(owner).AdjustToss(AltProjectileSpeed, Start, AimError, True, bAltWarnTarget);	//TIM - syntax fixme
00156			Spawn(class'FlakShell',,, Start,AdjustedAim);	
00157			if ( PlayerPawn(Owner) != None )
00158			{
00159				PlayerPawn(Owner).ClientInstantFlash( -0.4, vect(650, 450, 190));
00160				PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert);
00161			}
00162			GoToState('AltFiring');
00163		}	
00164	}
00165	
00166	////////////////////////////////////////////////////////////
00167	state AltFiring
00168	{
00169	Begin:
00170		FinishAnim();
00171		Owner.PlaySound(CockingSound, SLOT_None,0.5*Pawn(Owner).SoundDampening);	
00172		PlayAnim('Loading',0.65, 0.05);
00173		FinishAnim();
00174		Finish();
00175	}
00176	
00177	/////////////////////////////////////////////////////////////
00178	state NormalFire
00179	{
00180	Begin:
00181		FinishAnim();
00182		PlayAnim('Eject',1.5, 0.05);
00183		Owner.PlaySound(Misc3Sound, SLOT_None,0.6*Pawn(Owner).SoundDampening);	
00184		FinishAnim();
00185		PlayAnim('Loading',1.4, 0.05);
00186		Owner.PlaySound(CockingSound, SLOT_None,0.5*Pawn(Owner).SoundDampening);		
00187		FinishAnim();
00188		Finish();	
00189	}
00190	
00191	///////////////////////////////////////////////////////////
00192	function TweenDown()
00193	{
00194		if ( GetAnimGroup(AnimSequence) == 'Select' )
00195			TweenAnim( AnimSequence, AnimFrame * 0.4 );
00196		else
00197		{
00198			if (AmmoType.AmmoAmount<=0)	PlayAnim('Down2',1.0, 0.05);
00199			else PlayAnim('Down',1.0, 0.05);
00200		}
00201	}
00202	
00203	
00204	function PlayIdleAnim()
00205	{
00206	//	if (VSize(Pawn(Owner).Velocity)>20 && AnimSequence=='Still') 
00207	//		LoopAnim('Still',0.1);
00208	//	else if (VSize(Pawn(Owner).Velocity)<20 && AnimSequence!='Still') 
00209			LoopAnim('Sway',0.01,0.3);
00210	}
00211	
00212	function PlayPostSelect()
00213	{
00214		PlayAnim('Loading', 1.3, 0.05);
00215		Owner.PlaySound(Misc2Sound, SLOT_None,1.3*Pawn(Owner).SoundDampening);	
00216	}
00217	
00218	defaultproperties
00219	{
00220	     AmmoName=Class'UnrealI.FlakBox'
00221	     PickupAmmoCount=10
00222	     bWarnTarget=True
00223	     bAltWarnTarget=True
00224	     bSplashDamage=True
00225	     FireOffset=(X=10.000000,Y=-12.000000,Z=-15.000000)
00226	     ProjectileClass=Class'UnrealI.MasterChunk'
00227	     AltProjectileClass=Class'UnrealI.FlakShell'
00228	     shakemag=350.000000
00229	     shaketime=0.150000
00230	     shakevert=8.500000
00231	     AIRating=0.800000
00232	     FireSound=Sound'UnrealShare.flak.shot1'
00233	     AltFireSound=Sound'UnrealShare.flak.Explode1'
00234	     CockingSound=Sound'UnrealI.flak.load1'
00235	     SelectSound=Sound'UnrealI.flak.pdown'
00236	     Misc2Sound=Sound'UnrealI.flak.Hidraul2'
00237	     Misc3Sound=Sound'UnrealShare.flak.Click'
00238	     DeathMessage="%o was ripped to shreds by %k's %w."
00239	     AutoSwitchPriority=6
00240	     InventoryGroup=6
00241	     PickupMessage="You got the Flak Cannon"
00242	     ItemName="Flak Cannon"
00243	     PlayerViewOffset=(X=2.100000,Y=-1.500000,Z=-1.250000)
00244	     PlayerViewMesh=LodMesh'UnrealI.flak'
00245	     PlayerViewScale=1.200000
00246	     PickupViewMesh=LodMesh'UnrealI.FlakPick'
00247	     ThirdPersonMesh=LodMesh'UnrealI.Flak3rd'
00248	     PickupSound=Sound'UnrealShare.Pickups.WeaponPickup'
00249	     Mesh=LodMesh'UnrealI.FlakPick'
00250	     bNoSmooth=False
00251	     CollisionRadius=27.000000
00252	     CollisionHeight=23.000000
00253	     LightBrightness=228
00254	     LightHue=30
00255	     LightSaturation=71
00256	     LightRadius=14
00257	}

End Source Code