UnrealI
Class NaliPlayer

source: e:\games\UnrealTournament\UnrealI\Classes\naliplayer.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Pawn
         |
         +--Engine.PlayerPawn
            |
            +--UnrealShare.UnrealIPlayer
               |
               +--UnrealI.NaliPlayer
Direct Known Subclasses:None

class NaliPlayer
extends UnrealShare.UnrealIPlayer

//============================================================================= // NaliPlayer. //=============================================================================
States
PlayerWalking, PlayerSwimming, FeigningDeath

Function Summary
 void NormallyVisible()
 void PlayCrawling()
 void PlayDuck()
 void PlayDying(name DamageType, vector HitLoc)
 void PlayFeignDeath()
 void PlayFiring()
 void PlayGutHit(float tweentime)
     
//FIXME - add death first frames as alternate takehit anims!!!
 void PlayHeadHit(float tweentime)
 void PlayInAir()
 void PlayLanded(float impactVel)
 void PlayLeftHit(float tweentime)
 void PlayRightHit(float tweentime)
 void PlayRising()
 void PlayRunning()
 void PlaySwimming()
 void PlayTurning()
 void PlayWaiting()
 void PlayWalking()
 void PlayWeaponSwitch(Weapon NewWeapon)
 void SwimAnimUpdate(bool bNotForward)
 void TweenToRunning(float tweentime)
 void TweenToSwimming(float tweentime)
 void TweenToWaiting(float tweentime)
 void TweenToWalking(float tweentime)


State PlayerWalking Function Summary
 void EndState()
 void ProcessMove(float DeltaTime, vector NewAccel, eDodgeDir DodgeMove, rotator DeltaRot)
 void TakeDamage(int Damage, Pawn instigatedBy, Vector hitlocation, Vector momentum, name damageType)
 void Fire(optional float)


State PlayerSwimming Function Summary
 void BeginState()


State FeigningDeath Function Summary
 void EndState()
 void Landed(vector HitNormal)
 void PlayDying(name DamageType, vector HitLocation)
 void PlayTakeHit(float tweentime, vector HitLoc, int Damage)



Source Code


