mirror of
https://github.com/InfinityLoader/IL-GSC.git
synced 2025-06-07 17:17:50 -05:00
4915 lines
114 KiB
Plaintext
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");
|
|
}
|
|
} |