XIDCine
Class MangousteSSH1Pawn

source: C:\XIII\XIDCine\Classes\MangousteSSH1Pawn.uc
Core.Object
   |
   +--Engine.Actor
      |
      +--Engine.Pawn
         |
         +--XIII.XIIIPawn
            |
            +--XIDPawn.BaseSoldier
               |
               +--XIDCine.Cine2
                  |
                  +--XIDCine.MangousteSSH1Pawn
Direct Known Subclasses:None

class MangousteSSH1Pawn
extends XIDCine.Cine2

// ============================================================================= // // 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 -------- PAWN // by iKi //=============================================================================
Variables
 MeshAnimation GenericAnimations
 MangousteSSH1Controller MangousteController
 SpecificAnimations3, SpecificAnimations4
 XIIIWeapon Uzis[2]
 bFireLeft, bFireRight
 vLeftTarget, vRightTarget

States
STA_Phase01_VaporPaf, STA_STAGGERING, STA_Phase00, STA_WaitRealStart, STA_Init

Function Summary
 void KillVignettes( )
     
/*


State STA_Phase01_VaporPaf Function Summary


State STA_STAGGERING Function Summary
 void PlayMoving()
 name GetWeaponBoneFor(Inventory I)
 void RightUziFire(vector pos)
 void LeftUziFire(vector pos)
 void InitializeInventory()
 void PlayMoving()


State STA_Phase00 Function Summary
 void PlayMoving()


State STA_WaitRealStart Function Summary


State STA_Init 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 -------- PAWN
00009	//                                                                             by iKi
00010	//=============================================================================
00011	
00012	class MangousteSSH1Pawn extends Cine2
00013		hidecategories(Alliances,BaseSoldier,BaseSoldier_Advanced,Cine_Behavior,Cine_Misc,
00014			Cine_Script,Cine_Shoot,Cine_Sound,GroupeAlarme,Lighting,Pawn);
00015	
00016	//        ###########################################################################
00017	//       ##                                                                       ####
00018	//      ##  dMP dMP .aMMMb  dMMMMb  dMP .aMMMb  dMMMMb  dMP     dMMMMMP .dMMMb   ####
00019	//     ##  dMP dMP dMP"dMP dMP.dMP amr dMP"dMP dMP"dMP dMP     dMP     dMP" VP  ####
00020	//    ##  dMP dMP dMMMMMP dMMMMK" dMP dMMMMMP dMMMMK" dMP     dMMMP    VMMMb   #### 
00021	//   ##   YMvAP" dMP dMP dMP"AMF dMP dMP dMP dMP.aMF dMP     dMP     dP .dMP  #### 
00022	//  ##     VP"  dMP dMP dMP dMP dMP dMP dMP dMMMMP" dMMMMMP dMMMMMP  VMMMP"  ####
00023	// ##                                                                       ####  
00024	//#############################################################################
00025	//  ##########################################################################
00026	
00027	VAR(Mangouste) CWndSFXTrigger SFXVapor;
00028	VAR(Mangouste) CWndSFXTrigger SFXSpeach;
00029	VAR(Mangouste) CWndSFXTrigger SFXRun;
00030	VAR(Mangouste) CWndSFXTrigger SFXDeath;
00031	VAR(Mangouste) CWndSFXTrigger SFXBody;
00032	VAR(Mangouste) CWndSFXTrigger SFXBody2;
00033	VAR(Mangouste) DialogueManager DM;
00034	
00035	VAR XIIIWeapon		Uzis[2];
00036	VAR bool			bFireLeft, bFireRight;
00037	VAR Vector			vLeftTarget, vRightTarget;
00038	VAR MeshAnimation	GenericAnimations;
00039	VAR MeshAnimation	SpecificAnimations, SpecificAnimations2, SpecificAnimations3, SpecificAnimations4;
00040	const LEFTARMCHANNEL=12;
00041	const RIGHTARMCHANNEL=13;
00042	const ALPHAON=0.75;
00043	VAR TRANSIENT MangousteSSH1Controller MangousteController;
00044	
00045	CONST PHASE_LIMIT1=0.65; // 0.65
00046	CONST PHASE_LIMIT2=0.13; // 0.15
00047	CONST PHASE_LIMIT3=0.03; // 0.03
00048	
00049	//        #####################################################
00050	//       ##                                                  ####
00051	//      ##  .aMMMMP dMP    .aMMMb  dMMMMb  .aMMMb  dMP      ####
00052	//     ##  dMP"    dMP    dMP"dMP dMP"dMP dMP"dMP dMP      ####
00053	//    ##  dMP MMP"dMP    dMP dMP dMMMMK" dMMMMMP dMP      ####
00054	//   ##  dMP.dMP dMP    dMP.aMP dMP.aMF dMP dMP dMP      ####
00055	//  ##   VMMMP" dMMMMMP VMMMP" dMMMMP" dMP dMP dMMMMMP  ####
00056	// ##                                                  ####
00057	//########################################################
00058	//  #####################################################
00059	
00060	auto STATE STA_Init
00061	{
00062	begin:
00063		do
00064		{
00065			sleep(0.1);
00066			if ( XIIIGameInfo(Level.Game) != none )
00067			{
00068				mi = XIIIGameInfo(Level.Game).MapInfo;
00069				if ( mi!=none )
00070					PC = mi.XIIIController;
00071			}
00072		} until (PC!=none);
00073		sleep(1);
00074		bHidden=true;
00075		RefreshDisplaying();
00076		MangousteController = MangousteSSH1Controller(Controller);
00077		SetCollision(false,false,false);
00078		stop;
00079	}
00080	/*
00081	FUNCTION KillVignettes( )
00082	{
00083		LOCAL CWndOnTrigger w;
00084		
00085		XIIIBaseHUD( XIIIGameInfo( Level.Game ).MapInfo.XIIIController.MyHud ).EraseCartoonWindows();
00086		
00087		foreach DynamicActors ( class'CWndOnTrigger', w )
00088		{
00089			w.Timer();
00090		}
00091	}
00092	*/
00093	EVENT Trigger(Actor Other, Pawn EventInstigator)
00094	{
00095		GotoState( 'STA_WaitRealStart' );
00096	//	MangousteController.GotoState( 'STA_AntiCharge' );
00097	}
00098	
00099	STATE STA_WaitRealStart
00100	{
00101		EVENT BeginState()
00102		{
00103			LOCAL VECTOR vTemp;
00104			
00105			vTemp = MangousteController.Missiles[0].Location+560*Normal(MangousteController.Missiles[0].Location-PC.Pawn.Location);
00106			vTemp.Z = Location.Z;
00107			SetLocation( vTemp );
00108		}
00109	
00110		EVENT EndState()
00111		{
00112			LOCAL int i;
00113	
00114			AnimBlendParams(LEFTARMCHANNEL,0.00,0,0,'x L Clavicle');
00115			AnimBlendParams(RIGHTARMCHANNEL,0.00,0,0,'x R Clavicle');
00116			bHidden=false;
00117			RefreshDisplaying();
00118			SetCollision(true,true,false);
00119			Loopanim('Acquiesce'); //waitpistoletaccroupi');
00120			SFXSpeach.CWndDuration[0] = GetWaveDuration( "SSH102B_Mangouste_00" );
00121			SFXSpeach.animationDuration[0] = SFXSpeach.CWndDuration[0];
00122			SFXSpeach.Trigger( none, Self );
00123			TriggerEvent( 'CombatMangouste', self, self );
00124			for ( i=0; i<DM.Lines.Length; i++ )
00125			{
00126				DM.Lines[i].ExpectedEventBeforeNext=name;
00127			}
00128		
00129			DM.StartDialogue( 0 );
00130			bReloadingWeapon=false;
00131			
00132			MangousteController.GotoState( 'STA_Phase00' );
00133		}
00134	
00135		EVENT Tick( float dt )
00136		{
00137			LOCAL VECTOR vTemp;
00138	
00139			vTemp = PC.Pawn.Location - MangousteController.Missiles[0].Location;
00140			vTemp.Z = 0;
00141	//		Log( vSize( (PC.Pawn.Location - Missiles[0].Location )*vect(1,1,0)) );
00142	
00143			if ( vSize( vTemp )<1750 )
00144			{
00145				PC.GotoState( 'NoControl' );
00146				GotoState( 'STA_Phase00' );
00147			}
00148	/*		if ( PC.IsInState( 'NoControl' ) )
00149				PC.SetRotation( PC.Rotation + RotDiff( ROTATOR( Mangouste.Location - PC.Pawn.Location ), PC.Rotation, 90*182*dt ) );
00150	
00151			Global.Tick( dt );*/
00152		}
00153	}
00154	
00155	STATE STA_Phase00
00156	{
00157		FUNCTION PlayMoving()
00158		{
00159			LOCAL VECTOR vTemp;
00160	
00161			if (velocity==vect(0,0,0))
00162				LoopAnim( 'WaitNeutre4', , 0.25 );
00163			else
00164				LoopAnim( 'Run', vSize(Velocity)/RunAnimVelocity , 0.25 );
00165		}
00166	}
00167	
00168	STATE STA_STAGGERING
00169	{
00170		EVENT BeginState()
00171		{
00172			LOG ( "STA_STAGGERING :: BeginState(" );
00173		}
00174	
00175		EVENT EndState()
00176		{
00177			LOG ( "STA_STAGGERING :: EndState(" );
00178		}
00179	
00180		FUNCTION PlayMoving()
00181		{
00182			AnimBlendToAlpha(LEFTARMCHANNEL,0.00,0.25);
00183			AnimBlendToAlpha(RIGHTARMCHANNEL,0.00,0.25);
00184			LoopAnim('morttitube',,0.25);
00185		}
00186	/*
00187		EVENT Hitwall( vector v, actor a )
00188		{
00189			MangousteController.Hitwall( v,a );
00190		}*/
00191	}
00192	
00193	
00194	FUNCTION TakeDamage( int Damage, Pawn EventInstigator, vector HitLocation, vector Momentum, class<DamageType> DamageType )
00195	{
00196		MangousteController.NotifyTakeDamage( Damage, EventInstigator, HitLocation, Momentum, DamageType );
00197		if (!MangousteController.bInvicible)
00198		{
00199			if ( ( Health-PHASE_LIMIT1*MaxHealth ) * ( Health-Damage-PHASE_LIMIT1*MaxHealth ) < 0 || ( Health-Damage-PHASE_LIMIT1*MaxHealth==0 ))
00200			{
00201			//	Log ( "REQUEST PHASE CHANGE 1->2" );
00202				Health=PHASE_LIMIT1*MaxHealth;
00203				Controller.GotoState('STA_Phase01_To_Phase02');
00204			}
00205			else
00206			{ //Log( "==>"@( Health-PHASE_LIMIT2*MaxHealth ) * ( Health-Damage-PHASE_LIMIT2*MaxHealth ) );
00207				if ( ( Health-PHASE_LIMIT2*MaxHealth ) * ( Health-Damage-PHASE_LIMIT2*MaxHealth ) < 0 || (Health-Damage-PHASE_LIMIT2*MaxHealth==0) )
00208				{
00209				//	Log ( "REQUEST PHASE CHANGE 2->3" );
00210					Health=PHASE_LIMIT2*MaxHealth;
00211					Controller.GotoState('STA_Phase02_To_Phase03');
00212				}
00213				else
00214				{ //Log( "==>"@( Health-PHASE_LIMIT2*MaxHealth ) * ( Health-Damage-PHASE_LIMIT2*MaxHealth ) );
00215					if ( ( Health-PHASE_LIMIT3*MaxHealth ) * ( Health-Damage-PHASE_LIMIT3*MaxHealth ) < 0 || (Health-Damage-PHASE_LIMIT3*MaxHealth==0) )
00216					{
00217					//	Log ( "REQUEST PHASE CHANGE 2->3" );
00218						Health=PHASE_LIMIT3*MaxHealth;
00219						Controller.GotoState('STA_Phase03_To_Fall');
00220					}
00221				}
00222			}
00223	
00224			if (!MangousteController.bInvicible)
00225			{
00226				if ( MangousteController.IsInState('STA_AntiFuite') )
00227					Health-=0.3*Damage;
00228				else
00229					Health-=Damage;
00230	
00231				if (Health<0)
00232				{
00233					Log ( 1/0 );
00234					Controller.GotoState('STA_Dying');
00235				}
00236				else
00237					Super.TakeDamage(0, EventInstigator, HitLocation, Momentum, DamageType );
00238			}
00239		}
00240	
00241	}
00242	
00243	EVENT PostBeginPlay()
00244	{
00245		LOCAL int i;
00246	
00247		LinkSkelAnim ( GenericAnimations );
00248		LinkSkelAnim ( SpecificAnimations );
00249		LinkSkelAnim ( SpecificAnimations2 );
00250		LinkSkelAnim ( SpecificAnimations3 );
00251		LinkSkelAnim ( SpecificAnimations4 );
00252	
00253		if ( (CineControllerClass != None) && (CineController == None) )
00254			CineController = spawn( CineControllerClass );
00255		if ( CineController != None )
00256			CineController.Possess( self );
00257	
00258		Controller = CineController;
00259		CineController.Pawn=Self;
00260		CineController.MyPawn=Self;
00261		CineController.PC=XIIIPlayerController(Level.ControllerList);
00262	
00263		InitializeInventory();
00264	
00265		MaxHealth = Health;
00266	}
00267	
00268	function InitializeInventory()
00269	{
00270		LOCAL Weapon inv;
00271		LOCAL rotator r;
00272		LOCAL vector l;
00273		
00274		//initialize two uzis
00275		inv = spawn(class'XIII.MiniUziPlus', self);
00276		if (inv != None)
00277		{
00278			inv.gotostate('');
00279			inv.GiveTo(Self);
00280			inv.SetBase(Self);     
00281			Uzis[0]=XIIIWeapon(inv);
00282			inv.AttachToPawn(self);
00283		} 
00284		inv = spawn(class'XIII.MiniUziPlus', self);
00285		if (inv != None)
00286		{
00287			inv.gotostate('');
00288			inv.Instigator = Self;
00289			AddInventory( inv );
00290		
00291			inv.bTossedOut = false;
00292			inv.GiveAmmo(self); // include GiveAltAmmo(Other);
00293			inv.AmmoType.AddAmmo(inv.ReloadCount);
00294			inv.ClientWeaponSet(true);
00295			inv.bHidden = true;
00296			inv.RefreshDisplaying();
00297			
00298			inv.SetBase(Self);     
00299			Uzis[1]=XIIIWeapon(inv);
00300			inv.AttachToPawn(self);
00301			r=inv.ThirdPersonActor.RelativeRotation;
00302			r.Roll+=32768;
00303			inv.ThirdPersonActor.SetRelativeRotation(r);
00304			l=inv.ThirdPersonActor.RelativeLocation;
00305			l.Z-=5;
00306			inv.ThirdPersonActor.SetRelativeLocation(l);
00307		} 
00308	}
00309	
00310	simulated function PlayFiring(float Rate, name FiringMode)
00311	{
00312	    WeaponMode = FiringMode;
00313	    bWeaponFiring=true;
00314	}
00315	
00316	FUNCTION LeftUziFire(vector pos)
00317	{
00318		vLeftTarget = pos;
00319		bFireLeft = true;
00320	}	
00321	
00322	FUNCTION RightUziFire(vector pos)
00323	{
00324		vRightTarget = pos;
00325		bFireRight = true;
00326	}	
00327	
00328	EVENT Tick(float dt)
00329	{
00330		Uzis[0].MySlave=none;
00331		Uzis[1].MySlave=none;
00332		Uzis[0].SlaveOf=none;
00333		Uzis[1].SlaveOf=none;
00334		Uzis[0].bEnableSlave=false;
00335		Uzis[1].bEnableSlave=false;
00336	
00337		if ( bFireLeft ) 
00338		{
00339			Controller.SetRotation( ROTATOR( vLeftTarget - Uzis[1].Location ) );
00340			AnimBlendToAlpha(LEFTARMCHANNEL,ALPHAON,0.1);
00341			LoopAnim('TirUziG',,0.1,LEFTARMCHANNEL);
00342			Uzis[1].Fire(0.0);
00343			bFireLeft = false;
00344		}
00345		else
00346		{
00347			AnimBlendToAlpha(LEFTARMCHANNEL,0,0.1);
00348		}
00349	
00350		if ( bFireRight )
00351		{
00352			Controller.SetRotation( ROTATOR( vRightTarget - Uzis[0].Location ) );
00353			AnimBlendToAlpha(RIGHTARMCHANNEL,ALPHAON,0.1);
00354			LoopAnim('TirUziD',,0.1,RIGHTARMCHANNEL);
00355			Uzis[0].Fire(0.0);
00356			bFireRight = false;
00357		}
00358		else
00359		{
00360			AnimBlendToAlpha(RIGHTARMCHANNEL,0,0.1);
00361		}
00362	}
00363	
00364	EVENT SetInitialState( )
00365	{
00366		MemoColActors =		bCollideActors;
00367		MemoBlockActors =	bBlockActors;
00368		MemoBlockPlayers =	bBlockPlayers;
00369	
00370		bScriptInitialized = true;
00371	//	MyOldRotYaw = Rotation.Yaw;
00372	
00373		GotoState( 'Auto' );
00374	}
00375	
00376	EVENT SeePlayer( Pawn Seen )
00377	{
00378	    Controller.SeePlayer(Seen);
00379	}
00380	
00381	FUNCTION name GetWeaponBoneFor(Inventory I)
00382	{
00383		if (Uzis[0]==XIIIWeapon(I))
00384			return 'X R Hand';
00385		else if (Uzis[1]==XIIIWeapon(I))
00386			return 'X L Hand';
00387		return '';
00388	}
00389	
00390	EVENT Bump(actor a)
00391	{
00392	}
00393	
00394	EVENT ChangeAnimation()
00395	{
00396		PlayMoving();
00397	}
00398	
00399	FUNCTION PlayMoving()
00400	{
00401		LOCAL float fSpeed,fAngle,fFrontBack,fLeftRight;
00402		LOCAL VECTOR vTemp;
00403	
00404	//	if (health>0)
00405	//	{
00406			if (velocity==vect(0,0,0))
00407				LoopAnim( 'WaitNeutre4', , 0.25 );
00408			else
00409			{
00410				fSpeed=vSize(Velocity);
00411				
00412				if ( Controller.Focus!=none )
00413					fAngle = ( ( ( ROTATOR( PC.Pawn.Location - Controller.Focus.Location ).Yaw - ROTATOR( Velocity ).Yaw ) + 32768 ) & 65535 ) - 32768;
00414				else
00415					fAngle = ( ( ( ROTATOR( PC.Pawn.Location - Controller.FocalPoint ).Yaw - ROTATOR( Velocity ).Yaw ) + 32768 ) & 65535 ) - 32768;
00416	
00417				if ( -12288<fAngle && fAngle<12288 )
00418				{
00419					LoopAnim( 'Run', fSpeed/RunAnimVelocity , 0.25 );
00420				}
00421				else
00422					if ( 12288<fAngle && fAngle<20480 )
00423					{
00424						LoopAnim( 'StrafeGSpeed', 1, 0.25 );
00425					}
00426					else
00427						if ( -12288<fAngle && fAngle<-20480 )
00428						{
00429							LoopAnim( 'StrafeDSpeed', 1, 0.25);
00430						}
00431						else
00432						{
00433							LoopAnim( 'BackPaddle', fSpeed/RunAnimVelocity, 0.25);
00434						}
00435	
00436	/*
00437				if ( fFrontBack>=0 )
00438					LoopAnim( 'Run', fSpeed/RunAnimVelocity , 0.25 );
00439				else
00440					LoopAnim( 'BackPaddle', fSpeed/RunAnimVelocity , 0.25 );
00441	*/
00442	/*			if ( Abs( fLeftRight )>100 )
00443				{
00444					AnimBlendToAlpha(STRAFFECHANNEL,1.0,0.25);
00445	
00446					if ( fLeftRight>=0 )
00447						LoopAnim( 'StrafeGSpeed' , 1  , 0.25, STRAFFECHANNEL );
00448					else
00449						LoopAnim( 'StrafeDSpeed' , 1  , 0.25, STRAFFECHANNEL );
00450				}
00451				else
00452					AnimBlendToAlpha(STRAFFECHANNEL,0.00,0.25);
00453	*/
00454	
00455	//			AnimBlendToAlpha(STRAFFECHANNEL,0.00,0.25);
00456			}
00457	//	}
00458	//	else
00459	//	{
00460	//		AnimBlendToAlpha(LEFTARMCHANNEL,0.00,0.25);
00461	//		AnimBlendToAlpha(RIGHTARMCHANNEL,0.00,0.25);
00462	//		LoopAnim(WalkAnim,,0.25);
00463	//	}
00464	}
00465	
00466	STATE STA_Phase01_VaporPaf
00467	{
00468		EVENT BeginState( )
00469		{
00470			AnimBlendToAlpha( LEFTARMCHANNEL,  0.00, 0.25 );
00471			AnimBlendToAlpha( RIGHTARMCHANNEL, 0.00, 0.25 );
00472			LoopAnim( 'paf1', , 0.25, 0 );
00473		}
00474	
00475	/*	EVENT EndState( )
00476		{
00477			KillVignettes( );
00478		}*/
00479	Begin:
00480	//	KillVignettes( );
00481		Sleep(0.25);
00482		SFXVapor.CWndDuration[0]=3;
00483		SFXVapor.Trigger( none, self );
00484	}
00485	
00486	
00487	
00488	defaultproperties
00489	{
00490	     GenericAnimations=MeshAnimation'XIIIPersosG.MigA'
00491	     SpecificAnimations=MeshAnimation'XIIIPersos.MANGOUSTEspeA'
00492	     SpecificAnimations2=MeshAnimation'XIIIPersos.MCCALLspeA'
00493	     SpecificAnimations3=MeshAnimation'XIIIPersos.willardspeA'
00494	     SpecificAnimations4=MeshAnimation'XIIIPersos.JOHANSSONspeA'
00495	     DefaultAnim="TirUziGD"
00496	     Reaction(0)=(eCS_Stimulus=CS_MapStart,TabActionIndex=1,bUneSeuleFois=True)
00497	     InitialSpeed=1.800000
00498	     InitialRotationSpeed=450.000000
00499	     InitialAccelerationFactor=3.000000
00500	     CineControllerClass=Class'XIDCine.MangousteSSH1Controller'
00501	     ImposedEndMovePosition=False
00502	     SightRadius=3000.000000
00503	     PawnName="Mangoose"
00504	     Health=3000
00505	     bBlockPlayers=False
00506	     Mesh=SkeletalMesh'XIIIPersos.MangousteM'
00507	}

End Source Code