Core.Object | +--Engine.Actor | +--Engine.Inventory | +--Engine.Weapon | +--Botpack.TournamentWeapon | +--Botpack.Minigun2
int
Count
ShotAccuracy,
LastShellSpawn
Texture
MuzzleFlashVariations[10]
bOutOfAmmo,
bFiredShot
void
AltFire(float Value)
Fire(float Value)
GenerateBullet()
simulated
PlayAltFiring()
PlayFiring()
PlayUnwind()
ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z)
float
RateSelf(out int)
TraceFire(float Accuracy)
setHand(float Hand)
// set which hand is holding weapon
EndState()
BeginState()
AnimEnd()
Tick(float DeltaTime)
bool
ClientAltFire(float Value)
ClientFire(float Value)
ForceAltFire()
ForceFire()
AltFire(float F)
Fire(float F)
00001 //============================================================================= 00002 // Minigun. 00003 //============================================================================= 00004 class Minigun2 extends TournamentWeapon; 00005 00006 #exec MESH IMPORT MESH=Minigun2m ANIVFILE=MODELS\minigun_a.3D DATAFILE=MODELS\minigun_d.3D X=0 Y=0 Z=0 00007 #exec MESH ORIGIN MESH=Minigun2m X=0 Y=0 Z=0 YAW=64 PITCH=0 ROLL=0 00008 #exec MESH SEQUENCE MESH=Minigun2m SEQ=All STARTFRAME=0 NUMFRAMES=152 00009 #exec MESH SEQUENCE MESH=Minigun2m SEQ=Select STARTFRAME=0 NUMFRAMES=20 RATE=36 GROUP=Select 00010 #exec MESH SEQUENCE MESH=Minigun2m SEQ=Still STARTFRAME=21 NUMFRAMES=1 00011 #exec MESH SEQUENCE MESH=Minigun2m SEQ=Wind STARTFRAME=21 NUMFRAMES=19 00012 #exec MESH SEQUENCE MESH=Minigun2m SEQ=Wind2 STARTFRAME=40 NUMFRAMES=19 00013 #exec MESH SEQUENCE MESH=Minigun2m SEQ=Shoot1 STARTFRAME=61 NUMFRAMES=19 00014 #exec MESH SEQUENCE MESH=Minigun2m SEQ=Shoot2 STARTFRAME=61 NUMFRAMES=19 00015 #exec MESH SEQUENCE MESH=Minigun2m SEQ=Unwind STARTFRAME=80 NUMFRAMES=39 00016 #exec MESH SEQUENCE MESH=Minigun2m SEQ=Idle STARTFRAME=121 NUMFRAMES=19 00017 #exec MESH SEQUENCE MESH=Minigun2m SEQ=Down STARTFRAME=141 NUMFRAMES=10 00018 00019 #exec OBJ LOAD FILE=Textures\Ammocount.utx PACKAGE=Botpack.Ammocount 00020 #exec TEXTURE IMPORT NAME=Mini_t FILE=MODELS\Mini.PCX GROUP="Skins" LODSET=2 00021 #exec TEXTURE IMPORT NAME=Mini_t1 FILE=MODELS\Mini1.PCX GROUP="Skins" LODSET=2 00022 #exec TEXTURE IMPORT NAME=Mini_t2 FILE=MODELS\Mini2.PCX GROUP="Skins" LODSET=2 00023 #exec TEXTURE IMPORT NAME=Mini_t3 FILE=MODELS\Mini3.PCX GROUP="Skins" LODSET=2 00024 #exec TEXTURE IMPORT NAME=Mini_t4 FILE=MODELS\Mini4.PCX GROUP="Skins" LODSET=2 00025 00026 #exec MESHMAP SCALE MESHMAP=Minigun2m X=0.0035 Y=0.0017 Z=0.007 00027 #exec MESHMAP SETTEXTURE MESHMAP=Minigun2m NUM=0 TEXTURE=Mini_t1 00028 #exec MESHMAP SETTEXTURE MESHMAP=Minigun2m NUM=1 TEXTURE=Mini_t2 00029 #exec MESHMAP SETTEXTURE MESHMAP=Minigun2m NUM=2 TEXTURE=Mini_t3 00030 #exec MESHMAP SETTEXTURE MESHMAP=Minigun2m NUM=3 TEXTURE=Mini_t4 00031 #exec MESHMAP SETTEXTURE MESHMAP=Minigun2m NUM=4 TEXTURE=Botpack.Ammocount.MiniAmmoled 00032 00033 #exec MESH IMPORT MESH=Minigun2L ANIVFILE=MODELS\minigun_a.3D DATAFILE=MODELS\minigun_d.3D UnMirror=1 unmirrortex=4 00034 #exec MESH ORIGIN MESH=Minigun2L X=0 Y=0 Z=0 YAW=64 PITCH=0 ROLL=0 00035 #exec MESH SEQUENCE MESH=Minigun2L SEQ=All STARTFRAME=0 NUMFRAMES=152 00036 #exec MESH SEQUENCE MESH=Minigun2L SEQ=Select STARTFRAME=0 NUMFRAMES=20 RATE=36 GROUP=Select 00037 #exec MESH SEQUENCE MESH=Minigun2L SEQ=Still STARTFRAME=21 NUMFRAMES=1 00038 #exec MESH SEQUENCE MESH=Minigun2L SEQ=Wind STARTFRAME=21 NUMFRAMES=19 00039 #exec MESH SEQUENCE MESH=Minigun2L SEQ=Wind2 STARTFRAME=40 NUMFRAMES=19 00040 #exec MESH SEQUENCE MESH=Minigun2L SEQ=Shoot1 STARTFRAME=61 NUMFRAMES=19 00041 #exec MESH SEQUENCE MESH=Minigun2L SEQ=Shoot2 STARTFRAME=61 NUMFRAMES=19 00042 #exec MESH SEQUENCE MESH=Minigun2L SEQ=Unwind STARTFRAME=80 NUMFRAMES=39 00043 #exec MESH SEQUENCE MESH=Minigun2L SEQ=Idle STARTFRAME=121 NUMFRAMES=19 00044 #exec MESH SEQUENCE MESH=Minigun2L SEQ=Down STARTFRAME=141 NUMFRAMES=10 00045 00046 #exec MESHMAP SCALE MESHMAP=Minigun2L X=0.0035 Y=0.0017 Z=0.007 00047 #exec MESHMAP SETTEXTURE MESHMAP=Minigun2L NUM=0 TEXTURE=Mini_t1 00048 #exec MESHMAP SETTEXTURE MESHMAP=Minigun2L NUM=1 TEXTURE=Mini_t2 00049 #exec MESHMAP SETTEXTURE MESHMAP=Minigun2L NUM=2 TEXTURE=Mini_t3 00050 #exec MESHMAP SETTEXTURE MESHMAP=Minigun2L NUM=3 TEXTURE=Mini_t4 00051 #exec MESHMAP SETTEXTURE MESHMAP=Minigun2L NUM=4 TEXTURE=Botpack.Ammocount.MiniAmmoled 00052 00053 #exec TEXTURE IMPORT NAME=Muz1 FILE=MODELS\muz1.PCX GROUP="Skins" LODSET=2 00054 #exec TEXTURE IMPORT NAME=Muz2 FILE=MODELS\muz2.PCX GROUP="Skins" LODSET=2 00055 #exec TEXTURE IMPORT NAME=Muz3 FILE=MODELS\muz3.PCX GROUP="Skins" LODSET=2 00056 #exec TEXTURE IMPORT NAME=Muz4 FILE=MODELS\muz4.PCX GROUP="Skins" LODSET=2 00057 #exec TEXTURE IMPORT NAME=Muz5 FILE=MODELS\muz5.PCX GROUP="Skins" LODSET=2 00058 #exec TEXTURE IMPORT NAME=Muz6 FILE=MODELS\muz6.PCX GROUP="Skins" LODSET=2 00059 #exec TEXTURE IMPORT NAME=Muz7 FILE=MODELS\muz7.PCX GROUP="Skins" LODSET=2 00060 #exec TEXTURE IMPORT NAME=Muz8 FILE=MODELS\muz8.PCX GROUP="Skins" LODSET=2 00061 #exec TEXTURE IMPORT NAME=Muz9 FILE=MODELS\muz9.PCX GROUP="Skins" LODSET=2 00062 00063 #exec MESH IMPORT MESH=MinigunPick ANIVFILE=MODELS\minipick_a.3D DATAFILE=MODELS\minipick_d.3D X=0 Y=0 Z=0 00064 #exec MESH ORIGIN MESH=MinigunPick X=0 Y=0 Z=0 YAW=64 PITCH=0 ROLL=0 00065 #exec MESH SEQUENCE MESH=MinigunPick SEQ=All STARTFRAME=0 NUMFRAMES=1 00066 #exec MESHMAP SCALE MESHMAP=MinigunPick X=0.1 Y=0.1 Z=0.2 00067 #exec MESHMAP SETTEXTURE MESHMAP=MinigunPick NUM=1 TEXTURE=Mini_t 00068 00069 #exec MESH IMPORT MESH=MiniHand ANIVFILE=MODELS\minihand_a.3D DATAFILE=MODELS\minihand_d.3D X=0 Y=0 Z=0 00070 #exec MESH ORIGIN MESH=MiniHand X=5 Y=270 Z=-20 YAW=64 PITCH=0 00071 #exec MESH SEQUENCE MESH=MiniHand SEQ=All STARTFRAME=0 NUMFRAMES=11 00072 #exec MESH SEQUENCE MESH=MiniHand SEQ=Shoot1 STARTFRAME=1 NUMFRAMES=10 00073 #exec MESHMAP SCALE MESHMAP=MiniHand X=0.06 Y=0.06 Z=0.12 00074 #exec MESHMAP SETTEXTURE MESHMAP=MiniHand NUM=1 TEXTURE=Mini_t 00075 00076 #exec TEXTURE IMPORT NAME=IconMini FILE=TEXTURES\HUD\WpnMini.PCX GROUP="Icons" MIPS=OFF 00077 #exec TEXTURE IMPORT NAME=UseMini FILE=TEXTURES\HUD\UseMini.PCX GROUP="Icons" MIPS=OFF 00078 00079 #exec AUDIO IMPORT FILE="Sounds\Minigun\RegFire.Wav" NAME=M2RegFire GROUP="Minigun2" 00080 #exec AUDIO IMPORT FILE="Sounds\Minigun\AltFire.Wav" NAME=M2AltFire GROUP="Minigun2" 00081 #exec AUDIO IMPORT FILE="Sounds\Minigun\WindDown.Wav" NAME=M2WindDown GROUP="Minigun2" 00082 00083 #exec MESH IMPORT MESH=MuzzFlash3 ANIVFILE=MODELS\muzzle2_a.3d DATAFILE=MODELS\Muzzle2_d.3d X=0 Y=0 Z=0 00084 #exec MESH LODPARAMS MESH=muzzFlash3 MINVERTS=8 STRENGTH=0.7 ZDISP=800.0 00085 00086 #exec MESH ORIGIN MESH=MuzzFlash3 X=0 Y=940 Z=0 YAW=64 00087 #exec MESH SEQUENCE MESH=MuzzFlash3 SEQ=All STARTFRAME=0 NUMFRAMES=9 00088 #exec MESH SEQUENCE MESH=MuzzFlash3 SEQ=Shoot STARTFRAME=0 NUMFRAMES=9 00089 #exec MESHMAP NEW MESHMAP=MuzzFlash3 MESH=MuzzFlash3 00090 #exec MESHMAP SCALE MESHMAP=MuzzFlash3 X=0.08 Y=0.08 Z=0.16 00091 #exec TEXTURE IMPORT NAME=Muzzy FILE=MODELS\Muzzy.PCX GROUP=Skins 00092 00093 var float ShotAccuracy, LastShellSpawn; 00094 var int Count; 00095 var bool bOutOfAmmo, bFiredShot; 00096 var() texture MuzzleFlashVariations[10]; 00097 00098 // set which hand is holding weapon 00099 function setHand(float Hand) 00100 { 00101 if ( Hand == 2 ) 00102 { 00103 FireOffset.Y = 0; 00104 bHideWeapon = true; 00105 return; 00106 } 00107 else 00108 bHideWeapon = false; 00109 PlayerViewOffset = Default.PlayerViewOffset * 100; 00110 FireOffset.Y = Hand * Default.FireOffset.Y; 00111 PlayerViewOffset.Y *= Hand; 00112 if ( Hand == 1 ) 00113 Mesh = mesh(DynamicLoadObject("Botpack.Minigun2L", class'Mesh')); 00114 else 00115 { 00116 Mesh = mesh'Minigun2m'; 00117 if ( Hand == 0 ) 00118 { 00119 PlayerViewOffset.X = Default.PlayerViewOffset.X * 95; 00120 PlayerViewOffset.Z = Default.PlayerViewOffset.Z * 105; 00121 } 00122 } 00123 } 00124 00125 simulated event RenderTexture(ScriptedTexture Tex) 00126 { 00127 local Color C; 00128 local string Temp; 00129 00130 Temp = String(AmmoType.AmmoAmount); 00131 00132 while(Len(Temp) < 3) Temp = "0"$Temp; 00133 00134 C.R = 255; 00135 C.G = 0; 00136 C.B = 0; 00137 00138 Tex.DrawColoredText( 2, 10, Temp, Font'LEDFont2', C ); 00139 } 00140 00141 function float RateSelf( out int bUseAltMode ) 00142 { 00143 local float dist; 00144 00145 if ( AmmoType.AmmoAmount <=0 ) 00146 return -2; 00147 00148 if ( Pawn(Owner).Enemy == None ) 00149 { 00150 bUseAltMode = 0; 00151 return AIRating; 00152 } 00153 00154 dist = VSize(Pawn(Owner).Enemy.Location - Owner.Location); 00155 bUseAltMode = 1; 00156 if ( dist > 1200 ) 00157 { 00158 if ( dist > 1700 ) 00159 bUseAltMode = 0; 00160 return (AIRating * FMin(Pawn(Owner).DamageScaling, 1.5) + FMin(0.0001 * dist, 0.3)); 00161 } 00162 AIRating *= FMin(Pawn(Owner).DamageScaling, 1.5); 00163 return AIRating; 00164 } 00165 00166 simulated event RenderOverlays( canvas Canvas ) 00167 { 00168 local UT_Shellcase s; 00169 local vector X,Y,Z; 00170 local float dir; 00171 00172 if ( bSteadyFlash3rd ) 00173 { 00174 bMuzzleFlash = 1; 00175 bSetFlashTime = false; 00176 if ( !Level.bDropDetail ) 00177 MFTexture = MuzzleFlashVariations[Rand(10)]; 00178 else 00179 MFTexture = MuzzleFlashVariations[Rand(5)]; 00180 } 00181 else 00182 bMuzzleFlash = 0; 00183 FlashY = Default.FlashY * (1.08 - 0.16 * FRand()); 00184 if ( !Owner.IsA('PlayerPawn') || (PlayerPawn(Owner).Handedness == 0) ) 00185 FlashO = Default.FlashO * (4 + 0.15 * FRand()); 00186 else 00187 FlashO = Default.FlashO * (1 + 0.15 * FRand()); 00188 Texture'MiniAmmoled'.NotifyActor = Self; 00189 Super.RenderOverlays(Canvas); 00190 Texture'MiniAmmoled'.NotifyActor = None; 00191 00192 if ( bSteadyFlash3rd && Level.bHighDetailMode && (Level.TimeSeconds - LastShellSpawn > 0.125) 00193 && (Level.Pauser=="") ) 00194 { 00195 LastShellSpawn = Level.TimeSeconds; 00196 GetAxes(Pawn(Owner).ViewRotation,X,Y,Z); 00197 00198 if ( PlayerViewOffset.Y >= 0 ) 00199 dir = 1; 00200 else 00201 dir = -1; 00202 if ( Level.bHighDetailMode ) 00203 { 00204 s = Spawn(class'MiniShellCase',Owner, '', Owner.Location + CalcDrawOffset() + 30 * X + (0.4 * PlayerViewOffset.Y+5.0) * Y - Z * 5); 00205 if ( s != None ) 00206 s.Eject(((FRand()*0.3+0.4)*X + (FRand()*0.3+0.2)*dir*Y + (FRand()*0.3+1.0) * Z)*160); 00207 } 00208 } 00209 } 00210 00211 function GenerateBullet() 00212 { 00213 LightType = LT_Steady; 00214 bFiredShot = true; 00215 if ( PlayerPawn(Owner) != None ) 00216 PlayerPawn(Owner).ClientInstantFlash( -0.2, vect(325, 225, 95)); 00217 if ( AmmoType.UseAmmo(1) ) 00218 TraceFire(ShotAccuracy); 00219 else 00220 GotoState('FinishFire'); 00221 } 00222 00223 function TraceFire( float Accuracy ) 00224 { 00225 local vector HitLocation, HitNormal, StartTrace, EndTrace, X,Y,Z, AimDir; 00226 local actor Other; 00227 00228 Owner.MakeNoise(Pawn(Owner).SoundDampening); 00229 GetAxes(Pawn(owner).ViewRotation,X,Y,Z); 00230 StartTrace = Owner.Location + CalcDrawOffset() + FireOffset.Y * Y + FireOffset.Z * Z; 00231 AdjustedAim = pawn(owner).AdjustAim(1000000, StartTrace, 2.75*AimError, False, False); 00232 EndTrace = StartTrace + Accuracy * (FRand() - 0.5 )* Y * 1000 00233 + Accuracy * (FRand() - 0.5 ) * Z * 1000; 00234 AimDir = vector(AdjustedAim); 00235 EndTrace += (10000 * AimDir); 00236 Other = Pawn(Owner).TraceShot(HitLocation,HitNormal,EndTrace,StartTrace); 00237 00238 Count++; 00239 if ( Count == 4 ) 00240 { 00241 Count = 0; 00242 if ( VSize(HitLocation - StartTrace) > 250 ) 00243 Spawn(class'MTracer',,, StartTrace + 96 * AimDir,rotator(EndTrace - StartTrace)); 00244 } 00245 ProcessTraceHit(Other, HitLocation, HitNormal, vector(AdjustedAim),Y,Z); 00246 } 00247 00248 function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z) 00249 { 00250 local int rndDam; 00251 00252 if (Other == Level) 00253 Spawn(class'UT_LightWallHitEffect',,, HitLocation+HitNormal, Rotator(HitNormal)); 00254 else if ( (Other!=self) && (Other!=Owner) && (Other != None) ) 00255 { 00256 if ( !Other.bIsPawn && !Other.IsA('Carcass') ) 00257 spawn(class'UT_SpriteSmokePuff',,,HitLocation+HitNormal*9); 00258 else 00259 Other.PlaySound(Sound 'ChunkHit',, 4.0,,100); 00260 00261 if ( Other.IsA('Bot') && (FRand() < 0.2) ) 00262 Pawn(Other).WarnTarget(Pawn(Owner), 500, X); 00263 rndDam = 9 + Rand(6); 00264 if ( FRand() < 0.2 ) 00265 X *= 2.5; 00266 Other.TakeDamage(rndDam, Pawn(Owner), HitLocation, rndDam*500.0*X, MyDamageType); 00267 } 00268 } 00269 00270 function Fire( float Value ) 00271 { 00272 Enable('Tick'); 00273 if ( AmmoType == None ) 00274 { 00275 // ammocheck 00276 GiveAmmo(Pawn(Owner)); 00277 } 00278 if ( AmmoType.UseAmmo(1) ) 00279 { 00280 SoundVolume = 255*Pawn(Owner).SoundDampening; 00281 Pawn(Owner).PlayRecoil(FiringSpeed); 00282 bCanClientFire = true; 00283 bPointing=True; 00284 ShotAccuracy = 0.2; 00285 ClientFire(value); 00286 GotoState('NormalFire'); 00287 } 00288 else GoToState('Idle'); 00289 } 00290 00291 function AltFire( float Value ) 00292 { 00293 Enable('Tick'); 00294 if ( AmmoType == None ) 00295 { 00296 // ammocheck 00297 GiveAmmo(Pawn(Owner)); 00298 } 00299 if ( AmmoType.UseAmmo(1) ) 00300 { 00301 bPointing=True; 00302 bCanClientFire = true; 00303 ShotAccuracy = 0.95; 00304 Pawn(Owner).PlayRecoil(FiringSpeed); 00305 SoundVolume = 255*Pawn(Owner).SoundDampening; 00306 ClientAltFire(value); 00307 GoToState('AltFiring'); 00308 } 00309 else GoToState('Idle'); 00310 } 00311 00312 simulated function PlayFiring() 00313 { 00314 if ( PlayerPawn(Owner) != None ) 00315 PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert); 00316 PlayAnim('Shoot1',1 + 0.6 * FireAdjust, 0.05); 00317 AmbientGlow = 250; 00318 AmbientSound = FireSound; 00319 bSteadyFlash3rd = true; 00320 } 00321 00322 simulated function PlayAltFiring() 00323 { 00324 if ( PlayerPawn(Owner) != None ) 00325 PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert); 00326 PlayAnim('Shoot1',1 + 0.3 * FireAdjust, 0.05); 00327 AmbientGlow = 250; 00328 AmbientSound = FireSound; 00329 bSteadyFlash3rd = true; 00330 } 00331 00332 simulated function PlayUnwind() 00333 { 00334 if ( Owner != None ) 00335 { 00336 PlayOwnedSound(Misc1Sound, SLOT_Misc, 3.0*Pawn(Owner).SoundDampening); //Finish firing, power down 00337 PlayAnim('UnWind',1.5, 0.05); 00338 } 00339 } 00340 00341 //////////////////////////////////////////////////////// 00342 state FinishFire 00343 { 00344 function Fire(float F) {} 00345 function AltFire(float F) {} 00346 00347 function ForceFire() 00348 { 00349 bForceFire = true; 00350 } 00351 00352 function ForceAltFire() 00353 { 00354 bForceAltFire = true; 00355 } 00356 00357 function BeginState() 00358 { 00359 PlayUnwind(); 00360 } 00361 00362 Begin: 00363 FinishAnim(); 00364 Finish(); 00365 } 00366 00367 /////////////////////////////////////////////////////// 00368 state NormalFire 00369 { 00370 function Tick( float DeltaTime ) 00371 { 00372 if (Owner==None) 00373 AmbientSound = None; 00374 } 00375 00376 function AnimEnd() 00377 { 00378 if (Pawn(Owner).Weapon != self) GotoState(''); 00379 else if (Pawn(Owner).bFire!=0 && AmmoType.AmmoAmount>0) 00380 Global.Fire(0); 00381 else if ( Pawn(Owner).bAltFire!=0 && AmmoType.AmmoAmount>0) 00382 Global.AltFire(0); 00383 else 00384 GotoState('FinishFire'); 00385 } 00386 00387 function BeginState() 00388 { 00389 AmbientGlow = 250; 00390 AmbientSound = FireSound; 00391 bSteadyFlash3rd = true; 00392 Super.BeginState(); 00393 } 00394 00395 function EndState() 00396 { 00397 bSteadyFlash3rd = false; 00398 AmbientGlow = 0; 00399 LightType = LT_None; 00400 AmbientSound = None; 00401 Super.EndState(); 00402 } 00403 00404 Begin: 00405 Sleep(0.13); 00406 GenerateBullet(); 00407 Goto('Begin'); 00408 } 00409 00410 state ClientFiring 00411 { 00412 simulated function AnimEnd() 00413 { 00414 if ( (Pawn(Owner) == None) || (AmmoType.AmmoAmount <= 0) ) 00415 { 00416 PlayUnwind(); 00417 GotoState(''); 00418 } 00419 else if ( !bCanClientFire ) 00420 GotoState(''); 00421 else if ( Pawn(Owner).bFire != 0 ) 00422 Global.ClientFire(0); 00423 else if ( Pawn(Owner).bAltFire != 0 ) 00424 Global.ClientAltFire(0); 00425 else 00426 { 00427 PlayUnwind(); 00428 GotoState('ClientFinish'); 00429 } 00430 } 00431 00432 simulated function BeginState() 00433 { 00434 AmbientSound = FireSound; 00435 bSteadyFlash3rd = true; 00436 } 00437 00438 simulated function EndState() 00439 { 00440 bSteadyFlash3rd = false; 00441 Super.EndState(); 00442 } 00443 } 00444 00445 //////////////////////////////////////////////////////// 00446 00447 state ClientFinish 00448 { 00449 simulated function bool ClientFire(float Value) 00450 { 00451 bForceFire = bForceFire || ( bCanClientFire && (Pawn(Owner) != None) && (AmmoType.AmmoAmount > 0) ); 00452 return bForceFire; 00453 } 00454 00455 simulated function bool ClientAltFire(float Value) 00456 { 00457 bForceAltFire = bForceAltFire || ( bCanClientFire && (Pawn(Owner) != None) && (AmmoType.AmmoAmount > 0) ); 00458 return bForceAltFire; 00459 } 00460 00461 simulated function AnimEnd() 00462 { 00463 if ( bCanClientFire && (PlayerPawn(Owner) != None) && (AmmoType.AmmoAmount > 0) ) 00464 { 00465 if ( bForceFire || (Pawn(Owner).bFire != 0) ) 00466 { 00467 Global.ClientFire(0); 00468 return; 00469 } 00470 else if ( bForceAltFire || (Pawn(Owner).bAltFire != 0) ) 00471 { 00472 Global.ClientAltFire(0); 00473 return; 00474 } 00475 } 00476 GotoState(''); 00477 Global.AnimEnd(); 00478 } 00479 00480 simulated function EndState() 00481 { 00482 bSteadyFlash3rd = false; 00483 bForceFire = false; 00484 bForceAltFire = false; 00485 AmbientSound = None; 00486 } 00487 00488 simulated function BeginState() 00489 { 00490 bSteadyFlash3rd = false; 00491 bForceFire = false; 00492 bForceAltFire = false; 00493 } 00494 } 00495 00496 state ClientAltFiring 00497 { 00498 simulated function AnimEnd() 00499 { 00500 if ( (Pawn(Owner) == None) || (AmmoType.AmmoAmount <= 0) ) 00501 { 00502 PlayUnwind(); 00503 GotoState(''); 00504 } 00505 else if ( !bCanClientFire ) 00506 GotoState(''); 00507 else if ( Pawn(Owner).bAltFire != 0 ) 00508 { 00509 if ( (AnimSequence != 'Shoot2') || !bAnimLoop ) 00510 { 00511 AmbientSound = AltFireSound; 00512 SoundVolume = 255*Pawn(Owner).SoundDampening; 00513 LoopAnim('Shoot2',1.9); 00514 } 00515 else if ( AmbientSound == None ) 00516 AmbientSound = FireSound; 00517 00518 if ( Affector != None ) 00519 Affector.FireEffect(); 00520 if ( PlayerPawn(Owner) != None ) 00521 PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert); 00522 } 00523 else if ( Pawn(Owner).bFire != 0 ) 00524 Global.ClientFire(0); 00525 else 00526 { 00527 PlayUnwind(); 00528 bSteadyFlash3rd = false; 00529 GotoState('ClientFinish'); 00530 } 00531 } 00532 00533 simulated function BeginState() 00534 { 00535 bSteadyFlash3rd = true; 00536 AmbientSound = FireSound; 00537 } 00538 00539 simulated function EndState() 00540 { 00541 bSteadyFlash3rd = false; 00542 Super.EndState(); 00543 } 00544 } 00545 00546 state AltFiring 00547 { 00548 function Tick( float DeltaTime ) 00549 { 00550 if (Owner==None) 00551 { 00552 AmbientSound = None; 00553 GotoState('Pickup'); 00554 } 00555 00556 if ( bFiredShot && ((pawn(Owner).bAltFire==0) || bOutOfAmmo) ) 00557 GoToState('FinishFire'); 00558 } 00559 00560 function AnimEnd() 00561 { 00562 if ( (AnimSequence != 'Shoot2') || !bAnimLoop ) 00563 { 00564 AmbientSound = AltFireSound; 00565 SoundVolume = 255*Pawn(Owner).SoundDampening; 00566 LoopAnim('Shoot2',1.9); 00567 } 00568 else if ( AmbientSound == None ) 00569 AmbientSound = FireSound; 00570 if ( Affector != None ) 00571 Affector.FireEffect(); 00572 } 00573 00574 function BeginState() 00575 { 00576 Super.BeginState(); 00577 AmbientSound = FireSound; 00578 AmbientGlow = 250; 00579 bFiredShot = false; 00580 bSteadyFlash3rd = true; 00581 } 00582 00583 function EndState() 00584 { 00585 bSteadyFlash3rd = false; 00586 AmbientGlow = 0; 00587 LightType = LT_None; 00588 AmbientSound = None; 00589 Super.EndState(); 00590 } 00591 00592 Begin: 00593 Sleep(0.13); 00594 GenerateBullet(); 00595 if ( AnimSequence == 'Shoot2' ) 00596 Goto('FastShoot'); 00597 Goto('Begin'); 00598 FastShoot: 00599 Sleep(0.08); 00600 GenerateBullet(); 00601 Goto('FastShoot'); 00602 } 00603 00604 /////////////////////////////////////////////////////////// 00605 state Idle 00606 { 00607 00608 Begin: 00609 if (Pawn(Owner).bFire!=0 && AmmoType.AmmoAmount>0) Fire(0.0); 00610 if (Pawn(Owner).bAltFire!=0 && AmmoType.AmmoAmount>0) AltFire(0.0); 00611 LoopAnim('Idle',0.2,0.9); 00612 bPointing=False; 00613 if ( (AmmoType != None) && (AmmoType.AmmoAmount<=0) ) 00614 Pawn(Owner).SwitchToBestWeapon(); //Goto Weapon that has Ammo 00615 Disable('AnimEnd'); 00616 } 00617 00618 defaultproperties 00619 { 00620 MuzzleFlashVariations(0)=Texture'Botpack.Skins.Muz1' 00621 MuzzleFlashVariations(1)=Texture'Botpack.Skins.Muz2' 00622 MuzzleFlashVariations(2)=Texture'Botpack.Skins.Muz3' 00623 MuzzleFlashVariations(3)=Texture'Botpack.Skins.Muz4' 00624 MuzzleFlashVariations(4)=Texture'Botpack.Skins.Muz5' 00625 MuzzleFlashVariations(5)=Texture'Botpack.Skins.Muz6' 00626 MuzzleFlashVariations(6)=Texture'Botpack.Skins.Muz7' 00627 MuzzleFlashVariations(7)=Texture'Botpack.Skins.Muz8' 00628 MuzzleFlashVariations(8)=Texture'Botpack.Skins.Muz9' 00629 MuzzleFlashVariations(9)=Texture'Botpack.Skins.Muz9' 00630 WeaponDescription="Classification: Gatling Gun\n\nPrimary Fire: Bullets are sprayed forth at a medium to fast rate of fire and good accuracy.\n\nSecondary Fire: Minigun fires twice as fast and is half as accurate.\n\nTechniques: Secondary fire is much more useful at close range, but can eat up tons of ammunition." 00631 AmmoName=Class'Botpack.Miniammo' 00632 PickupAmmoCount=50 00633 bInstantHit=True 00634 bAltInstantHit=True 00635 bRapidFire=True 00636 FireOffset=(X=8.000000,Y=-5.000000,Z=-4.000000) 00637 MyDamageType=shot 00638 shakemag=135.000000 00639 shakevert=8.000000 00640 AIRating=0.730000 00641 RefireRate=0.990000 00642 AltRefireRate=0.990000 00643 FireSound=Sound'Botpack.minigun2.M2RegFire' 00644 AltFireSound=Sound'Botpack.minigun2.M2AltFire' 00645 SelectSound=Sound'UnrealI.Minigun.MiniSelect' 00646 Misc1Sound=Sound'Botpack.minigun2.M2WindDown' 00647 DeathMessage="%k's %w turned %o into a leaky piece of meat." 00648 NameColor=(B=0) 00649 bDrawMuzzleFlash=True 00650 MuzzleScale=2.000000 00651 FlashY=0.180000 00652 FlashO=0.022000 00653 FlashC=0.006000 00654 FlashLength=0.200000 00655 FlashS=128 00656 MFTexture=Texture'Botpack.Skins.Muz9' 00657 AutoSwitchPriority=7 00658 InventoryGroup=7 00659 PickupMessage="You got the Minigun." 00660 ItemName="Minigun" 00661 PlayerViewOffset=(X=2.100000,Y=-0.350000,Z=-1.700000) 00662 PlayerViewMesh=LodMesh'Botpack.Minigun2m' 00663 BobDamping=0.975000 00664 PickupViewMesh=LodMesh'Botpack.MinigunPick' 00665 ThirdPersonMesh=LodMesh'Botpack.MiniHand' 00666 StatusIcon=Texture'Botpack.Icons.UseMini' 00667 bMuzzleFlashParticles=True 00668 MuzzleFlashStyle=STY_Translucent 00669 MuzzleFlashMesh=LodMesh'Botpack.MuzzFlash3' 00670 MuzzleFlashScale=0.250000 00671 MuzzleFlashTexture=Texture'Botpack.Skins.Muzzy' 00672 PickupSound=Sound'UnrealShare.Pickups.WeaponPickup' 00673 Icon=Texture'Botpack.Icons.UseMini' 00674 Mesh=LodMesh'Botpack.MinigunPick' 00675 bNoSmooth=False 00676 SoundRadius=96 00677 SoundVolume=255 00678 CollisionRadius=34.000000 00679 CollisionHeight=8.000000 00680 LightEffect=LE_NonIncidence 00681 LightBrightness=255 00682 LightHue=28 00683 LightSaturation=32 00684 LightRadius=6 00685 }