UnrealI
Class Bloblet

source: e:\games\UnrealTournament\UnrealI\Classes\Bloblet.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Pawn
         |
         +--UnrealShare.FlockPawn
            |
            +--UnrealI.Bloblet
Direct Known Subclasses:None

class Bloblet
extends UnrealShare.FlockPawn

//============================================================================= // Bloblet. // Must tag with same tag as a Blob //=============================================================================
Variables
 float LastParentTime
 vector Orientation
 ParentBlob parentBlob

States
DiedState, fired, active, asleep

Function Summary
 void BaseChange()
 void Died(Pawn Killer, name damageType, vector HitLocation)
 void PlayGlob(float rate)
 void PostBeginPlay()
 void PreSetMovement()
 void TakeDamage(int Damage, Pawn instigatedBy, Vector hitlocation, Vector momentum, name damageType)
 void Timer()
 void wakeup()


State DiedState Function Summary
 void Tick(float DeltaTime)
 void Landed(vector HitNormal)


State fired Function Summary
 void Landed(vector HitNormal)
 void HitWall(vector HitNormal, Actor Wall)


State active Function Summary
 void Landed(vector HitNormal)
 void AnimEnd()


State asleep Function Summary
 void Landed(vector HitNormal)



Source Code


00001	//=============================================================================
00002	// Bloblet.
00003	// Must tag with same tag as a Blob
00004	//=============================================================================
00005	class Bloblet extends FlockPawn;
00006	
00007	#exec MESH IMPORT MESH=MiniBlob ANIVFILE=MODELS\MiniB_a.3D DATAFILE=MODELS\MiniB_d.3D ZEROTEX=1
00008	#exec MESH ORIGIN MESH=MiniBlob X=0 Y=-100 Z=0 YAW=64 ROll=-64
00009	
00010	#exec MESH SEQUENCE MESH=MiniBlob SEQ=All    STARTFRAME=0   NUMFRAMES=75
00011	#exec MESH SEQUENCE MESH=MiniBlob SEQ=Glob1  STARTFRAME=0   NUMFRAMES=10
00012	#exec MESH SEQUENCE MESH=MiniBlob SEQ=Glob2  STARTFRAME=10   NUMFRAMES=10
00013	#exec MESH SEQUENCE MESH=MiniBlob SEQ=Glob3  STARTFRAME=20   NUMFRAMES=15
00014	#exec MESH SEQUENCE MESH=MiniBlob SEQ=GlobProj  STARTFRAME=35   NUMFRAMES=20
00015	#exec MESH SEQUENCE MESH=MiniBlob SEQ=Splat  STARTFRAME=55   NUMFRAMES=20
00016	#exec MESH SEQUENCE MESH=MiniBlob SEQ=Flat   STARTFRAME=62   NUMFRAMES=1
00017	
00018	#exec TEXTURE IMPORT NAME=JBlob1 FILE=MODELS\bloblet.PCX GROUP=Skins 
00019	#exec MESHMAP SCALE MESHMAP=MiniBlob X=0.06 Y=0.06 Z=0.12
00020	#exec MESHMAP SETTEXTURE MESHMAP=MiniBlob NUM=0 TEXTURE=Jblob1
00021	
00022	#exec AUDIO IMPORT FILE="Sounds\Blob\death1Bl.WAV" NAME="BlobDeath" GROUP="Blob"
00023	#exec AUDIO IMPORT FILE="Sounds\BRifle\GelHit1.WAV" NAME="GelHit" GROUP="BioRifle"
00024	#exec AUDIO IMPORT FILE="Sounds\Blob\goop2Bl.WAV" NAME="BlobGoop1" GROUP="Blob"
00025	#exec AUDIO IMPORT FILE="Sounds\Blob\goop3Bl.WAV" NAME="BlobGoop2" GROUP="Blob"
00026	#exec AUDIO IMPORT FILE="Sounds\Blob\goop4Bl.WAV" NAME="BlobGoop3" GROUP="Blob"
00027	#exec AUDIO IMPORT FILE="Sounds\Blob\hit1Bl.WAV" NAME="BlobHit" GROUP="Blob"
00028	#exec AUDIO IMPORT FILE="Sounds\Blob\injur1Bl.WAV" NAME="BlobInjur" GROUP="Blob"
00029	
00030	var parentBlob parentBlob;
00031	var vector	Orientation;
00032	var float	LastParentTime;
00033	
00034	function PostBeginPlay()
00035	{
00036		Super.PostBeginPlay();
00037		DrawScale = 0.8 + 0.4 * FRand();
00038	}
00039	
00040	function Died(pawn Killer, name damageType, vector HitLocation)
00041	{
00042		PlaySound(Die);
00043		SetCollision(false,false, false);
00044		parentBlob.shrink(self);
00045		GotoState('DiedState');
00046	}
00047	
00048	function TakeDamage( int Damage, Pawn instigatedBy, Vector hitlocation, 
00049							Vector momentum, name damageType)
00050	{
00051		local rotator newRotation;
00052		local GreenSmokePuff f;
00053	
00054		if (damageType == 'corroded')
00055			return;
00056		PlaySound(HitSound1);
00057		f = spawn(class'GreenSmokePuff',,,Location - Normal(Momentum)*12); 
00058		f.DrawScale = FClamp(0.1 * Damage, 1.0, 4.0);
00059		SetPhysics(PHYS_Falling);
00060		newRotation = Rotation;
00061		newRotation.Roll = 0;
00062		setRotation(newRotation);
00063		Super.TakeDamage(Damage,instigatedBy,hitLocation,momentum,damageType);	
00064	}
00065	
00066	function BaseChange()
00067	{
00068	}
00069	
00070	function wakeup()
00071	{
00072		GotoState('Active');
00073	}
00074	
00075	function PreSetMovement()
00076	{
00077		bCanWalk = true;
00078		bCanSwim = true;
00079		bCanFly = false;
00080		MinHitWall = -0.7;
00081	}
00082	
00083	
00084	function Timer()
00085	{
00086		local int i;
00087		local bool bHasEnemy;
00088	
00089		bHasEnemy = ((parentBlob != None) && (parentBlob.Enemy != None));
00090		if ( bHasEnemy && (VSize(Location - parentBlob.Enemy.Location) < parentBlob.Enemy.CollisionHeight + CollisionRadius) )
00091		{
00092			parentBlob.Enemy.TakeDamage(18 * FRand(), parentBlob, location, vect(0,0,0), 'corroded');
00093			PlaySound(sound'BlobHit');
00094		}
00095		
00096		if ( Physics == PHYS_Spider )
00097		{
00098			if ( FRand() < 0.33 )
00099				PlaySound(sound'BlobGoop1');
00100			else if ( FRand() < 0.5 )
00101				PlaySound(sound'BlobGoop2');
00102			else
00103				PlaySound(sound'BlobGoop3');
00104		}
00105		if ( bHasEnemy )
00106			SetTimer(0.5 + 0.5 * FRand(), false);
00107		else
00108			SetTimer(1 + FRand(), false);	
00109	}
00110		 
00111	function PlayGlob(float rate)
00112	{
00113		if (FRand() < 0.75)
00114			LoopAnim('Glob1', rate * 0.7 * FRand());
00115		else
00116			LoopAnim('Glob3', rate * (0.5 + 0.5 * FRand()));
00117	}
00118	
00119	auto state asleep
00120	{
00121		function Landed(vector HitNormal)
00122		{
00123			if ( !FootRegion.Zone.bWaterZone )
00124				PlaySound(Land);
00125			PlayAnim('Splat');
00126			SetPhysics(PHYS_None);
00127		}	
00128		
00129	Begin:
00130		SetTimer(2 * FRand(), false);
00131		if (Physics != PHYS_Falling)
00132			SetPhysics(PHYS_None);
00133		PlayGlob(0.3);
00134	}
00135	
00136	state active
00137	{
00138		function AnimEnd()
00139		{
00140			playGlob(1);
00141		}
00142	
00143		function Landed(vector HitNormal)
00144		{
00145			SetRotation(Rot(0,0,0));
00146			if ( Velocity.Z > 200 )
00147			{
00148				PlayAnim('Splat');
00149				PlaySound(Land);
00150			}
00151			SetPhysics(PHYS_Spider);
00152		}
00153	
00154	begin:
00155		SetTimer(FRand(), false);
00156		SetPhysics(PHYS_Spider);
00157		PlayGlob(1);
00158		LastParentTime = Level.TimeSeconds;
00159	
00160	wander:
00161		if (parentBlob == None)
00162			GotoState('DiedState');
00163		if ( VSize(Location - parentBlob.Location) > 120 )
00164		{
00165			if ( LastParentTime - Level.TimeSeconds > 20 )
00166				GotoState('DiedState');
00167			else	
00168				MoveToward(parentBlob);
00169		}
00170		else 
00171		{
00172			LastParentTime = Level.TimeSeconds;
00173			MoveTo(ParentBlob.Location);
00174		}
00175		Sleep(0.1);
00176		Goto('Wander');
00177	}
00178	
00179	
00180	state fired
00181	{
00182		function HitWall(vector HitNormal, actor Wall)
00183		{
00184			PlaySound(Land);
00185			GotoState('Active');
00186		}
00187	
00188		function Landed(vector HitNormal)
00189		{
00190			if ( !FootRegion.Zone.bWaterZone )
00191				PlaySound(Land);
00192			GotoState('Active');
00193		}
00194	}
00195	
00196	state DiedState
00197	{
00198		ignores TakeDamage;
00199	
00200		function Landed(vector HitNormal)
00201		{
00202			if ( !FootRegion.Zone.bWaterZone )
00203				PlaySound(Land);
00204			SetRotation(Rot(0,0,0));
00205			PlayAnim('Splat');
00206			SetPhysics(PHYS_None);
00207		}	
00208	
00209		function Tick(float DeltaTime)
00210		{
00211			DrawScale = DrawScale - 0.06 * DeltaTime;
00212			if (DrawScale < 0.1)
00213				Destroy();
00214		}
00215	
00216	Begin:
00217		SetPhysics(PHYS_Falling);
00218		PlayAnim('Splat');
00219		FinishAnim();
00220		TweenAnim('Flat', 0.2);
00221	}	
00222	
00223		
00224	
00225	defaultproperties
00226	{
00227	     GroundSpeed=450.000000
00228	     AccelRate=1200.000000
00229	     JumpZ=-1.000000
00230	     SightRadius=3000.000000
00231	     Health=120
00232	     ReducedDamageType=exploded
00233	     ReducedDamagePct=0.250000
00234	     HitSound1=Sound'UnrealI.Blob.BlobInjur'
00235	     Land=Sound'UnrealShare.BioRifle.GelHit'
00236	     Die=Sound'UnrealI.Blob.BlobDeath'
00237	     Tag=blob1
00238	     DrawType=DT_Mesh
00239	     Texture=Texture'UnrealI.Skins.JBlob1'
00240	     Mesh=LodMesh'UnrealI.MiniBlob'
00241	     bMeshEnviroMap=True
00242	     CollisionRadius=6.000000
00243	     CollisionHeight=6.000000
00244	     bBlockActors=False
00245	     bBlockPlayers=False
00246	     Mass=40.000000
00247	     RotationRate=(Pitch=0,Yaw=0,Roll=0)
00248	}

End Source Code