UnrealI
Class GESBioRifle

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

class GESBioRifle
extends Engine.Weapon

//============================================================================= // GESBioRifle. //=============================================================================
Variables
 float ChargeSize,Count

States
ShootLoad, AltFiring

Function Summary
 void AltFire(float Value)
 float RateSelf(out int)
 float SuggestAttackStyle()
     
// return delta to combat style
 float SuggestDefenseStyle()


State ShootLoad Function Summary
 void DripSound()
 void PlayIdleAnim()
     
///////////////////////////////////////////////////////////
 void PlayFiring()
 void Finish()
     
// Finish a firing sequence
 void BeginState()
 void AltFire(float F)
 void Fire(float F)


State AltFiring Function Summary
 void Tick(float DeltaTime)



Source Code


00001	//=============================================================================
00002	// GESBioRifle.
00003	//=============================================================================
00004	class GESBioRifle extends Weapon;
00005	
00006	#exec MESH IMPORT MESH=BRifle ANIVFILE=MODELS\BRifle_a.3D DATAFILE=MODELS\BRifle_d.3D X=0 Y=0 Z=0
00007	#exec MESH ORIGIN MESH=BRifle X=0 Y=0 Z=0 YAW=-64 ROLL=0 PITCH=0
00008	#exec MESH SEQUENCE MESH=BRifle SEQ=All       STARTFRAME=0   NUMFRAMES=101
00009	#exec MESH SEQUENCE MESH=BRifle SEQ=Select    STARTFRAME=0   NUMFRAMES=20 RATE=45 GROUP=Select
00010	#exec MESH SEQUENCE MESH=BRifle SEQ=Still     STARTFRAME=20  NUMFRAMES=1
00011	#exec MESH SEQUENCE MESH=BRifle SEQ=Walking   STARTFRAME=21  NUMFRAMES=20
00012	#exec MESH SEQUENCE MESH=BRifle SEQ=Charging  STARTFRAME=41  NUMFRAMES=30
00013	#exec MESH SEQUENCE MESH=BRifle SEQ=UnLoading STARTFRAME=71  NUMFRAMES=1
00014	#exec MESH SEQUENCE MESH=BRifle SEQ=Fire      STARTFRAME=72  NUMFRAMES=9
00015	#exec MESH SEQUENCE MESH=BRifle SEQ=Drip      STARTFRAME=81  NUMFRAMES=7
00016	#exec MESH SEQUENCE MESH=BRifle SEQ=Down      STARTFRAME=88  NUMFRAMES=13
00017	#exec TEXTURE IMPORT NAME=JBRifle1 FILE=MODELS\BRifle.PCX GROUP=Skins
00018	#exec MESHMAP SCALE MESHMAP=BRifle  X=0.005 Y=0.005 Z=0.01
00019	#exec MESHMAP SETTEXTURE MESHMAP=BRifle NUM=1 TEXTURE=JBRifle1
00020	
00021	#exec MESH IMPORT MESH=BRiflePick ANIVFILE=MODELS\napick_a.3D DATAFILE=MODELS\napick_d.3D X=0 Y=0 Z=0
00022	#exec MESH ORIGIN MESH=BRiflePick X=0 Y=0 Z=63 YAW=64
00023	#exec MESH SEQUENCE MESH=BRiflepick SEQ=All    STARTFRAME=0   NUMFRAMES=1
00024	#exec MESH SEQUENCE MESH=BRiflepick SEQ=Still  STARTFRAME=0   NUMFRAMES=1
00025	#exec TEXTURE IMPORT NAME=JBRifle1 FILE=MODELS\BRifle.PCX GROUP=Skins
00026	#exec MESHMAP SCALE MESHMAP=BRiflepick X=0.1 Y=0.1 Z=0.2
00027	#exec MESHMAP SETTEXTURE MESHMAP=BRiflepick NUM=1 TEXTURE=JBRifle1
00028	
00029	#exec MESH IMPORT MESH=BRifle3 ANIVFILE=MODELS\Napal3_a.3D DATAFILE=MODELS\Napal3_d.3D X=0 Y=0 Z=0
00030	#exec MESH ORIGIN MESH=BRifle3 X=0 Y=-480 Z=-80 YAW=-64 ROLL=9
00031	#exec MESH SEQUENCE MESH=BRifle3 SEQ=All  STARTFRAME=0  NUMFRAMES=15
00032	#exec MESH SEQUENCE MESH=BRifle3 SEQ=Still  STARTFRAME=0  NUMFRAMES=1
00033	#exec MESH SEQUENCE MESH=BRifle3 SEQ=Charging  STARTFRAME=1  NUMFRAMES=9 RATE=40.0
00034	#exec MESH SEQUENCE MESH=BRifle3 SEQ=Fire  STARTFRAME=9  NUMFRAMES=5 RATE=40.0
00035	#exec TEXTURE IMPORT NAME=JBRifle1 FILE=MODELS\BRifle.PCX GROUP="Skins"
00036	#exec MESHMAP SCALE MESHMAP=BRifle3 X=0.035 Y=0.035 Z=0.07
00037	#exec MESHMAP SETTEXTURE MESHMAP=BRifle3 NUM=1 TEXTURE=JBRifle1
00038	
00039	#exec MESH NOTIFY MESH=BRifle SEQ=Drip TIME=0.4 FUNCTION=DripSound
00040	
00041	#exec AUDIO IMPORT FILE="Sounds\BRifle\NPickup2.WAV" NAME="GelSelect" GROUP="BioRifle"
00042	#exec AUDIO IMPORT FILE="Sounds\BRifle\Load4.WAV" NAME="GelLoad" GROUP="BioRifle"
00043	#exec AUDIO IMPORT FILE="Sounds\BRifle\NShot1.WAV" NAME="GelShot" GROUP="BioRifle"
00044	#exec AUDIO IMPORT FILE="Sounds\BRifle\Drip1.WAV" NAME="GelDrip" GROUP="BioRifle"
00045	#exec AUDIO IMPORT FILE="Sounds\BRifle\GelHit1.WAV" NAME="GelHit" GROUP="BioRifle"
00046	
00047	var float ChargeSize,Count;
00048	
00049	function float RateSelf( out int bUseAltMode )
00050	{
00051		local float EnemyDist;
00052		local bool bRetreating;
00053		local vector EnemyDir;
00054	
00055		if ( AmmoType.AmmoAmount <=0 )
00056			return -2;
00057		if ( Pawn(Owner).Enemy == None )
00058		{
00059			bUseAltMode = 0;
00060			return AIRating;
00061		}
00062	
00063		EnemyDir = Pawn(Owner).Enemy.Location - Owner.Location;
00064		EnemyDist = VSize(EnemyDir);
00065		if ( EnemyDist > 1400 )
00066		{
00067			bUseAltMode = 0;
00068			return 0;
00069		}
00070		bRetreating = ( ((EnemyDir/EnemyDist) Dot Owner.Velocity) < -0.7 );
00071		if ( (EnemyDist > 500) && (EnemyDir.Z > -0.4 * EnemyDist) )
00072		{
00073			// only use if enemy not too far and retreating
00074			if ( (EnemyDist > 800) || !bRetreating )
00075			{
00076				bUseAltMode = 0;
00077				return 0;
00078			}
00079			return AIRating;
00080		}
00081	
00082		bUseAltMode = int( bRetreating && (FRand() < 0.3) );
00083	
00084		if ( bRetreating || (EnemyDir.Z < -0.7 * EnemyDist) )
00085			return (AIRating + 0.15);
00086		return AIRating;
00087	}
00088	
00089	// return delta to combat style
00090	function float SuggestAttackStyle()
00091	{
00092		return -0.3;
00093	}
00094	
00095	function float SuggestDefenseStyle()
00096	{
00097		return -0.2;
00098	}
00099	
00100	function AltFire( float Value )
00101	{
00102		bPointing=True;
00103		if ( AmmoType.UseAmmo(1) ) 
00104		{
00105			CheckVisibility();
00106			GoToState('AltFiring');
00107		}
00108	}
00109	
00110	function Projectile ProjectileFire(class<projectile> ProjClass, float ProjSpeed, bool bWarn)
00111	{
00112		local Vector Start, X,Y,Z;
00113	
00114		Owner.MakeNoise(Pawn(Owner).SoundDampening);
00115		GetAxes(Pawn(owner).ViewRotation,X,Y,Z);
00116		Start = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; 
00117		AdjustedAim = pawn(owner).AdjustToss(ProjSpeed, Start, 0, True, (bWarn || (FRand() < 0.4)));	
00118		if ( Owner.IsA('PlayerPawn') )
00119			PlayerPawn(Owner).ClientInstantFlash( -0.3, vect( 278, 435, 143));
00120		return Spawn(ProjClass,,, Start,AdjustedAim);
00121	}
00122	
00123	///////////////////////////////////////////////////////
00124	state AltFiring
00125	{
00126		function Tick( float DeltaTime )
00127		{
00128			ChargeSize += DeltaTime;
00129			if( (pawn(Owner).bAltFire==0)) 
00130				GoToState('ShootLoad');
00131			Count += DeltaTime;
00132			if (Count > 1.0) 
00133			{
00134				Count = 0.0;
00135				if ( (PlayerPawn(Owner) == None) && (FRand() < 0.3) )
00136					GoToState('ShootLoad');
00137				else if (!AmmoType.UseAmmo(1)) 
00138					GoToState('ShootLoad');
00139			}
00140		}
00141	
00142	Begin:
00143		ChargeSize = 0.0;
00144		Count = 0.0;
00145		Owner.PlaySound(Misc1Sound, SLOT_Misc, 1.3*Pawn(Owner).SoundDampening);	 //loading goop	
00146		PlayAnim('Charging',0.2,0.05);
00147		FinishAnim();
00148		GotoState('ShootLoad');
00149	}
00150	
00151	state ShootLoad
00152	{
00153		function Fire(float F) 
00154		{
00155			//bFireMem = true;
00156		}
00157		function AltFire(float F) 
00158		{
00159			//bAltFireMem = true;
00160		}
00161	
00162		function BeginState()
00163		{
00164			Local Projectile Gel;
00165	
00166			Gel = ProjectileFire(AltProjectileClass, AltProjectileSpeed, bAltWarnTarget);
00167			Gel.DrawScale = 0.5 + ChargeSize/3.5;
00168			Owner.PlaySound(FireSound, SLOT_Misc, 1.7*Pawn(Owner).SoundDampening,,,fMax(0.5,1.35-ChargeSize/8.0) );	//shoot goop
00169			PlayAnim('Fire',0.4, 0.05);
00170		}
00171	
00172	Begin:
00173		FinishAnim();
00174		Finish();
00175	}
00176	
00177	
00178	// Finish a firing sequence
00179	function Finish()
00180	{
00181		if ( bChangeWeapon )
00182			GotoState('DownWeapon');
00183		else if ( PlayerPawn(Owner) == None )
00184		{
00185			Pawn(Owner).bAltFire = 0;
00186			Super.Finish();
00187		}
00188		else if ( (AmmoType.AmmoAmount<=0) || (Pawn(Owner).Weapon != self) )
00189			GotoState('Idle');
00190		else if ( /*bFireMem ||*/ Pawn(Owner).bFire!=0 )
00191			Global.Fire(0);
00192		else 
00193			GotoState('Idle');
00194	}
00195	
00196	
00197	function PlayFiring()
00198	{
00199		Owner.PlaySound(AltFireSound, SLOT_None, 1.7*Pawn(Owner).SoundDampening);	//fast fire goop
00200		PlayAnim('Fire',1.1, 0.05);
00201	}
00202	///////////////////////////////////////////////////////////
00203	function PlayIdleAnim()
00204	{
00205		if (VSize(Owner.Velocity) > 10)
00206			PlayAnim('Walking',0.3,0.3);
00207		else if (FRand() < 0.3 )
00208			PlayAnim('Drip', 0.1,0.3);
00209		else 
00210			TweenAnim('Still', 1.0);
00211		Enable('AnimEnd');
00212	}
00213	
00214	function DripSound()
00215	{
00216		Owner.PlaySound(Misc2Sound, SLOT_None, 0.5*Pawn(Owner).SoundDampening);	// Drip
00217	}
00218	
00219	defaultproperties
00220	{
00221	     AmmoName=Class'UnrealI.Sludge'
00222	     PickupAmmoCount=25
00223	     bAltWarnTarget=True
00224	     FireOffset=(X=12.000000,Y=-9.000000,Z=-16.000000)
00225	     ProjectileClass=Class'UnrealShare.BioGel'
00226	     AltProjectileClass=Class'UnrealShare.BigBiogel'
00227	     AIRating=0.600000
00228	     RefireRate=0.900000
00229	     AltRefireRate=0.700000
00230	     FireSound=Sound'UnrealI.BioRifle.GelShot'
00231	     AltFireSound=Sound'UnrealI.BioRifle.GelShot'
00232	     CockingSound=Sound'UnrealI.BioRifle.GelLoad'
00233	     SelectSound=Sound'UnrealI.BioRifle.GelSelect'
00234	     Misc1Sound=Sound'UnrealI.BioRifle.GelLoad'
00235	     Misc2Sound=Sound'UnrealI.BioRifle.GelDrip'
00236	     DeathMessage="%o drank a glass of %k's dripping green load."
00237	     AutoSwitchPriority=8
00238	     InventoryGroup=8
00239	     PickupMessage="You got the GES BioRifle"
00240	     ItemName="GES Bio Rifle"
00241	     PlayerViewOffset=(X=2.000000,Y=-0.700000,Z=-1.150000)
00242	     PlayerViewMesh=LodMesh'UnrealI.BRifle'
00243	     PickupViewMesh=LodMesh'UnrealI.BRiflePick'
00244	     ThirdPersonMesh=LodMesh'UnrealI.BRifle3'
00245	     PickupSound=Sound'UnrealShare.Pickups.WeaponPickup'
00246	     Mesh=LodMesh'UnrealI.BRiflePick'
00247	     bNoSmooth=False
00248	     CollisionRadius=28.000000
00249	     CollisionHeight=15.000000
00250	}

End Source Code