[Setup] Product=Zark Assault Rifle Version=100 Archive=Zark Assault Rifle.umod SrcPath=. MasterPath=.. Group=SetupGroup Group=Zark Assault RifleGroup Group=umodIncludeFilesGroup [SetupGroup] Copy=(Src=System\Manifest.ini,Master=System\Manifest.ini,Size=428,Flags=3) Copy=(Src=System\Manifest.int,Master=System\Manifest.int,Size=368,Flags=3) [Zark Assault RifleGroup] File=(Src=System\ZarkAssaultRifle.u,Size=23993) File=(Src=System\ZarkAssaultRifle.int,Size=275) [umodIncludeFilesGroup] File=(Src="Help\Zark Assault Rifle ReadMe.htm",Size=1679) [Setup] LocalProduct=Zark Assault Rifle ReadMe=Help\Zark Assault Rifle ReadMe.htm SetupWindowTitle=Zark Assault Rifle Mutator AutoplayWindowTitle=Zark Assault Rifle Options ProductURL=C:\UnrealTournament\Help\Zark Assault Rifle ReadMe VersionURL=C:\UnrealTournament\Help\Zark Assault Rifle ReadMe Developer=Zark Media DeveloperURL=mailto://zarraconan@hotmail *D@FzYU$,̠* FNone FireAnimsFire ReplaceWith SniperRifleBotZarkAssaultRifleZoomingCoreEngine NormalFireProcessTraceHitClientAltFireVectorSystem PlayerPawnBegin ModifyPlayer PlayIdleAnim TraceFireIdleTimer BeginState EndState Viewport TakeDamageAnimEndTickRotatorColor ItemName RifleShell ShockCore ToggleZoomFire5MeshWeaponDescriptionFire3Fire4 GiveWeaponAmmoCarcass MuzzleScaleWeaponFire2 AssaultRifle ShockRifle PostRenderEjectStillInventoryGroup MFTextureFlashSFlashCFlashOFlashY FlashLength SelectSoundbDrawMuzzleFlash shakevertCollisionRadiusCollisionHeightAltFireSwitchToBestWeaponSetHand WarnTarget PlayFiringFinish AdjustAimbAltInstantHit DeathMessage GiveAmmo RateSelfPickupMessageUseAmmo FiringSpeed FireOffset PlayRecoil bInstantHitPickupAmmoCount TraceShotCheckReplacement AmmoName ClientFireMuzzleFlashScaleMuzzleFlashMesh DecapitatedshotMuzzleFlashTexture StopZoomMuzzleFlashStylebMuzzleFlashParticles StatusIcon bNoSmoothThirdPersonMeshPickupViewMeshPlayerViewMesh PickupSound NameColorAltRefireRate AIRating RefireRateIcon BobDampingPlayerViewScalePlayerViewOffsetAutoSwitchPriority shaketimeBotpackAltDamageType shakemag MyDamageType Rotation FireSoundZarkRifleMutatorState UnrealShare DefaultFOV InventorySoundDampening aimerror DesiredFOV LevelInfoSoundPawn HitLocation HitNormal StartTraceEnemyGamebestAim InstigatorOwnerSetPosdist NextMutatorbSuperRelevantValue EndTraceClipY bSniping DrawIcon LocationbIsPawnPlayOwnedSoundUnrealIStyle FlashCountOldFlashCountCalcDrawOffset DrawColorStruct DrawScale FunctionObjectProperty bUseAltMode PawnOwnerObject ReturnValue AmmoType bPointingYClassbOwnsCrosshair TextBufferScaleZPackage ViewRotationX ScriptText AdjustedAimS bMuzzleFlashBRG bestDistStructPropertyDynamicLoadObjectFireDir Accuracy AmmoAmount EyeHeightbFire bAltFireClipXbHighDetailModeMutatorFloatPropertyIconsLodMesh NamePropertyRifleTexturetargPickups WeaponPickupSkinsflak RiflePickupNumFire ChunkHitCanvasDeathMatchPlusLevelActorOther DeltaTimePTournamentWeapon BoolPropertyUT_SpriteSmokePuff IntProperty BulletBoxhandPlayerUT_HeavyWallHitEffect FireAdjust UT_ShellCasebNovicebCanClientFireRifle2m RiflePick RifleHand MuzzleFlash2 UseRifle RReticle SniperFiremuzzsr3Muzzy3OwnerLocation StillTime StillStart ByteProperty TimeSeconds E    *3B  q!' 2@OB?&.Botpack.Rifle2mL M  % >   .j33s?./r*q! t ?,@ 9  b ;w.*a??,(-'.AHCa>?(:%:%-( (  a ! ?, ծ333@6@?&w * @ T0ծ>> ծL>L>ծ>??, ra  Pw w w*d-a  @ B--76 6 R?Ca/!-a/!.-),d. ? ^(,-. `F -a/!)a  ?,  )C$6.:.% ? +9|%.b     D$tI D?,(( 9 ?' P     '-   4Cr 0k +1p R@pz1p D@- 2Q1 \R@G\ÄTԄTԄTԉ\R@G\×ѸB Nvy TԗѸBTԄTԃ TԄTԃ TԄTԄTԄTԃ }M}M TԄTԐNvy TԓRRTԄTԄTԃ TԄTԄTԄTԉ\É\×ѸBNvyTԄTԄTԃ \É\ÊxxxxRxxxxxxxxx\É\Êxl ,%&"$]43Classification: Long Range Ballistic Assault RifleRO"2NEK$ff?L: oWmVn$Ck$>;$Ad$q= ?e$p}?c$>q9F]$#%k put a bullet through %o's head.b*:*$?7$G=6$B`e<5$<8$T<4"3j2 I]! You picked up an Assualt Rifle.] Sniper Riflei: @̿ٿ`h$@g$y?_^\[ZUT$=Xafp:#]S<$B=$A5!Ht%!%Ww.*.-33?w.*.  ??@?8ff> &$B$.@@a," @ @L=w.*).. Q// Name : Team Outfit // Author : Chris 'Zark' Houghton // Copyright : (C)1999 Zark Media // Requires : Zarks Assualt Rifle - Sniper Rifle Mutator // ModeType : Mutator class ZarkRifleMutator expands Mutator; function ModifyPlayer(Pawn Other) { DeathMatchPlus(Level.Game).GiveWeapon(Other,"ZarkAssaultRifle.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')) ) { ReplaceWith(Other,"BotPack.BulletBox"); return false; } if ((Other.IsA('ShockRifle')) || (Other.IsA('SniperRifle'))) { ReplaceWith(Other,"ZarkAssaultRifle.AssaultRifle"); return false; } // Because the Assualt Rifle is derived from the Sniper Rifle, if we were to try and replace // the SniperRifle with the Assault Rifle we would have a Recusive Error if (Other.IsA('SniperRifle')) return false; return true; } return true; } 6/Y .w*-'?H??,??,-$$ H??,@??,`6$6=,6$/apppXSD.SD?, ?, D -( ",;<*t-(0%.?U:.%v! d#|'-r*G.+J&q! -'-'a/!.- ff&??A ?,??@@. MS# 81"*$-(a>?( :8*a( 7?b.>J,tr:.%bw.* .a/!.Ya(q! =U-Va/!J.a/!.!aL>'.$.$8 <g.#!wa!1?L=  b.*'ZarkAssaultRifle.AssaultRifle`w*  /AQa/!+a/!(ta/! a/!BotPack.BulletBox(a/!.a/!ZarkAssaultRifle.AssaultRifle(a/!('' H//============================================================================= // AssaultRifle // An Automatic Fire version of the Sniper Rifle! //============================================================================= class AssaultRifle extends TournamentWeapon; #exec MESH IMPORT MESH=Rifle2m ANIVFILE=MODELS\Rifle2_a.3D DATAFILE=MODELS\Rifle2_d.3D #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 TEXTURE IMPORT NAME=Rifle2a FILE=MODELS\Rifle1.PCX GROUP=Skins LODSET=2 #exec TEXTURE IMPORT NAME=Rifle2b FILE=MODELS\Rifle2.PCX GROUP=Skins LODSET=2 #exec TEXTURE IMPORT NAME=Rifle2c FILE=MODELS\Rifle3.PCX GROUP=Skins LODSET=2 #exec TEXTURE IMPORT NAME=Rifle2d FILE=MODELS\Rifle4.PCX GROUP=Skins LODSET=2 #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 IMPORT MESH=Rifle2mL ANIVFILE=MODELS\Rifle2_a.3D DATAFILE=MODELS\Rifle2_d.3D UnMirror=1 #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 IMPORT MESH=RiflePick ANIVFILE=MODELS\Riflehand_a.3D DATAFILE=MODELS\Riflehand_d.3D X=0 Y=0 Z=0 #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 TEXTURE IMPORT NAME=JRifle2 FILE=MODELS\Rifle.PCX GROUP=Skins LODSET=2 #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 IMPORT MESH=RifleHand ANIVFILE=MODELS\Riflehand_a.3D DATAFILE=MODELS\Riflehand_d.3D X=0 Y=0 Z=0 #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 TEXTURE IMPORT NAME=MuzzleFlash2 FILE=TEXTURES\NewMuz2.PCX GROUP="Rifle" MIPS=OFF LODSET=2 #exec TEXTURE IMPORT NAME=IconRifle FILE=TEXTURES\HUD\WpnRifle.PCX GROUP="Icons" MIPS=OFF #exec TEXTURE IMPORT NAME=UseRifle FILE=TEXTURES\HUD\UseRifle.PCX GROUP="Icons" MIPS=OFF #exec TEXTURE IMPORT NAME=RReticle FILE=TEXTURES\rifleret.PCX GROUP="Icons" MIPS=OFF FLAGS=2 LODSET=2 #exec AUDIO IMPORT FILE="Sounds\SniperRifle\SniperFire.wav" NAME="SniperFire" GROUP="SniperRifle" #exec MESH IMPORT MESH=muzzsr3 ANIVFILE=MODELS\muzzle2_a.3d DATAFILE=MODELS\Muzzle2_d.3d X=0 Y=0 Z=0 #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=Muzzy3 FILE=MODELS\Muzzy3.PCX GROUP=Skins var int NumFire; var name FireAnims[5]; var vector OwnerLocation; var float StillTime, StillStart; simulated function PostRender( canvas Canvas ) { local PlayerPawn P; local float Scale; Super.PostRender(Canvas); P = PlayerPawn(Owner); if ( (P != None) && (P.DesiredFOV != P.DefaultFOV) ) { bOwnsCrossHair = true; 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.DrawIcon(Texture'RReticle', Scale); Canvas.SetPos(0.5 * Canvas.ClipX + 64 * Scale, 0.5 * Canvas.ClipY + 96 * Scale); Canvas.DrawColor.R = 0; Canvas.DrawColor.G = 255; Canvas.DrawColor.B = 0; Scale = P.DefaultFOV/P.DesiredFOV; Canvas.DrawText("X"$int(Scale)$"."$int(10 * Scale - 10 * int(Scale))); } else bOwnsCrossHair = false; } 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 + 10000 * 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); } Fg gbNb|glb+ZDb]bbKbYW brb}bRbbZrNbz}xb|bvb(S`ZM}dYjxb[Z_bUWYbs}urVg~SO}zZ#}yZCjyUvrh}kZX BbZG _}fYESLbSbLrkY/Z@Y@}K ^Sc}wjSbdb#bXjRbbYCgQYS{YMjmYsZAYUrLYZ_YHjp}a}w}KZqYPYBY sgtgD {E}=gGgA {H {Jjobj}XS\@oS]bTYQjngF}Zb@YY>Y YjTs bYbVY@mY ` egA Ba Bcg {d Bf5K e8)O r85e 8(Q K9COX9,\ f95Q s91h @:)} L:)l Y:)i f:, s:,i @;2F M;,f Y;1g f;(C s;)~ @<(t M<&W Z<1i f<)a r<,~ <,J L=(B Y=,} e=AO r=)f =,O L>,a Y>(q f>'I r>2[ ~>1 J?8I V?3o b?1 #n?1@QQ@1>!bA1_CB1 zbF2^ \N1CChN1wkO.%bR1 =GS%^ DTrqPT-`AW1HDaj1BAem0j4\fo1/{B1I }1sI7j|,u f77r7'i1)P<hy=P a<xm15e0bZ%I |0QLH1j4TTCHhC^ v[Public] Object=(Name=ZarkAssaultRifle.ZarkRifleMutator,Class=Class,MetaClass=Engine.Mutator,Description="Assault Rifle, An Automatic Sniper Rifle!.") Object=(Name=ZarkAssaultRifle.AssaultRifle,Class=Class,MetaClass=Botpack.TournamentWeapon,Description="Assault Rifle") Untitled Document

Zark Assault Rifle

The Unreal Tournament Sniper Rifle is great, but its rate of fire is too slow for full frag enjoyment. Zark Assault Rifle is a rifle with the power and accuracy, including telescopic sight, of the Sniper Rifle, but the rate of fire of an automatic assault rifle. In standard play with the mutator enabled the Assault Rifle will replace the Shock Rifle, and the Shock Cores will replaced with Sniper Rifle Rounds, which the Assault Rifle uses. Don't get too carried away though, your maximum ammo limit it just fifty rounds!

Installation

This Mutator requires the retail version of UT

Run the UMOD. Start UT and start a game as normal selecting the Assault Rifle from the Mutator Menu.

This mutator is fully compatible with Weapon Arena, and is a lot of fun!. If you wish to summon the Assault Rifle from the console, first enable the cheats by entering iamtheone and then summon ZarkAssaultRifle.AssaultRifle

Code by Zark

This document, and the mutator, are the copyright of Zark Media.

©1999/2000 Zark Media.

 

System\Manifest.ini:System\Manifest.int:pSystem\ZarkAssaultRifle.u]System\ZarkAssaultRifle.intca#Help\Zark Assault Rifle ReadMe.htmvbii6