[Setup] Product=Grenade Launcher Version=100 Archive=GrenadeLauncher.umod SrcPath=. MasterPath=.. Requires=UnrealTournament400Requirement Group=SetupGroup Group=Grenade LauncherGroup [UnrealTournament400Requirement] Product=UnrealTournament Version=400 [SetupGroup] Copy=(Src=System\Manifest.ini,Master=System\Manifest.ini,Size=473,Flags=3) Copy=(Src=System\Manifest.int,Master=System\Manifest.int,Size=531,Flags=3) [Grenade LauncherGroup] File=(Src=System\GrenadeLauncher.int,Size=281) File=(Src=System\GrenadeLauncher.u,Size=61284) File=(Src=Help\GrenadeLauncherReadme.txt,Size=1876) [Setup] LocalProduct=Grenade Launcher ReadMe=Help\GrenadeLauncherReadme.txt SetupWindowTitle=Grenade Launcher Setup AutoplayWindowTitle=Grenade Launcher Options ProductURL=mailto:pricey_@hotmail.com VersionURL=mailto:pricey_@hotmail.com Developer=avengingangel DeveloperURL=mailto:pricey_@hotmail.com [UnrealTournament400Requirement] LocalProduct=UnrealTournament ProductURL=http://www.unrealtournament.com/ VersionURL=http://unreal.epicgames.com/ Developer=Epic Games, Inc. DeveloperURL=http://www.epicgames.com/ [Public] Object=(Name=GrenadeLauncher.GLMutator,Class=Class,MetaClass=Engine.Mutator,Description="Grenade Launcher, Changes rocket launcher to a grenade and pipebomb launcher.") Object=(Name=GrenadeLauncher.GrenadeLauncherMenuItem,Class=Class, MetaClass=UMenu.UMenuModMenuItem) *E@q!,:None FireRocketsTick PlayLoadingPlayRotatingBeginGrenadeLauncherSystemCoreAnimEndFiringRockets RotateAnim CheckTargetRotateRocket LoadAnim BeginStateIdle FireAnim ExplosionSetFontEngineUseAmmoCreateControl PipeBombSetText EndStateStationaryPawnBotpackClientReloadAltFire PendingLock ClientFireFire PlayRFiringClientAltFireUWindow NormalFireCreated PlayerPawnClientFiringFire2Fire3Rotate3PickupViewMesh ReplaceWith SplashJumpCheckFutureSightMesh AltFiringVectorClientAltFiringPlayIdleAnimTimerBotMutate ScoreKillPickupMessage GiveAmmoCollisionHeight WarnTargetRenderOverlaysRenderTexture PostRenderColorPostBeginPlayPickupAmmoCount GrenadePackGrenadeLauncherMenuClientbTimedExplodeAltProjectileClassProjectileClass RocketPackLoad5Load6Load2CollisionRadiusRotate1Rotate2bCollideActorsSwitchToBestWeaponRotate4 BecomeItemSetHandLoad4 ShakeViewRotate5Finish AdjustAimAltFireSoundDeathMessagePhysics SelectSoundLoad3 RateSelfMaxDesireabilityProcessTouchUT_EightballWeaponDescription FiringSpeed PlayRecoilCheckReplacementFire4 FireOffset ForceFireForceAltFire FireEffect MenuHelpUMenu PickupSoundFire1 SetHelpText bNoSmoothSetNumericFloat Register bSizableSetNumericOnlySetMaxLength bWarnTarget NameColorAltRefireRate ClientClass AIRating RefireRateIcon BobDampingPlayerViewScalePlayerViewOffsetAutoSwitchPriority shaketime GetValue AdjustToss shakemag shakevertGL_EightballSuggestAttackStyleGrenadeLauncherMenuWindowGrenadeLauncherMenuItemInventoryGroupUsedInWeaponSlot ItemNameClientInstantFlash GLMutatorMaxAmmo Misc3Sound AmmoAmountload1Execute ExplodeTime SetValuebRecommendSplashDamagebSplashDamageNotify AmmoNamebAltWarnTargetBlowUp StatusIconPlayerViewMesh WindowTitleThirdPersonMesh Misc2Sound Misc1SoundCockingSound MenuCaptionWingInTimerCounter TimerRateZonespeed InstigatorTargetbestAim VelocityBaseRateKillerRegion HeadRegion NewTargetEnemy MaxSpeed PlayerOwner RotationStartMutateStringFontOwnerrating BestTargetPlayOwnedSound bChecked HitLocationSender PawnOwnerPMover AmmoType bPointinghand bLockedOnOtherNumbOwnsCrosshair bForceFireAmmoValue ProjectileLodMeshGCalcDrawOffsetStaticSaveConfig DeltaTimebForceAltFire RandSpin AdjustedAim bestDistClipYAltProjectileSpeedCanvasProjectileSpeed Inventory aimerrorSkillTex bWaterZone Eightball NotifyActorActorRollNetModeScriptedTextureSoundDampeningBitmapCountSetPos DrawIconHealth PointRegion Location NextMutatorbSuperRelevant MoveTargetUWindowEditBoxUWindowEditControlUWindowPulldownMenuItemUWindowSmallCloseButtonUWindowDialogClientWindowUWindowFramedWindowUWindowRootWindowUWindowCheckboxUWindowDialogControlUWindowWindowUWindowPulldownMenuSetSizeCreateWindow ZoneInfoAlignWinLeftEditBoxWidthEditBox WinHeight WinWidthWinTopRootOffsetIcons CloseButtonVSizeLevelUSize bUseAltModeSoundLoadingTempTexture enemyDist enemyDir oldTargetAnglePickupsWeaponPickup Crosshair6EightAltFire BarrelMove SeekLock SeekLost SelectingRocketsLoaded RocketRad bFireLoad bTightWadLockedTarget bRetreatingETargetFireLocation StartLocFireRot DupRocketsRandRotbCanHitOwner bHitWater SmokeRateNumExtraGrenadesStyle LevelInfoTournamentPlayerWeaponAnimSequenceMutatorUMenuModMenuItem MenuItemRoleClassPackageDynamicLoadObjectR TextBuffer ReturnValueObjectTournamentWeapon FunctionStateRotatorStruct UnrealShare StrPropertyStructPropertyNamePropertyYawObjectPropertyFBES ScriptTextFloatPropertyAXCBoolPropertyViewRotationTournamentAmmoTournamentPickup SpawnSoundut_seekingrocket ut_grenadebInstantRocketbNoviceXScale AffectorbCanClientFire Ammocount miniammoled LEDFont2Eightm Eight2Pick EightHand Use8ballClientRocketsLoadedbAlwaysInstant bClientDone bRotatedbPendingLockTPAimRotdiffbMultiRocketsRocketPackMesh IntPropertyPitchBytePropertyZYbFire bAltFireClipXbAutoDetonatebDieDetonate bRequireWepPawn Createdby BombOwnerbTimedExplodeCheckbAutoDetonateCheckbDieDetonateCheckEditTimedExplodeTimedExplodeExplodeTimeVarTimedExplodeFloatCeM_l= a) a)΃=l= a) a)΃=l==DS$zC c{~; a)Ε726___R9 }9 }9 } )<-A1ND+ J @0!X a_ 486.[2G3]Z$>@,FY"L@ REcN3IE-/::$ r*%q!''( Qzt4G-'-'+r*9.E&q!0 &VT ,X-'#r*9.V&;.-'--Jw;*;--- '&q!q!!VOa/!5 w*- '&$-'q!q!! =w*a/! L?K  ????$-'q!! ==.- 333? a!w*5rr*a/!>  ??2  ? =r?a?'$-'q!! -(q!$Vq!$ q@G2Sf]kMo o #xT]] Grenade Launcher ConfigurationrjJC0T~_|.Xڙ_|.Xڙ_|.Xښt__|.Xڐ|.Xڐ|.Xڐ|.Xڙ_|.Xڐ|.Xڐ|.Xڐ|.Xڙ_|.Xڐ|.Xڐ|.Xڐ|.Xڙ_ttttttttU K/t_tt#OO"5IE-/::$ r*%q!2'( hB2VxL#!P" N"HJ8]You picked up a grenade pack.+^$>Z/K$A:$@ANMHt\I^m`F[@l?&- ( 4XI rw*-'b.a$.w.* 333?.);.9. -.$- '&q!! ufw* r*a$.-(u*-(-( Sg|QM%:.% J:.%-(z%.O3 a?'*-(--'?%a?' hlULk"PI--/-w.*%- rMR-(-( nR-(-( KF'WD*S86:.%%  m P-w.*%f-:.%8 -:.%8" q!8  B:iGUr.*2>.$U:.%q! r%q! &a$.&-' Gu(AX'r.*w.. w*r.*w.*2::$6 ?,7 . ?. .>.$V:.% ,q! p{2+Zt \C~$--(̌?|9,q! &r:.%-' w.*.);.9. Hw*w*a$.-(HHw*a$.-'b?. K W'-r.*q!F-"?%q!q-̌?-(,  u!&-' yY'- (&&-' z'Z%-"(-( vWj R~ 0;[ O}@1Z[ g5|[ -' w2F- '& Pf-?[( q S'-r.*q!F-"?%q!q-̌?-(- ,  u!&-' JV%-"(-( H-@' o<1/:.% ,q! EU@- '!-& >&&-' xaW86:.%%  Uy 7+ .-(a/!&  +4G 6+646GM{n? bMY+r **a/!5.-*    ? 6#?)P  D?6)?6    *-)P  ի?, >  D?6)?6  >*a+4  (w** -w* *MAh:[ -' N m)4!&-"'v! ss$O*Ia  ;7YUF +n7.  f7?X]7?,c333lL k iM>-%?%&-' *V Z%]%Z%%%.Kr*w*' # .==,  ,?hnrn?,C,2,,L=o:a/!>6 6 ?,x>;6 6 ?,33>6 6 ?,PL=::$6 -%%R6,%A?R-D, 333%%R-D?  >%& \3$Fr 7%?a!=Da&!? /^B!9"+ea/!&.T?.L̾#"DC>Cw*i-  $@.$@.- -aBHq= ?L=)aBH?L= 5(dh?(a/!`,(GrenadeLauncher.GL_Eightball(}(a/!G,(GrenadeLauncher.GrenadePack(' cW!F'$=.aWZ L= `]C6$xzCdetbomb/a0 wva/!vr. '>.  10w*6C> Xdb Lr*  $.aX? L= g>---1? D`?? 1?? 1$ ?$ ae79+n-2/a0 $ml$a/!lr. $'@. $$ 10w*7e@ DQ<&- Q *  J //============================================================================= // GrenadePack. //============================================================================= class GrenadePack extends TournamentAmmo; #exec MESH IMPORT MESH=RocketPackMesh ANIVFILE=MODELS\eightballammo_a.3D DATAFILE=MODELS\eightballammo_d.3D X=0 Y=0 Z=0 #exec MESH ORIGIN MESH=RocketPackMesh X=0 Y=0 Z=0 ROLL=-64 #exec MESH SEQUENCE MESH=RocketPackMesh SEQ=All STARTFRAME=0 NUMFRAMES=1 #exec TEXTURE IMPORT NAME=JRocketPack1 FILE=MODELS\eightballammo.PCX GROUP="Skins" #exec MESHMAP SCALE MESHMAP=RocketPackMesh X=0.036 Y=0.036 Z=0.072 #exec MESHMAP SETTEXTURE MESHMAP=RocketPackMesh NUM=1 TEXTURE=JRocketPack1 'm3//============================================================================= // GrenadeLauncherMenuClient //============================================================================= class GrenadeLauncherMenuClient expands UWindowDialogClientWindow; var UWindowCheckBox bTimedExplodeCheck, bAutoDetonateCheck, bDieDetonateCheck/*, bRequireWepCheck*/; var UWindowEditControl EditTimedExplode; var UWindowSmallCloseButton CloseButton; var string TimedExplode, ExplodeTimeVar; var float TimedExplodeFloat; function Created() { Super.Created(); bTimedExplodeCheck = UWindowCheckBox(CreateControl(class'UWindowCheckBox', 30, 10, 148, 1)); bTimedExplodeCheck.SetText("Timed Eplode"); bTimedExplodeCheck.SetFont(F_Normal); bTimedExplodeCheck.Align = TA_Left; bTimedExplodeCheck.bChecked = class'GLMutator'.default.bTimedExplode; bDieDetonateCheck = UWindowCheckBox(CreateControl(class'UWindowCheckBox', 30, 22, 148, 10)); bDieDetonateCheck.SetText("Detonate on death"); bDieDetonateCheck.SetFont(F_Normal); bDieDetonateCheck.Align = TA_Left; bDieDetonateCheck.bChecked = class'GLMutator'.default.bDieDetonate; bAutoDetonateCheck = UWindowCheckBox(CreateControl(class'UWindowCheckBox', 30, 34, 148, 20)); bAutoDetonateCheck.SetText("Auto-detonate"); bAutoDetonateCheck.SetFont(F_Normal); bAutoDetonateCheck.Align = TA_Left; bAutoDetonateCheck.bChecked = class'GLMutator'.default.bAutoDetonate; /* bRequireWepCheck = UWindowCheckBox(CreateControl(class'UWindowCheckBox', 30, 46, 148, 30)); bRequireWepCheck.SetText("Require grenade launcher"); bRequireWepCheck.SetFont(F_Normal); bRequireWepCheck.Align = TA_Left; bRequireWepCheck.bChecked = class'GLMutator'.default.bRequireWep; */ EditTimedExplode = UWindowEditControl(CreateControl(class'UWindowEditControl', 30, 46, 148, 30)); EditTimedExplode.SetText("Time to explode"); EditTimedExplode.SetHelpText("Time till pipe bomb explodes."); EditTimedExplode.SetFont(F_Normal); EditTimedExplode.SetNumericOnly(True); EditTimedExplode.SetNumericFloat(True); EditTimedExplode.SetMaxLength(6); EditTimedExplode.Align = TA_Left; EditTimedExplode.EditBox.Offset = 2; EditTimedExplode.EditBoxWidth = 40; ExplodeTimeVar = string(class'GLMutator'.default.ExplodeTime); EditTimedExplode.SetValue(ExplodeTimeVar); EditTimedExplode.Register(self); CloseButton = UWindowSmallCloseButton(CreateWindow(class'UWindowSmallCloseButton', WinWidth-48, WinHeight-19, 48, 16)); } function Notify(UWindowDialogControl C, byte E) { switch(E) { case DE_Change: switch(C) { case bTimedExplodeCheck: class'GLMutator'.default.bTimedExplode = bTimedExplodeCheck.bChecked; case bAutoDetonateCheck: class'GLMutator'.default.bAutoDetonate = bAutoDetonateCheck.bChecked; case bDieDetonateCheck: class'GLMutator'.default.bDieDetonate = bDieDetonateCheck.bChecked; /* case bRequireWepCheck: class'GLMutator'.default.bRequireWep = bRequireWepCheck.bChecked; */ case EditTimedExplode: TimedExplodeFloat = float(EditTimedExplode.GetValue()); class'GLMutator'.default.ExplodeTime = TimedExplodeFloat; class'GLMutator'.static.StaticSaveConfig(); break; } break; } } C#Oc]_.r*  c<.&l%%r<*-?, 0.6! 606.66A-  W!D'-m B!D'-w<* !&b- *-("w*8. w*w8*-("8*-(-'-@i- - -@-A&M%-A#!կ-@.կ-?,60?,#!{- ?%G?, -6D?6?X`@ -6D?6?,?X66w*b?.a !#%6 D??6 D??6 D?? a  xb?.a !#x%6 D??6 D??6 D?? a  7*a !#*b7%6 D??6 D??6 D??* a*  1?x-(-( rP?5%q! &-' nbi:@D-E -5F /I::$a!c[-EaF('B::$ :]\: :>9?,d6?,zDPCG-a(B6 --`'v!? b//============================================================================= // GrenadeLauncherMenuWindow. //============================================================================= class GrenadeLauncherMenuWindow expands UWindowFramedWindow; function Created() { SetSize(200, 120); WinLeft = (Root.WinWidth - WinWidth) / 2; WinTop = (Root.WinHeight - WinHeight) / 2; Super.Created(); } I _=$--(̌?9,q! &r.*%?r.*.$-'b?. Lf0X@-(  Ek//============================================================================= // GrenadeLauncherMenuItem. //============================================================================= class GrenadeLauncherMenuItem expands UMenuModMenuItem; function Execute() { MenuItem.Owner.Root.CreateWindow(class'GrenadeLauncherMenuWindow',10,10,10,10); } uMH2v1Oͷ;aGնmo k#b]Grenade Launcher Setupj]$#Setup the Grenade Launcher mutatorp46!#??, w__>m;-I -39-I9w_'^ _//============================================================================= // PipeBomb. //============================================================================= class PipeBomb expands ut_grenade; var Actor Createdby; var() Actor BombOwner; var bool bCanHitOwner, bHitWater; var float Count, SmokeRate; var int NumExtraGrenades; simulated function PostBeginPlay() { local vector X,Y,Z; local rotator RandRot; local bool bTimedExplode; local float ExplodeTime; bTimedExplode = class'GLMutator'.default.bTimedExplode; ExplodeTime = class'GLMutator'.default.ExplodeTime; //Super.PostBeginPlay(); if ( Level.NetMode != NM_DedicatedServer ) PlayAnim('WingIn'); if (bTimedExplode) SetTimer(ExplodeTime, False); BombOwner = Instigator; if ( Role == ROLE_Authority ) { GetAxes(Instigator.ViewRotation,X,Y,Z); Velocity = X * (Instigator.Velocity Dot X)*0.4 + Vector(Rotation) * (Speed + FRand() * 100); Velocity.z += 210; MaxSpeed = 1000; RandSpin(50000); bCanHitOwner = False; if (Instigator.HeadRegion.Zone.bWaterZone) { bHitWater = True; Disable('Tick'); Velocity=0.6*Velocity; } } } simulated function Timer() { Explosion(Location+Vect(0,0,1)*16); } simulated function ProcessTouch( actor Other, vector HitLocation ) { local bool bAutoDetonate; bAutoDetonate = class'GLMutator'.default.bAutoDetonate; if (bAutoDetonate) { if (Other != BombOwner) Explosion(HitLocation); } } function BlowUp(vector HitLocation) { Super.Blowup(Location); } simulated function Explosion(vector HitLocation) { Super.Explosion(Location); } x}ZI+ |N % XHCB?,?, U//============================================================================= // GL_Eightball. //============================================================================= class GL_Eightball extends TournamentWeapon; #exec MESH IMPORT MESH=Eightm ANIVFILE=MODELS\Eightball2_a.3D DATAFILE=MODELS\Eightball2_d.3D X=0 Y=0 Z=0 #exec MESH ORIGIN MESH=Eightm X=0 Y=0 Z=0 YAW=-64 ROLL=0 #exec MESH SEQUENCE MESH=Eightm SEQ=All STARTFRAME=0 NUMFRAMES=169 #exec MESH SEQUENCE MESH=Eightm SEQ=Select STARTFRAME=0 NUMFRAMES=20 RATE=33 GROUP=Select #exec MESH SEQUENCE MESH=Eightm SEQ=Still STARTFRAME=19 NUMFRAMES=1 #exec MESH SEQUENCE MESH=Eightm SEQ=Idle STARTFRAME=19 NUMFRAMES=1 #exec MESH SEQUENCE MESH=Eightm SEQ=Fire1 STARTFRAME=20 NUMFRAMES=8 #exec MESH SEQUENCE MESH=Eightm SEQ=Load1 STARTFRAME=28 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=Eightm SEQ=Rotate1 STARTFRAME=35 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=Eightm SEQ=Load2 STARTFRAME=42 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=Eightm SEQ=Fire2 STARTFRAME=49 NUMFRAMES=11 #exec MESH SEQUENCE MESH=Eightm SEQ=Rotate2 STARTFRAME=60 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=Eightm SEQ=Load3 STARTFRAME=67 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=Eightm SEQ=Fire3 STARTFRAME=74 NUMFRAMES=10 #exec MESH SEQUENCE MESH=Eightm SEQ=Rotate3 STARTFRAME=84 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=Eightm SEQ=Load4 STARTFRAME=91 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=Eightm SEQ=Fire4 STARTFRAME=98 NUMFRAMES=11 #exec MESH SEQUENCE MESH=Eightm SEQ=Rotate4 STARTFRAME=109 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=Eightm SEQ=Fire5 STARTFRAME=116 NUMFRAMES=13 #exec MESH SEQUENCE MESH=Eightm SEQ=Fire6 STARTFRAME=130 NUMFRAMES=16 #exec MESH SEQUENCE MESH=Eightm SEQ=Down STARTFRAME=146 NUMFRAMES=11 #exec MESH SEQUENCE MESH=Eightm SEQ=Load5 STARTFRAME=157 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=Eightm SEQ=Rotate5 STARTFRAME=164 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=Eightm SEQ=Load6 STARTFRAME=171 NUMFRAMES=6 RATE=15 #exec TEXTURE IMPORT NAME=Eight_t FILE=MODELS\eightballpick.PCX GROUP="Skins" LODSET=2 #exec TEXTURE IMPORT NAME=Eight_t1 FILE=MODELS\eight1.PCX GROUP="Skins" LODSET=2 #exec TEXTURE IMPORT NAME=Eight_t2 FILE=MODELS\eight2.PCX GROUP="Skins" LODSET=2 #exec TEXTURE IMPORT NAME=Eight_t3 FILE=MODELS\eight3.PCX GROUP="Skins" LODSET=2 #exec TEXTURE IMPORT NAME=Eight_t4 FILE=MODELS\eight4.PCX GROUP="Skins" LODSET=2 #exec OBJ LOAD FILE=Textures\Ammocount.utx PACKAGE=Botpack.Ammocount #exec MESHMAP SCALE MESHMAP=Eightm X=0.006 Y=0.006 Z=0.012 #exec MESHMAP SETTEXTURE MESHMAP=Eightm NUM=0 TEXTURE=eight_t1 #exec MESHMAP SETTEXTURE MESHMAP=Eightm NUM=1 TEXTURE=eight_t2 #exec MESHMAP SETTEXTURE MESHMAP=Eightm NUM=2 TEXTURE=eight_t3 #exec MESHMAP SETTEXTURE MESHMAP=Eightm NUM=3 TEXTURE=eight_t4 #exec MESHMAP SETTEXTURE MESHMAP=Eightm Num=4 TEXTURE=Botpack.Ammocount.MiniAmmoled // left handed version #exec MESH IMPORT MESH=EightmL ANIVFILE=MODELS\Eightball2_a.3D DATAFILE=MODELS\Eightball2_d.3D UNMIRROR=1 UNMIRRORTEX=4 #exec MESH ORIGIN MESH=EightmL X=0 Y=0 Z=0 YAW=-64 ROLL=0 #exec MESH SEQUENCE MESH=EightmL SEQ=All STARTFRAME=0 NUMFRAMES=169 #exec MESH SEQUENCE MESH=EightmL SEQ=Select STARTFRAME=0 NUMFRAMES=20 RATE=33 GROUP=Select #exec MESH SEQUENCE MESH=EightmL SEQ=Still STARTFRAME=19 NUMFRAMES=1 #exec MESH SEQUENCE MESH=EightmL SEQ=Idle STARTFRAME=19 NUMFRAMES=1 #exec MESH SEQUENCE MESH=EightmL SEQ=Fire1 STARTFRAME=20 NUMFRAMES=8 #exec MESH SEQUENCE MESH=EightmL SEQ=Load1 STARTFRAME=28 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=EightmL SEQ=Rotate1 STARTFRAME=35 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=EightmL SEQ=Load2 STARTFRAME=42 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=EightmL SEQ=Fire2 STARTFRAME=49 NUMFRAMES=11 #exec MESH SEQUENCE MESH=EightmL SEQ=Rotate2 STARTFRAME=60 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=EightmL SEQ=Load3 STARTFRAME=67 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=EightmL SEQ=Fire3 STARTFRAME=74 NUMFRAMES=10 #exec MESH SEQUENCE MESH=EightmL SEQ=Rotate3 STARTFRAME=84 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=EightmL SEQ=Load4 STARTFRAME=91 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=EightmL SEQ=Fire4 STARTFRAME=98 NUMFRAMES=11 #exec MESH SEQUENCE MESH=EightmL SEQ=Rotate4 STARTFRAME=109 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=EightmL SEQ=Fire5 STARTFRAME=116 NUMFRAMES=13 #exec MESH SEQUENCE MESH=EightmL SEQ=Fire6 STARTFRAME=130 NUMFRAMES=16 #exec MESH SEQUENCE MESH=EightmL SEQ=Down STARTFRAME=146 NUMFRAMES=11 #exec MESH SEQUENCE MESH=EightmL SEQ=Load5 STARTFRAME=157 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=EightmL SEQ=Rotate5 STARTFRAME=164 NUMFRAMES=7 RATE=15 #exec MESH SEQUENCE MESH=EightmL SEQ=Load6 STARTFRAME=171 NUMFRAMES=6 RATE=15 #exec MESHMAP SCALE MESHMAP=EightmL X=0.006 Y=0.006 Z=0.012 #exec MESHMAP SETTEXTURE MESHMAP=EightmL NUM=0 TEXTURE=eight_t1 #exec MESHMAP SETTEXTURE MESHMAP=EightmL NUM=1 TEXTURE=eight_t2 #exec MESHMAP SETTEXTURE MESHMAP=EightmL NUM=2 TEXTURE=eight_t3 #exec MESHMAP SETTEXTURE MESHMAP=EightmL NUM=3 TEXTURE=eight_t4 #exec MESHMAP SETTEXTURE MESHMAP=EightmL Num=4 TEXTURE=Botpack.Ammocount.MiniAmmoled #exec MESH IMPORT MESH=Eight2Pick ANIVFILE=MODELS\EightPick_a.3D DATAFILE=MODELS\EightPick_d.3D X=0 Y=0 Z=0 #exec MESH ORIGIN MESH=Eight2Pick X=0 Y=170 Z=0 YAW=64 #exec MESH SEQUENCE MESH=eight2pick SEQ=All STARTFRAME=0 NUMFRAMES=1 #exec MESH SEQUENCE MESH=eight2pick SEQ=Still STARTFRAME=0 NUMFRAMES=1 #exec MESHMAP SCALE MESHMAP=eight2pick X=0.12 Y=0.12 Z=0.24 #exec MESHMAP SETTEXTURE MESHMAP=eight2pick NUM=2 TEXTURE=Eight_t // 3rd person perspective version #exec MESH IMPORT MESH=EightHand ANIVFILE=MODELS\EightPick_a.3D DATAFILE=MODELS\EightPick_d.3D #exec MESH ORIGIN MESH=EightHand X=-5 Y=-125 Z=-30 YAW=-64 #exec MESH SEQUENCE MESH=EightHand SEQ=All STARTFRAME=0 NUMFRAMES=1 #exec MESH SEQUENCE MESH=EightHand SEQ=Still STARTFRAME=0 NUMFRAMES=1 #exec MESHMAP SCALE MESHMAP=EightHand X=0.07 Y=0.07 Z=0.14 #exec MESHMAP SETTEXTURE MESHMAP=EightHand NUM=2 TEXTURE=Eight_t #exec TEXTURE IMPORT NAME=Crosshair6 FILE=..\unrealshare\Textures\Hud\chair6.PCX GROUP="Icons" FLAGS=2 MIPS=OFF #exec TEXTURE IMPORT NAME=Icon8ball FILE=TEXTURES\HUD\WpnRockt.PCX GROUP="Icons" MIPS=OFF #exec TEXTURE IMPORT NAME=Use8ball FILE=TEXTURES\HUD\UseRockt.PCX GROUP="Icons" MIPS=OFF var name LoadAnim[6], RotateAnim[6], FireAnim[6]; var int RocketsLoaded, ClientRocketsLoaded; var bool bFireLoad,bTightWad, bInstantRocket, bAlwaysInstant, bClientDone, bRotated, bPendingLock; var Actor LockedTarget, NewTarget, OldTarget; Replication { reliable if ( Role == ROLE_Authority ) bInstantRocket; } function setHand(float Hand) { Super.SetHand(Hand); if ( Hand == 0 ) PlayerViewOffset.Y = 0; if ( Hand == 1 ) Mesh = mesh(DynamicLoadObject("Botpack.EightML", class'Mesh')); else Mesh = mesh'EightM'; } function BecomeItem() { local TournamentPlayer TP; Super.BecomeItem(); TP = TournamentPlayer(Instigator); bInstantRocket = bAlwaysInstant || ( (TP != None) && TP.bInstantRocket ); } simulated event RenderTexture(ScriptedTexture Tex) { local Color C; local string Temp; if ( AmmoType != None ) Temp = String(AmmoType.AmmoAmount); while(Len(Temp) < 3) Temp = "0"$Temp; C.R = 255; C.G = 0; C.B = 0; Tex.DrawColoredText( 2, 10, Temp, Font'LEDFont2', C ); } simulated event RenderOverlays( canvas Canvas ) { Texture'MiniAmmoled'.NotifyActor = Self; Super.RenderOverlays(Canvas); Texture'MiniAmmoled'.NotifyActor = None; } simulated function PostRender( canvas Canvas ) { local float XScale; Super.PostRender(Canvas); bOwnsCrossHair = bLockedOn; if ( bOwnsCrossHair ) { // if locked on, draw special crosshair XScale = FMax(1.0, Canvas.ClipX/640.0); Canvas.SetPos(0.5 * (Canvas.ClipX - Texture'Crosshair6'.USize * XScale), 0.5 * (Canvas.ClipY - Texture'Crosshair6'.VSize * XScale)); Canvas.Style = ERenderStyle.STY_Normal; Canvas.DrawIcon(Texture'Crosshair6', 1.0); Canvas.Style = 1; } } simulated function PlayLoading(float rate, int num) { if ( Owner == None ) return; Owner.PlayOwnedSound(CockingSound, SLOT_None, Pawn(Owner).SoundDampening); PlayAnim(LoadAnim[num],, 0.05); } simulated function PlayRotating(int num) { Owner.PlayOwnedSound(Misc3Sound, SLOT_None, 0.1*Pawn(Owner).SoundDampening); PlayAnim(RotateAnim[num],, 0.05); } simulated function PlayRFiring(int num) { if ( Owner.IsA('PlayerPawn') ) { PlayerPawn(Owner).shakeview(ShakeTime, ShakeMag*RocketsLoaded, ShakeVert); //shake player view PlayerPawn(Owner).ClientInstantFlash( -0.4, vect(650, 450, 190)); } if ( Affector != None ) Affector.FireEffect(); if ( bFireLoad ) PlayOwnedSound(class'ut_grenade'.Default.SpawnSound, SLOT_None, 4.0*Pawn(Owner).SoundDampening); else PlayOwnedSound(AltFireSound, SLOT_None, 4.0*Pawn(Owner).SoundDampening); if ( bFireLoad && bInstantRocket ) PlayAnim(FireAnim[num], 0.54, 0.05); else PlayAnim(FireAnim[num], 0.6, 0.05); } simulated function PlayIdleAnim() { if ( Mesh == PickupViewMesh ) return; if (AnimSequence == LoadAnim[0] ) PlayAnim('Idle',0.1,0.0); else TweenAnim('Idle', 0.5); } function float RateSelf( out int bUseAltMode ) { local float EnemyDist, Rating; local bool bRetreating; local vector EnemyDir; local Pawn P; if ( AmmoType.AmmoAmount <=0 ) return -2; bUseAltMode = 0; P = Pawn(Owner); if ( P.Enemy == None ) return AIRating; if ( (P.Base != None) && (P.Base.Velocity != vect(0,0,0)) && !P.CheckFutureSight(0.1) ) return 0.1; EnemyDir = P.Enemy.Location - Owner.Location; EnemyDist = VSize(EnemyDir); Rating = AIRating; if ( EnemyDist < 360 ) { if ( P.Weapon == self ) { if ( (EnemyDist > 230) || ((P.Health < 50) && (P.Health < P.Enemy.Health - 30)) ) return Rating; } return 0.05 + EnemyDist * 0.001; } if ( P.Enemy.IsA('StationaryPawn') ) Rating += 0.4; if ( Owner.Location.Z > P.Enemy.Location.Z + 120 ) Rating += 0.25; else if ( P.Enemy.Location.Z > Owner.Location.Z + 160 ) Rating -= 0.35; else if ( P.Enemy.Location.Z > Owner.Location.Z + 80 ) Rating -= 0.05; if ( (Owner.Physics == PHYS_Falling) || Owner.Region.Zone.bWaterZone ) bUseAltMode = 0; else if ( EnemyDist < -1.5 * EnemyDir.Z ) bUseAltMode = int( FRand() < 0.5 ); else { bRetreating = ( ((EnemyDir/EnemyDist) Dot Owner.Velocity) < -0.7 ); bUseAltMode = 0; if ( bRetreating && (EnemyDist < 800) && (FRand() < 0.4) ) bUseAltMode = 1; } return Rating; } // return delta to combat style function float SuggestAttackStyle() { local float EnemyDist; EnemyDist = VSize(Pawn(Owner).Enemy.Location - Owner.Location); if ( EnemyDist < 600 ) { if ( EnemyDist < 300 ) return -1.5; else return -0.7; } else return -0.2; } function Fire( float Value ) { local TournamentPlayer TP; bPointing=True; if ( AmmoType == None ) { // ammocheck GiveAmmo(Pawn(Owner)); } if ( AmmoType.UseAmmo(1) ) { TP = TournamentPlayer(Instigator); bCanClientFire = true; bInstantRocket = bAlwaysInstant || ( (TP != None) && TP.bInstantRocket ); if ( bInstantRocket ) { bFireLoad = True; RocketsLoaded = 1; GotoState(''); GotoState('FireRockets', 'Begin'); } else if ( Instigator.IsA('Bot') ) { if ( LockedTarget != None ) { bFireLoad = True; RocketsLoaded = 1; Instigator.bFire = 0; bPendingLock = true; GotoState(''); GotoState('FireRockets', 'Begin'); return; } else if ( (NewTarget != None) && !NewTarget.IsA('StationaryPawn') && (FRand() < 0.8) && (VSize(Instigator.Location - NewTarget.Location) > 400 + 400 * (1.25 - TimerCounter) + 1300 * FRand()) ) { Instigator.bFire = 0; bPendingLock = true; GotoState('Idle','PendingLock'); return; } else if ( !Bot(Owner).bNovice && (FRand() < 0.7) && IsInState('Idle') && (Instigator.Enemy != None) && ((Instigator.Enemy == Instigator.Target) || (Instigator.Target == None)) && !Instigator.Enemy.IsA('StationaryPawn') && (VSize(Instigator.Location - Instigator.Enemy.Location) > 700 + 1300 * FRand()) && (VSize(Instigator.Location - Instigator.Enemy.Location) < 2000) ) { NewTarget = CheckTarget(); OldTarget = NewTarget; if ( NewTarget == Instigator.Enemy ) { if ( TimerCounter > 0.6 ) SetTimer(1.0, true); Instigator.bFire = 0; bPendingLock = true; GotoState('Idle','PendingLock'); return; } } bPendingLock = false; GotoState('NormalFire'); } else GotoState('NormalFire'); } } simulated function bool ClientFire( float Value ) { if ( bCanClientFire && ((Role == ROLE_Authority) || (AmmoType == None) || (AmmoType.AmmoAmount > 0)) ) { GotoState('ClientFiring'); return true; } return false; } simulated function FiringRockets() { PlayRFiring(ClientRocketsLoaded - 1); bClientDone = true; Disable('Tick'); } function AltFire( float Value ) { bPointing=True; bCanClientFire = true; if ( AmmoType == None ) { // ammocheck GiveAmmo(Pawn(Owner)); } if ( AmmoType.UseAmmo(1) ) GoToState('AltFiring'); } simulated function bool ClientAltFire( float Value ) { if ( bCanClientFire && ((Role == ROLE_Authority) || (AmmoType == None) || (AmmoType.AmmoAmount > 0)) ) { GotoState('ClientAltFiring'); return true; } return false; } function Actor CheckTarget() { local Actor ETarget; local Vector Start, X,Y,Z; local float bestDist, bestAim; local Pawn PawnOwner; local rotator AimRot; local int diff; PawnOwner = Pawn(Owner); bPointing = false; if ( Owner.IsA('PlayerPawn') ) { GetAxes(PawnOwner.ViewRotation,X,Y,Z); Start = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; bestAim = 0.93; ETarget = PawnOwner.PickTarget(bestAim, bestDist, X, Start); } else if ( PawnOwner.Enemy == None ) return None; else if ( Owner.IsA('Bot') && Bot(Owner).bNovice ) return None; else if ( VSize(PawnOwner.Enemy.Location - PawnOwner.Location) < 2000 ) { Start = Owner.Location + CalcDrawOffset() + FireOffset.Z * vect(0,0,1); AimRot = rotator(PawnOwner.Enemy.Location - Start); diff = abs((AimRot.Yaw & 65535) - (PawnOwner.Rotation.Yaw & 65535)); if ( (diff > 7200) && (diff < 58335) ) return None; // check if can hold lock if ( !bPendingLock ) //not already locked { AimRot = rotator(PawnOwner.Enemy.Location + (3 - PawnOwner.Skill) * 0.3 * PawnOwner.Enemy.Velocity - Start); diff = abs((AimRot.Yaw & 65535) - (PawnOwner.Rotation.Yaw & 65535)); if ( (diff > 16000) && (diff < 49535) ) return None; } // check line of sight ETarget = Trace(X,Y, PawnOwner.Enemy.Location, Start, false); if ( ETarget != None ) return None; return PawnOwner.Enemy; } bPointing = (ETarget != None); Return ETarget; } ////////////////////////////////////////////////////// state AltFiring { function Tick( float DeltaTime ) { if( (pawn(Owner).bAltFire==0) || (RocketsLoaded > 5) ) // If if Fire button down, load up another GoToState('FireRockets'); } function AnimEnd() { if ( bRotated ) { bRotated = false; PlayLoading(1.1, RocketsLoaded); } else { if ( RocketsLoaded == 6 ) { GotoState('FireRockets'); return; } RocketsLoaded++; AmmoType.UseAmmo(1); if ( (PlayerPawn(Owner) == None) && ((FRand() > 0.5) || (Pawn(Owner).Enemy == None)) ) Pawn(Owner).bAltFire = 0; bPointing = true; Owner.MakeNoise(0.6 * Pawn(Owner).SoundDampening); RotateRocket(); } } function RotateRocket() { if (AmmoType.AmmoAmount<=0) { GotoState('FireRockets'); return; } PlayRotating(RocketsLoaded-1); bRotated = true; } function BeginState() { Super.BeginState(); RocketsLoaded = 1; bFireLoad = False; RotateRocket(); } Begin: bLockedOn = False; } /////////////////////////////////////////////////////// state NormalFire { function bool SplashJump() { return true; } function Tick( float DeltaTime ) { if ( (PlayerPawn(Owner) == None) && ((Pawn(Owner).MoveTarget != Pawn(Owner).Target) || (LockedTarget != None) || (Pawn(Owner).Enemy == None) || ( Mover(Owner.Base) != None ) || ((Owner.Physics == PHYS_Falling) && (Owner.Velocity.Z < 5)) || (VSize(Owner.Location - Pawn(Owner).Target.Location) < 400) || !Pawn(Owner).CheckFutureSight(0.15)) ) Pawn(Owner).bFire = 0; if( pawn(Owner).bFire==0 || RocketsLoaded > 5) // If Fire button down, load up another GoToState('FireRockets'); } function AnimEnd() { if ( bRotated ) { bRotated = false; PlayLoading(1.1, RocketsLoaded); } else { if ( RocketsLoaded == 6 ) { GotoState('FireRockets'); return; } RocketsLoaded++; AmmoType.UseAmmo(1); if (pawn(Owner).bAltFire!=0) bTightWad=True; NewTarget = CheckTarget(); if ( Pawn(NewTarget) != None ) Pawn(NewTarget).WarnTarget(Pawn(Owner), ProjectileSpeed, vector(Pawn(Owner).ViewRotation)); if ( LockedTarget != None ) { If ( NewTarget != LockedTarget ) { LockedTarget = None; Owner.PlaySound(Misc2Sound, SLOT_None, Pawn(Owner).SoundDampening); bLockedOn=False; } else if (LockedTarget != None) Owner.PlaySound(Misc1Sound, SLOT_None, Pawn(Owner).SoundDampening); } bPointing = true; Owner.MakeNoise(0.6 * Pawn(Owner).SoundDampening); RotateRocket(); } } function BeginState() { Super.BeginState(); bFireLoad = True; RocketsLoaded = 1; RotateRocket(); } function RotateRocket() { if ( PlayerPawn(Owner) == None ) { if ( FRand() > 0.33 ) Pawn(Owner).bFire = 0; if ( Pawn(Owner).bFire == 0 ) { GoToState('FireRockets'); return; } } if ( AmmoType.AmmoAmount <= 0 ) { GotoState('FireRockets'); return; } if ( AmmoType.AmmoAmount == 1 ) Owner.PlaySound(Misc2Sound, SLOT_None, Pawn(Owner).SoundDampening); PlayRotating(RocketsLoaded-1); bRotated = true; } Begin: Sleep(0.0); } /////////////////////////////////////////////////////// state Idle { function Timer() { NewTarget = CheckTarget(); if ( NewTarget == OldTarget ) { LockedTarget = NewTarget; If (LockedTarget != None) { bLockedOn=True; Owner.MakeNoise(Pawn(Owner).SoundDampening); Owner.PlaySound(Misc1Sound, SLOT_None,Pawn(Owner).SoundDampening); if ( (Pawn(LockedTarget) != None) && (FRand() < 0.7) ) Pawn(LockedTarget).WarnTarget(Pawn(Owner), ProjectileSpeed, vector(Pawn(Owner).ViewRotation)); if ( bPendingLock ) { OldTarget = NewTarget; Pawn(Owner).bFire = 0; bFireLoad = True; RocketsLoaded = 1; GotoState('FireRockets', 'Begin'); return; } } } else if( (OldTarget != None) && (NewTarget == None) ) { Owner.PlaySound(Misc2Sound, SLOT_None,Pawn(Owner).SoundDampening); bLockedOn = False; } else { LockedTarget = None; bLockedOn = False; } OldTarget = NewTarget; bPendingLock = false; } Begin: if (Pawn(Owner).bFire!=0) Fire(0.0); if (Pawn(Owner).bAltFire!=0) AltFire(0.0); bPointing=False; if (AmmoType.AmmoAmount<=0) Pawn(Owner).SwitchToBestWeapon(); //Goto Weapon that has Ammo PlayIdleAnim(); OldTarget = CheckTarget(); SetTimer(1.25,True); LockedTarget = None; bLockedOn = False; PendingLock: if ( bPendingLock ) bPointing = true; if ( TimerRate <= 0 ) SetTimer(1.0, true); } state ClientReload { simulated function bool ClientFire(float Value) { bForceFire = bForceFire || ( bCanClientFire && (Pawn(Owner) != None) && (AmmoType.AmmoAmount > 0) ); return bForceFire; } simulated function bool ClientAltFire(float Value) { bForceAltFire = bForceAltFire || ( bCanClientFire && (Pawn(Owner) != None) && (AmmoType.AmmoAmount > 0) ); return bForceAltFire; } simulated function AnimEnd() { if ( bCanClientFire && (PlayerPawn(Owner) != None) && (AmmoType.AmmoAmount > 0) ) { if ( bForceFire || (Pawn(Owner).bFire != 0) ) { Global.ClientFire(0); return; } else if ( bForceAltFire || (Pawn(Owner).bAltFire != 0) ) { Global.ClientAltFire(0); return; } } GotoState(''); Global.AnimEnd(); } simulated function EndState() { bForceFire = false; bForceAltFire = false; } simulated function BeginState() { bForceFire = false; bForceAltFire = false; } } state ClientFiring { simulated function Tick(float DeltaTime) { if ( (Pawn(Owner).bFire == 0) || (Ammotype.AmmoAmount <= 0) ) FiringRockets(); } simulated function AnimEnd() { if ( !bCanClientFire || (Pawn(Owner) == None) ) GotoState(''); else if ( bClientDone ) { PlayLoading(1.5,0); GotoState('ClientReload'); } else if ( bRotated ) { PlayLoading(1.1, ClientRocketsLoaded); bRotated = false; ClientRocketsLoaded++; } else { if ( bInstantRocket || (ClientRocketsLoaded == 6) ) { FiringRockets(); return; } Enable('Tick'); PlayRotating(ClientRocketsLoaded - 1); bRotated = true; } } simulated function BeginState() { bFireLoad = true; if ( bInstantRocket ) { ClientRocketsLoaded = 1; FiringRockets(); } else { ClientRocketsLoaded = 1; PlayRotating(ClientRocketsLoaded - 1); bRotated = true; } } simulated function EndState() { ClientRocketsLoaded = 0; bClientDone = false; bRotated = false; } } state ClientAltFiring { simulated function Tick(float DeltaTime) { if ( (Pawn(Owner).bAltFire == 0) || (Ammotype.AmmoAmount <= 0) ) FiringRockets(); } simulated function AnimEnd() { if ( !bCanClientFire || (Pawn(Owner) == None) ) GotoState(''); else if ( bClientDone ) { PlayLoading(1.5,0); GotoState('ClientReload'); } else if ( bRotated ) { PlayLoading(1.1, ClientRocketsLoaded); bRotated = false; ClientRocketsLoaded++; } else { if ( ClientRocketsLoaded == 6 ) { FiringRockets(); return; } Enable('Tick'); PlayRotating(ClientRocketsLoaded - 1); bRotated = true; } } simulated function BeginState() { bFireLoad = false; ClientRocketsLoaded = 1; PlayRotating(ClientRocketsLoaded - 1); bRotated = true; } simulated function EndState() { ClientRocketsLoaded = 0; bClientDone = false; bRotated = false; } } /////////////////////////////////////////////////////// state FireRockets { function Fire(float F) {} function AltFire(float F) {} function ForceFire() { bForceFire = true; } function ForceAltFire() { bForceAltFire = true; } function bool SplashJump() { return false; } function BeginState() { local vector FireLocation, StartLoc, X,Y,Z; local rotator FireRot, RandRot; local ut_grenade r; local UT_SeekingRocket s; local PipeBomb g; local float Angle, RocketRad; local pawn BestTarget, PawnOwner; local PlayerPawn PlayerOwner; local int DupRockets; local bool bMultiRockets; PawnOwner = Pawn(Owner); if ( PawnOwner == None ) return; PawnOwner.PlayRecoil(FiringSpeed); PlayerOwner = PlayerPawn(Owner); Angle = 0; DupRockets = RocketsLoaded - 1; if (DupRockets < 0) DupRockets = 0; if ( PlayerOwner == None ) bTightWad = ( FRand() * 4 < PawnOwner.skill ); GetAxes(PawnOwner.ViewRotation,X,Y,Z); StartLoc = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; if ( bFireLoad ) AdjustedAim = PawnOwner.AdjustAim(ProjectileSpeed, StartLoc, AimError, True, bWarnTarget); else AdjustedAim = PawnOwner.AdjustToss(AltProjectileSpeed, StartLoc, AimError, True, bAltWarnTarget); if ( PlayerOwner != None ) AdjustedAim = PawnOwner.ViewRotation; PlayRFiring(RocketsLoaded-1); Owner.MakeNoise(PawnOwner.SoundDampening); if ( !bFireLoad ) { LockedTarget = None; bLockedOn = false; } else if ( LockedTarget != None ) { BestTarget = Pawn(CheckTarget()); if ( (LockedTarget!=None) && (LockedTarget != BestTarget) ) { LockedTarget = None; bLockedOn=False; } } else BestTarget = None; bPendingLock = false; bPointing = true; FireRot = AdjustedAim; RocketRad = 4; if (bTightWad || !bFireLoad) RocketRad=7; bMultiRockets = ( RocketsLoaded > 1 ); While ( RocketsLoaded > 0 ) { if ( bMultiRockets ) Firelocation = StartLoc - (Sin(Angle)*RocketRad - 7.5)*Y + (Cos(Angle)*RocketRad - 7)*Z - X * 4 * FRand(); else FireLocation = StartLoc; if (bFireLoad) { if ( Angle > 0 ) { if ( Angle < 3 && !bTightWad) FireRot.Yaw = AdjustedAim.Yaw - Angle * 600; else if ( Angle > 3.5 && !bTightWad) FireRot.Yaw = AdjustedAim.Yaw + (Angle - 3) * 600; else FireRot.Yaw = AdjustedAim.Yaw; } if ( LockedTarget != None ) { Owner.MakeNoise(0.6 * Pawn(Owner).SoundDampening); r = Spawn( class'ut_grenade',, '', FireLocation,FireRot); r.NumExtraGrenades = DupRockets; if ( DupRockets > 0 ) { RandRot.Pitch = FRand() * 1500 - 750; RandRot.Yaw = FRand() * 1500 - 750; RandRot.Roll = FRand() * 1500 - 750; r.Velocity = r.Velocity >> RandRot; } } else { Owner.MakeNoise(0.6 * Pawn(Owner).SoundDampening); r = Spawn( class'ut_grenade',, '', FireLocation,FireRot); r.NumExtraGrenades = DupRockets; if ( DupRockets > 0 ) { RandRot.Pitch = FRand() * 1500 - 750; RandRot.Yaw = FRand() * 1500 - 750; RandRot.Roll = FRand() * 1500 - 750; r.Velocity = r.Velocity >> RandRot; } } } else { g = Spawn( class 'PipeBomb',, '', FireLocation,AdjustedAim); g.NumExtraGrenades = DupRockets; if ( DupRockets > 0 ) { RandRot.Pitch = FRand() * 1500 - 750; RandRot.Yaw = FRand() * 1500 - 750; RandRot.Roll = FRand() * 1500 - 750; g.Velocity = g.Velocity >> RandRot; } } Angle += 1.0484; //2*3.1415/6; RocketsLoaded--; } bTightWad=False; bRotated = false; } function AnimEnd() { if ( !bRotated && (AmmoType.AmmoAmount > 0) ) { PlayLoading(1.5,0); RocketsLoaded = 1; bRotated = true; return; } LockedTarget = None; Finish(); } Begin: } A|Ef ::$2}BiѸB9 }9 }9 }=9 }9 }9 }=9 }=9 }726726726=9 }726726726 a) a) a)΄9 }ѸB9 }ѸBѸB9 }9 }ѸBѸB=9 }=9 }9 }9 }9 }=9 }9 }9 }ѸB9 }9 }9 }ѸBѸB=9 }ѸB9 }9 }9 }=9 }=9 }=9 }9 }9 }9 }====9 }=9 }9 }9 }ѸBѸB9 }9 }=9 }9 }=9 }=9 }9 }=I+\9 }9 }9 }=9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }ѸBѸBѸBѸBظ9 }9 }=9 }=9 }I+\9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }9 }=ѸB9 }9 }9 }=9 }9 }9 }=9 }9 }9 }9 }9 }9 }9 }=9 }9 }9 }9 }=9 }9 }=== ==Xu67269 }9 }=9 }=9 }xxxZ!xZ!xxxѸBظQJ\SHI L M * P U *m()e()a]! Classification: Heavy BallisticXVA" uYVUb$?f:1 A FE C$C@$L>D$@y$@?z$>w$>Xa[`_OY]%o was blown up by %k's %w.v*? I 8]You got the Grenade Launcher.K]Grenade Launcher~:1@ \}$@|$y?+^[l{/oS:$ AJ//============================================================================= //Grenade Launcher Mutator v1.00 //by avengingangel // //Makes Rocket Launcher fire grenades and pipebombs, no rockets. Bind //"mutate detbomb" to key or type in console to detonate pipebombs. // //No rip-off of TF or TFC's demoman intended. //============================================================================= class GLMutator expands Mutator; var bool bTimedExplode, bAutoDetonate, bDieDetonate, bRequireWep; var float ExplodeTime; function bool CheckReplacement (Actor Other, out byte bSuperRelevant) { if (Other.IsA('UT_EightBall')) { ReplaceWith(Other, "GrenadeLauncher.GL_Eightball"); return false; } if (Other.IsA('RocketPack')) { ReplaceWith(Other, "GrenadeLauncher.GrenadePack"); return false; } return true;; } function Mutate (string MutateString, PlayerPawn Sender) { local actor A; if (MutateString == "detbomb") { foreach Allactors( class 'Actor', A ) { if( A.IsA('PipeBomb')) { if( PipeBomb(A).BombOwner == Sender) PipeBomb(A).Explosion(A.location); } } } if ( NextMutator != None ) NextMutator.Mutate(MutateString, Sender); } function ScoreKill (Pawn Killer, Pawn Other) { local actor A; if (bDieDetonate) { foreach Allactors( class 'Actor', A ) { if (A.IsA('PipeBomb')) { if( PipeBomb(A).BombOwner == Other) PipeBomb(A).Explosion(A.Location); } } } if ( NextMutator != None ) NextMutator.ScoreKill(Killer, Other); } GP=! w* SA} , p0  6&=,6&$6&$Pa@ A &  RK@H9Q{5F9.--Jw9*9- ?=Rm;j='=?%6]=?&.Botpack.EightML h  %" . A AC?Timed Eplode%$- -5. AAC ADetonate on death%$- -2. ABCAAuto-detonate%$- -3. A8BCATime to explode%nTime till pipe bomb explodes.%s'p't,$@ BKU / TKqc. ?,0?,@BA IdW> [ $d : -5- a -3-  -2- LLA /L    ioRNjSOI--/-w.*%- R< S A A A A xxwbwzxwqHyx#w}ww~B1wHwKEmwxwNwRHCHrwXBAwEHhwwwrwYwzNfEkoPoGNrwsw&qtxCRDRFwoR]wpEUEfRSRJw@w{x`weESR}w5quwyw[wv|wMqvwtxkB?wDHiHnqw~wFH/Hlx^ok@2opQXH_@'wtPEuxHocNswuNZNDwwHFNCN]wgqZwQwoNPR<qnNyHfN\Blw/wqNvQdR_NaZNbNdNnRIomH`@$@0Ha-e_> xH%}QwTH\wq%wsRYRZNEoJN@N@oLNCNXTw{NeHBHyyN{GWNDjEpRuNb|HOxVF@HpNAHaH+N[N\N]E~FrHuREoqdHqNsHKQqJRYwUHVNWNg "i3qO qz4NaW y=wBwWghHX@  x`7NO_NYdNZ6]Nc4MOg_^ vbbBch Oce [cqgcT@tcABd}Od@Lg` Ygieg@rgi gU KhhWhYdhzqhR hzKiT~XiTeiT}riTia LjvXjgejYrjl AkOMkdZkP gkfskg @leLlOYlMflQsl |AmGOmk]mOjmPwmSDn_ Qns]nS jnPvn[ CoxOow \oshoD vorBpR Op{[pjhpPupRjCqtPqE ]qiqvqGCrm PrH \rw hrc trD@sS MsrYs gsw ssf sTBKtTC Xtj dtSptHCv^KwYXw v ewGZ[Czu"SoBtBH vH BVN [KhrusC~QG_ km jz m GTISQbnp+~i4Ni| wFCLImLVm| cU"Mo'|&c',IpAu Ov]EKbtR m2,y LeR qv I}v2Fv+x8cR| [}I xO|DI b|g#n+Q|- |qR \p Qhp+y-d| C=OpBLvAN yOU| HLTULb|h#o -RN| $AKRL L| XFpd| QT| e]| q3Rmy !qKdF|LBoN| \6EhmmNz>BH7|J| F<=RVM4U O {dTM4x3q|Xi=A h~ lKR X @}dSM4ma kN0>yiwM4vEH}{ 46x _Dn|rOL  M4jK Z%u~Z $g~KS%^XM4avEe"WM4U|=~QNLOTA\QJiRjsT%K ]TWlh+TNLRMKGrenade Launcher mutator v1.00 by avengingangel. Installation: Run the Umod file. Using: Double-click Grenade Launcher in the Mutators dialog to make it go from the Not Used to the Used column. All Rocket Launchers will be replaced with Grenade Launchers and all Rocket Packs will be replaced with Grenade Packs. The Grenade Launcher's primary fire is the same as the Rocket Launcher's secondary fire. The Grenade Launcher's secondary fire launches a pipebomb. To detonate your pipebombs you can either type "mutate detbomb" into the console (minus quotation marks),or bind the command to a key, like the middle mouse button. To do this 1- Open up user.ini (system folder) in a text editor. 2- Find a line like this- Aliases[25]=(Command="",Alias=None) 3- And change it to this- Aliases[25]=(Command="Mutate detbomb",Alias=Detbomb) 4- Find a line like this- MiddleMouse= 5- And change it to this- MiddleMouse=Detbomb Middlemouse can be any key you want, ie you could have "C=Detbomb" and it would be bound to the c key Now when you press the key you specified, your pipebombs should blow up. Configuration: Select Grenade Launcher Configuration from the Mod menu. Options are:- -Timed Explode (Pipebombs explode after time specified in Time To Explode text box) -Detonate on death (Your pipebombs explode when you die) -Auto-detonate (Pipebombs detonate when they touch somebody other than you) Notes: Auto-detonate does work, just not very well. When the pipebombs are lying on the ground they must be stepped directly on, which is easy not to do. Not tested over network. No reason it shouldn't work though. Known Issues: Primary fire doesn't play the grenade launching fire. Death message is that of the Rocket Launcher Contact: Please contact me at pricey_@hotmail.com to report any comments, bugs or praise :)System\Manifest.inieSystem\Manifest.inteSystem\GrenadeLauncher.intxSystem\GrenadeLauncher.udHelp\GrenadeLauncherReadme.txtTIK