Botpack
Class Translocator

source: e:\games\UnrealTournament\Botpack\Classes\Translocator.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Inventory
         |
         +--Engine.Weapon
            |
            +--Botpack.TournamentWeapon
               |
               +--Botpack.Translocator
Direct Known Subclasses:None

class Translocator
extends Botpack.TournamentWeapon

//============================================================================= // Translocator. //=============================================================================
Variables
 Actor DesiredTarget
 TossForce, FireDelay
 float MaxTossForce
 Weapon PreviousWeapon
 TranslocatorTarget TTarget
 bBotMoveFire, bTTargetOut

States
Idle, NormalFire

Function Summary
 void AltFire(float Value)
 void BringUp()
 bool ClientAltFire(float Value)
 bool ClientFire(float Value)
 
simulated
ClientWeaponEvent(name EventType)
 void Destroyed()
 void Fire(float Value)
 bool HandlePickupQuery(Inventory Item)
 
simulated
PlayFiring()
 void RaiseUp(Weapon OldWeapon)
 float RateSelf(out int)
 void ReturnToPreviousWeapon()
 void SetSwitchPriority(Pawn Other)
 void SpawnEffect(vector Start, vector Dest)
 float SuggestAttackStyle()
     
// return delta to combat style
 float SuggestDefenseStyle()
 void ThrowTarget()
 void Translocate()
 void setHand(float Hand)


State Idle Function Summary
 bool PutDown()
 void AnimEnd()


State NormalFire Function Summary
 bool PutDown()



Source Code


