/******************************************************************* * Decompiled By: Bog * Decompiled File: captured_mech_code.gsc * Game: Call of Duty: Advanced Warfare * Platform: PC * Function Count: 48 * Decompile Time: 698 ms * Timestamp: 4/22/2024 2:26:27 AM *******************************************************************/ //Function Number: 1 pre_load() { common_scripts\utility::flag_init("hint_mash_button"); maps\_utility::add_hint_string("hint_mash_button",&"CAPTURED_HINT_TAP",::hint_mash_button); common_scripts\utility::flag_init("hint_push_forward"); maps\_utility::add_hint_string("hint_push_forward","Press Forward on Left Thumbstick to Push",::hint_push_forward); common_scripts\utility::flag_init("hint_pull_back"); maps\_utility::add_hint_string("hint_pull_back","Press down on Left Thumbstick to Pull",::hint_pull_back); common_scripts\utility::flag_init("flag_mech_smash_active"); mech_player_anims(); mech_generic_human(); mech_script_model_anims(); mech_vehicle_anims(); mech_fx(); } //Function Number: 2 init_mech_actions() { level.allow_threat_paint = 1; setsaveddvar("mechAcceleration",0.6); setsaveddvar("mechAirAcceleration",0.6); if(!isdefined(self.mech_init)) { self.mech_init = 1; level.player thread maps\captured_util::waittill_notify_func("playermech_start",::soundscripts\_snd::snd_message,"aud_plr_inside_mech"); setup_smash_nodes(); common_scripts\utility::array_thread(getentarray("trig_mb_destructible","script_noteworthy"),::mech_action_smash); common_scripts\utility::array_thread(common_scripts\utility::getstructarray("brush_mb1_crane","targetname"),::mech_action_shoot); level.player thread mech_crush(); maps\_playermech_code::playermech_disable_badplace(); level.mech_swarm_number_of_rockets_per_target = 8; } } //Function Number: 3 hint_mash_button() { return !common_scripts\utility::flag("hint_mash_button"); } //Function Number: 4 hint_push_forward() { return !common_scripts\utility::flag("hint_push_forward"); } //Function Number: 5 hint_pull_back() { return !common_scripts\utility::flag("hint_pull_back"); } //Function Number: 6 mech_player_anims() { } //Function Number: 7 mech_generic_human() { level.scr_animtree["mech_player_rig"] = #animtree; level.scr_model["mech_player_rig"] = "worldhands_playermech"; level.scr_anim["mech_player_rig"]["mech_run_through"] = %cap_playermech_run_through_mech_short; level.scr_anim["generic"]["explode_death"] = %death_explosion_run_f_v2; level.scr_anim["mech_player_rig"]["anim_mb1_intro_exit"] = %cap_s1_escape_mech_control_release_mech; level.scr_anim["mech_player_rig"]["anim_mb1_introwall_smash"] = %cap_s1_escape_mech_jump_out_mech; level.scr_animtree["mb1_introwall_guard"] = #animtree; level.scr_anim["mb1_introwall_guard1"]["anim_mb1_introwall_smash"] = %cap_s1_escape_mech_guard_01; level.scr_anim["mb1_introwall_guard2"]["anim_mb1_introwall_smash"] = %cap_s1_escape_mech_guard_02; level.scr_anim["mb1_introwall_guard3"]["anim_mb1_introwall_smash"] = %cap_s1_escape_mech_guard_03; level.scr_anim["mb1_introwall_guard4"]["anim_mb1_introwall_smash"] = %cap_s1_escape_mech_guard_04; level.scr_anim["mb1_introwall_guard5"]["anim_mb1_introwall_smash"] = %cap_s1_escape_mech_guard_05; level.scr_anim["mb1_introwall_guard6"]["anim_mb1_introwall_smash"] = %cap_s1_escape_mech_guard_06; level.scr_anim["mb1_introwall_guard7"]["anim_mb1_introwall_smash"] = %cap_s1_escape_mech_guard_07; level.scr_anim["mb1_introwall_guard8"]["anim_mb1_introwall_smash"] = %cap_s1_escape_mech_guard_08; level.scr_anim["mb1_introwall_guard9"]["anim_mb1_introwall_smash"] = %cap_s1_escape_mech_guard_09; level.scr_anim["mb1_introwall_guard10"]["anim_mb1_introwall_smash"] = %cap_s1_escape_mech_guard_10; level.scr_anim["mb1_introwall_guard11"]["anim_mb1_introwall_smash"] = %cap_s1_escape_mech_guard_11; level.scr_anim["mb1_introwall_guard12"]["anim_mb1_introwall_smash"] = %cap_s1_escape_mech_guard_12; level.scr_anim["mb1_introwall_guard13"]["anim_mb1_introwall_smash"] = %cap_s1_escape_mech_guard_13; level.scr_anim["mb1_introwall_guard14"]["anim_mb1_introwall_smash"] = %cap_s1_escape_mech_guard_14; level.scr_anim["mb1_introwall_guard15"]["anim_mb1_introwall_smash"] = %cap_s1_escape_mech_guard_15; level.scr_anim["mech_player_rig"]["anim_exit_gatelift_intro"] = %cap_s1_escape_mech_door_lift_intro_mech; level.scr_anim["mech_player_rig"]["anim_exit_gatelift_intro_idle"][0] = %cap_s1_escape_mech_door_lift_idle_mech; level.scr_anim["mech_player_rig"]["anim_exit_gatelift_1"] = %cap_s1_escape_mech_door_lift_01_mech; level.scr_anim["mech_player_rig"]["anim_exit_gatelift_2"] = %cap_s1_escape_mech_door_lift_02_mech; level.scr_anim["mech_player_rig"]["anim_exit_gatelift_3"] = %cap_s1_escape_mech_door_lift_03_mech; level.scr_anim["mech_player_rig"]["anim_exit_gatelift_4"] = %cap_s1_escape_mech_door_lift_04_mech; level.scr_anim["mech_player_rig"]["anim_exit_gatelift_5"] = %cap_s1_escape_mech_door_lift_05_mech; level.scr_anim["mech_player_rig"]["anim_exit_gatelift_6"] = %cap_s1_escape_mech_door_lift_06_mech; level.scr_anim["mech_player_rig"]["anim_exit_gatelift_7"] = %cap_s1_escape_mech_door_lift_07_mech; level.scr_anim["mech_player_rig"]["anim_exit_gatelift_1_rev"] = %cap_s1_escape_mech_door_lift_01_rev_mech; level.scr_anim["mech_player_rig"]["anim_exit_gatelift_2_rev"] = %cap_s1_escape_mech_door_lift_02_rev_mech; level.scr_anim["mech_player_rig"]["anim_exit_gatelift_3_rev"] = %cap_s1_escape_mech_door_lift_03_rev_mech; level.scr_anim["mech_player_rig"]["anim_exit_gatelift_4_rev"] = %cap_s1_escape_mech_door_lift_04_rev_mech; level.scr_anim["mech_player_rig"]["anim_exit_gatelift_5_rev"] = %cap_s1_escape_mech_door_lift_05_rev_mech; level.scr_anim["mech_player_rig"]["anim_exit_gatelift_6_rev"] = %cap_s1_escape_mech_door_lift_06_rev_mech; level.scr_anim["mech_player_rig"]["anim_exit_gatelift_7_rev"] = %cap_s1_escape_mech_door_lift_07_rev_mech; level.scr_anim["mech_player_rig"]["anim_exit_gatelift_exit"] = %cap_s1_escape_mech_door_lift_exit_mech; maps\_anim::addnotetrack_customfunction("mech_player_rig","fire_rocket_0",::notify_fire_rocket_0,"anim_exit_gatelift_exit"); maps\_anim::addnotetrack_customfunction("mech_player_rig","fire_rocket_1",::notify_fire_rocket_1,"anim_exit_gatelift_exit"); maps\_anim::addnotetrack_customfunction("mech_player_rig","fire_rocket",::notify_fire_rocket_2,"anim_exit_gatelift_exit"); maps\_anim::addnotetrack_customfunction("mech_player_rig","fire_rocket_2",::notify_fire_rocket_3,"anim_exit_gatelift_exit"); maps\_anim::addnotetrack_customfunction("mech_player_rig","fire_rocket_3",::notify_fire_rocket_4,"anim_exit_gatelift_exit"); maps\_anim::addnotetrack_customfunction("mech_player_rig","fire_rocket_4",::notify_fire_rocket_5,"anim_exit_gatelift_exit"); maps\_anim::addnotetrack_customfunction("mech_player_rig","fire_rocket_5",::notify_fire_rocket_6,"anim_exit_gatelift_exit"); maps\_anim::addnotetrack_customfunction("mech_player_rig","fx_mech_foot_sparks",::maps\captured_fx::fx_mech_foot_sparks); maps\_anim::addnotetrack_customfunction("mech_player_rig","fx_mech_exit_steam",::maps\captured_fx::fx_mech_exit_steam); maps\_anim::addnotetrack_customfunction("mech_player_rig","fx_mech_land_sparks",::maps\captured_fx::fx_mech_land_sparks); maps\_anim::addnotetrack_customfunction("mech_player_rig","fx_mech_soft_land_dust",::maps\captured_fx::fx_mech_soft_land_dust); maps\_anim::addnotetrack_customfunction("mech_player_rig","mech_swap",::notify_mech_swap,"anim_exit_gatelift_exit"); maps\_anim::addnotetrack_customfunction("mech_player_rig","snd_end_01",::maps\captured_aud::snd_end_01,"anim_exit_gatelift_exit"); level.scr_anim["ally_0"]["anim_exit_takedown_exit"] = %cap_s1_escape_mech_tank_takedown_gideon; level.scr_anim["tank_driver"]["anim_exit_takedown_intro"] = %cap_s1_escape_mech_tank_takedown_intro_opfor; level.scr_anim["tank_driver"]["anim_exit_takedown_idle"][0] = %cap_s1_escape_mech_tank_takedown_loop_opfor; level.scr_anim["tank_driver"]["anim_exit_takedown_exit"] = %cap_s1_escape_mech_tank_takedown_opfor; level.scr_anim["mech_player_rig"]["anim_exit_takedown_exit"] = %cap_s1_escape_mech_tank_takedown_mech; } //Function Number: 8 notify_fire_rocket_0(param_00) { level.player notify("notify_fire_rocket_0"); } //Function Number: 9 notify_fire_rocket_1(param_00) { level.player notify("notify_fire_rocket_1"); } //Function Number: 10 notify_fire_rocket_2(param_00) { level.player notify("notify_fire_rocket_2"); } //Function Number: 11 notify_fire_rocket_3(param_00) { level.player notify("notify_fire_rocket_3"); } //Function Number: 12 notify_fire_rocket_4(param_00) { level.player notify("notify_fire_rocket_4"); } //Function Number: 13 notify_fire_rocket_5(param_00) { level.player notify("notify_fire_rocket_5"); } //Function Number: 14 notify_fire_rocket_6(param_00) { level.player notify("notify_fire_rocket_6"); } //Function Number: 15 notify_mech_swap(param_00) { level.player notify("mech_swap"); } //Function Number: 16 mech_script_model_anims() { level.scr_animtree["mb_wall_1"] = #animtree; level.scr_anim["mb_wall_1"]["mech_run_through"] = %cap_playermech_run_through_prop_short; level.scr_model["mb_wall_1"] = "cap_playermech_breakable_wall"; level.scr_animtree["mb1_introwall"] = #animtree; level.scr_anim["mb1_introwall"]["anim_mb1_introwall_smash"] = %cap_s1_escape_mech_jump_out_wall; level.scr_animtree["exit_gate_lock"] = #animtree; level.scr_model["exit_gate_lock"] = "cap_s1_exit_gate_lock"; level.scr_anim["exit_gate_lock"]["anim_exit_gateclose"] = %cap_s1_escape_mech_gate_close_lock; level.scr_anim["exit_gate_lock"]["anim_exit_gatelift_intro"] = %cap_s1_escape_mech_door_lift_intro_lock; level.scr_animtree["exit_gate_inner"] = #animtree; level.scr_anim["exit_gate_inner"]["anim_exit_gateclose"] = %cap_s1_escape_mech_gate_close_door; level.scr_anim["exit_gate_inner"]["anim_exit_gatelift_intro"] = %cap_s1_escape_mech_door_lift_intro_door; level.scr_anim["exit_gate_inner"]["anim_exit_gatelift_intro_idle"][0] = %cap_s1_escape_mech_door_lift_intro_door; level.scr_anim["exit_gate_inner"]["anim_exit_gatelift_1"] = %cap_s1_escape_mech_door_lift_01_door; level.scr_anim["exit_gate_inner"]["anim_exit_gatelift_2"] = %cap_s1_escape_mech_door_lift_02_door; level.scr_anim["exit_gate_inner"]["anim_exit_gatelift_3"] = %cap_s1_escape_mech_door_lift_03_door; level.scr_anim["exit_gate_inner"]["anim_exit_gatelift_4"] = %cap_s1_escape_mech_door_lift_04_door; level.scr_anim["exit_gate_inner"]["anim_exit_gatelift_5"] = %cap_s1_escape_mech_door_lift_05_door; level.scr_anim["exit_gate_inner"]["anim_exit_gatelift_6"] = %cap_s1_escape_mech_door_lift_06_door; level.scr_anim["exit_gate_inner"]["anim_exit_gatelift_7"] = %cap_s1_escape_mech_door_lift_07_door; level.scr_anim["exit_gate_inner"]["anim_exit_gatelift_1_rev"] = %cap_s1_escape_mech_door_lift_01_rev_door; level.scr_anim["exit_gate_inner"]["anim_exit_gatelift_2_rev"] = %cap_s1_escape_mech_door_lift_02_rev_door; level.scr_anim["exit_gate_inner"]["anim_exit_gatelift_3_rev"] = %cap_s1_escape_mech_door_lift_03_rev_door; level.scr_anim["exit_gate_inner"]["anim_exit_gatelift_4_rev"] = %cap_s1_escape_mech_door_lift_04_rev_door; level.scr_anim["exit_gate_inner"]["anim_exit_gatelift_5_rev"] = %cap_s1_escape_mech_door_lift_05_rev_door; level.scr_anim["exit_gate_inner"]["anim_exit_gatelift_6_rev"] = %cap_s1_escape_mech_door_lift_06_rev_door; level.scr_anim["exit_gate_inner"]["anim_exit_gatelift_7_rev"] = %cap_s1_escape_mech_door_lift_07_rev_door; level.scr_anim["exit_gate_inner"]["anim_exit_gatelift_exit"] = %cap_s1_escape_mech_door_lift_exit_door; level.scr_animtree["mech_gun"] = #animtree; level.scr_model["mech_gun"] = "vm_exo_interior_base"; } //Function Number: 17 mech_vehicle_anims() { level.scr_animtree["tank"] = #animtree; level.scr_anim["tank"]["anim_exit_takedown_intro"] = %cap_s1_escape_mech_tank_takedown_intro_tank; level.scr_anim["tank"]["anim_exit_takedown_idle"][0] = %cap_s1_escape_mech_tank_takedown_loop_tank; level.scr_anim["tank"]["anim_exit_takedown_exit"] = %cap_s1_escape_mech_tank_takedown_tank; } //Function Number: 18 mech_fx() { level._effect["fx_trailer_1"] = loadfx("vfx/destructible/cap_tank_trailer_l"); level._effect["fx_trailer_3"] = loadfx("vfx/destructible/cap_tank_trailer_c"); level._effect["fx_trailer_2"] = loadfx("vfx/destructible/cap_tank_trailer_r"); } //Function Number: 19 mech_action_smash() { level.player endon("death"); level.player endon("exit_mech"); self endon("death"); level._mb.trigs = common_scripts\utility::array_add(level._mb.trigs,self); self.nodes = common_scripts\utility::getstructarray(self.target,"targetname"); self.flag_smash = 0; self.additional_unlink_nodes = []; if(isdefined(self.nodes[0].target)) { self.additional_geo = []; foreach(var_01 in getentarray(self.nodes[0].target,"targetname")) { if(issubstr(var_01.classname,"brushmodel")) { self.col = var_01; continue; } if(issubstr(var_01.classname,"model")) { self.additional_geo = common_scripts\utility::array_add(self.additional_geo,var_01); } } foreach(var_04 in common_scripts\utility::getstructarray(self.nodes[0].target,"targetname")) { if(isdefined(var_04.script_parameters) && var_04.script_parameters == "unlink") { self.additional_unlink_nodes = common_scripts\utility::array_add(self.additional_unlink_nodes,var_04); continue; } self.fx = var_04; } self.var_3A7 = getscriptablearray(self.nodes[0].target,"targetname")[0]; self.glass = getglassarray(self.nodes[0].target); if(isdefined(self.col)) { if(isdefined(self.nodes[0].height)) { self.col connectpaths(); } if(isdefined(self.col.target)) { foreach(var_01 in getentarray(self.col.target,"targetname")) { self.additional_geo = common_scripts\utility::array_add(self.additional_geo,var_01); } } } } if(isdefined(self.col)) { childthread mech_action_smash_projectile(); } var_08 = undefined; for(;;) { self waittill("trigger",var_09,var_0A,var_0B); var_0C = 0; if(isstring(var_09) && var_09 == "weapon") { var_0C = 1; } if(self.flag_smash) { continue; } if(common_scripts\utility::flag("flag_mech_smash_active") && !var_0C) { continue; } var_0D = 0; var_0E = level.player meleebuttonpressed(); if(var_0E || var_0C) { var_08 = choosesmashnode(level.player.origin,anglestoforward(level.player.angles),1); if(!isdefined(var_08) && !var_0C) { continue; } if(isdefined(var_08)) { var_0D = level.player cansmash(var_08,anglestoforward(var_08.angles)); } if(!var_0D && !var_0C) { continue; } if(!var_0C) { if(!var_0D) { continue; } if(distance(level.player.origin,var_08.origin) > 70) { while(level.player ismeleeing()) { wait(0.05); } continue; } if(vectordot(anglestoforward(level.player getplayerangles()),anglestoforward(var_08.angles)) < 0.5) { while(level.player ismeleeing()) { wait(0.05); } continue; } } else { var_08 = choosesmashnode(var_0B,var_0A,0,1); if(!isdefined(var_08)) { continue; } } common_scripts\utility::flag_set("flag_mech_smash_active"); if(level.allow_threat_paint) { common_scripts\utility::flag_clear("flag_mech_threat_paint_ping_on"); } self.flag_smash = 1; anim_prep(var_08); if(var_0C) { soundscripts\_snd::snd_message("mech_wall_smash_3d",self.smash_obj.origin); } else { soundscripts\_snd::snd_message("mech_wall_smash"); } if(isdefined(self.var_3A7)) { if(angleclamp180(self.var_3A7.angles[1]) == angleclamp180(var_08.angles[1])) { self.var_3A7 setscriptablepartstate(0,4); } else { self.var_3A7 setscriptablepartstate(0,3); } } else if(self.smash_obj.model != "tag_origin") { var_08 thread maps\_anim::anim_single_solo(self.smash_obj,"mech_run_through"); self.smash_obj setanimtime(self.smash_obj maps\_utility::getanim("mech_run_through"),0.2); } if(isdefined(self.col)) { self.col connectpaths(); self.col notify("remove"); self.col delete(); } if(isdefined(self.fx)) { playfx(self.fx common_scripts\utility::getfx(self.fx.script_parameters),self.fx.origin,anglestoforward(self.fx.angles)); } if(isdefined(self.fx)) { thread smash_throw(self.fx.origin,256); } else { thread smash_throw_2(var_0B); } foreach(var_10 in self.additional_unlink_nodes) { common_scripts\utility::array_thread(getnodesinradius(var_10.origin,var_10.radius,0),::disconnect_node); } if(!isdefined(self.var_3A7) && self.smash_obj.model != "tag_origin") { var_08 waittill("mech_run_through"); } if(level.allow_threat_paint) { common_scripts\utility::flag_set("flag_mech_threat_paint_ping_on"); } common_scripts\utility::flag_clear("flag_mech_smash_active"); level notify("mech_smash"); cleanup_mech_traversal_elements(var_08); return; } else if(level.player getnormalizedmovement()[0] > 0) { var_0B = choosesmashnode(level.player.origin,anglestoforward(level.player.angles),1); if(!isdefined(var_0B)) { continue; } if(!level.player cansmash(var_0B,anglestoforward(var_0B.angles))) { continue; } common_scripts\utility::flag_set("flag_mech_smash_active"); if(level.allow_threat_paint) { common_scripts\utility::flag_clear("flag_mech_threat_paint_ping_on"); } self.flag_smash = 1; anim_prep(var_0B); level.player thread spawn_mech_rig(1,0.2); if(isdefined(self.var_3A7)) { if(angleclamp180(self.var_3A7.angles[1]) == angleclamp180(var_0B.angles[1])) { self.var_3A7 setscriptablepartstate(0,4); } else { self.var_3A7 setscriptablepartstate(0,3); } } var_12 = [level.player.rig]; if(!isdefined(self.var_3A7) && self.smash_obj.model != "tag_origin") { var_12 = common_scripts\utility::array_add(var_12,self.smash_obj); } else { var_0B = var_0B common_scripts\utility::spawn_tag_origin(); var_0B thread smash_surface_float(); } common_scripts\utility::flag_set("flag_force_hud_ready"); var_0B thread anim_single_mech(var_12,"mech_run_through","cap_playermech_run_through_mech_short_vm"); soundscripts\_snd::snd_message("mech_wall_smash"); if(isdefined(self.col)) { self.col connectpaths(); self.col notify("remove"); self.col delete(); } if(isdefined(self.fx)) { thread smash_throw(self.fx.origin,256); } else { thread smash_throw_2(var_0E); } foreach(var_13 in self.additional_unlink_nodes) { common_scripts\utility::array_thread(getnodesinradius(var_13.origin,var_13.radius,0),::disconnect_node); } if(isdefined(self.fx)) { playfx(self.fx common_scripts\utility::getfx(self.fx.script_parameters),self.fx.origin,anglestoforward(self.fx.angles)); } var_0A waittill("mech_anim_done"); common_scripts\utility::flag_clear("flag_force_hud_ready"); setsaveddvar("mechHide",0); level.player unlink(); level.player.rig delete(); if(level.allow_threat_paint) { common_scripts\utility::flag_set("flag_mech_threat_paint_ping_on"); } common_scripts\utility::flag_clear("flag_mech_smash_active"); level notify("mech_smash"); cleanup_mech_traversal_elements(var_0A); return; } } } //Function Number: 20 smash_surface_float() { level.player.rig linkto(self); var_00 = self.origin + anglestoforward(self.angles) * 64 + (0,0,64); var_00 = maps\_utility::groundpos(var_00); var_01 = getanimlength(level.player.rig maps\_utility::getanim("mech_run_through")); if(isdefined(var_00)) { self moveto(var_00,var_01); } wait(var_01); level.player.rig unlink(); wait(0.05); self delete(); } //Function Number: 21 choosesmashnode(param_00,param_01,param_02,param_03) { var_04 = sortbydistance(self.nodes,param_00); if(!isdefined(param_02)) { param_02 = 0; } if(!isdefined(param_03)) { param_03 = 0; } var_05 = undefined; var_06 = 0; var_07 = undefined; var_08 = []; foreach(var_0A in var_04) { var_0B = 0; var_07 = vectordot(anglestoforward(var_0A.angles),vectornormalize(param_01)); if(var_07 > 0.7) { var_0B = 1; var_05 = var_0A; } else if(param_03 && var_07 > var_06) { var_05 = var_0A; } if(param_02) { var_0C = 32; if(isdefined(var_0A.radius)) { var_0C = var_0A.radius; } var_0D = distance2d(level.player.origin,var_0A.origin); if(var_0D > var_0C) { var_05 = undefined; } } if(isdefined(var_05) && var_0B) { var_08 = common_scripts\utility::array_add(var_08,var_05); } } if(var_08.size > 0 && param_02) { return var_08[0]; } if(isdefined(var_05)) { return var_05; } } //Function Number: 22 cansmash(param_00,param_01) { if(self getstance() != "stand") { return 0; } if(distance((0,0,self.origin[2]),(0,0,param_00.origin[2])) > 64) { return 0; } var_02 = param_00.origin + (0,0,64); if(!level.player maps\_utility::player_looking_at(var_02 + param_01 * 64,0.7,1)) { return 0; } return 1; } //Function Number: 23 smash_throw_2(param_00,param_01) { if(!isdefined(param_00)) { param_00 = self.smash_obj.origin; } if(!isdefined(param_01)) { param_01 = 128; } foreach(var_03 in sortbydistance(maps\_utility::remove_dead_from_array(level.mech_crush),param_00,param_01)) { var_04 = var_03 death_throw(param_00,param_01,1); } } //Function Number: 24 smash_throw(param_00,param_01) { if(!isdefined(param_00)) { param_00 = self.smash_obj.origin; } if(!isdefined(param_01)) { param_01 = 170; } foreach(var_03 in sortbydistance(maps\_utility::remove_dead_from_array(level.mech_crush),param_00,param_01)) { var_03 thread smash_throw_solo(); } physicsexplosionsphere(param_00,param_01,param_01,1); } //Function Number: 25 smash_throw_solo() { if(isdefined(self.smash_throw_active)) { return; } self.smash_throw_active = 1; var_00 = common_scripts\utility::spawn_tag_origin(); self.animname = "generic"; self.a.nodeath = 1; self.allowdeath = 1; level.player maps\_playermech_code::disable_stencil(self); self.noragdoll = 0; self startragdoll(); var_00 thread maps\_anim::anim_single_solo(self,"explode_death"); wait(0.25); if(isalive(self)) { self notify("death",level.player,"MOD_MECH_SMASH"); self kill(); } var_00 delete(); } //Function Number: 26 mech_action_smash_projectile() { self.col setcandamage(1); self.col setcanradiusdamage(1); self.col solid(); self.col endon("remove"); if(isdefined(self.col.hits_left)) { return; } var_00 = 2; self.col.hits_left = var_00; for(;;) { self.col waittill("damage",var_01,var_02,var_03,var_04,var_05); if(!isdefined(var_05)) { continue; } if(isdefined(var_02) && var_02 == level.player) { if(issubstr(var_05,"BULLET")) { self.col.hits_left--; if(self.col.hits_left <= 0) { self notify("trigger","weapon",var_03,var_04); } else if(isdefined(self.var_3A7) && !isdefined(self.damaged)) { var_06 = choosesmashnode(var_04,var_03,0,1); if(!isdefined(var_06)) { continue; } if(angleclamp180(self.var_3A7.angles[1]) == angleclamp180(var_06.angles[1])) { self.var_3A7 setscriptablepartstate(0,1); } else { self.var_3A7 setscriptablepartstate(0,2); } self.damaged = 1; } continue; } if(isdefined(var_05) && issubstr(var_05,"GRENADE")) { self notify("trigger","weapon",var_03,var_04); continue; } if(isdefined(var_05) && issubstr(var_05,"SPLASH") || var_05 == "MOD_PROJECTILE") { self notify("trigger","weapon",var_03,var_04); continue; } } } } //Function Number: 27 anim_prep(param_00) { if(isdefined(self.var_3A7)) { self.smash_obj = self.var_3A7; } else if(isdefined(param_00.script_parameters)) { self.smash_obj = maps\_utility::spawn_anim_model(param_00.script_parameters); } else { self.smash_obj = param_00 common_scripts\utility::spawn_tag_origin(); } if(isdefined(param_00.height)) { self.smash_obj.height = param_00.height; } if(isdefined(self.additional_geo)) { foreach(var_02 in self.additional_geo) { if(isdefined(var_02)) { var_02 delete(); } } } self.additional_geo = undefined; if(isdefined(self.glass)) { foreach(var_05 in self.glass) { deleteglass(var_05); } } self.glass = undefined; if(isdefined(self.opp_trig)) { self.opp_trig cleanup_mech_traversal_elements(param_00,0); } } //Function Number: 28 setup_smash_nodes() { foreach(var_01 in getallnodes()) { if(issubstr(var_01.type,"Cover") || issubstr(var_01.type,"Conceal") || issubstr(var_01.type,"Exposed")) { if(isdefined(var_01.script_nodestate)) { var_01.state = tolower(var_01.script_nodestate); switch(var_01.state) { case "linked": break; case "unlinked": var_01 disconnect_node(1); break; default: iprintln("Warning: node at " + var_01.origin + " has a .script_nodestate of \'" + var_01.state); break; } level._mb.nodes = common_scripts\utility::array_add(level._mb.nodes,var_01); } } } } //Function Number: 29 cleanup_mech_traversal_elements(param_00,param_01) { if(isdefined(self.smash_obj) && !isdefined(self.var_3A7)) { self.smash_obj delete(); } if(!isdefined(param_01)) { param_01 = 1; } if(isdefined(self.additional_geo)) { foreach(var_03 in self.additional_geo) { if(isdefined(var_03)) { var_03 delete(); } } } if(isdefined(self.glass)) { foreach(var_06 in self.glass) { deleteglass(var_06); } } if(isdefined(self.col)) { self.col connectpaths(); self.col notify("remove"); self.col delete(); } if(param_01) { var_08 = 128; if(isdefined(param_00.height)) { var_08 = param_00.height; } foreach(var_0A in getnodesinradius(param_00.origin,128,0,var_08)) { if(isdefined(var_0A.state)) { if(isdefined(param_00.height) || !issubstr(var_0A.type,"exposed") && node_is_exposed(var_0A.origin + (0,0,32) + anglestoforward(var_0A.angles) * 64,var_0A)) { if(var_0A.state == "linked") { var_0A disconnect_node(); } level._mb.nodes = common_scripts\utility::array_remove(level._mb.nodes,var_0A); var_0A.state = undefined; continue; } if(var_0A.state == "unlinked") { var_0A connect_node(); } } } } self delete(); } //Function Number: 30 connect_node() { self.state = "linked"; self connectnode(); } //Function Number: 31 disconnect_node(param_00) { if(!isdefined(param_00)) { param_00 = 0; } if(param_00) { self.state = "unlinked"; } else { self.state = "disabled"; } self disconnectnode(); if(isdefined(self.owner) && !isplayer(self.owner)) { self.owner maps\captured_mech::go_to_vol(); } } //Function Number: 32 node_is_exposed(param_00,param_01) { if(param_01.type == "Cover Multi") { foreach(var_03 in ["Cover Left","Cover Right"]) { if(isdefined(param_01.offset)) { param_01.offset = undefined; } if(!sighttracepassed(param_01.origin + animscripts\utility::getnodeoffset(param_01,var_03),param_00,0,undefined)) { return 0; } } return 1; } return sighttracepassed(var_04.origin + animscripts\utility::getnodeoffset(var_04),var_03,0,undefined); } //Function Number: 33 mech_action_shoot() { self.var_3A7 = getscriptablearray(self.target,"targetname")[0]; self setcandamage(1); self setcanradiusdamage(1); self.var_3A7 waittill("death"); foreach(var_01 in getnodesinradius(self.origin,self.radius,0,self.height)) { var_01 disconnect_node(); } } //Function Number: 34 mech_crush() { self endon("exit_mech"); level.mech_crush = []; var_00 = 64; for(;;) { if(!common_scripts\utility::flag("flag_mech_smash_active")) { foreach(var_02 in level.mech_crush) { if(var_02 death_throw(self.origin,var_00,0)) { soundscripts\_snd::snd_message("aud_mech_crush_guy",var_02); } } } wait(0.05); } } //Function Number: 35 mech_victim_death_func() { if(self.damagemod == "MOD_MELEE" || isdefined(self.mech_death_throw) && self.mech_death_throw) { var_00 = level.player.origin; var_01 = self.origin - (var_00[0],var_00[1],self.origin[2]); self teleport(self.origin,vectortoangles(var_01)); self.deathanim = %death_explosion_run_f_v2; } return 0; } //Function Number: 36 spawnfunc_mech_crush() { self.deathfunction = ::mech_victim_death_func; self.badplaceawareness = 1; self.a.disablelongdeath = 1; level.mech_crush = common_scripts\utility::array_add(level.mech_crush,self); } //Function Number: 37 death_throw(param_00,param_01,param_02) { if(!isdefined(param_02)) { param_02 = 0; } if(!isalive(self) || !isai(self) || isdefined(self.playingdeathanim)) { if(isdefined(common_scripts\utility::array_find(level.mech_crush,self))) { level.mech_crush = common_scripts\utility::array_remove(level.mech_crush,self); } return 0; } var_03 = distance(param_00,self.origin); var_04 = 200; var_05 = level.player getvelocity(); var_06 = length(var_05); var_07 = self.origin - (param_00[0],param_00[1],self.origin[2]); var_08 = vectordot(var_05,var_07); if(var_03 <= param_01) { if(!param_02 && !level.player issprinting() && var_06 < var_04 || var_08 <= 0) { return 0; } maps\_utility::anim_stopanimscripted(); self.mech_death_throw = 1; self.allowdeath = 1; self notify("death",level.player,"MOD_MECH_CRUSH"); self kill(); return 1; } else if(var_03 < 200) { if(!self.ignoreall) { if(!isdefined(self.noclosemechrun) || !self.noclosemechrun) { self.ignoreall = 1; maps\_utility::delaythread(6,::maps\_utility::set_ignoreall,0); } } } return 0; } //Function Number: 38 spawn_mech_rig(param_00,param_01) { self.rig = maps\_utility::spawn_anim_model("mech_player_rig",self.origin,self.angles); self.rig hide(); foreach(var_03 in common_scripts\utility::array_combine(level.mechdata_left_bones,level.mechdata_right_bones)) { self.rig hidepart(var_03); } if(!isdefined(param_00)) { return; } if(!param_00) { param_01 = 0; } else if(!isdefined(param_01)) { param_01 = 1; } if(param_00) { self playerlinktoblend(self.rig,"tag_player",param_01); } wait(param_01); self playerlinktodelta(self.rig,"tag_player",1,0,0,0,0,1); } //Function Number: 39 anim_single_mech(param_00,param_01,param_02,param_03,param_04,param_05,param_06,param_07) { param_00 = set_array(param_00); if(!isdefined(param_04)) { param_04 = level.player; } var_08 = isarray(param_00[0] maps\_utility::getanim(param_01)); if(!isdefined(param_03)) { if(var_08) { param_03 = 0; } else { param_03 = 1; } } if(param_03) { param_04._frozen_controls = 1; param_04 freezecontrols(1); } if(!isdefined(param_02)) { iprintln("Warning: no vm_anim_index for anim_single_player() call for \'" + param_01 + "\'"); } level.player forceviewmodelanimationclear(); if(var_08) { param_04 notify("mech_anim_loop_start"); self notify("mech_anim_loop_start"); thread anim_loop_vm(param_04,param_02,getanimlength(param_00[0] maps\_utility::getanim(param_01)[0])); maps\_anim::anim_loop(param_00,param_01,undefined,param_05); param_04 notify("mech_anim_loop_done"); self notify("mech_anim_loop_done"); } else { param_04 notify("mech_anim_start"); self notify("mech_anim_start"); param_04 setviewmodelanim(param_02); maps\_anim::anim_single(param_00,param_01,param_05,param_06,param_07); param_04 notify("mech_anim_done"); self notify("mech_anim_done"); } if(param_03) { param_04 freezecontrols(0); param_04._frozen_controls = 0; } } //Function Number: 40 anim_loop_vm(param_00,param_01,param_02) { self endon("stop_loop"); param_00 setviewmodelanim(param_01); for(;;) { wait(param_02); param_00 setviewmodelanimtime(0); } } //Function Number: 41 mech_obj_move(param_00,param_01) { if(isstring(param_00.node)) { param_00.node = common_scripts\utility::getstruct(param_00.node,"targetname"); if(!isdefined(param_00.node)) { param_00.node = getent(param_00.node,"targetname"); } } param_00.state = "none"; param_00.current_anim = undefined; param_00.current_anim_vm = undefined; if(!isdefined(param_01)) { param_01 = 1; } if(isdefined(param_00.intro_anim)) { param_00.state = "intro_anim"; self notify("intro_anim_start"); param_00.node anim_single_mech(param_00.guys,param_00.intro_anim,param_00.intro_anim_vm); self notify("intro_anim_done"); param_00.current_anim = param_00.intro_anim; param_00.current_anim_vm = param_00.intro_anim_vm; } var_02 = 0; if(isdefined(param_00.main_anims)) { param_00.main_anims = set_array(param_00.main_anims); param_00.main_anims_vm = set_array(param_00.main_anims_vm); if(param_00.input_type == "mash") { if(isdefined(param_00.rev_main_anims)) { param_00.rev_main_anims = set_array(param_00.rev_main_anims); param_00.rev_main_anims_vm = set_array(param_00.rev_main_anims_vm); } var_03 = 1; var_04 = undefined; common_scripts\utility::flag_set("hint_mash_button"); maps\_utility::display_hint("hint_mash_button"); self.button_mash_level = 0; self.button_mash_success = 2; thread button_mash_detection(); for(;;) { self.button_mash_level = clamp(self.button_mash_level,0,2); if(self.button_mash_level >= 2) { var_03 = 1; if(!isdefined(var_04)) { var_04 = 0; } else { var_04++; } } else { var_03 = 0; } if(isdefined(var_04) && var_04 == param_00.main_anims.size) { break; } var_05 = undefined; var_06 = undefined; if(isdefined(var_04)) { if(!var_03) { var_05 = param_00.rev_main_anims[var_04]; var_06 = param_00.rev_main_anims_vm[var_04]; var_04--; if(var_04 < 0) { var_04 = undefined; } } else { var_05 = param_00.main_anims[var_04]; var_06 = param_00.main_anims_vm[var_04]; if(!param_01) { thread constant_quake(); } } if(var_02) { self notify("post_intro_loop_anim_done"); param_00.node notify("stop_loop"); common_scripts\utility::array_thread(param_00.guys,::maps\_utility::anim_stopanimscripted); var_02 = 0; } param_00.state = "main_anims"; self notify("main_anim_start" + var_05); soundscripts\_snd::snd_message("aud_mech_obj_move",var_05); param_00.node anim_single_mech(param_00.guys,var_05,var_06); self notify("main_anim_done" + var_05); thread stop_constant_quake(); if(isdefined(param_00.rev_main_anims) && isdefined(var_04) && !isdefined(param_00.rev_main_anims[var_04])) { break; } continue; } if(isdefined(param_00.post_intro_loop_anim) && !isdefined(var_04) && !var_02) { param_00.state = "post_intro_loop_anim"; self notify("post_intro_loop_anim_start"); soundscripts\_snd::snd_message("aud_mech_obj_move_wait"); param_00.node thread anim_single_mech(param_00.guys,param_00.post_intro_loop_anim,param_00.post_intro_loop_anim_vm); var_02 = 1; continue; } wait(0.05); } if(isdefined(param_00.post_main_loop_anim)) { param_00.state = "post_main_loop_anim"; self notify("post_main_loop_anim_start"); soundscripts\_snd::snd_message("aud_mech_obj_move_wait"); param_00.node thread anim_single_mech(param_00.guys,param_00.post_main_loop_anim,param_00.post_main_loop_anim_vm); if(!param_01) { thread constant_quake(); } while(self.button_mash_level >= 2) { wait(0.05); } self notify("post_main_loop_anim_done"); param_00.node notify("stop_loop"); common_scripts\utility::array_thread(param_00.guys,::maps\_utility::anim_stopanimscripted); } } else if(param_00.input_type == "push_forward" || param_00.input_type == "pull_back") { thread add_idle_control(param_00,param_01); if(isdefined(param_00.post_intro_loop_anim) && !var_02) { param_00.state = "post_intro_loop_anim"; self notify("post_intro_loop_anim_start"); param_00.node thread anim_single_mech(param_00.guys,param_00.post_intro_loop_anim,param_00.post_intro_loop_anim_vm); self waittill("input_success"); self notify("post_intro_loop_anim_done"); param_00.node notify("stop_loop"); common_scripts\utility::array_thread(param_00.guys,::maps\_utility::anim_stopanimscripted); var_02 = 0; } param_00.state = "main_anims"; for(var_07 = 0;var_07 < param_00.main_anims.size;var_07++) { param_00.current_anim = param_00.main_anims[var_07]; param_00.current_anim_vm = param_00.main_anims_vm[var_07]; param_00.node anim_single_mech(param_00.guys,param_00.main_anims[var_07],param_00.main_anims_vm[var_07],0); } self notify("stop_add_idle_control"); common_scripts\utility::flag_clear("hint_" + param_00.input_type); } else { } } thread stop_constant_quake(); if(isdefined(param_00.exit_anim)) { param_00.state = "exit_anim"; self notify("exit_anim_start"); soundscripts\_snd::snd_message("aud_mech_obj_move_end"); param_00.node anim_single_mech(param_00.guys,param_00.exit_anim,param_00.exit_anim_vm); self notify("exit_anim_done"); } self unlink(); self.rig delete(); } //Function Number: 42 constant_quake() { self endon("stop_quake"); for(;;) { earthquake(0.5,0.05,self.origin,128); self playrumbleonentity("damage_heavy"); wait(0.05); } } //Function Number: 43 stop_constant_quake() { self notify("stop_quake"); } //Function Number: 44 add_idle_control(param_00,param_01) { self endon("stop_add_idle_control"); var_02 = 0; var_03 = 0; common_scripts\utility::flag_set("hint_" + param_00.input_type); maps\_utility::display_hint("hint_" + param_00.input_type); for(;;) { var_03 = 0; if(param_00.input_type == "push_forward") { if(self getnormalizedmovement()[0] > 0) { var_03 = 1; } } else if(param_00.input_type == "pull_back") { if(self getnormalizedmovement()[0] < 0) { var_03 = 1; } } if(var_03) { self notify("input_success"); } if(param_00.state == "main_anims") { if(var_03) { if(var_02) { var_02 = 0; if(isdefined(param_00.main_anim_idle_vm)) { self setadditiveviewmodelanim(0); } maps\_anim::anim_set_rate(param_00.guys,param_00.current_anim,1); self pauseviewmodelanim(0); if(!param_01) { thread constant_quake(); } } common_scripts\utility::flag_clear("hint_" + param_00.input_type); } else { common_scripts\utility::flag_set("hint_" + param_00.input_type); maps\_utility::display_hint("hint_" + param_00.input_type); if(!var_02) { var_02 = 1; maps\_anim::anim_set_rate(param_00.guys,param_00.current_anim,0); self pauseviewmodelanim(1); if(isdefined(param_00.main_anim_idle_vm)) { self setadditiveviewmodelanim(param_00.main_anim_idle_vm); } thread stop_constant_quake(); } } } wait(0.05); } } //Function Number: 45 button_mash_detection() { self endon("notify_stop_mash_detection"); var_00 = 0; var_01 = 0; for(;;) { if(self usebuttonpressed()) { var_01++; } else { var_01 = 0; } if(var_01 > 0 && var_01 < 20) { if(self.button_mash_level < self.button_mash_success) { self.button_mash_level = self.button_mash_level + 1; } var_00 = 0; var_01++; } else { var_00++; if(var_00 >= 4 && self.button_mash_level > 0) { self.button_mash_level = self.button_mash_level - 1; } } wait(0.05); } } //Function Number: 46 set_array(param_00) { if(isarray(param_00)) { return param_00; } return [param_00]; } //Function Number: 47 disable_threat_ping() { common_scripts\utility::flag_clear("flag_mech_threat_paint_ping_on"); level.allow_threat_paint = 0; } //Function Number: 48 enable_threat_ping() { common_scripts\utility::flag_set("flag_mech_threat_paint_ping_on"); level.allow_threat_paint = 1; }