/******************************************************************* * Decompiled By: Bog * Decompiled File: _helicopter_ai.gsc * Game: Call of Duty: Advanced Warfare * Platform: PC * Function Count: 10 * Decompile Time: 177 ms * Timestamp: 4/22/2024 2:21:19 AM *******************************************************************/ //Function Number: 1 evasive_think(param_00) { param_00 endon("death"); while(param_00.health > 0) { param_00 waittill("missile_lock",var_01); var_02 = evasive_createmaneuvers(param_00,"random"); evasive_startmaneuvers(param_00,var_02); wait(0.05); } } //Function Number: 2 evasive_createmaneuvers(param_00,param_01) { switch(param_01) { case "strafe_left_right": param_00 evasive_addpoint(3000,-1500,500,"average"); param_00 evasive_addpoint(6000,3000,-700,"average"); param_00 evasive_addpoint(3000,-1500,200,"average"); break; case "strafe_right_left": param_00 evasive_addpoint(3000,1500,500,"average"); param_00 evasive_addpoint(6000,-3000,-700,"average"); param_00 evasive_addpoint(3000,1500,200,"average"); break; case "360_clockwise": param_00 evasive_addpoint(1500,1500,200,"none"); param_00 evasive_addpoint(0,1500,200,"none"); param_00 evasive_addpoint(-1500,1500,200,"none"); param_00 evasive_addpoint(-1500,0,0,"none"); param_00 evasive_addpoint(-1000,-1000,-200,"none"); param_00 evasive_addpoint(0,-1000,-200,"none"); param_00 evasive_addpoint(1000,-1000,-200,"none"); break; case "360_counter_clockwise": param_00 evasive_addpoint(1500,-1500,200,"none"); param_00 evasive_addpoint(0,-1500,200,"none"); param_00 evasive_addpoint(-1500,-1500,200,"none"); param_00 evasive_addpoint(-1500,0,0,"none"); param_00 evasive_addpoint(-1000,1000,-200,"none"); param_00 evasive_addpoint(0,1000,-200,"none"); param_00 evasive_addpoint(1000,1000,-200,"none"); break; case "random": var_02 = []; var_02[0] = "strafe_left_right"; var_02[1] = "strafe_right_left"; var_02[2] = "360_clockwise"; var_02[3] = "360_counter_clockwise"; return evasive_createmaneuvers(param_00,var_02[randomint(var_02.size)]); } var_03 = evasive_getallpoints(param_01); return var_03; } //Function Number: 3 evasive_startmaneuvers(param_00,param_01) { param_00 notify("taking_evasive_actions"); param_00 endon("taking_evasive_actions"); param_00 endon("death"); param_00 notify("evasive_action_done"); thread evasive_endmaneuvers(param_00); if(getdvar("cobrapilot_debug") == "1") { param_00 evasive_drawpoints(param_01); } param_00 setneargoalnotifydist(1500); param_00 vehicle_setspeed(100,30,30); var_02 = param_00.angles[1]; for(var_03 = 1;var_03 < param_01.size;var_03++) { if(isdefined(param_01[var_03 + 1])) { var_04 = vectortoangles(param_01[var_03 + 1]["pos"] - param_01[var_03]["pos"]); } else { var_04 = (0,var_02,0); } var_05 = var_04[1]; if(param_01[var_03]["goalYawMethod"] == "average") { var_05 = var_04[1] + var_02 / 2; } else if(param_01[var_03]["goalYawMethod"] == "forward") { var_05 = param_00.angles[1]; } if(getdvar("cobrapilot_debug") == "1") { thread maps\_utility::draw_line_until_notify(param_01[var_03]["pos"],param_01[var_03]["pos"] + anglestoforward((0,var_05,0)) * 250,1,1,0.2,param_00,"evasive_action_done"); } param_00 settargetyaw(var_05); param_00 thread maps\_vehicle_code::setvehgoalpos_wrap(param_01[var_03]["pos"],0); param_00 waittill("near_goal"); } param_00 notify("evasive_action_done"); param_00 thread maps\_utility::vehicle_resumepath(); } //Function Number: 4 evasive_endmaneuvers(param_00) { param_00 notify("end_maneuvers"); param_00 endon("end_maneuvers"); param_00 endon("evasive_action_done"); param_00 endon("death"); param_00 waittill("missile_lock_ended"); param_00 thread maps\_utility::vehicle_resumepath(); } //Function Number: 5 evasive_addpoint(param_00,param_01,param_02,param_03) { if(!isdefined(self.evasive_points)) { self.evasive_points = []; self.evasive_points[0]["pos"] = self.origin; self.evasive_points[0]["ang"] = (0,self.angles[1],0); } var_04 = self.evasive_points.size; if(!isdefined(param_03)) { param_03 = "none"; } if(!isdefined(param_02)) { param_02 = 0; } self.evasive_points[var_04]["forward"] = param_00; self.evasive_points[var_04]["side"] = param_01; self.evasive_points[var_04]["up"] = param_02; var_05 = anglestoforward(self.evasive_points[0]["ang"]); var_06 = anglestoright(self.evasive_points[0]["ang"]); self.evasive_points[var_04]["pos"] = self.evasive_points[var_04 - 1]["pos"] + var_05 * self.evasive_points[var_04]["forward"] + var_06 * self.evasive_points[var_04]["side"] + (0,0,param_02); self.evasive_points[var_04]["goalYawMethod"] = param_03; } //Function Number: 6 evasive_getallpoints(param_00) { var_01 = param_00.evasive_points; param_00.evasive_points = undefined; return var_01; } //Function Number: 7 evasive_drawpoints(param_00) { for(var_01 = 1;var_01 < param_00.size;var_01++) { thread maps\_utility::draw_line_until_notify(param_00[var_01 - 1]["pos"],param_00[var_01]["pos"],1,0.2,0.2,self,"evasive_action_done"); } } //Function Number: 8 wingman_think(param_00) { param_00 endon("death"); level.playervehicle endon("death"); var_01 = 2200; var_02 = 1500; var_03 = 0; var_04 = 1; var_05 = 1.2; var_06 = 50; var_07 = 60; var_08 = 2000; var_09 = getplayerhelispeed(); var_0A = 0; var_0B = gettime(); var_0C = wingman_getgoalpos(var_01,var_02,var_03); param_00 vehicle_setspeed(30,20,20); param_00 settargetyaw(level.playervehicle.angles[1]); param_00 setvehgoalpos(var_0C,1); for(;;) { var_0C = wingman_getgoalpos(var_01,var_02,var_03); if(getdvar("cobrapilot_debug") == "1") { thread common_scripts\utility::draw_line_for_time(level.playervehicle.origin,var_0C,0,1,0,var_04); thread common_scripts\utility::draw_line_for_time(level.playervehicle.origin,param_00.origin,0,0,1,var_04); thread common_scripts\utility::draw_line_for_time(param_00.origin,var_0C,1,1,0,var_04); } var_0D = gettime(); if(var_0D >= var_0B + var_08) { var_0B = var_0D; var_0A = var_09; var_09 = getplayerhelispeed(); } var_0E = 0; var_0F = 0; if(var_0A > 20) { var_0F = var_0A; var_0E = 1; } else if(var_0A <= 20 && getplayerhelispeed() > 20) { var_0F = getplayerhelispeed(); var_0E = 1; } if(var_0E && var_0F > 0) { var_0F = var_0F * var_05; var_10 = var_06; var_11 = var_07; if(var_10 >= var_0F / 2) { var_10 = var_0F / 2; } if(var_11 >= var_0F / 2) { var_11 = var_0F / 2; } param_00 vehicle_setspeed(var_0F,var_10,var_11); param_00 settargetyaw(level.playervehicle.angles[1]); var_12 = 0; if(getplayerhelispeed() <= 30) { var_12 = 1; } if(getdvar("cobrapilot_debug") == "1") { iprintln("wingman speed: " + var_0F + " : " + var_12); } param_00 setvehgoalpos(var_0C,var_12); } wait(var_04); } } //Function Number: 9 wingman_getgoalpos(param_00,param_01,param_02) { var_03 = anglestoforward(common_scripts\utility::flat_angle(level.playervehicle.angles)); var_04 = anglestoright(common_scripts\utility::flat_angle(level.playervehicle.angles)); var_05 = level.playervehicle.origin + var_03 * param_00 + var_04 * param_01 + (0,0,param_02); return var_05; } //Function Number: 10 getplayerhelispeed() { return level.playervehicle vehicle_getspeed(); }