#include "scripts/bp_common.txt"
#include "scripts/map/common_level_script.txt"

bool bStartedIntro;
kActor @g_pCampaigner = null;
kActor @beam1 = null;
kActor @beam2 = null;
kActor @beam3 = null;
kActor @beam4 = null;
kActor @beam5 = null;
kActor @beam6 = null;
kActor @beam7 = null;
kActor @beam8 = null;
kActor @beam9 = null;
kActor @beam10 = null;
kActor @beam11 = null;
kActor @beam12 = null;
bool showingBeams = false;
bool isFloorSticky = false;
bool lastPlayerGrounded = true;
float floorStickTime = 0.0f;
kVec3 floorStickPos;
kActor @rocket1 = null;
kActor @rocket2 = null;
kActor @rocket3 = null;
kActor @rocket4 = null;
kActor @rocket5 = null;
//------------------------------------------------------------------------------------------------------------------------
// Start
//------------------------------------------------------------------------------------------------------------------------
$script 0
{
	ActorFactory.Spawn("BP_WallForceField", -1624, 490, 52, Math::Deg2Rad(90), 0);
	ActorFactory.Spawn("BP_WallForceField", -1624, -320, 52, Math::Deg2Rad(90), 0);
	ActorFactory.Spawn("BP_WallForceField", -1624, -64, 52, Math::Deg2Rad(90), 0);

	@rocket1 = ActorFactory.Spawn("DummyActor", -1260, 132, 480, 0, 53);
	@rocket2 = ActorFactory.Spawn("DummyActor", 710, -666, 368, 0, 148);
	@rocket3 = ActorFactory.Spawn("DummyActor", 948, -278, 295, 0, 110);
	@rocket4 = ActorFactory.Spawn("DummyActor", 955, 483, 295, 0, 94);
	@rocket5 = ActorFactory.Spawn("DummyActor", 726, 865, 376, 0, 135);
	
	@beam1 = MapSpawnBeamTrapHorzX(kVec3(-1300, -473, 72), kVec3(-1300, 662, 72), 2.25f, 28);
	@beam2 = MapSpawnBeamTrapHorzX(kVec3(-1300, 662, 72), kVec3(-1300, -473, 72), 2.5f, 29);
	
	@beam3 = MapSpawnBeamTrapHorzY(kVec3(773, -800, 20), kVec3(-1047, -800, 20), 5.0f, 149);
	@beam4 = MapSpawnBeamTrapHorzY(kVec3(-1047, -1100, 20), kVec3(773, -1100, 20), 5.4f, 149);
	@beam5 = MapSpawnBeamTrapHorzY(kVec3(773, -500, 20), kVec3(-1047, -500, 20), 5.6f, 146);
	
	@beam6 = MapSpawnBeamTrapHorzY(kVec3(-1047, -200, 20), kVec3(773, -200, 20), 4.8f, 146);
	
	@beam7 = MapSpawnBeamTrapHorzY(kVec3(773, 100, 20), kVec3(-1047, 100, 20), 5.1f, 146);
	@beam8 = MapSpawnBeamTrapHorzY(kVec3(-1047, 400, 20), kVec3(773, 400, 20), 4.9f, 146);
	@beam9 = MapSpawnBeamTrapHorzY(kVec3(773, 700, 20), kVec3(-1047, 700, 20), 5.3f, 146);
	@beam10 = MapSpawnBeamTrapHorzY(kVec3(-1047, 1000, 20), kVec3(773, 1000, 20), 5.2f, 146);

	@beam11 = MapSpawnBeamTrapHorzX(kVec3(960, 749, 40), kVec3(960, -549, 40), 2.4f, 131);
	@beam12 = MapSpawnBeamTrapHorzX(kVec3(960, -549, 40), kVec3(960, 749, 40), 2.6f, 91);
	
	HideBeams();
	
	GameVariables.GetBool("bStartedHubIntro", bStartedIntro);
	@g_pCampaigner = World.GetActorByTID(400);
	
	if (bStartedIntro) {
		
		World.ChangeAreaArg(0, 4, 5);
		World.ChangeAreaArg(0, 5, 512);
		World.ChangeAreaFlag(0, AAF_DAMAGE, true);
	
		 
		// isFloorSticky = true;

		Game.CallDelayedMapScript(12, instigator, 0); //Game Update
		
		Game.CallDelayedMapScript(13, instigator, 0); //Update Explosions
		Game.CallDelayedMapScript(14, instigator, 5.0f); //Update Smoke screen
		Game.CallDelayedMapScript(15, instigator, 0); //Update Gravity
		
		Game.CallDelayedMapScript(8, instigator, 0);
	} else {
		Game.CallDelayedMapScript(10, instigator, 0); //Start Opening Intro
	}	
}
void HideBeams() {
	showingBeams = false;
	beam1.Flags() |= AF_NODRAW;
	beam2.Flags() |= AF_NODRAW;
	beam3.Flags() |= AF_NODRAW;
	beam4.Flags() |= AF_NODRAW;
	beam5.Flags() |= AF_NODRAW;
	beam6.Flags() |= AF_NODRAW;
	beam7.Flags() |= AF_NODRAW;
	beam8.Flags() |= AF_NODRAW;
	beam9.Flags() |= AF_NODRAW;
	beam10.Flags() |= AF_NODRAW;
	beam11.Flags() |= AF_NODRAW;
	beam12.Flags() |= AF_NODRAW;
}
void ShowBeams() {
	showingBeams = true;
	beam1.Flags() &= ~AF_NODRAW;
	beam2.Flags() &= ~AF_NODRAW;
	beam3.Flags() &= ~AF_NODRAW;
	beam4.Flags() &= ~AF_NODRAW;
	beam5.Flags() &= ~AF_NODRAW;
	beam6.Flags() &= ~AF_NODRAW;
	beam7.Flags() &= ~AF_NODRAW;
	beam8.Flags() &= ~AF_NODRAW;
	beam9.Flags() &= ~AF_NODRAW;
	beam10.Flags() &= ~AF_NODRAW;
	beam11.Flags() &= ~AF_NODRAW;
	beam12.Flags() &= ~AF_NODRAW;
}
//------------------------------------------------------------------------------------------------------------------------
// Killed Campaigner
//------------------------------------------------------------------------------------------------------------------------
$script 1
{
	Game.HaltMapScript(12); //Update Game
	Game.HaltMapScript(13); //Update Explosions
	Game.HaltMapScript(14); //Update Smoke screen
	Game.HaltMapScript(15); //Update Gravity
	HideBeams();
	
    Camera.StartCinematic();
    PlayLoop.RemoveBossActor();
    
    Camera.SetLookAtActor(g_pCampaigner);
    Camera.fov = 74.0f;
    
    delay(0.35f);
    
    g_pCampaigner.SetPosition(kVec3(30*GAME_SCALE, 10*GAME_SCALE, 0.0f));
    g_pCampaigner.Yaw() = Math::Deg2Rad(85.0f);
    g_pCampaigner.Origin().z = g_pCampaigner.FloorHeight();
    g_pCampaigner.AnimState().Set(anim_aiDeathStand, 4.0f, ANF_ROOTMOTION);
    g_pCampaigner.RunFxEvent("Campaigner_Death");
    g_pCampaigner.SetHeadTrackTarget(null);
	g_pCampaigner.Scale() = kVec3(0.75f, 0.75f, 0.75f);
    
    Player.Actor().Flags() &= ~AF_NODRAW;
    Player.Actor().SetPosition(kVec3(-4*GAME_SCALE, 10*GAME_SCALE, 0.0f));
    Player.Actor().Yaw() = Math::Deg2Rad(90.0f);
    Player.Actor().Origin().z = Player.Actor().FloorHeight();
    Player.Actor().Pitch() = 0;
    Player.Actor().RecoilPitch() = 0;
    Player.Actor().AnimState().Set(anim_player_idle, 8.0f, ANF_LOOP);
    Camera.SetFinalView(0);
    Camera.SetRotationTrack(0,
                            Math::Deg2Rad(0.0f),    // start angle
                            Math::Deg2Rad(720.0f),  // dest angle
                            10*GAME_SCALE,           // start distance
                            15*GAME_SCALE,          // dest distance
                            12*GAME_SCALE,          // start height
                            5*GAME_SCALE,           // dest height
                            8*GAME_SCALE,           // start look at height
                            7*GAME_SCALE);          // dest look at height
                                       
    Camera.AutoPlayRotationTrack(0, 9.33f, CMLT_COSINE);
    
    delay(16.0f);
    g_pCampaigner.RunFxEvent("Campaigner_FinalDeath");
    Camera.SetRotationTrack(0,
                            Math::Deg2Rad(0.0f),    // start angle
                            Math::Deg2Rad(110.0f),  // dest angle
                            15*GAME_SCALE,          // start distance
                            10*GAME_SCALE,           // dest distance
                            5*GAME_SCALE,           // start height
                            4*GAME_SCALE,           // dest height
                            7*GAME_SCALE,           // start look at height
                            GAME_SCALE);            // dest look at height
                                       
    Camera.AutoPlayRotationTrack(0, 5.33f, CMLT_COSINE);
    
    delay(6.0f);
    Camera.StartCinematic();
    
    delay(0.35f);
    
    Camera.ClearLookAtActor();
    Camera.SetRotateEyeVector(kVec3(-4*GAME_SCALE, 10*GAME_SCALE, 0.0f));
    Camera.SetRotationTrack(0,
                            Math::Deg2Rad(10.0f),   // start angle
                            Math::Deg2Rad(100.0f),  // dest angle
                            6*GAME_SCALE,           // start distance
                            15*GAME_SCALE,          // dest distance
                            4*GAME_SCALE,           // start height
                            3*GAME_SCALE,           // dest height
                            6*GAME_SCALE,           // start look at height
                            2*GAME_SCALE);          // dest look at height
                                       
    Camera.AutoPlayRotationTrack(0, 10.0f, CMLT_COSINE);
    
    delay(4.0f);
    Game.CallDelayedMapScript(5, instigator, 0);
    Game.CallDelayedMapScript(9, instigator, 0);
    delay(0.05f);
    Player.Actor().AnimState().Blend(anim_player_panic, 10.0f, 10.0f, ANF_LOOP|ANF_ROOTMOTION);
    
    delay(6.0f);
    Game.HaltMapScript(4);
    Game.CallDelayedMapScript(6, instigator, 0);
    Camera.ClearLookAtActor();
    Camera.SetRotateEyeVector(kVec3(-4*GAME_SCALE, 10*GAME_SCALE, 0.0f));
    Camera.SetRotationTrack(0,
                            Math::Deg2Rad(100.0f),          // start angle
                            Math::Deg2Rad(100.0f),          // dest angle
                            15*GAME_SCALE,                  // start distance
                            15*GAME_SCALE,                  // dest distance
                            3*GAME_SCALE,                   // start height
                            3*GAME_SCALE,                   // dest height
                            2*GAME_SCALE,                   // start look at height
                            2*GAME_SCALE);                  // dest look at height
                                       
    Camera.AutoPlayRotationTrack(0, 10.0f, CMLT_COSINE);
                                   
    World.TriggerActorsByTID(instigator, 50);
    
    delay(1.5f);
    Camera.SetRotationTrack(0,
                            Math::Deg2Rad(100.0f),          // start angle
                            Math::Deg2Rad(250.0f),          // dest angle
                            15*GAME_SCALE,                  // start distance
                            20*GAME_SCALE,                  // dest distance
                            3*GAME_SCALE,                   // start height
                            2*GAME_SCALE,                   // dest height
                            2*GAME_SCALE,                   // start look at height
                            8*GAME_SCALE);                  // dest look at height
                                       
    Camera.AutoPlayRotationTrack(0, 5.33f, CMLT_COSINE);
    
    delay(6.0f);
    Game.HaltMapScript(5);
    PlayLoop.ChangeMap("levels/level01.map");
}
//------------------------------------------------------------------------------------------------------------------------
// Campaigner killed Turok
//------------------------------------------------------------------------------------------------------------------------
$script 2
{
    // active yet?
    if(g_pCampaigner.Health() <= 0)
    {
        // cancel custom death cinematic
        Player.Actor().PlayerFlags() &= ~PF_PREVENTDEATHCAM;
        return;
    }
    
    Camera.StartCinematic();
    Camera.fov = 74.0f;
    Camera.SetFinalView(0);
    PlayLoop.RemoveBossActor();
    
    Game.CallDelayedMapScript(3, instigator, 0);
    Game.CallDelayedMapScript(7, instigator, 0);
}
//------------------------------------------------------------------------------------------------------------------------
// Logic for Campaigner kill cinematic
//------------------------------------------------------------------------------------------------------------------------
$script 3
{	
    if(Camera.CinematicState() >= 2)
    {
		Game.HaltMapScript(12); //Update Game
		Game.HaltMapScript(13); //Update Explosions
		Game.HaltMapScript(14); //Update Smoke screen
		Game.HaltMapScript(15); //Update Gravity
		HideBeams();
		
        kVec3 vPos;
        kPuppet @actor = Player.Actor();
        
        actor.Flags() &= ~AF_NODRAW;
        
        // move Campaigner into position
        vPos.x = 43*GAME_SCALE;
        vPos.y = 10*GAME_SCALE;
        vPos.z = 0;
        
        g_pCampaigner.SetSector(g_pCampaigner.GetSectorIndexAtLocation(vPos));
        g_pCampaigner.Origin() = vPos;
        g_pCampaigner.Origin().z = g_pCampaigner.FloorHeight();
        g_pCampaigner.Yaw() = Math::Deg2Rad(-85-180);
        g_pCampaigner.Velocity().Clear();
        g_pCampaigner.SetHeadTrackTarget(null);
        
        g_pCampaigner.AnimState().Set(anim_event07, 4.0f, ANF_NOINTERRUPT|ANF_ROOTMOTION);
		
        
        // move player into position
        vPos.x = 38*GAME_SCALE;
        vPos.y = 10*GAME_SCALE;
        vPos.z = 0;
        
        actor.SetSector(actor.GetSectorIndexAtLocation(vPos));
        actor.Origin() = vPos;
        actor.Origin().z = 0;
        actor.Yaw() = Math::Deg2Rad(90);
        actor.Pitch() = 0;
        actor.Roll() = 0;
        actor.RecoilPitch() = 0;
        actor.Velocity().Clear();
        actor.Movement().Clear();
        
        // animID 202 = Turok killed by Campaigner
        actor.AnimState().Set(anim_campaingerRage, 8.0f, ANF_ROOTMOTION);
        
        Camera.SetLookAtActor(actor.CastToActor());
        Camera.SetFinalView(0);
        
        vPos.x = 38*GAME_SCALE;
        vPos.y = 28*GAME_SCALE;
        vPos.z =  6*GAME_SCALE;
        
        Camera.SetEyeView(vPos);
        delay(2.6f);
        vPos.x = 10*GAME_SCALE;
        vPos.y = 15*GAME_SCALE;
        vPos.z = actor.Origin().z + (6*GAME_SCALE);
        
        Camera.SetEyeView(vPos);
        Camera.SetLookAtActor(g_pCampaigner);
        
        delay(2.3f);
        
        vPos.x = actor.Origin().x - 6*GAME_SCALE;
        vPos.y = actor.Origin().y;
        vPos.z = actor.Origin().z + (3*GAME_SCALE);
        
        Camera.SetEyeView(vPos);
        Camera.SetLookAtActor(actor.CastToActor());
        
        delay(1.3f);
        Game.HaltMapScript(7);
        PlayLoop.HandlePlayerDeath();
        return;
    }
    
    $restart;
}
//------------------------------------------------------------------------------------------------------------------------
$script 5
{
    float x, y, z;
    
    for(int i = 0; i < 4; ++i)
    {
        x = Math::RandRange(-2048.0f, 1331.2f);
        y = Math::RandRange(-1177.6f, 1331.2f);
        
        if(x <= 0.0f)
        {
            z = Math::RandRange(0.0f, 307.2f);
        }
        else
        {
            z = 1331.2 - x;
        }
        
        Game.SpawnFx("fx/generic_235.kfx", kVec3(x, y, z), 0);
    }
    
    if((Math::Rand() % -2) != 0)
    {
        Player.Actor().PlaySound("sounds/shaders/generic_218.ksnd");
    }
    else
    {
        Player.Actor().PlaySound("sounds/shaders/explosion_2.ksnd");
    }
    
    delay(0.125f);
    $restart;
}
//------------------------------------------------------------------------------------------------------------------------
$script 6
{
    Player.Actor().Origin().z = Player.Actor().FloorHeight();
    $restart;
}
//------------------------------------------------------------------------------------------------------------------------
// Handles input from user and cancel cinematic
//------------------------------------------------------------------------------------------------------------------------
$script 7
{
    if(Camera.UserInterrupted())
    {
        PlayLoop.HandlePlayerDeath();
        return;
    }
    
    $restart;
}
//------------------------------------------------------------------------------------------------------------------------
// Battle Update - Checks if boss is dead then starts victory cinematic
//------------------------------------------------------------------------------------------------------------------------
$script 8
{
    if (g_pCampaigner.Health() <= 0)
    {
        Game.CallDelayedMapScript(1, instigator, 0);
        return;
    }
    
    $restart;
}
//------------------------------------------------------------------------------------------------------------------------
$script 9
{
    Camera.Tremor().x = Math::RandRange(Math::Deg2Rad(-0.5f), Math::Deg2Rad(0.5f));
    Camera.Tremor().y = Math::RandRange(Math::Deg2Rad(-0.5f), Math::Deg2Rad(0.5f));
    Camera.Tremor().z = Math::RandRange(Math::Deg2Rad(-0.5f), Math::Deg2Rad(0.5f));
    
    delay(0.01f);
    $restart;
}
//------------------------------------------------------------------------------------------------------------------------
// Start Opening Intro
//------------------------------------------------------------------------------------------------------------------------
$script 10 {
	bStartedIntro = true;
	GameVariables.SetValue("bStartedHubIntro", "1");
	
	Camera.StartCinematic(CMF_LOCK_PLAYER|CMF_NO_INITIAL_FADEOUT);
    Camera.fov = 74.0f;
    Camera.SetFinalView(0);
    PlayLoop.RemoveBossActor();
	
	Game.CallDelayedMapScript(11, instigator, 0); //Update Opening Intro
	
	//Cinematic stuff
	kVec3 vPos;
	kPuppet @actor = Player.Actor();
	
	actor.Flags() &= ~AF_NODRAW;
	
	// move Campaigner into position
	vPos.x = 43*GAME_SCALE;
	vPos.y = 10*GAME_SCALE;
	vPos.z = 0;
	
	g_pCampaigner.SetSector(g_pCampaigner.GetSectorIndexAtLocation(vPos));
	g_pCampaigner.Origin() = vPos;
	g_pCampaigner.Origin().z = g_pCampaigner.FloorHeight();
	g_pCampaigner.Yaw() = Math::Deg2Rad(-85-180);
	g_pCampaigner.Velocity().Clear();
	g_pCampaigner.SetHeadTrackTarget(null);
	g_pCampaigner.Scale() = kVec3(0.5f, 0.5f, 0.5f);
	
	g_pCampaigner.AnimState().Set(anim_event07, 4.0f, ANF_NOINTERRUPT|ANF_ROOTMOTION);
	
	// move player into position
	vPos.x = 38*GAME_SCALE;
	vPos.y = 10*GAME_SCALE;
	vPos.z = 0;
	
	actor.SetSector(actor.GetSectorIndexAtLocation(vPos));
	actor.Origin() = vPos;
	actor.Origin().z = 0;
	actor.Yaw() = Math::Deg2Rad(90);
	actor.Pitch() = 0;
	actor.Roll() = 0;
	actor.RecoilPitch() = 0;
	actor.Velocity().Clear();
	actor.Movement().Clear();
	
	// animID 202 = Turok killed by Campaigner
	actor.AnimState().Set(anim_campaingerRage, 8.0f, ANF_ROOTMOTION);
	
	Camera.SetLookAtActor(actor.CastToActor());
	Camera.SetFinalView(0);
	
	vPos.x = 38*GAME_SCALE;
	vPos.y = 28*GAME_SCALE;
	vPos.z =  6*GAME_SCALE;
	
	Camera.SetEyeView(vPos);
	
	delay(2.6f);
	
	vPos.x = 10*GAME_SCALE;
	vPos.y = 15*GAME_SCALE;
	vPos.z = actor.Origin().z + (6*GAME_SCALE);
	
	Camera.SetEyeView(vPos);
	Camera.SetLookAtActor(g_pCampaigner);
	
	delay(2.3f);
	
	vPos.x = actor.Origin().x - 6*GAME_SCALE;
	vPos.y = actor.Origin().y;
	vPos.z = actor.Origin().z + (3*GAME_SCALE);
	
	Camera.SetEyeView(vPos);
	Camera.SetLookAtActor(actor.CastToActor());
	delay(0.5f);
	Game.PlaySound("sounds/shaders/generic_20_turok_t-rex_death.ksnd");
	delay(1.1f);
	Game.PlaySound("sounds/shaders/generic_81_kick_impact.ksnd");
	delay(0.05f);
	Game.SpawnFx("fx/spurt_blood.kfx", actor.Origin() + kVec3(-20, 0, 100), 0);
	Game.SpawnFx("fx/spurt_blood.kfx", actor.Origin() + kVec3(-10, 0, 100), 0);
	Game.SpawnFx("fx/spurt_blood.kfx", actor.Origin() + kVec3(0, 0, 100), 0);
	Game.SpawnFx("fx/spurt_blood.kfx", actor.Origin() + kVec3(10, 0, 100), 0);
	Game.SpawnFx("fx/spurt_blood.kfx", actor.Origin() + kVec3(20, 0, 100), 0);
	delay(0.25f);
	
	PlayLoop.ChangeMap("levels/level05.map");
}
//------------------------------------------------------------------------------------------------------------------------
// Update Opening Intro
//------------------------------------------------------------------------------------------------------------------------
$script 11 {
	if(Camera.UserInterrupted()) {
		PlayLoop.ChangeMap("levels/level05.map");
        return;
    }
    
    $restart;
}
//------------------------------------------------------------------------------------------------------------------------
kVec3 RandomRocketFirePosition() {
	return kVec3(Math::RandRange(-1571.0f, 950.0f), Math::RandRange(-1047.0f, 1226.0f), 0);
}
//------------------------------------------------------------------------------------------------------------------------
// Update Game
//------------------------------------------------------------------------------------------------------------------------
$script 12 {
	BlockAreaMinMax(kVec3(-1884, -494, 50), kVec3(-1628, 767, 10000), kVec3(1, 0, 0));
	
	// if (g_pCampaigner.Health() > 0 and Player.Actor().AreaID() == 0 and Player.Actor().OnGround()) {
		// kVec3 v = Player.Actor().Velocity();
		// v.z = Math::RandRange(15.0f, 25.0f);
		// Player.Actor().Velocity() = v;
	// }
	if (g_pCampaigner.Health() <= 1000) {
		if (PlayLoop.Ticks() % 20 == 0) {
			
			kVec3 targetpos = kVec3(-1233, 132, 460);
			kVec3 pos = targetpos - g_pCampaigner.Origin();
			pos.z *= -1;
			//kVec3 pos = g_pCampaigner.GetTransformedVector(kVec3(-1233, 132, 460));
			//kVec3 pos = rocket1.GetTransformedVector(g_pCampaigner.Origin());
			rocket1.SpawnProjectile("fx/camp_rocket.kfx", Math::vecZero, Player.Actor().Origin(), 0);
			//get a random position on the field and fire at there
			rocket2.SpawnProjectile("fx/camp_rocket.kfx", Math::vecZero, RandomRocketFirePosition(), 0);
			rocket3.SpawnProjectile("fx/camp_rocket.kfx", Math::vecZero, RandomRocketFirePosition(), 0);
			rocket4.SpawnProjectile("fx/camp_rocket.kfx", Math::vecZero, RandomRocketFirePosition(), 0);
			rocket5.SpawnProjectile("fx/camp_rocket.kfx", Math::vecZero, RandomRocketFirePosition(), 0);
		}
	}
	
	//if player wasn't grounded but is grounded now then stick to floor for a short amount of time
	if (isFloorSticky) {
		if (!lastPlayerGrounded and Player.Actor().OnGround()) {
			floorStickTime = 0.1f;
			floorStickPos = Player.Actor().Origin();
		}
	}
	if (floorStickTime > 0.0f) {
		floorStickTime -= GAME_DELTA_TIME;
		Player.Actor().Origin() = floorStickPos;
		Player.Actor().Velocity() = Math::vecZero;
		Player.Actor().Movement() = Math::vecZero;
	}
	lastPlayerGrounded = Player.Actor().OnGround();
	
	if (g_pCampaigner.Health() <= 2000) {
		isFloorSticky = true;
	}
	
	if (!showingBeams and g_pCampaigner.Health() <= 3000) {
		ShowBeams();
	}
	
	UpdateGeneralGame();
	//ActorInWorldTestUpdate();
    $restart;
}
//------------------------------------------------------------------------------------------------------------------------
// Update Explosions
//------------------------------------------------------------------------------------------------------------------------
$script 13
{
	if (g_pCampaigner.Health() < 4250)
	{
		float x, y, z;
		// x = Math::RandRange(-2348.0f, 1331.2f);
		// y = Math::RandRange(-1177.6f, 1331.2f);
		// z = 500;//Player.Actor().Origin().z;

		x = Math::RandRange(-400.0f, 400.0f);
		y = Math::RandRange(-400.0f, 400.0f);
		z = 100;//Player.Actor().Origin().z;
		
		//float x = Math::RandRange(-3000.0f, 1000.0f);
		//float y = Math::RandRange(-1600.0f, 1600.0f);
		
		g_pCampaigner.SpawnFx("fx/explosion2.kfx", kVec3(x, y, z));
		
		float delayTime = 1.0f;
		if(g_pCampaigner.Health() >= 3500)
		{
			delayTime = 1.0f;
		}
		else if(g_pCampaigner.Health() >= 2500)
		{
			delayTime = 0.5f;
		}
		else if(g_pCampaigner.Health() >= 1500)
		{
			delayTime = 0.25f;
		}
		else
		{
			delayTime = 0.1f;
		}
		delay(delayTime);
	}
	
    $restart;
}
//------------------------------------------------------------------------------------------------------------------------
// Update Smoke Screen
//------------------------------------------------------------------------------------------------------------------------
$script 14
{
	if(g_pCampaigner.Health() >= 2500)
	{
		float x, y, z;
		x = g_pCampaigner.Origin().x + Math::RandRange(-200.0f, 200.0f);
		y = g_pCampaigner.Origin().y + Math::RandRange(-200.0f, 200.0f);
		z = g_pCampaigner.Origin().z;
		Game.SpawnFx("fx/smoke.kfx", kVec3(x, y, z), 0);
		delay(2.5f + Math::RandRange(2.0f, 4.0f));
	}
    $restart;
}
//------------------------------------------------------------------------------------------------------------------------
// Update Player Gravity
//------------------------------------------------------------------------------------------------------------------------
$script 15
{
	Player.Actor().Gravity() = Math::Lerp(0.1f, 0.4f, g_pCampaigner.Health() / 5000.0f);
	//Player.Actor().Gravity() = 0.1f + (0.4f * (g_pCampaigner.Health() / 5000.0f));
	$restart;
}
//------------------------------------------------------------------------------------------------------------------------
