Files
IL-GSC/GHOSTS/PC/SP/maps/_mgturret.gsc
2023-10-27 03:49:01 -04:00

2001 lines
36 KiB
Plaintext

/*******************************************************************
* Decompiled By: Bog
* Decompiled File: maps\_mgturret.gsc
* Game: Call of Duty: Ghosts
* Platform: PC
* Function Count: 71
* Decompile Time: 1194 ms
* Timestamp: 10/27/2023 1:24:58 AM
*******************************************************************/
//Function Number: 1
init_mgturretsettings()
{
level.var_5211["easy"]["convergenceTime"] = 2.5;
level.var_5211["easy"]["suppressionTime"] = 3;
level.var_5211["easy"]["accuracy"] = 0.38;
level.var_5211["easy"]["aiSpread"] = 2;
level.var_5211["easy"]["playerSpread"] = 0.5;
level.var_5211["medium"]["convergenceTime"] = 1.5;
level.var_5211["medium"]["suppressionTime"] = 3;
level.var_5211["medium"]["accuracy"] = 0.38;
level.var_5211["medium"]["aiSpread"] = 2;
level.var_5211["medium"]["playerSpread"] = 0.5;
level.var_5211["hard"]["convergenceTime"] = 0.8;
level.var_5211["hard"]["suppressionTime"] = 3;
level.var_5211["hard"]["accuracy"] = 0.38;
level.var_5211["hard"]["aiSpread"] = 2;
level.var_5211["hard"]["playerSpread"] = 0.5;
level.var_5211["fu"]["convergenceTime"] = 0.4;
level.var_5211["fu"]["suppressionTime"] = 3;
level.var_5211["fu"]["accuracy"] = 0.38;
level.var_5211["fu"]["aiSpread"] = 2;
level.var_5211["fu"]["playerSpread"] = 0.5;
}
//Function Number: 2
func_4FDD()
{
if(getdvar("mg42") == "")
{
setdvar("mgTurret","off");
}
level.magic_distance = 24;
var_00 = getentarray("turretInfo","targetname");
for(var_01 = 0;var_01 < var_00.size;var_01++)
{
var_00[var_01] delete();
}
}
//Function Number: 3
func_60A2()
{
self detach("weapon_mg42_carry","tag_origin");
self endon("death");
self.goalradius = level.var_2497;
if(isdefined(self.target))
{
var_00 = getnode(self.target,"targetname");
if(isdefined(var_00))
{
if(isdefined(var_00.radius))
{
self.goalradius = var_00.radius;
}
self setgoalnode(var_00);
}
}
while(!isdefined(self.node))
{
wait(0.05);
}
var_01 = undefined;
if(isdefined(self.target))
{
var_00 = getnode(self.target,"targetname");
var_01 = var_00;
}
if(!isdefined(var_01))
{
var_01 = self.node;
}
if(!isdefined(var_01))
{
}
if(var_01.type != "Turret")
{
}
var_02 = func_3C20();
var_02[self.node.origin + ""] = undefined;
if(isdefined(var_02[var_01.origin + ""]))
{
}
var_03 = var_01.turret;
if(isdefined(var_03.reserved))
{
}
reserve_turret(var_03);
if(var_03.issetup)
{
func_4D43(var_03);
}
else
{
run_to_new_spot_and_setup_gun(var_03);
}
maps\_mg_penetration::func_3E14(var_01.turret);
}
//Function Number: 4
func_51FD()
{
self waittill("trigger");
level notify(self.targetname);
level.var_51FD[self.targetname] = 1;
self delete();
}
//Function Number: 5
mgturret_auto(param_00)
{
param_00 waittill("trigger");
var_01 = getaiarray("bad_guys");
for(var_02 = 0;var_02 < var_01.size;var_02++)
{
if(isdefined(var_01[var_02].var_6C1F) && param_00.var_6C1F == var_01[var_02].var_6C1F)
{
var_01[var_02] notify("auto_ai");
}
}
var_03 = getspawnerarray();
for(var_02 = 0;var_02 < var_03.size;var_02++)
{
if(isdefined(var_03[var_02].var_6C1F) && param_00.var_6C1F == var_03[var_02].var_6C1F)
{
var_03[var_02].ai_mode = "auto_ai";
}
}
maps\_spawner::kill_trigger(param_00);
}
//Function Number: 6
mg42_suppressionfire(param_00)
{
self endon("death");
self endon("stop_suppressionFire");
if(!isdefined(self.var_7D63))
{
self.var_7D63 = 1;
}
for(;;)
{
while(self.var_7D63)
{
self settargetentity(param_00[randomint(param_00.size)]);
wait(2 + randomfloat(2));
}
self cleartargetentity();
while(!self.var_7D63)
{
wait(1);
}
}
}
//Function Number: 7
func_5090(param_00)
{
var_01 = self.origin;
self waittill("auto_ai");
param_00 notify("stopfiring");
param_00 setmode("auto_ai");
param_00 settargetentity(level.player);
}
//Function Number: 8
burst_fire_settings(param_00)
{
if(param_00 == "delay")
{
return 0.2;
}
if(param_00 == "delay_range")
{
return 0.5;
}
if(param_00 == "burst")
{
return 0.5;
}
return 1.5;
}
//Function Number: 9
func_18B3()
{
self endon("death");
self endon("stop_burst_fire_unmanned");
if(isdefined(self.script_delay_min))
{
var_00 = self.script_delay_min;
}
else
{
var_00 = burst_fire_settings("delay");
}
if(isdefined(self.script_delay_max))
{
var_01 = self.script_delay_max - var_00;
}
else
{
var_01 = burst_fire_settings("delay_range");
}
if(isdefined(self.var_6B5D))
{
var_02 = self.var_6B5D;
}
else
{
var_02 = burst_fire_settings("burst");
}
if(isdefined(self.var_6B5C))
{
var_03 = self.var_6B5C - var_02;
}
else
{
var_03 = burst_fire_settings("burst_range");
}
var_04 = gettime();
var_05 = "start";
if(isdefined(self.var_73F6))
{
thread func_8506();
}
for(;;)
{
var_06 = var_04 - gettime() * 0.001;
if(self isfiringturret() && var_06 <= 0)
{
if(var_05 != "fire")
{
var_05 = "fire";
thread doshoot();
}
var_06 = var_02 + randomfloat(var_03);
thread func_8539(var_06);
self waittill("turretstatechange");
var_06 = var_00 + randomfloat(var_01);
var_04 = gettime() + int(var_06 * 1000);
continue;
}
if(var_05 != "aim")
{
var_05 = "aim";
}
thread func_8539(var_06);
self waittill("turretstatechange");
}
}
//Function Number: 10
doshoot()
{
self endon("death");
self endon("turretstatechange");
for(;;)
{
self shootturret();
wait(0.1);
}
}
//Function Number: 11
func_8506()
{
self endon("death");
self endon("stop_burst_fire_unmanned");
if(isdefined(self.var_73F8))
{
self.var_73F9 = 1;
}
for(;;)
{
self waittill("turret_fire");
playfxontag(self.var_73F6,self,"tag_origin");
if(isdefined(self.var_73F9) && self.var_73F9)
{
thread func_8507();
}
}
}
//Function Number: 12
func_8507()
{
self endon("death");
self.var_73F9 = 0;
var_00 = self gettagorigin("tag_origin");
var_01 = common_scripts\utility::drop_to_ground(var_00,-30);
var_02 = var_00[2] - var_01[2];
var_03 = var_02 / 300;
wait(var_03);
level thread common_scripts\utility::func_5D1F(self.var_73F8,var_01);
wait(1);
self.var_73F9 = 1;
}
//Function Number: 13
func_8539(param_00)
{
if(param_00 <= 0)
{
}
self endon("turretstatechange");
wait(param_00);
if(isdefined(self))
{
self notify("turretstatechange");
}
}
//Function Number: 14
func_6327(param_00)
{
self endon("death");
self notify("stop random_spread");
self endon("stop random_spread");
self endon("stopfiring");
self settargetentity(param_00);
for(;;)
{
if(isplayer(param_00))
{
param_00.origin = self.var_508F getorigin();
}
else
{
param_00.origin = self.var_508F.origin;
}
param_00.origin = param_00.origin + (20 - randomfloat(40),20 - randomfloat(40),20 - randomfloat(60));
wait(0.2);
}
}
//Function Number: 15
func_51F5(param_00)
{
self notify("stop_using_built_in_burst_fire");
self endon("stop_using_built_in_burst_fire");
param_00 stopfiring();
for(;;)
{
param_00 waittill("startfiring");
thread func_18B1(param_00);
param_00 startfiring();
param_00 waittill("stopfiring");
param_00 stopfiring();
}
}
//Function Number: 16
func_18B1(param_00,param_01)
{
param_00 endon("stopfiring");
self endon("stop_using_built_in_burst_fire");
if(isdefined(param_00.script_delay_min))
{
var_02 = param_00.script_delay_min;
}
else
{
var_02 = burst_fire_settings("delay");
}
if(isdefined(param_00.script_delay_max))
{
var_03 = param_00.script_delay_max - var_02;
}
else
{
var_03 = burst_fire_settings("delay_range");
}
if(isdefined(param_00.var_6B5D))
{
var_04 = param_00.var_6B5D;
}
else
{
var_04 = burst_fire_settings("burst");
}
if(isdefined(param_00.var_6B5C))
{
var_05 = param_00.var_6B5C - var_04;
}
else
{
var_05 = burst_fire_settings("burst_range");
}
for(;;)
{
param_00 startfiring();
if(isdefined(param_01))
{
param_00 thread func_6327(param_01);
}
wait(var_04 + randomfloat(var_05));
param_00 stopfiring();
wait(var_02 + randomfloat(var_03));
}
}
//Function Number: 17
_spawner_mg42_think()
{
if(!isdefined(self.var_33A5))
{
self.var_33A5 = 0;
}
if(!isdefined(self.targetname))
{
}
var_00 = getnode(self.targetname,"target");
if(!isdefined(var_00))
{
}
if(!isdefined(var_00.var_6C1E))
{
}
if(!isdefined(var_00.var_51F4))
{
var_00.var_51F4 = 1;
}
self.var_6C1E = var_00.var_6C1E;
var_01 = 1;
for(;;)
{
if(var_01)
{
var_01 = 0;
if(isdefined(var_00.targetname) || self.var_33A5)
{
self waittill("get new user");
}
}
if(!var_00.var_51F4)
{
var_00 waittill("enable mg42");
var_00.var_51F4 = 1;
}
var_02 = [];
var_03 = getaiarray();
for(var_04 = 0;var_04 < var_03.size;var_04++)
{
var_05 = 1;
if(isdefined(var_03[var_04].var_6C1E) && var_03[var_04].var_6C1E == self.var_6C1E)
{
var_05 = 0;
}
if(isdefined(var_03[var_04].var_87AC))
{
var_05 = 1;
}
if(var_05)
{
var_02[var_02.size] = var_03[var_04];
}
}
if(var_02.size)
{
var_03 = maps\_utility::func_3808(var_00.origin,undefined,var_02);
}
else
{
var_03 = maps\_utility::func_3807(var_00.origin,undefined);
}
var_02 = undefined;
if(isdefined(var_03))
{
var_03 notify("stop_going_to_node");
var_03 thread maps\_spawner::go_to_node(var_00);
var_03 waittill("death");
continue;
}
self waittill("get new user");
}
}
//Function Number: 18
mg42_think()
{
if(!isdefined(self.ai_mode))
{
self.ai_mode = "manual_ai";
}
var_00 = getnode(self.target,"targetname");
if(!isdefined(var_00))
{
}
var_01 = getent(var_00.target,"targetname");
var_01.var_59DA = var_00.origin;
if(isdefined(var_01.target))
{
if(!isdefined(level.var_51FD) || !isdefined(level.var_51FD[var_01.target]))
{
level.var_51FD[var_01.target] = 0;
getent(var_01.target,"targetname") thread func_51FD();
}
var_02 = 1;
}
else
{
var_02 = 0;
}
for(;;)
{
if(self.count == 0)
{
}
var_03 = undefined;
while(!isdefined(var_03))
{
var_03 = self dospawn();
wait(1);
}
var_03 thread mg42_gunner_think(var_01,var_02,self.ai_mode);
var_03 thread func_51F5(var_01);
var_03 waittill("death");
if(isdefined(self.script_delay))
{
wait(self.script_delay);
continue;
}
if(isdefined(self.script_delay_min) && isdefined(self.script_delay_max))
{
wait(self.script_delay_min + randomfloat(self.script_delay_max - self.script_delay_min));
continue;
}
wait(1);
}
}
//Function Number: 19
func_4AEB(param_00,param_01,param_02,param_03)
{
param_00 waittill(param_01);
if(isdefined(param_02))
{
param_02 delete();
}
if(isdefined(param_03))
{
param_03 delete();
}
}
//Function Number: 20
mg42_gunner_think(param_00,param_01,param_02)
{
self endon("death");
if(param_02 == "manual_ai")
{
for(;;)
{
thread mg42_gunner_manual_think(param_00,param_01);
self waittill("auto_ai");
func_546E(param_00,"auto_ai");
self waittill("manual_ai");
}
}
for(;;)
{
func_546E(param_00,"auto_ai",level.player);
self waittill("manual_ai");
thread mg42_gunner_manual_think(param_00,param_01);
self waittill("auto_ai");
}
}
//Function Number: 21
func_5EF2()
{
if(!isdefined(level.var_5DB9))
{
return 0;
}
if(level.player getstance() == "prone")
{
return 1;
}
if(level.var_5DBA == "cow" && level.player getstance() == "crouch")
{
return 1;
}
return 0;
}
//Function Number: 22
func_79C2()
{
if(level.player getstance() == "prone")
{
return (0,0,5);
}
else if(level.player getstance() == "crouch")
{
return (0,0,25);
}
return (0,0,50);
}
//Function Number: 23
mg42_gunner_manual_think(param_00,param_01)
{
self endon("death");
self endon("auto_ai");
self.pacifist = 1;
self setgoalpos(param_00.var_59DA);
self.goalradius = level.magic_distance;
self waittill("goal");
if(param_01)
{
if(!level.var_51FD[param_00.target])
{
level waittill(param_00.target);
}
}
self.pacifist = 0;
param_00 setmode("auto_ai");
param_00 cleartargetentity();
var_02 = spawn("script_origin",(0,0,0));
var_03 = spawn("script_model",(0,0,0));
var_03.scale = 3;
if(getdvar("mg42") != "off")
{
var_03 setmodel("temp");
}
var_03 thread func_8037(param_00,var_02);
level thread func_4AEB(self,"death",var_02,var_03);
level thread func_4AEB(self,"auto_ai",var_02,var_03);
param_00.var_5F45 = 0;
var_04 = 0;
var_05 = getentarray("mg42_target","targetname");
if(var_05.size > 0)
{
var_06 = 1;
var_07 = var_05[randomint(var_05.size)].origin;
thread func_7426(var_05);
func_546E(param_00);
self.target_entity = var_02;
param_00 setmode("manual_ai");
param_00 settargetentity(var_02);
param_00 notify("startfiring");
var_08 = 15;
var_09 = 0.08;
var_0A = 0.05;
var_02.origin = var_05[randomint(var_05.size)].origin;
var_0B = 0;
while(!isdefined(level.var_5DB9))
{
var_07 = var_02.origin;
if(distance(var_07,var_05[self.var_3DFF].origin) > var_08)
{
var_0C = vectornormalize(var_05[self.var_3DFF].origin - var_07);
var_0C = var_0C * var_08;
var_07 = var_07 + var_0C;
}
else
{
self notify("next_target");
}
var_02.origin = var_07;
wait(0.1);
}
for(;;)
{
for(var_0D = 0;var_0D < 1;var_0D = var_0D + var_0A)
{
var_02.origin = var_07 * 1 - var_0D + level.player getorigin() + func_79C2() * var_0D;
if(func_5EF2())
{
var_0D = 2;
}
wait(var_09);
}
var_0E = level.player getorigin();
while(!func_5EF2())
{
var_02.origin = level.player getorigin();
var_0F = var_02.origin - var_0E;
var_02.origin = var_02.origin + var_0F + func_79C2();
var_0E = level.player getorigin();
wait(0.1);
}
if(func_5EF2())
{
var_0B = gettime() + 1500 + randomfloat(4000);
while(func_5EF2() && isdefined(level.var_5DB9.target) && gettime() < var_0B)
{
var_10 = getentarray(level.var_5DB9.target,"targetname");
var_10 = var_10[randomint(var_10.size)];
var_02.origin = var_10.origin + (randomfloat(30) - 15,randomfloat(30) - 15,randomfloat(40) - 60);
wait(0.1);
}
}
self notify("next_target");
while(func_5EF2())
{
var_07 = var_02.origin;
if(distance(var_07,var_05[self.var_3DFF].origin) > var_08)
{
var_0C = vectornormalize(var_05[self.var_3DFF].origin - var_07);
var_0C = var_0C * var_08;
var_07 = var_07 + var_0C;
}
else
{
self notify("next_target");
}
var_02.origin = var_07;
wait(0.1);
}
}
}
for(;;)
{
func_546E(param_00);
while(!isdefined(level.var_5DB9))
{
if(!param_00.var_5F45)
{
param_00 settargetentity(level.player);
param_00.var_5F45 = 1;
var_03.var_7F3E = level.player;
}
wait(0.2);
}
param_00 setmode("manual_ai");
func_546E(param_00);
param_00 notify("startfiring");
var_0B = gettime() + 1500 + randomfloat(4000);
while(var_0B > gettime())
{
if(isdefined(level.var_5DB9))
{
var_10 = getentarray(level.var_5DB9.target,"targetname");
var_10 = var_10[randomint(var_10.size)];
var_02.origin = var_10.origin + (randomfloat(30) - 15,randomfloat(30) - 15,randomfloat(40) - 60);
param_00 settargetentity(var_02);
var_03.var_7F3E = var_02;
wait(randomfloat(1));
continue;
}
break;
}
param_00 notify("stopfiring");
func_546E(param_00);
if(param_00.var_5F45)
{
param_00 setmode("auto_ai");
param_00 cleartargetentity();
param_00.var_5F45 = 0;
var_03.var_7F3E = var_03;
var_03.origin = (0,0,0);
}
while(isdefined(level.var_5DB9))
{
wait(0.2);
}
wait(0.75 + randomfloat(0.2));
}
}
//Function Number: 24
func_7426(param_00)
{
self endon("death");
for(;;)
{
var_01 = [];
for(var_02 = 0;var_02 < param_00.size;var_02++)
{
var_01[var_02] = 0;
}
for(var_02 = 0;var_02 < param_00.size;var_02++)
{
self.var_3DFF = randomint(param_00.size);
self waittill("next_target");
while(var_01[self.var_3DFF])
{
self.var_3DFF++;
if(self.var_3DFF >= param_00.size)
{
self.var_3DFF = 0;
}
}
var_01[self.var_3DFF] = 1;
}
}
}
//Function Number: 25
func_546E(param_00,param_01,param_02)
{
self setgoalpos(param_00.var_59DA);
self.goalradius = level.magic_distance;
self waittill("goal");
if(isdefined(param_01) && param_01 == "auto_ai")
{
param_00 setmode("auto_ai");
if(isdefined(param_02))
{
param_00 settargetentity(param_02);
}
else
{
param_00 cleartargetentity();
}
}
self useturret(param_00);
}
//Function Number: 26
func_8037(param_00,param_01)
{
if(getdvar("mg42") == "off")
{
}
self.var_7F3E = self;
for(;;)
{
self.origin = param_01.origin;
wait(0.1);
}
}
//Function Number: 27
func_8514(param_00)
{
var_01 = getent(param_00.auto_mg42_target,"targetname");
var_02 = 0.5;
if(isdefined(var_01.var_6CE3))
{
var_02 = var_01.var_6CE3;
}
var_03 = 2;
if(isdefined(var_01.var_6CE2))
{
var_02 = var_01.var_6CE2;
}
for(;;)
{
var_01 waittill("turret_deactivate");
wait(var_02 + randomfloat(var_03 - var_02));
while(!isturretactive(var_01))
{
func_84DC(param_00,var_01);
wait(1);
}
}
}
//Function Number: 28
func_84DC(param_00,param_01)
{
var_02 = getaiarray();
for(var_03 = 0;var_03 < var_02.size;var_03++)
{
if(var_02[var_03] isingoal(param_00.origin) && var_02[var_03] canuseturret(param_01))
{
var_04 = var_02[var_03].keepclaimednodeifvalid;
var_02[var_03].keepclaimednodeifvalid = 0;
if(!var_02[var_03] usecovernode(param_00))
{
var_02[var_03].keepclaimednodeifvalid = var_04;
}
}
}
}
//Function Number: 29
func_701B()
{
init_mgturretsettings();
var_00 = getentarray("misc_turret","code_classname");
var_01 = maps\_utility::func_3A7F();
for(var_02 = 0;var_02 < var_00.size;var_02++)
{
if(isdefined(var_00[var_02].var_6CA5))
{
switch(var_00[var_02].var_6CA5)
{
case "easy":
var_01 = "easy";
break;
case "medium":
var_01 = "medium";
break;
case "hard":
var_01 = "hard";
break;
case "fu":
var_01 = "fu";
break;
default:
break;
}
}
mg42_setdifficulty(var_00[var_02],var_01);
}
}
//Function Number: 30
mg42_setdifficulty(param_00,param_01)
{
param_00.convergencetime = level.var_5211[param_01]["convergenceTime"];
param_00.var_7D6B = level.var_5211[param_01]["suppressionTime"];
param_00.accuracy = level.var_5211[param_01]["accuracy"];
param_00.var_AAC = level.var_5211[param_01]["aiSpread"];
param_00.var_5FDD = level.var_5211[param_01]["playerSpread"];
}
//Function Number: 31
func_51FB(param_00,param_01,param_02)
{
if(!isdefined(param_02))
{
param_02 = 0.88;
}
self endon("death");
self notify("stop_mg42_target_drones");
self endon("stop_mg42_target_drones");
self.var_2B18 = 0;
if(!isdefined(self.var_6BBA))
{
self.var_6BBA = 0;
}
if(!isdefined(param_00))
{
param_00 = 0;
}
self setmode("manual_ai");
var_03 = maps\_utility::func_3A7F();
if(!isdefined(level.var_2B22))
{
var_04 = 1;
}
else
{
var_04 = 0;
}
for(;;)
{
if(var_04)
{
if(isdefined(self.drones_targets_sets_to_default))
{
self setmode(self.defaultonmode);
}
else if(param_00)
{
self setmode("auto_nonai");
}
else
{
self setmode("auto_ai");
}
level waittill("new_drone");
}
if(!isdefined(self.var_58B8))
{
self.var_58B8 = self.convergencetime;
}
self.convergencetime = 2;
if(!param_00)
{
var_05 = self getturretowner();
if(!isalive(var_05) || isplayer(var_05))
{
wait(0.05);
continue;
}
else
{
param_01 = var_05.team;
}
}
else
{
var_05 = undefined;
}
if(param_01 == "allies")
{
var_06 = "axis";
}
else
{
var_06 = "allies";
}
while(level.var_2B22[var_06].var_4C6E)
{
common_scripts\utility::lock("mg42_drones");
if(!level.var_2B22[var_06].var_4C6E)
{
common_scripts\utility::unlock("mg42_drones");
break;
}
var_07 = func_37EB(var_06,param_02);
common_scripts\utility::unlock("mg42_drones");
if(!isdefined(self.var_6BBA) || !self.var_6BBA)
{
wait(0.05);
break;
}
if(!isdefined(var_07))
{
wait(0.05);
break;
}
if(isdefined(self.anim_wait_func))
{
[[ self.anim_wait_func ]]();
}
if(param_00)
{
self setmode("manual");
}
else
{
self setmode("manual_ai");
}
self settargetentity(var_07,(0,0,32));
func_2B0D(var_07,1,param_02);
self cleartargetentity();
self stopfiring();
if(!param_00 && !isdefined(self getturretowner()) && self getturretowner() == var_05)
{
break;
}
}
self.convergencetime = self.var_58B8;
self.var_58B8 = undefined;
self cleartargetentity();
self stopfiring();
if(level.var_2B22[var_06].var_4C6E)
{
var_04 = 0;
continue;
}
var_04 = 1;
}
}
//Function Number: 32
func_2B0D(param_00,param_01,param_02)
{
self endon("death");
param_00 endon("death");
var_03 = gettime() + param_01 * 1000;
var_04 = 0;
while(var_03 > gettime() || var_04)
{
common_scripts\utility::lock("mg42_drones_target_trace");
var_05 = self getturrettarget(1);
if(!bullettracepassed(self gettagorigin("tag_flash"),param_00.origin + (0,0,40),0,param_00))
{
common_scripts\utility::unlock("mg42_drones_target_trace");
break;
}
else if(isdefined(var_05) && distance(var_05.origin,self.origin) < distance(self.origin,param_00.origin))
{
common_scripts\utility::unlock("mg42_drones_target_trace");
break;
}
if(!var_04)
{
self startfiring();
var_04 = 1;
}
common_scripts\utility::func_85C4("mg42_drones_target_trace");
}
self stopfiring();
maps\_utility::func_7CFF(level.var_2B22[param_00.team],1);
}
//Function Number: 33
func_37EB(param_00,param_01)
{
if(level.var_2B22[param_00].var_4C6E < 1)
{
}
var_02 = undefined;
var_03 = anglestoforward(self.angles);
for(var_04 = 0;var_04 < level.var_2B22[param_00].var_4C6E;var_04++)
{
if(!isdefined(level.var_2B22[param_00].var_ED8[var_04]))
{
continue;
}
var_05 = vectortoangles(level.var_2B22[param_00].var_ED8[var_04].origin - self.origin);
var_06 = anglestoforward(var_05);
if(vectordot(var_03,var_06) < param_01)
{
continue;
}
var_02 = level.var_2B22[param_00].var_ED8[var_04];
if(!bullettracepassed(self gettagorigin("tag_flash"),var_02 getcentroid(),0,var_02))
{
var_02 = undefined;
continue;
}
break;
}
var_07 = self getturrettarget(1);
if(!isdefined(self.prefers_drones))
{
if(isdefined(var_02) && isdefined(var_07) && distancesquared(self.origin,var_07.origin) < distancesquared(self.origin,var_02.origin))
{
var_02 = undefined;
}
}
return var_02;
}
//Function Number: 34
saw_mgturretlink(param_00)
{
var_01 = getentarray("misc_turret","code_classname");
var_02 = [];
for(var_03 = 0;var_03 < var_01.size;var_03++)
{
if(isdefined(var_01[var_03].targetname))
{
continue;
}
if(isdefined(var_01[var_03].var_49B0))
{
continue;
}
var_02[var_01[var_03].origin + ""] = var_01[var_03];
}
if(!var_02.size)
{
}
for(var_04 = 0;var_04 < param_00.size;var_04++)
{
var_05 = param_00[var_04];
if(var_05.type == "Path")
{
continue;
}
if(var_05.type == "Begin")
{
continue;
}
if(var_05.type == "End")
{
continue;
}
var_06 = anglestoforward((0,var_05.angles[1],0));
foreach(var_0B, var_08 in var_02)
{
if(distance(var_05.origin,var_08.origin) > 50)
{
continue;
}
var_09 = anglestoforward((0,var_08.angles[1],0));
var_0A = vectordot(var_06,var_09);
if(var_0A < 0.9)
{
continue;
}
var_05.turretinfo = spawn("script_origin",var_08.origin);
var_05.turretinfo.angles = var_08.angles;
var_05.turretinfo.node = var_05;
var_05.turretinfo.leftarc = 45;
var_05.turretinfo.rightarc = 45;
var_05.turretinfo.toparc = 15;
var_05.turretinfo.bottomarc = 15;
if(isdefined(var_08.leftarc))
{
var_05.turretinfo.leftarc = min(var_08.leftarc,45);
}
if(isdefined(var_08.rightarc))
{
var_05.turretinfo.rightarc = min(var_08.rightarc,45);
}
if(isdefined(var_08.toparc))
{
var_05.turretinfo.toparc = min(var_08.toparc,15);
}
if(isdefined(var_08.bottomarc))
{
var_05.turretinfo.bottomarc = min(var_08.bottomarc,15);
}
var_02[var_0B] = undefined;
var_08 delete();
}
}
}
//Function Number: 35
func_11B1(param_00)
{
var_01 = getentarray("misc_turret","code_classname");
var_02 = [];
for(var_03 = 0;var_03 < var_01.size;var_03++)
{
if(!isdefined(var_01[var_03].targetname) || tolower(var_01[var_03].targetname) != "auto_mgturret")
{
continue;
}
if(!isdefined(var_01[var_03].var_30F7))
{
continue;
}
if(!isdefined(var_01[var_03].var_6B92))
{
var_02[var_01[var_03].origin + ""] = var_01[var_03];
}
}
if(!var_02.size)
{
}
for(var_04 = 0;var_04 < param_00.size;var_04++)
{
var_05 = param_00[var_04];
if(var_05.type == "Path")
{
continue;
}
if(var_05.type == "Begin")
{
continue;
}
if(var_05.type == "End")
{
continue;
}
var_06 = anglestoforward((0,var_05.angles[1],0));
var_07 = getarraykeys(var_02);
for(var_03 = 0;var_03 < var_07.size;var_03++)
{
var_08 = var_02[var_07[var_03]];
if(distance(var_05.origin,var_08.origin) > 70)
{
continue;
}
var_09 = anglestoforward((0,var_08.angles[1],0));
var_0A = vectordot(var_06,var_09);
if(var_0A < 0.9)
{
continue;
}
var_05.turret = var_08;
var_08.node = var_05;
var_08.issetup = 1;
var_02[var_07[var_03]] = undefined;
}
}
param_00 = undefined;
}
//Function Number: 36
save_turret_sharing_info()
{
self.shared_turrets = [];
self.shared_turrets["connected"] = [];
self.shared_turrets["ambush"] = [];
if(!isdefined(self.var_30F7))
{
}
level.var_73D7[self.var_30F7] = self;
if(isdefined(self.var_6CE4))
{
var_00 = strtok(self.var_6CE4," ");
for(var_01 = 0;var_01 < var_00.size;var_01++)
{
self.shared_turrets["connected"][var_00[var_01]] = 1;
}
}
if(isdefined(self.var_6CE1))
{
var_00 = strtok(self.var_6CE1," ");
for(var_01 = 0;var_01 < var_00.size;var_01++)
{
self.shared_turrets["ambush"][var_00[var_01]] = 1;
}
}
}
//Function Number: 37
func_665B()
{
self notify("gun_placed_again");
self endon("gun_placed_again");
self waittill("restore_default_drop_pitch");
wait(1);
self restoredefaultdroppitch();
}
//Function Number: 38
dropturret()
{
thread func_2B62();
}
//Function Number: 39
func_2B62()
{
var_00 = spawn("script_model",(0,0,0));
var_00.origin = self gettagorigin(level.var_60A3);
var_00.angles = self gettagangles(level.var_60A3);
var_00 setmodel(self.var_852D);
var_01 = anglestoforward(self.angles);
var_01 = var_01 * 100;
var_00 movegravity(var_01,0.5);
self detach(self.var_852D,level.var_60A3);
self.var_852D = undefined;
wait(0.7);
var_00 delete();
}
//Function Number: 40
func_8524()
{
self endon("kill_turret_detach_thread");
self endon("dropped_gun");
self waittill("death");
if(!isdefined(self))
{
}
dropturret();
}
//Function Number: 41
func_8525()
{
self endon("death");
self endon("kill_turret_detach_thread");
self waittill("dropped_gun");
self detach(self.var_852D,level.var_60A3);
}
//Function Number: 42
func_665C()
{
self.run_overrideanim = undefined;
common_scripts\utility::set_all_exceptions(::animscripts/init::empty);
}
//Function Number: 43
func_665F()
{
self waittill("turret_deactivate");
self restoredefaultdroppitch();
}
//Function Number: 44
func_8675(param_00)
{
self endon("death");
self endon("end_mg_behavior");
self endon("stop_updating_enemy_target_pos");
for(;;)
{
self waittill("saw_enemy");
param_00.origin = self.var_4BFE;
}
}
//Function Number: 45
func_545D(param_00,param_01)
{
self endon("death");
self endon("end_mg_behavior");
self endon("stop_updating_enemy_target_pos");
var_02 = self.turret.origin + (0,0,16);
var_03 = param_01.origin + (0,0,16);
for(;;)
{
wait(0.05);
if(sighttracepassed(param_00.origin,var_03,0,undefined))
{
continue;
}
var_04 = vectortoangles(var_02 - param_00.origin);
var_05 = anglestoforward(var_04);
var_05 = var_05 * 8;
param_00.origin = param_00.origin + var_05;
}
}
//Function Number: 46
func_640A(param_00)
{
self endon("death");
self endon("end_mg_behavior");
self endon("stop_updating_enemy_target_pos");
param_00.var_17BA = [];
for(;;)
{
param_00.var_17BA[param_00.var_17BA.size] = self.origin + (0,0,50);
wait(0.35);
}
}
//Function Number: 47
aim_turret_at_ambush_point_or_visible_enemy(param_00,param_01)
{
if(!isalive(self.current_enemy) && self cansee(self.current_enemy))
{
param_01.origin = self.var_4BFE;
}
var_02 = anglestoforward(param_00.angles);
for(var_03 = param_01.var_17BA.size - 3;var_03 >= 0;var_03--)
{
var_04 = param_01.var_17BA[var_03];
var_05 = vectornormalize(var_04 - param_00.origin);
var_06 = vectordot(var_02,var_05);
if(var_06 < 0.75)
{
continue;
}
param_01.origin = var_04;
if(sighttracepassed(param_00.origin,var_04,0,undefined))
{
continue;
}
break;
}
}
//Function Number: 48
func_3259(param_00)
{
var_01 = get_portable_mg_spot(param_00);
var_02 = var_01["spot"];
var_03 = var_01["type"];
if(!isdefined(var_02))
{
}
reserve_turret(var_02);
thread func_8675(param_00);
thread func_545D(param_00,var_02);
if(var_03 == "ambush")
{
thread func_640A(param_00);
}
if(var_02.issetup)
{
func_4D43(var_02);
}
else
{
func_5BF7(var_02);
run_to_new_spot_and_setup_gun(var_02);
}
self notify("stop_updating_enemy_target_pos");
if(var_03 == "ambush")
{
aim_turret_at_ambush_point_or_visible_enemy(var_02,param_00);
}
var_02 settargetentity(param_00);
}
//Function Number: 49
func_7654(param_00)
{
param_00 setmode("manual");
wait(0.5);
param_00 setmode("manual_ai");
}
//Function Number: 50
func_4D43(param_00)
{
self stopuseturret();
animscripts/shared::placeweaponon(self.primaryweapon,"none");
var_01 = get_turret_setup_anim(param_00);
var_02 = getstartorigin(param_00.origin,param_00.angles,var_01);
self setruntopos(var_02);
self waittill("runto_arrived");
func_879D(param_00);
}
//Function Number: 51
func_5BF7(param_00)
{
self stopuseturret();
self.turret hide_turret();
}
//Function Number: 52
get_turret_setup_anim(param_00)
{
var_01 = [];
var_01["saw_bipod_stand"] = level.var_5201["bipod_stand_setup"];
var_01["saw_bipod_crouch"] = level.var_5201["bipod_crouch_setup"];
var_01["saw_bipod_prone"] = level.var_5201["bipod_prone_setup"];
return var_01[param_00.weaponinfo];
}
//Function Number: 53
run_to_new_spot_and_setup_gun(param_00)
{
var_01 = self.health;
param_00 endon("turret_deactivate");
self.var_51F3 = param_00;
self endon("death");
self endon("dropped_gun");
var_02 = get_turret_setup_anim(param_00);
self.var_852D = "weapon_mg42_carry";
self notify("kill_get_gun_back_on_killanimscript_thread");
animscripts/shared::placeweaponon(self.weapon,"none");
if(self isbadguy())
{
self.health = 1;
}
self.run_overrideanim = %saw_gunner_run_fast;
self.crouchrun_combatanim = %saw_gunner_run_fast;
self attach(self.var_852D,level.var_60A3);
thread func_8524();
var_03 = getstartorigin(param_00.origin,param_00.angles,var_02);
self setruntopos(var_03);
wait(0.05);
common_scripts\utility::set_all_exceptions(::animscripts/combat::func_3045);
common_scripts\utility::clear_exception("move");
common_scripts\utility::func_6EB3("cover_crouch",::func_429A);
while(distance(self.origin,var_03) > 16)
{
self setruntopos(var_03);
wait(0.05);
}
self notify("kill_turret_detach_thread");
if(self isbadguy())
{
self.health = var_01;
}
if(soundexists("weapon_setup"))
{
thread common_scripts\utility::func_5D1F("weapon_setup");
}
self animscripted("setup_done",param_00.origin,param_00.angles,var_02);
func_665C();
self waittillmatch("end","setup_done");
param_00 notify("restore_default_drop_pitch");
param_00 func_7500();
animscripts/shared::placeweaponon(self.primaryweapon,"right");
func_879D(param_00);
self detach(self.var_852D,level.var_60A3);
common_scripts\utility::set_all_exceptions(::animscripts/init::empty);
self notify("bcs_portable_turret_setup");
}
//Function Number: 54
func_5463()
{
self setruntopos(self.var_69A6);
}
//Function Number: 55
func_429A()
{
self endon("killanimscript");
self waittill("death");
}
//Function Number: 56
func_87E2()
{
if(!isdefined(self.turret))
{
return 0;
}
return self.turret.owner == self;
}
//Function Number: 57
func_851C()
{
if(!func_87E2())
{
common_scripts\utility::clear_exception("move");
}
var_00 = find_connected_turrets("connected");
var_01 = var_00["spots"];
if(!var_01.size)
{
common_scripts\utility::clear_exception("move");
}
var_02 = self.node;
if(!isdefined(var_02) || !maps\_utility::func_4803(var_01,var_02))
{
var_03 = func_3C20();
for(var_04 = 0;var_04 < var_01.size;var_04++)
{
var_02 = common_scripts\utility::func_6306(var_01);
if(isdefined(var_03[var_02.origin + ""]))
{
}
}
}
var_05 = var_02.turret;
if(isdefined(var_05.reserved))
{
}
reserve_turret(var_05);
if(var_05.issetup)
{
func_4D43(var_05);
}
else
{
run_to_new_spot_and_setup_gun(var_05);
}
maps\_mg_penetration::func_3E14(var_02.turret);
}
//Function Number: 58
func_879D(param_00)
{
var_01 = self useturret(param_00);
if(var_01)
{
common_scripts\utility::func_6EB3("move",::func_851C);
self.turret = param_00;
thread func_51F5(param_00);
param_00 setmode("manual_ai");
param_00 thread func_665F();
self.turret = param_00;
param_00.owner = self;
return 1;
}
param_00 restoredefaultdroppitch();
return 0;
}
//Function Number: 59
get_portable_mg_spot(param_00)
{
var_01 = [];
var_01[var_01.size] = ::find_different_way_to_attack_last_seen_position;
var_01[var_01.size] = ::func_326D;
var_01 = common_scripts\utility::array_randomize(var_01);
for(var_02 = 0;var_02 < var_01.size;var_02++)
{
var_03 = [[ var_01[var_02] ]](param_00);
if(!isdefined(var_03["spots"]))
{
continue;
}
var_03["spot"] = common_scripts\utility::func_6306(var_03["spots"]);
return var_03;
}
}
//Function Number: 60
func_3C20()
{
var_00 = [];
var_01 = getaiarray();
for(var_02 = 0;var_02 < var_01.size;var_02++)
{
if(!isdefined(var_01[var_02].node))
{
continue;
}
var_00[var_01[var_02].node.origin + ""] = 1;
}
return var_00;
}
//Function Number: 61
find_connected_turrets(param_00)
{
var_01 = level.var_73D7;
var_02 = [];
var_03 = getarraykeys(var_01);
var_04 = func_3C20();
var_04[self.node.origin + ""] = undefined;
for(var_05 = 0;var_05 < var_03.size;var_05++)
{
var_06 = var_03[var_05];
if(var_01[var_06] == self.turret)
{
continue;
}
var_07 = getarraykeys(self.turret.shared_turrets[param_00]);
for(var_08 = 0;var_08 < var_07.size;var_08++)
{
if(var_01[var_06].var_30F7 + "" != var_07[var_08])
{
continue;
}
if(isdefined(var_01[var_06].reserved))
{
continue;
}
if(isdefined(var_04[var_01[var_06].node.origin + ""]))
{
continue;
}
if(distance(self.goalpos,var_01[var_06].origin) > self.goalradius)
{
continue;
}
var_02[var_02.size] = var_01[var_06];
}
}
var_09 = [];
var_09["type"] = param_00;
var_09["spots"] = var_02;
return var_09;
}
//Function Number: 62
func_326D(param_00)
{
return find_connected_turrets("ambush");
}
//Function Number: 63
find_different_way_to_attack_last_seen_position(param_00)
{
var_01 = find_connected_turrets("connected");
var_02 = var_01["spots"];
if(!var_02.size)
{
}
var_03 = [];
for(var_04 = 0;var_04 < var_02.size;var_04++)
{
if(!common_scripts\utility::func_8E18(var_02[var_04].origin,var_02[var_04].angles,param_00.origin,0.75))
{
continue;
}
if(!sighttracepassed(param_00.origin,var_02[var_04].origin + (0,0,16),0,undefined))
{
continue;
}
var_03[var_03.size] = var_02[var_04];
}
var_01["spots"] = var_03;
return var_01;
}
//Function Number: 64
func_60A4()
{
save_turret_sharing_info();
var_00 = 1;
self.issetup = 1;
self.reserved = undefined;
if(isdefined(self.var_49B0))
{
}
if(self.spawnflags & var_00)
{
}
hide_turret();
}
//Function Number: 65
hide_turret()
{
self notify("stop_checking_for_flanking");
self.issetup = 0;
self hide();
self.var_76BA = 0;
self makeunusable();
self setdefaultdroppitch(0);
thread func_665B();
}
//Function Number: 66
func_7500()
{
self show();
self.var_76BA = 1;
self makeusable();
self.issetup = 1;
thread func_7C3A();
}
//Function Number: 67
func_7C3A()
{
self endon("stop_checking_for_flanking");
self waittill("turret_deactivate");
if(isalive(self.owner))
{
self.owner notify("end_mg_behavior");
}
}
//Function Number: 68
func_84EE(param_00)
{
var_01 = param_00 getturretowner();
if(!isdefined(var_01))
{
return 0;
}
return var_01 == self;
}
//Function Number: 69
end_turret_reservation(param_00)
{
func_8BAA(param_00);
param_00.reserved = undefined;
}
//Function Number: 70
func_8BAA(param_00)
{
param_00 endon("turret_deactivate");
self endon("death");
self waittill("end_mg_behavior");
}
//Function Number: 71
reserve_turret(param_00)
{
param_00.reserved = self;
thread end_turret_reservation(param_00);
}