[Setup] Product=Grapple Version=100 Archive=Grapple.umod SrcPath=. MasterPath=.. Group=SetupGroup Group=GrappleGroup Group=umodIncludeFilesGroup [SetupGroup] Copy=(Src=System\Manifest.ini,Master=System\Manifest.ini,Size=383,Flags=3) Copy=(Src=System\Manifest.int,Master=System\Manifest.int,Size=225,Flags=3) [GrappleGroup] File=(Src=System\Grapple.u,Size=16373) File=(Src=System\Grapple.int,Size=160) [umodIncludeFilesGroup] File=(Src=System\TeamCTF.txt,Size=1025) File=(Src=System\Grapple.txt,Size=1085) [Setup] LocalProduct=Grapple ReadMe=System\Grapple.txt SetupWindowTitle=Grapple Mutator AutoplayWindowTitle=Grapple Options ProductURL=none VersionURL=none Developer=^Soul^ DeveloperURL=www.unrealnation.net/unloaded *D@Q;d7JbRHQNoneGrappleEngine GrappleArenaSystemCoreFire CheckHitBeginIdleAltFireFinishBotpack UpdateCable PlayIdleAnimocmGrappleLauncherspeedVector PlayFiring Destroyed NormalFire EndStateAnimEnd AltFiring DownWeaponTouchTickbUnlitTexture CableSize PlayerPawn Defaultammo GrappleMMesh ItemName WeaponString AmmoStringProjectileClass FireOffsetWeaponAltProjectileClassSpiked TakeDamageThirdPersonMeshPickupViewMesh StatusIconbRotatingPickupCheckReplacementDefaultWeapon WeaponNameMassbMeshEnviroMapPutDownRaiseUpbBlockPlayers bBlockActors GrappleBaseBringUpSetHand ShakeView LifeSpan ReplaceWithAdjustHitLocationPhysicsThrow TranslocatorGiveToPlayerViewOffsetProjectileFire DropFrom StopFiringCheckVisibility AddVelocity PlayRecoil AmmoNamePlayerViewMeshRoleFRotator ReturnValue Function bProjTargetObjectDynamicLoadObjectLodMeshMutator TextBuffer shaketimebHiddenPackage GameInfo shakevertStateClassLevelhand HitLocationPlayer DeltaTimeOtherX VelocityGame bWarnTargetOwner HitActorZNetModebCoopWeaponModeYbSuperRelevantValuebCenter OldWeapon Rotation ViewRotation ScriptTextStruct Location LevelInfoStructProperty DrawOffset PawnOwnerStartLocationSoundDampening bPointingbChangeWeapon bRapidFire FiringSpeed StrProperty AirSpeedCalcDrawOffset FireSound EyeHeight Instigator ProjectileClassPropertyIconsbRightUMenuBg41 NamePropertyTournamentWeapon Inventory shakemagActorArena Transloc Trans3loc UseTransPreviousWeapon MiniTrace AimRotationObjectPropertyPawnFloatPropertyDirProjectileSpeed HitNormal NewCable bHitWall BoolProperty TestVect ByteProperty ParentCablePlayOwnedSound=Fz ::$" ՀB$l)d17xՀBd17xՀBՀBlllddd17xՀBd17xdddld17xՀBd17xՀBՀBՀB$B$D?<$pB!376622 17x~dՀB]Pd+dldՀBՀB &:BpA@%(.S"]Grapple LauncherC:@K,+-2$ A O  )I8"tXՀB_ d]Pd+d17xddd- dd- d- d- d- d$C9 4 !Dq!:w.*.;-'z- ?%. Ir*.D--G (55(r*  3E&+w*a* >h;$@.a!@?= $]{ #7 a " S q! &Mha   9/t* F//============================================================================= // GrappleBase. //============================================================================= class GrappleBase expands Grapple; var rotator AimRotation; simulated function Tick(float DeltaTime) { local vector X,Y,Z, DrawOffset, HitNormal, HitLocation; local Actor HitActor; if (Instigator != none) { if ((Level.NetMode == NM_Client) && (!Instigator.IsA('PlayerPawn') || (PlayerPawn(Instigator).Player == none))) { SetRotation(AimRotation); Instigator.ViewRotation = AimRotation; DrawOffset = ((0.01 * Class'ocmGrappleLauncher'.Default.PlayerViewOffset) >> Rotation); DrawOffset += (Instigator.EyeHeight * vect(0,0,1)); } else { AimRotation = Instigator.ViewRotation; SetRotation(AimRotation); Drawoffset = Instigator.Weapon.CalcDrawOffset(); } GetAxes(Instigator.ViewRotation,X,Y,Z); FireOffset = Instigator.Weapon.Default.FireOffset; if (bCenter) { FireOffset.Z = Instigator.Weapon.Default.FireOffset.Z * 1.5; FireOffset.Y = 0; } else { FireOffset.Z = Instigator.Weapon.Default.FireOffset.Z; if (bRight) FireOffset.Y = Instigator.Weapon.Default.FireOffset.Y; else FireOffset.Y = -1 * Default.FireOffset.Y; } SetLocation(Instigator.Location + DrawOffset + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z); } else GetAxes(Rotation,X,Y,Z); CheckHit(X); } 8<*tԱll_ R$W 1J#]Grapple.ocmGrappleLauncher$]none0 B&w*a* 5@Lyv w*a* A0 (-(v! "  /14Z q!' .  V-q! .Mr.*Fq!  Tq!  +:{?,'?%?4?p?.Botpack.TranslocR {  @s+//============================================================================= // ocmGrappleLauncher. //============================================================================= class ocmGrappleLauncher expands TournamentWeapon; var Weapon PreviousWeapon; var Grapple Grapple; function Destroyed() { if (Grapple != none) { Grapple.Destroy(); Grapple = none; } Super.Destroyed(); } function setHand(float Hand) { if (Hand != 2) { if (Hand == 0) Hand = 1; else Hand *= -1; if (Hand == -1) Mesh = mesh(DynamicLoadObject("Botpack.TranslocR", class'Mesh')); else Mesh = mesh'Botpack.Transloc'; } Super.SetHand(Hand); } function DropFrom(vector StartLocation) { if (Grapple != none) { Grapple.Destroy(); Grapple = none; } Super.DropFrom(StartLocation); } function BringUp() { PreviousWeapon = none; Super.BringUp(); } function RaiseUp(Weapon OldWeapon) { if (OldWeapon == Self) PreviousWeapon = none; else PreviousWeapon = OldWeapon; Super.BringUp(); } simulated function PlayFiring() { PlayOwnedSound(FireSound,SLOT_Misc,4 * Pawn(Owner).SoundDampening); PlayAnim('Throw',1.0,0.1); } function Fire(float Value) { GotoState('NormalFire'); if (PlayerPawn(Owner) != none) PlayerPawn(Owner).ShakeView(ShakeTime, ShakeMag, ShakeVert); bPointing = True; PlayFiring(); if ((!bRapidFire) && (FiringSpeed > 0)) Pawn(Owner).PlayRecoil(FiringSpeed); if (Grapple == none) Grapple = GrappleBase(ProjectileFire(ProjectileClass,ProjectileSpeed,bWarnTarget)); if (Owner.bHidden) CheckVisibility(); } function AltFire(float Value) { GotoState('AltFiring'); } /////////////////////////////////////////////////////////// /////////////////////////////////////////////////////// state NormalFire { function Fire(float F) { } function AltFire(float F) { } function EndState() { } Begin: FinishAnim(); Finish(); } state AltFiring { function Fire(float F) { } function AltFire(float F) { } function EndState() { if (Grapple != none) { Grapple.Destroy(); Grapple = none; } } Begin: FinishAnim(); Finish(); } state Idle { function AnimEnd() { PlayIdleAnim(); } function bool PutDown() { GotoState('DownWeapon'); return True; } Begin: bPointing = False; Disable('AnimEnd'); PlayIdleAnim(); } function Finish() { local Pawn PawnOwner; if (bChangeWeapon) { GotoState('DownWeapon'); return; } PawnOwner = Pawn(Owner); if (PlayerPawn(Owner) == none) { PawnOwner.StopFiring(); GotoState('Idle'); return; } else GotoState('Idle'); } b //============================================================================= // GrappleArena. //============================================================================= class GrappleArena expands Arena; var() name WeaponName, AmmoName; var() string WeaponString, AmmoString; function bool CheckReplacement(Actor Other, out byte bSuperRelevant) { if (Other.IsA('Weapon')) { if (Other.IsA('Translocator')) { Level.Game.bCoopWeaponMode = False; ReplaceWith(Other,"Grapple.ocmGrappleLauncher"); return False; } } bSuperRelevant = 0; return True; } w*a : sa '+w* w- rY--1r.*.> tr9 ?,P.a.*2H ?,w.*w.$*,2 ?!).a.*&w*a* q\r*a  q   >/wka/!'ka/!A-(=Grapple.ocmGrappleLauncher($' P&//============================================================================= // Grapple. //============================================================================= class Grapple expands Projectile; var() float CableSize; var Grapple NewCable; var vector FireOffset; var bool bRight, bCenter, bHitWall; replication { unreliable if (Role == ROLE_Authority) bRight, bCenter; } simulated function Destroyed() { Super.Destroyed(); if (NewCable != none) NewCable.Destroy(); } simulated function CheckHit(vector TestVect) { local actor HitActor; local vector HitLocation, HitNormal; HitActor = Trace(HitLocation,HitNormal,Location + CableSize * TestVect,Location,True); if ((HitActor != none) && (HitActor != Instigator) && (HitActor.bProjTarget) || (HitActor == Level) || (HitActor.bBlockActors) && (HitActor.bBlockPlayers) && ((Pawn(HitActor) == none) || Pawn(HitActor).AdjustHitLocation(HitLocation,Velocity))) { if (HitActor == Level) { if (vSize(Instigator.Location - Location) <= 80) { ocmGrappleLauncher(Instigator.Weapon).Grapple.Destroy(); ocmGrappleLauncher(Instigator.Weapon).Grapple = none; } Instigator.AddVelocity((normal(Location - Instigator.Location) * Instigator.AirSpeed) / 2); } if ((Pawn(HitActor) != none) && (Pawn(HitActor) != Instigator)) { HitActor.TakeDamage(50,Instigator,HitLocation,HitLocation * 1000,'Spiked'); ocmGrappleLauncher(Instigator.Weapon).Grapple.Destroy(); ocmGrappleLauncher(Instigator.Weapon).Grapple = none; } if (NewCable != none) { NewCable.Destroy(); NewCable = none; } return; } else { if (NewCable == none) NewCable = Spawn(Class'Grapple',,,Location + CableSize * TestVect); else NewCable.UpDateCable(Self,TestVect); } } simulated function UpdateCable(Grapple ParentCable, vector Dir) { local actor HitActor; local vector HitLocation, HitNormal; SetLocation(ParentCable.Location + CableSize * Dir); SetRotation(ParentCable.Rotation); CheckHit(Dir); } simulated function Touch(actor Other) { if (Inventory(Other) != none) { Inventory(Other).GiveTo(Instigator); ocmGrappleLauncher(Instigator.Weapon).Grapple.Destroy(); ocmGrappleLauncher(Instigator.Weapon).Grapple = none; } } BH ?N_й; I=a  a+  '-a   ,DE@Pljw.*. B.a.* T//============================================================================= // GrappleM. //============================================================================= class GrappleM expands Mutator; JhEw*::$/a/!r.*a+   a #<  #?  a+     {-66 ?666 -66 66a  6 6 6 [    NG uS %f Kq+ PQYY]Q]Z]']RYFu]PY ]x]N]YY'xv][Yh][m]]]O]a[j]Vx&]wY^\P9]\\]Gxs]Rxr\ ]U]!]Z]MP]AY!TTPEPTSPa}P:[@Yack[|PCPH%Pa6aQal[W[P[]a[[PeaXxC[BYD[EPcLPP4YfP5YKYILxe[dYIP PP PSP/uN]ca7aga~PP PP UTWVv' L.oY.;i H2& U2_ b23_ o2Iy{2XI3;` W3Id d3Im q3Ij ~3;b K4<c X48Pe4 u8V A9@\N9Fc \92z i9@d v9q C:pP: { ^:<n k:Jx:;^ F;QS;o d=53p=E6c>FY?&o _@'k@#M GA' SA  oA^;\*J W@ic@`q@^ ]LLM i?t4_uUTIb iNM uA A'_AzI^WI`eIi s[Public] Object=(Name=Grapple.GrappleArena,Class=Class,MetaClass=Engine.Mutator,Description="Grapple Mutation, Replace translocators with GrappleLaunchers.") These classes are based off face skins, each of these group of face skins is a class, each class has its own speed and weapons. Depending on what player you have choosen in the UWindow->options->Player Setup menu. - Light Class: ---------------- Faces: RawS4Kregore, RawS4Slain, RawS4 and blkt4Riker Weapons: Enforcer, and Shock Rifle 1.7x times the speed of a normal player Armor: Thigh pads - Medium Class: --------------- Faces: RawS4ManWell, RawS4Bruce, blkt4Othello and blkt4 Weapons: Enforcer, and Pulse Gun 1.3x the speed of a normal player Armor: Chest plate - Heavy Class: ---------------- Faces: RawS4Arkon and blkt4Malcom Weapons: Enforcer, and minigun Slightly lower than normal Armor: Chest plate & thigh pads Note: There are several reasons why I used this reverse engineered method, first, I only intend this to be for the UT demo, secondly I didn't want to force a player to have to d/l this mod as of now it only needs to be on the server, unless you want to use it in a practice game.----------------------------------------------------------------------- Grapple Mutation ----------------------------------------------------------------------- This is a simple mod I put a few hours into setting up to appease the poor people who wanted a grapple in ut, but couldn't get it. I may up date the grapple code(as it is now it has some issue I just didn't feel like working out) but all in all it gets the job done. Since I consider mutators to be a same affair I didn't want to put too much time into it. Though if I see enough servers using it I will. After not seeing alot of servers use TeamCTF(btw, this two mods would kick ass together for the demo), I didn't want to put much effort into anything. Ok, now here is how it works. ---------------------------------------------------------------------- Primary fire: Shoots out a cable that when connects with a wall draws you to it, it auto releases once you arrive near it. You can also use this to collect items and weapons from affar, and it does alot of damage to oppenents. Secodary Fire: Kills the cable.System\Manifest.iniSystem\Manifest.intSystem\Grapple.u?System\Grapple.intBSystem\TeamCTF.txtCSystem\Grapple.txtG=KLV