Core.Object | +--Engine.Actor | +--Engine.Pawn | +--UnrealShare.ScriptedPawn | +--UnrealShare.Brute
byte
WhipDamage
bool
bBerserk
bLongBerserk
bTurret
eAttitude
AttitudeToCreature(Pawn Other)
CanFireAtEnemy()
void
GoBerserk()
GutShotTarget()
PlayBigDeath(name DamageType)
PlayChallenge()
PlayGutDeath(name DamageType)
PlayHeadDeath(name DamageType)
PlayLeftDeath(name DamageType)
PlayMeleeAttack()
PlayMovingAttack()
PlayPatrolStop()
PlayRangedAttack()
PlayRightDeath(name DamageType)
PlayRunning()
PlayThreatening()
PlayTurning()
PlayVictoryDance()
PlayWaiting()
PlayWaitingAmbush()
PlayWalking()
PostBeginPlay()
// Sounds
SpawnLeftShot()
SpawnRightShot()
Step()
TweenToFighter(float tweentime)
TweenToPatrolStop(float tweentime)
TweenToRunning(float tweentime)
TweenToWaiting(float tweentime)
TweenToWalking(float tweentime)
WhipDamageTarget()
TweenToFighter(float TweenTime)
EndState()
BeginState()
Timer()
AnimEnd()
ChooseAttackMode()
00001 //============================================================================= 00002 // Brute. 00003 //============================================================================= 00004 class Brute extends ScriptedPawn; 00005 00006 #exec MESH IMPORT MESH=Brute1 ANIVFILE=Models\Brute_a.3D DATAFILE=Models\Brute_d.3D 00007 #exec MESH ORIGIN MESH=Brute1 X=-20 Y=-160 Z=-215 YAW=64 ROLL=-64 00008 00009 #exec MESH SEQUENCE MESH=Brute1 SEQ=All STARTFRAME=0 NUMFRAMES=310 00010 #exec MESH SEQUENCE MESH=Brute1 SEQ=GutHit STARTFRAME=0 NUMFRAMES=1 00011 #exec MESH SEQUENCE MESH=Brute1 SEQ=Breath2 STARTFRAME=1 NUMFRAMES=8 RATE=6 00012 #exec MESH SEQUENCE MESH=Brute1 SEQ=Charge STARTFRAME=9 NUMFRAMES=10 RATE=15 00013 #exec MESH SEQUENCE MESH=Brute1 SEQ=CockGun STARTFRAME=19 NUMFRAMES=18 RATE=15 00014 #exec MESH SEQUENCE MESH=Brute1 SEQ=Dead1 STARTFRAME=37 NUMFRAMES=13 RATE=15 00015 #exec MESH SEQUENCE MESH=Brute1 SEQ=Dead2 STARTFRAME=50 NUMFRAMES=15 RATE=15 00016 #exec MESH SEQUENCE MESH=Brute1 SEQ=Dead3 STARTFRAME=65 NUMFRAMES=11 RATE=15 00017 #exec MESH SEQUENCE MESH=Brute1 SEQ=Dead4 STARTFRAME=76 NUMFRAMES=23 RATE=15 00018 #exec MESH SEQUENCE MESH=Brute1 SEQ=Fighter STARTFRAME=99 NUMFRAMES=1 00019 #exec MESH SEQUENCE MESH=Brute1 SEQ=Gutshot STARTFRAME=100 NUMFRAMES=34 Group=Attack 00020 #exec MESH SEQUENCE MESH=Brute1 SEQ=HeadHit STARTFRAME=134 NUMFRAMES=1 00021 #exec MESH SEQUENCE MESH=Brute1 SEQ=Hit STARTFRAME=135 NUMFRAMES=5 RATE=15 00022 #exec MESH SEQUENCE MESH=Brute1 SEQ=LeftHit STARTFRAME=140 NUMFRAMES=1 00023 #exec MESH SEQUENCE MESH=Brute1 SEQ=StillLook STARTFRAME=141 NUMFRAMES=23 RATE=15 00024 #exec MESH SEQUENCE MESH=Brute1 SEQ=Precharg STARTFRAME=164 NUMFRAMES=15 RATE=15 00025 #exec MESH SEQUENCE MESH=Brute1 SEQ=PistolWhip STARTFRAME=179 NUMFRAMES=10 RATE=15 Group=Attack 00026 #exec MESH SEQUENCE MESH=Brute1 SEQ=Punch STARTFRAME=189 NUMFRAMES=13 RATE=15 Group=Attack 00027 #exec MESH SEQUENCE MESH=Brute1 SEQ=StillFire STARTFRAME=202 NUMFRAMES=20 Group=Attack 00028 #exec MESH SEQUENCE MESH=Brute1 SEQ=RightHit STARTFRAME=222 NUMFRAMES=1 00029 #exec MESH SEQUENCE MESH=Brute1 SEQ=Sleep STARTFRAME=223 NUMFRAMES=6 RATE=6 00030 #exec MESH SEQUENCE MESH=Brute1 SEQ=T8 STARTFRAME=229 NUMFRAMES=12 RATE=15 00031 #exec MESH SEQUENCE MESH=Brute1 SEQ=Walk STARTFRAME=242 NUMFRAMES=23 RATE=15 00032 #exec MESH SEQUENCE MESH=Brute1 SEQ=WalkFire STARTFRAME=265 NUMFRAMES=44 Group=MovingAttack 00033 00034 #exec TEXTURE IMPORT NAME=jBrute1 FILE=Models\Brute2C.PCX GROUP=Skins 00035 #exec OBJ LOAD FILE=textures\FireEffect18.utx PACKAGE=UnrealShare.Effect18 00036 #exec MESHMAP SCALE MESHMAP=Brute1 X=0.125 Y=0.125 Z=0.25 00037 #exec MESHMAP SETTEXTURE MESHMAP=Brute1 NUM=0 TEXTURE=jBrute1 00038 #exec MESHMAP SETTEXTURE MESHMAP=Brute1 NUM=1 TEXTURE=UnrealShare.Effect18.FireEffect18 00039 00040 #exec MESH NOTIFY MESH=Brute1 SEQ=WalkFire TIME=0.18 FUNCTION=SpawnRightShot 00041 #exec MESH NOTIFY MESH=Brute1 SEQ=WalkFire TIME=0.68 FUNCTION=SpawnLeftShot 00042 #exec MESH NOTIFY MESH=Brute1 SEQ=StillFire TIME=0.5 FUNCTION=SpawnLeftShot 00043 #exec MESH NOTIFY MESH=Brute1 SEQ=PistolWhip TIME=0.5 FUNCTION=WhipDamageTarget 00044 #exec MESH NOTIFY MESH=Brute1 SEQ=Punch TIME=0.55 FUNCTION=WhipDamageTarget 00045 #exec MESH NOTIFY MESH=Brute1 SEQ=GutShot TIME=0.3 FUNCTION=GutShotTarget 00046 #exec MESH NOTIFY MESH=Brute1 SEQ=GutShot TIME=0.6 FUNCTION=GutShotTarget 00047 #exec MESH NOTIFY MESH=Brute1 SEQ=Walk TIME=0.31 FUNCTION=Step 00048 #exec MESH NOTIFY MESH=Brute1 SEQ=Walk TIME=0.8 FUNCTION=Step 00049 #exec MESH NOTIFY MESH=Brute1 SEQ=Dead1 TIME=0.56 FUNCTION=LandThump 00050 #exec MESH NOTIFY MESH=Brute1 SEQ=Dead2 TIME=0.5 FUNCTION=LandThump 00051 #exec MESH NOTIFY MESH=Brute1 SEQ=Dead3 TIME=0.52 FUNCTION=LandThump 00052 #exec MESH NOTIFY MESH=Brute1 SEQ=Dead4 TIME=0.71 FUNCTION=LandThump 00053 #exec MESH NOTIFY MESH=Brute1 SEQ=Charge TIME=0.25 FUNCTION=Step 00054 #exec MESH NOTIFY MESH=Brute1 SEQ=Charge TIME=0.75 FUNCTION=Step 00055 00056 #exec AUDIO IMPORT FILE="Sounds\Brute\walk1a.WAV" NAME="walk1br" GROUP="Brute" 00057 #exec AUDIO IMPORT FILE="Sounds\Brute\pwhip1a.WAV" NAME="pwhip1br" GROUP="Brute" 00058 #exec AUDIO IMPORT FILE="Sounds\Brute\injur1a.WAV" NAME="injur1br" GROUP="Brute" 00059 #exec AUDIO IMPORT FILE="Sounds\Brute\injur2a.WAV" NAME="injur2br" GROUP="Brute" 00060 #exec AUDIO IMPORT FILE="Sounds\Brute\yell1a.WAV" NAME="yell1br" GROUP="Brute" 00061 #exec AUDIO IMPORT FILE="Sounds\Brute\yell2a.WAV" NAME="yell2br" GROUP="Brute" 00062 #exec AUDIO IMPORT FILE="Sounds\Brute\nearby2a.WAV" NAME="nearby2br" GROUP="Brute" 00063 #exec AUDIO IMPORT FILE="Sounds\Brute\death1a.WAV" NAME="death1br" GROUP="Brute" 00064 #exec AUDIO IMPORT FILE="Sounds\Brute\death2br.WAV" NAME="death2br" GROUP="Brute" 00065 #exec AUDIO IMPORT FILE="Sounds\Brute\walk1b.WAV" NAME="walk2br" GROUP="Brute" 00066 #exec AUDIO IMPORT FILE="Sounds\Brute\pstlhit1.WAV" NAME="pstlhit1br" GROUP="Brute" 00067 #exec AUDIO IMPORT FILE="Sounds\Brute\amb1br.WAV" NAME="amb1br" GROUP="Brute" 00068 00069 //----------------------------------------------------------------------------- 00070 // Brute variables. 00071 00072 // Attack damage. 00073 var() byte WhipDamage; // Basic damage done by pistol-whip. 00074 var bool bBerserk; 00075 var bool bLongBerserk; 00076 var() bool bTurret; // Doesn't move 00077 00078 // Sounds 00079 var(Sounds) sound Footstep; 00080 var(Sounds) sound Footstep2; 00081 var(Sounds) sound PistolWhip; 00082 var(Sounds) sound GutShot; 00083 var(Sounds) sound PistolHit; 00084 var(Sounds) sound Die2; 00085 00086 function PostBeginPlay() 00087 { 00088 Super.PostBeginPlay(); 00089 if (Skill > 1) 00090 bLeadTarget = true; 00091 if ( Skill == 0 ) 00092 ProjectileSpeed *= 0.85; 00093 else if ( Skill > 2 ) 00094 ProjectileSpeed *= 1.1; 00095 } 00096 00097 function eAttitude AttitudeToCreature(Pawn Other) 00098 { 00099 if ( Other.IsA('Brute') ) 00100 return ATTITUDE_Friendly; 00101 else if ( Other.IsA('Nali') ) 00102 return ATTITUDE_Hate; 00103 else 00104 return ATTITUDE_Ignore; 00105 } 00106 00107 function GoBerserk() 00108 { 00109 bLongBerserk = false; 00110 if ( (bBerserk || ((Health < 0.75 * Default.Health) && (FRand() < 0.65))) 00111 && (VSize(Location - Enemy.Location) < 500) ) 00112 bBerserk = true; 00113 else 00114 bBerserk = false; 00115 if ( bBerserk ) 00116 { 00117 AccelRate = 4 * AccelRate; 00118 GroundSpeed = 2.5 * Default.GroundSpeed; 00119 } 00120 } 00121 00122 function PlayWaiting() 00123 { 00124 local float decision; 00125 local float animspeed; 00126 00127 bReadyToAttack = true; 00128 animspeed = 0.3 + 0.5 * FRand(); //fixme - add to all creatures 00129 00130 decision = FRand(); 00131 if ( AnimSequence == 'Sleep' ) 00132 { 00133 if ( decision < 0.07 ) 00134 { 00135 SetAlertness(0.0); 00136 PlayAnim('Breath2',animspeed, 0.4); 00137 return; 00138 } 00139 else 00140 { 00141 SetAlertness(-0.3); 00142 PlayAnim('Sleep', 0.3 + 0.3 * FRand()); 00143 return; 00144 } 00145 } 00146 else if ( AnimSequence == 'Breath2' ) 00147 { 00148 if ( decision < 0.2 ) 00149 { 00150 SetAlertness(-0.3); 00151 PlayAnim('Sleep',animspeed,0.4); 00152 return; 00153 } 00154 else if ( decision < 0.37 ) 00155 PlayAnim('StillLook', animspeed); 00156 else if ( decision < 0.55 ) 00157 PlayAnim('CockGun', animspeed); 00158 else 00159 PlayAnim('Breath2', 0.3 + 0.3 * FRand(), 0.4); 00160 } 00161 else if ( decision < 0.1 ) 00162 PlayAnim('StillLook', animspeed, 0.4); 00163 else 00164 PlayAnim('Breath2', 0.3 + 0.3 * FRand(), 0.4); 00165 00166 if ( AnimSequence == 'StillLook' ) 00167 { 00168 SetAlertness(0.7); 00169 if ( !bQuiet && (FRand() < 0.7) ) 00170 PlayRoamingSound(); 00171 } 00172 else 00173 SetAlertness(0.0); 00174 } 00175 00176 function PlayThreatening() 00177 { 00178 local float decision; 00179 00180 decision = FRand(); 00181 00182 if ( decision < 0.7 ) 00183 PlayAnim('Breath2', 0.4, 0.3); 00184 else if ( decision < 0.8 ) 00185 LoopAnim('PreCharg', 0.4, 0.25); 00186 else 00187 { 00188 PlayThreateningSound(); 00189 TweenAnim('Fighter', 0.3); 00190 } 00191 } 00192 00193 function PlayPatrolStop() 00194 { 00195 local float decision; 00196 local float animspeed; 00197 animspeed = 0.5 + 0.4 * FRand(); //fixme - add to all creatures 00198 00199 decision = FRand(); 00200 if ( AnimSequence == 'Breath2' ) 00201 { 00202 if ( decision < 0.4 ) 00203 PlayAnim('StillLook', animspeed); 00204 else if (decision < 0.6 ) 00205 PlayAnim('CockGun', animspeed); 00206 else 00207 PlayAnim('Breath2', animspeed); 00208 } 00209 else if ( decision < 0.2 ) 00210 PlayAnim('StillLook', animspeed); 00211 else 00212 PlayAnim('Breath2', animspeed); 00213 00214 if ( AnimSequence == 'StillLook' ) 00215 { 00216 SetAlertness(0.7); 00217 if ( !bQuiet && (FRand() < 0.7) ) 00218 PlayRoamingSound(); 00219 } 00220 else 00221 SetAlertness(0.0); 00222 } 00223 00224 function PlayWaitingAmbush() 00225 { 00226 bQuiet = true; 00227 PlayPatrolStop(); 00228 } 00229 00230 function PlayChallenge() 00231 { 00232 PlayAnim('PreCharg', 0.7, 0.2); 00233 } 00234 00235 function TweenToFighter(float tweentime) 00236 { 00237 TweenAnim('Fighter', tweentime); 00238 } 00239 00240 function TweenToRunning(float tweentime) 00241 { 00242 if ( bBerserk ) 00243 TweenAnim('Charge', tweentime); 00244 if ( IsAnimating() && (AnimSequence == 'WalkFire') ) 00245 return; 00246 if (AnimSequence != 'Walk' || !bAnimLoop) 00247 TweenAnim('Walk', tweentime); 00248 } 00249 00250 function TweenToWalking(float tweentime) 00251 { 00252 TweenAnim('Walk', tweentime); 00253 } 00254 00255 function TweenToWaiting(float tweentime) 00256 { 00257 TweenAnim('Breath2', tweentime); 00258 } 00259 00260 function TweenToPatrolStop(float tweentime) 00261 { 00262 TweenAnim('Breath2', tweentime); 00263 } 00264 00265 function PlayRunning() 00266 { 00267 if (Focus == Destination) 00268 { 00269 LoopAnim('Walk', -1.1/GroundSpeed,,0.4); 00270 return; 00271 } 00272 00273 LoopAnim('Walk', StrafeAdjust(),,0.3); 00274 } 00275 00276 function PlayWalking() 00277 { 00278 LoopAnim('Walk', -1.1/GroundSpeed,,0.4); 00279 } 00280 00281 function PlayTurning() 00282 { 00283 TweenAnim('Walk', 0.3); 00284 } 00285 00286 function PlayBigDeath(name DamageType) 00287 { 00288 PlaySound(Die2, SLOT_Talk, 4 * TransientSoundVolume); 00289 PlayAnim('Dead2',0.7,0.1); 00290 } 00291 00292 function PlayHeadDeath(name DamageType) 00293 { 00294 PlayAnim('Dead4',0.7,0.1); 00295 PlaySound(Die, SLOT_Talk, 4 * TransientSoundVolume); 00296 } 00297 00298 function PlayLeftDeath(name DamageType) 00299 { 00300 PlayAnim('Dead2',0.7,0.1); 00301 PlaySound(Die,SLOT_Talk, 4 * TransientSoundVolume); 00302 } 00303 00304 function PlayRightDeath(name DamageType) 00305 { 00306 PlayAnim('Dead3',0.7,0.1); 00307 PlaySound(Die,SLOT_Talk, 4 * TransientSoundVolume); 00308 } 00309 00310 function PlayGutDeath(name DamageType) 00311 { 00312 PlayAnim('Dead1',0.7,0.1); 00313 PlaySound(Die,SLOT_Talk, 4 * TransientSoundVolume); 00314 } 00315 00316 function PlayMovingAttack() 00317 { 00318 PlayAnim('WalkFire', 1.1); 00319 } 00320 00321 function PlayVictoryDance() 00322 { 00323 PlayAnim('PreCharg', 0.7, 0.3); 00324 } 00325 00326 function bool CanFireAtEnemy() 00327 { 00328 local vector HitLocation, HitNormal,X,Y,Z, projStart, EnemyDir, EnemyUp; 00329 local actor HitActor1, HitActor2; 00330 local float EnemyDist; 00331 00332 EnemyDir = Enemy.Location - Location; 00333 EnemyDist = VSize(EnemyDir); 00334 EnemyUp = Enemy.CollisionHeight * vect(0,0,0.9); 00335 if ( EnemyDist > 300 ) 00336 { 00337 EnemyDir = 300 * EnemyDir/EnemyDist; 00338 EnemyUp = 300 * EnemyUp/EnemyDist; 00339 } 00340 00341 GetAxes(Rotation,X,Y,Z); 00342 projStart = Location + 0.5 * CollisionRadius * X + 0.8 * CollisionRadius * Y + 0.4 * CollisionRadius * Z; 00343 HitActor1 = Trace(HitLocation, HitNormal, projStart + EnemyDir + EnemyUp, projStart, true); 00344 if ( (HitActor1 != Enemy) && (Pawn(HitActor1) != None) 00345 && (AttitudeTo(Pawn(HitActor1)) > ATTITUDE_Ignore) ) 00346 return false; 00347 00348 projStart = Location + 0.5 * CollisionRadius * X - 0.8 * CollisionRadius * Y + 0.4 * CollisionRadius * Z; 00349 HitActor2 = Trace(HitLocation, HitNormal, projStart + EnemyDir + EnemyUp, projStart, true); 00350 00351 if ( (HitActor2 == None) || (HitActor2 == Enemy) 00352 || ((Pawn(HitActor2) != None) && (AttitudeTo(Pawn(HitActor2)) <= ATTITUDE_Ignore)) ) 00353 return true; 00354 00355 HitActor2 = Trace(HitLocation, HitNormal, projStart + EnemyDir, projStart , true); 00356 00357 return ( (HitActor2 == None) || (HitActor2 == Enemy) 00358 || ((Pawn(HitActor2) != None) && (AttitudeTo(Pawn(HitActor2)) <= ATTITUDE_Ignore)) ); 00359 } 00360 00361 function SpawnLeftShot() 00362 { 00363 FireProjectile( vect(1.2,0.7,0.4), 750); 00364 } 00365 00366 function SpawnRightShot() 00367 { 00368 FireProjectile( vect(1.2,-0.7,0.4), 750); 00369 } 00370 00371 function WhipDamageTarget() 00372 { 00373 if ( MeleeDamageTarget(WhipDamage, (WhipDamage * 1000.0 * Normal(Target.Location - Location))) ) 00374 PlaySound(PistolWhip, SLOT_Interact); 00375 } 00376 00377 function Step() 00378 { 00379 if (FRand() < 0.6) 00380 PlaySound(FootStep, SLOT_Interact,,,2000); 00381 else 00382 PlaySound(FootStep2, SLOT_Interact,,,2000); 00383 } 00384 00385 function GutShotTarget() 00386 { 00387 FireProjectile( vect(1.2,-0.55,0.0), 800); 00388 } 00389 00390 function PlayMeleeAttack() 00391 { 00392 local float decision; 00393 00394 decision = FRand(); 00395 If ( decision < 0.6 ) 00396 { 00397 PlaySound(PistolWhip, SLOT_Interact); 00398 PlayAnim('PistolWhip'); 00399 } 00400 else 00401 { 00402 PlaySound(PistolWhip, SLOT_Interact); 00403 PlayAnim('Punch'); 00404 } 00405 } 00406 00407 function PlayRangedAttack() 00408 { 00409 //FIXME - if going to ranged attack need to 00410 // TweenAnim('StillFire', 0.2); 00411 //What I need is a tween into time for the PlayAnim() 00412 00413 if ( (AnimSequence == 'T8') || (VSize(Target.Location - Location) > 230) ) 00414 { 00415 SpawnRightShot(); 00416 PlayAnim('StillFire'); 00417 } 00418 else 00419 PlayAnim('GutShot'); 00420 } 00421 00422 state Attacking 00423 { 00424 ignores SeePlayer, HearNoise, Bump, HitWall; 00425 00426 function ChooseAttackMode() 00427 { 00428 local eAttitude AttitudeToEnemy; 00429 local float Aggression; 00430 local pawn changeEn; 00431 00432 if ( !bTurret ) 00433 { 00434 Super.ChooseAttackMode(); 00435 return; 00436 } 00437 00438 if ((Enemy == None) || (Enemy.Health <= 0)) 00439 { 00440 if (Orders == 'Attacking') 00441 Orders = ''; 00442 GotoState('Waiting', 'TurnFromWall'); 00443 return; 00444 } 00445 00446 if (AttitudeToEnemy == ATTITUDE_Threaten) 00447 { 00448 GotoState('Threatening'); 00449 return; 00450 } 00451 else if (!LineOfSightTo(Enemy)) 00452 { 00453 if ( (OldEnemy != None) 00454 && (AttitudeTo(OldEnemy) == ATTITUDE_Hate) && LineOfSightTo(OldEnemy) ) 00455 { 00456 changeEn = enemy; 00457 enemy = oldenemy; 00458 oldenemy = changeEn; 00459 } 00460 else 00461 { 00462 GotoState('StakeOut'); 00463 return; 00464 } 00465 } 00466 00467 if (bReadyToAttack) 00468 { 00469 ////log("Attack!"); 00470 Target = Enemy; 00471 If (VSize(Enemy.Location - Location) <= (MeleeRange + Enemy.CollisionRadius + CollisionRadius)) 00472 GotoState('MeleeAttack'); 00473 else 00474 GotoState('RangedAttack'); 00475 return; 00476 } 00477 00478 GotoState('RangedAttack', 'Challenge'); 00479 } 00480 } 00481 00482 state Charging 00483 { 00484 ignores SeePlayer, HearNoise; 00485 00486 function AnimEnd() 00487 { 00488 If ( bBerserk ) 00489 LoopAnim('Charge', -1.1/GroundSpeed,,0.5); 00490 else 00491 PlayCombatMove(); 00492 } 00493 00494 function Timer() 00495 { 00496 if ( bBerserk && bLongBerserk && (FRand() < 0.3) ) 00497 { 00498 AccelRate = Default.AccelRate; 00499 GroundSpeed = Default.GroundSpeed; 00500 bBerserk = false; 00501 } 00502 bLongBerserk = bBerserk; 00503 00504 Super.Timer(); 00505 } 00506 00507 function BeginState() 00508 { 00509 GoBerserk(); 00510 Super.BeginState(); 00511 } 00512 00513 function EndState() 00514 { 00515 if ( bBerserk ) 00516 { 00517 GroundSpeed = Default.GroundSpeed; 00518 AccelRate = Default.AccelRate; 00519 } 00520 Super.EndState(); 00521 } 00522 } 00523 00524 00525 state RangedAttack 00526 { 00527 ignores SeePlayer, HearNoise, Bump; 00528 00529 function TweenToFighter(float TweenTime) 00530 { 00531 if ( AnimSequence == 'T8' ) 00532 return; 00533 if ( (GetAnimGroup(AnimSequence) == 'Hit') || (Skill > 3 * FRand()) || (VSize(Location - Target.Location) < 320) ) 00534 TweenAnim('Fighter', tweentime); 00535 else 00536 PlayAnim('T8', 1.0, 0.15); 00537 } 00538 } 00539 00540 00541 defaultproperties 00542 { 00543 WhipDamage=20 00544 footstep=Sound'UnrealShare.Brute.walk1br' 00545 Footstep2=Sound'UnrealShare.Brute.walk2br' 00546 PistolWhip=Sound'UnrealShare.Brute.pwhip1br' 00547 PistolHit=Sound'UnrealShare.Brute.pstlhit1br' 00548 Die2=Sound'UnrealShare.Brute.death2br' 00549 CarcassType=Class'UnrealShare.BruteCarcass' 00550 Aggressiveness=1.000000 00551 RefireRate=0.300000 00552 WalkingSpeed=0.600000 00553 bHasRangedAttack=True 00554 bMovingRangedAttack=True 00555 bLeadTarget=False 00556 RangedProjectile=Class'UnrealShare.BruteProjectile' 00557 ProjectileSpeed=700.000000 00558 Acquire=Sound'UnrealShare.Brute.yell1br' 00559 Fear=Sound'UnrealShare.Brute.injur2br' 00560 Roam=Sound'UnrealShare.Brute.nearby2br' 00561 Threaten=Sound'UnrealShare.Brute.yell2br' 00562 bCanStrafe=True 00563 MeleeRange=70.000000 00564 GroundSpeed=140.000000 00565 WaterSpeed=100.000000 00566 JumpZ=-1.000000 00567 Visibility=150 00568 SightRadius=1500.000000 00569 Health=340 00570 ReducedDamageType=exploded 00571 ReducedDamagePct=0.300000 00572 UnderWaterTime=60.000000 00573 HitSound1=Sound'UnrealShare.Brute.injur1br' 00574 HitSound2=Sound'UnrealShare.Brute.injur2br' 00575 Land=None 00576 Die=Sound'UnrealShare.Brute.death1br' 00577 WaterStep=None 00578 CombatStyle=0.800000 00579 AmbientSound=Sound'UnrealShare.Brute.amb1br' 00580 DrawType=DT_Mesh 00581 Mesh=LodMesh'UnrealShare.Brute1' 00582 TransientSoundVolume=3.000000 00583 CollisionRadius=52.000000 00584 CollisionHeight=52.000000 00585 Mass=400.000000 00586 Buoyancy=390.000000 00587 RotationRate=(Pitch=3072,Yaw=45000,Roll=0) 00588 }