Core.Object | +--Engine.Actor | +--Engine.Inventory | +--Engine.Weapon | +--Botpack.TournamentWeapon | +--Botpack.Translocator
Actor
DesiredTarget
TossForce,
FireDelay
float
MaxTossForce
Weapon
PreviousWeapon
TranslocatorTarget
TTarget
bBotMoveFire,
bTTargetOut
void
AltFire(float Value)
BringUp()
bool
ClientAltFire(float Value)
ClientFire(float Value)
simulated
ClientWeaponEvent(name EventType)
Destroyed()
Fire(float Value)
HandlePickupQuery(Inventory Item)
PlayFiring()
RaiseUp(Weapon OldWeapon)
RateSelf(out int)
ReturnToPreviousWeapon()
SetSwitchPriority(Pawn Other)
SpawnEffect(vector Start, vector Dest)
SuggestAttackStyle()
// return delta to combat style
SuggestDefenseStyle()
ThrowTarget()
Translocate()
setHand(float Hand)
PutDown()
AnimEnd()
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 }