*E@cMC`nKSz0mcNone FireAnimsFireCore BLZarkV3EngineSystemColor PostRenderClientAltFireProcessTraceHit NormalFire ModifyPlayer PlayIdleAnimVector TraceFireBotBeginPickupMessageZoomingIconIdleTimer BeginState EndState AdjustAimCollisionHeightCollisionRadius ReplaceWith ItemNamePickupViewMesh InternalTime TraceShot TakeDamageBotpack Viewport SniperRifleMesh PlayerPawnEjectStillFire2 ShockRifle AssaultRiflePaletteRegisterHUDMutatorAmmoCarcassUsedInWeaponSlotWeaponMaxAmmoVSizeUSizePostNetBeginPlay AmmoAmount MFTextureFlashSFlashCFlashOFlashYbDrawMuzzleFlash SelectSound FireSoundAltDamageType MyDamageType FireOffset GiveWeaponVBitsVClampFire3UBitsMipZero MaxColorbMaskedWeaponDescriptionFire4TickAltFirebCollideActorsSwitchToBestWeaponSetHand WarnTarget PlayFiringFinishAnimEndFire5 DeathMessagePhysics GiveAmmo RateSelfMaxDesireability BulletBoxUseAmmoRotator ShockCore PlayRecoil FiringSpeed RifleShellBLMuteCheckReplacementbAltInstantHit ClientFire BulletBox199 bShowMag Decapitatedshot bInstantHit StopZoombShowRangeTextPickupAmmoCount AmmoName bNoSmooth bShowRange PickupSoundMuzzleFlashTextureMuzzleFlashScale NameColorAltRefireRate AIRating RefireRatebShowriflename BobDampingPlayerViewScalePlayerViewOffsetAutoSwitchPriority shaketimeMuzzleFlashMeshMuzzleFlashStylebMuzzleFlashParticles shakemag shakevert FlashLength StatusIconInventoryGroup bShowDotsThirdPersonMesh MuzzleScale riflenameUClamp ToggleZoomPlayerViewMesh bbPlayer HUDMutator RotationSkin HitNormal StartTraceEnemyGamebestAim InstigatormyHUDOwner TimeSecondsdist NextMutatorbSuperRelevantValue Palette1 EndTraceClipY bSniping HitLocation CrosshairPhand DeltaTimeCalcDrawOffsetbHighDetailModebAlwaysMouseLook DefaultFOV FlashCountOldFlashCount DesiredFOV aimerrorSoundDampeningSetPos DrawIcon Location bUseAltMode PawnOwnerbIsPawnPlayOwnedSound AmmoType bPointingStyle DrawColorbOwnsCrosshair DrawScaleXZY ViewRotationPitch ScriptText AdjustedAimS bMuzzleFlashBRG bestDist ReturnValueDynamicLoadObjectFireDir AccuracyScaleMutator LevelInfo EyeHeightbFire bAltFireClipX InventoryCanvasFontLevelIconsActorPawnRifleLodMeshtargPickups WeaponPickup WhiteFontSkinsflak RiflePickupNumFire I_RIFLEAmmo ChunkHitPlayerDeathMatchPlusSoundTextureClassPackage TextBufferTournamentWeapon ChallengeHUDObjectUT_SpriteSmokePuff FunctionStateTournamentAmmoStructCrosshairColor UnrealShareRangeUT_HeavyWallHitEffect FireAdjust UT_ShellCasebNoviceXLengthbCanClientFireRifle2m RiflePick RifleHand MuzzleFlash2 UseRifle SniperFiremuzzsr3Muzzy3OwnerLocation StillTime StillStart BulletBoxM BulletBoxTUnrealI StrPropertyStructProperty RRetickle NamePropertyObjectPropertyFloatProperty BoolProperty IntProperty ByteProperty HUDOwner radpitchOther9 _&ObN ?l=$:e> Y> YX'"  !#* :-,(H%+ L@/0235Pf275RL#!"6" 2"0 ] You got a box of rifle rounds.]Box of Rifle RoundsZ$u>WP%$pA$ AN>\G/33s?./r*q! t ?, @& & 9  b: ;w.*a??,(-'.QHCa>?(:%:%-( M}. ; ~c2a ! ?,ծ333@6@#?&w*@T'ծ>>ծL>L>#ծ>??, ra  Pw w w*d-a  @ B--76 6 R?Ca/!&-a/!.-)!,d. ?^(!,-. `F-a/!/a  ?,  ?< Q.  A4MF0.  4 Ca @- q!' DBR7,$.@@a,. @ @L=w.*).. I P,+O B ?&.Botpack.Rifle2mL M  =SQ66.:.% ? EGC7.b   $tID?,((9!?p '(! '( 'J)Y)%)%Ww.*.-33?w.*.  ??@?8ff> Kd .* w*-'?H??,??,-$$b&?,.. N$-0H??,??,6=,6$6$a---------H??,??,a---------H??,??,a^ -39C. ,+%6. % 6. PF?6. ?,I@?,?6. ?,I@?,  .%. $tI D0@((" ? N9*. -"  ?,0> 6$6=,6$P -5?,6$6=,6$ZB?@?,??, aVERY FARfGC ?,6=,6=,6$ZB?@?,??,aFARfC ?,d6=,6=,6=,ZB?@?,??, aMEDIUMB ?,26=,6$6=,ZB?@?,??, aCLOSEP GB6=,6$6$ZB?@?,??,aVERY CLOSEUB?@?,?6apppp[SD.SD?, ?, D m] -6 6$6=,6$UC?@?,?5apppp[SD.SD?, ?, Dx]' -2 6C?,33@6C?,33@6C?,33@M??,FzC??,(?, a/2 -(b .-'.-' 65h .w * a/!Mw */a0 aa10r*a -   .@ F&n 6 Z. Vv > b  N~2 J*r : ^z" B f 2`DwDyX܂DDxyww@w^ww P#֧#w81w8J0&(1yw $wLcwwwLwwhw 8$w @wh2w2w81wwt0Pww-ww ԧw#]ww#y5`\wuէwJ&q#N@@e ew`($wq@#wAwPp qw J&qwxũDw F qww# yI,MFC4"3"J"D"G*H*"r&I(@ !             !                      "   "   "      ""   "   "   "  ""  " "! "      "" !   " ! " "! !  ""   "  ""     ""   " "  "   ""     " " "  ""   "   "  ""  " "  "        !                 " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " " !                     "  " "    ""     "  "   "     ""   "  ""  ""    " ""      ""  "   " "   ""   "  "" ""  " !  " "     ""    "   "     ""    "  " ! "             "              !     @ //================================================================================ // WKAHeadRemover HUD MUTATOR // // // This will allow custom crosshair to work with UTPURERC6D and UTPURERC6E // //================================================================================ class HUDMutator expands Mutator; var PlayerPawn HUDOwner; simulated event PostRender( canvas Canvas ) { if (HUDOwner != None && HUDOwner.Weapon != None) { // if (Owner.Weapon.IsA('WKARifle')) // You may want to enable this. HUDOwner.Weapon.PostRender(Canvas); } } J//============================================================================= // BulletBox. // BulletBox199 suplements the Zark 199 Rifle, allowing it to refill // to the max capacity of 199 rounds. // // Code mods by {BL}Gypsy Angel April 8, 2004 //============================================================================= class BulletBox199 extends TournamentAmmo; FU<t-(0%.OU:.%v!T  d8B9-r*X.+\&q! -'-'a/!.- ff&? ?A ?,? ?@@ . _e8 c// ---------------------------------------------------------------------------------------- // BLZark by {BL}Ticklemonster, using the mutator by {BL}GypsyAngel - The Black Legion - 04/12/05 // Website http://www.theblacklegion.com // // ZarkAssaultRifle-II by |ZM|Snake - TEAMZM (Zark Mercenaries) - - Apr 30/2003 // // (Jun 26/2003) Final version // // Contact: snakesabode@shaw.ca // // Website http://www.zarkmercs.com // // Original Zark Assault Rifle concept and implementation : Chris 'Zark' Houghton // // - Full Zark Assault Rifle specifications // - MOUSELOOK is forced true by the ZarkAssaultRifle-II - aiming skill required :) // - 199 is the Black Legion's 199 round capacity rifle - great for high speed games. // - 199 V2 corrects the error limiting reloads to only 50. Requires BulletBox199.uc // ---------------------------------------------------------------------------------------- class BLMute expands Mutator; function ModifyPlayer(Pawn Other) { DeathMatchPlus(Level.Game).GiveWeapon(Other,"BLZarkV3.AssaultRifle"); if ( NextMutator != None ) NextMutator.ModifyPlayer(Other); } function bool CheckReplacement(Actor Other, out byte bSuperRelevant) { if ((Other.IsA('weapon')) || (Other.IsA('ammo'))) { if ( (Other.IsA('ShockCore')) || (Other.IsA('RifleShell')) || (Other.IsA('BulletBox')) ) { ReplaceWith(Other,"BLZarkV3.BulletBox199"); return false; } if ((Other.IsA('ShockRifle')) || (Other.IsA('SniperRifle'))) { ReplaceWith(Other,"BLZarkV3.AssaultRifle"); return false; } if (Other.IsA('SniperRifle')) return false; return true; } return true; } R;$-(a>?( T^<a( QY?XL=tr:.%bw.* .a/!#.ka(q! W>Va/!&J.a/!#.KaL>'.$.$8 V F@#!wa!(?L= $ Z."B$BLZarkV3.AssaultRifleXw*  $ S]b \bWK=$:eԝXԝXԝXԝXԝXԝXԝXԝX-%n=$:e[c"a/!1a/!.a/!^a/!aa/![BLZarkV3.BulletBox199(a/!*a/!$BLZarkV3.AssaultRifle(a/!$('' K// ---------------------------------------------------------------------------------------- // Major thanks to Rob, [WKA]Tech, for letting me use the rangefinder in this version // of the Zark Assault rifle!!! // BL Clan Zark Rifle with added reach by {BL}Ticklemonster // Hoser said, "Hey, can you make me a Zark that will hit things on the // other side of the map?" So I said, "You are a Zark that will hit things on // the other side of the map!" And all was good in the world. Then I changed a value // in the ProcessTraceHit so that the Zark would do it, too. // April 12, 2005 // ZarkRifle199 V2 by {BL}GypsyAngel - The Black Legion - - Apr 8/2004 // Website http://www.theblacklegion.com // // ZarkAssaultRifle-II by |ZM|Snake - TEAMZM (Zark Mercenaries) - - Apr 30/2003 // // (Jun 26/2003) Final version // // Contact: snakesabode@shaw.ca // // Website http://www.zarkmercs.com // // Original Zark Assault Rifle concept and implementation : Chris 'Zark' Houghton // // - Full Zark Assault Rifle specifications // - MOUSELOOK is forced true by the ZarkAssaultRifle-II - aiming skill required :) // - 199 is the Black Legion's 199 round capacity rifle - great for high speed games. // - 199 V2 corrects the error limiting reloads to only 50. Requires BulletBox199.uc // ---------------------------------------------------------------------------------------- class AssaultRifle extends TournamentWeapon; #exec MESH ORIGIN MESH=Rifle2m X=0 Y=0 Z=0 YAW=64 PITCH=0 ROLL=0 #exec MESH SEQUENCE MESH=Rifle2m SEQ=All STARTFRAME=0 NUMFRAMES=75 #exec MESH SEQUENCE MESH=Rifle2m SEQ=Select STARTFRAME=0 NUMFRAMES=17 RATE=28 GROUP=Select #exec MESH SEQUENCE MESH=Rifle2m SEQ=Still STARTFRAME=17 NUMFRAMES=1 #exec MESH SEQUENCE MESH=Rifle2m SEQ=Fire STARTFRAME=17 NUMFRAMES=10 RATE=15 #exec MESH SEQUENCE MESH=Rifle2m SEQ=Fire2 STARTFRAME=27 NUMFRAMES=10 RATE=15 #exec MESH SEQUENCE MESH=Rifle2m SEQ=Fire3 STARTFRAME=37 NUMFRAMES=10 RATE=15 #exec MESH SEQUENCE MESH=Rifle2m SEQ=Fire4 STARTFRAME=47 NUMFRAMES=10 RATE=15 #exec MESH SEQUENCE MESH=Rifle2m SEQ=Fire5 STARTFRAME=57 NUMFRAMES=10 RATE=15 #exec MESH SEQUENCE MESH=Rifle2m SEQ=Down STARTFRAME=67 NUMFRAMES=7 #exec MESHMAP SCALE MESHMAP=Rifle2m X=0.008 Y=0.004 Z=0.016 #exec MESHMAP SETTEXTURE MESHMAP=Rifle2m NUM=0 TEXTURE=Rifle2a #exec MESHMAP SETTEXTURE MESHMAP=Rifle2m NUM=1 TEXTURE=Rifle2b #exec MESHMAP SETTEXTURE MESHMAP=Rifle2m NUM=2 TEXTURE=Rifle2c #exec MESHMAP SETTEXTURE MESHMAP=Rifle2m NUM=3 TEXTURE=Rifle2d #exec MESH ORIGIN MESH=Rifle2mL X=0 Y=0 Z=0 YAW=64 PITCH=0 ROLL=0 #exec MESH SEQUENCE MESH=Rifle2mL SEQ=All STARTFRAME=0 NUMFRAMES=75 #exec MESH SEQUENCE MESH=Rifle2mL SEQ=Select STARTFRAME=0 NUMFRAMES=17 RATE=28 GROUP=Select #exec MESH SEQUENCE MESH=Rifle2mL SEQ=Still STARTFRAME=17 NUMFRAMES=1 #exec MESH SEQUENCE MESH=Rifle2mL SEQ=Fire STARTFRAME=17 NUMFRAMES=10 RATE=15 #exec MESH SEQUENCE MESH=Rifle2mL SEQ=Fire2 STARTFRAME=27 NUMFRAMES=10 RATE=15 #exec MESH SEQUENCE MESH=Rifle2mL SEQ=Fire3 STARTFRAME=37 NUMFRAMES=10 RATE=15 #exec MESH SEQUENCE MESH=Rifle2mL SEQ=Fire4 STARTFRAME=47 NUMFRAMES=10 RATE=15 #exec MESH SEQUENCE MESH=Rifle2mL SEQ=Fire5 STARTFRAME=57 NUMFRAMES=10 RATE=15 #exec MESH SEQUENCE MESH=Rifle2mL SEQ=Down STARTFRAME=67 NUMFRAMES=7 #exec MESHMAP SCALE MESHMAP=Rifle2mL X=0.008 Y=0.004 Z=0.016 #exec MESHMAP SETTEXTURE MESHMAP=Rifle2mL NUM=0 TEXTURE=Rifle2a #exec MESHMAP SETTEXTURE MESHMAP=Rifle2mL NUM=1 TEXTURE=Rifle2b #exec MESHMAP SETTEXTURE MESHMAP=Rifle2mL NUM=2 TEXTURE=Rifle2c #exec MESHMAP SETTEXTURE MESHMAP=Rifle2mL NUM=3 TEXTURE=Rifle2d #exec MESH ORIGIN MESH=RiflePick X=0 Y=0 Z=0 YAW=64 #exec MESH SEQUENCE MESH=RiflePick SEQ=All STARTFRAME=0 NUMFRAMES=1 #exec MESH SEQUENCE MESH=RiflePick SEQ=Still STARTFRAME=0 NUMFRAMES=1 #exec MESHMAP SCALE MESHMAP=RiflePick X=0.1 Y=0.1 Z=0.2 #exec MESHMAP SETTEXTURE MESHMAP=RiflePick NUM=2 TEXTURE=JRifle2 #exec MESH ORIGIN MESH=RifleHand X=15 Y=170 Z=-30 YAW=64 PITCH=0 ROLL=0 #exec MESH SEQUENCE MESH=RifleHand SEQ=All STARTFRAME=0 NUMFRAMES=1 #exec MESHMAP SCALE MESHMAP=RifleHand X=0.07 Y=0.07 Z=0.14 #exec MESHMAP SETTEXTURE MESHMAP=RifleHand NUM=2 TEXTURE=JRifle2 #exec MESH LODPARAMS MESH=muzzsr3 MINVERTS=8 STRENGTH=0.7 ZDISP=800.0 #exec MESH ORIGIN MESH=muzzsr3 X=0 Y=980 Z=-75 YAW=64 #exec MESH SEQUENCE MESH=muzzsr3 SEQ=All STARTFRAME=0 NUMFRAMES=3 #exec MESH SEQUENCE MESH=muzzsr3 SEQ=Shoot STARTFRAME=0 NUMFRAMES=3 #exec MESHMAP NEW MESHMAP=muzzsr3 MESH=muzzsr3 #exec MESHMAP SCALE MESHMAP=muzzsr3 X=0.04 Y=0.1 Z=0.08 #exec TEXTURE IMPORT NAME=RRetickle FILE=Images\RRetickle.bmp FLAGS=2 MIPS=OFF var bool bShowMag; var bool bShowRangeText; var bool bShowRange; var bool bShowriflename; var bool bShowDots; var string riflename; var int NumFire; var name FireAnims[5]; var vector OwnerLocation; var float StillTime, StillStart; simulated event PostNetBeginPlay() { local HUDMutator crosshair; local PlayerPawn HUDOwner; Super.PostNetBeginPlay(); // If owner is the local player, check that the HUD Mutator exists. Also check for the presense of a bbPlayer (UTPure enabled) HUDOwner = PlayerPawn(Owner); if (HUDOwner != None && HUDOwner.IsA('bbPlayer') && HUDOwner.myHUD != None) { ForEach AllActors(Class'HUDMutator', crosshair) break; if (crosshair == None) { crosshair = Spawn(Class'HUDMutator', Owner); crosshair.RegisterHUDMutator(); crosshair.HUDOwner = HUDOwner; } } } simulated function PostRender( canvas Canvas ) /// zoom canvas { local PlayerPawn P; local float Scale; local float Xlength; local float range; local vector HitLocation, HitNormal, StartTrace, EndTrace, X,Y,Z; local float radpitch; local actor Other; Super.PostRender(Canvas); P = PlayerPawn(Owner); if ( (P != None) && (P.DesiredFOV != P.DefaultFOV) ) { bOwnsCrossHair = true; ////////Cross hair lens Scale = Canvas.ClipX/640; Canvas.SetPos(0.5 * Canvas.ClipX - 128 * Scale, 0.5 * Canvas.ClipY - 128 * Scale ); if ( Level.bHighDetailMode ) Canvas.Style = ERenderStyle.STY_Translucent; else Canvas.Style = ERenderStyle.STY_Normal; Canvas.DrawColor = 15*ChallengeHUD(PlayerPawn(Owner).myhud).CrosshairColor; //? Canvas.DrawIcon(Texture'RRetickle', Scale); /// dots Canvas.Style = ERenderStyle.STY_Normal; if(bShowDots) { Canvas.SetPos(0.5 * Canvas.ClipX + 5 * Scale, 0.5 * Canvas.ClipY - 6 * Scale); Canvas.DrawColor.R = 255; Canvas.DrawColor.G = 0; Canvas.DrawColor.B = 0; Canvas.DrawText("---------"); //left Canvas.SetPos(0.5 * Canvas.ClipX - 27 * Scale, 0.5 * Canvas.ClipY - 6 * Scale); Canvas.DrawText("---------"); //right Canvas.SetPos(0.5 * Canvas.ClipX - 2 * Scale, 0.5 * Canvas.ClipY + 5 * Scale); Canvas.DrawText("^"); //bottom } Scale = P.DefaultFOV/P.DesiredFOV; if (bShowRange) { // Calc range XLength=255.0; GetAxes(Pawn(owner).ViewRotation,X,Y,Z); if ((Pawn(Owner).ViewRotation.Pitch >= 0) && (Pawn(Owner).ViewRotation.Pitch <= 18000)) radpitch = float(Pawn(Owner).ViewRotation.Pitch) / float(182) * (Pi/float(180)); else radpitch = float(Pawn(Owner).ViewRotation.Pitch - 65535) / float(182) * (Pi/float(180)); StartTrace = Owner.Location + Pawn(Owner).EyeHeight*Z*cos(radpitch); AdjustedAim = pawn(owner).AdjustAim(1000000, StartTrace, 2.75*AimError, False, False); EndTrace = StartTrace +(20000 * vector(AdjustedAim)); Other = Pawn(Owner).TraceShot(HitLocation,HitNormal,EndTrace,StartTrace); range = Vsize(StartTrace-HitLocation)/48-0.25; // Range Display defults Canvas.Font = Font'Botpack.WhiteFont'; Canvas.DrawColor.R = 0; Canvas.DrawColor.G = 255; Canvas.DrawColor.B = 0; Scale = P.DefaultFOV/P.DesiredFOV; //draw range colour if (bShowRangeText) { if (range>=200) { Canvas.DrawColor.R = 0; //green Canvas.DrawColor.G = 255; Canvas.DrawColor.B = 0; Canvas.SetPos( 100*Canvas.ClipX/401, 4*Canvas.ClipY/7 + Canvas.ClipY/401 -25 ); Canvas.DrawText( "VERY FAR" ); } if (range<=199.9 && range>=150) { Canvas.DrawColor.R = 255; // yellow Canvas.DrawColor.G = 255; Canvas.DrawColor.B = 0; Canvas.SetPos( 100*Canvas.ClipX/401, 4*Canvas.ClipY/7 + Canvas.ClipY/401 -25 ); Canvas.DrawText( "FAR" ); } if (range<=149.9 && range>=100) { Canvas.DrawColor.R = 255; // white Canvas.DrawColor.G = 255; Canvas.DrawColor.B = 255; Canvas.SetPos( 100*Canvas.ClipX/401, 4*Canvas.ClipY/7 + Canvas.ClipY/401 -25 ); Canvas.DrawText( "MEDIUM" ); } if (range<=99.9 && range>=50) { Canvas.DrawColor.R = 255; //purple Canvas.DrawColor.G = 0; Canvas.DrawColor.B = 255; Canvas.SetPos( 100*Canvas.ClipX/401, 4*Canvas.ClipY/7 + Canvas.ClipY/401 -25 ); Canvas.DrawText( "CLOSE" ); } if (range<=49.99) { Canvas.DrawColor.R = 255; //red Canvas.DrawColor.G = 0; Canvas.DrawColor.B = 0; Canvas.SetPos( 100*Canvas.ClipX/401, 4*Canvas.ClipY/7 + Canvas.ClipY/401 -25 ); Canvas.DrawText( "VERY CLOSE" ); } } Canvas.SetPos( 100*Canvas.ClipX/401, 4*Canvas.ClipY/7 + Canvas.ClipY/401 ); Canvas.DrawText( "["$int(range)$"."$int(10*range-10*int(range))$" m]" ); // stick range on the screen } //draw mag if (bShowMag) { Canvas.Font = Font'Botpack.WhiteFont'; Canvas.DrawColor.R = 0; Canvas.DrawColor.G = 255; Canvas.DrawColor.B = 0; Scale = P.DefaultFOV/P.DesiredFOV; Canvas.SetPos( 280*Canvas.ClipX/401, 4*Canvas.ClipY/7 + Canvas.ClipY/401 ); Canvas.DrawText( "["$int(Scale)$"."$int(10 * Scale - 10 * int(Scale))$"x]" ); } // Rifle Name Text if (bShowriflename) { Canvas.Font = Font'Botpack.WhiteFont'; Canvas.DrawColor.R = 255-(Scale*5.6); Canvas.DrawColor.G = 255-(Scale*5.6); Canvas.DrawColor.B = 255-(Scale*5.6); Scale = P.DefaultFOV/P.DesiredFOV; Canvas.SetPos(0.5 * Canvas.ClipX - 70 , 250 +(0.5 * Canvas.ClipY + 40 * (Scale/10))); Canvas.DrawText((riflename)); } } else { bOwnsCrossHair = false; } if ( PlayerPawn(Owner).bAlwaysMouseLook != true ) { PlayerPawn(Owner).bAlwaysMouseLook = true; } } function float RateSelf( out int bUseAltMode ) { local float dist; if ( AmmoType.AmmoAmount <=0 ) return -2; bUseAltMode = 0; if ( (Bot(Owner) != None) && Bot(Owner).bSniping ) return AIRating + 1.15; if ( Pawn(Owner).Enemy != None ) { dist = VSize(Pawn(Owner).Enemy.Location - Owner.Location); if ( dist > 1200 ) { if ( dist > 2000 ) return (AIRating + 0.75); return (AIRating + FMin(0.0001 * dist, 0.45)); } } return AIRating; } // set which hand is holding weapon function setHand(float Hand) { Super.SetHand(Hand); if ( Hand == 1 ) Mesh = mesh(DynamicLoadObject("Botpack.Rifle2mL", class'Mesh')); else Mesh = mesh'Rifle2m'; } simulated function PlayFiring() { local int r; PlayOwnedSound(FireSound, SLOT_None, Pawn(Owner).SoundDampening*3.0); PlayAnim(FireAnims[Rand(5)],2.5 + 2.5 * FireAdjust, 0.05); if ( (PlayerPawn(Owner) != None) && (PlayerPawn(Owner).DesiredFOV == PlayerPawn(Owner).DefaultFOV) ) bMuzzleFlash++; } simulated function bool ClientAltFire( float Value ) { GotoState('Zooming'); return true; } function AltFire( float Value ) { ClientAltFire(Value); } state NormalFire { function EndState() { Super.EndState(); OldFlashCount = FlashCount; } Begin: FlashCount++; } function Timer() { local actor targ; local float bestAim, bestDist; local vector FireDir; local Pawn P; bestAim = 0.95; P = Pawn(Owner); if ( P == None ) { GotoState(''); return; } if ( VSize(P.Location - OwnerLocation) < 6 ) StillTime += FMin(2.0, Level.TimeSeconds - StillStart); else StillTime = 0; StillStart = Level.TimeSeconds; OwnerLocation = P.Location; FireDir = vector(P.ViewRotation); targ = P.PickTarget(bestAim, bestDist, FireDir, Owner.Location); if ( Pawn(targ) != None ) { SetTimer(1 + 4 * FRand(), false); bPointing = true; Pawn(targ).WarnTarget(P, 200, FireDir); } else { SetTimer(0.4 + 1.6 * FRand(), false); if ( (P.bFire == 0) && (P.bAltFire == 0) ) bPointing = false; } } function ProcessTraceHit(Actor Other, Vector HitLocation, Vector HitNormal, Vector X, Vector Y, Vector Z) { local UT_Shellcase s; s = Spawn(class'UT_ShellCase',, '', Owner.Location + CalcDrawOffset() + 30 * X + (2.8 * FireOffset.Y+5.0) * Y - Z * 1); if ( s != None ) { s.DrawScale = 2.0; s.Eject(((FRand()*0.3+0.4)*X + (FRand()*0.2+0.2)*Y + (FRand()*0.3+1.0) * Z)*160); } if (Other == Level) Spawn(class'UT_HeavyWallHitEffect',,, HitLocation+HitNormal, Rotator(HitNormal)); else if ( (Other != self) && (Other != Owner) && (Other != None) ) { if ( Other.bIsPawn ) Other.PlaySound(Sound 'ChunkHit',, 4.0,,100); if ( Other.bIsPawn && (HitLocation.Z - Other.Location.Z > 0.62 * Other.CollisionHeight) && (instigator.IsA('PlayerPawn') || (instigator.IsA('Bot') && !Bot(Instigator).bNovice)) ) Other.TakeDamage(100, Pawn(Owner), HitLocation, 35000 * X, AltDamageType); else Other.TakeDamage(45, Pawn(Owner), HitLocation, 30000.0*X, MyDamageType); if ( !Other.bIsPawn && !Other.IsA('Carcass') ) spawn(class'UT_SpriteSmokePuff',,,HitLocation+HitNormal*9); } } function Finish() { if ( (Pawn(Owner).bFire!=0) && (FRand() < 0.6) ) Timer(); Super.Finish(); } function TraceFire( float Accuracy ) { local vector HitLocation, HitNormal, StartTrace, EndTrace, X,Y,Z; local actor Other; local Pawn PawnOwner; PawnOwner = Pawn(Owner); Owner.MakeNoise(PawnOwner.SoundDampening); GetAxes(PawnOwner.ViewRotation,X,Y,Z); StartTrace = Owner.Location + PawnOwner.Eyeheight * Z; AdjustedAim = PawnOwner.AdjustAim(1000000, StartTrace, 2*AimError, False, False); X = vector(AdjustedAim); EndTrace = StartTrace + 70000 * X; Other = PawnOwner.TraceShot(HitLocation,HitNormal,EndTrace,StartTrace); ProcessTraceHit(Other, HitLocation, HitNormal, X,Y,Z); } state Idle { function Fire( float Value ) { if ( AmmoType == None ) { // ammocheck GiveAmmo(Pawn(Owner)); } if (AmmoType.UseAmmo(1)) { GotoState('NormalFire'); bCanClientFire = true; bPointing=True; if ( Owner.IsA('Bot') ) { // simulate bot using zoom if ( Bot(Owner).bSniping && (FRand() < 0.65) ) AimError = AimError/FClamp(StillTime, 1.0, 8.0); else if ( VSize(Owner.Location - OwnerLocation) < 6 ) AimError = AimError/FClamp(0.5 * StillTime, 1.0, 3.0); else StillTime = 0; } Pawn(Owner).PlayRecoil(FiringSpeed); TraceFire(0.0); AimError = Default.AimError; ClientFire(Value); } } function BeginState() { bPointing = false; SetTimer(0.4 + 1.6 * FRand(), false); Super.BeginState(); } function EndState() { SetTimer(0.0, false); Super.EndState(); } Begin: bPointing=False; if ( AmmoType.AmmoAmount<=0 ) Pawn(Owner).SwitchToBestWeapon(); //Goto Weapon that has Ammo if ( Pawn(Owner).bFire!=0 ) Fire(0.0); Disable('AnimEnd'); PlayIdleAnim(); } /////////////////////////////////////////////////////// state Zooming { simulated function Tick(float DeltaTime) { if ( Pawn(Owner).bAltFire == 0 ) { if ( (PlayerPawn(Owner) != None) && PlayerPawn(Owner).Player.IsA('ViewPort') ) PlayerPawn(Owner).StopZoom(); SetTimer(0.0,False); GoToState('Idle'); } } simulated function BeginState() { if ( Owner.IsA('PlayerPawn') ) { if ( PlayerPawn(Owner).Player.IsA('ViewPort') ) PlayerPawn(Owner).ToggleZoom(); SetTimer(0.2,True); } else { Pawn(Owner).bFire = 1; Pawn(Owner).bAltFire = 0; Global.Fire(0); } } } /////////////////////////////////////////////////////////// simulated function PlayIdleAnim() { if ( Mesh != PickupViewMesh ) PlayAnim('Still',1.0, 0.05); } `@1@>w*w* 1  ^Z+ 2tc&̻ԝX> YR@G> Yttt> YR@G> YѸBԝXL]ԝXtѸBttԝXttԝXttttԝX}M}MԝXԝXԝXԝXԝXttL]ԝXԝXԝXԝXttttԝXtttt> Y> YѸBL]tttԝX> Y> Yxxxxxxx> Y!xxxxxxxxxxxxxxxxx> Y> YtttttԝXtttxxxx> Y> Yxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx> Y> Yxxxxxxxxx> Y> Yxxxx> Y> Y> Y> Y ?l ?l"glpxFI] BL Zark)EKUJ]XVClassification: Long Range/High Capacity Ballistic Assault Rifle/You hit what you seen7m"jd`$ff?A:@i?hA$C}$>B$Av$q= ?w$p}?u$>>=V]"!%k just messed up ol' %o's head.t*<H$?;$G=:$B`e<9$svsRs tThS`VEm_j`smYmcm\jdkfjgsqsLsgOAT}sTlrS|SRTSS{sKssMs s lkt lzkLl,lVlQlNOw]B]Fm\kqCm$joEkGJV WCJN dC=Y pCJy }CJd ID]YVD;d dDFt qDcI ~DKW JENsWEJR JG=b WGKc dGFR qGF} ~GIZ KH=} WH=D dH W qHJX ~H;L JIcH WIF~ dI=Q qI;^ ~IF KJ=~ XJ;U eJFY qJJb ~JDe KKF_ WKJ_ dK= qK[Y ~KJ~ KLcJ XLFb dLFQ qLIs ~LJY KMJ XMJ} eMJQ rMc McI KNcF XNbV dNcx qNcp }N?] IOcl UOcg aOfQmOR] ~RJ~ JS;I VScabS>%CXc |hXc =d`cM#aaAJ Dbc $PbCG tbcRD@ccPUDecSCYfcx\gFM TjIJ `jcYHljcf"tmc5FZce `^ClPZo B4K I 7B4UT cxi Qja \B4nK Q8y Q(q c+Y VLjD Wf n Vzz c 6t \ \j b}F \c[C cB4W^ ]\u ]J C A] O  G\ +`"c