00001	//=============================================================================
00002	// Translocator.
00003	//=============================================================================
00004	class Translocator extends TournamentWeapon;
00005	
00006	#exec MESH  IMPORT MESH=Transloc ANIVFILE=MODELS\Translocator_a.3D DATAFILE=MODELS\Translocator_d.3D UNMIRROR=1
00007	#exec MESH ORIGIN MESH=Transloc X=0 Y=0 Z=0 YAW=-61 PITCH=0 ROLL=-5
00008	#exec MESH SEQUENCE MESH=Transloc SEQ=All	 	 STARTFRAME=0  NUMFRAMES=110
00009	#exec MESH SEQUENCE MESH=Transloc SEQ=Throw     STARTFRAME=32 NUMFRAMES=19
00010	#exec MESH SEQUENCE MESH=Transloc SEQ=PreReset  STARTFRAME=46 NUMFRAMES=5
00011	#exec MESH SEQUENCE MESH=Transloc SEQ=Idle      STARTFRAME=51 NUMFRAMES=2 RATE=3
00012	#exec MESH SEQUENCE MESH=Transloc SEQ=Still     STARTFRAME=51 NUMFRAMES=2 RATE=3
00013	#exec MESH SEQUENCE MESH=Transloc SEQ=Down 		STARTFRAME=66 NUMFRAMES=7
00014	#exec MESH SEQUENCE MESH=Transloc SEQ=Select	 STARTFRAME=18 NUMFRAMES=12
00015	#exec MESH SEQUENCE MESH=Transloc SEQ=Thrown	 STARTFRAME=53 NUMFRAMES=12
00016	#exec MESH SEQUENCE MESH=Transloc SEQ=ThrownFrame	STARTFRAME=52 NUMFRAMES=1
00017	#exec MESH SEQUENCE MESH=Transloc SEQ=Down2 	STARTFRAME=77 NUMFRAMES=7
00018	#exec MESH SEQUENCE MESH=Transloc SEQ=Idle2	STARTFRAME=88 NUMFRAMES=19
00019	
00020	#exec TEXTURE IMPORT NAME=tloc1 FILE=MODELS\tran1.PCX GROUP="Skins" LODSET=2
00021	#exec TEXTURE IMPORT NAME=tloc2 FILE=MODELS\tran2.PCX GROUP="Skins" LODSET=2
00022	#exec TEXTURE IMPORT NAME=tloc3 FILE=MODELS\tran3.PCX GROUP="Skins" LODSET=2
00023	#exec TEXTURE IMPORT NAME=tloc4 FILE=MODELS\tran4.PCX GROUP="Skins" LODSET=2
00024	
00025	#exec MESHMAP SCALE MESHMAP=Transloc X=0.0065 Y=0.0045 Z=0.011
00026	#exec MESHMAP SETTEXTURE MESHMAP=Transloc NUM=0 TEXTURE=tloc1
00027	#exec MESHMAP SETTEXTURE MESHMAP=Transloc NUM=1 TEXTURE=tloc2
00028	#exec MESHMAP SETTEXTURE MESHMAP=Transloc NUM=2 TEXTURE=tloc3
00029	#exec MESHMAP SETTEXTURE MESHMAP=Transloc NUM=3 TEXTURE=tloc4
00030	
00031	// Right handed version
00032	#exec MESH  IMPORT MESH=TranslocR ANIVFILE=MODELS\Translocator_a.3D DATAFILE=MODELS\Translocator_d.3D
00033	#exec MESH ORIGIN MESH=TranslocR X=0 Y=0 Z=0 YAW=-64 PITCH=0 ROLL=5
00034	#exec MESH SEQUENCE MESH=TranslocR SEQ=All	 	 STARTFRAME=0  NUMFRAMES=110
00035	#exec MESH SEQUENCE MESH=TranslocR SEQ=Throw     STARTFRAME=32 NUMFRAMES=19
00036	#exec MESH SEQUENCE MESH=TranslocR SEQ=PreReset  STARTFRAME=46 NUMFRAMES=5
00037	#exec MESH SEQUENCE MESH=TranslocR SEQ=Idle      STARTFRAME=51 NUMFRAMES=2 RATE=3
00038	#exec MESH SEQUENCE MESH=TranslocR SEQ=Still     STARTFRAME=51 NUMFRAMES=2 RATE=3
00039	#exec MESH SEQUENCE MESH=TranslocR SEQ=Down 	 STARTFRAME=66 NUMFRAMES=7
00040	#exec MESH SEQUENCE MESH=TranslocR SEQ=Select	 STARTFRAME=18 NUMFRAMES=12
00041	#exec MESH SEQUENCE MESH=TranslocR SEQ=Thrown	 STARTFRAME=53 NUMFRAMES=12
00042	#exec MESH SEQUENCE MESH=TranslocR SEQ=ThrownFrame	STARTFRAME=52 NUMFRAMES=1
00043	#exec MESH SEQUENCE MESH=TranslocR SEQ=Down2 	STARTFRAME=77 NUMFRAMES=7
00044	#exec MESH SEQUENCE MESH=TranslocR SEQ=Idle2	STARTFRAME=88 NUMFRAMES=19
00045	
00046	#exec MESHMAP SCALE MESHMAP=TranslocR X=0.0065 Y=0.0045 Z=0.011
00047	#exec MESHMAP SETTEXTURE MESHMAP=TranslocR NUM=0 TEXTURE=tloc1
00048	#exec MESHMAP SETTEXTURE MESHMAP=TranslocR NUM=1 TEXTURE=tloc2
00049	#exec MESHMAP SETTEXTURE MESHMAP=TranslocR NUM=2 TEXTURE=tloc3
00050	#exec MESHMAP SETTEXTURE MESHMAP=TranslocR NUM=3 TEXTURE=tloc4
00051	
00052	#exec MESH  IMPORT MESH=Trans3loc ANIVFILE=MODELS\Tran3rd_a.3D DATAFILE=MODELS\Tran3rd_d.3D X=0 Y=0 Z=0 
00053	#exec MESH ORIGIN MESH=Trans3loc X=0 Y=0 Z=-75 YAW=-64 PITCH=0 ROLL=0
00054	#exec MESH SEQUENCE MESH=Trans3loc SEQ=All STARTFRAME=0  NUMFRAMES=1
00055	#exec MESHMAP SCALE MESHMAP=Trans3loc X=0.023 Y=0.023 Z=0.046
00056	#exec MESHMAP SETTEXTURE MESHMAP=Trans3loc NUM=0 TEXTURE=tloc1
00057	#exec MESHMAP SETTEXTURE MESHMAP=Trans3loc NUM=1 TEXTURE=tloc2
00058	
00059	#exec AUDIO IMPORT FILE="Sounds\translocator\tranfire2.wav" NAME="ThrowTarget" GROUP="Translocator"
00060	#exec AUDIO IMPORT FILE="Sounds\translocator\tranreturn.wav" NAME="ReturnTarget" GROUP="Translocator"
00061	
00062	#exec TEXTURE IMPORT NAME=IconTrans FILE=TEXTURES\HUD\WpnTrans.PCX GROUP="Icons" MIPS=OFF
00063	#exec TEXTURE IMPORT NAME=UseTrans FILE=TEXTURES\HUD\UseTrans.PCX GROUP="Icons" MIPS=OFF
00064	
00065	var TranslocatorTarget TTarget;
00066	var float TossForce, FireDelay;
00067	var Weapon PreviousWeapon;
00068	var Actor DesiredTarget;
00069	var float MaxTossForce;
00070	var bool bBotMoveFire, bTTargetOut;
00071	
00072	replication
00073	{
00074		reliable if ( bNetOwner && (Role == ROLE_Authority) )
00075			bTTargetOut;
00076	}
00077	
00078	function setHand(float Hand)
00079	{
00080		if ( Hand != 2 )
00081		{
00082			if ( Hand == 0 )
00083				Hand = 1;
00084			else
00085				Hand *= -1;
00086	
00087			if ( Hand == -1 )
00088				Mesh = mesh(DynamicLoadObject("Botpack.TranslocR", class'Mesh'));
00089			else
00090				Mesh = mesh'Botpack.Transloc';
00091		}
00092		Super.SetHand(Hand);
00093	}
00094	
00095	function float RateSelf( out int bUseAltMode )
00096	{
00097		return -2; 
00098	}
00099	
00100	function BringUp()
00101	{
00102		PreviousWeapon = None;
00103		Super.BringUp();
00104	}
00105	
00106	function RaiseUp(Weapon OldWeapon)
00107	{
00108		if ( OldWeapon == self )
00109			PreviousWeapon = None;
00110		else
00111			PreviousWeapon = OldWeapon;
00112		Super.BringUp();
00113	}
00114	
00115	// return delta to combat style
00116	function float SuggestAttackStyle()
00117	{
00118		local float EnemyDist;
00119	
00120		if ( bTTargetOut )
00121			return -0.6;
00122	
00123		EnemyDist = VSize(Pawn(Owner).Enemy.Location - Owner.Location);
00124		if ( EnemyDist < 700 )
00125			return 1.0;
00126		else
00127			return -0.2;
00128	}
00129	
00130	function float SuggestDefenseStyle()
00131	{	
00132		if ( bTTargetOut )
00133			return 0;
00134	
00135		return -0.6;
00136	}
00137		
00138	function bool HandlePickupQuery( inventory Item )
00139	{
00140		if ( Item.IsA('TranslocatorTarget') && (item == TTarget) )
00141		{
00142			TTarget.Destroy();
00143			TTarget = None;
00144			bTTargetOut = false;
00145			return true;
00146		}
00147		else
00148			return Super.HandlePickupQuery(Item);
00149	}
00150	
00151	function Destroyed()
00152	{
00153		Super.Destroyed();
00154		if ( TTarget != None )
00155			TTarget.Destroy();
00156	}
00157	
00158	function SetSwitchPriority(pawn Other)
00159	{
00160		AutoSwitchPriority = 0;
00161	}
00162	
00163	simulated function ClientWeaponEvent(name EventType)
00164	{
00165		if ( EventType == 'TouchTarget' )
00166			PlayIdleAnim();
00167	}
00168	
00169	function Fire( float Value )
00170	{
00171		if ( bBotMoveFire )
00172			return;
00173		if (  TTarget == None )
00174		{
00175			if ( Level.TimeSeconds - 0.5 > FireDelay )
00176			{
00177				bPointing=True;
00178				bCanClientFire = true;
00179				ClientFire(value);
00180				Pawn(Owner).PlayRecoil(FiringSpeed);
00181				ThrowTarget();
00182				FireDelay = Level.TimeSeconds + 0.1;
00183			}
00184		}
00185		else if ( TTarget.SpawnTime < Level.TimeSeconds - 0.8 )
00186		{
00187			if ( TTarget.Disrupted() )
00188			{
00189				if (Level.Game.LocalLog != None)
00190					Level.Game.LocalLog.LogSpecialEvent("translocate_gib", Pawn(Owner).PlayerReplicationInfo.PlayerID);
00191				if (Level.Game.WorldLog != None)
00192					Level.Game.WorldLog.LogSpecialEvent("translocate_gib", Pawn(Owner).PlayerReplicationInfo.PlayerID);
00193	
00194				Pawn(Owner).PlaySound(sound'TDisrupt', SLOT_None, 4.0);
00195				Pawn(Owner).PlaySound(sound'TDisrupt', SLOT_Misc, 4.0);
00196				Pawn(Owner).PlaySound(sound'TDisrupt', SLOT_Interact, 4.0);
00197				Pawn(Owner).gibbedBy(TTarget.disruptor);
00198				return;
00199			}
00200			Owner.PlaySound(AltFireSound, SLOT_Misc, 4 * Pawn(Owner).SoundDampening);
00201			bTTargetOut = false;
00202			TTarget.Destroy();
00203			TTarget = None;
00204			FireDelay = Level.TimeSeconds;
00205		}
00206	
00207		GotoState('NormalFire');
00208	}
00209	
00210	simulated function bool ClientFire(float Value)
00211	{
00212		if ( !bTTargetOut && bCanClientFire && (Level.TimeSeconds - 0.5 > FireDelay) )
00213		{
00214			PlayFiring();
00215			FireDelay = Level.TimeSeconds + 0.1;
00216			return true;
00217		}
00218		return false;
00219	}
00220	
00221	simulated function bool ClientAltFire( float Value )
00222	{
00223		return true;
00224	}
00225	
00226	function SpawnEffect(vector Start, vector Dest)
00227	{
00228		local actor e;
00229	
00230		e = Spawn(class'TranslocOutEffect',,,start, Owner.Rotation);
00231		e.Mesh = Owner.Mesh;
00232		e.Animframe = Owner.Animframe;
00233		e.Animsequence = Owner.Animsequence;
00234		e.Velocity = 900 * Normal(Dest - Start);
00235	}
00236	
00237	function Translocate()
00238	{
00239		local vector Dest, Start;
00240		local Bot B;
00241		local Pawn P;
00242	
00243		bBotMoveFire = false;
00244		PlayAnim('Thrown', 1.2,0.1);
00245		Dest = TTarget.Location;
00246		if ( TTarget.Physics == PHYS_None )
00247			Dest += vect(0,0,40);
00248			
00249		if ( Level.Game.IsA('DeathMatchPlus') 
00250			&& !DeathMatchPlus(Level.Game).AllowTranslocation(Pawn(Owner), Dest) )
00251			return;
00252	
00253		Start = Pawn(Owner).Location;
00254		TTarget.SetCollision(false,false,false);
00255		if ( Pawn(Owner).SetLocation(Dest) )
00256		{
00257			if ( !Owner.Region.Zone.bWaterZone )
00258				Owner.SetPhysics(PHYS_Falling);
00259			if ( TTarget.Disrupted() )
00260			{
00261				if (Level.Game.LocalLog != None)
00262					Level.Game.LocalLog.LogSpecialEvent("translocate_gib", Pawn(Owner).PlayerReplicationInfo.PlayerID);
00263				if (Level.Game.WorldLog != None)
00264					Level.Game.WorldLog.LogSpecialEvent("translocate_gib", Pawn(Owner).PlayerReplicationInfo.PlayerID);
00265	
00266				SpawnEffect(Start, Dest);
00267				Pawn(Owner).gibbedBy(TTarget.disruptor);
00268				return;
00269			}
00270	
00271			if ( !FastTrace(Pawn(Owner).Location, TTarget.Location) )
00272			{
00273				if (Level.Game.LocalLog != None)
00274					Level.Game.LocalLog.LogSpecialEvent("translocate_fail", Pawn(Owner).PlayerReplicationInfo.PlayerID);
00275				if (Level.Game.WorldLog != None)
00276					Level.Game.WorldLog.LogSpecialEvent("translocate_fail", Pawn(Owner).PlayerReplicationInfo.PlayerID);
00277	
00278				Pawn(Owner).SetLocation(Start);
00279				Owner.PlaySound(AltFireSound, SLOT_Misc, 4 * Pawn(Owner).SoundDampening);
00280			}	
00281			else 
00282			{ 
00283				if (Level.Game.LocalLog != None)
00284					Level.Game.LocalLog.LogSpecialEvent("translocate", Pawn(Owner).PlayerReplicationInfo.PlayerID);
00285				if (Level.Game.WorldLog != None)
00286					Level.Game.WorldLog.LogSpecialEvent("translocate", Pawn(Owner).PlayerReplicationInfo.PlayerID);
00287	
00288				Owner.Velocity.X = 0;
00289				Owner.Velocity.Y = 0;
00290				B = Bot(Owner);
00291				if ( B != None )
00292				{
00293					if ( TTarget.DesiredTarget.IsA('NavigationPoint') )
00294						B.MoveTarget = TTarget.DesiredTarget;
00295					B.bJumpOffPawn = true;
00296					if ( !Owner.Region.Zone.bWaterZone )
00297						B.SetFall();
00298				}
00299				else
00300				{
00301					// bots must re-acquire this player
00302					for ( P=Level.PawnList; P!=None; P=P.NextPawn )
00303						if ( (P.Enemy == Owner) && P.IsA('Bot') )
00304							Bot(P).LastAcquireTime = Level.TimeSeconds;
00305				}
00306	
00307				Level.Game.PlayTeleportEffect(Owner, true, true);
00308				SpawnEffect(Start, Dest);
00309			}
00310		} 
00311		else 
00312		{
00313			Owner.PlaySound(AltFireSound, SLOT_Misc, 4 * Pawn(Owner).SoundDampening);
00314			if (Level.Game.LocalLog != None)
00315				Level.Game.LocalLog.LogSpecialEvent("translocate_fail", Pawn(Owner).PlayerReplicationInfo.PlayerID);
00316			if (Level.Game.WorldLog != None)
00317				Level.Game.WorldLog.LogSpecialEvent("translocate_fail", Pawn(Owner).PlayerReplicationInfo.PlayerID);
00318		}
00319	
00320		if ( TTarget != None )
00321		{
00322			bTTargetOut = false;
00323			TTarget.Destroy();
00324			TTarget = None;
00325		}
00326		bPointing=True;
00327	}
00328	
00329	function AltFire( float Value )
00330	{
00331		if ( bBotMoveFire )
00332			return;
00333	
00334		GotoState('NormalFire');
00335	
00336		if ( TTarget != None )
00337			Translocate();
00338	}
00339	
00340	function ReturnToPreviousWeapon()
00341	{
00342		if ( (PreviousWeapon == None)
00343			|| ((PreviousWeapon.AmmoType != None) && (PreviousWeapon.AmmoType.AmmoAmount <=0)) )
00344			Pawn(Owner).SwitchToBestWeapon();
00345		else
00346		{
00347			Pawn(Owner).PendingWeapon = PreviousWeapon;
00348			PutDown();
00349		}
00350	}
00351	
00352	simulated function PlayFiring()
00353	{
00354		PlayOwnedSound(FireSound, SLOT_Misc, 4 * Pawn(Owner).SoundDampening);	
00355		PlayAnim('Throw',1.0,0.1);
00356	}
00357	
00358	function ThrowTarget()
00359	{
00360		local Vector Start, X,Y,Z;	
00361	
00362		if (Level.Game.LocalLog != None)
00363			Level.Game.LocalLog.LogSpecialEvent("throw_translocator", Pawn(Owner).PlayerReplicationInfo.PlayerID);
00364		if (Level.Game.WorldLog != None)
00365			Level.Game.WorldLog.LogSpecialEvent("throw_translocator", Pawn(Owner).PlayerReplicationInfo.PlayerID);
00366	
00367		if ( Owner.IsA('Bot') )
00368			bBotMoveFire = true;
00369		Start = Owner.Location + CalcDrawOffset() + FireOffset.X * X + FireOffset.Y * Y + FireOffset.Z * Z; 		
00370		Pawn(Owner).ViewRotation = Pawn(Owner).AdjustToss(TossForce, Start, 0, true, true); 
00371		GetAxes(Pawn(owner).ViewRotation,X,Y,Z);		
00372		TTarget = Spawn(class'TranslocatorTarget',,, Start);
00373		if (TTarget!=None)
00374		{
00375			bTTargetOut = true;
00376			TTarget.Master = self;
00377			if ( Owner.IsA('Bot') )
00378				TTarget.SetCollisionSize(0,0); 
00379			TTarget.Throw(Pawn(Owner), MaxTossForce, Start);
00380		}
00381		else GotoState('Idle');
00382	}
00383	
00384	state NormalFire
00385	{
00386		ignores fire, altfire, AnimEnd;
00387	
00388		function bool PutDown()
00389		{
00390			GotoState('DownWeapon');
00391			return True;
00392		}
00393	
00394	Begin:
00395		if ( Owner.IsA('Bot') )
00396			Bot(Owner).SwitchToBestWeapon();
00397		Sleep(0.1);
00398		if ( (Pawn(Owner).bFire != 0) && (Pawn(Owner).bAltFire != 0) )
00399		 	ReturnToPreviousWeapon();
00400		GotoState('Idle');
00401	}
00402	
00403	state Idle
00404	{
00405		function AnimEnd()
00406		{
00407			PlayIdleAnim();
00408		}
00409	
00410		function bool PutDown()
00411		{
00412			GotoState('DownWeapon');
00413			return True;
00414		}
00415	
00416	Begin:
00417		bPointing=False;
00418		if ( Pawn(Owner).bFire!=0 ) Fire(0.0);
00419		if ( Pawn(Owner).bAltFire!=0 ) AltFire(0.0);	
00420		Disable('AnimEnd');
00421		FinishAnim();
00422		PlayIdleAnim();
00423	}
00424	
00425	
00426	///////////////////////////////////////////////////////////
00427	simulated function PlayIdleAnim()
00428	{
00429		if ( Mesh == PickupViewMesh )
00430			return;
00431		if ( bTTargetOut )
00432			LoopAnim('Idle', 0.4);
00433		else  
00434			LoopAnim('Idle2',0.2,0.1);
00435		Enable('AnimEnd');
00436	}
00437	
00438	simulated function PlaySelect()
00439	{
00440		bForceFire = false;
00441		bForceAltFire = false;
00442		if ( bTTargetOut )
00443			TweenAnim('ThrownFrame', 0.27);
00444		else
00445			PlayAnim('Select',1.1, 0.0);
00446		PlaySound(SelectSound, SLOT_Misc,Pawn(Owner).SoundDampening);		
00447	}
00448	
00449	
00450	simulated function TweenDown()
00451	{
00452		if ( IsAnimating() && (AnimSequence != '') && (GetAnimGroup(AnimSequence) == 'Select') )
00453			TweenAnim( AnimSequence, AnimFrame * 0.36 );
00454		else
00455		{
00456			if ( bTTargetOut ) PlayAnim('Down2', 1.1, 0.05);
00457			else PlayAnim('Down', 1.1, 0.05);
00458		}
00459	}
00460	
00461	simulated function PlayPostSelect()
00462	{
00463		local actor RealTarget;
00464	
00465		if ( Level.NetMode == NM_Client )
00466		{
00467			Super.PlayPostSelect();
00468			return;
00469		}
00470	
00471		// If Bot is wanting a specific target fired at, do it
00472		if ( DesiredTarget != None )
00473		{
00474			TossForce = MaxTossForce;
00475			RealTarget = Owner.Target;
00476			Owner.Target = DesiredTarget;
00477			ThrowTarget();
00478			PlayFiring();
00479			Owner.Target = RealTarget;
00480			TTarget.DesiredTarget = DesiredTarget;
00481			DesiredTarget = None;
00482		}	
00483	}
00484	
00485	defaultproperties
00486	{
00487	     MaxTossForce=830.000000
00488	     WeaponDescription="Classification: Personal Teleportation Device\n\nPrimary Fire: Launches the destination module.  Throw the module to the location you would like to teleport to.\n\nSecondary Fire: Activates the translocator and teleports the user to the destination module.\n\nTechniques: Throw your destination module at another player and then activate the secondary fire, and you will telefrag your opponent!  If you press your primary fire button when activating your translocator with the secondary fire, the last weapon you had selected will automatically return once you have translocated."
00489	     PickupAmmoCount=1
00490	     bCanThrow=False
00491	     FiringSpeed=1.000000
00492	     FireOffset=(X=15.000000,Y=-13.000000,Z=-7.000000)
00493	     AIRating=-1.000000
00494	     FireSound=Sound'Botpack.Translocator.ThrowTarget'
00495	     AltFireSound=Sound'Botpack.Translocator.ReturnTarget'
00496	     DeathMessage="%k telefragged %o!"
00497	     AutoSwitchPriority=0
00498	     PickupMessage="You got the Translocator Source Module."
00499	     ItemName="Translocator"
00500	     RespawnTime=0.000000
00501	     PlayerViewOffset=(X=5.000000,Y=-4.200000,Z=-7.000000)
00502	     PlayerViewMesh=LodMesh'Botpack.Transloc'
00503	     PickupViewMesh=LodMesh'Botpack.Trans3loc'
00504	     ThirdPersonMesh=LodMesh'Botpack.Trans3loc'
00505	     StatusIcon=Texture'Botpack.Icons.UseTrans'
00506	     Icon=Texture'Botpack.Icons.UseTrans'
00507	     Mesh=LodMesh'Botpack.Trans3loc'
00508	     bNoSmooth=False
00509	     CollisionRadius=8.000000
00510	     CollisionHeight=3.000000
00511	     Mass=10.000000
00512	}

End Source Code