IL-GSC/AW/PC/maps/df_fly_flight_code.gsc
InfinityLoader b2389dbcb9 Full AW Dump
2024-04-22 02:38:24 -04:00

4915 lines
114 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: df_fly_flight_code.gsc
* Game: Call of Duty: Advanced Warfare
* Platform: PC
* Function Count: 161
* Decompile Time: 2283 ms
* Timestamp: 4/22/2024 2:28:49 AM
*******************************************************************/
//Function Number: 1
flight_code_main()
{
level.user_controlled_plane = 1;
level.fps_controls = 1;
level.plane_intialized = 0;
level.num_objectives_visable = 0;
level.player_boosting = 0;
level.player_braking = 0;
level.enemy_locking_on_to_player = 0;
level.last_missile_fired_at_player = 0;
level.default_player_dist = 2000;
level.flares_active = 0;
level.friend_jets = [];
precacheitem("s19_cannon_player_test");
precacheitem("s19_cannon_AI");
precacheitem("sidewinder_atlas_jet");
precachemodel("vehicle_s19");
precachemodel("vfx_atlas_fighter_jet_dest_body_01");
precachemodel("vfx_atlas_fighter_jet_dest_wing_lt");
precachemodel("vfx_atlas_fighter_jet_dest_wing_rt");
precacheshader("jet_HUD_hex_blue");
precacheshader("jet_HUD_hex_orange");
precacheshader("jet_hud_target_bullet_lock");
precacheshader("jet_HUD_diamond_green");
precacheshader("jet_HUD_ground_target");
precacheshader("coop_class_icon_vangard");
precacheshader("veh_hud_target");
precacheshader("jet_hud_overlay_cannon_1");
precacheshader("jet_hud_overlay_cannon_boresight");
precacheshader("jet_hud_overlay_cannon_boresight_lockon");
precacheshader("jet_hud_overlay_cannon_reticle");
precacheshader("jet_hud_overlay_cannon_reticle_lockon");
precacheshader("jet_hud_overlay_missile_1");
precacheshader("jet_hud_missile_circle");
precacheshader("jet_hud_red_doublecircle");
precacheshader("jet_hud_overlay_bomb_1");
precacheshader("jet_hud_incoming_missile");
precacheshader("jet_hud_locking_on");
precacheshader("jet_hud_locking_on_small");
precacheshader("jet_hud_lockon_missile");
precacheshader("jet_hud_overlay_missile_lockon");
precacheshader("jet_hud_overlay_cannon_lockon");
precacheshader("jet_hud_overlay_bomb_lockon");
precacheshader("jet_hud_ground_target_lockon");
precacheshader("jet_hud_pip_missile_1");
precacheshader("jet_hud_overlay_bomb_flight");
precacheshader("jet_hud_follow");
precacheshader("jet_hud_missile_indicator");
precacheshader("jet_hud_ammo_missile_0");
precacheshader("jet_hud_ammo_missile_1");
precacheshader("jet_hud_follow_white");
precacheshader("jet_hud_lockon_bomb_1");
precacheshader("jet_hud_lockon_bomb_2");
precacheshader("jet_hud_overlay_reentry");
precacheshader("jet_reentry_target");
precacheshader("jet_hud_locking_on_1");
precacheshader("jet_hud_locking_on_2");
precacheshader("jet_hud_locking_on_3");
precacheshader("jet_hud_locking_on_4");
precacheshader("jet_hud_locking_on_5");
precacheshader("jet_hud_locking_on_6");
precacheshader("jet_hud_locking_on_7");
precacheshader("jet_hud_locking_on_8");
precacheshader("jet_hud_locking_on_9");
precacheshader("jet_hud_locking_on_10");
precacheshader("jet_hud_locking_on_11");
precacheshader("jet_hud_locking_on_12");
precacheshader("jet_hud_locking_on_13");
precacheshader("jet_hud_locking_on_14");
precacheshader("jet_hud_locking_on_15");
precacheshader("jet_hud_locking_on_16");
precacheshader("jet_hud_bomb_locking_on_1");
precacheshader("jet_hud_bomb_locking_on_2");
precacheshader("jet_hud_bomb_locking_on_3");
precacheshader("jet_hud_bomb_locking_on_4");
precacheshader("jet_hud_bomb_locking_on_5");
precacheshader("jet_hud_bomb_locking_on_6");
precacheshader("jet_hud_bomb_locking_on_7");
precacheshader("jet_hud_bomb_locking_on_8");
precacheshader("jet_hud_bomb_locking_on_9");
precacheshader("jet_hud_bomb_locking_on_10");
precacheshader("jet_hud_bomb_locking_on_11");
precacheshader("jet_hud_bomb_locking_on_12");
precacheshader("jet_hud_bomb_locking_on_13");
precacheshader("jet_hud_bomb_locking_on_14");
precacheshader("jet_hud_bomb_locking_on_15");
precacheshader("jet_hud_bomb_locking_on_16");
precacheshader("jet_hud_hex_blue_distort_1");
precacheshader("jet_hud_hex_blue_distort_2");
precacheshader("hud_plane_enemy");
precacheshader("hud_fofbox_hostile_obstructed");
precacheshader("hud_plane_horizon");
precacheshader("hud_plane_mg");
precacheshader("hud_plane_missile");
precacheshader("hud_plane_reticle");
precacheshader("hud_plane_controls_button");
precacheshader("hud_plane_mg_button");
precacheshader("hud_plane_missile_button");
precacheshader("hud_plane_thrust_button");
precachedigitaldistortcodeassets();
}
//Function Number: 2
change_optimal_flight_distance(param_00)
{
self.default_player_dist = self.default_player_dist + param_00;
self.infront_dist_min = self.infront_dist_min + param_00;
self.infront_dist_max = self.infront_dist_max + param_00;
}
//Function Number: 3
set_optimal_flight_dist(param_00,param_01)
{
if(isdefined(self))
{
self.default_player_dist = param_00;
self.infront_dist_min = param_00 - 500;
self.infront_dist_max = param_00 + 500;
}
}
//Function Number: 4
steering_hack()
{
setsaveddvar("vehPlanePathAllowance",45);
common_scripts\utility::flag_wait("go_wide");
setsaveddvar("vehPlanePathAllowance",60);
}
//Function Number: 5
flight_code_start(param_00,param_01)
{
if(!isdefined(param_00))
{
param_00 = "player_mig";
}
setsaveddvar("vehPlanePathAllowance",60);
level.plane = getent(param_00,"targetname");
level.plane maps\_vehicle::godon();
level.plane maps\_utility::ent_flag_clear("engineeffects");
level.plane.lock_targets = [];
level.plane.bomb_tag = level.plane common_scripts\utility::spawn_tag_origin();
level.plane.bomb_tag linkto(level.plane,"tag_origin");
thread init_jet_crash_points();
var_02 = getentarray("player_vehicle","script_noteworthy");
foreach(var_04 in var_02)
{
if(var_04 != level.plane)
{
var_04 delete();
}
}
if(level.mini_version)
{
level.plane plane_test(50);
return;
}
level.plane plane_test(undefined,undefined,param_01);
}
//Function Number: 6
debug_friendly_death()
{
while(isdefined(self) && self.health > 1)
{
wait(0.05);
}
if(isdefined(self) && isdefined(self.targetname))
{
var_00 = self.targetname;
iprintlnbold("friendly dead",var_00);
}
}
//Function Number: 7
target_cycleshader(param_00,param_01,param_02,param_03)
{
param_00 endon("death");
param_00 endon("stop_target_cycle");
if(!isdefined(param_03))
{
param_03 = 0.5;
}
while(target_istarget(param_00))
{
target_setshadersafe(param_00,param_01);
wait(param_03);
target_setshadersafe(param_00,param_02);
wait(param_03);
}
}
//Function Number: 8
make_ally_jet(param_00,param_01,param_02)
{
if(!isdefined(param_01))
{
param_01 = 1;
}
var_03 = self;
var_04 = var_03 maps\_vehicle::spawn_vehicle_and_gopath();
if(isdefined(var_03.script_parameters))
{
var_05 = int(var_03.script_parameters);
}
else
{
var_05 = 3000;
}
var_04 set_optimal_flight_dist(var_05,is_true(param_02) || !is_true(param_01));
var_04.missiletags_right = ["tag_right_wingtip"];
var_04.missiletags_left = ["tag_left_wingtip"];
var_04.salvo_ammo = [];
var_04.salvo_ammo[0] = 4;
var_04.mgun_left = "tag_left_wingtip";
var_04.mgun_right = "tag_right_wingtip";
var_04.has_flares = 999;
var_04 thread fly_think(param_00,1,1,0);
if(param_01)
{
level.allies[level.allies.size] = var_04;
var_04 thread ally_jet_shoot_think();
}
else
{
var_04 hide();
var_04 maps\_utility::ent_flag_clear("engineeffects");
level.friend_jets[level.friend_jets.size] = var_04;
var_04 maps\_vehicle::godon();
}
return var_04;
}
//Function Number: 9
spawn_enemy_jets(param_00,param_01,param_02)
{
if(!isdefined(param_01))
{
param_01 = "targetname";
}
var_03 = getentarray(param_00,param_01);
var_04 = [];
foreach(var_06 in var_03)
{
var_07 = var_06 maps\_vehicle::spawn_vehicle_and_gopath();
if(is_true(param_02))
{
var_07 maps\_vehicle::godon();
}
if(isdefined(var_06.script_parameters))
{
var_08 = int(var_06.script_parameters);
}
else
{
var_08 = 3000;
}
var_07 set_optimal_flight_dist(var_08);
var_07 thread make_enemy_jet();
var_04[var_04.size] = var_07;
}
return var_04;
}
//Function Number: 10
make_enemy_jet(param_00,param_01,param_02)
{
if(!isdefined(level.vehicle_death_jolt))
{
level.vehicle_death_jolt = [];
}
var_03 = spawnstruct();
var_03.delay = 9999;
level.vehicle_death_jolt["script_vehicle_mig29"] = var_03;
self.salvo_ammo = [];
self.salvo_ammo[0] = 4;
self.mgun_left = "tag_gun_left";
self.mgun_right = "tag_gun_right";
self.has_flares = 1;
self.last_flare_time = 0;
self.ignore_death_fx = 1;
self.script_ai_invulnerable = 1;
level.enemy_units[level.enemy_units.size] = self;
thread monitor_enemy_jet_health();
self.default_hud = "hud_fofbox_hostile_obstructed";
thread hud_target_think();
thread fly_think(level.plane,1,1,param_01);
if(isdefined(param_02))
{
if(level.next_obj_pos == 0)
{
objective_onentity(maps\_utility::obj(param_02),self);
}
objective_additionalentity(maps\_utility::obj(param_02),level.next_obj_pos,self);
level.next_obj_pos++;
}
thread wait_for_death();
thread enemy_jet_shoot_think();
}
//Function Number: 11
wait_for_death()
{
self waittill("death",var_00);
if(isdefined(var_00) && var_00 == level.player)
{
level notify("enemy_dead_by_player");
return;
}
level notify("enemy_dead");
}
//Function Number: 12
make_enemy_jet_special(param_00,param_01)
{
target_setsafe(self);
thread target_cycleshader(self,"jet_hud_hex_blue_distort_1","jet_hud_hex_blue_distort_2",0.1);
var_02 = [level.plane];
thread monitor_enemy_jet_health();
thread fly_think(level.plane,1,1,param_01);
}
//Function Number: 13
monitor_enemy_jet_health()
{
level endon("end_canyon");
self.script_crashtypeoverride = "none";
var_00 = check_health();
burn_and_crash(var_00);
}
//Function Number: 14
physics_crash(param_00)
{
if(isdefined(self))
{
self delete();
}
var_01 = spawn("script_model",param_00["org"]);
var_01.angles = param_00["ang"];
var_01 setmodel("vehicle_mig29");
var_01 thread add_damage_fx();
var_02 = 10;
var_03 = param_00["velocity"] * var_02;
var_04 = vectorlerp(param_00["org"],param_00["point"],0.5);
var_01 physicslaunchserver(var_04,var_03);
delete_on_crash(var_01);
}
//Function Number: 15
burn_and_crash(param_00)
{
if(!isdefined(self) || isremovedentity(self))
{
return;
}
if(target_istarget(self))
{
target_remove(self);
}
level.enemy_units = common_scripts\utility::array_remove(level.enemy_units,self);
var_01 = vectornormalize(self.origin - param_00["point"]);
var_02 = var_01 * 50 * 17.6;
var_03 = (0,0,100);
self vehicle_addvelocity(var_02,var_03);
var_04 = choose_crash_path();
var_05 = 0;
maps\_utility::ent_flag_clear("engineeffects");
if(isdefined(var_04))
{
var_06 = playfxontag(common_scripts\utility::getfx("bagh_aircraft_damage_fire_trail"),self,"tag_origin");
playfx(common_scripts\utility::getfx("missile_explode"),self.origin,anglestoforward(self.angles) * -1);
var_04.claimed = 1;
self notify("newpath");
self vehicledriveto(var_04.origin,self.veh_pathspeed);
if(isdefined(var_04.target))
{
follow_crash_path(var_04);
}
}
else
{
maps\df_fly_fx::vfx_handle_disintegrating_jet();
var_05 = 1;
}
if(!var_05)
{
var_07 = gettime();
var_08 = self.origin;
var_09 = var_07 + randomfloatrange(2,3) * 1000;
var_0A = 0;
while(isdefined(self) && isdefined(var_04) || gettime() < var_09)
{
if(isdefined(self.dragging) && self.dragging)
{
return;
}
if(!bullettracepassed(var_08,self.origin,0,self))
{
var_0A = 1;
break;
}
var_08 = self.origin;
wait 0.05;
}
if(isdefined(self) && !var_0A)
{
var_0B = [];
var_0B["org"] = self.origin;
var_0B["ang"] = self.angles;
var_0B["velocity"] = param_00["velocity"];
var_0B["point"] = self.origin;
var_0B["direction_vec"] = self.angles;
physics_crash(var_0B);
}
if(isdefined(self))
{
stopfxontag(common_scripts\utility::getfx("bagh_aircraft_damage_fire_trail"),self,"tag_origin");
playfx(level._effect["canyon_jet_impact"],self.origin);
self delete();
}
}
}
//Function Number: 16
follow_crash_path(param_00)
{
while(isdefined(self) && isdefined(param_00.target))
{
if(distancesquared(self.origin,param_00.origin) < 62500)
{
if(isdefined(param_00.script_noteworthy) && param_00.script_noteworthy == "drag" && !is_true(self.dragging))
{
self.dragging = 1;
self cancelaimove();
self hide();
var_01 = spawn("script_model",self.origin);
var_01.angles = self.angles;
var_01 setmodel(self.model);
var_01 show();
stopfxontag(common_scripts\utility::getfx("bagh_aircraft_damage_fire_trail"),self,"tag_origin");
playfx(common_scripts\utility::getfx("canyon_jet_impact"),var_01.origin,anglestoforward(var_01.angles) * -1);
playfxontag(common_scripts\utility::getfx("bagh_tanker_dust_trail_small"),var_01,"tag_origin");
var_02 = self.veh_pathspeed;
while(isdefined(param_00.target))
{
param_00 = getvehiclenode(param_00.target,"targetname");
var_03 = distance(var_01.origin,param_00.origin) / var_02 * 17.6;
var_01 moveto(param_00.origin,var_03);
var_01 rotateto(param_00.angles,var_03);
wait(var_03);
}
playfx(level._effect["canyon_jet_impact"],var_01.origin);
var_01 delete();
if(isdefined(self))
{
self delete();
}
return;
}
var_03 = getvehiclenode(var_03.target,"targetname");
if(isdefined(var_03))
{
self vehicledriveto(var_03.origin,self.veh_pathspeed);
continue;
}
break;
}
wait(0.05);
}
}
//Function Number: 17
delete_on_crash(param_00)
{
var_01 = 0;
while(isdefined(param_00) && length(param_00 maps\_shg_utility::get_differentiated_acceleration()) < 1000 || var_01 < 3 && var_01 < 100)
{
var_01++;
wait 0.05;
}
var_02 = param_00.differentiated_last_velocity;
if(var_02 == (0,0,0))
{
var_02 = -1 * anglestoforward(param_00.angles);
}
playfx(level._effect["canyon_jet_impact"],param_00.origin,param_00.differentiated_last_velocity);
param_00 delete();
}
//Function Number: 18
add_damage_fx()
{
level endon("finale");
var_00 = ["tag_right_wingtip","tag_left_wingtip"];
var_01 = randomint(var_00.size);
var_02 = playfxontag(common_scripts\utility::getfx("bagh_aircraft_damage_trail"),self,"tag_origin");
while(isalive(self) && self.health > self.healthbuffer)
{
if(!isdefined(self))
{
break;
}
wait(0.05);
}
if(isdefined(self))
{
stopfxontag(common_scripts\utility::getfx("bagh_aircraft_damage_trail"),self,"tag_origin");
}
}
//Function Number: 19
check_health(param_00)
{
level endon("end_canyon");
maps\_vehicle::vehicle_set_health(3000);
self.script_bulletshield = undefined;
self.script_explosive_bullet_shield = undefined;
self.script_ai_invulnerable = undefined;
self.script_grenadeshield = undefined;
self.vehicle_stays_alive = 1;
var_01 = [];
var_01["org"] = self.origin;
var_01["ang"] = self.angles;
var_01["velocity"] = self vehicle_getvelocity();
var_01["point"] = self.origin;
var_01["direction_vec"] = self.angles;
var_02 = 0;
var_03 = self.health - self.healthbuffer;
var_04 = undefined;
var_05 = undefined;
var_06 = undefined;
while(isalive(self) && self.health > self.healthbuffer)
{
self waittill("damage",var_07,var_08,var_09,var_0A,var_0B,var_0C,var_0D,var_0E,var_0F,var_10);
var_04 = var_08;
var_05 = var_0B;
var_06 = var_10;
if(isalive(self))
{
if(var_08 == level.player)
{
if(var_0B == "MOD_EXPLOSIVE")
{
self dodamage(var_07,var_0A,var_08);
}
else
{
self dodamage(self.maxhealth / 100,var_0A,var_08);
}
self playsound("enemy_jet_mid_air_damage");
}
var_01["direction_vec"] = var_09;
var_01["point"] = var_0A;
var_01["org"] = self.origin;
var_01["ang"] = self.angles;
var_01["velocity"] = self vehicle_getvelocity();
if(!var_02 && self.health > self.healthbuffer)
{
thread add_damage_fx();
var_02 = 1;
}
}
}
if(var_04 == level.player)
{
level.player maps\_upgrade_challenge::give_player_challenge_kill(1);
if(isdefined(var_06) && var_06 == "s19_cannon_player_test")
{
if(!isdefined(level.maverick_counter))
{
level.maverick_counter = 0;
}
level.maverick_counter++;
if(level.maverick_counter == 10)
{
maps\_utility::giveachievement_wrapper("LEVEL_13A");
}
}
}
var_11 = self.origin;
var_12 = self.angles;
if(isdefined(var_11))
{
var_01["org"] = var_11;
}
if(isdefined(var_12))
{
var_01["ang"] = var_12;
}
return var_01;
}
//Function Number: 20
fly_think(param_00,param_01,param_02,param_03)
{
if(!isdefined(param_03))
{
param_03 = 0;
}
if(!isdefined(param_01))
{
param_01 = 1;
}
if(!isdefined(param_02))
{
param_02 = 1;
}
if(common_scripts\utility::flag("end_fighter_jet_sequence"))
{
return;
}
if(!param_03)
{
thread fly_think_constrained(param_00,param_01,param_02);
return;
}
thread fly_think_autopilot(param_00,param_01,param_02);
}
//Function Number: 21
check_flight_distances()
{
if(!isdefined(self.default_player_dist))
{
self.default_player_dist = level.default_player_dist;
}
self.infront_dist_min = self.default_player_dist - 500;
self.infront_dist_max = self.default_player_dist + 500;
}
//Function Number: 22
fly_think_constrained(param_00,param_01,param_02)
{
level endon("end_canyon");
self endon("death");
if(isdefined(self.no_path))
{
thread fly_think_formation(param_00);
return;
}
check_flight_distances();
if(self.default_player_dist != 0)
{
var_03 = level.plane vehicle_getspeed();
self vehicle_setspeedimmediate(var_03 * 0.75,100,50);
}
for(;;)
{
if(!isdefined(self))
{
break;
}
if(self.default_player_dist == 0)
{
wait(0.1);
continue;
}
var_04 = maps\_utility::get_dot(self.origin,self.angles,param_00.origin);
var_05 = anglestoforward(param_00.angles) * self.default_player_dist;
var_06 = distance(param_00.missile_target.origin,self.origin);
var_07 = distance(param_00.origin,self.origin);
var_08 = var_07;
if(var_04 > 0)
{
var_08 = self.default_player_dist + var_07;
}
else
{
var_08 = var_07 - self.default_player_dist;
}
var_03 = param_00 vehicle_getspeed();
var_03 = var_03 + randomfloatrange(-5,5);
var_09 = 1;
var_0A = 1;
if(level.player_boosting && self.default_player_dist > 0)
{
var_0B = 10;
var_0C = gettime() - level.player_boost_time + 1;
var_0D = clamp(var_0C / var_0B * 1000,0.5,1);
var_09 = var_0D - 1 * self.default_player_dist;
if(self.script_team == "allies")
{
var_0A = var_0A * var_0D;
}
else
{
var_0A = var_0A * var_0D;
}
}
if(level.player_braking)
{
var_09 = 10000;
var_0A = var_0A * 10;
if(self.default_player_dist < 0)
{
var_0A = var_0A * 10;
}
}
if(var_04 > 0 && self.default_player_dist > 0)
{
var_0A = var_0A * 2;
}
var_0E = 5000;
var_0F = 1 / abs(var_04);
var_0F = var_0F * var_08 / 1000;
var_0F = var_0F * var_0A;
var_0F = clamp(var_0F,0.5,100);
var_10 = self.default_player_dist + var_09;
if(var_10 < 0)
{
if(var_04 < 0)
{
var_03 = var_03 + var_0F * randomfloatrange(-65,-40);
}
else if(var_08 > abs(self.infront_dist_min + var_09) * param_01)
{
var_03 = var_03 + var_0F * randomfloatrange(100,300);
}
else
{
var_03 = var_03 - var_0F * randomfloatrange(6,9);
}
}
else if(var_04 > 0 || var_07 < var_09 + self.infront_dist_min * param_01)
{
var_03 = var_03 + var_0F * randomfloatrange(20,25);
}
else if(var_04 < 0)
{
if(var_08 < var_09 + self.infront_dist_max * param_02)
{
var_03 = var_03 + var_0F * randomfloatrange(6,9);
}
else
{
var_03 = var_03 + var_0F * randomfloatrange(-20,-15);
}
}
var_03 = clamp(var_03,300,800);
self vehicle_setspeed(var_03,100,50);
wait(0.25);
}
}
//Function Number: 23
fly_think_autopilot(param_00,param_01,param_02)
{
level endon("end_canyon");
self endon("death");
self.is_autopilot = 1;
if(isdefined(self.no_path))
{
thread fly_think_formation(param_00);
return;
}
setsaveddvar("vehPlaneAiRollResponseRate",0.1);
setsaveddvar("vehPlaneAiPitchResponseRate",0.1);
setsaveddvar("vehPlaneAiYawResponseRate",0.2);
var_03 = 1;
var_04 = 1;
var_05 = getvehiclenode(self.target,"targetname");
var_06 = 0;
var_07 = self.origin;
var_08 = 1;
var_09 = var_05.origin;
var_0A = var_05.speed;
check_flight_distances();
while(isdefined(var_05.target))
{
var_0B = getvehiclenodearray(var_05.target,"targetname");
var_0C = var_0B[0];
if(!isdefined(var_0C))
{
break;
}
var_06 = 0;
var_0D = 0;
while(var_06 < 1)
{
while(var_06 < 1)
{
var_0E = vectorlerp(var_05.origin,var_0C.origin,var_06);
var_0A = maps\_utility::linear_interpolate(var_06,var_05.speed,var_0C.speed);
var_08 = maps\_utility::linear_interpolate(var_06,var_05.lookahead,var_0C.lookahead) * var_04;
var_0D = var_08 * var_0A;
if(vectordot(var_0E - self.origin,vectornormalize(var_0C.origin - var_05.origin)) > var_0D)
{
break;
}
var_07 = var_0E;
var_06 = var_06 + 0.01;
}
if(var_06 < 1)
{
if(!isdefined(self))
{
break;
}
if(var_03)
{
var_0F = vectornormalize(var_07 - self.origin);
var_10 = vectortoangles(var_0F);
var_10 = (var_10[0],var_10[1],var_05.angles[2]);
self vehicle_teleport(self.origin,var_10);
self vehicle_setvelocity(var_0F * var_0C.speed,(0,0,0));
var_03 = 0;
}
var_11 = vectordot(anglestoforward(param_00.angles),self.origin - param_00.origin);
var_12 = clamp(var_11,self.infront_dist_min * param_01,self.infront_dist_max * param_02);
var_13 = var_11 - var_12;
if(var_13 > 0)
{
var_14 = -87.5;
}
else
{
var_14 = 55;
}
var_15 = param_00 vehicle_getspeed() + var_14;
var_15 = clamp(var_15,50,800);
var_16 = var_09;
var_09 = var_07 + vectornormalize(var_09 - var_07) * var_0D;
var_17 = project_perpendicular(var_09 - self.origin,self vehicle_getvelocity());
var_18 = var_17 * 2;
var_19 = var_07;
var_1A = vectorlerp(anglestoup(var_05.angles),anglestoup(var_0C.angles),var_06);
self vehicledriveto(var_19,var_15,var_1A);
wait 0.05;
}
}
var_05 = var_0C;
}
}
//Function Number: 24
project_perpendicular(param_00,param_01)
{
param_01 = vectornormalize(param_01);
return param_00 - param_01 * vectordot(param_00,vectornormalize(param_01));
}
//Function Number: 25
debug_graph(param_00,param_01,param_02)
{
debug_graph_init();
debug_graph_init_key(param_00,param_01);
level.debug_graph.graphs[param_00].cur_point = level.debug_graph.graphs[param_00].cur_point + 1 % level.debug_graph.graphs[param_00].num_points;
level.debug_graph.graphs[param_00].values[level.debug_graph.graphs[param_00].cur_point] = param_02;
debug_graph_draw(level.debug_graph.graphs[param_00]);
}
//Function Number: 26
debug_graph_init()
{
if(!isdefined(level.debug_graph))
{
level.debug_graph = spawnstruct();
level.debug_graph.graphs = [];
}
}
//Function Number: 27
debug_graph_init_key(param_00,param_01)
{
if(!isdefined(level.debug_graph.graphs[param_00]))
{
level.debug_graph.graphs[param_00] = spawnstruct();
level.debug_graph.graphs[param_00].values = [];
level.debug_graph.graphs[param_00].values[0] = 0;
level.debug_graph.graphs[param_00].cur = 0;
level.debug_graph.graphs[param_00].num_points = 20;
level.debug_graph.graphs[param_00].cur_point = 0;
level.debug_graph.graphs[param_00].color = param_01;
}
}
//Function Number: 28
debug_graph_draw(param_00)
{
var_01 = 50000;
var_02 = undefined;
var_03 = undefined;
for(var_04 = 0;var_04 < param_00.num_points;var_04++)
{
var_03 = var_02;
var_02 = param_00.values[param_00.cur_point + 1 + var_04 % param_00.num_points];
if(isdefined(var_03) && isdefined(var_02))
{
var_05 = level.player getplayerangles();
var_06 = anglestoforward(var_05);
var_07 = anglestoright(var_05) * var_01 * 0.01;
var_08 = anglestoup(var_05) * var_01 * 0.25;
var_09 = level.player geteye() + var_06 * var_01;
}
}
}
//Function Number: 29
fly_think_autopilot_player(param_00)
{
level endon("end_canyon");
self endon("death");
setsaveddvar("vehPlaneAiRollResponseRate",0.05);
setsaveddvar("vehPlaneAiPitchResponseRate",0.05);
setsaveddvar("vehPlaneAiYawResponseRate",0.1);
var_01 = self;
var_02 = 0;
var_03 = self.origin;
var_04 = 1;
while(isdefined(var_01.target))
{
var_05 = getvehiclenode(var_01.target,"targetname");
if(!isdefined(var_05))
{
break;
}
var_02 = 0;
var_06 = var_04 * self vehicle_getspeed() * 17.6;
var_06 = clamp(var_06,1950,7800);
while(var_02 < 1)
{
while(var_02 < 1)
{
var_07 = vectorlerp(var_01.origin,var_05.origin,var_02);
if(vectordot(var_07 - self.origin,anglestoforward(self.angles)) > var_06)
{
break;
}
var_03 = var_07;
var_02 = var_02 + 0.1;
}
if(var_02 < 1)
{
var_08 = param_00;
self vehicledriveto(var_03,var_08);
wait 0.05;
}
}
var_01 = var_05;
}
}
//Function Number: 30
fly_think_formation(param_00)
{
level endon("end_canyon");
self endon("death");
setsaveddvar("vehPlaneAiRollResponseRate",0.05);
setsaveddvar("vehPlaneAiPitchResponseRate",0.05);
setsaveddvar("vehPlaneAiYawResponseRate",0.1);
var_01 = self.formation_pos;
for(;;)
{
var_02 = level.plane vehicle_getspeed();
var_03 = distance(var_01.origin,self.origin);
if(target_is_in_front(var_01) && var_03 > 1000)
{
var_02 = var_02 - 15;
while(target_is_in_front(var_01))
{
wait(0.05);
}
}
else if(target_is_in_front(var_01) && var_03 < 500)
{
var_02 = var_02 - 5;
while(target_is_in_front(var_01))
{
wait(0.05);
}
}
else if(!target_is_in_front(var_01) && var_03 > 500)
{
var_02 = var_02 + 10;
}
else if(!target_is_in_front(var_01) && var_03 < 500)
{
var_02 = var_02;
}
self vehicledriveto(var_01.origin,var_02);
wait(0.1);
}
}
//Function Number: 31
target_is_in_front(param_00,param_01)
{
if(!isdefined(param_01))
{
param_01 = 50;
}
var_02 = offset_position_from_tag("forward","tag_origin",param_01);
var_03 = distance(var_02,param_00.origin);
var_04 = distance(self.origin,param_00.origin);
if(var_03 < var_04)
{
return 0;
}
return 1;
}
//Function Number: 32
is_in_lockon_bounds(param_00)
{
if(target_istarget(param_00) && target_isincircle(param_00,level.player,65,level.plane.lockon_fov))
{
return 1;
}
return 0;
}
//Function Number: 33
try_to_lock_on(param_00)
{
param_00 endon("death");
var_01 = 10;
var_02 = cos(var_01);
if(level.plane islockedonto(param_00))
{
return 0;
}
if(is_true(param_00.ground_target))
{
var_03 = 1;
}
var_03 = 1;
level.plane.acquiring_lock_target = param_00;
for(var_04 = 0;var_04 < var_03;var_04++)
{
var_05 = maps\_utility::get_dot(level.player.eye_origin,vectortoangles(level.player.reticle_origin - level.player.eye_origin),param_00.origin);
if(target_istarget(param_00) && distancesquared(param_00.origin,level.player.origin) <= 1600000000 && var_05 > var_02)
{
wait(0.05);
continue;
}
level.plane.acquiring_lock_target = undefined;
return 0;
}
return 1;
}
//Function Number: 34
try_to_dogfight(param_00)
{
if(!isdefined(level.plane.acquiring_dogfight_target) || level.plane.acquiring_dogfight_target == param_00)
{
var_01 = distance(level.plane.origin,param_00.origin) * 0.0254;
if(var_01 <= 150)
{
if(target_istarget(param_00) && target_isincircle(param_00,level.player,65,130))
{
var_02 = gettime();
if(!isdefined(level.plane.acquiring_dogfight_target))
{
level.plane.acquiring_dogfight_target = param_00;
level.plane.dogfight_time = var_02 + 3000;
}
if(var_02 >= level.plane.dogfight_time)
{
level.plane.dogfight_engaged_target = param_00;
return 1;
}
}
else
{
level.plane.acquiring_dogfight_target = undefined;
}
}
else
{
level.plane.acquiring_dogfight_target = undefined;
}
}
return 0;
}
//Function Number: 35
switch_node_now(param_00,param_01)
{
param_00 endon("death");
if(!isdefined(param_01))
{
return;
}
param_00.attachedpath = undefined;
param_00 notify("newpath");
param_00 thread maps\_vehicle::vehicle_paths(param_01);
param_00 startpath(param_01);
}
//Function Number: 36
has_los(param_00)
{
if(!isdefined(param_00))
{
param_00 = 0;
}
if(bullettracepassed(level.player geteye() + anglestoforward(level.player getgunangles()) * 100,self.origin + (0,0,param_00),0,self))
{
return 1;
}
return 0;
}
//Function Number: 37
player_targeting_think()
{
level notify("kill_player_targeting_think");
level endon("kill_player_targeting_think");
level endon("controlling_missile");
level endon("finale");
while(!isdefined(level.enemy_units))
{
wait(0.05);
}
while(isdefined(self))
{
foreach(var_01 in level.enemy_units)
{
if(!isdefined(var_01.classname))
{
level.enemy_units common_scripts\utility::array_remove(level.enemy_units,var_01);
}
}
var_03 = [];
foreach(var_01 in level.enemy_units)
{
if(!isdefined(var_01))
{
continue;
}
if(isdefined(var_01.ground_target))
{
var_05 = var_01;
}
else
{
var_05 = var_01;
}
if(isdefined(var_05) && !isremovedentity(var_05))
{
var_06 = try_to_lock_on(var_05);
if(isdefined(var_06) && var_06)
{
self.lock_targets[self.lock_targets.size] = var_05;
thread monitor_lockon(var_05);
var_05 thread lockon_behavior();
}
}
}
wait(0.05);
}
}
//Function Number: 38
lockon_behavior()
{
set_optimal_flight_dist(3500 + randomfloatrange(-1000,500));
self.player_locked_on = 1;
}
//Function Number: 39
islockedonto(param_00)
{
foreach(var_02 in self.lock_targets)
{
if(var_02 == param_00)
{
return 1;
}
}
return 0;
}
//Function Number: 40
hud_target_think(param_00)
{
self notify("kill_target_think");
self endon("kill_target_think");
self endon("death");
if(!isdefined(param_00))
{
param_00 = 0;
}
var_01 = 0;
var_02 = 0;
var_03 = 0;
for(;;)
{
waittillframeend;
if(should_show_hud_element(param_00))
{
var_02 = 0;
if(is_true(self.player_shooting_at))
{
var_04 = level.plane.locked_guns_hud;
var_03 = 0;
var_05 = (1,0,0);
var_02 = 1;
}
else if(level.plane islockedonto(self))
{
var_04 = self.default_hud;
var_04 = 0;
var_05 = (1,0,0);
var_02 = 1;
}
else if(isdefined(level.plane.acquiring_lock_target) && level.plane.acquiring_lock_target == self)
{
var_05 = var_05 % 16;
var_04 = level.plane.in_sights_hud + var_05 + 1;
var_04++;
var_05 = (1,1,0);
}
else
{
var_04 = self.default_hud;
var_05 = (0,1,1);
var_03 = 0;
}
if(!var_01)
{
target_setsafe(self);
target_hidefromplayer(self,level.player);
var_01 = 1;
}
if(target_istarget(self))
{
if(var_02)
{
target_showtoplayer(self,level.player);
}
target_setshadersafe(self,var_04);
}
}
else
{
if(target_istarget(self))
{
target_hidefromplayer(self,level.player);
target_remove(self);
var_01 = 0;
var_02 = 0;
}
var_03 = 0;
}
wait 0.05;
}
}
//Function Number: 41
monitor_lockon(param_00)
{
level.player notify("locked_on");
var_01 = level.plane.currentweapon;
while(isdefined(param_00) && islockedonto(param_00) && is_in_lockon_bounds(param_00))
{
wait(0.05);
}
level.player.jethud["LockOn_Overlay"].alpha = 0;
level.player notify("locked_on_off");
if(islockedonto(param_00))
{
self.lock_targets = common_scripts\utility::array_remove(self.lock_targets,param_00);
}
}
//Function Number: 42
should_show_hud_element(param_00)
{
if(!isalive(self))
{
return 0;
}
if(!has_los(param_00))
{
return 0;
}
return 1;
}
//Function Number: 43
plane_init()
{
self.missiletags_right = ["tag_weapon_pod_right"];
self.missiletags_left = ["tag_weapon_pod_left"];
self.last_missile_side = 0;
self.mgun_left = "tag_gun_left";
self.mgun_right = "tag_gun_right";
self.salvo_ammo = [];
self.salvo_ammo[0] = 2;
self.salvo_ammo[1] = 2;
var_00 = self gettagangles("tag_origin");
var_01 = anglestoforward(var_00);
var_02 = self gettagorigin("tag_origin");
var_03 = var_02 + var_01 * 1500;
self.missile_target = common_scripts\utility::spawn_tag_origin();
self.missile_target.origin = var_03;
self.missile_target linkto(self,"tag_origin");
var_03 = var_02 + var_01 * 5000;
self.fake_missile_target = common_scripts\utility::spawn_tag_origin();
self.fake_missile_target.origin = var_03;
self.fake_missile_target linkto(self,"tag_origin");
var_03 = var_02 + var_01 * -3000;
self.fake_enemy_missile_spawn = common_scripts\utility::spawn_tag_origin();
self.fake_enemy_missile_spawn.origin = var_03;
self.fake_enemy_missile_spawn linkto(self,"tag_origin");
level.player notifyonplayercommand("dpad_down","+actionslot 2");
level.player notifyonplayercommand("dpad_left","+actionslot 3");
level.player notifyonplayercommand("dpad_right","+actionslot 4");
level.player notifyonplayercommand("dpad_up","+actionslot 1");
level.player notifyonplayercommand("a_pressed","+gostand");
level.player notifyonplayercommand("b_pressed","+stance");
level.player notifyonplayercommand("b_pressed","+prone");
level.player notifyonplayercommand("b_pressed","toggleprone");
level.player notifyonplayercommand("y_pressed","weapnext");
level.player notifyonplayercommand("fire_guns","+speed_throw");
level.player notifyonplayercommand("fire_guns","+toggleads_throw");
level.player notifyonplayercommand("fire_guns","+ads_akimbo_accessible");
}
//Function Number: 44
debug_enemy_jets_die()
{
}
//Function Number: 45
handle_evasive_controls()
{
level.player notifyonplayercommand("pop_flares","+smoke");
wait 0.05;
for(;;)
{
level.player waittill("pop_flares");
level.plane playsound("plr_jet_deploy_flares");
var_00 = level.plane offset_position_from_tag("backward","tag_origin",120);
playfx(common_scripts\utility::getfx("missile_repel"),var_00);
level.player_popped_flares = 1;
level.flares_active = 1;
thread turn_off_flares();
wait(3);
}
}
//Function Number: 46
turn_off_flares()
{
wait(2);
level.flares_active = 0;
}
//Function Number: 47
monitor_player_shooting()
{
level notify("kill_monitor_player_shooting");
level endon("kill_monitor_player_shooting");
level endon("controlling_missile");
level endon("missionfailed");
level endon("end_canyon");
thread player_shooting_logic(level.player);
self.currentweapon = "none";
self.on_radar_hud = "hud_fofbox_hostile_obstructed";
self.in_sights_hud = "jet_hud_locking_on_";
self.lock_on_hud = "jet_hud_lockon_missile";
self.locked_guns_hud = "jet_hud_target_bullet_lock";
self.target_fov = 30;
self.lockon_fov = 240;
self.lockon_time = 1;
level waittill("jetHUD_init");
level.player.jethud["weaponOverlay"].alpha = 0;
level.player.jethud["weapon_boresight"].alpha = 0;
level.player.jethud["weapon_reticle"].alpha = 0;
while(!common_scripts\utility::flag("canyon_finished"))
{
level.player waittill("fire_guns");
if(common_scripts\utility::flag("canyon_finished"))
{
return;
}
level.player playrumblelooponentity("damage_light");
level.player.jethud["weapon_boresight"].alpha = 0.8;
while(level.player adsbuttonpressed(1) && !common_scripts\utility::flag("canyon_finished"))
{
wait(0.05);
}
level.player stoprumble("damage_light");
level.player.jethud["weapon_boresight"].alpha = 0;
}
}
//Function Number: 48
thermaloff_vianotify(param_00)
{
self waittill(param_00);
self thermalvisionoff();
}
//Function Number: 49
can_shoot_weapons(param_00)
{
if(level.plane.currentweapon == "missiles")
{
return 1;
}
else if(level.plane.currentweapon == "guns" && level.plane can_shoot_guns(param_00))
{
return 1;
}
else if(level.plane.currentweapon == "bombs")
{
return 1;
}
return 0;
}
//Function Number: 50
check_missile_ammo()
{
if(self.salvo_ammo[0] > 0 || self.salvo_ammo[1] > 0)
{
return self.salvo_ammo[1] > self.salvo_ammo[0];
}
return -1;
}
//Function Number: 51
can_shoot_missiles(param_00)
{
if(param_00 == 0 && self.salvo0)
{
return 1;
}
else if(param_00 == 1 && self.salvo1)
{
return 1;
}
return 0;
}
//Function Number: 52
can_shoot_guns(param_00)
{
if(!isdefined(param_00))
{
return 0;
}
if(distance(self.origin,param_00.origin) < 8100)
{
return 1;
}
return 0;
}
//Function Number: 53
player_guns_cooldown_think()
{
self endon("death");
self.guns_max_fire_time = 8;
self.guns_complete_cooldown_time = 1;
self.guns_last_fire_time = 0;
self.guns_fire_time = 0;
for(;;)
{
if(gettime() - self.guns_last_fire_time <= 50)
{
self.guns_fire_time = self.guns_fire_time + 0.05;
}
else
{
self.guns_fire_time = max(0,self.guns_fire_time - self.guns_max_fire_time / self.guns_complete_cooldown_time * 0.05);
}
wait 0.05;
}
}
//Function Number: 54
player_guns_cooldown_shoot_notify()
{
self.guns_last_fire_time = gettime();
}
//Function Number: 55
player_guns_cooldown_can_shoot()
{
return self.guns_fire_time < self.guns_max_fire_time;
}
//Function Number: 56
player_guns_cooldown_get_heat()
{
return clamp(self.guns_fire_time / self.guns_max_fire_time,0,1);
}
//Function Number: 57
player_shooting_logic(param_00)
{
level notify("kill_player_shooting_logic");
level endon("kill_player_shooting_logic");
level endon("controlling_missile");
self endon("death");
var_01 = gettime() * 0.001;
self.salvo0 = 1;
self.salvo1 = 1;
var_02 = 0;
var_03 = 0;
var_04 = 0;
childthread player_missile_firing_logic(param_00);
while(!common_scripts\utility::flag("canyon_finished"))
{
param_00 waittill("fire_guns");
if(common_scripts\utility::flag("canyon_finished"))
{
return;
}
if(param_00 adsbuttonpressed(1))
{
level.player_shot_guns = 1;
thread gun_sound();
while(param_00 adsbuttonpressed(1) && !common_scripts\utility::flag("canyon_finished"))
{
jet_shoot_gun(var_04);
var_04 = !var_04;
wait(0.05);
}
self notify("gun_sound_stop");
}
}
}
//Function Number: 58
player_missile_firing_logic(param_00)
{
level endon("finale");
param_00 notifyonplayercommand("fire_missile","+attack");
param_00 notifyonplayercommand("fire_missile","+attack_akimbo_accessible");
for(;;)
{
param_00 waittill("fire_missile");
var_01 = check_missile_ammo();
if(var_01 > -1)
{
level.player_fired_missiles = 1;
var_02 = undefined;
if(level.plane.lock_targets.size > 0)
{
foreach(var_04 in level.plane.lock_targets)
{
if(!is_true(var_04.player_shooting_at))
{
var_02 = var_04;
break;
}
}
}
if(isdefined(var_02))
{
var_01 = check_missile_ammo();
if(var_01 > -1)
{
var_02.player_shooting_at = 1;
level.plane spawn_cbdr_missile(var_02,undefined,var_01);
var_02 notify("missile_fired_at");
}
}
else
{
level.plane spawn_cbdr_missile(undefined,undefined,var_01);
}
continue;
}
level.plane playsound("plr_jet_missile_ammo_out");
}
}
//Function Number: 59
re_target(param_00)
{
param_00.player_shooting_at = 0;
}
//Function Number: 60
gun_sound()
{
var_00 = common_scripts\utility::spawn_tag_origin();
var_00 linkto(self,"tag_origin",(0,0,0),(0,0,0));
level.plane playsound("s19_mgun_trigger_plr");
var_00 playloopsound("s19_mgun_shot_lp_plr");
common_scripts\utility::waittill_any("gun_sound_stop","finale");
var_00 stoploopsound();
if(isdefined(level.plane))
{
level.plane playsound("s19_mgun_shot_lp_end_plr");
}
var_00 delete();
}
//Function Number: 61
print_distance_on_ent(param_00)
{
var_01 = (0.1,0.2,1);
var_02 = 0.7;
var_03 = 1;
if(!isdefined(param_00))
{
return;
}
param_00 endon("death");
if(!isdefined(param_00.is_objective) || !param_00.is_objective)
{
param_00.hudelements = [];
param_00.is_objective = 1;
param_00.hudelements[0] = newclienthudelem(self);
param_00.hudelements[0].positioninworld = 1;
param_00.hudelements[0] settargetent(param_00);
param_00.hudelements[0].color = var_01;
param_00.hudelements[0].alpha = var_02;
param_00.hudelements[0].alignx = "center";
param_00.hudelements[0].aligny = "top";
param_00.hudelements[0].fontscale = var_03;
param_00.hudelements[1] = newclienthudelem(self);
param_00.hudelements[1].positioninworld = 1;
param_00.hudelements[1] settargetent(param_00);
param_00.hudelements[1].color = var_01;
param_00.hudelements[1].alpha = var_02;
param_00.hudelements[1].alignx = "center";
param_00.hudelements[1].aligny = "middle";
param_00.hudelements[1].fontscale = var_03;
param_00 thread keep_active_distance_text(param_00.hudelements);
}
}
//Function Number: 62
keep_active_distance_text(param_00)
{
var_01 = (0.2,1,0.2);
while(isdefined(self))
{
var_02 = int(distance(self.origin,level.player.origin));
var_03 = int(var_02 / 12);
if(!level.player can_see_ent(self,self))
{
param_00[0].alpha = 0;
wait(0.1);
continue;
}
if((level.plane.currentweapon == "guns" && var_02 < 8100) || level.plane islockedonto(self))
{
param_00[0].alpha = 0;
}
else if(level.plane.currentweapon != "guns")
{
param_00[0].alpha = 0.7;
param_00[0].color = (0.1,1,0.1);
}
else if(level.plane.currentweapon == "guns" && var_02 > 8100)
{
param_00[0].alpha = 0.7;
param_00[0].color = (1,0.9,0.1);
var_03 = int(8100 - var_02 / 12);
}
else
{
param_00[0].alpha = 0.7;
param_00[0].color = (0.1,1,0.1);
}
param_00[0] settext(var_03);
wait(0.05);
}
param_00[0] destroy();
param_00[1] destroy();
}
//Function Number: 63
can_see_ent(param_00,param_01)
{
if(bullettracepassed(self.origin,param_00.origin,0,param_01))
{
return 1;
}
return 0;
}
//Function Number: 64
monitor_missile_target(param_00)
{
self endon("death");
while(isdefined(self.missiletag))
{
wait(0.05);
}
if(isdefined(self) && isdefined(param_00))
{
self missile_settargetent(param_00);
}
}
//Function Number: 65
offset_debug(param_00,param_01)
{
param_00 endon("death");
self endon("death");
param_00.tags = [];
param_00.tags[0] = common_scripts\utility::spawn_tag_origin();
param_00.tags[1] = common_scripts\utility::spawn_tag_origin();
param_00.tags[2] = common_scripts\utility::spawn_tag_origin();
param_00.tags[3] = common_scripts\utility::spawn_tag_origin();
param_00.tags[1].origin = param_00 offset_position_from_tag("up","tag_origin",256);
param_00.tags[2].origin = param_00 offset_position_from_tag("down","tag_origin",256);
param_00.tags[3].origin = param_00 offset_position_from_tag("left","tag_origin",256);
param_00.tags[1] linkto(param_00.tags[0],"tag_origin");
param_00.tags[2] linkto(param_00.tags[0],"tag_origin");
param_00.tags[3] linkto(param_00.tags[0],"tag_origin");
param_00 thread rotate_missile_targets();
return param_00;
}
//Function Number: 66
rotate_missile_targets()
{
var_00 = self.tags[0];
var_01 = self.tags;
for(;;)
{
if(!isdefined(self))
{
break;
}
var_00.origin = self.origin;
var_02 = var_00.angles;
var_00.angles = (var_02[0],var_02[1] + 5,var_02[2]);
wait(0.05);
}
foreach(var_00 in var_01)
{
if(isdefined(var_00))
{
var_00 delete();
}
}
}
//Function Number: 67
player_chooses_manual_control()
{
return 1;
}
//Function Number: 68
move_target_for_squirly_effect(param_00)
{
self endon("death");
var_01 = param_00 common_scripts\utility::spawn_tag_origin();
self.tag_targ = var_01;
self.bomb_target = param_00;
self missile_settargetent(var_01);
thread make_squirly_path(var_01,param_00);
var_02 = (param_00.origin[0],param_00.origin[1],level.player.origin[2]);
var_03 = param_00.origin;
var_04 = distance(self.origin,var_01.origin);
var_05 = var_04;
while(var_05 > var_04 * 0.2)
{
var_05 = distance(self.origin,var_02);
wait(0.05);
}
self notify("end_squirel");
var_01.origin = var_03;
}
//Function Number: 69
make_squirly_path(param_00,param_01)
{
self endon("end_squirel");
var_02 = max(param_01.origin[2] + 2000,level.player.origin[2]);
var_03 = (param_01.origin[0],param_01.origin[1],var_02);
var_04 = param_01.origin;
var_05 = 0.1;
var_06 = distance(self.origin,param_00.origin);
var_07 = var_06;
for(;;)
{
var_08 = randomfloatrange(var_07 * var_05 * -1,var_07 * var_05);
var_09 = randomfloatrange(var_07 * var_05 * -1,var_07 * var_05);
var_0A = randomfloatrange(var_07 * var_05 * -1,var_07 * var_05);
param_00 moveto(var_03 + (var_08,var_09,var_0A),0.25);
var_07 = distance(self.origin,var_03);
wait(0.25);
}
}
//Function Number: 70
monitor_missile_death(param_00,param_01,param_02,param_03)
{
if(!isdefined(param_01))
{
param_01 = level.player;
}
self waittill("explode",var_04);
if(isdefined(param_03) && param_03 != level.plane && distance(param_03.origin,var_04) < 500)
{
if(param_03 trytorepelmissile(self,2,3000,1))
{
return;
}
param_03 delete();
}
if(param_00 && isalive(param_01))
{
radiusdamage(var_04,1500,3000,1500,param_01);
}
if(isdefined(param_02))
{
param_02 delete();
}
}
//Function Number: 71
get_plane_gun_origin(param_00)
{
if(!isdefined(self))
{
return;
}
var_01 = self gettagangles(self.mgun_left);
if(isdefined(param_00))
{
if(param_00)
{
var_02 = offset_position_from_tag("forward",self.mgun_left,500);
var_03 = anglestoright(var_01);
}
else
{
var_02 = offset_position_from_tag("forward",self.mgun_right,500);
var_03 = anglestoright(var_02) * -1;
}
}
else
{
var_02 = self gettagorigin(self.mgun_left) + self gettagorigin(self.mgun_right) * 0.5;
var_03 = (0,0,0);
}
var_04 = anglestoforward(var_01);
var_05 = anglestoup(var_01) * -1;
if(getdvar("vehCam_mode") == "chase")
{
var_02 = var_02 + var_05 * 0 + var_04 * 500 + var_03 * 16;
}
else
{
var_02 = var_02 + var_05 * 150 + var_04 * 500 + var_03 * -50;
}
return var_02;
}
//Function Number: 72
get_plane_gun_angles(param_00)
{
var_01 = self gettagangles(self.mgun_left);
if(getdvar("vehCam_mode") != "chase")
{
var_01 = var_01 + (6,0,0);
}
return var_01;
}
//Function Number: 73
jet_shoot_gun(param_00)
{
var_01 = 0.05;
var_02 = get_plane_gun_origin(param_00);
waittillframeend;
if(isdefined(self.player_gun_lock_target_origin))
{
var_03 = self.player_gun_lock_target_origin;
}
else
{
var_03 = level.player.jethud["hud_tag"].origin;
}
var_03 = var_03 + common_scripts\utility::randomvector(2 * tan(var_01) * distance(var_02,var_03));
var_04 = magicbullet("s19_cannon_player_test",var_02,var_03,level.player);
}
//Function Number: 74
jet_shoot_missile_cbdr(param_00,param_01,param_02)
{
for(var_03 = 0;var_03 < param_01;var_03++)
{
spawn_cbdr_missile(param_00,param_02,0);
}
}
//Function Number: 75
spawn_cbdr_missile(param_00,param_01,param_02)
{
self notify("salvo" + param_02 + "_fired");
self.salvo_ammo[param_02]--;
var_03 = spawn("script_model",(0,0,0));
var_03 playsound("s19_missile_fire_plr");
var_03 hide();
self.last_missile_side++;
if(self.last_missile_side > 1)
{
self.last_missile_side = 0;
}
var_03.origin = offset_position_from_tag("right",self.missiletags_right[0],1000);
if(self.last_missile_side == 1)
{
var_03.origin = offset_position_from_tag("left",self.missiletags_left[0],1000);
}
var_03.origin = var_03.origin - (0,0,50);
var_03.angles = get_plane_gun_angles();
var_03.velocity = self vehicle_getvelocity();
var_03.target_entity = param_00;
var_03 setmodel("projectile_sidewinder_missile");
playfxontag(common_scripts\utility::getfx("missile_trail"),var_03,"tag_origin");
var_03 thread cbdr_missile_think(param_01);
thread reload_ammo(param_02,3);
}
//Function Number: 76
reload_ammo(param_00,param_01)
{
self endon("death");
wait(param_01);
self.salvo_ammo[param_00]++;
}
//Function Number: 77
cbdr_missile_think(param_00)
{
var_01 = 17600;
var_02 = 0.05;
var_03 = 40500;
var_04 = 17280;
var_05 = 0.5;
var_06 = 0.1;
if(!isdefined(param_00))
{
param_00 = 10;
}
var_07 = 1950;
var_08 = (0,0,0);
var_09 = 1.5;
var_0A = 600;
var_0B = cos(30);
var_0C = 4000;
self.velocity = self.velocity * 3;
var_0D = 0;
while(var_0D < 0.5)
{
self.origin = self.origin + self.velocity * 0.05;
self.angles = vectortoangles(self.velocity);
self.velocity = self.velocity * 0.9;
wait(0.05);
self show();
if(isdefined(self.target_entity) && isdefined(self.target_entity.origin))
{
var_0E = distancesquared(self.origin,self.target_entity.origin);
var_0F = vectordot(vectornormalize(self.velocity),vectornormalize(self.target_entity.origin - self.origin));
if(var_0E < 144000000 || var_0F < var_0B)
{
break;
}
}
var_0D = var_0D + 0.05;
}
var_10 = vectornormalize(self.velocity);
var_11 = length(self.velocity);
self.velocity = var_10 + common_scripts\utility::randomvector(var_02) * var_11 + var_01;
var_12 = self.origin + vectornormalize(self.velocity) * 10000;
var_13 = vectornormalize(self.velocity);
var_14 = var_13;
var_15 = 0;
var_16 = 0;
var_17 = 0;
var_18 = 0;
while(var_15 < param_00 && !common_scripts\utility::flag("canyon_finished"))
{
var_19 = 0;
if(isdefined(self.target_entity) && isdefined(self.target_entity.origin))
{
var_19 = 1;
var_16 = 1;
}
if(var_19)
{
var_12 = self.target_entity.origin;
}
else if(!var_16)
{
var_12 = var_12 + length(self.velocity) * var_10 * 0.05;
}
var_1A = var_12 - self.origin;
var_13 = vectornormalize(var_1A);
var_1B = var_13 - var_14 * 20 + var_08 + common_scripts\utility::randomvector(var_09);
var_14 = var_13;
if(!var_17 && var_19 && self.target_entity trytorepelmissile(self,var_15,length(var_1A),undefined,1))
{
var_17 = 1;
self.player_shooting_at = 0;
var_08 = common_scripts\utility::randomvector(100);
}
if(var_17)
{
var_1B = var_1B * -1;
}
var_1C = length(self.velocity);
var_1D = vectornormalize(self.velocity);
if(var_1C < var_03)
{
var_1E = min(var_1C + var_04 * 0.05,var_03);
}
else
{
var_1E = max(var_1C - var_04 * 0.05,var_03);
}
var_1F = var_06;
var_20 = vector_clamp(var_1B * var_1F,var_05);
var_21 = vectornormalize(var_1D + var_20);
self.velocity = var_21 * var_1E;
var_22 = self.origin + self.velocity * 0.05;
if(!var_17 && distance(var_22,var_12) < var_0A)
{
var_18 = 1;
break;
}
if(!bullettracepassed(self.origin,var_22,0,self))
{
break;
}
self.origin = var_22;
self.angles = vectortoangles(self.velocity);
if(!var_17 && vectordot(self.velocity,var_12 - var_22) < 0)
{
break;
}
var_15 = var_15 + 0.05;
wait 0.05;
}
if(!var_17)
{
if(var_18)
{
self.target_entity notify("damage",var_0C,level.player,(0,0,0),(0,0,0),"MOD_EXPLOSIVE","","");
}
radiusdamage(self.origin,var_0A * 3,var_0C,var_0C,level.player);
}
if(var_18 && isdefined(self.target_entity))
{
if(!is_true(self.target_entity.ground_target))
{
}
}
else if(var_15 >= param_00)
{
playfx(common_scripts\utility::getfx("missile_explode"),self.origin,vectornormalize(self.velocity) * -1);
}
else
{
playfx(common_scripts\utility::getfx("canyon_impact"),self.origin,vectornormalize(self.velocity) * -1);
}
if(isdefined(self.target_entity) && !var_18)
{
re_target(self.target_entity);
}
self delete();
}
//Function Number: 78
trytorepelmissile(param_00,param_01,param_02,param_03,param_04)
{
if(!is_true(param_04) && is_true(self.player_shooting_at))
{
return 0;
}
if(!isdefined(self.has_flares) || self.has_flares < 1)
{
return 0;
}
if(param_01 < 0.5)
{
return 0;
}
if(param_02 > 3000)
{
return 0;
}
if(is_true(param_03) == 0 && isdefined(self.last_flare_time) && self.last_flare_time + 2000 > gettime())
{
return 0;
}
if(is_true(param_04))
{
var_05 = 20000;
var_06 = maps\_utility::getdifficulty();
switch(var_06)
{
case "medium":
var_05 = 18000;
break;
case "hard":
var_05 = 15000;
break;
case "fu":
var_05 = 10000;
break;
}
var_05 = var_05 * var_05;
if(!common_scripts\utility::flag("ai_repel_missiles_ok") || distancesquared(level.plane.origin,self.origin) < var_05)
{
return 0;
}
if(is_true(level.repel_player_missile))
{
level.repel_player_missile = 0;
return 0;
}
else
{
level.repel_player_missile = 1;
}
}
playfx(common_scripts\utility::getfx("missile_repel"),param_00.origin);
self.has_flares--;
self.last_flare_time = gettime();
return 1;
}
//Function Number: 79
vector_clamp(param_00,param_01)
{
var_02 = length(param_00);
if(var_02 > param_01)
{
return param_00 * param_01 / var_02;
}
return param_00;
}
//Function Number: 80
monitor_plane_speed()
{
level notify("kill_monitor_plane_speed");
level endon("kill_monitor_plane_speed");
level endon("controlling_missile");
self endon("death");
var_00 = 35;
var_01 = 45;
for(;;)
{
var_02 = self vehicle_getspeed();
setsaveddvar("vehPlaneControlForceReferenceSpeed",var_02);
setsaveddvar("vehPlaneMaxControlForceScale",150);
setsaveddvar("vehPlaneMaxControlForcePitch",0.8);
setsaveddvar("vehPlaneMaxControlForceRoll",1);
setsaveddvar("vehPlaneMaxControlForceYaw",0.8);
var_03 = var_00 + var_02 / 50;
var_04 = var_01 + var_02 / 50;
setsaveddvar("vehPlaneWingLoading",var_03);
setsaveddvar("vehPlaneFuselageLoading",var_01);
wait(0.1);
}
}
//Function Number: 81
standard_plane_controls()
{
regular_plane_controls();
if(getdvarint("vehPlaneControlScheme") >= 2)
{
self vehicle_setspeedimmediate(333,10);
arcade_plane_controls();
return;
}
if(level.mini_version)
{
self vehicle_setspeedimmediate(500,50);
mini_plane_controls();
return;
}
self vehicle_setspeedimmediate(500,50);
regular_plane_controls();
}
//Function Number: 82
regular_plane_controls()
{
setsaveddvar("vehPlaneGravity",386);
setsaveddvar("vehPlaneMass",15000);
setsaveddvar("vehPlaneWingLoading",85);
setsaveddvar("vehPlaneFuselageLoading",105);
setsaveddvar("vehPlaneThrustToWeightRatio",2.5);
setsaveddvar("vehPlaneParasiticDragCoeff",0.03);
setsaveddvar("vehPlaneMaxControlForceScale",40);
setsaveddvar("vehPlaneMaxControlForceRoll",1);
setsaveddvar("vehPlaneMaxControlForcePitch",0.5);
setsaveddvar("vehPlaneMaxControlForceYaw",0.5);
setsaveddvar("vehPlaneControlForceReferenceSpeed",200);
setsaveddvar("vehPlaneMaxRightingForceScale",3);
setsaveddvar("vehPlaneRightingForceReferenceSpeed",450);
setsaveddvar("vehPlaneDihedralCoeff",3);
setsaveddvar("vehPlaneDampingRoll",0.15);
setsaveddvar("vehPlaneDampingYaw",0.4);
setsaveddvar("vehPlaneDampingPitch",0.2);
setsaveddvar("vehPlaneControlSquaring",0.1);
setsaveddvar("vehPlaneControlExponent",1.5);
setsaveddvar("vehPlaneControlYawRollCoupling",0);
setsaveddvar("vehPlaneControlRollYawCoupling",0.2);
setsaveddvar("vehPlaneControlLowpassCoeff",0);
setsaveddvar("vehPlaneTurbulenceStrength",0);
setsaveddvar("vehPlaneWingLeveling",0.15);
}
//Function Number: 83
mini_plane_controls()
{
setsaveddvar("vehPlaneGravity",77);
setsaveddvar("vehPlaneMass",3000);
setsaveddvar("vehPlaneWingLoading",17);
setsaveddvar("vehPlaneFuselageLoading",20);
setsaveddvar("vehPlaneThrustToWeightRatio",3);
setsaveddvar("vehPlaneParasiticDragCoeff",0.03);
setsaveddvar("vehPlaneMaxControlForceScale",20);
setsaveddvar("vehPlaneMaxControlForceRoll",1);
setsaveddvar("vehPlaneMaxControlForcePitch",1);
setsaveddvar("vehPlaneMaxControlForceYaw",0.5);
setsaveddvar("vehPlaneControlForceReferenceSpeed",40);
setsaveddvar("vehPlaneMaxRightingForceScale",3);
setsaveddvar("vehPlaneRightingForceReferenceSpeed",200);
setsaveddvar("vehPlaneDihedralCoeff",3);
setsaveddvar("vehPlaneDampingRoll",0.15);
setsaveddvar("vehPlaneDampingYaw",0.4);
setsaveddvar("vehPlaneDampingPitch",0.2);
setsaveddvar("vehPlaneControlSquaring",0.1);
setsaveddvar("vehPlaneControlExponent",1.5);
setsaveddvar("vehPlaneControlYawRollCoupling",0);
setsaveddvar("vehPlaneControlRollYawCoupling",0.2);
setsaveddvar("vehPlaneControlLowpassCoeff",0);
setsaveddvar("vehPlaneTurbulenceStrength",0);
setsaveddvar("vehPlaneWingLeveling",0.15);
}
//Function Number: 84
boost_plane_controls()
{
setsaveddvar("vehPlaneGravity",386);
setsaveddvar("vehPlaneMass",15000);
setsaveddvar("vehPlaneWingLoading",105);
setsaveddvar("vehPlaneFuselageLoading",125);
setsaveddvar("vehPlaneThrustToWeightRatio",8.5);
setsaveddvar("vehPlaneParasiticDragCoeff",0.03);
setsaveddvar("vehPlaneMaxControlForceScale",50);
setsaveddvar("vehPlaneMaxControlForceRoll",1);
setsaveddvar("vehPlaneMaxControlForcePitch",0.5);
setsaveddvar("vehPlaneMaxControlForceYaw",0.5);
setsaveddvar("vehPlaneControlForceReferenceSpeed",800);
setsaveddvar("vehPlaneMaxRightingForceScale",3);
setsaveddvar("vehPlaneRightingForceReferenceSpeed",650);
setsaveddvar("vehPlaneDihedralCoeff",3);
setsaveddvar("vehPlaneDampingRoll",0.15);
setsaveddvar("vehPlaneDampingYaw",0.4);
setsaveddvar("vehPlaneDampingPitch",0.2);
setsaveddvar("vehPlaneControlSquaring",0.1);
setsaveddvar("vehPlaneControlExponent",1.5);
setsaveddvar("vehPlaneControlYawRollCoupling",0);
setsaveddvar("vehPlaneControlRollYawCoupling",0.2);
setsaveddvar("vehPlaneControlLowpassCoeff",0);
setsaveddvar("vehPlaneTurbulenceStrength",0);
setsaveddvar("vehPlaneWingLeveling",0.15);
}
//Function Number: 85
slow_plane_controls()
{
setsaveddvar("vehPlaneGravity",386);
setsaveddvar("vehPlaneMass",15000);
setsaveddvar("vehPlaneWingLoading",65);
setsaveddvar("vehPlaneFuselageLoading",105);
setsaveddvar("vehPlaneThrustToWeightRatio",1.3);
setsaveddvar("vehPlaneParasiticDragCoeff",0.03);
setsaveddvar("vehPlaneMaxControlForceScale",40);
setsaveddvar("vehPlaneMaxControlForceRoll",1);
setsaveddvar("vehPlaneMaxControlForcePitch",0.5);
setsaveddvar("vehPlaneMaxControlForceYaw",0.5);
setsaveddvar("vehPlaneControlForceReferenceSpeed",160);
setsaveddvar("vehPlaneMaxRightingForceScale",3);
setsaveddvar("vehPlaneRightingForceReferenceSpeed",300);
setsaveddvar("vehPlaneDihedralCoeff",3);
setsaveddvar("vehPlaneDampingRoll",0.15);
setsaveddvar("vehPlaneDampingYaw",0.4);
setsaveddvar("vehPlaneDampingPitch",0.2);
setsaveddvar("vehPlaneControlSquaring",0.1);
setsaveddvar("vehPlaneControlExponent",1.5);
setsaveddvar("vehPlaneControlYawRollCoupling",0);
setsaveddvar("vehPlaneControlRollYawCoupling",0.2);
setsaveddvar("vehPlaneControlLowpassCoeff",0);
setsaveddvar("vehPlaneTurbulenceStrength",0);
setsaveddvar("vehPlaneWingLeveling",0.15);
}
//Function Number: 86
arcade_plane_controls()
{
setsaveddvar("vehPlaneControlSquaring",0.1);
setsaveddvar("vehPlaneControlYawRollCoupling",0);
setsaveddvar("vehPlaneControlRollYawCoupling",0);
setsaveddvar("vehPlaneControlLowpassCoeff",0.8);
setsaveddvar("vehPlanePitchDeadZoneWhileRolling",0.3);
setsaveddvar("vehPlaneRollLerpRate",0.1);
setsaveddvar("vehPlaneControlExponent",3);
setsaveddvar("vehPlaneMaxYawRatePerSec",330);
setsaveddvar("vehPlaneMaxPitchDiffPerSec",45);
setsaveddvar("vehPlaneCollisionLookAheadTime",0);
}
//Function Number: 87
plane_test(param_00,param_01,param_02)
{
if(!isdefined(param_01))
{
param_01 = 1;
}
level notify("reset_plane_monitoring");
common_scripts\utility::flag_set("playerPlaneNoDeath");
level.player enableinvulnerability();
level.fake_plane = maps\_utility::spawn_anim_model("cockpit");
level.fake_plane hidepart("TAG_SCREEN_JOINT_LOAD");
level.fake_plane hidepart("TAG_TRANSFER_AR");
thread maps\_anim::anim_loop_solo(level.fake_plane,"idle");
self.healthbuffer = 0;
self.maxhealth = 100000;
self.health = 100000;
level.player.ads_on = 0;
level.repel_player_missile = 0;
if(level.nextgen)
{
setsaveddvar("r_mbEnable","2");
setsaveddvar("r_mbVelocityScalar",2);
setsaveddvar("r_mbCameraRotationInfluence","0");
}
if(!isdefined(self.plane_intialized) || isdefined(self.plane_intialized) && !self.plane_intialized)
{
plane_init();
self.plane_intialized = 1;
}
thread plane_health_monitor();
thread monitor_player_shooting();
wait 0.05;
thread player_targeting_think();
if(param_01)
{
self makeunusable();
level.player mountvehicle(self);
setsaveddvar("vehCam_mode","1");
setsaveddvar("sv_znear","16");
}
setomnvar("ui_playerplane_hud",1);
thread fighter_jet_hud(level.player,self);
thread fighter_jet_sounds(level.player,self);
thread fighter_jet_crash_detection(level.player,self);
thread fighter_jet_gun_hud();
setdvar("cockpit_offset",(0,0,0));
setdvar("cockpit_angles",(0,0,0));
thread fighter_jet_handle_cockpit(level.player,self);
thread fighter_jet_handle_throttle(level.player,self,param_02);
if(!isdefined(param_00))
{
param_00 = 333;
}
self vehicle_setspeedimmediate(param_00,10);
if(is_true(level.old_controls))
{
setsaveddvar("vehPlaneControlScheme",1);
}
else
{
setsaveddvar("vehPlaneControlScheme",3);
}
standard_plane_controls();
}
//Function Number: 88
handle_chase_cam_toggle()
{
self notifyonplayercommand("toggle_chase_cam","+actionslot 1");
for(;;)
{
self waittill("toggle_chase_cam");
toggle_chase_cam();
}
}
//Function Number: 89
toggle_chase_cam()
{
if(!isdefined(level.plane_chase_cam))
{
level.plane_chase_cam = getdvar("vehCam_mode") == "chase";
}
var_00 = anglestoforward((6,0,0)) * 10000;
if(level.plane_chase_cam)
{
setsaveddvar("vehCam_mode","1");
level.fake_plane show();
level.plane hide();
setsaveddvar("vehPlaneRollLerpRate",0.1);
thread fighter_jet_handle_cockpit(level.player,level.plane);
}
else
{
setsaveddvar("vehCam_mode","3");
level.fake_plane hide();
level.plane show();
setsaveddvar("vehPlaneRollLerpRate",0.25);
var_00 = getdvarvector("vehCam_chaseOffset");
var_00 = var_00 + anglestoforward(getdvarvector("vehCam_chaseAngleOffset")) * 10000;
}
level.player.jethud["hud_tag"] unlink();
level.player.jethud["hud_tag"] linkto(level.plane,"tag_origin",var_00,(0,0,0));
level.player.jethud["hud_tag"] dontinterpolate();
level.plane_chase_cam = !level.plane_chase_cam;
}
//Function Number: 90
fighter_jet_max_altitude(param_00,param_01)
{
var_02 = -1000;
var_03 = 1000;
var_04 = 0.05;
for(;;)
{
var_05 = (0,0,var_02);
var_06 = (0,0,-1);
var_07 = param_01.origin - var_05;
var_08 = vectordot(var_07,var_06);
if(var_08 < var_03)
{
var_09 = maps\_shg_utility::linear_map_clamp(var_08,var_03,0 - var_03,0,2);
var_0A = param_01 vehicle_getvelocity();
var_0B = vectornormalize(var_0A);
var_0C = vectordot(var_0B,var_06);
if(var_0C < var_04)
{
var_0D = length(var_0A);
var_0E = vectordot(var_0A,var_06) * var_09 - var_04 * var_0D;
var_0F = vectornormalize(var_0A - var_0E * var_06) * var_0D;
param_01 vehicle_setvelocity(var_0F);
}
}
wait 0.05;
}
}
//Function Number: 91
fighter_jet_handle_cockpit(param_00,param_01)
{
param_01 hide();
var_02 = level.fake_plane;
var_02 notsolid();
var_03 = getdvarvector("cockpit_offset");
var_04 = getdvarvector("cockpit_angles");
var_02 linktoplayerview(param_00,"tag_origin",var_03,var_04,1);
fighter_jet_handle_cockpit_motion(param_00,param_01,var_02,var_03,var_04);
}
//Function Number: 92
remove_cockpit_from_view(param_00,param_01,param_02)
{
level endon("finale");
level.player common_scripts\utility::waittill_any("player_eject","toggle_chase_cam");
param_02 unlinkfromplayerview(param_00);
}
//Function Number: 93
fighter_jet_set_shake(param_00,param_01)
{
level notify("jet_shake");
level endon("jet_shake");
level.jet_shake = param_00;
var_02 = param_00 / param_01 / 0.05;
while(param_01 > 0)
{
wait(0.05);
level.jet_shake = level.jet_shake - var_02;
param_01 = param_01 - 0.05;
}
level.jet_shake = 0;
}
//Function Number: 94
fighter_jet_handle_cockpit_motion(param_00,param_01,param_02,param_03,param_04)
{
level.player endon("toggle_chase_cam");
thread remove_cockpit_from_view(param_00,param_01,param_02);
var_05 = 0.1;
var_06 = 0.1;
var_07 = 0.975;
var_08 = 0.002;
var_09 = 0.005;
var_0A = 0.002;
var_0B = 10;
var_0C = 5;
var_0D = 5;
var_0E = 6E-05;
var_0F = 0.006;
for(var_10 = 1;var_10 < 8;var_10++)
{
if(isdefined(param_01))
{
param_01 maps\_shg_utility::get_differentiated_acceleration();
}
wait 0.05;
}
var_11 = param_01.angles;
var_12 = (0,0,0);
var_13 = (0,0,0);
var_14 = (0,0,0);
var_15 = (0,0,0);
var_16 = (0,0,0);
while(isalive(level.player))
{
if(isdefined(param_01))
{
var_17 = param_01 maps\_shg_utility::get_differentiated_acceleration() + (0,0,386);
var_18 = transformmove((0,0,0),(0,0,0),(0,0,0),param_01.angles,var_17,(0,0,0))["origin"];
var_19 = angles_clamp_180(transformmove((0,0,0),(0,0,0),(0,0,0),var_11,(0,0,0),param_01.angles)["angles"]) * 20;
var_11 = param_01.angles;
var_1A = var_19 - var_12 * 20;
var_12 = var_19;
var_13 = vectorlerp(var_13,var_18,var_05);
var_1B = var_18 - var_13;
var_14 = vectorlerp(var_14,var_19,var_05);
var_1C = var_19 - var_14;
var_1D = (var_1B[0] * var_06 * var_08,var_1B[1] * var_06 * var_09,var_1B[2] * var_06 * var_0A);
if(level.player_boosting)
{
var_1D = var_1D * 1.25;
}
var_15 = vectorlerp(var_1D,var_15,var_07);
var_1E = (var_1C[0] * var_06 * var_0C,var_1C[1] * var_06 * var_0D,var_1C[2] * var_06 * var_0B);
var_16 = euler_lerp(var_1E,var_16,var_07);
var_1F = var_15 + common_scripts\utility::randomvector(var_0E * length(var_18));
var_20 = var_16 + common_scripts\utility::randomvector(var_0F * length(var_19));
if(isdefined(level.jet_shake) && level.jet_shake > 0)
{
var_1F = var_1F + common_scripts\utility::randomvector(level.jet_shake);
}
var_21 = transformmove(var_1F,var_20,(0,0,0),(0,0,0),param_03,param_04);
param_02 unlinkfromplayerview(param_00);
param_02 linktoplayerview(param_00,"tag_origin",var_21["origin"],var_21["angles"],1);
}
wait 0.05;
}
}
//Function Number: 95
fighter_jet_handle_throttle(param_00,param_01,param_02)
{
param_01 endon("death");
if(!isdefined(param_02))
{
param_01 vehicle_planethrottleoverride(level.current_median_speed);
}
else
{
var_03 = 0;
while(var_03 < level.current_median_speed)
{
param_01 vehicle_planethrottleoverride(var_03);
wait(0.2);
var_03 = var_03 + 0.05;
}
}
param_00 notifyonplayercommand("boost_start","+gostand");
param_00 notifyonplayercommand("boost_stop","-gostand");
param_00 notifyonplayercommand("brake_click","+stance");
param_00 notifyonplayercommand("brake_click","+prone");
param_00 notifyonplayercommand("brake_click","toggleprone");
thread handle_jet_brake(param_00,param_01);
thread handle_jet_boost(param_00,param_01);
}
//Function Number: 96
watch_player_braking(param_00)
{
common_scripts\utility::flag_set("player_braking");
wait(2);
param_00 notify("brake_abort");
common_scripts\utility::flag_clear("player_braking");
}
//Function Number: 97
process_flight_path(param_00)
{
level notify("new_flight_path");
level endon("new_flight_path");
var_01 = 0;
var_02 = [];
var_03 = 0;
var_04 = undefined;
var_05 = common_scripts\utility::getstruct(param_00,"targetname");
for(var_02[var_01] = var_05;isdefined(var_05.target);var_02[var_01] = var_05)
{
var_05 = common_scripts\utility::getstruct(var_05.target,"targetname");
var_01++;
}
var_06 = var_02[var_03 + 1].origin - var_02[var_03].origin;
var_06 = (var_06[0],var_06[1],0);
var_07 = vectortoangles(var_06)[1];
setsaveddvar("vehPlanePathAngle",var_07);
if(var_03 + 2 < var_02.size)
{
var_04 = var_02[var_03 + 2].origin - var_02[var_03 + 1].origin;
}
else
{
var_04 = var_06;
}
for(;;)
{
wait(0.5);
var_08 = level.player.origin - var_02[var_03 + 1].origin;
var_09 = vectordot(var_04,var_08);
if(var_09 > 0)
{
var_03++;
if(var_03 == var_02.size - 1)
{
break;
}
var_06 = var_04;
var_06 = (var_06[0],var_06[1],0);
var_07 = vectortoangles(var_06)[1];
setsaveddvar("vehPlanePathAngle",var_07);
if(var_03 + 2 < var_02.size)
{
var_04 = var_02[var_03 + 2].origin - var_02[var_03 + 1].origin;
}
else
{
var_04 = var_06;
}
}
if(common_scripts\utility::flag("canyon_finished"))
{
break;
}
}
setsaveddvar("vehPlanePathAngle",-1);
setsaveddvar("vehPlanePathAllowance",0);
}
//Function Number: 98
handle_jet_brake(param_00,param_01)
{
level.player_airbraked = 0;
while(!common_scripts\utility::flag("canyon_finished"))
{
param_00 waittill("brake_click");
if(common_scripts\utility::flag("canyon_finished"))
{
return;
}
level.player_airbraked = 1;
thread watch_player_braking(param_00);
param_01 playsound("plr_jet_airbrake");
if(level.nextgen)
{
setsaveddvar("r_mbVelocityScalar",1.1);
}
param_01 vehicle_planethrottleoverride(0.01);
level.player_braking = 1;
param_00 playrumblelooponentity("damage_heavy");
if(!level.player.ads_on)
{
param_00 lerpfov(60,1);
}
if(level.player_boosting)
{
param_00 notify("boost_stop");
wait 0.05;
}
param_00 common_scripts\utility::waittill_notify_or_timeout("brake_abort",2);
param_01 vehicle_planethrottleoverride(0.25);
common_scripts\utility::flag_waitopen("player_braking");
level.player_braking = 0;
param_00 stoprumble("damage_heavy");
if(!level.player.ads_on)
{
param_00 lerpfov(65,1);
}
if(level.nextgen)
{
setsaveddvar("r_mbVelocityScalar",2);
}
param_01 vehicle_planethrottleoverride(level.current_median_speed);
wait(0);
wait 0.05;
}
}
//Function Number: 99
handle_jet_boost(param_00,param_01)
{
level endon("death");
var_02 = common_scripts\utility::spawn_tag_origin();
var_02 linkto(param_00,"",(0,0,0),(0,0,0));
while(!common_scripts\utility::flag("canyon_finished"))
{
param_00 waittill("boost_start");
if(common_scripts\utility::flag("canyon_finished"))
{
return;
}
param_01 playsound("plr_jet_boost_start");
if(level.nextgen)
{
setsaveddvar("r_mbEnable","2");
setsaveddvar("r_mbVelocityScalar",10);
setsaveddvar("r_mbCameraRotationInfluence","0");
}
param_01 vehicle_planethrottleoverride(1);
level.player_boosting = 1;
level.player_boost_time = gettime();
level notify("player_boost_start");
param_00 playrumblelooponentity("damage_heavy");
earthquake(0.5,1,level.player.origin,512);
if(!level.player.ads_on)
{
param_00 lerpfov(75,1);
}
var_02 playloopsound("plr_jet_boost_loop");
if(level.player_braking)
{
param_00 notify("brake_abort");
wait 0.05;
}
while(level.player jumpbuttonpressed() && !common_scripts\utility::flag("canyon_finished"))
{
thread fighter_jet_set_shake(0.25,0.25);
wait(0.05);
}
level.player_boosting = 0;
param_00 stoprumble("damage_heavy");
if(!level.player.ads_on)
{
param_00 lerpfov(65,1);
}
if(level.nextgen)
{
setsaveddvar("r_mbVelocityScalar",2);
}
param_01 vehicle_planethrottleoverride(level.current_median_speed);
var_02 stoploopsound();
param_01 playsound("plr_jet_boost_stop");
wait 0.05;
}
}
//Function Number: 100
handle_ads()
{
level endon("death");
while(!common_scripts\utility::flag("finale"))
{
var_00 = level.player adsbuttonpressed();
var_01 = undefined;
if(var_00 && !level.player.ads_on)
{
level.player.ads_on = 1;
var_01 = 30;
}
else if(!var_00 && level.player.ads_on)
{
level.player.ads_on = 0;
var_01 = 65;
if(level.player_braking)
{
var_01 = 60;
}
if(level.player_boosting)
{
var_01 = 75;
}
}
if(isdefined(var_01))
{
level.player lerpfov(var_01,0.25);
}
wait(0.05);
}
}
//Function Number: 101
angles_clamp_180(param_00)
{
return (angleclamp180(param_00[0]),angleclamp180(param_00[1]),angleclamp180(param_00[2]));
}
//Function Number: 102
angle_lerp(param_00,param_01,param_02)
{
return angleclamp(param_00 + angleclamp180(param_01 - param_00) * param_02);
}
//Function Number: 103
euler_lerp(param_00,param_01,param_02)
{
return (angle_lerp(param_00[0],param_01[0],param_02),angle_lerp(param_00[1],param_01[1],param_02),angle_lerp(param_00[2],param_01[2],param_02));
}
//Function Number: 104
remove_fighter_jet_hud()
{
self waittill("remove_jet_hud");
foreach(var_01 in self.jethud)
{
if(isarray(var_01))
{
foreach(var_03 in var_01)
{
if(!isarray(var_03))
{
var_03.alpha = 0;
}
}
continue;
}
var_01.alpha = 0;
}
}
//Function Number: 105
fighter_jet_hud(param_00,param_01)
{
param_00 thread remove_fighter_jet_hud();
self endon("end_canyon");
var_02 = 600;
var_03 = (0.2,1,0.2);
var_04 = (0.4,1,0.4);
var_05 = 0.5;
var_06 = 1.5;
var_07 = 0.868976;
var_08 = 9;
var_09 = 10;
var_0A = 5;
var_0B = 25;
var_0C = 10;
var_0D = 5;
var_0E = 2;
var_0F = 5;
var_10 = 0.5;
if(!isdefined(param_00.jethud))
{
param_00.jethud = [];
}
else
{
level notify("jetHUD_init");
return;
}
var_11 = anglestoforward((6,0,0)) * 10000;
if(getdvar("vehCam_mode") == "chase")
{
var_11 = getdvarvector("vehCam_chaseOffset");
var_11 = var_11 + anglestoforward(getdvarvector("vehCam_chaseAngleOffset")) * 10000;
}
param_00.jethud["hud_tag"] = common_scripts\utility::spawn_tag_origin();
param_00.jethud["hud_tag"] linkto(param_01,"tag_origin",var_11,(0,0,0));
param_00.jethud["weapon_bore_tag"] = common_scripts\utility::spawn_tag_origin();
param_00.jethud["weapon_bore_tag"] linkto(param_01,"tag_origin",var_11,(0,0,0));
param_00.jethud["weapon_reticle_tag"] = common_scripts\utility::spawn_tag_origin();
param_00.jethud["weapon_reticle_tag"] linkto(param_01,"tag_origin",var_11,(0,0,0));
param_00.jethud["boresight"] = newclienthudelem(param_00);
param_00.jethud["boresight"].positioninworld = 1;
param_00.jethud["boresight"] settargetent(param_00.jethud["hud_tag"]);
param_00.jethud["boresight"].alignx = "center";
param_00.jethud["boresight"].aligny = "middle";
param_00.jethud["boresight"] setshader("hud_plane_reticle",40,40);
param_00.jethud["boresight"].alpha = var_05;
param_00.jethud["lockon_warning"] = newclienthudelem(param_00);
param_00.jethud["lockon_warning"].hidewheninmenu = 1;
param_00.jethud["lockon_warning"].hidewhendead = 1;
param_00.jethud["lockon_warning"].alignx = "center";
param_00.jethud["lockon_warning"].aligny = "middle";
param_00.jethud["lockon_warning"].x = 320;
param_00.jethud["lockon_warning"].y = 320;
param_00.jethud["lockon_warning"] settext("ENEMY LOCK");
param_00.jethud["lockon_warning"].color = (1,0.2,0.2);
param_00.jethud["lockon_warning"].alpha = 0;
param_00.jethud["lockon_warning"].fontscale = 3;
param_00.jethud["speed_indicator"] = newclienthudelem(param_00);
param_00.jethud["speed_indicator"].positioninworld = 1;
param_00.jethud["speed_indicator"] settargetent(param_00.jethud["hud_tag"]);
param_00.jethud["speed_indicator"].alignx = "right";
param_00.jethud["speed_indicator"].aligny = "middle";
param_00.jethud["speed_indicator"].x = -300;
param_00.jethud["speed_indicator"].y = 0;
param_00.jethud["speed_indicator"].color = var_03;
param_00.jethud["speed_indicator"].alpha = 0;
param_00.jethud["speed_indicator"].fontscale = var_06;
param_00.jethud["jetWeapons"] = newclienthudelem(param_00);
param_00.jethud["jetWeapons"].positioninworld = 1;
param_00.jethud["jetWeapons"] settargetent(param_00.jethud["hud_tag"]);
param_00.jethud["jetWeapons"].alignx = "center";
param_00.jethud["jetWeapons"].aligny = "top";
param_00.jethud["jetWeapons"].y = -50;
param_00.jethud["jetWeapons"].color = var_03;
param_00.jethud["jetWeapons"].glowcolor = var_04;
param_00.jethud["jetWeapons"].alpha = 0;
param_00.jethud["jetWeapons"].fontscale = var_06;
param_00.jethud["weaponOverlay"] = newclienthudelem(param_00);
param_00.jethud["weaponOverlay"].positioninworld = 1;
param_00.jethud["weaponOverlay"] settargetent(param_00.jethud["hud_tag"]);
param_00.jethud["weaponOverlay"] setshader("jet_hud_overlay_cannon_1",640,480);
param_00.jethud["weaponOverlay"].alignx = "center";
param_00.jethud["weaponOverlay"].aligny = "middle";
param_00.jethud["weaponOverlay"].alpha = 0.35;
param_00.jethud["weaponOverlay"].fontscale = var_06;
param_00.jethud["weapon_boresight"] = newclienthudelem(param_00);
param_00.jethud["weapon_boresight"].positioninworld = 1;
param_00.jethud["weapon_boresight"] settargetent(param_00.jethud["weapon_bore_tag"]);
param_00.jethud["weapon_boresight"] setshader("jet_hud_overlay_cannon_boresight",640,480);
param_00.jethud["weapon_boresight"].alignx = "center";
param_00.jethud["weapon_boresight"].aligny = "middle";
param_00.jethud["weapon_boresight"].alpha = 0.8;
param_00.jethud["weapon_boresight"].fontscale = var_06;
param_00.jethud["weapon_reticle"] = newclienthudelem(param_00);
param_00.jethud["weapon_reticle"].positioninworld = 1;
param_00.jethud["weapon_reticle"] settargetent(param_00.jethud["weapon_reticle_tag"]);
param_00.jethud["weapon_reticle"] setshader("jet_hud_overlay_cannon_boresight",640,480);
param_00.jethud["weapon_reticle"].alignx = "center";
param_00.jethud["weapon_reticle"].aligny = "middle";
param_00.jethud["weapon_reticle"].alpha = 0.8;
param_00.jethud["weapon_reticle"].fontscale = var_06;
var_12 = 4;
var_13 = -325;
var_14 = 325;
var_15 = -120;
var_16 = 35;
var_17 = [];
var_17[0] = make_missile_ammo_hud(0,level.plane.salvo_ammo[0],var_13,var_15,param_00.jethud["hud_tag"]);
var_17[1] = make_missile_ammo_hud(1,level.plane.salvo_ammo[1],var_13,var_16,param_00.jethud["hud_tag"]);
param_00.jethud["missile_ammo"] = array_combine_all(var_17[0],var_17[1]);
param_00.jethud["weapon_bore"] = newclienthudelem(param_00);
param_00.jethud["weapon_bore"].positioninworld = 1;
param_00.jethud["weapon_bore"] settargetent(param_00.jethud["weapon_bore_tag"]);
param_00.jethud["weapon_bore"].alignx = "center";
param_00.jethud["weapon_bore"].aligny = "middle";
param_00.jethud["weapon_bore"].alpha = 0;
param_00.jethud["weapon_bore"].fontscale = var_06;
param_00.jethud["LockOn_Overlay"] = newclienthudelem(param_00);
param_00.jethud["LockOn_Overlay"].positioninworld = 1;
param_00.jethud["LockOn_Overlay"] settargetent(param_00.jethud["weapon_bore_tag"]);
param_00.jethud["LockOn_Overlay"].alignx = "center";
param_00.jethud["LockOn_Overlay"].aligny = "middle";
param_00.jethud["LockOn_Overlay"].alpha = 0;
param_00.jethud["LockOn_Overlay"].fontscale = var_06;
param_00.jethud["altitude_indicator"] = newclienthudelem(param_00);
param_00.jethud["altitude_indicator"].positioninworld = 1;
param_00.jethud["altitude_indicator"] settargetent(param_00.jethud["hud_tag"]);
param_00.jethud["altitude_indicator"].alignx = "left";
param_00.jethud["altitude_indicator"].aligny = "middle";
param_00.jethud["altitude_indicator"].x = 300;
param_00.jethud["altitude_indicator"].y = 0;
param_00.jethud["altitude_indicator"].color = var_03;
param_00.jethud["altitude_indicator"].alpha = 0;
param_00.jethud["altitude_indicator"].fontscale = var_06;
level notify("jetHUD_init");
var_18 = 0;
if(!isdefined(level.base_agl))
{
level.base_agl = 0;
}
for(;;)
{
if(!isdefined(param_01))
{
break;
}
var_19 = param_01 vehicle_getvelocity();
var_1A = transformmove((0,0,0),(0,0,0),(0,0,0),param_01.angles,var_19,(0,0,0))["origin"];
var_1B = param_01 vehicle_getspeed();
if(level.mini_version)
{
var_1B = var_1B * 5;
}
param_00.jethud["speed_indicator"] settext("" + var_1B + " mph");
var_1C = bullettrace(param_01.origin,param_01.origin + (0,0,-66000),0,param_01,0);
if(isdefined(var_1C["position"]))
{
var_1D = param_01.origin[2] - var_1C["position"][2];
}
else
{
var_1D = 119988;
}
param_00.jethud["altitude_indicator"] settext("" + int(level.base_agl + var_1D / 12) + " ft agl");
var_1E = param_01 gettagorigin("tag_player") + anglestoup(param_01 gettagangles("tag_player")) * var_02;
for(var_1F = 0;var_1F < var_17.size;var_1F++)
{
var_20 = var_17[var_1F];
var_12 = level.plane.salvo_ammo[var_1F];
foreach(var_22 in var_20)
{
var_22.alpha = 0;
var_12--;
}
}
wait 0.05;
}
}
//Function Number: 106
fighter_jet_sounds(param_00,param_01)
{
level endon("finale");
thread canyon_whizby_sounds(param_00,param_01);
thread missile_lock_sounds(param_00,param_01);
thread gun_lock_sounds(param_00,param_01);
var_02 = common_scripts\utility::spawn_tag_origin();
var_02 linkto(param_00,"",(0,0,0),(0,0,0));
var_02 playloopsound("dogfight_player_plane_low");
var_03 = common_scripts\utility::spawn_tag_origin();
var_03 linkto(param_00,"",(0,0,0),(0,0,0));
var_03 playloopsound("dogfight_player_plane_turbulence");
var_04 = 2;
var_05 = 0.05 / var_04;
var_06 = 0;
while(isalive(param_00) && isdefined(param_01))
{
var_07 = param_01 vehicle_getthrottle();
var_06 = clamp(var_07,var_06 - var_05,var_06 + var_05);
var_08 = vectordot(param_01 maps\_shg_utility::get_differentiated_acceleration() + (0,0,384),anglestoup(param_01.angles)) / 384;
var_02 scalepitch(maps\_shg_utility::linear_map_clamp(var_06,0,1,0.8,1.2),0.05);
var_02 scalevolume(maps\_shg_utility::linear_map_clamp(var_07,0,1,0.5,1),0.05);
var_09 = maps\_shg_utility::linear_map_clamp(abs(var_08),0,8,0.2,1);
var_03 scalevolume(var_09,0.05);
wait 0.05;
}
var_02 stoploopsound();
var_03 stoploopsound();
level.player playsound("dogfight_player_plane_death");
}
//Function Number: 107
missile_lock_sounds(param_00,param_01)
{
level endon("finale");
var_02 = common_scripts\utility::spawn_tag_origin();
var_02 linkto(param_00,"",(0,0,0),(0,0,0));
var_03 = 0;
var_04 = common_scripts\utility::spawn_tag_origin();
var_04 linkto(param_00,"",(0,0,0),(0,0,0));
var_05 = 0;
var_06 = param_01.lock_targets.size;
while(isalive(level.player))
{
var_07 = "none";
if(isdefined(param_01.lock_targets))
{
if(param_01.lock_targets.size > 0)
{
var_07 = "locked";
if(param_01.lock_targets.size > var_06)
{
param_01 playsound("dogfight_player_guns_locked");
}
}
var_06 = param_01.lock_targets.size;
var_07 = "locking";
}
var_08 = var_07 == "locked";
var_09 = var_07 == "locking";
wait 0.05;
}
}
//Function Number: 108
gun_lock_sounds(param_00,param_01)
{
level endon("finale");
var_02 = 0;
var_03 = 0;
while(isalive(level.player))
{
var_04 = "none";
if(isdefined(param_01.lock_target))
{
var_04 = "locked";
}
var_05 = var_04 == "locked";
var_06 = var_04 == "locking";
if(var_06 && !var_02)
{
param_01 playsound("dogfight_player_guns_targeting");
var_02 = 1;
}
else if(!var_06 && var_02)
{
var_02 = 0;
}
if(var_05 && !var_03)
{
param_01 playsound("dogfight_player_guns_locked");
var_03 = 1;
continue;
}
if(!var_05 && var_03)
{
var_03 = 0;
}
wait 0.05;
}
}
//Function Number: 109
canyon_whizby_sounds(param_00,param_01)
{
foreach(var_03 in [-1,0,1])
{
foreach(var_05 in [-1,0,1])
{
if(var_03 != 0 || var_05 != 0)
{
thread canyon_whizby_sound(param_00,param_01,vectornormalize((0,var_03,var_05)));
}
}
}
}
//Function Number: 110
canyon_whizby_sound(param_00,param_01,param_02)
{
level endon("end_canyon");
var_03 = common_scripts\utility::spawn_tag_origin();
var_03 playloopsound("dogfight_player_plane_canyon_reflection");
var_04 = 3000;
var_05 = 0.1;
var_06 = var_04;
var_07 = param_01.origin;
for(;;)
{
var_08 = param_01.origin + param_01 maps\_shg_utility::get_differentiated_velocity() * var_05;
var_09 = transformmove(var_08,param_01.angles,(0,0,0),(0,0,0),param_02 * var_04,(0,0,0))["origin"];
var_0A = bullettrace(var_08,var_09,0,param_01);
if(var_0A["fraction"] < 1)
{
var_03.origin = var_0A["position"];
}
var_0B = soundscripts\_audio_vehicle_manager::avm_compute_doppler_pitch(var_03.origin,(0,0,0),param_00.origin,param_00 maps\_shg_utility::get_differentiated_velocity(),1,1);
var_03 scalepitch(var_0B,0.05);
wait 0.05;
}
}
//Function Number: 111
get_crash_deflection_angle()
{
var_00 = 30;
var_01 = maps\_utility::getdifficulty();
switch(var_01)
{
case "medium":
var_00 = 25;
break;
case "hard":
var_00 = 20;
break;
case "fu":
var_00 = 10;
break;
}
return var_00;
}
//Function Number: 112
fighter_jet_crash_detection(param_00,param_01)
{
param_00 endon("death");
param_01 endon("death");
var_02 = 7744;
var_03 = param_01.origin;
var_04 = 1;
var_05 = -30;
var_06 = 50;
var_07 = -1;
var_08 = 20;
var_09 = 0 - var_08;
var_0A = 0;
var_0B = 0;
var_0C = 0;
var_0D = 0;
var_0E = maps\_utility::getdifficulty();
var_0F = get_crash_deflection_angle();
var_10 = cos(var_0F);
for(;;)
{
if(maps\_utility::getdifficulty() != var_0E)
{
var_0E = maps\_utility::getdifficulty();
var_0F = get_crash_deflection_angle();
var_10 = cos(var_0F);
}
param_01 waittill("veh_collision",var_11,var_12,var_13);
var_14 = vectordot(vectornormalize(var_11),vectornormalize(param_01 vehicle_getvelocity()));
var_15 = 0;
var_16 = var_14 < var_10;
var_17 = gettime();
if(isdefined(var_13) && var_13 maps\_vehicle::isvehicle())
{
continue;
}
if((!isdefined(var_13) || isdefined(var_13) && isdefined(var_13.targetname) && var_13.targetname != "turnaround_vol") && getdvarfloat("vehPlanePathAngle") >= 0 && getdvarfloat("vehPlanePathAllowance") > 0)
{
var_18 = angleclamp(level.player.angles[1]);
var_19 = angleclamp180(var_18 - getdvarfloat("vehPlanePathAngle"));
if(abs(var_19) >= 60)
{
if(var_17 - var_0B >= 500)
{
var_0A = 0;
var_0B = gettime();
}
var_0A++;
if(var_0A >= 3)
{
var_15 = 1;
}
}
}
if(distancesquared(param_01.origin,var_03) < var_02)
{
var_15 = 1;
}
var_03 = param_01.origin;
if(!var_15 && isdefined(var_13) && isdefined(var_13.targetname) && var_13.targetname == "turnaround_vol" && var_0A < 3)
{
continue;
}
var_1A = getbumpallowancebasedondifficulty();
if(!var_15)
{
if(isdefined(var_13) && var_13.targetname == "floor_clip")
{
thread reversegravity(1);
var_0C++;
var_1B = gettimeallowancebasedondifficulty();
if(var_1B > 0 && var_17 > var_0D + var_1B)
{
var_0D = var_17;
var_0C = 1;
}
else if(var_1A > 0 && var_0C > var_1A)
{
var_15 = 1;
}
if(var_16 && maps\_utility::getdifficulty() == "fu")
{
var_15 = 1;
}
if(var_1A > 0 && var_0C > var_1A - 15)
{
thread fake_damage_indicator((0,0,-1),var_1B - var_17 - var_0D / 1000,0,undefined,1);
}
}
else if(var_16)
{
var_15 = 1;
}
}
if((isdefined(var_13) && var_13.targetname != "floor_clip") || var_1A > 0)
{
param_01 notify("damage",1,level,undefined,param_01.origin,"COLLISION","","");
}
thread fighter_jet_set_shake(5,1);
param_01 playsound("plr_jet_bounce_hit");
if(var_15)
{
thread common_scripts\utility::play_sound_in_space("plr_jet_crash_hit",level.player.origin);
level.player digitaldistortsetparams(1,1);
thread fadeupstatic(0.05,1);
level notify("kill_player_targeting_think");
var_1C = target_getarray();
foreach(var_1E in var_1C)
{
target_hidefromplayer(var_1E,level.player);
target_remove(var_1E);
}
level.plane.lock_targets = [];
wait(0.05);
param_00 dismountvehicle();
wait(0.25);
setdvar("ui_deadquote",&"PLAYERPLANE_YOU_CRASHED");
maps\_utility::missionfailedwrapper();
continue;
}
param_01 notify("plane_bump");
}
}
//Function Number: 113
reversegravity(param_00)
{
level notify("reverse_gravity");
level endon("reverse_gravity");
if(!isdefined(level.old_gravity))
{
level.old_gravity = getdvarfloat("vehPlaneGravityVelocity");
}
setsaveddvar("vehPlaneGravityVelocity",level.old_gravity * -0.5);
wait(param_00);
setsaveddvar("vehPlaneGravityVelocity",level.old_gravity);
}
//Function Number: 114
gettimeallowancebasedondifficulty()
{
var_00 = maps\_utility::getdifficulty();
var_01 = -1;
switch(var_00)
{
case "medium":
var_01 = 3;
break;
case "hard":
var_01 = 1.5;
break;
case "fu":
var_01 = 3;
break;
}
return var_01 * 1000;
}
//Function Number: 115
getbumpallowancebasedondifficulty()
{
var_00 = maps\_utility::getdifficulty();
var_01 = -1;
switch(var_00)
{
case "medium":
var_01 = 50;
break;
case "hard":
var_01 = 15;
break;
case "fu":
var_01 = 15;
break;
}
return var_01;
}
//Function Number: 116
monitor_missile_firing()
{
self.depleted = 0;
for(;;)
{
level.player waittill("missile_shot",var_00,var_01);
if(self.salvo_idx == var_00 && self.missile_idx == var_01)
{
self setshader("jet_hud_ammo_missile_0",self.dimensionsx,self.dimensionsy);
self.depleted = 1;
wait(12);
self setshader("jet_hud_ammo_missile_1",self.dimensionsx,self.dimensionsy);
self.depleted = 0;
}
}
}
//Function Number: 117
monitor_missile_indication()
{
level.player endon("death");
level endon("end_canyon");
for(;;)
{
var_00 = level.player common_scripts\utility::waittill_any_return("lock_on","locked_on_off","y_pressed");
if(isdefined(var_00) && var_00 == "locked_on")
{
self.alpha = 0.75;
self.color = (1,0.2,0.2);
}
if(var_00 == "locked_on_off" || var_00 == "y_pressed")
{
self.alpha = 0.75;
self.color = (0.2,0.3,1);
}
}
}
//Function Number: 118
make_missile_ammo_hud(param_00,param_01,param_02,param_03,param_04)
{
var_05 = [];
var_06 = 5;
var_07 = 20;
for(var_08 = 0;var_08 < param_01;var_08++)
{
var_09 = newclienthudelem(level.player);
var_09.positioninworld = 1;
var_09 settargetent(param_04);
var_09 setshader("jet_hud_ammo_missile_1",var_07,var_06);
var_09.alignx = "center";
var_09.aligny = "middle";
var_09.x = param_02;
var_09.y = param_03 + var_06 * var_05.size + 20 * var_05.size;
var_09.alpha = 0.1;
var_09.salvo_idx = param_00;
var_09.missile_idx = var_08;
var_09.dimensionsx = var_07;
var_09.dimensionsy = var_06;
var_09 thread monitor_missile_firing();
var_05[var_05.size] = var_09;
}
return var_05;
}
//Function Number: 119
rotate_axis_angle(param_00,param_01,param_02)
{
var_03 = vectortoangles(param_00);
return transformmove((0,0,0),var_03 + (0,0,param_01),(0,0,0),var_03,param_02,(0,0,0))["origin"];
}
//Function Number: 120
fighter_jet_gun_hud()
{
level.player endon("death");
level endon("end_canyon");
var_00 = 0;
var_01 = 0;
var_02 = 0.99;
var_03 = 0;
var_04 = 10;
var_05 = cos(5);
var_06 = 50000;
var_07 = 250000;
var_08 = 13000;
var_09 = get_plane_gun_angles();
var_0A = anglestoforward(get_plane_gun_angles());
var_0B = var_0A;
var_0C = var_0A;
while(isdefined(level.plane))
{
var_0D = get_plane_gun_origin();
var_0E = level.player geteye();
level.player.eye_origin = var_0E;
var_0F = get_plane_gun_angles();
var_10 = anglestoforward(var_0F);
var_11 = anglestoup(var_0F);
var_12 = anglestoright(var_0F);
var_0C = vectornormalize(transformmove((0,0,0),var_0F,(0,0,0),var_09,var_0C,(0,0,0))["origin"]);
var_13 = var_10 - anglestoforward(var_09) * 20;
var_09 = var_0F;
var_14 = undefined;
var_15 = vectornormalize(var_10 + var_13 * var_00);
var_0B = vectornormalize(vectorlerp(var_15,var_0B,var_01));
var_16 = undefined;
var_16 = compute_best_gun_target(var_10,var_0E,var_0D,var_06,level.plane.lock_target);
if(isdefined(var_16))
{
compute_target_lead_origin(var_16,var_0D,var_06);
var_17 = vectornormalize(var_16.lead_origin - var_0E);
var_18 = vectornormalize(vectorlerp(var_10,var_17,var_02));
var_19 = 1;
}
else
{
var_18 = vectornormalize(level.player.jethud["hud_tag"].origin - var_0D);
var_19 = 0;
}
var_1A = constrain_vector_to_cone(var_18,var_0B,var_04);
var_0C = vectornormalize(vectorlerp(var_1A,var_0C,var_03));
if(isdefined(var_16))
{
var_1B = distance(var_16.lead_origin,var_0E);
}
else
{
var_1B = 25000;
}
level.plane.player_gun_lock_target_origin = var_0E + var_1B * var_0C;
var_1C = 0;
if(isdefined(var_16))
{
if(vectordot(vectornormalize(var_16.lead_origin - var_0E),var_0C) > var_05)
{
var_1C = 1;
}
}
level.player.jethud["weapon_reticle"] setshader("jet_hud_overlay_cannon_reticle_lockon",640,480);
level.plane.lock_target = var_16;
var_1D = var_0E + var_0C * var_07;
level.player.jethud["weapon_bore_tag"] unlink();
level.player.jethud["weapon_bore_tag"].origin = var_1D;
level.player.jethud["weapon_bore_tag"] linkto(level.plane,"tag_player");
var_1E = var_0E + var_0B * var_07;
level.player.reticle_origin = var_1E;
level.player.jethud["weapon_reticle_tag"] unlink();
level.player.jethud["weapon_reticle_tag"].origin = var_1E;
level.player.jethud["weapon_reticle_tag"] linkto(level.plane,"tag_player");
wait 0.05;
}
}
//Function Number: 121
compute_best_gun_target(param_00,param_01,param_02,param_03,param_04)
{
var_05 = cos(25);
var_06 = cos(25);
var_07 = 15000;
var_08 = 0;
var_09 = 10;
var_0A = 0;
if(level.player adsbuttonpressed(1))
{
var_0A = 0;
}
var_0B = undefined;
var_0C = 0;
if(isdefined(level.enemy_units))
{
foreach(var_0E in level.enemy_units)
{
if(!isdefined(var_0E) || !isdefined(var_0E.origin))
{
continue;
}
compute_target_lead_origin(var_0E,param_02,param_03);
if(!isdefined(var_0E.lead_origin))
{
continue;
}
var_0F = distance(var_0E.origin,param_01);
if(var_0F > var_07)
{
continue;
}
var_10 = isdefined(param_04) && var_0E == param_04;
var_11 = vectordot(vectornormalize(var_0E.origin - param_01),param_00);
if(var_10 && var_11 < var_06)
{
continue;
}
else if(!var_10 && var_11 < var_05)
{
continue;
}
if(!var_0E has_los())
{
continue;
}
var_12 = 0;
var_12 = var_12 + maps\_shg_utility::linear_map_clamp(var_11,1,var_05,var_09,0);
var_12 = var_12 + maps\_shg_utility::linear_map_clamp(var_0F,0,var_07,var_08,0);
if(var_10)
{
var_12 = var_12 + var_0A;
}
if(var_12 > var_0C)
{
var_0B = var_0E;
}
}
}
return var_0B;
}
//Function Number: 122
compute_target_lead_origin(param_00,param_01,param_02)
{
var_03 = param_00 maps\_shg_utility::get_differentiated_velocity();
var_04 = param_00.origin - param_01;
var_05 = lengthsquared(var_03) - squared(param_02);
var_06 = 2 * vectordot(var_03,var_04);
var_07 = lengthsquared(var_04);
var_08 = squared(var_06) - 4 * var_05 * var_07;
if(var_08 > 0)
{
var_09 = 2 * var_07 / sqrt(var_08) - var_06;
var_09 = var_09 + 0.05;
param_00.lead_origin = param_00.origin + param_00 maps\_shg_utility::get_differentiated_velocity() * var_09;
return;
}
param_00.lead_origin = undefined;
}
//Function Number: 123
constrain_vector_to_cone(param_00,param_01,param_02)
{
var_03 = vectordot(param_01,param_00);
if(var_03 < cos(param_02))
{
var_04 = param_00 - param_01 * var_03;
var_05 = length(var_04);
var_06 = var_05 / tan(param_02);
return vectornormalize(param_00 + param_01 * var_06 - var_03);
}
return var_03;
}
//Function Number: 124
is_true(param_00)
{
return isdefined(param_00) && param_00;
}
//Function Number: 125
waittill_any_trigger(param_00,param_01,param_02,param_03,param_04,param_05)
{
var_06 = spawnstruct();
var_07 = [param_00,param_01,param_02,param_03,param_04,param_05];
foreach(var_0A, var_09 in var_07)
{
if(isdefined(var_09))
{
var_06 thread notify_on_trigger("trig" + var_0A,var_09);
}
}
var_06 common_scripts\utility::waittill_any("trig0","trig1","trig2","trig3","trig4","trig5");
}
//Function Number: 126
waittill_trigger_with_name(param_00)
{
var_01 = getent(param_00,"targetname");
if(!isdefined(var_01))
{
var_01 = getent(param_00,"script_noteworthy");
}
if(!isdefined(var_01))
{
return;
}
var_01 waittill("trigger");
}
//Function Number: 127
sortbydistanceauto(param_00,param_01,param_02)
{
return sortbydistance(param_00,param_01,param_02,1);
}
//Function Number: 128
target_setsafe(param_00,param_01)
{
if(!isdefined(param_01))
{
param_01 = 0;
}
var_02 = getentarray();
var_03 = 0;
var_04 = 60;
var_05 = [];
foreach(var_07 in var_02)
{
if(target_istarget(var_07))
{
var_03++;
var_05[var_05.size] = var_07;
}
}
if(var_03 < var_04)
{
target_set(param_00);
return;
}
if(param_01)
{
var_05 = sortbydistanceauto(var_05,param_00.origin);
var_05 = common_scripts\utility::array_reverse(var_05);
param_00.forcetarget = 1;
foreach(var_0A in var_05)
{
if(!isdefined(var_0A.forcetarget) || !var_0A.forcetarget)
{
target_remove(var_0A);
target_set(param_00);
break;
}
}
}
}
//Function Number: 129
notify_on_trigger_with_name(param_00,param_01)
{
waittill_trigger_with_name(param_01);
if(isdefined(self))
{
self notify(param_00);
return;
}
level notify(param_00);
}
//Function Number: 130
notify_on_trigger(param_00,param_01)
{
param_01 waittill("trigger");
if(isdefined(self))
{
self notify(param_00);
return;
}
level notify(param_00);
}
//Function Number: 131
notify_on_use_trigger(param_00,param_01)
{
param_01 waittill("trigger");
self notify(param_00);
}
//Function Number: 132
target_setshadersafe(param_00,param_01)
{
if(target_istarget(param_00))
{
target_setshader(param_00,param_01);
}
}
//Function Number: 133
offset_position_from_tag(param_00,param_01,param_02)
{
var_03 = self gettagangles(param_01);
var_04 = self gettagorigin(param_01);
if(param_00 == "up")
{
return var_04 + anglestoup(var_03) * param_02;
}
if(param_00 == "down")
{
return var_04 + anglestoup(var_03) * param_02 * -1;
}
if(param_00 == "right")
{
return var_04 + anglestoright(var_03) * param_02;
}
if(param_00 == "left")
{
return var_04 + anglestoright(var_03) * param_02 * -1;
}
if(param_00 == "forward")
{
return var_04 + anglestoforward(var_03) * param_02;
}
if(param_00 == "backward")
{
return var_04 + anglestoforward(var_03) * param_02 * -1;
}
}
//Function Number: 134
is_ground_enemy(param_00)
{
if(isdefined(param_00.ground_target))
{
return 1;
}
return 0;
}
//Function Number: 135
generic_human()
{
}
//Function Number: 136
fx_init()
{
}
//Function Number: 137
array_combine_all(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08)
{
var_09 = [param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08];
var_0A = [];
foreach(var_0C in var_09)
{
if(isdefined(var_0C))
{
var_0A = common_scripts\utility::array_combine(var_0A,var_0C);
}
}
return var_0A;
}
//Function Number: 138
shoot_target_till_dead(param_00,param_01,param_02)
{
self endon("death");
self endon("stop_engaging");
while(isdefined(self) && isalive(param_00) && isalive(self))
{
var_03 = maps\_utility::get_dot(self.origin,self.angles,param_00.origin);
if(var_03 > 0.15)
{
thread ai_shoot_missile_salvo(param_00,param_01);
param_00 notify("missile_fired_at");
}
wait(param_02);
}
}
//Function Number: 139
ai_shoot_missile_salvo(param_00,param_01)
{
if(isalive(param_00))
{
for(var_02 = 0;var_02 < param_01;var_02++)
{
thread ai_shoot_missile(param_00);
}
}
}
//Function Number: 140
ai_shoot_missile(param_00)
{
var_01 = offset_position_from_tag("forward","tag_origin",1000);
self playsound("canyon_missile_fire_npc");
var_02 = magicbullet("sidewinder_atlas_jet",var_01,param_00.origin);
var_02 missile_settargetent(param_00);
var_02 thread monitor_missile_death(1,self,undefined,param_00);
return var_02;
}
//Function Number: 141
get_jet_array(param_00,param_01)
{
if(!isdefined(param_01))
{
param_01 = "script_noteworthy";
}
var_02 = getentarray(param_00,param_01);
var_03 = [];
foreach(var_05 in var_02)
{
if(isalive(var_05))
{
var_03[var_03.size] = var_05;
}
}
return var_03;
}
//Function Number: 142
engage_enemies(param_00,param_01,param_02,param_03,param_04,param_05)
{
level endon("finale");
if(!isdefined(param_05))
{
param_05 = 1;
}
if(!isdefined(param_04))
{
param_04 = 1;
}
param_00 = maps\_utility::remove_dead_from_array(param_00);
var_06 = param_00;
if(param_00.size < 1 || param_01.size < 1)
{
return;
}
while(param_00.size < param_01.size * param_04)
{
param_00 = common_scripts\utility::array_combine(param_00,var_06);
}
if(!isdefined(param_02))
{
param_02 = 0;
}
if(!isdefined(param_03))
{
param_03 = 10;
}
var_07 = 0;
foreach(var_09 in param_01)
{
if(is_true(var_09.ground_target))
{
continue;
}
if(param_00.size <= 0)
{
break;
}
for(var_0A = 0;var_0A < param_04;var_0A++)
{
if(param_00.size <= 0)
{
continue;
}
if(param_00[var_07].script_team == "allies")
{
level notify("ally_targeting_enemy");
}
param_00[var_07] thread shoot_target_till_dead(var_09,param_05,param_03);
wait(param_02);
param_00 = maps\_utility::remove_dead_from_array(param_00);
var_07++;
if(var_07 >= param_00.size)
{
var_07 = 0;
}
}
}
}
//Function Number: 143
rake_with_bullets(param_00,param_01,param_02)
{
self endon("death");
if(!isdefined(param_02))
{
param_02 = 1;
}
if(!isdefined(param_01))
{
param_01 = 0.5;
}
var_03 = gettime();
var_04 = var_03 + randomfloatrange(param_01,param_02) * 1000;
var_05 = maps\_utility::get_dot(self.origin,self.angles,param_00.origin);
self playloopsound("s19_mgun_shot_lp_npc");
while(var_03 < var_04 && var_05 > 0 && isdefined(param_00) && isalive(param_00))
{
if(!isdefined(param_00.model) || param_00.model == "")
{
break;
}
var_06 = offset_position_from_tag("forward",self.mgun_left,1000);
var_07 = param_00.origin;
if(maps\_utility::hastag(param_00.model,"tag_origin"))
{
var_07 = param_00 offset_position_from_tag("forward","tag_origin",1200);
}
var_08 = magicbullet("s19_cannon_AI",var_06,var_07);
wait(0.1);
var_09 = offset_position_from_tag("forward",self.mgun_right,1000);
var_08 = magicbullet("s19_cannon_AI",var_09,var_07);
wait(0.2);
if(isdefined(param_00) && isalive(param_00))
{
var_05 = maps\_utility::get_dot(self.origin,self.angles,param_00.origin);
var_03 = gettime();
}
}
self stoploopsound("s19_mgun_shot_lp_npc");
self playsound("s19_mgun_shot_lp_end_npc");
wait(randomfloatrange(0.3,1));
}
//Function Number: 144
lock_on_warning(param_00)
{
level.player.jethud["lockon_warning"].color = (1,0.2,0.2);
level.player.jethud["lockon_warning"] settext("ENEMY LOCK");
var_01 = common_scripts\utility::spawn_tag_origin();
var_01 linkto(self,"",(0,0,0),(0,0,0));
level.player.jethud["lockon_warning"].alpha = 1;
var_01 playloopsound("dogfight_player_missile_locked_lp");
param_00 common_scripts\utility::waittill_any("stop_lock_on_warning","death");
level.player.jethud["lockon_warning"].alpha = 0;
var_01 stoploopsound();
wait 0.05;
var_01 delete();
}
//Function Number: 145
lock_on_to_player()
{
if(1)
{
if(gettime() > level.last_missile_fired_at_player + 2500)
{
level.plane thread fake_damage_indicator(vectornormalize(level.plane.origin - self.origin));
thread missile_miss_player();
level.last_missile_fired_at_player = gettime();
return;
}
return;
}
if(common_scripts\utility::flag("target_player") && !level.enemy_locking_on_to_player && gettime() >= level.last_missile_fired_at_player + 5000)
{
level.player notify("enemy_lock_on");
level.enemy_locking_on_to_player = 1;
level.player_popped_flares = 0;
level.player thread maps\_utility::display_hint_timeout("flares_hint",2);
level.player thread lock_on_warning(self);
var_00 = level common_scripts\utility::waittill_notify_or_timeout_return("pop_flares",1);
wait 0.05;
if(level.flares_active)
{
thread missile_miss_player();
}
else if(isalive(self))
{
var_01 = maps\_utility::get_dot(self.origin,self.angles,level.player.origin);
if(var_00 == "timeout" && var_01 > 0)
{
level.player.jethud["lockon_warning"].color = (1,0,0);
level.player.jethud["lockon_warning"] settext("FIRING");
level common_scripts\utility::waittill_notify_or_timeout("pop_flares",1);
if(level.flares_active)
{
thread missile_miss_player();
}
else
{
level.player playsound("plr_jet_hit_by_missile_lyr1");
var_02 = magicbullet("sidewinder_atlas_jet",level.plane.fake_enemy_missile_spawn.origin,level.plane.missile_target.origin);
var_02 missile_settargetent(level.plane.missile_target);
wait(0.25);
playfxontag(level._effect["explosion"],level.plane,"tag_origin");
level.plane dodamage(10,level.plane.origin,self,self,"MOD_EXPLOSIVE","sidewinder_atlas_jet");
level.plane vehicle_teleport(level.plane.origin,level.plane.angles + (0,0,45));
}
}
}
self notify("stop_lock_on_warning");
level.last_missile_fired_at_player = gettime();
level.enemy_locking_on_to_player = 0;
wait(5);
}
}
//Function Number: 146
missile_miss_player(param_00)
{
var_01 = maps\_utility::get_dot(level.player.origin,level.player.angles,self.origin);
var_02 = level.plane offset_position_from_tag("forward","tag_origin",10000) + (0,0,200);
var_03 = self.origin;
if(var_01 > 0)
{
var_03 = offset_position_from_tag("forward","tag_origin",1000);
}
else
{
var_03 = level.plane offset_position_from_tag("backward","tag_origin",500);
if(level.plane.angles[0] > 0 && level.plane.angles[0] < 180)
{
var_03 = var_03 + (0,0,500);
}
else
{
var_03 = var_03 - (0,0,500);
}
var_03 = var_03 + (randomintrange(-256,256),randomintrange(-256,256),randomintrange(-256,256));
}
var_04 = magicbullet("sidewinder_atlas_jet",var_03,var_02);
var_04 thread monitor_missile_death(1,self);
if(!is_true(param_00) && randomint(100) > 25)
{
maps\_utility::delaythread(0.25,::missile_miss_player,1);
}
}
//Function Number: 147
enemy_jet_shoot_think()
{
self endon("death");
var_00 = 225000000;
var_01 = 36000000;
var_02 = 100000000;
var_03 = 0;
for(;;)
{
if(common_scripts\utility::flag("target_player"))
{
var_04 = maps\_utility::get_dot(self.origin,self.angles,level.player.origin);
if(var_04 > 0)
{
var_05 = distancesquared(self.origin,level.player.origin);
if(var_05 < var_01 || !common_scripts\utility::flag("target_player"))
{
rake_with_bullets(level.plane);
}
else
{
lock_on_to_player();
}
}
}
var_06 = level.friend_jets;
foreach(var_08 in var_06)
{
if(isremovedentity(var_08))
{
level.friend_jets = common_scripts\utility::array_remove(level.friend_jets,var_08);
wait(0.1);
break;
}
var_09 = gettime();
var_04 = maps\_utility::get_dot(self.origin,self.angles,var_08.origin);
if(var_04 > 0.93)
{
var_05 = distancesquared(self.origin,level.player.origin);
if(var_05 < var_02)
{
rake_with_bullets(var_08);
break;
}
else if(var_09 >= var_03)
{
thread ai_shoot_missile(var_08);
var_03 = var_09 + 5000;
break;
}
}
wait(0.05);
}
wait(0.1);
}
}
//Function Number: 148
ally_jet_shoot_think()
{
self endon("death");
var_00 = 225000000;
var_01 = 36000000;
var_02 = 100000000;
var_03 = 0;
if(!isdefined(level.enemy_units))
{
level.enemy_units = [];
}
for(;;)
{
if(level.ally_ai_active)
{
var_04 = 0;
var_05 = maps\_utility::get_dot(self.origin,self.angles,level.player.origin);
if(var_05 > 0)
{
var_04 = 1;
}
var_06 = level.enemy_units;
foreach(var_08 in var_06)
{
if(!isdefined(var_08))
{
level.enemy_units = common_scripts\utility::array_remove(level.enemy_units,var_08);
wait(0.1);
break;
}
var_09 = gettime();
var_05 = maps\_utility::get_dot(self.origin,self.angles,var_08.origin);
if(var_05 > 0.93)
{
var_0A = distancesquared(self.origin,level.player.origin);
if(var_0A < var_02)
{
rake_with_bullets(var_08,0.3,0.6);
wait(randomfloatrange(0.2,1));
break;
}
}
wait(0.05);
}
}
wait(0.1);
}
}
//Function Number: 149
plane_health_monitor()
{
level endon("finale");
self.almost_dead = 0;
self.current_hit_count = 0;
self.invulnerabletime = 0;
self.lasthit = 0;
if(level.gameskill == 3)
{
self.max_hit_count = 1;
}
else if(level.gameskill == 2)
{
self.max_hit_count = 2;
}
else
{
self.max_hit_count = 2;
}
self.max_health = self.health;
while(!common_scripts\utility::flag("final_hit"))
{
self waittill("damage",var_00,var_01,var_02,var_03,var_04);
var_04 = tolower(var_04);
self.health = self.max_health;
if(isdefined(var_01) && (isdefined(var_01.script_team) && var_01.script_team == "allies") || var_01 == level.player)
{
continue;
}
if(var_04 == "collision")
{
thread fake_damage_indicator(var_02,undefined,0);
}
else
{
thread fake_damage_indicator(var_02);
}
if(var_04 == "mod_impact")
{
thread fake_bullet_damage_sounds();
thread fighter_jet_set_shake(2,0.5);
continue;
}
var_05 = 1;
if(var_04 == "flak_hit")
{
var_05 = 0.5;
}
if(var_04 == "flak_pepper")
{
thread fake_bullet_damage_sounds();
var_05 = 0.05;
}
if(var_04 == "mod_projectile" || var_04 == "mod_projectile_splash" || var_04 == "flak_hit")
{
thread fighter_jet_set_shake(4,1.5);
if(self.current_hit_count / self.max_hit_count < 0.5)
{
var_05 = 0.1;
}
else
{
var_05 = 0;
}
}
var_06 = gettime();
if(var_06 <= self.invulnerabletime && var_05 < 1)
{
continue;
}
if(!common_scripts\utility::flag("playerPlaneNoDeath"))
{
self.current_hit_count = self.current_hit_count + var_05;
}
else if(self.current_hit_count < self.max_hit_count - 1)
{
self.current_hit_count = self.current_hit_count + var_05;
}
else
{
self.current_hit_count = self.max_hit_count - 1;
}
if(self.current_hit_count < 0)
{
self.current_hit_count = 0;
}
earthquake(0.5,1,self.origin,512);
level.player playrumbleonentity("damage_heavy");
level.player viewkick(1,var_03);
self.lasthit = var_06;
if(self.current_hit_count >= self.max_hit_count)
{
if(!self.almost_dead || var_04 == "mod_projectile" || var_04 == "mod_projectile_splash" || var_04 == "flak_hit")
{
self.current_hit_count = self.max_hit_count - 0.1;
continue;
}
self makeusable();
self useby(level.player);
level.player disableinvulnerability();
level.player kill();
self kill();
return;
}
}
}
//Function Number: 150
fake_bullet_damage_sounds()
{
var_00 = randomintrange(3,7);
for(var_01 = 1;var_01 <= var_00;var_01++)
{
level.player playsound("plr_jet_bullet_imp");
wait(randomfloatrange(0.1,0.22));
}
}
//Function Number: 151
fake_damage_indicator(param_00,param_01,param_02,param_03,param_04)
{
if(!isdefined(param_01))
{
param_01 = 0.5;
}
if(!isdefined(param_02))
{
param_02 = 3;
}
if(!isdefined(param_03))
{
param_03 = 0.5;
}
if(!is_true(param_04) && is_true(self.showing_damage))
{
return;
}
if(is_true(param_04))
{
self notify("fake_damage_indicator");
self endon("fake_damage_indicator");
}
self.showing_damage = 1;
level.player playsound("plr_jet_missile_imp_snap");
if(isdefined(param_00) && param_00 != (0,0,0))
{
var_05 = 0.5;
var_06 = anglestoforward(self.angles) + param_00 * var_05;
var_06 = vectortoangles(var_06);
var_06 = self.angles + (0,0,var_06[2]);
level.plane vehicle_teleport(level.plane.origin,var_06);
}
earthquake(0.5,1,self.origin,512);
level.player playrumbleonentity("damage_heavy");
level.player viewkick(1,level.player.origin);
level.player digitaldistortsetparams(param_03,1.5);
thread chromo_anim2(param_01,0.5);
wait(param_01);
level.player digitaldistortsetparams(0,1);
wait(param_02);
self.showing_damage = 0;
}
//Function Number: 152
chromo_anim2(param_00,param_01)
{
level notify("chromo_anim");
level endon("chromo_anim");
setsaveddvar("r_chromaticAberrationTweaks",1);
var_02 = 1;
if(param_01)
{
var_02 = param_01;
}
setsaveddvar("r_chromaticAberration",1);
var_03 = param_00 * 20;
var_04 = 0;
level.chromo_offset = 20 * var_02;
var_05 = level.chromo_offset;
for(var_04 = 0;var_04 < var_03;var_04++)
{
var_06 = 1 / var_03 * var_05;
level.chromo_offset = level.chromo_offset - var_06;
setsaveddvar("r_chromaticSeparationG",level.chromo_offset * -1);
setsaveddvar("r_chromaticSeparationR",level.chromo_offset);
wait(0.05);
}
level.chromo_offset = 0;
setsaveddvar("r_chromaticSeparationG",0);
setsaveddvar("r_chromaticSeparationR",0);
}
//Function Number: 153
plane_health_regen()
{
level endon("finale");
for(;;)
{
wait(0.05);
waittillframeend;
var_00 = gettime();
if(self.current_hit_count > 0 && var_00 >= self.lasthit + level.player.gs.playerhealth_regularregendelay / 2)
{
self.current_hit_count = self.current_hit_count - 1;
if(self.current_hit_count < 0)
{
self.current_hit_count = 0;
}
self notify("regen");
}
var_01 = clamp(self.current_hit_count / self.max_hit_count,0,0.5);
level.player digitaldistortsetparams(var_01,1.5);
if(var_01 >= 0.5 && !self.almost_dead)
{
self.almost_dead = 1;
fadeupstatic(0.25);
self.invulnerabletime = var_00 + level.player.gs.invultime_onshield * 5;
}
if(var_01 == 0 && self.almost_dead)
{
thread fadedownstatic(1);
level.player digitaldistortsetparams(0,1);
self.current_hit_count = 0;
self.almost_dead = 0;
}
}
level.player painvisionoff();
}
//Function Number: 154
fadeupstatic(param_00,param_01)
{
if(!isdefined(param_01))
{
param_01 = 0.05;
}
if(!isdefined(level.overlaystatic))
{
level.overlaystatic = newhudelem(level.player);
level.overlaystatic.x = 0;
level.overlaystatic.y = 0;
level.overlaystatic.alpha = 0;
level.overlaystatic.horzalign = "fullscreen";
level.overlaystatic.vertalign = "fullscreen";
level.overlaystatic.sort = 4;
level.overlaystatic setshader("overlay_static_digital",640,480);
var_02 = param_01 / param_00 / 0.05;
while(level.overlaystatic.alpha < param_01)
{
level.overlaystatic.alpha = level.overlaystatic.alpha + var_02;
wait(0.05);
}
level.overlaystatic.alpha = param_01;
}
}
//Function Number: 155
fadedownstatic(param_00)
{
if(isdefined(level.overlaystatic))
{
var_01 = 0.05 / param_00;
while(isdefined(level.overlaystatic) && level.overlaystatic.alpha > 0)
{
level.overlaystatic.alpha = level.overlaystatic.alpha - var_01;
wait(0.05);
}
level.overlaystatic destroy();
level.overlaystatic = undefined;
}
}
//Function Number: 156
init_jet_crash_points()
{
level.jet_crash_points = getvehiclenodearray("jet_crash_location","targetname");
}
//Function Number: 157
available_crash_paths()
{
var_00 = [];
foreach(var_02 in level.jet_crash_points)
{
if(!isdefined(var_02.claimed))
{
var_00[var_00.size] = var_02;
}
}
return var_00;
}
//Function Number: 158
choose_crash_path()
{
var_00 = available_crash_paths();
var_01 = getclosest_in_front(self.origin,var_00);
return var_01;
}
//Function Number: 159
getclosest_in_front(param_00,param_01,param_02,param_03)
{
if(!isdefined(param_02))
{
param_02 = 20000;
}
if(!isdefined(param_03))
{
param_03 = 0.94;
}
var_04 = undefined;
foreach(var_06 in param_01)
{
if(!isdefined(var_06))
{
continue;
}
var_07 = distance(var_06.origin,param_00);
if(var_07 >= param_02)
{
continue;
}
var_08 = maps\_utility::get_dot(self.origin,self.angles,var_06.origin);
if(var_08 < param_03)
{
continue;
}
param_02 = var_07;
var_04 = var_06;
}
return var_04;
}
//Function Number: 160
jet_crash_move(param_00,param_01,param_02)
{
self endon("in_air_explosion");
param_00.claimed = 1;
self notify("newpath");
self notify("deathspin");
if(!isdefined(param_01))
{
param_01 = 0;
}
if(!isdefined(param_02))
{
param_02 = 2400;
}
var_03 = self.origin[2] + param_02;
var_04 = gettime();
var_05 = var_04 + param_01 * 1000;
while(isdefined(self) && var_04 < var_05 && self.origin[2] < var_03)
{
wait(0.05);
var_04 = gettime();
}
var_06 = 700;
self setneargoalnotifydist(param_00.radius);
thread maps\_vehicle::vehicle_paths(param_00);
self startpath(param_00);
self vehicle_setspeed(var_06,50,50);
common_scripts\utility::waittill_any("goal","near_goal");
jet_crash_path(param_00);
param_00.claimed = undefined;
self notify("stop_crash_loop_sound");
self notify("crash_done");
}
//Function Number: 161
jet_crash_path(param_00)
{
self endon("death");
while(isdefined(param_00.target))
{
param_00 = common_scripts\utility::getstruct(param_00.target,"targetname");
var_01 = 512;
if(isdefined(param_00.radius))
{
var_01 = param_00.radius;
}
var_02 = self vehicle_getspeed();
if(isdefined(param_00.script_parameters))
{
self vehicle_setspeed(param_00.script_parameters,50,60);
var_02 = param_00.script_parameters;
}
self setneargoalnotifydist(var_01);
thread maps\_vehicle::vehicle_paths(param_00);
self startpath(param_00);
common_scripts\utility::waittill_any("goal","near_goal");
}
}