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

3851 lines
81 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: lab_utility.gsc
* Game: Call of Duty: Advanced Warfare
* Platform: PC
* Function Count: 166
* Decompile Time: 2457 ms
* Timestamp: 4/22/2024 2:33:08 AM
*******************************************************************/
//Function Number: 1
goto_node(param_00,param_01,param_02)
{
self endon("stop_goto_node");
if(!isdefined(param_02))
{
param_02 = 16;
}
maps\_utility::set_goal_radius(param_02);
if(isstring(param_00))
{
var_03 = getnode(param_00,"script_noteworthy");
}
else
{
var_03 = param_01;
}
if(isdefined(var_03))
{
maps\_utility::set_goal_node(var_03);
}
else
{
var_03 = common_scripts\utility::getstruct(param_00,"script_noteworthy");
maps\_utility::set_goal_pos(var_03.origin);
}
if(param_01)
{
self waittill("goal");
}
}
//Function Number: 2
ally_move_dynamic_speed()
{
self notify("start_dynamic_run_speed");
self endon("death");
self endon("stop_dynamic_run_speed");
self endon("start_dynamic_run_speed");
if(maps\_utility::ent_flag_exist("_stealth_custom_anim"))
{
maps\_utility::ent_flag_waitopen("_stealth_custom_anim");
}
self.run_speed_state = "";
ally_reset_dynamic_speed();
var_00 = 144;
var_01 = ["sprint","run"];
var_02 = [];
var_02["player_sprint"]["sprint"][0] = 225 * var_00;
var_02["player_sprint"]["sprint"][1] = 900 * var_00;
var_02["player_sprint"]["run"][0] = 900 * var_00;
var_02["player_sprint"]["run"][1] = 900 * var_00;
var_02["player_run"]["sprint"][0] = 225 * var_00;
var_02["player_run"]["sprint"][1] = 400 * var_00;
var_02["player_run"]["run"][0] = 400 * var_00;
var_02["player_run"]["run"][1] = 625 * var_00;
var_02["player_crouch"]["run"][0] = 4 * var_00;
var_02["player_crouch"]["run"][1] = 100 * var_00;
var_03 = 123;
var_04 = 189;
var_05 = 283;
for(;;)
{
wait(0.2);
if(isdefined(self.force_run_speed_state))
{
ally_dynamic_run_set(self.force_run_speed_state);
continue;
}
var_06 = vectornormalize(anglestoforward(self.angles));
var_07 = vectornormalize(self.origin - level.player.origin);
var_08 = vectordot(var_06,var_07);
var_09 = distancesquared(self.origin,level.player.origin);
if(isdefined(self.cqbwalking) && self.cqbwalking)
{
self.moveplaybackrate = 1;
}
if(common_scripts\utility::flag_exist("_stealth_spotted") && common_scripts\utility::flag("_stealth_spotted"))
{
ally_dynamic_run_set("run");
continue;
}
if(var_08 < -0.25 && var_09 > 225 * var_00)
{
ally_dynamic_run_set("sprint");
continue;
}
var_0A = level.player getvelocity();
var_0B = length(var_0A);
var_0C = "";
if(var_0B < var_03)
{
var_0C = "player_crouch";
}
else if(var_0B < var_04)
{
var_0C = "player_run";
}
else
{
var_0C = "player_sprint";
}
var_0D = var_02[var_0C];
var_0E = 0;
foreach(var_10 in var_01)
{
if(isdefined(var_0D[var_10]))
{
if(var_09 < var_0D[var_10][0] || self.run_speed_state == var_10 && var_09 < var_0D[var_10][1])
{
ally_dynamic_run_set(var_10);
var_0E = 1;
break;
}
}
}
if(var_0E)
{
continue;
}
ally_dynamic_run_set("jog_slow");
}
}
//Function Number: 3
ally_stop_dynamic_speed()
{
self endon("death");
self notify("stop_dynamic_run_speed");
ally_reset_dynamic_speed();
}
//Function Number: 4
ally_reset_dynamic_speed()
{
self endon("death");
maps\_utility::disable_cqbwalk();
self.moveplaybackrate = 1;
maps\_utility::clear_run_anim();
self notify("stop_loop");
}
//Function Number: 5
ally_dynamic_run_set(param_00)
{
if(self.run_speed_state == param_00)
{
return;
}
self.run_speed_state = param_00;
switch(param_00)
{
case "sprint":
if(isdefined(self.cqbwalking) && self.cqbwalking)
{
self.moveplaybackrate = 1;
}
else
{
self.moveplaybackrate = 1;
}
maps\_utility::set_generic_run_anim("DRS_sprint");
maps\_utility::disable_cqbwalk();
self notify("stop_loop");
break;
case "run":
self.moveplaybackrate = 1.1;
maps\_utility::clear_run_anim();
maps\_utility::disable_cqbwalk();
self notify("stop_loop");
break;
case "jog":
self.moveplaybackrate = 1;
maps\_utility::set_generic_run_anim("DRS_combat_jog");
maps\_utility::disable_cqbwalk();
self notify("stop_loop");
break;
case "jog_slow":
self.moveplaybackrate = 0.9;
maps\_utility::disable_cqbwalk();
self notify("stop_loop");
break;
}
}
//Function Number: 6
teleport_to_scriptstruct(param_00)
{
var_01 = common_scripts\utility::getstruct(param_00,"script_noteworthy");
level.player setorigin(var_01.origin);
if(isdefined(var_01.angles))
{
level.player setplayerangles(var_01.angles);
}
var_02 = getentarray("hero","script_noteworthy");
foreach(var_04 in var_02)
{
if(isspawner(var_04))
{
var_02 = common_scripts\utility::array_remove(var_02,var_04);
}
}
var_06 = common_scripts\utility::getstructarray(var_01.target,"targetname");
for(var_07 = 0;var_07 < var_02.size;var_07++)
{
if(var_07 < var_06.size)
{
var_02[var_07] forceteleport(var_06[var_07].origin,var_06[var_07].angles);
var_02[var_07] setgoalpos(var_06[var_07].origin);
continue;
}
var_02[var_07] forceteleport(level.player.origin,level.player.angles);
var_02[var_07] setgoalpos(level.player.origin);
}
}
//Function Number: 7
cleanup_ai_with_script_noteworthy(param_00,param_01)
{
if(!isdefined(param_01))
{
param_01 = 512;
}
var_02 = [];
foreach(var_04 in getentarray(param_00,"script_noteworthy"))
{
if(isspawner(var_04))
{
var_04 delete();
continue;
}
var_02[var_02.size] = var_04;
}
thread maps\_utility::ai_delete_when_out_of_sight(var_02,param_01);
}
//Function Number: 8
delete_spawners(param_00)
{
if(!isarray(param_00))
{
param_00 = [param_00];
}
foreach(var_02 in param_00)
{
foreach(var_04 in getentarray(var_02,"script_noteworthy"))
{
if(isspawner(var_04))
{
var_04 delete();
}
}
}
}
//Function Number: 9
warbird_shooting_think(param_00)
{
level.player endon("death");
self endon("death");
self.mgturret[0] setmode("manual");
self.mgturret[1] setmode("manual");
if(!maps\_utility::ent_flag_exist("fire_turrets"))
{
maps\_utility::ent_flag_init("fire_turrets");
}
maps\_utility::ent_flag_set("fire_turrets");
thread warbird_fire_monitor();
for(;;)
{
self waittill("warbird_fire");
thread warbird_fire(param_00);
}
}
//Function Number: 10
warbird_fire(param_00)
{
self endon("death");
var_01 = self.mgturret[0];
var_02 = self.mgturret[1];
var_03 = 3;
while(maps\_utility::ent_flag("fire_turrets"))
{
var_04 = getaiarray("allies");
if(!maps\_utility::ent_flag_exist("dont_shoot_player") || !maps\_utility::ent_flag("dont_shoot_player"))
{
var_05 = 33;
if(randomint(100) <= var_05)
{
var_04 = common_scripts\utility::array_add(var_04,level.player);
}
}
var_06 = [];
foreach(var_08 in var_04)
{
if(isdefined(var_08.ignoreme) && var_08.ignoreme)
{
continue;
}
else
{
var_06[var_06.size] = var_08;
}
}
var_06 = sortbydistance(var_06,self.origin);
var_0A = undefined;
foreach(var_08 in var_06)
{
if(!isdefined(var_08))
{
continue;
}
if(!isalive(var_08))
{
continue;
}
if(isdefined(param_00) && param_00)
{
var_0C = self.mgturret[0] gettagorigin("tag_flash");
var_0D = var_08 geteye();
var_0E = vectornormalize(var_0D - var_0C);
var_0F = var_0D + var_0E * 20;
if(!sighttracepassed(var_0F,var_0D,0,var_08,self.mgturret[0]))
{
continue;
}
}
var_0A = var_08;
break;
}
if(isdefined(var_0A))
{
var_01 settargetentity(var_0A);
var_02 settargetentity(var_0A);
var_01 turretfireenable();
var_02 turretfireenable();
var_01 startfiring();
var_02 startfiring();
wait_for_warbird_fire_target_done(var_0A,param_00);
var_01 cleartargetentity();
var_02 cleartargetentity();
var_01 turretfiredisable();
var_02 turretfiredisable();
}
wait(var_03);
}
var_01 turretfiredisable();
var_02 turretfiredisable();
}
//Function Number: 11
wait_for_warbird_fire_target_done(param_00,param_01)
{
param_00 endon("death");
if(!maps\_utility::ent_flag("fire_turrets"))
{
return;
}
self endon("fire_turrets");
if(param_00 == level.player)
{
var_02 = 0.6;
}
else
{
var_02 = 3;
}
var_03 = 0;
while(var_03 < var_02)
{
if(isdefined(param_01) && param_01)
{
var_04 = self.mgturret[0] gettagorigin("tag_flash");
var_05 = param_00 geteye();
var_06 = vectornormalize(var_05 - var_04);
var_07 = var_04 + var_06 * 20;
if(!sighttracepassed(var_07,var_05,0,param_00,self.mgturret[0]))
{
return;
}
}
var_03 = var_03 + 0.3;
wait(0.3);
}
}
//Function Number: 12
warbird_fire_monitor()
{
self endon("death");
self waittill("warbird_stop_firing");
maps\_utility::ent_flag_clear("fire_turrets");
}
//Function Number: 13
add_enemy_flashlight()
{
playfxontag(common_scripts\utility::getfx("flashlight_ai"),self,"tag_flash");
self.have_flashlight = 1;
}
//Function Number: 14
assign_cloak_model(param_00)
{
self.cloakedmodel = param_00;
self.defaultmodel = self.model;
}
//Function Number: 15
cloak_on(param_00,param_01)
{
if(!isdefined(param_00))
{
param_00 = 1;
}
if(!isdefined(param_01))
{
param_01 = 0.75;
}
var_02 = 0;
self setmodel(self.cloakedmodel);
if(issubstr(self.model,"burke") || issubstr(self.model,"knox"))
{
wait(0.05);
self overridematerial("mtl_burke_sentinel_covert_headgear_a","mc/mtl_burke_sentinel_covert_headgear_a_cloak");
}
if(issubstr(self.model,"cormack"))
{
wait(0.05);
self overridematerial("mtl_cormack_sentinel_covert_headgear_a","mc/mtl_cormack_sentinel_covert_headgear_a_cloak");
}
self drawpostresolve();
self setmaterialscriptparam(0,param_01);
soundscripts\_snd::snd_message("npc_cloak_enable");
if(param_00)
{
cloak_stencil_on();
}
self.cloak = "on";
wait(0.1);
maps\_cloak::set_cloak_material_for_npc_weapon();
}
//Function Number: 16
turn_on_the_cloak_effect_wallclimb()
{
level._cloaked_stealth_settings.cloak_on = 1;
soundscripts\_snd::snd_message("exo_cloak_enable");
if(level._cloaked_stealth_settings.visibility_range_version == 1)
{
maps\_stealth_utility::stealth_detect_ranges_set(level._cloaked_stealth_settings.ranges["cloak_on_hidden"],level._cloaked_stealth_settings.ranges["cloak_on_spotted"]);
}
thread maps\_cloak::cloak_vm_weapon_blend();
if(isdefined(level.scr_model["player_rig"]))
{
level.scr_model["player_rig"] = "viewbody_sentinel_covert_cloak";
}
if(isdefined(level.player_rig))
{
level.player_rig setmaterialscriptparam(1,0);
level.player_rig setmodel(level.scr_model["player_rig"]);
wait(0.05);
level.player_rig drawpostresolve();
level.player_rig setmaterialscriptparam(1,0);
wait(0.05);
level.player_rig setmaterialscriptparam(0,0.75);
level.player_rig hudoutlineenable(0);
}
}
//Function Number: 17
cloak_stencil_on(param_00)
{
thread maps\_cloak::setalertstencilstate(param_00);
}
//Function Number: 18
cloak_off(param_00)
{
if(!isdefined(param_00))
{
param_00 = 1;
}
var_01 = 0;
soundscripts\_snd::snd_message("npc_cloak_disable");
self setmaterialscriptparam(1,param_00);
wait(param_00);
self overridematerialreset();
self drawpostresolveoff();
if(issubstr(self.name,"Knox"))
{
if(isdefined(level.rope_knox) && isdefined(level.carabiner_knox))
{
level.rope_knox cloak_off_rope();
level.carabiner_knox cloak_off_rope(0.2);
}
}
self setmodel(self.defaultmodel);
thread maps\_cloak::clearalertstencilstate();
self.cloak = "off";
}
//Function Number: 19
cloak_off_rope(param_00)
{
if(!isdefined(param_00))
{
param_00 = 1;
}
self setmaterialscriptparam(1,param_00);
self overridematerialreset();
self drawpostresolveoff();
}
//Function Number: 20
am_i_moving()
{
wait(0.1);
var_00 = maps\_shg_utility::get_differentiated_velocity();
if(length(var_00) != 0)
{
return 1;
}
return 0;
}
//Function Number: 21
any_enemy_is_able_to_attack()
{
if(common_scripts\utility::flag("_stealth_spotted"))
{
foreach(var_01 in getaispeciesarray("bad_guys","all"))
{
if(var_01.alertlevel == "combat" && isdefined(var_01.enemy) && var_01 cansee(var_01.enemy))
{
return 1;
}
}
}
return 0;
}
//Function Number: 22
prevent_friendly_from_shooting_during_stealth()
{
var_00 = 0.3;
for(;;)
{
if(common_scripts\utility::flag("flag_obj_bio_weapons_04") || common_scripts\utility::flag("flag_post_breach_patrol_alerted"))
{
self.dontevershoot = undefined;
maps\_utility::set_ignoreall(0);
return;
}
if(!common_scripts\utility::flag("_stealth_enabled") || any_enemy_is_able_to_attack())
{
self.dontevershoot = undefined;
maps\_utility::set_ignoreall(0);
}
else
{
self.dontevershoot = 1;
maps\_utility::set_ignoreall(1);
}
wait(var_00);
}
}
//Function Number: 23
do_scanner_sounds()
{
self endon("death");
for(;;)
{
var_00 = line_segment_end_point(self.scanner_origin,self.scanner_yaw,self.scanner_tilt,self.cone_length);
var_01 = bullettrace(self.scanner_origin,var_00,1);
var_02 = var_01["position"];
self notify("update_seeker_audio",var_02);
wait(0.05);
}
}
//Function Number: 24
do_scanner_fx()
{
self endon("death");
var_00 = 0;
var_01 = common_scripts\utility::spawn_tag_origin();
var_02 = common_scripts\utility::spawn_tag_origin();
var_03 = common_scripts\utility::spawn_tag_origin();
var_04 = common_scripts\utility::spawn_tag_origin();
var_05 = common_scripts\utility::spawn_tag_origin();
playfxontag(common_scripts\utility::getfx(self.fx_target_none),var_05,"tag_origin");
thread do_scanner_death(var_05);
for(;;)
{
update_vfx_tags(self.scanner_origin,self.scanner_yaw,self.scanner_tilt,self.vertical_cone_range,self.horizontal_cone_range,var_01,var_02,var_03,var_04,var_05);
if(var_00)
{
if((isdefined(self.scanner_cone_inside_ents) && self.scanner_cone_inside_ents.size == 0) || !isdefined(self.scanner_cone_inside_ents) && !level.player_is_in_scanner_cone)
{
var_00 = 0;
playfxontag(common_scripts\utility::getfx(self.fx_target_none),var_05,"tag_origin");
stopfxontag(common_scripts\utility::getfx(self.fx_target_locked),var_05,"tag_origin");
self notify("update_fixed_scanner_audio",0);
}
}
else if((isdefined(self.scanner_cone_inside_ents) && self.scanner_cone_inside_ents.size > 0) || !isdefined(self.scanner_cone_inside_ents) && level.player_is_in_scanner_cone)
{
var_00 = 1;
playfxontag(common_scripts\utility::getfx(self.fx_target_locked),var_05,"tag_origin");
stopfxontag(common_scripts\utility::getfx(self.fx_target_none),var_05,"tag_origin");
self notify("update_fixed_scanner_audio",1);
}
wait(0.05);
}
}
//Function Number: 25
attach_fixed_scanner(param_00,param_01,param_02,param_03,param_04,param_05)
{
self.scanner_cone_inside_ents = [];
stopfxontag(common_scripts\utility::getfx(param_05),self,"tag_fx");
self endon("death");
if(self.health < 0)
{
return;
}
self.scanner_origin = self gettagorigin("tag_fx");
self.scanner_yaw = param_02;
self.scanner_tilt = param_03;
self.cone_length = param_00;
self.horizontal_cone_range = param_01;
self.vertical_cone_range = param_01;
self.fx_target_locked = param_04;
self.fx_target_none = param_05;
thread do_scanner_fx();
if(0)
{
thread do_tuning();
}
thread draw_scanner_cone_loop();
thread maps\_shg_utility::make_emp_vulnerable();
self.emp_death_function = ::scanner_monitor_emp_damage;
self makeentitysentient("axis");
var_06 = getaiarray("allies");
var_06[var_06.size] = level.player;
for(;;)
{
foreach(var_08 in var_06)
{
if(!isalive(var_08))
{
var_06 = maps\_utility::array_removedead(var_06);
remove_dead_bodies_from_cone(var_06);
continue;
}
var_09 = var_08 getentitynumber();
var_0A = var_08 getpointinbounds(0,0,0);
var_0B = in_scanner_cone(var_0A,self.scanner_origin,self.scanner_yaw,self.scanner_tilt,self.cone_length,self.horizontal_cone_range);
if(var_0B)
{
if(!isdefined(self.scanner_cone_inside_ents[var_09]))
{
self.scanner_cone_inside_ents[var_09] = 1;
handle_actor_enter_scanner(var_08);
}
}
else if(isdefined(self.scanner_cone_inside_ents[var_09]))
{
self.scanner_cone_inside_ents[var_09] = undefined;
}
if(var_09 == level.player getentitynumber())
{
level.player_is_in_scanner_cone = var_0B;
}
}
wait(0.25);
}
}
//Function Number: 26
scanner_monitor_emp_damage()
{
self notify("damage",9999999,self,(0,0,0),self.origin,"MOD_EXPLOSIVE","","");
self notify("death");
}
//Function Number: 27
handle_actor_enter_scanner(param_00)
{
if(param_00 getentitynumber() == level.player getentitynumber())
{
maps\_cloak::cloak_device_hit_by_electro_magnetic_pulse();
param_00 shellshock("flashbang",3);
return;
}
param_00 cloak_off();
param_00 maps\_utility::flashbangstart(2);
}
//Function Number: 28
do_scanner_death(param_00)
{
self waittill("death");
if(issentient(self))
{
self freeentitysentient();
}
stopfxontag(common_scripts\utility::getfx(self.fx_target_none),param_00,"tag_origin");
stopfxontag(common_scripts\utility::getfx(self.fx_target_locked),param_00,"tag_origin");
}
//Function Number: 29
remove_dead_bodies_from_cone(param_00)
{
var_01 = [];
foreach(var_03 in param_00)
{
if(isdefined(self.scanner_cone_inside_ents[var_03 getentitynumber()]))
{
var_01[var_03 getentitynumber()] = 1;
}
}
self.scanner_cone_inside_ents = var_01;
}
//Function Number: 30
draw_scanner_cone_loop()
{
self endon("death");
for(;;)
{
draw_scanner_cone(self.scanner_cone_inside_ents.size,self.scanner_origin,self.scanner_yaw,self.scanner_tilt,self.scanner_origin,self.scanner_origin,self.cone_length,self.horizontal_cone_range,self.horizontal_cone_range);
wait(0.05);
}
}
//Function Number: 31
do_tuning()
{
for(;;)
{
if(level.player buttonpressed("DPAD_UP"))
{
self.scanner_tilt = self.scanner_tilt - 1;
}
if(level.player buttonpressed("DPAD_DOWN"))
{
self.scanner_tilt = self.scanner_tilt + 1;
}
if(level.player buttonpressed("DPAD_LEFT"))
{
self.scanner_yaw = self.scanner_yaw - 1;
}
if(level.player buttonpressed("DPAD_RIGHT"))
{
self.scanner_yaw = self.scanner_yaw + 1;
}
if(level.player buttonpressed("BUTTON_X"))
{
self.horizontal_cone_range = self.horizontal_cone_range - 0.1;
self.vertical_cone_range = self.vertical_cone_range - 0.1;
}
if(level.player buttonpressed("BUTTON_Y"))
{
self.horizontal_cone_range = self.horizontal_cone_range + 0.1;
self.vertical_cone_range = self.vertical_cone_range + 0.1;
}
if(level.player buttonpressed("BUTTON_LSTICK"))
{
self.cone_length = self.cone_length - 10;
}
if(level.player buttonpressed("BUTTON_RSTICK"))
{
self.cone_length = self.cone_length + 10;
}
var_00 = " tilt:" + self.scanner_tilt + " yaw:" + self.scanner_yaw + " range:" + self.horizontal_cone_range + " length:" + self.cone_length;
if(level.player buttonpressed("DPAD_UP") || level.player buttonpressed("DPAD_DOWN") || level.player buttonpressed("DPAD_LEFT") || level.player buttonpressed("DPAD_RIGHT") || level.player buttonpressed("BUTTON_X") || level.player buttonpressed("BUTTON_Y") || level.player buttonpressed("BUTTON_LSTICK") || level.player buttonpressed("BUTTON_RSTICK"))
{
}
wait 0.05;
}
}
//Function Number: 32
enable_all_fixed_scanners()
{
level.camera_array = getentarray("camera_breach","script_noteworthy");
var_00 = getentarray("camera_scanner_interior","script_noteworthy");
level.camera_array = common_scripts\utility::array_combine(level.camera_array,var_00);
var_00 = undefined;
common_scripts\utility::array_thread(level.camera_array,::camera_scanner_think);
}
//Function Number: 33
camera_scanner_think()
{
var_00 = undefined;
if(isdefined(self.target))
{
var_00 = getent(self.target,"targetname");
var_00 enableaimassist();
var_00.maxhealth = 1;
var_00 setnormalhealth(var_00.maxhealth);
target_set(var_00,(0,0,-80));
target_setjavelinonly(var_00,1);
}
if(!isdefined(self.scanner_cone_inside_ents))
{
thread attach_fixed_scanner(300,60,angleclamp(180 + self.angles[1]),self.angles[0],"camera_fixed_scanner","camera_fixed_scanner_search");
}
soundscripts\_snd::snd_message("start_fixed_scanner_audio");
self waittill("death");
if(common_scripts\utility::flag("flag_facility_breach_complete"))
{
thread maps\lab_vo::camera_scanner_interior_killed();
}
if(isdefined(var_00))
{
var_00 delete();
}
}
//Function Number: 34
disable_all_fixed_scanners()
{
if(isdefined(level.camera_array))
{
foreach(var_01 in level.camera_array)
{
if(isdefined(var_01.scanner_cone_inside_ents))
{
self notify("death");
}
var_01 notify("stop_fixed_scanner_audio");
}
}
}
//Function Number: 35
do_vehicle_scanner_tuning()
{
for(;;)
{
if(level.player buttonpressed("DPAD_UP"))
{
self.scanner_tilt = self.scanner_tilt - 1;
}
if(level.player buttonpressed("DPAD_DOWN"))
{
self.scanner_tilt = self.scanner_tilt + 1;
}
if(level.player buttonpressed("BUTTON_LSTICK"))
{
self.cone_length = self.cone_length - 10;
}
if(level.player buttonpressed("BUTTON_RSTICK"))
{
self.cone_length = self.cone_length + 10;
}
if(level.player buttonpressed("DPAD_LEFT"))
{
self.scanner_offset_from_vehicle_facing = self.scanner_offset_from_vehicle_facing - 1;
}
if(level.player buttonpressed("DPAD_RIGHT"))
{
self.scanner_offset_from_vehicle_facing = self.scanner_offset_from_vehicle_facing + 1;
}
if(level.player buttonpressed("BUTTON_X"))
{
self.sweep_range = self.sweep_range - 0.1;
}
if(level.player buttonpressed("BUTTON_Y"))
{
self.sweep_range = self.sweep_range + 0.1;
}
var_00 = " tilt:" + self.scanner_tilt + " offset:" + self.scanner_offset_from_vehicle_facing + " range:" + self.sweep_range + " length:" + self.cone_length;
wait(0.05);
}
}
//Function Number: 36
attach_scanner(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09,param_0A,param_0B,param_0C)
{
if(!isdefined(level.player_is_in_scanner_cone))
{
level.player_is_in_scanner_cone = 0;
}
var_0D = 120;
var_0E = 1;
var_0F = var_0E * anglestoforward(self.angles);
self.scanner_origin = self.origin + (0,0,var_0D) + var_0F;
self.scanner_tilt = param_09;
self.sweep_range = param_04;
self.vertical_cone_range = param_01;
self.horizontal_cone_range = param_02;
self.cone_length = param_00;
self.scanner_offset_from_vehicle_facing = param_03;
self.fx_target_locked = param_0B;
self.fx_target_none = param_0C;
init_scanner_yaw(self.sweep_range);
thread do_scanner_fx();
thread do_scanner_sounds();
var_10 = 0;
var_11 = 166;
var_12 = 0;
var_13 = 102;
start_sweep_mode_func();
for(;;)
{
var_0F = var_0E * anglestoforward(self.angles);
self.scanner_origin = self.origin + (0,0,var_0D) + var_0F;
var_14 = level.player getpointinbounds(0,0,0);
if(self.scanner_mode == 0)
{
update_scanner_yaw_in_sweep_mode(self.scanner_offset_from_vehicle_facing,self.sweep_range,param_05,param_06,param_07,param_08);
level.player_is_in_scanner_cone = in_scanner_cone(var_14,self.scanner_origin,self.scanner_yaw,self.scanner_tilt,param_00,param_02);
if(level.player_is_in_scanner_cone)
{
common_scripts\utility::flag_set("_stealth_spotted");
maps\_cloak::cloak_device_hit_by_electro_magnetic_pulse();
exit_sweep_mode_func();
enter_track_player_mode_func();
}
}
else if(self.scanner_mode == 1)
{
level.player_is_in_scanner_cone = in_scanner_cone(var_14,self.scanner_origin,self.scanner_yaw,self.scanner_tilt,param_00,param_02);
if(level.player_is_in_scanner_cone)
{
update_scanner_direction_in_track_player_mode(var_14,self.scanner_origin);
}
else
{
enter_lost_player_mode_func();
}
}
else if(self.scanner_mode == 2)
{
if(self.state_timer > 0)
{
self.state_timer = self.state_timer - 0.05;
}
else
{
enter_return_to_sweep_mode_func();
}
}
else if(self.scanner_mode == 3)
{
level.player_is_in_scanner_cone = in_scanner_cone(var_14,self.scanner_origin,self.scanner_yaw,self.scanner_tilt,param_00,param_02);
if(level.player_is_in_scanner_cone)
{
maps\_cloak::cloak_device_hit_by_electro_magnetic_pulse();
exit_return_to_sweep_mode_func();
enter_track_player_mode_func();
}
else
{
var_15 = update_scanner_yaw_returning_to_sweep_mode(self.scanner_offset_from_vehicle_facing,self.sweep_range,param_05,param_09,param_0A);
if(var_15)
{
exit_return_to_sweep_mode_func();
enter_sweep_mode_func();
}
}
}
var_10 = var_10 + var_11;
if(var_10 > 360)
{
var_10 = var_10 - 360;
}
var_12 = var_12 + var_13;
if(var_12 > 360)
{
var_12 = var_12 - 360;
}
if(0)
{
draw_scanner_cone(level.player_is_in_scanner_cone,self.scanner_origin,self.scanner_yaw,self.scanner_tilt,var_10,var_12,self.cone_length,self.vertical_cone_range,self.horizontal_cone_range);
}
wait(0.05);
}
}
//Function Number: 37
precache_scanner_turret()
{
var_00 = "scanner_vrap_turret";
var_01 = "weapon_pitbull_turret";
precachemodel(var_01);
precacheturret(var_00);
}
//Function Number: 38
attach_scanner_turret()
{
if(!isdefined(level.player_is_in_scanner_cone))
{
level.player_is_in_scanner_cone = 0;
}
var_00 = "scanner_vrap_turret";
var_01 = "tag_turret";
var_02 = "weapon_pitbull_turret";
var_03 = undefined;
var_04 = "auto_ai";
var_05 = 0.2;
var_06 = 0;
var_07 = 0;
var_08 = 0;
var_09 = spawnturret("misc_turret",(0,0,0),var_00);
var_09 linkto(self,var_01,(0,0,0),(0,-1 * var_07,0));
var_09 setmodel(var_02);
var_09.angles = self.angles;
var_09.isvehicleattached = 1;
var_09.ownervehicle = self;
var_09.script_team = self.script_team;
var_09 thread maps\_mgturret::burst_fire_unmanned();
var_09 makeunusable();
maps\_vehicle_code::set_turret_team(var_09);
maps\_mgturret::mg42_setdifficulty(var_09,maps\_utility::getdifficulty());
var_09.script_fireondrones = var_08;
var_09.deletedelay = var_05;
var_09.maxrange = var_03;
var_09 setdefaultdroppitch(var_06);
var_09 maps\_vehicle_code::turret_set_default_on_mode(var_04);
var_09 setmode(var_09.defaultonmode);
var_09 startbarrelspin();
var_0A = 1.5;
var_0B = 0.1;
var_0C = 2;
for(;;)
{
var_0D = var_09 getmode();
if(level.player_is_in_scanner_cone == 1)
{
if(var_0D != "manual")
{
self playloopsound("seeker_alarm_lp");
wait(var_0C);
self stoploopsound("seeker_alarm_lp");
var_09 setmode("manual");
var_09 settargetentity(level.player);
}
var_09 waittill("turret_on_target");
for(var_0E = var_0A;var_0E > 0;var_0E = var_0E - var_0B)
{
var_09 shootturret();
wait(var_0B);
}
}
else if(var_0D != "auto_ai")
{
var_09 setmode("auto_ai");
var_09 cleartargetentity(level.player);
}
wait(0.1);
}
}
//Function Number: 39
start_sweep_mode_func()
{
self.scanner_mode = 0;
soundscripts\_snd::snd_message("start_seeker_audio");
init_scanner_yaw(self.sweep_range);
}
//Function Number: 40
enter_sweep_mode_func()
{
self.scanner_mode = 0;
init_scanner_yaw(self.sweep_range);
}
//Function Number: 41
exit_sweep_mode_func()
{
}
//Function Number: 42
enter_track_player_mode_func()
{
self notify("stop_seeker_audio");
self.scanner_mode = 1;
var_00 = level.player.origin;
if(isdefined(self.script_stealthgroup) && isdefined(level._stealth.group.groups[maps\_utility::string(self.script_stealthgroup)]))
{
var_01 = maps\_stealth_shared_utilities::group_get_ai_in_group(maps\_utility::string(self.script_stealthgroup));
foreach(var_03 in var_01)
{
if(var_03 == self)
{
continue;
}
if(isdefined(var_03.enemy) || isdefined(var_03.favoriteenemy))
{
continue;
}
var_03 notify("heard_alarm",var_00);
}
}
}
//Function Number: 43
enter_lost_player_mode_func()
{
self.scanner_mode = 2;
self.state_timer = 2.4;
}
//Function Number: 44
enter_return_to_sweep_mode_func()
{
soundscripts\_snd::snd_message("start_seeker_audio");
self.scanner_mode = 3;
}
//Function Number: 45
exit_return_to_sweep_mode_func()
{
}
//Function Number: 46
init_scanner_yaw(param_00)
{
self.scanner_yaw = -41;
self.scanner_local_yaw = -0.5 * param_00;
self.scanner_local_velocity = 0;
self.scanner_pause_timer = 0;
self.scanner_sweep_direction = 1;
}
//Function Number: 47
update_scanner_yaw_in_sweep_mode(param_00,param_01,param_02,param_03,param_04,param_05)
{
var_06 = 0.65;
if(self.scanner_pause_timer > 0)
{
self.scanner_pause_timer = self.scanner_pause_timer - 0.05;
}
else if(self.scanner_sweep_direction > 0)
{
var_07 = 0.5 * self.scanner_local_velocity * self.scanner_local_velocity / param_04;
if(self.scanner_local_yaw + var_07 > 0.5 * param_01)
{
self.scanner_local_velocity = self.scanner_local_velocity - 0.05 * param_04;
if(self.scanner_local_velocity < 0)
{
self.scanner_local_velocity = 0;
}
}
else
{
self.scanner_local_velocity = self.scanner_local_velocity + 0.05 * param_03;
if(self.scanner_local_velocity > param_02)
{
self.scanner_local_velocity = param_02;
}
}
self.scanner_local_yaw = self.scanner_local_yaw + 0.05 * self.scanner_local_velocity;
if(self.scanner_local_yaw > param_01 * var_06 - 0.5)
{
if(!common_scripts\utility::flag("flag_seeker_cone_safe_right"))
{
common_scripts\utility::flag_set("flag_seeker_cone_safe_right");
}
}
if(self.scanner_local_velocity <= 0)
{
self.scanner_pause_timer = param_05;
self.scanner_sweep_direction = -1;
common_scripts\utility::flag_clear("flag_seeker_cone_safe_right");
}
}
else
{
var_07 = 0.5 * self.scanner_local_velocity * self.scanner_local_velocity / param_05;
if(self.scanner_local_yaw - var_07 < -0.5 * param_01)
{
self.scanner_local_velocity = self.scanner_local_velocity + 0.05 * param_04;
if(self.scanner_local_velocity > 0)
{
self.scanner_local_velocity = 0;
}
}
else
{
self.scanner_local_velocity = self.scanner_local_velocity - 0.05 * param_03;
if(self.scanner_local_velocity < -1 * param_02)
{
self.scanner_local_velocity = -1 * param_02;
}
}
self.scanner_local_yaw = self.scanner_local_yaw + 0.05 * self.scanner_local_velocity;
if(self.scanner_local_yaw < param_01 * 0.5 - var_06)
{
if(!common_scripts\utility::flag("flag_seeker_cone_safe_left"))
{
common_scripts\utility::flag_set("flag_seeker_cone_safe_left");
}
}
if(self.scanner_local_velocity >= 0)
{
self.scanner_pause_timer = param_05;
self.scanner_sweep_direction = 1;
common_scripts\utility::flag_clear("flag_seeker_cone_safe_left");
}
}
var_08 = self.angles[1];
self.scanner_yaw = var_08 - param_00 + self.scanner_local_yaw;
}
//Function Number: 48
update_scanner_direction_in_track_player_mode(param_00,param_01)
{
var_02 = param_00 - param_01;
var_03 = angleclamp360(var_02[1],var_02[0]);
var_04 = length2d(var_02);
var_05 = angleclamp360(var_02[2],var_04);
self.scanner_tilt = var_05;
self.scanner_yaw = var_03;
}
//Function Number: 49
update_scanner_yaw_returning_to_sweep_mode(param_00,param_01,param_02,param_03,param_04)
{
self.scanner_pause_timer = 0;
var_05 = self.angles[1];
var_06 = var_05 - param_00 - 0.5 * param_01;
var_07 = var_06 - self.scanner_yaw;
var_08 = 0;
if(var_07 > 1)
{
self.scanner_yaw = self.scanner_yaw + 0.05 * param_02;
}
else if(var_07 < -1)
{
self.scanner_yaw = self.scanner_yaw - 0.05 * param_02;
}
else
{
var_08 = 1;
self.scanner_yaw = var_06;
}
self.scanner_local_yaw = self.scanner_yaw - var_05 + param_00;
var_09 = param_03 - self.scanner_tilt;
var_0A = 0;
if(var_09 > 1)
{
self.scanner_tilt = self.scanner_tilt + 0.05 * param_04;
}
else if(var_09 < -1)
{
self.scanner_tilt = self.scanner_tilt - 0.05 * param_04;
}
else
{
var_0A = 1;
self.scanner_tilt = param_03;
}
return var_08 && var_0A;
}
//Function Number: 50
yaw_tilt_to_direction_vector(param_00,param_01)
{
var_02 = cos(param_01);
return (cos(param_00) * var_02,sin(param_00) * var_02,sin(param_01));
}
//Function Number: 51
line_segment_end_point(param_00,param_01,param_02,param_03)
{
return param_00 + param_03 * yaw_tilt_to_direction_vector(param_01,param_02);
}
//Function Number: 52
update_vfx_tags(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
param_05.origin = param_00;
param_06.origin = param_00;
param_07.origin = param_00;
param_08.origin = param_00;
param_09.origin = param_00;
param_05.angles = vectortoangles(yaw_tilt_to_direction_vector(param_01 - param_04 / 2,param_02 + param_03 / 2));
param_06.angles = vectortoangles(yaw_tilt_to_direction_vector(param_01 + param_04 / 2,param_02 - param_03 / 2));
param_07.angles = vectortoangles(yaw_tilt_to_direction_vector(param_01 - param_04 / 2,param_02 - param_03 / 2));
param_08.angles = vectortoangles(yaw_tilt_to_direction_vector(param_01 + param_04 / 2,param_02 + param_03 / 2));
param_09.angles = vectortoangles(yaw_tilt_to_direction_vector(param_01,param_02));
}
//Function Number: 53
draw_scanner_cone(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08)
{
}
//Function Number: 54
in_scanner_cone(param_00,param_01,param_02,param_03,param_04,param_05)
{
var_06 = param_00 - param_01;
if(lengthsquared(var_06) > param_04 * param_04)
{
return 0;
}
var_07 = line_segment_end_point(param_01,param_02,param_03,param_04);
var_08 = var_07 - param_01;
var_09 = cos(0.5 * param_05);
if(vectordot(vectornormalize(var_06),vectornormalize(var_08)) <= var_09)
{
return 0;
}
var_0A = 0;
var_0B = bullettrace(param_01,param_00,var_0A,self);
if(var_0B["fraction"] < 1)
{
return 0;
}
return 1;
}
//Function Number: 55
player_looking_in_direction_2d(param_00,param_01,param_02,param_03)
{
if(!isdefined(param_01))
{
param_01 = 0.8;
}
var_04 = maps\_utility::get_player_from_self();
var_05 = var_04 geteye();
var_06 = vectortoangles(param_00 - var_05);
var_07 = anglestoforward(var_06);
var_08 = var_04 getplayerangles();
var_09 = anglestoforward(var_08);
var_07 = vectornormalize((var_07[0],var_07[1],0));
var_09 = vectornormalize((var_09[0],var_09[1],0));
var_0A = vectordot(var_07,var_09);
if(var_0A < param_01)
{
return 0;
}
if(isdefined(param_02))
{
return 1;
}
var_0B = bullettrace(param_00,var_05,0,param_03);
return var_0B["fraction"] == 1;
}
//Function Number: 56
enable_takedown_hint(param_00,param_01,param_02)
{
self notify("enable_takedown_hint_called");
self endon("enable_takedown_hint_called");
level endon("flag_se_vehicle_takedown_01_failed");
self endon("takedown_failed");
var_03 = param_01 * param_01;
if(!isdefined(level.melee_hint_displayed))
{
level.melee_hint_displayed = 0;
}
if(!common_scripts\utility::flag_exist("flag_disable_takedown_hint"))
{
common_scripts\utility::flag_init("flag_disable_takedown_hint");
}
else
{
common_scripts\utility::flag_clear("flag_disable_takedown_hint");
}
level.melee_pressed = 0;
level.should_display_melee_hint = 0;
while(!level.melee_pressed)
{
if(common_scripts\utility::flag("flag_disable_takedown_hint"))
{
if(level.melee_hint_displayed)
{
level.should_display_melee_hint = 0;
}
common_scripts\utility::flag_clear("flag_disable_takedown_hint");
return;
}
var_04 = distance2dsquared(param_00.origin,level.player.origin);
if(level.melee_hint_displayed)
{
if(var_04 > var_03 + 10)
{
level.should_display_melee_hint = 0;
}
if(isdefined(level._cloaked_stealth_settings.playing_view_model_cloak_toggle_anim) && level._cloaked_stealth_settings.playing_view_model_cloak_toggle_anim == 1)
{
level.should_display_melee_hint = 0;
}
if(isdefined(param_02) && param_02)
{
var_05 = param_00 geteye();
var_06 = 0.9;
if(!level.player player_looking_in_direction_2d(var_05,var_06,1))
{
level.should_display_melee_hint = 0;
}
}
continue;
}
if(var_04 <= var_03)
{
var_07 = 1;
if(isdefined(level._cloaked_stealth_settings.playing_view_model_cloak_toggle_anim) && level._cloaked_stealth_settings.playing_view_model_cloak_toggle_anim == 1)
{
var_07 = 0;
}
if(isdefined(param_02) && param_02)
{
var_05 = param_00 geteye();
var_06 = 0.9;
if(!level.player player_looking_in_direction_2d(var_05,var_06,1))
{
var_07 = 0;
}
}
if(var_07)
{
level.should_display_melee_hint = 1;
level.melee_hint_displayed = 1;
level.player allowmelee(0);
maps\_utility::display_hint_timeout("takedown_hint",undefined);
}
}
wait(0.05);
}
self notify("player_completed_takedown");
}
//Function Number: 57
display_takedown_world_prompt_on_enemy(param_00)
{
level endon("se_takedown_01_failed");
var_01 = common_scripts\utility::spawn_tag_origin();
var_01.origin = (-8039,5301,-179);
while(distance(self.origin,var_01.origin) > 200)
{
wait(0.5);
}
var_02 = common_scripts\utility::spawn_tag_origin();
var_02.origin = self.origin + (0,0,52);
var_02 linkto(self,"tag_origin");
var_02 thread activate_takedown_world_prompt_on_enemy(param_00);
}
//Function Number: 58
activate_takedown_world_prompt_on_enemy(param_00)
{
var_01 = maps\_shg_utility::hint_button_tag("melee","tag_origin",100,200);
common_scripts\utility::waittill_any_ents(param_00,"player_completed_takedown",level,"flag_disable_takedown_hint");
var_01 maps\_shg_utility::hint_button_clear();
}
//Function Number: 59
activate_takedown_world_prompt_on_truck_enemy(param_00)
{
var_01 = maps\_shg_utility::hint_button_tag("melee","j_neck",100,200);
common_scripts\utility::waittill_any_ents(param_00,"player_completed_takedown",level,"flag_disable_takedown_hint",self,"takedown_failed",level,"flag_se_vehicle_takedown_01_failed");
var_01 maps\_shg_utility::hint_button_clear();
}
//Function Number: 60
takedown_hint_off()
{
var_00 = 0;
if(level.player meleebuttonpressed())
{
level.melee_pressed = 1;
var_00 = 1;
}
if(!level.should_display_melee_hint)
{
if(!isdefined(level.player.disable_melee))
{
level.player allowmelee(1);
}
var_00 = 1;
}
if(var_00)
{
level.melee_hint_displayed = 0;
return 1;
}
return 0;
}
//Function Number: 61
disable_trigger_while_player_animating(param_00)
{
level endon(param_00);
for(;;)
{
if(isdefined(level._cloaked_stealth_settings.playing_view_model_cloak_toggle_anim) && level._cloaked_stealth_settings.playing_view_model_cloak_toggle_anim == 1)
{
if(!isdefined(self.trigger_off))
{
common_scripts\utility::trigger_off();
}
}
else if(isdefined(self.trigger_off))
{
common_scripts\utility::trigger_on();
}
wait(0.05);
}
}
//Function Number: 62
bloody_death(param_00,param_01)
{
self endon("death");
if(!issentient(self) || !isalive(self))
{
return;
}
if(isdefined(self.bloody_death) && self.bloody_death)
{
return;
}
self.bloody_death = 1;
if(isdefined(param_00))
{
wait(randomfloat(param_00));
}
var_02 = [];
var_02[0] = "j_hip_le";
var_02[1] = "j_hip_ri";
var_02[2] = "j_head";
var_02[3] = "j_spine4";
var_02[4] = "j_elbow_le";
var_02[5] = "j_elbow_ri";
var_02[6] = "j_clavicle_le";
var_02[7] = "j_clavicle_ri";
var_03 = getdvarint("cg_fov");
for(var_04 = 0;var_04 < 3 + randomint(5);var_04++)
{
var_05 = randomintrange(0,var_02.size);
thread bloody_death_fx(var_02[var_05],undefined);
wait(randomfloat(0.1));
if(isdefined(param_01) && isai(param_01) && isalive(param_01))
{
if(!level.player worldpointinreticle_circle(param_01.origin,var_03,500))
{
param_01 shootblank();
}
}
}
self dodamage(self.health + 50,self.origin);
}
//Function Number: 63
bloody_death_fx(param_00,param_01)
{
if(!isdefined(param_01))
{
param_01 = level._effect["flesh_hit"];
}
playfxontag(param_01,self,param_00);
}
//Function Number: 64
spawn_player_rig(param_00,param_01)
{
if(!isdefined(param_00))
{
param_00 = "player_rig";
}
if(!isdefined(param_01))
{
param_01 = level.player.origin;
}
var_02 = maps\_utility::spawn_anim_model(param_00);
if(maps\_cloak::is_player_cloaked())
{
var_02 maps\_cloak::set_cloak_on_model();
}
return var_02;
}
//Function Number: 65
ai_toggle_cloak_animate(param_00,param_01,param_02)
{
if(common_scripts\utility::flag("flag_logging_road_loud_combat"))
{
return;
}
level endon("flag_logging_road_loud_combat");
if(!isdefined(param_02))
{
param_02 = self.approachtype;
}
var_03 = "";
if(issubstr(param_02,"right"))
{
var_03 = "cornercrouch_right_cloak_toggle";
}
else if(issubstr(param_02,"left"))
{
var_03 = "cornercrouch_left_cloak_toggle";
}
else
{
var_03 = "crouch_exposed_cloak_toggle";
}
thread maps\lab_vo::ai_toggle_cloak_start_vo(param_00);
maps\_anim::anim_single_solo(self,var_03);
wait(1.5);
maps\_anim::anim_single_solo(self,var_03);
thread maps\lab_vo::ai_toggle_cloak_complete_vo(param_01);
}
//Function Number: 66
ai_toggle_cloak(param_00)
{
if(!isdefined(param_00.cloak) || param_00.cloak == "off")
{
param_00 thread cloak_on();
return;
}
param_00 cloak_off();
}
//Function Number: 67
activate_trigger_when_player_jumps()
{
self endon("trigger");
self endon("death");
for(;;)
{
if(level.player istouching(self) && !level.player isonground())
{
self notify("trigger");
}
wait(0.05);
}
}
//Function Number: 68
spawn_metrics_init()
{
level.spawn_metrics_spawn_count = [];
level.spawn_metrics_death_count = [];
maps\_utility::add_global_spawn_function("axis",::spawn_metrics_spawn_func);
foreach(var_01 in getaiarray("axis"))
{
if(!isspawner(var_01) && isalive(var_01))
{
var_01 spawn_metrics_spawn_func();
}
}
}
//Function Number: 69
spawn_metrics_spawn_func()
{
if(!isai(self))
{
return;
}
if(isdefined(self.script_noteworthy))
{
if(isdefined(level.spawn_metrics_spawn_count[self.script_noteworthy]))
{
level.spawn_metrics_spawn_count[self.script_noteworthy] = level.spawn_metrics_spawn_count[self.script_noteworthy] + 1;
}
else
{
level.spawn_metrics_spawn_count[self.script_noteworthy] = 1;
}
thread spawn_metrics_death_watcher();
}
}
//Function Number: 70
spawn_metrics_death_watcher()
{
var_00 = self.script_noteworthy;
self waittill("death");
if(isdefined(level.spawn_metrics_death_count[var_00]))
{
level.spawn_metrics_death_count[var_00] = level.spawn_metrics_death_count[var_00] + 1;
return;
}
level.spawn_metrics_death_count[var_00] = 1;
}
//Function Number: 71
spawn_metrics_number_spawned(param_00)
{
if(isarray(param_00))
{
var_01 = 0;
foreach(var_03 in param_00)
{
var_01 = var_01 + spawn_metrics_number_spawned(var_03);
}
return var_01;
}
if(isdefined(level.spawn_metrics_spawn_count[var_04]))
{
return level.spawn_metrics_spawn_count[var_04];
}
return 0;
}
//Function Number: 72
spawn_metrics_number_died(param_00)
{
if(isarray(param_00))
{
var_01 = 0;
foreach(var_03 in param_00)
{
var_01 = var_01 + spawn_metrics_number_died(var_03);
}
return var_01;
}
if(isdefined(level.spawn_metrics_death_count[var_04]))
{
return level.spawn_metrics_death_count[var_04];
}
return 0;
}
//Function Number: 73
spawn_metrics_number_alive(param_00)
{
return spawn_metrics_number_spawned(param_00) - spawn_metrics_number_died(param_00);
}
//Function Number: 74
spawn_metrics_waittill_count_reaches(param_00,param_01,param_02)
{
if(!isarray(param_01))
{
param_01 = [param_01];
}
waittillframeend;
for(;;)
{
var_03 = 0;
foreach(var_05 in param_01)
{
var_03 = var_03 + spawn_metrics_number_alive(var_05);
}
if(var_03 <= param_00)
{
break;
}
wait(1);
}
}
//Function Number: 75
spawn_metrics_waittill_deaths_reach(param_00,param_01,param_02)
{
if(!isarray(param_01))
{
param_01 = [param_01];
}
for(;;)
{
var_03 = 0;
foreach(var_05 in param_01)
{
var_03 = var_03 + spawn_metrics_number_died(var_05);
}
if(var_03 >= param_00)
{
break;
}
wait(1);
}
}
//Function Number: 76
move_hovertank_to_start(param_00)
{
var_01 = getent("hovertank","targetname");
var_02 = common_scripts\utility::getstruct(param_00,"script_noteworthy");
var_01.origin = var_02.origin;
if(isdefined(var_02.angles))
{
var_01.angles = var_02.angles;
}
}
//Function Number: 77
kill_when_player_not_looking()
{
self endon("death");
for(;;)
{
if(!maps\_utility::player_looking_at(self.origin))
{
bloody_death();
break;
}
wait(1);
}
}
//Function Number: 78
can_tip_think()
{
self endon("death");
var_00 = 200;
var_01 = 135;
var_02 = spawn("trigger_radius",self.origin,0,var_00,196);
var_03 = level.player;
var_04 = 1;
var_05 = 0.05;
var_06 = 1;
var_07 = 3;
var_08 = 200;
var_09 = 300;
for(;;)
{
var_02 waittill("trigger",var_0A);
if(var_0A != var_03)
{
continue;
}
var_0B = spawn("script_origin",self.origin);
var_0B.angles = vectortoangles(self.origin - level.player.origin);
var_0C = 0;
if(isdefined(level.player.driving_hovertank))
{
var_0C = level.player.driving_hovertank vehicle_getvelocity();
}
else
{
var_0C = level.player getvelocity();
}
var_04 = var_06 + var_07 - var_06 * 1 - length(var_0C) / var_08;
if(var_04 < var_06)
{
var_04 = var_06;
}
else if(var_04 > var_07)
{
var_04 = var_07;
}
self linkto(var_0B);
var_0B rotateto((var_01,var_0B.angles[1],var_0B.angles[2]),var_04);
var_0B movez(-1 * var_09,var_04);
earthquake(0.25,var_04,self.origin,300);
level.player playrumbleonentity("damage_heavy");
wait(var_04);
var_0B delete();
var_02 delete();
self delete();
}
}
//Function Number: 79
script_destructible_tree_think()
{
var_00 = self;
self endon("stop_thinking");
self setcandamage(1);
for(;;)
{
self waittill("damage",var_01,var_02,var_03,var_04,var_05);
if(var_02 == level.player)
{
break;
}
}
var_00 = spawn("script_model",self.origin);
if(isdefined(self.angles))
{
var_00.angles = self.angles;
}
var_00 setmodel("lab_tank_battle_sequoia_02_1b");
var_06 = spawn("script_model",self.origin + (0,0,96));
if(isdefined(self.angles))
{
var_06.angles = self.angles;
}
var_06 setmodel("lab_tank_battle_sequoia_02_1t");
var_07 = angleclamp360(var_04[1] - var_06.origin[1],var_04[0] - var_06.origin[0]) + 180;
if(var_07 > 360)
{
var_07 = var_07 - 360;
}
var_08 = (var_04[0] - var_06.origin[0],var_04[1] - var_06.origin[1],0);
var_09 = vectortoangles(var_08);
var_0A = anglestoforward(var_03);
var_0B = anglestoup(var_03);
playfx(common_scripts\utility::getfx("tree_explosion"),var_04,var_0A,var_0B);
var_0C = cos(45);
var_0D = sin(45);
var_0E = 10;
var_0F = 1.5;
var_10 = 3.5;
var_11 = randomintrange(var_0E * -1,var_0E);
var_12 = randomintrange(var_0E * -1,var_0E);
var_13 = abs(var_11) + abs(var_12);
var_14 = var_13 / var_0E * 2 * var_10 - var_0F + var_0F;
var_06 rotateby((var_11,0,var_12),var_14,0,var_14);
}
//Function Number: 80
log_pile_scripted_think()
{
self setcandamage(1);
var_00 = 0;
while(!var_00)
{
self waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09);
if(var_02 != level.player)
{
continue;
}
common_scripts\utility::flag_set("flag_log_pile_scripted_destroyed");
soundscripts\_snd::snd_message("log_pile_collapse",self);
var_00 = 1;
var_0A = common_scripts\utility::get_target_ent();
foreach(var_0C in getaiarray("axis"))
{
var_0C kill();
var_0C startragdoll();
}
physicsexplosionsphere(self.origin,200,199,50);
wakeupphysicssphere(self.origin,900);
}
self delete();
}
//Function Number: 81
destructible_trailer_collision_think()
{
self setcandamage(1);
thread destructible_trailer_collision_destroy_when_player_close();
var_00 = 0;
for(;;)
{
self waittill("damage",var_01,var_02,var_03,var_04,var_05,var_06,var_07,var_08,var_09);
if(var_05 == "MOD_RIFLE_BULLET" || var_05 == "MOD_ENERGY" || var_01 < 10)
{
continue;
}
else
{
break;
}
}
wakeupphysicssphere(var_04,80);
physicsexplosionsphere(var_04,80,79,10);
soundscripts\_snd::snd_message("tank_shack_destruct",var_04);
self delete();
}
//Function Number: 82
destructible_trailer_collision_destroy_when_player_close()
{
self endon("death");
var_00 = 200;
var_01 = var_00 * var_00;
var_02 = spawn("trigger_radius",self.origin + (0,0,-100),0,250,300);
var_02 waittill("trigger",var_03);
self notify("damage",50,var_03,var_03.origin - self.origin,self.origin,"MOD_EXPLOSIVE");
earthquake(0.25,0.25,var_03.origin,300);
var_03 playrumbleonentity("damage_heavy");
}
//Function Number: 83
large_propane_tank_think()
{
var_00 = self.origin;
self waittill("death");
physicsexplosionsphere(var_00,900,850,60);
wakeupphysicssphere(var_00,900);
}
//Function Number: 84
hovertank_enemy_outline(param_00)
{
self endon("death");
if(!isdefined(param_00))
{
param_00 = 4;
}
thread clear_enemy_outline_on_death();
self.highlight = 0;
self.highlight_forced = 0;
thread manage_highlight(param_00);
thread highlight_when_weapon_fired(param_00);
var_01 = (0,0,32);
if(isai(self))
{
hovertank_enemy_outline_ai();
return;
}
hovertank_enemy_outline_vehicle();
}
//Function Number: 85
hovertank_enemy_outline_ai()
{
self endon("death");
while(!target_istarget(self))
{
wait(0.05);
}
for(;;)
{
if(target_isincircle(self,level.hovertank_player,75,60))
{
self.highlight = 1;
self notify("highlight_change");
}
else
{
self.highlight = 0;
self notify("highlight_change");
}
wait(0.05);
}
}
//Function Number: 86
hovertank_enemy_outline_offset()
{
var_00 = (0,0,0);
switch(self.classname)
{
case "script_vehicle_xh9_warbird_low_heavy_turret":
case "script_vehicle_vrap_physics":
case "script_vehicle_ft101_tank_physics":
var_00 = (0,0,64);
break;
case "script_vehicle_littlebird_atlas_bench":
var_00 = (0,0,-64);
break;
default:
break;
}
return var_00;
}
//Function Number: 87
hovertank_enemy_outline_vehicle()
{
var_00 = hovertank_enemy_outline_offset();
for(;;)
{
if(level.player worldpointinreticle_circle(self.origin + var_00,75,60))
{
self.highlight = 1;
self notify("highlight_change");
}
else
{
self.highlight = 0;
self notify("highlight_change");
}
wait(0.05);
}
}
//Function Number: 88
hovertank_setup_hint_data()
{
var_00 = gettime();
var_01 = spawnstruct();
level.player.hovertank_weapon_hint_data = var_01;
var_01.kill_counts = [];
var_01.kill_goals = [];
var_01.last_hint_times_ms = [];
var_01.last_kill_times_ms = [];
var_01.minimum_in_sights_needed = [];
var_01.amount_in_sights = [];
var_01.in_sights_timestamp = [];
var_01.required_aiming_time_s = 2;
var_01.delay_from_any_hint_s = 5;
var_01.delay_from_same_hint_s = 15;
var_01.delay_from_kill_s = 30;
var_01.higher_priority_expiration_time_s = 2;
var_01.hint_duration_s = 5;
var_01.vehicle_sights_radius = 60;
var_01.kill_goals["emp"] = 2;
var_01.kill_goals["cannon"] = 2;
var_01.kill_goals["missile"] = 15;
var_01.minimum_in_sights_needed["missile"] = 4;
var_01.amount_in_sights["missile"] = 0;
var_01.in_sights_timestamp["missile"] = 0;
var_01.thread_delay_s = 0.1;
var_01.last_aim_type = "";
var_01.last_aim_priority = 0;
var_01.last_aim_time_ms = var_00;
var_01.current_target_aim_begin_time_ms = var_00;
var_01.last_hint_time_any_ms = var_00 - var_01.delay_from_any_hint_s * 1000;
var_02 = [];
var_02[var_02.size] = "missile";
var_02[var_02.size] = "cannon";
var_02[var_02.size] = "emp";
for(var_03 = 0;var_03 < var_02.size;var_03 = var_03 + 1)
{
var_04 = var_02[var_03];
var_01.kill_counts[var_04] = 0;
var_01.last_hint_times_ms[var_04] = var_00 - var_01.delay_from_same_hint_s * 1000;
var_01.last_kill_times_ms[var_04] = var_00 - var_01.delay_from_kill_s * 1000;
common_scripts\utility::flag_init("hint_proficient_" + var_04);
}
level maps\_utility::waittillthread("hovertank_end",::hovertank_destroy_hint_data);
}
//Function Number: 89
hovertank_destroy_hint_data()
{
level.player.hovertank_weapon_hint_data = undefined;
}
//Function Number: 90
hovertank_hint_enemy_kill_tracking(param_00)
{
level endon("hovertank_end");
level endon("hint_proficient_" + param_00);
if(common_scripts\utility::flag("hint_proficient_" + param_00))
{
return;
}
self waittill("death",var_01,var_02,var_03);
if(!isdefined(var_01) || var_01 != level.player)
{
return;
}
var_04 = 0;
if(!isdefined(var_03))
{
var_04 = 1;
}
else
{
switch(param_00)
{
case "cannon":
var_04 = issubstr(var_03,"cannon");
break;
case "emp":
var_04 = issubstr(var_03,"antiair");
break;
case "missile":
var_04 = issubstr(var_03,"missile");
break;
default:
var_04 = 0;
break;
}
}
hovertank_hint_stop(param_00);
if(var_04)
{
var_05 = level.player.hovertank_weapon_hint_data;
var_05.kill_counts[param_00] = var_05.kill_counts[param_00] + 1;
var_05.last_kill_times_ms[param_00] = gettime();
if(var_05.kill_counts[param_00] >= var_05.kill_goals[param_00])
{
common_scripts\utility::flag_set("hint_proficient_" + param_00);
}
}
}
//Function Number: 91
hovertank_aimed_enemy_vehicle_weapon_hint(param_00,param_01)
{
hovertank_aimed_enemy_weapon_hint(param_00,param_01,::hovertank_hint_vehicle_in_sights);
}
//Function Number: 92
hovertank_aimed_enemy_ai_weapon_hint(param_00,param_01)
{
hovertank_aimed_enemy_weapon_hint(param_00,param_01,::hovertank_hint_ai_in_sights);
}
//Function Number: 93
hovertank_aimed_enemy_weapon_hint(param_00,param_01,param_02)
{
self endon("death");
level endon("hovertank_end");
level endon("hint_proficient_" + param_01);
if(!isdefined(level.player.hovertank_weapon_hint_data))
{
return;
}
var_03 = level.player.hovertank_weapon_hint_data;
thread hovertank_hint_enemy_kill_tracking(param_01);
if(common_scripts\utility::flag("hint_proficient_" + param_01))
{
return;
}
for(;;)
{
var_04 = gettime();
var_05 = var_03.last_aim_priority > param_00;
var_06 = var_04 - var_03.last_aim_time_ms > var_03.higher_priority_expiration_time_s * 1000;
var_07 = param_01 == var_03.last_aim_type && var_04 - var_03.last_aim_time_ms <= var_03.thread_delay_s * 1000 && !isdefined(var_03.minimum_in_sights_needed[param_01]);
if(!var_07 && !var_05 || var_06 && [[ param_02 ]]())
{
var_03.last_aim_time_ms = var_04;
var_03.last_aim_priority = param_00;
var_08 = 1;
if(isdefined(var_03.minimum_in_sights_needed[param_01]))
{
if(var_04 - var_03.in_sights_timestamp[param_01] < var_03.thread_delay_s * 1000)
{
var_03.amount_in_sights[param_01] = var_03.amount_in_sights[param_01] + 1;
}
else
{
var_03.in_sights_timestamp[param_01] = var_04;
var_03.amount_in_sights[param_01] = 1;
}
var_08 = var_03.amount_in_sights[param_01] == var_03.minimum_in_sights_needed[param_01];
}
if(param_01 == var_03.last_aim_type)
{
if(var_08)
{
if(var_06)
{
var_03.current_target_aim_begin_time_ms = var_04;
}
var_09 = var_04 - var_03.current_target_aim_begin_time_ms > var_03.required_aiming_time_s * 1000;
var_0A = var_04 - var_03.last_kill_times_ms[param_01] < var_03.delay_from_kill_s * 1000;
var_0B = var_04 - var_03.last_hint_times_ms[param_01] < var_03.delay_from_same_hint_s * 1000 || var_04 - var_03.last_hint_time_any_ms < var_03.delay_from_any_hint_s * 1000;
if(var_09 && !var_0B && !var_0A)
{
hovertank_weapon_hint(param_01);
}
}
}
else
{
var_03.last_aim_type = param_01;
var_03.current_target_aim_begin_time_ms = var_04;
}
}
wait(var_03.thread_delay_s);
}
}
//Function Number: 94
hovertank_hint_vehicle_in_sights()
{
var_00 = hovertank_enemy_outline_offset();
if(!level.player worldpointinreticle_circle(self.origin + var_00,75,level.player.hovertank_weapon_hint_data.vehicle_sights_radius))
{
return 0;
}
var_01 = level.player geteye();
var_02 = sighttracepassed(self.origin + var_00,var_01,0,self,level.player);
return var_02;
}
//Function Number: 95
hovertank_hint_ai_in_sights()
{
return self.highlight;
}
//Function Number: 96
manage_highlight(param_00)
{
self endon("death");
self endon("end_highlight");
level endon("hovertank_end");
thread manage_highlight_end();
for(;;)
{
self waittill("highlight_change");
if(self.highlight || self.highlight_forced)
{
self hudoutlineenable(param_00,1);
continue;
}
if(!self.highlight_forced)
{
self hudoutlinedisable();
self hudoutlineenable(0,0);
}
}
}
//Function Number: 97
manage_highlight_end()
{
self endon("death");
self endon("hovertank_end");
self waittill("end_highlight");
turn_off_highlight();
}
//Function Number: 98
highlight_when_weapon_fired(param_00)
{
self endon("death");
level endon("hovertank_end");
var_01 = 3;
for(;;)
{
common_scripts\utility::waittill_any("shooting","weapon_fired");
thread force_highlight(param_00,var_01);
}
}
//Function Number: 99
force_highlight(param_00,param_01)
{
self endon("death");
level endon("hovertank_end");
self endon("end_highlight");
self notify("force_highlight");
self endon("force_highlight");
self.highlight_forced = 1;
wait(param_01);
self.highlight_forced = 0;
}
//Function Number: 100
turn_on_highlight(param_00,param_01)
{
if(isdefined(param_01))
{
self.highlight_forced = 1;
var_02 = 0;
var_03 = 0.05;
while(var_02 < param_01)
{
self hudoutlineenable(param_00,1);
self.highlight = 1;
var_02 = var_02 + var_03;
wait(var_03);
}
self hudoutlinedisable();
self hudoutlineenable(0,0);
self.highlight = 0;
self.highlight_forced = 0;
return;
}
if(!self.highlight)
{
self hudoutlineenable(param_00,1);
self.highlight = 1;
}
}
//Function Number: 101
turn_off_highlight()
{
if(self.highlight || self.highlight_forced)
{
self hudoutlinedisable();
self hudoutlineenable(0,0);
}
}
//Function Number: 102
clear_enemy_outline_on_death()
{
common_scripts\utility::waittill_any_ents(self,"death",level,"hovertank_end");
if(isdefined(self))
{
self hudoutlinedisable();
self hudoutlineenable(0,0);
}
}
//Function Number: 103
warbird_heavy_shooting_think(param_00)
{
level.player endon("death");
self endon("death");
self.mgturret[0] setmode("manual");
self.mgturret[1] setmode("manual");
if(!maps\_utility::ent_flag_exist("fire_turrets"))
{
maps\_utility::ent_flag_init("fire_turrets");
}
maps\_utility::ent_flag_set("fire_turrets");
thread warbird_heavy_fire_monitor();
for(;;)
{
self waittill("warbird_fire");
maps\_utility::ent_flag_set("fire_turrets");
thread warbird_heavy_fire(param_00);
self waittill("warbird_stop_firing");
maps\_utility::ent_flag_clear("fire_turrets");
}
}
//Function Number: 104
warbird_heavy_fire(param_00)
{
self endon("death");
var_01 = self.mgturret[0];
var_02 = self.mgturret[1];
var_01 notify("stop_burst_fire_unmanned");
var_02 notify("stop_burst_fire_unmanned");
var_03 = 0.4;
var_04 = var_03 / 2;
var_01 thread burst_fire_warbird(var_03,0);
var_02 thread burst_fire_warbird(var_03,var_04);
var_05 = common_scripts\utility::get_enemy_team(self.script_team);
while(maps\_utility::ent_flag("fire_turrets"))
{
var_06 = getaiarray(var_05);
if(isdefined(level.flying_attack_drones))
{
var_07 = level.flying_attack_drones;
}
else
{
var_07 = [];
}
if(isdefined(level.drones) && isdefined(level.drones[var_05].array))
{
var_06 = common_scripts\utility::array_combine(var_06,level.drones[var_05].array);
}
if(var_05 == level.player.team)
{
var_06 = common_scripts\utility::array_add(var_06,level.player);
}
var_06 = common_scripts\utility::array_combine(var_06,var_07);
var_08 = [];
foreach(var_0A in var_06)
{
if(isdefined(var_0A.ignoreme) && var_0A.ignoreme)
{
continue;
}
else
{
var_08[var_08.size] = var_0A;
}
}
var_08 = sortbydistance(var_08,self.origin);
var_0C = undefined;
foreach(var_0A in var_08)
{
if(!isdefined(var_0A))
{
continue;
}
if(!isalive(var_0A))
{
continue;
}
if(isdefined(param_00) && param_00)
{
var_0E = self.mgturret[0] gettagorigin("tag_flash");
var_0F = var_0A geteye();
var_10 = vectornormalize(var_0F - var_0E);
var_11 = var_0E + var_10 * 20;
if(!sighttracepassed(var_11,var_0F,0,var_0A,self.mgturret[0]))
{
continue;
}
}
var_0C = var_0A;
break;
}
if(isdefined(var_0C))
{
var_01 settargetentity(var_0C);
var_02 settargetentity(var_0C);
var_01 turretfireenable();
var_02 turretfireenable();
var_01 startfiring();
var_02 startfiring();
wait_for_warbird_fire_target_done(var_0C,param_00);
var_01 notify("stop_firing");
var_02 notify("stop_firing");
var_01 cleartargetentity();
var_02 cleartargetentity();
var_01 turretfiredisable();
var_02 turretfiredisable();
}
wait(0.05);
}
var_01 turretfiredisable();
var_02 turretfiredisable();
}
//Function Number: 105
warbird_heavy_fire_monitor()
{
self endon("death");
self waittill("warbird_stop_firing");
maps\_utility::ent_flag_clear("fire_turrets");
}
//Function Number: 106
burst_fire_warbird(param_00,param_01)
{
self endon("death");
self endon("stop_burst_fire_warbird");
var_02 = 1;
var_03 = 1;
var_04 = 1;
var_05 = 1;
var_06 = gettime();
var_07 = "start";
for(;;)
{
var_08 = var_06 - gettime() * 0.001;
if(self isfiringturret() && var_08 <= 0)
{
if(var_07 != "fire")
{
var_07 = "fire";
thread doshoottuned(param_00,param_01);
}
var_08 = var_04 + randomfloat(var_05);
thread turrettimer(var_08);
self waittill("turretstatechange");
var_08 = var_02 + randomfloat(var_03);
var_06 = gettime() + int(var_08 * 1000);
continue;
}
if(var_07 != "aim")
{
var_07 = "aim";
}
thread turrettimer(var_08);
self waittill("turretstatechange");
}
}
//Function Number: 107
doshoottuned(param_00,param_01)
{
self endon("death");
self endon("turretstatechange");
if(isdefined(param_01) && param_01 > 0)
{
wait(param_01);
}
for(;;)
{
self shootturret();
wait(param_00);
}
}
//Function Number: 108
turrettimer(param_00)
{
if(param_00 <= 0)
{
return;
}
self endon("turretstatechange");
wait(param_00);
if(isdefined(self))
{
self notify("turretstatechange");
}
}
//Function Number: 109
destroy_self_when_nuked()
{
self endon("death");
for(;;)
{
if(getdvar("debug_nuke") == "on")
{
self dodamage(self.health + 99999,(0,0,-500),level.player);
}
wait(0.05);
}
}
//Function Number: 110
delete_on_notify(param_00,param_01)
{
param_00 waittill(param_01);
self delete();
}
//Function Number: 111
trigger_spawn_and_set_flag_think()
{
var_00 = undefined;
if(isdefined(self.script_flag))
{
var_00 = self.script_flag;
if(!isdefined(level.flag[var_00]))
{
common_scripts\utility::flag_init(var_00);
}
}
self waittill("trigger",var_01);
if(isdefined(self.script_delay))
{
maps\_utility::script_delay();
}
if(isdefined(var_00))
{
common_scripts\utility::flag_set(var_00,var_01);
}
var_02 = getentarray(self.target,"targetname");
var_03 = [];
foreach(var_05 in var_02)
{
if(var_05.code_classname == "script_vehicle")
{
if((isdefined(var_05.script_moveoverride) && var_05.script_moveoverride == 1) || !isdefined(var_05.target))
{
var_03[var_03.size] = maps\_vehicle::vehicle_spawn(var_05);
}
else
{
var_03[var_03.size] = var_05 maps\_vehicle::spawn_vehicle_and_gopath();
}
continue;
}
var_05 thread maps\_spawner::trigger_spawner_spawns_guys();
}
if(var_03.size > 0)
{
thread tank_section_vehicles_spawned(var_03,var_00);
}
}
//Function Number: 112
trigger_set_and_clear_flag_think()
{
var_00 = undefined;
if(isdefined(self.script_flag))
{
var_00 = self.script_flag;
if(!isdefined(level.flag[var_00]))
{
common_scripts\utility::flag_init(var_00);
}
}
var_01 = undefined;
if(isdefined(self.script_flag_clear))
{
var_01 = self.script_flag_clear;
if(!isdefined(level.flag[var_01]))
{
common_scripts\utility::flag_init(var_01);
}
}
for(;;)
{
self waittill("trigger",var_02);
if(isdefined(self.script_delay))
{
maps\_utility::script_delay();
}
if(isdefined(var_00))
{
common_scripts\utility::flag_set(var_00,var_02);
}
if(isdefined(var_01))
{
common_scripts\utility::flag_clear(var_01);
}
wait(0.05);
}
}
//Function Number: 113
tank_section_vehicles_spawned(param_00,param_01)
{
soundscripts\_snd::snd_message("aud_tank_section_vehicles_spawned",param_00,param_01);
if(isdefined(param_01))
{
switch(param_01)
{
case "flag_tank_road_enemy_tank":
thread maps\lab_vo::tank_road_enemy_tank_dialogue(param_00[0]);
break;
case "flag_tank_field_warbird_and_littlebird":
var_02 = [];
foreach(var_04 in param_00)
{
if(!issubstr(var_04.classname,"vrap"))
{
var_02[var_02.size] = var_04;
}
}
thread maps\lab_vo::tank_field_choppers_dialogue(var_02);
break;
default:
break;
}
}
}
//Function Number: 114
right_swing_pressed()
{
var_00 = "BUTTON_RTRIG";
if(!level.console && !level.player common_scripts\utility::is_player_gamepad_enabled())
{
return level.player adsbuttonpressed(1);
}
return level.player buttonpressed(var_00);
}
//Function Number: 115
left_swing_pressed()
{
var_00 = "BUTTON_LTRIG";
if(!level.console && !level.player common_scripts\utility::is_player_gamepad_enabled())
{
return level.player attackbuttonpressed();
}
return level.player buttonpressed(var_00);
}
//Function Number: 116
break_left_climb_hint()
{
if(common_scripts\utility::flag("flag_cloak_fail_kill_player"))
{
return 1;
}
if(isdefined(level.player.waiting_on_left_swing) && level.player.waiting_on_left_swing == 0)
{
return 1;
}
return 0;
}
//Function Number: 117
break_right_climb_hint()
{
if(common_scripts\utility::flag("flag_cloak_fail_kill_player"))
{
return 1;
}
if(isdefined(level.player.waiting_on_right_swing) && level.player.waiting_on_right_swing == 0)
{
return 1;
}
return 0;
}
//Function Number: 118
break_both_climb_hint()
{
if(isdefined(level.player.waiting_on_left_swing) && level.player.waiting_on_left_swing == 0 && isdefined(level.player.waiting_on_right_swing) && level.player.waiting_on_right_swing == 0)
{
return 1;
}
return 0;
}
//Function Number: 119
get_rt_button_info()
{
if(!level.player usinggamepad())
{
return "ads";
}
var_00 = getbuttonsconfig();
if(issubstr(getbuttonsconfig(),"lefty"))
{
if(level.ps3 || issubstr(var_00,"alt"))
{
return "smoke";
}
return "ads";
}
if(issubstr(var_00,"nomad"))
{
if(level.ps3 || issubstr(var_00,"alt"))
{
return "ads";
}
return "rt";
}
if(level.ps3 || issubstr(var_00,"alt"))
{
return "rb";
}
return "rt";
}
//Function Number: 120
get_lt_button_info()
{
var_00 = getbuttonsconfig();
if(!level.player usinggamepad())
{
return "attack";
}
if(issubstr(var_00,"lefty"))
{
if(level.ps3 || issubstr(var_00,"alt"))
{
return "frag";
}
return "attack";
}
if(issubstr(var_00,"nomad"))
{
if(level.ps3 || issubstr(var_00,"alt"))
{
return "lb";
}
return "frag";
}
if(level.ps3 || issubstr(var_00,"alt"))
{
return "lb";
}
return "lt";
}
//Function Number: 121
wait_until_right_swing_pressed(param_00)
{
level.player.waiting_on_right_swing = 1;
var_01 = maps\_shg_utility::hint_button_position(get_rt_button_info(),param_00,0);
for(;;)
{
if(right_swing_pressed())
{
level.player.waiting_on_right_swing = 0;
var_01 maps\_shg_utility::hint_button_clear();
return;
}
wait(0.05);
}
}
//Function Number: 122
wait_until_left_swing_pressed(param_00)
{
level.player.waiting_on_left_swing = 1;
var_01 = maps\_shg_utility::hint_button_position(get_lt_button_info(),param_00,0);
for(;;)
{
if(left_swing_pressed())
{
level.player.waiting_on_left_swing = 0;
var_01 maps\_shg_utility::hint_button_clear();
return;
}
wait(0.05);
}
}
//Function Number: 123
wait_until_next_right_swing(param_00)
{
level.player.waiting_on_right_swing = 1;
var_01 = maps\_shg_utility::hint_button_position(get_rt_button_info(),param_00,0);
for(;;)
{
if(isdefined(level.player.right_swing_released) && level.player.right_swing_released == 1 && right_swing_pressed())
{
level.player.waiting_on_right_swing = 0;
var_01 maps\_shg_utility::hint_button_clear();
return;
}
wait(0.05);
}
}
//Function Number: 124
wait_until_next_left_swing(param_00)
{
level.player.waiting_on_left_swing = 1;
var_01 = maps\_shg_utility::hint_button_position(get_lt_button_info(),param_00,0);
for(;;)
{
if(isdefined(level.player.left_swing_released) && level.player.left_swing_released == 1 && left_swing_pressed())
{
level.player.waiting_on_left_swing = 0;
var_01 maps\_shg_utility::hint_button_clear();
return;
}
wait(0.05);
}
}
//Function Number: 125
monitor_right_swing_released()
{
level.player.right_swing_released = 0;
for(;;)
{
if(!right_swing_pressed())
{
level.player.right_swing_released = 1;
return;
}
wait(0.05);
}
}
//Function Number: 126
monitor_left_swing_released()
{
level.player.left_swing_released = 0;
for(;;)
{
if(!left_swing_pressed())
{
level.player.left_swing_released = 1;
return;
}
wait(0.05);
}
}
//Function Number: 127
wait_until_both_swings_pressed()
{
level.player.waiting_on_left_swing = 1;
level.player.waiting_on_right_swing = 1;
maps\_utility::hintdisplayhandler("both_climb_hint");
level.current_hint.font = "buttonprompt";
for(;;)
{
if(left_swing_pressed() && right_swing_pressed())
{
level.player.waiting_on_left_swing = 0;
level.player.waiting_on_right_swing = 0;
return;
}
wait(0.05);
}
}
//Function Number: 128
set_helmet_open(param_00)
{
if(!isdefined(param_00))
{
param_00 = 0.5;
}
self setanimknobrestart(%sentinel_covert_helmet_open_idle,1,param_00);
}
//Function Number: 129
set_helmet_closed(param_00)
{
if(!isdefined(param_00))
{
param_00 = 0.5;
}
self setanimknobrestart(%sentinel_covert_helmet_closed_idle,1,param_00);
}
//Function Number: 130
clear_additive_helmet_anim(param_00)
{
if(!isdefined(param_00))
{
param_00 = 0.5;
}
self clearanim(%s1_helmet,0);
}
//Function Number: 131
prep_cinematic(param_00)
{
setsaveddvar("cg_cinematicFullScreen","0");
cinematicingame(param_00,1);
level.current_cinematic = param_00;
}
//Function Number: 132
play_cinematic(param_00,param_01,param_02)
{
if(!isdefined(param_01))
{
soundscripts\_audio::deprecated_aud_send_msg("begin_cinematic",param_00);
}
if(isdefined(level.current_cinematic))
{
pausecinematicingame(0);
setsaveddvar("cg_cinematicFullScreen","1");
level.current_cinematic = undefined;
}
else
{
cinematicingame(param_00);
}
if(!isdefined(param_02) || !param_02)
{
setsaveddvar("cg_cinematicCanPause","1");
}
wait(1);
while(iscinematicplaying())
{
wait(0.05);
}
if(!isdefined(param_02) || !param_02)
{
setsaveddvar("cg_cinematicCanPause","0");
}
if(!isdefined(param_01))
{
soundscripts\_audio::deprecated_aud_send_msg("end_cinematic",param_00);
}
}
//Function Number: 133
ending_fade_out(param_00)
{
var_01 = newhudelem();
var_01.x = 0;
var_01.y = 0;
var_01.horzalign = "fullscreen";
var_01.vertalign = "fullscreen";
var_01.sort = -10;
var_01 setshader("black",640,480);
if(isdefined(param_00) && param_00 > 0)
{
var_01.alpha = 0;
var_01 fadeovertime(param_00);
var_01.alpha = 1;
wait(param_00);
}
waittillframeend;
}
//Function Number: 134
destructible_boxtruck_think()
{
self setcandamage(1);
self.health = 500;
while(self.health > 0)
{
self waittill("damage",var_00,var_01);
if(var_01 != level.player)
{
self.health = self.health + var_00;
}
}
self setmodel("vehicle_civ_boxtruck_destroyed");
soundscripts\_snd::snd_message("boxtruck_explode");
playfx(common_scripts\utility::getfx("boxcar_explosion"),self.origin);
}
//Function Number: 135
hovertank_weapon_hint(param_00)
{
var_01 = undefined;
var_02 = "";
switch(param_00)
{
case "missile":
var_01 = ::hovertank_missile_hint_off;
var_02 = "hovertank_missile_hint";
break;
case "cannon":
var_01 = ::hovertank_cannon_hint_off;
var_02 = "hovertank_cannon_hint";
break;
case "emp":
var_01 = ::hovertank_emp_hint_off;
var_02 = "hovertank_emp_hint";
break;
default:
break;
}
if([[ var_01 ]]())
{
return;
}
var_03 = gettime();
maps\_utility::hintdisplayhandler(var_02,level.player.hovertank_weapon_hint_data.hint_duration_s);
level.player.hovertank_weapon_hint_data.last_hint_times_ms[param_00] = var_03;
level.player.hovertank_weapon_hint_data.last_hint_time_any_ms = var_03;
}
//Function Number: 136
hovertank_hint_stop(param_00)
{
common_scripts\utility::flag_set("flag_stop_hint_" + param_00);
thread hovertank_hint_reset_flag(param_00);
}
//Function Number: 137
hovertank_hint_reset_flag(param_00)
{
wait(0.5);
common_scripts\utility::flag_clear("flag_stop_hint_" + param_00);
}
//Function Number: 138
hovertank_missile_hint_off()
{
var_00 = common_scripts\utility::flag("flag_stop_hint_missile");
return issubstr(vehicle_scripts\_hovertank::get_current_weapon_name(),"missile") || common_scripts\utility::flag("flag_se_hovertank_exit") || var_00;
}
//Function Number: 139
hovertank_cannon_hint_off()
{
var_00 = common_scripts\utility::flag("flag_stop_hint_cannon");
return issubstr(vehicle_scripts\_hovertank::get_current_weapon_name(),"cannon") || common_scripts\utility::flag("flag_se_hovertank_exit") || var_00;
}
//Function Number: 140
hovertank_emp_hint_off()
{
var_00 = common_scripts\utility::flag("flag_stop_hint_emp");
return issubstr(vehicle_scripts\_hovertank::get_current_weapon_name(),"antiair") || common_scripts\utility::flag("flag_se_hovertank_exit") || var_00;
}
//Function Number: 141
ai_kill_when_out_of_sight(param_00,param_01)
{
param_00 endon("death");
var_02 = 0.75;
for(;;)
{
wait(1);
if(maps\_utility::players_within_distance(param_01,param_00.origin))
{
continue;
}
if(maps\_utility::either_player_looking_at(param_00.origin + (0,0,48),var_02,1))
{
continue;
}
param_00 kill();
}
}
//Function Number: 142
detection_highlight_hud_effect(param_00,param_01,param_02)
{
var_03 = newhudelem();
if(isdefined(param_02) && param_02)
{
var_03.color = (0.1,0,0);
}
else
{
var_03.color = (1,0,0);
}
var_03.alpha = 0.05;
var_03 setradarhighlight(param_01);
wait(param_01);
if(isdefined(var_03))
{
var_03 destroy();
}
}
//Function Number: 143
notify_on_flag(param_00,param_01)
{
common_scripts\utility::flag_wait(param_00);
self notify(param_01);
}
//Function Number: 144
disable_grenades()
{
if(isdefined(self.grenadeammo) && !isdefined(self.oldgrenadeammo))
{
self.oldgrenadeammo = self.grenadeammo;
}
self.grenadeammo = 0;
}
//Function Number: 145
enable_grenades()
{
if(isdefined(self.oldgrenadeammo))
{
self.grenadeammo = self.oldgrenadeammo;
self.oldgrenadeammo = undefined;
}
}
//Function Number: 146
equip_microwave_grenade()
{
self.grenadeweapon = "microwave_grenade";
self.grenadeammo = 2;
}
//Function Number: 147
random_move_rate_blend()
{
self endon("death");
var_00 = randomfloatrange(0.5,1);
var_01 = randomfloatrange(0,3);
var_02 = 0;
while(var_02 <= var_01)
{
var_03 = maps\_utility::linear_interpolate(var_02 / var_01,var_00,1);
self.moveplaybackrate = var_03;
var_02 = var_02 + 0.05;
wait(0.05);
}
}
//Function Number: 148
monitor_out_of_bounds_areas(param_00)
{
if(!isdefined(param_00))
{
param_00 = 0;
}
level.player_out_of_bounds_warning = 0;
thread maps\lab_vo::player_out_of_bounds_warning_vo();
var_01 = 0.1;
var_02 = getentarray("out_of_bounds_warning","targetname");
var_03 = getentarray("out_of_bounds_mission_fail","targetname");
if(param_00)
{
thread debug_out_of_bounds_areas();
}
for(;;)
{
level.player_out_of_bounds_warning = 0;
foreach(var_05 in var_02)
{
if(level.player istouching(var_05))
{
level.player_out_of_bounds_warning = 1;
}
if(param_00)
{
common_scripts\utility::draw_trigger(var_05,var_01,(1,0.5,0));
}
}
level.player_out_of_bounds_mission_fail = 0;
foreach(var_05 in var_03)
{
if(level.player istouching(var_05))
{
level.player_out_of_bounds_mission_fail = 1;
setdvar("ui_deadquote",&"LAB_DEADQUOTE_ABANDONED_BURKE");
level.player freezecontrols(1);
thread maps\_utility::missionfailedwrapper();
}
if(param_00)
{
common_scripts\utility::draw_trigger(var_05,var_01,(1,0,0));
}
}
wait(var_01);
}
}
//Function Number: 149
debug_out_of_bounds_areas()
{
var_00 = newhudelem();
var_00.x = 250;
var_00.y = 200;
var_00.alignx = "left";
var_00.aligny = "top";
var_00.horzalign = "fullscreen";
var_00.vertalign = "fullscreen";
var_00.fontscale = 2;
var_00 settext("");
var_01 = 0.1;
for(;;)
{
if(isdefined(level.player_out_of_bounds_mission_fail) && level.player_out_of_bounds_mission_fail)
{
var_00 settext("Mission failed.");
}
else if(isdefined(level.player_out_of_bounds_warning) && level.player_out_of_bounds_warning)
{
var_00 settext("Warning! You are out of bounds!");
}
else
{
var_00 settext("");
}
wait(var_01);
}
}
//Function Number: 150
flag_wait_any_or_timeout(param_00,param_01,param_02,param_03,param_04,param_05)
{
var_06 = param_00 * 1000;
var_07 = gettime();
var_08 = [];
if(isdefined(param_01))
{
var_08[var_08.size] = param_01;
}
if(isdefined(param_02))
{
var_08[var_08.size] = param_02;
}
if(isdefined(param_03))
{
var_08[var_08.size] = param_03;
}
if(isdefined(param_04))
{
var_08[var_08.size] = param_04;
}
if(isdefined(param_05))
{
var_08[var_08.size] = param_05;
}
for(;;)
{
foreach(var_0A in var_08)
{
if(common_scripts\utility::flag_exist(var_0A) && common_scripts\utility::flag(var_0A))
{
break;
}
}
if(gettime() >= var_07 + var_06)
{
break;
}
wait 0.05;
}
}
//Function Number: 151
player_stance_monitor()
{
var_00 = 0;
var_01 = "";
var_02 = "";
var_03 = 0;
for(;;)
{
var_02 = level.player getstance();
if(var_02 == "prone" && var_02 != var_01)
{
var_01 = var_02;
iprintln("player prone");
var_00 = var_00 + 15;
}
if(var_02 == "crouch" && var_02 != var_01)
{
var_01 = var_02;
iprintln("player crouch");
var_00 = var_00 + 30;
}
if(var_02 == "stand" && var_02 != var_01)
{
var_01 = var_02;
iprintln("player stand");
var_00 = var_00 + 40;
}
while(level.player isjumping())
{
if(!var_03)
{
iprintln("player jumping");
var_00 = var_00 + 75;
}
var_03 = 1;
wait(0.05);
}
var_03 = 0;
wait(0.05);
}
}
//Function Number: 152
player_exo_monitor()
{
if(isdefined(level.start_point))
{
switch(level.start_point)
{
case "tank_ascent":
case "tank_field_right_fork":
case "tank_field_left_fork":
case "tank_field":
case "tank_road":
break;
default:
break;
}
}
common_scripts\utility::flag_wait("flag_player_exo_enabled");
maps\_player_exo::player_exo_activate();
}
//Function Number: 153
player_falling_to_death()
{
level endon("flag_rappel_start");
common_scripts\utility::flag_wait("player_falling_to_death");
setdvar("ui_deadquote","");
level.player takeallweapons();
var_00 = gettime() + 1000;
while(!level.player isonground() && gettime() < var_00)
{
wait(0.05);
}
if(level.player isonground())
{
level.player kill();
return;
}
maps\_utility::missionfailedwrapper();
}
//Function Number: 154
magic_bullet_strafe(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07,param_08,param_09)
{
var_0A = 0;
var_0B = param_02 - param_00;
var_0C = param_03 - param_01;
var_0D = 0;
var_0E = 1 / param_05;
var_0F = param_05 / param_04;
var_10 = 0;
for(var_11 = param_07;var_0D < param_04;var_11 = min(var_18 + param_07,param_05 - var_0A))
{
if(var_10 != var_11)
{
var_12 = randomfloatrange(var_10,var_11);
}
else
{
var_12 = var_10;
}
if(var_12 > 0)
{
wait(var_12);
var_0A = var_0A + var_12;
}
var_13 = param_01 + var_0C * var_0E * var_0A;
var_14 = param_00 + var_0B * var_0D / param_04 - 1;
if(param_06 > 0)
{
var_15 = randomfloat(param_06);
var_16 = (0,randomfloat(360),0);
var_14 = var_14 + anglestoforward(var_16) * var_15;
}
if(isdefined(param_09))
{
magicbullet(param_08,var_13,var_14,param_09);
}
else
{
var_17 = magicbullet(param_08,var_13,var_14);
var_17 soundscripts\_snd::snd_message("lab_exfil_missile_strike");
}
var_0D++;
var_18 = var_0D * var_0F - var_0A;
var_10 = max(0,var_18 - param_07);
}
}
//Function Number: 155
named_magic_bullet_strafe(param_00,param_01,param_02,param_03,param_04,param_05,param_06)
{
var_07 = maps\_utility::getent_or_struct(param_00 + "_source_start","targetname");
var_08 = maps\_utility::getent_or_struct(param_00 + "_source_end","targetname");
var_09 = maps\_utility::getent_or_struct(param_00 + "_target_start","targetname");
var_0A = maps\_utility::getent_or_struct(param_00 + "_target_end","targetname");
if(!isdefined(var_07) || !isdefined(var_08) || !isdefined(var_09) || !isdefined(var_0A))
{
return;
}
magic_bullet_strafe(var_09.origin,var_07.origin,var_0A.origin,var_08.origin,param_01,param_02,param_03,param_04,param_05,param_06);
}
//Function Number: 156
rumble_light()
{
level.player playrumbleonentity("damage_light");
}
//Function Number: 157
rumble_light_1()
{
level.player playrumbleonentity("light_1s");
}
//Function Number: 158
rumble_light_2()
{
level.player playrumbleonentity("light_2s");
}
//Function Number: 159
rumble_light_3()
{
level.player playrumbleonentity("light_3s");
}
//Function Number: 160
rumble_heavy()
{
level.player playrumbleonentity("damage_heavy");
}
//Function Number: 161
rumble_heavy_1()
{
level.player playrumbleonentity("heavy_1s");
}
//Function Number: 162
rumble_heavy_2()
{
level.player playrumbleonentity("heavy_2s");
}
//Function Number: 163
rumble_heavy_3()
{
level.player playrumbleonentity("heavy_3s");
}
//Function Number: 164
setup_level_rumble_ent()
{
if(!isdefined(level.rumble_ent))
{
level.rumble_ent = maps\_utility::get_rumble_ent("steady_rumble",0);
}
level.rumble_ent.intensity = 0;
}
//Function Number: 165
rumble_set_ent_rumble_intensity_for_time(param_00,param_01,param_02)
{
param_00.intensity = param_01;
wait(param_02);
param_00.intensity = 0;
}
//Function Number: 166
play_rumble_on_entity(param_00,param_01)
{
param_00 playrumbleonentity(param_01);
}