00001	//=============================================================================
00002	// NaliPlayer.
00003	//=============================================================================
00004	class NaliPlayer extends UnrealIPlayer;
00005	
00006	#exec MESH IMPORT MESH=Nali2 ANIVFILE=MODELS\naliX_a.3D DATAFILE=..\unrealshare\MODELS\nali_d.3D X=0 Y=0 Z=0 ZEROTEX=1
00007	#exec MESH ORIGIN MESH=Nali2 X=00 Y=-130 Z=30 YAW=64 ROLL=-64
00008	
00009	#exec MESH SEQUENCE MESH=nali2 SEQ=All      STARTFRAME=0   NUMFRAMES=447
00010	#exec MESH SEQUENCE MESH=nali2 SEQ=Backup   STARTFRAME=0   NUMFRAMES=10  RATE=15
00011	#exec MESH SEQUENCE MESH=nali2 SEQ=Bowing   STARTFRAME=10  NUMFRAMES=20  RATE=15 Group=Ducking
00012	#exec MESH SEQUENCE MESH=nali2 SEQ=Breath   STARTFRAME=30  NUMFRAMES=8   RATE=6  Group=Waiting
00013	#exec MESH SEQUENCE MESH=nali2 SEQ=Cough    STARTFRAME=38  NUMFRAMES=25  RATE=15 Group=Waiting
00014	#exec MESH SEQUENCE MESH=nali2 SEQ=Landed   STARTFRAME=68  NUMFRAMES=1			 Group=Landing
00015	#exec MESH SEQUENCE MESH=nali2 SEQ=Cringe   STARTFRAME=63  NUMFRAMES=15  RATE=15 Group=Ducking
00016	#exec MESH SEQUENCE MESH=nali2 SEQ=Dead     STARTFRAME=78  NUMFRAMES=38  RATE=15
00017	#exec MESH SEQUENCE MESH=nali2 SEQ=DeathEnd STARTFRAME=115 NUMFRAMES=1
00018	#exec MESH SEQUENCE MESH=nali2 SEQ=Dead2    STARTFRAME=116 NUMFRAMES=16  RATE=15
00019	#exec MESH SEQUENCE MESH=nali2 SEQ=DeathEnd2 STARTFRAME=131 NUMFRAMES=1
00020	#exec MESH SEQUENCE MESH=nali2 SEQ=Dead3    STARTFRAME=132 NUMFRAMES=13  RATE=15
00021	#exec MESH SEQUENCE MESH=nali2 SEQ=Dead4    STARTFRAME=145 NUMFRAMES=21  RATE=15
00022	#exec MESH SEQUENCE MESH=nali2 SEQ=Wave     STARTFRAME=166 NUMFRAMES=23  RATE=15 Group=Gesture
00023	#exec MESH SEQUENCE MESH=nali2 SEQ=GetDown  STARTFRAME=189 NUMFRAMES=5   RATE=15
00024	#exec MESH SEQUENCE MESH=nali2 SEQ=GetUp    STARTFRAME=194 NUMFRAMES=8   RATE=15
00025	#exec MESH SEQUENCE MESH=nali2 SEQ=levitate STARTFRAME=202 NUMFRAMES=6  RATE=6
00026	#exec MESH SEQUENCE MESH=nali2 SEQ=Victory1 STARTFRAME=208 NUMFRAMES=8   RATE=6  Group=Gesture
00027	#exec MESH SEQUENCE MESH=nali2 SEQ=spell    STARTFRAME=216 NUMFRAMES=28  RATE=15
00028	#exec MESH SEQUENCE MESH=nali2 SEQ=Sweat    STARTFRAME=244 NUMFRAMES=18  RATE=15 Group=Waiting
00029	#exec MESH SEQUENCE MESH=nali2 SEQ=walk     STARTFRAME=262 NUMFRAMES=20  RATE=15
00030	#exec MESH SEQUENCE MESH=nali2 SEQ=turn     STARTFRAME=262 NUMFRAMES=5   RATE=15
00031	#exec MESH SEQUENCE MESH=nali2 SEQ=GutHit   STARTFRAME=282 NUMFRAMES=1			 Group=TakeHit
00032	#exec MESH SEQUENCE MESH=nali2 SEQ=AimDown  STARTFRAME=283 NUMFRAMES=1			 Group=Waiting
00033	#exec MESH SEQUENCE MESH=nali2 SEQ=AimUp    STARTFRAME=284 NUMFRAMES=1			 Group=Waiting
00034	#exec MESH SEQUENCE MESH=nali2 SEQ=Bow2     STARTFRAME=285 NUMFRAMES=28  RATE=15
00035	#exec MESH SEQUENCE MESH=nali2 SEQ=HeadHit  STARTFRAME=313 NUMFRAMES=1			 Group=TakeHit
00036	#exec MESH SEQUENCE MESH=nali2 SEQ=LeftHit  STARTFRAME=314 NUMFRAMES=1			 Group=TakeHit
00037	#exec MESH SEQUENCE MESH=nali2 SEQ=RightHit STARTFRAME=315 NUMFRAMES=1			 Group=TakeHit
00038	#exec MESH SEQUENCE MESH=nali2 SEQ=Run      STARTFRAME=316 NUMFRAMES=10  RATE=15
00039	#exec MESH SEQUENCE MESH=nali2 SEQ=RunFire  STARTFRAME=326 NUMFRAMES=10  RATE=15
00040	#exec MESH SEQUENCE MESH=nali2 SEQ=StilFire STARTFRAME=336 NUMFRAMES=1			 Group=Waiting
00041	#exec MESH SEQUENCE MESH=nali2 SEQ=WalkFire STARTFRAME=337 NUMFRAMES=20  RATE=15
00042	#exec MESH SEQUENCE MESH=nali2 SEQ=WalkTool STARTFRAME=357 NUMFRAMES=20  RATE=15
00043	#exec MESH SEQUENCE MESH=nali2 SEQ=Drowning STARTFRAME=377 NUMFRAMES=20  RATE=15
00044	#exec MESH SEQUENCE MESH=nali2 SEQ=Duckwalk STARTFRAME=397 NUMFRAMES=20  RATE=15
00045	#exec MESH SEQUENCE MESH=nali2 SEQ=Swim STARTFRAME=417 NUMFRAMES=15  RATE=15
00046	#exec MESH SEQUENCE MESH=nali2 SEQ=Tread STARTFRAME=432 NUMFRAMES=15  RATE=15
00047	
00048	#exec MESH SEQUENCE MESH=nali2 SEQ=fighter STARTFRAME=0   NUMFRAMES=1
00049	
00050	#exec TEXTURE IMPORT NAME=JNali1 FILE=..\unrealshare\MODELS\nali.PCX GROUP=Skins 
00051	#exec MESHMAP SCALE MESHMAP=nali2 X=0.069 Y=0.069 Z=0.138
00052	#exec MESHMAP SETTEXTURE MESHMAP=nali2 NUM=0 TEXTURE=Jnali1
00053	
00054	#exec MESH NOTIFY MESH=Nali2 SEQ=Dead	TIME=0.46 FUNCTION=LandThump
00055	#exec MESH NOTIFY MESH=Nali2 SEQ=Dead2	TIME=0.64 FUNCTION=LandThump
00056	#exec MESH NOTIFY MESH=Nali2 SEQ=Dead3	TIME=0.84 FUNCTION=LandThump
00057	#exec MESH NOTIFY MESH=Nali2 SEQ=Dead4	TIME=0.51 FUNCTION=LandThump
00058	#exec MESH NOTIFY MESH=Nali2 SEQ=Backup TIME=0.25 FUNCTION=PlayFootStep
00059	#exec MESH NOTIFY MESH=Nali2 SEQ=Backup TIME=0.75 FUNCTION=PlayFootStep
00060	#exec MESH NOTIFY MESH=Nali2 SEQ=Walk   TIME=0.25 FUNCTION=PlayFootStep
00061	#exec MESH NOTIFY MESH=Nali2 SEQ=Walk   TIME=0.75 FUNCTION=PlayFootStep
00062	#exec MESH NOTIFY MESH=Nali2 SEQ=WalkFire TIME=0.25 FUNCTION=PlayFootStep
00063	#exec MESH NOTIFY MESH=Nali2 SEQ=WalkFire TIME=0.75 FUNCTION=PlayFootStep
00064	#exec MESH NOTIFY MESH=Nali2 SEQ=WalkTool TIME=0.25 FUNCTION=PlayFootStep
00065	#exec MESH NOTIFY MESH=Nali2 SEQ=WalkTool TIME=0.75 FUNCTION=PlayFootStep
00066	#exec MESH NOTIFY MESH=Nali2 SEQ=Run	TIME=0.25 FUNCTION=PlayFootStep
00067	#exec MESH NOTIFY MESH=Nali2 SEQ=Run	TIME=0.75 FUNCTION=PlayFootStep
00068	#exec MESH NOTIFY MESH=Nali2 SEQ=RunFire TIME=0.25 FUNCTION=PlayFootStep
00069	#exec MESH NOTIFY MESH=Nali2 SEQ=RunFire TIME=0.75 FUNCTION=PlayFootStep
00070	
00071	#exec AUDIO IMPORT FILE="..\unrealshare\Sounds\Nali\injur1a.WAV" NAME="injur1n" GROUP="Nali"
00072	#exec AUDIO IMPORT FILE="..\unrealshare\Sounds\Nali\injur2a.WAV" NAME="injur2n" GROUP="Nali"
00073	#exec AUDIO IMPORT FILE="..\unrealshare\Sounds\Nali\contct1a.WAV" NAME="contct1n" GROUP="Nali"
00074	#exec AUDIO IMPORT FILE="..\unrealshare\Sounds\Nali\contct3a.WAV" NAME="contct3n" GROUP="Nali"
00075	#exec AUDIO IMPORT FILE="..\unrealshare\Sounds\Nali\fear1a.WAV" NAME="fear1n" GROUP="Nali"
00076	#exec AUDIO IMPORT FILE="..\unrealshare\Sounds\Nali\breath2na.WAV" NAME="breath1n" GROUP="Nali"
00077	#exec AUDIO IMPORT FILE="..\unrealshare\Sounds\Nali\death1na.WAV" NAME="death1n" GROUP="Nali"
00078	#exec AUDIO IMPORT FILE="..\unrealshare\Sounds\Nali\death2a.WAV" NAME="death2n" GROUP="Nali"
00079	#exec AUDIO IMPORT FILE="..\unrealshare\Sounds\Nali\bowing1a.WAV" NAME="bowing1n" GROUP="Nali"
00080	#exec AUDIO IMPORT FILE="..\unrealshare\Sounds\Nali\cringe2a.WAV" NAME="cringe2n" GROUP="Nali"
00081	#exec AUDIO IMPORT FILE="..\unrealshare\Sounds\Nali\backup2a.WAV" NAME="backup2n" GROUP="Nali"
00082	#exec AUDIO IMPORT FILE="..\unrealshare\Sounds\Nali\cough1na.WAV" NAME="cough1n" GROUP="Nali"
00083	#exec AUDIO IMPORT FILE="..\unrealshare\Sounds\Nali\sweat1na.WAV" NAME="sweat1n" GROUP="Nali"
00084	#exec AUDIO IMPORT FILE="..\unrealshare\Sounds\Nali\levitF1.WAV" NAME="pray1n" GROUP="Nali"
00085	#exec AUDIO IMPORT FILE="..\Unrealshare\Sounds\Cow\walknc.WAV" NAME="walkC" GROUP="Cow"
00086	#exec AUDIO IMPORT FILE="..\unrealshare\Sounds\Generic\teleprt27.WAV" NAME="Teleport1" GROUP="Generic"
00087			
00088	function PlayTurning()
00089	{
00090		BaseEyeHeight = Default.BaseEyeHeight;
00091		PlayAnim('Turn', 0.3, 0.3);
00092	}
00093	
00094	function TweenToWalking(float tweentime)
00095	{
00096		BaseEyeHeight = Default.BaseEyeHeight;
00097		if (Weapon == None)
00098			TweenAnim('Walk', tweentime);
00099		else if ( Weapon.bPointing || (CarriedDecoration != None) ) 
00100			TweenAnim('WalkFire', tweentime);
00101		else
00102			TweenAnim('Walk', tweentime);
00103	}
00104	
00105	function TweenToRunning(float tweentime)
00106	{
00107		BaseEyeHeight = Default.BaseEyeHeight;
00108		if (bIsWalking)
00109			TweenToWalking(0.1);
00110		else if (Weapon == None)
00111			PlayAnim('Run', 1, tweentime);
00112		else if ( Weapon.bPointing ) 
00113			PlayAnim('RunFire', 1, tweentime);
00114		else
00115			PlayAnim('Run', 1, tweentime);
00116	}
00117	
00118	function PlayWalking()
00119	{
00120		BaseEyeHeight = Default.BaseEyeHeight;
00121		if (Weapon == None)
00122			LoopAnim('Walk');
00123		else if ( Weapon.bPointing || (CarriedDecoration != None) ) 
00124			LoopAnim('WalkFire');
00125		else
00126			LoopAnim('Walk');
00127	}
00128	
00129	function PlayRunning()
00130	{
00131		BaseEyeHeight = Default.BaseEyeHeight;
00132		if (Weapon == None)
00133			LoopAnim('Run');
00134		else if ( Weapon.bPointing ) 
00135			LoopAnim('RunFire');
00136		else
00137			LoopAnim('Run');
00138	}
00139	
00140	function PlayRising()
00141	{
00142		BaseEyeHeight = 0.4 * Default.BaseEyeHeight;
00143		TweenAnim('DuckWalk', 0.7);
00144	}
00145	
00146	function PlayFeignDeath()
00147	{
00148		local float decision;
00149	
00150		BaseEyeHeight = 0;
00151		PlayAnim('Levitate', 0.3, 1.0);
00152	}
00153	
00154	function PlayDying(name DamageType, vector HitLoc)
00155	{
00156		local vector X,Y,Z, HitVec, HitVec2D;
00157		local float dotp;
00158	
00159		BaseEyeHeight = Default.BaseEyeHeight;
00160		PlayDyingSound();
00161				
00162		if ( FRand() < 0.15 )
00163		{
00164			PlayAnim('Dead',0.7,0.1);
00165			return;
00166		}
00167	
00168		// check for big hit
00169		if ( (Velocity.Z > 250) && (FRand() < 0.7) )
00170		{
00171			PlayAnim('Dead4', 0.7, 0.1);
00172			return;
00173		}
00174	
00175		// check for head hit
00176		if ( (DamageType == 'Decapitated') || (HitLoc.Z - Location.Z > 0.6 * CollisionHeight) )
00177		{
00178			DamageType = 'Decapitated';
00179			PlayAnim('Dead3', 0.7, 0.1);
00180			return;
00181		}
00182	
00183		GetAxes(Rotation,X,Y,Z);
00184		HitVec = Normal(HitLoc - Location);
00185		dotp = HitVec dot Y;
00186		if (dotp > 0.0)
00187			PlayAnim('Dead', 0.7, 0.1);
00188		else
00189			PlayAnim('Dead2', 0.7, 0.1);
00190	}
00191	
00192	//FIXME - add death first frames as alternate takehit anims!!!
00193	
00194	function PlayGutHit(float tweentime)
00195	{
00196		if ( AnimSequence == 'GutHit' )
00197		{
00198			if (FRand() < 0.5)
00199				TweenAnim('LeftHit', tweentime);
00200			else
00201				TweenAnim('RightHit', tweentime);
00202		}
00203		else
00204			TweenAnim('GutHit', tweentime);
00205	}
00206	
00207	function PlayHeadHit(float tweentime)
00208	{
00209		if ( AnimSequence == 'HeadHit' )
00210			TweenAnim('GutHit', tweentime);
00211		else
00212			TweenAnim('HeadHit', tweentime);
00213	}
00214	
00215	function PlayLeftHit(float tweentime)
00216	{
00217		if ( AnimSequence == 'LeftHit' )
00218			TweenAnim('GutHit', tweentime);
00219		else
00220			TweenAnim('LeftHit', tweentime);
00221	}
00222	
00223	function PlayRightHit(float tweentime)
00224	{
00225		if ( AnimSequence == 'RightHit' )
00226			TweenAnim('GutHit', tweentime);
00227		else
00228			TweenAnim('RightHit', tweentime);
00229	}
00230		
00231	function PlayLanded(float impactVel)
00232		{	
00233			impactVel = impactVel/JumpZ;
00234			impactVel = 0.1 * impactVel * impactVel;
00235			BaseEyeHeight = Default.BaseEyeHeight;
00236	
00237			if ( Role == ROLE_Authority )
00238			{
00239				if ( impactVel > 0.17 )
00240					PlaySound(LandGrunt, SLOT_Talk, FMin(5, 5 * impactVel),false,1200,FRand()*0.4+0.8);
00241				if ( !FootRegion.Zone.bWaterZone && (impactVel > 0.01) )
00242					PlaySound(Land, SLOT_Interact, FClamp(4.5 * impactVel,0.5,6), false, 1000, 1.0);
00243			}
00244	
00245			if ( (GetAnimGroup(AnimSequence) == 'Dodge') && IsAnimating() )
00246				return;
00247			if ( (impactVel > 0.06) || (GetAnimGroup(AnimSequence) == 'Jumping') )
00248				TweenAnim('Landed', 0.12);
00249			else if ( !IsAnimating() )
00250			{
00251				if ( GetAnimGroup(AnimSequence) == 'TakeHit' )
00252					AnimEnd();
00253				else
00254					TweenAnim('Landed', 0.12);
00255			}
00256		}
00257		
00258	function PlayInAir()
00259	{
00260		BaseEyeHeight =  Default.BaseEyeHeight;
00261		TweenAnim('RunFire', 0.4);
00262	}
00263	
00264	function PlayDuck()
00265	{
00266		BaseEyeHeight = 0;
00267		TweenAnim('DuckWalk', 0.25);
00268	}
00269	
00270	function PlayCrawling()
00271	{
00272		BaseEyeHeight = 0;
00273		LoopAnim('DuckWalk');
00274	}
00275	
00276	function TweenToWaiting(float tweentime)
00277	{
00278		if( IsInState('PlayerSwimming') || Physics==PHYS_Swimming )
00279		{
00280			BaseEyeHeight = 0.7 * Default.BaseEyeHeight;
00281			TweenAnim('Tread', tweentime);
00282		}
00283		else
00284		{
00285			BaseEyeHeight = Default.BaseEyeHeight;
00286			TweenAnim('StilFire', tweentime);
00287		}
00288	}
00289		
00290	function PlayWaiting()
00291	{
00292		local name newAnim;
00293	
00294		if( IsInState('PlayerSwimming') || (Physics==PHYS_Swimming) )
00295		{
00296			BaseEyeHeight = 0.7 * Default.BaseEyeHeight;
00297			LoopAnim('Tread');
00298		}
00299		else
00300		{	
00301			BaseEyeHeight = Default.BaseEyeHeight;
00302			if ( (Weapon != None) && Weapon.bPointing )
00303				TweenAnim('StilFire', 0.3);
00304			else
00305			{
00306				if ( FRand() < 0.2 )
00307					newAnim = 'Cough';
00308				else if ( FRand() < 0.3 )
00309					newAnim = 'Sweat';
00310				else
00311					newAnim = 'Breath';
00312				
00313				if ( AnimSequence == newAnim )
00314					LoopAnim(newAnim, 0.3 + 0.7 * FRand());
00315				else
00316					PlayAnim(newAnim, 0.3 + 0.7 * FRand(), 0.25);
00317			}
00318		}
00319	}	
00320	
00321	function PlayFiring()
00322	{
00323		// switch animation sequence mid-stream if needed
00324		if (AnimSequence == 'Run')
00325			AnimSequence = 'RunFire';
00326		else if (AnimSequence == 'Walk')
00327			AnimSequence = 'WalkFire';
00328		else if ( (GetAnimGroup(AnimSequence) != 'Attack')
00329				&& (GetAnimGroup(AnimSequence) != 'MovingAttack') 
00330				&& (GetAnimGroup(AnimSequence) != 'Dodge')
00331				&& (AnimSequence != 'Swim') )
00332			TweenAnim('StilFire', 0.02);
00333	}
00334	
00335	function PlayWeaponSwitch(Weapon NewWeapon)
00336	{
00337	}
00338	
00339	function PlaySwimming()
00340	{
00341		BaseEyeHeight = 0.7 * Default.BaseEyeHeight;
00342		LoopAnim('Swim');
00343	}
00344	
00345	function TweenToSwimming(float tweentime)
00346	{
00347		BaseEyeHeight = 0.7 * Default.BaseEyeHeight;
00348		TweenAnim('Swim',tweentime);
00349	}
00350	
00351	function SwimAnimUpdate(bool bNotForward)
00352	{
00353		if ( !bAnimTransition && (GetAnimGroup(AnimSequence) != 'Gesture') && (AnimSequence != 'Swim') )
00354			TweenToSwimming(0.1);
00355	}
00356	
00357	function NormallyVisible()
00358	{
00359		bHidden = false;
00360		Style = STY_Normal;
00361		ScaleGlow = 1.0;
00362	}
00363	
00364	state FeigningDeath
00365	{
00366	ignores SeePlayer, HearNoise, Bump, Fire, AltFire;
00367		
00368		event PlayerTick( float DeltaTime )
00369		{
00370			Super.PlayerTick(DeltaTime);
00371	
00372			if ( (Role == ROLE_Authority) && !IsAnimating() && !bHidden )
00373			{
00374				Style = STY_Translucent;
00375				ScaleGlow -= DeltaTime;
00376				if ( ScaleGlow < 0.3 )
00377					bHidden = true;
00378			}
00379		}
00380	
00381		function PlayTakeHit(float tweentime, vector HitLoc, int Damage)
00382		{
00383			NormallyVisible();
00384			Global.PlayTakeHit(tweentime, HitLoc, Damage);
00385		}
00386		
00387		function PlayDying(name DamageType, vector HitLocation)
00388		{
00389			NormallyVisible();
00390			Global.PlayDying(DamageType, HitLocation);
00391		}
00392	
00393		function Landed(vector HitNormal)
00394		{
00395			NormallyVisible();
00396			Super.Landed(HitNormal);
00397		}
00398	
00399		function EndState()
00400		{
00401			Super.EndState();
00402			if ( (Role == ROLE_Authority) && !bHidden && (Style == STY_Translucent) )
00403				NormallyVisible();
00404		}
00405	}
00406	
00407	state PlayerSwimming
00408	{
00409	ignores SeePlayer, HearNoise, Bump;
00410	
00411		function BeginState()
00412		{
00413			Super.BeginState();
00414			NormallyVisible();
00415		}
00416	}
00417	
00418	state PlayerWalking
00419	{
00420	ignores SeePlayer, HearNoise, Bump;
00421	
00422		exec function Fire( optional float F )
00423		{
00424			NormallyVisible();
00425			Super.Fire(F);
00426		}
00427	
00428		function TakeDamage( int Damage, Pawn instigatedBy, Vector hitlocation, 
00429								Vector momentum, name damageType)
00430		{
00431			NormallyVisible();
00432			Super.TakeDamage(Damage, instigatedBy, hitlocation, momentum, damageType);
00433		}
00434	
00435		function ProcessMove(float DeltaTime, vector NewAccel, eDodgeDir DodgeMove, rotator DeltaRot)	
00436		{
00437			Super.ProcessMove(DeltaTime, NewAccel, DodgeMove, DeltaRot);
00438			if ( (Role == ROLE_Authority) && (Style == STY_Translucent) )
00439			{
00440				ScaleGlow = VSize(Velocity)/GroundSpeed;
00441				bHidden = (ScaleGlow < 0.35);
00442			}
00443		}
00444		
00445		function EndState()
00446		{
00447			NormallyVisible();
00448			Super.EndState();
00449		}
00450	}
00451	
00452	defaultproperties
00453	{
00454	     drown=Sound'UnrealShare.Male.MDrown1'
00455	     breathagain=Sound'UnrealShare.Male.MGasp1'
00456	     Footstep1=Sound'UnrealShare.Cow.walkC'
00457	     Footstep2=Sound'UnrealShare.Cow.walkC'
00458	     Footstep3=Sound'UnrealShare.Cow.walkC'
00459	     HitSound3=Sound'UnrealShare.Nali.injur1n'
00460	     HitSound4=Sound'UnrealShare.Nali.injur2n'
00461	     Die2=Sound'UnrealShare.Nali.death2n'
00462	     Die3=Sound'UnrealShare.Nali.death2n'
00463	     Die4=Sound'UnrealShare.Nali.death2n'
00464	     GaspSound=Sound'UnrealShare.Male.MGasp2'
00465	     UWHit1=Sound'UnrealShare.Male.MUWHit1'
00466	     UWHit2=Sound'UnrealShare.Male.MUWHit2'
00467	     LandGrunt=Sound'UnrealShare.Male.lland01'
00468	     CarcassType=Class'UnrealShare.NaliCarcass'
00469	     JumpSound=Sound'UnrealShare.Male.MJump1'
00470	     bSinglePlayer=False
00471	     GroundSpeed=320.000000
00472	     JumpZ=360.000000
00473	     BaseEyeHeight=32.000000
00474	     EyeHeight=32.000000
00475	     Health=80
00476	     HitSound1=Sound'UnrealShare.Nali.fear1n'
00477	     HitSound2=Sound'UnrealShare.Nali.cringe2n'
00478	     Die=Sound'UnrealShare.Nali.death1n'
00479	     MenuName="Nali"
00480	     Skin=Texture'UnrealShare.Skins.JNali1'
00481	     Mesh=LodMesh'UnrealI.Nali2'
00482	     CollisionRadius=24.000000
00483	     CollisionHeight=48.000000
00484	     Buoyancy=98.000000
00485	}

End Source Code