Core.Object | +--Engine.Actor | +--Engine.Inventory | +--Engine.Weapon | +--UnrealI.GESBioRifle
float
ChargeSize,Count
void
AltFire(float Value)
RateSelf(out int)
SuggestAttackStyle()
// return delta to combat style
SuggestDefenseStyle()
DripSound()
PlayIdleAnim()
///////////////////////////////////////////////////////////
PlayFiring()
Finish()
// Finish a firing sequence
BeginState()
AltFire(float F)
Fire(float F)
Tick(float DeltaTime)
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 }