XIDCine
Class MangousteSSH1Controller

source: C:\XIII\XIDCine\Classes\MangousteSSH1Controller.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Controller
         |
         +--XIDCine.CineController2
            |
            +--XIDCine.MangousteSSH1Controller
Direct Known Subclasses:None

class MangousteSSH1Controller
extends XIDCine.CineController2

// ============================================================================= // // dMMMMMMMMb .aMMMb dMMMMb .aMMMMP aMMMb dMP dMP .dMMMb dMMMMMMP dMMMMMP -------- // dMP"dMP"dMP dMP"dMP dMP dMP dMP" dMP"dMP dMP dMP MP" VP dMP dMP --- // dMP dMP dMP dMMMMMP dMP dMP dMP MMP"dMP dMP dMP dMP VMMMb dMP dMMMP ----- // dMP dMP dMP dMP dMP dMP dMP dMP.dMP dMP.dMP dMP.dMP dP .dMP dMP dMP --- // dMP dMP dMP dMP dMP dMP dMP VMMMP" VMMMP" VMMMP" VMMMP" dMP dMMMMMP -------- CONTROLLER // by iKi //=============================================================================
Variables
 name AntiFuite_PreviousStateName,
 int AttackSides[SideAttackCount]
 DesiredPosition, DesiredOrientation
 MangousteSSH1Pawn Mangouste
 MissileFakeSSH1 MangousteNearestMissile,
 float PlayerNearestMissileDistance,
 int PlayerNearestMissileIndex,
 bAntiFuite, bTextFinished

States
STA_Final, STA_Falling, STA_StartFalling, STA_Dying, STA_Phase03_To_Fall, STA_Phase03_B_FreeFight, STA_Phase03_A_StayHidden, STA_Phase02_To_Phase03, STA_Phase02_E_Vapor, STA_Phase02_C_StayHidden, STA_Phase02_D_FastAttack, STA_Phase02_B_WaitAndSee, STA_Phase02_A_HideOut, STA_Phase01_To_Phase02, STA_Phase01_C_VaporTrouble, STA_Phase01_B_FastAttack, STA_Phase01_A_HideOut, STA_Phase01_Start, STA_Phase00_To_Phase01, STA_Phase00, STA_AntiFuite

Function Summary
 ROTATOR AdjustAim(Ammunition FA, VECTOR PS, INT AE)
 void AvoidObstacle(vector TargetLocation, out vector)
 void BurstFirePlayer(float BurstTime, float PauseTime, optional bool)
 void ChooseASide()
 void CineWarn(Actor other)
     
//{}
 void ComputeMangousteNearestMissile()
 void ComputePlayerNearestMissile()
 void EndOfMove()
 vector HVector(vector A, vector B)
 void Initialize()
 void SetWantedSpeed(float wspeed)
 void SimpleSteering(float dt, float tmpDetectionDistance, optional bool)
 void VaporHurts()


State STA_Final Function Summary


State STA_Falling Function Summary


State STA_StartFalling Function Summary
 void CineWarn(Actor Other)


State STA_Dying Function Summary
 void EndOfMove()
 void CineWarn(Actor Other)
     
//		Hitwall( v,a ),
	}
*/


State STA_Phase03_To_Fall Function Summary


State STA_Phase03_B_FreeFight Function Summary


State STA_Phase03_A_StayHidden Function Summary


State STA_Phase02_To_Phase03 Function Summary


State STA_Phase02_E_Vapor Function Summary


State STA_Phase02_C_StayHidden Function Summary


State STA_Phase02_D_FastAttack Function Summary
 void VaporHurts()


State STA_Phase02_B_WaitAndSee Function Summary
 void VaporHurts()
 void CineWarn(Actor Other)


State STA_Phase02_A_HideOut Function Summary
 void Reflex()
 void VaporHurts()


State STA_Phase01_To_Phase02 Function Summary


State STA_Phase01_C_VaporTrouble Function Summary


State STA_Phase01_B_FastAttack Function Summary
 void VaporHurts()


State STA_Phase01_A_HideOut Function Summary
 void VaporHurts()


State STA_Phase01_Start Function Summary


State STA_Phase00_To_Phase01 Function Summary


State STA_Phase00 Function Summary


State STA_AntiFuite Function Summary



Source Code


00001	
00002	//     =============================================================================
00003	//
00004	//     dMMMMMMMMb .aMMMb   dMMMMb .aMMMMP  aMMMb   dMP dMP .dMMMb dMMMMMMP dMMMMMP --------
00005	//    dMP"dMP"dMP dMP"dMP dMP dMP dMP"    dMP"dMP dMP dMP  MP" VP   dMP   dMP     ---
00006	//   dMP dMP dMP dMMMMMP dMP dMP dMP MMP"dMP dMP dMP dMP  VMMMb    dMP   dMMMP   -----
00007	//  dMP dMP dMP dMP dMP dMP dMP dMP.dMP dMP.dMP dMP.dMP dP .dMP   dMP   dMP     ---
00008	// dMP dMP dMP dMP dMP dMP dMP  VMMMP"  VMMMP"  VMMMP"  VMMMP"   dMP   dMMMMMP -------- CONTROLLER
00009	//                                                                             by iKi
00010	//=============================================================================
00011	
00012	class MangousteSSH1Controller extends CineController2;
00013	
00014	//        ###########################################################################
00015	//       ##                                                                       ####
00016	//      ##  dMP dMP .aMMMb  dMMMMb  dMP .aMMMb  dMMMMb  dMP     dMMMMMP .dMMMb   ####
00017	//     ##  dMP dMP dMP"dMP dMP.dMP amr dMP"dMP dMP"dMP dMP     dMP     dMP" VP  ####
00018	//    ##  dMP dMP dMMMMMP dMMMMK" dMP dMMMMMP dMMMMK" dMP     dMMMP    VMMMb   #### 
00019	//   ##   YMvAP" dMP dMP dMP"AMF dMP dMP dMP dMP.aMF dMP     dMP     dP .dMP  #### 
00020	//  ##     VP"  dMP dMP dMP dMP dMP dMP dMP dMMMMP" dMMMMMP dMMMMMP  VMMMP"  ####
00021	// ##                                                                       ####  
00022	//#############################################################################
00023	//  ##########################################################################
00024	
00025	// My Pawn actor
00026	VAR MangousteSSH1Pawn			Mangouste;
00027	
00028	VAR TRANSIENT bool				bInvicible, bSwitchAttackSide, bAntiFuite, bTextFinished;
00029	VAR TRANSIENT VECTOR			DesiredPosition, DesiredOrientation;
00030	VAR TRANSIENT MissileFakeSSH1	MangousteNearestMissile,
00031									PlayerNearestMissile,
00032									Missiles[5]; // CT, NE, NW, SE, SW
00033	VAR TRANSIENT float				PlayerNearestMissileDistance,
00034									MangousteNearestMissileDistance,
00035									LastTimeShoot,
00036									VaporTroubleEndTime,
00037									ReloadingEndTime,
00038									UnseenTime,
00039									XIIIHiddenTime,
00040									NextTauntTime;
00041	VAR TRANSIENT int				PlayerNearestMissileIndex, 
00042									MangousteWantedMissileIndex,
00043									AttackNumber, CurrentSide, Phase,
00044									TauntIndex;
00045	VAR TRANSIENT name				AntiFuite_PreviousStateName,
00046									Vapor_PreviousStateName;
00047	
00048	CONST SideAttackCount=5;
00049	CONST DifficultyRate=0.20;
00050	VAR int							AttackSides[SideAttackCount];
00051	
00052	
00053	CONST HoleRadius=512;// real 512
00054	//CONST MissileRadius=256;
00055	//CONST PlatformRadius=1800; // real 1824 or 1750
00056	
00057	//        #####################################################
00058	//       ##                                                  ####
00059	//      ##  .aMMMMP dMP    .aMMMb  dMMMMb  .aMMMb  dMP      ####
00060	//     ##  dMP"    dMP    dMP"dMP dMP"dMP dMP"dMP dMP      ####
00061	//    ##  dMP MMP"dMP    dMP dMP dMMMMK" dMMMMMP dMP      ####
00062	//   ##  dMP.dMP dMP    dMP.aMP dMP.aMF dMP dMP dMP      ####
00063	//  ##   VMMMP" dMMMMMP VMMMP" dMMMMP" dMP dMP dMMMMMP  ####
00064	// ##                                                  ####
00065	//########################################################
00066	//  #####################################################
00067	
00068	EVENT BeginState()
00069	{
00070		LOG( "###################################" );
00071		LOG( self@"is in STATE :"@GetStateName( ) );
00072		LOG( "-----------------------------------" );
00073	}
00074	
00075	FUNCTION Initialize()	
00076	{
00077		LOCAL MissileFakeSSH1 mis;
00078	
00079		Mangouste=MangousteSSH1Pawn(Pawn);
00080	
00081		foreach DynamicActors(class'MissileFakeSSH1',mis)
00082		{
00083			switch(mis.tag)
00084			{
00085			case 'Central':	Missiles[0]=mis;	break;
00086			case 'NE':		Missiles[1]=mis;	break;
00087			case 'NW':		Missiles[2]=mis;	break;
00088			case 'SE':		Missiles[3]=mis;	break;
00089			case 'SW':		Missiles[4]=mis;	break;
00090			default:		Log("Unknown missile tag"@mis.tag);
00091			}
00092		}
00093		Super.Initialize();
00094	}
00095	
00096	
00097	EVENT SeePlayer( Pawn Seen ); //{}
00098	
00099	FUNCTION CineWarn(actor other)
00100	{
00101	//	Log( "GLOBAL::CineWarn(...) => STA_Phase01_A_HideOut" );
00102	//	Mangouste.KillVignettes();
00103	//	GotoState('STA_Phase01_Start');
00104		GotoState('STA_Phase00_To_Phase01');
00105	}
00106	
00107	FUNCTION ROTATOR AdjustAim(Ammunition FA, VECTOR PS, INT AE) { return rotation; }
00108	
00109	static final FUNCTION vector HVector(vector A,vector B) { return (B-A)*vect(1,1,0); }
00110	
00111	EVENT HearNoise(float Loudness, Actor NoiseMaker);
00112	
00113	FUNCTION ComputePlayerNearestMissile()
00114	{
00115		LOCAL float d;
00116		LOCAL int i;
00117	
00118		PlayerNearestMissileDistance = 1000000;
00119	
00120		for ( i=0; i<5; ++i )
00121		{
00122			if ( Missiles[i].bIsUp )
00123			{
00124				d = vSize( HVector( Missiles[i].Location, PC.Pawn.Location ) );
00125				if ( PlayerNearestMissileDistance>d )
00126				{
00127					PlayerNearestMissile = Missiles[i];
00128					PlayerNearestMissileDistance = d;
00129					PlayerNearestMissileIndex = i;
00130				}
00131			}
00132		}
00133	}
00134	
00135	FUNCTION ComputeMangousteNearestMissile()
00136	{
00137		LOCAL float d;
00138		LOCAL int i;
00139	
00140		MangousteNearestMissileDistance=1000000;
00141	
00142		for (i=0;i<5;++i)
00143		{
00144			if ( Missiles[i].bIsUp )
00145			{
00146				d = vSize( HVector( Missiles[i].Location, Pawn.Location ) );
00147				if ( MangousteNearestMissileDistance>d )
00148				{
00149					MangousteNearestMissile = Missiles[i];
00150					MangousteNearestMissileDistance = d;
00151				}
00152			}
00153		}
00154	}
00155	
00156	FUNCTION BurstFirePlayer( float BurstTime, float PauseTime, optional bool bLeftOnly)
00157	{
00158		LOCAL float TimeCorrection;
00159	
00160		TimeCorrection = DifficultyRate * BurstTime;
00161		BurstTime -= TimeCorrection;
00162		PauseTime += TimeCorrection;
00163	
00164		if ( NextTauntTime==0 )
00165			NextTauntTime = Level.TimeSeconds + 10 + 5*FRand();
00166		else
00167		{
00168			if ( Level.TimeSeconds > NextTauntTime && !Mangouste.DM.bSpeaking/* && TauntIndex<3 */ )
00169			{
00170				Mangouste.DM.StartDialogue( Min ( 7+TauntIndex, 9 ) ); // ...
00171				NextTauntTime = Level.TimeSeconds + 20 + 5*FRand();
00172				TauntIndex = (TauntIndex+1)&7;
00173			}
00174		}
00175	
00176		if ( Level.TimeSeconds >= ReloadingEndTime )
00177			Mangouste.bReloadingWeapon = false;
00178	
00179		if ( Level.TimeSeconds < VaporTroubleEndTime )
00180		{
00181			bFire=0;
00182		}
00183		else
00184		{
00185			if ( ( bFire==0 ) && ( Level.TimeSeconds-LastTimeShoot>(BurstTime+PauseTime) ) && CanSee( PC.Pawn )  )
00186			{
00187				bFire=1;
00188				LastTimeShoot = Level.TimeSeconds;
00189			}
00190		//Mangouste.ControlSpineRotation(true);
00191			if ( bFire==1 && Level.TimeSeconds-LastTimeShoot>BurstTime )
00192			{
00193				if ( CanSee(PC.Pawn) )
00194				{
00195					if ( !Mangouste.bReloadingWeapon )
00196					{
00197		//				Mangouste.bFireLeft = true;
00198		//				Mangouste.bFireRight = true;
00199						Mangouste.LeftUziFire(PC.Pawn.Location);
00200						if (!bLeftOnly)
00201							Mangouste.RightUziFire(PC.Pawn.Location);
00202					}
00203					else
00204					{
00205						ReloadingEndTime = Level.TimeSeconds + 2.0;
00206						bFire=0;
00207						LastTimeShoot = 0; //Level.TimeSeconds;
00208					}
00209				}
00210				else
00211				{
00212					bFire=0;
00213				}
00214			}
00215		}
00216	}
00217	
00218	FUNCTION SimpleSteering( float dt, float tmpDetectionDistance, optional bool tmpAvoid )
00219	{
00220		Plane = HVector( Pawn.Location, DesiredPosition );
00221		Steering( DesiredPosition, dt, tmpDetectionDistance, tmpAvoid );
00222	}
00223	
00224	FUNCTION AvoidObstacle( vector TargetLocation,out vector wanted_acceleration )
00225	{
00226		LOCAL vector vTemp, vTemp2, MissileLocation;
00227		LOCAL float a, mini, emergency_factor;
00228		LOCAL int i,n;
00229	
00230		mini=1750000;
00231		n=-1;
00232	
00233		for (i=0;i<5;i++)
00234		{
00235			vTemp = HVector( Missiles[i].Location, Pawn.Location );
00236			if ( vTemp dot Hvector( TargetLocation, Pawn.Location ) < 0 )
00237				continue;
00238			a=vSize(vTemp)-HoleRadius;
00239			if (a<mini)
00240			{
00241				mini=a;
00242				n=i;
00243				MissileLocation = Missiles[i].Location;
00244			}
00245		}
00246	
00247		if ( n==-1 )
00248			return;
00249	
00250		if ( mini>64 )
00251			return;
00252	
00253		vTemp = HVector( MissileLocation, Pawn.Location );
00254		
00255		if ( ( vTemp cross HVector( TargetLocation, Pawn.Location ) ).Z > 0 )
00256		{
00257			vTemp2.X=vTemp.Y;
00258			vTemp2.Y=-vTemp.X;
00259			vTemp2.Z=0;
00260		}
00261		else
00262		{
00263			vTemp2.X=-vTemp.Y;
00264			vTemp2.Y=vTemp.X;
00265			vTemp2.Z=0;
00266		}
00267		vTemp2 = Normal(vTemp2);
00268	
00269	//	Mangouste.DEBUG_TargetDirection = Mangouste.Location + 100 * vTemp2;
00270	
00271		Pawn.Velocity = fmax( /*0.6*MyPawnGroundSpeed*/Pawn.GroundSpeed,vSize(Pawn.Velocity)) * vTemp2; // annule la composante radiale
00272	}
00273	
00274	FUNCTION EndOfMove()
00275	{
00276		Pawn.Acceleration = vect( 0, 0, 0 );
00277		Pawn.Velocity = vect( 0, 0, 0 );
00278		Pawn.PlayMoving( );
00279	}
00280	
00281	FUNCTION VaporHurts();
00282	
00283	FUNCTION NotifyTakeDamage( int Damage, Pawn EventInstigator, vector HitLocation, vector Momentum, class<DamageType> DamageType );
00284	
00285	FUNCTION SetWantedSpeed(float wspeed)
00286	{
00287		wantedspeed=wspeed;
00288		Pawn.GroundSpeed=600 * wantedspeed;	// MaximumSpeed
00289	}
00290	
00291	FUNCTION ChooseASide()
00292	{
00293		LOCAL int side;
00294	
00295		side = AttackSides[ AttackNumber ];
00296		if ( bSwitchAttackSide )
00297			side = -side;
00298		AttackNumber++;
00299		if ( AttackNumber==SideAttackCount )
00300		{
00301			AttackNumber = 0;
00302			bSwitchAttackSide = !bSwitchAttackSide;
00303		}
00304		CurrentSide = side;
00305	}
00306	
00307	EVENT Tick(float dt)
00308	{
00309		LOCAL VECTOR vTemp;
00310	
00311		FocalPoint = Pawn.Location + 256 * NORMAL( DesiredOrientation );
00312	
00313		if ( bAntiFuite /*Phase>0 && Phase<3*/ )
00314		{
00315			if ( GetStateName()!='STA_AntiFuite' )
00316			{
00317				vTemp = PC.Pawn.Location - Missiles[0].Location;
00318				vTemp.Z = 0;
00319				if ( vSize( vTemp )>1750 )
00320				{
00321					AntiFuite_PreviousStateName = GetStateName();
00322					GotoState( 'STA_AntiFuite' );
00323				}
00324			}
00325	
00326			if ( UnSeenTime>=0 )
00327			{
00328				if ( !PC.CanSee( Mangouste ) )
00329				{
00330					UnseenTime += dt;
00331					if ( UnseenTime > 8.0 && !Mangouste.DM.bSpeaking )
00332					{
00333						Mangouste.DM.StartDialogue( 1 ); // Alors on a peut le sens de l'orientation
00334						UnseenTime = -1;
00335					}
00336	
00337				}
00338				else
00339					UnseenTime = 0;
00340			}
00341	
00342			if ( XIIIHiddenTime>=0 )
00343			{
00344				if ( CanSee( PC.Pawn ) )
00345				{
00346					XIIIHiddenTime += dt;
00347					if ( XIIIHiddenTime > 8.0 && !Mangouste.DM.bSpeaking )
00348					{
00349						Mangouste.DM.StartDialogue( 4 ); // Espèce de lache, montre-toi
00350						XIIIHiddenTime = -1;
00351					}
00352				}
00353				else
00354					XIIIHiddenTime = 0;
00355			}
00356		
00357		}
00358	
00359	}
00360	
00361	STATE STA_AntiFuite
00362	{
00363		EVENT BeginState( )
00364		{
00365			Global.BeginState();
00366			SetWantedSpeed(1.00);
00367	//		PC.GotoState('PlayerWalking');
00368		}
00369	
00370		EVENT Tick( float dt )
00371		{
00372			LOCAL VECTOR vTemp;
00373			LOCAL FLOAT f;
00374	
00375			vTemp = PC.Pawn.Location - Missiles[0].Location;
00376			vTemp.Z = 0;
00377	//		Log( vSize( (PC.Pawn.Location - Missiles[0].Location )*vect(1,1,0)) );
00378	
00379			f = vSize( vTemp )-1750;
00380	
00381			if ( f<0 )
00382			{
00383				LOG ( "RETURN"@AntiFuite_PreviousStateName );
00384				GotoState( AntiFuite_PreviousStateName );
00385				return;
00386			}
00387	
00388			
00389			DesiredPosition = PC.Pawn.Location;
00390	
00391			SimpleSteering( dt, f+500 );
00392			BurstFirePlayer( 1.0, 0.0 );
00393			BurstFirePlayer( 1.0, 0.0 );
00394			Global.Tick( dt );
00395		}
00396	
00397		EVENT EndState()
00398		{
00399			bFire=0;
00400		}
00401	}
00402	
00403	STATE STA_Phase00
00404	{
00405		EVENT BeginState()
00406		{
00407	//		LOCAL CWndFocusTrigger wnd;
00408			PC.Pawn.bCanClimbLadders=false;
00409			if ( PC.Pawn.OnLadder!=none )
00410				PC.Pawn.OnLadder.PawnLeavingVolume( PC.Pawn );
00411			XIIIBaseHud(PC.MyHud).AddHudCartoonFocus( Mangouste, 0, false, 5.0, false, /*zoomFOV*/ 10, /*zoomDistance*/ 1200, /*bDanger*/ true);
00412	
00413			Global.BeginState();
00414			SetWantedSpeed(0.48);
00415			Focus = PC.Pawn;
00416		}
00417	
00418		EVENT Tick(float dt)
00419		{
00420			PC.SetRotation( PC.Rotation + RotDiff( ROTATOR( Mangouste.Location-vect(0,0,25) - PC.Pawn.Location ), PC.Rotation, 90*182*dt ) );
00421	
00422			DesiredPosition = PC.Pawn.Location;
00423	
00424			SimpleSteering( dt, 1200 );
00425	
00426			Global.Tick( dt );
00427		}
00428	}
00429	
00430	STATE STA_Phase00_To_Phase01
00431	{
00432		EVENT BeginState()
00433		{
00434			Pawn.RotationRate.Yaw=270*182;
00435			Global.BeginState();
00436			SetWantedSpeed(1.09);
00437			Mangouste.GotoState( '' );
00438			Phase++;
00439	//		GotoState( 'STA_Dying');
00440		}
00441	
00442		EVENT EndState()
00443		{
00444	//		SetTimer( 0, false );
00445	//		bFire=0;
00446			XIIIBaseHud(PC.MyHud).AddBossBar( Pawn );
00447			Level.AdjustDifficulty = -(Level.Game.Difficulty)*10;
00448			PC.GotoState( 'PlayerWalking' );
00449			bAntiFuite=true;
00450		}
00451	
00452		EVENT Tick(float dt)
00453		{
00454			LOCAL VECTOR vTemp;
00455	
00456	//		DesiredOrientation = Pawn.Velocity;
00457	
00458	//		ComputePlayerNearestMissile();
00459	
00460			DesiredPosition = Missiles[0].Location+620*Normal(Hvector(PC.Pawn.Location,Missiles[0].Location));
00461	
00462			SimpleSteering( dt, 100 );
00463			
00464	//		BurstFirePlayer( 0.1, 2.9, true );
00465	
00466			Global.Tick( dt );
00467		}
00468	
00469		EVENT EndOfMove()
00470		{
00471			GotoState( 'STA_Phase01_A_HideOut' );
00472		}
00473	}
00474	
00475	//     =======================================================
00476	//
00477	//      dMMMMb  dMP dMP  .aMMMb  .dMMMb  dMMMMMP       aMP
00478	//     dMP.dMP dMP.dMP  dMP"dMP dMP" VP dMP         adMMP
00479	//    dMMMMP" dMMMMK"  dMMMMMP  VMMMb  dMMMP   dMMP  dMP
00480	//   dMP     dMP"AMF  dMP dMP dP .dMP dMP           dMP
00481	//  dMP     dMP dMP  dMP dMP  VMMMP" dMMMMMP     dMMMMMP
00482	//
00483	//=======================================================
00484	/*
00485	STATE STA_Phase01_Start
00486	{
00487		EVENT BeginState( )
00488		{
00489			Phase++;
00490			GotoState( 'STA_Phase01_A_HideOut' );
00491		}
00492	}*/
00493	
00494	STATE STA_Phase01_A_HideOut
00495	{
00496		EVENT BeginState()
00497		{
00498	//		Pawn.bDelayDisplay=true;
00499			Pawn.RotationRate.Yaw=270*182;
00500			Global.BeginState();
00501			SetWantedSpeed(1.09);
00502			Pawn.GotoState( '' );
00503			if (TimerRate==0.0)
00504				SetTimer(5.0,false);
00505	//		Focus = PC.Pawn;
00506			Mangouste.PeripheralVision=0.70;
00507		}
00508	
00509		EVENT EndState()
00510		{
00511			SetTimer( 0, false );
00512			bFire=0;
00513		}
00514	
00515		EVENT Tick(float dt)
00516		{
00517			LOCAL VECTOR vTemp;
00518	
00519			DesiredOrientation = Pawn.Velocity;
00520	
00521			ComputePlayerNearestMissile();
00522	
00523			DesiredPosition = Missiles[0].Location+620*Normal(Hvector(PC.Pawn.Location,Missiles[0].Location));
00524	
00525			SimpleSteering( dt, 100 );
00526			
00527			BurstFirePlayer( 0.2, 0.8, true );
00528	
00529			Global.Tick( dt );
00530		}
00531	
00532		FUNCTION VaporHurts()
00533		{
00534			GotoState('STA_Phase01_C_VaporTrouble');
00535		}
00536	
00537		EVENT Timer()
00538		{
00539			GotoState('STA_Phase01_B_FastAttack');
00540		}
00541	
00542	}
00543	
00544	STATE STA_Phase01_B_FastAttack
00545	{
00546		EVENT BeginState()
00547		{
00548			Global.BeginState();
00549			SetWantedSpeed(1.00);
00550			Pawn.GotoState( '' );
00551			ChooseASide();
00552			XIIIBaseHud(PC.MyHud).AddHudCartoonFocus( Mangouste, 0, false, 4.0, false, 10, 1200, true);
00553		}
00554	
00555		EVENT EndState()
00556		{
00557	//		Mangouste.KillVignettes();
00558			SetTimer( 0, false );
00559	//		SetTimer2( 0, false );
00560			bFire=0;
00561		}
00562	
00563		EVENT Tick(float dt)
00564		{
00565			if (CanSee(PC.Pawn) /*&& !Mangouste.bReloadingWeapon*/ )
00566			{
00567				if (TimerRate==0.0)
00568				{
00569					SetTimer( 0.8, false );
00570				}
00571			}
00572			BurstFirePlayer( 0.4, 0.6 );
00573	
00574	/*			bFire=1;
00575				Mangouste.LeftUziFire(PC.Pawn.Location);
00576				Mangouste.RightUziFire(PC.Pawn.Location);
00577			}
00578	*/
00579			DesiredOrientation = PC.Pawn.Location - Pawn.Location;
00580			DesiredPosition = PC.Pawn.Location + CurrentSide*128 * Normal( vect(0,0,1) cross HVector( Mangouste.Location, PC.Pawn.Location ) );
00581	
00582			SimpleSteering( dt, HoleRadius*1.8 );
00583		
00584			Global.Tick( dt );
00585		}
00586	
00587		EVENT EndOfMove()
00588		{
00589			ChooseASide();
00590		}
00591	
00592		EVENT Timer()
00593		{
00594			GotoState('STA_Phase01_A_HideOut');
00595		}
00596	
00597		FUNCTION VaporHurts()
00598		{
00599			GotoState('STA_Phase01_C_VaporTrouble');
00600		}
00601	/*
00602		EVENT ReceiveWarning(Pawn shooter, float projSpeed, vector FireDir)
00603		{
00604			SetTimer( 0.15, false );
00605		}*/
00606	}
00607	
00608	STATE STA_Phase01_C_VaporTrouble
00609	{
00610		EVENT BeginState()
00611		{
00612			Global.BeginState();
00613	//		SetWantedSpeed(0.15);
00614	
00615			Pawn.velocity = vect(0,0,0);
00616			Pawn.acceleration = vect(0,0,0);
00617			Pawn.GotoState( 'STA_Phase01_VaporPaf' );
00618			SetTimer( 5.0, false );
00619		}
00620	
00621		EVENT EndState()
00622		{
00623			SetTimer( 0, false );
00624		}
00625	
00626		FUNCTION NotifyTakeDamage( int Damage, Pawn EventInstigator, vector HitLocation, vector Momentum, class<DamageType> DamageType )
00627		{
00628			Log( "STA_Phase01_C_VaporTrouble::NotifyTakeDamage() => STA_Phase01_A_HideOut" );
00629			if ( TimerRate!=0.25 )
00630				SetTimer( 0.25, false );
00631	//		GotoState('STA_Phase01_A_HideOut');
00632		}
00633	
00634		EVENT Timer()
00635		{
00636			Log( "STA_Phase01_C_VaporTrouble::Timer() => STA_Phase01_A_HideOut" );
00637			VaporTroubleEndTime = Level.TimeSeconds + 0.5;
00638			GotoState('STA_Phase01_A_HideOut');
00639		}
00640	}
00641	
00642	STATE STA_Phase01_To_Phase02
00643	{
00644		EVENT BeginState()
00645		{
00646			Global.BeginState();
00647			bAntiFuite=false;
00648			bInvicible=true;
00649			Phase++;
00650			Missiles[0].GoDown( );
00651			Pawn.GotoState( '' );
00652			ComputePlayerNearestMissile();
00653			MangousteWantedMissileIndex = 5-PlayerNearestMissileIndex;
00654			TriggerEvent( 'Jones_Fight', self, Mangouste );
00655			SetWantedSpeed(1.09);
00656			Mangouste.DM.StartDialogue( 2 ); // Trouve-moi si tu es si malin
00657			SetTimer( 20.0, false );
00658	//		GotoState( 'STA_Phase02_A_HideOut' );
00659		}
00660	
00661		EVENT EndState()
00662		{
00663			bAntiFuite=true;
00664			bInvicible=false;
00665		}
00666	
00667		EVENT Timer( )
00668		{
00669			Mangouste.DM.StartDialogue( 6 ); // Surprise !!
00670			SetTimer2( 1.0, false );
00671		}
00672	
00673		EVENT Timer2( )
00674		{
00675			GotoState( 'STA_Phase02_D_FastAttack' );
00676		}
00677	
00678		EVENT Tick( float dt )
00679		{
00680			DesiredPosition =
00681				Missiles[ MangousteWantedMissileIndex ].Location
00682			+
00683				620
00684			*
00685				Normal(
00686					Hvector(
00687						PC.Pawn.Location,
00688						Missiles[ MangousteWantedMissileIndex ].Location
00689						)
00690					);
00691	
00692			SimpleSteering( dt, 100 );
00693			
00694			Global.Tick( dt );
00695		}
00696	}
00697	
00698	//     =======================================================
00699	//
00700	//      dMMMMb  dMP dMP  .aMMMb  .dMMMb  dMMMMMP     aMMMb
00701	//     dMP.dMP dMP.dMP  dMP"dMP dMP" VP dMP             dP
00702	//    dMMMMP" dMMMMK"  dMMMMMP  VMMMb  dMMMP   dMMP  aMMP
00703	//   dMP     dMP"AMF  dMP dMP dP .dMP dMP          dMP
00704	//  dMP     dMP dMP  dMP dMP  VMMMP" dMMMMMP      dMMMMP
00705	//
00706	//=======================================================
00707	
00708	STATE STA_Phase02_A_HideOut
00709	{
00710		EVENT BeginState()
00711		{
00712			Global.BeginState();
00713			SetWantedSpeed(1.09);
00714			Mangouste.PeripheralVision=0.70;
00715		}
00716	
00717		EVENT EndState()
00718		{
00719			bFire=0;
00720	//		SetTimer( 0, false );
00721		}
00722	
00723		EVENT Tick(float dt)
00724		{
00725			BurstFirePlayer( 0.3, 0.7, true );
00726	
00727			DesiredOrientation = Pawn.Velocity;
00728	
00729			DesiredPosition = Missiles[ MangousteWantedMissileIndex ].Location ;
00730			DesiredPosition = DesiredPosition + 1.08 * HoleRadius * Normal( Hvector( Missiles[0].Location,DesiredPosition ) );
00731	
00732			SimpleSteering( dt, 100 );
00733	
00734			Global.Tick( dt );
00735		}
00736	
00737		EVENT EndOfMove()
00738		{
00739			Global.EndOfMove();
00740	
00741			if ( FRand()>0.25 )
00742				GotoState( 'STA_Phase02_B_WaitAndSee' );
00743			else
00744				GotoState( 'STA_Phase02_C_StayHidden' );
00745		}
00746	
00747		FUNCTION VaporHurts()
00748		{
00749			Vapor_PreviousStateName = GetStateName();
00750			GotoState( 'STA_Phase02_E_Vapor' );
00751		}
00752	
00753	}
00754	
00755	FUNCTION Reflex()
00756	{
00757	//	if ( FRand()<0.5 )
00758	//	{
00759		Missiles[ MangousteWantedMissileIndex ].bIsUp=false;
00760		Missiles[ 5-MangousteWantedMissileIndex ].bIsUp=false;
00761		ComputePlayerNearestMissile();
00762		Missiles[ MangousteWantedMissileIndex ].bIsUp=true;
00763		Missiles[ 5-MangousteWantedMissileIndex ].bIsUp=true;
00764		MangousteWantedMissileIndex=5-PlayerNearestMissileIndex;
00765	//	}
00766	//	else
00767	//		MangousteWantedMissileIndex=5-MangousteWantedMissileIndex;
00768		GotoState( 'STA_Phase02_A_HideOut' );
00769	}
00770	
00771	STATE STA_Phase02_B_WaitAndSee
00772	{
00773		EVENT BeginState()
00774		{
00775			Global.BeginState();
00776			Pawn.velocity = vect(0,0,0);
00777			Pawn.acceleration = vect(0,0,0);
00778			DesiredOrientation = Missiles[ MangousteWantedMissileIndex ].Location - Mangouste.Location;
00779	//		Mangouste.LoopAnim( 'Attente' );
00780	//		Mangouste.SFXVapor.CWndDuration[0]=10000;
00781	//		Mangouste.SFXVapor.AnimationDuration[0]=10000;
00782	//		Mangouste.SFXVapor.Trigger( self, Mangouste );
00783			Mangouste.PeripheralVision=0.86;
00784	//		if (TimerRate==0.0)
00785				SetTimer( 5.0, false );
00786		}
00787	
00788		EVENT EndState()
00789		{
00790			LOCAL Rotator rl;
00791	//		Mangouste.KillVignettes( );
00792			SetTimer( 0.0, false );
00793			Mangouste.SetBoneRotation('X HEAD',rl,0,0.0);
00794			SetRotation( Mangouste.Rotation );
00795		}
00796	
00797		EVENT Tick( float dt )
00798		{
00799			LOCAL Rotator rl;
00800			LOCAL int n;
00801	
00802			n = 10000 * ( cos( 1.5*Level.TimeSeconds ) - 0.5 );
00803	
00804			rl.Yaw=0;
00805			rl.Pitch=0;
00806			rl.Roll=n+10000;
00807	
00808			Mangouste.SetBoneRotation('X HEAD',rl,1,0.75);
00809	
00810			rl = Mangouste.Rotation;
00811			rl.Yaw = n;
00812			SetRotation( Mangouste.Rotation+rl );
00813	//		if ( CanSee( PC.Pawn ) /*&& !Mangouste.bReloadingWeapon*/ )
00814	//		{
00815				BurstFirePlayer( 0.2, 0.8 );
00816	//
00817	//			GotoState( 'STA_Phase02_C_Attack' );
00818	//		}
00819	
00820			Mangouste.ChangeAnimation();
00821	
00822			Global.Tick( dt );
00823		}
00824	
00825	
00826		EVENT HearNoise(float Loudness, Actor NoiseMaker)
00827		{
00828			if ( NoiseMaker.IsA( 'XIIIPlayerPawn' ) || NoiseMaker.Instigator.IsA( 'XIIIPlayerPawn' ) )
00829			{
00830	//			Log( "STA_Phase02_B_WaitAndSee::HearNoise() => STA_Phase02_A_HideOut" );
00831				Reflex( );
00832			}
00833		}
00834	
00835		EVENT SeePlayer( Pawn Seen )
00836		{
00837			if ( Seen.IsA( 'XIIIPlayerPawn' ) && vSize(Seen.Location-Mangouste.Location)<512 )
00838			{
00839				Reflex( );
00840			}
00841		}
00842	
00843		FUNCTION NotifyTakeDamage( int Damage, Pawn EventInstigator, vector HitLocation, vector Momentum, class<DamageType> DamageType )
00844		{
00845			Reflex( );
00846		}
00847	
00848		FUNCTION CineWarn( actor Other );
00849	
00850		EVENT Timer()
00851		{
00852			GotoState('STA_Phase02_D_FastAttack');
00853		}
00854	
00855		FUNCTION VaporHurts()
00856		{
00857			Vapor_PreviousStateName = GetStateName();
00858			GotoState( 'STA_Phase02_E_Vapor' );
00859		}
00860	}
00861	
00862	STATE STA_Phase02_D_FastAttack
00863	{
00864		EVENT BeginState()
00865		{
00866			Global.BeginState();
00867			SetWantedSpeed(1.00);
00868			Pawn.GotoState( '' );
00869			ChooseASide();
00870		}
00871	
00872		EVENT EndState()
00873		{
00874	//		SetTimer( 0, false );
00875			bFire=0;
00876		}
00877	
00878		EVENT Tick(float dt)
00879		{
00880			BurstFirePlayer( 0.4, 0.6 );
00881	
00882			DesiredOrientation = PC.Pawn.Location - Pawn.Location;
00883			DesiredPosition = PC.Pawn.Location + CurrentSide*128 * Normal( vect(0,0,1) cross HVector( Mangouste.Location, PC.Pawn.Location ) );
00884	
00885			SimpleSteering( dt, 800 );
00886		
00887			Global.Tick( dt );
00888		}
00889	
00890		EVENT EndOfMove()
00891		{
00892			GotoState( 'STA_Phase02_A_HideOut' );
00893		}
00894	
00895		EVENT Timer()
00896		{
00897			GotoState( 'STA_Phase02_A_HideOut' );
00898		}
00899	
00900		FUNCTION VaporHurts()
00901		{
00902			Vapor_PreviousStateName = GetStateName();
00903			GotoState( 'STA_Phase02_E_Vapor' );
00904		}
00905	}
00906	
00907	STATE STA_Phase02_C_StayHidden
00908	{
00909		EVENT BeginState()
00910		{
00911			Global.BeginState();
00912			bAntiFuite=false;
00913			SetTimer( 5.0, false );
00914		}
00915	
00916		EVENT EndState()
00917		{
00918			bAntiFuite=true;
00919		}
00920	
00921		EVENT Timer( )
00922		{
00923			Mangouste.DM.StartDialogue( 6 ); // Surprise !!
00924			SetTimer2( 1.0, false );
00925		}
00926	
00927		EVENT Timer2( )
00928		{
00929			GotoState( 'STA_Phase02_D_FastAttack' );
00930		}
00931	
00932		EVENT Tick( float dt )
00933		{
00934			DesiredPosition =
00935				Missiles[ MangousteWantedMissileIndex ].Location
00936			+
00937				620
00938			*
00939				Normal(
00940					Hvector(
00941						PC.Pawn.Location,
00942						Missiles[ MangousteWantedMissileIndex ].Location
00943						)
00944					);
00945	
00946			SimpleSteering( dt, 100 );
00947			
00948			Global.Tick( dt );
00949		}
00950	
00951		FUNCTION NotifyTakeDamage( int Damage, Pawn EventInstigator, vector HitLocation, vector Momentum, class<DamageType> DamageType )
00952		{
00953			Reflex( );
00954		}
00955	}
00956	
00957	STATE STA_Phase02_E_Vapor
00958	{
00959		EVENT BeginState()
00960		{
00961			Global.BeginState();
00962	
00963			Pawn.velocity = vect(0,0,0);
00964			Pawn.acceleration = vect(0,0,0);
00965			Pawn.GotoState( 'STA_Phase01_VaporPaf' );
00966			SetTimer( 3.0, false );
00967		}
00968	
00969		EVENT EndState()
00970		{
00971			SetTimer( 0, false );
00972		}
00973	
00974		FUNCTION NotifyTakeDamage( int Damage, Pawn EventInstigator, vector HitLocation, vector Momentum, class<DamageType> DamageType )
00975		{
00976			if ( TimerRate!=0.25 )
00977				SetTimer( 0.25, false );
00978		}
00979	
00980		EVENT Timer()
00981		{
00982			VaporTroubleEndTime = Level.TimeSeconds + 0.5;
00983			GotoState('STA_Phase02_C_StayHidden');
00984		}
00985	}
00986	
00987	STATE STA_Phase02_To_Phase03
00988	{
00989		EVENT BeginState()
00990		{
00991			bAntiFuite=false;
00992			bInvicible=true;
00993			Phase++;
00994			Global.BeginState();
00995	
00996			Pawn.velocity = vect(0,0,0);
00997			Pawn.acceleration = vect(0,0,0);
00998			Mangouste.DM.StartDialogue( 5 ); // C'est ça qu' l'on appelle un héros
00999			GotoState( 'STA_Phase03_A_StayHidden' );
01000	
01001			Missiles[1].GoDown( 0.0 );
01002			Missiles[2].GoDown( 1.8 );
01003			Missiles[3].GoDown( 1.8 * 2);
01004			Missiles[4].GoDown( 1.8 * 3);
01005		}
01006	
01007		EVENT EndState()
01008		{
01009		}
01010	}
01011	
01012	//     =======================================================
01013	//
01014	//      dMMMMb  dMP dMP  .aMMMb  .dMMMb  dMMMMMP     aMMMb
01015	//     dMP.dMP dMP.dMP  dMP"dMP dMP" VP dMP             dP
01016	//    dMMMMP" dMMMMK"  dMMMMMP  VMMMb  dMMMP   dMMP  aMMb
01017	//   dMP     dMP"AMF  dMP dMP dP .dMP dMP              dP
01018	//  dMP     dMP dMP  dMP dMP  VMMMP" dMMMMMP       dMMMP
01019	//
01020	//=======================================================
01021	
01022	STATE STA_Phase03_A_StayHidden
01023	{
01024		EVENT BeginState()
01025		{
01026			Global.BeginState();
01027			SetTimer( 10.0, false );
01028			bAntiFuite=false;
01029		}
01030	
01031		EVENT EndState()
01032		{
01033			bInvicible=false;
01034	//		bAntiFuite=true;
01035		}
01036	
01037		EVENT Timer( )
01038		{
01039			Mangouste.DM.StartDialogue( 3 ); // On va arreter de jouer maintenant
01040			SetTimer2( 1.0, false );
01041		}
01042	
01043		EVENT Timer2( )
01044		{
01045			GotoState( 'STA_Phase03_B_FreeFight' );
01046		}
01047	
01048		EVENT Tick( float dt )
01049		{
01050			DesiredPosition =
01051				Missiles[ MangousteWantedMissileIndex ].Location
01052			+
01053				620
01054			*
01055				Normal(
01056					Hvector(
01057						PC.Pawn.Location,
01058						Missiles[ MangousteWantedMissileIndex ].Location
01059						)
01060					);
01061	
01062			SimpleSteering( dt, 100 );
01063			
01064			Global.Tick( dt );
01065		}
01066	}
01067	
01068	STATE STA_Phase03_B_FreeFight
01069	{
01070		EVENT BeginState()
01071		{
01072			SetWantedSpeed(0.50);
01073			Global.BeginState();
01074			Mangouste.PeripheralVision=0.70;
01075		}
01076	
01077		EVENT EndState()
01078		{
01079	//		SetTimer( 0, false );
01080			bFire=0;
01081		}
01082	
01083		EVENT Tick(float dt)
01084		{
01085			LOCAL VECTOR vTemp;
01086			LOCAL FLOAT f;
01087	
01088			vTemp = PC.Pawn.Location - Missiles[0].Location;
01089			vTemp.Z = 0;
01090	//		Log( vSize( (PC.Pawn.Location - Missiles[0].Location )*vect(1,1,0)) );
01091	
01092			f = FMax( 0, vSize( vTemp )-1750 );
01093	
01094			DesiredPosition = PC.Pawn.Location;
01095			DesiredOrientation = PC.Pawn.Location - Mangouste.Location;
01096	
01097			BurstFirePlayer( 0.45, 0.55 );
01098	
01099			SimpleSteering( dt, 800+f );
01100	
01101			Global.Tick( dt );
01102		}
01103	}
01104	
01105	STATE STA_Phase03_To_Fall
01106	{
01107		EVENT BeginState()
01108		{
01109			Global.BeginState();
01110			Phase++;
01111			Pawn.velocity = vect(0,0,0);
01112			Pawn.acceleration = vect(0,0,0);
01113	
01114			PC.GotoState( 'NoControl' );
01115			Level.bCineFrame=false;
01116			bInvicible=true;
01117			XIIIBaseHud(PC.MyHud).AddBossBar( none );
01118			Level.AdjustDifficulty = 0;
01119			GotoState( 'STA_Dying' );
01120	
01121		}
01122	}
01123	
01124	//      ==========================================================================
01125	//
01126	//      dMMMMMP .aMMMb  dMP dMP dMMMMMP     dMMMMb  dMP dMP dMP dMMMMb  .aMMMMP
01127	//     dMP     dMP"dMP dMP.dMP dMP         dMP VMP dMP.dMP amr dMP dMP dMP"
01128	//    dMMMP   dMMMMMP dMMMMK" dMMMP       dMP dMP  VMMMMP dMP dMP dMP dMP MMP"
01129	//   dMP     dMP dMP dMP"AMF dMP         dMP.aMP dA .dMP dMP dMP dMP dMP.dMP
01130	//  dMP     dMP dMP dMP dMP dMMMMMP     dMMMMP"  VMMMP" dMP dMP dMP  VMMMP"
01131	//  
01132	//==========================================================================
01133	
01134	STATE STA_Dying
01135	{
01136		EVENT BeginState()
01137		{
01138			Global.BeginState();
01139			Missiles[0].bIsUp=true;
01140			Missiles[1].bIsUp=true;
01141			Missiles[2].bIsUp=true;
01142			Missiles[3].bIsUp=true;
01143			Missiles[4].bIsUp=true;
01144			ComputeMangousteNearestMissile();
01145			SetWantedSpeed(0.08);
01146			Focus=MangousteNearestMissile;
01147			if ( Mangouste.DM.bSpeaking )
01148			{
01149				StopVoice( );
01150				XIIIBaseHud( PC.MyHud ).HudDlg.RemoveMe();
01151				Mangouste.DM.EndOfVoice( );
01152			}
01153	
01154			Mangouste.DM.Lines[10].SpeakersToWarnAtTheEndOfThisLine="0";
01155			Mangouste.DM.StartDialogue( 10 ); // ...
01156			Mangouste.GotoState( 'STA_STAGGERING' );
01157			bTextFinished=false;
01158	//		Mangouste.SetCollision(false, false, false );
01159		}
01160	
01161		EVENT EndState()
01162		{
01163			PC.GotoState( 'PlayerWalking' );
01164			PC.Pawn.bCanClimbLadders=true;
01165		}
01166	
01167		EVENT Tick(float dt)
01168		{
01169	//		Focus=none;
01170	//		FocalPoint=FocalPoint*0.75+0.25*(Pawn.Location+Normal(Pawn.Velocity)*250);
01171	
01172			DesiredOrientation = HVector(Pawn.Location,MangousteNearestMissile.Location);
01173			FocalPoint = MangousteNearestMissile.Location; //Pawn.Location + 256 * NORMAL( DesiredOrientation );
01174	
01175			DesiredPosition = MangousteNearestMissile.Location-500*Normal(DesiredOrientation);
01176			SimpleSteering( dt, 10, true );
01177			PC.SetRotation( PC.Rotation + RotDiff( ROTATOR( Mangouste.Location - PC.Pawn.Location ), PC.Rotation, 90*182*dt ) );
01178		}
01179	/*
01180		EVENT Hitwall( vector v, actor a )
01181		{
01182			GotoState('STA_StartFalling');
01183	//		Hitwall( v,a ),
01184		}
01185	*/
01186		FUNCTION CineWarn( actor Other )
01187		{
01188			bTextFinished = true;
01189			GotoState( 'STA_Falling' );
01190		}
01191	
01192		FUNCTION EndOfMove()
01193		{
01194			Global.EndOfMove();
01195			GotoState('STA_StartFalling');
01196		}
01197	}
01198	
01199	STATE STA_StartFalling
01200	{
01201		EVENT BeginState( )
01202		{
01203			Global.BeginState();
01204	//		SetTimer(3,false);
01205			Pawn.LoopAnim('MortMangousteDebut',,0.1);
01206	//		Mangouste.SetCollision(false, false, false );
01207			Mangouste.SetCollisionSize( 24, Mangouste.CollisionHeight );
01208			SetWantedSpeed(0.15);
01209			DesiredPosition=Pawn.Location;
01210		}
01211	
01212		EVENT Tick( float dt )
01213		{
01214			if ( vSize( DesiredPosition-Pawn.Location )>5 )
01215				Pawn.ChangeAnimation();
01216			else
01217				if ( bTextFinished )
01218					GotoState( 'STA_Falling' );
01219	
01220			DesiredPosition=Pawn.Location;
01221			Pawn.Velocity=vect(15.0,0,0)>>Pawn.Rotation;
01222		}
01223	
01224		FUNCTION CineWarn( actor Other )
01225		{
01226			bTextFinished = true;
01227		}
01228	}
01229	
01230	STATE STA_Falling
01231	{
01232		EVENT BeginState()
01233		{
01234			Global.BeginState();
01235			TriggerEvent( Pawn.Event, self, Pawn );
01236			Pawn.PlayAnim('MortMangousteFin',,0.1);
01237			Pawn.SetCollision( false, false, false );
01238	//		Pawn.Acceleration=vect(0,0,-10);
01239		}
01240	
01241		EVENT AnimEnd( int Channel )
01242		{
01243			if ( Channel==0 && Mangouste.SimAnim.AnimSequence=='MortMangousteFin' )
01244			{
01245	/*			LOG ( "ANIMEND" );
01246				LOG ( "Channel"@Channel );
01247				LOG ( "Mangouste.SimAnim.AnimSequence"@Mangouste.SimAnim.AnimSequence );
01248				LOG ( "Mangouste.SimAnim.AnimFrame"@Mangouste.SimAnim.AnimFrame );
01249				Log( "gna gna");*/
01250				Mangouste.SetInvisibility( true );
01251				Mangouste.DM.StartDialogue( 11 ); // ...
01252	//			GotoState( '' );
01253	//			GotoState( 'Final' );
01254			}
01255		}
01256	
01257	}
01258	/*
01259	STATE STA_Final
01260	{
01261		EVENT BeginState( )
01262		{
01263			Enable( 'Tick' );
01264		}
01265	
01266		EVENT Tick(float dt)
01267		{
01268	//		if ( !Mangouste.DM.bSpeaking )
01269	//		{
01270	//		}
01271		}
01272	}
01273	*/
01274	
01275	//      ======================================= 
01276	// 
01277	//      dMMMMMMMMb  dMP .dMMMb  .aMMMb  
01278	//     dMP"dMP"dMP amr dMP" VP dMP"VMP  
01279	//    dMP dMP dMP dMP  VMMMb  dMP       
01280	//   dMP dMP dMP dMP dP .dMP dMP.aMP amr
01281	//  dMP dMP dMP  MP  VMMMP"  VMMMP" dMP 
01282	// 
01283	//======================================= 
01284	
01285	
01286	
01287	
01288	defaultproperties
01289	{
01290	     AttackSides(0)=-1
01291	     AttackSides(1)=-1
01292	     AttackSides(2)=1
01293	     AttackSides(3)=1
01294	     AttackSides(4)=-1
01295	     bCineControlAnims=False
01296	}

End Source Code